DIR : /home/kozerus/public_html/ko/dd.html

/home/kozerus/public_html/ko


<!--
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
	<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
	<script type="text/javascript" src="/sl/bg/jquery.easing.1.3.js"></script>
	<script type="text/javascript" src="/sl/bg/jquery.mousewheel.min.js"></script>
	<script type="text/javascript" src="/zm/ZoomifyImageViewer.js"></script>
	-->


	<script  id= "script_sl_jquery_js" type="text/javascript" src="data:/text/plain;base64,LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNC40CiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMCwgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBUaHUgTm92IDExIDE5OjA0OjUzIDIwMTAgLTA1MDAKICovCihmdW5jdGlvbihFLEIpe2Z1bmN0aW9uIGthKGEsYixkKXtpZihkPT09QiYmYS5ub2RlVHlwZT09PTEpe2Q9YS5nZXRBdHRyaWJ1dGUoImRhdGEtIitiKTtpZih0eXBlb2YgZD09PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiP3RydWU6ZD09PSJmYWxzZSI/ZmFsc2U6ZD09PSJudWxsIj9udWxsOiFjLmlzTmFOKGQpP3BhcnNlRmxvYXQoZCk6SmEudGVzdChkKT9jLnBhcnNlSlNPTihkKTpkfWNhdGNoKGUpe31jLmRhdGEoYSxiLGQpfWVsc2UgZD1CfXJldHVybiBkfWZ1bmN0aW9uIFUoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gY2EoKXtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBsYShhLGIsZCl7ZFswXS50eXBlPWE7cmV0dXJuIGMuZXZlbnQuaGFuZGxlLmFwcGx5KGIsZCl9ZnVuY3Rpb24gS2EoYSl7dmFyIGIsZCxlLGYsaCxsLGssbyx4LHIsQSxDPVtdO2Y9W107aD1jLmRhdGEodGhpcyx0aGlzLm5vZGVUeXBlPyJldmVudHMiOiJfX2V2ZW50c19fIik7aWYodHlwZW9mIGg9PT0iZnVuY3Rpb24iKWg9CmguZXZlbnRzO2lmKCEoYS5saXZlRmlyZWQ9PT10aGlzfHwhaHx8IWgubGl2ZXx8YS5idXR0b24mJmEudHlwZT09PSJjbGljayIpKXtpZihhLm5hbWVzcGFjZSlBPVJlZ0V4cCgiKF58XFwuKSIrYS5uYW1lc3BhY2Uuc3BsaXQoIi4iKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTthLmxpdmVGaXJlZD10aGlzO3ZhciBKPWgubGl2ZS5zbGljZSgwKTtmb3Ioaz0wO2s8Si5sZW5ndGg7aysrKXtoPUpba107aC5vcmlnVHlwZS5yZXBsYWNlKFgsIiIpPT09YS50eXBlP2YucHVzaChoLnNlbGVjdG9yKTpKLnNwbGljZShrLS0sMSl9Zj1jKGEudGFyZ2V0KS5jbG9zZXN0KGYsYS5jdXJyZW50VGFyZ2V0KTtvPTA7Zm9yKHg9Zi5sZW5ndGg7bzx4O28rKyl7cj1mW29dO2ZvcihrPTA7azxKLmxlbmd0aDtrKyspe2g9SltrXTtpZihyLnNlbGVjdG9yPT09aC5zZWxlY3RvciYmKCFBfHxBLnRlc3QoaC5uYW1lc3BhY2UpKSl7bD1yLmVsZW07ZT1udWxsO2lmKGgucHJlVHlwZT09PSJtb3VzZWVudGVyInx8CmgucHJlVHlwZT09PSJtb3VzZWxlYXZlIil7YS50eXBlPWgucHJlVHlwZTtlPWMoYS5yZWxhdGVkVGFyZ2V0KS5jbG9zZXN0KGguc2VsZWN0b3IpWzBdfWlmKCFlfHxlIT09bClDLnB1c2goe2VsZW06bCxoYW5kbGVPYmo6aCxsZXZlbDpyLmxldmVsfSl9fX1vPTA7Zm9yKHg9Qy5sZW5ndGg7bzx4O28rKyl7Zj1DW29dO2lmKGQmJmYubGV2ZWw+ZClicmVhazthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtO2EuZGF0YT1mLmhhbmRsZU9iai5kYXRhO2EuaGFuZGxlT2JqPWYuaGFuZGxlT2JqO0E9Zi5oYW5kbGVPYmoub3JpZ0hhbmRsZXIuYXBwbHkoZi5lbGVtLGFyZ3VtZW50cyk7aWYoQT09PWZhbHNlfHxhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2Q9Zi5sZXZlbDtpZihBPT09ZmFsc2UpYj1mYWxzZTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWt9fXJldHVybiBifX1mdW5jdGlvbiBZKGEsYil7cmV0dXJuKGEmJmEhPT0iKiI/YSsiLiI6IiIpK2IucmVwbGFjZShMYSwKImAiKS5yZXBsYWNlKE1hLCImIil9ZnVuY3Rpb24gbWEoYSxiLGQpe2lmKGMuaXNGdW5jdGlvbihiKSlyZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZixoKXtyZXR1cm4hIWIuY2FsbChmLGgsZik9PT1kfSk7ZWxzZSBpZihiLm5vZGVUeXBlKXJldHVybiBjLmdyZXAoYSxmdW5jdGlvbihmKXtyZXR1cm4gZj09PWI9PT1kfSk7ZWxzZSBpZih0eXBlb2YgYj09PSJzdHJpbmciKXt2YXIgZT1jLmdyZXAoYSxmdW5jdGlvbihmKXtyZXR1cm4gZi5ub2RlVHlwZT09PTF9KTtpZihOYS50ZXN0KGIpKXJldHVybiBjLmZpbHRlcihiLGUsIWQpO2Vsc2UgYj1jLmZpbHRlcihiLGUpfXJldHVybiBjLmdyZXAoYSxmdW5jdGlvbihmKXtyZXR1cm4gYy5pbkFycmF5KGYsYik+PTA9PT1kfSl9ZnVuY3Rpb24gbmEoYSxiKXt2YXIgZD0wO2IuZWFjaChmdW5jdGlvbigpe2lmKHRoaXMubm9kZU5hbWU9PT0oYVtkXSYmYVtkXS5ub2RlTmFtZSkpe3ZhciBlPWMuZGF0YShhW2QrK10pLGY9Yy5kYXRhKHRoaXMsCmUpO2lmKGU9ZSYmZS5ldmVudHMpe2RlbGV0ZSBmLmhhbmRsZTtmLmV2ZW50cz17fTtmb3IodmFyIGggaW4gZSlmb3IodmFyIGwgaW4gZVtoXSljLmV2ZW50LmFkZCh0aGlzLGgsZVtoXVtsXSxlW2hdW2xdLmRhdGEpfX19KX1mdW5jdGlvbiBPYShhLGIpe2Iuc3JjP2MuYWpheCh7dXJsOmIuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk6Yy5nbG9iYWxFdmFsKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKTtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBvYShhLGIsZCl7dmFyIGU9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodDtpZihkPT09ImJvcmRlciIpcmV0dXJuIGU7Yy5lYWNoKGI9PT0id2lkdGgiP1BhOlFhLGZ1bmN0aW9uKCl7ZHx8KGUtPXBhcnNlRmxvYXQoYy5jc3MoYSwicGFkZGluZyIrdGhpcykpfHwwKTtpZihkPT09Im1hcmdpbiIpZSs9cGFyc2VGbG9hdChjLmNzcyhhLAoibWFyZ2luIit0aGlzKSl8fDA7ZWxzZSBlLT1wYXJzZUZsb2F0KGMuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZX1mdW5jdGlvbiBkYShhLGIsZCxlKXtpZihjLmlzQXJyYXkoYikmJmIubGVuZ3RoKWMuZWFjaChiLGZ1bmN0aW9uKGYsaCl7ZHx8UmEudGVzdChhKT9lKGEsaCk6ZGEoYSsiWyIrKHR5cGVvZiBoPT09Im9iamVjdCJ8fGMuaXNBcnJheShoKT9mOiIiKSsiXSIsaCxkLGUpfSk7ZWxzZSBpZighZCYmYiE9bnVsbCYmdHlwZW9mIGI9PT0ib2JqZWN0IiljLmlzRW1wdHlPYmplY3QoYik/ZShhLCIiKTpjLmVhY2goYixmdW5jdGlvbihmLGgpe2RhKGErIlsiK2YrIl0iLGgsZCxlKX0pO2Vsc2UgZShhLGIpfWZ1bmN0aW9uIFMoYSxiKXt2YXIgZD17fTtjLmVhY2gocGEuY29uY2F0LmFwcGx5KFtdLHBhLnNsaWNlKDAsYikpLGZ1bmN0aW9uKCl7ZFt0aGlzXT1hfSk7cmV0dXJuIGR9ZnVuY3Rpb24gcWEoYSl7aWYoIWVhW2FdKXt2YXIgYj1jKCI8IisKYSsiPiIpLmFwcGVuZFRvKCJib2R5IiksZD1iLmNzcygiZGlzcGxheSIpO2IucmVtb3ZlKCk7aWYoZD09PSJub25lInx8ZD09PSIiKWQ9ImJsb2NrIjtlYVthXT1kfXJldHVybiBlYVthXX1mdW5jdGlvbiBmYShhKXtyZXR1cm4gYy5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OmZhbHNlfXZhciB0PUUuZG9jdW1lbnQsYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtpZighYi5pc1JlYWR5KXt0cnl7dC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChqKXtzZXRUaW1lb3V0KGEsMSk7cmV0dXJufWIucmVhZHkoKX19dmFyIGI9ZnVuY3Rpb24oaixzKXtyZXR1cm4gbmV3IGIuZm4uaW5pdChqLHMpfSxkPUUualF1ZXJ5LGU9RS4kLGYsaD0vXig/OltePF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0rKSQpLyxsPS9cUy8saz0vXlxzKy8sbz0vXHMrJC8seD0vXFcvLHI9L1xkLyxBPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sCkM9L15bXF0sOnt9XHNdKiQvLEo9L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyx3PS8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxJPS8oPzpefDp8LCkoPzpccypcWykrL2csTD0vKHdlYmtpdClbIFwvXShbXHcuXSspLyxnPS8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyxpPS8obXNpZSkgKFtcdy5dKykvLG49Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/LyxtPW5hdmlnYXRvci51c2VyQWdlbnQscD1mYWxzZSxxPVtdLHUseT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxNPUFycmF5LnByb3RvdHlwZS5wdXNoLE49QXJyYXkucHJvdG90eXBlLnNsaWNlLE89U3RyaW5nLnByb3RvdHlwZS50cmltLEQ9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsUj17fTtiLmZuPWIucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGosCnMpe3ZhciB2LHosSDtpZighailyZXR1cm4gdGhpcztpZihqLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9dGhpc1swXT1qO3RoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoaj09PSJib2R5IiYmIXMmJnQuYm9keSl7dGhpcy5jb250ZXh0PXQ7dGhpc1swXT10LmJvZHk7dGhpcy5zZWxlY3Rvcj0iYm9keSI7dGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2Ygaj09PSJzdHJpbmciKWlmKCh2PWguZXhlYyhqKSkmJih2WzFdfHwhcykpaWYodlsxXSl7SD1zP3Mub3duZXJEb2N1bWVudHx8czp0O2lmKHo9QS5leGVjKGopKWlmKGIuaXNQbGFpbk9iamVjdChzKSl7aj1bdC5jcmVhdGVFbGVtZW50KHpbMV0pXTtiLmZuLmF0dHIuY2FsbChqLHMsdHJ1ZSl9ZWxzZSBqPVtILmNyZWF0ZUVsZW1lbnQoelsxXSldO2Vsc2V7ej1iLmJ1aWxkRnJhZ21lbnQoW3ZbMV1dLFtIXSk7aj0oei5jYWNoZWFibGU/ei5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk6ei5mcmFnbWVudCkuY2hpbGROb2Rlc31yZXR1cm4gYi5tZXJnZSh0aGlzLApqKX1lbHNle2lmKCh6PXQuZ2V0RWxlbWVudEJ5SWQodlsyXSkpJiZ6LnBhcmVudE5vZGUpe2lmKHouaWQhPT12WzJdKXJldHVybiBmLmZpbmQoaik7dGhpcy5sZW5ndGg9MTt0aGlzWzBdPXp9dGhpcy5jb250ZXh0PXQ7dGhpcy5zZWxlY3Rvcj1qO3JldHVybiB0aGlzfWVsc2UgaWYoIXMmJiF4LnRlc3Qoaikpe3RoaXMuc2VsZWN0b3I9ajt0aGlzLmNvbnRleHQ9dDtqPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaik7cmV0dXJuIGIubWVyZ2UodGhpcyxqKX1lbHNlIHJldHVybiFzfHxzLmpxdWVyeT8oc3x8ZikuZmluZChqKTpiKHMpLmZpbmQoaik7ZWxzZSBpZihiLmlzRnVuY3Rpb24oaikpcmV0dXJuIGYucmVhZHkoaik7aWYoai5zZWxlY3RvciE9PUIpe3RoaXMuc2VsZWN0b3I9ai5zZWxlY3Rvcjt0aGlzLmNvbnRleHQ9ai5jb250ZXh0fXJldHVybiBiLm1ha2VBcnJheShqLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNC40IixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSwKdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBOLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGope3JldHVybiBqPT1udWxsP3RoaXMudG9BcnJheSgpOmo8MD90aGlzLnNsaWNlKGopWzBdOnRoaXNbal19LHB1c2hTdGFjazpmdW5jdGlvbihqLHMsdil7dmFyIHo9YigpO2IuaXNBcnJheShqKT9NLmFwcGx5KHosaik6Yi5tZXJnZSh6LGopO3oucHJldk9iamVjdD10aGlzO3ouY29udGV4dD10aGlzLmNvbnRleHQ7aWYocz09PSJmaW5kIil6LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKSt2O2Vsc2UgaWYocyl6LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK3MrIigiK3YrIikiO3JldHVybiB6fSxlYWNoOmZ1bmN0aW9uKGoscyl7cmV0dXJuIGIuZWFjaCh0aGlzLGoscyl9LHJlYWR5OmZ1bmN0aW9uKGope2IuYmluZFJlYWR5KCk7aWYoYi5pc1JlYWR5KWouY2FsbCh0LGIpO2Vsc2UgcSYmcS5wdXNoKGopO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihqKXtyZXR1cm4gaj09PQotMT90aGlzLnNsaWNlKGopOnRoaXMuc2xpY2UoaiwraisxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soTi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixOLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGIubWFwKHRoaXMsZnVuY3Rpb24ocyx2KXtyZXR1cm4gai5jYWxsKHMsdixzKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8YihudWxsKX0scHVzaDpNLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfTtiLmZuLmluaXQucHJvdG90eXBlPWIuZm47Yi5leHRlbmQ9Yi5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgaixzLHYseixILEc9YXJndW1lbnRzWzBdfHx7fSxLPTEsUT1hcmd1bWVudHMubGVuZ3RoLGdhPWZhbHNlOwppZih0eXBlb2YgRz09PSJib29sZWFuIil7Z2E9RztHPWFyZ3VtZW50c1sxXXx8e307Sz0yfWlmKHR5cGVvZiBHIT09Im9iamVjdCImJiFiLmlzRnVuY3Rpb24oRykpRz17fTtpZihRPT09Syl7Rz10aGlzOy0tS31mb3IoO0s8UTtLKyspaWYoKGo9YXJndW1lbnRzW0tdKSE9bnVsbClmb3IocyBpbiBqKXt2PUdbc107ej1qW3NdO2lmKEchPT16KWlmKGdhJiZ6JiYoYi5pc1BsYWluT2JqZWN0KHopfHwoSD1iLmlzQXJyYXkoeikpKSl7aWYoSCl7SD1mYWxzZTt2PXYmJmIuaXNBcnJheSh2KT92OltdfWVsc2Ugdj12JiZiLmlzUGxhaW5PYmplY3Qodik/djp7fTtHW3NdPWIuZXh0ZW5kKGdhLHYseil9ZWxzZSBpZih6IT09QilHW3NdPXp9cmV0dXJuIEd9O2IuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGope0UuJD1lO2lmKGopRS5qUXVlcnk9ZDtyZXR1cm4gYn0saXNSZWFkeTpmYWxzZSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihqKXtqPT09dHJ1ZSYmYi5yZWFkeVdhaXQtLTsKaWYoIWIucmVhZHlXYWl0fHxqIT09dHJ1ZSYmIWIuaXNSZWFkeSl7aWYoIXQuYm9keSlyZXR1cm4gc2V0VGltZW91dChiLnJlYWR5LDEpO2IuaXNSZWFkeT10cnVlO2lmKCEoaiE9PXRydWUmJi0tYi5yZWFkeVdhaXQ+MCkpaWYocSl7dmFyIHM9MCx2PXE7Zm9yKHE9bnVsbDtqPXZbcysrXTspai5jYWxsKHQsYik7Yi5mbi50cmlnZ2VyJiZiKHQpLnRyaWdnZXIoInJlYWR5IikudW5iaW5kKCJyZWFkeSIpfX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFwKXtwPXRydWU7aWYodC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIilyZXR1cm4gc2V0VGltZW91dChiLnJlYWR5LDEpO2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil7dC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix1LGZhbHNlKTtFLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGIucmVhZHksZmFsc2UpfWVsc2UgaWYodC5hdHRhY2hFdmVudCl7dC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIix1KTtFLmF0dGFjaEV2ZW50KCJvbmxvYWQiLApiLnJlYWR5KTt2YXIgaj1mYWxzZTt0cnl7aj1FLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChzKXt9dC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmomJmEoKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGope3JldHVybiBiLnR5cGUoaik9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGope3JldHVybiBiLnR5cGUoaik9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihqKXtyZXR1cm4gaiYmdHlwZW9mIGo9PT0ib2JqZWN0IiYmInNldEludGVydmFsImluIGp9LGlzTmFOOmZ1bmN0aW9uKGope3JldHVybiBqPT1udWxsfHwhci50ZXN0KGopfHxpc05hTihqKX0sdHlwZTpmdW5jdGlvbihqKXtyZXR1cm4gaj09bnVsbD9TdHJpbmcoaik6Ult5LmNhbGwoaildfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihqKXtpZighanx8Yi50eXBlKGopIT09Im9iamVjdCJ8fGoubm9kZVR5cGV8fGIuaXNXaW5kb3coaikpcmV0dXJuIGZhbHNlO2lmKGouY29uc3RydWN0b3ImJgohRi5jYWxsKGosImNvbnN0cnVjdG9yIikmJiFGLmNhbGwoai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4gZmFsc2U7Zm9yKHZhciBzIGluIGopO3JldHVybiBzPT09Qnx8Ri5jYWxsKGoscyl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oail7Zm9yKHZhciBzIGluIGopcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxlcnJvcjpmdW5jdGlvbihqKXt0aHJvdyBqO30scGFyc2VKU09OOmZ1bmN0aW9uKGope2lmKHR5cGVvZiBqIT09InN0cmluZyJ8fCFqKXJldHVybiBudWxsO2o9Yi50cmltKGopO2lmKEMudGVzdChqLnJlcGxhY2UoSiwiQCIpLnJlcGxhY2UodywiXSIpLnJlcGxhY2UoSSwiIikpKXJldHVybiBFLkpTT04mJkUuSlNPTi5wYXJzZT9FLkpTT04ucGFyc2Uoaik6KG5ldyBGdW5jdGlvbigicmV0dXJuICIraikpKCk7ZWxzZSBiLmVycm9yKCJJbnZhbGlkIEpTT046ICIrail9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oail7aWYoaiYmCmwudGVzdChqKSl7dmFyIHM9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHx0LmRvY3VtZW50RWxlbWVudCx2PXQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7di50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO2lmKGIuc3VwcG9ydC5zY3JpcHRFdmFsKXYuYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZShqKSk7ZWxzZSB2LnRleHQ9ajtzLmluc2VydEJlZm9yZSh2LHMuZmlyc3RDaGlsZCk7cy5yZW1vdmVDaGlsZCh2KX19LG5vZGVOYW1lOmZ1bmN0aW9uKGoscyl7cmV0dXJuIGoubm9kZU5hbWUmJmoubm9kZU5hbWUudG9VcHBlckNhc2UoKT09PXMudG9VcHBlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihqLHMsdil7dmFyIHosSD0wLEc9ai5sZW5ndGgsSz1HPT09Qnx8Yi5pc0Z1bmN0aW9uKGopO2lmKHYpaWYoSylmb3IoeiBpbiBqKXtpZihzLmFwcGx5KGpbel0sdik9PT1mYWxzZSlicmVha31lbHNlIGZvcig7SDxHOyl7aWYocy5hcHBseShqW0grK10sdik9PT1mYWxzZSlicmVha31lbHNlIGlmKEspZm9yKHogaW4gail7aWYocy5jYWxsKGpbel0sCnosalt6XSk9PT1mYWxzZSlicmVha31lbHNlIGZvcih2PWpbMF07SDxHJiZzLmNhbGwodixILHYpIT09ZmFsc2U7dj1qWysrSF0pO3JldHVybiBqfSx0cmltOk8/ZnVuY3Rpb24oail7cmV0dXJuIGo9PW51bGw/IiI6Ty5jYWxsKGopfTpmdW5jdGlvbihqKXtyZXR1cm4gaj09bnVsbD8iIjpqLnRvU3RyaW5nKCkucmVwbGFjZShrLCIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oaixzKXt2YXIgdj1zfHxbXTtpZihqIT1udWxsKXt2YXIgej1iLnR5cGUoaik7ai5sZW5ndGg9PW51bGx8fHo9PT0ic3RyaW5nInx8ej09PSJmdW5jdGlvbiJ8fHo9PT0icmVnZXhwInx8Yi5pc1dpbmRvdyhqKT9NLmNhbGwodixqKTpiLm1lcmdlKHYsail9cmV0dXJuIHZ9LGluQXJyYXk6ZnVuY3Rpb24oaixzKXtpZihzLmluZGV4T2YpcmV0dXJuIHMuaW5kZXhPZihqKTtmb3IodmFyIHY9MCx6PXMubGVuZ3RoO3Y8ejt2KyspaWYoc1t2XT09PWopcmV0dXJuIHY7cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGosCnMpe3ZhciB2PWoubGVuZ3RoLHo9MDtpZih0eXBlb2Ygcy5sZW5ndGg9PT0ibnVtYmVyIilmb3IodmFyIEg9cy5sZW5ndGg7ejxIO3orKylqW3YrK109c1t6XTtlbHNlIGZvcig7c1t6XSE9PUI7KWpbdisrXT1zW3orK107ai5sZW5ndGg9djtyZXR1cm4gan0sZ3JlcDpmdW5jdGlvbihqLHMsdil7dmFyIHo9W10sSDt2PSEhdjtmb3IodmFyIEc9MCxLPWoubGVuZ3RoO0c8SztHKyspe0g9ISFzKGpbR10sRyk7diE9PUgmJnoucHVzaChqW0ddKX1yZXR1cm4gen0sbWFwOmZ1bmN0aW9uKGoscyx2KXtmb3IodmFyIHo9W10sSCxHPTAsSz1qLmxlbmd0aDtHPEs7RysrKXtIPXMoaltHXSxHLHYpO2lmKEghPW51bGwpelt6Lmxlbmd0aF09SH1yZXR1cm4gei5jb25jYXQuYXBwbHkoW10seil9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihqLHMsdil7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpaWYodHlwZW9mIHM9PT0ic3RyaW5nIil7dj1qO2o9dltzXTtzPUJ9ZWxzZSBpZihzJiYhYi5pc0Z1bmN0aW9uKHMpKXt2PQpzO3M9Qn1pZighcyYmailzPWZ1bmN0aW9uKCl7cmV0dXJuIGouYXBwbHkodnx8dGhpcyxhcmd1bWVudHMpfTtpZihqKXMuZ3VpZD1qLmd1aWQ9ai5ndWlkfHxzLmd1aWR8fGIuZ3VpZCsrO3JldHVybiBzfSxhY2Nlc3M6ZnVuY3Rpb24oaixzLHYseixILEcpe3ZhciBLPWoubGVuZ3RoO2lmKHR5cGVvZiBzPT09Im9iamVjdCIpe2Zvcih2YXIgUSBpbiBzKWIuYWNjZXNzKGosUSxzW1FdLHosSCx2KTtyZXR1cm4gan1pZih2IT09Qil7ej0hRyYmeiYmYi5pc0Z1bmN0aW9uKHYpO2ZvcihRPTA7UTxLO1ErKylIKGpbUV0scyx6P3YuY2FsbChqW1FdLFEsSChqW1FdLHMpKTp2LEcpO3JldHVybiBqfXJldHVybiBLP0goalswXSxzKTpCfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihqKXtqPWoudG9Mb3dlckNhc2UoKTtqPUwuZXhlYyhqKXx8Zy5leGVjKGopfHxpLmV4ZWMoail8fGouaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJm4uZXhlYyhqKXx8CltdO3JldHVybnticm93c2VyOmpbMV18fCIiLHZlcnNpb246alsyXXx8IjAifX0sYnJvd3Nlcjp7fX0pO2IuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihqLHMpe1JbIltvYmplY3QgIitzKyJdIl09cy50b0xvd2VyQ2FzZSgpfSk7bT1iLnVhTWF0Y2gobSk7aWYobS5icm93c2VyKXtiLmJyb3dzZXJbbS5icm93c2VyXT10cnVlO2IuYnJvd3Nlci52ZXJzaW9uPW0udmVyc2lvbn1pZihiLmJyb3dzZXIud2Via2l0KWIuYnJvd3Nlci5zYWZhcmk9dHJ1ZTtpZihEKWIuaW5BcnJheT1mdW5jdGlvbihqLHMpe3JldHVybiBELmNhbGwocyxqKX07aWYoIS9ccy8udGVzdCgiXHUwMGEwIikpe2s9L15bXHNceEEwXSsvO289L1tcc1x4QTBdKyQvfWY9Yih0KTtpZih0LmFkZEV2ZW50TGlzdGVuZXIpdT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsdSwKZmFsc2UpO2IucmVhZHkoKX07ZWxzZSBpZih0LmF0dGFjaEV2ZW50KXU9ZnVuY3Rpb24oKXtpZih0LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXt0LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHUpO2IucmVhZHkoKX19O3JldHVybiBFLmpRdWVyeT1FLiQ9Yn0oKTsoZnVuY3Rpb24oKXtjLnN1cHBvcnQ9e307dmFyIGE9dC5kb2N1bWVudEVsZW1lbnQsYj10LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQ9dC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPSJzY3JpcHQiK2Mubm93KCk7ZC5zdHlsZS5kaXNwbGF5PSJub25lIjtkLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGg9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGw9dC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSwKaz1sLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpO2lmKCEoIWZ8fCFmLmxlbmd0aHx8IWgpKXtjLnN1cHBvcnQ9e2xlYWRpbmdXaGl0ZXNwYWNlOmQuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi9yZWQvLnRlc3QoaC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOmguZ2V0QXR0cmlidXRlKCJocmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjU1JC8udGVzdChoLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhaC5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0udmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmsuc2VsZWN0ZWQsZGVsZXRlRXhwYW5kbzp0cnVlLG9wdERpc2FibGVkOmZhbHNlLGNoZWNrQ2xvbmU6ZmFsc2UsCnNjcmlwdEV2YWw6ZmFsc2Usbm9DbG9uZUV2ZW50OnRydWUsYm94TW9kZWw6bnVsbCxpbmxpbmVCbG9ja05lZWRzTGF5b3V0OmZhbHNlLHNocmlua1dyYXBCbG9ja3M6ZmFsc2UscmVsaWFibGVIaWRkZW5PZmZzZXRzOnRydWV9O2wuZGlzYWJsZWQ9dHJ1ZTtjLnN1cHBvcnQub3B0RGlzYWJsZWQ9IWsuZGlzYWJsZWQ7Yi50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO3RyeXtiLmFwcGVuZENoaWxkKHQuY3JlYXRlVGV4dE5vZGUoIndpbmRvdy4iK2UrIj0xOyIpKX1jYXRjaChvKXt9YS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2lmKEVbZV0pe2Muc3VwcG9ydC5zY3JpcHRFdmFsPXRydWU7ZGVsZXRlIEVbZV19dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goeCl7Yy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG89ZmFsc2V9YS5yZW1vdmVDaGlsZChiKTtpZihkLmF0dGFjaEV2ZW50JiZkLmZpcmVFdmVudCl7ZC5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24gcigpe2Muc3VwcG9ydC5ub0Nsb25lRXZlbnQ9CmZhbHNlO2QuZGV0YWNoRXZlbnQoIm9uY2xpY2siLHIpfSk7ZC5jbG9uZU5vZGUodHJ1ZSkuZmlyZUV2ZW50KCJvbmNsaWNrIil9ZD10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuaW5uZXJIVE1MPSI8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvdGVzdCcgY2hlY2tlZD0nY2hlY2tlZCcvPiI7YT10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTthLmFwcGVuZENoaWxkKGQuZmlyc3RDaGlsZCk7Yy5zdXBwb3J0LmNoZWNrQ2xvbmU9YS5jbG9uZU5vZGUodHJ1ZSkuY2xvbmVOb2RlKHRydWUpLmxhc3RDaGlsZC5jaGVja2VkO2MoZnVuY3Rpb24oKXt2YXIgcj10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUud2lkdGg9ci5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4Ijt0LmJvZHkuYXBwZW5kQ2hpbGQocik7Yy5ib3hNb2RlbD1jLnN1cHBvcnQuYm94TW9kZWw9ci5vZmZzZXRXaWR0aD09PTI7aWYoInpvb20iaW4gci5zdHlsZSl7ci5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiO3Iuc3R5bGUuem9vbT0KMTtjLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1yLm9mZnNldFdpZHRoPT09MjtyLnN0eWxlLmRpc3BsYXk9IiI7ci5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiI7Yy5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3M9ci5vZmZzZXRXaWR0aCE9PTJ9ci5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+Ijt2YXIgQT1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpO2Muc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9QVswXS5vZmZzZXRIZWlnaHQ9PT0wO0FbMF0uc3R5bGUuZGlzcGxheT0iIjtBWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Muc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9Yy5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmQVswXS5vZmZzZXRIZWlnaHQ9PT0wO3IuaW5uZXJIVE1MPSIiO3QuYm9keS5yZW1vdmVDaGlsZChyKS5zdHlsZS5kaXNwbGF5PQoibm9uZSJ9KTthPWZ1bmN0aW9uKHIpe3ZhciBBPXQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cj0ib24iK3I7dmFyIEM9ciBpbiBBO2lmKCFDKXtBLnNldEF0dHJpYnV0ZShyLCJyZXR1cm47Iik7Qz10eXBlb2YgQVtyXT09PSJmdW5jdGlvbiJ9cmV0dXJuIEN9O2Muc3VwcG9ydC5zdWJtaXRCdWJibGVzPWEoInN1Ym1pdCIpO2Muc3VwcG9ydC5jaGFuZ2VCdWJibGVzPWEoImNoYW5nZSIpO2E9Yj1kPWY9aD1udWxsfX0pKCk7dmFyIHJhPXt9LEphPS9eKD86XHsuKlx9fFxbLipcXSkkLztjLmV4dGVuZCh7Y2FjaGU6e30sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrYy5ub3coKSxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDp0cnVlfSxkYXRhOmZ1bmN0aW9uKGEsYixkKXtpZihjLmFjY2VwdERhdGEoYSkpe2E9YT09RT9yYTphO3ZhciBlPWEubm9kZVR5cGUsZj1lP2FbYy5leHBhbmRvXTpudWxsLGg9CmMuY2FjaGU7aWYoIShlJiYhZiYmdHlwZW9mIGI9PT0ic3RyaW5nIiYmZD09PUIpKXtpZihlKWZ8fChhW2MuZXhwYW5kb109Zj0rK2MudXVpZCk7ZWxzZSBoPWE7aWYodHlwZW9mIGI9PT0ib2JqZWN0IilpZihlKWhbZl09Yy5leHRlbmQoaFtmXSxiKTtlbHNlIGMuZXh0ZW5kKGgsYik7ZWxzZSBpZihlJiYhaFtmXSloW2ZdPXt9O2E9ZT9oW2ZdOmg7aWYoZCE9PUIpYVtiXT1kO3JldHVybiB0eXBlb2YgYj09PSJzdHJpbmciP2FbYl06YX19fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7aWYoYy5hY2NlcHREYXRhKGEpKXthPWE9PUU/cmE6YTt2YXIgZD1hLm5vZGVUeXBlLGU9ZD9hW2MuZXhwYW5kb106YSxmPWMuY2FjaGUsaD1kP2ZbZV06ZTtpZihiKXtpZihoKXtkZWxldGUgaFtiXTtkJiZjLmlzRW1wdHlPYmplY3QoaCkmJmMucmVtb3ZlRGF0YShhKX19ZWxzZSBpZihkJiZjLnN1cHBvcnQuZGVsZXRlRXhwYW5kbylkZWxldGUgYVtjLmV4cGFuZG9dO2Vsc2UgaWYoYS5yZW1vdmVBdHRyaWJ1dGUpYS5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTsKZWxzZSBpZihkKWRlbGV0ZSBmW2VdO2Vsc2UgZm9yKHZhciBsIGluIGEpZGVsZXRlIGFbbF19fSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4hKGI9PT10cnVlfHxhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpIT09Yil9cmV0dXJuIHRydWV9fSk7Yy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgZD1udWxsO2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCIpe2lmKHRoaXMubGVuZ3RoKXt2YXIgZT10aGlzWzBdLmF0dHJpYnV0ZXMsZjtkPWMuZGF0YSh0aGlzWzBdKTtmb3IodmFyIGg9MCxsPWUubGVuZ3RoO2g8bDtoKyspe2Y9ZVtoXS5uYW1lO2lmKGYuaW5kZXhPZigiZGF0YS0iKT09PTApe2Y9Zi5zdWJzdHIoNSk7a2EodGhpc1swXSxmLGRbZl0pfX19cmV0dXJuIGR9ZWxzZSBpZih0eXBlb2YgYT09PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLmRhdGEodGhpcywKYSl9KTt2YXIgaz1hLnNwbGl0KCIuIik7a1sxXT1rWzFdPyIuIitrWzFdOiIiO2lmKGI9PT1CKXtkPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2tbMV0rIiEiLFtrWzBdXSk7aWYoZD09PUImJnRoaXMubGVuZ3RoKXtkPWMuZGF0YSh0aGlzWzBdLGEpO2Q9a2EodGhpc1swXSxhLGQpfXJldHVybiBkPT09QiYma1sxXT90aGlzLmRhdGEoa1swXSk6ZH1lbHNlIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz1jKHRoaXMpLHg9W2tbMF0sYl07by50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIra1sxXSsiISIseCk7Yy5kYXRhKHRoaXMsYSxiKTtvLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitrWzFdKyIhIix4KX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pO2MuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsZCl7aWYoYSl7Yj0oYnx8ImZ4IikrInF1ZXVlIjt2YXIgZT0KYy5kYXRhKGEsYik7aWYoIWQpcmV0dXJuIGV8fFtdO2lmKCFlfHxjLmlzQXJyYXkoZCkpZT1jLmRhdGEoYSxiLGMubWFrZUFycmF5KGQpKTtlbHNlIGUucHVzaChkKTtyZXR1cm4gZX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGQ9Yy5xdWV1ZShhLGIpLGU9ZC5zaGlmdCgpO2lmKGU9PT0iaW5wcm9ncmVzcyIpZT1kLnNoaWZ0KCk7aWYoZSl7Yj09PSJmeCImJmQudW5zaGlmdCgiaW5wcm9ncmVzcyIpO2UuY2FsbChhLGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKGEsYil9KX19fSk7Yy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGEhPT0ic3RyaW5nIil7Yj1hO2E9ImZ4In1pZihiPT09QilyZXR1cm4gYy5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1jLnF1ZXVlKHRoaXMsYSxiKTthPT09ImZ4IiYmZFswXSE9PSJpbnByb2dyZXNzIiYmYy5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKHRoaXMsCmEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7YT1jLmZ4P2MuZnguc3BlZWRzW2FdfHxhOmE7Yj1ifHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oKXt2YXIgZD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmRlcXVldWUoZCxiKX0sYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX19KTt2YXIgc2E9L1tcblx0XS9nLGhhPS9ccysvLFNhPS9cci9nLFRhPS9eKD86aHJlZnxzcmN8c3R5bGUpJC8sVWE9L14oPzpidXR0b258aW5wdXQpJC9pLFZhPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLFdhPS9eYSg/OnJlYSk/JC9pLHRhPS9eKD86cmFkaW98Y2hlY2tib3gpJC9pO2MucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsCmNvbHNwYW46ImNvbFNwYW4iLHRhYmluZGV4OiJ0YWJJbmRleCIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciJ9O2MuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMuYWNjZXNzKHRoaXMsYSxiLHRydWUsYy5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5hdHRyKHRoaXMsYSwiIik7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHgpe3ZhciByPWModGhpcyk7ci5hZGRDbGFzcyhhLmNhbGwodGhpcyx4LHIuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nIilmb3IodmFyIGI9KGF8fCIiKS5zcGxpdChoYSksZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7dmFyIGY9dGhpc1tkXTtpZihmLm5vZGVUeXBlPT09CjEpaWYoZi5jbGFzc05hbWUpe2Zvcih2YXIgaD0iICIrZi5jbGFzc05hbWUrIiAiLGw9Zi5jbGFzc05hbWUsaz0wLG89Yi5sZW5ndGg7azxvO2srKylpZihoLmluZGV4T2YoIiAiK2Jba10rIiAiKTwwKWwrPSIgIitiW2tdO2YuY2xhc3NOYW1lPWMudHJpbShsKX1lbHNlIGYuY2xhc3NOYW1lPWF9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG8pe3ZhciB4PWModGhpcyk7eC5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxvLHguYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nInx8YT09PUIpZm9yKHZhciBiPShhfHwiIikuc3BsaXQoaGEpLGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe3ZhciBmPXRoaXNbZF07aWYoZi5ub2RlVHlwZT09PTEmJmYuY2xhc3NOYW1lKWlmKGEpe2Zvcih2YXIgaD0oIiAiK2YuY2xhc3NOYW1lKyIgIikucmVwbGFjZShzYSwiICIpLApsPTAsaz1iLmxlbmd0aDtsPGs7bCsrKWg9aC5yZXBsYWNlKCIgIitiW2xdKyIgIiwiICIpO2YuY2xhc3NOYW1lPWMudHJpbShoKX1lbHNlIGYuY2xhc3NOYW1lPSIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhLGU9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7dmFyIGg9Yyh0aGlzKTtoLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGYsaC5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGQ9PT0ic3RyaW5nIilmb3IodmFyIGYsaD0wLGw9Yyh0aGlzKSxrPWIsbz1hLnNwbGl0KGhhKTtmPW9baCsrXTspe2s9ZT9rOiFsLmhhc0NsYXNzKGYpO2xbaz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGYpfWVsc2UgaWYoZD09PSJ1bmRlZmluZWQifHxkPT09ImJvb2xlYW4iKXt0aGlzLmNsYXNzTmFtZSYmYy5kYXRhKHRoaXMsCiJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSk7dGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT1mYWxzZT8iIjpjLmRhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn19KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7YT0iICIrYSsiICI7Zm9yKHZhciBiPTAsZD10aGlzLmxlbmd0aDtiPGQ7YisrKWlmKCgiICIrdGhpc1tiXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHNhLCIgIikuaW5kZXhPZihhKT4tMSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aCl7dmFyIGI9dGhpc1swXTtpZihiKXtpZihjLm5vZGVOYW1lKGIsIm9wdGlvbiIpKXt2YXIgZD1iLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWR8fGQuc3BlY2lmaWVkP2IudmFsdWU6Yi50ZXh0fWlmKGMubm9kZU5hbWUoYiwic2VsZWN0Iikpe3ZhciBlPWIuc2VsZWN0ZWRJbmRleDtkPVtdO3ZhciBmPWIub3B0aW9ucztiPWIudHlwZT09PSJzZWxlY3Qtb25lIjsKaWYoZTwwKXJldHVybiBudWxsO3ZhciBoPWI/ZTowO2ZvcihlPWI/ZSsxOmYubGVuZ3RoO2g8ZTtoKyspe3ZhciBsPWZbaF07aWYobC5zZWxlY3RlZCYmKGMuc3VwcG9ydC5vcHREaXNhYmxlZD8hbC5kaXNhYmxlZDpsLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIWwucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWMubm9kZU5hbWUobC5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7YT1jKGwpLnZhbCgpO2lmKGIpcmV0dXJuIGE7ZC5wdXNoKGEpfX1yZXR1cm4gZH1pZih0YS50ZXN0KGIudHlwZSkmJiFjLnN1cHBvcnQuY2hlY2tPbilyZXR1cm4gYi5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6Yi52YWx1ZTtyZXR1cm4oYi52YWx1ZXx8IiIpLnJlcGxhY2UoU2EsIiIpfXJldHVybiBCfXZhciBrPWMuaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG8pe3ZhciB4PWModGhpcykscj1hO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtpZihrKXI9CmEuY2FsbCh0aGlzLG8seC52YWwoKSk7aWYocj09bnVsbClyPSIiO2Vsc2UgaWYodHlwZW9mIHI9PT0ibnVtYmVyIilyKz0iIjtlbHNlIGlmKGMuaXNBcnJheShyKSlyPWMubWFwKHIsZnVuY3Rpb24oQyl7cmV0dXJuIEM9PW51bGw/IiI6QysiIn0pO2lmKGMuaXNBcnJheShyKSYmdGEudGVzdCh0aGlzLnR5cGUpKXRoaXMuY2hlY2tlZD1jLmluQXJyYXkoeC52YWwoKSxyKT49MDtlbHNlIGlmKGMubm9kZU5hbWUodGhpcywic2VsZWN0Iikpe3ZhciBBPWMubWFrZUFycmF5KHIpO2MoIm9wdGlvbiIsdGhpcykuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Yy5pbkFycmF5KGModGhpcykudmFsKCksQSk+PTB9KTtpZighQS5sZW5ndGgpdGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2UgdGhpcy52YWx1ZT1yfX0pfX0pO2MuZXh0ZW5kKHthdHRyRm46e3ZhbDp0cnVlLGNzczp0cnVlLGh0bWw6dHJ1ZSx0ZXh0OnRydWUsZGF0YTp0cnVlLHdpZHRoOnRydWUsaGVpZ2h0OnRydWUsb2Zmc2V0OnRydWV9LAphdHRyOmZ1bmN0aW9uKGEsYixkLGUpe2lmKCFhfHxhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpcmV0dXJuIEI7aWYoZSYmYiBpbiBjLmF0dHJGbilyZXR1cm4gYyhhKVtiXShkKTtlPWEubm9kZVR5cGUhPT0xfHwhYy5pc1hNTERvYyhhKTt2YXIgZj1kIT09QjtiPWUmJmMucHJvcHNbYl18fGI7dmFyIGg9VGEudGVzdChiKTtpZigoYiBpbiBhfHxhW2JdIT09QikmJmUmJiFoKXtpZihmKXtiPT09InR5cGUiJiZVYS50ZXN0KGEubm9kZU5hbWUpJiZhLnBhcmVudE5vZGUmJmMuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2lmKGQ9PT1udWxsKWEubm9kZVR5cGU9PT0xJiZhLnJlbW92ZUF0dHJpYnV0ZShiKTtlbHNlIGFbYl09ZH1pZihjLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYikubm9kZVZhbHVlO2lmKGI9PT0idGFiSW5kZXgiKXJldHVybihiPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKSkmJgpiLnNwZWNpZmllZD9iLnZhbHVlOlZhLnRlc3QoYS5ub2RlTmFtZSl8fFdhLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOkI7cmV0dXJuIGFbYl19aWYoIWMuc3VwcG9ydC5zdHlsZSYmZSYmYj09PSJzdHlsZSIpe2lmKGYpYS5zdHlsZS5jc3NUZXh0PSIiK2Q7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dH1mJiZhLnNldEF0dHJpYnV0ZShiLCIiK2QpO2lmKCFhLmF0dHJpYnV0ZXNbYl0mJmEuaGFzQXR0cmlidXRlJiYhYS5oYXNBdHRyaWJ1dGUoYikpcmV0dXJuIEI7YT0hYy5zdXBwb3J0LmhyZWZOb3JtYWxpemVkJiZlJiZoP2EuZ2V0QXR0cmlidXRlKGIsMik6YS5nZXRBdHRyaWJ1dGUoYik7cmV0dXJuIGE9PT1udWxsP0I6YX19KTt2YXIgWD0vXC4oLiopJC8saWE9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLExhPS9cLi9nLE1hPS8gL2csWGE9L1teXHdccy58YF0vZyxZYT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFhhLCJcXCQmIil9LHVhPXtmb2N1c2luOjAsZm9jdXNvdXQ6MH07CmMuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGIsZCxlKXtpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OCkpe2lmKGMuaXNXaW5kb3coYSkmJmEhPT1FJiYhYS5mcmFtZUVsZW1lbnQpYT1FO2lmKGQ9PT1mYWxzZSlkPVU7ZWxzZSBpZighZClyZXR1cm47dmFyIGYsaDtpZihkLmhhbmRsZXIpe2Y9ZDtkPWYuaGFuZGxlcn1pZighZC5ndWlkKWQuZ3VpZD1jLmd1aWQrKztpZihoPWMuZGF0YShhKSl7dmFyIGw9YS5ub2RlVHlwZT8iZXZlbnRzIjoiX19ldmVudHNfXyIsaz1oW2xdLG89aC5oYW5kbGU7aWYodHlwZW9mIGs9PT0iZnVuY3Rpb24iKXtvPWsuaGFuZGxlO2s9ay5ldmVudHN9ZWxzZSBpZighayl7YS5ub2RlVHlwZXx8KGhbbF09aD1mdW5jdGlvbigpe30pO2guZXZlbnRzPWs9e319aWYoIW8paC5oYW5kbGU9bz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiYhYy5ldmVudC50cmlnZ2VyZWQ/Yy5ldmVudC5oYW5kbGUuYXBwbHkoby5lbGVtLAphcmd1bWVudHMpOkJ9O28uZWxlbT1hO2I9Yi5zcGxpdCgiICIpO2Zvcih2YXIgeD0wLHI7bD1iW3grK107KXtoPWY/Yy5leHRlbmQoe30sZik6e2hhbmRsZXI6ZCxkYXRhOmV9O2lmKGwuaW5kZXhPZigiLiIpPi0xKXtyPWwuc3BsaXQoIi4iKTtsPXIuc2hpZnQoKTtoLm5hbWVzcGFjZT1yLnNsaWNlKDApLnNvcnQoKS5qb2luKCIuIil9ZWxzZXtyPVtdO2gubmFtZXNwYWNlPSIifWgudHlwZT1sO2lmKCFoLmd1aWQpaC5ndWlkPWQuZ3VpZDt2YXIgQT1rW2xdLEM9Yy5ldmVudC5zcGVjaWFsW2xdfHx7fTtpZighQSl7QT1rW2xdPVtdO2lmKCFDLnNldHVwfHxDLnNldHVwLmNhbGwoYSxlLHIsbyk9PT1mYWxzZSlpZihhLmFkZEV2ZW50TGlzdGVuZXIpYS5hZGRFdmVudExpc3RlbmVyKGwsbyxmYWxzZSk7ZWxzZSBhLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbCxvKX1pZihDLmFkZCl7Qy5hZGQuY2FsbChhLGgpO2lmKCFoLmhhbmRsZXIuZ3VpZCloLmhhbmRsZXIuZ3VpZD0KZC5ndWlkfUEucHVzaChoKTtjLmV2ZW50Lmdsb2JhbFtsXT10cnVlfWE9bnVsbH19fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixkLGUpe2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KSl7aWYoZD09PWZhbHNlKWQ9VTt2YXIgZixoLGw9MCxrLG8seCxyLEEsQyxKPWEubm9kZVR5cGU/ImV2ZW50cyI6Il9fZXZlbnRzX18iLHc9Yy5kYXRhKGEpLEk9dyYmd1tKXTtpZih3JiZJKXtpZih0eXBlb2YgST09PSJmdW5jdGlvbiIpe3c9STtJPUkuZXZlbnRzfWlmKGImJmIudHlwZSl7ZD1iLmhhbmRsZXI7Yj1iLnR5cGV9aWYoIWJ8fHR5cGVvZiBiPT09InN0cmluZyImJmIuY2hhckF0KDApPT09Ii4iKXtiPWJ8fCIiO2ZvcihmIGluIEkpYy5ldmVudC5yZW1vdmUoYSxmK2IpfWVsc2V7Zm9yKGI9Yi5zcGxpdCgiICIpO2Y9YltsKytdOyl7cj1mO2s9Zi5pbmRleE9mKCIuIik8MDtvPVtdO2lmKCFrKXtvPWYuc3BsaXQoIi4iKTtmPW8uc2hpZnQoKTt4PVJlZ0V4cCgiKF58XFwuKSIrCmMubWFwKG8uc2xpY2UoMCkuc29ydCgpLFlhKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKX1pZihBPUlbZl0paWYoZCl7cj1jLmV2ZW50LnNwZWNpYWxbZl18fHt9O2ZvcihoPWV8fDA7aDxBLmxlbmd0aDtoKyspe0M9QVtoXTtpZihkLmd1aWQ9PT1DLmd1aWQpe2lmKGt8fHgudGVzdChDLm5hbWVzcGFjZSkpe2U9PW51bGwmJkEuc3BsaWNlKGgtLSwxKTtyLnJlbW92ZSYmci5yZW1vdmUuY2FsbChhLEMpfWlmKGUhPW51bGwpYnJlYWt9fWlmKEEubGVuZ3RoPT09MHx8ZSE9bnVsbCYmQS5sZW5ndGg9PT0xKXtpZighci50ZWFyZG93bnx8ci50ZWFyZG93bi5jYWxsKGEsbyk9PT1mYWxzZSljLnJlbW92ZUV2ZW50KGEsZix3LmhhbmRsZSk7ZGVsZXRlIElbZl19fWVsc2UgZm9yKGg9MDtoPEEubGVuZ3RoO2grKyl7Qz1BW2hdO2lmKGt8fHgudGVzdChDLm5hbWVzcGFjZSkpe2MuZXZlbnQucmVtb3ZlKGEscixDLmhhbmRsZXIsaCk7QS5zcGxpY2UoaC0tLDEpfX19aWYoYy5pc0VtcHR5T2JqZWN0KEkpKXtpZihiPQp3LmhhbmRsZSliLmVsZW09bnVsbDtkZWxldGUgdy5ldmVudHM7ZGVsZXRlIHcuaGFuZGxlO2lmKHR5cGVvZiB3PT09ImZ1bmN0aW9uIiljLnJlbW92ZURhdGEoYSxKKTtlbHNlIGMuaXNFbXB0eU9iamVjdCh3KSYmYy5yZW1vdmVEYXRhKGEpfX19fX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1hLnR5cGV8fGE7aWYoIWUpe2E9dHlwZW9mIGE9PT0ib2JqZWN0Ij9hW2MuZXhwYW5kb10/YTpjLmV4dGVuZChjLkV2ZW50KGYpLGEpOmMuRXZlbnQoZik7aWYoZi5pbmRleE9mKCIhIik+PTApe2EudHlwZT1mPWYuc2xpY2UoMCwtMSk7YS5leGNsdXNpdmU9dHJ1ZX1pZighZCl7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50Lmdsb2JhbFtmXSYmYy5lYWNoKGMuY2FjaGUsZnVuY3Rpb24oKXt0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbZl0mJmMuZXZlbnQudHJpZ2dlcihhLGIsdGhpcy5oYW5kbGUuZWxlbSl9KX1pZighZHx8ZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5cGU9PT0KOClyZXR1cm4gQjthLnJlc3VsdD1CO2EudGFyZ2V0PWQ7Yj1jLm1ha2VBcnJheShiKTtiLnVuc2hpZnQoYSl9YS5jdXJyZW50VGFyZ2V0PWQ7KGU9ZC5ub2RlVHlwZT9jLmRhdGEoZCwiaGFuZGxlIik6KGMuZGF0YShkLCJfX2V2ZW50c19fIil8fHt9KS5oYW5kbGUpJiZlLmFwcGx5KGQsYik7ZT1kLnBhcmVudE5vZGV8fGQub3duZXJEb2N1bWVudDt0cnl7aWYoIShkJiZkLm5vZGVOYW1lJiZjLm5vRGF0YVtkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSlpZihkWyJvbiIrZl0mJmRbIm9uIitmXS5hcHBseShkLGIpPT09ZmFsc2Upe2EucmVzdWx0PWZhbHNlO2EucHJldmVudERlZmF1bHQoKX19Y2F0Y2goaCl7fWlmKCFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmUpYy5ldmVudC50cmlnZ2VyKGEsYixlLHRydWUpO2Vsc2UgaWYoIWEuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBsO2U9YS50YXJnZXQ7dmFyIGs9Zi5yZXBsYWNlKFgsIiIpLG89Yy5ub2RlTmFtZShlLCJhIikmJms9PT0KImNsaWNrIix4PWMuZXZlbnQuc3BlY2lhbFtrXXx8e307aWYoKCF4Ll9kZWZhdWx0fHx4Ll9kZWZhdWx0LmNhbGwoZCxhKT09PWZhbHNlKSYmIW8mJiEoZSYmZS5ub2RlTmFtZSYmYy5ub0RhdGFbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkpe3RyeXtpZihlW2tdKXtpZihsPWVbIm9uIitrXSllWyJvbiIra109bnVsbDtjLmV2ZW50LnRyaWdnZXJlZD10cnVlO2Vba10oKX19Y2F0Y2gocil7fWlmKGwpZVsib24iK2tdPWw7Yy5ldmVudC50cmlnZ2VyZWQ9ZmFsc2V9fX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiLGQsZSxmO2Q9W107dmFyIGg9Yy5tYWtlQXJyYXkoYXJndW1lbnRzKTthPWhbMF09Yy5ldmVudC5maXgoYXx8RS5ldmVudCk7YS5jdXJyZW50VGFyZ2V0PXRoaXM7Yj1hLnR5cGUuaW5kZXhPZigiLiIpPDAmJiFhLmV4Y2x1c2l2ZTtpZighYil7ZT1hLnR5cGUuc3BsaXQoIi4iKTthLnR5cGU9ZS5zaGlmdCgpO2Q9ZS5zbGljZSgwKS5zb3J0KCk7ZT1SZWdFeHAoIihefFxcLikiKwpkLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWEubmFtZXNwYWNlPWEubmFtZXNwYWNlfHxkLmpvaW4oIi4iKTtmPWMuZGF0YSh0aGlzLHRoaXMubm9kZVR5cGU/ImV2ZW50cyI6Il9fZXZlbnRzX18iKTtpZih0eXBlb2YgZj09PSJmdW5jdGlvbiIpZj1mLmV2ZW50cztkPShmfHx7fSlbYS50eXBlXTtpZihmJiZkKXtkPWQuc2xpY2UoMCk7Zj0wO2Zvcih2YXIgbD1kLmxlbmd0aDtmPGw7ZisrKXt2YXIgaz1kW2ZdO2lmKGJ8fGUudGVzdChrLm5hbWVzcGFjZSkpe2EuaGFuZGxlcj1rLmhhbmRsZXI7YS5kYXRhPWsuZGF0YTthLmhhbmRsZU9iaj1rO2s9ay5oYW5kbGVyLmFwcGx5KHRoaXMsaCk7aWYoayE9PUIpe2EucmVzdWx0PWs7aWYoaz09PWZhbHNlKXthLnByZXZlbnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKX19aWYoYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfX19cmV0dXJuIGEucmVzdWx0fSxwcm9wczoiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0YUtleSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksCmZpeDpmdW5jdGlvbihhKXtpZihhW2MuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGI9YTthPWMuRXZlbnQoYik7Zm9yKHZhciBkPXRoaXMucHJvcHMubGVuZ3RoLGU7ZDspe2U9dGhpcy5wcm9wc1stLWRdO2FbZV09YltlXX1pZighYS50YXJnZXQpYS50YXJnZXQ9YS5zcmNFbGVtZW50fHx0O2lmKGEudGFyZ2V0Lm5vZGVUeXBlPT09MylhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlO2lmKCFhLnJlbGF0ZWRUYXJnZXQmJmEuZnJvbUVsZW1lbnQpYS5yZWxhdGVkVGFyZ2V0PWEuZnJvbUVsZW1lbnQ9PT1hLnRhcmdldD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50O2lmKGEucGFnZVg9PW51bGwmJmEuY2xpZW50WCE9bnVsbCl7Yj10LmRvY3VtZW50RWxlbWVudDtkPXQuYm9keTthLnBhZ2VYPWEuY2xpZW50WCsoYiYmYi5zY3JvbGxMZWZ0fHxkJiZkLnNjcm9sbExlZnR8fDApLShiJiZiLmNsaWVudExlZnR8fGQmJmQuY2xpZW50TGVmdHx8MCk7YS5wYWdlWT1hLmNsaWVudFkrKGImJmIuc2Nyb2xsVG9wfHwKZCYmZC5zY3JvbGxUb3B8fDApLShiJiZiLmNsaWVudFRvcHx8ZCYmZC5jbGllbnRUb3B8fDApfWlmKGEud2hpY2g9PW51bGwmJihhLmNoYXJDb2RlIT1udWxsfHxhLmtleUNvZGUhPW51bGwpKWEud2hpY2g9YS5jaGFyQ29kZSE9bnVsbD9hLmNoYXJDb2RlOmEua2V5Q29kZTtpZighYS5tZXRhS2V5JiZhLmN0cmxLZXkpYS5tZXRhS2V5PWEuY3RybEtleTtpZighYS53aGljaCYmYS5idXR0b24hPT1CKWEud2hpY2g9YS5idXR0b24mMT8xOmEuYnV0dG9uJjI/MzphLmJ1dHRvbiY0PzI6MDtyZXR1cm4gYX0sZ3VpZDoxRTgscHJveHk6Yy5wcm94eSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Yy5iaW5kUmVhZHksdGVhcmRvd246Yy5ub29wfSxsaXZlOnthZGQ6ZnVuY3Rpb24oYSl7Yy5ldmVudC5hZGQodGhpcyxZKGEub3JpZ1R5cGUsYS5zZWxlY3RvciksYy5leHRlbmQoe30sYSx7aGFuZGxlcjpLYSxndWlkOmEuaGFuZGxlci5ndWlkfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7Yy5ldmVudC5yZW1vdmUodGhpcywKWShhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGEpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsZCl7aWYoYy5pc1dpbmRvdyh0aGlzKSl0aGlzLm9uYmVmb3JldW5sb2FkPWR9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5vbmJlZm9yZXVubG9hZD09PWIpdGhpcy5vbmJlZm9yZXVubG9hZD1udWxsfX19fTtjLnJlbW92ZUV2ZW50PXQucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixkLGZhbHNlKX06ZnVuY3Rpb24oYSxiLGQpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGQpfTtjLkV2ZW50PWZ1bmN0aW9uKGEpe2lmKCF0aGlzLnByZXZlbnREZWZhdWx0KXJldHVybiBuZXcgYy5FdmVudChhKTtpZihhJiZhLnR5cGUpe3RoaXMub3JpZ2luYWxFdmVudD1hO3RoaXMudHlwZT1hLnR5cGV9ZWxzZSB0aGlzLnR5cGU9YTt0aGlzLnRpbWVTdGFtcD0KYy5ub3coKTt0aGlzW2MuZXhwYW5kb109dHJ1ZX07Yy5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Y2E7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKGEpaWYoYS5wcmV2ZW50RGVmYXVsdClhLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBhLnJldHVyblZhbHVlPWZhbHNlfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWNhO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDtpZihhKXthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKTthLmNhbmNlbEJ1YmJsZT10cnVlfX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1jYTt0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6VSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpVLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlV9Owp2YXIgdmE9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZWxhdGVkVGFyZ2V0O3RyeXtmb3IoO2ImJmIhPT10aGlzOyliPWIucGFyZW50Tm9kZTtpZihiIT09dGhpcyl7YS50eXBlPWEuZGF0YTtjLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWNhdGNoKGQpe319LHdhPWZ1bmN0aW9uKGEpe2EudHlwZT1hLmRhdGE7Yy5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2MuZXZlbnQuc3BlY2lhbFthXT17c2V0dXA6ZnVuY3Rpb24oZCl7Yy5ldmVudC5hZGQodGhpcyxiLGQmJmQuc2VsZWN0b3I/d2E6dmEsYSl9LHRlYXJkb3duOmZ1bmN0aW9uKGQpe2MuZXZlbnQucmVtb3ZlKHRoaXMsYixkJiZkLnNlbGVjdG9yP3dhOnZhKX19fSk7aWYoIWMuc3VwcG9ydC5zdWJtaXRCdWJibGVzKWMuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09CiJmb3JtIil7Yy5ldmVudC5hZGQodGhpcywiY2xpY2suc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoKGQ9PT0ic3VibWl0Inx8ZD09PSJpbWFnZSIpJiZjKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgpe2EubGl2ZUZpcmVkPUI7cmV0dXJuIGxhKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX19KTtjLmV2ZW50LmFkZCh0aGlzLCJrZXlwcmVzcy5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZigoZD09PSJ0ZXh0Inx8ZD09PSJwYXNzd29yZCIpJiZjKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgmJmEua2V5Q29kZT09PTEzKXthLmxpdmVGaXJlZD1CO3JldHVybiBsYSgic3VibWl0Iix0aGlzLGFyZ3VtZW50cyl9fSl9ZWxzZSByZXR1cm4gZmFsc2V9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19O2lmKCFjLnN1cHBvcnQuY2hhbmdlQnViYmxlcyl7dmFyIFYsCnhhPWZ1bmN0aW9uKGEpe3ZhciBiPWEudHlwZSxkPWEudmFsdWU7aWYoYj09PSJyYWRpbyJ8fGI9PT0iY2hlY2tib3giKWQ9YS5jaGVja2VkO2Vsc2UgaWYoYj09PSJzZWxlY3QtbXVsdGlwbGUiKWQ9YS5zZWxlY3RlZEluZGV4Pi0xP2MubWFwKGEub3B0aW9ucyxmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RlZH0pLmpvaW4oIi0iKToiIjtlbHNlIGlmKGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzZWxlY3QiKWQ9YS5zZWxlY3RlZEluZGV4O3JldHVybiBkfSxaPWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50YXJnZXQsZSxmO2lmKCEoIWlhLnRlc3QoZC5ub2RlTmFtZSl8fGQucmVhZE9ubHkpKXtlPWMuZGF0YShkLCJfY2hhbmdlX2RhdGEiKTtmPXhhKGQpO2lmKGEudHlwZSE9PSJmb2N1c291dCJ8fGQudHlwZSE9PSJyYWRpbyIpYy5kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsZik7aWYoIShlPT09Qnx8Zj09PWUpKWlmKGUhPW51bGx8fGYpe2EudHlwZT0iY2hhbmdlIjthLmxpdmVGaXJlZD0KQjtyZXR1cm4gYy5ldmVudC50cmlnZ2VyKGEsYixkKX19fTtjLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtmaWx0ZXJzOntmb2N1c291dDpaLGJlZm9yZWRlYWN0aXZhdGU6WixjbGljazpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZihkPT09InJhZGlvInx8ZD09PSJjaGVja2JveCJ8fGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzZWxlY3QiKXJldHVybiBaLmNhbGwodGhpcyxhKX0sa2V5ZG93bjpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZihhLmtleUNvZGU9PT0xMyYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09InRleHRhcmVhInx8YS5rZXlDb2RlPT09MzImJihkPT09ImNoZWNrYm94Inx8ZD09PSJyYWRpbyIpfHxkPT09InNlbGVjdC1tdWx0aXBsZSIpcmV0dXJuIFouY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXthPWEudGFyZ2V0O2MuZGF0YShhLCJfY2hhbmdlX2RhdGEiLHhhKGEpKX19LHNldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy50eXBlPT09CiJmaWxlIilyZXR1cm4gZmFsc2U7Zm9yKHZhciBhIGluIFYpYy5ldmVudC5hZGQodGhpcyxhKyIuc3BlY2lhbENoYW5nZSIsVlthXSk7cmV0dXJuIGlhLnRlc3QodGhpcy5ub2RlTmFtZSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxDaGFuZ2UiKTtyZXR1cm4gaWEudGVzdCh0aGlzLm5vZGVOYW1lKX19O1Y9Yy5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzO1YuZm9jdXM9Vi5iZWZvcmVhY3RpdmF0ZX10LmFkZEV2ZW50TGlzdGVuZXImJmMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGUpe2U9Yy5ldmVudC5maXgoZSk7ZS50eXBlPWI7cmV0dXJuIGMuZXZlbnQudHJpZ2dlcihlLG51bGwsZS50YXJnZXQpfWMuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt1YVtiXSsrPT09MCYmdC5hZGRFdmVudExpc3RlbmVyKGEsZCx0cnVlKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLXVhW2JdPT09CjAmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGQsdHJ1ZSl9fX0pO2MuZWFjaChbImJpbmQiLCJvbmUiXSxmdW5jdGlvbihhLGIpe2MuZm5bYl09ZnVuY3Rpb24oZCxlLGYpe2lmKHR5cGVvZiBkPT09Im9iamVjdCIpe2Zvcih2YXIgaCBpbiBkKXRoaXNbYl0oaCxlLGRbaF0sZik7cmV0dXJuIHRoaXN9aWYoYy5pc0Z1bmN0aW9uKGUpfHxlPT09ZmFsc2Upe2Y9ZTtlPUJ9dmFyIGw9Yj09PSJvbmUiP2MucHJveHkoZixmdW5jdGlvbihvKXtjKHRoaXMpLnVuYmluZChvLGwpO3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pOmY7aWYoZD09PSJ1bmxvYWQiJiZiIT09Im9uZSIpdGhpcy5vbmUoZCxlLGYpO2Vsc2V7aD0wO2Zvcih2YXIgaz10aGlzLmxlbmd0aDtoPGs7aCsrKWMuZXZlbnQuYWRkKHRoaXNbaF0sZCxsLGUpfXJldHVybiB0aGlzfX0pO2MuZm4uZXh0ZW5kKHt1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYT09PSJvYmplY3QiJiYhYS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGQgaW4gYSl0aGlzLnVuYmluZChkLAphW2RdKTtlbHNle2Q9MDtmb3IodmFyIGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyljLmV2ZW50LnJlbW92ZSh0aGlzW2RdLGEsYil9cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixkLGUpe3JldHVybiB0aGlzLmxpdmUoYixkLGUsYSl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLnVuYmluZCgibGl2ZSIpOnRoaXMuZGllKGIsbnVsbCxkLGEpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXt2YXIgZD1jLkV2ZW50KGEpO2QucHJldmVudERlZmF1bHQoKTtkLnN0b3BQcm9wYWdhdGlvbigpO2MuZXZlbnQudHJpZ2dlcihkLGIsdGhpc1swXSk7cmV0dXJuIGQucmVzdWx0fX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hcmd1bWVudHMsZD0KMTtkPGIubGVuZ3RoOyljLnByb3h5KGEsYltkKytdKTtyZXR1cm4gdGhpcy5jbGljayhjLnByb3h5KGEsZnVuY3Rpb24oZSl7dmFyIGY9KGMuZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2MuZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQsZisxKTtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGJbZl0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxmYWxzZX0pKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSk7dmFyIHlhPXtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQiLG1vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifTtjLmVhY2goWyJsaXZlIiwiZGllIl0sZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZSxmLGgpe3ZhciBsLGs9MCxvLHgscj1ofHx0aGlzLnNlbGVjdG9yO2g9aD90aGlzOmModGhpcy5jb250ZXh0KTtpZih0eXBlb2YgZD09PQoib2JqZWN0IiYmIWQucHJldmVudERlZmF1bHQpe2ZvcihsIGluIGQpaFtiXShsLGUsZFtsXSxyKTtyZXR1cm4gdGhpc31pZihjLmlzRnVuY3Rpb24oZSkpe2Y9ZTtlPUJ9Zm9yKGQ9KGR8fCIiKS5zcGxpdCgiICIpOyhsPWRbaysrXSkhPW51bGw7KXtvPVguZXhlYyhsKTt4PSIiO2lmKG8pe3g9b1swXTtsPWwucmVwbGFjZShYLCIiKX1pZihsPT09ImhvdmVyIilkLnB1c2goIm1vdXNlZW50ZXIiK3gsIm1vdXNlbGVhdmUiK3gpO2Vsc2V7bz1sO2lmKGw9PT0iZm9jdXMifHxsPT09ImJsdXIiKXtkLnB1c2goeWFbbF0reCk7bCs9eH1lbHNlIGw9KHlhW2xdfHxsKSt4O2lmKGI9PT0ibGl2ZSIpe3g9MDtmb3IodmFyIEE9aC5sZW5ndGg7eDxBO3grKyljLmV2ZW50LmFkZChoW3hdLCJsaXZlLiIrWShsLHIpLHtkYXRhOmUsc2VsZWN0b3I6cixoYW5kbGVyOmYsb3JpZ1R5cGU6bCxvcmlnSGFuZGxlcjpmLHByZVR5cGU6b30pfWVsc2UgaC51bmJpbmQoImxpdmUuIitZKGwsciksZil9fXJldHVybiB0aGlzfX0pOwpjLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZSl7aWYoZT09bnVsbCl7ZT1kO2Q9bnVsbH1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMuYmluZChiLGQsZSk6dGhpcy50cmlnZ2VyKGIpfTtpZihjLmF0dHJGbiljLmF0dHJGbltiXT10cnVlfSk7RS5hdHRhY2hFdmVudCYmIUUuYWRkRXZlbnRMaXN0ZW5lciYmYyhFKS5iaW5kKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGMuY2FjaGUpaWYoYy5jYWNoZVthXS5oYW5kbGUpdHJ5e2MuZXZlbnQucmVtb3ZlKGMuY2FjaGVbYV0uaGFuZGxlLmVsZW0pfWNhdGNoKGIpe319KTsKKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShnLGksbixtLHAscSl7cD0wO2Zvcih2YXIgdT1tLmxlbmd0aDtwPHU7cCsrKXt2YXIgeT1tW3BdO2lmKHkpe3ZhciBGPWZhbHNlO2Zvcih5PXlbZ107eTspe2lmKHkuc2l6Y2FjaGU9PT1uKXtGPW1beS5zaXpzZXRdO2JyZWFrfWlmKHkubm9kZVR5cGU9PT0xJiYhcSl7eS5zaXpjYWNoZT1uO3kuc2l6c2V0PXB9aWYoeS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09aSl7Rj15O2JyZWFrfXk9eVtnXX1tW3BdPUZ9fX1mdW5jdGlvbiBiKGcsaSxuLG0scCxxKXtwPTA7Zm9yKHZhciB1PW0ubGVuZ3RoO3A8dTtwKyspe3ZhciB5PW1bcF07aWYoeSl7dmFyIEY9ZmFsc2U7Zm9yKHk9eVtnXTt5Oyl7aWYoeS5zaXpjYWNoZT09PW4pe0Y9bVt5LnNpenNldF07YnJlYWt9aWYoeS5ub2RlVHlwZT09PTEpe2lmKCFxKXt5LnNpemNhY2hlPW47eS5zaXpzZXQ9cH1pZih0eXBlb2YgaSE9PSJzdHJpbmciKXtpZih5PT09aSl7Rj10cnVlO2JyZWFrfX1lbHNlIGlmKGsuZmlsdGVyKGksClt5XSkubGVuZ3RoPjApe0Y9eTticmVha319eT15W2ddfW1bcF09Rn19fXZhciBkPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2csZT0wLGY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPWZhbHNlLGw9dHJ1ZTtbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7bD1mYWxzZTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGcsaSxuLG0pe249bnx8W107dmFyIHA9aT1pfHx0O2lmKGkubm9kZVR5cGUhPT0xJiZpLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighZ3x8dHlwZW9mIGchPT0ic3RyaW5nIilyZXR1cm4gbjt2YXIgcSx1LHksRixNLE49dHJ1ZSxPPWsuaXNYTUwoaSksRD1bXSxSPWc7ZG97ZC5leGVjKCIiKTtpZihxPWQuZXhlYyhSKSl7Uj1xWzNdO0QucHVzaChxWzFdKTtpZihxWzJdKXtGPXFbM107CmJyZWFrfX19d2hpbGUocSk7aWYoRC5sZW5ndGg+MSYmeC5leGVjKGcpKWlmKEQubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVtEWzBdXSl1PUwoRFswXStEWzFdLGkpO2Vsc2UgZm9yKHU9by5yZWxhdGl2ZVtEWzBdXT9baV06ayhELnNoaWZ0KCksaSk7RC5sZW5ndGg7KXtnPUQuc2hpZnQoKTtpZihvLnJlbGF0aXZlW2ddKWcrPUQuc2hpZnQoKTt1PUwoZyx1KX1lbHNle2lmKCFtJiZELmxlbmd0aD4xJiZpLm5vZGVUeXBlPT09OSYmIU8mJm8ubWF0Y2guSUQudGVzdChEWzBdKSYmIW8ubWF0Y2guSUQudGVzdChEW0QubGVuZ3RoLTFdKSl7cT1rLmZpbmQoRC5zaGlmdCgpLGksTyk7aT1xLmV4cHI/ay5maWx0ZXIocS5leHByLHEuc2V0KVswXTpxLnNldFswXX1pZihpKXtxPW0/e2V4cHI6RC5wb3AoKSxzZXQ6QyhtKX06ay5maW5kKEQucG9wKCksRC5sZW5ndGg9PT0xJiYoRFswXT09PSJ+Inx8RFswXT09PSIrIikmJmkucGFyZW50Tm9kZT9pLnBhcmVudE5vZGU6aSxPKTt1PXEuZXhwcj9rLmZpbHRlcihxLmV4cHIsCnEuc2V0KTpxLnNldDtpZihELmxlbmd0aD4wKXk9Qyh1KTtlbHNlIE49ZmFsc2U7Zm9yKDtELmxlbmd0aDspe3E9TT1ELnBvcCgpO2lmKG8ucmVsYXRpdmVbTV0pcT1ELnBvcCgpO2Vsc2UgTT0iIjtpZihxPT1udWxsKXE9aTtvLnJlbGF0aXZlW01dKHkscSxPKX19ZWxzZSB5PVtdfXl8fCh5PXUpO3l8fGsuZXJyb3IoTXx8Zyk7aWYoZi5jYWxsKHkpPT09IltvYmplY3QgQXJyYXldIilpZihOKWlmKGkmJmkubm9kZVR5cGU9PT0xKWZvcihnPTA7eVtnXSE9bnVsbDtnKyspe2lmKHlbZ10mJih5W2ddPT09dHJ1ZXx8eVtnXS5ub2RlVHlwZT09PTEmJmsuY29udGFpbnMoaSx5W2ddKSkpbi5wdXNoKHVbZ10pfWVsc2UgZm9yKGc9MDt5W2ddIT1udWxsO2crKyl5W2ddJiZ5W2ddLm5vZGVUeXBlPT09MSYmbi5wdXNoKHVbZ10pO2Vsc2Ugbi5wdXNoLmFwcGx5KG4seSk7ZWxzZSBDKHksbik7aWYoRil7ayhGLHAsbixtKTtrLnVuaXF1ZVNvcnQobil9cmV0dXJuIG59O2sudW5pcXVlU29ydD1mdW5jdGlvbihnKXtpZih3KXtoPQpsO2cuc29ydCh3KTtpZihoKWZvcih2YXIgaT0xO2k8Zy5sZW5ndGg7aSsrKWdbaV09PT1nW2ktMV0mJmcuc3BsaWNlKGktLSwxKX1yZXR1cm4gZ307ay5tYXRjaGVzPWZ1bmN0aW9uKGcsaSl7cmV0dXJuIGsoZyxudWxsLG51bGwsaSl9O2subWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGcsaSl7cmV0dXJuIGsoaSxudWxsLG51bGwsW2ddKS5sZW5ndGg+MH07ay5maW5kPWZ1bmN0aW9uKGcsaSxuKXt2YXIgbTtpZighZylyZXR1cm5bXTtmb3IodmFyIHA9MCxxPW8ub3JkZXIubGVuZ3RoO3A8cTtwKyspe3ZhciB1LHk9by5vcmRlcltwXTtpZih1PW8ubGVmdE1hdGNoW3ldLmV4ZWMoZykpe3ZhciBGPXVbMV07dS5zcGxpY2UoMSwxKTtpZihGLnN1YnN0cihGLmxlbmd0aC0xKSE9PSJcXCIpe3VbMV09KHVbMV18fCIiKS5yZXBsYWNlKC9cXC9nLCIiKTttPW8uZmluZFt5XSh1LGksbik7aWYobSE9bnVsbCl7Zz1nLnJlcGxhY2Uoby5tYXRjaFt5XSwiIik7YnJlYWt9fX19bXx8KG09aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTsKcmV0dXJue3NldDptLGV4cHI6Z319O2suZmlsdGVyPWZ1bmN0aW9uKGcsaSxuLG0pe2Zvcih2YXIgcCxxLHU9Zyx5PVtdLEY9aSxNPWkmJmlbMF0mJmsuaXNYTUwoaVswXSk7ZyYmaS5sZW5ndGg7KXtmb3IodmFyIE4gaW4gby5maWx0ZXIpaWYoKHA9by5sZWZ0TWF0Y2hbTl0uZXhlYyhnKSkhPW51bGwmJnBbMl0pe3ZhciBPLEQsUj1vLmZpbHRlcltOXTtEPXBbMV07cT1mYWxzZTtwLnNwbGljZSgxLDEpO2lmKEQuc3Vic3RyKEQubGVuZ3RoLTEpIT09IlxcIil7aWYoRj09PXkpeT1bXTtpZihvLnByZUZpbHRlcltOXSlpZihwPW8ucHJlRmlsdGVyW05dKHAsRixuLHksbSxNKSl7aWYocD09PXRydWUpY29udGludWV9ZWxzZSBxPU89dHJ1ZTtpZihwKWZvcih2YXIgaj0wOyhEPUZbal0pIT1udWxsO2orKylpZihEKXtPPVIoRCxwLGosRik7dmFyIHM9bV4hIU87aWYobiYmTyE9bnVsbClpZihzKXE9dHJ1ZTtlbHNlIEZbal09ZmFsc2U7ZWxzZSBpZihzKXt5LnB1c2goRCk7cT10cnVlfX1pZihPIT09CkIpe258fChGPXkpO2c9Zy5yZXBsYWNlKG8ubWF0Y2hbTl0sIiIpO2lmKCFxKXJldHVybltdO2JyZWFrfX19aWYoZz09PXUpaWYocT09bnVsbClrLmVycm9yKGcpO2Vsc2UgYnJlYWs7dT1nfXJldHVybiBGfTtrLmVycm9yPWZ1bmN0aW9uKGcpe3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZzt9O3ZhciBvPWsuc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKihbJyJdKikoLio/KVwzfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbitcLV0qKVwpKT8vLApQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZ2V0QXR0cmlidXRlKCJocmVmIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGcsaSl7dmFyIG49dHlwZW9mIGk9PT0ic3RyaW5nIixtPW4mJiEvXFcvLnRlc3QoaSk7bj1uJiYhbTtpZihtKWk9aS50b0xvd2VyQ2FzZSgpO209MDtmb3IodmFyIHA9Zy5sZW5ndGgscTttPHA7bSsrKWlmKHE9Z1ttXSl7Zm9yKDsocT1xLnByZXZpb3VzU2libGluZykmJnEubm9kZVR5cGUhPT0xOyk7Z1ttXT1ufHxxJiZxLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0KaT9xfHxmYWxzZTpxPT09aX1uJiZrLmZpbHRlcihpLGcsdHJ1ZSl9LCI+IjpmdW5jdGlvbihnLGkpe3ZhciBuLG09dHlwZW9mIGk9PT0ic3RyaW5nIixwPTAscT1nLmxlbmd0aDtpZihtJiYhL1xXLy50ZXN0KGkpKWZvcihpPWkudG9Mb3dlckNhc2UoKTtwPHE7cCsrKXtpZihuPWdbcF0pe249bi5wYXJlbnROb2RlO2dbcF09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09aT9uOmZhbHNlfX1lbHNle2Zvcig7cDxxO3ArKylpZihuPWdbcF0pZ1twXT1tP24ucGFyZW50Tm9kZTpuLnBhcmVudE5vZGU9PT1pO20mJmsuZmlsdGVyKGksZyx0cnVlKX19LCIiOmZ1bmN0aW9uKGcsaSxuKXt2YXIgbSxwPWUrKyxxPWI7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChpKSl7bT1pPWkudG9Mb3dlckNhc2UoKTtxPWF9cSgicGFyZW50Tm9kZSIsaSxwLGcsbSxuKX0sIn4iOmZ1bmN0aW9uKGcsaSxuKXt2YXIgbSxwPWUrKyxxPWI7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChpKSl7bT0KaT1pLnRvTG93ZXJDYXNlKCk7cT1hfXEoInByZXZpb3VzU2libGluZyIsaSxwLGcsbSxuKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGcsaSxuKXtpZih0eXBlb2YgaS5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhbilyZXR1cm4oZz1pLmdldEVsZW1lbnRCeUlkKGdbMV0pKSYmZy5wYXJlbnROb2RlP1tnXTpbXX0sTkFNRTpmdW5jdGlvbihnLGkpe2lmKHR5cGVvZiBpLmdldEVsZW1lbnRzQnlOYW1lIT09InVuZGVmaW5lZCIpe2Zvcih2YXIgbj1bXSxtPWkuZ2V0RWxlbWVudHNCeU5hbWUoZ1sxXSkscD0wLHE9bS5sZW5ndGg7cDxxO3ArKyltW3BdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09Z1sxXSYmbi5wdXNoKG1bcF0pO3JldHVybiBuLmxlbmd0aD09PTA/bnVsbDpufX0sVEFHOmZ1bmN0aW9uKGcsaSl7cmV0dXJuIGkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZ1sxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGcsaSxuLG0scCxxKXtnPSIgIitnWzFdLnJlcGxhY2UoL1xcL2csCiIiKSsiICI7aWYocSlyZXR1cm4gZztxPTA7Zm9yKHZhciB1Oyh1PWlbcV0pIT1udWxsO3ErKylpZih1KWlmKHBeKHUuY2xhc3NOYW1lJiYoIiAiK3UuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgvW1x0XG5dL2csIiAiKS5pbmRleE9mKGcpPj0wKSlufHxtLnB1c2godSk7ZWxzZSBpZihuKWlbcV09ZmFsc2U7cmV0dXJuIGZhbHNlfSxJRDpmdW5jdGlvbihnKXtyZXR1cm4gZ1sxXS5yZXBsYWNlKC9cXC9nLCIiKX0sVEFHOmZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnRvTG93ZXJDYXNlKCl9LENISUxEOmZ1bmN0aW9uKGcpe2lmKGdbMV09PT0ibnRoIil7dmFyIGk9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhnWzJdPT09ImV2ZW4iJiYiMm4ifHxnWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChnWzJdKSYmIjBuKyIrZ1syXXx8Z1syXSk7Z1syXT1pWzFdKyhpWzJdfHwxKS0wO2dbM109aVszXS0wfWdbMF09ZSsrO3JldHVybiBnfSxBVFRSOmZ1bmN0aW9uKGcsaSxuLAptLHAscSl7aT1nWzFdLnJlcGxhY2UoL1xcL2csIiIpO2lmKCFxJiZvLmF0dHJNYXBbaV0pZ1sxXT1vLmF0dHJNYXBbaV07aWYoZ1syXT09PSJ+PSIpZ1s0XT0iICIrZ1s0XSsiICI7cmV0dXJuIGd9LFBTRVVETzpmdW5jdGlvbihnLGksbixtLHApe2lmKGdbMV09PT0ibm90IilpZigoZC5leGVjKGdbM10pfHwiIikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoZ1szXSkpZ1szXT1rKGdbM10sbnVsbCxudWxsLGkpO2Vsc2V7Zz1rLmZpbHRlcihnWzNdLGksbix0cnVlXnApO258fG0ucHVzaC5hcHBseShtLGcpO3JldHVybiBmYWxzZX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoZ1swXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChnWzBdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZ30sUE9TOmZ1bmN0aW9uKGcpe2cudW5zaGlmdCh0cnVlKTtyZXR1cm4gZ319LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGlzYWJsZWQ9PT1mYWxzZSYmZy50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmRpc2FibGVkPT09CnRydWV9LGNoZWNrZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY2hlY2tlZD09PXRydWV9LHNlbGVjdGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLnNlbGVjdGVkPT09dHJ1ZX0scGFyZW50OmZ1bmN0aW9uKGcpe3JldHVybiEhZy5maXJzdENoaWxkfSxlbXB0eTpmdW5jdGlvbihnKXtyZXR1cm4hZy5maXJzdENoaWxkfSxoYXM6ZnVuY3Rpb24oZyxpLG4pe3JldHVybiEhayhuWzNdLGcpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKGcpe3JldHVybi9oXGQvaS50ZXN0KGcubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGcpe3JldHVybiJ0ZXh0Ij09PWcudHlwZX0scmFkaW86ZnVuY3Rpb24oZyl7cmV0dXJuInJhZGlvIj09PWcudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oZyl7cmV0dXJuImNoZWNrYm94Ij09PWcudHlwZX0sZmlsZTpmdW5jdGlvbihnKXtyZXR1cm4iZmlsZSI9PT1nLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGcpe3JldHVybiJwYXNzd29yZCI9PT1nLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihnKXtyZXR1cm4ic3VibWl0Ij09PQpnLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGcpe3JldHVybiJpbWFnZSI9PT1nLnR5cGV9LHJlc2V0OmZ1bmN0aW9uKGcpe3JldHVybiJyZXNldCI9PT1nLnR5cGV9LGJ1dHRvbjpmdW5jdGlvbihnKXtyZXR1cm4iYnV0dG9uIj09PWcudHlwZXx8Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGcpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChnLm5vZGVOYW1lKX19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGcsaSl7cmV0dXJuIGk9PT0wfSxsYXN0OmZ1bmN0aW9uKGcsaSxuLG0pe3JldHVybiBpPT09bS5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihnLGkpe3JldHVybiBpJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oZyxpKXtyZXR1cm4gaSUyPT09MX0sbHQ6ZnVuY3Rpb24oZyxpLG4pe3JldHVybiBpPG5bM10tMH0sZ3Q6ZnVuY3Rpb24oZyxpLG4pe3JldHVybiBpPm5bM10tMH0sbnRoOmZ1bmN0aW9uKGcsaSxuKXtyZXR1cm4gblszXS0KMD09PWl9LGVxOmZ1bmN0aW9uKGcsaSxuKXtyZXR1cm4gblszXS0wPT09aX19LGZpbHRlcjp7UFNFVURPOmZ1bmN0aW9uKGcsaSxuLG0pe3ZhciBwPWlbMV0scT1vLmZpbHRlcnNbcF07aWYocSlyZXR1cm4gcShnLG4saSxtKTtlbHNlIGlmKHA9PT0iY29udGFpbnMiKXJldHVybihnLnRleHRDb250ZW50fHxnLmlubmVyVGV4dHx8ay5nZXRUZXh0KFtnXSl8fCIiKS5pbmRleE9mKGlbM10pPj0wO2Vsc2UgaWYocD09PSJub3QiKXtpPWlbM107bj0wO2ZvcihtPWkubGVuZ3RoO248bTtuKyspaWYoaVtuXT09PWcpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfWVsc2Ugay5lcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitwKX0sQ0hJTEQ6ZnVuY3Rpb24oZyxpKXt2YXIgbj1pWzFdLG09Zztzd2l0Y2gobil7Y2FzZSAib25seSI6Y2FzZSAiZmlyc3QiOmZvcig7bT1tLnByZXZpb3VzU2libGluZzspaWYobS5ub2RlVHlwZT09PTEpcmV0dXJuIGZhbHNlO2lmKG49PT0KImZpcnN0IilyZXR1cm4gdHJ1ZTttPWc7Y2FzZSAibGFzdCI6Zm9yKDttPW0ubmV4dFNpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlICJudGgiOm49aVsyXTt2YXIgcD1pWzNdO2lmKG49PT0xJiZwPT09MClyZXR1cm4gdHJ1ZTt2YXIgcT1pWzBdLHU9Zy5wYXJlbnROb2RlO2lmKHUmJih1LnNpemNhY2hlIT09cXx8IWcubm9kZUluZGV4KSl7dmFyIHk9MDtmb3IobT11LmZpcnN0Q2hpbGQ7bTttPW0ubmV4dFNpYmxpbmcpaWYobS5ub2RlVHlwZT09PTEpbS5ub2RlSW5kZXg9Kyt5O3Uuc2l6Y2FjaGU9cX1tPWcubm9kZUluZGV4LXA7cmV0dXJuIG49PT0wP209PT0wOm0lbj09PTAmJm0vbj49MH19LElEOmZ1bmN0aW9uKGcsaSl7cmV0dXJuIGcubm9kZVR5cGU9PT0xJiZnLmdldEF0dHJpYnV0ZSgiaWQiKT09PWl9LFRBRzpmdW5jdGlvbihnLGkpe3JldHVybiBpPT09IioiJiZnLm5vZGVUeXBlPT09MXx8Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Cml9LENMQVNTOmZ1bmN0aW9uKGcsaSl7cmV0dXJuKCIgIisoZy5jbGFzc05hbWV8fGcuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoaSk+LTF9LEFUVFI6ZnVuY3Rpb24oZyxpKXt2YXIgbj1pWzFdO249by5hdHRySGFuZGxlW25dP28uYXR0ckhhbmRsZVtuXShnKTpnW25dIT1udWxsP2dbbl06Zy5nZXRBdHRyaWJ1dGUobik7dmFyIG09bisiIixwPWlbMl0scT1pWzRdO3JldHVybiBuPT1udWxsP3A9PT0iIT0iOnA9PT0iPSI/bT09PXE6cD09PSIqPSI/bS5pbmRleE9mKHEpPj0wOnA9PT0ifj0iPygiICIrbSsiICIpLmluZGV4T2YocSk+PTA6IXE/bSYmbiE9PWZhbHNlOnA9PT0iIT0iP20hPT1xOnA9PT0iXj0iP20uaW5kZXhPZihxKT09PTA6cD09PSIkPSI/bS5zdWJzdHIobS5sZW5ndGgtcS5sZW5ndGgpPT09cTpwPT09Inw9Ij9tPT09cXx8bS5zdWJzdHIoMCxxLmxlbmd0aCsxKT09PXErIi0iOmZhbHNlfSxQT1M6ZnVuY3Rpb24oZyxpLG4sbSl7dmFyIHA9by5zZXRGaWx0ZXJzW2lbMl1dOwppZihwKXJldHVybiBwKGcsbixpLG0pfX19LHg9by5tYXRjaC5QT1Mscj1mdW5jdGlvbihnLGkpe3JldHVybiJcXCIrKGktMCsxKX0sQTtmb3IoQSBpbiBvLm1hdGNoKXtvLm1hdGNoW0FdPVJlZ0V4cChvLm1hdGNoW0FdLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpO28ubGVmdE1hdGNoW0FdPVJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbQV0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxyKSl9dmFyIEM9ZnVuY3Rpb24oZyxpKXtnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGcsMCk7aWYoaSl7aS5wdXNoLmFwcGx5KGksZyk7cmV0dXJuIGl9cmV0dXJuIGd9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApfWNhdGNoKEope0M9ZnVuY3Rpb24oZyxpKXt2YXIgbj0wLG09aXx8W107aWYoZi5jYWxsKGcpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShtLApnKTtlbHNlIGlmKHR5cGVvZiBnLmxlbmd0aD09PSJudW1iZXIiKWZvcih2YXIgcD1nLmxlbmd0aDtuPHA7bisrKW0ucHVzaChnW25dKTtlbHNlIGZvcig7Z1tuXTtuKyspbS5wdXNoKGdbbl0pO3JldHVybiBtfX12YXIgdyxJO2lmKHQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXc9ZnVuY3Rpb24oZyxpKXtpZihnPT09aSl7aD10cnVlO3JldHVybiAwfWlmKCFnLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxO3JldHVybiBnLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGkpJjQ/LTE6MX07ZWxzZXt3PWZ1bmN0aW9uKGcsaSl7dmFyIG4sbSxwPVtdLHE9W107bj1nLnBhcmVudE5vZGU7bT1pLnBhcmVudE5vZGU7dmFyIHU9bjtpZihnPT09aSl7aD10cnVlO3JldHVybiAwfWVsc2UgaWYobj09PW0pcmV0dXJuIEkoZyxpKTtlbHNlIGlmKG4pe2lmKCFtKXJldHVybiAxfWVsc2UgcmV0dXJuLTE7CmZvcig7dTspe3AudW5zaGlmdCh1KTt1PXUucGFyZW50Tm9kZX1mb3IodT1tO3U7KXtxLnVuc2hpZnQodSk7dT11LnBhcmVudE5vZGV9bj1wLmxlbmd0aDttPXEubGVuZ3RoO2Zvcih1PTA7dTxuJiZ1PG07dSsrKWlmKHBbdV0hPT1xW3VdKXJldHVybiBJKHBbdV0scVt1XSk7cmV0dXJuIHU9PT1uP0koZyxxW3VdLC0xKTpJKHBbdV0saSwxKX07ST1mdW5jdGlvbihnLGksbil7aWYoZz09PWkpcmV0dXJuIG47Zm9yKGc9Zy5uZXh0U2libGluZztnOyl7aWYoZz09PWkpcmV0dXJuLTE7Zz1nLm5leHRTaWJsaW5nfXJldHVybiAxfX1rLmdldFRleHQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBpPSIiLG4sbT0wO2dbbV07bSsrKXtuPWdbbV07aWYobi5ub2RlVHlwZT09PTN8fG4ubm9kZVR5cGU9PT00KWkrPW4ubm9kZVZhbHVlO2Vsc2UgaWYobi5ub2RlVHlwZSE9PTgpaSs9ay5nZXRUZXh0KG4uY2hpbGROb2Rlcyl9cmV0dXJuIGl9OyhmdW5jdGlvbigpe3ZhciBnPXQuY3JlYXRlRWxlbWVudCgiZGl2IiksCmk9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksbj10LmRvY3VtZW50RWxlbWVudDtnLmlubmVySFRNTD0iPGEgbmFtZT0nIitpKyInLz4iO24uaW5zZXJ0QmVmb3JlKGcsbi5maXJzdENoaWxkKTtpZih0LmdldEVsZW1lbnRCeUlkKGkpKXtvLmZpbmQuSUQ9ZnVuY3Rpb24obSxwLHEpe2lmKHR5cGVvZiBwLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFxKXJldHVybihwPXAuZ2V0RWxlbWVudEJ5SWQobVsxXSkpP3AuaWQ9PT1tWzFdfHx0eXBlb2YgcC5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJnAuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1tWzFdP1twXTpCOltdfTtvLmZpbHRlci5JRD1mdW5jdGlvbihtLHApe3ZhciBxPXR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUhPT0idW5kZWZpbmVkIiYmbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBtLm5vZGVUeXBlPT09MSYmcSYmcS5ub2RlVmFsdWU9PT1wfX1uLnJlbW92ZUNoaWxkKGcpOwpuPWc9bnVsbH0pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpO2lmKGcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MClvLmZpbmQuVEFHPWZ1bmN0aW9uKGksbil7dmFyIG09bi5nZXRFbGVtZW50c0J5VGFnTmFtZShpWzFdKTtpZihpWzFdPT09IioiKXtmb3IodmFyIHA9W10scT0wO21bcV07cSsrKW1bcV0ubm9kZVR5cGU9PT0xJiZwLnB1c2gobVtxXSk7bT1wfXJldHVybiBtfTtnLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiI7aWYoZy5maXJzdENoaWxkJiZ0eXBlb2YgZy5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZnLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpby5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX07Zz1udWxsfSkoKTt0LnF1ZXJ5U2VsZWN0b3JBbGwmJgpmdW5jdGlvbigpe3ZhciBnPWssaT10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIShpLnF1ZXJ5U2VsZWN0b3JBbGwmJmkucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGg9PT0wKSl7az1mdW5jdGlvbihtLHAscSx1KXtwPXB8fHQ7bT1tLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCF1JiYhay5pc1hNTChwKSlpZihwLm5vZGVUeXBlPT09OSl0cnl7cmV0dXJuIEMocC5xdWVyeVNlbGVjdG9yQWxsKG0pLHEpfWNhdGNoKHkpe31lbHNlIGlmKHAubm9kZVR5cGU9PT0xJiZwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIEY9cC5nZXRBdHRyaWJ1dGUoImlkIiksTT1GfHwiX19zaXp6bGVfXyI7Rnx8cC5zZXRBdHRyaWJ1dGUoImlkIixNKTt0cnl7cmV0dXJuIEMocC5xdWVyeVNlbGVjdG9yQWxsKCIjIitNKyIgIittKSxxKX1jYXRjaChOKXt9ZmluYWxseXtGfHwKcC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fXJldHVybiBnKG0scCxxLHUpfTtmb3IodmFyIG4gaW4gZylrW25dPWdbbl07aT1udWxsfX0oKTsoZnVuY3Rpb24oKXt2YXIgZz10LmRvY3VtZW50RWxlbWVudCxpPWcubWF0Y2hlc1NlbGVjdG9yfHxnLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zy53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGcubXNNYXRjaGVzU2VsZWN0b3Isbj1mYWxzZTt0cnl7aS5jYWxsKHQuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKG0pe249dHJ1ZX1pZihpKWsubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKHAscSl7cT1xLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFrLmlzWE1MKHApKXRyeXtpZihufHwhby5tYXRjaC5QU0VVRE8udGVzdChxKSYmIS8hPS8udGVzdChxKSlyZXR1cm4gaS5jYWxsKHAscSl9Y2F0Y2godSl7fXJldHVybiBrKHEsbnVsbCxudWxsLFtwXSkubGVuZ3RoPjB9fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0KdC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEoIWcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCkpe2cubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MSl7by5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpO28uZmluZC5DTEFTUz1mdW5jdGlvbihpLG4sbSl7aWYodHlwZW9mIG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhbSlyZXR1cm4gbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGlbMV0pfTtnPW51bGx9fX0pKCk7ay5jb250YWlucz10LmRvY3VtZW50RWxlbWVudC5jb250YWlucz9mdW5jdGlvbihnLGkpe3JldHVybiBnIT09aSYmKGcuY29udGFpbnM/Zy5jb250YWlucyhpKTp0cnVlKX06dC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/CmZ1bmN0aW9uKGcsaSl7cmV0dXJuISEoZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpKSYxNil9OmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfTtrLmlzWE1MPWZ1bmN0aW9uKGcpe3JldHVybihnPShnP2cub3duZXJEb2N1bWVudHx8ZzowKS5kb2N1bWVudEVsZW1lbnQpP2cubm9kZU5hbWUhPT0iSFRNTCI6ZmFsc2V9O3ZhciBMPWZ1bmN0aW9uKGcsaSl7Zm9yKHZhciBuLG09W10scD0iIixxPWkubm9kZVR5cGU/W2ldOmk7bj1vLm1hdGNoLlBTRVVETy5leGVjKGcpOyl7cCs9blswXTtnPWcucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIil9Zz1vLnJlbGF0aXZlW2ddP2crIioiOmc7bj0wO2Zvcih2YXIgdT1xLmxlbmd0aDtuPHU7bisrKWsoZyxxW25dLG0pO3JldHVybiBrLmZpbHRlcihwLG0pfTtjLmZpbmQ9aztjLmV4cHI9ay5zZWxlY3RvcnM7Yy5leHByWyI6Il09Yy5leHByLmZpbHRlcnM7Yy51bmlxdWU9ay51bmlxdWVTb3J0O2MudGV4dD1rLmdldFRleHQ7Yy5pc1hNTERvYz1rLmlzWE1MOwpjLmNvbnRhaW5zPWsuY29udGFpbnN9KSgpO3ZhciBaYT0vVW50aWwkLywkYT0vXig/OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLyxhYj0vLC8sTmE9L14uW146I1xbXC4sXSokLyxiYj1BcnJheS5wcm90b3R5cGUuc2xpY2UsY2I9Yy5leHByLm1hdGNoLlBPUztjLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGQ9MCxlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsrKXtkPWIubGVuZ3RoO2MuZmluZChhLHRoaXNbZV0sYik7aWYoZT4wKWZvcih2YXIgaD1kO2g8Yi5sZW5ndGg7aCsrKWZvcih2YXIgbD0wO2w8ZDtsKyspaWYoYltsXT09PWJbaF0pe2Iuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGJ9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1jKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylpZihjLmNvbnRhaW5zKHRoaXMsYltkXSkpcmV0dXJuIHRydWV9KX0sCm5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobWEodGhpcyxhLGZhbHNlKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhtYSh0aGlzLGEsdHJ1ZSksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmYy5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBkPVtdLGUsZixoPXRoaXNbMF07aWYoYy5pc0FycmF5KGEpKXt2YXIgbCxrPXt9LG89MTtpZihoJiZhLmxlbmd0aCl7ZT0wO2ZvcihmPWEubGVuZ3RoO2U8ZjtlKyspe2w9YVtlXTtrW2xdfHwoa1tsXT1jLmV4cHIubWF0Y2guUE9TLnRlc3QobCk/YyhsLGJ8fHRoaXMuY29udGV4dCk6bCl9Zm9yKDtoJiZoLm93bmVyRG9jdW1lbnQmJmghPT1iOyl7Zm9yKGwgaW4gayl7ZT1rW2xdO2lmKGUuanF1ZXJ5P2UuaW5kZXgoaCk+LTE6YyhoKS5pcyhlKSlkLnB1c2goe3NlbGVjdG9yOmwsZWxlbTpoLGxldmVsOm99KX1oPQpoLnBhcmVudE5vZGU7bysrfX1yZXR1cm4gZH1sPWNiLnRlc3QoYSk/YyhhLGJ8fHRoaXMuY29udGV4dCk6bnVsbDtlPTA7Zm9yKGY9dGhpcy5sZW5ndGg7ZTxmO2UrKylmb3IoaD10aGlzW2VdO2g7KWlmKGw/bC5pbmRleChoKT4tMTpjLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGgsYSkpe2QucHVzaChoKTticmVha31lbHNle2g9aC5wYXJlbnROb2RlO2lmKCFofHwhaC5vd25lckRvY3VtZW50fHxoPT09YilicmVha31kPWQubGVuZ3RoPjE/Yy51bmlxdWUoZCk6ZDtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCwiY2xvc2VzdCIsYSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PSJzdHJpbmciKXJldHVybiBjLmluQXJyYXkodGhpc1swXSxhP2MoYSk6dGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpKTtyZXR1cm4gYy5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGQ9dHlwZW9mIGE9PT0ic3RyaW5nIj9jKGEsYnx8dGhpcy5jb250ZXh0KToKYy5tYWtlQXJyYXkoYSksZT1jLm1lcmdlKHRoaXMuZ2V0KCksZCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKCFkWzBdfHwhZFswXS5wYXJlbnROb2RlfHxkWzBdLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMXx8IWVbMF18fCFlWzBdLnBhcmVudE5vZGV8fGVbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExP2U6Yy51bmlxdWUoZSkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSk7Yy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PTExP2E6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBjLmRpcihhLCJwYXJlbnROb2RlIixkKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYy5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBjLm50aChhLAoyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuZGlyKGEsIm5leHRTaWJsaW5nIixkKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixkKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmMubWFrZUFycmF5KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLApiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5tYXAodGhpcyxiLGQpO1phLnRlc3QoYSl8fChlPWQpO2lmKGUmJnR5cGVvZiBlPT09InN0cmluZyIpZj1jLmZpbHRlcihlLGYpO2Y9dGhpcy5sZW5ndGg+MT9jLnVuaXF1ZShmKTpmO2lmKCh0aGlzLmxlbmd0aD4xfHxhYi50ZXN0KGUpKSYmJGEudGVzdChhKSlmPWYucmV2ZXJzZSgpO3JldHVybiB0aGlzLnB1c2hTdGFjayhmLGEsYmIuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSk7Yy5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsZCl7aWYoZClhPSI6bm90KCIrYSsiKSI7cmV0dXJuIGIubGVuZ3RoPT09MT9jLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmMuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGIsZCl7dmFyIGU9W107Zm9yKGE9YVtiXTthJiZhLm5vZGVUeXBlIT09OSYmKGQ9PT1CfHxhLm5vZGVUeXBlIT09MXx8IWMoYSkuaXMoZCkpOyl7YS5ub2RlVHlwZT09PTEmJgplLnB1c2goYSk7YT1hW2JdfXJldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGQpe2I9Ynx8MTtmb3IodmFyIGU9MDthO2E9YVtkXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1bXTthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmQucHVzaChhKTtyZXR1cm4gZH19KTt2YXIgemE9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywkPS9eXHMrLyxBYT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLEJhPS88KFtcdzpdKykvLGRiPS88dGJvZHkvaSxlYj0vPHwmIz9cdys7LyxDYT0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLERhPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGZiPS9cPShbXj0iJz5cc10rXC8pPi9nLFA9e29wdGlvbjpbMSwKIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O1Aub3B0Z3JvdXA9UC5vcHRpb247UC50Ym9keT1QLnRmb290PVAuY29sZ3JvdXA9UC5jYXB0aW9uPVAudGhlYWQ7UC50aD1QLnRkO2lmKCFjLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSlQLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdO2MuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPQpjKHRoaXMpO2QudGV4dChhLmNhbGwodGhpcyxiLGQudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9PSJvYmplY3QiJiZhIT09QilyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx0KS5jcmVhdGVUZXh0Tm9kZShhKSk7cmV0dXJuIGMudGV4dCh0aGlzKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXtjKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsZCkpfSk7aWYodGhpc1swXSl7dmFyIGI9YyhhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUodHJ1ZSk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKTtiLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzO2QuZmlyc3RDaGlsZCYmZC5maXJzdENoaWxkLm5vZGVUeXBlPT09MTspZD1kLmZpcnN0Q2hpbGQ7cmV0dXJuIGR9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LAp3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Yyh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWModGhpcyksZD1iLmNvbnRlbnRzKCk7ZC5sZW5ndGg/ZC53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Yy5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGModGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsdHJ1ZSxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSwKcHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmluc2VydEJlZm9yZShhLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihiKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsdGhpcyl9KTtlbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWMoYXJndW1lbnRzWzBdKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihiKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsCnRoaXMubmV4dFNpYmxpbmcpfSk7ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxjKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZD0wLGU7KGU9dGhpc1tkXSkhPW51bGw7ZCsrKWlmKCFhfHxjLmZpbHRlcihhLFtlXSkubGVuZ3RoKXtpZighYiYmZS5ub2RlVHlwZT09PTEpe2MuY2xlYW5EYXRhKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7Yy5jbGVhbkRhdGEoW2VdKX1lLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX1yZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKylmb3IoYi5ub2RlVHlwZT09PTEmJmMuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7Yi5maXJzdENoaWxkOyliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCk7CnJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm1hcChmdW5jdGlvbigpe2lmKCFjLnN1cHBvcnQubm9DbG9uZUV2ZW50JiYhYy5pc1hNTERvYyh0aGlzKSl7dmFyIGQ9dGhpcy5vdXRlckhUTUwsZT10aGlzLm93bmVyRG9jdW1lbnQ7aWYoIWQpe2Q9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKHRoaXMuY2xvbmVOb2RlKHRydWUpKTtkPWQuaW5uZXJIVE1MfXJldHVybiBjLmNsZWFuKFtkLnJlcGxhY2UoemEsIiIpLnJlcGxhY2UoZmIsJz0iJDEiPicpLnJlcGxhY2UoJCwiIildLGUpWzBdfWVsc2UgcmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRydWUpfSk7aWYoYT09PXRydWUpe25hKHRoaXMsYik7bmEodGhpcy5maW5kKCIqIiksYi5maW5kKCIqIikpfXJldHVybiBifSxodG1sOmZ1bmN0aW9uKGEpe2lmKGE9PT1CKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLm5vZGVUeXBlPT09MT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKHphLCIiKTpudWxsOwplbHNlIGlmKHR5cGVvZiBhPT09InN0cmluZyImJiFDYS50ZXN0KGEpJiYoYy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhJC50ZXN0KGEpKSYmIVBbKEJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShBYSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcih2YXIgYj0wLGQ9dGhpcy5sZW5ndGg7YjxkO2IrKylpZih0aGlzW2JdLm5vZGVUeXBlPT09MSl7Yy5jbGVhbkRhdGEodGhpc1tiXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt0aGlzW2JdLmlubmVySFRNTD1hfX1jYXRjaChlKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfX1lbHNlIGMuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oZil7dmFyIGg9Yyh0aGlzKTtoLmh0bWwoYS5jYWxsKHRoaXMsZixoLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD0KYyh0aGlzKSxlPWQuaHRtbCgpO2QucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixlKSl9KTtpZih0eXBlb2YgYSE9PSJzdHJpbmciKWE9YyhhKS5kZXRhY2goKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxkPXRoaXMucGFyZW50Tm9kZTtjKHRoaXMpLnJlbW92ZSgpO2I/YyhiKS5iZWZvcmUoYSk6YyhkKS5hcHBlbmQoYSl9KX1lbHNlIHJldHVybiB0aGlzLnB1c2hTdGFjayhjKGMuaXNGdW5jdGlvbihhKT9hKCk6YSksInJlcGxhY2VXaXRoIixhKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLHRydWUpfSxkb21NYW5pcDpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZixoLGw9YVswXSxrPVtdO2lmKCFjLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBsPT09InN0cmluZyImJkRhLnRlc3QobCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykuZG9tTWFuaXAoYSwKYixkLHRydWUpfSk7aWYoYy5pc0Z1bmN0aW9uKGwpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oeCl7dmFyIHI9Yyh0aGlzKTthWzBdPWwuY2FsbCh0aGlzLHgsYj9yLmh0bWwoKTpCKTtyLmRvbU1hbmlwKGEsYixkKX0pO2lmKHRoaXNbMF0pe2U9bCYmbC5wYXJlbnROb2RlO2U9Yy5zdXBwb3J0LnBhcmVudE5vZGUmJmUmJmUubm9kZVR5cGU9PT0xMSYmZS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP3tmcmFnbWVudDplfTpjLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspO2g9ZS5mcmFnbWVudDtpZihmPWguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2g9aC5maXJzdENoaWxkOmguZmlyc3RDaGlsZCl7Yj1iJiZjLm5vZGVOYW1lKGYsInRyIik7Zj0wO2Zvcih2YXIgbz10aGlzLmxlbmd0aDtmPG87ZisrKWQuY2FsbChiP2Mubm9kZU5hbWUodGhpc1tmXSwidGFibGUiKT90aGlzW2ZdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHx0aGlzW2ZdLmFwcGVuZENoaWxkKHRoaXNbZl0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKToKdGhpc1tmXTp0aGlzW2ZdLGY+MHx8ZS5jYWNoZWFibGV8fHRoaXMubGVuZ3RoPjE/aC5jbG9uZU5vZGUodHJ1ZSk6aCl9ay5sZW5ndGgmJmMuZWFjaChrLE9hKX1yZXR1cm4gdGhpc319KTtjLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGYsaDtiPWImJmJbMF0/YlswXS5vd25lckRvY3VtZW50fHxiWzBdOnQ7aWYoYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09PSJzdHJpbmciJiZhWzBdLmxlbmd0aDw1MTImJmI9PT10JiYhQ2EudGVzdChhWzBdKSYmKGMuc3VwcG9ydC5jaGVja0Nsb25lfHwhRGEudGVzdChhWzBdKSkpe2Y9dHJ1ZTtpZihoPWMuZnJhZ21lbnRzW2FbMF1dKWlmKGghPT0xKWU9aH1pZighZSl7ZT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtjLmNsZWFuKGEsYixlLGQpfWlmKGYpYy5mcmFnbWVudHNbYVswXV09aD9lOjE7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmZ9fTtjLmZyYWdtZW50cz17fTtjLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLApwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQpe3ZhciBlPVtdO2Q9YyhkKTt2YXIgZj10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZihmJiZmLm5vZGVUeXBlPT09MTEmJmYuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiZkLmxlbmd0aD09PTEpe2RbYl0odGhpc1swXSk7cmV0dXJuIHRoaXN9ZWxzZXtmPTA7Zm9yKHZhciBoPWQubGVuZ3RoO2Y8aDtmKyspe3ZhciBsPShmPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtjKGRbZl0pW2JdKGwpO2U9ZS5jb25jYXQobCl9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUsYSxkLnNlbGVjdG9yKX19fSk7Yy5leHRlbmQoe2NsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe2I9Ynx8dDtpZih0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT09InVuZGVmaW5lZCIpYj1iLm93bmVyRG9jdW1lbnR8fApiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fHQ7Zm9yKHZhciBmPVtdLGg9MCxsOyhsPWFbaF0pIT1udWxsO2grKyl7aWYodHlwZW9mIGw9PT0ibnVtYmVyIilsKz0iIjtpZihsKXtpZih0eXBlb2YgbD09PSJzdHJpbmciJiYhZWIudGVzdChsKSlsPWIuY3JlYXRlVGV4dE5vZGUobCk7ZWxzZSBpZih0eXBlb2YgbD09PSJzdHJpbmciKXtsPWwucmVwbGFjZShBYSwiPCQxPjwvJDI+Iik7dmFyIGs9KEJhLmV4ZWMobCl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbz1QW2tdfHxQLl9kZWZhdWx0LHg9b1swXSxyPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHIuaW5uZXJIVE1MPW9bMV0rbCtvWzJdO3gtLTspcj1yLmxhc3RDaGlsZDtpZighYy5zdXBwb3J0LnRib2R5KXt4PWRiLnRlc3QobCk7az1rPT09InRhYmxlIiYmIXg/ci5maXJzdENoaWxkJiZyLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpvWzFdPT09Ijx0YWJsZT4iJiYheD9yLmNoaWxkTm9kZXM6W107Zm9yKG89ay5sZW5ndGgtCjE7bz49MDstLW8pYy5ub2RlTmFtZShrW29dLCJ0Ym9keSIpJiYha1tvXS5jaGlsZE5vZGVzLmxlbmd0aCYma1tvXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGtbb10pfSFjLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJiQudGVzdChsKSYmci5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZSgkLmV4ZWMobClbMF0pLHIuZmlyc3RDaGlsZCk7bD1yLmNoaWxkTm9kZXN9aWYobC5ub2RlVHlwZSlmLnB1c2gobCk7ZWxzZSBmPWMubWVyZ2UoZixsKX19aWYoZClmb3IoaD0wO2ZbaF07aCsrKWlmKGUmJmMubm9kZU5hbWUoZltoXSwic2NyaXB0IikmJighZltoXS50eXBlfHxmW2hdLnR5cGUudG9Mb3dlckNhc2UoKT09PSJ0ZXh0L2phdmFzY3JpcHQiKSllLnB1c2goZltoXS5wYXJlbnROb2RlP2ZbaF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmW2hdKTpmW2hdKTtlbHNle2ZbaF0ubm9kZVR5cGU9PT0xJiZmLnNwbGljZS5hcHBseShmLFtoKzEsMF0uY29uY2F0KGMubWFrZUFycmF5KGZbaF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSkpOwpkLmFwcGVuZENoaWxkKGZbaF0pfXJldHVybiBmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGQsZT1jLmNhY2hlLGY9Yy5ldmVudC5zcGVjaWFsLGg9Yy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sbD0wLGs7KGs9YVtsXSkhPW51bGw7bCsrKWlmKCEoay5ub2RlTmFtZSYmYy5ub0RhdGFbay5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkpaWYoZD1rW2MuZXhwYW5kb10pe2lmKChiPWVbZF0pJiZiLmV2ZW50cylmb3IodmFyIG8gaW4gYi5ldmVudHMpZltvXT9jLmV2ZW50LnJlbW92ZShrLG8pOmMucmVtb3ZlRXZlbnQoayxvLGIuaGFuZGxlKTtpZihoKWRlbGV0ZSBrW2MuZXhwYW5kb107ZWxzZSBrLnJlbW92ZUF0dHJpYnV0ZSYmay5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTtkZWxldGUgZVtkXX19fSk7dmFyIEVhPS9hbHBoYVwoW14pXSpcKS9pLGdiPS9vcGFjaXR5PShbXildKikvLGhiPS8tKFthLXpdKS9pZyxpYj0vKFtBLVpdKS9nLEZhPS9eLT9cZCsoPzpweCk/JC9pLApqYj0vXi0/XGQvLGtiPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxQYT1bIkxlZnQiLCJSaWdodCJdLFFhPVsiVG9wIiwiQm90dG9tIl0sVyxHYSxhYSxsYj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O2MuZm4uY3NzPWZ1bmN0aW9uKGEsYil7aWYoYXJndW1lbnRzLmxlbmd0aD09PTImJmI9PT1CKXJldHVybiB0aGlzO3JldHVybiBjLmFjY2Vzcyh0aGlzLGEsYix0cnVlLGZ1bmN0aW9uKGQsZSxmKXtyZXR1cm4gZiE9PUI/Yy5zdHlsZShkLGUsZik6Yy5jc3MoZCxlKX0pfTtjLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBkPVcoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gZD09PSIiPyIxIjpkfWVsc2UgcmV0dXJuIGEuc3R5bGUub3BhY2l0eX19fSxjc3NOdW1iZXI6e3pJbmRleDp0cnVlLGZvbnRXZWlnaHQ6dHJ1ZSxvcGFjaXR5OnRydWUsCnpvb206dHJ1ZSxsaW5lSGVpZ2h0OnRydWV9LGNzc1Byb3BzOnsiZmxvYXQiOmMuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGQsZSl7aWYoISghYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhYS5zdHlsZSkpe3ZhciBmLGg9Yy5jYW1lbENhc2UoYiksbD1hLnN0eWxlLGs9Yy5jc3NIb29rc1toXTtiPWMuY3NzUHJvcHNbaF18fGg7aWYoZCE9PUIpe2lmKCEodHlwZW9mIGQ9PT0ibnVtYmVyIiYmaXNOYU4oZCl8fGQ9PW51bGwpKXtpZih0eXBlb2YgZD09PSJudW1iZXIiJiYhYy5jc3NOdW1iZXJbaF0pZCs9InB4IjtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PUIpdHJ5e2xbYl09ZH1jYXRjaChvKXt9fX1lbHNle2lmKGsmJiJnZXQiaW4gayYmKGY9ay5nZXQoYSxmYWxzZSxlKSkhPT1CKXJldHVybiBmO3JldHVybiBsW2JdfX19LGNzczpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZj1jLmNhbWVsQ2FzZShiKSwKaD1jLmNzc0hvb2tzW2ZdO2I9Yy5jc3NQcm9wc1tmXXx8ZjtpZihoJiYiZ2V0ImluIGgmJihlPWguZ2V0KGEsdHJ1ZSxkKSkhPT1CKXJldHVybiBlO2Vsc2UgaWYoVylyZXR1cm4gVyhhLGIsZil9LHN3YXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXt9LGY7Zm9yKGYgaW4gYil7ZVtmXT1hLnN0eWxlW2ZdO2Euc3R5bGVbZl09YltmXX1kLmNhbGwoYSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWVbZl19LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGhiLGxiKX19KTtjLmN1ckNTUz1jLmNzcztjLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Yy5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGQsZSxmKXt2YXIgaDtpZihlKXtpZihkLm9mZnNldFdpZHRoIT09MCloPW9hKGQsYixmKTtlbHNlIGMuc3dhcChkLGtiLGZ1bmN0aW9uKCl7aD1vYShkLGIsZil9KTtpZihoPD0wKXtoPVcoZCxiLGIpO2lmKGg9PT0iMHB4IiYmYWEpaD1hYShkLGIsYik7CmlmKGghPW51bGwpcmV0dXJuIGg9PT0iInx8aD09PSJhdXRvIj8iMHB4IjpofWlmKGg8MHx8aD09bnVsbCl7aD1kLnN0eWxlW2JdO3JldHVybiBoPT09IiJ8fGg9PT0iYXV0byI/IjBweCI6aH1yZXR1cm4gdHlwZW9mIGg9PT0ic3RyaW5nIj9oOmgrInB4In19LHNldDpmdW5jdGlvbihkLGUpe2lmKEZhLnRlc3QoZSkpe2U9cGFyc2VGbG9hdChlKTtpZihlPj0wKXJldHVybiBlKyJweCJ9ZWxzZSByZXR1cm4gZX19fSk7aWYoIWMuc3VwcG9ydC5vcGFjaXR5KWMuY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGdiLnRlc3QoKGImJmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlLmZpbHRlcjphLnN0eWxlLmZpbHRlcil8fCIiKT9wYXJzZUZsb2F0KFJlZ0V4cC4kMSkvMTAwKyIiOmI/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLnN0eWxlO2Quem9vbT0xO3ZhciBlPWMuaXNOYU4oYik/IiI6ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSIsZj0KZC5maWx0ZXJ8fCIiO2QuZmlsdGVyPUVhLnRlc3QoZik/Zi5yZXBsYWNlKEVhLGUpOmQuZmlsdGVyKyIgIitlfX07aWYodC5kZWZhdWx0VmlldyYmdC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKUdhPWZ1bmN0aW9uKGEsYixkKXt2YXIgZTtkPWQucmVwbGFjZShpYiwiLSQxIikudG9Mb3dlckNhc2UoKTtpZighKGI9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSlyZXR1cm4gQjtpZihiPWIuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKXtlPWIuZ2V0UHJvcGVydHlWYWx1ZShkKTtpZihlPT09IiImJiFjLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkpZT1jLnN0eWxlKGEsZCl9cmV0dXJuIGV9O2lmKHQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSlhYT1mdW5jdGlvbihhLGIpe3ZhciBkLGUsZj1hLmN1cnJlbnRTdHlsZSYmYS5jdXJyZW50U3R5bGVbYl0saD1hLnN0eWxlO2lmKCFGYS50ZXN0KGYpJiZqYi50ZXN0KGYpKXtkPWgubGVmdDsKZT1hLnJ1bnRpbWVTdHlsZS5sZWZ0O2EucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdDtoLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6Znx8MDtmPWgucGl4ZWxMZWZ0KyJweCI7aC5sZWZ0PWQ7YS5ydW50aW1lU3R5bGUubGVmdD1lfXJldHVybiBmPT09IiI/ImF1dG8iOmZ9O1c9R2F8fGFhO2lmKGMuZXhwciYmYy5leHByLmZpbHRlcnMpe2MuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldEhlaWdodDtyZXR1cm4gYS5vZmZzZXRXaWR0aD09PTAmJmI9PT0wfHwhYy5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUuZGlzcGxheXx8Yy5jc3MoYSwiZGlzcGxheSIpKT09PSJub25lIn07Yy5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hYy5leHByLmZpbHRlcnMuaGlkZGVuKGEpfX12YXIgbWI9Yy5ub3coKSxuYj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKb2I9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2kscGI9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLHFiPS9eKD86R0VUfEhFQUQpJC8sUmE9L1xbXF0kLyxUPS9cPVw/KCZ8JCkvLGphPS9cPy8scmI9LyhbPyZdKV89W14mXSovLHNiPS9eKFx3KzopP1wvXC8oW15cLz8jXSspLyx0Yj0vJTIwL2csdWI9LyMuKiQvLEhhPWMuZm4ubG9hZDtjLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGIsZCl7aWYodHlwZW9mIGEhPT0ic3RyaW5nIiYmSGEpcmV0dXJuIEhhLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlbHNlIGlmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZj1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfWU9IkdFVCI7aWYoYilpZihjLmlzRnVuY3Rpb24oYikpe2Q9YjtiPW51bGx9ZWxzZSBpZih0eXBlb2YgYj09PQoib2JqZWN0Iil7Yj1jLnBhcmFtKGIsYy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2U9IlBPU1QifXZhciBoPXRoaXM7Yy5hamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yixjb21wbGV0ZTpmdW5jdGlvbihsLGspe2lmKGs9PT0ic3VjY2VzcyJ8fGs9PT0ibm90bW9kaWZpZWQiKWguaHRtbChmP2MoIjxkaXY+IikuYXBwZW5kKGwucmVzcG9uc2VUZXh0LnJlcGxhY2UobmIsIiIpKS5maW5kKGYpOmwucmVzcG9uc2VUZXh0KTtkJiZoLmVhY2goZCxbbC5yZXNwb25zZVRleHQsayxsXSl9fSk7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBjLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/Yy5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJgohdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8b2IudGVzdCh0aGlzLm5vZGVOYW1lKXx8cGIudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBkPWModGhpcykudmFsKCk7cmV0dXJuIGQ9PW51bGw/bnVsbDpjLmlzQXJyYXkoZCk/Yy5tYXAoZCxmdW5jdGlvbihlKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6ZX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6ZH19KS5nZXQoKX19KTtjLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5iaW5kKGIsZCl9fSk7Yy5leHRlbmQoe2dldDpmdW5jdGlvbihhLGIsZCxlKXtpZihjLmlzRnVuY3Rpb24oYikpe2U9ZXx8ZDtkPWI7Yj1udWxsfXJldHVybiBjLmFqYXgoe3R5cGU6IkdFVCIsdXJsOmEsZGF0YTpiLHN1Y2Nlc3M6ZCxkYXRhVHlwZTplfSl9LApnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYy5nZXQoYSxudWxsLGIsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5nZXQoYSxiLGQsImpzb24iKX0scG9zdDpmdW5jdGlvbihhLGIsZCxlKXtpZihjLmlzRnVuY3Rpb24oYikpe2U9ZXx8ZDtkPWI7Yj17fX1yZXR1cm4gYy5hamF4KHt0eXBlOiJQT1NUIix1cmw6YSxkYXRhOmIsc3VjY2VzczpkLGRhdGFUeXBlOmV9KX0sYWpheFNldHVwOmZ1bmN0aW9uKGEpe2MuZXh0ZW5kKGMuYWpheFNldHRpbmdzLGEpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLGdsb2JhbDp0cnVlLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6dHJ1ZSxhc3luYzp0cnVlLHhocjpmdW5jdGlvbigpe3JldHVybiBuZXcgRS5YTUxIdHRwUmVxdWVzdH0sYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLApzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIixfZGVmYXVsdDoiKi8qIn19LGFqYXg6ZnVuY3Rpb24oYSl7dmFyIGI9Yy5leHRlbmQodHJ1ZSx7fSxjLmFqYXhTZXR0aW5ncyxhKSxkLGUsZixoPWIudHlwZS50b1VwcGVyQ2FzZSgpLGw9cWIudGVzdChoKTtiLnVybD1iLnVybC5yZXBsYWNlKHViLCIiKTtiLmNvbnRleHQ9YSYmYS5jb250ZXh0IT1udWxsP2EuY29udGV4dDpiO2lmKGIuZGF0YSYmYi5wcm9jZXNzRGF0YSYmdHlwZW9mIGIuZGF0YSE9PSJzdHJpbmciKWIuZGF0YT1jLnBhcmFtKGIuZGF0YSxiLnRyYWRpdGlvbmFsKTtpZihiLmRhdGFUeXBlPT09Impzb25wIil7aWYoaD09PSJHRVQiKVQudGVzdChiLnVybCl8fChiLnVybCs9KGphLnRlc3QoYi51cmwpPyImIjoiPyIpKyhiLmpzb25wfHwiY2FsbGJhY2siKSsiPT8iKTtlbHNlIGlmKCFiLmRhdGF8fAohVC50ZXN0KGIuZGF0YSkpYi5kYXRhPShiLmRhdGE/Yi5kYXRhKyImIjoiIikrKGIuanNvbnB8fCJjYWxsYmFjayIpKyI9PyI7Yi5kYXRhVHlwZT0ianNvbiJ9aWYoYi5kYXRhVHlwZT09PSJqc29uIiYmKGIuZGF0YSYmVC50ZXN0KGIuZGF0YSl8fFQudGVzdChiLnVybCkpKXtkPWIuanNvbnBDYWxsYmFja3x8Impzb25wIittYisrO2lmKGIuZGF0YSliLmRhdGE9KGIuZGF0YSsiIikucmVwbGFjZShULCI9IitkKyIkMSIpO2IudXJsPWIudXJsLnJlcGxhY2UoVCwiPSIrZCsiJDEiKTtiLmRhdGFUeXBlPSJzY3JpcHQiO3ZhciBrPUVbZF07RVtkXT1mdW5jdGlvbihtKXtpZihjLmlzRnVuY3Rpb24oaykpayhtKTtlbHNle0VbZF09Qjt0cnl7ZGVsZXRlIEVbZF19Y2F0Y2gocCl7fX1mPW07Yy5oYW5kbGVTdWNjZXNzKGIsdyxlLGYpO2MuaGFuZGxlQ29tcGxldGUoYix3LGUsZik7ciYmci5yZW1vdmVDaGlsZChBKX19aWYoYi5kYXRhVHlwZT09PSJzY3JpcHQiJiZiLmNhY2hlPT09bnVsbCliLmNhY2hlPQpmYWxzZTtpZihiLmNhY2hlPT09ZmFsc2UmJmwpe3ZhciBvPWMubm93KCkseD1iLnVybC5yZXBsYWNlKHJiLCIkMV89IitvKTtiLnVybD14Kyh4PT09Yi51cmw/KGphLnRlc3QoYi51cmwpPyImIjoiPyIpKyJfPSIrbzoiIil9aWYoYi5kYXRhJiZsKWIudXJsKz0oamEudGVzdChiLnVybCk/IiYiOiI/IikrYi5kYXRhO2IuZ2xvYmFsJiZjLmFjdGl2ZSsrPT09MCYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtvPShvPXNiLmV4ZWMoYi51cmwpKSYmKG9bMV0mJm9bMV0udG9Mb3dlckNhc2UoKSE9PWxvY2F0aW9uLnByb3RvY29sfHxvWzJdLnRvTG93ZXJDYXNlKCkhPT1sb2NhdGlvbi5ob3N0KTtpZihiLmRhdGFUeXBlPT09InNjcmlwdCImJmg9PT0iR0VUIiYmbyl7dmFyIHI9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHx0LmRvY3VtZW50RWxlbWVudCxBPXQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aWYoYi5zY3JpcHRDaGFyc2V0KUEuY2hhcnNldD1iLnNjcmlwdENoYXJzZXQ7CkEuc3JjPWIudXJsO2lmKCFkKXt2YXIgQz1mYWxzZTtBLm9ubG9hZD1BLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKCFDJiYoIXRoaXMucmVhZHlTdGF0ZXx8dGhpcy5yZWFkeVN0YXRlPT09ImxvYWRlZCJ8fHRoaXMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpKXtDPXRydWU7Yy5oYW5kbGVTdWNjZXNzKGIsdyxlLGYpO2MuaGFuZGxlQ29tcGxldGUoYix3LGUsZik7QS5vbmxvYWQ9QS5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDtyJiZBLnBhcmVudE5vZGUmJnIucmVtb3ZlQ2hpbGQoQSl9fX1yLmluc2VydEJlZm9yZShBLHIuZmlyc3RDaGlsZCk7cmV0dXJuIEJ9dmFyIEo9ZmFsc2Usdz1iLnhocigpO2lmKHcpe2IudXNlcm5hbWU/dy5vcGVuKGgsYi51cmwsYi5hc3luYyxiLnVzZXJuYW1lLGIucGFzc3dvcmQpOncub3BlbihoLGIudXJsLGIuYXN5bmMpO3RyeXtpZihiLmRhdGEhPW51bGwmJiFsfHxhJiZhLmNvbnRlbnRUeXBlKXcuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwKYi5jb250ZW50VHlwZSk7aWYoYi5pZk1vZGlmaWVkKXtjLmxhc3RNb2RpZmllZFtiLnVybF0mJncuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGMubGFzdE1vZGlmaWVkW2IudXJsXSk7Yy5ldGFnW2IudXJsXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixjLmV0YWdbYi51cmxdKX1vfHx3LnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIpO3cuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixiLmRhdGFUeXBlJiZiLmFjY2VwdHNbYi5kYXRhVHlwZV0/Yi5hY2NlcHRzW2IuZGF0YVR5cGVdKyIsICovKjsgcT0wLjAxIjpiLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKEkpe31pZihiLmJlZm9yZVNlbmQmJmIuYmVmb3JlU2VuZC5jYWxsKGIuY29udGV4dCx3LGIpPT09ZmFsc2Upe2IuZ2xvYmFsJiZjLmFjdGl2ZS0tPT09MSYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpO3cuYWJvcnQoKTtyZXR1cm4gZmFsc2V9Yi5nbG9iYWwmJgpjLnRyaWdnZXJHbG9iYWwoYiwiYWpheFNlbmQiLFt3LGJdKTt2YXIgTD13Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihtKXtpZighd3x8dy5yZWFkeVN0YXRlPT09MHx8bT09PSJhYm9ydCIpe0p8fGMuaGFuZGxlQ29tcGxldGUoYix3LGUsZik7Sj10cnVlO2lmKHcpdy5vbnJlYWR5c3RhdGVjaGFuZ2U9Yy5ub29wfWVsc2UgaWYoIUomJncmJih3LnJlYWR5U3RhdGU9PT00fHxtPT09InRpbWVvdXQiKSl7Sj10cnVlO3cub25yZWFkeXN0YXRlY2hhbmdlPWMubm9vcDtlPW09PT0idGltZW91dCI/InRpbWVvdXQiOiFjLmh0dHBTdWNjZXNzKHcpPyJlcnJvciI6Yi5pZk1vZGlmaWVkJiZjLmh0dHBOb3RNb2RpZmllZCh3LGIudXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjt2YXIgcDtpZihlPT09InN1Y2Nlc3MiKXRyeXtmPWMuaHR0cERhdGEodyxiLmRhdGFUeXBlLGIpfWNhdGNoKHEpe2U9InBhcnNlcmVycm9yIjtwPXF9aWYoZT09PSJzdWNjZXNzInx8ZT09PSJub3Rtb2RpZmllZCIpZHx8CmMuaGFuZGxlU3VjY2VzcyhiLHcsZSxmKTtlbHNlIGMuaGFuZGxlRXJyb3IoYix3LGUscCk7ZHx8Yy5oYW5kbGVDb21wbGV0ZShiLHcsZSxmKTttPT09InRpbWVvdXQiJiZ3LmFib3J0KCk7aWYoYi5hc3luYyl3PW51bGx9fTt0cnl7dmFyIGc9dy5hYm9ydDt3LmFib3J0PWZ1bmN0aW9uKCl7dyYmRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuY2FsbChnLHcpO0woImFib3J0Iil9fWNhdGNoKGkpe31iLmFzeW5jJiZiLnRpbWVvdXQ+MCYmc2V0VGltZW91dChmdW5jdGlvbigpe3cmJiFKJiZMKCJ0aW1lb3V0Iil9LGIudGltZW91dCk7dHJ5e3cuc2VuZChsfHxiLmRhdGE9PW51bGw/bnVsbDpiLmRhdGEpfWNhdGNoKG4pe2MuaGFuZGxlRXJyb3IoYix3LG51bGwsbik7Yy5oYW5kbGVDb21wbGV0ZShiLHcsZSxmKX1iLmFzeW5jfHxMKCk7cmV0dXJuIHd9fSxwYXJhbTpmdW5jdGlvbihhLGIpe3ZhciBkPVtdLGU9ZnVuY3Rpb24oaCxsKXtsPWMuaXNGdW5jdGlvbihsKT9sKCk6bDtkW2QubGVuZ3RoXT0KZW5jb2RlVVJJQ29tcG9uZW50KGgpKyI9IitlbmNvZGVVUklDb21wb25lbnQobCl9O2lmKGI9PT1CKWI9Yy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7aWYoYy5pc0FycmF5KGEpfHxhLmpxdWVyeSljLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IodmFyIGYgaW4gYSlkYShmLGFbZl0sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZSh0YiwiKyIpfX0pO2MuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxoYW5kbGVFcnJvcjpmdW5jdGlvbihhLGIsZCxlKXthLmVycm9yJiZhLmVycm9yLmNhbGwoYS5jb250ZXh0LGIsZCxlKTthLmdsb2JhbCYmYy50cmlnZ2VyR2xvYmFsKGEsImFqYXhFcnJvciIsW2IsYSxlXSl9LGhhbmRsZVN1Y2Nlc3M6ZnVuY3Rpb24oYSxiLGQsZSl7YS5zdWNjZXNzJiZhLnN1Y2Nlc3MuY2FsbChhLmNvbnRleHQsZSxkLGIpO2EuZ2xvYmFsJiZjLnRyaWdnZXJHbG9iYWwoYSwiYWpheFN1Y2Nlc3MiLApbYixhXSl9LGhhbmRsZUNvbXBsZXRlOmZ1bmN0aW9uKGEsYixkKXthLmNvbXBsZXRlJiZhLmNvbXBsZXRlLmNhbGwoYS5jb250ZXh0LGIsZCk7YS5nbG9iYWwmJmMudHJpZ2dlckdsb2JhbChhLCJhamF4Q29tcGxldGUiLFtiLGFdKTthLmdsb2JhbCYmYy5hY3RpdmUtLT09PTEmJmMuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX0sdHJpZ2dlckdsb2JhbDpmdW5jdGlvbihhLGIsZCl7KGEuY29udGV4dCYmYS5jb250ZXh0LnVybD09bnVsbD9jKGEuY29udGV4dCk6Yy5ldmVudCkudHJpZ2dlcihiLGQpfSxodHRwU3VjY2VzczpmdW5jdGlvbihhKXt0cnl7cmV0dXJuIWEuc3RhdHVzJiZsb2NhdGlvbi5wcm90b2NvbD09PSJmaWxlOiJ8fGEuc3RhdHVzPj0yMDAmJmEuc3RhdHVzPDMwMHx8YS5zdGF0dXM9PT0zMDR8fGEuc3RhdHVzPT09MTIyM31jYXRjaChiKXt9cmV0dXJuIGZhbHNlfSxodHRwTm90TW9kaWZpZWQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksCmU9YS5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpO2lmKGQpYy5sYXN0TW9kaWZpZWRbYl09ZDtpZihlKWMuZXRhZ1tiXT1lO3JldHVybiBhLnN0YXR1cz09PTMwNH0saHR0cERhdGE6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixmPWI9PT0ieG1sInx8IWImJmUuaW5kZXhPZigieG1sIik+PTA7YT1mP2EucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQ7ZiYmYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiJiZjLmVycm9yKCJwYXJzZXJlcnJvciIpO2lmKGQmJmQuZGF0YUZpbHRlcilhPWQuZGF0YUZpbHRlcihhLGIpO2lmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoYj09PSJqc29uInx8IWImJmUuaW5kZXhPZigianNvbiIpPj0wKWE9Yy5wYXJzZUpTT04oYSk7ZWxzZSBpZihiPT09InNjcmlwdCJ8fCFiJiZlLmluZGV4T2YoImphdmFzY3JpcHQiKT49MCljLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fSk7CmlmKEUuQWN0aXZlWE9iamVjdCljLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXtpZihFLmxvY2F0aW9uLnByb3RvY29sIT09ImZpbGU6Iil0cnl7cmV0dXJuIG5ldyBFLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGEpe310cnl7cmV0dXJuIG5ldyBFLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX07Yy5zdXBwb3J0LmFqYXg9ISFjLmFqYXhTZXR0aW5ncy54aHIoKTt2YXIgZWE9e30sdmI9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHdiPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoLiopJC8sYmEscGE9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV07Yy5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGQpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoUygic2hvdyIsCjMpLGEsYixkKTtlbHNle2Q9MDtmb3IodmFyIGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7YT10aGlzW2RdO2I9YS5zdHlsZS5kaXNwbGF5O2lmKCFjLmRhdGEoYSwib2xkZGlzcGxheSIpJiZiPT09Im5vbmUiKWI9YS5zdHlsZS5kaXNwbGF5PSIiO2I9PT0iIiYmYy5jc3MoYSwiZGlzcGxheSIpPT09Im5vbmUiJiZjLmRhdGEoYSwib2xkZGlzcGxheSIscWEoYS5ub2RlTmFtZSkpfWZvcihkPTA7ZDxlO2QrKyl7YT10aGlzW2RdO2I9YS5zdHlsZS5kaXNwbGF5O2lmKGI9PT0iInx8Yj09PSJub25lIilhLnN0eWxlLmRpc3BsYXk9Yy5kYXRhKGEsIm9sZGRpc3BsYXkiKXx8IiJ9cmV0dXJuIHRoaXN9fSxoaWRlOmZ1bmN0aW9uKGEsYixkKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKFMoImhpZGUiLDMpLGEsYixkKTtlbHNle2E9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXtkPWMuY3NzKHRoaXNbYV0sImRpc3BsYXkiKTtkIT09Im5vbmUiJiZjLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIsCmQpfWZvcihhPTA7YTxiO2ErKyl0aGlzW2FdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3JldHVybiB0aGlzfX0sX3RvZ2dsZTpjLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPXR5cGVvZiBhPT09ImJvb2xlYW4iO2lmKGMuaXNGdW5jdGlvbihhKSYmYy5pc0Z1bmN0aW9uKGIpKXRoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZSBhPT1udWxsfHxlP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWU/YTpjKHRoaXMpLmlzKCI6aGlkZGVuIik7Yyh0aGlzKVtmPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoUygidG9nZ2xlIiwzKSxhLGIsZCk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsZCxlKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsZCxlKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1jLnNwZWVkKGIsCmQsZSk7aWYoYy5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZi5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZi5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBoPWMuZXh0ZW5kKHt9LGYpLGwsaz10aGlzLm5vZGVUeXBlPT09MSxvPWsmJmModGhpcykuaXMoIjpoaWRkZW4iKSx4PXRoaXM7Zm9yKGwgaW4gYSl7dmFyIHI9Yy5jYW1lbENhc2UobCk7aWYobCE9PXIpe2Fbcl09YVtsXTtkZWxldGUgYVtsXTtsPXJ9aWYoYVtsXT09PSJoaWRlIiYmb3x8YVtsXT09PSJzaG93IiYmIW8pcmV0dXJuIGguY29tcGxldGUuY2FsbCh0aGlzKTtpZihrJiYobD09PSJoZWlnaHQifHxsPT09IndpZHRoIikpe2gub3ZlcmZsb3c9W3RoaXMuc3R5bGUub3ZlcmZsb3csdGhpcy5zdHlsZS5vdmVyZmxvd1gsdGhpcy5zdHlsZS5vdmVyZmxvd1ldO2lmKGMuY3NzKHRoaXMsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZjLmNzcyh0aGlzLCJmbG9hdCIpPT09Im5vbmUiKWlmKGMuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0KWlmKHFhKHRoaXMubm9kZU5hbWUpPT09CiJpbmxpbmUiKXRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjtlbHNle3RoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lIjt0aGlzLnN0eWxlLnpvb209MX1lbHNlIHRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn1pZihjLmlzQXJyYXkoYVtsXSkpeyhoLnNwZWNpYWxFYXNpbmc9aC5zcGVjaWFsRWFzaW5nfHx7fSlbbF09YVtsXVsxXTthW2xdPWFbbF1bMF19fWlmKGgub3ZlcmZsb3chPW51bGwpdGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtoLmN1ckFuaW09Yy5leHRlbmQoe30sYSk7Yy5lYWNoKGEsZnVuY3Rpb24oQSxDKXt2YXIgSj1uZXcgYy5meCh4LGgsQSk7aWYodmIudGVzdChDKSlKW0M9PT0idG9nZ2xlIj9vPyJzaG93IjoiaGlkZSI6Q10oYSk7ZWxzZXt2YXIgdz13Yi5leGVjKEMpLEk9Si5jdXIoKXx8MDtpZih3KXt2YXIgTD1wYXJzZUZsb2F0KHdbMl0pLGc9d1szXXx8InB4IjtpZihnIT09InB4Iil7Yy5zdHlsZSh4LEEsKEx8fDEpK2cpO0k9KEx8fAoxKS9KLmN1cigpKkk7Yy5zdHlsZSh4LEEsSStnKX1pZih3WzFdKUw9KHdbMV09PT0iLT0iPy0xOjEpKkwrSTtKLmN1c3RvbShJLEwsZyl9ZWxzZSBKLmN1c3RvbShJLEMsIiIpfX0pO3JldHVybiB0cnVlfSl9LHN0b3A6ZnVuY3Rpb24oYSxiKXt2YXIgZD1jLnRpbWVyczthJiZ0aGlzLnF1ZXVlKFtdKTt0aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIGU9ZC5sZW5ndGgtMTtlPj0wO2UtLSlpZihkW2VdLmVsZW09PT10aGlzKXtiJiZkW2VdKHRydWUpO2Quc3BsaWNlKGUsMSl9fSk7Ynx8dGhpcy5kZXF1ZXVlKCk7cmV0dXJuIHRoaXN9fSk7Yy5lYWNoKHtzbGlkZURvd246Uygic2hvdyIsMSksc2xpZGVVcDpTKCJoaWRlIiwxKSxzbGlkZVRvZ2dsZTpTKCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZSxmKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsCmQsZSxmKX19KTtjLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEmJnR5cGVvZiBhPT09Im9iamVjdCI/Yy5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmR8fCFkJiZifHxjLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6ZCYmYnx8YiYmIWMuaXNGdW5jdGlvbihiKSYmYn07ZS5kdXJhdGlvbj1jLmZ4Lm9mZj8wOnR5cGVvZiBlLmR1cmF0aW9uPT09Im51bWJlciI/ZS5kdXJhdGlvbjplLmR1cmF0aW9uIGluIGMuZnguc3BlZWRzP2MuZnguc3BlZWRzW2UuZHVyYXRpb25dOmMuZnguc3BlZWRzLl9kZWZhdWx0O2Uub2xkPWUuY29tcGxldGU7ZS5jb21wbGV0ZT1mdW5jdGlvbigpe2UucXVldWUhPT1mYWxzZSYmYyh0aGlzKS5kZXF1ZXVlKCk7Yy5pc0Z1bmN0aW9uKGUub2xkKSYmZS5vbGQuY2FsbCh0aGlzKX07cmV0dXJuIGV9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixkLGUpe3JldHVybiBkK2UqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGQsZSl7cmV0dXJuKC1NYXRoLmNvcyhhKgpNYXRoLlBJKS8yKzAuNSkqZStkfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixkKXt0aGlzLm9wdGlvbnM9Yjt0aGlzLmVsZW09YTt0aGlzLnByb3A9ZDtpZighYi5vcmlnKWIub3JpZz17fX19KTtjLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpOyhjLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8Yy5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhPXBhcnNlRmxvYXQoYy5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCkpO3JldHVybiBhJiZhPi0xRTQ/YTowfSxjdXN0b206ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGUobCl7cmV0dXJuIGYuc3RlcChsKX0KdmFyIGY9dGhpcyxoPWMuZng7dGhpcy5zdGFydFRpbWU9Yy5ub3coKTt0aGlzLnN0YXJ0PWE7dGhpcy5lbmQ9Yjt0aGlzLnVuaXQ9ZHx8dGhpcy51bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0wO2UuZWxlbT10aGlzLmVsZW07aWYoZSgpJiZjLnRpbWVycy5wdXNoKGUpJiYhYmEpYmE9c2V0SW50ZXJ2YWwoaC50aWNrLGguaW50ZXJ2YWwpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1jLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO2ModGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWMuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTsKdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYj1jLm5vdygpLGQ9dHJ1ZTtpZihhfHxiPj10aGlzLm9wdGlvbnMuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kO3RoaXMucG9zPXRoaXMuc3RhdGU9MTt0aGlzLnVwZGF0ZSgpO3RoaXMub3B0aW9ucy5jdXJBbmltW3RoaXMucHJvcF09dHJ1ZTtmb3IodmFyIGUgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0paWYodGhpcy5vcHRpb25zLmN1ckFuaW1bZV0hPT10cnVlKWQ9ZmFsc2U7aWYoZCl7aWYodGhpcy5vcHRpb25zLm92ZXJmbG93IT1udWxsJiYhYy5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3Mpe3ZhciBmPXRoaXMuZWxlbSxoPXRoaXMub3B0aW9ucztjLmVhY2goWyIiLCJYIiwiWSJdLGZ1bmN0aW9uKGssbyl7Zi5zdHlsZVsib3ZlcmZsb3ciK29dPWgub3ZlcmZsb3dba119KX10aGlzLm9wdGlvbnMuaGlkZSYmYyh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8CnRoaXMub3B0aW9ucy5zaG93KWZvcih2YXIgbCBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSljLnN0eWxlKHRoaXMuZWxlbSxsLHRoaXMub3B0aW9ucy5vcmlnW2xdKTt0aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle2E9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWEvdGhpcy5vcHRpb25zLmR1cmF0aW9uO2I9dGhpcy5vcHRpb25zLmVhc2luZ3x8KGMuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9zPWMuZWFzaW5nW3RoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdfHxiXSh0aGlzLnN0YXRlLGEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3M7dGhpcy51cGRhdGUoKX1yZXR1cm4gdHJ1ZX19O2MuZXh0ZW5kKGMuZngse3RpY2s6ZnVuY3Rpb24oKXtmb3IodmFyIGE9CmMudGltZXJzLGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdKCl8fGEuc3BsaWNlKGItLSwxKTthLmxlbmd0aHx8Yy5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGJhKTtiYT1udWxsfSxzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtjLnN0eWxlKGEuZWxlbSwib3BhY2l0eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtpZihhLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsKWEuZWxlbS5zdHlsZVthLnByb3BdPShhLnByb3A9PT0id2lkdGgifHxhLnByb3A9PT0iaGVpZ2h0Ij9NYXRoLm1heCgwLGEubm93KTphLm5vdykrYS51bml0O2Vsc2UgYS5lbGVtW2EucHJvcF09YS5ub3d9fX0pO2lmKGMuZXhwciYmYy5leHByLmZpbHRlcnMpYy5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZ3JlcChjLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PQpiLmVsZW19KS5sZW5ndGh9O3ZhciB4Yj0vXnQoPzphYmxlfGR8aCkkL2ksSWE9L14oPzpib2R5fGh0bWwpJC9pO2MuZm4ub2Zmc2V0PSJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gdC5kb2N1bWVudEVsZW1lbnQ/ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXSxkO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihsKXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGwpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3RyeXtkPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZSl7fXZhciBmPWIub3duZXJEb2N1bWVudCxoPWYuZG9jdW1lbnRFbGVtZW50O2lmKCFkfHwhYy5jb250YWlucyhoLGIpKXJldHVybiBkfHx7dG9wOjAsbGVmdDowfTtiPWYuYm9keTtmPWZhKGYpO3JldHVybnt0b3A6ZC50b3ArKGYucGFnZVlPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmCmguc2Nyb2xsVG9wfHxiLnNjcm9sbFRvcCktKGguY2xpZW50VG9wfHxiLmNsaWVudFRvcHx8MCksbGVmdDpkLmxlZnQrKGYucGFnZVhPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmaC5zY3JvbGxMZWZ0fHxiLnNjcm9sbExlZnQpLShoLmNsaWVudExlZnR8fGIuY2xpZW50TGVmdHx8MCl9fTpmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih4KXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLHgpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Mub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgZCxlPWIub2Zmc2V0UGFyZW50LGY9Yi5vd25lckRvY3VtZW50LGg9Zi5kb2N1bWVudEVsZW1lbnQsbD1mLmJvZHk7ZD0oZj1mLmRlZmF1bHRWaWV3KT9mLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZTsKZm9yKHZhciBrPWIub2Zmc2V0VG9wLG89Yi5vZmZzZXRMZWZ0OyhiPWIucGFyZW50Tm9kZSkmJmIhPT1sJiZiIT09aDspe2lmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZC5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7ZD1mP2YuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlO2stPWIuc2Nyb2xsVG9wO28tPWIuc2Nyb2xsTGVmdDtpZihiPT09ZSl7ays9Yi5vZmZzZXRUb3A7bys9Yi5vZmZzZXRMZWZ0O2lmKGMub2Zmc2V0LmRvZXNOb3RBZGRCb3JkZXImJiEoYy5vZmZzZXQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMmJnhiLnRlc3QoYi5ub2RlTmFtZSkpKXtrKz1wYXJzZUZsb2F0KGQuYm9yZGVyVG9wV2lkdGgpfHwwO28rPXBhcnNlRmxvYXQoZC5ib3JkZXJMZWZ0V2lkdGgpfHwwfWU9Yi5vZmZzZXRQYXJlbnR9aWYoYy5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZkLm92ZXJmbG93IT09InZpc2libGUiKXtrKz0KcGFyc2VGbG9hdChkLmJvcmRlclRvcFdpZHRoKXx8MDtvKz1wYXJzZUZsb2F0KGQuYm9yZGVyTGVmdFdpZHRoKXx8MH1kPWR9aWYoZC5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGQucG9zaXRpb249PT0ic3RhdGljIil7ays9bC5vZmZzZXRUb3A7bys9bC5vZmZzZXRMZWZ0fWlmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZC5wb3NpdGlvbj09PSJmaXhlZCIpe2srPU1hdGgubWF4KGguc2Nyb2xsVG9wLGwuc2Nyb2xsVG9wKTtvKz1NYXRoLm1heChoLnNjcm9sbExlZnQsbC5zY3JvbGxMZWZ0KX1yZXR1cm57dG9wOmssbGVmdDpvfX07Yy5vZmZzZXQ9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10LmJvZHksYj10LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQsZSxmLGg9cGFyc2VGbG9hdChjLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDA7Yy5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsCmhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSk7Yi5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4Oyc+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OycgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPiI7YS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2Q9Yi5maXJzdENoaWxkO2U9ZC5maXJzdENoaWxkO2Y9ZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5kb2VzTm90QWRkQm9yZGVyPWUub2Zmc2V0VG9wIT09NTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPQpmLm9mZnNldFRvcD09PTU7ZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO2Uuc3R5bGUudG9wPSIyMHB4Ijt0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbj1lLm9mZnNldFRvcD09PTIwfHxlLm9mZnNldFRvcD09PTE1O2Uuc3R5bGUucG9zaXRpb249ZS5zdHlsZS50b3A9IiI7ZC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7dGhpcy5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZS5vZmZzZXRUb3A9PT0tNTt0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09aDthLnJlbW92ZUNoaWxkKGIpO2Mub2Zmc2V0LmluaXRpYWxpemU9Yy5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGQ9YS5vZmZzZXRMZWZ0O2Mub2Zmc2V0LmluaXRpYWxpemUoKTtpZihjLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Yis9cGFyc2VGbG9hdChjLmNzcyhhLAoibWFyZ2luVG9wIikpfHwwO2QrPXBhcnNlRmxvYXQoYy5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MH1yZXR1cm57dG9wOmIsbGVmdDpkfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixkKXt2YXIgZT1jLmNzcyhhLCJwb3NpdGlvbiIpO2lmKGU9PT0ic3RhdGljIilhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7dmFyIGY9YyhhKSxoPWYub2Zmc2V0KCksbD1jLmNzcyhhLCJ0b3AiKSxrPWMuY3NzKGEsImxlZnQiKSxvPWU9PT0iYWJzb2x1dGUiJiZjLmluQXJyYXkoImF1dG8iLFtsLGtdKT4tMTtlPXt9O3ZhciB4PXt9O2lmKG8peD1mLnBvc2l0aW9uKCk7bD1vP3gudG9wOnBhcnNlSW50KGwsMTApfHwwO2s9bz94LmxlZnQ6cGFyc2VJbnQoaywxMCl8fDA7aWYoYy5pc0Z1bmN0aW9uKGIpKWI9Yi5jYWxsKGEsZCxoKTtpZihiLnRvcCE9bnVsbCllLnRvcD1iLnRvcC1oLnRvcCtsO2lmKGIubGVmdCE9bnVsbCllLmxlZnQ9Yi5sZWZ0LWgubGVmdCtrOyJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLAplKTpmLmNzcyhlKX19O2MuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxlPUlhLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtkLnRvcC09cGFyc2VGbG9hdChjLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDA7ZC5sZWZ0LT1wYXJzZUZsb2F0KGMuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDA7ZS50b3ArPXBhcnNlRmxvYXQoYy5jc3MoYlswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDA7ZS5sZWZ0Kz1wYXJzZUZsb2F0KGMuY3NzKGJbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MDtyZXR1cm57dG9wOmQudG9wLWUudG9wLGxlZnQ6ZC5sZWZ0LWUubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8dC5ib2R5O2EmJiFJYS50ZXN0KGEubm9kZU5hbWUpJiYKYy5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiOylhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSk7Yy5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKGEsYil7dmFyIGQ9InNjcm9sbCIrYjtjLmZuW2RdPWZ1bmN0aW9uKGUpe3ZhciBmPXRoaXNbMF0saDtpZighZilyZXR1cm4gbnVsbDtpZihlIT09QilyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoaD1mYSh0aGlzKSloLnNjcm9sbFRvKCFhP2U6YyhoKS5zY3JvbGxMZWZ0KCksYT9lOmMoaCkuc2Nyb2xsVG9wKCkpO2Vsc2UgdGhpc1tkXT1lfSk7ZWxzZSByZXR1cm4oaD1mYShmKSk/InBhZ2VYT2Zmc2V0ImluIGg/aFthPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Yy5zdXBwb3J0LmJveE1vZGVsJiZoLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8aC5kb2N1bWVudC5ib2R5W2RdOmZbZF19fSk7Yy5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGIpe3ZhciBkPWIudG9Mb3dlckNhc2UoKTsKYy5mblsiaW5uZXIiK2JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF0/cGFyc2VGbG9hdChjLmNzcyh0aGlzWzBdLGQsInBhZGRpbmciKSk6bnVsbH07Yy5mblsib3V0ZXIiK2JdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzWzBdP3BhcnNlRmxvYXQoYy5jc3ModGhpc1swXSxkLGU/Im1hcmdpbiI6ImJvcmRlciIpKTpudWxsfTtjLmZuW2RdPWZ1bmN0aW9uKGUpe3ZhciBmPXRoaXNbMF07aWYoIWYpcmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzO2lmKGMuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGwpe3ZhciBrPWModGhpcyk7a1tkXShlLmNhbGwodGhpcyxsLGtbZF0oKSkpfSk7aWYoYy5pc1dpbmRvdyhmKSlyZXR1cm4gZi5kb2N1bWVudC5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiJiZmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitiXXx8Zi5kb2N1bWVudC5ib2R5WyJjbGllbnQiK2JdO2Vsc2UgaWYoZi5ub2RlVHlwZT09PTkpcmV0dXJuIE1hdGgubWF4KGYuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiKwpiXSxmLmJvZHlbInNjcm9sbCIrYl0sZi5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrYl0sZi5ib2R5WyJvZmZzZXQiK2JdLGYuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK2JdKTtlbHNlIGlmKGU9PT1CKXtmPWMuY3NzKGYsZCk7dmFyIGg9cGFyc2VGbG9hdChmKTtyZXR1cm4gYy5pc05hTihoKT9mOmh9ZWxzZSByZXR1cm4gdGhpcy5jc3MoZCx0eXBlb2YgZT09PSJzdHJpbmciP2U6ZSsicHgiKX19KX0pKHdpbmRvdyk7Cg=="></script>
	<script id= "script_sl_jqueryui_js" src="data:/text/plain;base64,LyohIGpRdWVyeSBVSSAtIHYxLjguMjQgLSAyMDEyLTA5LTI4CiogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktdWkKKiBJbmNsdWRlczoganF1ZXJ5LnVpLmNvcmUuanMsIGpxdWVyeS51aS53aWRnZXQuanMsIGpxdWVyeS51aS5tb3VzZS5qcywganF1ZXJ5LnVpLmRyYWdnYWJsZS5qcywganF1ZXJ5LnVpLmRyb3BwYWJsZS5qcywganF1ZXJ5LnVpLnJlc2l6YWJsZS5qcywganF1ZXJ5LnVpLnNlbGVjdGFibGUuanMsIGpxdWVyeS51aS5zb3J0YWJsZS5qcywganF1ZXJ5LmVmZmVjdHMuY29yZS5qcywganF1ZXJ5LmVmZmVjdHMuYmxpbmQuanMsIGpxdWVyeS5lZmZlY3RzLmJvdW5jZS5qcywganF1ZXJ5LmVmZmVjdHMuY2xpcC5qcywganF1ZXJ5LmVmZmVjdHMuZHJvcC5qcywganF1ZXJ5LmVmZmVjdHMuZXhwbG9kZS5qcywganF1ZXJ5LmVmZmVjdHMuZmFkZS5qcywganF1ZXJ5LmVmZmVjdHMuZm9sZC5qcywganF1ZXJ5LmVmZmVjdHMuaGlnaGxpZ2h0LmpzLCBqcXVlcnkuZWZmZWN0cy5wdWxzYXRlLmpzLCBqcXVlcnkuZWZmZWN0cy5zY2FsZS5qcywganF1ZXJ5LmVmZmVjdHMuc2hha2UuanMsIGpxdWVyeS5lZmZlY3RzLnNsaWRlLmpzLCBqcXVlcnkuZWZmZWN0cy50cmFuc2Zlci5qcywganF1ZXJ5LnVpLmFjY29yZGlvbi5qcywganF1ZXJ5LnVpLmF1dG9jb21wbGV0ZS5qcywganF1ZXJ5LnVpLmJ1dHRvbi5qcywganF1ZXJ5LnVpLmRhdGVwaWNrZXIuanMsIGpxdWVyeS51aS5kaWFsb2cuanMsIGpxdWVyeS51aS5wb3NpdGlvbi5qcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmpzLCBqcXVlcnkudWkuc2xpZGVyLmpzLCBqcXVlcnkudWkudGFicy5qcwoqIENvcHlyaWdodCAoYykgMjAxMiBBVVRIT1JTLnR4dDsgTGljZW5zZWQgTUlULCBHUEwgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiLGMpe3ZhciBlPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigiYXJlYSI9PT1lKXt2YXIgZj1iLnBhcmVudE5vZGUsZz1mLm5hbWUsaDtyZXR1cm4hYi5ocmVmfHwhZ3x8Zi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im1hcCI/ITE6KGg9YSgiaW1nW3VzZW1hcD0jIitnKyJdIilbMF0sISFoJiZkKGgpKX1yZXR1cm4oL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0Ly50ZXN0KGUpPyFiLmRpc2FibGVkOiJhIj09ZT9iLmhyZWZ8fGM6YykmJmQoYil9ZnVuY3Rpb24gZChiKXtyZXR1cm4hYShiKS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBhLmN1ckNTUyh0aGlzLCJ2aXNpYmlsaXR5Iik9PT0iaGlkZGVuInx8YS5leHByLmZpbHRlcnMuaGlkZGVuKHRoaXMpfSkubGVuZ3RofWEudWk9YS51aXx8e307aWYoYS51aS52ZXJzaW9uKXJldHVybjthLmV4dGVuZChhLnVpLHt2ZXJzaW9uOiIxLjguMjQiLGtleUNvZGU6e0FMVDoxOCxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkQ6OTEsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09OVFJPTDoxNyxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsSU5TRVJUOjQ1LExFRlQ6MzcsTUVOVTo5MyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDoxMTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LE5VTVBBRF9TVUJUUkFDVDoxMDksUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxVUDozOCxXSU5ET1dTOjkxfX0pLGEuZm4uZXh0ZW5kKHtwcm9wQXR0cjphLmZuLnByb3B8fGEuZm4uYXR0cixfZm9jdXM6YS5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbihiLGMpe3JldHVybiB0eXBlb2YgYj09Im51bWJlciI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YShkKS5mb2N1cygpLGMmJmMuY2FsbChkKX0sYil9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciBiO3JldHVybiBhLmJyb3dzZXIubXNpZSYmLyhzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8L2Fic29sdXRlLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKT9iPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLy50ZXN0KGEuY3VyQ1NTKHRoaXMsInBvc2l0aW9uIiwxKSkmJi8oYXV0b3xzY3JvbGwpLy50ZXN0KGEuY3VyQ1NTKHRoaXMsIm92ZXJmbG93IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy15IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy14IiwxKSl9KS5lcSgwKTpiPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8oYXV0b3xzY3JvbGwpLy50ZXN0KGEuY3VyQ1NTKHRoaXMsIm92ZXJmbG93IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy15IiwxKSthLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy14IiwxKSl9KS5lcSgwKSwvZml4ZWQvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpfHwhYi5sZW5ndGg/YShkb2N1bWVudCk6Yn0sekluZGV4OmZ1bmN0aW9uKGMpe2lmKGMhPT1iKXJldHVybiB0aGlzLmNzcygiekluZGV4IixjKTtpZih0aGlzLmxlbmd0aCl7dmFyIGQ9YSh0aGlzWzBdKSxlLGY7d2hpbGUoZC5sZW5ndGgmJmRbMF0hPT1kb2N1bWVudCl7ZT1kLmNzcygicG9zaXRpb24iKTtpZihlPT09ImFic29sdXRlInx8ZT09PSJyZWxhdGl2ZSJ8fGU9PT0iZml4ZWQiKXtmPXBhcnNlSW50KGQuY3NzKCJ6SW5kZXgiKSwxMCk7aWYoIWlzTmFOKGYpJiZmIT09MClyZXR1cm4gZn1kPWQucGFyZW50KCl9fXJldHVybiAwfSxkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZCgoYS5zdXBwb3J0LnNlbGVjdHN0YXJ0PyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biIpKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSl9LGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX19KSxhKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8YS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbihjLGQpe2Z1bmN0aW9uIGgoYixjLGQsZil7cmV0dXJuIGEuZWFjaChlLGZ1bmN0aW9uKCl7Yy09cGFyc2VGbG9hdChhLmN1ckNTUyhiLCJwYWRkaW5nIit0aGlzLCEwKSl8fDAsZCYmKGMtPXBhcnNlRmxvYXQoYS5jdXJDU1MoYiwiYm9yZGVyIit0aGlzKyJXaWR0aCIsITApKXx8MCksZiYmKGMtPXBhcnNlRmxvYXQoYS5jdXJDU1MoYiwibWFyZ2luIit0aGlzLCEwKSl8fDApfSksY312YXIgZT1kPT09IldpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sZj1kLnRvTG93ZXJDYXNlKCksZz17aW5uZXJXaWR0aDphLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6YS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmEuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDphLmZuLm91dGVySGVpZ2h0fTthLmZuWyJpbm5lciIrZF09ZnVuY3Rpb24oYyl7cmV0dXJuIGM9PT1iP2dbImlubmVyIitkXS5jYWxsKHRoaXMpOnRoaXMuZWFjaChmdW5jdGlvbigpe2EodGhpcykuY3NzKGYsaCh0aGlzLGMpKyJweCIpfSl9LGEuZm5bIm91dGVyIitkXT1mdW5jdGlvbihiLGMpe3JldHVybiB0eXBlb2YgYiE9Im51bWJlciI/Z1sib3V0ZXIiK2RdLmNhbGwodGhpcyxiKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthKHRoaXMpLmNzcyhmLGgodGhpcyxiLCEwLGMpKyJweCIpfSl9fSksYS5leHRlbmQoYS5leHByWyI6Il0se2RhdGE6YS5leHByLmNyZWF0ZVBzZXVkbz9hLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4hIWEuZGF0YShjLGIpfX0pOmZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4hIWEuZGF0YShiLGRbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24oYil7cmV0dXJuIGMoYiwhaXNOYU4oYS5hdHRyKGIsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24oYil7dmFyIGQ9YS5hdHRyKGIsInRhYmluZGV4IiksZT1pc05hTihkKTtyZXR1cm4oZXx8ZD49MCkmJmMoYiwhZSl9fSksYShmdW5jdGlvbigpe3ZhciBiPWRvY3VtZW50LmJvZHksYz1iLmFwcGVuZENoaWxkKGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2Mub2Zmc2V0SGVpZ2h0LGEuZXh0ZW5kKGMuc3R5bGUse21pbkhlaWdodDoiMTAwcHgiLGhlaWdodDoiYXV0byIscGFkZGluZzowLGJvcmRlcldpZHRoOjB9KSxhLnN1cHBvcnQubWluSGVpZ2h0PWMub2Zmc2V0SGVpZ2h0PT09MTAwLGEuc3VwcG9ydC5zZWxlY3RzdGFydD0ib25zZWxlY3RzdGFydCJpbiBjLGIucmVtb3ZlQ2hpbGQoYykuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KSxhLmN1ckNTU3x8KGEuY3VyQ1NTPWEuY3NzKSxhLmV4dGVuZChhLnVpLHtwbHVnaW46e2FkZDpmdW5jdGlvbihiLGMsZCl7dmFyIGU9YS51aVtiXS5wcm90b3R5cGU7Zm9yKHZhciBmIGluIGQpZS5wbHVnaW5zW2ZdPWUucGx1Z2luc1tmXXx8W10sZS5wbHVnaW5zW2ZdLnB1c2goW2MsZFtmXV0pfSxjYWxsOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLnBsdWdpbnNbYl07aWYoIWR8fCFhLmVsZW1lbnRbMF0ucGFyZW50Tm9kZSlyZXR1cm47Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspYS5vcHRpb25zW2RbZV1bMF1dJiZkW2VdWzFdLmFwcGx5KGEuZWxlbWVudCxjKX19LGNvbnRhaW5zOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGRvY3VtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTY6YSE9PWImJmEuY29udGFpbnMoYil9LGhhc1Njcm9sbDpmdW5jdGlvbihiLGMpe2lmKGEoYikuY3NzKCJvdmVyZmxvdyIpPT09ImhpZGRlbiIpcmV0dXJuITE7dmFyIGQ9YyYmYz09PSJsZWZ0Ij8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsZT0hMTtyZXR1cm4gYltkXT4wPyEwOihiW2RdPTEsZT1iW2RdPjAsYltkXT0wLGUpfSxpc092ZXJBeGlzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT5iJiZhPGIrY30saXNPdmVyOmZ1bmN0aW9uKGIsYyxkLGUsZixnKXtyZXR1cm4gYS51aS5pc092ZXJBeGlzKGIsZCxmKSYmYS51aS5pc092ZXJBeGlzKGMsZSxnKX19KX0pKGpRdWVyeSksZnVuY3Rpb24oYSxiKXtpZihhLmNsZWFuRGF0YSl7dmFyIGM9YS5jbGVhbkRhdGE7YS5jbGVhbkRhdGE9ZnVuY3Rpb24oYil7Zm9yKHZhciBkPTAsZTsoZT1iW2RdKSE9bnVsbDtkKyspdHJ5e2EoZSkudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKGYpe31jKGIpfX1lbHNle3ZhciBkPWEuZm4ucmVtb3ZlO2EuZm4ucmVtb3ZlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3JldHVybiBjfHwoIWJ8fGEuZmlsdGVyKGIsW3RoaXNdKS5sZW5ndGgpJiZhKCIqIix0aGlzKS5hZGQoW3RoaXNdKS5lYWNoKGZ1bmN0aW9uKCl7dHJ5e2EodGhpcykudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKGIpe319KSxkLmNhbGwoYSh0aGlzKSxiLGMpfSl9fWEud2lkZ2V0PWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLnNwbGl0KCIuIilbMF0sZjtiPWIuc3BsaXQoIi4iKVsxXSxmPWUrIi0iK2IsZHx8KGQ9YyxjPWEuV2lkZ2V0KSxhLmV4cHJbIjoiXVtmXT1mdW5jdGlvbihjKXtyZXR1cm4hIWEuZGF0YShjLGIpfSxhW2VdPWFbZV18fHt9LGFbZV1bYl09ZnVuY3Rpb24oYSxiKXthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoYSxiKX07dmFyIGc9bmV3IGM7Zy5vcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGcub3B0aW9ucyksYVtlXVtiXS5wcm90b3R5cGU9YS5leHRlbmQoITAsZyx7bmFtZXNwYWNlOmUsd2lkZ2V0TmFtZTpiLHdpZGdldEV2ZW50UHJlZml4OmFbZV1bYl0ucHJvdG90eXBlLndpZGdldEV2ZW50UHJlZml4fHxiLHdpZGdldEJhc2VDbGFzczpmfSxkKSxhLndpZGdldC5icmlkZ2UoYixhW2VdW2JdKX0sYS53aWRnZXQuYnJpZGdlPWZ1bmN0aW9uKGMsZCl7YS5mbltjXT1mdW5jdGlvbihlKXt2YXIgZj10eXBlb2YgZT09InN0cmluZyIsZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaD10aGlzO3JldHVybiBlPSFmJiZnLmxlbmd0aD9hLmV4dGVuZC5hcHBseShudWxsLFshMCxlXS5jb25jYXQoZykpOmUsZiYmZS5jaGFyQXQoMCk9PT0iXyI/aDooZj90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcyxjKSxmPWQmJmEuaXNGdW5jdGlvbihkW2VdKT9kW2VdLmFwcGx5KGQsZyk6ZDtpZihmIT09ZCYmZiE9PWIpcmV0dXJuIGg9ZiwhMX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEuZGF0YSh0aGlzLGMpO2I/Yi5vcHRpb24oZXx8e30pLl9pbml0KCk6YS5kYXRhKHRoaXMsYyxuZXcgZChlLHRoaXMpKX0pLGgpfX0sYS5XaWRnZXQ9ZnVuY3Rpb24oYSxiKXthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoYSxiKX0sYS5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOiJ3aWRnZXQiLHdpZGdldEV2ZW50UHJlZml4OiIiLG9wdGlvbnM6e2Rpc2FibGVkOiExfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKGIsYyl7YS5kYXRhKGMsdGhpcy53aWRnZXROYW1lLHRoaXMpLHRoaXMuZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCghMCx7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLGIpO3ZhciBkPXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoInJlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbigpe2QuZGVzdHJveSgpfSksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIiksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1ldGFkYXRhJiZhLm1ldGFkYXRhLmdldCh0aGlzLmVsZW1lbnRbMF0pW3RoaXMud2lkZ2V0TmFtZV19LF9jcmVhdGU6ZnVuY3Rpb24oKXt9LF9pbml0OmZ1bmN0aW9uKCl7fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSksdGhpcy53aWRnZXQoKS51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSkucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZUNsYXNzKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKGMsZCl7dmFyIGU9YztpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4gYS5leHRlbmQoe30sdGhpcy5vcHRpb25zKTtpZih0eXBlb2YgYz09InN0cmluZyIpe2lmKGQ9PT1iKXJldHVybiB0aGlzLm9wdGlvbnNbY107ZT17fSxlW2NdPWR9cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoZSksdGhpc30sX3NldE9wdGlvbnM6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcztyZXR1cm4gYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXtjLl9zZXRPcHRpb24oYSxiKX0pLHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vcHRpb25zW2FdPWIsYT09PSJkaXNhYmxlZCImJnRoaXMud2lkZ2V0KClbYj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQiKyIgIisidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIixiKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsITEpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCEwKX0sX3RyaWdnZXI6ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZz10aGlzLm9wdGlvbnNbYl07ZD1kfHx7fSxjPWEuRXZlbnQoYyksYy50eXBlPShiPT09dGhpcy53aWRnZXRFdmVudFByZWZpeD9iOnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrYikudG9Mb3dlckNhc2UoKSxjLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sZj1jLm9yaWdpbmFsRXZlbnQ7aWYoZilmb3IoZSBpbiBmKWUgaW4gY3x8KGNbZV09ZltlXSk7cmV0dXJuIHRoaXMuZWxlbWVudC50cmlnZ2VyKGMsZCksIShhLmlzRnVuY3Rpb24oZykmJmcuY2FsbCh0aGlzLmVsZW1lbnRbMF0sYyxkKT09PSExfHxjLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9ITE7YShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbihhKXtjPSExfSksYS53aWRnZXQoInVpLm1vdXNlIix7b3B0aW9uczp7Y2FuY2VsOiI6aW5wdXQsb3B0aW9uIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuZWxlbWVudC5iaW5kKCJtb3VzZWRvd24uIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oYSl7cmV0dXJuIGIuX21vdXNlRG93bihhKX0pLmJpbmQoImNsaWNrLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGMpe2lmKCEwPT09YS5kYXRhKGMudGFyZ2V0LGIud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IikpcmV0dXJuIGEucmVtb3ZlRGF0YShjLnRhcmdldCxiLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITF9KSx0aGlzLnN0YXJ0ZWQ9ITF9LF9tb3VzZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQudW5iaW5kKCIuIit0aGlzLndpZGdldE5hbWUpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlJiZhKGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24oYil7aWYoYylyZXR1cm47dGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKGIpLHRoaXMuX21vdXNlRG93bkV2ZW50PWI7dmFyIGQ9dGhpcyxlPWIud2hpY2g9PTEsZj10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbD09InN0cmluZyImJmIudGFyZ2V0Lm5vZGVOYW1lP2EoYi50YXJnZXQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLmNhbmNlbCkubGVuZ3RoOiExO2lmKCFlfHxmfHwhdGhpcy5fbW91c2VDYXB0dXJlKGIpKXJldHVybiEwO3RoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5LHRoaXMubW91c2VEZWxheU1ldHx8KHRoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5tb3VzZURlbGF5TWV0PSEwfSx0aGlzLm9wdGlvbnMuZGVsYXkpKTtpZih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGIpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGIpKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydChiKSE9PSExO2lmKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpcmV0dXJuIGIucHJldmVudERlZmF1bHQoKSwhMH1yZXR1cm4hMD09PWEuZGF0YShiLnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZhLnJlbW92ZURhdGEoYi50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fbW91c2VNb3ZlKGEpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX21vdXNlVXAoYSl9LGEoZG9jdW1lbnQpLmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLGIucHJldmVudERlZmF1bHQoKSxjPSEwLCEwfSxfbW91c2VNb3ZlOmZ1bmN0aW9uKGIpe3JldHVybiFhLmJyb3dzZXIubXNpZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPj05fHwhIWIuYnV0dG9uP3RoaXMuX21vdXNlU3RhcnRlZD8odGhpcy5fbW91c2VEcmFnKGIpLGIucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoYikmJnRoaXMuX21vdXNlRGVsYXlNZXQoYikmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCxiKSE9PSExLHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3VzZURyYWcoYik6dGhpcy5fbW91c2VVcChiKSksIXRoaXMuX21vdXNlU3RhcnRlZCk6dGhpcy5fbW91c2VVcChiKX0sX21vdXNlVXA6ZnVuY3Rpb24oYil7cmV0dXJuIGEoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEsYi50YXJnZXQ9PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmYS5kYXRhKGIudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKGIpKSwhMX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWEucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWEucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbihhKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oYSl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGEpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihhKXtyZXR1cm4hMH19KX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2Eud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLGEudWkubW91c2Use3dpZGdldEV2ZW50UHJlZml4OiJkcmFnIixvcHRpb25zOnthZGRDbGFzc2VzOiEwLGFwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFRvU29ydGFibGU6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpZnJhbWVGaXg6ITEsb3BhY2l0eTohMSxyZWZyZXNoUG9zaXRpb25zOiExLHJldmVydDohMSxyZXZlcnREdXJhdGlvbjo1MDAsc2NvcGU6ImRlZmF1bHQiLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzbmFwOiExLHNuYXBNb2RlOiJib3RoIixzbmFwVG9sZXJhbmNlOjIwLHN0YWNrOiExLHpJbmRleDohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJiEvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKSYmKHRoaXMuZWxlbWVudFswXS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VJbml0KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZighdGhpcy5lbGVtZW50LmRhdGEoImRyYWdnYWJsZSIpKXJldHVybjtyZXR1cm4gdGhpcy5lbGVtZW50LnJlbW92ZURhdGEoImRyYWdnYWJsZSIpLnVuYmluZCgiLmRyYWdnYWJsZSIpLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIHVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcnx8Yy5kaXNhYmxlZHx8YShiLnRhcmdldCkuaXMoIi51aS1yZXNpemFibGUtaGFuZGxlIik/ITE6KHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZShiKSx0aGlzLmhhbmRsZT8oYy5pZnJhbWVGaXgmJmEoYy5pZnJhbWVGaXg9PT0hMD8iaWZyYW1lIjpjLmlmcmFtZUZpeCkuZWFjaChmdW5jdGlvbigpe2EoJzxkaXYgY2xhc3M9InVpLWRyYWdnYWJsZS1pZnJhbWVGaXgiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmOyI+PC9kaXY+JykuY3NzKHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoKyJweCIsaGVpZ2h0OnRoaXMub2Zmc2V0SGVpZ2h0KyJweCIscG9zaXRpb246ImFic29sdXRlIixvcGFjaXR5OiIwLjAwMSIsekluZGV4OjFlM30pLmNzcyhhKHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpfSksITApOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoYiksdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxhLnVpLmRkbWFuYWdlciYmKGEudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LGEuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDpiLnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOmIucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oYiksdGhpcy5vcmlnaW5hbFBhZ2VYPWIucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPWIucGFnZVksYy5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihjLmN1cnNvckF0KSxjLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLHRoaXMuX3RyaWdnZXIoInN0YXJ0IixiKT09PSExPyh0aGlzLl9jbGVhcigpLCExKToodGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGEudWkuZGRtYW5hZ2VyJiYhYy5kcm9wQmVoYXZpb3VyJiZhLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGIpLHRoaXMuX21vdXNlRHJhZyhiLCEwKSxhLnVpLmRkbWFuYWdlciYmYS51aS5kZG1hbmFnZXIuZHJhZ1N0YXJ0KHRoaXMsYiksITApfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGIsYyl7dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGIpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIik7aWYoIWMpe3ZhciBkPXRoaXMuX3VpSGFzaCgpO2lmKHRoaXMuX3RyaWdnZXIoImRyYWciLGIsZCk9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksITE7dGhpcy5wb3NpdGlvbj1kLnBvc2l0aW9ufWlmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ5Iil0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ4Iil0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4IjtyZXR1cm4gYS51aS5kZG1hbmFnZXImJmEudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxiKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihiKXt2YXIgYz0hMTthLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiYoYz1hLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsYikpLHRoaXMuZHJvcHBlZCYmKGM9dGhpcy5kcm9wcGVkLHRoaXMuZHJvcHBlZD0hMSk7dmFyIGQ9dGhpcy5lbGVtZW50WzBdLGU9ITE7d2hpbGUoZCYmKGQ9ZC5wYXJlbnROb2RlKSlkPT1kb2N1bWVudCYmKGU9ITApO2lmKCFlJiZ0aGlzLm9wdGlvbnMuaGVscGVyPT09Im9yaWdpbmFsIilyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMucmV2ZXJ0PT0iaW52YWxpZCImJiFjfHx0aGlzLm9wdGlvbnMucmV2ZXJ0PT0idmFsaWQiJiZjfHx0aGlzLm9wdGlvbnMucmV2ZXJ0PT09ITB8fGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucmV2ZXJ0KSYmdGhpcy5vcHRpb25zLnJldmVydC5jYWxsKHRoaXMuZWxlbWVudCxjKSl7dmFyIGY9dGhpczthKHRoaXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbixwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0RHVyYXRpb24sMTApLGZ1bmN0aW9uKCl7Zi5fdHJpZ2dlcigic3RvcCIsYikhPT0hMSYmZi5fY2xlYXIoKX0pfWVsc2UgdGhpcy5fdHJpZ2dlcigic3RvcCIsYikhPT0hMSYmdGhpcy5fY2xlYXIoKTtyZXR1cm4hMX0sX21vdXNlVXA6ZnVuY3Rpb24oYil7cmV0dXJuIGEoImRpdi51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbigpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX0pLGEudWkuZGRtYW5hZ2VyJiZhLnVpLmRkbWFuYWdlci5kcmFnU3RvcCh0aGlzLGIpLGEudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcyxiKX0sY2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVscGVyLmlzKCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIik/dGhpcy5fbW91c2VVcCh7fSk6dGhpcy5fY2xlYXIoKSx0aGlzfSxfZ2V0SGFuZGxlOmZ1bmN0aW9uKGIpe3ZhciBjPSF0aGlzLm9wdGlvbnMuaGFuZGxlfHwhYSh0aGlzLm9wdGlvbnMuaGFuZGxlLHRoaXMuZWxlbWVudCkubGVuZ3RoPyEwOiExO3JldHVybiBhKHRoaXMub3B0aW9ucy5oYW5kbGUsdGhpcy5lbGVtZW50KS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT1iLnRhcmdldCYmKGM9ITApfSksY30sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm9wdGlvbnMsZD1hLmlzRnVuY3Rpb24oYy5oZWxwZXIpP2EoYy5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtiXSkpOmMuaGVscGVyPT0iY2xvbmUiP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIik6dGhpcy5lbGVtZW50O3JldHVybiBkLnBhcmVudHMoImJvZHkiKS5sZW5ndGh8fGQuYXBwZW5kVG8oYy5hcHBlbmRUbz09InBhcmVudCI/dGhpcy5lbGVtZW50WzBdLnBhcmVudE5vZGU6Yy5hcHBlbmRUbyksZFswXSE9dGhpcy5lbGVtZW50WzBdJiYhLyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3QoZC5jc3MoInBvc2l0aW9uIikpJiZkLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLGR9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGIpe3R5cGVvZiBiPT0ic3RyaW5nIiYmKGI9Yi5zcGxpdCgiICIpKSxhLmlzQXJyYXkoYikmJihiPXtsZWZ0OitiWzBdLHRvcDorYlsxXXx8MH0pLCJsZWZ0ImluIGImJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWIubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIGImJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtYi5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiBiJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPWIudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gYiYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1iLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciBiPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3RoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmYS51aS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJihiLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSxiLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpO2lmKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiZ0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJodG1sIiYmYS5icm93c2VyLm1zaWUpYj17dG9wOjAsbGVmdDowfTtyZXR1cm57dG9wOmIudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OmIubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5jc3NQb3NpdGlvbj09InJlbGF0aXZlIil7dmFyIGE9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCk7cmV0dXJue3RvcDphLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6YS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luVG9wIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksMTApfHwwLGJvdHRvbTpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucztiLmNvbnRhaW5tZW50PT0icGFyZW50IiYmKGIuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSk7aWYoYi5jb250YWlubWVudD09ImRvY3VtZW50Inx8Yi5jb250YWlubWVudD09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bYi5jb250YWlubWVudD09ImRvY3VtZW50Ij8wOmEod2luZG93KS5zY3JvbGxMZWZ0KCktdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCxiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6YSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLChiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6YSh3aW5kb3cpLnNjcm9sbExlZnQoKSkrYShiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6YSh3aW5kb3cpLnNjcm9sbFRvcCgpKSsoYShiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdO2lmKCEvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3QoYi5jb250YWlubWVudCkmJmIuY29udGFpbm1lbnQuY29uc3RydWN0b3IhPUFycmF5KXt2YXIgYz1hKGIuY29udGFpbm1lbnQpLGQ9Y1swXTtpZighZClyZXR1cm47dmFyIGU9Yy5vZmZzZXQoKSxmPWEoZCkuY3NzKCJvdmVyZmxvdyIpIT0iaGlkZGVuIjt0aGlzLmNvbnRhaW5tZW50PVsocGFyc2VJbnQoYShkKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGEoZCkuY3NzKCJwYWRkaW5nTGVmdCIpLDEwKXx8MCksKHBhcnNlSW50KGEoZCkuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGEoZCkuY3NzKCJwYWRkaW5nVG9wIiksMTApfHwwKSwoZj9NYXRoLm1heChkLnNjcm9sbFdpZHRoLGQub2Zmc2V0V2lkdGgpOmQub2Zmc2V0V2lkdGgpLShwYXJzZUludChhKGQpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYShkKS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKGY/TWF0aC5tYXgoZC5zY3JvbGxIZWlnaHQsZC5vZmZzZXRIZWlnaHQpOmQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoYShkKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYShkKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZV9jb250YWluZXI9Y31lbHNlIGIuY29udGFpbm1lbnQuY29uc3RydWN0b3I9PUFycmF5JiYodGhpcy5jb250YWlubWVudD1iLmNvbnRhaW5tZW50KX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGIsYyl7Y3x8KGM9dGhpcy5wb3NpdGlvbik7dmFyIGQ9Yj09ImFic29sdXRlIj8xOi0xLGU9dGhpcy5vcHRpb25zLGY9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8IWEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxnPS8oaHRtbHxib2R5KS9pLnRlc3QoZlswXS50YWdOYW1lKTtyZXR1cm57dG9wOmMudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpkK3RoaXMub2Zmc2V0LnBhcmVudC50b3AqZC0oYS5icm93c2VyLnNhZmFyaSYmYS5icm93c2VyLnZlcnNpb248NTI2JiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmc/MDpmLnNjcm9sbFRvcCgpKSpkKSxsZWZ0OmMubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmQrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqZC0oYS5icm93c2VyLnNhZmFyaSYmYS5icm93c2VyLnZlcnNpb248NTI2JiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpnPzA6Zi5zY3JvbGxMZWZ0KCkpKmQpfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8IWEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxlPS8oaHRtbHxib2R5KS9pLnRlc3QoZFswXS50YWdOYW1lKSxmPWIucGFnZVgsZz1iLnBhZ2VZO2lmKHRoaXMub3JpZ2luYWxQb3NpdGlvbil7dmFyIGg7aWYodGhpcy5jb250YWlubWVudCl7aWYodGhpcy5yZWxhdGl2ZV9jb250YWluZXIpe3ZhciBpPXRoaXMucmVsYXRpdmVfY29udGFpbmVyLm9mZnNldCgpO2g9W3RoaXMuY29udGFpbm1lbnRbMF0raS5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0raS50b3AsdGhpcy5jb250YWlubWVudFsyXStpLmxlZnQsdGhpcy5jb250YWlubWVudFszXStpLnRvcF19ZWxzZSBoPXRoaXMuY29udGFpbm1lbnQ7Yi5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PGhbMF0mJihmPWhbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksYi5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8aFsxXSYmKGc9aFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGIucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5oWzJdJiYoZj1oWzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGIucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPmhbM10mJihnPWhbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKX1pZihjLmdyaWQpe3ZhciBqPWMuZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoZy10aGlzLm9yaWdpbmFsUGFnZVkpL2MuZ3JpZFsxXSkqYy5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWTtnPWg/ai10aGlzLm9mZnNldC5jbGljay50b3A8aFsxXXx8ai10aGlzLm9mZnNldC5jbGljay50b3A+aFszXT9qLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDxoWzFdP2orYy5ncmlkWzFdOmotYy5ncmlkWzFdOmo6ajt2YXIgaz1jLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGYtdGhpcy5vcmlnaW5hbFBhZ2VYKS9jLmdyaWRbMF0pKmMuZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVg7Zj1oP2stdGhpcy5vZmZzZXQuY2xpY2subGVmdDxoWzBdfHxrLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aFsyXT9rLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8aFswXT9rK2MuZ3JpZFswXTprLWMuZ3JpZFswXTprOmt9fXJldHVybnt0b3A6Zy10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKGEuYnJvd3Nlci5zYWZhcmkmJmEuYnJvd3Nlci52ZXJzaW9uPDUyNiYmdGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8wOnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmU/MDpkLnNjcm9sbFRvcCgpKSxsZWZ0OmYtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhhLmJyb3dzZXIuc2FmYXJpJiZhLmJyb3dzZXIudmVyc2lvbjw1MjYmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDp0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6ZT8wOmQuc2Nyb2xsTGVmdCgpKX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXSE9dGhpcy5lbGVtZW50WzBdJiYhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMX0sX3RyaWdnZXI6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBkPWR8fHRoaXMuX3VpSGFzaCgpLGEudWkucGx1Z2luLmNhbGwodGhpcyxiLFtjLGRdKSxiPT0iZHJhZyImJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpKSxhLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLGIsYyxkKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKGEpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksYS5leHRlbmQoYS51aS5kcmFnZ2FibGUse3ZlcnNpb246IjEuOC4yNCJ9KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGU9ZC5vcHRpb25zLGY9YS5leHRlbmQoe30sYyx7aXRlbTpkLmVsZW1lbnR9KTtkLnNvcnRhYmxlcz1bXSxhKGUuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hLmRhdGEodGhpcywic29ydGFibGUiKTtjJiYhYy5vcHRpb25zLmRpc2FibGVkJiYoZC5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6YyxzaG91bGRSZXZlcnQ6Yy5vcHRpb25zLnJldmVydH0pLGMucmVmcmVzaFBvc2l0aW9ucygpLGMuX3RyaWdnZXIoImFjdGl2YXRlIixiLGYpKX0pfSxzdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxlPWEuZXh0ZW5kKHt9LGMse2l0ZW06ZC5lbGVtZW50fSk7YS5lYWNoKGQuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5pc092ZXI/KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsZC5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLnNob3VsZFJldmVydCYmKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChiKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLGQub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJnRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHt0b3A6ImF1dG8iLGxlZnQ6ImF1dG8ifSkpOih0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsYixlKSl9KX0sZHJhZzpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksZT10aGlzLGY9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGQ9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxlPXRoaXMucG9zaXRpb25BYnMudG9wLGY9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LGc9Yi5oZWlnaHQsaD1iLndpZHRoLGk9Yi50b3Asaj1iLmxlZnQ7cmV0dXJuIGEudWkuaXNPdmVyKGUrYyxmK2QsaSxqLGcsaCl9O2EuZWFjaChkLnNvcnRhYmxlcyxmdW5jdGlvbihmKXt0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPWQucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1kLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPWQub2Zmc2V0LmNsaWNrLHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpPyh0aGlzLmluc3RhbmNlLmlzT3Zlcnx8KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTEsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbT1hKGUpLmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKS5hcHBlbmRUbyh0aGlzLmluc3RhbmNlLmVsZW1lbnQpLmRhdGEoInNvcnRhYmxlLWl0ZW0iLCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYy5oZWxwZXJbMF19LGIudGFyZ2V0PXRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sdGhpcy5pbnN0YW5jZS5fbW91c2VDYXB0dXJlKGIsITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQoYiwhMCwhMCksdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wPWQub2Zmc2V0LmNsaWNrLnRvcCx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0PWQub2Zmc2V0LmNsaWNrLmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQtPWQub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3AtPWQub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCxkLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIixiKSxkLmRyb3BwZWQ9dGhpcy5pbnN0YW5jZS5lbGVtZW50LGQuY3VycmVudEl0ZW09ZC5lbGVtZW50LHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGU9ZCksdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSYmdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKGIpKTp0aGlzLmluc3RhbmNlLmlzT3ZlciYmKHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0IixiLHRoaXMuaW5zdGFuY2UuX3VpSGFzaCh0aGlzLmluc3RhbmNlKSksdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKGIsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXIsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKSx0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyJiZ0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpLGQuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsYiksZC5kcm9wcGVkPSExKX0pfX0pLGEudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKCJib2R5IiksZT1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5jc3MoImN1cnNvciIpJiYoZS5fY3Vyc29yPWQuY3NzKCJjdXJzb3IiKSksZC5jc3MoImN1cnNvciIsZS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO2QuX2N1cnNvciYmYSgiYm9keSIpLmNzcygiY3Vyc29yIixkLl9jdXJzb3IpfX0pLGEudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YShjLmhlbHBlciksZT1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5jc3MoIm9wYWNpdHkiKSYmKGUuX29wYWNpdHk9ZC5jc3MoIm9wYWNpdHkiKSksZC5jc3MoIm9wYWNpdHkiLGUub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5fb3BhY2l0eSYmYShjLmhlbHBlcikuY3NzKCJvcGFjaXR5IixkLl9vcGFjaXR5KX19KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKTtkLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmQuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIiYmKGQub3ZlcmZsb3dPZmZzZXQ9ZC5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxlPWQub3B0aW9ucyxmPSExO2lmKGQuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmZC5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiKXtpZighZS5heGlzfHxlLmF4aXMhPSJ4IilkLm92ZXJmbG93T2Zmc2V0LnRvcCtkLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtYi5wYWdlWTxlLnNjcm9sbFNlbnNpdGl2aXR5P2Quc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1mPWQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtlLnNjcm9sbFNwZWVkOmIucGFnZVktZC5vdmVyZmxvd09mZnNldC50b3A8ZS5zY3JvbGxTZW5zaXRpdml0eSYmKGQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1mPWQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1lLnNjcm9sbFNwZWVkKTtpZighZS5heGlzfHxlLmF4aXMhPSJ5IilkLm92ZXJmbG93T2Zmc2V0LmxlZnQrZC5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtYi5wYWdlWDxlLnNjcm9sbFNlbnNpdGl2aXR5P2Quc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9Zj1kLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K2Uuc2Nyb2xsU3BlZWQ6Yi5wYWdlWC1kLm92ZXJmbG93T2Zmc2V0LmxlZnQ8ZS5zY3JvbGxTZW5zaXRpdml0eSYmKGQuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9Zj1kLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWUuc2Nyb2xsU3BlZWQpfWVsc2V7aWYoIWUuYXhpc3x8ZS5heGlzIT0ieCIpYi5wYWdlWS1hKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxlLnNjcm9sbFNlbnNpdGl2aXR5P2Y9YShkb2N1bWVudCkuc2Nyb2xsVG9wKGEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLWUuc2Nyb2xsU3BlZWQpOmEod2luZG93KS5oZWlnaHQoKS0oYi5wYWdlWS1hKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8ZS5zY3JvbGxTZW5zaXRpdml0eSYmKGY9YShkb2N1bWVudCkuc2Nyb2xsVG9wKGEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK2Uuc2Nyb2xsU3BlZWQpKTtpZighZS5heGlzfHxlLmF4aXMhPSJ5IiliLnBhZ2VYLWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxlLnNjcm9sbFNlbnNpdGl2aXR5P2Y9YShkb2N1bWVudCkuc2Nyb2xsTGVmdChhKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktZS5zY3JvbGxTcGVlZCk6YSh3aW5kb3cpLndpZHRoKCktKGIucGFnZVgtYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxlLnNjcm9sbFNlbnNpdGl2aXR5JiYoZj1hKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStlLnNjcm9sbFNwZWVkKSl9ZiE9PSExJiZhLnVpLmRkbWFuYWdlciYmIWUuZHJvcEJlaGF2aW91ciYmYS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZCxiKX19KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksZT1kLm9wdGlvbnM7ZC5zbmFwRWxlbWVudHM9W10sYShlLnNuYXAuY29uc3RydWN0b3IhPVN0cmluZz9lLnNuYXAuaXRlbXN8fCI6ZGF0YShkcmFnZ2FibGUpIjplLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGM9Yi5vZmZzZXQoKTt0aGlzIT1kLmVsZW1lbnRbMF0mJmQuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDpiLm91dGVyV2lkdGgoKSxoZWlnaHQ6Yi5vdXRlckhlaWdodCgpLHRvcDpjLnRvcCxsZWZ0OmMubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGU9ZC5vcHRpb25zLGY9ZS5zbmFwVG9sZXJhbmNlLGc9Yy5vZmZzZXQubGVmdCxoPWcrZC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxpPWMub2Zmc2V0LnRvcCxqPWkrZC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKHZhciBrPWQuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgbD1kLnNuYXBFbGVtZW50c1trXS5sZWZ0LG09bCtkLnNuYXBFbGVtZW50c1trXS53aWR0aCxuPWQuc25hcEVsZW1lbnRzW2tdLnRvcCxvPW4rZC5zbmFwRWxlbWVudHNba10uaGVpZ2h0O2lmKCEobC1mPGcmJmc8bStmJiZuLWY8aSYmaTxvK2Z8fGwtZjxnJiZnPG0rZiYmbi1mPGomJmo8bytmfHxsLWY8aCYmaDxtK2YmJm4tZjxpJiZpPG8rZnx8bC1mPGgmJmg8bStmJiZuLWY8aiYmajxvK2YpKXtkLnNuYXBFbGVtZW50c1trXS5zbmFwcGluZyYmZC5vcHRpb25zLnNuYXAucmVsZWFzZSYmZC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKGQuZWxlbWVudCxiLGEuZXh0ZW5kKGQuX3VpSGFzaCgpLHtzbmFwSXRlbTpkLnNuYXBFbGVtZW50c1trXS5pdGVtfSkpLGQuc25hcEVsZW1lbnRzW2tdLnNuYXBwaW5nPSExO2NvbnRpbnVlfWlmKGUuc25hcE1vZGUhPSJpbm5lciIpe3ZhciBwPU1hdGguYWJzKG4taik8PWYscT1NYXRoLmFicyhvLWkpPD1mLHI9TWF0aC5hYnMobC1oKTw9ZixzPU1hdGguYWJzKG0tZyk8PWY7cCYmKGMucG9zaXRpb24udG9wPWQuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpuLWQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1kLm1hcmdpbnMudG9wKSxxJiYoYy5wb3NpdGlvbi50b3A9ZC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOm8sbGVmdDowfSkudG9wLWQubWFyZ2lucy50b3ApLHImJihjLnBvc2l0aW9uLmxlZnQ9ZC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsLWQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LWQubWFyZ2lucy5sZWZ0KSxzJiYoYy5wb3NpdGlvbi5sZWZ0PWQuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bX0pLmxlZnQtZC5tYXJnaW5zLmxlZnQpfXZhciB0PXB8fHF8fHJ8fHM7aWYoZS5zbmFwTW9kZSE9Im91dGVyIil7dmFyIHA9TWF0aC5hYnMobi1pKTw9ZixxPU1hdGguYWJzKG8taik8PWYscj1NYXRoLmFicyhsLWcpPD1mLHM9TWF0aC5hYnMobS1oKTw9ZjtwJiYoYy5wb3NpdGlvbi50b3A9ZC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOm4sbGVmdDowfSkudG9wLWQubWFyZ2lucy50b3ApLHEmJihjLnBvc2l0aW9uLnRvcD1kLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6by1kLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3AtZC5tYXJnaW5zLnRvcCksciYmKGMucG9zaXRpb24ubGVmdD1kLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omx9KS5sZWZ0LWQubWFyZ2lucy5sZWZ0KSxzJiYoYy5wb3NpdGlvbi5sZWZ0PWQuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bS1kLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1kLm1hcmdpbnMubGVmdCl9IWQuc25hcEVsZW1lbnRzW2tdLnNuYXBwaW5nJiYocHx8cXx8cnx8c3x8dCkmJmQub3B0aW9ucy5zbmFwLnNuYXAmJmQub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChkLmVsZW1lbnQsYixhLmV4dGVuZChkLl91aUhhc2goKSx7c25hcEl0ZW06ZC5zbmFwRWxlbWVudHNba10uaXRlbX0pKSxkLnNuYXBFbGVtZW50c1trXS5zbmFwcGluZz1wfHxxfHxyfHxzfHx0fX19KSxhLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnMsZT1hLm1ha2VBcnJheShhKGQuc3RhY2spKS5zb3J0KGZ1bmN0aW9uKGIsYyl7cmV0dXJuKHBhcnNlSW50KGEoYikuY3NzKCJ6SW5kZXgiKSwxMCl8fDApLShwYXJzZUludChhKGMpLmNzcygiekluZGV4IiksMTApfHwwKX0pO2lmKCFlLmxlbmd0aClyZXR1cm47dmFyIGY9cGFyc2VJbnQoZVswXS5zdHlsZS56SW5kZXgpfHwwO2EoZSkuZWFjaChmdW5jdGlvbihhKXt0aGlzLnN0eWxlLnpJbmRleD1mK2F9KSx0aGlzWzBdLnN0eWxlLnpJbmRleD1mK2UubGVuZ3RofX0pLGEudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiekluZGV4Iix7c3RhcnQ6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKGMuaGVscGVyKSxlPWEodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztkLmNzcygiekluZGV4IikmJihlLl96SW5kZXg9ZC5jc3MoInpJbmRleCIpKSxkLmNzcygiekluZGV4IixlLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ZC5fekluZGV4JiZhKGMuaGVscGVyKS5jc3MoInpJbmRleCIsZC5fekluZGV4KX19KX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2Eud2lkZ2V0KCJ1aS5kcm9wcGFibGUiLHt3aWRnZXRFdmVudFByZWZpeDoiZHJvcCIsb3B0aW9uczp7YWNjZXB0OiIqIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnMsYz1iLmFjY2VwdDt0aGlzLmlzb3Zlcj0wLHRoaXMuaXNvdXQ9MSx0aGlzLmFjY2VwdD1hLmlzRnVuY3Rpb24oYyk/YzpmdW5jdGlvbihhKXtyZXR1cm4gYS5pcyhjKX0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSxhLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Iuc2NvcGVdPWEudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbYi5zY29wZV18fFtdLGEudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbYi5zY29wZV0ucHVzaCh0aGlzKSxiLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYj1hLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspYltjXT09dGhpcyYmYi5zcGxpY2UoYywxKTtyZXR1cm4gdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIikucmVtb3ZlRGF0YSgiZHJvcHBhYmxlIikudW5iaW5kKCIuZHJvcHBhYmxlIiksdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2I9PSJhY2NlcHQiJiYodGhpcy5hY2NlcHQ9YS5pc0Z1bmN0aW9uKGMpP2M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaXMoYyl9KSxhLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9hY3RpdmF0ZTpmdW5jdGlvbihiKXt2YXIgYz1hLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksYyYmdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLGIsdGhpcy51aShjKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKGIpe3ZhciBjPWEudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxjJiZ0aGlzLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixiLHRoaXMudWkoYykpfSxfb3ZlcjpmdW5jdGlvbihiKXt2YXIgYz1hLnVpLmRkbWFuYWdlci5jdXJyZW50O2lmKCFjfHwoYy5jdXJyZW50SXRlbXx8Yy5lbGVtZW50KVswXT09dGhpcy5lbGVtZW50WzBdKXJldHVybjt0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxjLmN1cnJlbnRJdGVtfHxjLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3ZlciIsYix0aGlzLnVpKGMpKSl9LF9vdXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighY3x8KGMuY3VycmVudEl0ZW18fGMuZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sYy5jdXJyZW50SXRlbXx8Yy5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm91dCIsYix0aGlzLnVpKGMpKSl9LF9kcm9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Y3x8YS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighZHx8KGQuY3VycmVudEl0ZW18fGQuZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm4hMTt2YXIgZT0hMTtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQoIjpkYXRhKGRyb3BwYWJsZSkiKS5ub3QoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YS5kYXRhKHRoaXMsImRyb3BwYWJsZSIpO2lmKGIub3B0aW9ucy5ncmVlZHkmJiFiLm9wdGlvbnMuZGlzYWJsZWQmJmIub3B0aW9ucy5zY29wZT09ZC5vcHRpb25zLnNjb3BlJiZiLmFjY2VwdC5jYWxsKGIuZWxlbWVudFswXSxkLmN1cnJlbnRJdGVtfHxkLmVsZW1lbnQpJiZhLnVpLmludGVyc2VjdChkLGEuZXh0ZW5kKGIse29mZnNldDpiLmVsZW1lbnQub2Zmc2V0KCl9KSxiLm9wdGlvbnMudG9sZXJhbmNlKSlyZXR1cm4gZT0hMCwhMX0pLGU/ITE6dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sZC5jdXJyZW50SXRlbXx8ZC5lbGVtZW50KT8odGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJkcm9wIixiLHRoaXMudWkoZCkpLHRoaXMuZWxlbWVudCk6ITF9LHVpOmZ1bmN0aW9uKGEpe3JldHVybntkcmFnZ2FibGU6YS5jdXJyZW50SXRlbXx8YS5lbGVtZW50LGhlbHBlcjphLmhlbHBlcixwb3NpdGlvbjphLnBvc2l0aW9uLG9mZnNldDphLnBvc2l0aW9uQWJzfX19KSxhLmV4dGVuZChhLnVpLmRyb3BwYWJsZSx7dmVyc2lvbjoiMS44LjI0In0pLGEudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKGIsYyxkKXtpZighYy5vZmZzZXQpcmV0dXJuITE7dmFyIGU9KGIucG9zaXRpb25BYnN8fGIucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQsZj1lK2IuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsZz0oYi5wb3NpdGlvbkFic3x8Yi5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wLGg9ZytiLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxpPWMub2Zmc2V0LmxlZnQsaj1pK2MucHJvcG9ydGlvbnMud2lkdGgsaz1jLm9mZnNldC50b3AsbD1rK2MucHJvcG9ydGlvbnMuaGVpZ2h0O3N3aXRjaChkKXtjYXNlImZpdCI6cmV0dXJuIGk8PWUmJmY8PWomJms8PWcmJmg8PWw7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBpPGUrYi5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZmLWIuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjxqJiZrPGcrYi5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmaC1iLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGw7Y2FzZSJwb2ludGVyIjp2YXIgbT0oYi5wb3NpdGlvbkFic3x8Yi5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCsoYi5jbGlja09mZnNldHx8Yi5vZmZzZXQuY2xpY2spLmxlZnQsbj0oYi5wb3NpdGlvbkFic3x8Yi5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wKyhiLmNsaWNrT2Zmc2V0fHxiLm9mZnNldC5jbGljaykudG9wLG89YS51aS5pc092ZXIobixtLGssaSxjLnByb3BvcnRpb25zLmhlaWdodCxjLnByb3BvcnRpb25zLndpZHRoKTtyZXR1cm4gbztjYXNlInRvdWNoIjpyZXR1cm4oZz49ayYmZzw9bHx8aD49ayYmaDw9bHx8ZzxrJiZoPmwpJiYoZT49aSYmZTw9anx8Zj49aSYmZjw9anx8ZTxpJiZmPmopO2RlZmF1bHQ6cmV0dXJuITF9fSxhLnVpLmRkbWFuYWdlcj17Y3VycmVudDpudWxsLGRyb3BwYWJsZXM6eyJkZWZhdWx0IjpbXX0scHJlcGFyZU9mZnNldHM6ZnVuY3Rpb24oYixjKXt2YXIgZD1hLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Iub3B0aW9ucy5zY29wZV18fFtdLGU9Yz9jLnR5cGU6bnVsbCxmPShiLmN1cnJlbnRJdGVtfHxiLmVsZW1lbnQpLmZpbmQoIjpkYXRhKGRyb3BwYWJsZSkiKS5hbmRTZWxmKCk7Zzpmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7aWYoZFtoXS5vcHRpb25zLmRpc2FibGVkfHxiJiYhZFtoXS5hY2NlcHQuY2FsbChkW2hdLmVsZW1lbnRbMF0sYi5jdXJyZW50SXRlbXx8Yi5lbGVtZW50KSljb250aW51ZTtmb3IodmFyIGk9MDtpPGYubGVuZ3RoO2krKylpZihmW2ldPT1kW2hdLmVsZW1lbnRbMF0pe2RbaF0ucHJvcG9ydGlvbnMuaGVpZ2h0PTA7Y29udGludWUgZ31kW2hdLnZpc2libGU9ZFtoXS5lbGVtZW50LmNzcygiZGlzcGxheSIpIT0ibm9uZSI7aWYoIWRbaF0udmlzaWJsZSljb250aW51ZTtlPT0ibW91c2Vkb3duIiYmZFtoXS5fYWN0aXZhdGUuY2FsbChkW2hdLGMpLGRbaF0ub2Zmc2V0PWRbaF0uZWxlbWVudC5vZmZzZXQoKSxkW2hdLnByb3BvcnRpb25zPXt3aWR0aDpkW2hdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OmRbaF0uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9fX0sZHJvcDpmdW5jdGlvbihiLGMpe3ZhciBkPSExO3JldHVybiBhLmVhY2goYS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tiLm9wdGlvbnMuc2NvcGVdfHxbXSxmdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuOyF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmYS51aS5pbnRlcnNlY3QoYix0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UpJiYoZD10aGlzLl9kcm9wLmNhbGwodGhpcyxjKXx8ZCksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxiLmN1cnJlbnRJdGVtfHxiLmVsZW1lbnQpJiYodGhpcy5pc291dD0xLHRoaXMuaXNvdmVyPTAsdGhpcy5fZGVhY3RpdmF0ZS5jYWxsKHRoaXMsYykpfSksZH0sZHJhZ1N0YXJ0OmZ1bmN0aW9uKGIsYyl7Yi5lbGVtZW50LnBhcmVudHMoIjpub3QoYm9keSxodG1sKSIpLmJpbmQoInNjcm9sbC5kcm9wcGFibGUiLGZ1bmN0aW9uKCl7Yi5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fGEudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGIsYyl9KX0sZHJhZzpmdW5jdGlvbihiLGMpe2Iub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zJiZhLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhiLGMpLGEuZWFjaChhLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Iub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmdyZWVkeUNoaWxkfHwhdGhpcy52aXNpYmxlKXJldHVybjt2YXIgZD1hLnVpLmludGVyc2VjdChiLHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSksZT0hZCYmdGhpcy5pc292ZXI9PTE/Imlzb3V0IjpkJiZ0aGlzLmlzb3Zlcj09MD8iaXNvdmVyIjpudWxsO2lmKCFlKXJldHVybjt2YXIgZjtpZih0aGlzLm9wdGlvbnMuZ3JlZWR5KXt2YXIgZz10aGlzLm9wdGlvbnMuc2NvcGUsaD10aGlzLmVsZW1lbnQucGFyZW50cygiOmRhdGEoZHJvcHBhYmxlKSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBhLmRhdGEodGhpcywiZHJvcHBhYmxlIikub3B0aW9ucy5zY29wZT09PWd9KTtoLmxlbmd0aCYmKGY9YS5kYXRhKGhbMF0sImRyb3BwYWJsZSIpLGYuZ3JlZWR5Q2hpbGQ9ZT09Imlzb3ZlciI/MTowKX1mJiZlPT0iaXNvdmVyIiYmKGYuaXNvdmVyPTAsZi5pc291dD0xLGYuX291dC5jYWxsKGYsYykpLHRoaXNbZV09MSx0aGlzW2U9PSJpc291dCI/Imlzb3ZlciI6Imlzb3V0Il09MCx0aGlzW2U9PSJpc292ZXIiPyJfb3ZlciI6Il9vdXQiXS5jYWxsKHRoaXMsYyksZiYmZT09Imlzb3V0IiYmKGYuaXNvdXQ9MCxmLmlzb3Zlcj0xLGYuX292ZXIuY2FsbChmLGMpKX0pfSxkcmFnU3RvcDpmdW5jdGlvbihiLGMpe2IuZWxlbWVudC5wYXJlbnRzKCI6bm90KGJvZHksaHRtbCkiKS51bmJpbmQoInNjcm9sbC5kcm9wcGFibGUiKSxiLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8YS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoYixjKX19fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS53aWRnZXQoInVpLnJlc2l6YWJsZSIsYS51aS5tb3VzZSx7d2lkZ2V0RXZlbnRQcmVmaXg6InJlc2l6ZSIsb3B0aW9uczp7YWxzb1Jlc2l6ZTohMSxhbmltYXRlOiExLGFuaW1hdGVEdXJhdGlvbjoic2xvdyIsYW5pbWF0ZUVhc2luZzoic3dpbmciLGFzcGVjdFJhdGlvOiExLGF1dG9IaWRlOiExLGNvbnRhaW5tZW50OiExLGdob3N0OiExLGdyaWQ6ITEsaGFuZGxlczoiZSxzLHNlIixoZWxwZXI6ITEsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTAsbWluV2lkdGg6MTAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFibGUiKSxhLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISFjLmFzcGVjdFJhdGlvLGFzcGVjdFJhdGlvOmMuYXNwZWN0UmF0aW8sb3JpZ2luYWxFbGVtZW50OnRoaXMuZWxlbWVudCxfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czpbXSxfaGVscGVyOmMuaGVscGVyfHxjLmdob3N0fHxjLmFuaW1hdGU/Yy5oZWxwZXJ8fCJ1aS1yZXNpemFibGUtaGVscGVyIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9jYW52YXN8dGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbnxpbWcvaSkmJih0aGlzLmVsZW1lbnQud3JhcChhKCc8ZGl2IGNsYXNzPSJ1aS13cmFwcGVyIiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsiPjwvZGl2PicpLmNzcyh7cG9zaXRpb246dGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSx3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSx0b3A6dGhpcy5lbGVtZW50LmNzcygidG9wIiksbGVmdDp0aGlzLmVsZW1lbnQuY3NzKCJsZWZ0Iil9KSksdGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKCJyZXNpemFibGUiLHRoaXMuZWxlbWVudC5kYXRhKCJyZXNpemFibGUiKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyPSEwLHRoaXMuZWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksbWFyZ2luVG9wOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luVG9wIiksbWFyZ2luUmlnaHQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLG1hcmdpbkJvdHRvbTp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpfSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OjAsbWFyZ2luVG9wOjAsbWFyZ2luUmlnaHQ6MCxtYXJnaW5Cb3R0b206MH0pLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZT10aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiwibm9uZSIpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMucHVzaCh0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOiJzdGF0aWMiLHpvb206MSxkaXNwbGF5OiJibG9jayJ9KSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHttYXJnaW46dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW4iKX0pLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuaGFuZGxlcz1jLmhhbmRsZXN8fChhKCIudWktcmVzaXphYmxlLWhhbmRsZSIsdGhpcy5lbGVtZW50KS5sZW5ndGg/e246Ii51aS1yZXNpemFibGUtbiIsZToiLnVpLXJlc2l6YWJsZS1lIixzOiIudWktcmVzaXphYmxlLXMiLHc6Ii51aS1yZXNpemFibGUtdyIsc2U6Ii51aS1yZXNpemFibGUtc2UiLHN3OiIudWktcmVzaXphYmxlLXN3IixuZToiLnVpLXJlc2l6YWJsZS1uZSIsbnc6Ii51aS1yZXNpemFibGUtbncifToiZSxzLHNlIik7aWYodGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yPT1TdHJpbmcpe3RoaXMuaGFuZGxlcz09ImFsbCImJih0aGlzLmhhbmRsZXM9Im4sZSxzLHcsc2Usc3csbmUsbnciKTt2YXIgZD10aGlzLmhhbmRsZXMuc3BsaXQoIiwiKTt0aGlzLmhhbmRsZXM9e307Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWEudHJpbShkW2VdKSxnPSJ1aS1yZXNpemFibGUtIitmLGg9YSgnPGRpdiBjbGFzcz0idWktcmVzaXphYmxlLWhhbmRsZSAnK2crJyI+PC9kaXY+Jyk7aC5jc3Moe3pJbmRleDpjLnpJbmRleH0pLCJzZSI9PWYmJmguYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UiKSx0aGlzLmhhbmRsZXNbZl09Ii51aS1yZXNpemFibGUtIitmLHRoaXMuZWxlbWVudC5hcHBlbmQoaCl9fXRoaXMuX3JlbmRlckF4aXM9ZnVuY3Rpb24oYil7Yj1ifHx0aGlzLmVsZW1lbnQ7Zm9yKHZhciBjIGluIHRoaXMuaGFuZGxlcyl7dGhpcy5oYW5kbGVzW2NdLmNvbnN0cnVjdG9yPT1TdHJpbmcmJih0aGlzLmhhbmRsZXNbY109YSh0aGlzLmhhbmRsZXNbY10sdGhpcy5lbGVtZW50KS5zaG93KCkpO2lmKHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL3RleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24vaSkpe3ZhciBkPWEodGhpcy5oYW5kbGVzW2NdLHRoaXMuZWxlbWVudCksZT0wO2U9L3N3fG5lfG53fHNlfG58cy8udGVzdChjKT9kLm91dGVySGVpZ2h0KCk6ZC5vdXRlcldpZHRoKCk7dmFyIGY9WyJwYWRkaW5nIiwvbmV8bnd8bi8udGVzdChjKT8iVG9wIjovc2V8c3d8cy8udGVzdChjKT8iQm90dG9tIjovXmUkLy50ZXN0KGMpPyJSaWdodCI6IkxlZnQiXS5qb2luKCIiKTtiLmNzcyhmLGUpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCl9aWYoIWEodGhpcy5oYW5kbGVzW2NdKS5sZW5ndGgpY29udGludWV9fSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz1hKCIudWktcmVzaXphYmxlLWhhbmRsZSIsdGhpcy5lbGVtZW50KS5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtpZighYi5yZXNpemluZyl7aWYodGhpcy5jbGFzc05hbWUpdmFyIGE9dGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSk7Yi5heGlzPWEmJmFbMV0/YVsxXToic2UifX0pLGMuYXV0b0hpZGUmJih0aGlzLl9oYW5kbGVzLmhpZGUoKSxhKHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLmhvdmVyKGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIiksYi5faGFuZGxlcy5zaG93KCl9LGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47Yi5yZXNpemluZ3x8KGEodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLGIuX2hhbmRsZXMuaGlkZSgpKX0pKSx0aGlzLl9tb3VzZUluaXQoKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciBiPWZ1bmN0aW9uKGIpe2EoYikucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyKXtiKHRoaXMuZWxlbWVudCk7dmFyIGM9dGhpcy5lbGVtZW50O2MuYWZ0ZXIodGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpjLmNzcygicG9zaXRpb24iKSx3aWR0aDpjLm91dGVyV2lkdGgoKSxoZWlnaHQ6Yy5vdXRlckhlaWdodCgpLHRvcDpjLmNzcygidG9wIiksbGVmdDpjLmNzcygibGVmdCIpfSkpLnJlbW92ZSgpfXJldHVybiB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxiKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGIpe3ZhciBjPSExO2Zvcih2YXIgZCBpbiB0aGlzLmhhbmRsZXMpYSh0aGlzLmhhbmRsZXNbZF0pWzBdPT1iLnRhcmdldCYmKGM9ITApO3JldHVybiF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmN9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMuZWxlbWVudC5wb3NpdGlvbigpLGY9dGhpcy5lbGVtZW50O3RoaXMucmVzaXppbmc9ITAsdGhpcy5kb2N1bWVudFNjcm9sbD17dG9wOmEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLGxlZnQ6YShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpfSwoZi5pcygiLnVpLWRyYWdnYWJsZSIpfHwvYWJzb2x1dGUvLnRlc3QoZi5jc3MoInBvc2l0aW9uIikpKSYmZi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOmUudG9wLGxlZnQ6ZS5sZWZ0fSksdGhpcy5fcmVuZGVyUHJveHkoKTt2YXIgZz1jKHRoaXMuaGVscGVyLmNzcygibGVmdCIpKSxoPWModGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSk7ZC5jb250YWlubWVudCYmKGcrPWEoZC5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLGgrPWEoZC5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6Zyx0b3A6aH0sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6Zi5vdXRlcldpZHRoKCksaGVpZ2h0OmYub3V0ZXJIZWlnaHQoKX06e3dpZHRoOmYud2lkdGgoKSxoZWlnaHQ6Zi5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDpmLm91dGVyV2lkdGgoKSxoZWlnaHQ6Zi5vdXRlckhlaWdodCgpfTp7d2lkdGg6Zi53aWR0aCgpLGhlaWdodDpmLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e2xlZnQ6Zyx0b3A6aH0sdGhpcy5zaXplRGlmZj17d2lkdGg6Zi5vdXRlcldpZHRoKCktZi53aWR0aCgpLGhlaWdodDpmLm91dGVySGVpZ2h0KCktZi5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb249e2xlZnQ6Yi5wYWdlWCx0b3A6Yi5wYWdlWX0sdGhpcy5hc3BlY3RSYXRpbz10eXBlb2YgZC5hc3BlY3RSYXRpbz09Im51bWJlciI/ZC5hc3BlY3RSYXRpbzp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aC90aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHR8fDE7dmFyIGk9YSgiLnVpLXJlc2l6YWJsZS0iK3RoaXMuYXhpcykuY3NzKCJjdXJzb3IiKTtyZXR1cm4gYSgiYm9keSIpLmNzcygiY3Vyc29yIixpPT0iYXV0byI/dGhpcy5heGlzKyItcmVzaXplIjppKSxmLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0YXJ0IixiKSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzLmhlbHBlcixkPXRoaXMub3B0aW9ucyxlPXt9LGY9dGhpcyxnPXRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLGg9dGhpcy5heGlzLGk9Yi5wYWdlWC1nLmxlZnR8fDAsaj1iLnBhZ2VZLWcudG9wfHwwLGs9dGhpcy5fY2hhbmdlW2hdO2lmKCFrKXJldHVybiExO3ZhciBsPWsuYXBwbHkodGhpcyxbYixpLGpdKSxtPWEuYnJvd3Nlci5tc2llJiZhLmJyb3dzZXIudmVyc2lvbjw3LG49dGhpcy5zaXplRGlmZjt0aGlzLl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyhiLnNoaWZ0S2V5KTtpZih0aGlzLl9hc3BlY3RSYXRpb3x8Yi5zaGlmdEtleSlsPXRoaXMuX3VwZGF0ZVJhdGlvKGwsYik7cmV0dXJuIGw9dGhpcy5fcmVzcGVjdFNpemUobCxiKSx0aGlzLl9wcm9wYWdhdGUoInJlc2l6ZSIsYiksYy5jc3Moe3RvcDp0aGlzLnBvc2l0aW9uLnRvcCsicHgiLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsd2lkdGg6dGhpcy5zaXplLndpZHRoKyJweCIsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHQrInB4In0pLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLHRoaXMuX3VwZGF0ZUNhY2hlKGwpLHRoaXMuX3RyaWdnZXIoInJlc2l6ZSIsYix0aGlzLnVpKCkpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGIpe3RoaXMucmVzaXppbmc9ITE7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcztpZih0aGlzLl9oZWxwZXIpe3ZhciBlPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsZj1lLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChlWzBdLm5vZGVOYW1lKSxnPWYmJmEudWkuaGFzU2Nyb2xsKGVbMF0sImxlZnQiKT8wOmQuc2l6ZURpZmYuaGVpZ2h0LGg9Zj8wOmQuc2l6ZURpZmYud2lkdGgsaT17d2lkdGg6ZC5oZWxwZXIud2lkdGgoKS1oLGhlaWdodDpkLmhlbHBlci5oZWlnaHQoKS1nfSxqPXBhcnNlSW50KGQuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGQucG9zaXRpb24ubGVmdC1kLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsaz1wYXJzZUludChkLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGQucG9zaXRpb24udG9wLWQub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2MuYW5pbWF0ZXx8dGhpcy5lbGVtZW50LmNzcyhhLmV4dGVuZChpLHt0b3A6ayxsZWZ0Omp9KSksZC5oZWxwZXIuaGVpZ2h0KGQuc2l6ZS5oZWlnaHQpLGQuaGVscGVyLndpZHRoKGQuc2l6ZS53aWR0aCksdGhpcy5faGVscGVyJiYhYy5hbmltYXRlJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpfXJldHVybiBhKCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIiksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0b3AiLGIpLHRoaXMuX2hlbHBlciYmdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9LF91cGRhdGVWaXJ0dWFsQm91bmRhcmllczpmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9wdGlvbnMsYyxlLGYsZyxoO2g9e21pbldpZHRoOmQoYi5taW5XaWR0aCk/Yi5taW5XaWR0aDowLG1heFdpZHRoOmQoYi5tYXhXaWR0aCk/Yi5tYXhXaWR0aDpJbmZpbml0eSxtaW5IZWlnaHQ6ZChiLm1pbkhlaWdodCk/Yi5taW5IZWlnaHQ6MCxtYXhIZWlnaHQ6ZChiLm1heEhlaWdodCk/Yi5tYXhIZWlnaHQ6SW5maW5pdHl9O2lmKHRoaXMuX2FzcGVjdFJhdGlvfHxhKWM9aC5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxmPWgubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxlPWgubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8sZz1oLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sYz5oLm1pbldpZHRoJiYoaC5taW5XaWR0aD1jKSxmPmgubWluSGVpZ2h0JiYoaC5taW5IZWlnaHQ9ZiksZTxoLm1heFdpZHRoJiYoaC5tYXhXaWR0aD1lKSxnPGgubWF4SGVpZ2h0JiYoaC5tYXhIZWlnaHQ9Zyk7dGhpcy5fdkJvdW5kYXJpZXM9aH0sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSxkKGEubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0KSxkKGEudG9wKSYmKHRoaXMucG9zaXRpb24udG9wPWEudG9wKSxkKGEuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9YS5oZWlnaHQpLGQoYS53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9YS53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMub3B0aW9ucyxlPXRoaXMucG9zaXRpb24sZj10aGlzLnNpemUsZz10aGlzLmF4aXM7cmV0dXJuIGQoYS5oZWlnaHQpP2Eud2lkdGg9YS5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbzpkKGEud2lkdGgpJiYoYS5oZWlnaHQ9YS53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSxnPT0ic3ciJiYoYS5sZWZ0PWUubGVmdCsoZi53aWR0aC1hLndpZHRoKSxhLnRvcD1udWxsKSxnPT0ibnciJiYoYS50b3A9ZS50b3ArKGYuaGVpZ2h0LWEuaGVpZ2h0KSxhLmxlZnQ9ZS5sZWZ0KyhmLndpZHRoLWEud2lkdGgpKSxhfSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmhlbHBlcixlPXRoaXMuX3ZCb3VuZGFyaWVzLGY9dGhpcy5fYXNwZWN0UmF0aW98fGIuc2hpZnRLZXksZz10aGlzLmF4aXMsaD1kKGEud2lkdGgpJiZlLm1heFdpZHRoJiZlLm1heFdpZHRoPGEud2lkdGgsaT1kKGEuaGVpZ2h0KSYmZS5tYXhIZWlnaHQmJmUubWF4SGVpZ2h0PGEuaGVpZ2h0LGo9ZChhLndpZHRoKSYmZS5taW5XaWR0aCYmZS5taW5XaWR0aD5hLndpZHRoLGs9ZChhLmhlaWdodCkmJmUubWluSGVpZ2h0JiZlLm1pbkhlaWdodD5hLmhlaWdodDtqJiYoYS53aWR0aD1lLm1pbldpZHRoKSxrJiYoYS5oZWlnaHQ9ZS5taW5IZWlnaHQpLGgmJihhLndpZHRoPWUubWF4V2lkdGgpLGkmJihhLmhlaWdodD1lLm1heEhlaWdodCk7dmFyIGw9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsbT10aGlzLnBvc2l0aW9uLnRvcCt0aGlzLnNpemUuaGVpZ2h0LG49L3N3fG53fHcvLnRlc3QoZyksbz0vbnd8bmV8bi8udGVzdChnKTtqJiZuJiYoYS5sZWZ0PWwtZS5taW5XaWR0aCksaCYmbiYmKGEubGVmdD1sLWUubWF4V2lkdGgpLGsmJm8mJihhLnRvcD1tLWUubWluSGVpZ2h0KSxpJiZvJiYoYS50b3A9bS1lLm1heEhlaWdodCk7dmFyIHA9IWEud2lkdGgmJiFhLmhlaWdodDtyZXR1cm4gcCYmIWEubGVmdCYmYS50b3A/YS50b3A9bnVsbDpwJiYhYS50b3AmJmEubGVmdCYmKGEubGVmdD1udWxsKSxhfSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnM7aWYoIXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKXJldHVybjt2YXIgYz10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O2Zvcih2YXIgZD0wO2Q8dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW2RdO2lmKCF0aGlzLmJvcmRlckRpZil7dmFyIGY9W2UuY3NzKCJib3JkZXJUb3BXaWR0aCIpLGUuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksZS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksZS5jc3MoImJvcmRlckxlZnRXaWR0aCIpXSxnPVtlLmNzcygicGFkZGluZ1RvcCIpLGUuY3NzKCJwYWRkaW5nUmlnaHQiKSxlLmNzcygicGFkZGluZ0JvdHRvbSIpLGUuY3NzKCJwYWRkaW5nTGVmdCIpXTt0aGlzLmJvcmRlckRpZj1hLm1hcChmLGZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VJbnQoYSwxMCl8fDAsZD1wYXJzZUludChnW2JdLDEwKXx8MDtyZXR1cm4gYytkfSl9aWYoIWEuYnJvd3Nlci5tc2llfHwhYShjKS5pcygiOmhpZGRlbiIpJiYhYShjKS5wYXJlbnRzKCI6aGlkZGVuIikubGVuZ3RoKWUuY3NzKHtoZWlnaHQ6Yy5oZWlnaHQoKS10aGlzLmJvcmRlckRpZlswXS10aGlzLmJvcmRlckRpZlsyXXx8MCx3aWR0aDpjLndpZHRoKCktdGhpcy5ib3JkZXJEaWZbMV0tdGhpcy5ib3JkZXJEaWZbM118fDB9KTtlbHNlIGNvbnRpbnVlfX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD1iLm9mZnNldCgpO2lmKHRoaXMuX2hlbHBlcil7dGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fGEoJzxkaXYgc3R5bGU9Im92ZXJmbG93OmhpZGRlbjsiPjwvZGl2PicpO3ZhciBkPWEuYnJvd3Nlci5tc2llJiZhLmJyb3dzZXIudmVyc2lvbjw3LGU9ZD8xOjAsZj1kPzI6LTE7dGhpcy5oZWxwZXIuYWRkQ2xhc3ModGhpcy5faGVscGVyKS5jc3Moe3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkrZixoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkrZixwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtZSsicHgiLHRvcDp0aGlzLmVsZW1lbnRPZmZzZXQudG9wLWUrInB4Iix6SW5kZXg6KytjLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpfWVsc2UgdGhpcy5oZWxwZXI9dGhpcy5lbGVtZW50fSxfY2hhbmdlOntlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrYn19LHc6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMub3JpZ2luYWxTaXplLGY9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybntsZWZ0OmYubGVmdCtiLHdpZHRoOmUud2lkdGgtYn19LG46ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMub3JpZ2luYWxTaXplLGY9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6Zi50b3ArYyxoZWlnaHQ6ZS5oZWlnaHQtY319LHM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2N9fSxzZTpmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGEuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtiLGMsZF0pKX0sc3c6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBhLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbYixjLGRdKSl9LG5lOmZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2IsYyxkXSkpfSxudzpmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGEuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtiLGMsZF0pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24oYixjKXthLnVpLnBsdWdpbi5jYWxsKHRoaXMsYixbYyx0aGlzLnVpKCldKSxiIT0icmVzaXplIiYmdGhpcy5fdHJpZ2dlcihiLGMsdGhpcy51aSgpKX0scGx1Z2luczp7fSx1aTpmdW5jdGlvbigpe3JldHVybntvcmlnaW5hbEVsZW1lbnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQsZWxlbWVudDp0aGlzLmVsZW1lbnQsaGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sc2l6ZTp0aGlzLnNpemUsb3JpZ2luYWxTaXplOnRoaXMub3JpZ2luYWxTaXplLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9ufX19KSxhLmV4dGVuZChhLnVpLnJlc2l6YWJsZSx7dmVyc2lvbjoiMS44LjI0In0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYWxzb1Jlc2l6ZSIse3N0YXJ0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxlPWQub3B0aW9ucyxmPWZ1bmN0aW9uKGIpe2EoYikuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yi5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIse3dpZHRoOnBhcnNlSW50KGIud2lkdGgoKSwxMCksaGVpZ2h0OnBhcnNlSW50KGIuaGVpZ2h0KCksMTApLGxlZnQ6cGFyc2VJbnQoYi5jc3MoImxlZnQiKSwxMCksdG9wOnBhcnNlSW50KGIuY3NzKCJ0b3AiKSwxMCl9KX0pfTt0eXBlb2YgZS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWUuYWxzb1Jlc2l6ZS5wYXJlbnROb2RlP2UuYWxzb1Jlc2l6ZS5sZW5ndGg/KGUuYWxzb1Jlc2l6ZT1lLmFsc29SZXNpemVbMF0sZihlLmFsc29SZXNpemUpKTphLmVhY2goZS5hbHNvUmVzaXplLGZ1bmN0aW9uKGEpe2YoYSl9KTpmKGUuYWxzb1Jlc2l6ZSl9LHJlc2l6ZTpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZT1kLm9wdGlvbnMsZj1kLm9yaWdpbmFsU2l6ZSxnPWQub3JpZ2luYWxQb3NpdGlvbixoPXtoZWlnaHQ6ZC5zaXplLmhlaWdodC1mLmhlaWdodHx8MCx3aWR0aDpkLnNpemUud2lkdGgtZi53aWR0aHx8MCx0b3A6ZC5wb3NpdGlvbi50b3AtZy50b3B8fDAsbGVmdDpkLnBvc2l0aW9uLmxlZnQtZy5sZWZ0fHwwfSxpPWZ1bmN0aW9uKGIsZCl7YShiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxlPWEodGhpcykuZGF0YSgicmVzaXphYmxlLWFsc29yZXNpemUiKSxmPXt9LGc9ZCYmZC5sZW5ndGg/ZDpiLnBhcmVudHMoYy5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTthLmVhY2goZyxmdW5jdGlvbihhLGIpe3ZhciBjPShlW2JdfHwwKSsoaFtiXXx8MCk7YyYmYz49MCYmKGZbYl09Y3x8bnVsbCl9KSxiLmNzcyhmKX0pfTt0eXBlb2YgZS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWUuYWxzb1Jlc2l6ZS5ub2RlVHlwZT9hLmVhY2goZS5hbHNvUmVzaXplLGZ1bmN0aW9uKGEsYil7aShhLGIpfSk6aShlLmFsc29SZXNpemUpfSxzdG9wOmZ1bmN0aW9uKGIsYyl7YSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zLGY9ZC5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxnPWYubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGZbMF0ubm9kZU5hbWUpLGg9ZyYmYS51aS5oYXNTY3JvbGwoZlswXSwibGVmdCIpPzA6ZC5zaXplRGlmZi5oZWlnaHQsaT1nPzA6ZC5zaXplRGlmZi53aWR0aCxqPXt3aWR0aDpkLnNpemUud2lkdGgtaSxoZWlnaHQ6ZC5zaXplLmhlaWdodC1ofSxrPXBhcnNlSW50KGQuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGQucG9zaXRpb24ubGVmdC1kLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsbD1wYXJzZUludChkLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGQucG9zaXRpb24udG9wLWQub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2QuZWxlbWVudC5hbmltYXRlKGEuZXh0ZW5kKGosbCYmaz97dG9wOmwsbGVmdDprfTp7fSkse2R1cmF0aW9uOmUuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzplLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBjPXt3aWR0aDpwYXJzZUludChkLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChkLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChkLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtmJiZmLmxlbmd0aCYmYShmWzBdKS5jc3Moe3dpZHRoOmMud2lkdGgsaGVpZ2h0OmMuaGVpZ2h0fSksZC5fdXBkYXRlQ2FjaGUoYyksZC5fcHJvcGFnYXRlKCJyZXNpemUiLGIpfX0pfX0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbihiLGQpe3ZhciBlPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZj1lLm9wdGlvbnMsZz1lLmVsZW1lbnQsaD1mLmNvbnRhaW5tZW50LGk9aCBpbnN0YW5jZW9mIGE/aC5nZXQoMCk6L3BhcmVudC8udGVzdChoKT9nLnBhcmVudCgpLmdldCgwKTpoO2lmKCFpKXJldHVybjtlLmNvbnRhaW5lckVsZW1lbnQ9YShpKTtpZigvZG9jdW1lbnQvLnRlc3QoaCl8fGg9PWRvY3VtZW50KWUuY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGUuY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0sZS5wYXJlbnREYXRhPXtlbGVtZW50OmEoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDphKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDphKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH07ZWxzZXt2YXIgaj1hKGkpLGs9W107YShbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGEsYil7a1thXT1jKGouY3NzKCJwYWRkaW5nIitiKSl9KSxlLmNvbnRhaW5lck9mZnNldD1qLm9mZnNldCgpLGUuY29udGFpbmVyUG9zaXRpb249ai5wb3NpdGlvbigpLGUuY29udGFpbmVyU2l6ZT17aGVpZ2h0OmouaW5uZXJIZWlnaHQoKS1rWzNdLHdpZHRoOmouaW5uZXJXaWR0aCgpLWtbMV19O3ZhciBsPWUuY29udGFpbmVyT2Zmc2V0LG09ZS5jb250YWluZXJTaXplLmhlaWdodCxuPWUuY29udGFpbmVyU2l6ZS53aWR0aCxvPWEudWkuaGFzU2Nyb2xsKGksImxlZnQiKT9pLnNjcm9sbFdpZHRoOm4scD1hLnVpLmhhc1Njcm9sbChpKT9pLnNjcm9sbEhlaWdodDptO2UucGFyZW50RGF0YT17ZWxlbWVudDppLGxlZnQ6bC5sZWZ0LHRvcDpsLnRvcCx3aWR0aDpvLGhlaWdodDpwfX19LHJlc2l6ZTpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZT1kLm9wdGlvbnMsZj1kLmNvbnRhaW5lclNpemUsZz1kLmNvbnRhaW5lck9mZnNldCxoPWQuc2l6ZSxpPWQucG9zaXRpb24saj1kLl9hc3BlY3RSYXRpb3x8Yi5zaGlmdEtleSxrPXt0b3A6MCxsZWZ0OjB9LGw9ZC5jb250YWluZXJFbGVtZW50O2xbMF0hPWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGwuY3NzKCJwb3NpdGlvbiIpKSYmKGs9ZyksaS5sZWZ0PChkLl9oZWxwZXI/Zy5sZWZ0OjApJiYoZC5zaXplLndpZHRoPWQuc2l6ZS53aWR0aCsoZC5faGVscGVyP2QucG9zaXRpb24ubGVmdC1nLmxlZnQ6ZC5wb3NpdGlvbi5sZWZ0LWsubGVmdCksaiYmKGQuc2l6ZS5oZWlnaHQ9ZC5zaXplLndpZHRoL2QuYXNwZWN0UmF0aW8pLGQucG9zaXRpb24ubGVmdD1lLmhlbHBlcj9nLmxlZnQ6MCksaS50b3A8KGQuX2hlbHBlcj9nLnRvcDowKSYmKGQuc2l6ZS5oZWlnaHQ9ZC5zaXplLmhlaWdodCsoZC5faGVscGVyP2QucG9zaXRpb24udG9wLWcudG9wOmQucG9zaXRpb24udG9wKSxqJiYoZC5zaXplLndpZHRoPWQuc2l6ZS5oZWlnaHQqZC5hc3BlY3RSYXRpbyksZC5wb3NpdGlvbi50b3A9ZC5faGVscGVyP2cudG9wOjApLGQub2Zmc2V0LmxlZnQ9ZC5wYXJlbnREYXRhLmxlZnQrZC5wb3NpdGlvbi5sZWZ0LGQub2Zmc2V0LnRvcD1kLnBhcmVudERhdGEudG9wK2QucG9zaXRpb24udG9wO3ZhciBtPU1hdGguYWJzKChkLl9oZWxwZXI/ZC5vZmZzZXQubGVmdC1rLmxlZnQ6ZC5vZmZzZXQubGVmdC1rLmxlZnQpK2Quc2l6ZURpZmYud2lkdGgpLG49TWF0aC5hYnMoKGQuX2hlbHBlcj9kLm9mZnNldC50b3Atay50b3A6ZC5vZmZzZXQudG9wLWcudG9wKStkLnNpemVEaWZmLmhlaWdodCksbz1kLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT1kLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLHA9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KGQuY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpO28mJnAmJihtLT1kLnBhcmVudERhdGEubGVmdCksbStkLnNpemUud2lkdGg+PWQucGFyZW50RGF0YS53aWR0aCYmKGQuc2l6ZS53aWR0aD1kLnBhcmVudERhdGEud2lkdGgtbSxqJiYoZC5zaXplLmhlaWdodD1kLnNpemUud2lkdGgvZC5hc3BlY3RSYXRpbykpLG4rZC5zaXplLmhlaWdodD49ZC5wYXJlbnREYXRhLmhlaWdodCYmKGQuc2l6ZS5oZWlnaHQ9ZC5wYXJlbnREYXRhLmhlaWdodC1uLGomJihkLnNpemUud2lkdGg9ZC5zaXplLmhlaWdodCpkLmFzcGVjdFJhdGlvKSl9LHN0b3A6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zLGY9ZC5wb3NpdGlvbixnPWQuY29udGFpbmVyT2Zmc2V0LGg9ZC5jb250YWluZXJQb3NpdGlvbixpPWQuY29udGFpbmVyRWxlbWVudCxqPWEoZC5oZWxwZXIpLGs9ai5vZmZzZXQoKSxsPWoub3V0ZXJXaWR0aCgpLWQuc2l6ZURpZmYud2lkdGgsbT1qLm91dGVySGVpZ2h0KCktZC5zaXplRGlmZi5oZWlnaHQ7ZC5faGVscGVyJiYhZS5hbmltYXRlJiYvcmVsYXRpdmUvLnRlc3QoaS5jc3MoInBvc2l0aW9uIikpJiZhKHRoaXMpLmNzcyh7bGVmdDprLmxlZnQtaC5sZWZ0LWcubGVmdCx3aWR0aDpsLGhlaWdodDptfSksZC5faGVscGVyJiYhZS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KGkuY3NzKCJwb3NpdGlvbiIpKSYmYSh0aGlzKS5jc3Moe2xlZnQ6ay5sZWZ0LWgubGVmdC1nLmxlZnQsd2lkdGg6bCxoZWlnaHQ6bX0pfX0pLGEudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbihiLGMpe3ZhciBkPWEodGhpcykuZGF0YSgicmVzaXphYmxlIiksZT1kLm9wdGlvbnMsZj1kLnNpemU7ZC5naG9zdD1kLm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpLGQuZ2hvc3QuY3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6Zi5oZWlnaHQsd2lkdGg6Zi53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWdob3N0IikuYWRkQ2xhc3ModHlwZW9mIGUuZ2hvc3Q9PSJzdHJpbmciP2UuZ2hvc3Q6IiIpLGQuZ2hvc3QuYXBwZW5kVG8oZC5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zO2QuZ2hvc3QmJmQuZ2hvc3QuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpkLnNpemUuaGVpZ2h0LHdpZHRoOmQuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxlPWQub3B0aW9ucztkLmdob3N0JiZkLmhlbHBlciYmZC5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKGQuZ2hvc3QuZ2V0KDApKX19KSxhLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24oYixjKXt2YXIgZD1hKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGU9ZC5vcHRpb25zLGY9ZC5zaXplLGc9ZC5vcmlnaW5hbFNpemUsaD1kLm9yaWdpbmFsUG9zaXRpb24saT1kLmF4aXMsaj1lLl9hc3BlY3RSYXRpb3x8Yi5zaGlmdEtleTtlLmdyaWQ9dHlwZW9mIGUuZ3JpZD09Im51bWJlciI/W2UuZ3JpZCxlLmdyaWRdOmUuZ3JpZDt2YXIgaz1NYXRoLnJvdW5kKChmLndpZHRoLWcud2lkdGgpLyhlLmdyaWRbMF18fDEpKSooZS5ncmlkWzBdfHwxKSxsPU1hdGgucm91bmQoKGYuaGVpZ2h0LWcuaGVpZ2h0KS8oZS5ncmlkWzFdfHwxKSkqKGUuZ3JpZFsxXXx8MSk7L14oc2V8c3xlKSQvLnRlc3QoaSk/KGQuc2l6ZS53aWR0aD1nLndpZHRoK2ssZC5zaXplLmhlaWdodD1nLmhlaWdodCtsKTovXihuZSkkLy50ZXN0KGkpPyhkLnNpemUud2lkdGg9Zy53aWR0aCtrLGQuc2l6ZS5oZWlnaHQ9Zy5oZWlnaHQrbCxkLnBvc2l0aW9uLnRvcD1oLnRvcC1sKTovXihzdykkLy50ZXN0KGkpPyhkLnNpemUud2lkdGg9Zy53aWR0aCtrLGQuc2l6ZS5oZWlnaHQ9Zy5oZWlnaHQrbCxkLnBvc2l0aW9uLmxlZnQ9aC5sZWZ0LWspOihkLnNpemUud2lkdGg9Zy53aWR0aCtrLGQuc2l6ZS5oZWlnaHQ9Zy5oZWlnaHQrbCxkLnBvc2l0aW9uLnRvcD1oLnRvcC1sLGQucG9zaXRpb24ubGVmdD1oLmxlZnQtayl9fSk7dmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTApfHwwfSxkPWZ1bmN0aW9uKGEpe3JldHVybiFpc05hTihwYXJzZUludChhLDEwKSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS53aWRnZXQoInVpLnNlbGVjdGFibGUiLGEudWkubW91c2Use29wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjoiKiIsdG9sZXJhbmNlOiJ0b3VjaCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0YWJsZSIpLHRoaXMuZHJhZ2dlZD0hMTt2YXIgYzt0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oKXtjPWEoYi5vcHRpb25zLmZpbHRlcixiLmVsZW1lbnRbMF0pLGMuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxjPWIub2Zmc2V0KCk7YS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIse2VsZW1lbnQ6dGhpcywkZWxlbWVudDpiLGxlZnQ6Yy5sZWZ0LHRvcDpjLnRvcCxyaWdodDpjLmxlZnQrYi5vdXRlcldpZHRoKCksYm90dG9tOmMudG9wK2Iub3V0ZXJIZWlnaHQoKSxzdGFydHNlbGVjdGVkOiExLHNlbGVjdGVkOmIuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksc2VsZWN0aW5nOmIuaGFzQ2xhc3MoInVpLXNlbGVjdGluZyIpLHVuc2VsZWN0aW5nOmIuaGFzQ2xhc3MoInVpLXVuc2VsZWN0aW5nIil9KX0pfSx0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcz1jLmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPWEoIjxkaXYgY2xhc3M9J3VpLXNlbGVjdGFibGUtaGVscGVyJz48L2Rpdj4iKX0sZGVzdHJveTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVlcy5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWUiKS5yZW1vdmVEYXRhKCJzZWxlY3RhYmxlLWl0ZW0iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUiKS51bmJpbmQoIi5zZWxlY3RhYmxlIiksdGhpcy5fbW91c2VEZXN0cm95KCksdGhpc30sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYil7dmFyIGM9dGhpczt0aGlzLm9wb3M9W2IucGFnZVgsYi5wYWdlWV07aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXJldHVybjt2YXIgZD10aGlzLm9wdGlvbnM7dGhpcy5zZWxlY3RlZXM9YShkLmZpbHRlcix0aGlzLmVsZW1lbnRbMF0pLHRoaXMuX3RyaWdnZXIoInN0YXJ0IixiKSxhKGQuYXBwZW5kVG8pLmFwcGVuZCh0aGlzLmhlbHBlciksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmIuY2xpZW50WCx0b3A6Yi5jbGllbnRZLHdpZHRoOjAsaGVpZ2h0OjB9KSxkLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ZC5zdGFydHNlbGVjdGVkPSEwLCFiLm1ldGFLZXkmJiFiLmN0cmxLZXkmJihkLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGQuc2VsZWN0ZWQ9ITEsZC4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxkLnVuc2VsZWN0aW5nPSEwLGMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzpkLmVsZW1lbnR9KSl9KSxhKGIudGFyZ2V0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7aWYoZCl7dmFyIGU9IWIubWV0YUtleSYmIWIuY3RybEtleXx8IWQuJGVsZW1lbnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIik7cmV0dXJuIGQuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoZT8idWktdW5zZWxlY3RpbmciOiJ1aS1zZWxlY3RlZCIpLmFkZENsYXNzKGU/InVpLXNlbGVjdGluZyI6InVpLXVuc2VsZWN0aW5nIiksZC51bnNlbGVjdGluZz0hZSxkLnNlbGVjdGluZz1lLGQuc2VsZWN0ZWQ9ZSxlP2MuX3RyaWdnZXIoInNlbGVjdGluZyIsYix7c2VsZWN0aW5nOmQuZWxlbWVudH0pOmMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzpkLmVsZW1lbnR9KSwhMX19KX0sX21vdXNlRHJhZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzO3RoaXMuZHJhZ2dlZD0hMDtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO3ZhciBkPXRoaXMub3B0aW9ucyxlPXRoaXMub3Bvc1swXSxmPXRoaXMub3Bvc1sxXSxnPWIucGFnZVgsaD1iLnBhZ2VZO2lmKGU+Zyl7dmFyIGk9ZztnPWUsZT1pfWlmKGY+aCl7dmFyIGk9aDtoPWYsZj1pfXJldHVybiB0aGlzLmhlbHBlci5jc3Moe2xlZnQ6ZSx0b3A6Zix3aWR0aDpnLWUsaGVpZ2h0OmgtZn0pLHRoaXMuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7aWYoIWl8fGkuZWxlbWVudD09Yy5lbGVtZW50WzBdKXJldHVybjt2YXIgaj0hMTtkLnRvbGVyYW5jZT09InRvdWNoIj9qPSEoaS5sZWZ0Pmd8fGkucmlnaHQ8ZXx8aS50b3A+aHx8aS5ib3R0b208Zik6ZC50b2xlcmFuY2U9PSJmaXQiJiYoaj1pLmxlZnQ+ZSYmaS5yaWdodDxnJiZpLnRvcD5mJiZpLmJvdHRvbTxoKSxqPyhpLnNlbGVjdGVkJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxpLnNlbGVjdGVkPSExKSxpLnVuc2VsZWN0aW5nJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSExKSxpLnNlbGVjdGluZ3x8KGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSEwLGMuX3RyaWdnZXIoInNlbGVjdGluZyIsYix7c2VsZWN0aW5nOmkuZWxlbWVudH0pKSk6KGkuc2VsZWN0aW5nJiYoKGIubWV0YUtleXx8Yi5jdHJsS2V5KSYmaS5zdGFydHNlbGVjdGVkPyhpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMSxpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITApOihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMSxpLnN0YXJ0c2VsZWN0ZWQmJihpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITApLGMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpLGkuc2VsZWN0ZWQmJiFiLm1ldGFLZXkmJiFiLmN0cmxLZXkmJiFpLnN0YXJ0c2VsZWN0ZWQmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEsaS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSEwLGMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIixiLHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpfSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9dGhpczt0aGlzLmRyYWdnZWQ9ITE7dmFyIGQ9dGhpcy5vcHRpb25zO3JldHVybiBhKCIudWktdW5zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtkLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGQudW5zZWxlY3Rpbmc9ITEsZC5zdGFydHNlbGVjdGVkPSExLGMuX3RyaWdnZXIoInVuc2VsZWN0ZWQiLGIse3Vuc2VsZWN0ZWQ6ZC5lbGVtZW50fSl9KSxhKCIudWktc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ZC4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIikuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksZC5zZWxlY3Rpbmc9ITEsZC5zZWxlY3RlZD0hMCxkLnN0YXJ0c2VsZWN0ZWQ9ITAsYy5fdHJpZ2dlcigic2VsZWN0ZWQiLGIse3NlbGVjdGVkOmQuZWxlbWVudH0pfSksdGhpcy5fdHJpZ2dlcigic3RvcCIsYiksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSksYS5leHRlbmQoYS51aS5zZWxlY3RhYmxlLHt2ZXJzaW9uOiIxLjguMjQifSl9KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLndpZGdldCgidWkuc29ydGFibGUiLGEudWkubW91c2Use3dpZGdldEV2ZW50UHJlZml4OiJzb3J0IixyZWFkeTohMSxvcHRpb25zOnthcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZHJvcE9uRW1wdHk6ITAsZm9yY2VQbGFjZWhvbGRlclNpemU6ITEsZm9yY2VIZWxwZXJTaXplOiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGl0ZW1zOiI+ICoiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZToiZGVmYXVsdCIsdG9sZXJhbmNlOiJpbnRlcnNlY3QiLHpJbmRleDoxZTN9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNvcnRhYmxlIiksdGhpcy5yZWZyZXNoKCksdGhpcy5mbG9hdGluZz10aGlzLml0ZW1zLmxlbmd0aD9hLmF4aXM9PT0ieCJ8fC9sZWZ0fHJpZ2h0Ly50ZXN0KHRoaXMuaXRlbXNbMF0uaXRlbS5jc3MoImZsb2F0IikpfHwvaW5saW5lfHRhYmxlLWNlbGwvLnRlc3QodGhpcy5pdGVtc1swXS5pdGVtLmNzcygiZGlzcGxheSIpKTohMSx0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5yZWFkeT0hMH0sZGVzdHJveTpmdW5jdGlvbigpe2EuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgYj10aGlzLml0ZW1zLmxlbmd0aC0xO2I+PTA7Yi0tKXRoaXMuaXRlbXNbYl0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2I9PT0iZGlzYWJsZWQiPyh0aGlzLm9wdGlvbnNbYl09Yyx0aGlzLndpZGdldCgpW2M/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgidWktc29ydGFibGUtZGlzYWJsZWQiKSk6YS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcztpZih0aGlzLnJldmVydGluZylyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMub3B0aW9ucy50eXBlPT0ic3RhdGljIilyZXR1cm4hMTt0aGlzLl9yZWZyZXNoSXRlbXMoYik7dmFyIGU9bnVsbCxmPXRoaXMsZz1hKGIudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lmKGEuZGF0YSh0aGlzLGQud2lkZ2V0TmFtZSsiLWl0ZW0iKT09ZilyZXR1cm4gZT1hKHRoaXMpLCExfSk7YS5kYXRhKGIudGFyZ2V0LGQud2lkZ2V0TmFtZSsiLWl0ZW0iKT09ZiYmKGU9YShiLnRhcmdldCkpO2lmKCFlKXJldHVybiExO2lmKHRoaXMub3B0aW9ucy5oYW5kbGUmJiFjKXt2YXIgaD0hMTthKHRoaXMub3B0aW9ucy5oYW5kbGUsZSkuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09Yi50YXJnZXQmJihoPSEwKX0pO2lmKCFoKXJldHVybiExfXJldHVybiB0aGlzLmN1cnJlbnRJdGVtPWUsdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwhMH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPXRoaXMub3B0aW9ucyxmPXRoaXM7dGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSxhLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6Yi5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDpiLnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihiKSx0aGlzLm9yaWdpbmFsUGFnZVg9Yi5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9Yi5wYWdlWSxlLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGUuY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmN1cnJlbnRJdGVtLmhpZGUoKSx0aGlzLl9jcmVhdGVQbGFjZWhvbGRlcigpLGUuY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksZS5jdXJzb3ImJihhKCJib2R5IikuY3NzKCJjdXJzb3IiKSYmKHRoaXMuX3N0b3JlZEN1cnNvcj1hKCJib2R5IikuY3NzKCJjdXJzb3IiKSksYSgiYm9keSIpLmNzcygiY3Vyc29yIixlLmN1cnNvcikpLGUub3BhY2l0eSYmKHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpJiYodGhpcy5fc3RvcmVkT3BhY2l0eT10aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSksdGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IixlLm9wYWNpdHkpKSxlLnpJbmRleCYmKHRoaXMuaGVscGVyLmNzcygiekluZGV4IikmJih0aGlzLl9zdG9yZWRaSW5kZXg9dGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSksdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLGUuekluZGV4KSksdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT0iSFRNTCImJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsYix0aGlzLl91aUhhc2goKSksdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9uc3x8dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpO2lmKCFkKWZvcih2YXIgZz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy5jb250YWluZXJzW2ddLl90cmlnZ2VyKCJhY3RpdmF0ZSIsYixmLl91aUhhc2godGhpcykpO3JldHVybiBhLnVpLmRkbWFuYWdlciYmKGEudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksYS51aS5kZG1hbmFnZXImJiFlLmRyb3BCZWhhdmlvdXImJmEudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsYiksdGhpcy5kcmFnZ2luZz0hMCx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktc29ydGFibGUtaGVscGVyIiksdGhpcy5fbW91c2VEcmFnKGIpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGIpe3RoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihiKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpLHRoaXMubGFzdFBvc2l0aW9uQWJzfHwodGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicyk7aWYodGhpcy5vcHRpb25zLnNjcm9sbCl7dmFyIGM9dGhpcy5vcHRpb25zLGQ9ITE7dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT0iSFRNTCI/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC1iLnBhZ2VZPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPWQ9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK2Muc2Nyb2xsU3BlZWQ6Yi5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxjLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPWQ9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLWMuc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC1iLnBhZ2VYPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1kPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrYy5zY3JvbGxTcGVlZDpiLnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxjLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1kPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtYy5zY3JvbGxTcGVlZCkpOihiLnBhZ2VZLWEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/ZD1hKGRvY3VtZW50KS5zY3JvbGxUb3AoYShkb2N1bWVudCkuc2Nyb2xsVG9wKCktYy5zY3JvbGxTcGVlZCk6YSh3aW5kb3cpLmhlaWdodCgpLShiLnBhZ2VZLWEoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTxjLnNjcm9sbFNlbnNpdGl2aXR5JiYoZD1hKGRvY3VtZW50KS5zY3JvbGxUb3AoYShkb2N1bWVudCkuc2Nyb2xsVG9wKCkrYy5zY3JvbGxTcGVlZCkpLGIucGFnZVgtYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpPGMuc2Nyb2xsU2Vuc2l0aXZpdHk/ZD1hKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGEoZG9jdW1lbnQpLnNjcm9sbExlZnQoKS1jLnNjcm9sbFNwZWVkKTphKHdpbmRvdykud2lkdGgoKS0oYi5wYWdlWC1hKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpPGMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihkPWEoZG9jdW1lbnQpLnNjcm9sbExlZnQoYShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpK2Muc2Nyb2xsU3BlZWQpKSksZCE9PSExJiZhLnVpLmRkbWFuYWdlciYmIWMuZHJvcEJlaGF2aW91ciYmYS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxiKX10aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ5Iil0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ4Iil0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4Ijtmb3IodmFyIGU9dGhpcy5pdGVtcy5sZW5ndGgtMTtlPj0wO2UtLSl7dmFyIGY9dGhpcy5pdGVtc1tlXSxnPWYuaXRlbVswXSxoPXRoaXMuX2ludGVyc2VjdHNXaXRoUG9pbnRlcihmKTtpZighaCljb250aW51ZTtpZihmLmluc3RhbmNlIT09dGhpcy5jdXJyZW50Q29udGFpbmVyKWNvbnRpbnVlO2lmKGchPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMucGxhY2Vob2xkZXJbaD09MT8ibmV4dCI6InByZXYiXSgpWzBdIT1nJiYhYS51aS5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLGcpJiYodGhpcy5vcHRpb25zLnR5cGU9PSJzZW1pLWR5bmFtaWMiPyFhLnVpLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxnKTohMCkpe3RoaXMuZGlyZWN0aW9uPWg9PTE/ImRvd24iOiJ1cCI7aWYodGhpcy5vcHRpb25zLnRvbGVyYW5jZT09InBvaW50ZXIifHx0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKGYpKXRoaXMuX3JlYXJyYW5nZShiLGYpO2Vsc2UgYnJlYWs7dGhpcy5fdHJpZ2dlcigiY2hhbmdlIixiLHRoaXMuX3VpSGFzaCgpKTticmVha319cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKGIpLGEudWkuZGRtYW5hZ2VyJiZhLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsYiksdGhpcy5fdHJpZ2dlcigic29ydCIsYix0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihiLGMpe2lmKCFiKXJldHVybjthLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZhLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsYik7aWYodGhpcy5vcHRpb25zLnJldmVydCl7dmFyIGQ9dGhpcyxlPWQucGxhY2Vob2xkZXIub2Zmc2V0KCk7ZC5yZXZlcnRpbmc9ITAsYSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh7bGVmdDplLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtZC5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtZC5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApfSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7ZC5fY2xlYXIoYil9KX1lbHNlIHRoaXMuX2NsZWFyKGIsYyk7cmV0dXJuITF9LGNhbmNlbDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7aWYodGhpcy5kcmFnZ2luZyl7dGhpcy5fbW91c2VVcCh7dGFyZ2V0Om51bGx9KSx0aGlzLm9wdGlvbnMuaGVscGVyPT0ib3JpZ2luYWwiP3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpOnRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih2YXIgYz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Yz49MDtjLS0pdGhpcy5jb250YWluZXJzW2NdLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixudWxsLGIuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2NdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbY10uX3RyaWdnZXIoIm91dCIsbnVsbCxiLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS5vdmVyPTApfXJldHVybiB0aGlzLnBsYWNlaG9sZGVyJiYodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlJiZ0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5vcHRpb25zLmhlbHBlciE9Im9yaWdpbmFsIiYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLGEuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj9hKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6YSh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoYiYmYi5jb25uZWN0ZWQpLGQ9W107cmV0dXJuIGI9Ynx8e30sYShjKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9KGEoYi5pdGVtfHx0aGlzKS5hdHRyKGIuYXR0cmlidXRlfHwiaWQiKXx8IiIpLm1hdGNoKGIuZXhwcmVzc2lvbnx8LyguKylbLT1fXSguKykvKTtjJiZkLnB1c2goKGIua2V5fHxjWzFdKyJbXSIpKyI9IisoYi5rZXkmJmIuZXhwcmVzc2lvbj9jWzFdOmNbMl0pKX0pLCFkLmxlbmd0aCYmYi5rZXkmJmQucHVzaChiLmtleSsiPSIpLGQuam9pbigiJiIpfSx0b0FycmF5OmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoYiYmYi5jb25uZWN0ZWQpLGQ9W107cmV0dXJuIGI9Ynx8e30sYy5lYWNoKGZ1bmN0aW9uKCl7ZC5wdXNoKGEoYi5pdGVtfHx0aGlzKS5hdHRyKGIuYXR0cmlidXRlfHwiaWQiKXx8IiIpfSksZH0sX2ludGVyc2VjdHNXaXRoOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9zaXRpb25BYnMubGVmdCxjPWIrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxkPXRoaXMucG9zaXRpb25BYnMudG9wLGU9ZCt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxmPWEubGVmdCxnPWYrYS53aWR0aCxoPWEudG9wLGk9aCthLmhlaWdodCxqPXRoaXMub2Zmc2V0LmNsaWNrLnRvcCxrPXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsbD1kK2o+aCYmZCtqPGkmJmIraz5mJiZiK2s8ZztyZXR1cm4gdGhpcy5vcHRpb25zLnRvbGVyYW5jZT09InBvaW50ZXIifHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8dGhpcy5vcHRpb25zLnRvbGVyYW5jZSE9InBvaW50ZXIiJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+YVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdP2w6ZjxiK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmYy10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI8ZyYmaDxkK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzImJmUtdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMjxpfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMub3B0aW9ucy5heGlzPT09IngifHxhLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGIudG9wLGIuaGVpZ2h0KSxkPXRoaXMub3B0aW9ucy5heGlzPT09InkifHxhLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsYi5sZWZ0LGIud2lkdGgpLGU9YyYmZCxmPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLGc9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gZT90aGlzLmZsb2F0aW5nP2cmJmc9PSJyaWdodCJ8fGY9PSJkb3duIj8yOjE6ZiYmKGY9PSJkb3duIj8yOjEpOiExfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbihiKXt2YXIgYz1hLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGIudG9wK2IuaGVpZ2h0LzIsYi5oZWlnaHQpLGQ9YS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LGIubGVmdCtiLndpZHRoLzIsYi53aWR0aCksZT10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxmPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7cmV0dXJuIHRoaXMuZmxvYXRpbmcmJmY/Zj09InJpZ2h0IiYmZHx8Zj09ImxlZnQiJiYhZDplJiYoZT09ImRvd24iJiZjfHxlPT0idXAiJiYhYyl9LF9nZXREcmFnVmVydGljYWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBvc2l0aW9uQWJzLnRvcC10aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7cmV0dXJuIGEhPTAmJihhPjA/ImRvd24iOiJ1cCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gYSE9MCYmKGE+MD8icmlnaHQiOiJsZWZ0Iil9LHJlZnJlc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3JlZnJlc2hJdGVtcyhhKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzfSxfY29ubmVjdFdpdGg6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7cmV0dXJuIGEuY29ubmVjdFdpdGguY29uc3RydWN0b3I9PVN0cmluZz9bYS5jb25uZWN0V2l0aF06YS5jb25uZWN0V2l0aH0sX2dldEl0ZW1zQXNqUXVlcnk6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxkPVtdLGU9W10sZj10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGYmJmIpZm9yKHZhciBnPWYubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciBoPWEoZltnXSk7Zm9yKHZhciBpPWgubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBqPWEuZGF0YShoW2ldLHRoaXMud2lkZ2V0TmFtZSk7aiYmaiE9dGhpcyYmIWoub3B0aW9ucy5kaXNhYmxlZCYmZS5wdXNoKFthLmlzRnVuY3Rpb24oai5vcHRpb25zLml0ZW1zKT9qLm9wdGlvbnMuaXRlbXMuY2FsbChqLmVsZW1lbnQpOmEoai5vcHRpb25zLml0ZW1zLGouZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxqXSl9fWUucHVzaChbYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmEodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSk7Zm9yKHZhciBnPWUubGVuZ3RoLTE7Zz49MDtnLS0pZVtnXVswXS5lYWNoKGZ1bmN0aW9uKCl7ZC5wdXNoKHRoaXMpfSk7cmV0dXJuIGEoZCl9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VycmVudEl0ZW0uZmluZCgiOmRhdGEoIit0aGlzLndpZGdldE5hbWUrIi1pdGVtKSIpO2Zvcih2YXIgYj0wO2I8dGhpcy5pdGVtcy5sZW5ndGg7YisrKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY109PXRoaXMuaXRlbXNbYl0uaXRlbVswXSYmdGhpcy5pdGVtcy5zcGxpY2UoYiwxKX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihiKXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGM9dGhpcy5pdGVtcyxkPXRoaXMsZT1bW2EuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSxiLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTphKHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxmPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoZiYmdGhpcy5yZWFkeSlmb3IodmFyIGc9Zi5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGg9YShmW2ddKTtmb3IodmFyIGk9aC5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGo9YS5kYXRhKGhbaV0sdGhpcy53aWRnZXROYW1lKTtqJiZqIT10aGlzJiYhai5vcHRpb25zLmRpc2FibGVkJiYoZS5wdXNoKFthLmlzRnVuY3Rpb24oai5vcHRpb25zLml0ZW1zKT9qLm9wdGlvbnMuaXRlbXMuY2FsbChqLmVsZW1lbnRbMF0sYix7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6YShqLm9wdGlvbnMuaXRlbXMsai5lbGVtZW50KSxqXSksdGhpcy5jb250YWluZXJzLnB1c2goaikpfX1mb3IodmFyIGc9ZS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIGs9ZVtnXVsxXSxsPWVbZ11bMF07Zm9yKHZhciBpPTAsbT1sLmxlbmd0aDtpPG07aSsrKXt2YXIgbj1hKGxbaV0pO24uZGF0YSh0aGlzLndpZGdldE5hbWUrIi1pdGVtIixrKSxjLnB1c2goe2l0ZW06bixpbnN0YW5jZTprLHdpZHRoOjAsaGVpZ2h0OjAsbGVmdDowLHRvcDowfSl9fX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbihiKXt0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO2Zvcih2YXIgYz10aGlzLml0ZW1zLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgZD10aGlzLml0ZW1zW2NdO2lmKGQuaW5zdGFuY2UhPXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZkLml0ZW1bMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0pY29udGludWU7dmFyIGU9dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/YSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxkLml0ZW0pOmQuaXRlbTtifHwoZC53aWR0aD1lLm91dGVyV2lkdGgoKSxkLmhlaWdodD1lLm91dGVySGVpZ2h0KCkpO3ZhciBmPWUub2Zmc2V0KCk7ZC5sZWZ0PWYubGVmdCxkLnRvcD1mLnRvcH1pZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcih2YXIgYz10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBmPXRoaXMuY29udGFpbmVyc1tjXS5lbGVtZW50Lm9mZnNldCgpO3RoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS5sZWZ0PWYubGVmdCx0aGlzLmNvbnRhaW5lcnNbY10uY29udGFpbmVyQ2FjaGUudG9wPWYudG9wLHRoaXMuY29udGFpbmVyc1tjXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbY10uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2NdLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbY10uZWxlbWVudC5vdXRlckhlaWdodCgpfXJldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oYil7dmFyIGM9Ynx8dGhpcyxkPWMub3B0aW9ucztpZighZC5wbGFjZWhvbGRlcnx8ZC5wbGFjZWhvbGRlci5jb25zdHJ1Y3Rvcj09U3RyaW5nKXt2YXIgZT1kLnBsYWNlaG9sZGVyO2QucGxhY2Vob2xkZXI9e2VsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYj1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYy5jdXJyZW50SXRlbVswXS5ub2RlTmFtZSkpLmFkZENsYXNzKGV8fGMuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIilbMF07cmV0dXJuIGV8fChiLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpLGJ9LHVwZGF0ZTpmdW5jdGlvbihhLGIpe2lmKGUmJiFkLmZvcmNlUGxhY2Vob2xkZXJTaXplKXJldHVybjtiLmhlaWdodCgpfHxiLmhlaWdodChjLmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQoYy5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQoYy5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLGIud2lkdGgoKXx8Yi53aWR0aChjLmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludChjLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQoYy5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSl9fX1jLnBsYWNlaG9sZGVyPWEoZC5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwoYy5lbGVtZW50LGMuY3VycmVudEl0ZW0pKSxjLmN1cnJlbnRJdGVtLmFmdGVyKGMucGxhY2Vob2xkZXIpLGQucGxhY2Vob2xkZXIudXBkYXRlKGMsYy5wbGFjZWhvbGRlcil9LF9jb250YWN0Q29udGFpbmVyczpmdW5jdGlvbihiKXt2YXIgYz1udWxsLGQ9bnVsbDtmb3IodmFyIGU9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2U+PTA7ZS0tKXtpZihhLnVpLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2VdLmVsZW1lbnRbMF0pKWNvbnRpbnVlO2lmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmEudWkuY29udGFpbnModGhpcy5jb250YWluZXJzW2VdLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tlXSxkPWV9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbZV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcigib3V0IixiLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9aWYoIWMpcmV0dXJuO2lmKHRoaXMuY29udGFpbmVycy5sZW5ndGg9PT0xKXRoaXMuY29udGFpbmVyc1tkXS5fdHJpZ2dlcigib3ZlciIsYix0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tkXS5jb250YWluZXJDYWNoZS5vdmVyPTE7ZWxzZSBpZih0aGlzLmN1cnJlbnRDb250YWluZXIhPXRoaXMuY29udGFpbmVyc1tkXSl7dmFyIGY9MWU0LGc9bnVsbCxoPXRoaXMucG9zaXRpb25BYnNbdGhpcy5jb250YWluZXJzW2RdLmZsb2F0aW5nPyJsZWZ0IjoidG9wIl07Zm9yKHZhciBpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pe2lmKCFhLnVpLmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tkXS5lbGVtZW50WzBdLHRoaXMuaXRlbXNbaV0uaXRlbVswXSkpY29udGludWU7dmFyIGo9dGhpcy5jb250YWluZXJzW2RdLmZsb2F0aW5nP3RoaXMuaXRlbXNbaV0uaXRlbS5vZmZzZXQoKS5sZWZ0OnRoaXMuaXRlbXNbaV0uaXRlbS5vZmZzZXQoKS50b3A7TWF0aC5hYnMoai1oKTxmJiYoZj1NYXRoLmFicyhqLWgpLGc9dGhpcy5pdGVtc1tpXSx0aGlzLmRpcmVjdGlvbj1qLWg+MD8iZG93biI6InVwIil9aWYoIWcmJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbZF0sZz90aGlzLl9yZWFycmFuZ2UoYixnLG51bGwsITApOnRoaXMuX3JlYXJyYW5nZShiLG51bGwsdGhpcy5jb250YWluZXJzW2RdLmVsZW1lbnQsITApLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsYix0aGlzLl91aUhhc2goKSksdGhpcy5jb250YWluZXJzW2RdLl90cmlnZ2VyKCJjaGFuZ2UiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lcix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLmNvbnRhaW5lcnNbZF0uX3RyaWdnZXIoIm92ZXIiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbZF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xfX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm9wdGlvbnMsZD1hLmlzRnVuY3Rpb24oYy5oZWxwZXIpP2EoYy5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtiLHRoaXMuY3VycmVudEl0ZW1dKSk6Yy5oZWxwZXI9PSJjbG9uZSI/dGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpOnRoaXMuY3VycmVudEl0ZW07cmV0dXJuIGQucGFyZW50cygiYm9keSIpLmxlbmd0aHx8YShjLmFwcGVuZFRvIT0icGFyZW50Ij9jLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoZFswXSksZFswXT09dGhpcy5jdXJyZW50SXRlbVswXSYmKHRoaXMuX3N0b3JlZENTUz17d2lkdGg6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQscG9zaXRpb246dGhpcy5jdXJyZW50SXRlbS5jc3MoInBvc2l0aW9uIiksdG9wOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuY3VycmVudEl0ZW0uY3NzKCJsZWZ0Iil9KSwoZFswXS5zdHlsZS53aWR0aD09IiJ8fGMuZm9yY2VIZWxwZXJTaXplKSYmZC53aWR0aCh0aGlzLmN1cnJlbnRJdGVtLndpZHRoKCkpLChkWzBdLnN0eWxlLmhlaWdodD09IiJ8fGMuZm9yY2VIZWxwZXJTaXplKSYmZC5oZWlnaHQodGhpcy5jdXJyZW50SXRlbS5oZWlnaHQoKSksZH0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oYil7dHlwZW9mIGI9PSJzdHJpbmciJiYoYj1iLnNwbGl0KCIgIikpLGEuaXNBcnJheShiKSYmKGI9e2xlZnQ6K2JbMF0sdG9wOitiWzFdfHwwfSksImxlZnQiaW4gYiYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9Yi5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gYiYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1iLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIGImJih0aGlzLm9mZnNldC5jbGljay50b3A9Yi50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiBiJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWIuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIGI9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZhLnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKGIubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLGIudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSk7aWYodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiJiZhLmJyb3dzZXIubXNpZSliPXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6Yi50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6Yi5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiKXt2YXIgYT10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDphLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6YS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucztiLmNvbnRhaW5tZW50PT0icGFyZW50IiYmKGIuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSk7aWYoYi5jb250YWlubWVudD09ImRvY3VtZW50Inx8Yi5jb250YWlubWVudD09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsYShiLmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChhKGIuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF07aWYoIS9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdChiLmNvbnRhaW5tZW50KSl7dmFyIGM9YShiLmNvbnRhaW5tZW50KVswXSxkPWEoYi5jb250YWlubWVudCkub2Zmc2V0KCksZT1hKGMpLmNzcygib3ZlcmZsb3ciKSE9ImhpZGRlbiI7dGhpcy5jb250YWlubWVudD1bZC5sZWZ0KyhwYXJzZUludChhKGMpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYShjKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKS10aGlzLm1hcmdpbnMubGVmdCxkLnRvcCsocGFyc2VJbnQoYShjKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYShjKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3AsZC5sZWZ0KyhlP01hdGgubWF4KGMuc2Nyb2xsV2lkdGgsYy5vZmZzZXRXaWR0aCk6Yy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGEoYykuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChhKGMpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LGQudG9wKyhlP01hdGgubWF4KGMuc2Nyb2xsSGVpZ2h0LGMub2Zmc2V0SGVpZ2h0KTpjLm9mZnNldEhlaWdodCktKHBhcnNlSW50KGEoYykuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGEoYykuY3NzKCJwYWRkaW5nQm90dG9tIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXX19LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbihiLGMpe2N8fChjPXRoaXMucG9zaXRpb24pO3ZhciBkPWI9PSJhYnNvbHV0ZSI/MTotMSxlPXRoaXMub3B0aW9ucyxmPXRoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJih0aGlzLnNjcm9sbFBhcmVudFswXT09ZG9jdW1lbnR8fCFhLnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSk/dGhpcy5vZmZzZXRQYXJlbnQ6dGhpcy5zY3JvbGxQYXJlbnQsZz0vKGh0bWx8Ym9keSkvaS50ZXN0KGZbMF0udGFnTmFtZSk7cmV0dXJue3RvcDpjLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AqZCt0aGlzLm9mZnNldC5wYXJlbnQudG9wKmQtKGEuYnJvd3Nlci5zYWZhcmkmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDoodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6Zz8wOmYuc2Nyb2xsVG9wKCkpKmQpLGxlZnQ6Yy5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqZCt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpkLShhLmJyb3dzZXIuc2FmYXJpJiZ0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPzA6KHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpnPzA6Zi5zY3JvbGxMZWZ0KCkpKmQpfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8IWEudWkuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pKT90aGlzLm9mZnNldFBhcmVudDp0aGlzLnNjcm9sbFBhcmVudCxlPS8oaHRtbHxib2R5KS9pLnRlc3QoZFswXS50YWdOYW1lKTt0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiJiYodGhpcy5zY3JvbGxQYXJlbnRbMF09PWRvY3VtZW50fHx0aGlzLnNjcm9sbFBhcmVudFswXT09dGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSk7dmFyIGY9Yi5wYWdlWCxnPWIucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt0aGlzLmNvbnRhaW5tZW50JiYoYi5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihmPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksYi5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKGc9dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGIucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYoZj10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGIucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihnPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSk7aWYoYy5ncmlkKXt2YXIgaD10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoZy10aGlzLm9yaWdpbmFsUGFnZVkpL2MuZ3JpZFsxXSkqYy5ncmlkWzFdO2c9dGhpcy5jb250YWlubWVudD9oLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdfHxoLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdP2gtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0/aCtjLmdyaWRbMV06aC1jLmdyaWRbMV06aDpoO3ZhciBpPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChmLXRoaXMub3JpZ2luYWxQYWdlWCkvYy5ncmlkWzBdKSpjLmdyaWRbMF07Zj10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdfHxpLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXT9pLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXT9pK2MuZ3JpZFswXTppLWMuZ3JpZFswXTppOml9fXJldHVybnt0b3A6Zy10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKGEuYnJvd3Nlci5zYWZhcmkmJnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/MDp0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTplPzA6ZC5zY3JvbGxUb3AoKSksbGVmdDpmLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsoYS5icm93c2VyLnNhZmFyaSYmdGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8wOnRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTplPzA6ZC5zY3JvbGxMZWZ0KCkpfX0sX3JlYXJyYW5nZTpmdW5jdGlvbihhLGIsYyxkKXtjP2NbMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk6Yi5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sdGhpcy5kaXJlY3Rpb249PSJkb3duIj9iLml0ZW1bMF06Yi5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIGU9dGhpcyxmPXRoaXMuY291bnRlcjt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2Y9PWUuY291bnRlciYmZS5yZWZyZXNoUG9zaXRpb25zKCFkKX0sMCl9LF9jbGVhcjpmdW5jdGlvbihiLGMpe3RoaXMucmV2ZXJ0aW5nPSExO3ZhciBkPVtdLGU9dGhpczshdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsO2lmKHRoaXMuaGVscGVyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IodmFyIGYgaW4gdGhpcy5fc3RvcmVkQ1NTKWlmKHRoaXMuX3N0b3JlZENTU1tmXT09ImF1dG8ifHx0aGlzLl9zdG9yZWRDU1NbZl09PSJzdGF0aWMiKXRoaXMuX3N0b3JlZENTU1tmXT0iIjt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO3RoaXMuZnJvbU91dHNpZGUmJiFjJiZkLnB1c2goZnVuY3Rpb24oYSl7dGhpcy5fdHJpZ2dlcigicmVjZWl2ZSIsYSx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksKHRoaXMuZnJvbU91dHNpZGV8fHRoaXMuZG9tUG9zaXRpb24ucHJldiE9dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF18fHRoaXMuZG9tUG9zaXRpb24ucGFyZW50IT10aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdKSYmIWMmJmQucHVzaChmdW5jdGlvbihhKXt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLGEsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKGN8fChkLnB1c2goZnVuY3Rpb24oYSl7dGhpcy5fdHJpZ2dlcigicmVtb3ZlIixhLHRoaXMuX3VpSGFzaCgpKX0pLGQucHVzaChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7YS5fdHJpZ2dlcigicmVjZWl2ZSIsYix0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLGQucHVzaChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7YS5fdHJpZ2dlcigidXBkYXRlIixiLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKTtmb3IodmFyIGY9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2Y+PTA7Zi0tKWN8fGQucHVzaChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7YS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsYix0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tmXSkpLHRoaXMuY29udGFpbmVyc1tmXS5jb250YWluZXJDYWNoZS5vdmVyJiYoZC5wdXNoKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXthLl90cmlnZ2VyKCJvdXQiLGIsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbZl0pKSx0aGlzLmNvbnRhaW5lcnNbZl0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTt0aGlzLl9zdG9yZWRDdXJzb3ImJmEoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09ImF1dG8iPyIiOnRoaXMuX3N0b3JlZFpJbmRleCksdGhpcy5kcmFnZ2luZz0hMTtpZih0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpe2lmKCFjKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIixiLHRoaXMuX3VpSGFzaCgpKTtmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKylkW2ZdLmNhbGwodGhpcyxiKTt0aGlzLl90cmlnZ2VyKCJzdG9wIixiLHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMX1jfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIixiLHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGw7aWYoIWMpe2Zvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKWRbZl0uY2FsbCh0aGlzLGIpO3RoaXMuX3RyaWdnZXIoInN0b3AiLGIsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCEwfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2EuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbihiKXt2YXIgYz1ifHx0aGlzO3JldHVybntoZWxwZXI6Yy5oZWxwZXIscGxhY2Vob2xkZXI6Yy5wbGFjZWhvbGRlcnx8YShbXSkscG9zaXRpb246Yy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOmMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6Yy5wb3NpdGlvbkFicyxpdGVtOmMuY3VycmVudEl0ZW0sc2VuZGVyOmI/Yi5lbGVtZW50Om51bGx9fX0pLGEuZXh0ZW5kKGEudWkuc29ydGFibGUse3ZlcnNpb246IjEuOC4yNCJ9KX0oalF1ZXJ5KSxqUXVlcnkuZWZmZWN0c3x8ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3ZhciBjO3JldHVybiBiJiZiLmNvbnN0cnVjdG9yPT1BcnJheSYmYi5sZW5ndGg9PTM/YjooYz0vcmdiXChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKlwpLy5leGVjKGIpKT9bcGFyc2VJbnQoY1sxXSwxMCkscGFyc2VJbnQoY1syXSwxMCkscGFyc2VJbnQoY1szXSwxMCldOihjPS9yZ2JcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqXCkvLmV4ZWMoYikpP1twYXJzZUZsb2F0KGNbMV0pKjIuNTUscGFyc2VGbG9hdChjWzJdKSoyLjU1LHBhcnNlRmxvYXQoY1szXSkqMi41NV06KGM9LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkvLmV4ZWMoYikpP1twYXJzZUludChjWzFdLDE2KSxwYXJzZUludChjWzJdLDE2KSxwYXJzZUludChjWzNdLDE2KV06KGM9LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkvLmV4ZWMoYikpP1twYXJzZUludChjWzFdK2NbMV0sMTYpLHBhcnNlSW50KGNbMl0rY1syXSwxNikscGFyc2VJbnQoY1szXStjWzNdLDE2KV06KGM9L3JnYmFcKDAsIDAsIDAsIDBcKS8uZXhlYyhiKSk/ZS50cmFuc3BhcmVudDplW2EudHJpbShiKS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBkKGIsZCl7dmFyIGU7ZG97ZT0oYS5jdXJDU1N8fGEuY3NzKShiLGQpO2lmKGUhPSIiJiZlIT0idHJhbnNwYXJlbnQifHxhLm5vZGVOYW1lKGIsImJvZHkiKSlicmVhaztkPSJiYWNrZ3JvdW5kQ29sb3IifXdoaWxlKGI9Yi5wYXJlbnROb2RlKTtyZXR1cm4gYyhlKX1mdW5jdGlvbiBoKCl7dmFyIGE9ZG9jdW1lbnQuZGVmYXVsdFZpZXc/ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpOnRoaXMuY3VycmVudFN0eWxlLGI9e30sYyxkO2lmKGEmJmEubGVuZ3RoJiZhWzBdJiZhW2FbMF1dKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0pYz1hW2VdLHR5cGVvZiBhW2NdPT0ic3RyaW5nIiYmKGQ9Yy5yZXBsYWNlKC9cLShcdykvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KSxiW2RdPWFbY10pfWVsc2UgZm9yKGMgaW4gYSl0eXBlb2YgYVtjXT09InN0cmluZyImJihiW2NdPWFbY10pO3JldHVybiBifWZ1bmN0aW9uIGkoYil7dmFyIGMsZDtmb3IoYyBpbiBiKWQ9YltjXSwoZD09bnVsbHx8YS5pc0Z1bmN0aW9uKGQpfHxjIGluIGd8fC9zY3JvbGxiYXIvLnRlc3QoYyl8fCEvY29sb3IvaS50ZXN0KGMpJiZpc05hTihwYXJzZUZsb2F0KGQpKSkmJmRlbGV0ZSBiW2NdO3JldHVybiBifWZ1bmN0aW9uIGooYSxiKXt2YXIgYz17XzowfSxkO2ZvcihkIGluIGIpYVtkXSE9YltkXSYmKGNbZF09YltkXSk7cmV0dXJuIGN9ZnVuY3Rpb24gayhiLGMsZCxlKXt0eXBlb2YgYj09Im9iamVjdCImJihlPWMsZD1udWxsLGM9YixiPWMuZWZmZWN0KSxhLmlzRnVuY3Rpb24oYykmJihlPWMsZD1udWxsLGM9e30pO2lmKHR5cGVvZiBjPT0ibnVtYmVyInx8YS5meC5zcGVlZHNbY10pZT1kLGQ9YyxjPXt9O3JldHVybiBhLmlzRnVuY3Rpb24oZCkmJihlPWQsZD1udWxsKSxjPWN8fHt9LGQ9ZHx8Yy5kdXJhdGlvbixkPWEuZngub2ZmPzA6dHlwZW9mIGQ9PSJudW1iZXIiP2Q6ZCBpbiBhLmZ4LnNwZWVkcz9hLmZ4LnNwZWVkc1tkXTphLmZ4LnNwZWVkcy5fZGVmYXVsdCxlPWV8fGMuY29tcGxldGUsW2IsYyxkLGVdfWZ1bmN0aW9uIGwoYil7cmV0dXJuIWJ8fHR5cGVvZiBiPT0ibnVtYmVyInx8YS5meC5zcGVlZHNbYl0/ITA6dHlwZW9mIGI9PSJzdHJpbmciJiYhYS5lZmZlY3RzW2JdPyEwOiExfWEuZWZmZWN0cz17fSxhLmVhY2goWyJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiY29sb3IiLCJvdXRsaW5lQ29sb3IiXSxmdW5jdGlvbihiLGUpe2EuZnguc3RlcFtlXT1mdW5jdGlvbihhKXthLmNvbG9ySW5pdHx8KGEuc3RhcnQ9ZChhLmVsZW0sZSksYS5lbmQ9YyhhLmVuZCksYS5jb2xvckluaXQ9ITApLGEuZWxlbS5zdHlsZVtlXT0icmdiKCIrTWF0aC5tYXgoTWF0aC5taW4ocGFyc2VJbnQoYS5wb3MqKGEuZW5kWzBdLWEuc3RhcnRbMF0pK2Euc3RhcnRbMF0sMTApLDI1NSksMCkrIiwiK01hdGgubWF4KE1hdGgubWluKHBhcnNlSW50KGEucG9zKihhLmVuZFsxXS1hLnN0YXJ0WzFdKSthLnN0YXJ0WzFdLDEwKSwyNTUpLDApKyIsIitNYXRoLm1heChNYXRoLm1pbihwYXJzZUludChhLnBvcyooYS5lbmRbMl0tYS5zdGFydFsyXSkrYS5zdGFydFsyXSwxMCksMjU1KSwwKSsiKSJ9fSk7dmFyIGU9e2FxdWE6WzAsMjU1LDI1NV0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJsYWNrOlswLDAsMF0sYmx1ZTpbMCwwLDI1NV0sYnJvd246WzE2NSw0Miw0Ml0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5LDEzOV0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdyZWVuOlswLDEyOCwwXSxpbmRpZ286Wzc1LDAsMTMwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxuYXZ5OlswLDAsMTI4XSxvbGl2ZTpbMTI4LDEyOCwwXSxvcmFuZ2U6WzI1NSwxNjUsMF0scGluazpbMjU1LDE5MiwyMDNdLHB1cnBsZTpbMTI4LDAsMTI4XSx2aW9sZXQ6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSx3aGl0ZTpbMjU1LDI1NSwyNTVdLHllbGxvdzpbMjU1LDI1NSwwXSx0cmFuc3BhcmVudDpbMjU1LDI1NSwyNTVdfSxmPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sZz17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07YS5lZmZlY3RzLmFuaW1hdGVDbGFzcz1mdW5jdGlvbihiLGMsZCxlKXtyZXR1cm4gYS5pc0Z1bmN0aW9uKGQpJiYoZT1kLGQ9bnVsbCksdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBnPWEodGhpcyksaz1nLmF0dHIoInN0eWxlIil8fCIgIixsPWkoaC5jYWxsKHRoaXMpKSxtLG49Zy5hdHRyKCJjbGFzcyIpfHwiIjthLmVhY2goZixmdW5jdGlvbihhLGMpe2JbY10mJmdbYysiQ2xhc3MiXShiW2NdKX0pLG09aShoLmNhbGwodGhpcykpLGcuYXR0cigiY2xhc3MiLG4pLGcuYW5pbWF0ZShqKGwsbSkse3F1ZXVlOiExLGR1cmF0aW9uOmMsZWFzaW5nOmQsY29tcGxldGU6ZnVuY3Rpb24oKXthLmVhY2goZixmdW5jdGlvbihhLGMpe2JbY10mJmdbYysiQ2xhc3MiXShiW2NdKX0pLHR5cGVvZiBnLmF0dHIoInN0eWxlIik9PSJvYmplY3QiPyhnLmF0dHIoInN0eWxlIikuY3NzVGV4dD0iIixnLmF0dHIoInN0eWxlIikuY3NzVGV4dD1rKTpnLmF0dHIoInN0eWxlIixrKSxlJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLmRlcXVldWUodGhpcyl9fSl9KX0sYS5mbi5leHRlbmQoe19hZGRDbGFzczphLmZuLmFkZENsYXNzLGFkZENsYXNzOmZ1bmN0aW9uKGIsYyxkLGUpe3JldHVybiBjP2EuZWZmZWN0cy5hbmltYXRlQ2xhc3MuYXBwbHkodGhpcyxbe2FkZDpifSxjLGQsZV0pOnRoaXMuX2FkZENsYXNzKGIpfSxfcmVtb3ZlQ2xhc3M6YS5mbi5yZW1vdmVDbGFzcyxyZW1vdmVDbGFzczpmdW5jdGlvbihiLGMsZCxlKXtyZXR1cm4gYz9hLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmFwcGx5KHRoaXMsW3tyZW1vdmU6Yn0sYyxkLGVdKTp0aGlzLl9yZW1vdmVDbGFzcyhiKX0sX3RvZ2dsZUNsYXNzOmEuZm4udG9nZ2xlQ2xhc3MsdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYyxkLGUsZixnKXtyZXR1cm4gdHlwZW9mIGQ9PSJib29sZWFuInx8ZD09PWI/ZT9hLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmFwcGx5KHRoaXMsW2Q/e2FkZDpjfTp7cmVtb3ZlOmN9LGUsZixnXSk6dGhpcy5fdG9nZ2xlQ2xhc3MoYyxkKTphLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmFwcGx5KHRoaXMsW3t0b2dnbGU6Y30sZCxlLGZdKX0sc3dpdGNoQ2xhc3M6ZnVuY3Rpb24oYixjLGQsZSxmKXtyZXR1cm4gYS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5hcHBseSh0aGlzLFt7YWRkOmMscmVtb3ZlOmJ9LGQsZSxmXSl9fSksYS5leHRlbmQoYS5lZmZlY3RzLHt2ZXJzaW9uOiIxLjguMjQiLHNhdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdIT09bnVsbCYmYS5kYXRhKCJlYy5zdG9yYWdlLiIrYltjXSxhWzBdLnN0eWxlW2JbY11dKX0scmVzdG9yZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10hPT1udWxsJiZhLmNzcyhiW2NdLGEuZGF0YSgiZWMuc3RvcmFnZS4iK2JbY10pKX0sc2V0TW9kZTpmdW5jdGlvbihhLGIpe3JldHVybiBiPT0idG9nZ2xlIiYmKGI9YS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLGJ9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGEsYil7dmFyIGMsZDtzd2l0Y2goYVswXSl7Y2FzZSJ0b3AiOmM9MDticmVhaztjYXNlIm1pZGRsZSI6Yz0uNTticmVhaztjYXNlImJvdHRvbSI6Yz0xO2JyZWFrO2RlZmF1bHQ6Yz1hWzBdL2IuaGVpZ2h0fXN3aXRjaChhWzFdKXtjYXNlImxlZnQiOmQ9MDticmVhaztjYXNlImNlbnRlciI6ZD0uNTticmVhaztjYXNlInJpZ2h0IjpkPTE7YnJlYWs7ZGVmYXVsdDpkPWFbMV0vYi53aWR0aH1yZXR1cm57eDpkLHk6Y319LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oYil7aWYoYi5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiBiLnBhcmVudCgpO3ZhciBjPXt3aWR0aDpiLm91dGVyV2lkdGgoITApLGhlaWdodDpiLm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOmIuY3NzKCJmbG9hdCIpfSxkPWEoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0cnl7ZS5pZH1jYXRjaChmKXtlPWRvY3VtZW50LmJvZHl9cmV0dXJuIGIud3JhcChkKSwoYlswXT09PWV8fGEuY29udGFpbnMoYlswXSxlKSkmJmEoZSkuZm9jdXMoKSxkPWIucGFyZW50KCksYi5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiPyhkLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLGIuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihhLmV4dGVuZChjLHtwb3NpdGlvbjpiLmNzcygicG9zaXRpb24iKSx6SW5kZXg6Yi5jc3MoInotaW5kZXgiKX0pLGEuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGEsZCl7Y1tkXT1iLmNzcyhkKSxpc05hTihwYXJzZUludChjW2RdLDEwKSkmJihjW2RdPSJhdXRvIil9KSxiLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksZC5jc3MoYykuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKGIpe3ZhciBjLGQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gYi5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpPyhjPWIucGFyZW50KCkucmVwbGFjZVdpdGgoYiksKGJbMF09PT1kfHxhLmNvbnRhaW5zKGJbMF0sZCkpJiZhKGQpLmZvY3VzKCksYyk6Yn0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbihiLGMsZCxlKXtyZXR1cm4gZT1lfHx7fSxhLmVhY2goYyxmdW5jdGlvbihhLGMpe3ZhciBmPWIuY3NzVW5pdChjKTtmWzBdPjAmJihlW2NdPWZbMF0qZCtmWzFdKX0pLGV9fSksYS5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPXtvcHRpb25zOmZbMV0sZHVyYXRpb246ZlsyXSxjYWxsYmFjazpmWzNdfSxoPWcub3B0aW9ucy5tb2RlLGk9YS5lZmZlY3RzW2JdO3JldHVybiBhLmZ4Lm9mZnx8IWk/aD90aGlzW2hdKGcuZHVyYXRpb24sZy5jYWxsYmFjayk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zy5jYWxsYmFjayYmZy5jYWxsYmFjay5jYWxsKHRoaXMpfSk6aS5jYWxsKHRoaXMsZyl9LF9zaG93OmEuZm4uc2hvdyxzaG93OmZ1bmN0aW9uKGEpe2lmKGwoYSkpcmV0dXJuIHRoaXMuX3Nob3cuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiWzFdLm1vZGU9InNob3ciLHRoaXMuZWZmZWN0LmFwcGx5KHRoaXMsYil9LF9oaWRlOmEuZm4uaGlkZSxoaWRlOmZ1bmN0aW9uKGEpe2lmKGwoYSkpcmV0dXJuIHRoaXMuX2hpZGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiWzFdLm1vZGU9ImhpZGUiLHRoaXMuZWZmZWN0LmFwcGx5KHRoaXMsYil9LF9fdG9nZ2xlOmEuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihiKXtpZihsKGIpfHx0eXBlb2YgYj09ImJvb2xlYW4ifHxhLmlzRnVuY3Rpb24oYikpcmV0dXJuIHRoaXMuX190b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBjWzFdLm1vZGU9InRvZ2dsZSIsdGhpcy5lZmZlY3QuYXBwbHkodGhpcyxjKX0sY3NzVW5pdDpmdW5jdGlvbihiKXt2YXIgYz10aGlzLmNzcyhiKSxkPVtdO3JldHVybiBhLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oYSxiKXtjLmluZGV4T2YoYik+MCYmKGQ9W3BhcnNlRmxvYXQoYyksYl0pfSksZH19KTt2YXIgbT17fTthLmVhY2goWyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50IiwiRXhwbyJdLGZ1bmN0aW9uKGEsYil7bVtiXT1mdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5wb3coYixhKzIpfX0pLGEuZXh0ZW5kKG0se1NpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEtTWF0aC5jb3MoYSpNYXRoLlBJLzIpfSxDaXJjOmZ1bmN0aW9uKGEpe3JldHVybiAxLU1hdGguc3FydCgxLWEqYSl9LEVsYXN0aWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0wfHxhPT09MT9hOi1NYXRoLnBvdygyLDgqKGEtMSkpKk1hdGguc2luKCgoYS0xKSo4MC03LjUpKk1hdGguUEkvMTUpfSxCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiBhKmEqKDMqYS0yKX0sQm91bmNlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9NDt3aGlsZShhPCgoYj1NYXRoLnBvdygyLC0tYykpLTEpLzExKTtyZXR1cm4gMS9NYXRoLnBvdyg0LDMtYyktNy41NjI1Kk1hdGgucG93KChiKjMtMikvMjItYSwyKX19KSxhLmVhY2gobSxmdW5jdGlvbihiLGMpe2EuZWFzaW5nWyJlYXNlSW4iK2JdPWMsYS5lYXNpbmdbImVhc2VPdXQiK2JdPWZ1bmN0aW9uKGEpe3JldHVybiAxLWMoMS1hKX0sYS5lYXNpbmdbImVhc2VJbk91dCIrYl09ZnVuY3Rpb24oYSl7cmV0dXJuIGE8LjU/YyhhKjIpLzI6YyhhKi0yKzIpLy0yKzF9fSl9KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuYmxpbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKSxmPWIub3B0aW9ucy5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCI7YS5lZmZlY3RzLnNhdmUoYyxkKSxjLnNob3coKTt2YXIgZz1hLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihjKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksaD1mPT0idmVydGljYWwiPyJoZWlnaHQiOiJ3aWR0aCIsaT1mPT0idmVydGljYWwiP2cuaGVpZ2h0KCk6Zy53aWR0aCgpO2U9PSJzaG93IiYmZy5jc3MoaCwwKTt2YXIgaj17fTtqW2hdPWU9PSJzaG93Ij9pOjAsZy5hbmltYXRlKGosYi5kdXJhdGlvbixiLm9wdGlvbnMuZWFzaW5nLGZ1bmN0aW9uKCl7ZT09ImhpZGUiJiZjLmhpZGUoKSxhLmVmZmVjdHMucmVzdG9yZShjLGQpLGEuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGMpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkoY1swXSxhcmd1bWVudHMpLGMuZGVxdWV1ZSgpfSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuYm91bmNlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlPWEuZWZmZWN0cy5zZXRNb2RlKGMsYi5vcHRpb25zLm1vZGV8fCJlZmZlY3QiKSxmPWIub3B0aW9ucy5kaXJlY3Rpb258fCJ1cCIsZz1iLm9wdGlvbnMuZGlzdGFuY2V8fDIwLGg9Yi5vcHRpb25zLnRpbWVzfHw1LGk9Yi5kdXJhdGlvbnx8MjUwOy9zaG93fGhpZGUvLnRlc3QoZSkmJmQucHVzaCgib3BhY2l0eSIpLGEuZWZmZWN0cy5zYXZlKGMsZCksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYyk7dmFyIGo9Zj09InVwInx8Zj09ImRvd24iPyJ0b3AiOiJsZWZ0IixrPWY9PSJ1cCJ8fGY9PSJsZWZ0Ij8icG9zIjoibmVnIixnPWIub3B0aW9ucy5kaXN0YW5jZXx8KGo9PSJ0b3AiP2Mub3V0ZXJIZWlnaHQoITApLzM6Yy5vdXRlcldpZHRoKCEwKS8zKTtlPT0ic2hvdyImJmMuY3NzKCJvcGFjaXR5IiwwKS5jc3MoaixrPT0icG9zIj8tZzpnKSxlPT0iaGlkZSImJihnPWcvKGgqMikpLGUhPSJoaWRlIiYmaC0tO2lmKGU9PSJzaG93Iil7dmFyIGw9e29wYWNpdHk6MX07bFtqXT0oaz09InBvcyI/Iis9IjoiLT0iKStnLGMuYW5pbWF0ZShsLGkvMixiLm9wdGlvbnMuZWFzaW5nKSxnPWcvMixoLS19Zm9yKHZhciBtPTA7bTxoO20rKyl7dmFyIG49e30scD17fTtuW2pdPShrPT0icG9zIj8iLT0iOiIrPSIpK2cscFtqXT0oaz09InBvcyI/Iis9IjoiLT0iKStnLGMuYW5pbWF0ZShuLGkvMixiLm9wdGlvbnMuZWFzaW5nKS5hbmltYXRlKHAsaS8yLGIub3B0aW9ucy5lYXNpbmcpLGc9ZT09ImhpZGUiP2cqMjpnLzJ9aWYoZT09ImhpZGUiKXt2YXIgbD17b3BhY2l0eTowfTtsW2pdPShrPT0icG9zIj8iLT0iOiIrPSIpK2csYy5hbmltYXRlKGwsaS8yLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXtjLmhpZGUoKSxhLmVmZmVjdHMucmVzdG9yZShjLGQpLGEuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGMpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9ZWxzZXt2YXIgbj17fSxwPXt9O25bal09KGs9PSJwb3MiPyItPSI6Iis9IikrZyxwW2pdPShrPT0icG9zIj8iKz0iOiItPSIpK2csYy5hbmltYXRlKG4saS8yLGIub3B0aW9ucy5lYXNpbmcpLmFuaW1hdGUocCxpLzIsYi5vcHRpb25zLmVhc2luZyxmdW5jdGlvbigpe2EuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1jLnF1ZXVlKCJmeCIsZnVuY3Rpb24oKXtjLmRlcXVldWUoKX0pLGMuZGVxdWV1ZSgpfSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS5lZmZlY3RzLmNsaXA9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sZT1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwiaGlkZSIpLGY9Yi5vcHRpb25zLmRpcmVjdGlvbnx8InZlcnRpY2FsIjthLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpO3ZhciBnPWEuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxoPWNbMF0udGFnTmFtZT09IklNRyI/ZzpjLGk9e3NpemU6Zj09InZlcnRpY2FsIj8iaGVpZ2h0Ijoid2lkdGgiLHBvc2l0aW9uOmY9PSJ2ZXJ0aWNhbCI/InRvcCI6ImxlZnQifSxqPWY9PSJ2ZXJ0aWNhbCI/aC5oZWlnaHQoKTpoLndpZHRoKCk7ZT09InNob3ciJiYoaC5jc3MoaS5zaXplLDApLGguY3NzKGkucG9zaXRpb24sai8yKSk7dmFyIGs9e307a1tpLnNpemVdPWU9PSJzaG93Ij9qOjAsa1tpLnBvc2l0aW9uXT1lPT0ic2hvdyI/MDpqLzIsaC5hbmltYXRlKGsse3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseShjWzBdLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuZHJvcD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3BhY2l0eSJdLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKSxmPWIub3B0aW9ucy5kaXJlY3Rpb258fCJsZWZ0IjthLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpLGEuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGMpO3ZhciBnPWY9PSJ1cCJ8fGY9PSJkb3duIj8idG9wIjoibGVmdCIsaD1mPT0idXAifHxmPT0ibGVmdCI/InBvcyI6Im5lZyIsaT1iLm9wdGlvbnMuZGlzdGFuY2V8fChnPT0idG9wIj9jLm91dGVySGVpZ2h0KCEwKS8yOmMub3V0ZXJXaWR0aCghMCkvMik7ZT09InNob3ciJiZjLmNzcygib3BhY2l0eSIsMCkuY3NzKGcsaD09InBvcyI/LWk6aSk7dmFyIGo9e29wYWNpdHk6ZT09InNob3ciPzE6MH07altnXT0oZT09InNob3ciP2g9PSJwb3MiPyIrPSI6Ii09IjpoPT0icG9zIj8iLT0iOiIrPSIpK2ksYy5hbmltYXRlKGose3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuZXhwbG9kZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWIub3B0aW9ucy5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQoYi5vcHRpb25zLnBpZWNlcykpOjMsZD1iLm9wdGlvbnMucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KGIub3B0aW9ucy5waWVjZXMpKTozO2Iub3B0aW9ucy5tb2RlPWIub3B0aW9ucy5tb2RlPT0idG9nZ2xlIj9hKHRoaXMpLmlzKCI6dmlzaWJsZSIpPyJoaWRlIjoic2hvdyI6Yi5vcHRpb25zLm1vZGU7dmFyIGU9YSh0aGlzKS5zaG93KCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksZj1lLm9mZnNldCgpO2YudG9wLT1wYXJzZUludChlLmNzcygibWFyZ2luVG9wIiksMTApfHwwLGYubGVmdC09cGFyc2VJbnQoZS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDA7dmFyIGc9ZS5vdXRlcldpZHRoKCEwKSxoPWUub3V0ZXJIZWlnaHQoITApO2Zvcih2YXIgaT0wO2k8YztpKyspZm9yKHZhciBqPTA7ajxkO2orKyllLmNsb25lKCkuYXBwZW5kVG8oImJvZHkiKS53cmFwKCI8ZGl2PjwvZGl2PiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixsZWZ0Oi1qKihnL2QpLHRvcDotaSooaC9jKX0pLnBhcmVudCgpLmFkZENsYXNzKCJ1aS1lZmZlY3RzLWV4cGxvZGUiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsb3ZlcmZsb3c6ImhpZGRlbiIsd2lkdGg6Zy9kLGhlaWdodDpoL2MsbGVmdDpmLmxlZnQraiooZy9kKSsoYi5vcHRpb25zLm1vZGU9PSJzaG93Ij8oai1NYXRoLmZsb29yKGQvMikpKihnL2QpOjApLHRvcDpmLnRvcCtpKihoL2MpKyhiLm9wdGlvbnMubW9kZT09InNob3ciPyhpLU1hdGguZmxvb3IoYy8yKSkqKGgvYyk6MCksb3BhY2l0eTpiLm9wdGlvbnMubW9kZT09InNob3ciPzA6MX0pLmFuaW1hdGUoe2xlZnQ6Zi5sZWZ0K2oqKGcvZCkrKGIub3B0aW9ucy5tb2RlPT0ic2hvdyI/MDooai1NYXRoLmZsb29yKGQvMikpKihnL2QpKSx0b3A6Zi50b3AraSooaC9jKSsoYi5vcHRpb25zLm1vZGU9PSJzaG93Ij8wOihpLU1hdGguZmxvb3IoYy8yKSkqKGgvYykpLG9wYWNpdHk6Yi5vcHRpb25zLm1vZGU9PSJzaG93Ij8xOjB9LGIuZHVyYXRpb258fDUwMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2Iub3B0aW9ucy5tb2RlPT0ic2hvdyI/ZS5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSk6ZS5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSkuaGlkZSgpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkoZVswXSksZS5kZXF1ZXVlKCksYSgiZGl2LnVpLWVmZmVjdHMtZXhwbG9kZSIpLnJlbW92ZSgpfSxiLmR1cmF0aW9ufHw1MDApfSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS5lZmZlY3RzLmZhZGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKTtjLmFuaW1hdGUoe29wYWNpdHk6ZH0se3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtiLmNhbGxiYWNrJiZiLmNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjLmRlcXVldWUoKX19KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5mb2xkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlPWEuZWZmZWN0cy5zZXRNb2RlKGMsYi5vcHRpb25zLm1vZGV8fCJoaWRlIiksZj1iLm9wdGlvbnMuc2l6ZXx8MTUsZz0hIWIub3B0aW9ucy5ob3JpekZpcnN0LGg9Yi5kdXJhdGlvbj9iLmR1cmF0aW9uLzI6YS5meC5zcGVlZHMuX2RlZmF1bHQvMjthLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpO3ZhciBpPWEuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxqPWU9PSJzaG93IiE9ZyxrPWo/WyJ3aWR0aCIsImhlaWdodCJdOlsiaGVpZ2h0Iiwid2lkdGgiXSxsPWo/W2kud2lkdGgoKSxpLmhlaWdodCgpXTpbaS5oZWlnaHQoKSxpLndpZHRoKCldLG09LyhbMC05XSspJS8uZXhlYyhmKTttJiYoZj1wYXJzZUludChtWzFdLDEwKS8xMDAqbFtlPT0iaGlkZSI/MDoxXSksZT09InNob3ciJiZpLmNzcyhnP3toZWlnaHQ6MCx3aWR0aDpmfTp7aGVpZ2h0OmYsd2lkdGg6MH0pO3ZhciBuPXt9LHA9e307bltrWzBdXT1lPT0ic2hvdyI/bFswXTpmLHBba1sxXV09ZT09InNob3ciP2xbMV06MCxpLmFuaW1hdGUobixoLGIub3B0aW9ucy5lYXNpbmcpLmFuaW1hdGUocCxoLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseShjWzBdLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5oaWdobGlnaHQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Il0sZT1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwic2hvdyIpLGY9e2JhY2tncm91bmRDb2xvcjpjLmNzcygiYmFja2dyb3VuZENvbG9yIil9O2U9PSJoaWRlIiYmKGYub3BhY2l0eT0wKSxhLmVmZmVjdHMuc2F2ZShjLGQpLGMuc2hvdygpLmNzcyh7YmFja2dyb3VuZEltYWdlOiJub25lIixiYWNrZ3JvdW5kQ29sb3I6Yi5vcHRpb25zLmNvbG9yfHwiI2ZmZmY5OSJ9KS5hbmltYXRlKGYse3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksZT09InNob3ciJiYhYS5zdXBwb3J0Lm9wYWNpdHkmJnRoaXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSxiLmNhbGxiYWNrJiZiLmNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjLmRlcXVldWUoKX19KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5wdWxzYXRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWEuZWZmZWN0cy5zZXRNb2RlKGMsYi5vcHRpb25zLm1vZGV8fCJzaG93IiksZT0oYi5vcHRpb25zLnRpbWVzfHw1KSoyLTEsZj1iLmR1cmF0aW9uP2IuZHVyYXRpb24vMjphLmZ4LnNwZWVkcy5fZGVmYXVsdC8yLGc9Yy5pcygiOnZpc2libGUiKSxoPTA7Z3x8KGMuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksaD0xKSwoZD09ImhpZGUiJiZnfHxkPT0ic2hvdyImJiFnKSYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspYy5hbmltYXRlKHtvcGFjaXR5Omh9LGYsYi5vcHRpb25zLmVhc2luZyksaD0oaCsxKSUyO2MuYW5pbWF0ZSh7b3BhY2l0eTpofSxmLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXtoPT0wJiZjLmhpZGUoKSxiLmNhbGxiYWNrJiZiLmNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGMucXVldWUoImZ4IixmdW5jdGlvbigpe2MuZGVxdWV1ZSgpfSkuZGVxdWV1ZSgpfSl9fShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS5lZmZlY3RzLnB1ZmY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImhpZGUiKSxlPXBhcnNlSW50KGIub3B0aW9ucy5wZXJjZW50LDEwKXx8MTUwLGY9ZS8xMDAsZz17aGVpZ2h0OmMuaGVpZ2h0KCksd2lkdGg6Yy53aWR0aCgpfTthLmV4dGVuZChiLm9wdGlvbnMse2ZhZGU6ITAsbW9kZTpkLHBlcmNlbnQ6ZD09ImhpZGUiP2U6MTAwLGZyb206ZD09ImhpZGUiP2c6e2hlaWdodDpnLmhlaWdodCpmLHdpZHRoOmcud2lkdGgqZn19KSxjLmVmZmVjdCgic2NhbGUiLGIub3B0aW9ucyxiLmR1cmF0aW9uLGIuY2FsbGJhY2spLGMuZGVxdWV1ZSgpfSl9LGEuZWZmZWN0cy5zY2FsZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1hLmV4dGVuZCghMCx7fSxiLm9wdGlvbnMpLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImVmZmVjdCIpLGY9cGFyc2VJbnQoYi5vcHRpb25zLnBlcmNlbnQsMTApfHwocGFyc2VJbnQoYi5vcHRpb25zLnBlcmNlbnQsMTApPT0wPzA6ZT09ImhpZGUiPzA6MTAwKSxnPWIub3B0aW9ucy5kaXJlY3Rpb258fCJib3RoIixoPWIub3B0aW9ucy5vcmlnaW47ZSE9ImVmZmVjdCImJihkLm9yaWdpbj1ofHxbIm1pZGRsZSIsImNlbnRlciJdLGQucmVzdG9yZT0hMCk7dmFyIGk9e2hlaWdodDpjLmhlaWdodCgpLHdpZHRoOmMud2lkdGgoKX07Yy5mcm9tPWIub3B0aW9ucy5mcm9tfHwoZT09InNob3ciP3toZWlnaHQ6MCx3aWR0aDowfTppKTt2YXIgaj17eTpnIT0iaG9yaXpvbnRhbCI/Zi8xMDA6MSx4OmchPSJ2ZXJ0aWNhbCI/Zi8xMDA6MX07Yy50bz17aGVpZ2h0OmkuaGVpZ2h0KmoueSx3aWR0aDppLndpZHRoKmoueH0sYi5vcHRpb25zLmZhZGUmJihlPT0ic2hvdyImJihjLmZyb20ub3BhY2l0eT0wLGMudG8ub3BhY2l0eT0xKSxlPT0iaGlkZSImJihjLmZyb20ub3BhY2l0eT0xLGMudG8ub3BhY2l0eT0wKSksZC5mcm9tPWMuZnJvbSxkLnRvPWMudG8sZC5tb2RlPWUsYy5lZmZlY3QoInNpemUiLGQsYi5kdXJhdGlvbixiLmNhbGxiYWNrKSxjLmRlcXVldWUoKX0pfSxhLmVmZmVjdHMuc2l6ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxlPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxmPVsid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyJdLGc9WyJmb250U2l6ZSJdLGg9WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxpPVsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0saj1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwiZWZmZWN0Iiksaz1iLm9wdGlvbnMucmVzdG9yZXx8ITEsbD1iLm9wdGlvbnMuc2NhbGV8fCJib3RoIixtPWIub3B0aW9ucy5vcmlnaW4sbj17aGVpZ2h0OmMuaGVpZ2h0KCksd2lkdGg6Yy53aWR0aCgpfTtjLmZyb209Yi5vcHRpb25zLmZyb218fG4sYy50bz1iLm9wdGlvbnMudG98fG47aWYobSl7dmFyIHA9YS5lZmZlY3RzLmdldEJhc2VsaW5lKG0sbik7Yy5mcm9tLnRvcD0obi5oZWlnaHQtYy5mcm9tLmhlaWdodCkqcC55LGMuZnJvbS5sZWZ0PShuLndpZHRoLWMuZnJvbS53aWR0aCkqcC54LGMudG8udG9wPShuLmhlaWdodC1jLnRvLmhlaWdodCkqcC55LGMudG8ubGVmdD0obi53aWR0aC1jLnRvLndpZHRoKSpwLnh9dmFyIHE9e2Zyb206e3k6Yy5mcm9tLmhlaWdodC9uLmhlaWdodCx4OmMuZnJvbS53aWR0aC9uLndpZHRofSx0bzp7eTpjLnRvLmhlaWdodC9uLmhlaWdodCx4OmMudG8ud2lkdGgvbi53aWR0aH19O2lmKGw9PSJib3gifHxsPT0iYm90aCIpcS5mcm9tLnkhPXEudG8ueSYmKGQ9ZC5jb25jYXQoaCksYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaCxxLmZyb20ueSxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxoLHEudG8ueSxjLnRvKSkscS5mcm9tLnghPXEudG8ueCYmKGQ9ZC5jb25jYXQoaSksYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaSxxLmZyb20ueCxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxpLHEudG8ueCxjLnRvKSk7KGw9PSJjb250ZW50Inx8bD09ImJvdGgiKSYmcS5mcm9tLnkhPXEudG8ueSYmKGQ9ZC5jb25jYXQoZyksYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsZyxxLmZyb20ueSxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxnLHEudG8ueSxjLnRvKSksYS5lZmZlY3RzLnNhdmUoYyxrP2Q6ZSksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYyksYy5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikuY3NzKGMuZnJvbSk7aWYobD09ImNvbnRlbnQifHxsPT0iYm90aCIpaD1oLmNvbmNhdChbIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQoZyksaT1pLmNvbmNhdChbIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCJdKSxmPWQuY29uY2F0KGgpLmNvbmNhdChpKSxjLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7ayYmYS5lZmZlY3RzLnNhdmUoYyxmKTt2YXIgZD17aGVpZ2h0OmMuaGVpZ2h0KCksd2lkdGg6Yy53aWR0aCgpfTtjLmZyb209e2hlaWdodDpkLmhlaWdodCpxLmZyb20ueSx3aWR0aDpkLndpZHRoKnEuZnJvbS54fSxjLnRvPXtoZWlnaHQ6ZC5oZWlnaHQqcS50by55LHdpZHRoOmQud2lkdGgqcS50by54fSxxLmZyb20ueSE9cS50by55JiYoYy5mcm9tPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaCxxLmZyb20ueSxjLmZyb20pLGMudG89YS5lZmZlY3RzLnNldFRyYW5zaXRpb24oYyxoLHEudG8ueSxjLnRvKSkscS5mcm9tLnghPXEudG8ueCYmKGMuZnJvbT1hLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihjLGkscS5mcm9tLngsYy5mcm9tKSxjLnRvPWEuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGMsaSxxLnRvLngsYy50bykpLGMuY3NzKGMuZnJvbSksYy5hbmltYXRlKGMudG8sYi5kdXJhdGlvbixiLm9wdGlvbnMuZWFzaW5nLGZ1bmN0aW9uKCl7ayYmYS5lZmZlY3RzLnJlc3RvcmUoYyxmKX0pfSk7Yy5hbmltYXRlKGMudG8se3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtjLnRvLm9wYWNpdHk9PT0wJiZjLmNzcygib3BhY2l0eSIsYy5mcm9tLm9wYWNpdHkpLGo9PSJoaWRlIiYmYy5oaWRlKCksYS5lZmZlY3RzLnJlc3RvcmUoYyxrP2Q6ZSksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMuc2hha2U9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGU9YS5lZmZlY3RzLnNldE1vZGUoYyxiLm9wdGlvbnMubW9kZXx8ImVmZmVjdCIpLGY9Yi5vcHRpb25zLmRpcmVjdGlvbnx8ImxlZnQiLGc9Yi5vcHRpb25zLmRpc3RhbmNlfHwyMCxoPWIub3B0aW9ucy50aW1lc3x8MyxpPWIuZHVyYXRpb258fGIub3B0aW9ucy5kdXJhdGlvbnx8MTQwO2EuZWZmZWN0cy5zYXZlKGMsZCksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYyk7dmFyIGo9Zj09InVwInx8Zj09ImRvd24iPyJ0b3AiOiJsZWZ0IixrPWY9PSJ1cCJ8fGY9PSJsZWZ0Ij8icG9zIjoibmVnIixsPXt9LG09e30sbj17fTtsW2pdPShrPT0icG9zIj8iLT0iOiIrPSIpK2csbVtqXT0oaz09InBvcyI/Iis9IjoiLT0iKStnKjIsbltqXT0oaz09InBvcyI/Ii09IjoiKz0iKStnKjIsYy5hbmltYXRlKGwsaSxiLm9wdGlvbnMuZWFzaW5nKTtmb3IodmFyIHA9MTtwPGg7cCsrKWMuYW5pbWF0ZShtLGksYi5vcHRpb25zLmVhc2luZykuYW5pbWF0ZShuLGksYi5vcHRpb25zLmVhc2luZyk7Yy5hbmltYXRlKG0saSxiLm9wdGlvbnMuZWFzaW5nKS5hbmltYXRlKGwsaS8yLGIub3B0aW9ucy5lYXNpbmcsZnVuY3Rpb24oKXthLmVmZmVjdHMucmVzdG9yZShjLGQpLGEuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGMpLGIuY2FsbGJhY2smJmIuY2FsbGJhY2suYXBwbHkodGhpcyxhcmd1bWVudHMpfSksYy5xdWV1ZSgiZngiLGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKCl9KSxjLmRlcXVldWUoKX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EuZWZmZWN0cy5zbGlkZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZT1hLmVmZmVjdHMuc2V0TW9kZShjLGIub3B0aW9ucy5tb2RlfHwic2hvdyIpLGY9Yi5vcHRpb25zLmRpcmVjdGlvbnx8ImxlZnQiO2EuZWZmZWN0cy5zYXZlKGMsZCksYy5zaG93KCksYS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYykuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pO3ZhciBnPWY9PSJ1cCJ8fGY9PSJkb3duIj8idG9wIjoibGVmdCIsaD1mPT0idXAifHxmPT0ibGVmdCI/InBvcyI6Im5lZyIsaT1iLm9wdGlvbnMuZGlzdGFuY2V8fChnPT0idG9wIj9jLm91dGVySGVpZ2h0KCEwKTpjLm91dGVyV2lkdGgoITApKTtlPT0ic2hvdyImJmMuY3NzKGcsaD09InBvcyI/aXNOYU4oaSk/Ii0iK2k6LWk6aSk7dmFyIGo9e307altnXT0oZT09InNob3ciP2g9PSJwb3MiPyIrPSI6Ii09IjpoPT0icG9zIj8iLT0iOiIrPSIpK2ksYy5hbmltYXRlKGose3F1ZXVlOiExLGR1cmF0aW9uOmIuZHVyYXRpb24sZWFzaW5nOmIub3B0aW9ucy5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtlPT0iaGlkZSImJmMuaGlkZSgpLGEuZWZmZWN0cy5yZXN0b3JlKGMsZCksYS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYyksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9fSl9KX19KGpRdWVyeSksZnVuY3Rpb24oYSxiKXthLmVmZmVjdHMudHJhbnNmZXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9YShiLm9wdGlvbnMudG8pLGU9ZC5vZmZzZXQoKSxmPXt0b3A6ZS50b3AsbGVmdDplLmxlZnQsaGVpZ2h0OmQuaW5uZXJIZWlnaHQoKSx3aWR0aDpkLmlubmVyV2lkdGgoKX0sZz1jLm9mZnNldCgpLGg9YSgnPGRpdiBjbGFzcz0idWktZWZmZWN0cy10cmFuc2ZlciI+PC9kaXY+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoYi5vcHRpb25zLmNsYXNzTmFtZSkuY3NzKHt0b3A6Zy50b3AsbGVmdDpnLmxlZnQsaGVpZ2h0OmMuaW5uZXJIZWlnaHQoKSx3aWR0aDpjLmlubmVyV2lkdGgoKSxwb3NpdGlvbjoiYWJzb2x1dGUifSkuYW5pbWF0ZShmLGIuZHVyYXRpb24sYi5vcHRpb25zLmVhc2luZyxmdW5jdGlvbigpe2gucmVtb3ZlKCksYi5jYWxsYmFjayYmYi5jYWxsYmFjay5hcHBseShjWzBdLGFyZ3VtZW50cyksYy5kZXF1ZXVlKCl9KX0pfX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2Eud2lkZ2V0KCJ1aS5hY2NvcmRpb24iLHtvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlZDoic2xpZGUiLGF1dG9IZWlnaHQ6ITAsY2xlYXJTdHlsZTohMSxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGZpbGxTcGFjZTohMSxoZWFkZXI6Ij4gbGkgPiA6Zmlyc3QtY2hpbGQsPiA6bm90KGxpKTpldmVuIixpY29uczp7aGVhZGVyOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsaGVhZGVyU2VsZWN0ZWQ6InVpLWljb24tdHJpYW5nbGUtMS1zIn0sbmF2aWdhdGlvbjohMSxuYXZpZ2F0aW9uRmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHJlZi50b0xvd2VyQ2FzZSgpPT09bG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1iLm9wdGlvbnM7Yi5ydW5uaW5nPTAsYi5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLmNoaWxkcmVuKCJsaSIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tbGktZml4IiksYi5oZWFkZXJzPWIuZWxlbWVudC5maW5kKGMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIikuYmluZCgibW91c2VlbnRlci5hY2NvcmRpb24iLGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLmJpbmQoIm1vdXNlbGVhdmUuYWNjb3JkaW9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWQpcmV0dXJuO2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9KS5iaW5kKCJmb2N1cy5hY2NvcmRpb24iLGZ1bmN0aW9uKCl7aWYoYy5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pLmJpbmQoImJsdXIuYWNjb3JkaW9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWQpcmV0dXJuO2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9KSxiLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpO2lmKGMubmF2aWdhdGlvbil7dmFyIGQ9Yi5lbGVtZW50LmZpbmQoImEiKS5maWx0ZXIoYy5uYXZpZ2F0aW9uRmlsdGVyKS5lcSgwKTtpZihkLmxlbmd0aCl7dmFyIGU9ZC5jbG9zZXN0KCIudWktYWNjb3JkaW9uLWhlYWRlciIpO2UubGVuZ3RoP2IuYWN0aXZlPWU6Yi5hY3RpdmU9ZC5jbG9zZXN0KCIudWktYWNjb3JkaW9uLWNvbnRlbnQiKS5wcmV2KCl9fWIuYWN0aXZlPWIuX2ZpbmRBY3RpdmUoYi5hY3RpdmV8fGMuYWN0aXZlKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUiKS50b2dnbGVDbGFzcygidWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItdG9wIiksYi5hY3RpdmUubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSxiLl9jcmVhdGVJY29ucygpLGIucmVzaXplKCksYi5lbGVtZW50LmF0dHIoInJvbGUiLCJ0YWJsaXN0IiksYi5oZWFkZXJzLmF0dHIoInJvbGUiLCJ0YWIiKS5iaW5kKCJrZXlkb3duLmFjY29yZGlvbiIsZnVuY3Rpb24oYSl7cmV0dXJuIGIuX2tleWRvd24oYSl9KS5uZXh0KCkuYXR0cigicm9sZSIsInRhYnBhbmVsIiksYi5oZWFkZXJzLm5vdChiLmFjdGl2ZXx8IiIpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmhpZGUoKSxiLmFjdGl2ZS5sZW5ndGg/Yi5hY3RpdmUuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KTpiLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLGEuYnJvd3Nlci5zYWZhcml8fGIuaGVhZGVycy5maW5kKCJhIikuYXR0cigidGFiSW5kZXgiLC0xKSxjLmV2ZW50JiZiLmhlYWRlcnMuYmluZChjLmV2ZW50LnNwbGl0KCIgIikuam9pbigiLmFjY29yZGlvbiAiKSsiLmFjY29yZGlvbiIsZnVuY3Rpb24oYSl7Yi5fY2xpY2tIYW5kbGVyLmNhbGwoYixhLHRoaXMpLGEucHJldmVudERlZmF1bHQoKX0pfSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnM7Yi5pY29ucyYmKGEoIjxzcGFuPjwvc3Bhbj4iKS5hZGRDbGFzcygidWktaWNvbiAiK2IuaWNvbnMuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSx0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLWljb24iKS50b2dnbGVDbGFzcyhiLmljb25zLmhlYWRlcikudG9nZ2xlQ2xhc3MoYi5pY29ucy5oZWFkZXJTZWxlY3RlZCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMuY2hpbGRyZW4oIi51aS1pY29uIikucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy51bmJpbmQoIi5hY2NvcmRpb24iKS5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24tZGlzYWJsZWQgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgdWktY29ybmVyLXRvcCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1zZWxlY3RlZCIpLnJlbW92ZUF0dHIoInRhYkluZGV4IiksdGhpcy5oZWFkZXJzLmZpbmQoImEiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLHRoaXMuX2Rlc3Ryb3lJY29ucygpO3ZhciBjPXRoaXMuaGVhZGVycy5uZXh0KCkuY3NzKCJkaXNwbGF5IiwiIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSB1aS1hY2NvcmRpb24tY29udGVudCB1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUgdWktYWNjb3JkaW9uLWRpc2FibGVkIHVpLXN0YXRlLWRpc2FibGVkIik7cmV0dXJuKGIuYXV0b0hlaWdodHx8Yi5maWxsSGVpZ2h0KSYmYy5jc3MoImhlaWdodCIsIiIpLGEuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oYixjKXthLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksYj09ImFjdGl2ZSImJnRoaXMuYWN0aXZhdGUoYyksYj09Imljb25zIiYmKHRoaXMuX2Rlc3Ryb3lJY29ucygpLGMmJnRoaXMuX2NyZWF0ZUljb25zKCkpLGI9PSJkaXNhYmxlZCImJnRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSlbYz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJ1aS1hY2NvcmRpb24tZGlzYWJsZWQgdWktc3RhdGUtZGlzYWJsZWQiKX0sX2tleWRvd246ZnVuY3Rpb24oYil7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHxiLmFsdEtleXx8Yi5jdHJsS2V5KXJldHVybjt2YXIgYz1hLnVpLmtleUNvZGUsZD10aGlzLmhlYWRlcnMubGVuZ3RoLGU9dGhpcy5oZWFkZXJzLmluZGV4KGIudGFyZ2V0KSxmPSExO3N3aXRjaChiLmtleUNvZGUpe2Nhc2UgYy5SSUdIVDpjYXNlIGMuRE9XTjpmPXRoaXMuaGVhZGVyc1soZSsxKSVkXTticmVhaztjYXNlIGMuTEVGVDpjYXNlIGMuVVA6Zj10aGlzLmhlYWRlcnNbKGUtMStkKSVkXTticmVhaztjYXNlIGMuU1BBQ0U6Y2FzZSBjLkVOVEVSOnRoaXMuX2NsaWNrSGFuZGxlcih7dGFyZ2V0OmIudGFyZ2V0fSxiLnRhcmdldCksYi5wcmV2ZW50RGVmYXVsdCgpfXJldHVybiBmPyhhKGIudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGEoZikuYXR0cigidGFiSW5kZXgiLDApLGYuZm9jdXMoKSwhMSk6ITB9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucyxjO2lmKGIuZmlsbFNwYWNlKXtpZihhLmJyb3dzZXIubXNpZSl7dmFyIGQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmNzcygib3ZlcmZsb3ciKTt0aGlzLmVsZW1lbnQucGFyZW50KCkuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpfWM9dGhpcy5lbGVtZW50LnBhcmVudCgpLmhlaWdodCgpLGEuYnJvd3Nlci5tc2llJiZ0aGlzLmVsZW1lbnQucGFyZW50KCkuY3NzKCJvdmVyZmxvdyIsZCksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXtjLT1hKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe2EodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsYy1hKHRoaXMpLmlubmVySGVpZ2h0KCkrYSh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKX1lbHNlIGIuYXV0b0hlaWdodCYmKGM9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtjPU1hdGgubWF4KGMsYSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChjKSk7cmV0dXJuIHRoaXN9LGFjdGl2YXRlOmZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy5hY3RpdmU9YTt2YXIgYj10aGlzLl9maW5kQWN0aXZlKGEpWzBdO3JldHVybiB0aGlzLl9jbGlja0hhbmRsZXIoe3RhcmdldDpifSxiKSx0aGlzfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihiKXtyZXR1cm4gYj90eXBlb2YgYj09Im51bWJlciI/dGhpcy5oZWFkZXJzLmZpbHRlcigiOmVxKCIrYisiKSIpOnRoaXMuaGVhZGVycy5ub3QodGhpcy5oZWFkZXJzLm5vdChiKSk6Yj09PSExP2EoW10pOnRoaXMuaGVhZGVycy5maWx0ZXIoIjplcSgwKSIpfSxfY2xpY2tIYW5kbGVyOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5vcHRpb25zO2lmKGQuZGlzYWJsZWQpcmV0dXJuO2lmKCFiLnRhcmdldCl7aWYoIWQuY29sbGFwc2libGUpcmV0dXJuO3RoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKS5jaGlsZHJlbigiLnVpLWljb24iKS5yZW1vdmVDbGFzcyhkLmljb25zLmhlYWRlclNlbGVjdGVkKS5hZGRDbGFzcyhkLmljb25zLmhlYWRlciksdGhpcy5hY3RpdmUubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKTt2YXIgZT10aGlzLmFjdGl2ZS5uZXh0KCksZj17b3B0aW9uczpkLG5ld0hlYWRlcjphKFtdKSxvbGRIZWFkZXI6ZC5hY3RpdmUsbmV3Q29udGVudDphKFtdKSxvbGRDb250ZW50OmV9LGc9dGhpcy5hY3RpdmU9YShbXSk7dGhpcy5fdG9nZ2xlKGcsZSxmKTtyZXR1cm59dmFyIGg9YShiLmN1cnJlbnRUYXJnZXR8fGMpLGk9aFswXT09PXRoaXMuYWN0aXZlWzBdO2QuYWN0aXZlPWQuY29sbGFwc2libGUmJmk/ITE6dGhpcy5oZWFkZXJzLmluZGV4KGgpO2lmKHRoaXMucnVubmluZ3x8IWQuY29sbGFwc2libGUmJmkpcmV0dXJuO3ZhciBqPXRoaXMuYWN0aXZlLGc9aC5uZXh0KCksZT10aGlzLmFjdGl2ZS5uZXh0KCksZj17b3B0aW9uczpkLG5ld0hlYWRlcjppJiZkLmNvbGxhcHNpYmxlP2EoW10pOmgsb2xkSGVhZGVyOnRoaXMuYWN0aXZlLG5ld0NvbnRlbnQ6aSYmZC5jb2xsYXBzaWJsZT9hKFtdKTpnLG9sZENvbnRlbnQ6ZX0saz10aGlzLmhlYWRlcnMuaW5kZXgodGhpcy5hY3RpdmVbMF0pPnRoaXMuaGVhZGVycy5pbmRleChoWzBdKTt0aGlzLmFjdGl2ZT1pP2EoW10pOmgsdGhpcy5fdG9nZ2xlKGcsZSxmLGksayksai5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIikuY2hpbGRyZW4oIi51aS1pY29uIikucmVtb3ZlQ2xhc3MoZC5pY29ucy5oZWFkZXJTZWxlY3RlZCkuYWRkQ2xhc3MoZC5pY29ucy5oZWFkZXIpLGl8fChoLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKS5jaGlsZHJlbigiLnVpLWljb24iKS5yZW1vdmVDbGFzcyhkLmljb25zLmhlYWRlcikuYWRkQ2xhc3MoZC5pY29ucy5oZWFkZXJTZWxlY3RlZCksaC5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKTtyZXR1cm59LF90b2dnbGU6ZnVuY3Rpb24oYixjLGQsZSxmKXt2YXIgZz10aGlzLGg9Zy5vcHRpb25zO2cudG9TaG93PWIsZy50b0hpZGU9YyxnLmRhdGE9ZDt2YXIgaT1mdW5jdGlvbigpe2lmKCFnKXJldHVybjtyZXR1cm4gZy5fY29tcGxldGVkLmFwcGx5KGcsYXJndW1lbnRzKX07Zy5fdHJpZ2dlcigiY2hhbmdlc3RhcnQiLG51bGwsZy5kYXRhKSxnLnJ1bm5pbmc9Yy5zaXplKCk9PT0wP2Iuc2l6ZSgpOmMuc2l6ZSgpO2lmKGguYW5pbWF0ZWQpe3ZhciBqPXt9O2guY29sbGFwc2libGUmJmU/aj17dG9TaG93OmEoW10pLHRvSGlkZTpjLGNvbXBsZXRlOmksZG93bjpmLGF1dG9IZWlnaHQ6aC5hdXRvSGVpZ2h0fHxoLmZpbGxTcGFjZX06aj17dG9TaG93OmIsdG9IaWRlOmMsY29tcGxldGU6aSxkb3duOmYsYXV0b0hlaWdodDpoLmF1dG9IZWlnaHR8fGguZmlsbFNwYWNlfSxoLnByb3hpZWR8fChoLnByb3hpZWQ9aC5hbmltYXRlZCksaC5wcm94aWVkRHVyYXRpb258fChoLnByb3hpZWREdXJhdGlvbj1oLmR1cmF0aW9uKSxoLmFuaW1hdGVkPWEuaXNGdW5jdGlvbihoLnByb3hpZWQpP2gucHJveGllZChqKTpoLnByb3hpZWQsaC5kdXJhdGlvbj1hLmlzRnVuY3Rpb24oaC5wcm94aWVkRHVyYXRpb24pP2gucHJveGllZER1cmF0aW9uKGopOmgucHJveGllZER1cmF0aW9uO3ZhciBrPWEudWkuYWNjb3JkaW9uLmFuaW1hdGlvbnMsbD1oLmR1cmF0aW9uLG09aC5hbmltYXRlZDttJiYha1ttXSYmIWEuZWFzaW5nW21dJiYobT0ic2xpZGUiKSxrW21dfHwoa1ttXT1mdW5jdGlvbihhKXt0aGlzLnNsaWRlKGEse2Vhc2luZzptLGR1cmF0aW9uOmx8fDcwMH0pfSksa1ttXShqKX1lbHNlIGguY29sbGFwc2libGUmJmU/Yi50b2dnbGUoKTooYy5oaWRlKCksYi5zaG93KCkpLGkoITApO2MucHJldigpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkuYmx1cigpLGIucHJldigpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSkuZm9jdXMoKX0sX2NvbXBsZXRlZDpmdW5jdGlvbihhKXt0aGlzLnJ1bm5pbmc9YT8wOi0tdGhpcy5ydW5uaW5nO2lmKHRoaXMucnVubmluZylyZXR1cm47dGhpcy5vcHRpb25zLmNsZWFyU3R5bGUmJnRoaXMudG9TaG93LmFkZCh0aGlzLnRvSGlkZSkuY3NzKHtoZWlnaHQ6IiIsb3ZlcmZsb3c6IiJ9KSx0aGlzLnRvSGlkZS5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIiksdGhpcy50b0hpZGUubGVuZ3RoJiYodGhpcy50b0hpZGUucGFyZW50KClbMF0uY2xhc3NOYW1lPXRoaXMudG9IaWRlLnBhcmVudCgpWzBdLmNsYXNzTmFtZSksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixudWxsLHRoaXMuZGF0YSl9fSksYS5leHRlbmQoYS51aS5hY2NvcmRpb24se3ZlcnNpb246IjEuOC4yNCIsYW5pbWF0aW9uczp7c2xpZGU6ZnVuY3Rpb24oYixjKXtiPWEuZXh0ZW5kKHtlYXNpbmc6InN3aW5nIixkdXJhdGlvbjozMDB9LGIsYyk7aWYoIWIudG9IaWRlLnNpemUoKSl7Yi50b1Nob3cuYW5pbWF0ZSh7aGVpZ2h0OiJzaG93IixwYWRkaW5nVG9wOiJzaG93IixwYWRkaW5nQm90dG9tOiJzaG93In0sYik7cmV0dXJufWlmKCFiLnRvU2hvdy5zaXplKCkpe2IudG9IaWRlLmFuaW1hdGUoe2hlaWdodDoiaGlkZSIscGFkZGluZ1RvcDoiaGlkZSIscGFkZGluZ0JvdHRvbToiaGlkZSJ9LGIpO3JldHVybn12YXIgZD1iLnRvU2hvdy5jc3MoIm92ZXJmbG93IiksZT0wLGY9e30sZz17fSxoPVsiaGVpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxpLGo9Yi50b1Nob3c7aT1qWzBdLnN0eWxlLndpZHRoLGoud2lkdGgoai5wYXJlbnQoKS53aWR0aCgpLXBhcnNlRmxvYXQoai5jc3MoInBhZGRpbmdMZWZ0IikpLXBhcnNlRmxvYXQoai5jc3MoInBhZGRpbmdSaWdodCIpKS0ocGFyc2VGbG9hdChqLmNzcygiYm9yZGVyTGVmdFdpZHRoIikpfHwwKS0ocGFyc2VGbG9hdChqLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpKXx8MCkpLGEuZWFjaChoLGZ1bmN0aW9uKGMsZCl7Z1tkXT0iaGlkZSI7dmFyIGU9KCIiK2EuY3NzKGIudG9TaG93WzBdLGQpKS5tYXRjaCgvXihbXGQrLS5dKykoLiopJC8pO2ZbZF09e3ZhbHVlOmVbMV0sdW5pdDplWzJdfHwicHgifX0pLGIudG9TaG93LmNzcyh7aGVpZ2h0OjAsb3ZlcmZsb3c6ImhpZGRlbiJ9KS5zaG93KCksYi50b0hpZGUuZmlsdGVyKCI6aGlkZGVuIikuZWFjaChiLmNvbXBsZXRlKS5lbmQoKS5maWx0ZXIoIjp2aXNpYmxlIikuYW5pbWF0ZShnLHtzdGVwOmZ1bmN0aW9uKGEsYyl7Yy5wcm9wPT0iaGVpZ2h0IiYmKGU9Yy5lbmQtYy5zdGFydD09PTA/MDooYy5ub3ctYy5zdGFydCkvKGMuZW5kLWMuc3RhcnQpKSxiLnRvU2hvd1swXS5zdHlsZVtjLnByb3BdPWUqZltjLnByb3BdLnZhbHVlK2ZbYy5wcm9wXS51bml0fSxkdXJhdGlvbjpiLmR1cmF0aW9uLGVhc2luZzpiLmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2IuYXV0b0hlaWdodHx8Yi50b1Nob3cuY3NzKCJoZWlnaHQiLCIiKSxiLnRvU2hvdy5jc3Moe3dpZHRoOmksb3ZlcmZsb3c6ZH0pLGIuY29tcGxldGUoKX19KX0sYm91bmNlc2xpZGU6ZnVuY3Rpb24oYSl7dGhpcy5zbGlkZShhLHtlYXNpbmc6YS5kb3duPyJlYXNlT3V0Qm91bmNlIjoic3dpbmciLGR1cmF0aW9uOmEuZG93bj8xZTM6MjAwfSl9fX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9MDthLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIix7b3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSxzb3VyY2U6bnVsbH0scGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9dGhpcy5lbGVtZW50WzBdLm93bmVyRG9jdW1lbnQsZDt0aGlzLmlzTXVsdGlMaW5lPXRoaXMuZWxlbWVudC5pcygidGV4dGFyZWEiKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLmF0dHIoe3JvbGU6InRleHRib3giLCJhcmlhLWF1dG9jb21wbGV0ZSI6Imxpc3QiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSJ9KS5iaW5kKCJrZXlkb3duLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oYyl7aWYoYi5vcHRpb25zLmRpc2FibGVkfHxiLmVsZW1lbnQucHJvcEF0dHIoInJlYWRPbmx5IikpcmV0dXJuO2Q9ITE7dmFyIGU9YS51aS5rZXlDb2RlO3N3aXRjaChjLmtleUNvZGUpe2Nhc2UgZS5QQUdFX1VQOmIuX21vdmUoInByZXZpb3VzUGFnZSIsYyk7YnJlYWs7Y2FzZSBlLlBBR0VfRE9XTjpiLl9tb3ZlKCJuZXh0UGFnZSIsYyk7YnJlYWs7Y2FzZSBlLlVQOmIuX2tleUV2ZW50KCJwcmV2aW91cyIsYyk7YnJlYWs7Y2FzZSBlLkRPV046Yi5fa2V5RXZlbnQoIm5leHQiLGMpO2JyZWFrO2Nhc2UgZS5FTlRFUjpjYXNlIGUuTlVNUEFEX0VOVEVSOmIubWVudS5hY3RpdmUmJihkPSEwLGMucHJldmVudERlZmF1bHQoKSk7Y2FzZSBlLlRBQjppZighYi5tZW51LmFjdGl2ZSlyZXR1cm47Yi5tZW51LnNlbGVjdChjKTticmVhaztjYXNlIGUuRVNDQVBFOmIuZWxlbWVudC52YWwoYi50ZXJtKSxiLmNsb3NlKGMpO2JyZWFrO2RlZmF1bHQ6Y2xlYXJUaW1lb3V0KGIuc2VhcmNoaW5nKSxiLnNlYXJjaGluZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi50ZXJtIT1iLmVsZW1lbnQudmFsKCkmJihiLnNlbGVjdGVkSXRlbT1udWxsLGIuc2VhcmNoKG51bGwsYykpfSxiLm9wdGlvbnMuZGVsYXkpfX0pLmJpbmQoImtleXByZXNzLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oYSl7ZCYmKGQ9ITEsYS5wcmV2ZW50RGVmYXVsdCgpKX0pLmJpbmQoImZvY3VzLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oKXtpZihiLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO2Iuc2VsZWN0ZWRJdGVtPW51bGwsYi5wcmV2aW91cz1iLmVsZW1lbnQudmFsKCl9KS5iaW5kKCJibHVyLmF1dG9jb21wbGV0ZSIsZnVuY3Rpb24oYSl7aWYoYi5vcHRpb25zLmRpc2FibGVkKXJldHVybjtjbGVhclRpbWVvdXQoYi5zZWFyY2hpbmcpLGIuY2xvc2luZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5jbG9zZShhKSxiLl9jaGFuZ2UoYSl9LDE1MCl9KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PWEoIjx1bD48L3VsPiIpLmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUiKS5hcHBlbmRUbyhhKHRoaXMub3B0aW9ucy5hcHBlbmRUb3x8ImJvZHkiLGMpWzBdKS5tb3VzZWRvd24oZnVuY3Rpb24oYyl7dmFyIGQ9Yi5tZW51LmVsZW1lbnRbMF07YShjLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aHx8c2V0VGltZW91dChmdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9uZSgibW91c2Vkb3duIixmdW5jdGlvbihjKXtjLnRhcmdldCE9PWIuZWxlbWVudFswXSYmYy50YXJnZXQhPT1kJiYhYS51aS5jb250YWlucyhkLGMudGFyZ2V0KSYmYi5jbG9zZSgpfSl9LDEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYi5jbG9zaW5nKX0sMTMpfSkubWVudSh7Zm9jdXM6ZnVuY3Rpb24oYSxjKXt2YXIgZD1jLml0ZW0uZGF0YSgiaXRlbS5hdXRvY29tcGxldGUiKTshMSE9PWIuX3RyaWdnZXIoImZvY3VzIixhLHtpdGVtOmR9KSYmL15rZXkvLnRlc3QoYS5vcmlnaW5hbEV2ZW50LnR5cGUpJiZiLmVsZW1lbnQudmFsKGQudmFsdWUpfSxzZWxlY3RlZDpmdW5jdGlvbihhLGQpe3ZhciBlPWQuaXRlbS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIpLGY9Yi5wcmV2aW91cztiLmVsZW1lbnRbMF0hPT1jLmFjdGl2ZUVsZW1lbnQmJihiLmVsZW1lbnQuZm9jdXMoKSxiLnByZXZpb3VzPWYsc2V0VGltZW91dChmdW5jdGlvbigpe2IucHJldmlvdXM9ZixiLnNlbGVjdGVkSXRlbT1lfSwxKSksITEhPT1iLl90cmlnZ2VyKCJzZWxlY3QiLGEse2l0ZW06ZX0pJiZiLmVsZW1lbnQudmFsKGUudmFsdWUpLGIudGVybT1iLmVsZW1lbnQudmFsKCksYi5jbG9zZShhKSxiLnNlbGVjdGVkSXRlbT1lfSxibHVyOmZ1bmN0aW9uKGEsYyl7Yi5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJmIuZWxlbWVudC52YWwoKSE9PWIudGVybSYmYi5lbGVtZW50LnZhbChiLnRlcm0pfX0pLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSkuY3NzKHt0b3A6MCxsZWZ0OjB9KS5oaWRlKCkuZGF0YSgibWVudSIpLGEuZm4uYmdpZnJhbWUmJnRoaXMubWVudS5lbGVtZW50LmJnaWZyYW1lKCksYi5iZWZvcmV1bmxvYWRIYW5kbGVyPWZ1bmN0aW9uKCl7Yi5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfSxhKHdpbmRvdykuYmluZCgiYmVmb3JldW5sb2FkIixiLmJlZm9yZXVubG9hZEhhbmRsZXIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1hdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhhc3BvcHVwIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksYSh3aW5kb3cpLnVuYmluZCgiYmVmb3JldW5sb2FkIix0aGlzLmJlZm9yZXVubG9hZEhhbmRsZXIpLGEuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oYixjKXthLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksYj09PSJzb3VyY2UiJiZ0aGlzLl9pbml0U291cmNlKCksYj09PSJhcHBlbmRUbyImJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKGEoY3x8ImJvZHkiLHRoaXMuZWxlbWVudFswXS5vd25lckRvY3VtZW50KVswXSksYj09PSJkaXNhYmxlZCImJmMmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfaW5pdFNvdXJjZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYyxkO2EuaXNBcnJheSh0aGlzLm9wdGlvbnMuc291cmNlKT8oYz10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGIsZCl7ZChhLnVpLmF1dG9jb21wbGV0ZS5maWx0ZXIoYyxiLnRlcm0pKX0pOnR5cGVvZiB0aGlzLm9wdGlvbnMuc291cmNlPT0ic3RyaW5nIj8oZD10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGMsZSl7Yi54aHImJmIueGhyLmFib3J0KCksYi54aHI9YS5hamF4KHt1cmw6ZCxkYXRhOmMsZGF0YVR5cGU6Impzb24iLHN1Y2Nlc3M6ZnVuY3Rpb24oYSxiKXtlKGEpfSxlcnJvcjpmdW5jdGlvbigpe2UoW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sc2VhcmNoOmZ1bmN0aW9uKGEsYil7YT1hIT1udWxsP2E6dGhpcy5lbGVtZW50LnZhbCgpLHRoaXMudGVybT10aGlzLmVsZW1lbnQudmFsKCk7aWYoYS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aClyZXR1cm4gdGhpcy5jbG9zZShiKTtjbGVhclRpbWVvdXQodGhpcy5jbG9zaW5nKTtpZih0aGlzLl90cmlnZ2VyKCJzZWFyY2giLGIpPT09ITEpcmV0dXJuO3JldHVybiB0aGlzLl9zZWFyY2goYSl9LF9zZWFyY2g6ZnVuY3Rpb24oYSl7dGhpcy5wZW5kaW5nKyssdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpLHRoaXMuc291cmNlKHt0ZXJtOmF9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9KytjO3JldHVybiBmdW5jdGlvbihkKXtiPT09YyYmYS5fX3Jlc3BvbnNlKGQpLGEucGVuZGluZy0tLGEucGVuZGluZ3x8YS5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpfX0sX19yZXNwb25zZTpmdW5jdGlvbihhKXshdGhpcy5vcHRpb25zLmRpc2FibGVkJiZhJiZhLmxlbmd0aD8oYT10aGlzLl9ub3JtYWxpemUoYSksdGhpcy5fc3VnZ2VzdChhKSx0aGlzLl90cmlnZ2VyKCJvcGVuIikpOnRoaXMuY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oYSl7Y2xlYXJUaW1lb3V0KHRoaXMuY2xvc2luZyksdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJih0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksdGhpcy5tZW51LmRlYWN0aXZhdGUoKSx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsYSkpfSxfY2hhbmdlOmZ1bmN0aW9uKGEpe3RoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsYSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKGIpe3JldHVybiBiLmxlbmd0aCYmYlswXS5sYWJlbCYmYlswXS52YWx1ZT9iOmEubWFwKGIsZnVuY3Rpb24oYil7cmV0dXJuIHR5cGVvZiBiPT0ic3RyaW5nIj97bGFiZWw6Yix2YWx1ZTpifTphLmV4dGVuZCh7bGFiZWw6Yi5sYWJlbHx8Yi52YWx1ZSx2YWx1ZTpiLnZhbHVlfHxiLmxhYmVsfSxiKX0pfSxfc3VnZ2VzdDpmdW5jdGlvbihiKXt2YXIgYz10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSk7dGhpcy5fcmVuZGVyTWVudShjLGIpLHRoaXMubWVudS5kZWFjdGl2YXRlKCksdGhpcy5tZW51LnJlZnJlc2goKSxjLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksYy5wb3NpdGlvbihhLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dChuZXcgYS5FdmVudCgibW91c2VvdmVyIikpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWVudS5lbGVtZW50O2Eub3V0ZXJXaWR0aChNYXRoLm1heChhLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpczthLmVhY2goYyxmdW5jdGlvbihhLGMpe2QuX3JlbmRlckl0ZW0oYixjKX0pfSxfcmVuZGVySXRlbTpmdW5jdGlvbihiLGMpe3JldHVybiBhKCI8bGk+PC9saT4iKS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIsYykuYXBwZW5kKGEoIjxhPjwvYT4iKS50ZXh0KGMubGFiZWwpKS5hcHBlbmRUbyhiKX0sX21vdmU6ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3RoaXMuc2VhcmNoKG51bGwsYik7cmV0dXJufWlmKHRoaXMubWVudS5maXJzdCgpJiYvXnByZXZpb3VzLy50ZXN0KGEpfHx0aGlzLm1lbnUubGFzdCgpJiYvXm5leHQvLnRlc3QoYSkpe3RoaXMuZWxlbWVudC52YWwodGhpcy50ZXJtKSx0aGlzLm1lbnUuZGVhY3RpdmF0ZSgpO3JldHVybn10aGlzLm1lbnVbYV0oYil9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudH0sX2tleUV2ZW50OmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKXRoaXMuX21vdmUoYSxiKSxiLnByZXZlbnREZWZhdWx0KCl9fSksYS5leHRlbmQoYS51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXHNdL2csIlxcJCYiKX0sZmlsdGVyOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bmV3IFJlZ0V4cChhLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChjKSwiaSIpO3JldHVybiBhLmdyZXAoYixmdW5jdGlvbihhKXtyZXR1cm4gZC50ZXN0KGEubGFiZWx8fGEudmFsdWV8fGEpfSl9fSl9KGpRdWVyeSksZnVuY3Rpb24oYSl7YS53aWRnZXQoInVpLm1lbnUiLHtfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hdHRyKHtyb2xlOiJsaXN0Ym94IiwiYXJpYS1hY3RpdmVkZXNjZW5kYW50IjoidWktYWN0aXZlLW1lbnVpdGVtIn0pLmNsaWNrKGZ1bmN0aW9uKGMpe2lmKCFhKGMudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIGEiKS5sZW5ndGgpcmV0dXJuO2MucHJldmVudERlZmF1bHQoKSxiLnNlbGVjdChjKX0pLHRoaXMucmVmcmVzaCgpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPXRoaXMuZWxlbWVudC5jaGlsZHJlbigibGk6bm90KC51aS1tZW51LWl0ZW0pOmhhcyhhKSIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS5hdHRyKCJyb2xlIiwibWVudWl0ZW0iKTtjLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hdHRyKCJ0YWJpbmRleCIsLTEpLm1vdXNlZW50ZXIoZnVuY3Rpb24oYyl7Yi5hY3RpdmF0ZShjLGEodGhpcykucGFyZW50KCkpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2IuZGVhY3RpdmF0ZSgpfSl9LGFjdGl2YXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5kZWFjdGl2YXRlKCk7aWYodGhpcy5oYXNTY3JvbGwoKSl7dmFyIGM9Yi5vZmZzZXQoKS50b3AtdGhpcy5lbGVtZW50Lm9mZnNldCgpLnRvcCxkPXRoaXMuZWxlbWVudC5zY3JvbGxUb3AoKSxlPXRoaXMuZWxlbWVudC5oZWlnaHQoKTtjPDA/dGhpcy5lbGVtZW50LnNjcm9sbFRvcChkK2MpOmM+PWUmJnRoaXMuZWxlbWVudC5zY3JvbGxUb3AoZCtjLWUrYi5oZWlnaHQoKSl9dGhpcy5hY3RpdmU9Yi5lcSgwKS5jaGlsZHJlbigiYSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLmF0dHIoImlkIiwidWktYWN0aXZlLW1lbnVpdGVtIikuZW5kKCksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLGEse2l0ZW06Yn0pfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZlKXJldHVybjt0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoImlkIiksdGhpcy5fdHJpZ2dlcigiYmx1ciIpLHRoaXMuYWN0aXZlPW51bGx9LG5leHQ6ZnVuY3Rpb24oYSl7dGhpcy5tb3ZlKCJuZXh0IiwiLnVpLW1lbnUtaXRlbTpmaXJzdCIsYSl9LHByZXZpb3VzOmZ1bmN0aW9uKGEpe3RoaXMubW92ZSgicHJldiIsIi51aS1tZW51LWl0ZW06bGFzdCIsYSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh9LG1vdmU6ZnVuY3Rpb24oYSxiLGMpe2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5hY3RpdmF0ZShjLHRoaXMuZWxlbWVudC5jaGlsZHJlbihiKSk7cmV0dXJufXZhciBkPXRoaXMuYWN0aXZlW2ErIkFsbCJdKCIudWktbWVudS1pdGVtIikuZXEoMCk7ZC5sZW5ndGg/dGhpcy5hY3RpdmF0ZShjLGQpOnRoaXMuYWN0aXZhdGUoYyx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oYikpfSxuZXh0UGFnZTpmdW5jdGlvbihiKXtpZih0aGlzLmhhc1Njcm9sbCgpKXtpZighdGhpcy5hY3RpdmV8fHRoaXMubGFzdCgpKXt0aGlzLmFjdGl2YXRlKGIsdGhpcy5lbGVtZW50LmNoaWxkcmVuKCIudWktbWVudS1pdGVtOmZpcnN0IikpO3JldHVybn12YXIgYz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsZD10aGlzLmVsZW1lbnQuaGVpZ2h0KCksZT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLm9mZnNldCgpLnRvcC1jLWQrYSh0aGlzKS5oZWlnaHQoKTtyZXR1cm4gYjwxMCYmYj4tMTB9KTtlLmxlbmd0aHx8KGU9dGhpcy5lbGVtZW50LmNoaWxkcmVuKCIudWktbWVudS1pdGVtOmxhc3QiKSksdGhpcy5hY3RpdmF0ZShiLGUpfWVsc2UgdGhpcy5hY3RpdmF0ZShiLHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcighdGhpcy5hY3RpdmV8fHRoaXMubGFzdCgpPyI6Zmlyc3QiOiI6bGFzdCIpKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGIpe2lmKHRoaXMuaGFzU2Nyb2xsKCkpe2lmKCF0aGlzLmFjdGl2ZXx8dGhpcy5maXJzdCgpKXt0aGlzLmFjdGl2YXRlKGIsdGhpcy5lbGVtZW50LmNoaWxkcmVuKCIudWktbWVudS1pdGVtOmxhc3QiKSk7cmV0dXJufXZhciBjPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxkPXRoaXMuZWxlbWVudC5oZWlnaHQoKSxlPXRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBiPWEodGhpcykub2Zmc2V0KCkudG9wLWMrZC1hKHRoaXMpLmhlaWdodCgpO3JldHVybiBiPDEwJiZiPi0xMH0pO2UubGVuZ3RofHwoZT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW06Zmlyc3QiKSksdGhpcy5hY3RpdmF0ZShiLGUpfWVsc2UgdGhpcy5hY3RpdmF0ZShiLHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcighdGhpcy5hY3RpdmV8fHRoaXMuZmlyc3QoKT8iOmxhc3QiOiI6Zmlyc3QiKSl9LGhhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuaGVpZ2h0KCk8dGhpcy5lbGVtZW50W2EuZm4ucHJvcD8icHJvcCI6ImF0dHIiXSgic2Nyb2xsSGVpZ2h0Iil9LHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLl90cmlnZ2VyKCJzZWxlY3RlZCIsYSx7aXRlbTp0aGlzLmFjdGl2ZX0pfX0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz0idWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLGg9InVpLXN0YXRlLWhvdmVyIHVpLXN0YXRlLWFjdGl2ZSAiLGk9InVpLWJ1dHRvbi1pY29ucy1vbmx5IHVpLWJ1dHRvbi1pY29uLW9ubHkgdWktYnV0dG9uLXRleHQtaWNvbnMgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IHVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IHVpLWJ1dHRvbi10ZXh0LW9ubHkiLGo9ZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLmZpbmQoIjp1aS1idXR0b24iKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5idXR0b24oInJlZnJlc2giKX0sMSl9LGs9ZnVuY3Rpb24oYil7dmFyIGM9Yi5uYW1lLGQ9Yi5mb3JtLGU9YShbXSk7cmV0dXJuIGMmJihkP2U9YShkKS5maW5kKCJbbmFtZT0nIitjKyInXSIpOmU9YSgiW25hbWU9JyIrYysiJ10iLGIub3duZXJEb2N1bWVudCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZm9ybX0pKSxlfTthLndpZGdldCgidWkuYnV0dG9uIix7b3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCx0ZXh0OiEwLGxhYmVsOm51bGwsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuY2xvc2VzdCgiZm9ybSIpLnVuYmluZCgicmVzZXQuYnV0dG9uIikuYmluZCgicmVzZXQuYnV0dG9uIixqKSx0eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkIT0iYm9vbGVhbiI/dGhpcy5vcHRpb25zLmRpc2FibGVkPSEhdGhpcy5lbGVtZW50LnByb3BBdHRyKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wQXR0cigiZGlzYWJsZWQiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigidGl0bGUiKTt2YXIgYj10aGlzLGg9dGhpcy5vcHRpb25zLGk9dGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIixsPSJ1aS1zdGF0ZS1ob3ZlciIrKGk/IiI6IiB1aS1zdGF0ZS1hY3RpdmUiKSxtPSJ1aS1zdGF0ZS1mb2N1cyI7aC5sYWJlbD09PW51bGwmJihoLmxhYmVsPXRoaXMuYnV0dG9uRWxlbWVudC5odG1sKCkpLHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhnKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuYmluZCgibW91c2VlbnRlci5idXR0b24iLGZ1bmN0aW9uKCl7aWYoaC5kaXNhYmxlZClyZXR1cm47YSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzPT09YyYmYSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJtb3VzZWxlYXZlLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkKXJldHVybjthKHRoaXMpLnJlbW92ZUNsYXNzKGwpfSkuYmluZCgiY2xpY2suYnV0dG9uIixmdW5jdGlvbihhKXtoLmRpc2FibGVkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5lbGVtZW50LmJpbmQoImZvY3VzLmJ1dHRvbiIsZnVuY3Rpb24oKXtiLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MobSl9KS5iaW5kKCJibHVyLmJ1dHRvbiIsZnVuY3Rpb24oKXtiLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MobSl9KSxpJiYodGhpcy5lbGVtZW50LmJpbmQoImNoYW5nZS5idXR0b24iLGZ1bmN0aW9uKCl7aWYoZilyZXR1cm47Yi5yZWZyZXNoKCl9KSx0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duLmJ1dHRvbiIsZnVuY3Rpb24oYSl7aWYoaC5kaXNhYmxlZClyZXR1cm47Zj0hMSxkPWEucGFnZVgsZT1hLnBhZ2VZfSkuYmluZCgibW91c2V1cC5idXR0b24iLGZ1bmN0aW9uKGEpe2lmKGguZGlzYWJsZWQpcmV0dXJuO2lmKGQhPT1hLnBhZ2VYfHxlIT09YS5wYWdlWSlmPSEwfSkpLHRoaXMudHlwZT09PSJjaGVja2JveCI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkfHxmKXJldHVybiExO2EodGhpcykudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGIuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLGIuZWxlbWVudFswXS5jaGVja2VkKX0pOnRoaXMudHlwZT09PSJyYWRpbyI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkfHxmKXJldHVybiExO2EodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGIuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7dmFyIGM9Yi5lbGVtZW50WzBdO2soYykubm90KGMpLm1hcChmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOih0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkKXJldHVybiExO2EodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGM9dGhpcyxhKGRvY3VtZW50KS5vbmUoIm1vdXNldXAiLGZ1bmN0aW9uKCl7Yz1udWxsfSl9KS5iaW5kKCJtb3VzZXVwLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihoLmRpc2FibGVkKXJldHVybiExO2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5ZG93bi5idXR0b24iLGZ1bmN0aW9uKGIpe2lmKGguZGlzYWJsZWQpcmV0dXJuITE7KGIua2V5Q29kZT09YS51aS5rZXlDb2RlLlNQQUNFfHxiLmtleUNvZGU9PWEudWkua2V5Q29kZS5FTlRFUikmJmEodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5dXAuYnV0dG9uIixmdW5jdGlvbigpe2EodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbihiKXtiLmtleUNvZGU9PT1hLnVpLmtleUNvZGUuU1BBQ0UmJmEodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixoLmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5pcygiOmNoZWNrYm94Iik/dGhpcy50eXBlPSJjaGVja2JveCI6dGhpcy5lbGVtZW50LmlzKCI6cmFkaW8iKT90aGlzLnR5cGU9InJhZGlvIjp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/dGhpcy50eXBlPSJpbnB1dCI6dGhpcy50eXBlPSJidXR0b24iO2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpe3ZhciBhPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkuZmlsdGVyKCI6bGFzdCIpLGI9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iO3RoaXMuYnV0dG9uRWxlbWVudD1hLmZpbmQoYiksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGE9YS5sZW5ndGg/YS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1hLmZpbHRlcihiKSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWEuZmluZChiKSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIik7dmFyIGM9dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpO2MmJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsYyl9ZWxzZSB0aGlzLmJ1dHRvbkVsZW1lbnQ9dGhpcy5lbGVtZW50fSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b25FbGVtZW50fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoZysiICIraCsiICIraSkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIiksYS5XaWRnZXQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2EuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihiPT09ImRpc2FibGVkIil7Yz90aGlzLmVsZW1lbnQucHJvcEF0dHIoImRpc2FibGVkIiwhMCk6dGhpcy5lbGVtZW50LnByb3BBdHRyKCJkaXNhYmxlZCIsITEpO3JldHVybn10aGlzLl9yZXNldEJ1dHRvbigpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTtiIT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixiKSx0aGlzLnR5cGU9PT0icmFkaW8iP2sodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7YSh0aGlzKS5pcygiOmNoZWNrZWQiKT9hKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTphKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KTp0aGlzLnR5cGU9PT0iY2hlY2tib3giJiYodGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpP3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOnRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSl9LF9yZXNldEJ1dHRvbjpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJpbnB1dCIpe3RoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpO3JldHVybn12YXIgYj10aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaSksYz1hKCI8c3Bhbj48L3NwYW4+Iix0aGlzLmVsZW1lbnRbMF0ub3duZXJEb2N1bWVudCkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKGIuZW1wdHkoKSkudGV4dCgpLGQ9dGhpcy5vcHRpb25zLmljb25zLGU9ZC5wcmltYXJ5JiZkLnNlY29uZGFyeSxmPVtdO2QucHJpbWFyeXx8ZC5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZmLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhlPyJzIjpkLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxkLnByaW1hcnkmJmIucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK2QucHJpbWFyeSsiJz48L3NwYW4+IiksZC5zZWNvbmRhcnkmJmIuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitkLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChmLnB1c2goZT8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8Yi5hdHRyKCJ0aXRsZSIsYykpKTpmLnB1c2goInVpLWJ1dHRvbi10ZXh0LW9ubHkiKSxiLmFkZENsYXNzKGYuam9pbigiICIpKX19KSxhLndpZGdldCgidWkuYnV0dG9uc2V0Iix7b3B0aW9uczp7aXRlbXM6IjpidXR0b24sIDpzdWJtaXQsIDpyZXNldCwgOmNoZWNrYm94LCA6cmFkaW8sIGEsIDpkYXRhKGJ1dHRvbikifSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1idXR0b25zZXQiKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2goKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe2I9PT0iZGlzYWJsZWQiJiZ0aGlzLmJ1dHRvbnMuYnV0dG9uKCJvcHRpb24iLGIsYyksYS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik9PT0icnRsIjt0aGlzLmJ1dHRvbnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKS5lbmQoKS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKS5lbmQoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyhiPyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyhiPyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKSxhLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpfX0pfShqUXVlcnkpLGZ1bmN0aW9uKCQsdW5kZWZpbmVkKXtmdW5jdGlvbiBEYXRlcGlja2VyKCl7dGhpcy5kZWJ1Zz0hMSx0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sJC5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMuZHBEaXY9YmluZEhvdmVyKCQoJzxkaXYgaWQ9IicrdGhpcy5fbWFpbkRpdklkKyciIGNsYXNzPSJ1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCI+PC9kaXY+JykpfWZ1bmN0aW9uIGJpbmRIb3ZlcihhKXt2YXIgYj0iYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhIjtyZXR1cm4gYS5iaW5kKCJtb3VzZW91dCIsZnVuY3Rpb24oYSl7dmFyIGM9JChhLnRhcmdldCkuY2xvc2VzdChiKTtpZighYy5sZW5ndGgpcmV0dXJuO2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIHVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmJpbmQoIm1vdXNlb3ZlciIsZnVuY3Rpb24oYyl7dmFyIGQ9JChjLnRhcmdldCkuY2xvc2VzdChiKTtpZigkLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGluc3RBY3RpdmUuaW5saW5lP2EucGFyZW50KClbMF06aW5zdEFjdGl2ZS5pbnB1dFswXSl8fCFkLmxlbmd0aClyZXR1cm47ZC5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSxkLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLGQuaGFzQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldiIpJiZkLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSxkLmhhc0NsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQiKSYmZC5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KX1mdW5jdGlvbiBleHRlbmRSZW1vdmUoYSxiKXskLmV4dGVuZChhLGIpO2Zvcih2YXIgYyBpbiBiKWlmKGJbY109PW51bGx8fGJbY109PXVuZGVmaW5lZClhW2NdPWJbY107cmV0dXJuIGF9ZnVuY3Rpb24gaXNBcnJheShhKXtyZXR1cm4gYSYmKCQuYnJvd3Nlci5zYWZhcmkmJnR5cGVvZiBhPT0ib2JqZWN0IiYmYS5sZW5ndGh8fGEuY29uc3RydWN0b3ImJmEuY29uc3RydWN0b3IudG9TdHJpbmcoKS5tYXRjaCgvXEFycmF5XChcKS8pKX0kLmV4dGVuZCgkLnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOiIxLjguMjQifX0pO3ZhciBQUk9QX05BTUU9ImRhdGVwaWNrZXIiLGRwdXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSxpbnN0QWN0aXZlOyQuZXh0ZW5kKERhdGVwaWNrZXIucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxsb2c6ZnVuY3Rpb24oKXt0aGlzLmRlYnVnJiZjb25zb2xlLmxvZy5hcHBseSgiIixhcmd1bWVudHMpfSxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihhKXtyZXR1cm4gZXh0ZW5kUmVtb3ZlKHRoaXMuX2RlZmF1bHRzLGF8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0YXJnZXQsc2V0dGluZ3Mpe3ZhciBpbmxpbmVTZXR0aW5ncz1udWxsO2Zvcih2YXIgYXR0ck5hbWUgaW4gdGhpcy5fZGVmYXVsdHMpe3ZhciBhdHRyVmFsdWU9dGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0ZToiK2F0dHJOYW1lKTtpZihhdHRyVmFsdWUpe2lubGluZVNldHRpbmdzPWlubGluZVNldHRpbmdzfHx7fTt0cnl7aW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdPWV2YWwoYXR0clZhbHVlKX1jYXRjaChlcnIpe2lubGluZVNldHRpbmdzW2F0dHJOYW1lXT1hdHRyVmFsdWV9fX12YXIgbm9kZU5hbWU9dGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksaW5saW5lPW5vZGVOYW1lPT0iZGl2Inx8bm9kZU5hbWU9PSJzcGFuIjt0YXJnZXQuaWR8fCh0aGlzLnV1aWQrPTEsdGFyZ2V0LmlkPSJkcCIrdGhpcy51dWlkKTt2YXIgaW5zdD10aGlzLl9uZXdJbnN0KCQodGFyZ2V0KSxpbmxpbmUpO2luc3Quc2V0dGluZ3M9JC5leHRlbmQoe30sc2V0dGluZ3N8fHt9LGlubGluZVNldHRpbmdzfHx7fSksbm9kZU5hbWU9PSJpbnB1dCI/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIodGFyZ2V0LGluc3QpOmlubGluZSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0YXJnZXQsaW5zdCl9LF9uZXdJbnN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YVswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpjLGlucHV0OmEsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6YixkcERpdjpiP2JpbmRIb3ZlcigkKCc8ZGl2IGNsYXNzPSInK3RoaXMuX2lubGluZUNsYXNzKycgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGEsYil7dmFyIGM9JChhKTtiLmFwcGVuZD0kKFtdKSxiLnRyaWdnZXI9JChbXSk7aWYoYy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3RoaXMuX2F0dGFjaG1lbnRzKGMsYiksYy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLmJpbmQoInNldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oYSxjLGQpe2Iuc2V0dGluZ3NbY109ZH0pLmJpbmQoImdldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5fZ2V0KGIsYyl9KSx0aGlzLl9hdXRvU2l6ZShiKSwkLmRhdGEoYSxQUk9QX05BTUUsYiksYi5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoYSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2dldChiLCJhcHBlbmRUZXh0IiksZD10aGlzLl9nZXQoYiwiaXNSVEwiKTtiLmFwcGVuZCYmYi5hcHBlbmQucmVtb3ZlKCksYyYmKGIuYXBwZW5kPSQoJzxzcGFuIGNsYXNzPSInK3RoaXMuX2FwcGVuZENsYXNzKyciPicrYysiPC9zcGFuPiIpLGFbZD8iYmVmb3JlIjoiYWZ0ZXIiXShiLmFwcGVuZCkpLGEudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLGIudHJpZ2dlciYmYi50cmlnZ2VyLnJlbW92ZSgpO3ZhciBlPXRoaXMuX2dldChiLCJzaG93T24iKTsoZT09ImZvY3VzInx8ZT09ImJvdGgiKSYmYS5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlcik7aWYoZT09ImJ1dHRvbiJ8fGU9PSJib3RoIil7dmFyIGY9dGhpcy5fZ2V0KGIsImJ1dHRvblRleHQiKSxnPXRoaXMuX2dldChiLCJidXR0b25JbWFnZSIpO2IudHJpZ2dlcj0kKHRoaXMuX2dldChiLCJidXR0b25JbWFnZU9ubHkiKT8kKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpnLGFsdDpmLHRpdGxlOmZ9KTokKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKGc9PSIiP2Y6JCgiPGltZy8+IikuYXR0cih7c3JjOmcsYWx0OmYsdGl0bGU6Zn0pKSksYVtkPyJiZWZvcmUiOiJhZnRlciJdKGIudHJpZ2dlciksYi50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1hWzBdPyQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTokLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9YVswXT8oJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoYVswXSkpOiQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoYVswXSksITF9KX19LF9hdXRvU2l6ZTpmdW5jdGlvbihhKXtpZih0aGlzLl9nZXQoYSwiYXV0b1NpemUiKSYmIWEuaW5saW5lKXt2YXIgYj1uZXcgRGF0ZSgyMDA5LDExLDIwKSxjPXRoaXMuX2dldChhLCJkYXRlRm9ybWF0Iik7aWYoYy5tYXRjaCgvW0RNXS8pKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj0wLGM9MDtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmxlbmd0aD5iJiYoYj1hW2RdLmxlbmd0aCxjPWQpO3JldHVybiBjfTtiLnNldE1vbnRoKGQodGhpcy5fZ2V0KGEsYy5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSksYi5zZXREYXRlKGQodGhpcy5fZ2V0KGEsYy5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLWIuZ2V0RGF5KCkpfWEuaW5wdXQuYXR0cigic2l6ZSIsdGhpcy5fZm9ybWF0RGF0ZShhLGIpLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbihhLGIpe3ZhciBjPSQoYSk7aWYoYy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO2MuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChiLmRwRGl2KS5iaW5kKCJzZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGEsYyxkKXtiLnNldHRpbmdzW2NdPWR9KS5iaW5kKCJnZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuX2dldChiLGMpfSksJC5kYXRhKGEsUFJPUF9OQU1FLGIpLHRoaXMuX3NldERhdGUoYix0aGlzLl9nZXREZWZhdWx0RGF0ZShiKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihiKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoYiksYi5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoYSksYi5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuX2RpYWxvZ0luc3Q7aWYoIWYpe3RoaXMudXVpZCs9MTt2YXIgZz0iZHAiK3RoaXMudXVpZDt0aGlzLl9kaWFsb2dJbnB1dD0kKCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IicrZysnIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsiLz4nKSx0aGlzLl9kaWFsb2dJbnB1dC5rZXlkb3duKHRoaXMuX2RvS2V5RG93biksJCgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksZj10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLGYuc2V0dGluZ3M9e30sJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxmKX1leHRlbmRSZW1vdmUoZi5zZXR0aW5ncyxkfHx7fSksYj1iJiZiLmNvbnN0cnVjdG9yPT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUoZixiKTpiLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChiKSx0aGlzLl9wb3M9ZT9lLmxlbmd0aD9lOltlLnBhZ2VYLGUucGFnZVldOm51bGw7aWYoIXRoaXMuX3Bvcyl7dmFyIGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxqPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsaz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDt0aGlzLl9wb3M9W2gvMi0xMDAraixpLzItMTUwK2tdfXJldHVybiB0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLGYuc2V0dGluZ3Mub25TZWxlY3Q9Yyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksJC5ibG9ja1VJJiYkLmJsb2NrVUkodGhpcy5kcERpdiksJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxmKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7dmFyIGI9JChhKSxjPSQuZGF0YShhLFBST1BfTkFNRSk7aWYoIWIuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt2YXIgZD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7JC5yZW1vdmVEYXRhKGEsUFJPUF9OQU1FKSxkPT0iaW5wdXQiPyhjLmFwcGVuZC5yZW1vdmUoKSxjLnRyaWdnZXIucmVtb3ZlKCksYi5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KGQ9PSJkaXYifHxkPT0ic3BhbiIpJiZiLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihhKXt2YXIgYj0kKGEpLGM9JC5kYXRhKGEsUFJPUF9OQU1FKTtpZighYi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciBkPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihkPT0iaW5wdXQiKWEuZGlzYWJsZWQ9ITEsYy50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KTtlbHNlIGlmKGQ9PSJkaXYifHxkPT0ic3BhbiIpe3ZhciBlPWIuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKTtlLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksZS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnJlbW92ZUF0dHIoImRpc2FibGVkIil9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oYil7cmV0dXJuIGI9PWE/bnVsbDpifSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihhKXt2YXIgYj0kKGEpLGM9JC5kYXRhKGEsUFJPUF9OQU1FKTtpZighYi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciBkPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihkPT0iaW5wdXQiKWEuZGlzYWJsZWQ9ITAsYy50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMC41IixjdXJzb3I6ImRlZmF1bHQifSk7ZWxzZSBpZihkPT0iZGl2Inx8ZD09InNwYW4iKXt2YXIgZT1iLmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcyk7ZS5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLGUuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIil9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oYil7cmV0dXJuIGI9PWE/bnVsbDpifSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT1hfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuITE7Zm9yKHZhciBiPTA7Yjx0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7YisrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW2JdPT1hKXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbihhKXt0cnl7cmV0dXJuICQuZGF0YShhLFBST1BfTkFNRSl9Y2F0Y2goYil7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldEluc3QoYSk7aWYoYXJndW1lbnRzLmxlbmd0aD09MiYmdHlwZW9mIGI9PSJzdHJpbmciKXJldHVybiBiPT0iZGVmYXVsdHMiPyQuZXh0ZW5kKHt9LCQuZGF0ZXBpY2tlci5fZGVmYXVsdHMpOmQ/Yj09ImFsbCI/JC5leHRlbmQoe30sZC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGQsYik6bnVsbDt2YXIgZT1ifHx7fTt0eXBlb2YgYj09InN0cmluZyImJihlPXt9LGVbYl09Yyk7aWYoZCl7dGhpcy5fY3VySW5zdD09ZCYmdGhpcy5faGlkZURhdGVwaWNrZXIoKTt2YXIgZj10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihhLCEwKSxnPXRoaXMuX2dldE1pbk1heERhdGUoZCwibWluIiksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGQsIm1heCIpO2V4dGVuZFJlbW92ZShkLnNldHRpbmdzLGUpLGchPT1udWxsJiZlLmRhdGVGb3JtYXQhPT11bmRlZmluZWQmJmUubWluRGF0ZT09PXVuZGVmaW5lZCYmKGQuc2V0dGluZ3MubWluRGF0ZT10aGlzLl9mb3JtYXREYXRlKGQsZykpLGghPT1udWxsJiZlLmRhdGVGb3JtYXQhPT11bmRlZmluZWQmJmUubWF4RGF0ZT09PXVuZGVmaW5lZCYmKGQuc2V0dGluZ3MubWF4RGF0ZT10aGlzLl9mb3JtYXREYXRlKGQsaCkpLHRoaXMuX2F0dGFjaG1lbnRzKCQoYSksZCksdGhpcy5fYXV0b1NpemUoZCksdGhpcy5fc2V0RGF0ZShkLGYpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShkKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGQpfX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIoYSxiLGMpfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fZ2V0SW5zdChhKTtiJiZ0aGlzLl91cGRhdGVEYXRlcGlja2VyKGIpfSxfc2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9nZXRJbnN0KGEpO2MmJih0aGlzLl9zZXREYXRlKGMsYiksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihjKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoYykpfSxfZ2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9nZXRJbnN0KGEpO3JldHVybiBjJiYhYy5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQoYyxiKSxjP3RoaXMuX2dldERhdGUoYyk6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbihhKXt2YXIgYj0kLmRhdGVwaWNrZXIuX2dldEluc3QoYS50YXJnZXQpLGM9ITAsZD1iLmRwRGl2LmlzKCIudWktZGF0ZXBpY2tlci1ydGwiKTtiLl9rZXlFdmVudD0hMDtpZigkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChhLmtleUNvZGUpe2Nhc2UgOTokLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksYz0hMTticmVhaztjYXNlIDEzOnZhciBlPSQoInRkLiIrJC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MrIjpub3QoLiIrJC5kYXRlcGlja2VyLl9jdXJyZW50Q2xhc3MrIikiLGIuZHBEaXYpO2VbMF0mJiQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGEudGFyZ2V0LGIuc2VsZWN0ZWRNb250aCxiLnNlbGVjdGVkWWVhcixlWzBdKTt2YXIgZj0kLmRhdGVwaWNrZXIuX2dldChiLCJvblNlbGVjdCIpO2lmKGYpe3ZhciBnPSQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShiKTtmLmFwcGx5KGIuaW5wdXQ/Yi5pbnB1dFswXTpudWxsLFtnLGJdKX1lbHNlICQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtyZXR1cm4hMTtjYXNlIDI3OiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTticmVhaztjYXNlIDMzOiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCxhLmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KGIsInN0ZXBCaWdNb250aHMiKTotJC5kYXRlcGlja2VyLl9nZXQoYiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNDokLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYS50YXJnZXQsYS5jdHJsS2V5PyskLmRhdGVwaWNrZXIuX2dldChiLCJzdGVwQmlnTW9udGhzIik6KyQuZGF0ZXBpY2tlci5fZ2V0KGIsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzU6KGEuY3RybEtleXx8YS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9jbGVhckRhdGUoYS50YXJnZXQpLGM9YS5jdHJsS2V5fHxhLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNjooYS5jdHJsS2V5fHxhLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShhLnRhcmdldCksYz1hLmN0cmxLZXl8fGEubWV0YUtleTticmVhaztjYXNlIDM3OihhLmN0cmxLZXl8fGEubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCxkPzE6LTEsIkQiKSxjPWEuY3RybEtleXx8YS5tZXRhS2V5LGEub3JpZ2luYWxFdmVudC5hbHRLZXkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCxhLmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KGIsInN0ZXBCaWdNb250aHMiKTotJC5kYXRlcGlja2VyLl9nZXQoYiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzODooYS5jdHJsS2V5fHxhLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYS50YXJnZXQsLTcsIkQiKSxjPWEuY3RybEtleXx8YS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGEuY3RybEtleXx8YS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEudGFyZ2V0LGQ/LTE6MSwiRCIpLGM9YS5jdHJsS2V5fHxhLm1ldGFLZXksYS5vcmlnaW5hbEV2ZW50LmFsdEtleSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEudGFyZ2V0LGEuY3RybEtleT8rJC5kYXRlcGlja2VyLl9nZXQoYiwic3RlcEJpZ01vbnRocyIpOiskLmRhdGVwaWNrZXIuX2dldChiLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDQwOihhLmN0cmxLZXl8fGEubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShhLnRhcmdldCw3LCJEIiksYz1hLmN0cmxLZXl8fGEubWV0YUtleTticmVhaztkZWZhdWx0OmM9ITF9ZWxzZSBhLmtleUNvZGU9PTM2JiZhLmN0cmxLZXk/JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTpjPSExO2MmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKGEpe3ZhciBiPSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChhLnRhcmdldCk7aWYoJC5kYXRlcGlja2VyLl9nZXQoYiwiY29uc3RyYWluSW5wdXQiKSl7dmFyIGM9JC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKCQuZGF0ZXBpY2tlci5fZ2V0KGIsImRhdGVGb3JtYXQiKSksZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuY2hhckNvZGU9PXVuZGVmaW5lZD9hLmtleUNvZGU6YS5jaGFyQ29kZSk7cmV0dXJuIGEuY3RybEtleXx8YS5tZXRhS2V5fHxkPCIgInx8IWN8fGMuaW5kZXhPZihkKT4tMX19LF9kb0tleVVwOmZ1bmN0aW9uKGEpe3ZhciBiPSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChhLnRhcmdldCk7aWYoYi5pbnB1dC52YWwoKSE9Yi5sYXN0VmFsKXRyeXt2YXIgYz0kLmRhdGVwaWNrZXIucGFyc2VEYXRlKCQuZGF0ZXBpY2tlci5fZ2V0KGIsImRhdGVGb3JtYXQiKSxiLmlucHV0P2IuaW5wdXQudmFsKCk6bnVsbCwkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhiKSk7YyYmKCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChiKSwkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShiKSwkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoYikpfWNhdGNoKGQpeyQuZGF0ZXBpY2tlci5sb2coZCl9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbihhKXthPWEudGFyZ2V0fHxhLGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9ImlucHV0IiYmKGE9JCgiaW5wdXQiLGEucGFyZW50Tm9kZSlbMF0pO2lmKCQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoYSl8fCQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1hKXJldHVybjt2YXIgYj0kLmRhdGVwaWNrZXIuX2dldEluc3QoYSk7JC5kYXRlcGlja2VyLl9jdXJJbnN0JiYkLmRhdGVwaWNrZXIuX2N1ckluc3QhPWImJigkLmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksYiYmJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigkLmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKTt2YXIgYz0kLmRhdGVwaWNrZXIuX2dldChiLCJiZWZvcmVTaG93IiksZD1jP2MuYXBwbHkoYSxbYSxiXSk6e307aWYoZD09PSExKXJldHVybjtleHRlbmRSZW1vdmUoYi5zZXR0aW5ncyxkKSxiLmxhc3RWYWw9bnVsbCwkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD1hLCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChiKSwkLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYoYS52YWx1ZT0iIiksJC5kYXRlcGlja2VyLl9wb3N8fCgkLmRhdGVwaWNrZXIuX3Bvcz0kLmRhdGVwaWNrZXIuX2ZpbmRQb3MoYSksJC5kYXRlcGlja2VyLl9wb3NbMV0rPWEub2Zmc2V0SGVpZ2h0KTt2YXIgZT0hMTskKGEpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGV8PSQodGhpcykuY3NzKCJwb3NpdGlvbiIpPT0iZml4ZWQiLCFlfSksZSYmJC5icm93c2VyLm9wZXJhJiYoJC5kYXRlcGlja2VyLl9wb3NbMF0tPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LCQuZGF0ZXBpY2tlci5fcG9zWzFdLT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKTt2YXIgZj17bGVmdDokLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6JC5kYXRlcGlja2VyLl9wb3NbMV19OyQuZGF0ZXBpY2tlci5fcG9zPW51bGwsYi5kcERpdi5lbXB0eSgpLGIuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGIpLGY9JC5kYXRlcGlja2VyLl9jaGVja09mZnNldChiLGYsZSksYi5kcERpdi5jc3Moe3Bvc2l0aW9uOiQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJiQuYmxvY2tVST8ic3RhdGljIjplPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmYubGVmdCsicHgiLHRvcDpmLnRvcCsicHgifSk7aWYoIWIuaW5saW5lKXt2YXIgZz0kLmRhdGVwaWNrZXIuX2dldChiLCJzaG93QW5pbSIpLGg9JC5kYXRlcGlja2VyLl9nZXQoYiwiZHVyYXRpb24iKSxpPWZ1bmN0aW9uKCl7dmFyIGE9Yi5kcERpdi5maW5kKCJpZnJhbWUudWktZGF0ZXBpY2tlci1jb3ZlciIpO2lmKCEhYS5sZW5ndGgpe3ZhciBjPSQuZGF0ZXBpY2tlci5fZ2V0Qm9yZGVycyhiLmRwRGl2KTthLmNzcyh7bGVmdDotY1swXSx0b3A6LWNbMV0sd2lkdGg6Yi5kcERpdi5vdXRlcldpZHRoKCksaGVpZ2h0OmIuZHBEaXYub3V0ZXJIZWlnaHQoKX0pfX07Yi5kcERpdi56SW5kZXgoJChhKS56SW5kZXgoKSsxKSwkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nPSEwLCQuZWZmZWN0cyYmJC5lZmZlY3RzW2ddP2IuZHBEaXYuc2hvdyhnLCQuZGF0ZXBpY2tlci5fZ2V0KGIsInNob3dPcHRpb25zIiksaCxpKTpiLmRwRGl2W2d8fCJzaG93Il0oZz9oOm51bGwsaSksKCFnfHwhaCkmJmkoKSxiLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhYi5pbnB1dC5pcygiOmRpc2FibGVkIikmJmIuaW5wdXQuZm9jdXMoKSwkLmRhdGVwaWNrZXIuX2N1ckluc3Q9Yn19LF91cGRhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7Yi5tYXhSb3dzPTQ7dmFyIGM9JC5kYXRlcGlja2VyLl9nZXRCb3JkZXJzKGEuZHBEaXYpO2luc3RBY3RpdmU9YSxhLmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTChhKSksdGhpcy5fYXR0YWNoSGFuZGxlcnMoYSk7dmFyIGQ9YS5kcERpdi5maW5kKCJpZnJhbWUudWktZGF0ZXBpY2tlci1jb3ZlciIpOyFkLmxlbmd0aHx8ZC5jc3Moe2xlZnQ6LWNbMF0sdG9wOi1jWzFdLHdpZHRoOmEuZHBEaXYub3V0ZXJXaWR0aCgpLGhlaWdodDphLmRwRGl2Lm91dGVySGVpZ2h0KCl9KSxhLmRwRGl2LmZpbmQoIi4iK3RoaXMuX2RheU92ZXJDbGFzcysiIGEiKS5tb3VzZW92ZXIoKTt2YXIgZT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhhKSxmPWVbMV0sZz0xNzthLmRwRGl2LnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVsdGktNCIpLndpZHRoKCIiKSxmPjEmJmEuZHBEaXYuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktIitmKS5jc3MoIndpZHRoIixnKmYrImVtIiksYS5kcERpdlsoZVswXSE9MXx8ZVsxXSE9MT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSxhLmRwRGl2Wyh0aGlzLl9nZXQoYSwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksYT09JC5kYXRlcGlja2VyLl9jdXJJbnN0JiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZhLmlucHV0JiZhLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhYS5pbnB1dC5pcygiOmRpc2FibGVkIikmJmEuaW5wdXRbMF0hPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmEuaW5wdXQuZm9jdXMoKTtpZihhLnllYXJzaHRtbCl7dmFyIGg9YS55ZWFyc2h0bWw7c2V0VGltZW91dChmdW5jdGlvbigpe2g9PT1hLnllYXJzaHRtbCYmYS55ZWFyc2h0bWwmJmEuZHBEaXYuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcjpmaXJzdCIpLnJlcGxhY2VXaXRoKGEueWVhcnNodG1sKSxoPWEueWVhcnNodG1sPW51bGx9LDApfX0sX2dldEJvcmRlcnM6ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYSl7cmV0dXJue3RoaW46MSxtZWRpdW06Mix0aGljazozfVthXXx8YX07cmV0dXJuW3BhcnNlRmxvYXQoYihhLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSkpLHBhcnNlRmxvYXQoYihhLmNzcygiYm9yZGVyLXRvcC13aWR0aCIpKSldfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZHBEaXYub3V0ZXJXaWR0aCgpLGU9YS5kcERpdi5vdXRlckhlaWdodCgpLGY9YS5pbnB1dD9hLmlucHV0Lm91dGVyV2lkdGgoKTowLGc9YS5pbnB1dD9hLmlucHV0Lm91dGVySGVpZ2h0KCk6MCxoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsoYz8wOiQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhjPzA6JChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiBiLmxlZnQtPXRoaXMuX2dldChhLCJpc1JUTCIpP2QtZjowLGIubGVmdC09YyYmYi5sZWZ0PT1hLmlucHV0Lm9mZnNldCgpLmxlZnQ/JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsYi50b3AtPWMmJmIudG9wPT1hLmlucHV0Lm9mZnNldCgpLnRvcCtnPyQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsYi5sZWZ0LT1NYXRoLm1pbihiLmxlZnQsYi5sZWZ0K2Q+aCYmaD5kP01hdGguYWJzKGIubGVmdCtkLWgpOjApLGIudG9wLT1NYXRoLm1pbihiLnRvcCxiLnRvcCtlPmkmJmk+ZT9NYXRoLmFicyhlK2cpOjApLGJ9LF9maW5kUG9zOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldEluc3QoYSksYz10aGlzLl9nZXQoYiwiaXNSVEwiKTt3aGlsZShhJiYoYS50eXBlPT0iaGlkZGVuInx8YS5ub2RlVHlwZSE9MXx8JC5leHByLmZpbHRlcnMuaGlkZGVuKGEpKSlhPWFbYz8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTt2YXIgZD0kKGEpLm9mZnNldCgpO3JldHVybltkLmxlZnQsZC50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fY3VySW5zdDtpZighYnx8YSYmYiE9JC5kYXRhKGEsUFJPUF9OQU1FKSlyZXR1cm47aWYodGhpcy5fZGF0ZXBpY2tlclNob3dpbmcpe3ZhciBjPXRoaXMuX2dldChiLCJzaG93QW5pbSIpLGQ9dGhpcy5fZ2V0KGIsImR1cmF0aW9uIiksZT1mdW5jdGlvbigpeyQuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhiKX07JC5lZmZlY3RzJiYkLmVmZmVjdHNbY10/Yi5kcERpdi5oaWRlKGMsJC5kYXRlcGlja2VyLl9nZXQoYiwic2hvd09wdGlvbnMiKSxkLGUpOmIuZHBEaXZbYz09InNsaWRlRG93biI/InNsaWRlVXAiOmM9PSJmYWRlSW4iPyJmYWRlT3V0IjoiaGlkZSJdKGM/ZDpudWxsLGUpLGN8fGUoKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMTt2YXIgZj10aGlzLl9nZXQoYiwib25DbG9zZSIpO2YmJmYuYXBwbHkoYi5pbnB1dD9iLmlucHV0WzBdOm51bGwsW2IuaW5wdXQ/Yi5pbnB1dC52YWwoKToiIixiXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksJC5ibG9ja1VJJiYoJC51bmJsb2NrVUkoKSwkKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITF9fSxfdGlkeURpYWxvZzpmdW5jdGlvbihhKXthLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24oYSl7aWYoISQuZGF0ZXBpY2tlci5fY3VySW5zdClyZXR1cm47dmFyIGI9JChhLnRhcmdldCksYz0kLmRhdGVwaWNrZXIuX2dldEluc3QoYlswXSk7KGJbMF0uaWQhPSQuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiZiLnBhcmVudHMoIiMiKyQuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGg9PTAmJiFiLmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhYi5jbG9zZXN0KCIuIiskLmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykubGVuZ3RoJiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYoISQuZGF0ZXBpY2tlci5faW5EaWFsb2d8fCEkLmJsb2NrVUkpfHxiLmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYkLmRhdGVwaWNrZXIuX2N1ckluc3QhPWMpJiYkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0kKGEpLGU9dGhpcy5fZ2V0SW5zdChkWzBdKTtpZih0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihkWzBdKSlyZXR1cm47dGhpcy5fYWRqdXN0SW5zdERhdGUoZSxiKyhjPT0iTSI/dGhpcy5fZ2V0KGUsInNob3dDdXJyZW50QXRQb3MiKTowKSxjKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGUpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKGEpe3ZhciBiPSQoYSksYz10aGlzLl9nZXRJbnN0KGJbMF0pO2lmKHRoaXMuX2dldChjLCJnb3RvQ3VycmVudCIpJiZjLmN1cnJlbnREYXkpYy5zZWxlY3RlZERheT1jLmN1cnJlbnREYXksYy5kcmF3TW9udGg9Yy5zZWxlY3RlZE1vbnRoPWMuY3VycmVudE1vbnRoLGMuZHJhd1llYXI9Yy5zZWxlY3RlZFllYXI9Yy5jdXJyZW50WWVhcjtlbHNle3ZhciBkPW5ldyBEYXRlO2Muc2VsZWN0ZWREYXk9ZC5nZXREYXRlKCksYy5kcmF3TW9udGg9Yy5zZWxlY3RlZE1vbnRoPWQuZ2V0TW9udGgoKSxjLmRyYXdZZWFyPWMuc2VsZWN0ZWRZZWFyPWQuZ2V0RnVsbFllYXIoKX10aGlzLl9ub3RpZnlDaGFuZ2UoYyksdGhpcy5fYWRqdXN0RGF0ZShiKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9JChhKSxlPXRoaXMuX2dldEluc3QoZFswXSk7ZVsic2VsZWN0ZWQiKyhjPT0iTSI/Ik1vbnRoIjoiWWVhciIpXT1lWyJkcmF3IisoYz09Ik0iPyJNb250aCI6IlllYXIiKV09cGFyc2VJbnQoYi5vcHRpb25zW2Iuc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShlKSx0aGlzLl9hZGp1c3REYXRlKGQpfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSQoYSk7aWYoJChkKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKGVbMF0pKXJldHVybjt2YXIgZj10aGlzLl9nZXRJbnN0KGVbMF0pO2Yuc2VsZWN0ZWREYXk9Zi5jdXJyZW50RGF5PSQoImEiLGQpLmh0bWwoKSxmLnNlbGVjdGVkTW9udGg9Zi5jdXJyZW50TW9udGg9YixmLnNlbGVjdGVkWWVhcj1mLmN1cnJlbnRZZWFyPWMsdGhpcy5fc2VsZWN0RGF0ZShhLHRoaXMuX2Zvcm1hdERhdGUoZixmLmN1cnJlbnREYXksZi5jdXJyZW50TW9udGgsZi5jdXJyZW50WWVhcikpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPSQoYSksYz10aGlzLl9nZXRJbnN0KGJbMF0pO3RoaXMuX3NlbGVjdERhdGUoYiwiIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGEsYil7dmFyIGM9JChhKSxkPXRoaXMuX2dldEluc3QoY1swXSk7Yj1iIT1udWxsP2I6dGhpcy5fZm9ybWF0RGF0ZShkKSxkLmlucHV0JiZkLmlucHV0LnZhbChiKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoZCk7dmFyIGU9dGhpcy5fZ2V0KGQsIm9uU2VsZWN0Iik7ZT9lLmFwcGx5KGQuaW5wdXQ/ZC5pbnB1dFswXTpudWxsLFtiLGRdKTpkLmlucHV0JiZkLmlucHV0LnRyaWdnZXIoImNoYW5nZSIpLGQuaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZCk6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PWQuaW5wdXRbMF0sdHlwZW9mIGQuaW5wdXRbMF0hPSJvYmplY3QiJiZkLmlucHV0LmZvY3VzKCksdGhpcy5fbGFzdElucHV0PW51bGwpfSxfdXBkYXRlQWx0ZXJuYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJhbHRGaWVsZCIpO2lmKGIpe3ZhciBjPXRoaXMuX2dldChhLCJhbHRGb3JtYXQiKXx8dGhpcy5fZ2V0KGEsImRhdGVGb3JtYXQiKSxkPXRoaXMuX2dldERhdGUoYSksZT10aGlzLmZvcm1hdERhdGUoYyxkLHRoaXMuX2dldEZvcm1hdENvbmZpZyhhKSk7JChiKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS52YWwoZSl9KX19LG5vV2Vla2VuZHM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXREYXkoKTtyZXR1cm5bYj4wJiZiPDYsIiJdfSxpc284NjAxV2VlazpmdW5jdGlvbihhKXt2YXIgYj1uZXcgRGF0ZShhLmdldFRpbWUoKSk7Yi5zZXREYXRlKGIuZ2V0RGF0ZSgpKzQtKGIuZ2V0RGF5KCl8fDcpKTt2YXIgYz1iLmdldFRpbWUoKTtyZXR1cm4gYi5zZXRNb250aCgwKSxiLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChjLWIpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PW51bGx8fGI9PW51bGwpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO2I9dHlwZW9mIGI9PSJvYmplY3QiP2IudG9TdHJpbmcoKTpiKyIiO2lmKGI9PSIiKXJldHVybiBudWxsO3ZhciBkPShjP2Muc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmY7ZD10eXBlb2YgZCE9InN0cmluZyI/ZDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGQsMTApO3ZhciBlPShjP2MuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxmPShjP2MuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGc9KGM/Yy5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxoPShjP2MubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxpPS0xLGo9LTEsaz0tMSxsPS0xLG09ITEsbj1mdW5jdGlvbihiKXt2YXIgYz1zKzE8YS5sZW5ndGgmJmEuY2hhckF0KHMrMSk9PWI7cmV0dXJuIGMmJnMrKyxjfSxvPWZ1bmN0aW9uKGEpe3ZhciBjPW4oYSksZD1hPT0iQCI/MTQ6YT09IiEiPzIwOmE9PSJ5IiYmYz80OmE9PSJvIj8zOjIsZT1uZXcgUmVnRXhwKCJeXFxkezEsIitkKyJ9IiksZj1iLnN1YnN0cmluZyhyKS5tYXRjaChlKTtpZighZil0aHJvdyJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiAiK3I7cmV0dXJuIHIrPWZbMF0ubGVuZ3RoLHBhcnNlSW50KGZbMF0sMTApfSxwPWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT0kLm1hcChuKGEpP2Q6YyxmdW5jdGlvbihhLGIpe3JldHVybltbYixhXV19KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuLShhWzFdLmxlbmd0aC1iWzFdLmxlbmd0aCl9KSxmPS0xOyQuZWFjaChlLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Y1sxXTtpZihiLnN1YnN0cihyLGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT1kLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGY9Y1swXSxyKz1kLmxlbmd0aCwhMX0pO2lmKGYhPS0xKXJldHVybiBmKzE7dGhyb3ciVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uICIrcn0scT1mdW5jdGlvbigpe2lmKGIuY2hhckF0KHIpIT1hLmNoYXJBdChzKSl0aHJvdyJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gIityO3IrK30scj0wO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKWlmKG0pYS5jaGFyQXQocyk9PSInIiYmIW4oIiciKT9tPSExOnEoKTtlbHNlIHN3aXRjaChhLmNoYXJBdChzKSl7Y2FzZSJkIjprPW8oImQiKTticmVhaztjYXNlIkQiOnAoIkQiLGUsZik7YnJlYWs7Y2FzZSJvIjpsPW8oIm8iKTticmVhaztjYXNlIm0iOmo9bygibSIpO2JyZWFrO2Nhc2UiTSI6aj1wKCJNIixnLGgpO2JyZWFrO2Nhc2UieSI6aT1vKCJ5Iik7YnJlYWs7Y2FzZSJAIjp2YXIgdD1uZXcgRGF0ZShvKCJAIikpO2k9dC5nZXRGdWxsWWVhcigpLGo9dC5nZXRNb250aCgpKzEsaz10LmdldERhdGUoKTticmVhaztjYXNlIiEiOnZhciB0PW5ldyBEYXRlKChvKCIhIiktdGhpcy5fdGlja3NUbzE5NzApLzFlNCk7aT10LmdldEZ1bGxZZWFyKCksaj10LmdldE1vbnRoKCkrMSxrPXQuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiJyI6bigiJyIpP3EoKTptPSEwO2JyZWFrO2RlZmF1bHQ6cSgpfWlmKHI8Yi5sZW5ndGgpdGhyb3ciRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiAiK2Iuc3Vic3RyaW5nKHIpO2k9PS0xP2k9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpOmk8MTAwJiYoaSs9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArKGk8PWQ/MDotMTAwKSk7aWYobD4tMSl7aj0xLGs9bDtkb3t2YXIgdT10aGlzLl9nZXREYXlzSW5Nb250aChpLGotMSk7aWYoazw9dSlicmVhaztqKyssay09dX13aGlsZSghMCl9dmFyIHQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxqLTEsaykpO2lmKHQuZ2V0RnVsbFllYXIoKSE9aXx8dC5nZXRNb250aCgpKzEhPWp8fHQuZ2V0RGF0ZSgpIT1rKXRocm93IkludmFsaWQgZGF0ZSI7cmV0dXJuIHR9LEFUT006Inl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXkiLElTT184NjAxOiJ5eS1tbS1kZCIsUkZDXzgyMjoiRCwgZCBNIHkiLFJGQ184NTA6IkRELCBkZC1NLXkiLFJGQ18xMDM2OiJELCBkIE0geSIsUkZDXzExMjM6IkQsIGQgTSB5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eSIsUlNTOiJELCBkIE0geSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eS1tbS1kZCIsX3RpY2tzVG8xOTcwOig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSkqMjQqNjAqNjAqMWU3LGZvcm1hdERhdGU6ZnVuY3Rpb24oYSxiLGMpe2lmKCFiKXJldHVybiIiO3ZhciBkPShjP2MuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxlPShjP2MuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGY9KGM/Yy5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxnPShjP2MubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKGIpe3ZhciBjPW0rMTxhLmxlbmd0aCYmYS5jaGFyQXQobSsxKT09YjtyZXR1cm4gYyYmbSsrLGN9LGk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIiK2I7aWYoaChhKSl3aGlsZShkLmxlbmd0aDxjKWQ9IjAiK2Q7cmV0dXJuIGR9LGo9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGgoYSk/ZFtiXTpjW2JdfSxrPSIiLGw9ITE7aWYoYilmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKylpZihsKWEuY2hhckF0KG0pPT0iJyImJiFoKCInIik/bD0hMTprKz1hLmNoYXJBdChtKTtlbHNlIHN3aXRjaChhLmNoYXJBdChtKSl7Y2FzZSJkIjprKz1pKCJkIixiLmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmsrPWooIkQiLGIuZ2V0RGF5KCksZCxlKTticmVhaztjYXNlIm8iOmsrPWkoIm8iLE1hdGgucm91bmQoKChuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSkuZ2V0VGltZSgpLShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksMCwwKSkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZSJtIjprKz1pKCJtIixiLmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlIk0iOmsrPWooIk0iLGIuZ2V0TW9udGgoKSxmLGcpO2JyZWFrO2Nhc2UieSI6ays9aCgieSIpP2IuZ2V0RnVsbFllYXIoKTooYi5nZXRZZWFyKCklMTAwPDEwPyIwIjoiIikrYi5nZXRZZWFyKCklMTAwO2JyZWFrO2Nhc2UiQCI6ays9Yi5nZXRUaW1lKCk7YnJlYWs7Y2FzZSIhIjprKz1iLmdldFRpbWUoKSoxZTQrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZSInIjpoKCInIik/ays9IiciOmw9ITA7YnJlYWs7ZGVmYXVsdDprKz1hLmNoYXJBdChtKX1yZXR1cm4ga30sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24oYSl7dmFyIGI9IiIsYz0hMSxkPWZ1bmN0aW9uKGIpe3ZhciBjPWUrMTxhLmxlbmd0aCYmYS5jaGFyQXQoZSsxKT09YjtyZXR1cm4gYyYmZSsrLGN9O2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKWlmKGMpYS5jaGFyQXQoZSk9PSInIiYmIWQoIiciKT9jPSExOmIrPWEuY2hhckF0KGUpO2Vsc2Ugc3dpdGNoKGEuY2hhckF0KGUpKXtjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlIkAiOmIrPSIwMTIzNDU2Nzg5IjticmVhaztjYXNlIkQiOmNhc2UiTSI6cmV0dXJuIG51bGw7Y2FzZSInIjpkKCInIik/Yis9IiciOmM9ITA7YnJlYWs7ZGVmYXVsdDpiKz1hLmNoYXJBdChlKX1yZXR1cm4gYn0sX2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnNldHRpbmdzW2JdIT09dW5kZWZpbmVkP2Euc2V0dGluZ3NbYl06dGhpcy5fZGVmYXVsdHNbYl19LF9zZXREYXRlRnJvbUZpZWxkOmZ1bmN0aW9uKGEsYil7aWYoYS5pbnB1dC52YWwoKT09YS5sYXN0VmFsKXJldHVybjt2YXIgYz10aGlzLl9nZXQoYSwiZGF0ZUZvcm1hdCIpLGQ9YS5sYXN0VmFsPWEuaW5wdXQ/YS5pbnB1dC52YWwoKTpudWxsLGUsZjtlPWY9dGhpcy5fZ2V0RGVmYXVsdERhdGUoYSk7dmFyIGc9dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGEpO3RyeXtlPXRoaXMucGFyc2VEYXRlKGMsZCxnKXx8Zn1jYXRjaChoKXt0aGlzLmxvZyhoKSxkPWI/IiI6ZH1hLnNlbGVjdGVkRGF5PWUuZ2V0RGF0ZSgpLGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1lLmdldE1vbnRoKCksYS5kcmF3WWVhcj1hLnNlbGVjdGVkWWVhcj1lLmdldEZ1bGxZZWFyKCksYS5jdXJyZW50RGF5PWQ/ZS5nZXREYXRlKCk6MCxhLmN1cnJlbnRNb250aD1kP2UuZ2V0TW9udGgoKTowLGEuY3VycmVudFllYXI9ZD9lLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZShhKX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChhLHRoaXMuX2RldGVybWluZURhdGUoYSx0aGlzLl9nZXQoYSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERhdGU7cmV0dXJuIGIuc2V0RGF0ZShiLmdldERhdGUoKSthKSxifSxlPWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldChhLCJkYXRlRm9ybWF0IiksYiwkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhhKSl9Y2F0Y2goYyl7fXZhciBkPShiLnRvTG93ZXJDYXNlKCkubWF0Y2goL15jLyk/JC5kYXRlcGlja2VyLl9nZXREYXRlKGEpOm51bGwpfHxuZXcgRGF0ZSxlPWQuZ2V0RnVsbFllYXIoKSxmPWQuZ2V0TW9udGgoKSxnPWQuZ2V0RGF0ZSgpLGg9LyhbKy1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxpPWguZXhlYyhiKTt3aGlsZShpKXtzd2l0Y2goaVsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6Zys9cGFyc2VJbnQoaVsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOmcrPXBhcnNlSW50KGlbMV0sMTApKjc7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOmYrPXBhcnNlSW50KGlbMV0sMTApLGc9TWF0aC5taW4oZywkLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGUsZikpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjplKz1wYXJzZUludChpWzFdLDEwKSxnPU1hdGgubWluKGcsJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChlLGYpKX1pPWguZXhlYyhiKX1yZXR1cm4gbmV3IERhdGUoZSxmLGcpfSxmPWI9PW51bGx8fGI9PT0iIj9jOnR5cGVvZiBiPT0ic3RyaW5nIj9lKGIpOnR5cGVvZiBiPT0ibnVtYmVyIj9pc05hTihiKT9jOmQoYik6bmV3IERhdGUoYi5nZXRUaW1lKCkpO3JldHVybiBmPWYmJmYudG9TdHJpbmcoKT09IkludmFsaWQgRGF0ZSI/YzpmLGYmJihmLnNldEhvdXJzKDApLGYuc2V0TWludXRlcygwKSxmLnNldFNlY29uZHMoMCksZi5zZXRNaWxsaXNlY29uZHMoMCkpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGYpfSxfZGF5bGlnaHRTYXZpbmdBZGp1c3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGEuc2V0SG91cnMoYS5nZXRIb3VycygpPjEyP2EuZ2V0SG91cnMoKSsyOjApLGEpOm51bGx9LF9zZXREYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0hYixlPWEuc2VsZWN0ZWRNb250aCxmPWEuc2VsZWN0ZWRZZWFyLGc9dGhpcy5fcmVzdHJpY3RNaW5NYXgoYSx0aGlzLl9kZXRlcm1pbmVEYXRlKGEsYixuZXcgRGF0ZSkpO2Euc2VsZWN0ZWREYXk9YS5jdXJyZW50RGF5PWcuZ2V0RGF0ZSgpLGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1hLmN1cnJlbnRNb250aD1nLmdldE1vbnRoKCksYS5kcmF3WWVhcj1hLnNlbGVjdGVkWWVhcj1hLmN1cnJlbnRZZWFyPWcuZ2V0RnVsbFllYXIoKSwoZSE9YS5zZWxlY3RlZE1vbnRofHxmIT1hLnNlbGVjdGVkWWVhcikmJiFjJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoYSksdGhpcy5fYWRqdXN0SW5zdERhdGUoYSksYS5pbnB1dCYmYS5pbnB1dC52YWwoZD8iIjp0aGlzLl9mb3JtYXREYXRlKGEpKX0sX2dldERhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9IWEuY3VycmVudFllYXJ8fGEuaW5wdXQmJmEuaW5wdXQudmFsKCk9PSIiP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYS5jdXJyZW50WWVhcixhLmN1cnJlbnRNb250aCxhLmN1cnJlbnREYXkpKTtyZXR1cm4gYn0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJzdGVwTW9udGhzIiksYz0iIyIrYS5pZC5yZXBsYWNlKC9cXFxcL2csIlxcIik7YS5kcERpdi5maW5kKCJbZGF0YS1oYW5kbGVyXSIpLm1hcChmdW5jdGlvbigpe3ZhciBhPXtwcmV2OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYywtYiwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoYywrYiwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShjKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3REYXkoYywrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKGMsdGhpcywiTSIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoYyx0aGlzLCJZIiksITF9fTskKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSxhW3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERhdGU7Yj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpLGIuZ2V0RGF0ZSgpKSk7dmFyIGM9dGhpcy5fZ2V0KGEsImlzUlRMIiksZD10aGlzLl9nZXQoYSwic2hvd0J1dHRvblBhbmVsIiksZT10aGlzLl9nZXQoYSwiaGlkZUlmTm9QcmV2TmV4dCIpLGY9dGhpcy5fZ2V0KGEsIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiKSxnPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGEpLGg9dGhpcy5fZ2V0KGEsInNob3dDdXJyZW50QXRQb3MiKSxpPXRoaXMuX2dldChhLCJzdGVwTW9udGhzIiksaj1nWzBdIT0xfHxnWzFdIT0xLGs9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoYS5jdXJyZW50RGF5P25ldyBEYXRlKGEuY3VycmVudFllYXIsYS5jdXJyZW50TW9udGgsYS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLGw9dGhpcy5fZ2V0TWluTWF4RGF0ZShhLCJtaW4iKSxtPXRoaXMuX2dldE1pbk1heERhdGUoYSwibWF4Iiksbj1hLmRyYXdNb250aC1oLG89YS5kcmF3WWVhcjtuPDAmJihuKz0xMixvLS0pO2lmKG0pe3ZhciBwPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0uZ2V0RnVsbFllYXIoKSxtLmdldE1vbnRoKCktZ1swXSpnWzFdKzEsbS5nZXREYXRlKCkpKTtwPWwmJnA8bD9sOnA7d2hpbGUodGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobyxuLDEpKT5wKW4tLSxuPDAmJihuPTExLG8tLSl9YS5kcmF3TW9udGg9bixhLmRyYXdZZWFyPW87dmFyIHE9dGhpcy5fZ2V0KGEsInByZXZUZXh0Iik7cT1mP3RoaXMuZm9ybWF0RGF0ZShxLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG8sbi1pLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoYSkpOnE7dmFyIHI9dGhpcy5fY2FuQWRqdXN0TW9udGgoYSwtMSxvLG4pPyc8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0icHJldiIgZGF0YS1ldmVudD0iY2xpY2siIHRpdGxlPSInK3ErJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8iZSI6InciKSsnIj4nK3ErIjwvc3Bhbj48L2E+IjplPyIiOic8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQiIHRpdGxlPSInK3ErJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8iZSI6InciKSsnIj4nK3ErIjwvc3Bhbj48L2E+IixzPXRoaXMuX2dldChhLCJuZXh0VGV4dCIpO3M9Zj90aGlzLmZvcm1hdERhdGUocyx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShvLG4raSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGEpKTpzO3ZhciB0PXRoaXMuX2NhbkFkanVzdE1vbnRoKGEsMSxvLG4pPyc8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0ibmV4dCIgZGF0YS1ldmVudD0iY2xpY2siIHRpdGxlPSInK3MrJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8idyI6ImUiKSsnIj4nK3MrIjwvc3Bhbj48L2E+IjplPyIiOic8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQiIHRpdGxlPSInK3MrJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysoYz8idyI6ImUiKSsnIj4nK3MrIjwvc3Bhbj48L2E+Iix1PXRoaXMuX2dldChhLCJjdXJyZW50VGV4dCIpLHY9dGhpcy5fZ2V0KGEsImdvdG9DdXJyZW50IikmJmEuY3VycmVudERheT9rOmI7dT1mP3RoaXMuZm9ybWF0RGF0ZSh1LHYsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGEpKTp1O3ZhciB3PWEuaW5saW5lPyIiOic8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0iaGlkZSIgZGF0YS1ldmVudD0iY2xpY2siPicrdGhpcy5fZ2V0KGEsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLHg9ZD8nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Ij4nKyhjP3c6IiIpKyh0aGlzLl9pc0luUmFuZ2UoYSx2KT8nPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJ0b2RheSIgZGF0YS1ldmVudD0iY2xpY2siPicrdSsiPC9idXR0b24+IjoiIikrKGM/IiI6dykrIjwvZGl2PiI6IiIseT1wYXJzZUludCh0aGlzLl9nZXQoYSwiZmlyc3REYXkiKSwxMCk7eT1pc05hTih5KT8wOnk7dmFyIHo9dGhpcy5fZ2V0KGEsInNob3dXZWVrIiksQT10aGlzLl9nZXQoYSwiZGF5TmFtZXMiKSxCPXRoaXMuX2dldChhLCJkYXlOYW1lc1Nob3J0IiksQz10aGlzLl9nZXQoYSwiZGF5TmFtZXNNaW4iKSxEPXRoaXMuX2dldChhLCJtb250aE5hbWVzIiksRT10aGlzLl9nZXQoYSwibW9udGhOYW1lc1Nob3J0IiksRj10aGlzLl9nZXQoYSwiYmVmb3JlU2hvd0RheSIpLEc9dGhpcy5fZ2V0KGEsInNob3dPdGhlck1vbnRocyIpLEg9dGhpcy5fZ2V0KGEsInNlbGVjdE90aGVyTW9udGhzIiksST10aGlzLl9nZXQoYSwiY2FsY3VsYXRlV2VlayIpfHx0aGlzLmlzbzg2MDFXZWVrLEo9dGhpcy5fZ2V0RGVmYXVsdERhdGUoYSksSz0iIjtmb3IodmFyIEw9MDtMPGdbMF07TCsrKXt2YXIgTT0iIjt0aGlzLm1heFJvd3M9NDtmb3IodmFyIE49MDtOPGdbMV07TisrKXt2YXIgTz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShvLG4sYS5zZWxlY3RlZERheSkpLFA9IiB1aS1jb3JuZXItYWxsIixRPSIiO2lmKGope1ErPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLWdyb3VwJztpZihnWzFdPjEpc3dpdGNoKE4pe2Nhc2UgMDpRKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLFA9IiB1aS1jb3JuZXItIisoYz8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBnWzFdLTE6USs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLFA9IiB1aS1jb3JuZXItIisoYz8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDpRKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixQPSIifVErPSciPid9USs9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4JytQKyciPicrKC9hbGx8bGVmdC8udGVzdChQKSYmTD09MD9jP3Q6cjoiIikrKC9hbGx8cmlnaHQvLnRlc3QoUCkmJkw9PTA/Yz9yOnQ6IiIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKGEsbixvLGwsbSxMPjB8fE4+MCxELEUpKyc8L2Rpdj48dGFibGUgY2xhc3M9InVpLWRhdGVwaWNrZXItY2FsZW5kYXIiPjx0aGVhZD4nKyI8dHI+Ijt2YXIgUj16Pyc8dGggY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1jb2wiPicrdGhpcy5fZ2V0KGEsIndlZWtIZWFkZXIiKSsiPC90aD4iOiIiO2Zvcih2YXIgUz0wO1M8NztTKyspe3ZhciBUPShTK3kpJTc7Uis9Ijx0aCIrKChTK3krNiklNz49NT8nIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXdlZWstZW5kIic6IiIpKyI+IisnPHNwYW4gdGl0bGU9IicrQVtUXSsnIj4nK0NbVF0rIjwvc3Bhbj48L3RoPiJ9USs9UisiPC90cj48L3RoZWFkPjx0Ym9keT4iO3ZhciBVPXRoaXMuX2dldERheXNJbk1vbnRoKG8sbik7bz09YS5zZWxlY3RlZFllYXImJm49PWEuc2VsZWN0ZWRNb250aCYmKGEuc2VsZWN0ZWREYXk9TWF0aC5taW4oYS5zZWxlY3RlZERheSxVKSk7dmFyIFY9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChvLG4pLXkrNyklNyxXPU1hdGguY2VpbCgoVitVKS83KSxYPWo/dGhpcy5tYXhSb3dzPlc/dGhpcy5tYXhSb3dzOlc6Vzt0aGlzLm1heFJvd3M9WDt2YXIgWT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShvLG4sMS1WKSk7Zm9yKHZhciBaPTA7WjxYO1orKyl7USs9Ijx0cj4iO3ZhciBfPXo/Jzx0ZCBjbGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWNvbCI+Jyt0aGlzLl9nZXQoYSwiY2FsY3VsYXRlV2VlayIpKFkpKyI8L3RkPiI6IiI7Zm9yKHZhciBTPTA7Uzw3O1MrKyl7dmFyIGJhPUY/Ri5hcHBseShhLmlucHV0P2EuaW5wdXRbMF06bnVsbCxbWV0pOlshMCwiIl0sYmI9WS5nZXRNb250aCgpIT1uLGJjPWJiJiYhSHx8IWJhWzBdfHxsJiZZPGx8fG0mJlk+bTtfKz0nPHRkIGNsYXNzPSInKygoUyt5KzYpJTc+PTU/IiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIjoiIikrKGJiPyIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCI6IiIpKyhZLmdldFRpbWUoKT09Ty5nZXRUaW1lKCkmJm49PWEuc2VsZWN0ZWRNb250aCYmYS5fa2V5RXZlbnR8fEouZ2V0VGltZSgpPT1ZLmdldFRpbWUoKSYmSi5nZXRUaW1lKCk9PU8uZ2V0VGltZSgpPyIgIit0aGlzLl9kYXlPdmVyQ2xhc3M6IiIpKyhiYz8iICIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrIiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpKyhiYiYmIUc/IiI6IiAiK2JhWzFdKyhZLmdldFRpbWUoKT09ay5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKFkuZ2V0VGltZSgpPT1iLmdldFRpbWUoKT8iIHVpLWRhdGVwaWNrZXItdG9kYXkiOiIiKSkrJyInKygoIWJifHxHKSYmYmFbMl0/JyB0aXRsZT0iJytiYVsyXSsnIic6IiIpKyhiYz8iIjonIGRhdGEtaGFuZGxlcj0ic2VsZWN0RGF5IiBkYXRhLWV2ZW50PSJjbGljayIgZGF0YS1tb250aD0iJytZLmdldE1vbnRoKCkrJyIgZGF0YS15ZWFyPSInK1kuZ2V0RnVsbFllYXIoKSsnIicpKyI+IisoYmImJiFHPyImI3hhMDsiOmJjPyc8c3BhbiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCI+JytZLmdldERhdGUoKSsiPC9zcGFuPiI6JzxhIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0JysoWS5nZXRUaW1lKCk9PWIuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKFkuZ2V0VGltZSgpPT1rLmdldFRpbWUoKT8iIHVpLXN0YXRlLWFjdGl2ZSI6IiIpKyhiYj8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyciIGhyZWY9IiMiPicrWS5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLFkuc2V0RGF0ZShZLmdldERhdGUoKSsxKSxZPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KFkpfVErPV8rIjwvdHI+In1uKyssbj4xMSYmKG49MCxvKyspLFErPSI8L3Rib2R5PjwvdGFibGU+Iisoaj8iPC9kaXY+IisoZ1swXT4wJiZOPT1nWzFdLTE/JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItcm93LWJyZWFrIj48L2Rpdj4nOiIiKToiIiksTSs9UX1LKz1NfXJldHVybiBLKz14KygkLmJyb3dzZXIubXNpZSYmcGFyc2VJbnQoJC5icm93c2VyLnZlcnNpb24sMTApPDcmJiFhLmlubGluZT8nPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IiBjbGFzcz0idWktZGF0ZXBpY2tlci1jb3ZlciIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPic6IiIpLGEuX2tleUV2ZW50PSExLEt9LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMuX2dldChhLCJjaGFuZ2VNb250aCIpLGo9dGhpcy5fZ2V0KGEsImNoYW5nZVllYXIiKSxrPXRoaXMuX2dldChhLCJzaG93TW9udGhBZnRlclllYXIiKSxsPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXRpdGxlIj4nLG09IiI7aWYoZnx8IWkpbSs9JzxzcGFuIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW1vbnRoIj4nK2dbYl0rIjwvc3Bhbj4iO2Vsc2V7dmFyIG49ZCYmZC5nZXRGdWxsWWVhcigpPT1jLG89ZSYmZS5nZXRGdWxsWWVhcigpPT1jO20rPSc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlja2VyLW1vbnRoIiBkYXRhLWhhbmRsZXI9InNlbGVjdE1vbnRoIiBkYXRhLWV2ZW50PSJjaGFuZ2UiPic7Zm9yKHZhciBwPTA7cDwxMjtwKyspKCFufHxwPj1kLmdldE1vbnRoKCkpJiYoIW98fHA8PWUuZ2V0TW9udGgoKSkmJihtKz0nPG9wdGlvbiB2YWx1ZT0iJytwKyciJysocD09Yj8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIraFtwXSsiPC9vcHRpb24+Iik7bSs9Ijwvc2VsZWN0PiJ9a3x8KGwrPW0rKGZ8fCFpfHwhaj8iJiN4YTA7IjoiIikpO2lmKCFhLnllYXJzaHRtbCl7YS55ZWFyc2h0bWw9IiI7aWYoZnx8IWopbCs9JzxzcGFuIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiPicrYysiPC9zcGFuPiI7ZWxzZXt2YXIgcT10aGlzLl9nZXQoYSwieWVhclJhbmdlIikuc3BsaXQoIjoiKSxyPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxzPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goL2NbKy1dLiovKT9jK3BhcnNlSW50KGEuc3Vic3RyaW5nKDEpLDEwKTphLm1hdGNoKC9bKy1dLiovKT9yK3BhcnNlSW50KGEsMTApOnBhcnNlSW50KGEsMTApO3JldHVybiBpc05hTihiKT9yOmJ9LHQ9cyhxWzBdKSx1PU1hdGgubWF4KHQscyhxWzFdfHwiIikpO3Q9ZD9NYXRoLm1heCh0LGQuZ2V0RnVsbFllYXIoKSk6dCx1PWU/TWF0aC5taW4odSxlLmdldEZ1bGxZZWFyKCkpOnUsYS55ZWFyc2h0bWwrPSc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiIGRhdGEtaGFuZGxlcj0ic2VsZWN0WWVhciIgZGF0YS1ldmVudD0iY2hhbmdlIj4nO2Zvcig7dDw9dTt0KyspYS55ZWFyc2h0bWwrPSc8b3B0aW9uIHZhbHVlPSInK3QrJyInKyh0PT1jPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit0KyI8L29wdGlvbj4iO2EueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixsKz1hLnllYXJzaHRtbCxhLnllYXJzaHRtbD1udWxsfX1yZXR1cm4gbCs9dGhpcy5fZ2V0KGEsInllYXJTdWZmaXgiKSxrJiYobCs9KGZ8fCFpfHwhaj8iJiN4YTA7IjoiIikrbSksbCs9IjwvZGl2PiIsbH0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmRyYXdZZWFyKyhjPT0iWSI/YjowKSxlPWEuZHJhd01vbnRoKyhjPT0iTSI/YjowKSxmPU1hdGgubWluKGEuc2VsZWN0ZWREYXksdGhpcy5fZ2V0RGF5c0luTW9udGgoZCxlKSkrKGM9PSJEIj9iOjApLGc9dGhpcy5fcmVzdHJpY3RNaW5NYXgoYSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLGUsZikpKTthLnNlbGVjdGVkRGF5PWcuZ2V0RGF0ZSgpLGEuZHJhd01vbnRoPWEuc2VsZWN0ZWRNb250aD1nLmdldE1vbnRoKCksYS5kcmF3WWVhcj1hLnNlbGVjdGVkWWVhcj1nLmdldEZ1bGxZZWFyKCksKGM9PSJNInx8Yz09IlkiKSYmdGhpcy5fbm90aWZ5Q2hhbmdlKGEpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9nZXRNaW5NYXhEYXRlKGEsIm1pbiIpLGQ9dGhpcy5fZ2V0TWluTWF4RGF0ZShhLCJtYXgiKSxlPWMmJmI8Yz9jOmI7cmV0dXJuIGU9ZCYmZT5kP2Q6ZSxlfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJvbkNoYW5nZU1vbnRoWWVhciIpO2ImJmIuYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW2Euc2VsZWN0ZWRZZWFyLGEuc2VsZWN0ZWRNb250aCsxLGFdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJudW1iZXJPZk1vbnRocyIpO3JldHVybiBiPT1udWxsP1sxLDFdOnR5cGVvZiBiPT0ibnVtYmVyIj9bMSxiXTpifSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGEsdGhpcy5fZ2V0KGEsYisiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYSxiLDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuKG5ldyBEYXRlKGEsYiwxKSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhhKSxmPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGMsZCsoYjwwP2I6ZVswXSplWzFdKSwxKSk7cmV0dXJuIGI8MCYmZi5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKGYuZ2V0RnVsbFllYXIoKSxmLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoYSxmKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2dldE1pbk1heERhdGUoYSwibWluIiksZD10aGlzLl9nZXRNaW5NYXhEYXRlKGEsIm1heCIpO3JldHVybighY3x8Yi5nZXRUaW1lKCk+PWMuZ2V0VGltZSgpKSYmKCFkfHxiLmdldFRpbWUoKTw9ZC5nZXRUaW1lKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldChhLCJzaG9ydFllYXJDdXRvZmYiKTtyZXR1cm4gYj10eXBlb2YgYiE9InN0cmluZyI/YjoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGIsMTApLHtzaG9ydFllYXJDdXRvZmY6YixkYXlOYW1lc1Nob3J0OnRoaXMuX2dldChhLCJkYXlOYW1lc1Nob3J0IiksZGF5TmFtZXM6dGhpcy5fZ2V0KGEsImRheU5hbWVzIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldChhLCJtb250aE5hbWVzU2hvcnQiKSxtb250aE5hbWVzOnRoaXMuX2dldChhLCJtb250aE5hbWVzIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbihhLGIsYyxkKXtifHwoYS5jdXJyZW50RGF5PWEuc2VsZWN0ZWREYXksYS5jdXJyZW50TW9udGg9YS5zZWxlY3RlZE1vbnRoLGEuY3VycmVudFllYXI9YS5zZWxlY3RlZFllYXIpO3ZhciBlPWI/dHlwZW9mIGI9PSJvYmplY3QiP2I6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxjLGIpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShhLmN1cnJlbnRZZWFyLGEuY3VycmVudE1vbnRoLGEuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KGEsImRhdGVGb3JtYXQiKSxlLHRoaXMuX2dldEZvcm1hdENvbmZpZyhhKSl9fSksJC5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczskLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fCgkKGRvY3VtZW50KS5tb3VzZWRvd24oJC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLmZpbmQoImJvZHkiKS5hcHBlbmQoJC5kYXRlcGlja2VyLmRwRGl2KSwkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApO3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmcifHxhIT0iaXNEaXNhYmxlZCImJmEhPSJnZXREYXRlIiYmYSE9IndpZGdldCI/YT09Im9wdGlvbiImJmFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiBhcmd1bWVudHNbMV09PSJzdHJpbmciPyQuZGF0ZXBpY2tlclsiXyIrYSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGIpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0eXBlb2YgYT09InN0cmluZyI/JC5kYXRlcGlja2VyWyJfIithKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoYikpOiQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGEpfSk6JC5kYXRlcGlja2VyWyJfIithKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoYikpfSwkLmRhdGVwaWNrZXI9bmV3IERhdGVwaWNrZXIsJC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLCQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCQuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjguMjQiLHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXT0kfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9InVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCAiLGQ9e2J1dHRvbnM6ITAsaGVpZ2h0OiEwLG1heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITAsd2lkdGg6ITB9LGU9e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9O2Eud2lkZ2V0KCJ1aS5kaWFsb2ciLHtvcHRpb25zOnthdXRvT3BlbjohMCxidXR0b25zOnt9LGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJjbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDohMSxtYXhXaWR0aDohMSxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6ImNlbnRlciIsYXQ6ImNlbnRlciIsY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKGIpe3ZhciBjPWEodGhpcykuY3NzKGIpLm9mZnNldCgpLnRvcDtjPDAmJmEodGhpcykuY3NzKCJ0b3AiLGIudG9wLWMpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCxzdGFjazohMCx0aXRsZToiIix3aWR0aDozMDAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0eXBlb2YgdGhpcy5vcmlnaW5hbFRpdGxlIT0ic3RyaW5nIiYmKHRoaXMub3JpZ2luYWxUaXRsZT0iIiksdGhpcy5vcHRpb25zLnRpdGxlPXRoaXMub3B0aW9ucy50aXRsZXx8dGhpcy5vcmlnaW5hbFRpdGxlO3ZhciBiPXRoaXMsZD1iLm9wdGlvbnMsZT1kLnRpdGxlfHwiJiMxNjA7IixmPWEudWkuZGlhbG9nLmdldFRpdGxlSWQoYi5lbGVtZW50KSxnPShiLnVpRGlhbG9nPWEoIjxkaXY+PC9kaXY+IikpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmhpZGUoKS5hZGRDbGFzcyhjK2QuZGlhbG9nQ2xhc3MpLmNzcyh7ekluZGV4OmQuekluZGV4fSkuYXR0cigidGFiSW5kZXgiLC0xKS5jc3MoIm91dGxpbmUiLDApLmtleWRvd24oZnVuY3Rpb24oYyl7ZC5jbG9zZU9uRXNjYXBlJiYhYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5rZXlDb2RlJiZjLmtleUNvZGU9PT1hLnVpLmtleUNvZGUuRVNDQVBFJiYoYi5jbG9zZShjKSxjLnByZXZlbnREZWZhdWx0KCkpfSkuYXR0cih7cm9sZToiZGlhbG9nIiwiYXJpYS1sYWJlbGxlZGJ5IjpmfSkubW91c2Vkb3duKGZ1bmN0aW9uKGEpe2IubW92ZVRvVG9wKCExLGEpfSksaD1iLmVsZW1lbnQuc2hvdygpLnJlbW92ZUF0dHIoInRpdGxlIikuYWRkQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuYXBwZW5kVG8oZyksaT0oYi51aURpYWxvZ1RpdGxlYmFyPWEoIjxkaXY+PC9kaXY+IikpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyhnKSxqPWEoJzxhIGhyZWY9IiMiPjwvYT4nKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuaG92ZXIoZnVuY3Rpb24oKXtqLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxmdW5jdGlvbigpe2oucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9KS5mb2N1cyhmdW5jdGlvbigpe2ouYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9KS5ibHVyKGZ1bmN0aW9uKCl7ai5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pLmNsaWNrKGZ1bmN0aW9uKGEpe3JldHVybiBiLmNsb3NlKGEpLCExfSkuYXBwZW5kVG8oaSksaz0oYi51aURpYWxvZ1RpdGxlYmFyQ2xvc2VUZXh0PWEoIjxzcGFuPjwvc3Bhbj4iKSkuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1jbG9zZXRoaWNrIikudGV4dChkLmNsb3NlVGV4dCkuYXBwZW5kVG8oaiksbD1hKCI8c3Bhbj48L3NwYW4+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLmF0dHIoImlkIixmKS5odG1sKGUpLnByZXBlbmRUbyhpKTthLmlzRnVuY3Rpb24oZC5iZWZvcmVjbG9zZSkmJiFhLmlzRnVuY3Rpb24oZC5iZWZvcmVDbG9zZSkmJihkLmJlZm9yZUNsb3NlPWQuYmVmb3JlY2xvc2UpLGkuZmluZCgiKiIpLmFkZChpKS5kaXNhYmxlU2VsZWN0aW9uKCksZC5kcmFnZ2FibGUmJmEuZm4uZHJhZ2dhYmxlJiZiLl9tYWtlRHJhZ2dhYmxlKCksZC5yZXNpemFibGUmJmEuZm4ucmVzaXphYmxlJiZiLl9tYWtlUmVzaXphYmxlKCksYi5fY3JlYXRlQnV0dG9ucyhkLmJ1dHRvbnMpLGIuX2lzT3Blbj0hMSxhLmZuLmJnaWZyYW1lJiZnLmJnaWZyYW1lKCl9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEub3ZlcmxheSYmYS5vdmVybGF5LmRlc3Ryb3koKSxhLnVpRGlhbG9nLmhpZGUoKSxhLmVsZW1lbnQudW5iaW5kKCIuZGlhbG9nIikucmVtb3ZlRGF0YSgiZGlhbG9nIikucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuaGlkZSgpLmFwcGVuZFRvKCJib2R5IiksYS51aURpYWxvZy5yZW1vdmUoKSxhLm9yaWdpbmFsVGl0bGUmJmEuZWxlbWVudC5hdHRyKCJ0aXRsZSIsYS5vcmlnaW5hbFRpdGxlKSxhfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ30sY2xvc2U6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxkLGU7aWYoITE9PT1jLl90cmlnZ2VyKCJiZWZvcmVDbG9zZSIsYikpcmV0dXJuO3JldHVybiBjLm92ZXJsYXkmJmMub3ZlcmxheS5kZXN0cm95KCksYy51aURpYWxvZy51bmJpbmQoImtleXByZXNzLnVpLWRpYWxvZyIpLGMuX2lzT3Blbj0hMSxjLm9wdGlvbnMuaGlkZT9jLnVpRGlhbG9nLmhpZGUoYy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtjLl90cmlnZ2VyKCJjbG9zZSIsYil9KTooYy51aURpYWxvZy5oaWRlKCksYy5fdHJpZ2dlcigiY2xvc2UiLGIpKSxhLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSgpLGMub3B0aW9ucy5tb2RhbCYmKGQ9MCxhKCIudWktZGlhbG9nIikuZWFjaChmdW5jdGlvbigpe3RoaXMhPT1jLnVpRGlhbG9nWzBdJiYoZT1hKHRoaXMpLmNzcygiei1pbmRleCIpLGlzTmFOKGUpfHwoZD1NYXRoLm1heChkLGUpKSl9KSxhLnVpLmRpYWxvZy5tYXhaPWQpLGN9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMsZT1kLm9wdGlvbnMsZjtyZXR1cm4gZS5tb2RhbCYmIWJ8fCFlLnN0YWNrJiYhZS5tb2RhbD9kLl90cmlnZ2VyKCJmb2N1cyIsYyk6KGUuekluZGV4PmEudWkuZGlhbG9nLm1heFomJihhLnVpLmRpYWxvZy5tYXhaPWUuekluZGV4KSxkLm92ZXJsYXkmJihhLnVpLmRpYWxvZy5tYXhaKz0xLGQub3ZlcmxheS4kZWwuY3NzKCJ6LWluZGV4IixhLnVpLmRpYWxvZy5vdmVybGF5Lm1heFo9YS51aS5kaWFsb2cubWF4WikpLGY9e3Njcm9sbFRvcDpkLmVsZW1lbnQuc2Nyb2xsVG9wKCksc2Nyb2xsTGVmdDpkLmVsZW1lbnQuc2Nyb2xsTGVmdCgpfSxhLnVpLmRpYWxvZy5tYXhaKz0xLGQudWlEaWFsb2cuY3NzKCJ6LWluZGV4IixhLnVpLmRpYWxvZy5tYXhaKSxkLmVsZW1lbnQuYXR0cihmKSxkLl90cmlnZ2VyKCJmb2N1cyIsYyksZCl9LG9wZW46ZnVuY3Rpb24oKXtpZih0aGlzLl9pc09wZW4pcmV0dXJuO3ZhciBiPXRoaXMsYz1iLm9wdGlvbnMsZD1iLnVpRGlhbG9nO3JldHVybiBiLm92ZXJsYXk9Yy5tb2RhbD9uZXcgYS51aS5kaWFsb2cub3ZlcmxheShiKTpudWxsLGIuX3NpemUoKSxiLl9wb3NpdGlvbihjLnBvc2l0aW9uKSxkLnNob3coYy5zaG93KSxiLm1vdmVUb1RvcCghMCksYy5tb2RhbCYmZC5iaW5kKCJrZXlkb3duLnVpLWRpYWxvZyIsZnVuY3Rpb24oYil7aWYoYi5rZXlDb2RlIT09YS51aS5rZXlDb2RlLlRBQilyZXR1cm47dmFyIGM9YSgiOnRhYmJhYmxlIix0aGlzKSxkPWMuZmlsdGVyKCI6Zmlyc3QiKSxlPWMuZmlsdGVyKCI6bGFzdCIpO2lmKGIudGFyZ2V0PT09ZVswXSYmIWIuc2hpZnRLZXkpcmV0dXJuIGQuZm9jdXMoMSksITE7aWYoYi50YXJnZXQ9PT1kWzBdJiZiLnNoaWZ0S2V5KXJldHVybiBlLmZvY3VzKDEpLCExfSksYShiLmVsZW1lbnQuZmluZCgiOnRhYmJhYmxlIikuZ2V0KCkuY29uY2F0KGQuZmluZCgiLnVpLWRpYWxvZy1idXR0b25wYW5lIDp0YWJiYWJsZSIpLmdldCgpLmNvbmNhdChkLmdldCgpKSkpLmVxKDApLmZvY3VzKCksYi5faXNPcGVuPSEwLGIuX3RyaWdnZXIoIm9wZW4iKSxifSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbihiKXt2YXIgYz10aGlzLGQ9ITEsZT1hKCI8ZGl2PjwvZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXgiKSxmPWEoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zZXQiKS5hcHBlbmRUbyhlKTtjLnVpRGlhbG9nLmZpbmQoIi51aS1kaWFsb2ctYnV0dG9ucGFuZSIpLnJlbW92ZSgpLHR5cGVvZiBiPT0ib2JqZWN0IiYmYiE9PW51bGwmJmEuZWFjaChiLGZ1bmN0aW9uKCl7cmV0dXJuIShkPSEwKX0pLGQmJihhLmVhY2goYixmdW5jdGlvbihiLGQpe2Q9YS5pc0Z1bmN0aW9uKGQpP3tjbGljazpkLHRleHQ6Yn06ZDt2YXIgZT1hKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuY2xpY2soZnVuY3Rpb24oKXtkLmNsaWNrLmFwcGx5KGMuZWxlbWVudFswXSxhcmd1bWVudHMpfSkuYXBwZW5kVG8oZik7YS5lYWNoKGQsZnVuY3Rpb24oYSxiKXtpZihhPT09ImNsaWNrIilyZXR1cm47YSBpbiBlP2VbYV0oYik6ZS5hdHRyKGEsYil9KSxhLmZuLmJ1dHRvbiYmZS5idXR0b24oKX0pLGUuYXBwZW5kVG8oYy51aURpYWxvZykpfSxfbWFrZURyYWdnYWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGYoYSl7cmV0dXJue3Bvc2l0aW9uOmEucG9zaXRpb24sb2Zmc2V0OmEub2Zmc2V0fX12YXIgYj10aGlzLGM9Yi5vcHRpb25zLGQ9YShkb2N1bWVudCksZTtiLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihkLGcpe2U9Yy5oZWlnaHQ9PT0iYXV0byI/ImF1dG8iOmEodGhpcykuaGVpZ2h0KCksYSh0aGlzKS5oZWlnaHQoYSh0aGlzKS5oZWlnaHQoKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLGIuX3RyaWdnZXIoImRyYWdTdGFydCIsZCxmKGcpKX0sZHJhZzpmdW5jdGlvbihhLGMpe2IuX3RyaWdnZXIoImRyYWciLGEsZihjKSl9LHN0b3A6ZnVuY3Rpb24oZyxoKXtjLnBvc2l0aW9uPVtoLnBvc2l0aW9uLmxlZnQtZC5zY3JvbGxMZWZ0KCksaC5wb3NpdGlvbi50b3AtZC5zY3JvbGxUb3AoKV0sYSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIikuaGVpZ2h0KGUpLGIuX3RyaWdnZXIoImRyYWdTdG9wIixnLGYoaCkpLGEudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCl9fSl9LF9tYWtlUmVzaXphYmxlOmZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGgoYSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246YS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTphLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjphLnBvc2l0aW9uLHNpemU6YS5zaXplfX1jPWM9PT1iP3RoaXMub3B0aW9ucy5yZXNpemFibGU6Yzt2YXIgZD10aGlzLGU9ZC5vcHRpb25zLGY9ZC51aURpYWxvZy5jc3MoInBvc2l0aW9uIiksZz10eXBlb2YgYz09InN0cmluZyI/YzoibixlLHMsdyxzZSxzdyxuZSxudyI7ZC51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50Iixjb250YWlubWVudDoiZG9jdW1lbnQiLGFsc29SZXNpemU6ZC5lbGVtZW50LG1heFdpZHRoOmUubWF4V2lkdGgsbWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG1pbldpZHRoOmUubWluV2lkdGgsbWluSGVpZ2h0OmQuX21pbkhlaWdodCgpLGhhbmRsZXM6ZyxzdGFydDpmdW5jdGlvbihiLGMpe2EodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1yZXNpemluZyIpLGQuX3RyaWdnZXIoInJlc2l6ZVN0YXJ0IixiLGgoYykpfSxyZXNpemU6ZnVuY3Rpb24oYSxiKXtkLl90cmlnZ2VyKCJyZXNpemUiLGEsaChiKSl9LHN0b3A6ZnVuY3Rpb24oYixjKXthKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxlLmhlaWdodD1hKHRoaXMpLmhlaWdodCgpLGUud2lkdGg9YSh0aGlzKS53aWR0aCgpLGQuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLGIsaChjKSksYS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKX19KS5jc3MoInBvc2l0aW9uIixmKS5maW5kKCIudWktcmVzaXphYmxlLXNlIikuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwLWRpYWdvbmFsLXNlIil9LF9taW5IZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7cmV0dXJuIGEuaGVpZ2h0PT09ImF1dG8iP2EubWluSGVpZ2h0Ok1hdGgubWluKGEubWluSGVpZ2h0LGEuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKGIpe3ZhciBjPVtdLGQ9WzAsMF0sZTtpZihiKXtpZih0eXBlb2YgYj09InN0cmluZyJ8fHR5cGVvZiBiPT0ib2JqZWN0IiYmIjAiaW4gYiljPWIuc3BsaXQ/Yi5zcGxpdCgiICIpOltiWzBdLGJbMV1dLGMubGVuZ3RoPT09MSYmKGNbMV09Y1swXSksYS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKGEsYil7K2NbYV09PT1jW2FdJiYoZFthXT1jW2FdLGNbYV09Yil9KSxiPXtteTpjLmpvaW4oIiAiKSxhdDpjLmpvaW4oIiAiKSxvZmZzZXQ6ZC5qb2luKCIgIil9O2I9YS5leHRlbmQoe30sYS51aS5kaWFsb2cucHJvdG90eXBlLm9wdGlvbnMucG9zaXRpb24sYil9ZWxzZSBiPWEudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uO2U9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKSxlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLmNzcyh7dG9wOjAsbGVmdDowfSkucG9zaXRpb24oYS5leHRlbmQoe29mOndpbmRvd30sYikpLGV8fHRoaXMudWlEaWFsb2cuaGlkZSgpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihiKXt2YXIgYz10aGlzLGY9e30sZz0hMTthLmVhY2goYixmdW5jdGlvbihhLGIpe2MuX3NldE9wdGlvbihhLGIpLGEgaW4gZCYmKGc9ITApLGEgaW4gZSYmKGZbYV09Yil9KSxnJiZ0aGlzLl9zaXplKCksdGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIixmKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMsZj1lLnVpRGlhbG9nO3N3aXRjaChiKXtjYXNlImJlZm9yZWNsb3NlIjpiPSJiZWZvcmVDbG9zZSI7YnJlYWs7Y2FzZSJidXR0b25zIjplLl9jcmVhdGVCdXR0b25zKGQpO2JyZWFrO2Nhc2UiY2xvc2VUZXh0IjplLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQudGV4dCgiIitkKTticmVhaztjYXNlImRpYWxvZ0NsYXNzIjpmLnJlbW92ZUNsYXNzKGUub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MoYytkKTticmVhaztjYXNlImRpc2FibGVkIjpkP2YuYWRkQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpOmYucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpO2JyZWFrO2Nhc2UiZHJhZ2dhYmxlIjp2YXIgZz1mLmlzKCI6ZGF0YShkcmFnZ2FibGUpIik7ZyYmIWQmJmYuZHJhZ2dhYmxlKCJkZXN0cm95IiksIWcmJmQmJmUuX21ha2VEcmFnZ2FibGUoKTticmVhaztjYXNlInBvc2l0aW9uIjplLl9wb3NpdGlvbihkKTticmVhaztjYXNlInJlc2l6YWJsZSI6dmFyIGg9Zi5pcygiOmRhdGEocmVzaXphYmxlKSIpO2gmJiFkJiZmLnJlc2l6YWJsZSgiZGVzdHJveSIpLGgmJnR5cGVvZiBkPT0ic3RyaW5nIiYmZi5yZXNpemFibGUoIm9wdGlvbiIsImhhbmRsZXMiLGQpLCFoJiZkIT09ITEmJmUuX21ha2VSZXNpemFibGUoZCk7YnJlYWs7Y2FzZSJ0aXRsZSI6YSgiLnVpLWRpYWxvZy10aXRsZSIsZS51aURpYWxvZ1RpdGxlYmFyKS5odG1sKCIiKyhkfHwiJiMxNjA7IikpfWEuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KGUsYXJndW1lbnRzKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm9wdGlvbnMsYyxkLGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTt0aGlzLmVsZW1lbnQuc2hvdygpLmNzcyh7d2lkdGg6ImF1dG8iLG1pbkhlaWdodDowLGhlaWdodDowfSksYi5taW5XaWR0aD5iLndpZHRoJiYoYi53aWR0aD1iLm1pbldpZHRoKSxjPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOmIud2lkdGh9KS5oZWlnaHQoKSxkPU1hdGgubWF4KDAsYi5taW5IZWlnaHQtYyk7aWYoYi5oZWlnaHQ9PT0iYXV0byIpaWYoYS5zdXBwb3J0Lm1pbkhlaWdodCl0aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6ZCxoZWlnaHQ6ImF1dG8ifSk7ZWxzZXt0aGlzLnVpRGlhbG9nLnNob3coKTt2YXIgZj10aGlzLmVsZW1lbnQuY3NzKCJoZWlnaHQiLCJhdXRvIikuaGVpZ2h0KCk7ZXx8dGhpcy51aURpYWxvZy5oaWRlKCksdGhpcy5lbGVtZW50LmhlaWdodChNYXRoLm1heChmLGQpKX1lbHNlIHRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoYi5oZWlnaHQtYywwKSk7dGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9fSksYS5leHRlbmQoYS51aS5kaWFsb2cse3ZlcnNpb246IjEuOC4yNCIsdXVpZDowLG1heFo6MCxnZXRUaXRsZUlkOmZ1bmN0aW9uKGEpe3ZhciBiPWEuYXR0cigiaWQiKTtyZXR1cm4gYnx8KHRoaXMudXVpZCs9MSxiPXRoaXMudXVpZCksInVpLWRpYWxvZy10aXRsZS0iK2J9LG92ZXJsYXk6ZnVuY3Rpb24oYil7dGhpcy4kZWw9YS51aS5kaWFsb2cub3ZlcmxheS5jcmVhdGUoYil9fSksYS5leHRlbmQoYS51aS5kaWFsb2cub3ZlcmxheSx7aW5zdGFuY2VzOltdLG9sZEluc3RhbmNlczpbXSxtYXhaOjAsZXZlbnRzOmEubWFwKCJmb2N1cyxtb3VzZWRvd24sbW91c2V1cCxrZXlkb3duLGtleXByZXNzLGNsaWNrIi5zcGxpdCgiLCIpLGZ1bmN0aW9uKGEpe3JldHVybiBhKyIuZGlhbG9nLW92ZXJsYXkifSkuam9pbigiICIpLGNyZWF0ZTpmdW5jdGlvbihiKXt0aGlzLmluc3RhbmNlcy5sZW5ndGg9PT0wJiYoc2V0VGltZW91dChmdW5jdGlvbigpe2EudWkuZGlhbG9nLm92ZXJsYXkuaW5zdGFuY2VzLmxlbmd0aCYmYShkb2N1bWVudCkuYmluZChhLnVpLmRpYWxvZy5vdmVybGF5LmV2ZW50cyxmdW5jdGlvbihiKXtpZihhKGIudGFyZ2V0KS56SW5kZXgoKTxhLnVpLmRpYWxvZy5vdmVybGF5Lm1heFopcmV0dXJuITF9KX0sMSksYShkb2N1bWVudCkuYmluZCgia2V5ZG93bi5kaWFsb2ctb3ZlcmxheSIsZnVuY3Rpb24oYyl7Yi5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLmtleUNvZGUmJmMua2V5Q29kZT09PWEudWkua2V5Q29kZS5FU0NBUEUmJihiLmNsb3NlKGMpLGMucHJldmVudERlZmF1bHQoKSl9KSxhKHdpbmRvdykuYmluZCgicmVzaXplLmRpYWxvZy1vdmVybGF5IixhLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSkpO3ZhciBjPSh0aGlzLm9sZEluc3RhbmNlcy5wb3AoKXx8YSgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktd2lkZ2V0LW92ZXJsYXkiKSkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSkuY3NzKHt3aWR0aDp0aGlzLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVpZ2h0KCl9KTtyZXR1cm4gYS5mbi5iZ2lmcmFtZSYmYy5iZ2lmcmFtZSgpLHRoaXMuaW5zdGFuY2VzLnB1c2goYyksY30sZGVzdHJveTpmdW5jdGlvbihiKXt2YXIgYz1hLmluQXJyYXkoYix0aGlzLmluc3RhbmNlcyk7YyE9LTEmJnRoaXMub2xkSW5zdGFuY2VzLnB1c2godGhpcy5pbnN0YW5jZXMuc3BsaWNlKGMsMSlbMF0pLHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTAmJmEoW2RvY3VtZW50LHdpbmRvd10pLnVuYmluZCgiLmRpYWxvZy1vdmVybGF5IiksYi5yZW1vdmUoKTt2YXIgZD0wO2EuZWFjaCh0aGlzLmluc3RhbmNlcyxmdW5jdGlvbigpe2Q9TWF0aC5tYXgoZCx0aGlzLmNzcygiei1pbmRleCIpKX0pLHRoaXMubWF4Wj1kfSxoZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgYixjO3JldHVybiBhLmJyb3dzZXIubXNpZSYmYS5icm93c2VyLnZlcnNpb248Nz8oYj1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KSxjPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpLGI8Yz9hKHdpbmRvdykuaGVpZ2h0KCkrInB4IjpiKyJweCIpOmEoZG9jdW1lbnQpLmhlaWdodCgpKyJweCJ9LHdpZHRoOmZ1bmN0aW9uKCl7dmFyIGIsYztyZXR1cm4gYS5icm93c2VyLm1zaWU/KGI9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoLGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGgpLGM9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgpLGI8Yz9hKHdpbmRvdykud2lkdGgoKSsicHgiOmIrInB4Iik6YShkb2N1bWVudCkud2lkdGgoKSsicHgifSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgYj1hKFtdKTthLmVhY2goYS51aS5kaWFsb2cub3ZlcmxheS5pbnN0YW5jZXMsZnVuY3Rpb24oKXtiPWIuYWRkKHRoaXMpfSksYi5jc3Moe3dpZHRoOjAsaGVpZ2h0OjB9KS5jc3Moe3dpZHRoOmEudWkuZGlhbG9nLm92ZXJsYXkud2lkdGgoKSxoZWlnaHQ6YS51aS5kaWFsb2cub3ZlcmxheS5oZWlnaHQoKX0pfX0pLGEuZXh0ZW5kKGEudWkuZGlhbG9nLm92ZXJsYXkucHJvdG90eXBlLHtkZXN0cm95OmZ1bmN0aW9uKCl7YS51aS5kaWFsb2cub3ZlcmxheS5kZXN0cm95KHRoaXMuJGVsKX19KX0oalF1ZXJ5KSxmdW5jdGlvbihhLGIpe2EudWk9YS51aXx8e307dmFyIGM9L2xlZnR8Y2VudGVyfHJpZ2h0LyxkPS90b3B8Y2VudGVyfGJvdHRvbS8sZT0iY2VudGVyIixmPXt9LGc9YS5mbi5wb3NpdGlvbixoPWEuZm4ub2Zmc2V0O2EuZm4ucG9zaXRpb249ZnVuY3Rpb24oYil7aWYoIWJ8fCFiLm9mKXJldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiPWEuZXh0ZW5kKHt9LGIpO3ZhciBoPWEoYi5vZiksaT1oWzBdLGo9KGIuY29sbGlzaW9ufHwiZmxpcCIpLnNwbGl0KCIgIiksaz1iLm9mZnNldD9iLm9mZnNldC5zcGxpdCgiICIpOlswLDBdLGwsbSxuO3JldHVybiBpLm5vZGVUeXBlPT09OT8obD1oLndpZHRoKCksbT1oLmhlaWdodCgpLG49e3RvcDowLGxlZnQ6MH0pOmkuc2V0VGltZW91dD8obD1oLndpZHRoKCksbT1oLmhlaWdodCgpLG49e3RvcDpoLnNjcm9sbFRvcCgpLGxlZnQ6aC5zY3JvbGxMZWZ0KCl9KTppLnByZXZlbnREZWZhdWx0PyhiLmF0PSJsZWZ0IHRvcCIsbD1tPTAsbj17dG9wOmIub2YucGFnZVksbGVmdDpiLm9mLnBhZ2VYfSk6KGw9aC5vdXRlcldpZHRoKCksbT1oLm91dGVySGVpZ2h0KCksbj1oLm9mZnNldCgpKSxhLmVhY2goWyJteSIsImF0Il0sZnVuY3Rpb24oKXt2YXIgYT0oYlt0aGlzXXx8IiIpLnNwbGl0KCIgIik7YS5sZW5ndGg9PT0xJiYoYT1jLnRlc3QoYVswXSk/YS5jb25jYXQoW2VdKTpkLnRlc3QoYVswXSk/W2VdLmNvbmNhdChhKTpbZSxlXSksYVswXT1jLnRlc3QoYVswXSk/YVswXTplLGFbMV09ZC50ZXN0KGFbMV0pP2FbMV06ZSxiW3RoaXNdPWF9KSxqLmxlbmd0aD09PTEmJihqWzFdPWpbMF0pLGtbMF09cGFyc2VJbnQoa1swXSwxMCl8fDAsay5sZW5ndGg9PT0xJiYoa1sxXT1rWzBdKSxrWzFdPXBhcnNlSW50KGtbMV0sMTApfHwwLGIuYXRbMF09PT0icmlnaHQiP24ubGVmdCs9bDpiLmF0WzBdPT09ZSYmKG4ubGVmdCs9bC8yKSxiLmF0WzFdPT09ImJvdHRvbSI/bi50b3ArPW06Yi5hdFsxXT09PWUmJihuLnRvcCs9bS8yKSxuLmxlZnQrPWtbMF0sbi50b3ArPWtbMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMub3V0ZXJXaWR0aCgpLGc9Yy5vdXRlckhlaWdodCgpLGg9cGFyc2VJbnQoYS5jdXJDU1ModGhpcywibWFyZ2luTGVmdCIsITApKXx8MCxpPXBhcnNlSW50KGEuY3VyQ1NTKHRoaXMsIm1hcmdpblRvcCIsITApKXx8MCxvPWQraCsocGFyc2VJbnQoYS5jdXJDU1ModGhpcywibWFyZ2luUmlnaHQiLCEwKSl8fDApLHA9ZytpKyhwYXJzZUludChhLmN1ckNTUyh0aGlzLCJtYXJnaW5Cb3R0b20iLCEwKSl8fDApLHE9YS5leHRlbmQoe30sbikscjtiLm15WzBdPT09InJpZ2h0Ij9xLmxlZnQtPWQ6Yi5teVswXT09PWUmJihxLmxlZnQtPWQvMiksYi5teVsxXT09PSJib3R0b20iP3EudG9wLT1nOmIubXlbMV09PT1lJiYocS50b3AtPWcvMiksZi5mcmFjdGlvbnN8fChxLmxlZnQ9TWF0aC5yb3VuZChxLmxlZnQpLHEudG9wPU1hdGgucm91bmQocS50b3ApKSxyPXtsZWZ0OnEubGVmdC1oLHRvcDpxLnRvcC1pfSxhLmVhY2goWyJsZWZ0IiwidG9wIl0sZnVuY3Rpb24oYyxlKXthLnVpLnBvc2l0aW9uW2pbY11dJiZhLnVpLnBvc2l0aW9uW2pbY11dW2VdKHEse3RhcmdldFdpZHRoOmwsdGFyZ2V0SGVpZ2h0Om0sZWxlbVdpZHRoOmQsZWxlbUhlaWdodDpnLGNvbGxpc2lvblBvc2l0aW9uOnIsY29sbGlzaW9uV2lkdGg6byxjb2xsaXNpb25IZWlnaHQ6cCxvZmZzZXQ6ayxteTpiLm15LGF0OmIuYXR9KX0pLGEuZm4uYmdpZnJhbWUmJmMuYmdpZnJhbWUoKSxjLm9mZnNldChhLmV4dGVuZChxLHt1c2luZzpiLnVzaW5nfSkpfSl9LGEudWkucG9zaXRpb249e2ZpdDp7bGVmdDpmdW5jdGlvbihiLGMpe3ZhciBkPWEod2luZG93KSxlPWMuY29sbGlzaW9uUG9zaXRpb24ubGVmdCtjLmNvbGxpc2lvbldpZHRoLWQud2lkdGgoKS1kLnNjcm9sbExlZnQoKTtiLmxlZnQ9ZT4wP2IubGVmdC1lOk1hdGgubWF4KGIubGVmdC1jLmNvbGxpc2lvblBvc2l0aW9uLmxlZnQsYi5sZWZ0KX0sdG9wOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9YSh3aW5kb3cpLGU9Yy5jb2xsaXNpb25Qb3NpdGlvbi50b3ArYy5jb2xsaXNpb25IZWlnaHQtZC5oZWlnaHQoKS1kLnNjcm9sbFRvcCgpO2IudG9wPWU+MD9iLnRvcC1lOk1hdGgubWF4KGIudG9wLWMuY29sbGlzaW9uUG9zaXRpb24udG9wLGIudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oYixjKXtpZihjLmF0WzBdPT09ZSlyZXR1cm47dmFyIGQ9YSh3aW5kb3cpLGY9Yy5jb2xsaXNpb25Qb3NpdGlvbi5sZWZ0K2MuY29sbGlzaW9uV2lkdGgtZC53aWR0aCgpLWQuc2Nyb2xsTGVmdCgpLGc9Yy5teVswXT09PSJsZWZ0Ij8tYy5lbGVtV2lkdGg6Yy5teVswXT09PSJyaWdodCI/Yy5lbGVtV2lkdGg6MCxoPWMuYXRbMF09PT0ibGVmdCI/Yy50YXJnZXRXaWR0aDotYy50YXJnZXRXaWR0aCxpPS0yKmMub2Zmc2V0WzBdO2IubGVmdCs9Yy5jb2xsaXNpb25Qb3NpdGlvbi5sZWZ0PDA/ZytoK2k6Zj4wP2craCtpOjB9LHRvcDpmdW5jdGlvbihiLGMpe2lmKGMuYXRbMV09PT1lKXJldHVybjt2YXIgZD1hKHdpbmRvdyksZj1jLmNvbGxpc2lvblBvc2l0aW9uLnRvcCtjLmNvbGxpc2lvbkhlaWdodC1kLmhlaWdodCgpLWQuc2Nyb2xsVG9wKCksZz1jLm15WzFdPT09InRvcCI/LWMuZWxlbUhlaWdodDpjLm15WzFdPT09ImJvdHRvbSI/Yy5lbGVtSGVpZ2h0OjAsaD1jLmF0WzFdPT09InRvcCI/Yy50YXJnZXRIZWlnaHQ6LWMudGFyZ2V0SGVpZ2h0LGk9LTIqYy5vZmZzZXRbMV07Yi50b3ArPWMuY29sbGlzaW9uUG9zaXRpb24udG9wPDA/ZytoK2k6Zj4wP2craCtpOjB9fX0sYS5vZmZzZXQuc2V0T2Zmc2V0fHwoYS5vZmZzZXQuc2V0T2Zmc2V0PWZ1bmN0aW9uKGIsYyl7L3N0YXRpYy8udGVzdChhLmN1ckNTUyhiLCJwb3NpdGlvbiIpKSYmKGIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGQ9YShiKSxlPWQub2Zmc2V0KCksZj1wYXJzZUludChhLmN1ckNTUyhiLCJ0b3AiLCEwKSwxMCl8fDAsZz1wYXJzZUludChhLmN1ckNTUyhiLCJsZWZ0IiwhMCksMTApfHwwLGg9e3RvcDpjLnRvcC1lLnRvcCtmLGxlZnQ6Yy5sZWZ0LWUubGVmdCtnfTsidXNpbmciaW4gYz9jLnVzaW5nLmNhbGwoYixoKTpkLmNzcyhoKX0sYS5mbi5vZmZzZXQ9ZnVuY3Rpb24oYil7dmFyIGM9dGhpc1swXTtyZXR1cm4hY3x8IWMub3duZXJEb2N1bWVudD9udWxsOmI/YS5pc0Z1bmN0aW9uKGIpP3RoaXMuZWFjaChmdW5jdGlvbihjKXthKHRoaXMpLm9mZnNldChiLmNhbGwodGhpcyxjLGEodGhpcykub2Zmc2V0KCkpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2Eub2Zmc2V0LnNldE9mZnNldCh0aGlzLGIpfSk6aC5jYWxsKHRoaXMpfSksYS5jdXJDU1N8fChhLmN1ckNTUz1hLmNzcyksZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZCxlLGcsaCxpO2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChiPyJkaXYiOiJib2R5IiksZz17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxiJiZhLmV4dGVuZChnLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IodmFyIGogaW4gZylkLnN0eWxlW2pdPWdbal07ZC5hcHBlbmRDaGlsZChjKSxlPWJ8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlLmluc2VydEJlZm9yZShkLGUuZmlyc3RDaGlsZCksYy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjc0MzIyMjJweDsgdG9wOiAxMC40MzIzMjVweDsgaGVpZ2h0OiAzMHB4OyB3aWR0aDogMjAxcHg7IixoPWEoYykub2Zmc2V0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ9KS5vZmZzZXQoKSxkLmlubmVySFRNTD0iIixlLnJlbW92ZUNoaWxkKGQpLGk9aC50b3AraC5sZWZ0KyhiPzJlMzowKSxmLmZyYWN0aW9ucz1pPjIxJiZpPDIyfSgpfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7YS53aWRnZXQoInVpLnByb2dyZXNzYmFyIix7b3B0aW9uczp7dmFsdWU6MCxtYXg6MTAwfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmF0dHIoe3JvbGU6InByb2dyZXNzYmFyIiwiYXJpYS12YWx1ZW1pbiI6dGhpcy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3ZhbHVlKCl9KSx0aGlzLnZhbHVlRGl2PWEoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLXZhbHVlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWxlZnQnPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksdGhpcy5vbGRWYWx1ZT10aGlzLl92YWx1ZSgpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpLGEuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iP3RoaXMuX3ZhbHVlKCk6KHRoaXMuX3NldE9wdGlvbigidmFsdWUiLGEpLHRoaXMpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGIsYyl7Yj09PSJ2YWx1ZSImJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl92YWx1ZSgpPT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKSksYS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHR5cGVvZiBhIT0ibnVtYmVyIiYmKGE9MCksTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbixhKSl9LF9wZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLl92YWx1ZSgpL3RoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnZhbHVlKCksYj10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy5vbGRWYWx1ZSE9PWEmJih0aGlzLm9sZFZhbHVlPWEsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLHRoaXMudmFsdWVEaXYudG9nZ2xlKGE+dGhpcy5taW4pLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItcmlnaHQiLGE9PT10aGlzLm9wdGlvbnMubWF4KS53aWR0aChiLnRvRml4ZWQoMCkrIiUiKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS12YWx1ZW5vdyIsYSl9fSksYS5leHRlbmQoYS51aS5wcm9ncmVzc2Jhcix7dmVyc2lvbjoiMS44LjI0In0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7dmFyIGM9NTthLndpZGdldCgidWkuc2xpZGVyIixhLnVpLm1vdXNlLHt3aWRnZXRFdmVudFByZWZpeDoic2xpZGUiLG9wdGlvbnM6e2FuaW1hdGU6ITEsZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOiJob3Jpem9udGFsIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMsZD10aGlzLm9wdGlvbnMsZT10aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNsaWRlci1oYW5kbGUiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiksZj0iPGEgY2xhc3M9J3VpLXNsaWRlci1oYW5kbGUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyBocmVmPScjJz48L2E+IixnPWQudmFsdWVzJiZkLnZhbHVlcy5sZW5ndGh8fDEsaD1bXTt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKyhkLmRpc2FibGVkPyIgdWktc2xpZGVyLWRpc2FibGVkIHVpLWRpc2FibGVkIjoiIikpLHRoaXMucmFuZ2U9YShbXSksZC5yYW5nZSYmKGQucmFuZ2U9PT0hMCYmKGQudmFsdWVzfHwoZC52YWx1ZXM9W3RoaXMuX3ZhbHVlTWluKCksdGhpcy5fdmFsdWVNaW4oKV0pLGQudmFsdWVzLmxlbmd0aCYmZC52YWx1ZXMubGVuZ3RoIT09MiYmKGQudmFsdWVzPVtkLnZhbHVlc1swXSxkLnZhbHVlc1swXV0pKSx0aGlzLnJhbmdlPWEoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktc2xpZGVyLXJhbmdlIHVpLXdpZGdldC1oZWFkZXIiKyhkLnJhbmdlPT09Im1pbiJ8fGQucmFuZ2U9PT0ibWF4Ij8iIHVpLXNsaWRlci1yYW5nZS0iK2QucmFuZ2U6IiIpKSk7Zm9yKHZhciBpPWUubGVuZ3RoO2k8ZztpKz0xKWgucHVzaChmKTt0aGlzLmhhbmRsZXM9ZS5hZGQoYShoLmpvaW4oIiIpKS5hcHBlbmRUbyhiLmVsZW1lbnQpKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmFkZCh0aGlzLnJhbmdlKS5maWx0ZXIoImEiKS5jbGljayhmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9KS5ob3ZlcihmdW5jdGlvbigpe2QuZGlzYWJsZWR8fGEodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9LGZ1bmN0aW9uKCl7YSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLmZvY3VzKGZ1bmN0aW9uKCl7ZC5kaXNhYmxlZD9hKHRoaXMpLmJsdXIoKTooYSgiLnVpLXNsaWRlciAudWktc3RhdGUtZm9jdXMiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSxhKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpKX0pLmJsdXIoZnVuY3Rpb24oKXthKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oYil7YSh0aGlzKS5kYXRhKCJpbmRleC51aS1zbGlkZXItaGFuZGxlIixiKX0pLHRoaXMuaGFuZGxlcy5rZXlkb3duKGZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcykuZGF0YSgiaW5kZXgudWktc2xpZGVyLWhhbmRsZSIpLGYsZyxoLGk7aWYoYi5vcHRpb25zLmRpc2FibGVkKXJldHVybjtzd2l0Y2goZC5rZXlDb2RlKXtjYXNlIGEudWkua2V5Q29kZS5IT01FOmNhc2UgYS51aS5rZXlDb2RlLkVORDpjYXNlIGEudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgYS51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIGEudWkua2V5Q29kZS5VUDpjYXNlIGEudWkua2V5Q29kZS5SSUdIVDpjYXNlIGEudWkua2V5Q29kZS5ET1dOOmNhc2UgYS51aS5rZXlDb2RlLkxFRlQ6ZC5wcmV2ZW50RGVmYXVsdCgpO2lmKCFiLl9rZXlTbGlkaW5nKXtiLl9rZXlTbGlkaW5nPSEwLGEodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGY9Yi5fc3RhcnQoZCxlKTtpZihmPT09ITEpcmV0dXJufX1pPWIub3B0aW9ucy5zdGVwLGIub3B0aW9ucy52YWx1ZXMmJmIub3B0aW9ucy52YWx1ZXMubGVuZ3RoP2c9aD1iLnZhbHVlcyhlKTpnPWg9Yi52YWx1ZSgpO3N3aXRjaChkLmtleUNvZGUpe2Nhc2UgYS51aS5rZXlDb2RlLkhPTUU6aD1iLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgYS51aS5rZXlDb2RlLkVORDpoPWIuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBhLnVpLmtleUNvZGUuUEFHRV9VUDpoPWIuX3RyaW1BbGlnblZhbHVlKGcrKGIuX3ZhbHVlTWF4KCktYi5fdmFsdWVNaW4oKSkvYyk7YnJlYWs7Y2FzZSBhLnVpLmtleUNvZGUuUEFHRV9ET1dOOmg9Yi5fdHJpbUFsaWduVmFsdWUoZy0oYi5fdmFsdWVNYXgoKS1iLl92YWx1ZU1pbigpKS9jKTticmVhaztjYXNlIGEudWkua2V5Q29kZS5VUDpjYXNlIGEudWkua2V5Q29kZS5SSUdIVDppZihnPT09Yi5fdmFsdWVNYXgoKSlyZXR1cm47aD1iLl90cmltQWxpZ25WYWx1ZShnK2kpO2JyZWFrO2Nhc2UgYS51aS5rZXlDb2RlLkRPV046Y2FzZSBhLnVpLmtleUNvZGUuTEVGVDppZihnPT09Yi5fdmFsdWVNaW4oKSlyZXR1cm47aD1iLl90cmltQWxpZ25WYWx1ZShnLWkpfWIuX3NsaWRlKGQsZSxoKX0pLmtleXVwKGZ1bmN0aW9uKGMpe3ZhciBkPWEodGhpcykuZGF0YSgiaW5kZXgudWktc2xpZGVyLWhhbmRsZSIpO2IuX2tleVNsaWRpbmcmJihiLl9rZXlTbGlkaW5nPSExLGIuX3N0b3AoYyxkKSxiLl9jaGFuZ2UoYyxkKSxhKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSl9KSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS1zbGlkZXItZGlzYWJsZWQgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5yZW1vdmVEYXRhKCJzbGlkZXIiKS51bmJpbmQoIi5zbGlkZXIiKSx0aGlzLl9tb3VzZURlc3Ryb3koKSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMub3B0aW9ucyxkLGUsZixnLGgsaSxqLGssbDtyZXR1cm4gYy5kaXNhYmxlZD8hMToodGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9LHRoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksZD17eDpiLnBhZ2VYLHk6Yi5wYWdlWX0sZT10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoZCksZj10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkrMSxoPXRoaXMsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9TWF0aC5hYnMoZS1oLnZhbHVlcyhiKSk7Zj5jJiYoZj1jLGc9YSh0aGlzKSxpPWIpfSksYy5yYW5nZT09PSEwJiZ0aGlzLnZhbHVlcygxKT09PWMubWluJiYoaSs9MSxnPWEodGhpcy5oYW5kbGVzW2ldKSksaj10aGlzLl9zdGFydChiLGkpLGo9PT0hMT8hMToodGhpcy5fbW91c2VTbGlkaW5nPSEwLGguX2hhbmRsZUluZGV4PWksZy5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuZm9jdXMoKSxrPWcub2Zmc2V0KCksbD0hYShiLnRhcmdldCkucGFyZW50cygpLmFuZFNlbGYoKS5pcygiLnVpLXNsaWRlci1oYW5kbGUiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OmIucGFnZVgtay5sZWZ0LWcud2lkdGgoKS8yLHRvcDpiLnBhZ2VZLWsudG9wLWcuaGVpZ2h0KCkvMi0ocGFyc2VJbnQoZy5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZy5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZy5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUoYixpLGUpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oYSl7dmFyIGI9e3g6YS5wYWdlWCx5OmEucGFnZVl9LGM9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGIpO3JldHVybiB0aGlzLl9zbGlkZShhLHRoaXMuX2hhbmRsZUluZGV4LGMpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9zdG9wKGEsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2NoYW5nZShhLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2NsaWNrT2Zmc2V0PW51bGwsdGhpcy5fYW5pbWF0ZU9mZj0hMSwhMX0sX2RldGVjdE9yaWVudGF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5vcmllbnRhdGlvbj10aGlzLm9wdGlvbnMub3JpZW50YXRpb249PT0idmVydGljYWwiPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifSxfbm9ybVZhbHVlRnJvbU1vdXNlOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGY7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/KGI9dGhpcy5lbGVtZW50U2l6ZS53aWR0aCxjPWEueC10aGlzLmVsZW1lbnRPZmZzZXQubGVmdC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQubGVmdDowKSk6KGI9dGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQsYz1hLnktdGhpcy5lbGVtZW50T2Zmc2V0LnRvcC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQudG9wOjApKSxkPWMvYixkPjEmJihkPTEpLGQ8MCYmKGQ9MCksdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJihkPTEtZCksZT10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCksZj10aGlzLl92YWx1ZU1pbigpK2QqZSx0aGlzLl90cmltQWxpZ25WYWx1ZShmKX0sX3N0YXJ0OmZ1bmN0aW9uKGEsYil7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihjLnZhbHVlPXRoaXMudmFsdWVzKGIpLGMudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoInN0YXJ0IixhLGMpfSxfc2xpZGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZjt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD8oZD10aGlzLnZhbHVlcyhiPzA6MSksdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg9PT0yJiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKGI9PT0wJiZjPmR8fGI9PT0xJiZjPGQpJiYoYz1kKSxjIT09dGhpcy52YWx1ZXMoYikmJihlPXRoaXMudmFsdWVzKCksZVtiXT1jLGY9dGhpcy5fdHJpZ2dlcigic2xpZGUiLGEse2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6Yyx2YWx1ZXM6ZX0pLGQ9dGhpcy52YWx1ZXMoYj8wOjEpLGYhPT0hMSYmdGhpcy52YWx1ZXMoYixjLCEwKSkpOmMhPT10aGlzLnZhbHVlKCkmJihmPXRoaXMuX3RyaWdnZXIoInNsaWRlIixhLHtoYW5kbGU6dGhpcy5oYW5kbGVzW2JdLHZhbHVlOmN9KSxmIT09ITEmJnRoaXMudmFsdWUoYykpfSxfc3RvcDpmdW5jdGlvbihhLGIpe3ZhciBjPXtoYW5kbGU6dGhpcy5oYW5kbGVzW2JdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihjLnZhbHVlPXRoaXMudmFsdWVzKGIpLGMudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoInN0b3AiLGEsYyl9LF9jaGFuZ2U6ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5fa2V5U2xpZGluZyYmIXRoaXMuX21vdXNlU2xpZGluZyl7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGMudmFsdWU9dGhpcy52YWx1ZXMoYiksYy52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixhLGMpfX0sdmFsdWU6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aCl7dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGEpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApO3JldHVybn1yZXR1cm4gdGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dGhpcy5vcHRpb25zLnZhbHVlc1tiXT10aGlzLl90cmltQWxpZ25WYWx1ZShjKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCxiKTtyZXR1cm59aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCFhLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5fdmFsdWVzKGIpOnRoaXMudmFsdWUoKTtkPXRoaXMub3B0aW9ucy52YWx1ZXMsZT1hcmd1bWVudHNbMF07Zm9yKGY9MDtmPGQubGVuZ3RoO2YrPTEpZFtmXT10aGlzLl90cmltQWxpZ25WYWx1ZShlW2ZdKSx0aGlzLl9jaGFuZ2UobnVsbCxmKTt0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbihiLGMpe3ZhciBkLGU9MDthLmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykmJihlPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSxhLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7c3dpdGNoKGIpe2Nhc2UiZGlzYWJsZWQiOmM/KHRoaXMuaGFuZGxlcy5maWx0ZXIoIi51aS1zdGF0ZS1mb2N1cyIpLmJsdXIoKSx0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5oYW5kbGVzLnByb3BBdHRyKCJkaXNhYmxlZCIsITApLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZGlzYWJsZWQiKSk6KHRoaXMuaGFuZGxlcy5wcm9wQXR0cigiZGlzYWJsZWQiLCExKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRpc2FibGVkIikpO2JyZWFrO2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCk7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpO2ZvcihkPTA7ZDxlO2QrPTEpdGhpcy5fY2hhbmdlKG51bGwsZCk7dGhpcy5fYW5pbWF0ZU9mZj0hMX19LF92YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gYT10aGlzLl90cmltQWxpZ25WYWx1ZShhKSxhfSxfdmFsdWVzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZDtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBiPXRoaXMub3B0aW9ucy52YWx1ZXNbYV0sYj10aGlzLl90cmltQWxpZ25WYWx1ZShiKSxiO2M9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKz0xKWNbZF09dGhpcy5fdHJpbUFsaWduVmFsdWUoY1tkXSk7cmV0dXJuIGN9LF90cmltQWxpZ25WYWx1ZTpmdW5jdGlvbihhKXtpZihhPD10aGlzLl92YWx1ZU1pbigpKXJldHVybiB0aGlzLl92YWx1ZU1pbigpO2lmKGE+PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7dmFyIGI9dGhpcy5vcHRpb25zLnN0ZXA+MD90aGlzLm9wdGlvbnMuc3RlcDoxLGM9KGEtdGhpcy5fdmFsdWVNaW4oKSklYixkPWEtYztyZXR1cm4gTWF0aC5hYnMoYykqMj49YiYmKGQrPWM+MD9iOi1iKSxwYXJzZUZsb2F0KGQudG9GaXhlZCg1KSl9LF92YWx1ZU1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWlufSxfdmFsdWVNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucy5yYW5nZSxjPXRoaXMub3B0aW9ucyxkPXRoaXMsZT10aGlzLl9hbmltYXRlT2ZmPyExOmMuYW5pbWF0ZSxmLGc9e30saCxpLGosazt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihiLGkpe2Y9KGQudmFsdWVzKGIpLWQuX3ZhbHVlTWluKCkpLyhkLl92YWx1ZU1heCgpLWQuX3ZhbHVlTWluKCkpKjEwMCxnW2Qub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/ImxlZnQiOiJib3R0b20iXT1mKyIlIixhKHRoaXMpLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oZyxjLmFuaW1hdGUpLGQub3B0aW9ucy5yYW5nZT09PSEwJiYoZC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8oYj09PTAmJmQucmFuZ2Uuc3RvcCgxLDEpW2U/ImFuaW1hdGUiOiJjc3MiXSh7bGVmdDpmKyIlIn0sYy5hbmltYXRlKSxiPT09MSYmZC5yYW5nZVtlPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmYtaCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpjLmFuaW1hdGV9KSk6KGI9PT0wJiZkLnJhbmdlLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oe2JvdHRvbTpmKyIlIn0sYy5hbmltYXRlKSxiPT09MSYmZC5yYW5nZVtlPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDpmLWgrIiUifSx7cXVldWU6ITEsZHVyYXRpb246Yy5hbmltYXRlfSkpKSxoPWZ9KTooaT10aGlzLnZhbHVlKCksaj10aGlzLl92YWx1ZU1pbigpLGs9dGhpcy5fdmFsdWVNYXgoKSxmPWshPT1qPyhpLWopLyhrLWopKjEwMDowLGdbZC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPWYrIiUiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oZyxjLmFuaW1hdGUpLGI9PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbZT8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDpmKyIlIn0sYy5hbmltYXRlKSxiPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCImJnRoaXMucmFuZ2VbZT8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDoxMDAtZisiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpjLmFuaW1hdGV9KSxiPT09Im1pbiImJnRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtlPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDpmKyIlIn0sYy5hbmltYXRlKSxiPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiZ0aGlzLnJhbmdlW2U/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OjEwMC1mKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOmMuYW5pbWF0ZX0pKX19KSxhLmV4dGVuZChhLnVpLnNsaWRlcix7dmVyc2lvbjoiMS44LjI0In0pfShqUXVlcnkpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZSgpe3JldHVybisrY31mdW5jdGlvbiBmKCl7cmV0dXJuKytkfXZhciBjPTAsZD0wO2Eud2lkZ2V0KCJ1aS50YWJzIix7b3B0aW9uczp7YWRkOm51bGwsYWpheE9wdGlvbnM6bnVsbCxjYWNoZTohMSxjb29raWU6bnVsbCxjb2xsYXBzaWJsZTohMSxkaXNhYmxlOm51bGwsZGlzYWJsZWQ6W10sZW5hYmxlOm51bGwsZXZlbnQ6ImNsaWNrIixmeDpudWxsLGlkUHJlZml4OiJ1aS10YWJzLSIsbG9hZDpudWxsLHBhbmVsVGVtcGxhdGU6IjxkaXY+PC9kaXY+IixyZW1vdmU6bnVsbCxzZWxlY3Q6bnVsbCxzaG93Om51bGwsc3Bpbm5lcjoiPGVtPkxvYWRpbmcmIzgyMzA7PC9lbT4iLHRhYlRlbXBsYXRlOiI8bGk+PGEgaHJlZj0nI3tocmVmfSc+PHNwYW4+I3tsYWJlbH08L3NwYW4+PC9hPjwvbGk+In0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3RhYmlmeSghMCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oYSxiKXtpZihhPT0ic2VsZWN0ZWQiKXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUmJmI9PXRoaXMub3B0aW9ucy5zZWxlY3RlZClyZXR1cm47dGhpcy5zZWxlY3QoYil9ZWxzZSB0aGlzLm9wdGlvbnNbYV09Yix0aGlzLl90YWJpZnkoKX0sX3RhYklkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRpdGxlJiZhLnRpdGxlLnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKC9bXlx3XHUwMGMwLVx1RkZGRi1dL2csIiIpfHx0aGlzLm9wdGlvbnMuaWRQcmVmaXgrZSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC86L2csIlxcOiIpfSxfY29va2llOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jb29raWV8fCh0aGlzLmNvb2tpZT10aGlzLm9wdGlvbnMuY29va2llLm5hbWV8fCJ1aS10YWJzLSIrZigpKTtyZXR1cm4gYS5jb29raWUuYXBwbHkobnVsbCxbYl0uY29uY2F0KGEubWFrZUFycmF5KGFyZ3VtZW50cykpKX0sX3VpOmZ1bmN0aW9uKGEsYil7cmV0dXJue3RhYjphLHBhbmVsOmIsaW5kZXg6dGhpcy5hbmNob3JzLmluZGV4KGEpfX0sX2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLmxpcy5maWx0ZXIoIi51aS1zdGF0ZS1wcm9jZXNzaW5nIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLXByb2Nlc3NpbmciKS5maW5kKCJzcGFuOmRhdGEobGFiZWwudGFicykiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKTtiLmh0bWwoYi5kYXRhKCJsYWJlbC50YWJzIikpLnJlbW92ZURhdGEoImxhYmVsLnRhYnMiKX0pfSxfdGFiaWZ5OmZ1bmN0aW9uKGMpe2Z1bmN0aW9uIG0oYixjKXtiLmNzcygiZGlzcGxheSIsIiIpLCFhLnN1cHBvcnQub3BhY2l0eSYmYy5vcGFjaXR5JiZiWzBdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIil9dmFyIGQ9dGhpcyxlPXRoaXMub3B0aW9ucyxmPS9eIy4rLzt0aGlzLmxpc3Q9dGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCksdGhpcy5saXM9YSgiID4gbGk6aGFzKGFbaHJlZl0pIix0aGlzLmxpc3QpLHRoaXMuYW5jaG9ycz10aGlzLmxpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYSgiYSIsdGhpcylbMF19KSx0aGlzLnBhbmVscz1hKFtdKSx0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihiLGMpe3ZhciBnPWEoYykuYXR0cigiaHJlZiIpLGg9Zy5zcGxpdCgiIyIpWzBdLGk7aCYmKGg9PT1sb2NhdGlvbi50b1N0cmluZygpLnNwbGl0KCIjIilbMF18fChpPWEoImJhc2UiKVswXSkmJmg9PT1pLmhyZWYpJiYoZz1jLmhhc2gsYy5ocmVmPWcpO2lmKGYudGVzdChnKSlkLnBhbmVscz1kLnBhbmVscy5hZGQoZC5lbGVtZW50LmZpbmQoZC5fc2FuaXRpemVTZWxlY3RvcihnKSkpO2Vsc2UgaWYoZyYmZyE9PSIjIil7YS5kYXRhKGMsImhyZWYudGFicyIsZyksYS5kYXRhKGMsImxvYWQudGFicyIsZy5yZXBsYWNlKC8jLiokLywiIikpO3ZhciBqPWQuX3RhYklkKGMpO2MuaHJlZj0iIyIrajt2YXIgaz1kLmVsZW1lbnQuZmluZCgiIyIraik7ay5sZW5ndGh8fChrPWEoZS5wYW5lbFRlbXBsYXRlKS5hdHRyKCJpZCIsaikuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmluc2VydEFmdGVyKGQucGFuZWxzW2ItMV18fGQubGlzdCksay5kYXRhKCJkZXN0cm95LnRhYnMiLCEwKSksZC5wYW5lbHM9ZC5wYW5lbHMuYWRkKGspfWVsc2UgZS5kaXNhYmxlZC5wdXNoKGIpfSksYz8odGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksdGhpcy5saXN0LmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLHRoaXMubGlzLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIiksZS5zZWxlY3RlZD09PWI/KGxvY2F0aW9uLmhhc2gmJnRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGEsYil7aWYoYi5oYXNoPT1sb2NhdGlvbi5oYXNoKXJldHVybiBlLnNlbGVjdGVkPWEsITF9KSx0eXBlb2YgZS5zZWxlY3RlZCE9Im51bWJlciImJmUuY29va2llJiYoZS5zZWxlY3RlZD1wYXJzZUludChkLl9jb29raWUoKSwxMCkpLHR5cGVvZiBlLnNlbGVjdGVkIT0ibnVtYmVyIiYmdGhpcy5saXMuZmlsdGVyKCIudWktdGFicy1zZWxlY3RlZCIpLmxlbmd0aCYmKGUuc2VsZWN0ZWQ9dGhpcy5saXMuaW5kZXgodGhpcy5saXMuZmlsdGVyKCIudWktdGFicy1zZWxlY3RlZCIpKSksZS5zZWxlY3RlZD1lLnNlbGVjdGVkfHwodGhpcy5saXMubGVuZ3RoPzA6LTEpKTplLnNlbGVjdGVkPT09bnVsbCYmKGUuc2VsZWN0ZWQ9LTEpLGUuc2VsZWN0ZWQ9ZS5zZWxlY3RlZD49MCYmdGhpcy5hbmNob3JzW2Uuc2VsZWN0ZWRdfHxlLnNlbGVjdGVkPDA/ZS5zZWxlY3RlZDowLGUuZGlzYWJsZWQ9YS51bmlxdWUoZS5kaXNhYmxlZC5jb25jYXQoYS5tYXAodGhpcy5saXMuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihhLGIpe3JldHVybiBkLmxpcy5pbmRleChhKX0pKSkuc29ydCgpLGEuaW5BcnJheShlLnNlbGVjdGVkLGUuZGlzYWJsZWQpIT0tMSYmZS5kaXNhYmxlZC5zcGxpY2UoYS5pbkFycmF5KGUuc2VsZWN0ZWQsZS5kaXNhYmxlZCksMSksdGhpcy5wYW5lbHMuYWRkQ2xhc3MoInVpLXRhYnMtaGlkZSIpLHRoaXMubGlzLnJlbW92ZUNsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpLGUuc2VsZWN0ZWQ+PTAmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJihkLmVsZW1lbnQuZmluZChkLl9zYW5pdGl6ZVNlbGVjdG9yKGQuYW5jaG9yc1tlLnNlbGVjdGVkXS5oYXNoKSkucmVtb3ZlQ2xhc3MoInVpLXRhYnMtaGlkZSIpLHRoaXMubGlzLmVxKGUuc2VsZWN0ZWQpLmFkZENsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpLGQuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtkLl90cmlnZ2VyKCJzaG93IixudWxsLGQuX3VpKGQuYW5jaG9yc1tlLnNlbGVjdGVkXSxkLmVsZW1lbnQuZmluZChkLl9zYW5pdGl6ZVNlbGVjdG9yKGQuYW5jaG9yc1tlLnNlbGVjdGVkXS5oYXNoKSlbMF0pKX0pLHRoaXMubG9hZChlLnNlbGVjdGVkKSksYSh3aW5kb3cpLmJpbmQoInVubG9hZCIsZnVuY3Rpb24oKXtkLmxpcy5hZGQoZC5hbmNob3JzKS51bmJpbmQoIi50YWJzIiksZC5saXM9ZC5hbmNob3JzPWQucGFuZWxzPW51bGx9KSk6ZS5zZWxlY3RlZD10aGlzLmxpcy5pbmRleCh0aGlzLmxpcy5maWx0ZXIoIi51aS10YWJzLXNlbGVjdGVkIikpLHRoaXMuZWxlbWVudFtlLmNvbGxhcHNpYmxlPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oInVpLXRhYnMtY29sbGFwc2libGUiKSxlLmNvb2tpZSYmdGhpcy5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpO2Zvcih2YXIgZz0wLGg7aD10aGlzLmxpc1tnXTtnKyspYShoKVthLmluQXJyYXkoZyxlLmRpc2FibGVkKSE9LTEmJiFhKGgpLmhhc0NsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIik/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgidWktc3RhdGUtZGlzYWJsZWQiKTtlLmNhY2hlPT09ITEmJnRoaXMuYW5jaG9ycy5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIiksdGhpcy5saXMuYWRkKHRoaXMuYW5jaG9ycykudW5iaW5kKCIudGFicyIpO2lmKGUuZXZlbnQhPT0ibW91c2VvdmVyIil7dmFyIGk9ZnVuY3Rpb24oYSxiKXtiLmlzKCI6bm90KC51aS1zdGF0ZS1kaXNhYmxlZCkiKSYmYi5hZGRDbGFzcygidWktc3RhdGUtIithKX0saj1mdW5jdGlvbihhLGIpe2IucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLSIrYSl9O3RoaXMubGlzLmJpbmQoIm1vdXNlb3Zlci50YWJzIixmdW5jdGlvbigpe2koImhvdmVyIixhKHRoaXMpKX0pLHRoaXMubGlzLmJpbmQoIm1vdXNlb3V0LnRhYnMiLGZ1bmN0aW9uKCl7aigiaG92ZXIiLGEodGhpcykpfSksdGhpcy5hbmNob3JzLmJpbmQoImZvY3VzLnRhYnMiLGZ1bmN0aW9uKCl7aSgiZm9jdXMiLGEodGhpcykuY2xvc2VzdCgibGkiKSl9KSx0aGlzLmFuY2hvcnMuYmluZCgiYmx1ci50YWJzIixmdW5jdGlvbigpe2ooImZvY3VzIixhKHRoaXMpLmNsb3Nlc3QoImxpIikpfSl9dmFyIGssbDtlLmZ4JiYoYS5pc0FycmF5KGUuZngpPyhrPWUuZnhbMF0sbD1lLmZ4WzFdKTprPWw9ZS5meCk7dmFyIG49bD9mdW5jdGlvbihiLGMpe2EoYikuY2xvc2VzdCgibGkiKS5hZGRDbGFzcygidWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiKSxjLmhpZGUoKS5yZW1vdmVDbGFzcygidWktdGFicy1oaWRlIikuYW5pbWF0ZShsLGwuZHVyYXRpb258fCJub3JtYWwiLGZ1bmN0aW9uKCl7bShjLGwpLGQuX3RyaWdnZXIoInNob3ciLG51bGwsZC5fdWkoYixjWzBdKSl9KX06ZnVuY3Rpb24oYixjKXthKGIpLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlIiksYy5yZW1vdmVDbGFzcygidWktdGFicy1oaWRlIiksZC5fdHJpZ2dlcigic2hvdyIsbnVsbCxkLl91aShiLGNbMF0pKX0sbz1rP2Z1bmN0aW9uKGEsYil7Yi5hbmltYXRlKGssay5kdXJhdGlvbnx8Im5vcm1hbCIsZnVuY3Rpb24oKXtkLmxpcy5yZW1vdmVDbGFzcygidWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiKSxiLmFkZENsYXNzKCJ1aS10YWJzLWhpZGUiKSxtKGIsayksZC5lbGVtZW50LmRlcXVldWUoInRhYnMiKX0pfTpmdW5jdGlvbihhLGIsYyl7ZC5saXMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlIiksYi5hZGRDbGFzcygidWktdGFicy1oaWRlIiksZC5lbGVtZW50LmRlcXVldWUoInRhYnMiKX07dGhpcy5hbmNob3JzLmJpbmQoZS5ldmVudCsiLnRhYnMiLGZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWEoYikuY2xvc2VzdCgibGkiKSxmPWQucGFuZWxzLmZpbHRlcigiOm5vdCgudWktdGFicy1oaWRlKSIpLGc9ZC5lbGVtZW50LmZpbmQoZC5fc2FuaXRpemVTZWxlY3RvcihiLmhhc2gpKTtpZihjLmhhc0NsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIikmJiFlLmNvbGxhcHNpYmxlfHxjLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxjLmhhc0NsYXNzKCJ1aS1zdGF0ZS1wcm9jZXNzaW5nIil8fGQucGFuZWxzLmZpbHRlcigiOmFuaW1hdGVkIikubGVuZ3RofHxkLl90cmlnZ2VyKCJzZWxlY3QiLG51bGwsZC5fdWkodGhpcyxnWzBdKSk9PT0hMSlyZXR1cm4gdGhpcy5ibHVyKCksITE7ZS5zZWxlY3RlZD1kLmFuY2hvcnMuaW5kZXgodGhpcyksZC5hYm9ydCgpO2lmKGUuY29sbGFwc2libGUpe2lmKGMuaGFzQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQiKSlyZXR1cm4gZS5zZWxlY3RlZD0tMSxlLmNvb2tpZSYmZC5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpLGQuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtvKGIsZil9KS5kZXF1ZXVlKCJ0YWJzIiksdGhpcy5ibHVyKCksITE7aWYoIWYubGVuZ3RoKXJldHVybiBlLmNvb2tpZSYmZC5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpLGQuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtuKGIsZyl9KSxkLmxvYWQoZC5hbmNob3JzLmluZGV4KHRoaXMpKSx0aGlzLmJsdXIoKSwhMX1lLmNvb2tpZSYmZC5fY29va2llKGUuc2VsZWN0ZWQsZS5jb29raWUpO2lmKGcubGVuZ3RoKWYubGVuZ3RoJiZkLmVsZW1lbnQucXVldWUoInRhYnMiLGZ1bmN0aW9uKCl7byhiLGYpfSksZC5lbGVtZW50LnF1ZXVlKCJ0YWJzIixmdW5jdGlvbigpe24oYixnKX0pLGQubG9hZChkLmFuY2hvcnMuaW5kZXgodGhpcykpO2Vsc2UgdGhyb3cialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIjthLmJyb3dzZXIubXNpZSYmdGhpcy5ibHVyKCl9KSx0aGlzLmFuY2hvcnMuYmluZCgiY2xpY2sudGFicyIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIiYmKGE9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoIltocmVmJD0nIithKyInXSIpKSksYX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5hYm9ydCgpLHRoaXMuZWxlbWVudC51bmJpbmQoIi50YWJzIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLnJlbW92ZURhdGEoInRhYnMiKSx0aGlzLmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hLmRhdGEodGhpcywiaHJlZi50YWJzIik7YiYmKHRoaXMuaHJlZj1iKTt2YXIgYz1hKHRoaXMpLnVuYmluZCgiLnRhYnMiKTthLmVhY2goWyJocmVmIiwibG9hZCIsImNhY2hlIl0sZnVuY3Rpb24oYSxiKXtjLnJlbW92ZURhdGEoYisiLnRhYnMiKX0pfSksdGhpcy5saXMudW5iaW5kKCIudGFicyIpLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2EuZGF0YSh0aGlzLCJkZXN0cm95LnRhYnMiKT9hKHRoaXMpLnJlbW92ZSgpOmEodGhpcykucmVtb3ZlQ2xhc3MoWyJ1aS1zdGF0ZS1kZWZhdWx0IiwidWktY29ybmVyLXRvcCIsInVpLXRhYnMtc2VsZWN0ZWQiLCJ1aS1zdGF0ZS1hY3RpdmUiLCJ1aS1zdGF0ZS1ob3ZlciIsInVpLXN0YXRlLWZvY3VzIiwidWktc3RhdGUtZGlzYWJsZWQiLCJ1aS10YWJzLXBhbmVsIiwidWktd2lkZ2V0LWNvbnRlbnQiLCJ1aS1jb3JuZXItYm90dG9tIiwidWktdGFicy1oaWRlIl0uam9pbigiICIpKX0pLGIuY29va2llJiZ0aGlzLl9jb29raWUobnVsbCxiLmNvb2tpZSksdGhpc30sYWRkOmZ1bmN0aW9uKGMsZCxlKXtlPT09YiYmKGU9dGhpcy5hbmNob3JzLmxlbmd0aCk7dmFyIGY9dGhpcyxnPXRoaXMub3B0aW9ucyxoPWEoZy50YWJUZW1wbGF0ZS5yZXBsYWNlKC8jXHtocmVmXH0vZyxjKS5yZXBsYWNlKC8jXHtsYWJlbFx9L2csZCkpLGk9Yy5pbmRleE9mKCIjIik/dGhpcy5fdGFiSWQoYSgiYSIsaClbMF0pOmMucmVwbGFjZSgiIyIsIiIpO2guYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmRhdGEoImRlc3Ryb3kudGFicyIsITApO3ZhciBqPWYuZWxlbWVudC5maW5kKCIjIitpKTtyZXR1cm4gai5sZW5ndGh8fChqPWEoZy5wYW5lbFRlbXBsYXRlKS5hdHRyKCJpZCIsaSkuZGF0YSgiZGVzdHJveS50YWJzIiwhMCkpLGouYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSB1aS10YWJzLWhpZGUiKSxlPj10aGlzLmxpcy5sZW5ndGg/KGguYXBwZW5kVG8odGhpcy5saXN0KSxqLmFwcGVuZFRvKHRoaXMubGlzdFswXS5wYXJlbnROb2RlKSk6KGguaW5zZXJ0QmVmb3JlKHRoaXMubGlzW2VdKSxqLmluc2VydEJlZm9yZSh0aGlzLnBhbmVsc1tlXSkpLGcuZGlzYWJsZWQ9YS5tYXAoZy5kaXNhYmxlZCxmdW5jdGlvbihhLGIpe3JldHVybiBhPj1lPysrYTphfSksdGhpcy5fdGFiaWZ5KCksdGhpcy5hbmNob3JzLmxlbmd0aD09MSYmKGcuc2VsZWN0ZWQ9MCxoLmFkZENsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpLGoucmVtb3ZlQ2xhc3MoInVpLXRhYnMtaGlkZSIpLHRoaXMuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtmLl90cmlnZ2VyKCJzaG93IixudWxsLGYuX3VpKGYuYW5jaG9yc1swXSxmLnBhbmVsc1swXSkpfSksdGhpcy5sb2FkKDApKSx0aGlzLl90cmlnZ2VyKCJhZGQiLG51bGwsdGhpcy5fdWkodGhpcy5hbmNob3JzW2VdLHRoaXMucGFuZWxzW2VdKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGIpe2I9dGhpcy5fZ2V0SW5kZXgoYik7dmFyIGM9dGhpcy5vcHRpb25zLGQ9dGhpcy5saXMuZXEoYikucmVtb3ZlKCksZT10aGlzLnBhbmVscy5lcShiKS5yZW1vdmUoKTtyZXR1cm4gZC5oYXNDbGFzcygidWktdGFicy1zZWxlY3RlZCIpJiZ0aGlzLmFuY2hvcnMubGVuZ3RoPjEmJnRoaXMuc2VsZWN0KGIrKGIrMTx0aGlzLmFuY2hvcnMubGVuZ3RoPzE6LTEpKSxjLmRpc2FibGVkPWEubWFwKGEuZ3JlcChjLmRpc2FibGVkLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEhPWJ9KSxmdW5jdGlvbihhLGMpe3JldHVybiBhPj1iPy0tYTphfSksdGhpcy5fdGFiaWZ5KCksdGhpcy5fdHJpZ2dlcigicmVtb3ZlIixudWxsLHRoaXMuX3VpKGQuZmluZCgiYSIpWzBdLGVbMF0pKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oYil7Yj10aGlzLl9nZXRJbmRleChiKTt2YXIgYz10aGlzLm9wdGlvbnM7aWYoYS5pbkFycmF5KGIsYy5kaXNhYmxlZCk9PS0xKXJldHVybjtyZXR1cm4gdGhpcy5saXMuZXEoYikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksYy5kaXNhYmxlZD1hLmdyZXAoYy5kaXNhYmxlZCxmdW5jdGlvbihhLGMpe3JldHVybiBhIT1ifSksdGhpcy5fdHJpZ2dlcigiZW5hYmxlIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1tiXSx0aGlzLnBhbmVsc1tiXSkpLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oYSl7YT10aGlzLl9nZXRJbmRleChhKTt2YXIgYj10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiBhIT1jLnNlbGVjdGVkJiYodGhpcy5saXMuZXEoYSkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksYy5kaXNhYmxlZC5wdXNoKGEpLGMuZGlzYWJsZWQuc29ydCgpLHRoaXMuX3RyaWdnZXIoImRpc2FibGUiLG51bGwsdGhpcy5fdWkodGhpcy5hbmNob3JzW2FdLHRoaXMucGFuZWxzW2FdKSkpLHRoaXN9LHNlbGVjdDpmdW5jdGlvbihhKXthPXRoaXMuX2dldEluZGV4KGEpO2lmKGE9PS0xKWlmKHRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZSYmdGhpcy5vcHRpb25zLnNlbGVjdGVkIT0tMSlhPXRoaXMub3B0aW9ucy5zZWxlY3RlZDtlbHNlIHJldHVybiB0aGlzO3JldHVybiB0aGlzLmFuY2hvcnMuZXEoYSkudHJpZ2dlcih0aGlzLm9wdGlvbnMuZXZlbnQrIi50YWJzIiksdGhpc30sbG9hZDpmdW5jdGlvbihiKXtiPXRoaXMuX2dldEluZGV4KGIpO3ZhciBjPXRoaXMsZD10aGlzLm9wdGlvbnMsZT10aGlzLmFuY2hvcnMuZXEoYilbMF0sZj1hLmRhdGEoZSwibG9hZC50YWJzIik7dGhpcy5hYm9ydCgpO2lmKCFmfHx0aGlzLmVsZW1lbnQucXVldWUoInRhYnMiKS5sZW5ndGghPT0wJiZhLmRhdGEoZSwiY2FjaGUudGFicyIpKXt0aGlzLmVsZW1lbnQuZGVxdWV1ZSgidGFicyIpO3JldHVybn10aGlzLmxpcy5lcShiKS5hZGRDbGFzcygidWktc3RhdGUtcHJvY2Vzc2luZyIpO2lmKGQuc3Bpbm5lcil7dmFyIGc9YSgic3BhbiIsZSk7Zy5kYXRhKCJsYWJlbC50YWJzIixnLmh0bWwoKSkuaHRtbChkLnNwaW5uZXIpfXJldHVybiB0aGlzLnhocj1hLmFqYXgoYS5leHRlbmQoe30sZC5hamF4T3B0aW9ucyx7dXJsOmYsc3VjY2VzczpmdW5jdGlvbihmLGcpe2MuZWxlbWVudC5maW5kKGMuX3Nhbml0aXplU2VsZWN0b3IoZS5oYXNoKSkuaHRtbChmKSxjLl9jbGVhbnVwKCksZC5jYWNoZSYmYS5kYXRhKGUsImNhY2hlLnRhYnMiLCEwKSxjLl90cmlnZ2VyKCJsb2FkIixudWxsLGMuX3VpKGMuYW5jaG9yc1tiXSxjLnBhbmVsc1tiXSkpO3RyeXtkLmFqYXhPcHRpb25zLnN1Y2Nlc3MoZixnKX1jYXRjaChoKXt9fSxlcnJvcjpmdW5jdGlvbihhLGYsZyl7Yy5fY2xlYW51cCgpLGMuX3RyaWdnZXIoImxvYWQiLG51bGwsYy5fdWkoYy5hbmNob3JzW2JdLGMucGFuZWxzW2JdKSk7dHJ5e2QuYWpheE9wdGlvbnMuZXJyb3IoYSxmLGIsZSl9Y2F0Y2goZyl7fX19KSksYy5lbGVtZW50LmRlcXVldWUoInRhYnMiKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQucXVldWUoW10pLHRoaXMucGFuZWxzLnN0b3AoITEsITApLHRoaXMuZWxlbWVudC5xdWV1ZSgidGFicyIsdGhpcy5lbGVtZW50LnF1ZXVlKCJ0YWJzIikuc3BsaWNlKC0yLDIpKSx0aGlzLnhociYmKHRoaXMueGhyLmFib3J0KCksZGVsZXRlIHRoaXMueGhyKSx0aGlzLl9jbGVhbnVwKCksdGhpc30sdXJsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYW5jaG9ycy5lcShhKS5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIikuZGF0YSgibG9hZC50YWJzIixiKSx0aGlzfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmNob3JzLmxlbmd0aH19KSxhLmV4dGVuZChhLnVpLnRhYnMse3ZlcnNpb246IjEuOC4yNCJ9KSxhLmV4dGVuZChhLnVpLnRhYnMucHJvdG90eXBlLHtyb3RhdGlvbjpudWxsLHJvdGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD10aGlzLm9wdGlvbnMsZT1jLl9yb3RhdGV8fChjLl9yb3RhdGU9ZnVuY3Rpb24oYil7Y2xlYXJUaW1lb3V0KGMucm90YXRpb24pLGMucm90YXRpb249c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWQuc2VsZWN0ZWQ7Yy5zZWxlY3QoKythPGMuYW5jaG9ycy5sZW5ndGg/YTowKX0sYSksYiYmYi5zdG9wUHJvcGFnYXRpb24oKX0pLGY9Yy5fdW5yb3RhdGV8fChjLl91bnJvdGF0ZT1iP2Z1bmN0aW9uKGEpe2UoKX06ZnVuY3Rpb24oYSl7YS5jbGllbnRYJiZjLnJvdGF0ZShudWxsKX0pO3JldHVybiBhPyh0aGlzLmVsZW1lbnQuYmluZCgidGFic3Nob3ciLGUpLHRoaXMuYW5jaG9ycy5iaW5kKGQuZXZlbnQrIi50YWJzIixmKSxlKCkpOihjbGVhclRpbWVvdXQoYy5yb3RhdGlvbiksdGhpcy5lbGVtZW50LnVuYmluZCgidGFic3Nob3ciLGUpLHRoaXMuYW5jaG9ycy51bmJpbmQoZC5ldmVudCsiLnRhYnMiLGYpLGRlbGV0ZSB0aGlzLl9yb3RhdGUsZGVsZXRlIHRoaXMuX3Vucm90YXRlKSx0aGlzfX0pfShqUXVlcnkpOwoK"></script>
	<script id= "script_sl_jquery_easing_js" src="data:/text/plain;base64,LyoKICogalF1ZXJ5IEVhc2luZyB2MS4zIC0gaHR0cDovL2dzZ2QuY28udWsvc2FuZGJveC9qcXVlcnkvZWFzaW5nLwogKgogKiBVc2VzIHRoZSBidWlsdCBpbiBlYXNpbmcgY2FwYWJpbGl0aWVzIGFkZGVkIEluIGpRdWVyeSAxLjEKICogdG8gb2ZmZXIgbXVsdGlwbGUgZWFzaW5nIG9wdGlvbnMKICoKICogVEVSTVMgT0YgVVNFIC0galF1ZXJ5IEVhc2luZwogKiAKICogT3BlbiBzb3VyY2UgdW5kZXIgdGhlIEJTRCBMaWNlbnNlLiAKICogCiAqIENvcHlyaWdodCDCqSAyMDA4IEdlb3JnZSBNY0dpbmxleSBTbWl0aAogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICogCiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIAogKiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IAogKiBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAKICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UgCiAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqIAogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSAKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogKiAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCiAqICBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgCiAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCiAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICoKKi8KCi8vIHQ6IGN1cnJlbnQgdGltZSwgYjogYmVnSW5uSW5nIHZhbHVlLCBjOiBjaGFuZ2UgSW4gdmFsdWUsIGQ6IGR1cmF0aW9uCmpRdWVyeS5lYXNpbmdbJ2pzd2luZyddID0galF1ZXJ5LmVhc2luZ1snc3dpbmcnXTsKCmpRdWVyeS5leHRlbmQoIGpRdWVyeS5lYXNpbmcsCnsKCWRlZjogJ2Vhc2VPdXRRdWFkJywKCXN3aW5nOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCS8vYWxlcnQoalF1ZXJ5LmVhc2luZy5kZWZhdWx0KTsKCQlyZXR1cm4galF1ZXJ5LmVhc2luZ1tqUXVlcnkuZWFzaW5nLmRlZl0oeCwgdCwgYiwgYywgZCk7Cgl9LAoJZWFzZUluUXVhZDogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyoodC89ZCkqdCArIGI7Cgl9LAoJZWFzZU91dFF1YWQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIC1jICoodC89ZCkqKHQtMikgKyBiOwoJfSwKCWVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQgKyBiOwoJCXJldHVybiAtYy8yICogKCgtLXQpKih0LTIpIC0gMSkgKyBiOwoJfSwKCWVhc2VJbkN1YmljOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiBjKih0Lz1kKSp0KnQgKyBiOwoJfSwKCWVhc2VPdXRDdWJpYzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyooKHQ9dC9kLTEpKnQqdCArIDEpICsgYjsKCX0sCgllYXNlSW5PdXRDdWJpYzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlpZiAoKHQvPWQvMikgPCAxKSByZXR1cm4gYy8yKnQqdCp0ICsgYjsKCQlyZXR1cm4gYy8yKigodC09MikqdCp0ICsgMikgKyBiOwoJfSwKCWVhc2VJblF1YXJ0OiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiBjKih0Lz1kKSp0KnQqdCArIGI7Cgl9LAoJZWFzZU91dFF1YXJ0OiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiAtYyAqICgodD10L2QtMSkqdCp0KnQgLSAxKSArIGI7Cgl9LAoJZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCp0ICsgYjsKCQlyZXR1cm4gLWMvMiAqICgodC09MikqdCp0KnQgLSAyKSArIGI7Cgl9LAoJZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIGMqKHQvPWQpKnQqdCp0KnQgKyBiOwoJfSwKCWVhc2VPdXRRdWludDogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyooKHQ9dC9kLTEpKnQqdCp0KnQgKyAxKSArIGI7Cgl9LAoJZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCp0KnQgKyBiOwoJCXJldHVybiBjLzIqKCh0LT0yKSp0KnQqdCp0ICsgMikgKyBiOwoJfSwKCWVhc2VJblNpbmU6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIC1jICogTWF0aC5jb3ModC9kICogKE1hdGguUEkvMikpICsgYyArIGI7Cgl9LAoJZWFzZU91dFNpbmU6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIGMgKiBNYXRoLnNpbih0L2QgKiAoTWF0aC5QSS8yKSkgKyBiOwoJfSwKCWVhc2VJbk91dFNpbmU6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIC1jLzIgKiAoTWF0aC5jb3MoTWF0aC5QSSp0L2QpIC0gMSkgKyBiOwoJfSwKCWVhc2VJbkV4cG86IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuICh0PT0wKSA/IGIgOiBjICogTWF0aC5wb3coMiwgMTAgKiAodC9kIC0gMSkpICsgYjsKCX0sCgllYXNlT3V0RXhwbzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gKHQ9PWQpID8gYitjIDogYyAqICgtTWF0aC5wb3coMiwgLTEwICogdC9kKSArIDEpICsgYjsKCX0sCgllYXNlSW5PdXRFeHBvOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCWlmICh0PT0wKSByZXR1cm4gYjsKCQlpZiAodD09ZCkgcmV0dXJuIGIrYzsKCQlpZiAoKHQvPWQvMikgPCAxKSByZXR1cm4gYy8yICogTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKSArIGI7CgkJcmV0dXJuIGMvMiAqICgtTWF0aC5wb3coMiwgLTEwICogLS10KSArIDIpICsgYjsKCX0sCgllYXNlSW5DaXJjOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXJldHVybiAtYyAqIChNYXRoLnNxcnQoMSAtICh0Lz1kKSp0KSAtIDEpICsgYjsKCX0sCgllYXNlT3V0Q2lyYzogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQpIHsKCQlyZXR1cm4gYyAqIE1hdGguc3FydCgxIC0gKHQ9dC9kLTEpKnQpICsgYjsKCX0sCgllYXNlSW5PdXRDaXJjOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCWlmICgodC89ZC8yKSA8IDEpIHJldHVybiAtYy8yICogKE1hdGguc3FydCgxIC0gdCp0KSAtIDEpICsgYjsKCQlyZXR1cm4gYy8yICogKE1hdGguc3FydCgxIC0gKHQtPTIpKnQpICsgMSkgKyBiOwoJfSwKCWVhc2VJbkVsYXN0aWM6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJdmFyIHM9MS43MDE1ODt2YXIgcD0wO3ZhciBhPWM7CgkJaWYgKHQ9PTApIHJldHVybiBiOyAgaWYgKCh0Lz1kKT09MSkgcmV0dXJuIGIrYzsgIGlmICghcCkgcD1kKi4zOwoJCWlmIChhIDwgTWF0aC5hYnMoYykpIHsgYT1jOyB2YXIgcz1wLzQ7IH0KCQllbHNlIHZhciBzID0gcC8oMipNYXRoLlBJKSAqIE1hdGguYXNpbiAoYy9hKTsKCQlyZXR1cm4gLShhKk1hdGgucG93KDIsMTAqKHQtPTEpKSAqIE1hdGguc2luKCAodCpkLXMpKigyKk1hdGguUEkpL3AgKSkgKyBiOwoJfSwKCWVhc2VPdXRFbGFzdGljOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXZhciBzPTEuNzAxNTg7dmFyIHA9MDt2YXIgYT1jOwoJCWlmICh0PT0wKSByZXR1cm4gYjsgIGlmICgodC89ZCk9PTEpIHJldHVybiBiK2M7ICBpZiAoIXApIHA9ZCouMzsKCQlpZiAoYSA8IE1hdGguYWJzKGMpKSB7IGE9YzsgdmFyIHM9cC80OyB9CgkJZWxzZSB2YXIgcyA9IHAvKDIqTWF0aC5QSSkgKiBNYXRoLmFzaW4gKGMvYSk7CgkJcmV0dXJuIGEqTWF0aC5wb3coMiwtMTAqdCkgKiBNYXRoLnNpbiggKHQqZC1zKSooMipNYXRoLlBJKS9wICkgKyBjICsgYjsKCX0sCgllYXNlSW5PdXRFbGFzdGljOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCXZhciBzPTEuNzAxNTg7dmFyIHA9MDt2YXIgYT1jOwoJCWlmICh0PT0wKSByZXR1cm4gYjsgIGlmICgodC89ZC8yKT09MikgcmV0dXJuIGIrYzsgIGlmICghcCkgcD1kKiguMyoxLjUpOwoJCWlmIChhIDwgTWF0aC5hYnMoYykpIHsgYT1jOyB2YXIgcz1wLzQ7IH0KCQllbHNlIHZhciBzID0gcC8oMipNYXRoLlBJKSAqIE1hdGguYXNpbiAoYy9hKTsKCQlpZiAodCA8IDEpIHJldHVybiAtLjUqKGEqTWF0aC5wb3coMiwxMCoodC09MSkpICogTWF0aC5zaW4oICh0KmQtcykqKDIqTWF0aC5QSSkvcCApKSArIGI7CgkJcmV0dXJuIGEqTWF0aC5wb3coMiwtMTAqKHQtPTEpKSAqIE1hdGguc2luKCAodCpkLXMpKigyKk1hdGguUEkpL3AgKSouNSArIGMgKyBiOwoJfSwKCWVhc2VJbkJhY2s6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkLCBzKSB7CgkJaWYgKHMgPT0gdW5kZWZpbmVkKSBzID0gMS43MDE1ODsKCQlyZXR1cm4gYyoodC89ZCkqdCooKHMrMSkqdCAtIHMpICsgYjsKCX0sCgllYXNlT3V0QmFjazogZnVuY3Rpb24gKHgsIHQsIGIsIGMsIGQsIHMpIHsKCQlpZiAocyA9PSB1bmRlZmluZWQpIHMgPSAxLjcwMTU4OwoJCXJldHVybiBjKigodD10L2QtMSkqdCooKHMrMSkqdCArIHMpICsgMSkgKyBiOwoJfSwKCWVhc2VJbk91dEJhY2s6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkLCBzKSB7CgkJaWYgKHMgPT0gdW5kZWZpbmVkKSBzID0gMS43MDE1ODsgCgkJaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMioodCp0KigoKHMqPSgxLjUyNSkpKzEpKnQgLSBzKSkgKyBiOwoJCXJldHVybiBjLzIqKCh0LT0yKSp0KigoKHMqPSgxLjUyNSkpKzEpKnQgKyBzKSArIDIpICsgYjsKCX0sCgllYXNlSW5Cb3VuY2U6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJcmV0dXJuIGMgLSBqUXVlcnkuZWFzaW5nLmVhc2VPdXRCb3VuY2UgKHgsIGQtdCwgMCwgYywgZCkgKyBiOwoJfSwKCWVhc2VPdXRCb3VuY2U6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkKSB7CgkJaWYgKCh0Lz1kKSA8ICgxLzIuNzUpKSB7CgkJCXJldHVybiBjKig3LjU2MjUqdCp0KSArIGI7CgkJfSBlbHNlIGlmICh0IDwgKDIvMi43NSkpIHsKCQkJcmV0dXJuIGMqKDcuNTYyNSoodC09KDEuNS8yLjc1KSkqdCArIC43NSkgKyBiOwoJCX0gZWxzZSBpZiAodCA8ICgyLjUvMi43NSkpIHsKCQkJcmV0dXJuIGMqKDcuNTYyNSoodC09KDIuMjUvMi43NSkpKnQgKyAuOTM3NSkgKyBiOwoJCX0gZWxzZSB7CgkJCXJldHVybiBjKig3LjU2MjUqKHQtPSgyLjYyNS8yLjc1KSkqdCArIC45ODQzNzUpICsgYjsKCQl9Cgl9LAoJZWFzZUluT3V0Qm91bmNlOiBmdW5jdGlvbiAoeCwgdCwgYiwgYywgZCkgewoJCWlmICh0IDwgZC8yKSByZXR1cm4galF1ZXJ5LmVhc2luZy5lYXNlSW5Cb3VuY2UgKHgsIHQqMiwgMCwgYywgZCkgKiAuNSArIGI7CgkJcmV0dXJuIGpRdWVyeS5lYXNpbmcuZWFzZU91dEJvdW5jZSAoeCwgdCoyLWQsIDAsIGMsIGQpICogLjUgKyBjKi41ICsgYjsKCX0KfSk7CgovKgogKgogKiBURVJNUyBPRiBVU0UgLSBFQVNJTkcgRVFVQVRJT05TCiAqIAogKiBPcGVuIHNvdXJjZSB1bmRlciB0aGUgQlNEIExpY2Vuc2UuIAogKiAKICogQ29weXJpZ2h0IMKpIDIwMDEgUm9iZXJ0IFBlbm5lcgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICogCiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIAogKiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IAogKiBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAKICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UgCiAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqIAogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSAKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogKiAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCiAqICBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgCiAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCiAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICoKICov"></script>
	<script id= "script_sl_jquery_mousewheel_js" src="data:/text/plain;base64,LyogQ29weXJpZ2h0IChjKSAyMDA5IEJyYW5kb24gQWFyb24gKGh0dHA6Ly9icmFuZG9uYWFyb24ubmV0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQogKiBhbmQgR1BMIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocCkgbGljZW5zZXMuCiAqIFRoYW5rcyB0bzogaHR0cDovL2Fkb21hcy5vcmcvamF2YXNjcmlwdC1tb3VzZS13aGVlbC8gZm9yIHNvbWUgcG9pbnRlcnMuCiAqIFRoYW5rcyB0bzogTWF0aGlhcyBCYW5rKGh0dHA6Ly93d3cubWF0aGlhcy1iYW5rLmRlKSBmb3IgYSBzY29wZSBidWcgZml4LgogKgogKiBWZXJzaW9uOiAzLjAuMgogKiAKICogUmVxdWlyZXM6IDEuMi4yKwogKi8KKGZ1bmN0aW9uKGMpe3ZhciBhPVsiRE9NTW91c2VTY3JvbGwiLCJtb3VzZXdoZWVsIl07Yy5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWw9e3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5hZGRFdmVudExpc3RlbmVyKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZDspe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihhWy0tZF0sYixmYWxzZSl9fWVsc2V7dGhpcy5vbm1vdXNld2hlZWw9Yn19LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZDspe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhWy0tZF0sYixmYWxzZSl9fWVsc2V7dGhpcy5vbm1vdXNld2hlZWw9bnVsbH19fTtjLmZuLmV4dGVuZCh7bW91c2V3aGVlbDpmdW5jdGlvbihkKXtyZXR1cm4gZD90aGlzLmJpbmQoIm1vdXNld2hlZWwiLGQpOnRoaXMudHJpZ2dlcigibW91c2V3aGVlbCIpfSx1bm1vdXNld2hlZWw6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMudW5iaW5kKCJtb3VzZXdoZWVsIixkKX19KTtmdW5jdGlvbiBiKGYpe3ZhciBkPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGc9MCxlPXRydWU7Zj1jLmV2ZW50LmZpeChmfHx3aW5kb3cuZXZlbnQpO2YudHlwZT0ibW91c2V3aGVlbCI7aWYoZi53aGVlbERlbHRhKXtnPWYud2hlZWxEZWx0YS8xMjB9aWYoZi5kZXRhaWwpe2c9LWYuZGV0YWlsLzN9ZC51bnNoaWZ0KGYsZyk7cmV0dXJuIGMuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsZCl9fSkoalF1ZXJ5KTs=" ></script>
	<script id="script_zmviewer" src="data:/text/plain;base64,KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30uY2FsbCgpO2EuWj17fX0pKCksWi5zaG93SW1hZ2U9ZnVuY3Rpb24oYSxiLGMpe1ouVXRpbHMuejEyOCgpLFouVXRpbHMuejEyNygpLFouVXRpbHMuejEyNigpLFouVXRpbHMuejE2MygpLFoucGFnZUNvbnRhaW5lcklEPWEsWi5pbWFnZVBhdGg9Wi5VdGlscy56MjQzKGIpLFoucGFyYW1ldGVycz1aLlV0aWxzLnoyMzMoYyksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIixaLmluaXRpYWxpemUpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csImxvYWQiLFouaW5pdGlhbGl6ZSl9LFouaW5pdGlhbGl6ZT1mdW5jdGlvbigpe2FyZ3VtZW50cy5jYWxsZWUuZG9uZXx8KGFyZ3VtZW50cy5jYWxsZWUuZG9uZT0hMCxaLlV0aWxzLnoxNjQoKSxaLlV0aWxzLnoyNDkoWi5wYXJhbWV0ZXJzKSxaLlZpZXdlcj1uZXcgWi56MTIyLFouVXRpbHMuaXNTdHJWYWwoWi5jb3B5cmlnaHRQYXRoKT9aLlV0aWxzLmVuZm9yY2VDb3B5cmlnaHQoKTpaLlZpZXdlci56MTQ5KCksWi5kZWJ1ZyYmWi5VdGlscy50cmFjZShaLlV0aWxzLnoxODUoIno2NyIpKSl9LFouejEyMj1mdW5jdGlvbigpe1ouVmlld2VyRGlzcGxheT1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsIlZpZXdlckRpc3BsYXkiLCJpbmxpbmUtYmxvY2siLCJyZWxhdGl2ZSIsImhpZGRlbiIsIjEwMCUiLCIxMDAlIiwiMHB4IiwiMHB4Iiwibm9uZSIsIjBweCIsInRyYW5zcGFyZW50IG5vbmUiLCIwcHgiLCIwcHgiLCJwb2ludGVyIiksWi5wYWdlQ29udGFpbmVyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFoucGFnZUNvbnRhaW5lcklEKTt2YXIgYT1aLlV0aWxzLnoxNzYoWi5wYWdlQ29udGFpbmVyKTtaLnZpZXdlclc9cGFyc2VGbG9hdChhLndpZHRoKSxaLnZpZXdlckg9cGFyc2VGbG9hdChhLmhlaWdodCksaXNOYU4oWi52aWV3ZXJXKSYmKFoudmlld2VyVz1aLlZpZXdlckRpc3BsYXkuY2xpZW50V2lkdGgpLGlzTmFOKFoudmlld2VySCkmJihaLnZpZXdlckg9Wi5WaWV3ZXJEaXNwbGF5LmNsaWVudEhlaWdodCksWi5wYWdlQ29udGFpbmVyLmlubmVySFRNTD0iIixaLnBhZ2VDb250YWluZXIuYXBwZW5kQ2hpbGQoWi5WaWV3ZXJEaXNwbGF5KSx0aGlzLnoxNDk9ZnVuY3Rpb24oKXtaLlZpZXdwb3J0PW5ldyBaLnoxMjV9LHRoaXMuejE0OD1mdW5jdGlvbigpe1oudG9vbGJhclZpc2libGU+MCYmKFouVG9vbGJhcj1uZXcgWi56MTI0KFouVmlld3BvcnQpKSxaLm5hdmlnYXRvclZpc2libGU+MCYmKFouTmF2aWdhdG9yPW5ldyBaLnoxMjMoWi5WaWV3cG9ydCkpLFouTmF2aWdhdG9yJiZaLk5hdmlnYXRvci56Mjc3KCl9LHRoaXMuc2V0U2l6ZUFuZFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjLGQsZSl7Wi52aWV3ZXJXPWEsWi52aWV3ZXJIPWIsWi5WaWV3ZXJEaXNwbGF5LnN0eWxlLndpZHRoPWErInB4IixaLlZpZXdlckRpc3BsYXkuc3R5bGUuaGVpZ2h0PWIrInB4IixaLlZpZXdwb3J0JiZaLlZpZXdwb3J0LnoxODAoKSYmWi5WaWV3cG9ydC5zZXRTaXplQW5kUG9zaXRpb24oYSxiLGMsZCk7dmFyIGY9Wi50b29sYmFyUG9zaXRpb249PTE/Yi1aLnRvb2xiYXJIOjA7Wi5Ub29sYmFyRGlzcGxheSYmWi5Ub29sYmFyLnoxODAoKSYmKFouVG9vbGJhci5zZXRTaXplQW5kUG9zaXRpb24oYSxudWxsLG51bGwsZiksWi50b29sYmFyVmlzaWJsZT4xJiZaLlRvb2xiYXIuc2hvdyghMCkpLFouTmF2aWdhdG9yRGlzcGxheSYmWi5OYXZpZ2F0b3IuejE4MCgpJiYoWi5OYXZpZ2F0b3Iuc2V0U2l6ZUFuZFBvc2l0aW9uKG51bGwsbnVsbCxjLGQsWi5uYXZpZ2F0b3JGaXQpLFoubmF2aWdhdG9yVmlzaWJsZT4xJiZaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCEwKSksZSYmWi5WaWV3cG9ydC56Mjc0KCEwKX0sdGhpcy5zZXRJbWFnZVBhdGg9ZnVuY3Rpb24oYSl7Wi5WaWV3cG9ydC56MjkzQWxsU3RvcCghMCksWi5pbWFnZVBhdGg9Wi5VdGlscy56MjQzKGEpO3ZhciBiPW5ldyBaLnoxMDEsYz1aLlV0aWxzLnoxNDAoWi5pbWFnZVBhdGgrIi8iKyJJbWFnZVByb3BlcnRpZXMueG1sIik7Yi5sb2FkWE1MKGMpfX0sWi56MTI1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gY2QoKXt6PTEsQT0wLEI9MCxGPVtdLEc9W10sSD1bXSxJPVtdLEo9W10sSz1bXSxMPVtdLE09W10sTj1bXSxPPVtdLFA9W10sUT1bXSxSPTB9ZnVuY3Rpb24gY2UoKXtyZXR1cm4gYn1mdW5jdGlvbiBjZihhKXtiPWF9ZnVuY3Rpb24gY2coKXtoPVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2Iiwidmlld3BvcnRDb250YWluZXIiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsInZpc2libGUiLCIxcHgiLCIxcHgiLCIwcHgiLCIwcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLFouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChoKSxpPWgsaz1pLnN0eWxlLGw9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KFoudXNlQ2FudmFzPyJjYW52YXMiOiJkaXYiLCJ2aWV3cG9ydEJhY2tmaWxsRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwidmlzaWJsZSIsIjFweCIsIjFweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4IiksaC5hcHBlbmRDaGlsZChsKSxtPWwsbj1tLnN0eWxlLHA9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KFoudXNlQ2FudmFzPyJjYW52YXMiOiJkaXYiLCJ2aWV3cG9ydERpc3BsYXkiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsInZpc2libGUiLCIxcHgiLCIxcHgiLCIwcHgiLCIwcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLGguYXBwZW5kQ2hpbGQocCkscT1wLHI9cS5zdHlsZSxaLlV0aWxzLmlzU3RyVmFsKFoud2F0ZXJtYXJrUGF0aCkmJih0PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2Iiwid2F0ZXJtYXJrRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwidmlzaWJsZSIsIjFweCIsIjFweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4IiksaC5hcHBlbmRDaGlsZCh0KSx1PXQsdj11LnN0eWxlKSxaLlV0aWxzLmlzU3RyVmFsKFouaG90c3BvdFBhdGgpJiYodz1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsImhvdHNwb3RzRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwidmlzaWJsZSIsIjFweCIsIjFweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4IiksaC5hcHBlbmRDaGlsZCh3KSx4PXcseT14LnN0eWxlKSxaLnVzZUNhbnZhcz8obz1tLmdldENvbnRleHQoIjJkIikscz1xLmdldENvbnRleHQoIjJkIikpOihtLmlubmVySFRNTD0iIixxLmlubmVySFRNTD0iIiksdSYmKHUuaW5uZXJIVE1MPSIiKSx4JiYoeC5pbm5lckhUTUw9IiIpfWZ1bmN0aW9uIGNoKGEsYixjLGQpe2N8fChjPTApLGR8fChkPTApLFk9YSwkPWIsYmI9WSpYLGJjPSQqWCxiZD1iYi8yLGJlPWJjLzIsYmY9LSgoYmItWSkvMikrYyxiZz0oYmItWSkvMitjLGJoPS0oKGJjLSQpLzIpK2QsYmk9KGJjLSQpLzIrZCxpLndpZHRoPWJiLGkuaGVpZ2h0PWJjLGsud2lkdGg9YmIrInB4IixrLmhlaWdodD1iYysicHgiLGsubGVmdD1iZisicHgiLGsudG9wPWJoKyJweCIscS53aWR0aD1iYixxLmhlaWdodD1iYyx1JiYodS53aWR0aD1iYix1LmhlaWdodD1iYyx2LndpZHRoPWJiKyJweCIsdi5oZWlnaHQ9YmMrInB4IiksWi51c2VDYW52YXMmJihzLnRyYW5zbGF0ZShiZCxiZSkscy5zYXZlKCkpfWZ1bmN0aW9uIGNpKCl7dmFyIGE9Wi5pbWFnZVcsYj1aLmltYWdlSDt3aGlsZShhPmN8fGI+YylhPWEvMixiPWIvMix6Kys7YT1aLmltYWdlVyxiPVouaW1hZ2VIO2Zvcih2YXIgZD16LTE7ZD49MDtkLS0pSFtkXT1hLElbZF09YixKW2RdPU1hdGguY2VpbChIW2RdL2MpLEtbZF09TWF0aC5jZWlsKElbZF0vYyksTFtkXT1KW2RdKktbZF0sYT1hLzIsYj1iLzJ9ZnVuY3Rpb24gY2ooKXtaLmluaXRpYWxYfHwoWi5pbml0aWFsWD1aLmltYWdlVy8yKSxaLmluaXRpYWxZfHwoWi5pbml0aWFsWT1aLmltYWdlSC8yKTt2YXIgYT1jUigpO1ouZml0WiYmWi5maXRaIT1hJiYoWi5pbml0aWFsWj09Wi5maXRaJiYoWi5pbml0aWFsWj1udWxsKSxaLm1pblo9PVouZml0WiYmKFoubWluWj1udWxsKSxaLm1heFo9PVouZml0WiYmKFoubWF4Wj1udWxsKSxaLmZpdFo9bnVsbCksWi5maXRafHwoWi5maXRaPWEpLFouaW5pdGlhbFp8fChaLmluaXRpYWxaPVouZml0WiksWi5taW5afHwoWi5taW5aPVouZml0WiksWi5tYXhafHwoWi5tYXhaPVouZml0WiksWi5pbml0aWFsWjxaLm1pblomJihaLmluaXRpYWxaPVoubWluWiksWi5pbml0aWFsWj5aLm1heFomJihaLmluaXRpYWxaPVoubWF4Wil9ZnVuY3Rpb24gY2soKXtjbChXKSx6PlQmJihjbChWKSx6PlMmJmNsKFUpKSxHLnNvcnQoKSxHPVouVXRpbHMuejI0MihHKSxjcyhHLGNKLDApfWZ1bmN0aW9uIGNsKGEpe3ZhciBiPUpbYV0tMSxjPUtbYV0tMTtmb3IodmFyIGQ9MDtkPD1jO2QrKylmb3IodmFyIGU9MDtlPD1iO2UrKylHLnB1c2goYSsiLSIrZSsiLSIrZCl9ZnVuY3Rpb24gY20oYSxiKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKSxkPWJmLXBhcnNlRmxvYXQoay5sZWZ0KSxlPWJoLXBhcnNlRmxvYXQoay50b3ApO2subGVmdD1iZisicHgiLGsudG9wPWJoKyJweCIsWi5pbWFnZVg9Wi5pbWFnZVgrZC9aLmltYWdlWixaLmltYWdlWT1aLmltYWdlWStlL1ouaW1hZ2VaLGNyKG0sQixGLCExLCExKSxjcihxLEEsTywhMSwhMSksY1koKTt2YXIgZj1jdygpO2E+MD9mLnJpZ2h0PWYubGVmdDphPDAmJihmLmxlZnQ9Zi5yaWdodCksYj4wP2YuYm90dG9tPWYudG9wOmI8MCYmKGYudG9wPWYuYm90dG9tKTtmb3IodmFyIGc9Zi50b3A7Zzw9Zi5ib3R0b207ZysrKWZvcih2YXIgaD1mLmxlZnQ7aDw9Zi5yaWdodDtoKyspUS5wdXNoKEErIi0iK2grIi0iK2cpO3ZhciBpPVEubGVuZ3RoO2Zvcih2YXIgaj0wO2o8aTtqKyspe3ZhciBsPVFbal07aWYobCl7dmFyIG49bmV3IGNHKGwpO2NJKG4sYyxjSyl9fWk+MzAmJlEuc3BsaWNlKGktMzAsMzApfWZ1bmN0aW9uIGNuKCl7dmFyIGE9ITE7cGFyc2VGbG9hdChyLndpZHRoKSE9cS53aWR0aCYmKFoudXNlQ2FudmFzJiYoci53aWR0aD1xLndpZHRoKyJweCIsci5oZWlnaHQ9cS5oZWlnaHQrInB4IixyLmxlZnQ9IjBweCIsci50b3A9IjBweCIscy5yZXN0b3JlKCkscy5zYXZlKCkscy5zY2FsZShDLEMpKSxhPSEwKTtpZihwYXJzZUZsb2F0KGsubGVmdCkhPWJmfHxwYXJzZUZsb2F0KGsudG9wKSE9Ymgpe3ZhciBiPXBhcnNlRmxvYXQoay5sZWZ0KS1iZixjPXBhcnNlRmxvYXQoay50b3ApLWJoO2subGVmdD1iZisicHgiLGsudG9wPWJoKyJweCIsYmw9cGFyc2VGbG9hdChuLmxlZnQpK2IsYm09cGFyc2VGbG9hdChuLnRvcCkrYyxuLmxlZnQ9YmwrInB4IixuLnRvcD1ibSsicHgiO3ZhciBkPWNCKEEsQyk7Wi5pbWFnZVg9Wi5pbWFnZVgtYi9kLFouaW1hZ2VZPVouaW1hZ2VZLWMvZCxhPSEwfWEmJihjcihxLEEsTywhMCwhMSksY1koKSl9ZnVuY3Rpb24gY28oKXtDIT1EJiYoWi5pbWFnZVo9YnopLFouaW1hZ2VaPFoubWluWiYmKFouaW1hZ2VaPVoubWluWik7dmFyIGE9ZCxiPXo7d2hpbGUoYS8yPj1aLmltYWdlWiliLS0sYS89MjtiPWItMTwwPzA6Yi0xO3ZhciBjPWNDKGIsWi5pbWFnZVopO2lmKGIhPUF8fGMhPUMpWi51c2VDYW52YXMmJihzLnJlc3RvcmUoKSxzLnNhdmUoKSxzLnNjYWxlKGMsYykpLEE9YixDPWM7RD1DfWZ1bmN0aW9uIGNwKCl7Qj1BPlM/VTpBPlQ/VjpXLEU9Y0MoQixaLmltYWdlWiksdGllckJhY2tmaWxsVz1IW0JdLHRpZXJCYWNrZmlsbEg9SVtCXSxtLndpZHRoPXRpZXJCYWNrZmlsbFcsbS5oZWlnaHQ9dGllckJhY2tmaWxsSDt2YXIgYT10aWVyQmFja2ZpbGxXKkUsYj10aWVyQmFja2ZpbGxIKkUsYz1aLmltYWdlWCpaLmltYWdlWixkPVouaW1hZ2VZKlouaW1hZ2VaO2JqPWEsYms9YixibD1iZC1jLGJtPWJlLWQsWi51c2VDYW52YXMmJihuLndpZHRoPWJqKyJweCIsbi5oZWlnaHQ9YmsrInB4Iiksbi5sZWZ0PWJsKyJweCIsbi50b3A9Ym0rInB4In1mdW5jdGlvbiBjcSgpe3ZhciBhPWN3KCk7Zm9yKHZhciBiPWEudG9wLGM9YS5ib3R0b207Yjw9YztiKyspZm9yKHZhciBkPWEubGVmdCxlPWEucmlnaHQ7ZDw9ZTtkKyspTi5wdXNoKEErIi0iK2QrIi0iK2IpO1Auc29ydCgpLE4uc29ydCgpLFA9Wi5VdGlscy56MjQyKFApLE49Wi5VdGlscy56MjQyKE4pO3ZhciBmPVouVXRpbHMuaW50ZXJzZWN0KE4sUCk7Tj1aLlV0aWxzLnN1YnRyYWN0KE4sUCksUj10aWxlc0xvYWRpbmdOYW1lc0xlbmd0aD1OLmxlbmd0aCxaLlRvb2xiYXJEaXNwbGF5JiZaLlRvb2xiYXIuejE4MCgpJiZaLlRvb2xiYXIuc2hvd1Byb2dyZXNzKFIsdGlsZXNMb2FkaW5nTmFtZXNMZW5ndGgpLFA9Wi5VdGlscy5zdWJ0cmFjdChQLGYpLFA9UC5jb25jYXQoZiksdGlsZXNMb2FkaW5nTmFtZXNMZW5ndGghPTAmJihNPVtdKX1mdW5jdGlvbiBjcihhLGIsYyxkLGUpe2V8fGN0KGEpO2lmKGQpe3ZhciBmPU1hdGguZmxvb3IoYy5sZW5ndGgvMik7Zm9yKHZhciBnPWYsaD1jLmxlbmd0aDtnPGg7ZysrKXt2YXIgaT1jW2ddO2kmJmkudD09YiYmY00oYSxiLGkpO2lmKGMubGVuZ3RoLWctMSE9Zyl7dmFyIGk9Y1tjLmxlbmd0aC1nLTFdO2kmJmkudD09YiYmY00oYSxiLGkpfX19ZWxzZSBmb3IodmFyIGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspe3ZhciBpPWNbZ107aSYmaS50PT1iJiZjTShhLGIsaSl9fWZ1bmN0aW9uIGNzKGEsYixjKXtpZihhLmxlbmd0aD4wKXt2YXIgZD0obmV3IERhdGUpLmdldFRpbWUoKTtpZihjKXt2YXIgZT1NYXRoLmZsb29yKGEubGVuZ3RoLzIpO2Zvcih2YXIgZj1lLGc9YS5sZW5ndGg7ZjxnO2YrKyl7dmFyIGg9YVtmXTtpZihoKXt2YXIgaT1uZXcgY0coaCk7Y0koaSxkLGIpfWlmKGEubGVuZ3RoLWYtMSE9Zil7dmFyIGg9YVthLmxlbmd0aC1mLTFdO2lmKGgpe3ZhciBpPW5ldyBjRyhoKTtjSShpLGQsYil9fX19ZWxzZSBmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspe3ZhciBoPWFbZl07aWYoaCl7dmFyIGk9bmV3IGNHKGgpO2NJKGksZCxiKX19fX1mdW5jdGlvbiBjdChhKXtpZihhKWlmKFoudXNlQ2FudmFzJiZhLnRhZ05hbWU9PSJDQU5WQVMiKXt2YXIgYj1hLmdldENvbnRleHQoIjJkIik7Yi5zYXZlKCksYi5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGIuY2xlYXJSZWN0KDAsMCxiLmNhbnZhcy53aWR0aCxiLmNhbnZhcy5oZWlnaHQpLGIucmVzdG9yZSgpfWVsc2UgaWYoYS5oYXNDaGlsZE5vZGVzKCkpd2hpbGUoYS5jaGlsZE5vZGVzLmxlbmd0aD49MSlhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gY3UoKXtpZihaLlRvb2xiYXJEaXNwbGF5JiZaLlRvb2xiYXIuejE4MCgpKXt2YXIgYT1jQihBLEMpO1ouVG9vbGJhci56MjY2KGEpfX1mdW5jdGlvbiBjdigpe1ouTmF2aWdhdG9yJiZaLk5hdmlnYXRvci56MTgwKCkmJlouTmF2aWdhdG9yLnoyNjgoKX1mdW5jdGlvbiBjdygpe3JldHVybiBuZXcgY3ooY3goKSxBKX1mdW5jdGlvbiBjeCgpe3ZhciBhPXBhcnNlRmxvYXQoay5sZWZ0KS1iZixiPXBhcnNlRmxvYXQoay50b3ApLWJoO2lmKFoudXNlQ2FudmFzKXt2YXIgYz1wYXJzZUZsb2F0KGsud2lkdGgpL2kud2lkdGg7YS89YyxiLz1jfXZhciBkPWNCKEEsQyk7cmV0dXJuIGEhPTAmJihhLz1kKSxiIT0wJiYoYi89ZCksbmV3IGNBKFouaW1hZ2VYLWEsWi5pbWFnZVktYiwtKFkvMiksWS8yLC0oJC8yKSwkLzIsZCl9ZnVuY3Rpb24gY3koKXt2YXIgYT1wYXJzZUZsb2F0KGsubGVmdCktYmYsYj1wYXJzZUZsb2F0KGsudG9wKS1iaDtpZihaLnVzZUNhbnZhcyl7dmFyIGM9cGFyc2VGbG9hdChrLndpZHRoKS9pLndpZHRoO2EvPWMsYi89Y312YXIgZD1jQihBLEMpO3JldHVybiBhIT0wJiYoYS89ZCksYiE9MCYmKGIvPWQpLG5ldyBjQShaLmltYWdlWC1hLFouaW1hZ2VZLWIsLShiYi8yKSxiYi8yLC0oYmMvMiksYmMvMixkKX1mdW5jdGlvbiBjeihhLGIpe3ZhciBkPWNCKGIsMSksZT1NYXRoLmZsb29yKGEubGVmdCpkL2MpLGY9TWF0aC5mbG9vcihhLnJpZ2h0KmQvYyksZz1NYXRoLmZsb29yKGEudG9wKmQvYyksaD1NYXRoLmZsb29yKGEuYm90dG9tKmQvYyk7ZTwwJiYoZT0wKSxmPkpbQV0tMSYmKGY9SltBXS0xKSxnPDAmJihnPTApLGg+S1tBXS0xJiYoaD1LW0FdLTEpLHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9Zix0aGlzLnRvcD1nLHRoaXMuYm90dG9tPWh9ZnVuY3Rpb24gY0EoYSxiLGMsZCxlLGYsZyl7dGhpcy5sZWZ0PWErYy9nLHRoaXMucmlnaHQ9YStkL2csdGhpcy50b3A9YitlL2csdGhpcy5ib3R0b209YitmL2d9ZnVuY3Rpb24gY0IoYSxiKXt2YXIgYz1iKihIW2FdL1ouaW1hZ2VXKTtyZXR1cm4gY31mdW5jdGlvbiBjQyhhLGIpe3ZhciBjPWIvKEhbYV0vWi5pbWFnZVcpO3JldHVybiBjfWZ1bmN0aW9uIGNEKGEsYil7dmFyIGM9YS1aLlV0aWxzLnoxNzQoWi5WaWV3ZXJEaXNwbGF5KS54LGQ9Yi1aLlV0aWxzLnoxNzQoWi5WaWV3ZXJEaXNwbGF5KS55O3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChjLGQpfWZ1bmN0aW9uIGNFKGEsYil7dmFyIGM9cGFyc2VGbG9hdChrLmxlZnQpK2JkLGQ9cGFyc2VGbG9hdChrLnRvcCkrYmUsZT1hLWMsZj1iLWQsZz1lL1ouaW1hZ2VaLGg9Zi9aLmltYWdlWixpPVouaW1hZ2VYK2csaj1aLmltYWdlWStoO3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChpLGopfWZ1bmN0aW9uIGNGKGEsYil7dmFyIGM9Wi5pbWFnZVgtYSxkPVouaW1hZ2VZLWIsZT1jKlouaW1hZ2VaLGY9ZCpaLmltYWdlWixnPXBhcnNlRmxvYXQoay5sZWZ0KStiZCxoPXBhcnNlRmxvYXQoay50b3ApK2JlLGk9Zy1lLGo9aC1mO3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChpLGopfWZ1bmN0aW9uIGNHKGEpe3RoaXMubmFtZT1hLHRoaXMudD1wYXJzZUludChhLnN1YnN0cmluZygwLGEuaW5kZXhPZigiLSIpKSwxMCksdGhpcy5jPXBhcnNlSW50KGEuc3Vic3RyaW5nKGEuaW5kZXhPZigiLSIpKzEsYS5sYXN0SW5kZXhPZigiLSIpKSwxMCksdGhpcy5yPXBhcnNlSW50KGEuc3Vic3RyaW5nKGEubGFzdEluZGV4T2YoIi0iKSsxKSwxMCksdGhpcy54PU1hdGguZmxvb3IodGhpcy5jKmMpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMucipjKSx0aGlzLmltYWdlPW51bGwsdGhpcy5hbHBoYT0wLHRoaXMudXJsPVouVXRpbHMuejE0MChjSCh0aGlzLnQsdGhpcy5jLHRoaXMucix0aGlzLm5hbWUpKSx0aGlzLmVsbXQ9bnVsbCx0aGlzLnN0eWxlPW51bGx9ZnVuY3Rpb24gY0goYSxiLGQsZSl7dmFyIGY9ZCpKW2FdK2I7Zm9yKHZhciBnPTA7ZzxhO2crKylmKz1MW2ddO3ZhciBoPU1hdGguZmxvb3IoZi9jKSxpPVouaW1hZ2VQYXRoKyIvIisiVGlsZUdyb3VwIitoKyIvIitlKyIuanBnIjtyZXR1cm4gaX1mdW5jdGlvbiBjSShhLGIsYyl7YS5sb2FkaW5nPWNiLnoyMTJJbWFnZShhLnVybCxaLlV0aWxzLmNyZWF0ZUNhbGxiYWNrKG51bGwsYyxhLGIpKX1mdW5jdGlvbiBjSihhLGIsYyl7aWYoYSYmYiYmYyl7YS5pbWFnZT1jO3ZhciBkPWEubmFtZTtGLnB1c2goYSk7dmFyIGU9Ry5pbmRleE9mKGQpO2UhPS0xJiZHLnNwbGljZShlLDEpLGEuYWxwaGE9MSxhLnQ9PUImJmNNKG0sQixhKX19ZnVuY3Rpb24gY0soYSxiLGMpe2lmKGEmJmImJmMpe2EuaW1hZ2U9Yzt2YXIgZD1hLm5hbWU7Y00ocSxBLGEpfX1mdW5jdGlvbiBjTChhLGIsYyl7aWYoYSYmYiYmYyl7YS5pbWFnZT1jO3ZhciBkPWEubmFtZTtPLnB1c2goYSksUC5wdXNoKGQpO3ZhciBlPU4uaW5kZXhPZihkKTtlIT0tMSYmTi5zcGxpY2UoZSwxKSxNLnB1c2goYSksYkZ8fChiRj13aW5kb3cuc2V0SW50ZXJ2YWwoY1AsNTApKTt2YXIgZz1OLmxlbmd0aDtnPT0wJiYoWi51c2VDYW52YXMmJmNyKHEsQSxPLCEwLCExKSxQLmxlbmd0aD5mJiZjUSgpLFI9MCksWi5Ub29sYmFyRGlzcGxheSYmWi5Ub29sYmFyLnoxODAoKSYmWi5Ub29sYmFyLnNob3dQcm9ncmVzcyhSLGcpfX1mdW5jdGlvbiBjTShhLGIsYyl7dmFyIGQ9Yy54LGU9Yy55LGY9Y0IoYiwxKTtpZihaLnVzZUNhbnZhcylhPT1xJiYoZC09Wi5pbWFnZVgqZixlLT1aLmltYWdlWSpmKSxjTihhLGMsZCxlKTtlbHNle3ZhciBnO2E9PXE/KGQtPVouaW1hZ2VYKmYtYmQvQyxlLT1aLmltYWdlWSpmLWJlL0MsZz1DKTpnPUUsY08oYSxjLGQsZSxnKX19ZnVuY3Rpb24gY04oYSxiLGMsZCl7dmFyIGU9YS5nZXRDb250ZXh0KCIyZCIpO1ouYWxwaGFTdXBwb3J0ZWQmJmIuYWxwaGE8MT8oZS5nbG9iYWxBbHBoYT1iLmFscGhhLGUuZHJhd0ltYWdlKGIuaW1hZ2UsYyxkKSxlLmdsb2JhbEFscGhhPTEpOmUuZHJhd0ltYWdlKGIuaW1hZ2UsYyxkKX1mdW5jdGlvbiBjTyhhLGIsYyxkLGUpe2IuZWxtdHx8KGIuZWxtdD1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImltZyIpLGIuZWxtdC5vbm1vdXNlZG93bj1aLlV0aWxzLnByZXZlbnREZWZhdWx0LFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihiLmVsbXQsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxiLmVsbXQuc3JjPWIudXJsLGIuc3R5bGU9Yi5lbG10LnN0eWxlLGIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixaLlV0aWxzLnJlbmRlclF1YWxpdHkoYixaLnJlbmRlclF1YWxpdHkpLFouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZCYmKGIuc3R5bGVbWi5jc3NUcmFuc2Zvcm1Qcm9wZXJ0eSsiT3JpZ2luIl09IjBweCAwcHgiKSksYi5lbG10LnBhcmVudE5vZGUhPWEmJmEuYXBwZW5kQ2hpbGQoYi5lbG10KTt2YXIgZj1iLnN0eWxlO2YuZGlzcGxheT0ibm9uZSIsWi5jc3NUcmFuc2Zvcm1zU3VwcG9ydGVkP2ZbWi5jc3NUcmFuc2Zvcm1Qcm9wZXJ0eV09WyJtYXRyaXgoIiwoYi5pbWFnZS53aWR0aC9iLmVsbXQud2lkdGgqZSkudG9GaXhlZCg4KSwiLDAsMCwiLChiLmltYWdlLmhlaWdodC9iLmVsbXQuaGVpZ2h0KmUpLnRvRml4ZWQoOCksIiwiLChjKmUpLnRvRml4ZWQoOCksWi5jc3NUcmFuc2Zvcm1Ob1VuaXRzPyIsIjoicHgsIiwoZCplKS50b0ZpeGVkKDgpLFouY3NzVHJhbnNmb3JtTm9Vbml0cz8iKSI6InB4KSJdLmpvaW4oIiIpOihmLndpZHRoPWIuaW1hZ2Uud2lkdGgqZSsicHgiLGYuaGVpZ2h0PWIuaW1hZ2UuaGVpZ2h0KmUrInB4IixmLmxlZnQ9YyplKyJweCIsZi50b3A9ZCplKyJweCIpLGYuZGlzcGxheT0iaW5saW5lLWJsb2NrIixaLlV0aWxzLnNldE9wYWNpdHkoYixiLmFscGhhKX1mdW5jdGlvbiBjUChhKXt2YXIgYj1NLmxlbmd0aCxjPTA7Zm9yKHZhciBkPTA7ZDxiO2QrKyl7dmFyIGU9TVtkXTtlLnQ9PUEmJihlLmFscGhhPDE/KGUuYWxwaGErPWJFLGUuYWxwaGE+MSYmKGUuYWxwaGE9MSksY00ocSxBLGUpKTooYysrLGM+PWImJih3aW5kb3cuY2xlYXJJbnRlcnZhbChiRiksYkY9bnVsbCkpKX19ZnVuY3Rpb24gY1EoKXt2YXIgYT1QLmxlbmd0aC1mO2Zvcih2YXIgYj0wO2I8YTtiKyspaj1QLmluZGV4T2YoT1tiXS5uYW1lKSxqIT0tMSYmUC5zcGxpY2UoaiwxKSxPLnNwbGljZShiLDEpfWZ1bmN0aW9uIGNSKCl7cmV0dXJuIFouaW1hZ2VXL1ouaW1hZ2VIPlkvJD9ZL1ouaW1hZ2VXOiQvWi5pbWFnZUh9ZnVuY3Rpb24gY1MoYSxiKXtpZihaLmNvbnN0cmFpblBhbil7dmFyIGM9bmV3IGNBKGEsYiwtKFkvMiksWS8yLC0oJC8yKSwkLzIsWi5pbWFnZVopLGQ9Yy5sZWZ0LGU9Yy5yaWdodCxmPWMudG9wLGc9Yy5ib3R0b207Wi5pbWFnZVcqWi5pbWFnZVo+WT9kPDA/YT1ZLzIvWi5pbWFnZVo6ZT5aLmltYWdlVyYmKGE9Wi5pbWFnZVctWS8yL1ouaW1hZ2VaKTphPVouaW1hZ2VXLzIsWi5pbWFnZUgqWi5pbWFnZVo+JD9mPDA/Yj0kLzIvWi5pbWFnZVo6Zz5aLmltYWdlSCYmKGI9Wi5pbWFnZUgtJC8yL1ouaW1hZ2VaKTpiPVouaW1hZ2VILzJ9cmV0dXJuIG5ldyBaLlV0aWxzLlBvaW50KGEsYil9ZnVuY3Rpb24gY1QoYSxiKXtpZihaLmNvbnN0cmFpblBhbil7dmFyIGM9Y0IoQSxDKSxkPVouaW1hZ2VYLGU9Wi5pbWFnZVksZj1uZXcgY0EoZCxlLC0oWS8yKSxZLzIsLSgkLzIpLCQvMixjKSxnPWYubGVmdCxoPWYucmlnaHQsaT1mLnRvcCxqPWYuYm90dG9tO1ouaW1hZ2VXKmM+WT9nPDA/YSs9ZypjOmg+Wi5pbWFnZVcmJihhLT0oWi5pbWFnZVctaCkqYyk6YSs9KGQtWi5pbWFnZVcvMikqYyxaLmltYWdlSCpjPiQ/aTwwP2IrPWkqYzpqPlouaW1hZ2VIJiYoYi09KFouaW1hZ2VILWopKmMpOmIrPShlLVouaW1hZ2VILzIpKmN9cmV0dXJuIG5ldyBaLlV0aWxzLlBvaW50KGEsYil9ZnVuY3Rpb24gY1UoYSxiKXtpZihaLmNvbnN0cmFpblBhbil7dmFyIGM9Wi5pbWFnZVgtKGEtYmYpL1ouaW1hZ2VaLGQ9Wi5pbWFnZVktKGItYmgpL1ouaW1hZ2VaLGU9bmV3IGNBKGMsZCwtKFkvMiksWS8yLC0oJC8yKSwkLzIsWi5pbWFnZVopLGY9ZS5sZWZ0LGc9ZS5yaWdodCxoPWUudG9wLGk9ZS5ib3R0b207Wi5pbWFnZVcqWi5pbWFnZVo+WT9mPDA/YSs9ZipaLmltYWdlWjpnPlouaW1hZ2VXJiYoYS09KFouaW1hZ2VXLWcpKlouaW1hZ2VaKTphKz0oYy1aLmltYWdlVy8yKSpaLmltYWdlWixaLmltYWdlSCpaLmltYWdlWj4kP2g8MD9iKz1oKlouaW1hZ2VaOmk+Wi5pbWFnZUgmJihiLT0oWi5pbWFnZUgtaSkqWi5pbWFnZVopOmIrPShkLVouaW1hZ2VILzIpKlouaW1hZ2VafXJldHVybiBuZXcgWi5VdGlscy5Qb2ludChhLGIpfWZ1bmN0aW9uIGNWKGEpe3JldHVybiBhPloubWF4Wj9hPVoubWF4WjphPFoubWluWiYmKGE9Wi5taW5aKSxhfWZ1bmN0aW9uIGNXKCl7Ylo9bmV3IEltYWdlLGIkPXBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6NzMiKSksYloudXJsPVoud2F0ZXJtYXJrUGF0aCxiWi5vbmxvYWQ9Y1gsYloub25lcnJvcj1jWixiWi5zcmM9Wi53YXRlcm1hcmtQYXRofWZ1bmN0aW9uIGNYKCl7aWYodSl7dmFyIGE9cGFyc2VGbG9hdChaLlV0aWxzLnoxODUoIno3NCIpKSxiPXBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6NzYiKSksYz1wYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejc1IikpLGQ9Y0IoQSxDKSxlPShaLmltYWdlVypkLXUud2lkdGgpLzIsZj0oWi5pbWFnZUgqZC11LmhlaWdodCkvMixnPShaLmltYWdlVy8yLVouaW1hZ2VYKSpkLGg9KFouaW1hZ2VILzItWi5pbWFnZVkpKmQsaT1kPGE/YTpkLGo9TWF0aC5yb3VuZChaLmltYWdlVy9iKSxrPU1hdGgucm91bmQoWi5pbWFnZUgvYyksbD1jeSgpO3dpU2NhbGVkVz1iWi53aWR0aCppLHdpU2NhbGVkSD1iWi5oZWlnaHQqaTt2YXIgbT0wLG49MDtmb3IodmFyIG89MTtvPD1qO28rKylmb3IodmFyIHA9MTtwPD1rO3ArKyl7dmFyIHE9TWF0aC5yb3VuZChaLmltYWdlVy8oaisxKSpvKSxyPU1hdGgucm91bmQoWi5pbWFnZUgvKGsrMSkqcCk7aWYocT5sLmxlZnQmJnE8bC5yaWdodCYmcj5sLnRvcCYmcjxsLmJvdHRvbSl7dmFyIHM9TWF0aC5yb3VuZChxKmQtd2lTY2FsZWRXLzItZStnKSx0PU1hdGgucm91bmQocipkLXdpU2NhbGVkSC8yLWYraCk7aWYoWi5pbWFnZVc+NGUzKXt2YXIgdj1tKzEwMCx3PW4rMTAwO2lmKHM8diYmdDx3KWNvbnRpbnVlO209cyxuPXR9dmFyIHg9YlouY2xvbmVOb2RlKCEwKTtaLlV0aWxzLnNldE9wYWNpdHkoeCxiJCkseC53aWR0aD13aVNjYWxlZFcseC5oZWlnaHQ9d2lTY2FsZWRIO3ZhciB5PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2Iiwid2lDIiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLHdpU2NhbGVkVysicHgiLHdpU2NhbGVkSCsicHgiLHMrInB4Iix0KyJweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4Iik7eS5hcHBlbmRDaGlsZCh4KSx1LmFwcGVuZENoaWxkKHkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih4LCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHgsIm1vdXNlZG93biIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCl9fX19ZnVuY3Rpb24gY1koKXt1JiYoY3QodSksY1goKSl9ZnVuY3Rpb24gY1ooKXtaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6OTciKSt0aGlzLnVybCl9ZnVuY3Rpb24gYyQoYixjLGQpe2EuejI5M0FsbFN0b3AoKSxaLmltYWdlWj1jVihkKTt2YXIgZT1jUyhiLGMpO1ouaW1hZ2VYPWUueCxaLmltYWdlWT1lLnksYS56Mjc0KCEwKX1mdW5jdGlvbiBjXygpe2lmKGJCKXtkYihidixidyxieCwhMSk7aWYoYnYhPT0wfHxidyE9PTB8fGJ4IT09MCliQj13aW5kb3cuc2V0VGltZW91dChjXyxiQSl9fWZ1bmN0aW9uIGRhKCl7Yk88Ykk/KGRiKGJKLGJLLGJMLCEwKSxiTysrLGJOPXdpbmRvdy5zZXRUaW1lb3V0KGRhLGJIKSk6KEM9Yk8qYkwrY0MoQSxaLmltYWdlWiksYS56MjkzQWxsU3RvcCgpLGEuejI3MyghMCkpfWZ1bmN0aW9uIGRiKGEsYixkLGUpe3ZhciBmLGcsaCxpPSExLGo9ITEsbD0hMTtpZihkIT0wKXt2YXIgbT1DKigxK2QpO2UmJihtPUMrZCk7dmFyIG49Y0IoQSxtKTtoPWNWKG4pO2lmKGghPVouaW1hZ2VaKXt2YXIgbz1kZShoKTtvJiYoIWUsaj0hMCxsPSEwKX19aWYoYSE9MHx8YiE9MCl7dmFyIHA9cGFyc2VGbG9hdChrLmxlZnQpK2Escz1wYXJzZUZsb2F0KGsudG9wKStiLHQ9Y1UocCxzKTtmPXQueCxnPXQueSxrLmxlZnQ9ZisicHgiLGsudG9wPWcrInB4IixpPSEwLGw9ITB9dmFyIHU9YnklMj09MDt1JiYoY1koKSxqJiZjdSgpLGwmJmN2KCkpO2lmKGkpdmFyIHY9Wi51c2VDYW52YXM/cGFyc2VGbG9hdChyLndpZHRoKS9xLndpZHRoOjEsdz1NYXRoLnJvdW5kKGMvYnUqQyp2KSx4PWJ5JXc9PTAmJmJ5IT0wfWZ1bmN0aW9uIGRjKCl7YkImJih3aW5kb3cuY2xlYXJUaW1lb3V0KGJCKSxiQj1udWxsKSxidj0wLGJ3PTAsYng9MCxieT0wfWZ1bmN0aW9uIGRkKCl7Yk4mJih3aW5kb3cuY2xlYXJUaW1lb3V0KGJOKSxiTj1udWxsKX1mdW5jdGlvbiBkZShhKXt2YXIgYj0hMSxjPWNDKEEsYSk7aWYoYyE9Qyl7Qz1jLEU9Y0MoQixhKTt2YXIgZD1jL0QsZT1iYipkLGY9YmMqZCxnPShiYi1lKS8yLGg9KGJjLWYpLzI7aWYoYzxEKXt2YXIgaT1jVChnLGgpO2subGVmdD1iZitpLngtZysicHgiLGsudG9wPWJoK2kueS1oKyJweCJ9aWYoWi51c2VDYW52YXMpci53aWR0aD1lKyJweCIsci5oZWlnaHQ9ZisicHgiLHIubGVmdD1nKyJweCIsci50b3A9aCsicHgiLGU9YmoqZCxmPWJrKmQsZz1ibCtaLmltYWdlWCooMS1kKSpaLmltYWdlWixoPWJtK1ouaW1hZ2VZKigxLWQpKlouaW1hZ2VaLG4ud2lkdGg9ZSsicHgiLG4uaGVpZ2h0PWYrInB4IixuLmxlZnQ9ZysicHgiLG4udG9wPWgrInB4IjtlbHNle2NyKHEsQSxPLCEwLCExKSx0aWVyQmFja2ZpbGxXPUhbQl0sdGllckJhY2tmaWxsSD1JW0JdLG0ud2lkdGg9dGllckJhY2tmaWxsVyxtLmhlaWdodD10aWVyQmFja2ZpbGxIO3ZhciBqPXRpZXJCYWNrZmlsbFcqRSxsPXRpZXJCYWNrZmlsbEgqRSxvPVouaW1hZ2VYKmEscD1aLmltYWdlWSphO2JsPWJkLW8sYm09YmUtcCxuLmxlZnQ9YmwrInB4IixuLnRvcD1ibSsicHgiLGNyKG0sQixGLCExLCExKX1iPSEwfXJldHVybiBifWZ1bmN0aW9uIGRmKGEpe2E/KGJYfHxkZygpLGJYLmVsbXQuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIik6YlgmJihiWC5lbG10LnN0eWxlLmRpc3BsYXk9Im5vbmUiKX1mdW5jdGlvbiBkZygpe3ZhciBhPVouVXRpbHMuejE4NSgiejIxIiksYj0zNCxjPTM0LGQ9MjAsZT1wYXJzZUZsb2F0KFoudmlld2VyVyktKGIrZCksZj1wYXJzZUZsb2F0KFoudmlld2VySCktKGMrZCksZz1aLlV0aWxzLnoxODUoInoyMCIpO2JYPW5ldyBaLlV0aWxzLkJ1dHRvbigiYnV0dG9uRlBDYW5jZWwiLGEsbnVsbCxudWxsLG51bGwsbnVsbCxiKyJweCIsYysicHgiLGUrInB4IixmKyJweCIsIm1vdXNlZG93biIsZGgsInoxMDIiLCJzb2xpZCIsIjFweCIsZywiMHB4IiwiMHB4IiksWi5WaWV3ZXJEaXNwbGF5LmFwcGVuZENoaWxkKGJYLmVsbXQpfWZ1bmN0aW9uIGRoKCl7YS50b2dnbGVGdWxsUGFnZVZpZXcoITEpfWZ1bmN0aW9uIGRpKCl7Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJrZXlkb3duIixkeiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJrZXl1cCIsZEEpLFoubW9iaWxlRGV2aWNlPyhaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwidG91Y2hzdGFydCIsZHApLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihpLCJ0b3VjaG1vdmUiLGRxKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwidG91Y2hlbmQiLGRyKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwidG91Y2hjYW5jZWwiLGRzKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwiZ2VzdHVyZXN0YXJ0IixkdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksImdlc3R1cmVjaGFuZ2UiLGR1KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwiZ2VzdHVyZWVuZCIsZHYpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0ub25vcmllbnRhdGlvbmNoYW5nZT1keSk6KFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihaLlZpZXdlckRpc3BsYXksIm1vdXNlb3ZlciIsZGopLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihaLlZpZXdlckRpc3BsYXksIm1vdXNlb3V0IixkbiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKFouVmlld2VyRGlzcGxheSwibW91c2Vtb3ZlIixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaSwibW91c2Vkb3duIixkayksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksIm1vdXNlbW92ZSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihtLCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHEsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSx1JiZaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodSwiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpLHgmJlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih4LCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCl9ZnVuY3Rpb24gZGooYSl7dmFyIGI9Wi5VdGlscy56MjI1KFouVXRpbHMudGFyZ2V0KFouVXRpbHMuZXZlbnQoYSkpKSxjPVouVXRpbHMuejIyNShaLlV0aWxzLnJlbGF0ZWRUYXJnZXQoYSkpO2lmKCFifHwhYylaLlRvb2xiYXJEaXNwbGF5JiZaLnRvb2xiYXJWaXNpYmxlPjEmJlouVG9vbGJhci5zaG93KCEwKSxaLk5hdmlnYXRvckRpc3BsYXkmJloubmF2aWdhdG9yVmlzaWJsZT4xJiZaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCEwKSxibz1udWxsfWZ1bmN0aW9uIGRrKGEpe2lmKFouVXRpbHMuaXNSaWdodE1vdXNlQnV0dG9uKGEpKXJldHVybjtibj0hMDt2YXIgYj1aLlV0aWxzLnoxODEoYSk7cmV0dXJuIGJQPW5ldyBaLlV0aWxzLlBvaW50KGIueCxiLnkpLGkubW91c2VYUHJpb3I9Yi54LGkubW91c2VZUHJpb3I9Yi55LFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2Vtb3ZlIixkbCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksIm1vdXNldXAiLGRtKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNldXAiLGRtKSwhMX1mdW5jdGlvbiBkbChiKXtpZighWi5tb3VzZVBhbilyZXR1cm47dmFyIGI9Wi5VdGlscy5ldmVudChiKSxjPVouVXRpbHMuejE4MShiKSxkPWMueC1pLm1vdXNlWFByaW9yLGU9Yy55LWkubW91c2VZUHJpb3I7aWYoIWlzTmFOKGQpJiYhaXNOYU4oZSkpe3ZhciBmPXBhcnNlRmxvYXQoay5sZWZ0KStkLGc9cGFyc2VGbG9hdChrLnRvcCkrZSxoPWNVKGYsZyk7ay5sZWZ0PWgueCsicHgiLGsudG9wPWgueSsicHgiLGkubW91c2VYUHJpb3I9Yy54LGkubW91c2VZUHJpb3I9Yy55O2lmKFouTmF2aWdhdG9yKXt2YXIgaj1hLnoxNDEoaCk7Wi5OYXZpZ2F0b3IuejI2M1JlY3RhbmdsZVBvc2l0aW9uKGopfX1yZXR1cm4hMX1mdW5jdGlvbiBkbShiKXtibj0hMSxkb2N1bWVudC5tb3VzZW1vdmU9bnVsbCxkb2N1bWVudC5tb3VzZXVwPW51bGwsWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLGRsKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSwibW91c2V1cCIsZG0pLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsZG0pO3ZhciBiPVouVXRpbHMuZXZlbnQoYiksYz1aLlV0aWxzLnoxODEoYiksZDtibz9kPWJvOmQ9bmV3IFouVXRpbHMuUG9pbnQoYy54LGMueSk7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KGJQLngtZC54LDIpK01hdGgucG93KGJQLnktZC55LDIpKTtpZihlPDQpe3ZhciBmPWEuejE3MyhiLGQsQSxDKTtaLmNsaWNrWm9vbT9hLnoyOTNUb1ZpZXcoZi54LGYueSxmLnopOlouY2xpY2tQYW4mJmEuejI5M1RvVmlldyhmLngsZi55LFouaW1hZ2VaKX1lbHNlIFoubW91c2VQYW4mJmEuejI3NCgpO2JvJiYoWi5Ub29sYmFyRGlzcGxheSYmWi50b29sYmFyVmlzaWJsZT4xJiZaLlRvb2xiYXIuc2hvdyghMSksWi5OYXZpZ2F0b3JEaXNwbGF5JiZaLm5hdmlnYXRvclZpc2libGU+MSYmWi5OYXZpZ2F0b3Iuc2V0VmlzaWJpbGl0eSghMSkpfWZ1bmN0aW9uIGRuKGEpe3ZhciBiPVouVXRpbHMuejIyNShaLlV0aWxzLnRhcmdldChhKSksYz1aLlV0aWxzLnoyMjUoWi5VdGlscy5yZWxhdGVkVGFyZ2V0KFouVXRpbHMuZXZlbnQoYSkpKTtpZighYnx8IWMpaWYoIWJuKVouVG9vbGJhckRpc3BsYXkmJloudG9vbGJhclZpc2libGU+MSYmWi5Ub29sYmFyLnNob3coITEpLFouTmF2aWdhdG9yRGlzcGxheSYmWi5uYXZpZ2F0b3JWaXNpYmxlPjEmJlouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITEpO2Vsc2V7dmFyIGQ9Wi5VdGlscy56MTgxKGEpO2JvPW5ldyBaLlV0aWxzLlBvaW50KGQueCxkLnkpfX1mdW5jdGlvbiBkcChhKXt2YXIgYj1aLlV0aWxzLnoxNzgoYSk7aWYoYiYmIWJwKXticj0hMTt2YXIgYz1iLnRhcmdldCxkPW5ldyBaLlV0aWxzLlBvaW50KGIucGFnZVgsYi5wYWdlWSk7YlA9bmV3IFouVXRpbHMuUG9pbnQoZC54LGQueSksaS5tb3VzZVhQcmlvcj1kLngsaS5tb3VzZVlQcmlvcj1kLnl9fWZ1bmN0aW9uIGRxKGIpe2IucHJldmVudERlZmF1bHQoKTtpZighWi5tb3VzZVBhbilyZXR1cm47dmFyIGM9Wi5VdGlscy56MTc4KGIpO2lmKGMmJiFicCYmIWJyKXt2YXIgZD1jLnRhcmdldCxlPW5ldyBaLlV0aWxzLlBvaW50KGMucGFnZVgsYy5wYWdlWSksZj1lLngtaS5tb3VzZVhQcmlvcixnPWUueS1pLm1vdXNlWVByaW9yO2lmKCFpc05hTihmKSYmIWlzTmFOKGcpKXt2YXIgaD1wYXJzZUZsb2F0KGsubGVmdCkrZixqPXBhcnNlRmxvYXQoay50b3ApK2csbD1jVShoLGopO2subGVmdD1sLngrInB4IixrLnRvcD1sLnkrInB4IixpLm1vdXNlWFByaW9yPWUueCxpLm1vdXNlWVByaW9yPWUueTtpZihaLk5hdmlnYXRvcil7dmFyIG09YS56MTQxKGwpO1ouTmF2aWdhdG9yLnoyNjNSZWN0YW5nbGVQb3NpdGlvbihtKX19fXJldHVybiExfWZ1bmN0aW9uIGRyKGIpe2lmKCFicCYmIWJyKXt2YXIgYz0hMSxkPVouVXRpbHMuejE3OChiKTtpZihkKXt2YXIgZT1kLnRhcmdldCxmPW5ldyBaLlV0aWxzLlBvaW50KGQucGFnZVgsZC5wYWdlWSksZz1uZXcgWi5VdGlscy5Qb2ludChmLngsZi55KSxoPU1hdGguc3FydChNYXRoLnBvdyhiUC54LWcueCwyKStNYXRoLnBvdyhiUC55LWcueSwyKSk7aWYoaDw0KXt2YXIgaT1hLnoxNzMoYixnLEEsQyk7Wi5jbGlja1pvb20/YS56MjkzVG9WaWV3KGkueCxpLnksaS56KTpaLmNsaWNrUGFuJiZhLnoyOTNUb1ZpZXcoaS54LGkueSxaLmltYWdlWil9ZWxzZSBjPSEwfWVsc2UgYz0hMDtjJiZaLm1vdXNlUGFuJiZhLnoyNzQoKX19ZnVuY3Rpb24gZHMoYil7aWYoIWJwJiYhYnIpe3ZhciBjPSExLGQ9Wi5VdGlscy56MTc4KGIpO2lmKGQpe3ZhciBlPWQudGFyZ2V0LGY9bmV3IFouVXRpbHMuUG9pbnQoZC5wYWdlWCxkLnBhZ2VZKSxnPW5ldyBaLlV0aWxzLlBvaW50KGYueCxmLnkpLGg9TWF0aC5zcXJ0KE1hdGgucG93KGJQLngtZy54LDIpK01hdGgucG93KGJQLnktZy55LDIpKTtpZihoPDQpe3ZhciBpPWEuejE3MyhiLGcsQSxDKTtaLmNsaWNrWm9vbT9hLnoyOTNUb1ZpZXcoaS54LGkueSxpLnopOlouY2xpY2tQYW4mJmEuejI5M1RvVmlldyhpLngsaS55LFouaW1hZ2VaKX1lbHNlIGM9ITB9ZWxzZSBjPSEwO2MmJloubW91c2VQYW4mJmEuejI3NCgpfX1mdW5jdGlvbiBkdChhKXt2YXIgYT1aLlV0aWxzLmV2ZW50KGEpO2R1KGEpLGJwfHwoYnA9d2luZG93LnNldEludGVydmFsKGR3LGJzKSl9ZnVuY3Rpb24gZHUoYSl7dmFyIGE9Wi5VdGlscy5ldmVudChhKTthLnByZXZlbnREZWZhdWx0KCksYnE9TWF0aC5yb3VuZChhLnNjYWxlKjEwMCkvMTAwfWZ1bmN0aW9uIGR2KGIpe2JwJiYod2luZG93LmNsZWFySW50ZXJ2YWwoYnApLGJyPSEwLGJwPW51bGwpLFoubW91c2VQYW4mJmEuejI3NCgpfWZ1bmN0aW9uIGR3KGEpe2lmKCFaLm1vdXNlUGFuKXJldHVybjt2YXIgYj1keChBLEQsYnEpLGM9Y1YoYik7YiE9Wi5pbWFnZVomJmRlKGMpfWZ1bmN0aW9uIGR4KGEsYixjKXt2YXIgZD1iKmMsZT1jQihhLGQpO3JldHVybiBlfWZ1bmN0aW9uIGR5KGIpe1ouZnVsbFBhZ2UmJihaLlRvb2xiYXJEaXNwbGF5JiZaLnRvb2xiYXJWaXNpYmxlPjEmJlouVG9vbGJhci5zaG93KCExKSxaLk5hdmlnYXRvckRpc3BsYXkmJloubmF2aWdhdG9yVmlzaWJsZT4xJiZaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCExKSxhLnRvZ2dsZUZ1bGxQYWdlVmlldyghMSksYS50b2dnbGVGdWxsUGFnZVZpZXcoITApLFouVG9vbGJhckRpc3BsYXkmJloudG9vbGJhclZpc2libGU+MSYmWi5Ub29sYmFyLnNob3coITApLFouTmF2aWdhdG9yRGlzcGxheSYmWi5uYXZpZ2F0b3JWaXNpYmxlPjEmJlouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITApKX1mdW5jdGlvbiBkeihiKXtpZighWi5rZXlzKXJldHVybjt2YXIgYj1aLlV0aWxzLmV2ZW50KGIpO3N3aXRjaChiLmtleUNvZGUpe2Nhc2UgOTA6YS56b29tKCJvdXQiKTticmVhaztjYXNlIDE3OmEuem9vbSgib3V0Iik7YnJlYWs7Y2FzZSA2NTphLnpvb20oImluIik7YnJlYWs7Y2FzZSAxNjphLnpvb20oImluIik7YnJlYWs7Y2FzZSAzNzphLnBhbigibGVmdCIpO2JyZWFrO2Nhc2UgMzg6YS5wYW4oInVwIik7YnJlYWs7Y2FzZSA0MDphLnBhbigiZG93biIpO2JyZWFrO2Nhc2UgMzk6YS5wYW4oInJpZ2h0Iik7YnJlYWs7Y2FzZSAyNzpaLmZ1bGxQYWdlP2EudG9nZ2xlRnVsbFBhZ2VWaWV3KCExKTphLnJlc2V0KCl9fWZ1bmN0aW9uIGRBKGIpe2lmKCFaLmtleXMpcmV0dXJuO3ZhciBiPVouVXRpbHMuZXZlbnQoYiksYz1iLmtleUNvZGU7Yz09OTB8fGM9PTE3fHxjPT02NXx8Yz09MTY/YS56b29tKCJzdG9wIik6Yz09Mzd8fGM9PTM5P2EucGFuKCJob3Jpem9udGFsU3RvcCIpOihjPT0zOHx8Yz09NDApJiZhLnBhbigidmVydGljYWxTdG9wIil9dmFyIGE9dGhpcyxiPSExLGM9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NjEiKSwxMCksZD1wYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejU5IikpLGU9ZC8yLGY9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NjIiKSwxMCksZz1aLnRvb2xiYXJWaXNpYmxlPT0xP1oudG9vbGJhckg6MCxoLGksayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyx4LHk7Y2coKTt2YXIgej0xLEE9MCxCPTAsQyxELEUsRj1bXSxHPVtdLEg9W10sST1bXSxKPVtdLEs9W10sTD1bXSxNPVtdLE49W10sTz1bXSxQPVtdLFE9W10sUj0wLFM9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NyIpLDEwKSxUPXBhcnNlSW50KFouVXRpbHMuejE4NSgiejYiKSwxMCksVT1wYXJzZUludChaLlV0aWxzLnoxODUoIno1IiksMTApLFY9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NCIpLDEwKSxXPXBhcnNlSW50KFouVXRpbHMuejE4NSgiejMiKSwxMCksWD1wYXJzZUludChaLlV0aWxzLnoxODUoIno0NSIpLDEwKSxZLCQsXyxiYSxiYixiYyxiZCxiZSxiZixiZyxiaCxiaSxiaixiayxibCxibTtZPVoudmlld2VyVywkPVoudmlld2VySCxfPWJhPTAsJC09ZyxaLnRvb2xiYXJQb3NpdGlvbj09MCYmKGJhKz1nKTt2YXIgYm49ITEsYm89bnVsbCxicD1udWxsLGJxPW51bGwsYnI9ITEsYnM9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6MjQiKSwxMCksYnQ9cGFyc2VGbG9hdChaLlV0aWxzLnoxODUoIno4MSIpKSpaLnpvb21TcGVlZDtaLm1vYmlsZURldmljZSYmKGJ0Lz0yKTt2YXIgYnU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejQ3IikpKloucGFuU3BlZWQpLGJ2PTAsYnc9MCxieD0wLGJ5PTAsYno9MCxiQT1wYXJzZUludChaLlV0aWxzLnoxODUoIno3NyIpLDEwKSxiQixiQyxiRCxiRT1wYXJzZUZsb2F0KFouVXRpbHMuejE4NSgiejE5IikpKlouZmFkZUluU3BlZWQsYkYsYkc9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NzgiKSwxMCksYkg9cGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NzkiKSwxMCksYkk9YkcvYkgsYkosYkssYkwsYk0sYk4sYk8sYlAsYlEsYlIsYlMsYlQsYlUsYlYsYlcsYlgsYlk7aWYoWi5VdGlscy5pc1N0clZhbChaLndhdGVybWFya1BhdGgpKXZhciBiWixiJCxiXz1bXSxjYT1bXTtjaChZLCQsXyxiYSk7dmFyIGNiPW5ldyBaLnoxMDEsY2M9Wi5VdGlscy56MTQwKFouaW1hZ2VQYXRoKyIvIisiSW1hZ2VQcm9wZXJ0aWVzLnhtbCIpO2NiLmxvYWRYTUwoY2MpLHRoaXMuejIwNj1mdW5jdGlvbihhLGIpe1ouaW1hZ2VXPWEsWi5pbWFnZUg9YixjaSgpLGNqKCksRT1jQyhCLFouaW5pdGlhbFopLEM9Y0MoQSxaLmluaXRpYWxaKSxEPUMsWi51c2VDYW52YXMmJnMuc2NhbGUoQyxDKSx1JiZjVygpLGNrKCksYyQoWi5pbml0aWFsWCxaLmluaXRpYWxZLFouaW5pdGlhbFopLGRpKCksY2YoITApLFouVmlld2VyLnoxNDgoKX0sdGhpcy5yZXoyMDY9ZnVuY3Rpb24oYSxiKXtjZighMSksY2QoKSxaLmltYWdlVz1hLFouaW1hZ2VIPWIsY2koKSxjaigpLEU9Y0MoQixaLmluaXRpYWxaKSxDPWNDKEEsWi5pbml0aWFsWiksRD1DLFoudXNlQ2FudmFzJiYocy5yZXN0b3JlKCkscy5zY2FsZShDLEMpKSxjaygpLGNoKFksJCxfLGJhKSxtJiZjdChtKSxxJiZjdChxKSx1JiZjdCh1KSxjJChaLmluaXRpYWxYLFouaW5pdGlhbFksWi5pbml0aWFsWiksY2YoITApLFoubmF2aWdhdG9yVmlzaWJsZT4wJiZaLk5hdmlnYXRvci5zZXRJbWFnZVBhdGgoWi5pbWFnZVBhdGgpfSx0aGlzLnoxODA9ZnVuY3Rpb24oKXtyZXR1cm4gY2UoKX0sdGhpcy56MjAxPWZ1bmN0aW9uKCl7cmV0dXJuIGJifSx0aGlzLnoxNzk9ZnVuY3Rpb24oKXtyZXR1cm4gYmN9LHRoaXMuejE4Nj1mdW5jdGlvbigpe3JldHVybiB6fSx0aGlzLnoxOTU9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhpcy56MTg3PWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuejE4OT1mdW5jdGlvbigpe3JldHVybiBDfSx0aGlzLnoxODlBc1pvb209ZnVuY3Rpb24oKXt2YXIgYT1jQihBLEMpO3JldHVybiBhfSx0aGlzLnoxOTQ9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy56MTkzPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHRoaXMuejE5Nz1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLnoxOTI9ZnVuY3Rpb24oKXtyZXR1cm4gSC5qb2luKCIsIil9LHRoaXMuejE4OD1mdW5jdGlvbigpe3JldHVybiBJLmpvaW4oIiwgIil9LHRoaXMuejE5MT1mdW5jdGlvbigpe3JldHVybiBMLmpvaW4oIiwgIil9LHRoaXMuejE5Nj1mdW5jdGlvbigpe3ZhciBhPU4uam9pbigiLCAiKT09IiI/IkN1cnJlbnQgdmlldyBsb2FkaW5nIGNvbXBsZXRlIjpOLmpvaW4oIiwgIik7cmV0dXJuIGF9LHRoaXMuc2V0U2l6ZUFuZFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjLGQpe2NoKGEsYixjLGQpfSx0aGlzLnoyNzQ9ZnVuY3Rpb24oYSl7aWYoQyE9RHx8Wi5pbWFnZVohPWJ6fHxwYXJzZUZsb2F0KGsubGVmdCkhPWJmfHxwYXJzZUZsb2F0KGsudG9wKSE9Ymh8fGEpe2NuKCksYno9Y0IoQSxDKTt2YXIgYz0hMTtpZihDIT1EfHxaLmltYWdlWiE9Ynp8fCFifHxhKVouaW1hZ2VaPGJ6JiYhYSYmKGM9ITApLGNvKCksY3AoKSxjcihtLEIsRiwhMSwhMSk7Y3EoKSxjcihxLEEsTywhMCxjKSxjcyhOLGNMLDApLGN1KCksY3YoKX19LHRoaXMuc2V0Vmlldz1mdW5jdGlvbihhLGIsYyl7aWYoYT09dW5kZWZpbmVkfHxhPT1udWxsKWE9Wi5pbWFnZVcvMjtpZihiPT11bmRlZmluZWR8fGI9PW51bGwpYj1aLmltYWdlSC8yO2M9PXVuZGVmaW5lZHx8Yz09bnVsbD9jPVouZml0WjpjPjEmJihjPWMvMTAwKSxjJChhLGIsYyl9LHRoaXMuem9vbT1mdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSJvdXQiOmJ4Pj0wJiYoYngtPWJ0KTticmVhaztjYXNlImluIjpieDw9MCYmKGJ4Kz1idCk7YnJlYWs7Y2FzZSJzdG9wIjpieD0wfVouem9vbWluZz1ieD09MD8ic3RvcCI6Yng+MD8iaW4iOiJvdXQiLGJ4IT0wP2JCfHwoKGJ4PDAmJlouaW1hZ2VaPloubWluWnx8Yng+MCYmWi5pbWFnZVo8Wi5tYXhaKSYmYS56MjczKCExKSxaLnVzZUNhbnZhc3x8Y3QodSksYkI9d2luZG93LnNldFRpbWVvdXQoY18sYkEpKTooYS56MjkzQWxsU3RvcCgpLGEuejI3MyghMCkpfSx0aGlzLnBhbj1mdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSJsZWZ0Ijpidjw9MCYmKGJ2Kz1idSk7YnJlYWs7Y2FzZSJ1cCI6Ync8PTAmJihidys9YnUpO2JyZWFrO2Nhc2UiZG93biI6Ync+PTAmJihidy09YnUpO2JyZWFrO2Nhc2UicmlnaHQiOmJ2Pj0wJiYoYnYtPWJ1KTticmVhaztjYXNlImhvcml6b250YWxTdG9wIjpidj0wO2JyZWFrO2Nhc2UidmVydGljYWxTdG9wIjpidz0wO2JyZWFrO2Nhc2Uic3RvcCI6YnY9MCxidz0wfVoucGFubmluZ1g9YnY9PTA/InN0b3AiOmJ2PjA/ImxlZnQiOiJyaWdodCIsWi5wYW5uaW5nWT1idz09MD8ic3RvcCI6Ync+MD8idXAiOiJkb3duIixiQz1aLmltYWdlWCpjQihBLDEpLGJEPVouaW1hZ2VZKmNCKEEsMSksYnYhPTB8fGJ3IT0wP2JCfHwoYS56MjczKCEwKSxaLnVzZUNhbnZhc3x8Y3QodSksYkI9d2luZG93LnNldFRpbWVvdXQoY18sYkEpKTooYS56MjkzQWxsU3RvcCgpLGEuejI3MyghMCkpfSx0aGlzLnoyOTNUb1ZpZXc9ZnVuY3Rpb24oYixjLGQpe2EuejI5M0FsbFN0b3AoKTt2YXIgZT1jRihiLGMpLGY9YmQtZS54LGc9YmUtZS55LGg9Y0MoQSxkKSxpPWNDKEIsZCksaj1wYXJzZUZsb2F0KGsubGVmdCkrZixsPXBhcnNlRmxvYXQoay50b3ApK2csbT1oLUMsbj1pLUU7Yko9ai9iSSxiSz1sL2JJLGJMPW0vYkksYk09bi9iSSxhLnoyNzMoITEpLGJPPTAsYk49d2luZG93LnNldFRpbWVvdXQoZGEsYkgpfSx0aGlzLnoyOTNBbGxTdG9wPWZ1bmN0aW9uKGIpe2RjKCksZGQoKSxifHxhLnoyNzQoKX0sdGhpcy56MjQ1PWZ1bmN0aW9uKGEpe3ZhciBiPWRlKGEpO2ImJihjWSgpLGN2KCkpfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7YS56MjkzVG9WaWV3KFouaW5pdGlhbFgsWi5pbml0aWFsWSxaLmluaXRpYWxaKX0sdGhpcy50b2dnbGVGdWxsUGFnZVZpZXdFeHRlcm5hbD1mdW5jdGlvbigpe2JZPSEwLGEudG9nZ2xlRnVsbFBhZ2VWaWV3KCl9LHRoaXMudG9nZ2xlRnVsbFBhZ2VWaWV3PWZ1bmN0aW9uKGIpe2EuejI5M0FsbFN0b3AoKSxaLmZ1bGxQYWdlPWI/YjohWi5mdWxsUGFnZTt2YXIgYz1kb2N1bWVudC5ib2R5LGQ9Yy5zdHlsZSxlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxmPVouVmlld2VyRGlzcGxheS5zdHlsZSxnPW51bGwsaD1udWxsO2lmKFouZnVsbFBhZ2Upe2JRPWQud2lkdGgsYlI9ZC5oZWlnaHQsYlM9ZC5vdmVyZmxvdyxiVD1lLm92ZXJmbG93LGJVPWYuYmFja2dyb3VuZENvbG9yLGJWPWYucG9zaXRpb24sYlc9Zi56SW5kZXg7dmFyIGk7Wi5tb2JpbGVEZXZpY2U/KGk9Wi5VdGlscy56MjAxaW5kb3dTaXplKCksZC53aWR0aD1pLngsZC5oZWlnaHQ9aS55KTooZC53aWR0aD0iMTAwJSIsZC5oZWlnaHQ9IjEwMCUiKSxkLm92ZXJmbG93PSJoaWRkZW4iLGUub3ZlcmZsb3c9ImhpZGRlbiIsZi5iYWNrZ3JvdW5kQ29sb3I9Wi5VdGlscy56MTg1KCJ6MjIiKSxmLnBvc2l0aW9uPSJmaXhlZCIsZi56SW5kZXg9Ijk5OTk5OTk5IixpPVouVXRpbHMuejIwMWluZG93U2l6ZSgpLGc9aS54LGg9aS55fWVsc2V7ZC53aWR0aD1iUSxkLmhlaWdodD1iUixkLm92ZXJmbG93PWJTLGUub3ZlcmZsb3c9YlQsZi5iYWNrZ3JvdW5kQ29sb3I9YlUsZi5wb3NpdGlvbj0icmVsYXRpdmUiLGYuekluZGV4PWJXO3ZhciBqPVouVXRpbHMuejE3NihaLnBhZ2VDb250YWluZXIpO2c9cGFyc2VGbG9hdChqLndpZHRoKSxoPXBhcnNlRmxvYXQoai5oZWlnaHQpLGlzTmFOKGcpJiYoZz1aLlZpZXdlckRpc3BsYXkuY2xpZW50V2lkdGgpLGlzTmFOKGgpJiYoaD1aLlZpZXdlckRpc3BsYXkuY2xpZW50SGVpZ2h0KSxiWT0hMX1aLnZpZXdlclc9ZyxaLnZpZXdlckg9aCxjaChnLGgpLGRmKGJZKTtpZihaLlRvb2xiYXJEaXNwbGF5JiZaLlRvb2xiYXIuejE4MCgpKXtaLnRvb2xiYXJDdXJyZW50Vz1aLnRvb2xiYXJXPT0tMT9nOloudG9vbGJhclc7dmFyIGw9Wi50b29sYmFyUG9zaXRpb249PTE/Wi52aWV3ZXJILVoudG9vbGJhckg6MDtaLlRvb2xiYXIuc2V0U2l6ZUFuZFBvc2l0aW9uKFoudG9vbGJhckN1cnJlbnRXLG51bGwsbnVsbCxsKX1aLk5hdmlnYXRvckRpc3BsYXkmJlouTmF2aWdhdG9yLnoxODAoKSYmWi5OYXZpZ2F0b3Iuc2V0U2l6ZUFuZFBvc2l0aW9uKFoubmF2aWdhdG9yVyxaLm5hdmlnYXRvckgsWi5uYXZpZ2F0b3JMLTEsWi5uYXZpZ2F0b3JULTEpLGNqKCksWi5pbWFnZVo9Y1YoWi5pbWFnZVopO2lmKFouY29uc3RyYWluUGFuKXt2YXIgbT1wYXJzZUZsb2F0KGsubGVmdCksbj1wYXJzZUZsb2F0KGsudG9wKSxvPWNVKG0sbik7ay5sZWZ0PW8ueCsicHgiLGsudG9wPW8ueSsicHgifWEuejI3NCghMCl9LHRoaXMuejI3MT1mdW5jdGlvbigpe3ZhciBhPVouVmlld2VyRGlzcGxheS5maXJzdENoaWxkLmNoaWxkTm9kZXNbMF0uc3R5bGU7YS5kaXNwbGF5PWEuZGlzcGxheT09Im5vbmUiPyJpbmxpbmUtYmxvY2siOiJub25lIn0sdGhpcy56MjcyPWZ1bmN0aW9uKCl7dmFyIGE9Wi5WaWV3ZXJEaXNwbGF5LmZpcnN0Q2hpbGQuY2hpbGROb2Rlc1sxXS5zdHlsZTthLmRpc3BsYXk9YS5kaXNwbGF5PT0ibm9uZSI/ImlubGluZS1ibG9jayI6Im5vbmUifSx0aGlzLnoyNzM9ZnVuY3Rpb24oYSl7aWYodil7dmFyIGI9YT9hOnYuZGlzcGxheSE9ImlubGluZS1ibG9jayI7di5kaXNwbGF5PWI/ImlubGluZS1ibG9jayI6Im5vbmUifX0sdGhpcy50b2dnbGVDb25zdHJhaW5QYW49ZnVuY3Rpb24oKXtaLmNvbnN0cmFpblBhbj0hWi5jb25zdHJhaW5QYW47aWYoWi5jb25zdHJhaW5QYW4pe3ZhciBiPXBhcnNlRmxvYXQoci5sZWZ0KSxjPXBhcnNlRmxvYXQoci50b3ApLGQ9Y1UoYixjKTtrLmxlZnQ9ZC54KyJweCIsay50b3A9ZC55KyJweCIsYS56Mjc0KCl9fSx0aGlzLnoxNzM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cGFyc2VGbG9hdChaLlV0aWxzLnoxODUoInoxMFRJRVJTS0lQVEhSRVNIT0xEIikpLGY9Y0QoYi54LGIueSksZz1jRShmLngsZi55KSxoPWNCKGMsZCk7cmV0dXJuIGEuYWx0S2V5PyhkPjErZT9oPWNCKGMsMSk6Yz4wJiYoaD1jQihjLTEsMSkpLGgtWi5maXRaPGUmJihoPVouZml0WikpOmQ8MS1lP2g9Y0IoYywxKTpjPHotMSYmKGg9Y0IoYysxLDEpKSxuZXcgWi5VdGlscy5Qb2ludDNEKGcueCxnLnksaCl9LHRoaXMuejI2Nz1mdW5jdGlvbihhLGIpe3ZhciBjPS0oYS1aLmltYWdlWCksZD0tKGItWi5pbWFnZVkpLGU9YypaLmltYWdlWixmPWQqWi5pbWFnZVosZz1lK2JmLGg9ZitiaCxpPWNVKGcsaCk7ay5sZWZ0PWkueCsicHgiLGsudG9wPWkueSsicHgifSx0aGlzLnoxNDE9ZnVuY3Rpb24oYSl7aWYoIWEpdmFyIGE9bmV3IFouVXRpbHMuUG9pbnQocGFyc2VGbG9hdChrLmxlZnQpLHBhcnNlRmxvYXQoay50b3ApKTt2YXIgYj1hLngtYmYsYz1hLnktYmgsZD1iL1ouaW1hZ2VaLGU9Yy9aLmltYWdlWixmPVouaW1hZ2VYLWQsZz1aLmltYWdlWS1lO3JldHVybiBuZXcgWi5VdGlscy5Qb2ludChmLGcpfX0sWi56MTI0PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIHUoKXt3aW5kb3cuY2xlYXJJbnRlcnZhbChxKSxxPW51bGw7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByb2dyZXNzVGV4dEJveCIpLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7YSYmKGEubm9kZVZhbHVlPSIiKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGN9ZnVuY3Rpb24gdyhhKXtjPWF9ZnVuY3Rpb24geChhLGIsYyxkKXthfHwoYT1aLnRvb2xiYXJWaXNpYmxlPjA/Wi50b29sYmFyQ3VycmVudFc6MCksYnx8KGI9Wi50b29sYmFyVmlzaWJsZT4wP2Y6MCksY3x8KGM9MCksZHx8KGQ9Wi50b29sYmFyUG9zaXRpb249PTE/Wi52aWV3ZXJILWY6MCk7dmFyIGU9Wi5Ub29sYmFyRGlzcGxheS5zdHlsZTtlLndpZHRoPWErInB4IixlLmhlaWdodD1iKyJweCIsZS5sZWZ0PWMrInB4IixlLnRvcD1kKyJweCIseShhLGIpfWZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1hLGQ9YixlPXRvb2xiYXJTa2luU2l6ZXNbMl0sZj10b29sYmFyU2tpblNpemVzWzNdLGc9dG9vbGJhclNraW5TaXplc1s0XSxoPXRvb2xiYXJTa2luU2l6ZXNbNV0saT10b29sYmFyU2tpblNpemVzWzZdLGo9dG9vbGJhclNraW5TaXplc1s3XSxrPXRvb2xiYXJTa2luU2l6ZXNbOF0sbD10b29sYmFyU2tpblNpemVzWzldLG09dG9vbGJhclNraW5TaXplc1sxMF0sbj10b29sYmFyU2tpblNpemVzWzExXSxvPXRvb2xiYXJTa2luU2l6ZXNbMTJdLHA9dG9vbGJhclNraW5TaXplc1sxM10scT10b29sYmFyU2tpblNpemVzWzE0XSx1PXRvb2xiYXJTa2luU2l6ZXNbMTVdLHY9MCx3PShkLWYpLzIrMSx4PShkLWgpLzIseT0oZC1qKS8yLHo9eSoxLjMsQT15KzQsQj15KzIsQz1aLmxvZ29WaXNpYmxlPT0xPzA6ay8yLEQ9Wi5sb2dvVmlzaWJsZT09MT8wOmsvMixFPWstKGktZyksRj1aLmZ1bGxQYWdlVmlzaWJsZT84OjcsRz0yMCxIPUYqaysyKkU7Wi5zbGlkZXJWaXNpYmxlJiYoSCs9cCkscj1zPXQ9ITE7dmFyIEk9Wi5sb2dvVmlzaWJsZT09MT9lKzI6MCxKPVoudG9vbGJhclZpc2libGUhPTAmJloudG9vbGJhclZpc2libGUhPTE/azowLEs9SStKLEw9SytHK0grRytxO0w+YyYmKHI9ITAsTC1wPmMmJihzPSEwLEwtcC1xPmMmJih0PSEwLEs9MCkscT0wKSxILT1wKTt2YXIgTT1LKyhjLXEtSy1IKS8yLE49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJhY2tncm91bmQiKTtOLnN0eWxlLndpZHRoPWMrInB4IixOLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9Yys0MDArInB4IixOLnN0eWxlLmhlaWdodD1kKyJweCIsTi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1kKyJweCI7dmFyIE89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbkNvbnRhaW5lciIpO08uc3R5bGUud2lkdGg9SCtHKjIrInB4IixPLnN0eWxlLmhlaWdodD1kKyJweCIsTy5zdHlsZS5sZWZ0PU0tRysicHgiO3ZhciBQPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25CYWNrZ3JvdW5kIik7Wi5VdGlscy56MjAzKFAscGFyc2VGbG9hdChPLnN0eWxlLndpZHRoKSxwYXJzZUZsb2F0KE8uc3R5bGUuaGVpZ2h0KSksUC5zdHlsZS5sZWZ0PSIwcHgiO3ZhciBRPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyTG9nbyIpO2lmKFEpe3ZhciBSPVEuc3R5bGU7aWYoUilpZighdCl7Ui5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLFouVXRpbHMuejIwMyhRLGUsZiksUi5sZWZ0PXYrInB4IixSLnRvcD13KyJweCIsdis9ZSsyO3ZhciBTPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dvRGl2aWRlciIpO2lmKFMpe1ouVXRpbHMuejIwMyhTLGcsaCk7dmFyIFQ9Uy5zdHlsZTtULmxlZnQ9disicHgiLFQudG9wPXgrInB4In19ZWxzZSBSLmRpc3BsYXk9Im5vbmUifWlmKFoudG9vbGJhclZpc2libGUhPTAmJloudG9vbGJhclZpc2libGUhPTEpe3ZhciBVPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25NaW5pbWl6ZSIpLFY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbkV4cGFuZCIpO2lmKFUmJlYpe3ZhciBXPVUuc3R5bGUsWD1WLnN0eWxlO1cmJlgmJih0PyhXLmRpc3BsYXk9Im5vbmUiLFguZGlzcGxheT0ibm9uZSIpOihXLmRpc3BsYXk9ImlubGluZS1ibG9jayIsWC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLFouVXRpbHMuejEzOChVLGksaiksWi5VdGlscy56MTM4KFYsaSxqKSxXLmxlZnQ9ditDKyJweCIsVy50b3A9eisicHgiLFgubGVmdD12K0QrInB4IixYLnRvcD16KyJweCIpKX19dj1HO3ZhciBZPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25ab29tT3V0Iik7Wi5VdGlscy56MTM4KFksaSxqKTt2YXIgJD1ZLnN0eWxlOyQubGVmdD12KyJweCIsJC50b3A9eSsicHgiLHYrPWs7dmFyIF89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRyYWNrU2xpZGVyIiksYmE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblNsaWRlciIpO2lmKF8mJmJhKXt2YXIgYmI9Xy5zdHlsZSxiYz1iYS5zdHlsZTtiYiYmYmMmJihyPyhiYi5kaXNwbGF5PSJub25lIixiYy5kaXNwbGF5PSJub25lIik6KGJiLmRpc3BsYXk9ImlubGluZS1ibG9jayIsYmMuZGlzcGxheT0iaW5saW5lLWJsb2NrIixaLlV0aWxzLnoyMDMoXyxuLG8pLGJiLmxlZnQ9di0yKyJweCIsYmIudG9wPUErInB4IixaLlV0aWxzLnoxMzgoYmEsbCxtKSxiYy5sZWZ0PXBhcnNlRmxvYXQoYmIubGVmdCkrInB4IixiYy50b3A9QisicHgiLHYrPXApKX12YXIgYmQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblpvb21JbiIpO1ouVXRpbHMuejEzOChiZCxpLGopO3ZhciBiZT1iZC5zdHlsZTtiZS5sZWZ0PXYrInB4IixiZS50b3A9eSsicHgiLHYrPWsrMTt2YXIgYmY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhbkRpdmlkZXIiKTtaLlV0aWxzLnoyMDMoYmYsZyxoKTt2YXIgYmc9YmYuc3R5bGU7YmcubGVmdD12KyJweCIsYmcudG9wPXgrInB4Iix2Kz1FO3ZhciBiaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uUGFuTGVmdCIpO1ouVXRpbHMuejEzOChiaCxpLGopO3ZhciBiaT1iaC5zdHlsZTtiaS5sZWZ0PXYrInB4IixiaS50b3A9eSsicHgiLHYrPWs7dmFyIGJqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25QYW5VcCIpO1ouVXRpbHMuejEzOChiaixpLGopO3ZhciBiaz1iai5zdHlsZTtiay5sZWZ0PXYrInB4Iixiay50b3A9eSsicHgiLHYrPWs7dmFyIGJsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25QYW5Eb3duIik7Wi5VdGlscy56MTM4KGJsLGksaik7dmFyIGJtPWJsLnN0eWxlO2JtLmxlZnQ9disicHgiLGJtLnRvcD15KyJweCIsdis9azt2YXIgYm49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblBhblJpZ2h0Iik7Wi5VdGlscy56MTM4KGJuLGksaik7dmFyIGJvPWJuLnN0eWxlO2JvLmxlZnQ9disicHgiLGJvLnRvcD15KyJweCIsdis9azt2YXIgYnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvblJlc2V0Iik7Wi5VdGlscy56MTM4KGJwLGksaik7dmFyIGJxPWJwLnN0eWxlO2JxLmxlZnQ9disicHgiLGJxLnRvcD15KyJweCIsdis9aysxO3ZhciBicj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnVsbFBhZ2VEaXZpZGVyIik7aWYoYnIpe1ouVXRpbHMuejIwMyhicixnLGgpO3ZhciBicz1ici5zdHlsZTticy5sZWZ0PXYrInB4Iixicy50b3A9eCsicHgiLHYrPUU7dmFyIGJ0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25GdWxsUGFnZSIpO1ouVXRpbHMuejEzOChidCxpLGopO3ZhciBidT1idC5zdHlsZTtidS5sZWZ0PXYrInB4IixidS50b3A9eSsicHgifXZhciBidj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NUZXh0Qm94Iik7aWYoYnYpe3ZhciBidz1idi5zdHlsZTtidyYmKHM/YncuZGlzcGxheT0ibm9uZSI6KGJ3LmRpc3BsYXk9ImlubGluZS1ibG9jayIsYncud2lkdGg9cSsicHgiLGJ3LmhlaWdodD11KyJweCIsYncubGVmdD1jLXBhcnNlRmxvYXQoTy5zdHlsZS5sZWZ0KS1wYXJzZUZsb2F0KGJ3LndpZHRoKSsicHgiLGJ3LnRvcD0oZC1wYXJzZUZsb2F0KGJ3LmhlaWdodCkpLzIrInB4IikpfX1mdW5jdGlvbiB6KGEpe1oudG9vbGJhclZpc2libGU8NCYmIVoubW9iaWxlRGV2aWNlP0EoYSk6QighYSl9ZnVuY3Rpb24gQShhKXtnJiYoYT9nLmRpc3BsYXk9ImlubGluZS1ibG9jayI6Zy5kaXNwbGF5PSJub25lIil9ZnVuY3Rpb24gQihhKXtpZihnKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uQ29udGFpbmVyIiksYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFja2dyb3VuZCIpLGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbk1pbmltaXplIiksZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uRXhwYW5kIiksZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nb0RpdmlkZXIiKSxoPTA7dHx8KGg9cGFyc2VGbG9hdChlLnN0eWxlLmxlZnQpK3BhcnNlRmxvYXQoZS5zdHlsZS53aWR0aCkrNCk7dmFyIGk9Wi50b29sYmFyQ3VycmVudFc7YT8oYi5zdHlsZS5kaXNwbGF5PSJub25lIix0fHwoZiYmKGYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGQuc3R5bGUuZGlzcGxheT0ibm9uZSIsZS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSxnLndpZHRoPWgrInB4IixjLnN0eWxlLndpZHRoPWgrInB4Iik6KGIuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIix0fHwoZiYmKGYuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIiksZC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGcud2lkdGg9aSsicHgiLGMuc3R5bGUud2lkdGg9aSsicHgiKX19ZnVuY3Rpb24gQyhhKXtpZihaLnNsaWRlclZpc2libGUpe2h8fChoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0cmFja1NsaWRlciIpKSxpfHwoaT1oLnN0eWxlKSxqfHwoaj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uU2xpZGVyIikpLGt8fChrPWouc3R5bGUpO2lmKGkmJmspe3ZhciBiPVoubWF4Wi1aLm1pblosYz0oYS1aLm1pblopL2I7dHJhY2tMPXBhcnNlRmxvYXQoaS5sZWZ0KSx0cmFja1I9cGFyc2VGbG9hdChpLmxlZnQpK3BhcnNlRmxvYXQoaS53aWR0aCktcGFyc2VGbG9hdChrLndpZHRoKTt2YXIgZD10cmFja1ItdHJhY2tMLGU9YypkK3RyYWNrTDtrLmxlZnQ9ZSsicHgifX19ZnVuY3Rpb24gRChiKXtofHwoaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHJhY2tTbGlkZXIiKSksaXx8KGk9aC5zdHlsZSk7aWYoaCYmaSl7dmFyIGMsZD1aLlV0aWxzLnoxNzQoaCk7Wi5tb2JpbGVEZXZpY2U/Yz1aLlV0aWxzLnoxODEoYikueC1kLng6Yz1iLmNsaWVudFgtZC54O3ZhciBlPUgoYywwLHBhcnNlRmxvYXQoaS53aWR0aCkpO2U8Wi5taW5aKy4xJiYoZT1aLm1pblopLGU+Wi5tYXhaLS4xJiYoZT1aLm1heFopLGEuejI0NShlKSxhLnoyNzQoKX19ZnVuY3Rpb24gRShhKXtuPSEwLGp8fChqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b25TbGlkZXIiKSk7aWYoail7dmFyIGI9Wi5VdGlscy56MTgxKGEpO2oubW91c2VYUHJpb3I9Yi54LGoubW91c2VZUHJpb3I9Yi55fX1mdW5jdGlvbiBGKGIpe2h8fChoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0cmFja1NsaWRlciIpKSxpfHwoaT1oLnN0eWxlKSxqfHwoaj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uU2xpZGVyIikpLGt8fChrPWouc3R5bGUpO2lmKGkmJmomJmspe3RyYWNrTD1wYXJzZUZsb2F0KGkubGVmdCksdHJhY2tSPXBhcnNlRmxvYXQoaS5sZWZ0KStwYXJzZUZsb2F0KGkud2lkdGgpLXBhcnNlRmxvYXQoay53aWR0aCk7dmFyIGM9cGFyc2VGbG9hdChrLmxlZnQpKyhwLngtai5tb3VzZVhQcmlvcik7Yzx0cmFja0w/Yz10cmFja0w6Yz50cmFja1I/Yz10cmFja1I6ai5tb3VzZVhQcmlvcj1wLngsay5sZWZ0PWMrInB4Ijt2YXIgZD1IKGMsdHJhY2tMLHRyYWNrUik7YS56MjQ1KGQpfX1mdW5jdGlvbiBHKCl7bj0hMSxhLnoyNzQoKX1mdW5jdGlvbiBIKGEsYixjKXt2YXIgZD1jLWIsZT0oYS1iKS9kLGY9Wi5tYXhaLVoubWluWixnPVoubWluWitmKmU7cmV0dXJuIGd9ZnVuY3Rpb24gSShhKXt2YXIgYT1aLlV0aWxzLmV2ZW50KGEpLGI9Wi5VdGlscy5yZWxhdGVkVGFyZ2V0KFouVXRpbHMuZXZlbnQoYSkpO2lmKCFuJiZiKXt2YXIgYz1iLnBhcmVudE5vZGU7SyhjKX19ZnVuY3Rpb24gSihhKXtaLm1vYmlsZURldmljZSYmYS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPVouVXRpbHMuZXZlbnQoYSksYj1aLlV0aWxzLnRhcmdldChhKSxjPVouVXRpbHMucmVsYXRlZFRhcmdldChhKTtpZihiKXt2YXIgZD1iLnBhcmVudE5vZGU7ZCYmKHRhcmdldFBhcmVudElEPWQuaWQpfWlmKGMpe3ZhciBlPWMucGFyZW50Tm9kZTtlJiYocmVsYXRlZFRhcmdldFBhcmVudElEPWUuaWQpfWlmKCFufHxhLnR5cGU9PSJtb3VzZXVwInx8YS50eXBlPT0idG91Y2hlbmQifHxhLnR5cGU9PSJ0b3VjaGNhbmNlbCIpTigpLGImJiFaLlV0aWxzLmlzUmlnaHRNb3VzZUJ1dHRvbihhKSYmKHRhcmdldFBhcmVudElEJiZ0YXJnZXRQYXJlbnRJRCE9InRyYWNrU2xpZGVyIiYmYS50eXBlIT0ibW91c2Vtb3ZlIiYmKE8oYSksUChhKSksUShhKSl9ZnVuY3Rpb24gSyhiKXthJiZhLnoyOTNBbGxTdG9wKCksYi5pZCYmYi5pZC5pbmRleE9mKCJidXR0b24iKSE9LTE/KEwoYiksTShiKSk6Yi5pZCYmYi5pZC5pbmRleE9mKCJiYWNrZ3JvdW5kIikhPS0xJiZOKCl9ZnVuY3Rpb24gTChhKXtaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsSiksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGEsIm1vdXNlb3V0IixKKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixKKX1mdW5jdGlvbiBNKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2ltZ1VwSUQpLGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS5faW1nT3ZlcklEKSxkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2ltZ0Rvd25JRCk7YiYmKGIuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLGMmJihjLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpLGQmJihkLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpfWZ1bmN0aW9uIE4oKXt2YXIgYT1aLlRvb2xiYXJEaXNwbGF5LmNoaWxkTm9kZXMsYj1udWxsO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7Yj1hW2NdO2lmKGIuaWQmJmIuaWQuaW5kZXhPZigiYnV0dG9uIikhPS0xKWlmKGIuaWQhPSJidXR0b25Db250YWluZXIiKUwoYiksTShiKTtlbHNle3ZhciBlPWIuY2hpbGROb2RlcyxmPW51bGw7Zm9yKHZhciBnPTAsaD1lLmxlbmd0aDtnPGg7ZysrKWY9ZVtnXSxmLmlkJiZmLmlkLmluZGV4T2YoImJ1dHRvbiIpIT0tMSYmKEwoZiksTShmKSl9fX1mdW5jdGlvbiBPKGEpe3ZhciBiPVouVXRpbHMudGFyZ2V0KGEpO2lmKGIpe3ZhciBjPWIucGFyZW50Tm9kZTtjJiYoWi5tb2JpbGVEZXZpY2U/KFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLCJ0b3VjaHN0YXJ0IixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywidG91Y2hlbmQiLEopLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLCJ0b3VjaGNhbmNlbCIsSikpOihaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywibW91c2VvdmVyIixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywibW91c2Vkb3duIixKKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYywibW91c2V1cCIsSiksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGMsIm1vdXNlb3V0IixKKSkpfX1mdW5jdGlvbiBQKGEpe3ZhciBiPVouVXRpbHMudGFyZ2V0KGEpO2lmKGIpe3ZhciBjPVouVXRpbHMudGFyZ2V0KGEpLnBhcmVudE5vZGU7aWYoYylpZighYy5faW1nVXBJRClLKGMpO2Vsc2V7dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYy5faW1nVXBJRCksZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjLl9pbWdPdmVySUQpLGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYy5faW1nRG93bklEKTtpZihkJiZlJiZmKXt2YXIgZz1kLnN0eWxlLGg9ZS5zdHlsZSxpPWYuc3R5bGU7Zy52aXNpYmlsaXR5PSJoaWRkZW4iLGgudmlzaWJpbGl0eT0iaGlkZGVuIixpLnZpc2liaWxpdHk9ImhpZGRlbiI7c3dpdGNoKGEudHlwZSl7Y2FzZSJtb3VzZW92ZXIiOmgudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmkudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJtb3VzZW1vdmUiOmkudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJtb3VzZXVwIjpoLnZpc2liaWxpdHk9InZpc2libGUiO2JyZWFrO2Nhc2UibW91c2VvdXQiOmcudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJ0b3VjaHN0YXJ0IjppLnZpc2liaWxpdHk9InZpc2libGUiO2JyZWFrO2Nhc2UidG91Y2hlbmQiOmcudmlzaWJpbGl0eT0idmlzaWJsZSI7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Zy52aXNpYmlsaXR5PSJ2aXNpYmxlIn19fX19ZnVuY3Rpb24gUShjKXt2YXIgZD1aLlV0aWxzLnRhcmdldChjKS5wYXJlbnROb2RlO2lmKGQpe3ZhciBlPWQuaWQ7c3dpdGNoKGMudHlwZSl7Y2FzZSJtb3VzZW92ZXIiOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkLCJtb3VzZWRvd24iLEopO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZCwibW91c2V1cCIsSik7aWYoYSlzd2l0Y2goZSl7Y2FzZSJidXR0b25NaW5pbWl6ZSI6Yi56MjE1KCEwKSxaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCExKTticmVhaztjYXNlImJ1dHRvbkV4cGFuZCI6Yi56MjE1KCExKSxaLk5hdmlnYXRvci5zZXRWaXNpYmlsaXR5KCEwKTticmVhaztjYXNlImJ1dHRvblpvb21PdXQiOmEuem9vbSgib3V0Iik7YnJlYWs7Y2FzZSJidXR0b25TbGlkZXIiOkUoYyksUihjKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNlbW92ZSIsUiksb3x8KG89d2luZG93LnNldEludGVydmFsKEYsbSkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsSik7YnJlYWs7Y2FzZSJ0cmFja1NsaWRlciI6RChjKTticmVhaztjYXNlImJ1dHRvblpvb21JbiI6YS56b29tKCJpbiIpO2JyZWFrO2Nhc2UiYnV0dG9uUGFuTGVmdCI6YS5wYW4oImxlZnQiKTticmVhaztjYXNlImJ1dHRvblBhblVwIjphLnBhbigidXAiKTticmVhaztjYXNlImJ1dHRvblBhbkRvd24iOmEucGFuKCJkb3duIik7YnJlYWs7Y2FzZSJidXR0b25QYW5SaWdodCI6YS5wYW4oInJpZ2h0Iik7YnJlYWs7Y2FzZSJidXR0b25SZXNldCI6YS5yZXNldCgpfWJyZWFrO2Nhc2UibW91c2V1cCI6Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsIm1vdXNlZG93biIsSiksYSYmKGU9PSJidXR0b25TbGlkZXIifHxuPyhvJiYod2luZG93LmNsZWFySW50ZXJ2YWwobyksbz1udWxsKSxHKCksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLFIpLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsSiksTigpKTplPT0iYnV0dG9uWm9vbU91dCJ8fGU9PSJidXR0b25ab29tSW4iP2Euem9vbSgic3RvcCIpOmU9PSJidXR0b25QYW5MZWZ0Inx8ZT09ImJ1dHRvblBhblJpZ2h0Ij9hLnBhbigiaG9yaXpvbnRhbFN0b3AiKTplPT0iYnV0dG9uUGFuVXAifHxlPT0iYnV0dG9uUGFuRG93biI/YS5wYW4oInZlcnRpY2FsU3RvcCIpOmU9PSJidXR0b25GdWxsUGFnZSImJmEudG9nZ2xlRnVsbFBhZ2VWaWV3KCkpO2JyZWFrO2Nhc2UibW91c2VvdXQiOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkLCJtb3VzZW92ZXIiLEopLGEmJihlPT0iYnV0dG9uWm9vbU91dCJ8fGU9PSJidXR0b25ab29tSW4iP2Euem9vbSgic3RvcCIpOmU9PSJidXR0b25QYW5MZWZ0Inx8ZT09ImJ1dHRvblBhblJpZ2h0Ij9hLnBhbigiaG9yaXpvbnRhbFN0b3AiKTooZT09ImJ1dHRvblBhblVwInx8ZT09ImJ1dHRvblBhbkRvd24iKSYmYS5wYW4oInZlcnRpY2FsU3RvcCIpKTticmVhaztjYXNlInRvdWNoc3RhcnQiOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkLCJ0b3VjaGVuZCIsSiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsInRvdWNoY2FuY2VsIixKKTtpZihhKXN3aXRjaChlKXtjYXNlImJ1dHRvbk1pbmltaXplIjpiLnoyMTUoITApLFouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITEpO2JyZWFrO2Nhc2UiYnV0dG9uRXhwYW5kIjpiLnoyMTUoITEpLFouTmF2aWdhdG9yLnNldFZpc2liaWxpdHkoITApO2JyZWFrO2Nhc2UiYnV0dG9uWm9vbU91dCI6YS56b29tKCJvdXQiKTticmVhaztjYXNlImJ1dHRvblNsaWRlciI6RShjKSxTKGMpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2htb3ZlIixTKSxvfHwobz13aW5kb3cuc2V0SW50ZXJ2YWwoRixtKSksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsInRvdWNoZW5kIixKKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZCwidG91Y2hjYW5jZWwiLEopO2JyZWFrO2Nhc2UidHJhY2tTbGlkZXIiOkQoYyk7YnJlYWs7Y2FzZSJidXR0b25ab29tSW4iOmEuem9vbSgiaW4iKTticmVhaztjYXNlImJ1dHRvblBhbkxlZnQiOmEucGFuKCJsZWZ0Iik7YnJlYWs7Y2FzZSJidXR0b25QYW5VcCI6YS5wYW4oInVwIik7YnJlYWs7Y2FzZSJidXR0b25QYW5Eb3duIjphLnBhbigiZG93biIpO2JyZWFrO2Nhc2UiYnV0dG9uUGFuUmlnaHQiOmEucGFuKCJyaWdodCIpO2JyZWFrO2Nhc2UiYnV0dG9uUmVzZXQiOmEucmVzZXQoKX1icmVhaztjYXNlInRvdWNoZW5kIjpaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoZCwidG91Y2hzdGFydCIsSiksYSYmKGU9PSJidXR0b25ab29tT3V0Inx8ZT09ImJ1dHRvblpvb21JbiI/KGEuem9vbSgic3RvcCIpLFouZGVidWcmJmU9PSJidXR0b25ab29tT3V0IiYmYy5hbHRLZXkmJlouVXRpbHMuejI1MygpKTplPT0iYnV0dG9uU2xpZGVyIj8obyYmKHdpbmRvdy5jbGVhckludGVydmFsKG8pLG89bnVsbCksRygpLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2htb3ZlIixTKSk6ZT09ImJ1dHRvblBhbkxlZnQifHxlPT0iYnV0dG9uUGFuUmlnaHQiP2EucGFuKCJob3Jpem9udGFsU3RvcCIpOmU9PSJidXR0b25QYW5VcCJ8fGU9PSJidXR0b25QYW5Eb3duIj9hLnBhbigidmVydGljYWxTdG9wIik6ZT09ImJ1dHRvbkZ1bGxQYWdlIiYmYS50b2dnbGVGdWxsUGFnZVZpZXcoKSk7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsInRvdWNoc3RhcnQiLEopLGEmJihlPT0iYnV0dG9uWm9vbU91dCJ8fGU9PSJidXR0b25ab29tSW4iPyhhLnpvb20oInN0b3AiKSxaLmRlYnVnJiZlPT0iYnV0dG9uWm9vbU91dCImJmMuYWx0S2V5JiZaLlV0aWxzLnoyNTMoKSk6ZT09ImJ1dHRvblNsaWRlciI/KG8mJih3aW5kb3cuY2xlYXJJbnRlcnZhbChvKSxvPW51bGwpLEcoKSxaLlV0aWxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsInRvdWNobW92ZSIsUykpOmU9PSJidXR0b25QYW5MZWZ0Inx8ZT09ImJ1dHRvblBhblJpZ2h0Ij9hLnBhbigiaG9yaXpvbnRhbFN0b3AiKTplPT0iYnV0dG9uUGFuVXAifHxlPT0iYnV0dG9uUGFuRG93biI/YS5wYW4oInZlcnRpY2FsU3RvcCIpOmU9PSJidXR0b25GdWxsUGFnZSImJmEudG9nZ2xlRnVsbFBhZ2VWaWV3KCkpfX19ZnVuY3Rpb24gUihhKXtwPW5ldyBaLlV0aWxzLlBvaW50KGEuY2xpZW50WCxhLmNsaWVudFkpfWZ1bmN0aW9uIFMoYSl7dmFyIGI9Wi5VdGlscy56MTc4KGEpO2lmKGIpe3ZhciBjPWIudGFyZ2V0O3A9bmV3IFouVXRpbHMuUG9pbnQoYi5wYWdlWCxiLnBhZ2VZKX19dmFyIGI9dGhpcyxjPSExLGQ9bmV3IFouejEwMTtaLnNraW5QYXRoPVouVXRpbHMuejI0MyhaLnNraW5QYXRoKTt2YXIgZT1aLnNraW5QYXRoKyIvIjtkLmxvYWRYTUwoWi5za2luUGF0aCsiLyIrWi5VdGlscy56MTg1KCJ6NTUiKSk7dmFyIGYsZyxoLGksaixrLGw9W10sbT1wYXJzZUludChaLlV0aWxzLnoxODUoIno1NyIpLDEwKSxuPSExLG89bnVsbCxwPW51bGwscT1udWxsLHIscyx0O3RoaXMuejIwNT1mdW5jdGlvbihhLGIpe1ouVG9vbGJhckRpc3BsYXk9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJUb29sYmFyRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIiwiMXB4IiwiMXB4IiwiMHB4IiwiMXB4Iiwibm9uZSIsIjBweCIsInRyYW5zcGFyZW50IG5vbmUiLCIwcHgiLCIwcHgiLCJkZWZhdWx0IiksZz1aLlRvb2xiYXJEaXNwbGF5LnN0eWxlO3ZhciBjPW5ldyBaLlV0aWxzLkdyYXBoaWMoImJhY2tncm91bmQiLGUsYlswXSwiMXB4IiwiMXB4IiwiMHB4IiwiMHB4Iik7Wi5Ub29sYmFyRGlzcGxheS5hcHBlbmRDaGlsZChjLmVsbXQpLHRvb2xiYXJTa2luU2l6ZXM9YTtpZihaLmxvZ29WaXNpYmxlKXt2YXIgZDtpZighWi5VdGlscy5pc1N0clZhbChaLmxvZ29DdXN0b21QYXRoKSlkPW5ldyBaLlV0aWxzLkdyYXBoaWMoInRvb2xiYXJMb2dvIixlLGJbMV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIpO2Vsc2V7dmFyIGg9Wi5VdGlscy56MTQwKFoubG9nb0N1c3RvbVBhdGgpO2Q9bmV3IFouVXRpbHMuR3JhcGhpYygidG9vbGJhckxvZ28iLGgsbnVsbCwiMXB4IiwiMXB4IiwiMXB4IiwiMXB4Iil9Wi5Ub29sYmFyRGlzcGxheS5hcHBlbmRDaGlsZChkLmVsbXQpO2lmKFoudG9vbGJhclZpc2libGU9PTB8fFoudG9vbGJhclZpc2libGU9PTEpe3ZhciBpPW5ldyBaLlV0aWxzLkdyYXBoaWMoImxvZ29EaXZpZGVyIixlLGJbMl0sIjFweCIsIjFweCIsIjFweCIsIjFweCIpO1ouVG9vbGJhckRpc3BsYXkuYXBwZW5kQ2hpbGQoaS5lbG10KX19dmFyIGo9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJidXR0b25Db250YWluZXIiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsInZpc2libGUiLCIxcHgiLCIxcHgiLCIwcHgiLCIwcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIsImRlZmF1bHQiKTtaLlRvb2xiYXJEaXNwbGF5LmFwcGVuZENoaWxkKGopLFoubW9iaWxlRGV2aWNlP1ouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihqLCJ0b3VjaHN0YXJ0IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KTooWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGosIm1vdXNlZG93biIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGosIm1vdXNlb3ZlciIsSSkpO3ZhciBrPW5ldyBaLlV0aWxzLkdyYXBoaWMoImJ1dHRvbkJhY2tncm91bmQiLGUsYlswXSwiMXB4IiwiMXB4IiwiMHB4IiwiMHB4Iik7ai5hcHBlbmRDaGlsZChrLmVsbXQpO2lmKFoudG9vbGJhclZpc2libGUhPTAmJloudG9vbGJhclZpc2libGUhPTF8fFoubW9iaWxlRGV2aWNlKXt2YXIgbD1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvbk1pbmltaXplIixudWxsLGUsYlszXSxiWzRdLGJbNV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejEwNyIpO1ouVG9vbGJhckRpc3BsYXkuYXBwZW5kQ2hpbGQobC5lbG10KTt2YXIgbT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvbkV4cGFuZCIsbnVsbCxlLGJbNl0sYls3XSxiWzhdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMDUiKTtaLlRvb2xiYXJEaXNwbGF5LmFwcGVuZENoaWxkKG0uZWxtdCl9dmFyIG49bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25ab29tT3V0IixudWxsLGUsYls5XSxiWzEwXSxiWzExXSwiMXB4IiwiMXB4IiwiMXB4IiwiMXB4IiwibW91c2VvdmVyIixKLCJ6MTIwIik7ai5hcHBlbmRDaGlsZChuLmVsbXQpO2lmKFouc2xpZGVyVmlzaWJsZSl7dmFyIG89bmV3IFouVXRpbHMuR3JhcGhpYygidHJhY2tTbGlkZXIiLGUsYlsxMl0sIjFweCIsIjFweCIsIjBweCIsIjBweCIpO2ouYXBwZW5kQ2hpbGQoby5lbG10KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoby5lbG10LCJtb3VzZWRvd24iLEopLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihvLmVsbXQsInRvdWNoc3RhcnQiLEopO3ZhciBwPW5ldyBaLlV0aWxzLkJ1dHRvbigiYnV0dG9uU2xpZGVyIixudWxsLGUsYlsxNF0sYlsxNV0sYlsxNl0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejExNCIpO2ouYXBwZW5kQ2hpbGQocC5lbG10KX12YXIgcT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvblpvb21JbiIsbnVsbCxlLGJbMTddLGJbMThdLGJbMTldLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMTkiKTtqLmFwcGVuZENoaWxkKHEuZWxtdCk7dmFyIHI9bmV3IFouVXRpbHMuR3JhcGhpYygicGFuRGl2aWRlciIsZSxiWzIwXSwiMXB4IiwiMXB4IiwiMXB4IiwiMXB4Iik7ai5hcHBlbmRDaGlsZChyLmVsbXQpO3ZhciBzPW5ldyBaLlV0aWxzLkJ1dHRvbigiYnV0dG9uUGFuTGVmdCIsbnVsbCxlLGJbMjFdLGJbMjJdLGJbMjNdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMDkiKTtqLmFwcGVuZENoaWxkKHMuZWxtdCk7dmFyIHQ9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25QYW5VcCIsbnVsbCxlLGJbMjRdLGJbMjVdLGJbMjZdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMTEiKTtqLmFwcGVuZENoaWxkKHQuZWxtdCk7dmFyIHU9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25QYW5Eb3duIixudWxsLGUsYlsyN10sYlsyOF0sYlsyOV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejEwOCIpO2ouYXBwZW5kQ2hpbGQodS5lbG10KTt2YXIgdj1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvblBhblJpZ2h0IixudWxsLGUsYlszMF0sYlszMV0sYlszMl0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejExMCIpO2ouYXBwZW5kQ2hpbGQodi5lbG10KTt2YXIgeT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvblJlc2V0IixudWxsLGUsYlszM10sYlszNF0sYlszNV0sIjFweCIsIjFweCIsIjFweCIsIjFweCIsIm1vdXNlb3ZlciIsSiwiejExMiIpO2ouYXBwZW5kQ2hpbGQoeS5lbG10KTtpZihaLmZ1bGxQYWdlVmlzaWJsZSl7dmFyIEE9bmV3IFouVXRpbHMuR3JhcGhpYygiZnVsbFBhZ2VEaXZpZGVyIixlLGJbMzZdLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiKTtqLmFwcGVuZENoaWxkKEEuZWxtdCk7dmFyIEI9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25GdWxsUGFnZSIsbnVsbCxlLGJbMzddLGJbMzhdLGJbMzldLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJtb3VzZW92ZXIiLEosInoxMTgiKTtqLmFwcGVuZENoaWxkKEIuZWxtdCl9aWYoWi5wcm9ncmVzc1Zpc2libGUpe3ZhciBEPVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2IiwicHJvZ3Jlc3NUZXh0Qm94IiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLCIxcHgiLCIxcHgiLCIxcHgiLCIxcHgiLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLEU9dG9vbGJhclNraW5TaXplc1sxNl0rInB4IjtqLmFwcGVuZENoaWxkKEQpO3ZhciBGPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFouVXRpbHMuejE4NSgiejUyIikpO0QuYXBwZW5kQ2hpbGQoWi5VdGlscy5jcmVhdGVDZW50ZXJlZEVsZW1lbnQoRikpLFouVXRpbHMuejI1MShGLCJibGFjayIsInZlcmRhbmEiLEUsIm5vbmUiLCJub3JtYWwiLCJub3JtYWwiLCJub3JtYWwiLCJub3JtYWwiLCIxZW0iLCJsZWZ0Iiwibm9uZSIpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihELCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5kaXNhYmxlVGV4dEludGVyYWN0aW9uKEYpfVouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChaLlRvb2xiYXJEaXNwbGF5KSxaLnRvb2xiYXJXPXRvb2xiYXJTa2luU2l6ZXNbMF0sWi50b29sYmFyQ3VycmVudFc9Wi50b29sYmFyVz09LTE/Wi52aWV3ZXJXOloudG9vbGJhclcsWi50b29sYmFySD1mPXRvb2xiYXJTa2luU2l6ZXNbMV07dmFyIEc9Wi50b29sYmFyUG9zaXRpb249PTE/Wi52aWV3ZXJILWY6MDt4KFoudG9vbGJhckN1cnJlbnRXLFoudG9vbGJhckgsMCxHKTtpZihaLlZpZXdwb3J0JiZaLlZpZXdwb3J0LnoxODAoKSl7dmFyIEg9Wi5WaWV3cG9ydC56MTg5QXNab29tKCk7QyhIKX16KFoudG9vbGJhclZpc2libGU9PTF8fFoudG9vbGJhclZpc2libGU9PTJ8fFoudG9vbGJhclZpc2libGU9PTQpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihaLlRvb2xiYXJEaXNwbGF5LCJtb3VzZW92ZXIiLFouVXRpbHMuc3RvcFByb3BhZ2F0aW9uKSx3KCEwKX0sdGhpcy56MTgwPWZ1bmN0aW9uKCl7cmV0dXJuIHYoKX0sdGhpcy5zZXRTaXplQW5kUG9zaXRpb249ZnVuY3Rpb24oYSxiLGMsZCl7eChhLGIsYyxkKX0sdGhpcy5zaG93PWZ1bmN0aW9uKGEpe3ooYSl9LHRoaXMuc2V0VmlzaWJpbGl0eT1mdW5jdGlvbihhKXtBKGEpfSx0aGlzLnoyMTU9ZnVuY3Rpb24oYSl7QihhKX0sdGhpcy5zaG93UHJvZ3Jlc3M9ZnVuY3Rpb24oYSxiKXtpZihaLnByb2dyZXNzVmlzaWJsZSl7cSYmd2luZG93LmNsZWFySW50ZXJ2YWwocSk7dmFyIGMsZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NUZXh0Qm94IikuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDtkJiYoYT09MHx8Yj09MD8oZC5ub2RlVmFsdWU9ImxsbGxsbGxsbGwiLHE9d2luZG93LnNldEludGVydmFsKHUscGFyc2VJbnQoWi5VdGlscy56MTg1KCJ6NTEiKSksMTApKTooYz1NYXRoLnJvdW5kKDEwMC1iL2EqMTAwKSxkLm5vZGVWYWx1ZT0ibCIubXVsdGlwbHkoTWF0aC5yb3VuZChjLzEwKSkpKX19LHRoaXMuejI2Nj1mdW5jdGlvbihhKXtDKGEpfX0sWi56MTIzPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIHgoYSl7Wi5OYXZpZ2F0b3JEaXNwbGF5PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2IiwiTmF2aWdhdG9yRGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIixlKyJweCIsZisicHgiLGcrInB4IixoKyJweCIsInNvbGlkIiwiMXB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpLG89Wi5OYXZpZ2F0b3JEaXNwbGF5LHA9by5zdHlsZTt2YXIgYj1aLlV0aWxzLnoxODUoInozNiIpLGM9Wi5VdGlscy56MTg1KCJ6MzZOT0FMUEhBIiksZD1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsIm5hdmlnYXRvckJhY2tncm91bmQiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsImhpZGRlbiIsZSsicHgiLGYrInB4IiwiMHB4IiwiMHB4Iiwibm9uZSIsIjBweCIsYiwiMHB4IiwiMHB4Iik7Wi5VdGlscy5zZXRPcGFjaXR5KGQsbCxjKSxaLk5hdmlnYXRvckRpc3BsYXkuYXBwZW5kQ2hpbGQoZCkscT1kLHI9cS5zdHlsZTt2YXIgaj1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoImRpdiIsIm5hdmlnYXRvckltYWdlQ29udGFpbmVyIiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLGUrInB4IixmKyJweCIsIjBweCIsIjBweCIsIm5vbmUiLCIwcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4Iik7ai5hcHBlbmRDaGlsZChuKSxaLk5hdmlnYXRvckRpc3BsYXkuYXBwZW5kQ2hpbGQoaikscz1qLHQ9cy5zdHlsZSx1PW47dmFyIGs9Wi5VdGlscy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJuYXZpZ2F0b3JSZWN0YW5nbGUiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsImhpZGRlbiIsZSsxKyJweCIsZisxKyJweCIsZysicHgiLGgrInB4Iiwic29saWQiLCIxcHgiLCJ0cmFuc3BhcmVudCBub25lIiwiMHB4IiwiMHB4Iik7ay5zdHlsZS5ib3JkZXJDb2xvcj1aLlV0aWxzLnoxODUoIno0MSIpLFouTmF2aWdhdG9yRGlzcGxheS5hcHBlbmRDaGlsZChrKSx2PWssdz12LnN0eWxlLFouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChaLk5hdmlnYXRvckRpc3BsYXkpLEMoZSxmLGcsaCxpKSxIKFoubmF2aWdhdG9yVmlzaWJsZT09MXx8Wi5uYXZpZ2F0b3JWaXNpYmxlPT0yKSxGKCksWi5tb2JpbGVEZXZpY2U/KFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihvLCJ0b3VjaHN0YXJ0IixQKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywidG91Y2htb3ZlIixRKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywidG91Y2hlbmQiLFIpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihvLCJ0b3VjaGNhbmNlbCIsUykpOihaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodSwibW91c2Vkb3duIixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2Vkb3duIixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2VvdmVyIixaLlV0aWxzLnN0b3BQcm9wYWdhdGlvbiksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKG8sIm1vdXNlZG93biIsTSkpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihuLCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGQsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIoaywiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpLEIoITApLEcoKX1mdW5jdGlvbiB5KGEpe0MoZSxmLGcsaCxpKSxIKFoubmF2aWdhdG9yVmlzaWJsZT09MXx8Wi5uYXZpZ2F0b3JWaXNpYmxlPT0yKSxGKCl9ZnVuY3Rpb24geigpe2lmKEEoKSl7ZCYmKHdpbmRvdy5jbGVhckludGVydmFsKGQpLGQ9bnVsbCk7aWYoIW98fCFwfHwhcXx8IXJ8fCFzfHwhdHx8IXV8fCF2fHwhdylvPVouTmF2aWdhdG9yRGlzcGxheSxwPW8uc3R5bGUscT1aLk5hdmlnYXRvckRpc3BsYXkuY2hpbGROb2Rlc1swXSxyPXEuc3R5bGUscz1aLk5hdmlnYXRvckRpc3BsYXkuY2hpbGROb2Rlc1sxXSx0PXMuc3R5bGUsdT1aLk5hdmlnYXRvckRpc3BsYXkuY2hpbGROb2Rlc1sxXS5maXJzdENoaWxkLHY9Wi5OYXZpZ2F0b3JEaXNwbGF5LmNoaWxkTm9kZXNbMl0sdz12LnN0eWxlfX1mdW5jdGlvbiBBKCl7cmV0dXJuIGN9ZnVuY3Rpb24gQihhKXtjPWF9ZnVuY3Rpb24gQyhhLGIsYyxkLGUpe2F8fChhPVoubmF2aWdhdG9yVyksYnx8KGI9Wi5uYXZpZ2F0b3JIKSxjfHwoYz0wKSxkfHwoZD0wKSxvfHwobz1aLk5hdmlnYXRvckRpc3BsYXkpLHB8fChwPW8uc3R5bGUpLHU9by5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQ7aWYobyYmcCYmdSl7aWYoZSl7dmFyIGY9MSxnPTE7ZT09MD9nPVoudmlld2VyVy9aLnZpZXdlckg6Zz11LndpZHRoL3UuaGVpZ2h0LGY+MT8oYj1hLGIvPWcpOihhPWIsYSo9Zyl9cC53aWR0aD1hKyJweCIscC5oZWlnaHQ9YisicHgiLHAubGVmdD1jLTErInB4IixwLnRvcD1kLTErInB4IixEKGEsYil9fWZ1bmN0aW9uIEQoYSxiKXtyfHwocj1aLk5hdmlnYXRvckRpc3BsYXkuZmlyc3RDaGlsZC5zdHlsZSksdHx8KHQ9Wi5OYXZpZ2F0b3JEaXNwbGF5LmNoaWxkTm9kZXNbMV0uc3R5bGUpLHV8fCh1PVouTmF2aWdhdG9yRGlzcGxheS5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQpLHImJnQmJnUmJihyLndpZHRoPWErInB4IixyLmhlaWdodD1iKyJweCIsRShhLGIsdS53aWR0aCx1LmhlaWdodCksdC53aWR0aD11LndpZHRoKyJweCIsdC5oZWlnaHQ9dS5oZWlnaHQrInB4Iix0LmxlZnQ9KGEtcGFyc2VGbG9hdCh0LndpZHRoKSkvMisicHgiLHQudG9wPShiLXBhcnNlRmxvYXQodC5oZWlnaHQpKS8yKyJweCIsRygpKX1mdW5jdGlvbiBFKGEsYixjLGQpe3V8fCh1PVouTmF2aWdhdG9yRGlzcGxheS5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQpO2lmKHUpe3ZhciBlPWMvZCxmPWEvYyxnPWIvZCxoPTAsaT0wO2Y8PWc/KGM9YSxkPWEvZSxpPShiLWQqKGEvYykpLzIpOmc8ZiYmKGQ9YixjPWIqZSxoPShhLWMqKGIvZCkpLzIpLHUud2lkdGg9Yyx1LmhlaWdodD1kfX1mdW5jdGlvbiBGKCl7cHx8KHA9Wi5OYXZpZ2F0b3JEaXNwbGF5LnN0eWxlKSxwJiYocC56SW5kZXg9cC56SW5kZXgrMTAwKX1mdW5jdGlvbiBHKCl7aWYoWi5WaWV3cG9ydCYmWi5WaWV3cG9ydC56MTgwKCkpe0koKTt2YXIgYT1aLlZpZXdwb3J0LnoxNDEoKTtKKGEpfX1mdW5jdGlvbiBIKGEpe3B8fChwPVouTmF2aWdhdG9yRGlzcGxheS5zdHlsZSkscCYmKGE/cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnAuZGlzcGxheT0ibm9uZSIpfWZ1bmN0aW9uIEkoKXtpZih1JiZ3KXt2YXIgYT11LndpZHRoL1ouaW1hZ2VXLGI9dS5oZWlnaHQvWi5pbWFnZUgsYz1aLlZpZXdwb3J0LnoxODlBc1pvb20oKSxkPVoudmlld2VyVyphL2MsZT1aLnZpZXdlckgqYi9jO3cud2lkdGg9ZCsicHgiLHcuaGVpZ2h0PWUrInB4In19ZnVuY3Rpb24gSihhKXtpZih1JiZ3JiZ0KXt2YXIgYj11LndpZHRoL1ouaW1hZ2VXLGM9dS5oZWlnaHQvWi5pbWFnZUgsZD1hLngqYixlPWEueSpjLGY9ZC1wYXJzZUZsb2F0KHcud2lkdGgpLzIsZz1lLXBhcnNlRmxvYXQody5oZWlnaHQpLzI7dy5sZWZ0PWYrcGFyc2VGbG9hdCh0LmxlZnQpKyJweCIsdy50b3A9ZytwYXJzZUZsb2F0KHQudG9wKSsicHgifX1mdW5jdGlvbiBLKCl7aWYodyYmdCYmdSl7dmFyIGE9cGFyc2VGbG9hdCh3LmxlZnQpLXBhcnNlRmxvYXQodC5sZWZ0KSxiPXBhcnNlRmxvYXQody50b3ApLXBhcnNlRmxvYXQodC50b3ApLGM9YSsocGFyc2VGbG9hdCh3LndpZHRoKS0xKS8yLGQ9YisocGFyc2VGbG9hdCh3LmhlaWdodCktMSkvMixlPVouaW1hZ2VXL3Uud2lkdGgsZj1aLmltYWdlSC91LmhlaWdodCxnPWMqZSxoPWQqZjtaLlZpZXdwb3J0LnoyNjcoZyxoKX19ZnVuY3Rpb24gTCgpe1ouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno4OCIpKX1mdW5jdGlvbiBNKGEpe2lmKG8mJnYmJncpe3ZhciBhPVouVXRpbHMuZXZlbnQoYSk7di5tb3VzZVhQcmlvcj1hLmNsaWVudFgsdi5tb3VzZVlQcmlvcj1hLmNsaWVudFksemFwdHZEcmFnUHRTdGFydD1uZXcgWi5VdGlscy5Qb2ludChhLmNsaWVudFgsYS5jbGllbnRZKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2Vtb3ZlIixOKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIobywibW91c2V1cCIsTyksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZXVwIixPKX19ZnVuY3Rpb24gTihhKXtpZih2JiZ3KXt2YXIgYj1wYXJzZUZsb2F0KHcubGVmdCksYz1wYXJzZUZsb2F0KHcudG9wKTtyZXR1cm4gdy5sZWZ0PWIrKGEuY2xpZW50WC12Lm1vdXNlWFByaW9yKSsicHgiLHcudG9wPWMrKGEuY2xpZW50WS12Lm1vdXNlWVByaW9yKSsicHgiLHYubW91c2VYUHJpb3I9YS5jbGllbnRYLHYubW91c2VZUHJpb3I9YS5jbGllbnRZLEsoKSwhMX19ZnVuY3Rpb24gTyhhKXtpZihvJiZ2JiZ3KXtkb2N1bWVudC5tb3VzZW1vdmU9bnVsbCxkb2N1bWVudC5tb3VzZXVwPW51bGwsWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKG8sIm1vdXNlbW92ZSIsTiksWi5VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKG8sIm1vdXNldXAiLE8pLFouVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsTyk7dmFyIGE9Wi5VdGlscy5ldmVudChhKSxiPW5ldyBaLlV0aWxzLlBvaW50KGEuY2xpZW50WCxhLmNsaWVudFkpLGM9TWF0aC5zcXJ0KE1hdGgucG93KHphcHR2RHJhZ1B0U3RhcnQueC1iLngsMikrTWF0aC5wb3coemFwdHZEcmFnUHRTdGFydC55LWIueSwyKSk7aWYoYzw0KXt2YXIgZD1aLlV0aWxzLnoxNzQoWi5OYXZpZ2F0b3JEaXNwbGF5KTt3LmxlZnQ9YS5jbGllbnRYLWQueC1wYXJzZUZsb2F0KHcud2lkdGgpLzIrInB4Iix3LnRvcD1hLmNsaWVudFktZC55LXBhcnNlRmxvYXQody5oZWlnaHQpLzIrInB4In1LKCksWi5WaWV3cG9ydC56Mjc0KCl9fWZ1bmN0aW9uIFAoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO2lmKG8mJnYmJncpe3ZhciBiPVouVXRpbHMuejE3OChhKTtpZihiKXt2YXIgYz1iLnRhcmdldCxkPW5ldyBaLlV0aWxzLlBvaW50KGIucGFnZVgsYi5wYWdlWSk7emFwdHZEcmFnUHRTdGFydD1uZXcgWi5VdGlscy5Qb2ludChkLngsZC55KSx2Lm1vdXNlWFByaW9yPWQueCx2Lm1vdXNlWVByaW9yPWQueSx6YXB0dkRyYWdQdFN0YXJ0PW5ldyBaLlV0aWxzLlBvaW50KGQueCxkLnkpfX19ZnVuY3Rpb24gUShhKXthLnByZXZlbnREZWZhdWx0KCk7aWYoIVoubW91c2VQYW4pcmV0dXJuO2lmKHYmJncpe3ZhciBiPVouVXRpbHMuejE3OChhKTtpZihiKXt2YXIgYz1iLnRhcmdldCxkPW5ldyBaLlV0aWxzLlBvaW50KGIucGFnZVgsYi5wYWdlWSksZT1wYXJzZUZsb2F0KHcubGVmdCksZj1wYXJzZUZsb2F0KHcudG9wKTtyZXR1cm4gdy5sZWZ0PWUrKGQueC12Lm1vdXNlWFByaW9yKSsicHgiLHcudG9wPWYrKGQueS12Lm1vdXNlWVByaW9yKSsicHgiLHYubW91c2VYUHJpb3I9ZC54LHYubW91c2VZUHJpb3I9ZC55LEsoKSwhMX19cmV0dXJuITF9ZnVuY3Rpb24gUihhKXtpZihvJiZ2JiZ3KXt2YXIgYj1aLlV0aWxzLnoxNzgoYSk7aWYoYil7dmFyIGM9Yi50YXJnZXQsZD1uZXcgWi5VdGlscy5Qb2ludChiLnBhZ2VYLGIucGFnZVkpLGU9bmV3IFouVXRpbHMuUG9pbnQoZC54LGQueSksZj1NYXRoLnNxcnQoTWF0aC5wb3coemFwdHZEcmFnUHRTdGFydC54LWUueCwyKStNYXRoLnBvdyh6YXB0dkRyYWdQdFN0YXJ0LnktZS55LDIpKSxnPVoubW9iaWxlRGV2aWNlPzY6MztpZihmPGcpe3ZhciBoPVouVXRpbHMuejE3NChaLk5hdmlnYXRvckRpc3BsYXkpO3cubGVmdD1kLngtaC54LXBhcnNlRmxvYXQody53aWR0aCkvMisicHgiLHcudG9wPWQueS1oLnktcGFyc2VGbG9hdCh3LmhlaWdodCkvMisicHgifX1LKCksWi5WaWV3cG9ydC56Mjc0KCl9fWZ1bmN0aW9uIFMoYSl7aWYobyYmdiYmdyl7dmFyIGI9Wi5VdGlscy56MTc4KGEpO2lmKGIpe3ZhciBjPWIudGFyZ2V0LGQ9bmV3IFouVXRpbHMuUG9pbnQoYi5wYWdlWCxiLnBhZ2VZKSxlPW5ldyBaLlV0aWxzLlBvaW50KGQueCxkLnkpLGY9TWF0aC5zcXJ0KE1hdGgucG93KHphcHR2RHJhZ1B0U3RhcnQueC1lLngsMikrTWF0aC5wb3coemFwdHZEcmFnUHRTdGFydC55LWUueSwyKSksZz1aLm1vYmlsZURldmljZT82OjM7aWYoZjxnKXt2YXIgaD1aLlV0aWxzLnoxNzQoWi5OYXZpZ2F0b3JEaXNwbGF5KTt3LmxlZnQ9ZC54LWgueC1wYXJzZUZsb2F0KHcud2lkdGgpLzIrInB4Iix3LnRvcD1kLnktaC55LXBhcnNlRmxvYXQody5oZWlnaHQpLzIrInB4In19SygpLFouVmlld3BvcnQuejI3NCgpfX12YXIgYj10aGlzLGM9ITEsZCxlPVoubmF2aWdhdG9yVyxmPVoubmF2aWdhdG9ySCxnPVoubmF2aWdhdG9yTC0xLGg9Wi5uYXZpZ2F0b3JULTEsaT1aLm5hdmlnYXRvckZpdCxqLGs9bnVsbCxsPXBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6MzUiKSksbT1aLlV0aWxzLnoxNDAoWi5pbWFnZVBhdGgrIi9UaWxlR3JvdXAwLyIrIjAtMC0wLmpwZyIpLG49bmV3IEltYWdlO24ub25sb2FkPXgsbi5vbmVycm9yPUwsbi5zcmM9bTt2YXIgbyxwLHEscixzLHQsdSx2LHc7dGhpcy5zZXRJbWFnZVBhdGg9ZnVuY3Rpb24oYSl7bT1aLlV0aWxzLnoxNDAoWi5pbWFnZVBhdGgrIi9UaWxlR3JvdXAwLyIrIjAtMC0wLmpwZyIpLHMucmVtb3ZlQ2hpbGQobiksbj1udWxsLG49bmV3IEltYWdlLHMuYXBwZW5kQ2hpbGQobiksbi5vbmxvYWQ9eSxuLm9uZXJyb3I9TCxuLnNyYz1tfSx0aGlzLnoxODA9ZnVuY3Rpb24oKXtyZXR1cm4gQSgpfSx0aGlzLnNldFNpemVBbmRQb3NpdGlvbj1mdW5jdGlvbihhLGIsYyxkLGUpe2V8fChlPWkpLEMoYSxiLGMsZCxlKX0sdGhpcy5zZXRWaXNpYmlsaXR5PWZ1bmN0aW9uKGEpe0goYSl9LHRoaXMuejI2OD1mdW5jdGlvbigpe0coKX0sdGhpcy56MjYzUmVjdGFuZ2xlRGltZW5zaW9ucz1mdW5jdGlvbigpe0koKX0sdGhpcy56MjYzUmVjdGFuZ2xlUG9zaXRpb249ZnVuY3Rpb24oYSl7SihhKX0sdGhpcy56Mjc3PWZ1bmN0aW9uKCl7QSgpP3ooKTpkPXdpbmRvdy5zZXRJbnRlcnZhbCh6LDMwMCl9fSxaLnoxMDE9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhhLGIpe3ZhciBjPW51bGwsZD10eXBlb2YgYj09ImZ1bmN0aW9uIjtpZihkKXZhciBlPWIsYj1mdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KFouVXRpbHMuY3JlYXRlQ2FsbGJhY2sobnVsbCxlLGMpLDEpfTtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7dmFyIGY9WyJNc3htbDIuWE1MSFRUUCIsIk1zeG1sMy5YTUxIVFRQIiwiTWljcm9zb2Z0LlhNTEhUVFAiXTtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl0cnl7Yz1uZXcgQWN0aXZlWE9iamVjdChmW2ddKTticmVha31jYXRjaChoKXtjb250aW51ZX19ZWxzZSB3aW5kb3cuWE1MSHR0cFJlcXVlc3QmJihjPW5ldyBYTUxIdHRwUmVxdWVzdCk7Y3x8Wi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejk5IikpLGQmJihjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09NCYmKGMub25yZWFkeXN0YXRlY2hhbmdlPW5ldyBGdW5jdGlvbixiKCkpfSk7dHJ5e2Mub3BlbigiR0VUIixhLGQpLGMuc2VuZChudWxsKX1jYXRjaChoKXthLmluZGV4T2YoIkltYWdlUHJvcGVydGllcy54bWwiKSE9LTE/Wi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejg3LUlNQUdFWE1MIikpOmEuaW5kZXhPZigic2tpbkZpbGVzLnhtbCIpIT0tMT9aLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6ODctVE9PTEJBUlhNTCIpKTpaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6ODciKSksYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxjPW51bGx9cmV0dXJuIGQ/bnVsbDpjfWZ1bmN0aW9uIGQoYSl7aWYoYSl7aWYoIWEpWi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejg5IikpO2Vsc2UgaWYoYS5zdGF0dXMhPT0yMDAmJmEuc3RhdHVzIT09MCl7dmFyIGI9YS5zdGF0dXMsYz1iPT00MDQ/Ik5vdCBGb3VuZCI6YS5zdGF0dXNUZXh0O1ouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno5MCIpK2IrIiAtICIrYyl9dmFyIGQ9bnVsbDthLnJlc3BvbnNlWE1MJiZhLnJlc3BvbnNlWE1MLmRvY3VtZW50RWxlbWVudD9kPWEucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQmJihkPVouVXRpbHMuejE1OChhLnJlc3BvbnNlVGV4dCkpLGUoZCl9ZWxzZSBaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6ODQiKSl9ZnVuY3Rpb24gZShhKXtpZihhJiZhLmRvY3VtZW50RWxlbWVudCl7dmFyIGI9YS5kb2N1bWVudEVsZW1lbnQudGFnTmFtZTtiPT0iQ09QWVJJR0hUIj9mKCJjb3B5cmlnaHQiLGEpOmI9PSJJTUFHRV9QUk9QRVJUSUVTIj9mKCJpbWFnZSIsYSk6Yj09IlNLSU5EQVRBIj9mKCJza2luIixhKTpaLlV0aWxzLnoyNTUoWi5VdGlscy56MTg1KCJ6MTAwIikpfWVsc2UgWi5VdGlscy56MjU1KFouVXRpbHMuejE4NSgiejEwMCIpKX1mdW5jdGlvbiBmKGEsYil7aWYoYT09ImNvcHlyaWdodCIpe3ZhciBjPWIuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiU1RBVEVNRU5UVEVYVCIpLGQ9Yi5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJERUNMSU5FRFRFWFQiKTtaLlV0aWxzLmlzU3RyVmFsKGMpP1ouVXRpbHMuejI1MighMCxjLGQpOlouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno4NiIpKX1lbHNlIGlmKGE9PSJpbWFnZSIpe3ZhciBlPXBhcnNlSW50KGIuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiV0lEVEgiKSwxMCksZj1wYXJzZUludChiLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoIkhFSUdIVCIpLDEwKTshaXNOYU4oZSkmJmU+MCYmIWlzTmFOKGYpJiZmPjA/Wi5WaWV3cG9ydCYmKFouVmlld3BvcnQuejE4MCgpP1ouVmlld3BvcnQucmV6MjA2KGUsZik6Wi5WaWV3cG9ydC56MjA2KGUsZikpOlouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno4NiIpKX1lbHNlIGlmKGE9PSJza2luIil7Wi5za2luTW9kZT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJTRVRVUCIpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJTS0lOTU9ERSIpLm5vZGVWYWx1ZTt2YXIgZyxoO1ouc2tpbk1vZGU9PTF8fFouc2tpbk1vZGU9PTAmJiFaLm1vYmlsZURldmljZT8oZz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJTRVRVUCIpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJGT0xERVJTVEFOREFSRCIpLm5vZGVWYWx1ZSxoPSJTSVpFU1NUQU5EQVJEIik6KGc9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VUVVAiKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiRk9MREVSTEFSR0UiKS5ub2RlVmFsdWUsaD0iU0laRVNMQVJHRSIpO3ZhciBpPVtdO2kucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlRPT0xCQVJXIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiVE9PTEJBUkgiKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJMT0dPVyIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIkxPR09IIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiRElWSURFUlciKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJESVZJREVSSCIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIkJVVFRPTlciKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJCVVRUT05IIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiQlVUVE9OU1BBTiIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlNMSURFUkJVVFRPTlciKS5ub2RlVmFsdWUpKSxpLnB1c2gocGFyc2VGbG9hdChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGgpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJTTElERVJCVVRUT05IIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0xJREVSVFJBQ0tXIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0xJREVSVFJBQ0tIIikubm9kZVZhbHVlKSksaS5wdXNoKHBhcnNlRmxvYXQoYi5nZXRFbGVtZW50c0J5VGFnTmFtZShoKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0xJREVSU1BBTiIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlBST0dSRVNTVyIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlBST0dSRVNTSCIpLm5vZGVWYWx1ZSkpLGkucHVzaChwYXJzZUZsb2F0KGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaClbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlBST0dSRVNTRk9OVFNJWkUiKS5ub2RlVmFsdWUpKTt2YXIgaj1bXSxrPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZJTEVTIilbMF0uYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oIlNLSU4wIikubm9kZVZhbHVlLGw9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRklMRVMiKVswXS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiU0tJTjM5Iikubm9kZVZhbHVlO2lmKFouVXRpbHMuaXNTdHJWYWwoaykmJlouVXRpbHMuaXNTdHJWYWwobCkpe3ZhciBtPSExO2Zvcih2YXIgbj0wO248NDA7bisrKXt2YXIgbz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJGSUxFUyIpWzBdLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJTS0lOIituKS5ub2RlVmFsdWU7Wi5VdGlscy5pc1N0clZhbChvKT9qW25dPWcrIi8iK286KGpbbl09Im51bGwiLG09ITApfW0mJlouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIkVSUk9SX1NLSU5TWE1MTUlTU0lOR05BTUVTIikpLFouVG9vbGJhciYmWi5Ub29sYmFyLnoyMDUoaSxqKX1lbHNlIFouVXRpbHMuejI1NShaLlV0aWxzLnoxODUoIno5MSIpKX19ZnVuY3Rpb24gZyhhLGMsZCl7Yi0tO2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXRyeXthKGQpfWNhdGNoKGUpe1ouVXRpbHMuejI1NShlLm5hbWUrWi5VdGlscy56MTg1KCJ6ODMiKStjKyIgIitlLm1lc3NhZ2UpfX1mdW5jdGlvbiBoKGEsYil7ZnVuY3Rpb24gZShlKXtjLm9ubG9hZD1udWxsLGMub25hYm9ydD1udWxsLGMub25lcnJvcj1udWxsLGQmJndpbmRvdy5jbGVhclRpbWVvdXQoZCksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtiKGEsZT9jOm51bGwpfSwxKX12YXIgYz1udWxsLGQ9bnVsbDt0aGlzLnN0YXJ0PWZ1bmN0aW9uKCl7Yz1uZXcgSW1hZ2U7dmFyIGI9ZnVuY3Rpb24oKXtlKCEwKX0sZj1mdW5jdGlvbigpe2UoITEpfSxnPWZ1bmN0aW9uKCl7ZSghMSl9O2Mub25sb2FkPWIsYy5vbmFib3J0PWYsYy5vbmVycm9yPWYsZD13aW5kb3cuc2V0VGltZW91dChnLHBhcnNlRmxvYXQoWi5VdGlscy56MTg1KCJ6NjAiKSkpLGMuc3JjPWF9fXZhciBiPTA7dGhpcy5sb2FkWE1MPWZ1bmN0aW9uKGEpe2MoYSxkKX0sdGhpcy56MjEySW1hZ2U9ZnVuY3Rpb24oYSxjKXtpZihiPj1wYXJzZUludChaLlV0aWxzLnoxODUoInoyNSIpLDEwKSlyZXR1cm4hMTt2YXIgZD1aLlV0aWxzLmNyZWF0ZUNhbGxiYWNrKG51bGwsZyxjKSxlPW5ldyBoKGEsZCk7cmV0dXJuIGIrKyxlLnN0YXJ0KCksITB9fSxaLlV0aWxzPXt6MTYzOmZ1bmN0aW9uKCl7Wi5wYWdlQ29udGFpbmVySUQ9bnVsbCxaLmltYWdlUGF0aD1udWxsLFouc2tpblBhdGg9bnVsbCxaLnNraW5Nb2RlPW51bGwsWi5wYXJhbWV0ZXJzPW51bGwsWi5icm93c2Vycz1udWxsLFouYnJvd3Nlcj1udWxsLFouYnJvd3NlclZlcnNpb249bnVsbCxaLmNhbnZhc1N1cHBvcnRlZD1udWxsLFouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZD1udWxsLFouY3NzVHJhbnNmb3JtUHJvcGVydHk9bnVsbCxaLmNzc1RyYW5zZm9ybU5vVW5pdHM9bnVsbCxaLmFscGhhU3VwcG9ydGVkPW51bGwsWi5yZW5kZXJRdWFsaXR5PW51bGwsWi5tb2JpbGVEZXZpY2U9bnVsbCxaLmluaXRpYWxYPW51bGwsWi5pbml0aWFsWT1udWxsLFouaW5pdGlhbFo9bnVsbCxaLm1pblo9bnVsbCxaLm1heFo9bnVsbCxaLnpvb21TcGVlZD1udWxsLFoucGFuU3BlZWQ9bnVsbCxaLmZhZGVJblNwZWVkPW51bGwsWi50b29sYmFyVmlzaWJsZT1udWxsLFoudG9vbGJhclc9bnVsbCxaLnRvb2xiYXJIPW51bGwsWi50b29sYmFyUG9zaXRpb249bnVsbCxaLm5hdmlnYXRvclZpc2libGU9bnVsbCxaLm5hdmlnYXRvclc9bnVsbCxaLm5hdmlnYXRvckg9bnVsbCxaLm5hdmlnYXRvckw9bnVsbCxaLm5hdmlnYXRvclQ9bnVsbCxaLm5hdmlnYXRvckZpdD1udWxsLFouY2xpY2tab29tPW51bGwsWi5jbGlja1Bhbj1udWxsLFoubW91c2VQYW49bnVsbCxaLmtleXM9bnVsbCxaLmNvbnN0cmFpblBhbj1udWxsLFoudG9vbHRpcHNWaXNpYmxlPW51bGwsWi5jb3B5cmlnaHRQYXRoPW51bGwsWi53YXRlcm1hcmtQYXRoPW51bGwsWi5zbGlkZXJWaXNpYmxlPW51bGwsWi5mdWxsUGFnZVZpc2libGU9bnVsbCxaLnByb2dyZXNzVmlzaWJsZT1udWxsLFoubG9nb1Zpc2libGU9bnVsbCxaLmxvZ29DdXN0b21QYXRoPW51bGwsWi5jYW52YXM9bnVsbCxaLmRlYnVnPW51bGwsWi5WaWV3ZXI9bnVsbCxaLlZpZXdlckRpc3BsYXk9bnVsbCxaLlZpZXdwb3J0PW51bGwsWi5Ub29sYmFyPW51bGwsWi5Ub29sYmFyRGlzcGxheT1udWxsLFouVG9vbHRpcERpc3BsYXk9bnVsbCxaLk5hdmlnYXRvcj1udWxsLFouTmF2aWdhdG9yRGlzcGxheT1udWxsLFouQ29weXJpZ2h0RGlzcGxheT1udWxsLFouaW1hZ2VXPW51bGwsWi5pbWFnZUg9bnVsbCxaLmltYWdlWD0wLFouaW1hZ2VZPTAsWi5pbWFnZVo9MCxaLmZpdFo9bnVsbCxaLnpvb21pbmc9InN0b3AiLFoucGFubmluZ1g9InN0b3AiLFoucGFubmluZ1k9InN0b3AiLFouZnVsbFBhZ2U9ITEsWi51c2VDYW52YXM9ITAsWi5UcmFjZURpc3BsYXk9bnVsbCxaLnRyYWNlcz1udWxsfSxlbmZvcmNlQ29weXJpZ2h0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy56MjM4KCJpbWFnZUNvcHlyaWdodCIpO2E/Wi5WaWV3ZXIuejE0OSgpOnRoaXMuejIxMCgpfSx6MjEwOmZ1bmN0aW9uKCl7dmFyIGE9bmV3IFouejEwMTthLmxvYWRYTUwoWi5jb3B5cmlnaHRQYXRoKX0sejI1MjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy56MTg1KCJ6MTYiKSxlPXRoaXMuejE4NSgiejE0Iik7aWYoYSl7Wi5Db3B5cmlnaHREaXNwbGF5PXRoaXMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgiZGl2IiwiQ29weXJpZ2h0RGlzcGxheSIsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIixaLnZpZXdlclctMisicHgiLFoudmlld2VySC0yKyJweCIsIjBweCIsIjBweCIsInNvbGlkIiwiMXB4IixkLCIwcHgiLCIwcHgiKSxaLlZpZXdlckRpc3BsYXkuYXBwZW5kQ2hpbGQoWi5Db3B5cmlnaHREaXNwbGF5KTt2YXIgZj00NDAsZz0yMDAsaD1wYXJzZUZsb2F0KFouQ29weXJpZ2h0RGlzcGxheS5zdHlsZS53aWR0aCkvMi1mLzIsaT1wYXJzZUZsb2F0KFouQ29weXJpZ2h0RGlzcGxheS5zdHlsZS5oZWlnaHQpLzItZy8yLGo9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJ0ZXh0Qm94IiwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLGYrInB4IixnKyJweCIsaCsicHgiLGkrInB4Iiwibm9uZSIsIjBweCIsInRyYW5zcGFyZW50IG5vbmUiLCIwcHgiLCIwcHgiKTtqLmlkPSJ0ZXh0Qm94IixaLkNvcHlyaWdodERpc3BsYXkuYXBwZW5kQ2hpbGQoaik7dmFyIGs9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7ai5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNlbnRlcmVkRWxlbWVudChrKSksdGhpcy56MjUxKGssImJsYWNrIiwidmVyZGFuYSIsIjE2cHgiLCJub25lIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwiMWVtIiwianVzdGlmeSIsIm5vbmUiKTt2YXIgbD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjKTtqLmFwcGVuZENoaWxkKGwpO3ZhciBtPTgwLG49MjAsbz0zMCxwPTIwLHE9aCtmLzItKG0qMitvKS8yLHI9aStnK3Ascz10aGlzLnoxODUoInoxMyIpLHQ9bmV3IFouVXRpbHMuQnV0dG9uKCJidXR0b25BZ3JlZSIscyxudWxsLG51bGwsbnVsbCxudWxsLG0rInB4IixuKyJweCIscSsicHgiLHIrInB4IiwibW91c2Vkb3duIix0aGlzLnoxNjAsInoxMDMiLCJzb2xpZCIsIjFweCIsZSwiMHB4IiwiMHB4Iik7Wi5Db3B5cmlnaHREaXNwbGF5LmFwcGVuZENoaWxkKHQuZWxtdCkscSs9bStvLHM9dGhpcy56MTg1KCJ6MTUiKTt2YXIgdT1uZXcgWi5VdGlscy5CdXR0b24oImJ1dHRvbkV4aXQiLHMsbnVsbCxudWxsLG51bGwsbnVsbCxtKyJweCIsbisicHgiLHErInB4IixyKyJweCIsIm1vdXNlZG93biIsdGhpcy56MTYxLCJ6MTA0Iiwic29saWQiLCIxcHgiLGUsIjBweCIsIjBweCIpO1ouQ29weXJpZ2h0RGlzcGxheS5hcHBlbmRDaGlsZCh1LmVsbXQpfWVsc2V7dmFyIGo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRCb3giKSx2PWouY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudDtqLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQ9djt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uQWdyZWUiKTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwibW91c2Vkb3duIix0aGlzLnoxNjApLFouQ29weXJpZ2h0RGlzcGxheS5yZW1vdmVDaGlsZCh0KTt2YXIgdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uRXhpdCIpO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih1LCJtb3VzZWRvd24iLHRoaXMuejE2MSksWi5Db3B5cmlnaHREaXNwbGF5LnJlbW92ZUNoaWxkKHUpfX0sQnV0dG9uOmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMpe3ZhciB0PVouVXRpbHMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgic3BhbiIsYSwiaW5saW5lLWJsb2NrIiwiYWJzb2x1dGUiLCJoaWRkZW4iLGcsaCxpLGosbixvLHAscSxyLHMpO2lmKCFaLlV0aWxzLmlzU3RyVmFsKGIpKXt2YXIgdT1aLlV0aWxzLmNyZWF0ZUdyYXBoaWNFbGVtZW50KGMrIi8iK2QpLHY9Wi5VdGlscy5jcmVhdGVHcmFwaGljRWxlbWVudChjKyIvIitlKSx3PVouVXRpbHMuY3JlYXRlR3JhcGhpY0VsZW1lbnQoYysiLyIrZik7dS5pZD10LmlkKyItaW1nVXAiLHYuaWQ9dC5pZCsiLWltZ092ZXIiLHcuaWQ9dC5pZCsiLWltZ0Rvd24iLHQuX2ltZ1VwSUQ9dS5pZCx0Ll9pbWdPdmVySUQ9di5pZCx0Ll9pbWdEb3duSUQ9dy5pZDt2YXIgeD11LnN0eWxlLHk9di5zdHlsZSx6PXcuc3R5bGU7eC5wb3NpdGlvbj15LnBvc2l0aW9uPXoucG9zaXRpb249ImFic29sdXRlIix4LndpZHRoPXkud2lkdGg9eS53aWR0aD1nLHguaGVpZ2h0PXkuaGVpZ2h0PXkuaGVpZ2h0PWgseC50b3A9eS50b3A9ei50b3A9IjBweCIseC5sZWZ0PXkubGVmdD16LmxlZnQ9IjBweCIsWi5icm93c2VyPT1aLmJyb3dzZXJzLkZJUkVGT1gmJlouYnJvd3NlclZlcnNpb248MyYmKHgudG9wPXkudG9wPXoudG9wPSIiKSx5LnZpc2liaWxpdHk9ImhpZGRlbiIsei52aXNpYmlsaXR5PSJoaWRkZW4iLHQuYXBwZW5kQ2hpbGQodSksdC5hcHBlbmRDaGlsZCh2KSx0LmFwcGVuZENoaWxkKHcpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih1LCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHYsImNvbnRleHRtZW51IixaLlV0aWxzLnByZXZlbnREZWZhdWx0KSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodywiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpfWVsc2V7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7dC5hcHBlbmRDaGlsZChaLlV0aWxzLmNyZWF0ZUNlbnRlcmVkRWxlbWVudChBKSksWi5VdGlscy56MjUxKEEsImJsYWNrIiwidmVyZGFuYSIsIjEzcHgiLCJub25lIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwibm9ybWFsIiwiMWVtIiwiY2VudGVyIiwibm9uZSIpLFouVXRpbHMuZGlzYWJsZVRleHRJbnRlcmFjdGlvbihBKSxaLlV0aWxzLmFkZEV2ZW50TGlzdGVuZXIodCwiY29udGV4dG1lbnUiLFouVXRpbHMucHJldmVudERlZmF1bHQpfVoudG9vbHRpcHNWaXNpYmxlJiZaLlV0aWxzLmlzU3RyVmFsKG0pJiYodC50aXRsZT1aLlV0aWxzLnoxODUobSkpLFoubW9iaWxlRGV2aWNlP1ouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaHN0YXJ0IixsKTooWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNlZG93biIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCksWi5VdGlscy5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNlb3ZlciIsWi5VdGlscy5zdG9wUHJvcGFnYXRpb24pLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZW91dCIsWi5VdGlscy5zdG9wUHJvcGFnYXRpb24pLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih0LGssbCkpLHRoaXMuZWxtdD10fSx6MTM4OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLnN0eWxlO2Qud2lkdGg9YisicHgiLGQuaGVpZ2h0PWMrInB4Ijt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLl9pbWdVcElEKSxmPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2ltZ092ZXJJRCksZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLl9pbWdEb3duSUQpO2lmKGUmJmYmJmcpe3ZhciBoPWUuc3R5bGUsaT1mLnN0eWxlLGo9Zy5zdHlsZTtoLndpZHRoPWIrInB4IixoLmhlaWdodD1jKyJweCIsaS53aWR0aD1iKyJweCIsaS5oZWlnaHQ9YysicHgiLGoud2lkdGg9YisicHgiLGouaGVpZ2h0PWMrInB4In19LEdyYXBoaWM6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9Yz9iKyIvIitjOmIsaT1aLlV0aWxzLmNyZWF0ZUdyYXBoaWNFbGVtZW50KGgpLGo9aS5zdHlsZTtqLndpZHRoPWQsai5oZWlnaHQ9ZTt2YXIgYz1aLlV0aWxzLmNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoInNwYW4iLGEsImlubGluZS1ibG9jayIsImFic29sdXRlIiwiaGlkZGVuIixkLGUsZixnLCJub25lIiwiMHB4IiwidHJhbnNwYXJlbnQgbm9uZSIsIjBweCIsIjBweCIpO2MuYXBwZW5kQ2hpbGQoaSksdGhpcy5lbG10PWMsWi5tb2JpbGVEZXZpY2U/Wi5VdGlscy5hZGRFdmVudExpc3RlbmVyKGksInRvdWNoc3RhcnQiLFouVXRpbHMucHJldmVudERlZmF1bHQpOlouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihpLCJtb3VzZWRvd24iLFouVXRpbHMucHJldmVudERlZmF1bHQpLFouVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcihpLCJjb250ZXh0bWVudSIsWi5VdGlscy5wcmV2ZW50RGVmYXVsdCl9LHoyMDM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuc3R5bGU7ZC53aWR0aD1iKyJweCIsZC5oZWlnaHQ9YysicHgiO3ZhciBlPWEuZmlyc3RDaGlsZCxmPWUuc3R5bGU7Zi53aWR0aD1iKyJweCIsZi5oZWlnaHQ9YysicHgifSx6MTYwOmZ1bmN0aW9uKGEpe1ouVmlld2VyRGlzcGxheS5yZW1vdmVDaGlsZChaLkNvcHlyaWdodERpc3BsYXkpLGRvY3VtZW50LmNvb2tpZT0iaW1hZ2VDb3B5cmlnaHQ9Y29uZmlybWVkIixaLlZpZXdlci56MTQ5KCl9LHoxNjE6ZnVuY3Rpb24oYSl7Wi5VdGlscy56MjUyKCExKTtyZXR1cm59LHoxMjg6ZnVuY3Rpb24oKXtTdHJpbmcucHJvdG90eXBlLm11bHRpcGx5fHwoU3RyaW5nLnByb3RvdHlwZS5tdWx0aXBseT1mdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5qb2luLGI9e307cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBiLmxlbmd0aD1jKzEsYS5jYWxsKGIsdGhpcyl9fSgpKSxBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8KEFycmF5LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGEsYil7Yj9iPDAmJihiPU1hdGgubWF4KDAsdGhpcy5sZW5ndGgrYikpOmI9MDtmb3IodmFyIGM9YixkPXRoaXMubGVuZ3RoO2M8ZDtjKyspaWYodGhpc1tjXT09PWEpcmV0dXJuIGM7cmV0dXJuLTF9KSxBcnJheS5wcm90b3R5cGUucHVzaHx8KEFycmF5LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEpe3RoaXNbdGhpcy5sZW5ndGhdPWF9KSxBcnJheS5wcm90b3R5cGUuc3BsaWNlfHwoQXJyYXkucHJvdG90eXBlLnN1YmFycj1mdW5jdGlvbihhLGIpe2lmKGE+PXRoaXMubGVuZ3RofHxiJiZiPD0wKXJldHVybltdO2E8MCYmKE1hdGguYWJzKGEpPnRoaXMubGVuZ3RoP2E9MDphPXRoaXMubGVuZ3RoK2EpO2lmKCFifHxiK2E+dGhpcy5sZW5ndGgpYj10aGlzLmxlbmd0aC1hO3ZhciBjPVtdO2Zvcih2YXIgZD1hO2Q8YStiO2QrKyljLnB1c2godGhpc1tkXSk7cmV0dXJuIGN9LEFycmF5LnByb3RvdHlwZS5zdWJhcnJheT1mdW5jdGlvbihhLGIpe2E8MCYmKGE9MCk7aWYoIWJ8fGI+dGhpcy5sZW5ndGgpYj10aGlzLmxlbmd0aDtpZihhPT1iKXJldHVybltdO3ZhciBjPVtdO2Zvcih2YXIgZD1hO2Q8YjtkKyspYy5wdXNoKHRoaXNbZF0pO3JldHVybiBjfSxBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGEsYil7YjwwJiYoYj0wKTt2YXIgYz1bXTtpZihhcmd1bWVudHMubGVuZ3RoPjIpZm9yKHZhciBkPTIsZT1hcmd1bWVudHMubGVuZ3RoO2Q8ZTtkKyspYy5wdXNoKGFyZ3VtZW50c1tkXSk7dmFyIGY9dGhpcy5zdWJhcnJheSgwLGEpLGc9dGhpcy5zdWJhcnIoYSxiKSxoPXRoaXMuc3ViYXJyYXkoYStiKSxpPWYuY29uY2F0KGMsaCk7dGhpcy5sZW5ndGg9MDtmb3IodmFyIGQ9MCxlPWkubGVuZ3RoO2Q8ZTtkKyspdGhpcy5wdXNoKGlbZF0pO3JldHVybiBnfSl9LHoxMjc6ZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyPyh0aGlzLmRpc2FibGVUZXh0SW50ZXJhY3Rpb249ZnVuY3Rpb24oYSl7YSYmKHRuUz1hLnBhcmVudE5vZGUuc3R5bGUsdG5TJiYoYS5wYXJlbnROb2RlLnVuc2VsZWN0YWJsZT0ib24iLHRuUy51c2VyU2VsZWN0PSJub25lIix0blMuTW96VXNlclNlbGVjdD0ibm9uZSIsdG5TLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLHRuUy53ZWJraXRUb3VjaENhbGxvdXQ9Im5vbmUiLHRuUy53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQiKSl9LHRoaXMucmVuZGVyUXVhbGl0eT1mdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWI9PSJoaWdoIj8ib3B0aW1pemVRdWFsaXR5Ijoib3B0aW1pemVTcGVlZCI7YS5zdHlsZS5zZXRQcm9wZXJ0eSgiaW1hZ2UtcmVuZGVyaW5nIixjLG51bGwpfX0sdGhpcy5zZXRPcGFjaXR5PWZ1bmN0aW9uKGEsYixjKXtaLmFscGhhU3VwcG9ydGVkP2Euc3R5bGUub3BhY2l0eT1iOmMmJihhLnN0eWxlLmJhY2tncm91bmRDb2xvcj1jKX0pOmRvY3VtZW50LmF0dGFjaEV2ZW50JiYodGhpcy5kaXNhYmxlVGV4dEludGVyYWN0aW9uPWZ1bmN0aW9uKGEpe2EmJihhLnBhcmVudE5vZGUudW5zZWxlY3RhYmxlPSJvbiIsYS5wYXJlbnROb2RlLm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0pfSx0aGlzLnJlbmRlclF1YWxpdHk9ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iPT0iaGlnaCI/ImJpY3ViaWMiOiJuZWFyZXN0LW5laWdoYm9yIjthLnN0eWxlLm1zSW50ZXJwb2xhdGlvbk1vZGU9Y319LHRoaXMuc2V0T3BhY2l0eT1mdW5jdGlvbihhLGIsYyl7Wi5hbHBoYVN1cHBvcnRlZD8oYS5zdHlsZS5maWx0ZXI9InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PScgKyB2YWx1ZSArICcpIixhLnN0eWxlLmZpbHRlcj0iYWxwaGEob3BhY2l0eT0iK2IrIikiKTpjJiYoYS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9Yyl9KX0sejEyNjpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/KHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7Yj09Im1vdXNld2hlZWwiJiZlbG10LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixjLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKX0sdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtiPT0ibW91c2V3aGVlbCImJmVsbXQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGMsITEpLGEmJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSx0aGlzLmV2ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhfSx0aGlzLnRhcmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYS50YXJnZXR9LHRoaXMucmVsYXRlZFRhcmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZWxhdGVkVGFyZ2V0fSx0aGlzLmlzUmlnaHRNb3VzZUJ1dHRvbj1mdW5jdGlvbihhKXt2YXIgYj0hMTtpZihhLndoaWNoPT0yfHxhLndoaWNoPT0zKWI9ITA7cmV0dXJuIGJ9LHRoaXMucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSk6ZG9jdW1lbnQuYXR0YWNoRXZlbnQmJih0aGlzLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMuX2ZpbmRMaXN0ZW5lcihhLGIsYykhPS0xKXJldHVybjt2YXIgZD1mdW5jdGlvbigpe3ZhciBiPXdpbmRvdy5ldmVudDtGdW5jdGlvbi5wcm90b3R5cGUuY2FsbD9jLmNhbGwoYSxiKTooYS5fY3VycmVudExpc3RlbmVyPWMsYS5fY3VycmVudExpc3RlbmVyKGIpLGEuX2N1cnJlbnRMaXN0ZW5lcj1udWxsKX07YS5hdHRhY2hFdmVudCgib24iK2IsZCk7dmFyIGU9e3RhcmdldDphLGV2ZW50TmFtZTpiLGhhbmRsZXI6YyxoYW5kbGVyMjpkfSxmPWEuZG9jdW1lbnR8fGEsZz1mLnBhcmVudFdpbmRvdyxoPSJsIit0aGlzLl9saXN0ZW5lckNvdW50ZXIrKztnLl9hbGxMaXN0ZW5lcnN8fChnLl9hbGxMaXN0ZW5lcnM9e30pLGcuX2FsbExpc3RlbmVyc1toXT1lLGEuX2xpc3RlbmVyc3x8KGEuX2xpc3RlbmVycz1bXSksYS5fbGlzdGVuZXJzW2EuX2xpc3RlbmVycy5sZW5ndGhdPWgsZy5fdW5sb2FkTGlzdGVuZXJBZGRlZHx8KGcuX3VubG9hZExpc3RlbmVyQWRkZWQ9ITAsZy5hdHRhY2hFdmVudCgib251bmxvYWQiLHRoaXMuX3JlbW92ZUFsbExpc3RlbmVycykpfSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKGEpe3ZhciBkPXRoaXMuX2ZpbmRMaXN0ZW5lcihhLGIsYyk7aWYoZD09LTEpcmV0dXJuO3ZhciBlPWEuZG9jdW1lbnR8fGEsZj1lLnBhcmVudFdpbmRvdyxnPWEuX2xpc3RlbmVyc1tkXSxoPWYuX2FsbExpc3RlbmVyc1tnXTthLmRldGFjaEV2ZW50KCJvbiIrYixoLmhhbmRsZXIyKSxhLl9saXN0ZW5lcnMuc3BsaWNlKGQsMSksZGVsZXRlIGYuX2FsbExpc3RlbmVyc1tnXX19LHRoaXMuZXZlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHdpbmRvdy5ldmVudH0sdGhpcy50YXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3JjRWxlbWVudH0sdGhpcy5yZWxhdGVkVGFyZ2V0PWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7cmV0dXJuIGEudHlwZT09Im1vdXNlb3ZlciI/Yj1hLmZyb21FbGVtZW50OmEudHlwZT09Im1vdXNlb3V0IiYmKGI9YS50b0VsZW1lbnQpLGJ9LHRoaXMuaXNSaWdodE1vdXNlQnV0dG9uPWZ1bmN0aW9uKGEpe3ZhciBiPSExO3JldHVybiBhLmJ1dHRvbj09MiYmKGI9ITApLGJ9LHRoaXMucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oYSl7YSYmKGEucmV0dXJuVmFsdWU9ITEpfSx0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbihhKXthLmNhbmNlbEJ1YmJsZT0hMH0sdGhpcy5fZmluZExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLl9saXN0ZW5lcnM7aWYoIWQpcmV0dXJuLTE7dmFyIGU9YS5kb2N1bWVudHx8YSxmPWUucGFyZW50V2luZG93O2Zvcih2YXIgZz1kLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgaD1kW2ddLGk9Zi5fYWxsTGlzdGVuZXJzW2hdO2lmKGkuZXZlbnROYW1lPT1iJiZpLmhhbmRsZXI9PWMpcmV0dXJuIGd9cmV0dXJuLTF9LHRoaXMuX3JlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7Zm9yKGlkIGluIGEuX2FsbExpc3RlbmVycyl7dmFyIGI9YS5fYWxsTGlzdGVuZXJzW2lkXTtiLnRhcmdldC5kZXRhY2hFdmVudCgib24iK2IuZXZlbnROYW1lLGIuaGFuZGxlcjIpLGRlbGV0ZSBhLl9hbGxMaXN0ZW5lcnNbaWRdfX0sdGhpcy5fbGlzdGVuZXJDb3VudGVyPTApfSx6MTY0OmZ1bmN0aW9uKCl7Wi5icm93c2Vycz17VU5LTk9XTjowLElFOjEsRklSRUZPWDoyLFNBRkFSSTozLENIUk9NRTo0LE9QRVJBOjV9O3ZhciBhPVouYnJvd3NlcnMuVU5LTk9XTixiPTAsYz1uYXZpZ2F0b3IuYXBwTmFtZSxkPW5hdmlnYXRvci5hcHBWZXJzaW9uLGU9ITEsZj0hMSxnPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtpZihjIT0iTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyInx8IXdpbmRvdy5hdHRhY2hFdmVudHx8IXdpbmRvdy5BY3RpdmVYT2JqZWN0KWlmKGMhPSJOZXRzY2FwZSJ8fCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciljPT0iT3BlcmEiJiYhIXdpbmRvdy5vcGVyYSYmISF3aW5kb3cuYXR0YWNoRXZlbnQmJihhPVouYnJvd3NlcnMuT1BFUkEsYj1wYXJzZUZsb2F0KGQpKTtlbHNle3ZhciBpPWcuaW5kZXhPZigiZmlyZWZveCIpLGo9Zy5pbmRleE9mKCJzYWZhcmkiKSxrPWcuaW5kZXhPZigiY2hyb21lIik7aWYoaT49MClhPVouYnJvd3NlcnMuRklSRUZPWCxiPXBhcnNlRmxvYXQoZy5zdWJzdHJpbmcoaSs4KSk7ZWxzZSBpZihqPj0wKXt2YXIgbD1nLnN1YnN0cmluZygwLGopLmxhc3RJbmRleE9mKCIvIik7YT1rPj0wP1ouYnJvd3NlcnMuQ0hST01FOlouYnJvd3NlcnMuU0FGQVJJLGI9cGFyc2VGbG9hdChnLnN1YnN0cmluZyhsKzEsaikpfXZhciBtPW5ldyBJbWFnZTttLnN0eWxlLmdldFByb3BlcnR5VmFsdWUmJihmPW0uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiaW1hZ2UtcmVuZGVyaW5nIikpfWVsc2V7dmFyIGg9Zy5pbmRleE9mKCJtc2llIik7YT1aLmJyb3dzZXJzLklFLGI9cGFyc2VGbG9hdChnLnN1YnN0cmluZyhoKzUsZy5pbmRleE9mKCI7IixoKSkpLGU9dHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSE9InVuZGVmaW5lZCJ9dmFyIG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx7fSxvPW4uc3R5bGV8fHt9LHA9ITEscT1bInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk1velRyYW5zZm9ybSJdLHIsczt3aGlsZShyPXEuc2hpZnQoKSlpZih0eXBlb2Ygb1tyXSE9InVuZGVmaW5lZCIpe3A9ITAscz0vd2Via2l0L2kudGVzdChyKTticmVha312YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0JiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpLHU9IShhPT1aLmJyb3dzZXJzLlNBRkFSSSYmYjw0fHxhPT1aLmJyb3dzZXJzLkNIUk9NRSYmYjwyKSx2PXQmJnUsdz0hKGE9PVouYnJvd3NlcnMuSUV8fGE9PVouYnJvd3NlcnMuQ0hST01FJiZiPDIpLHg9ZXx8Zj8iaGlnaCI6bnVsbCx5PWcuaW5kZXhPZigiYW5kcm9pZCIpPi0xfHxnLmluZGV4T2YoImlwaG9uZSIpPi0xfHxnLmluZGV4T2YoImlwYWQiKT4tMXx8Zy5pbmRleE9mKCJpcG9kIik+LTE7Wi5icm93c2VyPWEsWi5icm93c2VyVmVyc2lvbj1iLFouY2FudmFzU3VwcG9ydGVkPXYsWi51c2VDYW52YXM9Wi5jYW52YXNTdXBwb3J0ZWQsWi5jc3NUcmFuc2Zvcm1zU3VwcG9ydGVkPXAsWi5jc3NUcmFuc2Zvcm1Qcm9wZXJ0eT1yLFouY3NzVHJhbnNmb3JtTm9Vbml0cz1zLFouYWxwaGFTdXBwb3J0ZWQ9dyxaLnJlbmRlclF1YWxpdHk9eCxaLm1vYmlsZURldmljZT15fSxpc1N0clZhbDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYSE9IiJ9LHoxNzQ6ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPTAsZD10aGlzLnoxNzYoYSkucG9zaXRpb249PSJmaXhlZCIsZT10aGlzLnoxODMoYSxkKTt3aGlsZShlKXtiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3A7aWYoZCl7dmFyIGY9dGhpcy56MTg0KCk7Yis9Zi54LGMrPWYueX1hPWUsZD10aGlzLnoxNzYoYSkucG9zaXRpb249PSJmaXhlZCIsZT10aGlzLnoxODMoYSxkKX1yZXR1cm4gbmV3IHRoaXMuUG9pbnQoYixjKX0sejE4MzpmdW5jdGlvbihhLGIpe3JldHVybiBiJiZhIT1kb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHk6YS5vZmZzZXRQYXJlbnR9LHoxNzU6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB0aGlzLlBvaW50KGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpfSx6MTc2OmZ1bmN0aW9uKGEpe2lmKGEuY3VycmVudFN0eWxlKXJldHVybiBhLmN1cnJlbnRTdHlsZTtpZih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwiIik7dGhpcy56MjU1KHRoaXMuejE4NSgiejkzIikpfSx6MTc3OmZ1bmN0aW9uKGEpe3JldHVybiB6MTc0KFouVXRpbHMudGFyZ2V0KGEpKX0sejE3ODpmdW5jdGlvbihhKXt2YXIgYj1udWxsLGM9YS50b3VjaGVzLGQ9YS5jaGFuZ2VkVG91Y2hlcztyZXR1cm4gYyE9PXVuZGVmaW5lZD9iPWNbMF06ZCE9PXVuZGVmaW5lZCYmKGI9ZFswXSksYn0sejE4MTpmdW5jdGlvbihhKXt2YXIgYj0wLGM9MDtyZXR1cm4gYS50eXBlPT0iRE9NTW91c2VTY3JvbGwiJiZicm93c2VyPT1Ccm93c2VyLkZJUkVGT1gmJmJyb3dzZXJWZXJzaW9uPDM/KGI9YS5zY3JlZW5YLGM9YS5zY3JlZW5ZKTp0eXBlb2YgYS5wYWdlWD09Im51bWJlciI/KGI9YS5wYWdlWCxjPWEucGFnZVkpOnR5cGVvZiBhLmNsaWVudFg9PSJudW1iZXIiPyhiPWEuY2xpZW50WCtkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQrZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsYz1hLmNsaWVudFkrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCk6dGhpcy56MjU1KHRoaXMuejE4NSgiejk0IikpLG5ldyB0aGlzLlBvaW50KGIsYyl9LHoxODI6ZnVuY3Rpb24oYSl7dmFyIGI9MDtyZXR1cm4gdHlwZW9mIGEud2hlZWxEZWx0YT09Im51bWJlciI/Yj1hLndoZWVsRGVsdGE6dHlwZW9mIGEuZGV0YWlsPT0ibnVtYmVyIj9iPWEuZGV0YWlsKi0xOnRoaXMuejI1NSh0aGlzLnoxODUoIno5NSIpKSxiP2IvTWF0aC5hYnMoYik6MH0sejE4NDpmdW5jdGlvbigpe3ZhciBhPTAsYj0wLGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx7fSxkPWRvY3VtZW50LmJvZHl8fHt9O2lmKHR5cGVvZiB3aW5kb3cucGFnZVhPZmZzZXQ9PSJudW1iZXIiKWE9d2luZG93LnBhZ2VYT2Zmc2V0LGI9d2luZG93LnBhZ2VZT2Zmc2V0O2Vsc2UgaWYoZC5zY3JvbGxMZWZ0fHxkLnNjcm9sbFRvcClhPWQuc2Nyb2xsTGVmdCxiPWQuc2Nyb2xsVG9wO2Vsc2UgaWYoYy5zY3JvbGxMZWZ0fHxjLnNjcm9sbFRvcClhPWMuc2Nyb2xsTGVmdCxiPWMuc2Nyb2xsVG9wO3JldHVybiBuZXcgdGhpcy5Qb2ludChhLGIpfSx6MjAxaW5kb3dTaXplOmZ1bmN0aW9uKCl7dmFyIGE9MCxiPTAsYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fHt9LGQ9ZG9jdW1lbnQuYm9keXx8e307cmV0dXJuIHR5cGVvZiB3aW5kb3cuaW5uZXJXaWR0aD09Im51bWJlciI/KGE9d2luZG93LmlubmVyV2lkdGgsYj13aW5kb3cuaW5uZXJIZWlnaHQpOmMuY2xpZW50V2lkdGh8fGMuY2xpZW50SGVpZ2h0PyhhPWMuY2xpZW50V2lkdGgsYj1jLmNsaWVudEhlaWdodCk6ZC5jbGllbnRXaWR0aHx8ZC5jbGllbnRIZWlnaHQ/KGE9ZC5jbGllbnRXaWR0aCxiPWQuY2xpZW50SGVpZ2h0KTp0aGlzLnoyNTUodGhpcy56MTg1KCJ6OTYiKSksbmV3IHRoaXMuUG9pbnQoYSxiKX0sejIyNTpmdW5jdGlvbihhKXt2YXIgYj0hMSxjPWE7d2hpbGUoYj09ITEpaWYoYyljLmlkP2MuaWQ9PSJWaWV3ZXJEaXNwbGF5Ij9iPSEwOmM9Yy5wYXJlbnROb2RlOmM9Yy5wYXJlbnROb2RlO2Vsc2UgYnJlYWs7cmV0dXJuIGJ9LHoyMzg6ZnVuY3Rpb24oYSl7dmFyIGI9YSsiPSIsYz1kb2N1bWVudC5jb29raWUuc3BsaXQoIjsiKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTt3aGlsZShlLmNoYXJBdCgwKT09IiAiKWU9ZS5zdWJzdHJpbmcoMSxlLmxlbmd0aCk7aWYoZS5pbmRleE9mKGIpPT0wKXJldHVybiBlLnN1YnN0cmluZyhiLmxlbmd0aCxlLmxlbmd0aCl9cmV0dXJuIG51bGx9LHoyNDM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5zbGljZSgtMSxhLmxlbmd0aCk9PSIvIj9hLnNsaWNlKDAsYS5sZW5ndGgtMSk6YTtyZXR1cm4gYj1hLnNsaWNlKDAsMSk9PSIvIj9hLnNsaWNlKDEsYS5sZW5ndGgpOmEsYn0sejE0MDpmdW5jdGlvbihhKXtpZihaLmJyb3dzZXI9PVouYnJvd3NlcnMuSUUpe3ZhciBiPShuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksYz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksZD1jK2I7YSs9Ij9zdWZmaXhUb0Jsb2NrUGF0aENhY2hpbmc9IitkfXJldHVybiBhfSx6MTcwOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihhLz1kLzIpPDE/Yy8yKmEqYSphKmEqYStiOmMvMiooKGEtPTIpKmEqYSphKmErMikrYn0sejIzMzpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gYSYmKGI9YS5zcGxpdCgiJiIpKSxifSx6MjQ5OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuejE4NSgiejUwIiksYz10aGlzLnoxODUoIno0OSIpLGQ9dGhpcy56MTg1KCJ6NDgiKTtaLnNraW5QYXRoPXRoaXMuejE4NSgiejU2IiksWi5za2luTW9kZT10aGlzLnoxODUoIno1NCIpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MjYiKSkpfHwoWi5pbml0aWFsWD1wYXJzZUZsb2F0KHRoaXMuejE4NSgiejI2IikpKSxpc05hTihwYXJzZUZsb2F0KHRoaXMuejE4NSgiejI3IikpKXx8KFouaW5pdGlhbFk9cGFyc2VGbG9hdCh0aGlzLnoxODUoInoyNyIpKSksaXNOYU4ocGFyc2VGbG9hdCh0aGlzLnoxODUoInoyOCIpKSl8fChaLmluaXRpYWxaPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MjgiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzMiKSkpfHwoWi5taW5aPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzMiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzIiKSkpfHwoWi5tYXhaPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MzIiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6ODAiKSkpfHwoWi56b29tU3BlZWQ9cGFyc2VGbG9hdCh0aGlzLnoxODUoIno4MCIpKSksaXNOYU4ocGFyc2VGbG9hdCh0aGlzLnoxODUoIno0NiIpKSl8fChaLnBhblNwZWVkPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6NDYiKSkpLGlzTmFOKHBhcnNlRmxvYXQodGhpcy56MTg1KCJ6MTgiKSkpfHwoWi5mYWRlSW5TcGVlZD1wYXJzZUZsb2F0KHRoaXMuejE4NSgiejE4IikpKSxaLnRvb2xiYXJWaXNpYmxlPXBhcnNlSW50KHRoaXMuejE4NSgiejY0IiksMTApLFoudG9vbGJhclBvc2l0aW9uPXBhcnNlRmxvYXQodGhpcy56MTg1KCJ6NjMiKSksWi50b29sdGlwc1Zpc2libGU9dGhpcy56MTg1KCJ6NjUiKSE9IjAiLFoubmF2aWdhdG9yVmlzaWJsZT1wYXJzZUludCh0aGlzLnoxODUoIno0MyIpLDEwKSxaLm5hdmlnYXRvclc9cGFyc2VJbnQodGhpcy56MTg1KCJ6NDQiKSwxMCksWi5uYXZpZ2F0b3JIPXBhcnNlSW50KHRoaXMuejE4NSgiejM5IiksMTApLFoubmF2aWdhdG9yTD1wYXJzZUludCh0aGlzLnoxODUoIno0MCIpLDEwKSxaLm5hdmlnYXRvclQ9cGFyc2VJbnQodGhpcy56MTg1KCJ6NDIiKSwxMCksWi5uYXZpZ2F0b3JGaXQ9dGhpcy56MTg1KCJ6MzgiKSxaLmNsaWNrWm9vbT10aGlzLnoxODUoInoxMCIpIT0iMCIsWi5jbGlja1Bhbj10aGlzLnoxODUoIno5IikhPSIwIixaLm1vdXNlUGFuPXRoaXMuejE4NSgiejM0IikhPSIwIixaLmtleXM9dGhpcy56MTg1KCJ6MjkiKSE9IjAiLFouY29uc3RyYWluUGFuPXRoaXMuejE4NSgiejEyIikhPSIwIixaLnNsaWRlclZpc2libGU9dGhpcy56MTg1KCJ6NTgiKSE9IjAiLFouZnVsbFBhZ2VWaXNpYmxlPXRoaXMuejE4NSgiejIzIikhPSIwIixaLnByb2dyZXNzVmlzaWJsZT10aGlzLnoxODUoIno1MyIpIT0iMCIsWi5sb2dvVmlzaWJsZT10aGlzLnoxODUoInozMSIpIT0iMCIsWi5sb2dvQ3VzdG9tUGF0aD10aGlzLnoxODUoInozMCIpLFouY2FudmFzPXRoaXMuejE4NSgiejgiKSE9IjAiLFouZGVidWc9dGhpcy56MTg1KCJ6MTciKSE9IjAiO2lmKHRoaXMuaXNTdHJWYWwoYSkpZm9yKHZhciBlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1hW2VdLGg9Zy5pbmRleE9mKCI9Iik7aWYoaD4wKXt2YXIgaT1nLnN1YnN0cmluZygwLGgpLGo9Zy5zdWJzdHJpbmcoaCsxKTtpZih0aGlzLmlzU3RyVmFsKGopKXN3aXRjaChpKXtjYXNlInpJbml0aWFsWCI6aXNOYU4ocGFyc2VGbG9hdChqKSl8fChaLmluaXRpYWxYPXBhcnNlRmxvYXQoaikpO2JyZWFrO2Nhc2UiekluaXRpYWxZIjppc05hTihwYXJzZUZsb2F0KGopKXx8KFouaW5pdGlhbFk9cGFyc2VGbG9hdChqKSk7YnJlYWs7Y2FzZSJ6SW5pdGlhbFpvb20iOmlzTmFOKHBhcnNlRmxvYXQoaikpfHwoWi5pbml0aWFsWj1wYXJzZUZsb2F0KGopLFouaW5pdGlhbFomJihaLmluaXRpYWxaLz0xMDApKTticmVhaztjYXNlInpNaW5ab29tIjohaXNOYU4ocGFyc2VGbG9hdChqKSkmJnBhcnNlRmxvYXQoaik+LjAxJiYoWi5taW5aPXBhcnNlRmxvYXQoaiksWi5taW5aJiYoWi5taW5aLz0xMDApKTticmVhaztjYXNlInpNYXhab29tIjppc05hTihwYXJzZUZsb2F0KGopKXx8KFoubWF4Wj1wYXJzZUZsb2F0KGopLFoubWF4WiYmKFoubWF4Wi89MTAwKSk7YnJlYWs7Y2FzZSJ6TmF2aWdhdG9yVmlzaWJsZSI6Wi5uYXZpZ2F0b3JWaXNpYmxlPXBhcnNlSW50KGosMTApO2JyZWFrO2Nhc2UielRvb2xiYXJWaXNpYmxlIjpaLnRvb2xiYXJWaXNpYmxlPXBhcnNlSW50KGosMTApO2JyZWFrO2Nhc2UiekxvZ29WaXNpYmxlIjpqPT0iMCImJihaLmxvZ29WaXNpYmxlPSExKTticmVhaztjYXNlInpTbGlkZXJWaXNpYmxlIjpqPT0iMCImJihaLnNsaWRlclZpc2libGU9ITEpO2JyZWFrO2Nhc2UiekZ1bGxQYWdlVmlzaWJsZSI6aj09IjAiJiYoWi5mdWxsUGFnZVZpc2libGU9ITEpO2JyZWFrO2Nhc2UielByb2dyZXNzVmlzaWJsZSI6aj09IjAiJiYoWi5wcm9ncmVzc1Zpc2libGU9ITEpO2JyZWFrO2Nhc2UielRvb2x0aXBzVmlzaWJsZSI6aj09IjAiJiYoWi50b29sdGlwc1Zpc2libGU9ITEpO2JyZWFrO2Nhc2UielNraW5QYXRoIjpaLnNraW5QYXRoPWo7YnJlYWs7ZGVmYXVsdDppZihiPT1jKWFsZXJ0KGQrIiAiK2kpO2Vsc2Ugc3dpdGNoKGkpe2Nhc2Uielpvb21TcGVlZCI6Wi56b29tU3BlZWQ9cGFyc2VJbnQoaiwxMCk7YnJlYWs7Y2FzZSJ6UGFuU3BlZWQiOloucGFuU3BlZWQ9cGFyc2VJbnQoaiwxMCk7YnJlYWs7Y2FzZSJ6RmFkZUluU3BlZWQiOlouZmFkZUluU3BlZWQ9cGFyc2VJbnQoaiwxMCk7YnJlYWs7Y2FzZSJ6VG9vbGJhclBvc2l0aW9uIjpaLnRvb2xiYXJQb3NpdGlvbj1wYXJzZUludChqLDEwKTticmVhaztjYXNlInpOYXZpZ2F0b3JXaWR0aCI6aXNOYU4ocGFyc2VGbG9hdChqKSl8fChaLm5hdmlnYXRvclc9cGFyc2VGbG9hdChqKSk7YnJlYWs7Y2FzZSJ6TmF2aWdhdG9ySGVpZ2h0Ijppc05hTihwYXJzZUZsb2F0KGopKXx8KFoubmF2aWdhdG9ySD1wYXJzZUZsb2F0KGopKTticmVhaztjYXNlInpOYXZpZ2F0b3JMZWZ0Ijppc05hTihwYXJzZUZsb2F0KGopKXx8KFoubmF2aWdhdG9yTD1wYXJzZUZsb2F0KGopKTticmVhaztjYXNlInpOYXZpZ2F0b3JUb3AiOmlzTmFOKHBhcnNlRmxvYXQoaikpfHwoWi5uYXZpZ2F0b3JUPXBhcnNlRmxvYXQoaikpO2JyZWFrO2Nhc2Uiek5hdmlnYXRvckZpdCI6aXNOYU4ocGFyc2VGbG9hdChqKSl8fChaLm5hdmlnYXRvckZpdD1wYXJzZUludChqLDEwKSk7YnJlYWs7Y2FzZSJ6Q2xpY2tab29tIjpqPT0iMCImJihaLmNsaWNrWm9vbT0hMSk7YnJlYWs7Y2FzZSJ6Q2xpY2tQYW4iOmo9PSIwIiYmKFouY2xpY2tQYW49ITEpO2JyZWFrO2Nhc2Uiek1vdXNlUGFuIjpqPT0iMCImJihaLm1vdXNlUGFuPSExKTticmVhaztjYXNlInpLZXlzIjpqPT0iMCImJihaLmtleXM9ITEpO2JyZWFrO2Nhc2UiekNvbnN0cmFpblBhbiI6aj09IjAiJiYoWi5jb25zdHJhaW5QYW49ITEpO2JyZWFrO2Nhc2UiekNvcHlyaWdodFBhdGgiOlouY29weXJpZ2h0UGF0aD1qO2JyZWFrO2Nhc2UieldhdGVybWFya1BhdGgiOloud2F0ZXJtYXJrUGF0aD1qO2JyZWFrO2Nhc2UiekxvZ29DdXN0b21QYXRoIjpaLmxvZ29DdXN0b21QYXRoPWo7YnJlYWs7Y2FzZSJ6Q2FudmFzIjpqPT0iMCImJihaLmNhbnZhcz0hMSk7aWYoIVouY2FudmFzU3VwcG9ydGVkfHwhWi5jYW52YXMpWi51c2VDYW52YXM9ITE7YnJlYWs7Y2FzZSJ6RGVidWciOmo9PSIxIiYmKFouZGVidWc9ITApfX19fX0sejI0MjpmdW5jdGlvbihhKXtmb3IodmFyIGI9MTtiPGEubGVuZ3RoOylhW2ItMV09PWFbYl0/YS5zcGxpY2UoYiwxKTpiKys7cmV0dXJuIGF9LGludGVyc2VjdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdLGY9ITE7Zm9yKHZhciBnPTA7ZzxiLmxlbmd0aCYmZT49KGVsbXQyPWJbZ10pO2crKylpZihlbG10Mj09ZSl7Zj0hMDticmVha31mJiZjLnB1c2goYVtkXSl9cmV0dXJuIGN9LHN1YnRyYWN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10sZT0hMTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoJiZkPj0oZWxtdDI9YltmXSk7ZisrKWlmKGVsbXQyPT1kKXtlPSEwO2JyZWFrfWUmJmEuc3BsaWNlKGMtLSwxKX1yZXR1cm4gYX0sY3JlYXRlQ2FsbGJhY2s6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IodmFyIGQ9MixlPWFyZ3VtZW50cy5sZW5ndGg7ZDxlO2QrKyljLnB1c2goYXJndW1lbnRzW2RdKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1jLmNvbmNhdChbXSk7Zm9yKHZhciBlPTAsZj1hcmd1bWVudHMubGVuZ3RoO2U8ZjtlKyspZC5wdXNoKGFyZ3VtZW50c1tlXSk7cmV0dXJuIGIuYXBwbHkoYSxkKX19LHoyNTU6ZnVuY3Rpb24oYSl7YWxlcnQoYSl9LGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8pe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYSk7dGhpcy5pc1N0clZhbChiKSYmKHAuaWQ9Yik7dmFyIHE9cC5zdHlsZTtyZXR1cm4gcS5kaXNwbGF5PXRoaXMuaXNTdHJWYWwoYyk/YzoiaW5saW5lLWJsb2NrIixxLnBvc2l0aW9uPXRoaXMuaXNTdHJWYWwoZCk/ZDoic3RhdGljIixxLm92ZXJmbG93PXRoaXMuaXNTdHJWYWwoZSk/ZToiaGlkZGVuIixhPT0iY2FudmFzIj8odGhpcy5pc1N0clZhbChmKSYmcC5zZXRBdHRyaWJ1dGUoIndpZHRoIixmKSx0aGlzLmlzU3RyVmFsKGcpJiZwLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixnKSk6KHRoaXMuaXNTdHJWYWwoZikmJihxLndpZHRoPWYpLHRoaXMuaXNTdHJWYWwoZyYmZykmJihxLmhlaWdodD1nKSksdGhpcy5pc1N0clZhbChoKSYmKHEubGVmdD1oKSx0aGlzLmlzU3RyVmFsKGkpJiYocS50b3A9aSkscS5ib3JkZXJTdHlsZT10aGlzLmlzU3RyVmFsKGopP2o6Im5vbmUiLHEuYm9yZGVyV2lkdGg9dGhpcy5pc1N0clZhbChrKT9rOiIwcHgiLHEuYmFja2dyb3VuZD10aGlzLmlzU3RyVmFsKGwpP2w6InRyYW5zcGFyZW50IG5vbmUiLHEubWFyZ2luPXRoaXMuaXNTdHJWYWwobSk/bToiMHB4IixxLnBhZGRpbmc9dGhpcy5pc1N0clZhbChuKT9uOiIwcHgiLHRoaXMuaXNTdHJWYWwobykmJihxLmN1cnNvcj1vKSxwfSxjcmVhdGVDZW50ZXJlZEVsZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiKSxjPVtdO2MucHVzaCgnPGRpdiBzdHlsZT0iZGlzcGxheTp0YWJsZTsgaGVpZ2h0OjEwMCU7IHdpZHRoOjEwMCU7JyksYy5wdXNoKCJib3JkZXI6bm9uZTsgbWFyZ2luOjBweDsgcGFkZGluZzowcHg7IiksYy5wdXNoKCcjcG9zaXRpb246cmVsYXRpdmU7IG92ZXJmbG93OmhpZGRlbjsgdGV4dC1hbGlnbjpsZWZ0OyI+JyksYy5wdXNoKCc8ZGl2IHN0eWxlPSIjcG9zaXRpb246YWJzb2x1dGU7ICN0b3A6NTAlOyB3aWR0aDoxMDAlOyAnKSxjLnB1c2goImJvcmRlcjpub25lOyBtYXJnaW46MHB4OyBwYWRkaW5nOjBweDsiKSxjLnB1c2goJ2Rpc3BsYXk6dGFibGUtY2VsbDsgdmVydGljYWwtYWxpZ246bWlkZGxlOyI+JyksYy5wdXNoKCc8ZGl2IHN0eWxlPSIjcG9zaXRpb246cmVsYXRpdmU7ICN0b3A6LTUwJTsgd2lkdGg6MTAwJTsgJyksYy5wdXNoKCJib3JkZXI6bm9uZTsgbWFyZ2luOjBweDsgcGFkZGluZzowcHg7IiksYy5wdXNoKCd0ZXh0LWFsaWduOmNlbnRlcjsiPjwvZGl2PjwvZGl2PjwvZGl2PicpLGIuaW5uZXJIVE1MPWMuam9pbigiIiksYj1iLmZpcnN0Q2hpbGQ7dmFyIGQ9YixlPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpO3doaWxlKGUubGVuZ3RoPjApZD1lWzBdLGU9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7cmV0dXJuIGQuYXBwZW5kQ2hpbGQoYSksYn0sY3JlYXRlR3JhcGhpY0VsZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJpbWciKSxjPW51bGw7cmV0dXJuIFouYnJvd3Nlcj09Wi5icm93c2Vycy5JRSYmWi5icm93c2VyVmVyc2lvbjw3PyhjPXRoaXMuY3JlYXRlQ29udGFpbmVyRWxlbWVudCgic3BhbiIsbnVsbCwiaW5saW5lLWJsb2NrIiksYi5vbmxvYWQ9ZnVuY3Rpb24oKXtjLnN0eWxlLndpZHRoPWMuc3R5bGUud2lkdGh8fGIud2lkdGgrInB4IixjLnN0eWxlLmhlaWdodD1jLnN0eWxlLmhlaWdodHx8Yi5oZWlnaHQrInB4IixiLm9ubG9hZD1udWxsLGI9bnVsbH0sYy5zdHlsZS5maWx0ZXI9InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz0nIithKyInLCBzaXppbmdNZXRob2Q9J3NjYWxlJykiKTooYz1iLGMuc3JjPWEpLGN9LHoyNTE6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpe3ZhciBtPWEucGFyZW50Tm9kZS5zdHlsZTttLmNvbG9yPWIsbS5mb250RmFtaWx5PWMsbS5mb250U2l6ZT1kLG0uZm9udFNpemVBZGp1c3Q9ZSxtLmZvbnRTdHlsZT1mLG0uZm9udFN0cmV0Y2g9ZyxtLmZvbnRWYXJpYW50PWgsbS5mb250V2VpZ2h0PWksbS5saW5lSGVpZ2h0PWosbS50ZXh0QWxpZ249ayxtLnRleHREZWNvcmF0aW9uPWx9LHoxNTg6ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl0cnl7Yj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGIuYXN5bmM9ITEsYi5sb2FkWE1MKGEpfWNhdGNoKGMpe3RoaXMuejI1NShjLm5hbWUrdGhpcy56MTg1KCJ6ODIiKStjLm1lc3NhZ2UpfWVsc2UgaWYod2luZG93LkRPTVBhcnNlcil0cnl7dmFyIGQ9bmV3IERPTVBhcnNlcjtiPWQucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIil9Y2F0Y2goYyl7dGhpcy56MjU1KGMubmFtZSt0aGlzLnoxODUoIno4MiIpK2MubWVzc2FnZSl9ZWxzZSB0aGlzLnoyNTUodGhpcy56MTg1KCJ6OTgiKSk7cmV0dXJuIGJ9LFBvaW50OmZ1bmN0aW9uKGEsYil7dGhpcy54PXR5cGVvZiBhPT0ibnVtYmVyIj9hOjAsdGhpcy55PXR5cGVvZiBiPT0ibnVtYmVyIj9iOjB9LFBvaW50M0Q6ZnVuY3Rpb24oYSxiLGMpe3RoaXMueD10eXBlb2YgYT09Im51bWJlciI/YTowLHRoaXMueT10eXBlb2YgYj09Im51bWJlciI/YjowLHRoaXMuej10eXBlb2YgYz09Im51bWJlciI/YzowfSx6MTg1OmZ1bmN0aW9uKGEpe3ZhciBiPSIiO3N3aXRjaChhKXtjYXNlIno1MCI6Yj0iRW5hYmxlIERldmVsb3BlciBwYXJhbWV0ZXJzIjticmVhaztjYXNlIno0OSI6Yj0iQ2hhbmdpbmcgVGhpcyBWaW9sYXRlcyBMaWNlbnNlIEFncmVlbWVudCI7YnJlYWs7Y2FzZSJ6NDgiOmI9IlN1cHBvcnQgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIGVuYWJsZWQgb25seSBpbiB0aGUgWm9vbWlmeSBJbWFnZSBWaWV3ZXIgaW5jbHVkZWQgaW4gdGhlIFpvb21pZnkgSFRNTDUgRGV2ZWxvcGVyIGVkaXRpb246ICI7YnJlYWs7Y2FzZSJ6MjUiOmI9IjEwMCI7YnJlYWs7Y2FzZSJ6NjAiOmI9IjMwMDAwIjticmVhaztjYXNlIno2MSI6Yj0iMjU2IjticmVhaztjYXNlIno1OSI6Yj0iMS4xNSI7YnJlYWs7Y2FzZSJ6NjIiOmI9IjMwMCI7YnJlYWs7Y2FzZSJ6NyI6Yj0iNiI7YnJlYWs7Y2FzZSJ6NiI6Yj0iMyI7YnJlYWs7Y2FzZSJ6NSI6Yj0iMyI7YnJlYWs7Y2FzZSJ6NCI6Yj0iMiI7YnJlYWs7Y2FzZSJ6MyI6Yj0iMCI7YnJlYWs7Y2FzZSJ6NDUiOmI9IjIiO2JyZWFrO2Nhc2UiejQ2IjpiPSI1IjticmVhaztjYXNlIno0NyI6Yj0iMTAiO2JyZWFrO2Nhc2UiejgwIjpiPSI1IjticmVhaztjYXNlIno4MSI6Yj0iMC4wMiI7YnJlYWs7Y2FzZSJ6NzciOmI9IjMwIjticmVhaztjYXNlIno3OCI6Yj0iMjAwIjticmVhaztjYXNlIno3OSI6Yj0iMTAiO2JyZWFrO2Nhc2UiejEwVElFUlNLSVBUSFJFU0hPTEQiOmI9IjAxLiI7YnJlYWs7Y2FzZSJ6MjQiOmI9IjEwIjticmVhaztjYXNlInoxOCI6Yj0iNSI7YnJlYWs7Y2FzZSJ6MTkiOmI9IjAuMDY3IjticmVhaztjYXNlIno2NCI6Yj0iNCI7YnJlYWs7Y2FzZSJ6NjMiOmI9IjEiO2JyZWFrO2Nhc2UiejY1IjpiPSIxIjticmVhaztjYXNlIno0MyI6Yj0iMiI7YnJlYWs7Y2FzZSJ6NDQiOmI9IjE1MCI7YnJlYWs7Y2FzZSJ6MzkiOmI9IjEwMCI7YnJlYWs7Y2FzZSJ6NDAiOmI9IjAiO2JyZWFrO2Nhc2UiejQyIjpiPSIwIjticmVhaztjYXNlInozOCI6Yj1udWxsO2JyZWFrO2Nhc2UiejM2IjpiPSIjZmZmZmZmIjticmVhaztjYXNlInozNk5PQUxQSEEiOmI9IiNmYmZhZmEiO2JyZWFrO2Nhc2UiejM1IjpiPSIwLjc1IjticmVhaztjYXNlIno0MSI6Yj0iYmx1ZSI7YnJlYWs7Y2FzZSJ6NTUiOmI9InNraW5GaWxlcy54bWwiO2JyZWFrO2Nhc2UiejU2IjpiPSJBc3NldHMvU2tpbnMvRGVmYXVsdCI7YnJlYWs7Y2FzZSJ6NTQiOmI9IjAiO2JyZWFrO2Nhc2UiejEyIjpiPSIxIjticmVhaztjYXNlIno1OCI6Yj0iMSI7YnJlYWs7Y2FzZSJ6NTciOmI9IjEwIjticmVhaztjYXNlInoyMyI6Yj0iMSI7YnJlYWs7Y2FzZSJ6MjIiOmI9IndoaXRlIjticmVhaztjYXNlInoyMSI6Yj0iWCI7YnJlYWs7Y2FzZSJ6MjAiOmI9Ilx0I0Y4RjhGOCI7YnJlYWs7Y2FzZSJ6NTMiOmI9IjEiO2JyZWFrO2Nhc2UiejUxIjpiPSI1MDAiO2JyZWFrO2Nhc2UiejUyIjpiPSIgIjticmVhaztjYXNlInozMSI6Yj0iMSI7YnJlYWs7Y2FzZSJ6MzAiOmI9bnVsbDticmVhaztjYXNlIno4IjpiPSIxIjticmVhaztjYXNlInoxNyI6Yj0iMCI7YnJlYWs7Y2FzZSJ6MTYiOmI9ImxpZ2h0Z3JheSI7YnJlYWs7Y2FzZSJ6MTQiOmI9IndoaXRlIjticmVhaztjYXNlInoxMyI6Yj0iQWdyZWUiO2JyZWFrO2Nhc2UiejE1IjpiPSJFeGl0IjticmVhaztjYXNlIno3MyI6Yj0iMC42IjticmVhaztjYXNlIno3NCI6Yj0iMC4zMyI7YnJlYWs7Y2FzZSJ6NzYiOmI9IjUxMiI7YnJlYWs7Y2FzZSJ6NzUiOmI9IjM4NCI7YnJlYWs7Y2FzZSJ6MjYiOmI9bnVsbDticmVhaztjYXNlInoyNyI6Yj1udWxsO2JyZWFrO2Nhc2UiejI4IjpiPW51bGw7YnJlYWs7Y2FzZSJ6MzMiOmI9bnVsbDticmVhaztjYXNlInozMiI6Yj0iMSI7YnJlYWs7Y2FzZSJ6MTAiOmI9IjEiO2JyZWFrO2Nhc2UiejkiOmI9IjEiO2JyZWFrO2Nhc2UiejM0IjpiPSIxIjticmVhaztjYXNlInoyOSI6Yj0iMSI7YnJlYWs7Y2FzZSJ6NjciOmI9IlRoaXMgcGFuZWwgaXMgZW5hYmxlZCB1c2luZyB0aGUgSFRNTCBwYXJhbWV0ZXIgJ3pEZWJ1Zz0xJy4gSXQgY2FuIGJlIGNhbGxlZCBhcyBmb2xsb3dzOlxuXG4gICBaLlV0aWxzLnRyYWNlKCd2YWx1ZSB0byBkaXNwbGF5Jyk7ICBcblxuVGhlIGJ1dHRvbnMgYmVsb3cgZGlzcGxheSBvciBtb2RpZnkgaW1wb3J0YW50IHN0YXRlIHZhbHVlcy4gIFdlYiBkZXNpZ25lcnMgbmV3IHRvIEphdmFTY3JpcHQgd2lsbCBhbHNvIGJlbmVmaXQgZnJvbSB0aGUgY29uc29sZSwgdHJhY2UsIHByb2ZpbGluZywgYW5kIG90aGVyIGRlYnVnZ2luZyBmZWF0dXJlcyBvZiBsZWFkaW5nIGJyb3dzZXJzLiI7YnJlYWs7Y2FzZSJ6NjgiOmI9ImxpZ2h0Z3JheSI7YnJlYWs7Y2FzZSJ6NjYiOmI9IndoaXRlIjticmVhaztjYXNlIno2OSI6Yj0iU2hvdyBHbG9iYWxzIjticmVhaztjYXNlIno3MiI6Yj0iVG9nZ2xlIERpc3BsYXkiO2JyZWFrO2Nhc2UiejcwIjpiPSJUb2dnbGUgQmFja2ZpbGwiO2JyZWFrO2Nhc2UiejcxIjpiPSJUb2dnbGUgQ29uc3RyYWluIFBhbiI7YnJlYWs7Y2FzZSJ6OTkiOmI9IkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdC4iO2JyZWFrO2Nhc2Uiejg3LUlNQUdFWE1MIjpiPSJFcnJvciBsb2FkaW5nIGltYWdlOiBwbGVhc2UgbWFrZSBzdXJlIGltYWdlIHBhdGggaW4gd2ViIHBhZ2UgbWF0Y2hlcyBpbWFnZSBmb2xkZXIgbG9jYXRpb24gb24gd2Vic2VydmVyLiI7YnJlYWs7Y2FzZSJ6ODctVE9PTEJBUlhNTCI6Yj0iRXJyb3IgbG9hZGluZyB0b29sYmFyOiBwbGVhc2UgdmVyaWZ5IHNraW4gZmlsZXMgYXJlIG9uIHdlYnNlcnZlciBpbiBzYW1lIGZvbGRlciBhcyB6MTIyLmpzIGZpbGUgYW5kIGFyZSBpbiBkZWZhdWx0IGZvbGRlciBzdHJ1Y3R1cmUgJ0Fzc2V0cy9Ta2lucy9EZWZhdWx0Jywgb3IgYWRkIHpTa2luUGF0aCBwYXJhbWV0ZXIgdG8gd2VicGFnZS4iO2JyZWFrO2Nhc2Uiejg3IjpiPSJFcnJvciBtYWtpbmcgbmV0d29yayByZXF1ZXN0OiBwb3NzaWJsZSBpbnZhbGlkIHBhdGggb3IgbmV0d29yayBlcnJvci4iO2JyZWFrO2Nhc2Uiejg0IjpiPSJJbWFnZSBmYWlsZWQgdG8gbG9hZDogcG9zc2libGUgaW52YWxpZCBwYXRoLCBtaXNzaW5nIGltYWdlLCBvciBuZXR3b3JrIGVycm9yLiI7YnJlYWs7Y2FzZSJ6ODkiOmI9IkVycm9yIHJlbGF0ZWQgdG8gbmV0d29yayBzZWN1cml0eTogIjticmVhaztjYXNlIno5MCI6Yj0iRXJyb3IgcmVsYXRlZCB0byBuZXR3b3JrIHN0YXR1czogIjticmVhaztjYXNlIno4MiI6Yj0iIGNvbnZlcnRpbmcgWE1MIHRleHQgdG8gWE1MIGRvYyAoRE9NUGFyc2VyKTogIjticmVhaztjYXNlIno5OCI6Yj0iQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFhNTCBET00uIjticmVhaztjYXNlInoxMDAiOmI9IlhNTCBpbnZhbGlkLiI7YnJlYWs7Y2FzZSJ6ODYiOmI9IkltYWdlIFhNTCBpbnZhbGlkLiI7YnJlYWs7Y2FzZSJ6ODMiOmI9IiB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2s6ICI7YnJlYWs7Y2FzZSJ6ODUiOmI9IkltYWdlIHRpbWVkIG91dDogIjticmVhaztjYXNlIno4OCI6Yj0iTmF2aWdhdG9yIGltYWdlIGZhaWxlZCB0byBsb2FkOiBwb3NzaWJsZSBpbnZhbGlkIHBhdGgsIG1pc3NpbmcgaW1hZ2UsIG9yIG5ldHdvcmsgZXJyb3IuIjticmVhaztjYXNlIno5MSI6Yj0iU2tpbiBYTUwgaW52YWxpZC4iO2JyZWFrO2Nhc2UiejkyIjpiPSJUaGUgc2tpbiBYTUwgZmlsZSBoYXMgb25lIG9yIG1vcmUgZmF1bHR5IG5hbWUgbGluZXMuIjticmVhaztjYXNlIno5NyI6Yj0iV2F0ZXJtYXJrIGltYWdlIGZhaWxlZCB0byBsb2FkOiAiO2JyZWFrO2Nhc2UiejkzIjpiPSJVbmtub3duIGVsZW1lbnQgc3R5bGUgLSBubyBrbm93biBtZXRob2QgdG8gaWRlbnRpZnkuIjticmVhaztjYXNlIno5NCI6Yj0iVW5rbm93biBtb3VzZSBwb3NpdGlvbiAtIG5vIGtub3duIG1ldGhvZCB0byBjYWxjdWxhdGUuIjticmVhaztjYXNlIno5NSI6Yj0iVW5rbm93biBtb3VzZSBzY3JvbGwgLSBubyBrbm93biBtZXRob2QgdG8gY2FsY3VsYXRlLiI7YnJlYWs7Y2FzZSJ6OTYiOmI9IlVua25vd24gd2luZG93IHNpemUgLSBubyBrbm93biBtZXRob2QgdG8gY2FsY3VsYXRlLiI7YnJlYWs7Y2FzZSJ6MTA2IjpiPSJMYXVuY2ggWm9vbWlmeSBXZWJzaXRlIjticmVhaztjYXNlInoxMDciOmI9Ik1pbmltaXplIFRvb2xiYXIiO2JyZWFrO2Nhc2UiejEwNSI6Yj0iRXhwYW5kIFRvb2xiYXIiO2JyZWFrO2Nhc2UiejEyMCI6Yj0iWm9vbSBPdXQiO2JyZWFrO2Nhc2UiejExNCI6Yj0iWm9vbSBJbiBBbmQgT3V0IjticmVhaztjYXNlInoxMTkiOmI9Ilpvb20gSW4iO2JyZWFrO2Nhc2UiejEwOSI6Yj0iUGFuIExlZnQiO2JyZWFrO2Nhc2UiejExMSI6Yj0iUGFuIFVwIjticmVhaztjYXNlInoxMDgiOmI9IlBhbiBEb3duIjticmVhaztjYXNlInoxMTAiOmI9IlBhbiBSaWdodCI7YnJlYWs7Y2FzZSJ6MTEyIjpiPSJSZXNldCBJbml0aWFsIFZpZXciO2JyZWFrO2Nhc2UiejExOCI6Yj0iVG9nZ2xlIEZ1bGwgUGFnZSBWaWV3IjticmVhaztjYXNlInoxMDIiOmI9IkNhbmNlbCBGdWxsIFBhZ2UgVmlldyI7YnJlYWs7Y2FzZSJ6MTAzIjpiPSJBZ3JlZSB0byBjb3B5cmlnaHQgYW5kIHZpZXcgaW1hZ2VzIjticmVhaztjYXNlInoxMDQiOmI9IkV4aXQgYW5kIGRvIG5vdCB2aWV3IGltYWdlcyI7YnJlYWs7Y2FzZSJ6MTEzIjpiPSJUb2dnbGUgRnVsbCBQYWdlIFZpZXciO2JyZWFrO2Nhc2UiejExNyI6Yj0iVG9nZ2xlIFZpZXdwb3J0IERpc3BsYXkiO2JyZWFrO2Nhc2UiejExNSI6Yj0iVG9nZ2xlIFZpZXdwb3J0IEJhY2tmaWxsIjticmVhaztjYXNlInoxMTYiOmI9IlRvZ2dsZSBDb25zdHJhaW4gUGFuIjticmVhaztkZWZhdWx0OmI9IlVuZXhwZWN0ZWQgcmVzb3VyY2UgcmVxdWVzdCJ9cmV0dXJuIGJ9LHoyNTM6ZnVuY3Rpb24oKXt2YXIgYT0iIjthKz0iXG4iLGErPSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk9PTUlGWSBJTUFHRSBWSUVXRVIgLSBDVVJSRU5UIFZBTFVFU1xuIixhKz0iXG4iLGErPSJJTUFHRSAmIFNLSU46ICAgICIsYSs9IlouaW1hZ2VQYXRoPSIrWi5pbWFnZVBhdGgrIiwgICAiLGErPSJaLnNraW5QYXRoPSIrWi5za2luUGF0aCsiLCAgICIsYSs9Ilouc2tpbk1vZGU9IitaLnNraW5Nb2RlKyIsICAgIixhKz0iWi5pbWFnZVc9IitaLmltYWdlVysiLCAgICIsYSs9IlouaW1hZ2VIPSIrWi5pbWFnZUgrIiwgICAiLGErPSJ0aWVyQ291bnQ9IitaLlZpZXdwb3J0LnoxODYoKSsiLCAgICIsYSs9IlRJTEVfU0laRT0iK1ouVmlld3BvcnQuejE5NSgpKyJcbiIsYSs9IlxuIixhKz0iUEFHRSAmIEJST1dTRVI6ICAgICIsYSs9IloucGFnZUNvbnRhaW5lcj0iK1oucGFnZUNvbnRhaW5lcisiLCAgICIsYSs9IlouYnJvd3Nlcj0iK1ouYnJvd3NlcisiLCAgICIsYSs9IlouYnJvd3NlclZlcnNpb249IitaLmJyb3dzZXJWZXJzaW9uKyIsICAgIixhKz0iWi5jYW52YXNTdXBwb3J0ZWQ9IitaLmNhbnZhc1N1cHBvcnRlZCsiLCAgICIsYSs9IlouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZD0iK1ouY3NzVHJhbnNmb3Jtc1N1cHBvcnRlZCsiLCAgICIsYSs9IlouY3NzVHJhbnNmb3JtUHJvcGVydHk9IitaLmNzc1RyYW5zZm9ybVByb3BlcnR5KyIsICAgIixhKz0iWi5jc3NUcmFuc2Zvcm1Ob1VuaXRzPSIrWi5jc3NUcmFuc2Zvcm1Ob1VuaXRzKyIsICAgIixhKz0iWi5hbHBoYVN1cHBvcnRlZD0iK1ouYWxwaGFTdXBwb3J0ZWQrIiwgICAiLGErPSJaLnJlbmRlclF1YWxpdHk9IitaLnJlbmRlclF1YWxpdHkrIiwgICAiLGErPSJaLm1vYmlsZURldmljZT0iK1oubW9iaWxlRGV2aWNlKyJcbiIsYSs9IlxuIixhKz0iVklFV0VSIE9QVElPTlMgJiBERUZBVUxUUzogICAgIixhKz0iWi5pbml0aWFsWD0iK1ouaW5pdGlhbFgrIiwgICAiLGErPSJaLmluaXRpYWxZPSIrWi5pbml0aWFsWSsiLCAgICIsYSs9IlouaW5pdGlhbFo9IitaLmluaXRpYWxaKyIsICAgIixhKz0iWi5taW5aPSIrWi5taW5aKyIsICAgIixhKz0iWi5tYXhaPSIrWi5tYXhaKyIsICAgIixhKz0iWi5maXRaPSIrWi5maXRaKyIsICAgIixhKz0iWi56b29tU3BlZWQ9IitaLnpvb21TcGVlZCsiLCAgICIsYSs9IloucGFuU3BlZWQ9IitaLnBhblNwZWVkKyIsICAgIixhKz0iWi5mYWRlSW5TcGVlZD0iK1ouZmFkZUluU3BlZWQrIiwgICAiLGErPSJaLnRvb2xiYXJWaXNpYmxlPSIrWi50b29sYmFyVmlzaWJsZSsiLCAgICIsYSs9IloudG9vbGJhclc9IitaLnRvb2xiYXJXKyIsICAgIixhKz0iWi50b29sYmFyQ3VycmVudFc9IitaLnRvb2xiYXJDdXJyZW50VysiLCAgICIsYSs9IloudG9vbGJhckg9IitaLnRvb2xiYXJIKyIsICAgIixhKz0iWi50b29sYmFyUG9zaXRpb249IitaLnRvb2xiYXJQb3NpdGlvbisiLCAgICIsYSs9IloudG9vbHRpcHNWaXNpYmxlPSIrWi50b29sdGlwc1Zpc2libGUrIiwgICAiLGErPSJaLm5hdmlnYXRvclZpc2libGU9IitaLm5hdmlnYXRvclZpc2libGUrIiwgICAiLGErPSJaLm5hdmlnYXRvclc9IitaLm5hdmlnYXRvclcrIiwgICAiLGErPSJaLm5hdmlnYXRvckg9IitaLm5hdmlnYXRvckgrIiwgICAiLGErPSJaLm5hdmlnYXRvckw9IitaLm5hdmlnYXRvckwrIiwgICAiLGErPSJaLm5hdmlnYXRvclQ9IitaLm5hdmlnYXRvclQrIiwgICAiLGErPSJaLm5hdmlnYXRvckZpdD0iK1oubmF2aWdhdG9yRml0KyIsICAgIixhKz0iWi5jbGlja1pvb209IitaLmNsaWNrWm9vbSsiLCAgICIsYSs9IlouY2xpY2tQYW49IitaLmNsaWNrUGFuKyIsICAgIixhKz0iWi5tb3VzZVBhbj0iK1oubW91c2VQYW4rIiwgICAiLGErPSJaLmtleXM9IitaLmtleXMrIiwgICAiLGErPSJaLmNvbnN0cmFpblBhbj0iK1ouY29uc3RyYWluUGFuKyIsICAgIixhKz0iV2F0ZXJtYXJrIGFscGhhID0gIitaLlV0aWxzLnoxODUoIno3MyIpKyIsICAgIixhKz0iWi53YXRlcm1hcmtQYXRoPSIrWi53YXRlcm1hcmtQYXRoKyIsICAgIixhKz0iWi5jb3B5cmlnaHRQYXRoPSIrWi5jb3B5cmlnaHRQYXRoKyIsICAgIixhKz0iWi5zbGlkZXJWaXNpYmxlPSIrWi5zbGlkZXJWaXNpYmxlKyIsICAgIixhKz0iWi5mdWxsUGFnZVZpc2libGU9IitaLmZ1bGxQYWdlVmlzaWJsZSsiLCAgICIsYSs9IloucHJvZ3Jlc3NWaXNpYmxlPSIrWi5wcm9ncmVzc1Zpc2libGUrIiwgICAiLGErPSJaLmxvZ29WaXNpYmxlPSIrWi5sb2dvVmlzaWJsZSsiLCAgICIsYSs9IloubG9nb0N1c3RvbVBhdGg9IitaLmxvZ29DdXN0b21QYXRoKyIsICAgIixhKz0iWi5jYW52YXM9IitaLmNhbnZhcysiXG4iLGErPSJcbiIsYSs9IklOVEVSTkFMIFZBTFVFUzogICAgIixhKz0iXG4iLGErPSJkaXNwbGF5Vz0iK1ouVmlld3BvcnQuejIwMSgpKyIsICAgIixhKz0iZGlzcGxheUg9IitaLlZpZXdwb3J0LnoxNzkoKSsiLCAgICIsYSs9InRpZXJDdXJyZW50PSIrWi5WaWV3cG9ydC56MTg3KCkrIiwgICAiLGErPSJ0aWVyU2NhbGU9IitaLlZpZXdwb3J0LnoxODkoKSsiLCAgICIsYSs9IlRJRVJTX01BWF9TQ0FMRV9VUD0iK1ouVmlld3BvcnQuejE5NCgpKyIsICAgIixhKz0iVElFUlNfTUFYX1NDQUxFX0RPV049IitaLlZpZXdwb3J0LnoxOTMoKSsiLCAgICIsYSs9IlRJTEVTX01BWF9DQUNIRT0iK1ouVmlld3BvcnQuejE5NygpKyIsICAgIixhKz0iWi51c2VDYW52YXM9IitaLnVzZUNhbnZhcysiXG4iLGErPSJcbiIsYSs9IklOVEVSTkFMIExJU1RTOiAgICAiLGErPSJ0aWVyV3M9IitaLlZpZXdwb3J0LnoxOTIoKSsiLCAgICIsYSs9InRpZXJIcz0iK1ouVmlld3BvcnQuejE4OCgpKyIsICAgIixhKz0idGllclRpbGVDb3VudHM9IitaLlZpZXdwb3J0LnoxOTEoKSsiLCAgICIsYSs9InRpbGVzTG9hZGluZ05hbWVzPSIrWi5WaWV3cG9ydC56MTk2KCkrIlxuIixhKz0iXG4iLGFsZXJ0KGEpfSx6MjU2OmZ1bmN0aW9uKCl7Wi5UcmFjZURpc3BsYXk/Wi5UcmFjZURpc3BsYXkuZGlzcGxheT09ImlubGluZS1ibG9jayI/Wi5UcmFjZURpc3BsYXkuZGlzcGxheT0ibm9uZSI6Wi5UcmFjZURpc3BsYXkuZGlzcGxheT0iaW5saW5lLWJsb2NrIjpaLlV0aWxzLmNvbmZpZ3VyZVRyYWNlRGlzcGxheSgpfSxjb25maWd1cmVUcmFjZURpc3BsYXk6ZnVuY3Rpb24oKXt2YXIgYT1aLnZpZXdlclcvMyxiPVoudmlld2VySC8zKzQ1LGM9MTAsZD1wYXJzZUZsb2F0KFoudmlld2VySCkvMyxlPXRoaXMuejE4NSgiejY4Iik7Wi5UcmFjZURpc3BsYXk9dGhpcy5jcmVhdGVDb250YWluZXJFbGVtZW50KCJkaXYiLCJUcmFjZURpc3BsYXkiLCJpbmxpbmUtYmxvY2siLCJhYnNvbHV0ZSIsImhpZGRlbiIsYSsicHgiLGIrInB4IixjKyJweCIsZCsicHgiLCJzb2xpZCIsIjFweCIsZSwiMHB4IiwiMTBweCIpLFouVmlld2VyRGlzcGxheS5hcHBlbmRDaGlsZChaLlRyYWNlRGlzcGxheSksWi50cmFjZXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKTt2YXIgZj1aLnRyYWNlcy5zdHlsZTtmLndpZHRoPWEtMTUrInB4IixmLmhlaWdodD1iLTYwKyJweCIsZi5mb250RmFtaWx5PSJ2ZXJkYW5hIixmLmZvbnRTaXplPSIxMHB4IixmLmJvcmRlcj0ic29saWQiLGYuYm9yZGVyV2lkdGg9IjFweCIsZi5wYWRkaW5nPSI1cHgiLGYucmVzaXplPSJub25lIixaLnRyYWNlcy52YWx1ZT0iVHJhY2UgVmFsdWVzXG4iLFouVHJhY2VEaXNwbGF5LmFwcGVuZENoaWxkKFoudHJhY2VzKTt2YXIgZz01OCxoPTQyLGk9MjAsaj1iLWgvMi0xMCxrPTEwLGw9dGhpcy56MTg1KCJ6NjYiKSxtPXRoaXMuejE4NSgiejY5Iiksbj1uZXcgdGhpcy5CdXR0b24oImJ1dHRvblNob3dHbG9iYWxzIixtLG51bGwsbnVsbCxudWxsLG51bGwsZysicHgiLGgrInB4IixpKyJweCIsaisicHgiLCJtb3VzZWRvd24iLHRoaXMuejI1MywiejExMyIsInNvbGlkIiwiMXB4IixsLCIwcHgiLCIwcHgiKTtaLlRyYWNlRGlzcGxheS5hcHBlbmRDaGlsZChuLmVsbXQpLGkrPWcrazt2YXIgbT10aGlzLnoxODUoIno3MiIpLG89bmV3IHRoaXMuQnV0dG9uKCJidXR0b25Ub2dnbGVEaXNwbGF5IixtLG51bGwsbnVsbCxudWxsLG51bGwsZysicHgiLGgrInB4IixpKyJweCIsaisicHgiLCJtb3VzZWRvd24iLFouVmlld3BvcnQuejI3MiwiejExNyIsInNvbGlkIiwiMXB4IixsLCIwcHgiLCIwcHgiKTtaLlRyYWNlRGlzcGxheS5hcHBlbmRDaGlsZChvLmVsbXQpLGkrPWcrazt2YXIgbT10aGlzLnoxODUoIno3MCIpLHA9bmV3IHRoaXMuQnV0dG9uKCJidXR0b25Ub2dnbGVCYWNrZmlsbCIsbSxudWxsLG51bGwsbnVsbCxudWxsLGcrInB4IixoKyJweCIsaSsicHgiLGorInB4IiwibW91c2Vkb3duIixaLlZpZXdwb3J0LnoyNzEsInoxMTUiLCJzb2xpZCIsIjFweCIsbCwiMHB4IiwiMHB4Iik7Wi5UcmFjZURpc3BsYXkuYXBwZW5kQ2hpbGQocC5lbG10KSxpKz1nK2ssZys9MTI7dmFyIG09dGhpcy56MTg1KCJ6NzEiKSxxPW5ldyB0aGlzLkJ1dHRvbigiYnV0dG9uVG9nZ2xlQ29uc3RyYWluUGFuIixtLG51bGwsbnVsbCxudWxsLG51bGwsZysicHgiLGgrInB4IixpKyJweCIsaisicHgiLCJtb3VzZWRvd24iLFouVmlld3BvcnQudG9nZ2xlQ29uc3RyYWluUGFuLCJ6MTE2Iiwic29saWQiLCIxcHgiLGwsIjBweCIsIjBweCIpO1ouVHJhY2VEaXNwbGF5LmFwcGVuZENoaWxkKHEuZWxtdCl9LHRyYWNlOmZ1bmN0aW9uKGEpe1ouVHJhY2VEaXNwbGF5fHxaLlV0aWxzLmNvbmZpZ3VyZVRyYWNlRGlzcGxheSgpLFoudHJhY2VzJiYoWi50cmFjZXMudmFsdWUrPSJcbiIrYSsiXG4iKX19"></script>
	</head>




<style id="popups">
	/*HOVER POPUP LINKS*/
	/*hoverpopups type 1*/

	#popup { color: #000; background-color: #c0c0c0; }

	#popup a, #popup a:visited {
		position: relative;
		display: block;
		width: 130px;
		line-height: 30px;
		text-align: right;
		padding: 0 10px;
		margin: 0;
		border: 1px solid #666;
		text-decoration: none;
		font-size: 1em;
		font-weight: bold;
		}

	#popup a span {display: none;}
	#popup a:hover { background-color: #e9e9e2; }

/* the IE correction rule */
	#popup a:hover	{color: #f00; background-color: #e9e9e2; text-indent: 0; /* added the default value */
	#popup a:hover span {
		display: block;
		position: absolute;
		top: 0px;
		left: 170px;
		width: 320px;
		margin: 0px;
		padding: 10px;
		color: #335500;
		font-weight: normal;
		background: #e5e5e5;
		text-align: left;
		border: 1px solid #666;
		}

	</style>



	<style id="style_popover" >
		.popover  {
			position: relative;
			float: left;
			padding: 5px;
			/*z-index: 0;*/
			}
		.popover:hover {
			background-color: slategrey;
//			background-color: #e9e9e2;
			/*z-index: 50;*/
			color: goldenrod;
//			color: #335500;
			text-decoration: none;
			}
/*CSS for enlarged image*/
		.popover span { 
			position: absolute; 
//			background-color: #e5e5e5;
			background-color: slategrey;
			padding: 5px;
			/*left: -1000px;*/
			border: 1px solid #666;
			visibility: hidden;
			color: black;
			text-decoration: none;
			}
/*CSS for enlarged image*/
		.popover span img { 
			border-width: 0px; 
			/*padding: 2px;*/
			}
		
/*CSS for enlarged image on hover*/
		.popover:hover span { 
			visibility: visible; 
//			width: 200px;
			top: 5px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
			left: 5px;/*position where enlarged image should offset horizontally */
			}
		</style>


	<style>
		.thumbnail  {
			position: relative;
			float: left;
			padding: 5px;
			/*z-index: 0;*/
			}

		.thumbnail:hover {
			background-color: #e9e9e2;
			/*z-index: 50;*/
			color: #335500;
			text-decoration: none;
			}

		.thumbnail span { /*CSS for enlarged image*/
			position: absolute; 
			background-color: #e5e5e5;
			padding: 5px;
			/*left: -1000px;*/
			border: 1px solid #666;
			visibility: hidden;
			color: black;
			text-decoration: none;
				}

		.thumbnail span img { /*CSS for enlarged image*/
			border-width: 0px; 
			/*padding: 2px;*/
		}
		
		.thumbnail:hover span { /*CSS for enlarged image on hover*/
			visibility: visible; 
			width: 200px;
			top: 5px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
			left: 300px;/*position where enlarged image should offset horizontally */
		}
		
		/*THUMBNAIL2 - thumbnail2 has border and border on hover*/
		
		.thumbnail2 {
			position: relative;
			float: left;
			padding: 5px;
			/*z-index: 0;*/
		}
		
		.thumbnail2:hover { 
			background-color: #e9e9e2;
			/*z-index: 50;*/
			color: #335500;
			text-decoration: none;
		}
		
		.thumbnail2 span { /*CSS for enlarged image*/
			position: absolute;
			background-color: #e5e5e5;
			padding: 5px;
			/*left: -1000px;*/
			border: 1px solid #666;
			visibility: hidden;
			color: black;
			text-decoration: none;
		}
		
		.thumbnail2 span img { /*CSS for enlarged image*/
			border-width: 0px;
			/*padding: 2px;*/
		}
		
		.thumbnail2:hover span { /*CSS for enlarged image on hover*/
			visibility: visible; width: 208px;
			top: 5px; /* use IF IE6 style to correct IE6 positions of larger image relative to thumb */
			left: 300px;/*position where enlarged image should offset horizontally */
		}
		
		a.thumbnail2 img { 
			text-decoration:none;
			z-index: 50; 
		}
		
		/*if same attribute for all 4 states, then declare here in
		a.thumbnail2*/ 
		
		a.thumbnail2 img:link { 
			border: 2px solid #e9e9e2; 
			background: transparent; 
		}
		
		a.thumbnail2 img:visited { 
			border: 2px solid #e9e9e2; 
			background : transparent; 
		}
		
		a.thumbnail2 img:hover { 
			border: 2px solid #f00; 
			background : transparent; 
		}
		
		a.thumbnail2 img:active { 
			border: 2px solid #e9e9e2; 
			background : transparent; 
		}
		
		a.thumbnail2 img { 
			border: 2px solid #e9e9e2; 
			}
		
		/*end of hover popup links*/
		
		</style>
		
		<script id="script_fileexists">
			function html_error() {
				document.write("<hr><h1>ERR_206</h1><hr>");
				exit();
				}
			function myfileexists(myfilename) {
				var fs = require('fs'),
				filename = process.args[2];
				filename = "index.png";
				fs.exists(filename, function(exists) {
				if (exists) {
					fs.stat(filename, function(err, stats) { 
					if (stats.isDirectory()) {
//						console.log(filename + ": is a directory");
						document.write(filename + ": is a directory");
						} 
					else {
        // do something with file
//						console.log(filename);
						document.write(filename);
						}
					});
					} 
				else {
//					console.log(filename + ": no such file");
					document.write(filename + ": disabled<hr><hr><hr><hr><hr><hr><hr>");
					html_error();
					}
				});

			</script>





		<script id=index_js_terminal>
//	var util = util || {};
//	util.toArray = function(list) {
//			return Array.prototype.slice.call(list || [], 0);
//			};

	var Terminal = Terminal || function(cmdLineContainer, outputContainer) {
	window.URL = window.URL || window.webkitURL;
	window.requestFileSystem = window.requestFileSystem ||
                             window.webkitRequestFileSystem;

	var cmdLine_ = document.querySelector(cmdLineContainer);
	var output_ = document.querySelector(outputContainer);
	const VERSION_ = '0.0.1';

	const CMDS_ = [
		'\.', '\.\.', '\:', '/', '\?', '+', '-', '\$', '\^', '\`', char(27), 
		'n', 'i', 'o', 'a', 'I', 'O', 'A', 'h', 
		'go', 'go1', 'ok', 'ok1',
		'cat', 'cd', 'cp', 'clear', 'date', 'help', 'ls', 'mkdir', 'mv', 'open',
		'pwd', 'rm', 'rmdir', 'theme', 'version', 'who'
		];

	const THEMES_ = ['default', 'cream'];
		var fs_ = null;
		var cwd_ = null;
		var history_ = [];
		var histpos_ = 0;
		var histtemp_ = 0;

		window.addEventListener('click', function(e) {
			cmdLine_.focus();
			}, false);

// Always force text cursor to end of input line.
		cmdLine_.addEventListener('click', inputTextClick_, false);

// Handle up/down key presses for shell history and enter for new command.
		cmdLine_.addEventListener('keydown', historyHandler_, false);
		cmdLine_.addEventListener('keydown', processNewCommand_, false);

	function inputTextClick_(e) {
		this.value = this.value;
		}

	function historyHandler_(e) { // Tab needs to be keydown.

		if (history_.length) {
			if (e.keyCode == 38 || e.keyCode == 40) {
				if (history_[histpos_]) {
					history_[histpos_] = this.value;
					} 
				else {
					histtemp_ = this.value;
					}
				}

		if (e.keyCode == 38) { // up
			histpos_--;
			if (histpos_ < 0) {
				histpos_ = 0;
				}
			} 
		else if (e.keyCode == 40) { // down
			histpos_++;
			if (histpos_ > history_.length) {
				histpos_ = history_.length;
				}
			}

		if (e.keyCode == 38 || e.keyCode == 40) {
			this.value = history_[histpos_] ? history_[histpos_] : histtemp_;
			this.value = this.value; // Sets cursor to end of input.
			}
		}
	}

		function processNewCommand_(e) {
			if (e.keyCode == 9) { // tab
				e.preventDefault();
// TODO(ericbidelman): Implement tab suggest.
				} else if (e.keyCode == 13) { // enter

// Save shell history.
			if (this.value) {
				history_[history_.length] = this.value;
				histpos_ = history_.length;
				}


// Duplicate current input and append to output section.
			var line = this.parentNode.parentNode.cloneNode(true);
			line.removeAttribute('id')
			line.classList.add('line');
			var input = line.querySelector('input.cmdline');
			input.autofocus = false;
			input.readOnly = true;
			output_.appendChild(line);

// Parse out command, args, and trim off whitespace.
// TODO(ericbidelman): Support multiple comma separated commands.
			if (this.value && this.value.trim()) {
				var args = this.value.split(' ').filter(function(val, i) {
					return val;
					});
				var cmd = args[0].toLowerCase();
			args = args.splice(1); // Remove cmd from arg list.
				}

			switch (cmd) {
				case 'cat':
					var fileName = args.join(' ');

					if (!fileName) {
						output('usage: ' + cmd + ' filename');
						break;
						}

					read_(cmd, fileName, function(result) {
					output('<pre>' + result + '</pre>');
					});

					break;
				case 'clear':
					output_.innerHTML = '';
					this.value = '';
					return;
				case 'date':
					output((new Date()).toLocaleString());
					break;
				case '.':
					script_dd_new();
					break;
				case '..':
					script_dd_new();
					break;
				case 'help':
					output('<div class="ls-files">' + CMDS_.join('<br>') + '</div>');
<!--					output('<p>drag</p>');	-->
					break;
				case 'ls':
					ls_(function(entries) {
					if (entries.length) {
						var html = formatColumns_(entries);
						util.toArray(entries).forEach(function(entry, i) {
							html.push(
							'<span class="', entry.isDirectory ? 'folder' : 'file',
							'">', entry.name, '</span><br>');
							});
						html.push('</div>');
						output(html.join(''));
						}
					});
					break;
				case 'pwd':
					output(cwd_.fullPath);
					break;
				case 'cd':
					var dest = args.join(' ') || '/';

					cwd_.getDirectory(dest, {}, function(dirEntry) {
						cwd_ = dirEntry;
						output('<div>' + dirEntry.fullPath + '</div>');
						}, function(e) { invalidOpForEntryType_(e, cmd, dest); });

					break;
				case 'mkdir':
					var dashP = false;
					var index = args.indexOf('-p');
					if (index != -1) {
						args.splice(index, 1);
						dashP = true;
						}

					if (!args.length) {
						output('usage: ' + cmd + ' [-p] directory<br>');
						break;
						}

// Create each directory passed as an argument.
				args.forEach(function(dirName, i) {
					if (dashP) {
						var folders = dirName.split('/');

// Throw out './' or '/' if present on the beginning of our path.
						if (folders[0] == '.' || folders[0] == '') {
							folders = folders.slice(1);
							}

						createDir_(cwd_, folders);
						} 
					else {
						cwd_.getDirectory(dirName, {create: true, exclusive: true}, null,
						function(e) { invalidOpForEntryType_(e, cmd, dirName); });
						}
					});
					break;

				case 'cp':
				case 'mv':
					var src = args[0];
					var dest = args[1];

					if (!src || !dest) {
						output(['usage: ', cmd, ' source target<br>',
						'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', cmd,
						' source directory/'].join(''));
						break;
						}

						var runAction = function(cmd, srcDirEntry, destDirEntry, opt_newName) {
						var newName = opt_newName || null;
						if (cmd == 'mv') {
							srcDirEntry.moveTo(destDirEntry, newName, function(e) {
// UNIX doesn't display output on successful move.
							}, function(e) {
								errorHandler_(e);
								});
							} 
						else {
							srcDirEntry.copyTo(destDirEntry, newName, function(e) {
// UNIX doesn't display output on successful copy.
								}, function(e) {
									errorHandler_(e);
								});
							}
						};

// Moving to a folder? (e.g. second arg ends in '/').
					if (dest[dest.length - 1] == '/') {
						cwd_.getDirectory(src, {}, function(srcDirEntry) {
// Create blacklist for dirs we can't re-create.
							var create = [
								'.', './', '..', '../', '/'].indexOf(dest) != -1 ? false : true;

							cwd_.getDirectory(dest, {create: create}, function(destDirEntry) {
								runAction(cmd, srcDirEntry, destDirEntry);
								}, errorHandler_);
							}, function(e) {
// Try the src entry as a file instead.
								cwd_.getFile(src, {}, function(srcDirEntry) {
									cwd_.getDirectory(dest, {}, function(destDirEntry) {
									runAction(cmd, srcDirEntry, destDirEntry);
									}, errorHandler_);
								}, errorHandler_);
							});
						} 
					else { // Treat src/destination as files.
						cwd_.getFile(src, {}, function(srcFileEntry) {
							srcFileEntry.getParent(function(parentDirEntry) {
							runAction(cmd, srcFileEntry, parentDirEntry, dest);
							}, errorHandler_);
						}, errorHandler_);
					}

					break;



				case 'open':
					var fileName = args.join(' ');

					if (!fileName) {
						output('usage: ' + cmd + ' filename');
						break;
						}

					open_(cmd, fileName, function(fileEntry) {
						var myWin = window.open(fileEntry.toURL(), 'mywin');
						});

					break;

				case 'rm':
// Remove recursively? If so, remove the flag(s) from the arg list.
					var recursive = false;
					['-r', '-f', '-rf', '-fr'].forEach(function(arg, i) {
						var index = args.indexOf(arg);
						if (index != -1) {
							args.splice(index, 1);
							recursive = true;
							}
						});

// Remove each file passed as an argument.
					args.forEach(function(fileName, i) {
						cwd_.getFile(fileName, {}, function(fileEntry) {
							fileEntry.remove(function() {}, errorHandler_);
							}, function(e) {
								if (recursive && e.code == FileError.TYPE_MISMATCH_ERR) {
									cwd_.getDirectory(fileName, {}, function(dirEntry) {
										dirEntry.removeRecursively(function() {}, errorHandler_);
										}, errorHandler_);
									} 
								else if (e.code == FileError.INVALID_STATE_ERR) {
									output(cmd + ': ' + fileName + ': is a directory<br>');
									} 
								else {
									errorHandler_(e);
									}
								});
							});
						break;

				case 'rmdir':
// Remove each directory passed as an argument.
					args.forEach(function(dirName, i) {
						cwd_.getDirectory(dirName, {}, function(dirEntry) {
							dirEntry.remove(function() {}, function(e) {
								if (e.code == FileError.INVALID_MODIFICATION_ERR) {
									output(cmd + ': ' + dirName + ': Directory not empty<br>');
									} 
								else {
									errorHandler_(e);
									}
								});
							}, function(e) { invalidOpForEntryType_(e, cmd, dirName); });
						});
					break;
				case 'theme':
					var theme = args.join(' ');
					if (!theme) {
						output(['usage: ', cmd, ' ' + THEMES_.join('|')].join(''));
						} 
					else {
						var matchedThemes = THEMES_.join('|').match(theme);
						if (matchedThemes && matchedThemes.length) {
							setTheme_(theme);
							} 
						else {
							output('Error - Unrecognized theme used');
							}
						}
					break;
				case 'version':
				case 'ver':
					output(VERSION_);
					break;
				case 'who':
					output(document.title +
					' - By: Eric Bidelman &lt;ericbidelman@chromium.org&gt;');
					break;
					break;
				default:
					if (cmd) {
						output(cmd + ': command not found');
						}
					};

				window.scrollTo(0, getDocHeight_());
				this.value = ''; // Clear/setup line for next input.
				}
			}


		function formatColumns_(entries) {
			var maxName = entries[0].name;
			util.toArray(entries).forEach(function(entry, i) {
				if (entry.name.length > maxName.length) {
					maxName = entry.name;
					}
				});

// If we have 3 or less entires, shorten the output container's height.
// 15 is the pixel height with a monospace font-size of 12px;
			var height = entries.length <= 3 ?
			'height: ' + (entries.length * 15) + 'px;' : '';

// 12px monospace font yields ~7px screen width.
			var colWidth = maxName.length * 7;

			return ['<div class="ls-files" style="-webkit-column-width:',
			colWidth, 'px;', height, '">'];
			}

		function invalidOpForEntryType_(e, cmd, dest) {
			if (e.code == FileError.NOT_FOUND_ERR) {
				output(cmd + ': ' + dest + ': No such file or directory<br>');
				} 
			else if (e.code == FileError.INVALID_STATE_ERR) {
				output(cmd + ': ' + dest + ': Not a directory<br>');
				} 
			else if (e.code == FileError.INVALID_MODIFICATION_ERR) {
				output(cmd + ': ' + dest + ': File already exists<br>');
				} 
			else {
				errorHandler_(e);
				}
			}


		function errorHandler_(e) {
			var msg = '';
			switch (e.code) {
				case FileError.QUOTA_EXCEEDED_ERR:
					msg = 'QUOTA_EXCEEDED_ERR';
					break;
				case FileError.NOT_FOUND_ERR:
					msg = 'NOT_FOUND_ERR';
					break;
				case FileError.SECURITY_ERR:
					msg = 'SECURITY_ERR';
					break;
				case FileError.INVALID_MODIFICATION_ERR:
					msg = 'INVALID_MODIFICATION_ERR';
					break;
				case FileError.INVALID_STATE_ERR:
					msg = 'INVALID_STATE_ERR';
					break;
				default:
					msg = 'Unknown Error';
					break;
					};
				output('<div>Error: ' + msg + '</div>');
				}


		function createDir_(rootDirEntry, folders, opt_errorCallback) {
			var errorCallback = opt_errorCallback || errorHandler_;

			rootDirEntry.getDirectory(folders[0], {create: true}, function(dirEntry) {
// Recursively add the new subfolder if we still have a subfolder to create.
				if (folders.length) {
					createDir_(dirEntry, folders.slice(1));
					}
				}, errorCallback);
			}

		function open_(cmd, path, successCallback) {
			if (!fs_) {return;}

			cwd_.getFile(path, {}, successCallback, function(e) {
				if (e.code == FileError.NOT_FOUND_ERR) {
					output(cmd + ': ' + path + ': No such file or directory<br>');
					}
				});
			}

		function read_(cmd, path, successCallback) {
			if (!fs_) {return;}

			cwd_.getFile(path, {}, function(fileEntry) {
				fileEntry.file(function(file) {
					var reader = new FileReader();

					reader.onloadend = function(e) {
						successCallback(this.result);
						};

					reader.readAsText(file);
					}, errorHandler_);
				}, function(e) {
					if (e.code == FileError.INVALID_STATE_ERR) {
						output(cmd + ': ' + path + ': is a directory<br>');
						} 
					else if (e.code == FileError.NOT_FOUND_ERR) {
						output(cmd + ': ' + path + ': No such file or directory<br>');
						}
					});
			}

		function ls_(successCallback) {
			if (!fs_) {return;}

// Read contents of current working directory. According to spec, need to
// keep calling readEntries() until length of result array is 0. We're
// guarenteed the same entry won't be returned again.
			var entries = [];
			var reader = cwd_.createReader();

			var readEntries = function() {
				reader.readEntries(function(results) {
					if (!results.length) {
						successCallback(entries.sort());
						} 
					else {
						entries = entries.concat(util.toArray(results));
						readEntries();
						}
					}, errorHandler_);
				};

			readEntries();
			}

		function setTheme_(theme) {
			var currentUrl = document.location.pathname;

			if (!theme || theme == 'default') {
// history.replaceState({}, '', currentUrl);
				localStorage.removeItem('theme');
				document.body.className = '';
				return;
				}

			if (theme) {
				document.body.classList.add(theme);
				localStorage.theme = theme;
//history.replaceState({}, '', currentUrl + '#theme=' + theme);
				}
			}

		function output(html) {
			output_.insertAdjacentHTML('beforeEnd', html);
			}

// Cross-browser impl to get document's height.
		function getDocHeight_() {
			var d = document;
			return Math.max(
				Math.max(d.body.scrollHeight, d.documentElement.scrollHeight),
				Math.max(d.body.offsetHeight, d.documentElement.offsetHeight),
				Math.max(d.body.clientHeight, d.documentElement.clientHeight)
				);
			}

		return {
			initFS: function(persistent, size) {
			output('<div>ko ' + document.title +
			'! (v' + VERSION_ + ')</div>');
			output((new Date()).toLocaleString());
			output('<p>...</p>');

			if (!!!window.requestFileSystem) {
				output('<div>unauthorized access has been logged! </div>');
				return;
				}

			var type = persistent ? window.PERSISTENT : window.TEMPORARY;
			window.requestFileSystem(type, size, function(filesystem) {
				fs_ = filesystem;
				cwd_ = fs_.root;

// Attempt to create a folder to test if we can.
				cwd_.getDirectory('testquotaforfsfolder', {create: true}, function(dirEntry) {
					dirEntry.remove(function() { // If successfully created, just delete it.
// noop.
						});
					}, function(e) {
						if (e.code == FileError.QUOTA_EXCEEDED_ERR) {
							output('fail: fs unavailable. ' + ' ' + ' ');
							} 
						else {
							errorHandler_(e);
							}
						});

					}, errorHandler_);
				},
			output: output,
			setTheme: setTheme_,
			addDroppedFiles: function(files) {
				util.toArray(files).forEach(function(file, i) {
					cwd_.getFile(file.name, {create: true, exclusive: true}, function(fileEntry) {
						fileEntry.createWriter(function(fileWriter) {
							fileWriter.onerror = function(e) {
								errorHandler_(e.currentTarget.error);
								};
							fileWriter.write(file);
							}, errorHandler_);
						}, errorHandler_);
					});
				}
			}
		};

		</script>


	<script>
		function degToRad(degree) {
			var factor = Math.PI/180;
			return degree*factor;
			}

		function renderTime() {
  
		  var now = new Date();
		  var today = now.toDateString();
		  var time = now.toLocaleTimeString();
		  var hours = now.getHours();
		  var minutes = now.getMinutes();
		  var seconds = now.getSeconds();
		  var milliseconds = now.getMilliseconds();
		  var newSeconds = seconds+ (milliseconds/1000);
		</script>


	<div class="div_offerings" hidden>
		<div class="title"><h3><font size=2>Want to Donate?</font></h3></div>
		<div class="content"><font size=1>To test and donate.
				We suggest $1000.00 but any amount would be most welcome.</font>
		<form action="http://www.paypal.com/cgi-bin/webscr" method="post">
		<table >
				<tr align="center">
				<td>Amount $ <input name="amount" size="3" value="20.00">
				</td>
				</tr>
				<tr align="center">
		<td>
				<input type="hidden" name="cmd" value="_xclick">
				<input type="hidden" name="business" value="ekonet@konet.org">
				<input type="hidden" name="item_name" value="donate money down the toilet to konet llc">
				<input type="hidden" name="notify_url" value="http://konet.org/index.php?ipn">
				<input type="hidden" name="no_shipping" value="1">
				<input type="hidden" name="return" value="http://konet.org//index.php?donation_thanks">
				<input type="hidden" name="currency_code" value="USD">
				<input type="hidden" name="no_note" value="1">
				<input type="hidden" name="lc" value="US">
				<input type="hidden" name="tax" value="0">
				<input type="hidden" name="bn" value="PP-DonationsBF">
				<input type="hidden" name="custom" value="0">
				<input type="image" src="http://konet.org/imgs/x-click-butcc-donate.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
				</td></tr></table>
				</form>
			</div>
		</div>

		<style>
			#div1, #div2 {
				float: left;
				width: 100px;
				height: 35px;
				margin: 10px;
				padding: 10px;
				border: 1px solid black;
				}
			</style>
	<script>
		function allowDrop(ev) {ev.preventDefault();}
		function drag(ev) {ev.dataTransfer.setData("text", ev.target.id);}
		function drop(ev) {
			ev.preventDefault();
			var data = ev.dataTransfer.getData("text");
			ev.target.appendChild(document.getElementById(data));
			}
		</script>
	<script id=script_qsall>
		function qsall(args) {
			qsmatch=args;
			if( qsmatch == "" ) { qsmatch="div"; }
			if( qsmatch == "" ) { qsmatch="img"; }
//			alert( "BUGS_1010 qsall qsmatch="+qsmatch );
			htmout=""; j=0; k=0;
//			var arrFiltered = document.querySelectorAll('input[value=F2][type=submit][class=c1]');
//			 arrFiltered.forEach(function (el) {                


			qss=document.querySelectorAll(qsmatch);
//			qss.forEach( item => { 
//				item.style = "background-color: yellow";
//				item.style = "font-size: 24";
//				}
			 qss.forEach(function (el) {                
                		var node = document.createElement("p");
		                node.innerHTML = el.getAttribute('id');
		                window.document.body.appendChild(node);
				});

//			alert( "BUGS_1011 qsall qss.length="+qss.length );
			htmout+="<div id=div_"+qsmatch+">\n";
			htmout+="	<table id=table_"+qsmatch+">\n";
			htmout+="		<tr><td>num</td><td>match</td></tr>\n";
			for( j=0; j< qss.length; j++ ) {
//				qs=qss[j].innerHTML;
				qs=qss[j].id;
//				alert( "BUGS_1020 qsall j="+j+" qs="+qs );
				htmout+="		<tr><td>"+j+"</td><td>"+qs+"</td></tr>\n";
				if( qs == "pre_item2href" ) { htmout+=qss[j].innerHTML; }
				if( qs == "" ) { htmout+=qss[j].innerHTML; }
				}

			htmout+="		</table id=table_"+qsmatch+">\n";
			htmout+="	</div id=div_"+qsmatch+">\n";
			if( document.getElementById("div_qsall")) {
				document.getElementById("div_qsall").innerHTML=htmout;
				}
			return(htmout);
			}
		</script id=script_qsall_end>

	<script id=script_dd>
		function dd0(args) {
			alert( "BUGS_1050 dd args="+args );
			return(args);
			}


		function dd(args) {
			alert( "BUGS_1050 dd args="+args );
			match=args;
			htmout=""; match="*.*";
			htmout_dd_head=""; htmout_dd_body=""; htmout_dd_tail="";
//			alert( "BUGS_1010 dd match="+match+" args="+args );
			match="pdf"; text="/pdf/konet.pdf";
			match="0-0-0.jpg$"; text="/zm/komap/TileGroup0/0-0-0.jpg";
			classid="class_items";
			divid="div_items";
			imgid="img_items";

//			if( text.match(text)) {
//				alert( "BUGS_1011 dd __MATCH text="+text+" match="+match+" args="+args );
//				}
//			else {
//				continue;
//				alert( "BUGS_1012 dd NOMATCH text="+text+"  match="+match+" args="+args );
//				}



			if( document.getElementById('pre_lists_items')) {
				items=document.getElementById('pre_lists_items').innerHTML.split("\n");
//				alert( "BUGS_1020 ___FOUND items.length="+items.length );
				}

			htmout_dd_head+="<div id=div_dd>\n";
			htmout_dd_head+="	<h1>div_dd</h1>\n";
			htmout_dd_head+="<div id="+classid+" class=\"drag\" >\n";


			htmout_dd_tail+="	</div id="+classid+"_end >\n";
			htmout_dd_tail+="	</div id=div_dd_end>\n";

//			alert( "BUGS_1045 htmout_dd_head="+htmout_dd_head );

			for( j=0; j<items.length;  j++ ) {
				item=items[j];
//				grp|/fb/jtfdcr/pages/10.jpg|tn_|desc_10|
				alert( "BUGS_1100 j="+j+" item="+item );
				continue;

				grp="grp_"+j; src="src_"+j; tn="tn_"+j; desc="desc_"+j;
//				for(k=0; k<items.split("|").length; k++ ) {
//					if( item[k].length < 8 ) {
//						grp=item[k];
//						continue;
//						}
//					if( item[k].split(".").length == 1 ) {
//						desc=item[k];
//						}
//					else {
//						if( src == "" ) || ( src == "src_" ) {
//							src=item[k];
//							ext=src.split(".")[1];
//							file=src.split("/").pop();
//							path=src.replace(file,"");
//							}
//						else {
//							tn=item[k];
//							}
//						}
//					if( item[k].match("tn")) {
//						tn=path+item[k]+file.replace(ext,"png");
//						}
//					}




//			htmout_drg="";
			htmout_drg+="<div class=\"drg\"><h1>=| konet llc |=</h1>\n";
			htmout_drg+="<pre>=| timejak jkwii |=</pre>\n";
			htmout_drg+="<img class=\"drg\" src=\"/ko.png\" alt=\"ko.png\" width=50 >\n";
			htmout_drg+="<img class=\"drg\" src=\""+pathfile+"\" height=100>\n";
			htmout_drg+="<img class=\"drg\" src=\"/ok.png\" alt=\"ok.png\" width=50 >\n";
			htmout_drg+="<pre>=| desc="+desc+" |=</pre>\n";
			htmout_drg+="<pre>=| timesak skwii |=</pre>\n";
			htmout_drg+="</div>\n";
  

//			htmout_drg="";
			htmout_drg+="<div class=\"drg\"><h1>=| konet llc |=</h1>\n";
			htmout_drg+="<pre>-: timejak jkwii :-</pre>\n";
			htmout_drg+="<img class=\"drg\" src=\"/ko.png\" alt=\"ko.png\" width=50 >\n";
			htmout_drg+="<img class=\"drg\" src=\"/ok.png\" alt=\"ok.png\" width=50 >\n";
			htmout_drg+="<pre>-: timesak skwii :-</pre>\n";
			htmout_drg+="</div>\n";
  

			divid="drag";
			divid="div_kludge";
			if( document.getElementById(divid)) {
				alert( "BUGS_1151 div_id ___FOUND  htmout_dd_body="+htmout_dd_body );
				document.getElementById(divid).insertAdjacentHTML('afterend',htmout_drg);
				document.getElementById(divid).insertAdjacentHTML('beforebegin',htmout_drg);
				document.getElementById(divid).insertAdjacentHTML('beforebegin',htmout_drg);
				document.getElementById(divid).innerHTML=htmout_drg;
				}
			else {
				alert( "BUGS_1151 NOTFOUND div_id htmout_dd_body="+htmout_dd_body );
				}

				pathfile=item.split("|")[0];
				desc=item.split("|")[1];
				src=pathfile;
				tn=src;

				if( desc == "" ) {
					desc=pathfile.split("/").pop().split(".")[1];
					}
//				else {
//					desc=pathfile.split("/").pop(); }
//					}

//				desc="desc_"+j;

				
//				src="/images/jtf/jtf_takes/jtf29_eagle_north.png";
//				desc="<font style=\"font-size:18\""+desc+"</font>";
//				tn="/imgs/btn/koeye.png";

//				alert( "BUGS_1070 j="+j+" desc="+desc+" src="+src+" tn="+tn );
	
					htmout_dd_body+="<div id=div_items_"+k+" class=\"drg\"><h1>_konet_ </h1>\n";
					htmout_dd_body+="<pre>timejak jkwii</pre>\n";
					htmout_dd_body+="<img class=drg src=/ko.png alt="ko.png" width=50 >\n";
					htmout_dd_body+="<img class=drg src=/ok.png alt="ok.png" width=50 >\n";
					htmout_dd_body+="<pre>timesak skwii</pre>\n";
					htmout_dd_body+="</div id=div_items_"+k+"_end>\n";

//				if( document.getElementById('div_dd')) {
//					document.getElementById('div_dd').insertAdjacentHTML('afterbegin','<h1>kludge1</h1>);
//					document.getElementById('div_dd').insertAdjacentHTML('afterbegin','<h1>kludge2</h1>);
//					document.getElementById('div_dd').insertAdjacentHTML('afterbegin','<h1>kludge3</h1>);
//					document.getElementById('div_dd').insertAdjacentHTML('afterbegin',htmout_dd_body);
//					}
				}

			htmout+=htmout_dd_head;
			htmout+=htmout_dd_body;
			htmout+=htmout_dd_tail;
//			alert( "BUGS_1070 dd htmout="+htmout );
//			newParent.insertBefore(moveable, newParent.firstChild); 

			if( document.getElementById('div_dd')) {
				alert( "BUGS_1081 dd ___FOUND div_dd htmout="+htmout+"\n" );
				document.getElementById('div_dd').innerHTML=htmout;
				document.getElementById('div_dd').insertAdjacentHTML("afterbegin",htmout);
				}
			else {
				alert( "BUGS_1082 dd NOTFOUND div_dd htmout="+htmout+"\n" );
				}
//			document.getElementById('div_dd').insertAdjacentHTML(afterbegin,htmout);
//			document.getElementById('div_dd').insertAdjacentHTML(afterend,htmout);
//			document.getElementById('div_dd').insertAdjacentHTML(beforeend,htmout);
//			document.getElementById('div_dd').insertAdjacentHTML(beforebegin,htmout);
			return("");
			htmout=""; j=0; k=0;
			}
		</script id=script_dd_end>

<script id=script_movediv>
	function moveDiv() {
		if( document.getElementById('menu')) {
			menu=document.getElementById('menu');
			}
		if( document.getElementById('li')) {
			li=document.getElementById('li');	
			li.textContent="li_textContent services";
			}
		insertAfter(li, menu.lastElementChild);	
		return;
		Document.querySelector();
		Document.querySelectorAll();
		var moveable = document.getElementById('move-me');
		var newParent = document.getElementById('new-parent');
		newParent.insertBefore(moveable, newParent.firstChild);
		}
	</script id=script_movediv>


	<script id=script_dd2>
		function dd2(args) {
			match=args;
			alert( "BUGS_1000 dd match="+match+" args="+args );
			return("");
//			htmout=""; j=0; k=0;
//			htmout_head=""; htmout_body=""; htmout_tail=""
//			if( document.getElementById('pre_lists_items')) {
//				items=document.getElementById('pre_lists_items').innerHTML.split("\n");
////				items=document.getElementById('pre_lists_items').innerHTML;
//				}
////
//			img="/images/jtf/jtf_takes/jtf29_eagle_north.png";
//			desc="<font style=\"font-size:18\""+desc+"</font>";
//			tn="/imgs/btn/koeye.png";
//
//			htmout_head+="	<div id=drag> "+desc+":<br>\n";
//			htmout_head+="		<img src="+img+" ";
//			htmout_head+="alt=\""+desc+"\" width=50 class=drg/>\n";
//			
//			htmout_head+="		<div id=div_dd_item class=drg><h1>"+desc+"</h1>\n";
//			htmout_head+="			<pre>timejask jkwii</pre>\n";
//			htmout_head+="			<img class=drg src=/ko.png alt="ko.png" width=50 >\n";
//			htmout_head+="			<img class=drg src=/ok.png alt="ok.png" width=50 >
//			htmout_head+="			<pre>timesak skwii</pre>\n";
//			htmout_head+="			</div id=div_dd_item_end>\n";
//			
//			htmout_tail+="	<div id=drag> "+desc+":<br>\n";
//
//
//
//			for( j=0; j<items.length; j++ ) {
//				item=items[j];
//
//
//				if( match != "" ) {
//					if( item.match(match)) { 
////						alert("BUGS_1040 NOMATCH match="+match+" item="+item );
//						continue;
//						}
//					else {
//						alert("BUGS_1040 __MATCH match="+match+" item="+item );
//						}
//					}
//
//
//				src=item.split("|")[0];
//				desc=item.split("|")[1];
//				ext=src.split(".")[1];
//
////				if( src.match(/0-0-0.jpg$/)) { viewid="zm"; 
////					zmid=src.replace("/TypeGroup0/0-0-0.jpg","");
////					href="./ko_zm.html?zmid="+zmid; 
////					}
////				if( src.match("/^sl_/")) { viewid="sl"; 
////					slid=src.replace(".txt","");
////					href="./ko_sl.html?slid="+slid; 
////					}
////
//////				if( src.match(/.json$/)) { viewid="tl"; 
//					tlid=src.replace(".json","");
//					href="./ko_tl.html?tlid="+tlid; 
//					}

//				if( ext == "mp4" ) { viewid="mp4"; tn="/imgs/btn/koeye_mp4.png" }
//				if( ext == "mp3" ) { viewid="mp3"; tn="/imgs/btn/koeye_mp3.png" }
//				if( ext == "pdf" ) { viewid="pdf"; tn="/imgs/btn/koeye_pdf.png" }
//				if( ext == "jpg" ) { viewid="img"; tn=src; }
//				if( ext == "png" ) { viewid="img"; tn=src; }
//				if( ext == "gif" ) { viewid="img"; tn=src; }
//				if( ext == "txt" ) { viewid="img"; tn="/imgs/btn/koeye_txt.png"; }
//
//				classid="class_item_"+j;
//				divid="div_item_"+j;
//				imgid="img_item_"+j;
//				tn="/imgs/btn/koeye.png";
//				mp4fil=src;
//				pdffil=src;
//				file=src;
//				href=src;
//				alert( "BUGS_1030 j="+j+" viewid="+viewid+" ext="+ext+" desc="+desc+" src="+src+" item="+item );
//				exit;
//if( viewid == "jpg" ) { 
//	alert( "BUGS_1031 IMG j="+j+" ext="+ext+" desc="+desc+" src="+src+" item="+item );
//	htmout+="		<div id="+classid+" class=\"drg\">\n";
//	htmout+="			<h1>"+desc+"</h1>\n";
//	htmout+="			<div id="+divid+">\n";
//	htmout+="				<a href="+src+" target=_blank>\n";
////	htmout+="					<img src="+src+" height=100 border=0>\n";
//	htmout+="					</a>\n";
//	htmout+="				</div id="+divid+"_end>\n";
//	htmout+="			</div id="+classid+"_end >\n";
//	}
//
//if( viewid == "pdf" ) {
//	alert( "BUGS_1032 PDF j="+j+" ext="+ext+" desc="+desc+" src="+src+" item="+item );
//	htmout+="		<div id="+classid+" class=\"drg\"><h1>"+desc+"</h1>\n";
//	htmout+="			<div id="+divid+">\n";
//	htmout+="<a href=/pdf/web/viewer.html?file="+file+" target=_blank>\n";
//	htmout+="	<img src=/imgs/btn/koeye_pdf.png height=20 border=0>\n";
//	htmout+="	</a>\n";
//htmout+=
//	htmout+="				</div id="+divid+"_end>\n";
//	htmout+="			</div id="+classid+"_end>\n";
//	}
//
//if( viewid == "mp4" ) {
//	alert( "BUGS_1033 MP4 MP3 j="+j+" ext="+ext+" desc="+desc+" src="+src+" item="+item );
//	htmout+="		<div class=\"drg\"><h1>"+desc+"</h1>\n";
//	htmout+="			<div id="+divid+">\n";
//	htmout+="				<video controls=\"controls_jtf5\" defaultmuted=\"\" muted=\"true\" style=\"width:320px;height:180px;\" poster=\""+tn+"\">\n";
//	htmout+="				<source src=\""+mp4fil+"\" type=\"video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;\">\n";
//	htmout+="				</video>\n";
//	htmout+="				</div>\n";
//	htmout+="			</div>\n";
//	}
//
//
//if( viewid == "zm" ) {
//	src_zm=/ko_jtf/zm/jtf_parcels/jtf29/TileGroup0/0-0-0.png";
//	href_zm="/ko_jtf/zm/jtf_parcels/jtf29.html
//	desc_zm="jtf_parcels/jtf20";
//	htmout_zm="";
//	htmout_zm+="	<div id="+classid+" class=drg>\n"
//	htmout_zm+="		<h1>"+desc_zm+"</h1>\b";
//	htmout_zm+="		<a href="+href_zm+" target=_blank>\n";
//	htmout_zm+="			<img height=200 width=100 src="+src_zm+" border=0 >\n";
//	htmout_zm+="			</a>\n";
//	htmout_zm+="		</div id="+classid+"_end>\n";
//	}
//
//				
//
//

//				alert("BUGS_301 j="+j+" item="+item );
				}
// htmout+=htmout_head;
// htmout+=htmout_body;
// htmout+=htmout_tail;
// 

			alert("BUGS_1009 dd items.length="+items.length );
			return(htmout);
			}
		</script id=script_dd2_end>
	<script id=script_isodd >
		function isOdd(num) { return num % 2; }
		function oddOrEven(num) { return( num & 1 ) ? "odd" : "even"; }
		</script id=script_isodd_end >

        <script id="script_geturlparameter" >
                function geturlparameter(name) {
                        return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
                        }
                </script id=script_geturlparameter_end>

	<script id=script_item2vars>
		function item2href(items,delim) {
			htmout=""; j=0; k=0;
			if( delim == "" ) { delim="|"; }
			for( j=0; j< items.split(delim).length; j++ ) {
				path="path_0"; file="file_0.ext"; base="file_0"; ext="ext"; href="";
				item=items[j];
				dotcnt=item.split(".").length;
				slashcnt=item.split("/").length;
				crcnt=item.split("/n").length;
				if( dotcnt > 0 ) {
					pathfile=item;
					file=pathfile.split("/").pop();
					path=pathfile.replace(file,"");
					base=file.split(".")[0];
					ext=file.split(".")[1];
					continue;
					}
				desc=item;	
				htmout+="<h1>BUGS_1421 item2vars\npathfile="+pathfile+" file="+file+" path="+path+" base="+base+" ext="+ext+"</h2>\n";
				htmout+="<h2>BUGS_1422 item2vars\nitem="+item+" delim="+delim+"</h2>\n";
				}
			alert( "BUGS_1420 \n"+htmout );
			alert(htmout);
			return(htmout):
			}
		</script id=script_item2vars_end>


	<script id=script_item2href>
		function item2href(item,i) {
			htmout=""; j=0; k=0;
			path="path_0"; file="file_0.ext"; base="file_0"; ext="ext"; href="";
			pathfile=item;
			file=pathfile.split("/").pop();
			path=pathfile.replace(file,"");
			base=file.split(".")[0]
			if( file.split(".").length > 1 ) { ext=file.split(".")[1]; }
			divid="div_item_"+k;
			imgid="div_item_"+k;
			class="drg";

			if( ext == "pdf" ) { viewid="pdf"; }
			if( ext == "mp3" ) { viewid="mp3"; }
			if( ext == "mp4" ) { viewid="mp4"; }
			if( ext == "jpg" ) { viewid="img"; }
			if( ext == "png" ) { viewid="img"; }
			if( ext == "gif" ) { viewid="img"; }
			if( ext == "json" ) { viewid="tl"; }
			if( base == "0-0-0.jpg" ) { viewid="zm"; }
			if( file == "1.jpg" ) { viewid="fb"; }
			if(( ext == "html" ) { viewid == "ht"; }

			if(( viewid == "mp4" ) || ( viewid == "mp4" )) {
				tn="/imgs/btn/koeye_mp4.png"
				href="";
				href+="<a href="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";
				}
			if(( viewid == "mp3" ) || ( viewid == "mp3" )) {
				tn="/imgs/btn/koeye_mp3.png"
				href="";
				href+="<a href="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";

				}
			if(( viewid == "img" ) || ( viewid == "img" )) {
				tn="/imgs/btn/brdb.png"
				href="";
				href+="<a href="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";

				}
			if(( viewid == "tl" ) || ( viewid == "tl" )) {
				tn="/imgs/btn/tn_tl.png"
				pathfile=pathfile.replace(".json","");
				href="";
				href+="<a href=ko_tl.html?tlid="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";

				}
			if(( viewid == "zm" ) || ( viewid == "zm" )) {
				tn=pathfile;
				pathfile=tn.replace("TileGroup/0-0-0.jpg","");
				href="";
				href+="<a href=ko_zm.html?zmid="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";
				}
			if(( viewid == "fb" ) || ( viewid == "fb" )) {
				tn=pathfile;
				pathfile=tn.replace("/pages/1.jpg","");
				href="";
				href+="<a href="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";
				}
			if(( viewid == "ht" ) || ( viewid == "ht" )) {
				tn="/imgs/btn/brdb.png";
				href="";
				href+="<a href="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";
				}
			if(( viewid == "pdf" ) || ( viewid == "pdf" )) {
				tn="/imgs/btn/koeye_pdf.png";
				href="";
				href+="<a href=/pdf/web/viewer.html?file="+pathfile+" class=drg target=_blank>\n";
				href+="	<img id="+imgid+" title=\"          "+imgid+"\" src="+tn+" height=100 border=0>\n";
				href+="	</a>\n";
				}



			htmout+="<h1>item="+item+"</h1>\n";
			htmout+="<h1>href="+href+"</h1>\n";

			divid="pre_item2href";
			alert("BUGS_1400 item2href\nitem="+item+"\n href="+href);
			if( document.getElementById(divid)) {
				document.getElementById(divid).innerHTML=htmout;
				document.getElementById(divid).insertAdjacentHTML('afterbegin',htmout);
				}
			return(htmout)
			}
                </script id=script_item2href_end>


<!--	<script id=script_ko src="/ko/ko.js" ></script id=script_ko_end> -->
	<script id=script_ko>

function toggles(div_ids,cmd) {
	htmout=0; j=0; k=0; divid=""; divids="".split(" ");
	alert( "BUGS_200 toggles div_ids="+div_ids+" cmd="+cmd );
	var ids = "letter contacts items kojax files parse cfg main help wz konet iperms jtfdcr fb pdf pn tm tl zm file forms lists lists_letters lists_contacts lists_items lists_postturtles lists_monkeytraps lists_floods koslots views fb pdf pn tl zm mp3 mp4";

	if( div_ids == "" ) {
		for(j=0; j<ids.split(" ").length; j++ ) {
			divids[j]="div_"+ids.split(" ")[j];
//					alert( "BUGS_210 j="+j+" divid="+divid)
			}
//				alert( "BUGS_211 j="+j+" div_ids="+div_ids+" divids0="+divids[0] );
		}
	else {
		divids=div_ids.split(" ")
//				alert( "BUGS_212 j="+j+" div_ids="+div_ids+" divids0="+divids[0] );
		}
//			alert( "BUGS_220 toggles divids_length="+divids.length+" cmd="+cmd );

	for( j=0; j<divids.length; j++ ) {
		divid=divids[j];
		imgid=divid.replace("div_","img_");
//				alert( "BUGS_221 toggles j="+j+" divid="+divid+" cmd="+cmd+" imgid="+imgid );

		if( ! document.getElementById(divid)) { continue; }
//				alert( "BUGS_222 toggles j="+j+" FOUND divid="+divid+" cmd="+cmd+" imgid="+imgid );

		if( cmd == "allon" ) {
//					alert( "BUGS_230 toggles ALLON div_ids="+div_ids+" cmd="+cmd );
			document.getElementById(divid).style.display="inline";
			if (! document.getElementById(imgid)) { continue; }
			document.getElementById(imgid).src="/imgs/btn/koeyew.png";

//					if( document.getElementById('img_toggle_allon')) {
//						document.getElementById('img_toggle_allon').style.display="inline";
//						}
//					if( document.getElementById('img_toggle_toggle')) {
//						document.getElementById('img_toggle_toggle').style.display="inline";
//						}
//					if( document.getElementById('img_toggle_alloff')) {
//						document.getElementById('img_toggle_alloff').style.display="inline";
//						}
			}


		if(( cmd == "toggle" ) || ( cmd == "" )) {
			display=document.getElementById(divid).style.display;
			if( display == "none" ) {
				document.getElementById(divid).style.display="inline";
				if (document.getElementById(imgid)) { 
					document.getElementById(imgid).src="/imgs/btn/koeyew.png";
					}
				}
			else {
				document.getElementById(divid).style.display="none";
				if (document.getElementById(imgid)) { 
					document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
					}
				}
			}

		if( cmd == "alloff" ) {
			document.getElementById(divid).style.display="none";
			if (! document.getElementById(imgid)) { continue; }
			document.getElementById(imgid).src="/imgs/btn/koeyeb.png";
//					if( document.getElementById('img_toggle_allon')) {
//						document.getElementById('img_toggle_allon').style.display="inline";
//						}
//					if( document.getElementById('img_toggle_toggle')) {
//						document.getElementById('img_toggle_toggle').style.display="none";
//						}
//					if( document.getElementById('img_toggle_alloff')) {
//						document.getElementById('img_toggle_alloff').style.display="none";
//						}
			}


		}

	return("");
	}



	var default_jaxurl = "main.html";
	var jaxurl = default_jaxurl;
	function kojaxs(jaxurl,divid,callback) {
		if( divid == "" ) { divid="pre_kojax"; }
//				alert( "BUGS_3000 jax jaxurl="+jaxurl+" divid="+divid+" callback="+callback );
		$.ajax({
			url: jaxurl,
			context: document.body,
			success: function(responseText) {
//						alert( "BUGS_12661 jax len="+responseText.split("\n").length+"  responseText="+responseText );
				kolists['jax'] = responseText;
				alert( "BUGS_12662 jax kolists_jax="+kolists['jax'] );
				alert( "BUGS_12663 jax kolists_default="+kolists['default'] );
				alert( "BUGS_12664 jax kolists_fb="+kolists['fb'] );
				alert( "BUGS_12665 jax kolists_konet="+kolists['konet'] );
				alert( "BUGS_12666 jax kolists_iperms="+kolists['iperms'] );
				alert( "BUGS_12667 jax kolists_jtfdcr="+kolists['jtfdcr'] );
				$("#div_jax").html(responseText);
				$("#div_jax").find("script").each(function(i) {
				eval($(this).text());
				alert( "BUGS_12662 jax responseText="+responseText );
				return( responseText );
				});
			}
		});
	};


	var default_jaxurl = "kojax.html";
	var jaxurl = default_jaxurl;
	function kojax(jaxurl,divid,callback) {
		if( divid == "" ) { divid="pre_kojax"; }
//				alert( "BUGS_3030 kojax jaxurl="+jaxurl+" divid="+divid+" callback="+callback );
		if(!filecheck(jaxurl)) {
			alert( "BUGS_3001 kojax NOTFOUND jaxurl="+jaxurl );
			return("NOTFOUND="+jaxurl );
			}
		var jaxbak = '-=jaxbak=-';
		kolists['jax'] = '-=jax=-';
		$.ajax({
			url: jaxurl,
			context: document.body,
			success: function(responseText) {
// 						alert( "BUGS_19501 jax TXT URL="+jaxurl+" LEN="+responseText.split("\n").length+"  responseText="+responseText );
//						kolists['jax'] = responseText;
				jaxbak = responseText;
// 						alert( "BUGS_19503 jax JAXBAK URL="+jaxurl+" LEN="+jaxbak.split("\n").length+"  responseText="+jaxbak );


				if( document.getElementById(divid)) {
					document.getElementById(divid).innerHTML=responseText;
					}
//						$("#div_jax").html(responseText);
//						$("#pre_kojax").html(responseText);

				var scriptflag = "true";
				if( scriptflag == "true" ) {
					$("#div_jax").find("script").each(function(i) {
						eval($(this).text());
						});
					}
				if( callback == "dd" ) { dd(''); }
				if( callback == "letter" ) { letter(''); }
				if( callback == "contacts" ) { contacts(''); }
				if( callback == "items" ) { items(''); }
			}
		});
	return( jaxbak );
	};



                function geturlvars() {
                        var vars = {};
                        var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
                                vars[key] = value;
                                });
                        return vars;
                        }

                        function geturlparam(parameter, defaultvalue){
                                var urlparameter = defaultvalue;
                                if(window.location.href.indexOf(parameter) > -1) {
                                        urlparameter = getUrlVars()[parameter];
                                        }
                                return urlparameter;
                                }
//                      var mytext = getUrlParam('text','Empty');

                function keypress(e) {
// Ensure event is not null
                        e = e || window.event;
                        if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {alert( "MSG_090 keypress  ctrl-z" );
                                return('ctrl-z');
                                }
                        if ((e.which == 89 || e.keyCode == 89) && e.ctrlKey) {alert( "MSG_089 keypress  ctrl-y" );
                                return('ctrl-y');
                                }
                        if ((e.which == 54 || e.keyCode == 54) && e.ctrlKey) {
                                alert( "MSG_054 keypress  ctrl-hat" );
                                return('ctrl-hat');
                                }
                        if ((e.which == 54 || e.keyCode == 54) && e.shiftKey) {
                                alert( "MSG_054 keypress  shift-hat" );
                                return('shift-hat');
                                }
                        if ((e.which == 60 || e.keyCode == 60) && e.shiftKey) {
                                alert( "MSG_090 keypress dollar shift-4" );
                                }

// case 59: alert( "MSG_191 colon keycode="+keyCode ); break;
// case 54: alert( "MSG_54 hat keycode="+keyCode ); break;
// case 52: alert( "MSG_191 dollar keycode="+keyCode ); break;
// case 107: alert( "MSG_107 plus keycode="+keyCode ); break;
// case 109: alert( "MSG_109 minus keycode="+keyCode ); break;
                        }

// A handler called preventDefault.
// None of the handlers called preventDefault.

                function trigger_mouse(args) {
                        alert( "BUGS_901 trigger _mouse args="+args );
                        var event = new MouseEvent('click', {
                                view: window,
                                bubbles: true,
                                cancelable: true
                                });

                        if(document.getElementById('checkbox')) {
                                var cb = document.getElementById('checkbox');
                                var cancelled = !cb.dispatchEvent(event);
                                if (cancelled) {alert("cancelled");}
                                else {alert("not cancelled");}
                                }
                        }

                function replace(e) {
                        if (e.keyCode==13) e.keyCode=9
                        }

                function geturlparameter(name) {
//			alert( "BUGS_170 geturlparameter name="+name );
                        return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
                        }







function startup_parse(args) {
	htmout=""; j=0; k=0;
	parsed=parse('');	
	a=""; a1=""; a2=""; cmd=""; cmd1=""; cmd2="";
	id="", file=""; dir=""; 
	if( geturlparameter('a')) { a=geturlparameter('a'); }
	if( geturlparameter('a1')) { a=geturlparameter('a1'); }
	if( geturlparameter('a2')) { a=geturlparameter('a2'); }
	if( geturlparameter('cmd')) { a=geturlparameter('cmd'); }
	if( geturlparameter('cmd1')) { a=geturlparameter('cmd1'); }
	if( geturlparameter('cmd2')) { a=geturlparameter('cmd2'); }
	if( geturlparameter('id')) { a=geturlparameter('id'); }
	if( geturlparameter('file')) { a=geturlparameter('file'); }
	if( geturlparameter('dir')) { a=geturlparameter('dir'); }

	htmout += "<hr color=goldenrod>";
//			if( a != "" ) 
	htmout += "a="+a+"<br>\n"; 
//			if( a1 != "" ) 
	htmout += "a1="+a1+"<br>\n"; 
//			if( a2 != "" ) 
	htmout += "a2="+a2+"<br>\n"; 
//			if( cmd != "" ) 
	htmout += "cmd="+cmd+"<br>\n"; 
//			if( cmd1 != "" ) 
	htmout += "cmd1="+cmd1+"<br>\n"; 
//			if( cmd2 != "" ) 
	htmout += "cmd2="+cmd2+"<br>\n"; 
//			if( id != "" ) 
	htmout += "id="+id+"<br>\n"; 
//			if( file != "" ) 
	htmout += "file="+file+"<br>\n"; 
//			if( dir != "" ) 
	htmout += "dir="+dir+"<br>\n"; 
	htmout += "<hr color=goldenrod>";

	if( document.getElementById('div_parsed')) {
//				document.getElementById('div_parsed').insertAdjacentHTML('afterend',htmout);
		document.getElementById('div_parsed').insertAdjacentHTML('afterbegin',htmout);
//				document.getElementById('div_parsed').insertAdjacentHTML('beforeend',htmout);
//				document.getElementById('div_parsed').insertAdjacentHTML('beforebegin',htmout);

		document.getElementById('div_parsed').innerHTML=htmout;
		}
//			alert( "BUGS_9020 STARTUP parsed="+parsed+" args="+args );
	return("");
	}





                function set_font(selectTag) {
	divid="div_font";
//			alert( "BUGS_701 set_font selectTag="+selectTag+" divid="+divid );
                        var listValue = selectTag.options[selectTag.selectedIndex].text;
//                      document.getElementById("div_fonts").style.fontFamily = listValue;
	if ( document.getElementById(divid)) {
//				alert( "BUGS_702 FOUND set_font selectTag="+selectTag+" divid="+divid );
                        	document.getElementById(divid).style.fontFamily = listValue;
		}
	else {
		alert( "BUGS_703 ___FOUND set_font selectTag="+selectTag+" divid="+divid );
		}
                        }
function drawgrid() {
if(document.getElementById('canvas_grid_table_top')) {;
	var canvas = document.getElementById('canvas_grid_table_top');
	}
if (canvas.getContext) {
	var ctx = canvas.getContext('2d');
               
// Create a pattern
	for (var i = 0;i<7;i++) {
		for (var j = 0;j<7;j++) {   
			ctx.fillStyle = 'rgb(' + Math.floor(255-20.5*i)+ ','+ 
			Math.floor(255 - 42.5*j) + ',255)';
			ctx.fillRect( j*25, i* 25, 55, 55 );
        				}
		}
	} 
else {
	alert('ALERT_100: unauthorized access logged !!');
	}
}







              function keine(i) {
//			alert( "BUGS_8980 keine i="+i );
	j=0; o=0;
	is=i.toString().split("");
	islen=is.length;
//			alert( "BUGS_8995 keine j="+j+" islen="+islen+" is="+is );
	for( j=0; j<islen; j++ ) {
		o=o+parseInt(is[j]);
		if( o>9 ) { 
//					alert( "BUGS_8996 TOBIG j="+j+" i="+i+" o="+o );
			o=o-9; 
//					alert( "BUGS_8997 tobig j="+j+" i="+i+" o="+o );
			}
		}
//			alert( "BUGS_9000 keine j="+j+" i="+i+" o="+o );
	return(o);
	}


function k9_grid(args) {
	alert("BUGS_2120 k9_grid args="+args );
//			var ctx = document.getElementById('canvas_table_top').getContext('2d');
	if( document.getElementById('img_grid_keys')) {
		document.getElementById('img_grid_keys').src="/imgs/btn/btn_keys_string1.png";
		}
	if(args=="") {
		}
	tokens=args;
	k9s=tokens;
	j=0; k=0;
	if( args == '' ) {
		tokens = '';
		tokens += '-';
		for( k=1; k<11; k++ ) {
//					token = random_int(9,0);
			token = random_int(9,0);
			token = random_int(99,00);
			token = random_int(999,100);
			token = random_int(9999,1000);
			token = random_int(999999,100000);
			token = random_int(99999999,10000000);

			k9=token;
//					alert("BUGS_9010 grid j="+j+" k="+k+" token="+token+" k9="+k9 );
			k9=keine(token);
//					alert("BUGS_9020 grid j="+j+" k="+k+" token="+token+" k9="+k9 );
			token_str = token.toString();
			tokens += token.toString(); tokens += '-';
//					tokens += token_str; tokens += '-';
			}
//				tokens += '-';
		}
k9s=tokens;

var tokes = tokens.split(/-/);
tokes_len = tokes.length;
head=0; tail=tokes_len-1;

if(( tokes[head] != "" ) && ( tokes[tail] != "" )) {
	k9head=keine(tokes[head]);
	status=0;
	for( j=1; j<tail; j++ ) {
		if( tokes[tail] == tokes[j] ) {
			if( j == k9head ) { status=1; }				
			break;
			}
		}
	if( status == 1 ) {
		htmout  = '';
		htmout += '<img src="/imgs/btn/btn_key_happiness.png" ';
		htmout += '	onclick="window.open(\'/imgs/btn/btn_key_happiness.png\');return false;"';
		htmout += '	height=400 border=0>';
		}
	else {
		htmout  = '';
		htmout += '<img src="/imgs/btn/btn_keyhole_us.png" ';
		htmout += '	onclick="window.open(\'/imgs/btn/btn_key_happiness.png\');return false;"';
		htmout += '	height=400 border=0>';
		}
	if( document.getElementById('div_grid1')) {
		document.getElementById('div_grid1').innerHTML = htmout;
		}

	return(args);
	}




grid1 = '';
grid1 += '<div id="div_grid1" >';
grid1 += '	<h1>div_grid1</h1>';
grid1 += '	<h3>'+tokens+'</h3>';
grid1 += '	<br>';
grid1 += '	<table id="table_grid">';
//		alert( "BUGS_150 grid1="+grid1+"  tokes="+tokes );
j=0;
for(r=1; r<4; r++) {
	grid1 += '<tr>';
	for(c=1; c<4; c++) {
//				alert( "BUGS_150 j="+j+"-"+r+"-"+c+" tokens="+tokens );
		j=j+1;
		grid1 += '<td>';
		grid1 += j;
		if((tokes[head]=="")&&(tokes[tail]=="")) {
			grid1 += '<img src="/imgs/btn/kob.png" onclick=';
//					grid1 += '	"grid(\''+j+tokens+'\'); return false;" ';
			grid1 += '	"grid(\''+tokes[j]+tokens+'\'); return false;" ';
			grid1 += '	height=50 border=0>';
			grid1 += '<br>';
//					grid1 += tokes[j];
//					grid1 += '<br>';
//					grid1 += keine(tokes[j]);
//					alert( "BUGS_151 j="+j+"-"+r+"-"+c+" tokens="+tokens );
			}
		if((tokes[head]!="")&&(tokes[tail]=="")) {
//					if( tokes[head] == j ) {
			if( tokes[head] == tokes[j] ) {
				grid1 += '<img src="/imgs/btn/kow.png" ';
//						grid1 += '	onclick="grid(\''+tokens+j+'\'); return false;" ';
				grid1 += '	onclick="grid(\''+tokens+tokes[j]+'\'); return false;" ';
				grid1 += '	height=50 border=0>';
				grid1 += '<br>';
//						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
				}
			else {
				grid1 += '<img src="/imgs/btn/kob.png" ';
				grid1 += '	onclick="grid(\''+tokens+tokes[j]+'\'); return false;" ';
				grid1 += '	height=50 border=0>';
				grid1 += '<br>';
//						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
				}
//					alert( "BUGS_152 j="+j+"-"+r+"-"+c+" tokens="+tokens );
			}
		if((tokes[head]!="")&&(tokes[tail]!="")) {
//					if( tokes[head] == keine(tokes[tokes[tail]]) ) {
//					if( tokes[ tokes[head]] == keine(tokes[tokes[tail]]) ) {
			if( tokes[ tokes[head]] == tokes[tokes[tail]] ) {
				grid1 += '<img src="/imgs/btn/btn_key_happiness.png" ';
				grid1 += '	onclick="grid(\''+tokens+'\'); return false;" ';
				grid1 += '	height=50 border=0>';
				grid1 += '<br>';
				grid1 += tokes[head]+'='+tokes[tail]+'<br>';
//						grid1 += tokes[j]+<br>;
//						grid1 += '<br>';
//						grid1 += keine(tokes[tokes[tail]]);
				}
			else {
				grid1 += '<img src="/imgs/btn/kob.png" ';
				grid1 += '	onclick="grid(\''+tokens+'\'); return false;" ';
				grid1 += '	height=50 border=0>';
				grid1 += '<br>';
				grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
				}

//					alert( "BUGS_153 j="+j+"-"+r+"-"+c+" tokens="+tokens );
			}





		grid1 += '<br>'+tokes[j];
//				grid1 += '<br>'+keine(tokes[j]);
		grid1 += '<br>';
		grid1 += '	</td>';

//				grid1 += '-'+k9;
//				grid1 += '-'+keine(tokes[j]);
//				alert( "BUGS_65 j="+j+" toke="+tokes[j] );
//				grid1 += 	tokes[j].toString();
		}
	grid1 += '	</tr>';	
	}
grid1 += '	</table>';
grid1 += '	</div>';

//		alert( "BUGS_111 grid1="+grid1 );

if( document.getElementById('div_grid')) {
	document.getElementById('div_grid').innerHTML=grid1;
	}
//		alert( "BUGS_71 grid1="+grid1 );

return(args);


	htmout = '';
	htmout += '<div id="div_tokens">';
	htmout += '<h1>div_tokens</h1>';
	htmout += '<br>';
	htmout += '	</div>';	
	if( document.getElementById('div_tokens')) {
		document.getElementById('div_tokens').innerHTML=tokens;
		}


	htmout += '<div id="div_grid">';
	htmout += '<h1>div_grid</h1>';

	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-1\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-2\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-3\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<br>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-4\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-5\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-6\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<br>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-7\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-8\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<img src="/imgs/btn/kob.png" ';
	htmout += '	onclick="grid(\'grid-9\');return false;" ';
	htmout += '	height=50 border=0>';
	htmout += '<br><br><br><br>';
	htmout += '<hr color=goldenrod';


//			htmout += '<table>';
//
//			j=0;
//			for(r=0; r<3; r++ ) {
//				htmout += '	<tr>';
//				for( c=0; c<3; c++ ) {
//					rand=random_int(99999999,0);
////					alert( "BUGS_202 j="+j+"  rand="+rand );
//					kolists[j] = rand;
//					htmout += '	<td>';
//					htmout += '<img src="/imgs/btn/kob.png"';
//					htmout += '	alt="/imgs/btn/kob.png"';
//					htmout += '	onclick="grid(\''j+'|'+kolists[j]+'\');return false;" ';
//					htmout += '	height=50 border=0>';
//					htmout += '	'+kolists[j];
//					htmout += '		</td>';
//					}
//				htmout += '		</tr>';
//				}
//			htmout += '	</table>';
//			htmout += '	</div>';
//
//			htmout="<h1>BUGS_HTML</h1>";	
//			alert("BUGS_201 grid htmout="+htmout );
	if( document.getElementById('div_grid')) {
		document.getElementById('div_grid').innerHTML=htmout;
		}
	return(args);
	}


function banner(args) {
	htmout=""; j=0; k=0;
	alert( "BUGS_2790 banner args="+args);
	return(htmout);
	}

function banner1(args) {
	htmout=""; j=0; k=0;
	alert( "BUGS_2800 banner args="+args );
	psvrec=protocol+"|"+hostname+"|"+port+"|"+pathname+"|"+search+"|"+hash+"|"+host+"|"+dttm+"|";
	protocol=psvrec.split("|")[0];
	hostname=psvrec.split("|")[1];
	port=psvrec.split("|")[2];
	pathname=psvrec.split("|")[3];
	search=psvrec.split("|")[4];
	hash=psvrec.split("|")[5];
	host=psvrec.split("|")[6];
//			dttm=psvrec.split("|")[7];
	dttm = new Date().toISOString().slice(0, 10);

	htmout+="<a href=/k9.html target=_blank><img id=img_k9 src=/imgs/keys/keys00_hole.png height=20 border=0></a>";
	htmout+="<a href=/leds/leds.php target=_blank><img id=img_leds src=/imgs/btn/tn_leds.png height=20 border=0></a>";
	htmout+="d r a f t ";
	htmout+="&nbsp &nbsp &nbsp &nbsp";
	htmout+=hostname;
	htmout+="&nbsp &nbsp &nbsp &nbsp";
	htmout+="P R E V I E W";
	htmout+="<img src=/imgs/btn/kop12.png height=20>";
	htmout+=" K O ";
//			htmout+=" K A ";
//			htmout+=" L A W ";
//			htmout+=" B Y R D B E L L V J K ";
//			htmout+=" M E D ";
//			htmout+=" K O N E T ";
//			htmout+=" I P E R M S ";
//			htmout+=" J T F D C ";
//			htmout+=" J T F D C R ";
//			htmout+=" J T F I N C";
//			htmout+=" K O 1 ";
//			htmout+=" K O 2 ";
//			htmout+=" K O 0 ";
	htmout+=pathname;
	htmout+="<img src=/imgs/btn/kop34.png height=20>";
	htmout+="&nbsp &nbsp &nbsp &nbsp";
	htmout+="<font style=\"font-size:18\">"+dttm_"</font>";

<!--
<a href=/ko/leds/leds.php target=_blank><img id=img_leds_dhtml src=/imgs/btn/tn_leds.png height=20 border=0></a>
<a href=/k9.html target=_blank><img id=img_k9_dhtml src=/imgs/keys/keys00_hole.png height=20 border=0></a>
<a href=./ target=_blank><img id=img_ok_dhtml src=/imgs/btn/ok.png height=20 border=0></a>
-->


	if( document.getElementById('div_banner')) {
		alert( "BUGS_2831 ___FOUND divid=div_banner" );
		document.getElementById('div_banner').innerHTML=htmout;
		}
	else {
		alert( "BUGS_2831 NOTFOUND divid=div_banner" );
		}
	return(htmout);
	}


//	<style id="style_body_scroll"> body{ overflow-y:scroll; } </style>

function filecheck(url) {
	if(url) {
		var req = new XMLHttpRequest();
		req.open('GET', url, false);
		req.send();
		return req.status==200;
		} 
	else {
		return false;
		}
	}

function imgcheck(url) {
	var img = new Image();
	img.src = url;
	return img.height != 0;
	}

function linkcheck(url) {
	var http = new XMLHttpRequest();
	http.open('HEAD', url, false);
	http.send();
	return http.status!=404;
	}

function UrlExists(url) {
	var http = new XMLHttpRequest();
	http.open('HEAD', url, false);
	http.send();
	return http.status!=404;
	}



		function items(args) {
			divid="div_items";
			alert( "BUGS_1740 items args="+args );
			htmout=""; j=0; k=0;
			ht="/byrdbellvjk/imgs/";
			divid="div_items";
//			htmout += "<h1>BUGS_21 CONTACTS args="+args+"</h1>\n";
//			alert(htmout);
//			return(htmout);

//			alert( "BUGS_710 ITEMS args="+args+"\n");
			htmout=""; j=0; k=0; i=0;
			htmout_wz="";
			divid="div_item"+i;
			imgid="img_item"+i;
			src="/imgs/btn/koeye.png";
			divids = new Array();
			imgids = new Array();
			divids[0]=divid;
			imgids[0]=imgid;
//			alert( "BUGS_720 items args="+args );

items=`
file|desc|
170.jpg|jtfdc_sawhorse_original
171.jpg|jtfinc_entrance
900_jtfdc_private_court_since_1979_viewin.jpg|jtfdc_viewin
900_jtfinc.jpg|
900_snap_20170123_187559_jtfdc_kids_cycle_laps|jtfdc_cycle_kids
900_snap_20170123_187576_jtf32_preservation_police_yellowsticker_frenzy
jtfdc_sawhorse_2020.jpg|jtfdc_sawhorse_2020
100_jtfdcr_2013_byrd_threat.jpg|jtfdcr_2013_byrd_threat
116.jpg|sign_private|jtfdc_sign_private_green
100.jpg|jtfdc_birdview|jtfdc_birdview
44.jpg|byrd_siegrist_dogs3.jpg|byrd_sieggrist_dogs3
66.jpg|jtf28-30-32_eagle_theft.jpg|jtf29_eagle_theft_jtf28-30-32
46.jpg|byrds_sawhorse_theft|jtf29_byrds_sawhorse_theft
32.jpg|jtfdcr_cover|jtfdcr_cover
31.jpg|who2jail
900_byrdbell_20200916.jpg|jkmed_eyes
900_emh_20160911_056.jpg|jkmed_heart
100_jtfdcr_byrd_seigrist_2dogs_trespass2|100_jtfdcr_byrd_seigrist_2dogs_trespass2
900_IMG_0577.jpg|jtf29_police_door_entry
900_IMG_0574.jpg|jtf29_doorchimes
229.jpg|trial3_brown_bench_probation_nocameras_notrespass
900_topos_20160505_031.jpg|police_jahns_card
`.split("\n");

// items=`
// name|phn|url|email|note|action
// greg luber|314-|https://501law.com|email|note|action|
// henry elster|314-|https://elsterlaw.com|email|note|action|
// dan diemer|314-863-8833|https://diemerlawfirm.com/|email|note|action|
// joe whitner|314-354-8484|https://rsblawfirm.com|email|note|action|
// todo|phn|url|email|note|action
// brown|314-|https://brown..com|email|note|action
// keuhlig|314-|https://keyhlig..com|email|note|action
// walters|314-|https://walters|email|note|action
// columbo|314-|https://columbo|email|note|action
// fail|phn|url|email|note|action
// mccloskey|314-721-4000|https://www.mccloskeylaw.com/|email|note|action|
// richard woolf|314-345-5030|https://bakersterchi.com|rwoolf@bakersterchi.com|email|note|action|
// keven dolley|314-293-4884|https://www.missouriemploymentlawattorney.com|email|note|action|
// richard sindel|314-721-6040|https://sindellaw.com|email|note|action|
// evelyn lewis|314-721-6040|https://evelynlewislawllc.com|email|note|action|
// `.split("\n");
 
//			alert( "BUGS_431 items items="+items[0] );
//			alert( "BUGS_432 items items="+items[1] );
//			alert( "BUGS_433 items items="+items[2] );
//			alert( "BUGS_775 items items.length="+items.length );

			htmout = ""; j=0; k=0; i=0;
			htmout += "<div id=div_items>\n";
			htmout += "<h1>div_items</h1>\n";
			htmout += "	<table id=table_items>\n";
			htmout += "	<tr>";
			htmout += "		<td width=10>num</td>";
			htmout += "		<td width=200>id</td>";
			htmout += "		<td width=200>name</td>";
			htmout += "		<td width=300>url</td>";
			htmout += "		<td width=400>desc</td>";

//			htmout += "		<td>phn</td>";
//			htmout += "		<td>firm</td>";
//			htmout += "		<td>email</td>";
//			htmout += "		<td>action</td>";
			htmout += "		</tr>";

//			alert( "BUGS_800 items args="+args );


			for ( j=0; j<items.length; j++ ) {
				name = items[j].split("|")[0];
//				alert( "BUGS_801 name="+name+" j="+j );
				if( name == undefined ) { continue; }
				if( name == "undefined" ) { continue; }
				if( name == "name" ) { continue; }
				if( name == "" ) { continue; }



				file = items[j].split("|")[0];

				if( file == "file" ) { continue; }
				if( file == "" ) { continue; }

				htfile=ht+file;
				desc = items[j].split("|")[1];

//				phn = items[j].split("|")[1];
//				firm = items[j].split("|")[2];
//				email = items[j].split("|")[3];
//				note = items[j].split("|")[5];
//				action = items[j].split("|")[6];

				url="";
				url+="<a href="+htfile+" target=_blank>";
				url+="<img name=img_item_"+j+" id=img_item_"+j+" src="+htfile+" height=100 width=80 border=0>";
				url+="</a>";


				htmout += "	<tr>";
				htmout += "		<td>"+j+"</td>";
				htmout += "		<td>"+url+"</td>";
				htmout += "		<td><b>"+desc+"</b></td>";
				htmout += "		<td>"+file+"</td>";
				htmout += "		</tr>";
//				alert( "BUGS_822 items j="+j+" name="+name+"\n" );
				}
//			alert( "BUGS_831 j="+j );
			htmout += "		</table id=table_items_end>\n";
			htmout += "	</div id=div_items_end>\n";
//			alert( "BUGS_832 divid="+divid );

			if( document.getElementById('div_items')) {
				document.getElementById('div_items').innerHTML=htmout;
				}
			return(htmout);
			}

		function contacts(args) {
			divid="div_contacts";
			htmout=""; j=0; k=0; i=0;
			alert( "BUGS_1880 contacts args="+args );
//			htmout += "<h1>BUGS_21 CONTACTS args="+args+"</h1>\n";
//			alert(htmout);
//			return(htmout);


// items=`
// file|desc|
// 170.jpg|jtfdc_sawhorse_original
// 171.jpg|jtfinc_entrance
// 900_jtfdc_private_court_since_1979_viewin.jpg|jtfdc_viewin
// 900_jtfinc.jpg|
// 900_snap_20170123_187559_jtfdc_kids_cycle_laps|jtfdc_cycle_kids
// 900_snap_20170123_187576_jtf32_preservation_police_yellowsticker_frenzy
// jtfdc_sawhorse_2020.jpg|jtfdc_sawhorse_2020
// 100_jtfdcr_2013_byrd_threat.jpg|jtfdcr_2013_byrd_threat
// 116.jpg|sign_private|jtfdc_sign_private_green
// 100.jpg|jtfdc_birdview|jtfdc_birdview
// 44.jpg|byrd_siegrist_dogs3.jpg|byrd_sieggrist_dogs3
// 66.jpg|jtf28-30-32_eagle_theft.jpg|jtf29_eagle_theft_jtf28-30-32
// 46.jpg|byrds_sawhorse_theft|jtf29_byrds_sawhorse_theft
// 32.jpg|jtfdcr_cover|jtfdcr_cover
// 31.jpg|who2jail
// 900_byrdbell_20200916.jpg|jkmed_eyes
// 900_emh_20160911_056.jpg|jkmed_heart
// 100_jtfdcr_byrd_seigrist_2dogs_trespass2|100_jtfdcr_byrd_seigrist_2dogs_trespass2
// 900_IMG_0577.jpg|jtf29_police_door_entry
// 900_IMG_0574.jpg|jtf29_doorchimes
// 229.jpg|trial3_brown_bench_probation_nocameras_notrespass
// 900_topos_20160505_031.jpg|police_jahns_card
// `.split("\n");

contacts=`
id|name|phn|firm|url|email|note|action
jak3|jenna|314-123-456|konet|konet.org|admin@konet.org|note|action
huschblackwell|gregoroy r smith|314-480-1720|huschblack|huschblackwell.com|gregory.smith@huschblackwell.com|note|action
smithj|melvin j smith|314-726-2141|melvinjsmith|www.melvinjsmithlaw.com|@melvinjsmithlaw.com|note|action
smithr|rudman smith|phn|rudmansmith|www.rudmansmithlaw.com|@rudmansmithlaw.com|note|action
fleddermann|fleddermann|636-947-4343|fleddermann|www.fleddermannlawoffice.com|fleddermann@.fleddermannlawoffice.com|note|action
smithmeuler|smith meuler|314-266-6515|smithmeuller|smithmeuller.com|mgoodman@smithmeuller.com|note|action
goldenhersh|ben goldenhershlaw|314-707-7789|goldenhersh|http://goldenhershlaw.com|ben@goldenhershlaw.com|personal injury|action
<br>|<br>|phn|url|email|note|action
tc|thompson coburn|314-552-6000|thompsoncoburn|thompsoncoburn.com|email|note|action
archcity|archcitydefenders|855-724-2489|archcitydefenders|www.archcitydefenders.org|mail@archcitydefenters.org|savannah downs|action
bb|brown brown|314-333-333|brown|brownlawoffice.com|@brownlawoffice.com|note|action
bc|brown crouppen|314-501-9510|brownandcrouppen|https://www.brownandcrouppen.com/st-louis/|https://www.brownandcrouppen.com/st-louis/|note|action
<br>|
<br>|<br>|phn|url|email|note|action
<br>|<hr>|phn|url|email|note|action
keyhlig|alexander keuhlig|314-726-6868|rosenblumgoldenhersh|rosenblumgoldenhersh.com|@rosenblumgoldenhersh.com|note|20160826
walters|alan p walters|314-227-1943|url|email|note|action
donovan|joann c donovan|314-921-6600|donovan|lawdonovan.com|jdonovan@lawdonovan.com|note|action
cohena|alan cohen|314-|firm|url|email|retired|action
cohenn|nathan cohen|314-|firm|url|email|note|action
luber|greg luber|636-947-1122|501law|https://501law.com|email|debtlaw|action|
elster|henry elster|314-|elster|https://elsterlaw.com|email|note|action|
diemer|dan diemer|314-863-8833|diemer|https://diemerlawfirm.com/|email|note|action|
whitner|joe whitner|314-354-8484|https://rsblawfirm.com|email|note|action|
<br>|todo|phn|url|email|note|action||
mccloskey|mccloskey|314-721-4000|mccloskey|https://www.mccloskeylaw.com/|email|note|action|
woolf|richard woolf|314-345-5030|bakersterchi|https://bakersterchi.com|rwoolf@bakersterchi.com|email|note|action|
dolley|keven dolley|314-293-4884|dolley|https://www.missouriemploymentlawattorney.com|email|note|action|
sindel|richard sindel|314-721-6040|sindel|https://sindellaw.com|email|note|action|
id|evelyn lewis|314-721-6040|evelynlewis|https://evelynlewislawllc.com|email|note|action|
id|`.split("\n");



contacts1=`
name|phn|url|email|note|action
greg luber|314-|https://501law.com|email|note|action|
henry elster|314-|https://elsterlaw.com|email|note|action|
dan diemer|314-863-8833|https://diemerlawfirm.com/|email|note|action|
joe whitner|314-354-8484|https://rsblawfirm.com|email|note|action|
todo|phn|url|email|note|action
brown|314-|https://brown..com|email|note|action
keuhlig|314-|https://keyhlig..com|email|note|action
walters|314-|https://walters|email|note|action
columbo|314-|https://columbo|email|note|action
fail|phn|url|email|note|action
mccloskey|314-721-4000|https://www.mccloskeylaw.com/|email|note|action|
richard woolf|314-345-5030|https://bakersterchi.com|rwoolf@bakersterchi.com|email|note|action|
keven dolley|314-293-4884|https://www.missouriemploymentlawattorney.com|email|note|action|
richard sindel|314-721-6040|https://sindellaw.com|email|note|action|
evelyn lewis|314-721-6040|https://evelynlewislawllc.com|email|note|action|
`.split("\n");

//			alert( "BUGS_200 contacts contacts0="+contacts[0] );
//			alert( "BUGS_200 contacts contacts1="+contacts[1] );
//			alert( "BUGS_200 contacts contacts2="+contacts[2] );
//			alert( "BUGS_200 contacts contacts.length="+contacts.length );

			htmout = ""; j=0; k=0; i=0;
			htmout += "<div id=div_contacts>\n";
			htmout += "<h1>div_contacts</h1>\n";
			htmout += "	<table id=table_contacts>\n";
			htmout += "	<tr>";
			htmout += "		<td>num</td>";
			htmout += "		<td>name</td>";
			htmout += "		<td>phn</td>";
			htmout += "		<td>url</td>";
			htmout += "		<td>url_letter</td>";
			htmout += "		<td>firm</td>";
			htmout += "		<td>email</td>";
			htmout += "		<td>note</td>";
			htmout += "		<td>action</td>";
			htmout += "		</tr>";



			for ( j=0; j<contacts.length; j++ ) {
				name = contacts[j].split("|")[0];
				if( name == undefined ) { continue; }
				if( name == "undefined" ) { continue; }
				if( name == "name" ) { continue; }
				if( name == "" ) { continue; }

				id = contacts[j].split("|")[0];
				phn = contacts[j].split("|")[1];
				firm = contacts[j].split("|")[2];
				site = contacts[j].split("|")[3];
				email = contacts[j].split("|")[4];
				date = contacts[j].split("|")[5];
				note = contacts[j].split("|")[6];
				action = contacts[j].split("|")[7];
				url="";
				url+="<a href="+site+" target=_blank>";
				url+="<img src=/imgs/btn/kob.png height=20 border=0>";
				url+="</a>";
				url_letter="";
				url_letter+="<img src=/imgs/btn/kow.png ";
//				url_letter+=" onclick=\"letter('"+id+"'); return false;\" "
				url_letter+=" onclick=\"letter('"+contacts[j]+"'); return false;\" "
				url_letter+=" height=20 border=0>";

//				alert( "BUGS_650 url="+url+" firm="+firm+"\n" );


				htmout += "	<tr>";
				htmout += "		<td>"+j+"</td>";
				htmout += "		<td><b>"+id+"</b></td>";
				htmout += "		<td><b>"+name+"</b></td>";
				htmout += "		<td><b>"+phn+"</b></td>";
				htmout += "		<td>"+firm+"</td>";
				htmout += "		<td>"+url+"</td>";
				htmout += "		<td>"+url_letter+"</td>";
				htmout += "		<td>"+email+"</td>";
				htmout += "		<td>"+note+"</td>";
				htmout += "		<td>"+action+"</td>";
				htmout += "		</tr>";
//				alert( "BUGS_201 contacts j="+j+" name="+name+"phn= "+phn+"\n" );
				}

			htmout += "		</table id=table_contacts_end>\n";
			htmout += "	</div id=div_contacts_end>\n";

			if( document.getElementById(divid)) {
				document.getElementById(divid).innerHTML=htmout;
				}
			return(htmout);
			}



		function letter(contact) {
//			alert( "BUGS_2050 LETTER contact="+contact );
			divid="div_letter";
			htmout="";
			default_contact="id|phn|name|firm|site|email|date|note|action";
			if(contact == "" ) contact=default_contact;

//			alert( "BUGS_930 contact="+contact );
			id = contact.split("|")[0];
			name = contact.split("|")[1];
			phn = contact.split("|")[2];
			firm = contact.split("|")[3];
			site = contact.split("|")[4];
			email = contact.split("|")[5];
			date = contact.split("|")[6];
			note = contact.split("|")[7];
			action = contact.split("|")[8];

//			alert( "BUS_950 id="+id+" name="+name+" phn="+phn );
			contact_info="";
			contact_info+="<div id=div_contacts_info>\n";
			contact_info+="<hr color=goldenrod>\n";


			contact_info+="<table id=table_contact_info1>\n";
			contact_info+="<tr><td>id</td><td>="+id+"</td></tr>\n";
			contact_info+="<tr><td>name</td><td>"+name+"</td></tr>\n";
			contact_info+="<tr><td>phn</td><td>="+phn+"</td></tr>\n";
			contact_info+="<tr><td>firm</td><td>="+firm+"</td></tr>\n";
			contact_info+="<tr><td>site</td><td>"+site+"</td></tr>\n";
			contact_info+="<tr><td>email</td><td>"+email+"</td></tr>\n";
			contact_info+="<tr><td>date</td><td>"+date+"</td></tr>\n";
			contact_info+="<tr><td>note</td><td>"+note+"</td></tr>\n";
			contact_info+="<tr><td>action</td><td>"+action+"</td></tr>\n";
			contact_info+="	</table id=table_contact_info_end>\n";
			contact_info+="<br>\n";
			contact_info+="<hr color=goldenrod>\n";
			contact_info+="	</div id=div_contacts_info_end>\n";

//			alert( "BUGS_2090 contact_info="+contact_info );
			if ( document.getElementById('div_contact_info')) {
				document.getElementById('div_contact_info').innerHTML=contact_info;
				}
			id=args
			htmout += "<h1>BUGS_2091 LETTER  id="+id;
//			alert(htmout);

letter_body=`
we need time

- new grandaughter born 20230227 is in ICU with oxigen problems
- doctor requested medical tests for me
- internet cable problems too

can you reschedule/dismiss out Feb 9 summons court date?
ko2.us/law

- jtfdc_20190516_0880_policereport.pdf (summons and police report)
- jtfdc_20190516_1700_sk_protect.pdf (wifes order of protection from G. Byrd)
- videos of my police calls for help and the police tazor response


the case is about a 20190516 alleged "chestbump" assault against
Gary Byrd and a "door" assault against a "special person" (stlc police)

the allegation are unsupported by the actual
videos of my police calls for help, police tazor response and Mr Byrds pattern and practice
of threats, bullying and trespass over the last 10 years.

our situation is really all about a 10 year dispute over
big dogs, property and safety of small children

We have been targeted by
Ms Joan Donovan Family Law and her a handful of recruited client neighbors
attempts to force us from our home in a private 3 house court .

Ms Donovans legal strategy involving
false police reports, endless legal fees, 
thier 9 freeroaming big dogs and redirected traffic thru our driveway,
has disrupted our lives and business for 10 year.

all documentation, summons, police report, sk order of protection from G. Byrd,
videos, maps, photos are available somewhere online at:

ko2.us/law

Due to the scope and volume of the documentation
the site is evolving into a general
knowledgebase/case managment system portal
that could eventually include aggregated local law news.

you are invited to explore and imagine the potential of this work in progress.

If you are unable to help us,
can you provide a referal for someone to simply 
reschedule/dismiss the Feb 9 court date.

thank you again for your time and consideration

jsk
ko2.us/law
`;

			htmout_pre ="";
			htmout_pre += "<pre id=pre_letter>\n";
			htmout_pre += "Dear "+id+":\n";
			htmout_pre += letter_body;
			htmout_pre += "	</pre id=pre_letter_end>\n";

			htmout="";
			htmout += "Dear "+id+":\n";
			htmout += letter_body;

//			alert( "BUGS_750 LETTER id="+id+" htmout="+htmout );

//			divid="div_letter";
//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				}

			divid="pre_letter";
			if( document.getElementById(divid)) {
				document.getElementById(divid).innerHTML=htmout_pre;
				}


			return(htmout);
			}

		function links(args) {
			htmout="";
			htmout += "<h1>BUGS_1170 links args="+args+"</h1>\n;



			alert(htmout);
			return(htmout);
			}


		function k9(args) {
			htmout=""; j=0; k=0;
			alert( "BUGS_2110 k9 args="+args );
			return(htmout);
			}

		function grid_toggle(args) {
//			alert("BUGS_200 grid args="+args );

			div_divid="div_grid";
			if( document.getElementById('div_grid')) {
				if( document.getElementById('div_grid').style.display == "inline" ) {
					document.getElementById('div_grid').style.display="none";
					if( document.getElementById('img_grid_toggle')) {
						document.getElementById('img_grid_toggle').src="/imgs/btn/btn_keyhole1.png";
						}
					if( document.getElementById('img_grid_keys')) {
						document.getElementById('img_grid_keys').src="/imgs/btn/btn_keys1.png";
						}
					}
				else{
					document.getElementById('div_grid').style.display="inline";
					if( document.getElementById('img_grid_toggle')) {
						document.getElementById('img_grid_toggle').src="/imgs/btn/btn_keyhole2heaven.png";
						}
//					if( document.getElementById('img_grid_keys')) {
//						document.getElementById('img_grid_keys').src="/imgs/btn/btn_keys2.png";
//						}
//					return('');
					}
				}



			return(args);
			}

		function grid(args) {
//			alert("BUGS_200 grid args="+args );
//			var ctx = document.getElementById('canvas_table_top').getContext('2d');
			if( document.getElementById('img_grid_keys')) {
				document.getElementById('img_grid_keys').src="/imgs/btn/btn_keys_string1.png";
				}
			if(args=="") {
				}
			tokens=args;
			k9s=tokens;
			j=0; k=0;
			if( args == '' ) {
				tokens = '';
				tokens += '-';
				for( k=1; k<11; k++ ) {
//					token = random_int(9,0);
					token = random_int(9,0);
					token = random_int(99,00);
					token = random_int(999,100);
					token = random_int(9999,1000);
					token = random_int(999999,100000);
					token = random_int(99999999,10000000);

					k9=token;
//					alert("BUGS_9010 grid j="+j+" k="+k+" token="+token+" k9="+k9 );
					k9=keine(token);
//					alert("BUGS_9020 grid j="+j+" k="+k+" token="+token+" k9="+k9 );
					token_str = token.toString();
					tokens += token.toString(); tokens += '-';
//					tokens += token_str; tokens += '-';
					}
//				tokens += '-';
				}
		k9s=tokens;
	
		var tokes = tokens.split(/-/);
		tokes_len = tokes.length;
		head=0; tail=tokes_len-1;

		if(( tokes[head] != "" ) && ( tokes[tail] != "" )) {
			k9head=keine(tokes[head]);
			status=0;
			for( j=1; j<tail; j++ ) {
				if( tokes[tail] == tokes[j] ) {
					if( j == k9head ) { status=1; }				
					break;
					}
				}
			if( status == 1 ) {
				htmout  = '';
				htmout += '<img src="/imgs/btn/btn_key_happiness.png" ';
				htmout += '	onclick="window.open(\'/imgs/btn/btn_key_happiness.png\');return false;"';
				htmout += '	height=400 border=0>';
				}
			else {
				htmout  = '';
				htmout += '<img src="/imgs/btn/btn_keyhole_us.png" ';
				htmout += '	onclick="window.open(\'/imgs/btn/btn_key_happiness.png\');return false;"';
				htmout += '	height=400 border=0>';
				}
			if( document.getElementById('div_grid1')) {
				document.getElementById('div_grid1').innerHTML = htmout;
				}

			return(args);
			}




		grid1 = '';
		grid1 += '<div id="div_grid1" >';
		grid1 += '	<h1>div_grid1</h1>';
		grid1 += '	<h3>'+tokens+'</h3>';
		grid1 += '	<br>';
		grid1 += '	<table id="table_grid">';
//		alert( "BUGS_150 grid1="+grid1+"  tokes="+tokes );
		j=0;
		for(r=1; r<4; r++) {
			grid1 += '<tr>';
			for(c=1; c<4; c++) {
//				alert( "BUGS_150 j="+j+"-"+r+"-"+c+" tokens="+tokens );
				j=j+1;
				grid1 += '<td>';
				grid1 += j;
				if((tokes[head]=="")&&(tokes[tail]=="")) {
					grid1 += '<img src="/imgs/btn/kob.png" onclick=';
//					grid1 += '	"grid(\''+j+tokens+'\'); return false;" ';
					grid1 += '	"grid(\''+tokes[j]+tokens+'\'); return false;" ';
					grid1 += '	height=50 border=0>';
					grid1 += '<br>';
//					grid1 += tokes[j];
//					grid1 += '<br>';
//					grid1 += keine(tokes[j]);
//					alert( "BUGS_151 j="+j+"-"+r+"-"+c+" tokens="+tokens );
					}
				if((tokes[head]!="")&&(tokes[tail]=="")) {
//					if( tokes[head] == j ) {
					if( tokes[head] == tokes[j] ) {
						grid1 += '<img src="/imgs/btn/kow.png" ';
//						grid1 += '	onclick="grid(\''+tokens+j+'\'); return false;" ';
						grid1 += '	onclick="grid(\''+tokens+tokes[j]+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
//						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
						}
					else {
						grid1 += '<img src="/imgs/btn/kob.png" ';
						grid1 += '	onclick="grid(\''+tokens+tokes[j]+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
//						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
						}
//					alert( "BUGS_152 j="+j+"-"+r+"-"+c+" tokens="+tokens );
					}
				if((tokes[head]!="")&&(tokes[tail]!="")) {
//					if( tokes[head] == keine(tokes[tokes[tail]]) ) {
//					if( tokes[ tokes[head]] == keine(tokes[tokes[tail]]) ) {
					if( tokes[ tokes[head]] == tokes[tokes[tail]] ) {
						grid1 += '<img src="/imgs/btn/btn_key_happiness.png" ';
						grid1 += '	onclick="grid(\''+tokens+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
						grid1 += tokes[head]+'='+tokes[tail]+'<br>';
//						grid1 += tokes[j]+<br>;
//						grid1 += '<br>';
//						grid1 += keine(tokes[tokes[tail]]);
						}
					else {
						grid1 += '<img src="/imgs/btn/kob.png" ';
						grid1 += '	onclick="grid(\''+tokens+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
						}

//					alert( "BUGS_153 j="+j+"-"+r+"-"+c+" tokens="+tokens );
					}





				grid1 += '<br>'+tokes[j];
//				grid1 += '<br>'+keine(tokes[j]);
				grid1 += '<br>';
				grid1 += '	</td>';

//				grid1 += '-'+k9;
//				grid1 += '-'+keine(tokes[j]);
//				alert( "BUGS_65 j="+j+" toke="+tokes[j] );
//				grid1 += 	tokes[j].toString();
				}
			grid1 += '	</tr>';	
			}
		grid1 += '	</table>';
		grid1 += '	</div>';

//		alert( "BUGS_111 grid1="+grid1 );

		if( document.getElementById('div_grid')) {
			document.getElementById('div_grid').innerHTML=grid1;
			}
//		alert( "BUGS_71 grid1="+grid1 );

		return(args);


			htmout = '';
			htmout += '<div id="div_tokens">';
			htmout += '<h1>div_tokens</h1>';
			htmout += '<br>';
			htmout += '	</div>';	
			if( document.getElementById('div_tokens')) {
				document.getElementById('div_tokens').innerHTML=tokens;
				}


			htmout += '<div id="div_grid">';
			htmout += '<h1>div_grid</h1>';

			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-1\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-2\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-3\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<br>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-4\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-5\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-6\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<br>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-7\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-8\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-9\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<br><br><br><br>';
			htmout += '<hr color=goldenrod';


//			htmout += '<table>';
//
//			j=0;
//			for(r=0; r<3; r++ ) {
//				htmout += '	<tr>';
//				for( c=0; c<3; c++ ) {
//					rand=random_int(99999999,0);
////					alert( "BUGS_202 j="+j+"  rand="+rand );
//					kolists[j] = rand;
//					htmout += '	<td>';
//					htmout += '<img src="/imgs/btn/kob.png"';
//					htmout += '	alt="/imgs/btn/kob.png"';
//					htmout += '	onclick="grid(\''j+'|'+kolists[j]+'\');return false;" ';
//					htmout += '	height=50 border=0>';
//					htmout += '	'+kolists[j];
//					htmout += '		</td>';
//					}
//				htmout += '		</tr>';
//				}
//			htmout += '	</table>';
//			htmout += '	</div>';
//
//			htmout="<h1>BUGS_HTML</h1>";	
//			alert("BUGS_201 grid htmout="+htmout );
			if( document.getElementById('div_grid')) {
				document.getElementById('div_grid').innerHTML=htmout;
				}
			return(args);
			}

		function startup1(args) {
			htmout=""; j=0; k=0;
			alert("BUGS_2480 startup1 args="+args );
			htmout=banner('');			
			grid(args);
			return(args);
			}

	function drawgrid() {
		if(document.getElementById('canvas_grid_table_top')) {;
			var canvas = document.getElementById('canvas_grid_table_top');
			}
		if (canvas.getContext) {
			var ctx = canvas.getContext('2d');
               
// Create a pattern
			for (var i = 0;i<7;i++) {
				for (var j = 0;j<7;j++) {   
					ctx.fillStyle = 'rgb(' + Math.floor(255-20.5*i)+ ','+ 
					Math.floor(255 - 42.5*j) + ',255)';
					ctx.fillRect( j*25, i* 25, 55, 55 );
        				}
				}
			} 
		else {
			alert('ALERT_100: unauthorized access logged !!');
			}
		}







              function keine(i) {
//			alert( "BUGS_8980 keine i="+i );
			j=0; o=0;
			is=i.toString().split("");
			islen=is.length;
//			alert( "BUGS_8995 keine j="+j+" islen="+islen+" is="+is );
			for( j=0; j<islen; j++ ) {
				o=o+parseInt(is[j]);
				if( o>9 ) { 
//					alert( "BUGS_8996 TOBIG j="+j+" i="+i+" o="+o );
					o=o-9; 
//					alert( "BUGS_8997 tobig j="+j+" i="+i+" o="+o );
					}
				}
//			alert( "BUGS_9000 keine j="+j+" i="+i+" o="+o );
			return(o);
			}


		function k9_grid(args) {
			alert("BUGS_2120 k9_grid args="+args );
//			var ctx = document.getElementById('canvas_table_top').getContext('2d');
			if( document.getElementById('img_grid_keys')) {
				document.getElementById('img_grid_keys').src="/imgs/btn/btn_keys_string1.png";
				}
			if(args=="") {
				}
			tokens=args;
			k9s=tokens;
			j=0; k=0;
			if( args == '' ) {
				tokens = '';
				tokens += '-';
				for( k=1; k<11; k++ ) {
//					token = random_int(9,0);
					token = random_int(9,0);
					token = random_int(99,00);
					token = random_int(999,100);
					token = random_int(9999,1000);
					token = random_int(999999,100000);
					token = random_int(99999999,10000000);

					k9=token;
//					alert("BUGS_9010 grid j="+j+" k="+k+" token="+token+" k9="+k9 );
					k9=keine(token);
//					alert("BUGS_9020 grid j="+j+" k="+k+" token="+token+" k9="+k9 );
					token_str = token.toString();
					tokens += token.toString(); tokens += '-';
//					tokens += token_str; tokens += '-';
					}
//				tokens += '-';
				}
		k9s=tokens;
	
		var tokes = tokens.split(/-/);
		tokes_len = tokes.length;
		head=0; tail=tokes_len-1;

		if(( tokes[head] != "" ) && ( tokes[tail] != "" )) {
			k9head=keine(tokes[head]);
			status=0;
			for( j=1; j<tail; j++ ) {
				if( tokes[tail] == tokes[j] ) {
					if( j == k9head ) { status=1; }				
					break;
					}
				}
			if( status == 1 ) {
				htmout  = '';
				htmout += '<img src="/imgs/btn/btn_key_happiness.png" ';
				htmout += '	onclick="window.open(\'/imgs/btn/btn_key_happiness.png\');return false;"';
				htmout += '	height=400 border=0>';
				}
			else {
				htmout  = '';
				htmout += '<img src="/imgs/btn/btn_keyhole_us.png" ';
				htmout += '	onclick="window.open(\'/imgs/btn/btn_key_happiness.png\');return false;"';
				htmout += '	height=400 border=0>';
				}
			if( document.getElementById('div_grid1')) {
				document.getElementById('div_grid1').innerHTML = htmout;
				}

			return(args);
			}




		grid1 = '';
		grid1 += '<div id="div_grid1" >';
		grid1 += '	<h1>div_grid1</h1>';
		grid1 += '	<h3>'+tokens+'</h3>';
		grid1 += '	<br>';
		grid1 += '	<table id="table_grid">';
//		alert( "BUGS_150 grid1="+grid1+"  tokes="+tokes );
		j=0;
		for(r=1; r<4; r++) {
			grid1 += '<tr>';
			for(c=1; c<4; c++) {
//				alert( "BUGS_150 j="+j+"-"+r+"-"+c+" tokens="+tokens );
				j=j+1;
				grid1 += '<td>';
				grid1 += j;
				if((tokes[head]=="")&&(tokes[tail]=="")) {
					grid1 += '<img src="/imgs/btn/kob.png" onclick=';
//					grid1 += '	"grid(\''+j+tokens+'\'); return false;" ';
					grid1 += '	"grid(\''+tokes[j]+tokens+'\'); return false;" ';
					grid1 += '	height=50 border=0>';
					grid1 += '<br>';
//					grid1 += tokes[j];
//					grid1 += '<br>';
//					grid1 += keine(tokes[j]);
//					alert( "BUGS_151 j="+j+"-"+r+"-"+c+" tokens="+tokens );
					}
				if((tokes[head]!="")&&(tokes[tail]=="")) {
//					if( tokes[head] == j ) {
					if( tokes[head] == tokes[j] ) {
						grid1 += '<img src="/imgs/btn/kow.png" ';
//						grid1 += '	onclick="grid(\''+tokens+j+'\'); return false;" ';
						grid1 += '	onclick="grid(\''+tokens+tokes[j]+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
//						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
						}
					else {
						grid1 += '<img src="/imgs/btn/kob.png" ';
						grid1 += '	onclick="grid(\''+tokens+tokes[j]+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
//						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
						}
//					alert( "BUGS_152 j="+j+"-"+r+"-"+c+" tokens="+tokens );
					}
				if((tokes[head]!="")&&(tokes[tail]!="")) {
//					if( tokes[head] == keine(tokes[tokes[tail]]) ) {
//					if( tokes[ tokes[head]] == keine(tokes[tokes[tail]]) ) {
					if( tokes[ tokes[head]] == tokes[tokes[tail]] ) {
						grid1 += '<img src="/imgs/btn/btn_key_happiness.png" ';
						grid1 += '	onclick="grid(\''+tokens+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
						grid1 += tokes[head]+'='+tokes[tail]+'<br>';
//						grid1 += tokes[j]+<br>;
//						grid1 += '<br>';
//						grid1 += keine(tokes[tokes[tail]]);
						}
					else {
						grid1 += '<img src="/imgs/btn/kob.png" ';
						grid1 += '	onclick="grid(\''+tokens+'\'); return false;" ';
						grid1 += '	height=50 border=0>';
						grid1 += '<br>';
						grid1 += tokes[j];
//						grid1 += '<br>';
//						grid1 += keine(tokes[j]);
						}

//					alert( "BUGS_153 j="+j+"-"+r+"-"+c+" tokens="+tokens );
					}





				grid1 += '<br>'+tokes[j];
//				grid1 += '<br>'+keine(tokes[j]);
				grid1 += '<br>';
				grid1 += '	</td>';

//				grid1 += '-'+k9;
//				grid1 += '-'+keine(tokes[j]);
//				alert( "BUGS_65 j="+j+" toke="+tokes[j] );
//				grid1 += 	tokes[j].toString();
				}
			grid1 += '	</tr>';	
			}
		grid1 += '	</table>';
		grid1 += '	</div>';

//		alert( "BUGS_111 grid1="+grid1 );

		if( document.getElementById('div_grid')) {
			document.getElementById('div_grid').innerHTML=grid1;
			}
//		alert( "BUGS_71 grid1="+grid1 );

		return(args);


			htmout = '';
			htmout += '<div id="div_tokens">';
			htmout += '<h1>div_tokens</h1>';
			htmout += '<br>';
			htmout += '	</div>';	
			if( document.getElementById('div_tokens')) {
				document.getElementById('div_tokens').innerHTML=tokens;
				}


			htmout += '<div id="div_grid">';
			htmout += '<h1>div_grid</h1>';

			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-1\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-2\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-3\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<br>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-4\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-5\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-6\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<br>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-7\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-8\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<img src="/imgs/btn/kob.png" ';
			htmout += '	onclick="grid(\'grid-9\');return false;" ';
			htmout += '	height=50 border=0>';
			htmout += '<br><br><br><br>';
			htmout += '<hr color=goldenrod';


//			htmout += '<table>';
//
//			j=0;
//			for(r=0; r<3; r++ ) {
//				htmout += '	<tr>';
//				for( c=0; c<3; c++ ) {
//					rand=random_int(99999999,0);
////					alert( "BUGS_202 j="+j+"  rand="+rand );
//					kolists[j] = rand;
//					htmout += '	<td>';
//					htmout += '<img src="/imgs/btn/kob.png"';
//					htmout += '	alt="/imgs/btn/kob.png"';
//					htmout += '	onclick="grid(\''j+'|'+kolists[j]+'\');return false;" ';
//					htmout += '	height=50 border=0>';
//					htmout += '	'+kolists[j];
//					htmout += '		</td>';
//					}
//				htmout += '		</tr>';
//				}
//			htmout += '	</table>';
//			htmout += '	</div>';
//
//			htmout="<h1>BUGS_HTML</h1>";	
//			alert("BUGS_201 grid htmout="+htmout );
			if( document.getElementById('div_grid')) {
				document.getElementById('div_grid').innerHTML=htmout;
				}
			return(args);
			}


		function banner(args) {
			htmout=""; j=0; k=0;
			alert( "BUGS_2790 banner args="+args);
			return(htmout);
			}

		function banner1(args) {
			htmout=""; j=0; k=0;
			alert( "BUGS_2800 banner args="+args );
			psvrec=protocol+"|"+hostname+"|"+port+"|"+pathname+"|"+search+"|"+hash+"|"+host+"|"+dttm+"|";
			protocol=psvrec.split("|")[0];
			hostname=psvrec.split("|")[1];
			port=psvrec.split("|")[2];
			pathname=psvrec.split("|")[3];
			search=psvrec.split("|")[4];
			hash=psvrec.split("|")[5];
			host=psvrec.split("|")[6];
//			dttm=psvrec.split("|")[7];
			dttm = new Date().toISOString().slice(0, 10);

			htmout+="<a href=/k9.html target=_blank><img id=img_k9 src=/imgs/keys/keys00_hole.png height=20 border=0></a>";
			htmout+="<a href=/leds/leds.php target=_blank><img id=img_leds src=/imgs/btn/tn_leds.png height=20 border=0></a>";
			htmout+="d r a f t ";
			htmout+="&nbsp &nbsp &nbsp &nbsp";
			htmout+=hostname;
			htmout+="&nbsp &nbsp &nbsp &nbsp";
			htmout+="P R E V I E W";
			htmout+="<img src=/imgs/btn/kop12.png height=20>";
			htmout+=" K O ";
//			htmout+=" K A ";
//			htmout+=" L A W ";
//			htmout+=" B Y R D B E L L V J K ";
//			htmout+=" M E D ";
//			htmout+=" K O N E T ";
//			htmout+=" I P E R M S ";
//			htmout+=" J T F D C ";
//			htmout+=" J T F D C R ";
//			htmout+=" J T F I N C";
//			htmout+=" K O 1 ";
//			htmout+=" K O 2 ";
//			htmout+=" K O 0 ";
			htmout+=pathname;
			htmout+="<img src=/imgs/btn/kop34.png height=20>";
			htmout+="&nbsp &nbsp &nbsp &nbsp";
			htmout+="<font style=\"font-size:18\">"+dttm_"</font>";

<!--
		<a href=/ko/leds/leds.php target=_blank><img id=img_leds_dhtml src=/imgs/btn/tn_leds.png height=20 border=0></a>
		<a href=/k9.html target=_blank><img id=img_k9_dhtml src=/imgs/keys/keys00_hole.png height=20 border=0></a>
		<a href=./ target=_blank><img id=img_ok_dhtml src=/imgs/btn/ok.png height=20 border=0></a>
	-->


			if( document.getElementById('div_banner')) {
				alert( "BUGS_2831 ___FOUND divid=div_banner" );
				document.getElementById('div_banner').innerHTML=htmout;
				}
			else {
				alert( "BUGS_2831 NOTFOUND divid=div_banner" );
				}
			return(htmout);
			}







        <script id="script_geturlparameter" >
                function geturlparameter(name) {
                        return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
                        }
                </script>

		</script id=script_ko_end>

	<script id=script_tail>
		function tail(args) {
			htmout=""; j=0; k=0;
			htmout+="<h1>BUGS_1540 tail args="+args+"</h1>\n" );
			alert(htmout);
			return(htmout);
			}
		</script id=script_tail_end>


	</head>

<body bgcolor=linen onload="startup(''); return false;" >
<br>






<!--
				<img class="drg"  src="data:image/gif;base64,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" border= 0>
	-->
<!--
	<script id=script_b64img>
		div.image {
			width:100px;
			height:100px;
  background-image:url("data:image/jpeg;base64,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");

			}
		</script id=script_b64img_end>
	-->

	<style id=style_dragdrop>
<!--
		#drop {
			width:200px;
			height:150px;
			margin:3px auto;
			background:#eddaa8;
			font-size:16px;
			}
		#drop #sw { text-decoration:underline; cursor:pointer; }
		#drag {
			width:450px;
			height:180px;
			margin:12px auto;
			border:1px solid silver;
			font-size:16px;
			}
		#drag .drg { margin:10px 12px; }
		#drag div.drg {
			width:150px;
			height:50px;
			background:#07da08;
			border:2px solid blue;
			}
-->
		</style id=style_dragdrop_end>

	<script id=script_dragdrop >
<!--

// sets the draggable
	$(document).ready(function() {
		$('#drag .drg').draggable({
		cursor: 'move',          // sets the cursor apperance
		revert: 'valid'
		});

// sets droppable
// after the draggable is droped, hides it with a hide() effect
		$('#drop').droppable({
		drop: function(event, ui) {
			ui.draggable.hide(1000);
			}
		});

// after the draggable is droped, hides it with a hide() effect
		$('#drop1').droppable({
			drop: function(event, ui) {
				ui.draggable.hide(1000);
				}
			});

// after the draggable is droped, hides it with a hide() effect
		$('#drop2').droppable({
			drop: function(event, ui) {
				ui.draggable.hide(1000);
				}
			});

// when the "#sw" element (inside the "#drop") is clicked
// show the items with class "drg", contained in "#drag"
//   $('#drag .drg').slideDown(1000);

		$('#drop #sw').click(function(){
			var url = "/leds/leds.php?q=jqui/dragdrop1/"
			$(location).attr('href',url);
			});
		});
-->
		</script id=script_dragdrop >



	<img id=img_dd title="          dd" src=/imgs/btn/koeye.png onclick="toggle('div_dd',''); return false;" height=20 border=0>div_dd
	<div id=div_dd >
		<hr color=black>
		<hr color=white>
		<h1>div_dd</h1>
		<div id=drop>
			<span id="sw"><h1>drop jtfinc</h2></span>
			<a href=/ko_jtf/zm/jtf_parcels/jtfdc_theater.html target=_blank>
				<img height=200 width=300
					src="/ko_jtf/zm/jtf_parcels/jtfdc_theater/TileGroup0/0-0-0.png" border=0 >
					</a>
			</div id=drop_end>

		<div id=drag>

			<img src="/images/jtf/jtf_takes/jtf29_eagle_north.png" alt="jtf29_eagle_north" width="50" class="drg"/>


			<div class="drg" id=div_kludge><h1>div_kludge</h1>
				<h1>div_kludge</h1>
				<div id=div-item_0 class="drg"><h1>-: kudge llc :-</h1>
					<pre>-: kludge jkwii :-</pre>
					<img class="drg" src="/ko.png" alt="ko.png" width="50" >
					<img class="drg" src="/ok.png" alt="ok.png" width="50" >
					<pre>-: kludge skwii :-</pre>
					</div id=div_item_0_end>
	
				</div id=div_kludge_end>
	
			<div class="drg"><h1>konet llc </h1>
				<pre>-: timejak jkwii :-</pre>
				<img class="drg" src="/ko.png" alt="ko.png" width="50" >
				<img class="drg" src="/ok.png" alt="ok.png" width="50" >
				<pre>-: timesak skwii :-</pre>
				</div>
	
			<div class="drg"><h1>jtf29 </h1>
				<a href=./ko_jtf/zm/jtf_parcels/jtf29.html target=_blank>
					<img height=200 width=100 src="/ko_jtf/zm/jtf_parcels/jtf29/TileGroup0/0-0-0.png" border=0 >
					</a>
				</div>
	
	
			<div class="drg"><h1>dogheads</h1>
				<div id="div_jtf_vid5">
					<video controls="controls_jtf5" defaultmuted="" muted="true" style="width:320px;height:180px;" poster="index4_mp4.png">
					<source src="/ko_jtf/kb/v/doghead_video.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">
					</video>
					</div>
				</div>
	
			<div class="drg"><h1>jtfdc night court lights action 3720</h1>
				<div id="div_vid">
					<video controls="controls" defaultmuted="" muted="true" style="width:320px;height:180px;" poster="index_mp4.png">
						<source src="index.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">
						<source src="index.webm" type="video/webm;codecs=&quot;vp8, vorbis&quot;">
						</video>
					</div>
				</div>
	
			<div class="drg"><h1>vid1: </h1>
				<div id="div_vid1">
					<video controls="controls" defaultmuted="" muted="true" style="width:320;height:180;" poster="index1_mp4.png">
						<source src="index1.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">
						<source src="index1.webm" type="video/webm;codecs=&quot;vp8, vorbis&quot;">
						</video>
					</div>
				</div>
	
			<div class="drg"><h1>vid2_avril</h1>
				<div id="div_vid2_avril">
					<video controls="controls" defaultmuted="" muted="true" style="width:320px;height:180px;" poster="index2_mp4.png">
						<source src="index2.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">
						<source src="index2.webm" type="video/webm;codecs=&quot;vp8, vorbis&quot;">
						</video>
					</div>
				</div>
	
			<div id=div_vid3 class="drg"><h1>vid3_jtfinc_dogpatrol_tresspass</h1>
				<div id="div_vid3_controls">
					<video controls="controls" defaultmuted="" muted="true" style="width:320px;height:180px;" poster="index3_mp4.png">
						<source src="index3.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;">
						<source src="index3.webm" type="video/webm;codecs=&quot;vp8, vorbis&quot;">
						</video>
					</div id=div_vid3_controls_end>
				</div id=div_vid3_end>
	
	
			 <div id=div_konetllc class="drg">konet llc 
			 	<img src="/ko.png" alt="ko.png" width="50" class="drg" />
			 	<img src="/imgs/btn/koeye_handhi.gif" alt="koeye_handhi" width="50" class="drg" />
				</div id=div_konetllc_end>
			</div id=drag_end>
		</div id=div_dd_end>


<div id="div_vi" hidden>
	<h1>div_vi</h1>
	<div id="div_vi_help" >
		<hr><hr><hr><h1>div_vi_help</h1><hr><hr><hr>
		<script id="script_vi_help">
			var text_vi_help= "vi_help.txt";

		var pre_text_vi_help = "<pre>" + text_vi_help + "</pre>";`
		alert( text_vi_help );
		document.write( text_vi_help );
		document.write( pre_text_vi_help );
		</script>
		</div>

	<div id="div_vi_tutorial"  hidden>
		<hr><hr><hr><h1>div_vi_tutorial</h1><hr><hr><hr>
		<script id="script_vi_tutorial">
			var text_vi_tutorial= "text_vi_tutorial";
			var pre_text_vi_tutorial = "<pre>" + text_vi_tutorial + "</pre>";
			document.write( pre_text_vi_tutorial );
			</script>
		</div id=div_vi_tutorial_end>
	</div id=div_vi_end>

	<script id=encode64 >
//base 64 encode
		function encode64(input) {
			var output = "", i = 0, l = input.length,
			key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", 
			chr1, chr2, chr3, enc1, enc2, enc3, enc4;
			while (i < l) {
				chr1 = input.charCodeAt(i++);
				chr2 = input.charCodeAt(i++);
				chr3 = input.charCodeAt(i++);
				enc1 = chr1 >> 2;
				enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
				enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
				enc4 = chr3 & 63;
				if (isNaN(chr2)) enc3 = enc4 = 64;
				else if (isNaN(chr3)) enc4 = 64;
				output = output + key.charAt(enc1) + key.charAt(enc2) + key.charAt(enc3) + key.charAt(enc4);
				}
			return output;
			}
		</script>
		</script id=encode64_end>





	<div id="div_table_toggle_control" hidden>
		<hr><h1>div_table_toggle_control</h1><hr>
		<script id="script_toggle" >
			function toggle(target) {
				obj=document.getElementById(target);
				obj.style.display=( (obj.style.display=='none') ? '' : 'none');
				}
			</script>
	<table>
	<tr>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('table_toggle')" id=checkbox1 name=checkbox1 checked> </td>
		</tr>
	<tr>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r1')" id=checkbox1 name=checkbox1 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r1-1')" id=checkbox1 name=checkbox1 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r1-2')" id=checkbox2 name=checkbox2 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r1-3')" id=checkbox3 name=checkbox3 checked> </td>
		</tr>
	<tr>
		<td><input style="display:inline" type="checkbox" onClick="toggle('r2')" id=checkbox2 name=checkbox2 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r2-1')" id=checkbox1 name=checkbox1 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r2-2')" id=checkbox2 name=checkbox2 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r2-3')" id=checkbox3 name=checkbox3 checked> </td>
		</tr>
	<tr>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r3')" id=checkbox3 name=checkbox3 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r3-1')" id=checkbox1 name=checkbox1 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r3-2')" id=checkbox2 name=checkbox2 checked> </td>
		<td> <input style="display:inline" type="checkbox" onClick="toggle('r3-3')" id=checkbox3 name=checkbox3 checked> </td>
		</tr>
		</table>

	<table id="table_toggle">
<!--		<tr id="r1" style="display:inline"> -->
		<tr id="r1" style="display:"> 
			<td id="r1-1">r1-1</td>
			<td id="r1-2">r1-2</td>
			<td id="r1-3">r1-3</td>
			</tr>
<!--		<tr id="r2" style="display:inline"> -->
		<tr id="r2" style="display:"> 
			<td id="r2-1">r2-1</td>
			<td id="r2-2">r2-2</td>
			<td id="r2-3">r2-3</td>
			</tr>
<!--		<tr id="r3" style="display:inline"> -->
		<tr id="r3" style="display:"> 
			<td id="r3-1">r3-1</td>
			<td id="r3-2">r3-2</td>
			<td id="r3-3">r3-3</td>
			</tr>
		</table>

		</div id=div_table_toggle_control >



	<div id="piv_divs" >
		<script id="script_divs" >

<!--
		$("button").click(function(){
			$("h1").hide(1000);
			$("h2").hide(2000);
			$("hr").hide(100);
			$("div").hide(10);
			}); 

		function hide (elements) {
			elements = elements.length ? elements : [elements];
			for (var index = 0; index < elements.length; index++) {
				elements[index].style.display = 'none';
				}
			}

// Usage:
		hide(document.querySelectorAll('.target'));
		hide(document.querySelector('.target'));
		hide(document.getElementById('target'));
		hide(document.querySelectorAll('.target'));

		function hide (elements) {
			elements = elements.length ? elements : [elements];
			for (var index = 0; index < elements.length; index++) {
				elements[index].style.display = 'none';
				}
			}

		<div class="target">This div will be hidden.</div>
		<span class="target">This span will be hidden as well.</span>

	-->

			var divs = document.getElementsByTagName("div");
			var out = ""
			var outt = ""
			for(var i = 0; i < divs.length; i++){
				if( divs.[i].id == "div" ) { continue };
//				divs[i].innerHTML = "something new...";
//				divs.[i].style.display = 'none';
//				divs.[i].show();
//				divs.[i].hide();
 
			outt += "<input style=\"display:inline\" type=\"checkbox\" onClick=\"toggle('";
			outt += divs[i].id;
			outt += "')\" id=checkbox1 name=checkbox1 checked>";
//	divs[i].id;
				out += "i= "+i+"divs = " + divs[i].id +" <br>\n";
				}

			document.write( out );
			document.write( "<hr>"+outt+"<hr>" );
			</script>
			</script id=script_divs_end >
		</div id=piv_divs_end >


	<div id=div_canvas_xy hidden>
	<script id=script_canvas_xy>
		 $("#canvas").click(function(e){
			var x = Math.floor((e.pageX-$("#canvas").offset().left) / 20);
			var y = Math.floor((e.pageY-$("#canvas").offset().top) / 20);
			ctx.fillStyle = "rgb(255,255,255)";
			ctx.fillRect(x*20, y*20, 20, 20);
			 });
		</script id=script_canvas_xy_end>
		</div id=div_canvas_xy_end >

	<div id="div_mycanvas_mouse">
<!--    <canvas id="myCanvas" width="680" height="420"></canvas> -->
<!--
    <script id="script_mycanvas_mouse">
      function writeMessage(mycanvas1, message) {
        var context = canvas.getContext('2d');
        context.clearRect(0, 0, canvas.width, canvas.height);
        context.font = '18pt Calibri';
        context.fillStyle = 'black';
        context.fillText(message, 10, 25);
      }
      function getMousePos(canvas, evt) {
        var rect = canvas.getBoundingClientRect();
        return {
          x: evt.clientX - rect.left,
          y: evt.clientY - rect.top
        };
      }
      var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');

      canvas.addEventListener('mousemove', function(evt) {
        var mousePos = getMousePos(canvas, evt);
        var message = 'Mouse position: ' + mousePos.x + ',' + mousePos.y;
        writeMessage(canvas, message);
      }, false);
			</script id=script_mycanvas_mouse_end>
		</div id=div_mycanvas_mouse_end>

	-->



	<script id="script_addChild" >
		var childNumber_dd = 3;
		var ddx = new Array(); 
		var z = 0;
		ddx[z++] = "/dd/nasa/";
		ddx[z++] = "/dd/appolo/";
		ddx[z++] = "/dd/appolo17_4800/";
		ddx[z++] = "/dd/dd5_planets/";
		ddx[z++] = "/dd/dd_nasa/";
		ddx[z++] = "/ko_jtf/jft_parcels/";
//		alert( "addChild ddx len="+ddx.length );
		var childNumber = 3;
		function addChild() {
			alert( "bugs_3180: addChild() ddx len="+ddlist.length );
			var div_dd_new = ""
			div_dd_new += "<hr color=red><hr color=white><hr color=blue>";
			div_dd_new += "<h1>div_dd_new</h1>";
			div_dd_new += "<h1><img src=/fb/jtfdcr/pages/1.jpg height=100></h1>";
			div_dd_new += "<hr color=red><hr color=white><hr color=blue>";
			document.getElementById("div_dd").innerHTML = div_dd_new;
//			var parent = document.getElementById('div_dd').innerHTML = div_dd_new;
			alert( "bugs_3180: addChild() ddx len="+ddlist.length );
//			script_dd_new();
			alert( "bugs_3182: addChild() ddlist len="+ddlist.length );
//			script_ddlist_load();
//			script_ddlist_shot();

			var parent = document.getElementById('div_addchild');
			var newChild = '<p>Child ' + childNumber + '</p>';
			newChild += "<h1>addChild one</h1>";
			newChild += "<h1>addChild two</h1>";
			parent.insertAdjacentHTML('beforeend', newChild);
			childNumber++;
			}
		</script id=script_addChild_end >

	<script id=script_addChild_dd >
		var childNumber_dd = 3;
		var ddx = new Array(); 
		var z = 0;
		alert( "addChild_dd ddx len="+ddx.length );
//		ddx[z++] = "/dd/nasa/";
//		ddx[z++] = "/dd/appolo/";
//		ddx[z++] = "/dd/appolo17_4800/";
//		ddx[z++] = "/dd/dd5_planets/";
//		ddx[z++] = "/dd/dd_nasa/";
//		ddx[z++] = "/ko_jtf/jft_parcels/";
		
		
		function addChild_dd() {
			alert( "BUGS_176: addChild_dd" );
			
			var parent = document.getElementById('div_ddlist');
			var newChild_dd = '<p>dd ' + childNumber_dd + '</p>';
			newChild_dd += "<h1>addChild_dd one</h1>";

			for( z = 0: z < ddx.length; z++ ) {
				newChild_dd += "<a href='" + ddx[z] + "/index.html' target=_blank>"
				newChild_dd += "<img src='"+ ddx[z] + "/index.png' alt='./dd/index.png' border=0></a>";
				}
			parent.insertAdjacentHTML('beforeend', newChild_dd);
			childNumber++;
			}
		</script id=script_addChild_dd_end >

	<script id=script_ddlist >
		var childNumber_dd = 3;
		function script_ddlist() {
			script_ddlist_load();
//			alert( "bugs177 script_ddlist_load OK" );
			script_ddlist_show();
//			var parent = document.getElementById('div_ddlist');
//			var newChild_dd = '<p>dd ' + childNumber_dd + '</p>';
//			newChild_dd += "<hr color=white><h1>ddlist one</h1><hr color=white>";
//			parent.insertAdjacentHTML('beforeend', newChild_dd);
//			childNumber++;
			}
		</script id=script_ddlist_end >


	<style name=style_dd>
		body { text-align: center; background-color: "slategrey"; color:"white"; }
		button {
//		visibility: hidden;
//		background: rgba(7, 99, 53, .1);
		background: transparent;
		border: 3px solid rgba(7, 99, 53, 1);
		border-radius: 5px;
		color: rgba(7, 99, 53, 1);
		color: black;
		cursor: pointer;
		line-height: 40px;
		font-size: 30px;
		outline: none;
		padding: 0 20px;
		transition: all .3s;
		}
	button:hover {
//		background: rgba(7, 99, 53, 1);
		background: darkgreyslate;
		background: yellow;
		color: rgba(255,255,255,1);
		color: black;
		}
	p {font-size: 20px; font-weight: bold;
		</style name=style_dd_end>

<!--
	<hr><hr><h1>ddlist_buttons</h1><hr><hr>

	<button type="button" onclick="script_ddlist_clear('div_dd')">script_ddlist_clear</button>
	<button type="button" onclick="script_ddlist()">script_ddlist</button>
	<button type="button" onclick="addChild_dd()">addChild_dd</button>
	<button type="button" onclick="addChild()">addChild</button>
	<hr>
	-->

	<div id=div_addchild hidden>
		<p>Child 1</p>
		<p>Child 2</p>	
		</div id=div_addchild >

	<div id=div_ddlist hidden>
		<h1>div_ddlist</h1>
		<p>Child_dd 1</p>
		<p>Child_dd 2</p>	
		</div id=div_ddlist_end>

	<div id="div_addchild_dd" hidden >
		<h1>div_addchild_dd</h1>
		addchild_dd <br>
		</div>


	<script id="script_ddlist" >
		var ddlist = new Array();



		function script_ddlist_show() {
			var z = 0; var ddout=""; var len=ddlist.length;
			var ddid = ""; var ddurl = "";
//			alert( "bugs178 script_ddlist_show IN" );
			for( z=0; z< ddlist.length; z++ ) {
				ddid = ddlist[z].replace('/TileGroup0/0-0-0.jpg','' );
//				ddout += "<h1><b>ddlist_"+z+"</b><h1>";
				ddout += "<a href='./index_dd.html?ddid="+ddid+"' target=_blank>";
				ddout += "	<img name='img_" + ddid + "' src='"+ddlist[z]+"' border=0 height=100 >\n";
				ddout += "	</a>";
				ddout += "<a href='"+ddid+".html'  target=_blank>";
				ddout += "	<img name='img_" + ddid + "' height=25 src='"+ddlist[z]+"' border=0 height=100 >\n";
				ddout += "	</a>";
//				alert( "bugs430 ddid=" + ddid );
				}
//			document.write( "bugs435 ddout=" + ddout );

//			alert( "BUGS432_show ddlist("+len+")="+ddlist[z] + " len="+ddlist.length );
// 			document.getElementById('div_ddlist').innerHTML += ddout;
			var parent = document.getElementById('div_ddlist');
			parent.insertAdjacentHTML('beforeend', ddout);
			}
//		function script_ddlist() {
//			script_ddlist_load();
//			alert( "bugs_437: script_ddlist len="+ddlist.length );
//			script_ddlist_show();
//			}
		function script_dd_view( search ) {
			document.write( "script_dd_view search="+search );




			}
		</script id=script_ddlist_end >





		<script name="script_ddlist_load" >
			var ddlist = new Array();
			function script_ddlist_load() {
			var j=0;
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 22 15:48 /home2/kozerus/public_html/index1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11312337 Mar 23  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/videos_to_lighten_the_mood/executive_summary_doghead_video 3-23-16738 PM1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 39401124 Jan  1  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/videos_to_lighten_the_mood/Huckleberry_Hound_17_Barbeque_Hound.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13449559 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150806/mt4_20150806/3638_josh_walkin_house_20150807.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 7040883 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150806/mt4_20150806/3637_car_drivein_lights_off_20150807.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31544632 May 31  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00023_20150919_1910.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21808203 May 31  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00027_20150919_2205_josh_walking.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 66029185 May 31  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00025_20150919_1947.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3579125 May 31  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00026_20150919_2102.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 19702589 May 31  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00028_20150919_2230.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 420498 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150928/mp4_20150928/0471_20150928_0737.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 7031394 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150928/mp4_20150928/0472_20150928_0737.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6913214 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150928/mp4_20150928/0475_20150928_0747.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13097183 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04048_20150716_0641.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 82620945 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04056_20150716_0646_Josh_Jackie_yelling.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9262725 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04054_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 36132332 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04052_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31360598 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04057_20150716_0701.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 60571867 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04046_20150716_0640_Jackie_yelling_at_Josh.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25746787 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04062_20150716_0738.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27839588 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04049_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 52040510 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04044_20150716_0634.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21026672 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04043_20150716_0616.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15880534 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04051_20150716_0643.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3411516 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04050_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22370869 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04065_20150716_0815.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15932099 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04053_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9456645 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04064_20150716_0813.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5407155 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04063_20150716_0812.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25250767 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04055_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14717804 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04045_20150716_0635.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5779527 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04059_20150716_0709.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 17691018 May 29  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04066_20150716_0816.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 45350757 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00042_20150919_1520.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 202310978 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00045_20150919_1601.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73009607 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00041_20150919_1311.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31348085 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00036_20150919_1235.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 79293857 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00043_20150919_1530.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 49277911 May 30  2016 /home2/kozerus/public_html/ko/jtf/jtfdc_legal_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00037_20150919_1235.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3332038 Jan 22  2015 /home2/kozerus/public_html/ko/svc/js/kojs/kojs_threejs/examples/textures/sintel.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3332038 Jan 22  2015 /home2/kozerus/public_html/ko/svc/js/threejs/examples/textures/sintel.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 1269047 Sep 21  2014 /home2/kozerus/public_html/ko/srv/krpano-1.18.3-linux64/krpano-1.18.3/examples/videointerface/video-1920x960.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 531874 Sep 21  2014 /home2/kozerus/public_html/ko/srv/krpano-1.18.3-linux64/krpano-1.18.3/examples/videointerface/video-1024x512.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 227064 Jun 13  2014 /home2/kozerus/public_html/ko/srv/krpano-1.18.3-linux64/krpano-1.18.3/examples/plugin-examples/video-player/cats-short.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 227064 Jun 13  2014 /home2/kozerus/public_html/ko/srv/krpano-1.18.3-linux64/krpano-1.18.3/examples/plugin-examples/video-hotspot/cats-short.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 28  2017 /home2/kozerus/public_html/jtdfinc_byrd2013.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 140960 Mar  2  2015 /home2/kozerus/public_html/jkwii/js/jsdoit/preload/_assets/static/video.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3332038 Jan 22  2015 /home2/kozerus/public_html/jkwii/js/threejs/examples/textures/sintel.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25844773 May 11  2016 /home2/kozerus/public_html/jkwii/jkwii.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 28  2017 /home2/kozerus/public_html/ko_jtf.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 18025396 Apr 25  2013 /home2/kozerus/public_html/ko_kt/Skype_on_AppleTV.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 7011284 Apr 30  2013 /home2/kozerus/public_html/ko_kt/981571807_2336548867001_soft-snake.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9888388 May  3  2013 /home2/kozerus/public_html/ko_kt/0_zu9o9gah_0_4rrc176h_1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10107750 Apr 23  2013 /home2/kozerus/public_html/ko_kt/981571807_2312771070001_mini-livers.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11719820 May  1  2013 /home2/kozerus/public_html/ko_kt/Wireless_Wi_fi_IP_outdoor_waterproof_internet_protocol_PTZ_C.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27044304 Apr 22 15:49 /home2/kozerus/public_html/index2.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6833811 Oct  9  2014 /home2/kozerus/public_html/kb/v/jtfinc/JOHNNY KIDD & THE PIRATES - growl.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5673207 Oct 11  2014 /home2/kozerus/public_html/kb/v/jtfinc/Kommienezuspadt - Tom Waits.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 7067687 Oct 11  2014 /home2/kozerus/public_html/kb/v/jtfinc/KONGOS - Come With Me Now.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21586979 May  4  2013 /home2/kozerus/public_html/kb/v/jtfinc/Paul_Simon_-_You_Can_Call_Me_Al.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 39558704 May 27  2017 /home2/kozerus/public_html/kb/v/jtfinc/Jamestown Revival - Medicine (Acoustic).mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4130718 Oct  9  2014 /home2/kozerus/public_html/kb/v/jtfinc/Family Tree - Kings of Leon.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 39880807 Jan  1  2016 /home2/kozerus/public_html/kb/v/jtfinc/Fiona Apple - Criminal-1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22997925 Jun  7  2010 /home2/kozerus/public_html/kb/v/jtfinc/George Michael - Careless Whisper.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10626618 Jan  2  2016 /home2/kozerus/public_html/kb/v/jtfinc/Ring_Of_Fire_Stan_Ridgway.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5097370 Aug  4  2016 /home2/kozerus/public_html/kb/v/jtfinc/fureys/The Fureys- I Will Love You Ev'ry Time.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4391667 Aug  4  2016 /home2/kozerus/public_html/kb/v/jtfinc/fureys/The Fureys- The First Leaves Of Autumn.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 24774852 Aug  4  2016 /home2/kozerus/public_html/kb/v/jtfinc/fureys/The last Great love Song Performed by Finbar furey.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15829288 Aug  4  2016 /home2/kozerus/public_html/kb/v/jtfinc/fureys/The Fureys-Red Rose Cafe.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16604265 Aug  4  2016 /home2/kozerus/public_html/kb/v/jtfinc/fureys/The Fureys - The Old Man.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 24716705 Aug  4  2016 /home2/kozerus/public_html/kb/v/jtfinc/fureys/I Will Love You Ev'ry Time - The Fureys & Davey Arthur.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20056128 Nov 28  2010 /home2/kozerus/public_html/kb/v/jtfinc/jesse_colin_young_whats_going_on-mercy_mercy_me.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6700160 Jan  1  2016 /home2/kozerus/public_html/kb/v/jtfinc/put_the_lime_in_the_coconut.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 12881706 Aug 16  2017 /home2/kozerus/public_html/kb/v/jtfinc/I-Team looks at history of sinkhole repair on Land O' Lakes property.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 71490095 Dec 18  2010 /home2/kozerus/public_html/kb/v/dutch/dutch_jackson_feat_jibbs-city_on_fire_off_then.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 56274429 Dec 18  2010 /home2/kozerus/public_html/kb/v/dutch/dutch_jackson_39_new_single.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 49557618 Dec 18  2010 /home2/kozerus/public_html/kb/v/dutch/dutch_jackson-nocout_get_my_weight_up.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22849514 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/Push_Hands_-_Tui_Shou.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 196023 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_019.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5922959 Sep 24  2013 /home2/kozerus/public_html/kb/v/kt/Shaolin_Monk_Master_Super_Speed.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6372920 Jan  2  2016 /home2/kozerus/public_html/kb/v/kt/THE_DAY_THE_EARTH_STOOD_STILL_-_1951_KLAATU_S_FINAL_SPEECH.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 42411732 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/Willem_de_Thouars,_Kun_Tao_Silat,_1996_Gulfport_School_of_Ta-0.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 30111934 Sep  9  2017 /home2/kozerus/public_html/kb/v/kt/cgi_quantum_jump_hayk_sahakyants.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 42891308 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/Willem_de_Thouars,_Kun_Tao_Silat,_1996_Gulfport_School_of_Ta-1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 18135948 May 31  2015 /home2/kozerus/public_html/kb/v/kt/baguazhang_turning_the_circle_tree.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 112028 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_033.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6158888 Sep 18  2011 /home2/kozerus/public_html/kb/v/kt/wudan_vibrating_palm.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 148629157 Dec 28  2015 /home2/kozerus/public_html/kb/v/kt/S01E23_the_testament_of_arkadia.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 214580 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_022.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22698632 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_037.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 168799 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_014.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 43618160 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/Willem_de_Thouars,_Kun_Tao_Silat,_1996_Gulfport_School_of_Ta-2.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 194214560 Apr 27 12:26 /home2/kozerus/public_html/kb/v/kt/dethouars_willem_de_thouars_uncle_bill_in_Verona_NJ_1-11-18.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 29134240 Aug 31  2017 /home2/kozerus/public_html/kb/v/kt/funny_monkeys_vs_dogs_cats_compilation_2017.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 37434991 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/GOATS_DECLASSIFIED__The_True_Story_Behind_The_Men_Who_Stare_.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 322496384 Oct 20  2013 /home2/kozerus/public_html/kb/v/kt/yogis_Of_Tibet_-_Rare_Documentary.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9408541 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/femme_pencak_silat.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 33515670 Apr 27 12:26 /home2/kozerus/public_html/kb/v/kt/willem_de_thouars_kuntao_silat_1996_gulfport_School_of_ta.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16375006 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/Grand_Master_TRAN_TIEN_-_Vietnam_Kung_Fu.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 672098 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_013.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 488527186 Jan 28  2017 /home2/kozerus/public_html/kb/v/kt/master_ken_Seminar_uk_2013.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31664794 May 31  2015 /home2/kozerus/public_html/kb/v/kt/000_Pakua_master_of_94_year_s_old.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3564857 Feb 28  2010 /home2/kozerus/public_html/kb/v/kt/kt_000229_007.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5069486 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/Aikido_-_Demo_by_founder_-_Moriteru_Uesiba.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13441441 Dec 29  2015 /home2/kozerus/public_html/kb/v/kt/6_Magic_Moves_-_To_Win_a_STREET_FIGHT.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4742961 Feb 20  2015 /home2/kozerus/public_html/kb/v/ink spots/The Ink Spots - We'll Meet Again.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5827821 Feb 20  2015 /home2/kozerus/public_html/kb/v/ink spots/The Ink spots -  I don't want to set the world on fire.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 8023649 Feb 20  2015 /home2/kozerus/public_html/kb/v/ink spots/The Ink Spots - Address Unknown.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 385775 Jan  2  2016 /home2/kozerus/public_html/kb/v/Mary Tyler Moore/PAPA-OOM-MOW-MOW!.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 75395435 Jan  8  2016 /home2/kozerus/public_html/kb/v/Mary Tyler Moore/The Mary Tyler Moore Show S06E07 Chuckles Bites the Dust.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3076365 Jan  2  2016 /home2/kozerus/public_html/kb/v/Mary Tyler Moore/Big Chuck & Lil John - A Half A Head Of Lettuce.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 18061574 Jan  8  2016 /home2/kozerus/public_html/kb/v/Mary Tyler Moore/Mary Tyler Moore ugly green dress.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73722507 Jan  8  2016 /home2/kozerus/public_html/kb/v/Mary Tyler Moore/The Mary Tyler Moore Show S06E13 The Happy Homemaker Takes Lou Home.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 84692378 Jan  8  2016 /home2/kozerus/public_html/kb/v/Mary Tyler Moore/The Mary Tyler Moore Show S05E01 Will Mary Richards Go to Jail.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6269157 Apr 22 15:27 /home2/kozerus/public_html/index6.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 65434528 Apr 23 07:22 /home2/kozerus/public_html/index3.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5282800 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/9557_fiona_runs_201506.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 22 15:48 /home2/kozerus/public_html/ko_jtf/kb/v/index1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14061783 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/jtfinc_9559_byrd_trustee_threat_201505.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 28  2017 /home2/kozerus/public_html/ko_jtf/kb/v/jtdfinc_byrd2013.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16294133 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/jtfinc_9558_byrd_trustee_threat_201505.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 11 11:48 /home2/kozerus/public_html/ko_jtf/kb/v/koh5.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11312337 Jan  1  2016 /home2/kozerus/public_html/ko_jtf/kb/v/doghead_video.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 28  2017 /home2/kozerus/public_html/ko_jtf/kb/v/ka1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 28  2017 /home2/kozerus/public_html/ko_jtf/kb/v/ko_jtf.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27044304 Apr 22 15:49 /home2/kozerus/public_html/ko_jtf/kb/v/index2.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5282800 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/index6.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16294133 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/index5.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14061783 Apr 23 10:11 /home2/kozerus/public_html/ko_jtf/kb/v/9559_byrd_trustee_threat_201505.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5282800 Apr 23 10:16 /home2/kozerus/public_html/ko_jtf/kb/v/jtf31_fiona_runs_201506.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16294133 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/9558_byrd_trustee_threat_201505.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27044304 Apr 22 15:48 /home2/kozerus/public_html/ko_jtf/kb/v/index3.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 39401124 Jan  1  2016 /home2/kozerus/public_html/ko_jtf/kb/v/Huckleberry_Hound_17_Barbeque_Hound.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16612288 Apr  7 22:10 /home2/kozerus/public_html/ko_jtf/kb/v/index.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14061783 May 30  2016 /home2/kozerus/public_html/ko_jtf/kb/v/index4.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9480445 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #16 114-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25825959 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #14 104-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20500207 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #619 224-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 33882968 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #1256 94-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #7 254-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 28592858 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #10 24-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16738066 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #731 274-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4422709 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #941 334-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73923861 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #6 214-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14259186 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #497 154-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 113923214 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #369 134-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9952926 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #12 64-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4610575 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #536 174-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6330377 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #677 244-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 91358716 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #545 194-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13822877 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #939 314-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #560 204-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6711904 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #486 144-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21780272 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #940 324-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20574460 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #1233 74-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20199768 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #1011 44-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27461208 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #103 54-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 19432819 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #241 124-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 8675932 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #1234 84-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 51485833 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #846 284-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22210045 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #525 164-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 2136552 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #934 304-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11587722 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #933 294-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14519730 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #629 234-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 86012765 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #98 344-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 23834365 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #723 264-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4895205 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #100 34-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 47676266 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%253A28 AM/Clip #544 184-27-1710%253A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20199768 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #1011 44-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16738066 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #731 274-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 86012765 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #98 344-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6330377 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #677 244-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14259186 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #497 154-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 2136552 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #934 304-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 8675932 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #1234 84-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 19432819 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #241 124-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 33882968 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #1256 94-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 28592858 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #10 24-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4610575 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #536 174-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22210045 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #525 164-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9952926 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #12 64-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4422709 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #941 334-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20574460 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #1233 74-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6711904 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #486 144-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20500207 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #619 224-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #560 204-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 113923214 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #369 134-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9480445 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #16 114-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11587722 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #933 294-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 23834365 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #723 264-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25825959 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #14 104-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21780272 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #940 324-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 91358716 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #545 194-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 51485833 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #846 284-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 47676266 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #544 184-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4895205 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #100 34-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73923861 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #6 214-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #7 254-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14519730 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #629 234-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27461208 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #103 54-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13822877 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710:28 AM/Clip #939 314-27-1710:28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22210045 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #525 164-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 47676266 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #544 184-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 91358716 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #545 194-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #7 254-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20500207 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #619 224-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 23834365 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #723 264-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16738066 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #731 274-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9952926 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #12 64-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4610575 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #536 174-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14259186 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #497 154-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14519730 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #629 234-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 33882968 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #1256 94-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9480445 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #16 114-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 8675932 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #1234 84-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 86012765 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #98 344-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 113923214 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #369 134-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13822877 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #939 314-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21780272 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #940 324-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #560 204-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11587722 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #933 294-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20574460 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #1233 74-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25825959 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #14 104-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 2136552 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #934 304-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4895205 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #100 34-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 28592858 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #10 24-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 19432819 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #241 124-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6711904 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #486 144-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20199768 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #1011 44-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 51485833 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #846 284-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4422709 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #941 334-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6330377 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #677 244-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73923861 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #6 214-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27461208 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-1710%3A28 AM/Clip #103 54-27-1710%3A28 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13097183 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04048_20150716_0641.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 82620945 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04056_20150716_0646_Josh_Jackie_yelling.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9262725 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04054_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 36132332 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04052_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31360598 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04057_20150716_0701.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 60571867 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04046_20150716_0640_Jackie_yelling_at_Josh.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25746787 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04062_20150716_0738.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27839588 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04049_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 52040510 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04044_20150716_0634.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21026672 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04043_20150716_0616.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15880534 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04051_20150716_0643.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3411516 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04050_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22370869 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04065_20150716_0815.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15932099 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04053_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9456645 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04064_20150716_0813.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5407155 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04063_20150716_0812.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25250767 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04055_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14717804 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04045_20150716_0635.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5779527 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04059_20150716_0709.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 17691018 May 29  2016 /home2/kozerus/public_html/ko_jtf/kb/sd_20150720/mp4_20150716/04066_20150716_0816.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 91358716 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #545 194-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20500207 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #619 224-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 2136552 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #934 304-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6711904 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #486 144-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 51485833 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #846 284-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4610575 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #536 174-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13822877 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #939 314-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14259186 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #497 154-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 86012765 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #98 344-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20199768 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #1011 44-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9480445 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #16 114-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 8675932 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #1234 84-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14519730 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #629 234-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11587722 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #933 294-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16738066 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #731 274-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #7 254-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25825959 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #14 104-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22210045 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #525 164-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 10753035 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #560 204-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 28592858 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #10 24-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4422709 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #941 334-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 4895205 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #100 34-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21780272 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #940 324-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73923861 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #6 214-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 47676266 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #544 184-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27461208 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #103 54-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 20574460 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #1233 74-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 23834365 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #723 264-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9952926 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #12 64-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6330377 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #677 244-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 33882968 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #1256 94-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 113923214 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #369 134-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 19432819 Apr 27  2017 /home2/kozerus/public_html/ko_jtf/kb_ko_jtft/img/ko_jtf_kb_mov_clip/Clip #6 214-27-171028 AM/Clip #241 124-27-171028 AM.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9262725 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent1 2/04054_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 36132332 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent1 2/04052_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3411516 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent1 2/04050_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13097183 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04048_20150716_0641.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 82620945 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04056_20150716_0646_Josh_Jackie_yelling.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9262725 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent1/04054_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 36132332 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent1/04052_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3411516 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent1/04050_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 60571867 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04046_20150716_0640_Jackie_yelling_at_Josh.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27839588 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04049_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 52040510 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04044_20150716_0634.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15880534 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04051_20150716_0643.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15932099 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/04053_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25250767 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/mp4_20150716/mp4_email_sent2/04055_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11312337 Mar 23  2016 /home2/kozerus/public_html/ko_jtf/wg/videos_to_lighten_the_mood/executive_summary_doghead_video 3-23-167:38 PM1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11312337 Mar 23  2016 /home2/kozerus/public_html/ko_jtf/wg/videos_to_lighten_the_mood/executive_summary_doghead_video 3-23-16738 PM1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 39401124 Jan  1  2016 /home2/kozerus/public_html/ko_jtf/wg/videos_to_lighten_the_mood/Huckleberry_Hound_17_Barbeque_Hound.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11312337 Mar 23  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/videos_to_lighten_the_mood/executive_summary_doghead_video 3-23-167:38 PM1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 11312337 Mar 23  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/videos_to_lighten_the_mood/executive_summary_doghead_video 3-23-16738 PM1.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 39401124 Jan  1  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/videos_to_lighten_the_mood/Huckleberry_Hound_17_Barbeque_Hound.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13449559 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150806/mt4_20150806/3638_josh_walkin_house_20150807.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 7040883 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150806/mt4_20150806/3637_car_drivein_lights_off_20150807.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31544632 May 31  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00023_20150919_1910.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21808203 May 31  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00027_20150919_2205_josh_walking.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 66029185 May 31  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00025_20150919_1947.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3579125 May 31  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00026_20150919_2102.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 19702589 May 31  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919pm/mp4_20150919pm/00028_20150919_2230.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 420498 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150928/mp4_20150928/0471_20150928_0737.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 7031394 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150928/mp4_20150928/0472_20150928_0737.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 6913214 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150928/mp4_20150928/0475_20150928_0747.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 13097183 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04048_20150716_0641.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 82620945 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04056_20150716_0646_Josh_Jackie_yelling.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9262725 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04054_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 36132332 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04052_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31360598 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04057_20150716_0701.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 60571867 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04046_20150716_0640_Jackie_yelling_at_Josh.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25746787 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04062_20150716_0738.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 27839588 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04049_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 52040510 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04044_20150716_0634.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 21026672 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04043_20150716_0616.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15880534 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04051_20150716_0643.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 3411516 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04050_20150716_0642.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 22370869 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04065_20150716_0815.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 15932099 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04053_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9456645 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04064_20150716_0813.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5407155 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04063_20150716_0812.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 25250767 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04055_20150716_0644.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 14717804 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04045_20150716_0635.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 5779527 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04059_20150716_0709.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 17691018 May 29  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150720/mp4_20150716/04066_20150716_0816.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 45350757 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00042_20150919_1520.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 202310978 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00045_20150919_1601.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 73009607 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00041_20150919_1311.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 31348085 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00036_20150919_1235.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 79293857 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00043_20150919_1530.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 49277911 May 30  2016 /home2/kozerus/public_html/ko_jtf/wg/pictures_for_court_20160602/court_pics_videos_20160602/sd_20150919am/mp4_20150919am/00037_20150919_1235.mp4";

			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 16612288 Apr  7 22:10 /home2/kozerus/public_html/index.mp4";
			ddlist[j++] = "-rw-r--r-- 1 kozerus kozerus 9731466 Apr 16 11:57 /home2/kozerus/public_html/index4.mp4";
			for( j=0; j< ddlist.length; j++ ) {
				document.write( "ddlist["+j+"]="+ddlist[j]; );
				}
			</script>



<script name="h5utils_js" >
// For discussion and comments, see: http://remysharp.com/2009/01/07/html5-enabling-script/
/*@cc_on'abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video'.replace(/\w+/g,function(n){document.createElement(n)})@*/

var addEvent = (function () {
  if (document.addEventListener) {
    return function (el, type, fn) {
      if (el && el.nodeName || el === window) {
        el.addEventListener(type, fn, false);
      } else if (el && el.length) {
        for (var i = 0; i < el.length; i++) {
          addEvent(el[i], type, fn);
        }
      }
    };
  } else {
    return function (el, type, fn) {
      if (el && el.nodeName || el === window) {
        el.attachEvent('on' + type, function () { return fn.call(el, window.event); });
      } else if (el && el.length) {
        for (var i = 0; i < el.length; i++) {
          addEvent(el[i], type, fn);
        }
      }
    };
  }
})();

(function () {

var pre = document.createElement('pre');
pre.id = "view-source"

// private scope to avoid conflicts with demos
addEvent(window, 'click', function (event) {
  if (event.target.hash == '#view-source') {
    // event.preventDefault();
    if (!document.getElementById('view-source')) {
      // pre.innerHTML = ('<!DOCTYPE html>\n<html>\n' + document.documentElement.innerHTML + '\n</html>').replace(/[<>]/g, function (m) { return {'<':'&lt;','>':'&gt;'}[m]});
      var xhr = new XMLHttpRequest();

      // original source - rather than rendered source
      xhr.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          pre.innerHTML = this.responseText.replace(/[<>]/g, function (m) { return {'<':'&lt;','>':'&gt;'}[m]});
          prettyPrint();
        }
      };

      document.body.appendChild(pre);
      // really need to be sync? - I like to think so
      xhr.open("GET", location.origin + '/demos' + window.location.pathname.replace(/\/$/, '') + '.html', true);
      xhr.send();
    }
    document.body.className = 'view-source';

    var sourceTimer = setInterval(function () {
      if (window.location.hash != '#view-source') {
        clearInterval(sourceTimer);
        document.body.className = '';
      }
    }, 200);
  }
});

})();




	</script>

<style type="text/css">
li {
  list-style: none;
}

li a {
  text-decoration: none;
  color: #000;
  margin: 10px;
  width: 150px;
  border: 3px dashed #999;
  background: #eee;
  padding: 10px;
  display: block;
}

*[draggable=true] {
  -moz-user-select:none;
  -khtml-user-drag: element;
  cursor: move;
}

*:-khtml-drag {
  background-color: rgba(238,238,238, 0.5);
}

li a:hover:after {
  content: ' (drag me)';
}

ul {
  margin-left: 200px;
  min-height: 300px;
}

li.over {
  border-color: #333;
  background: #ccc;
}

#bin {
  background: url(images/bin.jpg) top right no-repeat;
  height: 250px;
  width: 166px;
  float: left;
  border: 5px solid #000;
  position: relative;
  margin-top: 0;
}

#bin.over {
  background: url(images/bin.jpg) top left no-repeat;
}

#bin p {
  font-weight: bold;
  text-align: center;
  position: absolute;
  bottom: 20px;
  width: 166px;
  font-size: 32px;
  color: #fff;
  text-shadow: #000 2px 2px 2px;
}
</style>



<div name="div_drop_id">
<article>
  <p>Drag the list items over the dustbin, and drop them to have the bin eat the item</p>
  <div id="bin"></div>
  <ul>
    <li><a id="one" href="#">one</a></li>
    <li><a href="#" id="two">two</a></li>
    <li><a href="#" id="three">three</a></li>
    <li><a href="#" id="four">four</a></li>
    <li><a href="#" id="five">five</a></li>
  </ul>
</article>
	</div>
  <script name="script_drop_id" >

  var eat = ['yum!', 'gulp', 'burp!', 'nom'];
  var yum = document.createElement('p');
  var msie = /*@cc_on!@*/0;
  yum.style.opacity = 1;

  var links = document.querySelectorAll('li > a'), el = null;
  for (var i = 0; i < links.length; i++) {
    el = links[i];
  
    el.setAttribute('draggable', 'true');
  
    addEvent(el, 'dragstart', function (e) {
      e.dataTransfer.effectAllowed = 'copy'; // only dropEffect='copy' will be dropable
      e.dataTransfer.setData('Text', this.id); // required otherwise doesn't work
    });
  }

  var bin = document.querySelector('#bin');

  addEvent(bin, 'dragover', function (e) {
    if (e.preventDefault) e.preventDefault(); // allows us to drop
    this.className = 'over';
    e.dataTransfer.dropEffect = 'copy';
    return false;
  });

  // to get IE to work
  addEvent(bin, 'dragenter', function (e) {
    this.className = 'over';
    return false;
  });

  addEvent(bin, 'dragleave', function () {
    this.className = '';
  });

  addEvent(bin, 'drop', function (e) {
    if (e.stopPropagation) e.stopPropagation(); // stops the browser from redirecting...why???

    var el = document.getElementById(e.dataTransfer.getData('Text'));
    
    el.parentNode.removeChild(el);

    // stupid nom text + fade effect
    bin.className = '';
    yum.innerHTML = eat[parseInt(Math.random() * eat.length)];

    var y = yum.cloneNode(true);
    bin.appendChild(y);

    setTimeout(function () {
      var t = setInterval(function () {
        if (y.style.opacity <= 0) {
          if (msie) { // don't bother with the animation
            y.style.display = 'none';
          }
          clearInterval(t); 
        } else {
          y.style.opacity -= 0.1;
        }
      }, 50);
    }, 250);

    return false;
  });

  </script>

//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer