From f4a7f5914edd7c016e450c2a2383d000b481b16c Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Sun, 18 Sep 2022 22:22:41 +0200 Subject: [PATCH] All: Update Mermaid 8.13.9 to 9.1.7 (#6849) --- packages/app-mobile/pluginAssets/index.js | 2 +- .../mermaid/mermaid.min.js.base64.js | 2 +- .../renderer/assets/mermaid/mermaid.min.js | 2 +- packages/renderer/package.json | 2 +- yarn.lock | 44 +++++++++---------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/app-mobile/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js index 5e6143c86..f546dbab1 100644 --- a/packages/app-mobile/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,5 @@ module.exports = { -hash:"ea13a22d0df59339b671f6b5700e2914", files: { +hash:"abde4aa0d823e75ca24be9dd0e8c971a", files: { 'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' }, diff --git a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js index c1f81ab05..7b489c73f 100644 --- a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js +++ b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js @@ -1 +1 @@ -module.exports = `LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgbWVybWFpZC5taW4uanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4oKCk9Pnt2YXIgdD17MTM2MjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsNl0sbj1bMSw3XSxyPVsxLDhdLGk9WzEsOV0sYT1bMSwxMl0sbz1bMSwxMV0scz1bMSwxNSwyNF0sYz1bMSwxOV0sdT1bMSwzMV0sbD1bMSwzNF0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNV0scD1bMSwzNl0seT1bMSwzN10sZz1bMSwzOF0sbT1bMSw0MV0sdj1bMSw0Ml0sYj1bMSw0M10sXz1bMSw0NF0seD1bMTUsMjRdLHc9WzEsNTZdLGs9WzEsNTddLFQ9WzEsNThdLEU9WzEsNTldLEM9WzEsNjBdLFM9WzEsNjFdLEE9WzE1LDI0LDMxLDM4LDM5LDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyXSxNPVsxNSwyNCwyOSwzMSwzOCwzOSw0Myw0Nyw1MCw1MSw1Miw1Myw1NCw1NSw2MCw2Miw3Nyw3OCw3OSw4MF0sTj1bNyw4LDksMTAsMTUsMTgsMjIsMjRdLEQ9WzQ3LDc3LDc4LDc5LDgwXSxPPVs0Nyw1NCw1NSw3Nyw3OCw3OSw4MF0sQj1bNDcsNTAsNTEsNTIsNTMsNzcsNzgsNzksODBdLEw9WzE1LDI0LDMxXSxJPVsxLDkzXSxSPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aXZlOjYsZGlyZWN0aW9uX3RiOjcsZGlyZWN0aW9uX2J0OjgsZGlyZWN0aW9uX3JsOjksZGlyZWN0aW9uX2xyOjEwLGdyYXBoQ29uZmlnOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCxORVdMSU5FOjE1LCI6IjoxNixhcmdEaXJlY3RpdmU6MTcsb3Blbl9kaXJlY3RpdmU6MTgsdHlwZV9kaXJlY3RpdmU6MTksYXJnX2RpcmVjdGl2ZToyMCxjbG9zZV9kaXJlY3RpdmU6MjEsQ0xBU1NfRElBR1JBTToyMixzdGF0ZW1lbnRzOjIzLEVPRjoyNCxzdGF0ZW1lbnQ6MjUsY2xhc3NOYW1lOjI2LGFscGhhTnVtVG9rZW46MjcsY2xhc3NMaXRlcmFsTmFtZToyOCxHRU5FUklDVFlQRToyOSxyZWxhdGlvblN0YXRlbWVudDozMCxMQUJFTDozMSxjbGFzc1N0YXRlbWVudDozMixtZXRob2RTdGF0ZW1lbnQ6MzMsYW5ub3RhdGlvblN0YXRlbWVudDozNCxjbGlja1N0YXRlbWVudDozNSxjc3NDbGFzc1N0YXRlbWVudDozNixDTEFTUzozNyxTVFlMRV9TRVBBUkFUT1I6MzgsU1RSVUNUX1NUQVJUOjM5LG1lbWJlcnM6NDAsU1RSVUNUX1NUT1A6NDEsQU5OT1RBVElPTl9TVEFSVDo0MixBTk5PVEFUSU9OX0VORDo0MyxNRU1CRVI6NDQsU0VQQVJBVE9SOjQ1LHJlbGF0aW9uOjQ2LFNUUjo0NyxyZWxhdGlvblR5cGU6NDgsbGluZVR5cGU6NDksQUdHUkVHQVRJT046NTAsRVhURU5TSU9OOjUxLENPTVBPU0lUSU9OOjUyLERFUEVOREVOQ1k6NTMsTElORTo1NCxET1RURURfTElORTo1NSxDQUxMQkFDSzo1NixMSU5LOjU3LExJTktfVEFSR0VUOjU4LENMSUNLOjU5LENBTExCQUNLX05BTUU6NjAsQ0FMTEJBQ0tfQVJHUzo2MSxIUkVGOjYyLENTU0NMQVNTOjYzLGNvbW1lbnRUb2tlbjo2NCx0ZXh0VG9rZW46NjUsZ3JhcGhDb2RlVG9rZW5zOjY2LHRleHROb1RhZ3NUb2tlbjo2NyxUQUdTVEFSVDo2OCxUQUdFTkQ6NjksIj09Ijo3MCwiLS0iOjcxLFBDVDo3MixERUZBVUxUOjczLFNQQUNFOjc0LE1JTlVTOjc1LGtleXdvcmRzOjc2LFVOSUNPREVfVEVYVDo3NyxOVU06NzgsQUxQSEE6NzksQlFVT1RFX1NUUjo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiZGlyZWN0aW9uX3RiIiw4OiJkaXJlY3Rpb25fYnQiLDk6ImRpcmVjdGlvbl9ybCIsMTA6ImRpcmVjdGlvbl9sciIsMTU6Ik5FV0xJTkUiLDE2OiI6IiwxODoib3Blbl9kaXJlY3RpdmUiLDE5OiJ0eXBlX2RpcmVjdGl2ZSIsMjA6ImFyZ19kaXJlY3RpdmUiLDIxOiJjbG9zZV9kaXJlY3RpdmUiLDIyOiJDTEFTU19ESUFHUkFNIiwyNDoiRU9GIiwyOToiR0VORVJJQ1RZUEUiLDMxOiJMQUJFTCIsMzc6IkNMQVNTIiwzODoiU1RZTEVfU0VQQVJBVE9SIiwzOToiU1RSVUNUX1NUQVJUIiw0MToiU1RSVUNUX1NUT1AiLDQyOiJBTk5PVEFUSU9OX1NUQVJUIiw0MzoiQU5OT1RBVElPTl9FTkQiLDQ0OiJNRU1CRVIiLDQ1OiJTRVBBUkFUT1IiLDQ3OiJTVFIiLDUwOiJBR0dSRUdBVElPTiIsNTE6IkVYVEVOU0lPTiIsNTI6IkNPTVBPU0lUSU9OIiw1MzoiREVQRU5ERU5DWSIsNTQ6IkxJTkUiLDU1OiJET1RURURfTElORSIsNTY6IkNBTExCQUNLIiw1NzoiTElOSyIsNTg6IkxJTktfVEFSR0VUIiw1OToiQ0xJQ0siLDYwOiJDQUxMQkFDS19OQU1FIiw2MToiQ0FMTEJBQ0tfQVJHUyIsNjI6IkhSRUYiLDYzOiJDU1NDTEFTUyIsNjY6ImdyYXBoQ29kZVRva2VucyIsNjg6IlRBR1NUQVJUIiw2OToiVEFHRU5EIiw3MDoiPT0iLDcxOiItLSIsNzI6IlBDVCIsNzM6IkRFRkFVTFQiLDc0OiJTUEFDRSIsNzU6Ik1JTlVTIiw3Njoia2V5d29yZHMiLDc3OiJVTklDT0RFX1RFWFQiLDc4OiJOVU0iLDc5OiJBTFBIQSIsODA6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzMsMl0sWzUsMV0sWzUsMV0sWzUsMV0sWzUsMV0sWzQsMV0sWzYsNF0sWzYsNl0sWzEyLDFdLFsxMywxXSxbMTcsMV0sWzE0LDFdLFsxMSw0XSxbMjMsMV0sWzIzLDJdLFsyMywzXSxbMjYsMV0sWzI2LDFdLFsyNiwyXSxbMjYsMl0sWzI2LDJdLFsyNSwxXSxbMjUsMl0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFszMiwyXSxbMzIsNF0sWzMyLDVdLFszMiw3XSxbMzQsNF0sWzQwLDFdLFs0MCwyXSxbMzMsMV0sWzMzLDJdLFszMywxXSxbMzMsMV0sWzMwLDNdLFszMCw0XSxbMzAsNF0sWzMwLDVdLFs0NiwzXSxbNDYsMl0sWzQ2LDJdLFs0NiwxXSxbNDgsMV0sWzQ4LDFdLFs0OCwxXSxbNDgsMV0sWzQ5LDFdLFs0OSwxXSxbMzUsM10sWzM1LDRdLFszNSwzXSxbMzUsNF0sWzM1LDRdLFszNSw1XSxbMzUsM10sWzM1LDRdLFszNSw0XSxbMzUsNV0sWzM1LDNdLFszNSw0XSxbMzUsNF0sWzM1LDVdLFszNiwzXSxbNjQsMV0sWzY0LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzI4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDU6ci5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA2OnIuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNzpyLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDExOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTQ6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiY2xhc3MiKTticmVhaztjYXNlIDE5OmNhc2UgMjA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1hW3MtMV0rIn4iK2Fbc107YnJlYWs7Y2FzZSAyNDpyLmFkZFJlbGF0aW9uKGFbc10pO2JyZWFrO2Nhc2UgMjU6YVtzLTFdLnRpdGxlPXIuY2xlYW51cExhYmVsKGFbc10pLHIuYWRkUmVsYXRpb24oYVtzLTFdKTticmVhaztjYXNlIDMzOnIuYWRkQ2xhc3MoYVtzXSk7YnJlYWs7Y2FzZSAzNDpyLmFkZENsYXNzKGFbcy0yXSksci5zZXRDc3NDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAzNTpyLmFkZENsYXNzKGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzY6ci5hZGRDbGFzcyhhW3MtNV0pLHIuc2V0Q3NzQ2xhc3MoYVtzLTVdLGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy01XSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzc6ci5hZGRBbm5vdGF0aW9uKGFbc10sYVtzLTJdKTticmVhaztjYXNlIDM4OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAzOTphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDQwOmNhc2UgNDI6Y2FzZSA0MzpicmVhaztjYXNlIDQxOnIuYWRkTWVtYmVyKGFbcy0xXSxyLmNsZWFudXBMYWJlbChhW3NdKSk7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9e2lkMTphW3MtMl0saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0xXSxyZWxhdGlvblRpdGxlMTphW3MtMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDQ2OnRoaXMuJD17aWQxOmFbcy0zXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9e2lkMTphW3MtNF0saWQyOmFbc10scmVsYXRpb246YVtzLTJdLHJlbGF0aW9uVGl0bGUxOmFbcy0zXSxyZWxhdGlvblRpdGxlMjphW3MtMV19O2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXt0eXBlMTphW3MtMl0sdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXt0eXBlMTphW3MtMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNTI6dGhpcy4kPXIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXIucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDU0OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDU1OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPXIubGluZVR5cGUuTElORTticmVhaztjYXNlIDU3OnRoaXMuJD1yLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNTg6Y2FzZSA2NDp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA1OTpjYXNlIDY1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA2MDpjYXNlIDY4OnRoaXMuJD1hW3MtMl0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYxOmNhc2UgNjk6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYyOmNhc2UgNzA6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDYzOmNhc2UgNzE6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy00XSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA3MjpyLnNldENzc0NsYXNzKGFbcy0xXSxhW3NdKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjo0LDc6ZSw4Om4sOTpyLDEwOmksMTE6NSwxMjoxMCwxODphLDIyOm99LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MzoxMyw0OjIsNTozLDY6NCw3OmUsODpuLDk6ciwxMDppLDExOjUsMTI6MTAsMTg6YSwyMjpvfSx7MTpbMiw4XX0sdChzLFsyLDRdKSx0KHMsWzIsNV0pLHQocyxbMiw2XSksdChzLFsyLDddKSx7MTM6MTQsMTk6WzEsMTVdfSx7MTU6WzEsMTZdfSx7MTk6WzIsMTFdfSx7MTpbMiwzXX0sezE0OjE3LDE2OlsxLDE4XSwyMTpjfSx0KFsxNiwyMV0sWzIsMTJdKSx7NToyOSw2OjI4LDc6ZSw4Om4sOTpyLDEwOmksMTI6MTAsMTg6YSwyMzoyMCwyNToyMSwyNjozMCwyNzozOSwyODo0MCwzMDoyMiwzMjoyMywzMzoyNCwzNDoyNSwzNToyNiwzNjoyNywzNzp1LDQyOmwsNDQ6aCw0NTpmLDU2OmQsNTc6cCw1OTp5LDYzOmcsNzc6bSw3ODp2LDc5OmIsODA6X30sezE1OlsxLDQ1XX0sezE3OjQ2LDIwOlsxLDQ3XX0sezE1OlsyLDE0XX0sezI0OlsxLDQ4XX0sezE1OlsxLDQ5XSwyNDpbMiwxNl19LHQoeCxbMiwyNF0sezMxOlsxLDUwXX0pLHQoeCxbMiwyNl0pLHQoeCxbMiwyN10pLHQoeCxbMiwyOF0pLHQoeCxbMiwyOV0pLHQoeCxbMiwzMF0pLHQoeCxbMiwzMV0pLHQoeCxbMiwzMl0pLHQoeCxbMiw0MF0sezQ2OjUxLDQ4OjU0LDQ5OjU1LDMxOlsxLDUzXSw0NzpbMSw1Ml0sNTA6dyw1MTprLDUyOlQsNTM6RSw1NDpDLDU1OlN9KSx7MjY6NjIsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sdCh4LFsyLDQyXSksdCh4LFsyLDQzXSksezI3OjYzLDc3Om0sNzg6diw3OTpifSx7MjY6NjQsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sezI2OjY1LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOl99LHsyNjo2NiwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx7NDc6WzEsNjddfSx0KEEsWzIsMTldLHsyNzozOSwyODo0MCwyNjo2OCwyOTpbMSw2OV0sNzc6bSw3ODp2LDc5OmIsODA6X30pLHQoQSxbMiwyMF0sezI5OlsxLDcwXX0pLHQoTSxbMiw4Nl0pLHQoTSxbMiw4N10pLHQoTSxbMiw4OF0pLHQoWzE1LDI0LDI5LDMxLDM4LDM5LDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyXSxbMiw4OV0pLHQoTixbMiw5XSksezE0OjcxLDIxOmN9LHsyMTpbMiwxM119LHsxOlsyLDE1XX0sezU6MjksNjoyOCw3OmUsODpuLDk6ciwxMDppLDEyOjEwLDE4OmEsMjM6NzIsMjQ6WzIsMTddLDI1OjIxLDI2OjMwLDI3OjM5LDI4OjQwLDMwOjIyLDMyOjIzLDMzOjI0LDM0OjI1LDM1OjI2LDM2OjI3LDM3OnUsNDI6bCw0NDpoLDQ1OmYsNTY6ZCw1NzpwLDU5OnksNjM6Zyw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KHgsWzIsMjVdKSx7MjY6NzMsMjc6MzksMjg6NDAsNDc6WzEsNzRdLDc3Om0sNzg6diw3OTpiLDgwOl99LHs0Njo3NSw0ODo1NCw0OTo1NSw1MDp3LDUxOmssNTI6VCw1MzpFLDU0OkMsNTU6U30sdCh4LFsyLDQxXSksezQ5Ojc2LDU0OkMsNTU6U30sdChELFsyLDUxXSx7NDg6NzcsNTA6dyw1MTprLDUyOlQsNTM6RX0pLHQoTyxbMiw1Ml0pLHQoTyxbMiw1M10pLHQoTyxbMiw1NF0pLHQoTyxbMiw1NV0pLHQoQixbMiw1Nl0pLHQoQixbMiw1N10pLHQoeCxbMiwzM10sezM4OlsxLDc4XSwzOTpbMSw3OV19KSx7NDM6WzEsODBdfSx7NDc6WzEsODFdfSx7NDc6WzEsODJdfSx7NjA6WzEsODNdLDYyOlsxLDg0XX0sezI3Ojg1LDc3Om0sNzg6diw3OTpifSx0KEEsWzIsMjFdKSx0KEEsWzIsMjJdKSx0KEEsWzIsMjNdKSx7MTU6WzEsODZdfSx7MjQ6WzIsMThdfSx0KEwsWzIsNDRdKSx7MjY6ODcsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sezI2Ojg4LDI3OjM5LDI4OjQwLDQ3OlsxLDg5XSw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KEQsWzIsNTBdLHs0ODo5MCw1MDp3LDUxOmssNTI6VCw1MzpFfSksdChELFsyLDQ5XSksezI3OjkxLDc3Om0sNzg6diw3OTpifSx7NDA6OTIsNDQ6SX0sezI2Ojk0LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOl99LHQoeCxbMiw1OF0sezQ3OlsxLDk1XX0pLHQoeCxbMiw2MF0sezQ3OlsxLDk3XSw1ODpbMSw5Nl19KSx0KHgsWzIsNjRdLHs0NzpbMSw5OF0sNjE6WzEsOTldfSksdCh4LFsyLDY4XSx7NDc6WzEsMTAxXSw1ODpbMSwxMDBdfSksdCh4LFsyLDcyXSksdChOLFsyLDEwXSksdChMLFsyLDQ2XSksdChMLFsyLDQ1XSksezI2OjEwMiwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KEQsWzIsNDhdKSx0KHgsWzIsMzRdLHszOTpbMSwxMDNdfSksezQxOlsxLDEwNF19LHs0MDoxMDUsNDE6WzIsMzhdLDQ0Okl9LHQoeCxbMiwzN10pLHQoeCxbMiw1OV0pLHQoeCxbMiw2MV0pLHQoeCxbMiw2Ml0sezU4OlsxLDEwNl19KSx0KHgsWzIsNjVdKSx0KHgsWzIsNjZdLHs0NzpbMSwxMDddfSksdCh4LFsyLDY5XSksdCh4LFsyLDcwXSx7NTg6WzEsMTA4XX0pLHQoTCxbMiw0N10pLHs0MDoxMDksNDQ6SX0sdCh4LFsyLDM1XSksezQxOlsyLDM5XX0sdCh4LFsyLDYzXSksdCh4LFsyLDY3XSksdCh4LFsyLDcxXSksezQxOlsxLDExMF19LHQoeCxbMiwzNl0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDU6WzIsOF0sMTI6WzIsMTFdLDEzOlsyLDNdLDE5OlsyLDE0XSw0NzpbMiwxM10sNDg6WzIsMTVdLDcyOlsyLDE4XSwxMDU6WzIsMzldfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCx3LGssVCxFLEMsUyxBLE09e307Oyl7aWYodz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbd10/az10aGlzLmRlZmF1bHRBY3Rpb25zW3ddOihudWxsPT1fJiYoXz1iKCkpLGs9b1t3XSYmb1t3XVtfXSksdm9pZCAwPT09a3x8IWsubGVuZ3RofHwha1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW3ddKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYoa1swXWluc3RhbmNlb2YgQXJyYXkmJmsubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit3KyIsIHRva2VuOiAiK18pO3N3aXRjaChrWzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2goa1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LGtbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sRj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxODtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDEwO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxOTtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTY7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDIxO2Nhc2UgODpyZXR1cm4gMjA7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDE5OmJyZWFrO2Nhc2UgMTE6cmV0dXJuIDE1O2Nhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMjI7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigic3RydWN0IiksMzk7Y2FzZSAxNjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAxNzpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTtjYXNlIDIwOnJldHVybiJNRU1CRVIiO2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDYzO2Nhc2UgMjM6cmV0dXJuIDU2O2Nhc2UgMjQ6cmV0dXJuIDU3O2Nhc2UgMjU6cmV0dXJuIDU5O2Nhc2UgMjY6cmV0dXJuIDQyO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMjpjYXNlIDM1OmNhc2UgMzg6Y2FzZSA0MTpjYXNlIDQ0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMwOnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSAzMTp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDMzOnJldHVybiJTVFIiO2Nhc2UgMzQ6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDM2OnJldHVybiJCUVVPVEVfU1RSIjtjYXNlIDM3OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDM5OnJldHVybiA2MjtjYXNlIDQwOnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDQyOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gNjA7Y2FzZSA0NTpyZXR1cm4gNjE7Y2FzZSA0NjpjYXNlIDQ3OmNhc2UgNDg6Y2FzZSA0OTpyZXR1cm4gNTg7Y2FzZSA1MDpjYXNlIDUxOnJldHVybiA1MTtjYXNlIDUyOmNhc2UgNTM6cmV0dXJuIDUzO2Nhc2UgNTQ6cmV0dXJuIDUyO2Nhc2UgNTU6cmV0dXJuIDUwO2Nhc2UgNTY6cmV0dXJuIDU0O2Nhc2UgNTc6cmV0dXJuIDU1O2Nhc2UgNTg6cmV0dXJuIDMxO2Nhc2UgNTk6cmV0dXJuIDM4O2Nhc2UgNjA6cmV0dXJuIDc1O2Nhc2UgNjE6cmV0dXJuIkRPVCI7Y2FzZSA2MjpyZXR1cm4iUExVUyI7Y2FzZSA2MzpyZXR1cm4gNzI7Y2FzZSA2NDpjYXNlIDY1OnJldHVybiJFUVVBTFMiO2Nhc2UgNjY6cmV0dXJuIDc5O2Nhc2UgNjc6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDY4OnJldHVybiA3ODtjYXNlIDY5OnJldHVybiA3NztjYXNlIDcwOnJldHVybiA3NDtjYXNlIDcxOnJldHVybiAyNH19LHJ1bGVzOlsvXig/OiUlXHspLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86W3tdKS8sL14oPzokKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNsYXNzXGIpLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpbfl0pLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86W2BdKS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpocmVmW1xzXStbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnthcmdfZGlyZWN0aXZlOntydWxlczpbNyw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbNV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19hcmdzOntydWxlczpbNDQsNDVdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfbmFtZTp7cnVsZXM6WzQxLDQyLDQzXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlszOCwzOV0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsxNiwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiExfSxnZW5lcmljOntydWxlczpbMjksMzBdLGluY2x1c2l2ZTohMX0sYnFzdHJpbmc6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlszMiwzM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDksMTAsMTEsMTIsMTMsMTQsMTUsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzEsMzQsMzcsNDAsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzFdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBQKCl7dGhpcy55eT17fX1yZXR1cm4gUi5sZXhlcj1GLFAucHJvdG90eXBlPVIsUi5QYXJzZXI9UCxuZXcgUH0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDgyMTgpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sNTg5MDoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSw1XSxyPVs2LDksMTEsMjMsNDFdLGk9WzEsMTddLGE9WzEsMjBdLG89WzEsMjVdLHM9WzEsMjZdLGM9WzEsMjddLHU9WzEsMjhdLGw9WzEsMzddLGg9WzIzLDM4LDM5XSxmPVs0LDYsOSwxMSwyMyw0MV0sZD1bMzQsMzUsMzYsMzddLHA9WzIyLDI5XSx5PVsxLDU1XSxnPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNixlbnRpdHlOYW1lOjE3LHJlbFNwZWM6MTgscm9sZToxOSxCTE9DS19TVEFSVDoyMCxhdHRyaWJ1dGVzOjIxLEJMT0NLX1NUT1A6MjIsQUxQSEFOVU06MjMsYXR0cmlidXRlOjI0LGF0dHJpYnV0ZVR5cGU6MjUsYXR0cmlidXRlTmFtZToyNixhdHRyaWJ1dGVLZXlUeXBlOjI3LGF0dHJpYnV0ZUNvbW1lbnQ6MjgsQVRUUklCVVRFX1dPUkQ6MjksQVRUUklCVVRFX0tFWTozMCxDT01NRU5UOjMxLGNhcmRpbmFsaXR5OjMyLHJlbFR5cGU6MzMsWkVST19PUl9PTkU6MzQsWkVST19PUl9NT1JFOjM1LE9ORV9PUl9NT1JFOjM2LE9OTFlfT05FOjM3LE5PTl9JREVOVElGWUlORzozOCxJREVOVElGWUlORzozOSxXT1JEOjQwLG9wZW5fZGlyZWN0aXZlOjQxLHR5cGVfZGlyZWN0aXZlOjQyLGFyZ19kaXJlY3RpdmU6NDMsY2xvc2VfZGlyZWN0aXZlOjQ0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJFUl9ESUFHUkFNIiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDIwOiJCTE9DS19TVEFSVCIsMjI6IkJMT0NLX1NUT1AiLDIzOiJBTFBIQU5VTSIsMjk6IkFUVFJJQlVURV9XT1JEIiwzMDoiQVRUUklCVVRFX0tFWSIsMzE6IkNPTU1FTlQiLDM0OiJaRVJPX09SX09ORSIsMzU6IlpFUk9fT1JfTU9SRSIsMzY6Ik9ORV9PUl9NT1JFIiwzNzoiT05MWV9PTkUiLDM4OiJOT05fSURFTlRJRllJTkciLDM5OiJJREVOVElGWUlORyIsNDA6IldPUkQiLDQxOiJvcGVuX2RpcmVjdGl2ZSIsNDI6InR5cGVfZGlyZWN0aXZlIiw0MzoiYXJnX2RpcmVjdGl2ZSIsNDQ6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDVdLFsxMCw0XSxbMTAsM10sWzEwLDFdLFsxNywxXSxbMjEsMV0sWzIxLDJdLFsyNCwyXSxbMjQsM10sWzI0LDNdLFsyNCw0XSxbMjUsMV0sWzI2LDFdLFsyNywxXSxbMjgsMV0sWzE4LDNdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbMzMsMV0sWzMzLDFdLFsxOSwxXSxbMTksMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpicmVhaztjYXNlIDM6Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDE2OmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzU6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMjpyLmFkZEVudGl0eShhW3MtNF0pLHIuYWRkRW50aXR5KGFbcy0yXSksci5hZGRSZWxhdGlvbnNoaXAoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy0zXSk7YnJlYWs7Y2FzZSAxMzpyLmFkZEVudGl0eShhW3MtM10pLHIuYWRkQXR0cmlidXRlcyhhW3MtM10sYVtzLTFdKTticmVhaztjYXNlIDE0OnIuYWRkRW50aXR5KGFbcy0yXSk7YnJlYWs7Y2FzZSAxNTpyLmFkZEVudGl0eShhW3NdKTticmVhaztjYXNlIDE3OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAxODphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMV0sYXR0cmlidXRlTmFtZTphW3NdfTticmVhaztjYXNlIDIwOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMl0sYXR0cmlidXRlTmFtZTphW3MtMV0sYXR0cmlidXRlS2V5VHlwZTphW3NdfTticmVhaztjYXNlIDIxOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMl0sYXR0cmlidXRlTmFtZTphW3MtMV0sYXR0cmlidXRlQ29tbWVudDphW3NdfTticmVhaztjYXNlIDIyOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtM10sYXR0cmlidXRlTmFtZTphW3MtMl0sYXR0cmlidXRlS2V5VHlwZTphW3MtMV0sYXR0cmlidXRlQ29tbWVudDphW3NdfTticmVhaztjYXNlIDI2OmNhc2UgMzQ6dGhpcy4kPWFbc10ucmVwbGFjZSgvIi9nLCIiKTticmVhaztjYXNlIDI3OnRoaXMuJD17Y2FyZEE6YVtzXSxyZWxUeXBlOmFbcy0xXSxjYXJkQjphW3MtMl19O2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTticmVhaztjYXNlIDMxOnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAzNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzg6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDM5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImVyIil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsNDE6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDQxOm59LHsxMzo4LDQyOlsxLDldfSx7NDI6WzIsMzZdfSx7NjpbMSwxMF0sNzoxNSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OjE2LDIzOmksNDE6bn0sezE6WzIsMl19LHsxNDoxOCwxNTpbMSwxOV0sNDQ6YX0sdChbMTUsNDRdLFsyLDM3XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyMSwxMjo0LDE3OjE2LDIzOmksNDE6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxNV0sezE4OjIyLDMyOjI0LDIwOlsxLDIzXSwzNDpvLDM1OnMsMzY6YywzNzp1fSksdChbNiw5LDExLDE1LDIwLDIzLDM0LDM1LDM2LDM3LDQxXSxbMiwxNl0pLHsxMTpbMSwyOV19LHsxNjozMCw0MzpbMSwzMV19LHsxMTpbMiwzOV19LHQocixbMiw1XSksezE3OjMyLDIzOml9LHsyMTozMywyMjpbMSwzNF0sMjQ6MzUsMjU6MzYsMjk6bH0sezMzOjM4LDM4OlsxLDM5XSwzOTpbMSw0MF19LHQoaCxbMiwyOF0pLHQoaCxbMiwyOV0pLHQoaCxbMiwzMF0pLHQoaCxbMiwzMV0pLHQoZixbMiw5XSksezE0OjQxLDQ0OmF9LHs0NDpbMiwzOF19LHsxNTpbMSw0Ml19LHsyMjpbMSw0M119LHQocixbMiwxNF0pLHsyMTo0NCwyMjpbMiwxN10sMjQ6MzUsMjU6MzYsMjk6bH0sezI2OjQ1LDI5OlsxLDQ2XX0sezI5OlsyLDIzXX0sezMyOjQ3LDM0Om8sMzU6cywzNjpjLDM3OnV9LHQoZCxbMiwzMl0pLHQoZCxbMiwzM10pLHsxMTpbMSw0OF19LHsxOTo0OSwyMzpbMSw1MV0sNDA6WzEsNTBdfSx0KHIsWzIsMTNdKSx7MjI6WzIsMThdfSx0KHAsWzIsMTldLHsyNzo1MiwyODo1MywzMDpbMSw1NF0sMzE6eX0pLHQoWzIyLDI5LDMwLDMxXSxbMiwyNF0pLHsyMzpbMiwyN119LHQoZixbMiwxMF0pLHQocixbMiwxMl0pLHQocixbMiwzNF0pLHQocixbMiwzNV0pLHQocCxbMiwyMF0sezI4OjU2LDMxOnl9KSx0KHAsWzIsMjFdKSx0KFsyMiwyOSwzMV0sWzIsMjVdKSx0KHAsWzIsMjZdKSx0KHAsWzIsMjJdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMzZdLDc6WzIsMl0sMjA6WzIsMzldLDMxOlsyLDM4XSwzNzpbMiwyM10sNDQ6WzIsMThdLDQ3OlsyLDI3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LG09e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNDE7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDQyO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDQ7Y2FzZSA0OnJldHVybiA0MztjYXNlIDU6Y2FzZSA2OmNhc2UgODpjYXNlIDEzOmNhc2UgMTc6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDk6cmV0dXJuIDk7Y2FzZSAxMDpyZXR1cm4gNDA7Y2FzZSAxMTpyZXR1cm4gNDtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDIwO2Nhc2UgMTQ6cmV0dXJuIDMwO2Nhc2UgMTU6cmV0dXJuIDI5O2Nhc2UgMTY6cmV0dXJuIDMxO2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyMjtjYXNlIDE5OmNhc2UgMzI6cmV0dXJuIGUueXl0ZXh0WzBdO2Nhc2UgMjA6Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyMTpjYXNlIDI1OnJldHVybiAzNTtjYXNlIDIyOmNhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjM6cmV0dXJuIDM3O2Nhc2UgMjc6Y2FzZSAyOTpjYXNlIDMwOnJldHVybiAzODtjYXNlIDI4OnJldHVybiAzOTtjYXNlIDMxOnJldHVybiAyMztjYXNlIDMzOnJldHVybiA2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/Oltcc10rKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmVyRGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpccyspL2ksL14oPzooPzpQSyl8KD86RkspKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcfG9cYikvaSwvXig/Olx9b1xiKS9pLC9eKD86XH1cfCkvaSwvXig/Olx8XHwpL2ksL14oPzpvXHwpL2ksL14oPzpvXHspL2ksL14oPzpcfFx7KS9pLC9eKD86XC5cLikvaSwvXig/Oi0tKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzouKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sYmxvY2s6e3J1bGVzOlsxMywxNCwxNSwxNiwxNywxOCwxOV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzNdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB2KCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj1tLHYucHJvdG90eXBlPWcsZy5QYXJzZXI9dixuZXcgdn0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDgwMDkpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sMzYwMjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsOV0sbj1bMSw3XSxyPVsxLDZdLGk9WzEsOF0sYT1bMSwyMCwyMSwyMiwyMywzOCw0Nyw1OSw2MCw3OSw4MCw4MSw4Miw4Myw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLG89WzIsMTBdLHM9WzEsMjBdLGM9WzEsMjFdLHU9WzEsMjJdLGw9WzEsMjNdLGg9WzEsMzBdLGY9WzEsNTldLGQ9WzEsNDVdLHA9WzEsNDldLHk9WzEsMzNdLGc9WzEsMzRdLG09WzEsMzVdLHY9WzEsMzZdLGI9WzEsMzddLF89WzEsNTNdLHg9WzEsNjBdLHc9WzEsNDhdLGs9WzEsNTBdLFQ9WzEsNTJdLEU9WzEsNTZdLEM9WzEsNTddLFM9WzEsMzhdLEE9WzEsMzldLE09WzEsNDBdLE49WzEsNDFdLEQ9WzEsNThdLE89WzEsNDddLEI9WzEsNTFdLEw9WzEsNTRdLEk9WzEsNTVdLFI9WzEsNDZdLEY9WzEsNjNdLFA9WzEsNjhdLGo9WzEsMjAsMjEsMjIsMjMsMzgsNDIsNDcsNTksNjAsNzksODAsODEsODIsODMsODQsODgsOTgsOTksMTAyLDEwNCwxMDUsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxZPVsxLDcyXSx6PVsxLDcxXSxVPVsxLDczXSxxPVsyMCwyMSwyMyw3NCw3NV0sSD1bMSw5NF0sJD1bMSw5OV0sVz1bMSwxMDJdLFY9WzEsMTAzXSxHPVsxLDk2XSxYPVsxLDEwMV0sWj1bMSwxMDRdLFE9WzEsOTddLEs9WzEsMTA5XSxKPVsxLDEwOF0sdHQ9WzEsOThdLGV0PVsxLDEwMF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwN10sYXQ9WzEsMTEwXSxvdD1bMjAsMjEsMjIsMjMsNzQsNzVdLHN0PVsyMCwyMSwyMiwyMyw0OCw3NCw3NV0sY3Q9WzIwLDIxLDIyLDIzLDQwLDQ3LDQ4LDUwLDUyLDU0LDU2LDU4LDU5LDYwLDYyLDY0LDY2LDY3LDY5LDc0LDc1LDg0LDg4LDk4LDk5LDEwMiwxMDQsMTA1LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSx1dD1bMjAsMjEsMjNdLGx0PVsyMCwyMSwyMyw0Nyw1OSw2MCw3NCw3NSw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0saHQ9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDcsNTksNjAsNzksODAsODEsODIsODMsODQsODgsOTgsOTksMTAyLDEwNCwxMDUsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxmdD1bNDcsNTksNjAsODQsODgsOTgsOTksMTAyLDEwNCwxMDUsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLGR0PVsxLDE0M10scHQ9WzEsMTUxXSx5dD1bMSwxNTJdLGd0PVsxLDE1M10sbXQ9WzEsMTU0XSx2dD1bMSwxMzhdLGJ0PVsxLDEzOV0sX3Q9WzEsMTM1XSx4dD1bMSwxNDZdLHd0PVsxLDE0N10sa3Q9WzEsMTQ4XSxUdD1bMSwxNDldLEV0PVsxLDE1MF0sQ3Q9WzEsMTU1XSxTdD1bMSwxNTZdLEF0PVsxLDE0MV0sTXQ9WzEsMTQ0XSxOdD1bMSwxNDBdLER0PVsxLDEzN10sT3Q9WzIwLDIxLDIyLDIzLDM4LDQyLDQ3LDU5LDYwLDc5LDgwLDgxLDgyLDgzLDg0LDg4LDk4LDk5LDEwMiwxMDQsMTA1LDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sQnQ9WzEsMTU5XSxMdD1bMjAsMjEsMjIsMjMsMjYsNDcsNTksNjAsODQsOTgsOTksMTAyLDEwNCwxMDUsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLEl0PVsyMCwyMSwyMiwyMywyNCwyNiwzOCw0MCw0MSw0Miw0Nyw1MSw1Myw1NSw1Nyw1OSw2MCw2MSw2Myw2NSw2Niw2OCw3MCw3NCw3NSw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMDYsMTA3LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxSdD1bMTIsMjEsMjIsMjRdLEZ0PVsyMiw5OV0sUHQ9WzEsMjQyXSxqdD1bMSwyMzddLFl0PVsxLDIzOF0senQ9WzEsMjQ2XSxVdD1bMSwyNDNdLHF0PVsxLDI0MF0sSHQ9WzEsMjM5XSwkdD1bMSwyNDFdLFd0PVsxLDI0NF0sVnQ9WzEsMjQ1XSxHdD1bMSwyNDddLFh0PVsxLDI2NV0sWnQ9WzIwLDIxLDIzLDk5XSxRdD1bMjAsMjEsMjIsMjMsNTksNjAsNzksOTUsOTgsOTksMTAyLDEwMywxMDQsMTA1LDEwNl0sS3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsZGlyZWN0aW9uOjQzLGxpbms6NDQsbm9kZTo0NSx2ZXJ0ZXg6NDYsQU1QOjQ3LFNUWUxFX1NFUEFSQVRPUjo0OCxpZFN0cmluZzo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQ6NTgsQUxQSEE6NTksQ09MT046NjAsUElQRTo2MSxDWUxJTkRFUlNUQVJUOjYyLENZTElOREVSRU5EOjYzLERJQU1PTkRfU1RBUlQ6NjQsRElBTU9ORF9TVE9QOjY1LFRBR0VORDo2NixUUkFQU1RBUlQ6NjcsVFJBUEVORDo2OCxJTlZUUkFQU1RBUlQ6NjksSU5WVFJBUEVORDo3MCxsaW5rU3RhdGVtZW50OjcxLGFycm93VGV4dDo3MixURVNUU1RSOjczLFNUQVJUX0xJTks6NzQsTElOSzo3NSx0ZXh0VG9rZW46NzYsU1RSOjc3LGtleXdvcmRzOjc4LFNUWUxFOjc5LExJTktTVFlMRTo4MCxDTEFTU0RFRjo4MSxDTEFTUzo4MixDTElDSzo4MyxET1dOOjg0LFVQOjg1LHRleHROb1RhZ3M6ODYsdGV4dE5vVGFnc1Rva2VuOjg3LERFRkFVTFQ6ODgsc3R5bGVzT3B0Ojg5LGFscGhhTnVtOjkwLENBTExCQUNLTkFNRTo5MSxDQUxMQkFDS0FSR1M6OTIsSFJFRjo5MyxMSU5LX1RBUkdFVDo5NCxIRVg6OTUsbnVtTGlzdDo5NixJTlRFUlBPTEFURTo5NyxOVU06OTgsQ09NTUE6OTksc3R5bGU6MTAwLHN0eWxlQ29tcG9uZW50OjEwMSxNSU5VUzoxMDIsVU5JVDoxMDMsQlJLVDoxMDQsRE9UOjEwNSxQQ1Q6MTA2LFRBR1NUQVJUOjEwNyxhbHBoYU51bVRva2VuOjEwOCxpZFN0cmluZ1Rva2VuOjEwOSxhbHBoYU51bVN0YXRlbWVudDoxMTAsZGlyZWN0aW9uX3RiOjExMSxkaXJlY3Rpb25fYnQ6MTEyLGRpcmVjdGlvbl9ybDoxMTMsZGlyZWN0aW9uX2xyOjExNCxQVU5DVFVBVElPTjoxMTUsVU5JQ09ERV9URVhUOjExNixQTFVTOjExNyxFUVVBTFM6MTE4LE1VTFQ6MTE5LFVOREVSU0NPUkU6MTIwLGdyYXBoQ29kZVRva2VuczoxMjEsQVJST1dfQ1JPU1M6MTIyLEFSUk9XX1BPSU5UOjEyMyxBUlJPV19DSVJDTEU6MTI0LEFSUk9XX09QRU46MTI1LFFVT1RFOjEyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsMTA6IjoiLDEyOiJvcGVuX2RpcmVjdGl2ZSIsMTM6InR5cGVfZGlyZWN0aXZlIiwxNDoiYXJnX2RpcmVjdGl2ZSIsMTU6ImNsb3NlX2RpcmVjdGl2ZSIsMjA6IlNFTUkiLDIxOiJORVdMSU5FIiwyMjoiU1BBQ0UiLDIzOiJFT0YiLDI0OiJHUkFQSCIsMjU6Ik5PRElSIiwyNjoiRElSIiwzODoic3ViZ3JhcGgiLDQwOiJTUVMiLDQxOiJTUUUiLDQyOiJlbmQiLDQ3OiJBTVAiLDQ4OiJTVFlMRV9TRVBBUkFUT1IiLDUwOiJQUyIsNTE6IlBFIiw1MjoiKC0iLDUzOiItKSIsNTQ6IlNUQURJVU1TVEFSVCIsNTU6IlNUQURJVU1FTkQiLDU2OiJTVUJST1VUSU5FU1RBUlQiLDU3OiJTVUJST1VUSU5FRU5EIiw1ODoiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDU5OiJBTFBIQSIsNjA6IkNPTE9OIiw2MToiUElQRSIsNjI6IkNZTElOREVSU1RBUlQiLDYzOiJDWUxJTkRFUkVORCIsNjQ6IkRJQU1PTkRfU1RBUlQiLDY1OiJESUFNT05EX1NUT1AiLDY2OiJUQUdFTkQiLDY3OiJUUkFQU1RBUlQiLDY4OiJUUkFQRU5EIiw2OToiSU5WVFJBUFNUQVJUIiw3MDoiSU5WVFJBUEVORCIsNzM6IlRFU1RTVFIiLDc0OiJTVEFSVF9MSU5LIiw3NToiTElOSyIsNzc6IlNUUiIsNzk6IlNUWUxFIiw4MDoiTElOS1NUWUxFIiw4MToiQ0xBU1NERUYiLDgyOiJDTEFTUyIsODM6IkNMSUNLIiw4NDoiRE9XTiIsODU6IlVQIiw4ODoiREVGQVVMVCIsOTE6IkNBTExCQUNLTkFNRSIsOTI6IkNBTExCQUNLQVJHUyIsOTM6IkhSRUYiLDk0OiJMSU5LX1RBUkdFVCIsOTU6IkhFWCIsOTc6IklOVEVSUE9MQVRFIiw5ODoiTlVNIiw5OToiQ09NTUEiLDEwMjoiTUlOVVMiLDEwMzoiVU5JVCIsMTA0OiJCUktUIiwxMDU6IkRPVCIsMTA2OiJQQ1QiLDEwNzoiVEFHU1RBUlQiLDExMToiZGlyZWN0aW9uX3RiIiwxMTI6ImRpcmVjdGlvbl9idCIsMTEzOiJkaXJlY3Rpb25fcmwiLDExNDoiZGlyZWN0aW9uX2xyIiwxMTU6IlBVTkNUVUFUSU9OIiwxMTY6IlVOSUNPREVfVEVYVCIsMTE3OiJQTFVTIiwxMTg6IkVRVUFMUyIsMTE5OiJNVUxUIiwxMjA6IlVOREVSU0NPUkUiLDEyMjoiQVJST1dfQ1JPU1MiLDEyMzoiQVJST1dfUE9JTlQiLDEyNDoiQVJST1dfQ0lSQ0xFIiwxMjU6IkFSUk9XX09QRU4iLDEyNjoiUVVPVEUifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsNF0sWzUsNl0sWzYsMV0sWzcsMV0sWzExLDFdLFs4LDFdLFs0LDJdLFsxNywwXSxbMTcsMl0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTYsMl0sWzE2LDJdLFsxNiwyXSxbMTYsM10sWzI4LDJdLFsyOCwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjcsMV0sWzI3LDFdLFsyNywyXSxbMzEsMl0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzMwLDJdLFszMCwxXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksOV0sWzE5LDZdLFsxOSw0XSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzMyLDNdLFszMiw0XSxbMzIsMl0sWzMyLDFdLFs0NSwxXSxbNDUsNV0sWzQ1LDNdLFs0Niw0XSxbNDYsNl0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDhdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw2XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0NiwxXSxbNDQsMl0sWzQ0LDNdLFs0NCwzXSxbNDQsMV0sWzQ0LDNdLFs3MSwxXSxbNzIsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbODYsMV0sWzg2LDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNywyXSxbMzcsNF0sWzM3LDNdLFszNyw1XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzM3LDJdLFszNyw0XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbOTYsMV0sWzk2LDNdLFs4OSwxXSxbODksM10sWzEwMCwxXSxbMTAwLDJdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbODcsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzQ5LDFdLFs0OSwyXSxbOTAsMV0sWzkwLDJdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzQzLDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZmxvd2NoYXJ0Iik7YnJlYWs7Y2FzZSAxMDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3ODpjYXNlIDgwOmNhc2UgOTI6Y2FzZSAxNDg6Y2FzZSAxNTA6Y2FzZSAxNTE6Y2FzZSA3NDpjYXNlIDE0Njp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMjA6ci5zZXREaXJlY3Rpb24oYVtzLTFdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPWFbcy0xXS5ub2RlczticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1MjpjYXNlIDExOTpjYXNlIDEyMTp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtN10sci5hZGRWZXJ0ZXgoYVtzLTddLGFbcy0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbYVtzLTVdLGFbcy0zXV1dKSk7YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImRpYW1vbmQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1hW3MtNV0sci5hZGRWZXJ0ZXgoYVtzLTVdLGFbcy0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJvZGQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwidHJhcGV6b2lkIik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY4OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX2xlZnQiKTticmVhaztjYXNlIDcwOnRoaXMuJD1hW3NdLHIuYWRkVmVydGV4KGFbc10pO2JyZWFrO2Nhc2UgNzE6YVtzLTFdLnRleHQ9YVtzXSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNzI6Y2FzZSA3MzphW3MtMl0udGV4dD1hW3MtMV0sdGhpcy4kPWFbcy0yXTticmVhaztjYXNlIDc1OnZhciBjPXIuZGVzdHJ1Y3RMaW5rKGFbc10sYVtzLTJdKTt0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGgsdGV4dDphW3MtMV19O2JyZWFrO2Nhc2UgNzY6Yz1yLmRlc3RydWN0TGluayhhW3NdKSx0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGh9O2JyZWFrO2Nhc2UgNzc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc5OmNhc2UgOTM6Y2FzZSAxNDk6Y2FzZSAxNDc6dGhpcy4kPWFbcy0xXSsiIithW3NdO2JyZWFrO2Nhc2UgOTQ6Y2FzZSA5NTp0aGlzLiQ9YVtzLTRdLHIuYWRkQ2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgOTY6dGhpcy4kPWFbcy00XSxyLnNldENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk3OmNhc2UgMTA1OnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk4OmNhc2UgMTA2OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA3OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMjpjYXNlIDEwODp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAzOmNhc2UgMTA5OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSAxMTA6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTE6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMjpjYXNlIDExNDp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTU6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNjp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExODp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDEyMDpjYXNlIDEyMjphW3MtMl0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgMTI0OnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDE1Mjp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUzOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTQ6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU1OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1Njp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTc6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw1OTpkLDYwOnAsNzk6eSw4MDpnLDgxOm0sODI6diw4MzpiLDg0Ol8sODg6eCw5ODp3LDk5OmssMTAyOlQsMTA0OkUsMTA1OkMsMTA5OjQ0LDExMTpTLDExMjpBLDExMzpNLDExNDpOLDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSx7ODo2MSwxMDpbMSw2Ml0sMTU6Rn0sdChbMTAsMTVdLFsyLDZdKSx0KGEsWzIsMTddKSx0KGEsWzIsMThdKSx0KGEsWzIsMTldKSx7MjA6WzEsNjVdLDIxOlsxLDY2XSwyMjpQLDI3OjY0LDMwOjY3fSx0KGosWzIsMTFdKSx0KGosWzIsMTJdKSx0KGosWzIsMTNdKSx0KGosWzIsMTRdKSx0KGosWzIsMTVdKSx0KGosWzIsMTZdKSx7OTo2OSwyMDpZLDIxOnosMjM6VSw0NDo3MCw3MTo3NCw3NDpbMSw3NV0sNzU6WzEsNzZdfSx7OTo3NywyMDpZLDIxOnosMjM6VX0sezk6NzgsMjA6WSwyMTp6LDIzOlV9LHs5Ojc5LDIwOlksMjE6eiwyMzpVfSx7OTo4MCwyMDpZLDIxOnosMjM6VX0sezk6ODEsMjA6WSwyMTp6LDIzOlV9LHs5OjgzLDIwOlksMjE6eiwyMjpbMSw4Ml0sMjM6VX0sdChqLFsyLDQ0XSksdChxLFsyLDUxXSx7MzA6ODQsMjI6UH0pLHsyMjpbMSw4NV19LHsyMjpbMSw4Nl19LHsyMjpbMSw4N119LHsyMjpbMSw4OF19LHsyNjpILDQ3OiQsNTk6Vyw2MDpWLDc3OlsxLDkyXSw4NDpHLDkwOjkxLDkxOlsxLDg5XSw5MzpbMSw5MF0sOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDEwODo5NSwxMTA6OTMsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoaixbMiwxNTRdKSx0KGosWzIsMTU1XSksdChqLFsyLDE1Nl0pLHQoaixbMiwxNTddKSx0KG90LFsyLDUyXSx7NDg6WzEsMTExXX0pLHQoc3QsWzIsNzBdLHsxMDk6MTIzLDQwOlsxLDExMl0sNDc6Ziw1MDpbMSwxMTNdLDUyOlsxLDExNF0sNTQ6WzEsMTE1XSw1NjpbMSwxMTZdLDU4OlsxLDExN10sNTk6ZCw2MDpwLDYyOlsxLDExOF0sNjQ6WzEsMTE5XSw2NjpbMSwxMjBdLDY3OlsxLDEyMV0sNjk6WzEsMTIyXSw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSksdChjdCxbMiwxNDZdKSx0KGN0LFsyLDE3MV0pLHQoY3QsWzIsMTcyXSksdChjdCxbMiwxNzNdKSx0KGN0LFsyLDE3NF0pLHQoY3QsWzIsMTc1XSksdChjdCxbMiwxNzZdKSx0KGN0LFsyLDE3N10pLHQoY3QsWzIsMTc4XSksdChjdCxbMiwxNzldKSx0KGN0LFsyLDE4MF0pLHQoY3QsWzIsMTgxXSksdChjdCxbMiwxODJdKSx0KGN0LFsyLDE4M10pLHQoY3QsWzIsMTg0XSksdChjdCxbMiwxODVdKSx0KGN0LFsyLDE4Nl0pLHs5OjEyNCwyMDpZLDIxOnosMjM6VX0sezExOjEyNSwxNDpbMSwxMjZdfSx0KHV0LFsyLDhdKSx0KGEsWzIsMjBdKSx0KGEsWzIsMjZdKSx0KGEsWzIsMjddKSx7MjE6WzEsMTI3XX0sdChsdCxbMiwzNF0sezMwOjEyOCwyMjpQfSksdChqLFsyLDM1XSksezQ1OjEyOSw0Njo0Miw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDEwOTo0NCwxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0sdChodCxbMiw0NV0pLHQoaHQsWzIsNDZdKSx0KGh0LFsyLDQ3XSksdChmdCxbMiw3NF0sezcyOjEzMCw2MTpbMSwxMzJdLDczOlsxLDEzMV19KSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTMzLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KFs0Nyw1OSw2MCw2MSw3Myw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sWzIsNzZdKSx0KGosWzIsMzZdKSx0KGosWzIsMzddKSx0KGosWzIsMzhdKSx0KGosWzIsMzldKSx0KGosWzIsNDBdKSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTU3LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KE90LG8sezE3OjE1OH0pLHQocSxbMiw1MF0sezQ3OkJ0fSksezI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5MDoxNjAsOTU6WzEsMTYxXSw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDo5MywxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezg4OlsxLDE2Ml0sOTY6MTYzLDk4OlsxLDE2NF19LHsyNjpILDQ3OiQsNTk6Vyw2MDpWLDg0OkcsODg6WzEsMTY1XSw5MDoxNjYsOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDEwODo5NSwxMTA6OTMsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyNjpILDQ3OiQsNTk6Vyw2MDpWLDg0OkcsOTA6MTY3LDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMDg6OTUsMTEwOjkzLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KHV0LFsyLDk3XSx7MjI6WzEsMTY4XSw5MjpbMSwxNjldfSksdCh1dCxbMiwxMDFdLHsyMjpbMSwxNzBdfSksdCh1dCxbMiwxMDVdLHsxMDg6OTUsMTEwOjE3MiwyMjpbMSwxNzFdLDI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9KSx0KHV0LFsyLDEwN10sezIyOlsxLDE3M119KSx0KEx0LFsyLDE0OF0pLHQoTHQsWzIsMTUwXSksdChMdCxbMiwxNTFdKSx0KEx0LFsyLDE1Ml0pLHQoTHQsWzIsMTUzXSksdChJdCxbMiwxNThdKSx0KEl0LFsyLDE1OV0pLHQoSXQsWzIsMTYwXSksdChJdCxbMiwxNjFdKSx0KEl0LFsyLDE2Ml0pLHQoSXQsWzIsMTYzXSksdChJdCxbMiwxNjRdKSx0KEl0LFsyLDE2NV0pLHQoSXQsWzIsMTY2XSksdChJdCxbMiwxNjddKSx0KEl0LFsyLDE2OF0pLHQoSXQsWzIsMTY5XSksdChJdCxbMiwxNzBdKSx7NDc6Ziw0OToxNzQsNTk6ZCw2MDpwLDg0Ol8sODg6eCw5ODp3LDk5OmssMTAyOlQsMTA0OkUsMTA1OkMsMTA5OjQ0LDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTc1LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTc3LDQyOm10LDQ3OiQsNTA6WzEsMTc2XSw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxNzgsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxNzksNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODAsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHs1OTpbMSwxODFdfSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTgyLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MTgzLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY0OlsxLDE4NF0sNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODUsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODYsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToxODcsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoY3QsWzIsMTQ3XSksdChSdCxbMiwzXSksezg6MTg4LDE1OkZ9LHsxNTpbMiw3XX0sdChhLFsyLDI4XSksdChsdCxbMiwzM10pLHQocSxbMiw0OF0sezMwOjE4OSwyMjpQfSksdChmdCxbMiw3MV0sezIyOlsxLDE5MF19KSx7MjI6WzEsMTkxXX0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDM5OjE5Miw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxMzQsNzc6X3QsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc1OlsxLDE5M10sNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoSXQsWzIsNzhdKSx0KEl0LFsyLDgwXSksdChJdCxbMiwxMzZdKSx0KEl0LFsyLDEzN10pLHQoSXQsWzIsMTM4XSksdChJdCxbMiwxMzldKSx0KEl0LFsyLDE0MF0pLHQoSXQsWzIsMTQxXSksdChJdCxbMiwxNDJdKSx0KEl0LFsyLDE0M10pLHQoSXQsWzIsMTQ0XSksdChJdCxbMiwxNDVdKSx0KEl0LFsyLDgxXSksdChJdCxbMiw4Ml0pLHQoSXQsWzIsODNdKSx0KEl0LFsyLDg0XSksdChJdCxbMiw4NV0pLHQoSXQsWzIsODZdKSx0KEl0LFsyLDg3XSksdChJdCxbMiw4OF0pLHQoSXQsWzIsODldKSx0KEl0LFsyLDkwXSksdChJdCxbMiw5MV0pLHs5OjE5NiwyMDpZLDIxOnosMjI6ZHQsMjM6VSwyNDpwdCwyNjp5dCwzODpndCw0MDpbMSwxOTVdLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDE5N10sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw1OTpkLDYwOnAsNzk6eSw4MDpnLDgxOm0sODI6diw4MzpiLDg0Ol8sODg6eCw5ODp3LDk5OmssMTAyOlQsMTA0OkUsMTA1OkMsMTA5OjQ0LDExMTpTLDExMjpBLDExMzpNLDExNDpOLDExNTpELDExNjpPLDExNzpCLDExODpMLDExOTpJLDEyMDpSfSx7MjI6UCwzMDoxOTh9LHsyMjpbMSwxOTldLDI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDoxNzIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpbMSwyMDBdfSx7MjI6WzEsMjAxXX0sezIyOlsxLDIwMl0sOTk6WzEsMjAzXX0sdChGdCxbMiwxMTldKSx7MjI6WzEsMjA0XX0sezIyOlsxLDIwNV0sMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMDg6OTUsMTEwOjE3MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOlsxLDIwNl0sMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMDg6OTUsMTEwOjE3MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezc3OlsxLDIwN119LHQodXQsWzIsOTldLHsyMjpbMSwyMDhdfSksezc3OlsxLDIwOV0sOTQ6WzEsMjEwXX0sezc3OlsxLDIxMV19LHQoTHQsWzIsMTQ5XSksezc3OlsxLDIxMl0sOTQ6WzEsMjEzXX0sdChvdCxbMiw1NF0sezEwOToxMjMsNDc6Ziw1OTpkLDYwOnAsODQ6Xyw4ODp4LDk4OncsOTk6aywxMDI6VCwxMDQ6RSwxMDU6QywxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0pLHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MTpbMSwyMTRdLDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsMzk6MjE1LDQyOm10LDQ3OiQsNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjEzNCw3NzpfdCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1MTpbMSwyMTZdLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQyOm10LDQ3OiQsNTM6WzEsMjE3XSw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU1OlsxLDIxOF0sNTk6Vyw2MDpWLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1NzpbMSwyMTldLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezYwOlsxLDIyMF19LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2MzpbMSwyMjFdLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjU6WzEsMjIyXSw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDM5OjIyMyw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxMzQsNzc6X3QsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQxOlsxLDIyNF0sNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw2ODpbMSwyMjVdLDcwOlsxLDIyNl0sNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw2ODpbMSwyMjhdLDcwOlsxLDIyN10sNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHs5OjIyOSwyMDpZLDIxOnosMjM6VX0sdChxLFsyLDQ5XSx7NDc6QnR9KSx0KGZ0LFsyLDczXSksdChmdCxbMiw3Ml0pLHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCw0MjptdCw0NzokLDU5OlcsNjA6Viw2MTpbMSwyMzBdLDY2OnZ0LDc0OmJ0LDc2OjE5NCw3ODoxNDUsNzk6eHQsODA6d3QsODE6a3QsODI6VHQsODM6RXQsODQ6Q3QsODU6U3QsODc6MTM2LDg4OkF0LDk4OlgsOTk6WiwxMDI6TXQsMTA0OkssMTA1OkosMTA2Ok50LDEwNzpEdCwxMDg6MTQyLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSx0KGZ0LFsyLDc1XSksdChJdCxbMiw3OV0pLHsyMjpkdCwyNDpwdCwyNjp5dCwzODpndCwzOToyMzEsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTM0LDc3Ol90LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoT3Qsbyx7MTc6MjMyfSksdChqLFsyLDQzXSksezQ2OjIzMyw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDEwOTo0NCwxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0sezIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDg5OjIzNCw5NTpVdCw5ODpxdCwxMDA6MjM1LDEwMToyMzYsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0sezIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDg5OjI0OCw5NTpVdCw5ODpxdCwxMDA6MjM1LDEwMToyMzYsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0sezIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDg5OjI0OSw5NTpVdCw5NzpbMSwyNTBdLDk4OnF0LDEwMDoyMzUsMTAxOjIzNiwxMDI6SHQsMTAzOiR0LDEwNDpXdCwxMDU6VnQsMTA2Okd0fSx7MjI6UHQsNTk6anQsNjA6WXQsNzk6enQsODk6MjUxLDk1OlV0LDk3OlsxLDI1Ml0sOTg6cXQsMTAwOjIzNSwxMDE6MjM2LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9LHs5ODpbMSwyNTNdfSx7MjI6UHQsNTk6anQsNjA6WXQsNzk6enQsODk6MjU0LDk1OlV0LDk4OnF0LDEwMDoyMzUsMTAxOjIzNiwxMDI6SHQsMTAzOiR0LDEwNDpXdCwxMDU6VnQsMTA2Okd0fSx7MjI6UHQsNTk6anQsNjA6WXQsNzk6enQsODk6MjU1LDk1OlV0LDk4OnF0LDEwMDoyMzUsMTAxOjIzNiwxMDI6SHQsMTAzOiR0LDEwNDpXdCwxMDU6VnQsMTA2Okd0fSx7MjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDkwOjI1Niw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDo5MywxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sdCh1dCxbMiw5OF0pLHs3NzpbMSwyNTddfSx0KHV0LFsyLDEwMl0sezIyOlsxLDI1OF19KSx0KHV0LFsyLDEwM10pLHQodXQsWzIsMTA2XSksdCh1dCxbMiwxMDhdLHsyMjpbMSwyNTldfSksdCh1dCxbMiwxMDldKSx0KHN0LFsyLDU1XSksezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQyOm10LDQ3OiQsNTE6WzEsMjYwXSw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQoc3QsWzIsNjJdKSx0KHN0LFsyLDU3XSksdChzdCxbMiw1OF0pLHQoc3QsWzIsNTldKSx7NTk6WzEsMjYxXX0sdChzdCxbMiw2MV0pLHQoc3QsWzIsNjNdKSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjU6WzEsMjYyXSw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sdChzdCxbMiw2NV0pLHQoc3QsWzIsNjZdKSx0KHN0LFsyLDY4XSksdChzdCxbMiw2N10pLHQoc3QsWzIsNjldKSx0KFJ0LFsyLDRdKSx0KFsyMiw0Nyw1OSw2MCw4NCw4OCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sWzIsNzddKSx7MjI6ZHQsMjQ6cHQsMjY6eXQsMzg6Z3QsNDE6WzEsMjYzXSw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxOTQsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNjRdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNTk6ZCw2MDpwLDc5OnksODA6Zyw4MTptLDgyOnYsODM6Yiw4NDpfLDg4OngsOTg6dyw5OTprLDEwMjpULDEwNDpFLDEwNTpDLDEwOTo0NCwxMTE6UywxMTI6QSwxMTM6TSwxMTQ6TiwxMTU6RCwxMTY6TywxMTc6QiwxMTg6TCwxMTk6SSwxMjA6Un0sdChvdCxbMiw1M10pLHQodXQsWzIsMTExXSx7OTk6WHR9KSx0KFp0LFsyLDEyMV0sezEwMToyNjYsMjI6UHQsNTk6anQsNjA6WXQsNzk6enQsOTU6VXQsOTg6cXQsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0pLHQoUXQsWzIsMTIzXSksdChRdCxbMiwxMjVdKSx0KFF0LFsyLDEyNl0pLHQoUXQsWzIsMTI3XSksdChRdCxbMiwxMjhdKSx0KFF0LFsyLDEyOV0pLHQoUXQsWzIsMTMwXSksdChRdCxbMiwxMzFdKSx0KFF0LFsyLDEzMl0pLHQoUXQsWzIsMTMzXSksdChRdCxbMiwxMzRdKSx0KFF0LFsyLDEzNV0pLHQodXQsWzIsMTEyXSx7OTk6WHR9KSx0KHV0LFsyLDExM10sezk5Olh0fSksezIyOlsxLDI2N119LHQodXQsWzIsMTE0XSx7OTk6WHR9KSx7MjI6WzEsMjY4XX0sdChGdCxbMiwxMjBdKSx0KHV0LFsyLDk0XSx7OTk6WHR9KSx0KHV0LFsyLDk1XSx7OTk6WHR9KSx0KHV0LFsyLDk2XSx7MTA4Ojk1LDExMDoxNzIsMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0pLHQodXQsWzIsMTAwXSksezk0OlsxLDI2OV19LHs5NDpbMSwyNzBdfSx7NTE6WzEsMjcxXX0sezYxOlsxLDI3Ml19LHs2NTpbMSwyNzNdfSx7OToyNzQsMjA6WSwyMTp6LDIzOlV9LHQoaixbMiw0Ml0pLHsyMjpQdCw1OTpqdCw2MDpZdCw3OTp6dCw5NTpVdCw5ODpxdCwxMDA6Mjc1LDEwMToyMzYsMTAyOkh0LDEwMzokdCwxMDQ6V3QsMTA1OlZ0LDEwNjpHdH0sdChRdCxbMiwxMjRdKSx7MjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDkwOjI3Niw5ODpYLDk5OlosMTAyOlEsMTA0OkssMTA1OkosMTA4Ojk1LDExMDo5MywxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sezI2OkgsNDc6JCw1OTpXLDYwOlYsODQ6Ryw5MDoyNzcsOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDEwODo5NSwxMTA6OTMsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHQodXQsWzIsMTA0XSksdCh1dCxbMiwxMTBdKSx0KHN0LFsyLDU2XSksezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDM5OjI3OCw0MjptdCw0NzokLDU5OlcsNjA6Viw2Njp2dCw3NDpidCw3NjoxMzQsNzc6X3QsNzg6MTQ1LDc5Onh0LDgwOnd0LDgxOmt0LDgyOlR0LDgzOkV0LDg0OkN0LDg1OlN0LDg3OjEzNiw4ODpBdCw5ODpYLDk5OlosMTAyOk10LDEwNDpLLDEwNTpKLDEwNjpOdCwxMDc6RHQsMTA4OjE0MiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0sdChzdCxbMiw2NF0pLHQoT3Qsbyx7MTc6Mjc5fSksdChadCxbMiwxMjJdLHsxMDE6MjY2LDIyOlB0LDU5Omp0LDYwOll0LDc5Onp0LDk1OlV0LDk4OnF0LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9KSx0KHV0LFsyLDExN10sezEwODo5NSwxMTA6MTcyLDIyOlsxLDI4MF0sMjY6SCw0NzokLDU5OlcsNjA6Viw4NDpHLDk4OlgsOTk6WiwxMDI6USwxMDQ6SywxMDU6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0LDEyMDphdH0pLHQodXQsWzIsMTE4XSx7MTA4Ojk1LDExMDoxNzIsMjI6WzEsMjgxXSwyNjpILDQ3OiQsNTk6Vyw2MDpWLDg0OkcsOTg6WCw5OTpaLDEwMjpRLDEwNDpLLDEwNTpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXQsMTIwOmF0fSksezIyOmR0LDI0OnB0LDI2Onl0LDM4Omd0LDQxOlsxLDI4Ml0sNDI6bXQsNDc6JCw1OTpXLDYwOlYsNjY6dnQsNzQ6YnQsNzY6MTk0LDc4OjE0NSw3OTp4dCw4MDp3dCw4MTprdCw4MjpUdCw4MzpFdCw4NDpDdCw4NTpTdCw4NzoxMzYsODg6QXQsOTg6WCw5OTpaLDEwMjpNdCwxMDQ6SywxMDU6SiwxMDY6TnQsMTA3OkR0LDEwODoxNDIsMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdCwxMjA6YXR9LHsxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDI6WzEsMjgzXSw0MzozMSw0NTozMiw0Njo0Miw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw3OTp5LDgwOmcsODE6bSw4Mjp2LDgzOmIsODQ6Xyw4ODp4LDk4OncsOTk6aywxMDI6VCwxMDQ6RSwxMDU6QywxMDk6NDQsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok4sMTE1OkQsMTE2Ok8sMTE3OkIsMTE4OkwsMTE5OkksMTIwOlJ9LHsyMjpQdCw1OTpqdCw2MDpZdCw3OTp6dCw4OToyODQsOTU6VXQsOTg6cXQsMTAwOjIzNSwxMDE6MjM2LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9LHsyMjpQdCw1OTpqdCw2MDpZdCw3OTp6dCw4OToyODUsOTU6VXQsOTg6cXQsMTAwOjIzNSwxMDE6MjM2LDEwMjpIdCwxMDM6JHQsMTA0Old0LDEwNTpWdCwxMDY6R3R9LHQoc3QsWzIsNjBdKSx0KGosWzIsNDFdKSx0KHV0LFsyLDExNV0sezk5Olh0fSksdCh1dCxbMiwxMTZdLHs5OTpYdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEyNjpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEp0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDEyO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxMztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTA7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE1O2Nhc2UgNDpyZXR1cm4gMTQ7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA4OmNhc2UgMTc6Y2FzZSAyMDpjYXNlIDIzOmNhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3OTtjYXNlIDExOnJldHVybiA4ODtjYXNlIDEyOnJldHVybiA4MDtjYXNlIDEzOnJldHVybiA5NztjYXNlIDE0OnJldHVybiA4MTtjYXNlIDE1OnJldHVybiA4MjtjYXNlIDE2OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE4OnJldHVybiA5MztjYXNlIDE5OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDkxO2Nhc2UgMjQ6cmV0dXJuIDkyO2Nhc2UgMjU6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI3OnJldHVybiA4MztjYXNlIDI4OmNhc2UgMjk6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzMDpyZXR1cm4gMzg7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNTpyZXR1cm4gOTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ3OnJldHVybiAxMTE7Y2FzZSA0ODpyZXR1cm4gMTEyO2Nhc2UgNDk6cmV0dXJuIDExMztjYXNlIDUwOnJldHVybiAxMTQ7Y2FzZSA1MTpyZXR1cm4gOTg7Y2FzZSA1MjpyZXR1cm4gMTA0O2Nhc2UgNTM6cmV0dXJuIDQ4O2Nhc2UgNTQ6cmV0dXJuIDYwO2Nhc2UgNTU6cmV0dXJuIDQ3O2Nhc2UgNTY6cmV0dXJuIDIwO2Nhc2UgNTc6cmV0dXJuIDk5O2Nhc2UgNTg6cmV0dXJuIDExOTtjYXNlIDU5OmNhc2UgNjA6Y2FzZSA2MTpyZXR1cm4gNzU7Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6cmV0dXJuIDc0O2Nhc2UgNjU6cmV0dXJuIDUyO2Nhc2UgNjY6cmV0dXJuIDUzO2Nhc2UgNjc6cmV0dXJuIDU0O2Nhc2UgNjg6cmV0dXJuIDU1O2Nhc2UgNjk6cmV0dXJuIDU2O2Nhc2UgNzA6cmV0dXJuIDU3O2Nhc2UgNzE6cmV0dXJuIDU4O2Nhc2UgNzI6cmV0dXJuIDYyO2Nhc2UgNzM6cmV0dXJuIDYzO2Nhc2UgNzQ6cmV0dXJuIDEwMjtjYXNlIDc1OnJldHVybiAxMDU7Y2FzZSA3NjpyZXR1cm4gMTIwO2Nhc2UgNzc6cmV0dXJuIDExNztjYXNlIDc4OnJldHVybiAxMDY7Y2FzZSA3OTpjYXNlIDgwOnJldHVybiAxMTg7Y2FzZSA4MTpyZXR1cm4gMTA3O2Nhc2UgODI6cmV0dXJuIDY2O2Nhc2UgODM6cmV0dXJuIDg1O2Nhc2UgODQ6cmV0dXJuIlNFUCI7Y2FzZSA4NTpyZXR1cm4gODQ7Y2FzZSA4NjpyZXR1cm4gNTk7Y2FzZSA4NzpyZXR1cm4gNjg7Y2FzZSA4ODpyZXR1cm4gNjc7Y2FzZSA4OTpyZXR1cm4gNzA7Y2FzZSA5MDpyZXR1cm4gNjk7Y2FzZSA5MTpyZXR1cm4gMTE1O2Nhc2UgOTI6cmV0dXJuIDExNjtjYXNlIDkzOnJldHVybiA2MTtjYXNlIDk0OnJldHVybiA1MDtjYXNlIDk1OnJldHVybiA1MTtjYXNlIDk2OnJldHVybiA0MDtjYXNlIDk3OnJldHVybiA0MTtjYXNlIDk4OnJldHVybiA2NDtjYXNlIDk5OnJldHVybiA2NTtjYXNlIDEwMDpyZXR1cm4gMTI2O2Nhc2UgMTAxOnJldHVybiAyMTtjYXNlIDEwMjpyZXR1cm4gMjI7Y2FzZSAxMDM6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXFspLywvXig/OlxdXCkpLywvXig/OlxbXFspLywvXig/OlxdXF0pLywvXig/OlxbXHwpLywvXig/OlxbXCgpLywvXig/OlwpXF0pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpbXF9dKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86W0EtWmEtel0rKS8sL14oPzpcXFxdKS8sL14oPzpcW1wvKS8sL14oPzpcL1xdKS8sL14oPzpcW1xcKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE5LDI1LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIHRlKCl7dGhpcy55eT17fX1yZXR1cm4gS3QubGV4ZXI9SnQsdGUucHJvdG90eXBlPUt0LEt0LlBhcnNlcj10ZSxuZXcgdGV9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big1MzU0KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDk5NTk6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bNyw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIyLDI5LDM0XSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDE4XSxjPVsxLDE5XSx1PVsxLDIwXSxsPVsxLDIxXSxoPVsxLDIyXSxmPVsxLDIzXSxkPVsxLDI1XSxwPVsxLDI3XSx5PVsxLDMwXSxnPVs1LDcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMiwyOSwzNF0sbT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsZ2FudHQ6NSxkb2N1bWVudDo2LEVPRjo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxOTDoxMSxkYXRlRm9ybWF0OjEyLGluY2x1c2l2ZUVuZERhdGVzOjEzLHRvcEF4aXM6MTQsYXhpc0Zvcm1hdDoxNSxleGNsdWRlczoxNixpbmNsdWRlczoxNyx0b2RheU1hcmtlcjoxOCx0aXRsZToxOSxzZWN0aW9uOjIwLGNsaWNrU3RhdGVtZW50OjIxLHRhc2tUeHQ6MjIsdGFza0RhdGE6MjMsb3BlbkRpcmVjdGl2ZToyNCx0eXBlRGlyZWN0aXZlOjI1LGNsb3NlRGlyZWN0aXZlOjI2LCI6IjoyNyxhcmdEaXJlY3RpdmU6MjgsY2xpY2s6MjksY2FsbGJhY2tuYW1lOjMwLGNhbGxiYWNrYXJnczozMSxocmVmOjMyLGNsaWNrU3RhdGVtZW50RGVidWc6MzMsb3Blbl9kaXJlY3RpdmU6MzQsdHlwZV9kaXJlY3RpdmU6MzUsYXJnX2RpcmVjdGl2ZTozNixjbG9zZV9kaXJlY3RpdmU6MzcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6ImdhbnR0Iiw3OiJFT0YiLDk6IlNQQUNFIiwxMToiTkwiLDEyOiJkYXRlRm9ybWF0IiwxMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDE0OiJ0b3BBeGlzIiwxNToiYXhpc0Zvcm1hdCIsMTY6ImV4Y2x1ZGVzIiwxNzoiaW5jbHVkZXMiLDE4OiJ0b2RheU1hcmtlciIsMTk6InRpdGxlIiwyMDoic2VjdGlvbiIsMjI6InRhc2tUeHQiLDIzOiJ0YXNrRGF0YSIsMjc6IjoiLDI5OiJjbGljayIsMzA6ImNhbGxiYWNrbmFtZSIsMzE6ImNhbGxiYWNrYXJncyIsMzI6ImhyZWYiLDM0OiJvcGVuX2RpcmVjdGl2ZSIsMzU6InR5cGVfZGlyZWN0aXZlIiwzNjoiYXJnX2RpcmVjdGl2ZSIsMzc6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbNiwwXSxbNiwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbNCw0XSxbNCw2XSxbMjEsMl0sWzIxLDNdLFsyMSwzXSxbMjEsNF0sWzIxLDNdLFsyMSw0XSxbMjEsMl0sWzMzLDJdLFszMywzXSxbMzMsM10sWzMzLDRdLFszMywzXSxbMzMsNF0sWzMzLDJdLFsyNCwxXSxbMjUsMV0sWzI4LDFdLFsyNiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDI6cmV0dXJuIGFbcy0xXTtjYXNlIDM6Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6ci5zZXREYXRlRm9ybWF0KGFbc10uc3Vic3RyKDExKSksdGhpcy4kPWFbc10uc3Vic3RyKDExKTticmVhaztjYXNlIDEwOnIuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTE6ci5Ub3BBeGlzKCksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTI6ci5zZXRBeGlzRm9ybWF0KGFbc10uc3Vic3RyKDExKSksdGhpcy4kPWFbc10uc3Vic3RyKDExKTticmVhaztjYXNlIDEzOnIuc2V0RXhjbHVkZXMoYVtzXS5zdWJzdHIoOSkpLHRoaXMuJD1hW3NdLnN1YnN0cig5KTticmVhaztjYXNlIDE0OnIuc2V0SW5jbHVkZXMoYVtzXS5zdWJzdHIoOSkpLHRoaXMuJD1hW3NdLnN1YnN0cig5KTticmVhaztjYXNlIDE1OnIuc2V0VG9kYXlNYXJrZXIoYVtzXS5zdWJzdHIoMTIpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMTY6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTc6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxOTpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSxudWxsKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdLGFbcy0xXSksci5zZXRMaW5rKGFbcy0zXSxhW3NdKTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3NdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdKTticmVhaztjYXNlIDI4OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMV0sYVtzXSksci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPWFbcy0xXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzNjp0aGlzLiQ9YVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjpjYXNlIDM0OnRoaXMuJD1hW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDMzOmNhc2UgMzU6dGhpcy4kPWFbcy0zXSsiICIrYVtzLTJdKyIgIithW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzg6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQwOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdhbnR0Iil9fSx0YWJsZTpbezM6MSw0OjIsNTplLDI0OjQsMzQ6bn0sezE6WzNdfSx7Mzo2LDQ6Miw1OmUsMjQ6NCwzNDpufSx0KHIsWzIsM10sezY6N30pLHsyNTo4LDM1OlsxLDldfSx7MzU6WzIsMzddfSx7MTpbMiwxXX0sezQ6MjYsNzpbMSwxMF0sODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6aSwxMzphLDE0Om8sMTU6cywxNjpjLDE3OnUsMTg6bCwxOTpoLDIwOmYsMjE6MjQsMjI6ZCwyNDo0LDI5OnAsMzQ6bn0sezI2OjI4LDI3OlsxLDI5XSwzNzp5fSx0KFsyNywzN10sWzIsMzhdKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI2LDEwOjMxLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDpmLDIxOjI0LDIyOmQsMjQ6NCwyOTpwLDM0Om59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsOV0pLHQocixbMiwxMF0pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHQocixbMiwxM10pLHQocixbMiwxNF0pLHQocixbMiwxNV0pLHQocixbMiwxNl0pLHQocixbMiwxN10pLHQocixbMiwxOF0pLHsyMzpbMSwzMl19LHQocixbMiwyMF0pLHszMDpbMSwzM10sMzI6WzEsMzRdfSx7MTE6WzEsMzVdfSx7Mjg6MzYsMzY6WzEsMzddfSx7MTE6WzIsNDBdfSx0KHIsWzIsNV0pLHQocixbMiwxOV0pLHQocixbMiwyM10sezMxOlsxLDM4XSwzMjpbMSwzOV19KSx0KHIsWzIsMjldLHszMDpbMSw0MF19KSx0KGcsWzIsMjFdKSx7MjY6NDEsMzc6eX0sezM3OlsyLDM5XX0sdChyLFsyLDI0XSx7MzI6WzEsNDJdfSksdChyLFsyLDI1XSksdChyLFsyLDI3XSx7MzE6WzEsNDNdfSksezExOlsxLDQ0XX0sdChyLFsyLDI2XSksdChyLFsyLDI4XSksdChnLFsyLDIyXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDM3XSw2OlsyLDFdLDMwOlsyLDQwXSwzNzpbMiwzOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx2PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDM0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjc7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM3O2Nhc2UgNDpyZXR1cm4gMzY7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpicmVhaztjYXNlIDg6cmV0dXJuIDExO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6Y2FzZSAxNjpjYXNlIDE5OmNhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMyO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMzA7Y2FzZSAyMDpyZXR1cm4gMzE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI5O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTc7Y2FzZSAzMDpyZXR1cm4gMTY7Y2FzZSAzMTpyZXR1cm4gMTg7Y2FzZSAzMjpyZXR1cm4iZGF0ZSI7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjA7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjM7Y2FzZSAzNzpyZXR1cm4gMjc7Y2FzZSAzODpyZXR1cm4gNztjYXNlIDM5OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzldLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBiKCl7dGhpcy55eT17fX1yZXR1cm4gbS5sZXhlcj12LGIucHJvdG90eXBlPW0sbS5QYXJzZXI9YixuZXcgYn0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDY4NzgpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sMjU1MzoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzIsM10sbj1bMSw3XSxyPVs3LDEyLDE1LDE3LDE5LDIwLDIxXSxpPVs3LDExLDEyLDE1LDE3LDE5LDIwLDIxXSxhPVsyLDIwXSxvPVsxLDMyXSxzPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxHRzo0LCI6Ijo1LGRvY3VtZW50OjYsRU9GOjcsRElSOjgsb3B0aW9uczo5LGJvZHk6MTAsT1BUOjExLE5MOjEyLGxpbmU6MTMsc3RhdGVtZW50OjE0LENPTU1JVDoxNSxjb21taXRfYXJnOjE2LEJSQU5DSDoxNyxJRDoxOCxDSEVDS09VVDoxOSxNRVJHRToyMCxSRVNFVDoyMSxyZXNldF9hcmc6MjIsU1RSOjIzLEhFQUQ6MjQscmVzZXRfcGFyZW50czoyNSxDQVJFVDoyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiR0ciLDU6IjoiLDc6IkVPRiIsODoiRElSIiwxMToiT1BUIiwxMjoiTkwiLDE1OiJDT01NSVQiLDE3OiJCUkFOQ0giLDE4OiJJRCIsMTk6IkNIRUNLT1VUIiwyMDoiTUVSR0UiLDIxOiJSRVNFVCIsMjM6IlNUUiIsMjQ6IkhFQUQiLDI2OiJDQVJFVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbOSwyXSxbOSwxXSxbMTAsMF0sWzEwLDJdLFsxMywyXSxbMTMsMV0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTYsMF0sWzE2LDFdLFsyMiwyXSxbMjIsMl0sWzI1LDBdLFsyNSwyXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDI6cmV0dXJuIHIuc2V0RGlyZWN0aW9uKGFbcy0zXSksYVtzLTFdO2Nhc2UgNDpyLnNldE9wdGlvbnMoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU6YVtzLTFdKz1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDExOnIuY29tbWl0KGFbc10pO2JyZWFrO2Nhc2UgMTI6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAxMzpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMTQ6ci5tZXJnZShhW3NdKTticmVhaztjYXNlIDE1OnIucmVzZXQoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9IiI7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE4OnRoaXMuJD1hW3MtMV0rIjoiK2Fbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9YVtzLTFdKyI6IityLmNvdW50LHIuY291bnQ9MDticmVhaztjYXNlIDIwOnIuY291bnQ9MDticmVhaztjYXNlIDIxOnIuY291bnQrPTF9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdLDg6WzEsNF19LHs2OjUsNzplLDk6NiwxMjpufSx7NTpbMSw4XX0sezc6WzEsOV19LHQocixbMiw3XSx7MTA6MTAsMTE6WzEsMTFdfSksdChpLFsyLDZdKSx7NjoxMiw3OmUsOTo2LDEyOm59LHsxOlsyLDFdfSx7NzpbMiw0XSwxMjpbMSwxNV0sMTM6MTMsMTQ6MTQsMTU6WzEsMTZdLDE3OlsxLDE3XSwxOTpbMSwxOF0sMjA6WzEsMTldLDIxOlsxLDIwXX0sdChpLFsyLDVdKSx7NzpbMSwyMV19LHQocixbMiw4XSksezEyOlsxLDIyXX0sdChyLFsyLDEwXSksezEyOlsyLDE2XSwxNjoyMywyMzpbMSwyNF19LHsxODpbMSwyNV19LHsxODpbMSwyNl19LHsxODpbMSwyN119LHsxODpbMSwzMF0sMjI6MjgsMjQ6WzEsMjldfSx7MTpbMiwyXX0sdChyLFsyLDldKSx7MTI6WzIsMTFdfSx7MTI6WzIsMTddfSx7MTI6WzIsMTJdfSx7MTI6WzIsMTNdfSx7MTI6WzIsMTRdfSx7MTI6WzIsMTVdfSx7MTI6YSwyNTozMSwyNjpvfSx7MTI6YSwyNTozMywyNjpvfSx7MTI6WzIsMThdfSx7MTI6YSwyNTozNCwyNjpvfSx7MTI6WzIsMTldfSx7MTI6WzIsMjFdfV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMV0sMjE6WzIsMl0sMjM6WzIsMTFdLDI0OlsyLDE3XSwyNTpbMiwxMl0sMjY6WzIsMTNdLDI3OlsyLDE0XSwyODpbMiwxNV0sMzE6WzIsMThdLDMzOlsyLDE5XSwzNDpbMiwyMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxjPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiAxMjtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpicmVhaztjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA1OnJldHVybiAxNTtjYXNlIDY6cmV0dXJuIDE3O2Nhc2UgNzpyZXR1cm4gMjA7Y2FzZSA4OnJldHVybiAyMTtjYXNlIDk6cmV0dXJuIDE5O2Nhc2UgMTA6Y2FzZSAxMTpyZXR1cm4gODtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6dGhpcy5iZWdpbigib3B0aW9ucyIpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMTE7Y2FzZSAxNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE5OnJldHVybiAyMztjYXNlIDIwOnJldHVybiAxODtjYXNlIDIxOnJldHVybiA3fX0scnVsZXM6Wy9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmdpdEdyYXBoXGIpL2ksL14oPzpjb21taXRcYikvaSwvXig/OmJyYW5jaFxiKS9pLC9eKD86bWVyZ2VcYikvaSwvXig/OnJlc2V0XGIpL2ksL14oPzpjaGVja291dFxiKS9pLC9eKD86TFJcYikvaSwvXig/OkJUXGIpL2ksL14oPzo6KS9pLC9eKD86XF4pL2ksL14oPzpvcHRpb25zXHI/XG4pL2ksL14oPzplbmRccj9cbikvaSwvXig/OlteXG5dK1xyP1xuKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbYS16QS1aXVstX1wuYS16QS1aMC05XSpbLV9hLXpBLVowLTldKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3B0aW9uczp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE4LDE5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIwLDIxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdSgpe3RoaXMueXk9e319cmV0dXJuIHMubGV4ZXI9Yyx1LnByb3RvdHlwZT1zLHMuUGFyc2VyPXUsbmV3IHV9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4MTgzKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDY3NjU6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVs2LDksMTBdLG49e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7c3dpdGNoKGEubGVuZ3RoLGkpe2Nhc2UgMTpyZXR1cm4gcjtjYXNlIDQ6YnJlYWs7Y2FzZSA2OnIuc2V0SW5mbyghMCl9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0sdChlLFsyLDNdKSx0KGUsWzIsNF0pLHQoZSxbMiw1XSksdChlLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxyPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIG4ubGV4ZXI9cixpLnByb3RvdHlwZT1uLG4uUGFyc2VyPWksbmV3IGl9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigxNDI4KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDcwNjI6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDRdLG49WzEsNV0scj1bMSw2XSxpPVsxLDddLGE9WzEsOV0sbz1bMSwxMSwxMywyMCwyMSwyMiwyM10scz1bMiw1XSxjPVsxLDYsMTEsMTMsMjAsMjEsMjIsMjNdLHU9WzIwLDIxLDIyXSxsPVsyLDhdLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMjRdLHA9WzYsMjAsMjEsMjIsMjNdLHk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LFBJRTo2LGRvY3VtZW50Ojcsc2hvd0RhdGE6OCxsaW5lOjksc3RhdGVtZW50OjEwLHR4dDoxMSx2YWx1ZToxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxvcGVuRGlyZWN0aXZlOjE1LHR5cGVEaXJlY3RpdmU6MTYsY2xvc2VEaXJlY3RpdmU6MTcsIjoiOjE4LGFyZ0RpcmVjdGl2ZToxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsb3Blbl9kaXJlY3RpdmU6MjMsdHlwZV9kaXJlY3RpdmU6MjQsYXJnX2RpcmVjdGl2ZToyNSxjbG9zZV9kaXJlY3RpdmU6MjYsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlBJRSIsODoic2hvd0RhdGEiLDExOiJ0eHQiLDEyOiJ2YWx1ZSIsMTM6InRpdGxlIiwxNDoidGl0bGVfdmFsdWUiLDE4OiI6IiwyMDoiTkVXTElORSIsMjE6IjsiLDIyOiJFT0YiLDIzOiJvcGVuX2RpcmVjdGl2ZSIsMjQ6InR5cGVfZGlyZWN0aXZlIiwyNToiYXJnX2RpcmVjdGl2ZSIsMjY6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywzXSxbNywwXSxbNywyXSxbOSwyXSxbMTAsMF0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzUsM10sWzUsNV0sWzQsMV0sWzQsMV0sWzQsMV0sWzE1LDFdLFsxNiwxXSxbMTksMV0sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldFNob3dEYXRhKCEwKTticmVhaztjYXNlIDc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6ci5hZGRTZWN0aW9uKGFbcy0xXSxyLmNsZWFudXBWYWx1ZShhW3NdKSk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE5OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHszOjExLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sdChvLHMsezc6MTIsODpbMSwxM119KSx0KGMsWzIsMTRdKSx0KGMsWzIsMTVdKSx0KGMsWzIsMTZdKSx7MTY6MTQsMjQ6WzEsMTVdfSx7MjQ6WzIsMTddfSx7MTpbMiwxXX0sezE6WzIsMl19LHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDNdLDExOmgsMTM6ZiwyMzphfSksdChvLHMsezc6MjF9KSx7MTc6MjIsMTg6WzEsMjNdLDI2OmR9LHQoWzE4LDI2XSxbMiwxOF0pLHQobyxbMiw2XSksezQ6MjUsMjA6biwyMTpyLDIyOml9LHsxMjpbMSwyNl19LHsxNDpbMSwyN119LHQodSxbMiwxMV0pLHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDRdLDExOmgsMTM6ZiwyMzphfSksdChwLFsyLDEyXSksezE5OjI4LDI1OlsxLDI5XX0sdChwLFsyLDIwXSksdChvLFsyLDddKSx0KHUsWzIsOV0pLHQodSxbMiwxMF0pLHsxNzozMCwyNjpkfSx7MjY6WzIsMTldfSx0KHAsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMTddLDEwOlsyLDFdLDExOlsyLDJdLDI5OlsyLDE5XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGc9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjM7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDI0O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxODtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA0OnJldHVybiAyNTtjYXNlIDU6Y2FzZSA2OmNhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDEwOnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgMTI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4idHh0IjtjYXNlIDE1OnJldHVybiA2O2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4idmFsdWUiO2Nhc2UgMTg6cmV0dXJuIDIyfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86W1xzXSspL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzExXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMiwxNSwxNiwxNywxOF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG0oKXt0aGlzLnl5PXt9fXJldHVybiB5LmxleGVyPWcsbS5wcm90b3R5cGU9eSx5LlBhcnNlcj1tLG5ldyBtfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oNDU1MSkucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSwzMTc2Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzEsMTddLGk9WzIsMTBdLGE9WzEsMjFdLG89WzEsMjJdLHM9WzEsMjNdLGM9WzEsMjRdLHU9WzEsMjVdLGw9WzEsMjZdLGg9WzEsMTldLGY9WzEsMjddLGQ9WzEsMjhdLHA9WzEsMzFdLHk9WzY2LDY3XSxnPVs1LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNTUsNTcsNjYsNjddLG09WzUsNiw4LDE0LDM1LDM2LDM3LDM4LDM5LDQwLDQ4LDY2LDY3XSx2PVsxLDUxXSxiPVsxLDUyXSxfPVsxLDUzXSx4PVsxLDU0XSx3PVsxLDU1XSxrPVsxLDU2XSxUPVsxLDU3XSxFPVs1Nyw1OF0sQz1bMSw2OV0sUz1bMSw2NV0sQT1bMSw2Nl0sTT1bMSw2N10sTj1bMSw2OF0sRD1bMSw3MF0sTz1bMSw3NF0sQj1bMSw3NV0sTD1bMSw3Ml0sST1bMSw3M10sUj1bNSw4LDE0LDM1LDM2LDM3LDM4LDM5LDQwLDQ4LDY2LDY3XSxGPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxORVdMSU5FOjUsUkQ6NixkaWFncmFtOjcsRU9GOjgsb3BlbkRpcmVjdGl2ZTo5LHR5cGVEaXJlY3RpdmU6MTAsY2xvc2VEaXJlY3RpdmU6MTEsIjoiOjEyLGFyZ0RpcmVjdGl2ZToxMyxvcGVuX2RpcmVjdGl2ZToxNCx0eXBlX2RpcmVjdGl2ZToxNSxhcmdfZGlyZWN0aXZlOjE2LGNsb3NlX2RpcmVjdGl2ZToxNyxyZXF1aXJlbWVudERlZjoxOCxlbGVtZW50RGVmOjE5LHJlbGF0aW9uc2hpcERlZjoyMCxyZXF1aXJlbWVudFR5cGU6MjEscmVxdWlyZW1lbnROYW1lOjIyLFNUUlVDVF9TVEFSVDoyMyxyZXF1aXJlbWVudEJvZHk6MjQsSUQ6MjUsQ09MT05TRVA6MjYsaWQ6MjcsVEVYVDoyOCx0ZXh0OjI5LFJJU0s6MzAscmlza0xldmVsOjMxLFZFUklGWU1USEQ6MzIsdmVyaWZ5VHlwZTozMyxTVFJVQ1RfU1RPUDozNCxSRVFVSVJFTUVOVDozNSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjM2LElOVEVSRkFDRV9SRVFVSVJFTUVOVDozNyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDozOCxQSFlTSUNBTF9SRVFVSVJFTUVOVDozOSxERVNJR05fQ09OU1RSQUlOVDo0MCxMT1dfUklTSzo0MSxNRURfUklTSzo0MixISUdIX1JJU0s6NDMsVkVSSUZZX0FOQUxZU0lTOjQ0LFZFUklGWV9ERU1PTlNUUkFUSU9OOjQ1LFZFUklGWV9JTlNQRUNUSU9OOjQ2LFZFUklGWV9URVNUOjQ3LEVMRU1FTlQ6NDgsZWxlbWVudE5hbWU6NDksZWxlbWVudEJvZHk6NTAsVFlQRTo1MSx0eXBlOjUyLERPQ1JFRjo1MyxyZWY6NTQsRU5EX0FSUk9XX0w6NTUscmVsYXRpb25zaGlwOjU2LExJTkU6NTcsRU5EX0FSUk9XX1I6NTgsQ09OVEFJTlM6NTksQ09QSUVTOjYwLERFUklWRVM6NjEsU0FUSVNGSUVTOjYyLFZFUklGSUVTOjYzLFJFRklORVM6NjQsVFJBQ0VTOjY1LHVucVN0cmluZzo2NixxU3RyaW5nOjY3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJORVdMSU5FIiw2OiJSRCIsODoiRU9GIiwxMjoiOiIsMTQ6Im9wZW5fZGlyZWN0aXZlIiwxNToidHlwZV9kaXJlY3RpdmUiLDE2OiJhcmdfZGlyZWN0aXZlIiwxNzoiY2xvc2VfZGlyZWN0aXZlIiwyMzoiU1RSVUNUX1NUQVJUIiwyNToiSUQiLDI2OiJDT0xPTlNFUCIsMjg6IlRFWFQiLDMwOiJSSVNLIiwzMjoiVkVSSUZZTVRIRCIsMzQ6IlNUUlVDVF9TVE9QIiwzNToiUkVRVUlSRU1FTlQiLDM2OiJGVU5DVElPTkFMX1JFUVVJUkVNRU5UIiwzNzoiSU5URVJGQUNFX1JFUVVJUkVNRU5UIiwzODoiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQiLDM5OiJQSFlTSUNBTF9SRVFVSVJFTUVOVCIsNDA6IkRFU0lHTl9DT05TVFJBSU5UIiw0MToiTE9XX1JJU0siLDQyOiJNRURfUklTSyIsNDM6IkhJR0hfUklTSyIsNDQ6IlZFUklGWV9BTkFMWVNJUyIsNDU6IlZFUklGWV9ERU1PTlNUUkFUSU9OIiw0NjoiVkVSSUZZX0lOU1BFQ1RJT04iLDQ3OiJWRVJJRllfVEVTVCIsNDg6IkVMRU1FTlQiLDUxOiJUWVBFIiw1MzoiRE9DUkVGIiw1NToiRU5EX0FSUk9XX0wiLDU3OiJMSU5FIiw1ODoiRU5EX0FSUk9XX1IiLDU5OiJDT05UQUlOUyIsNjA6IkNPUElFUyIsNjE6IkRFUklWRVMiLDYyOiJTQVRJU0ZJRVMiLDYzOiJWRVJJRklFUyIsNjQ6IlJFRklORVMiLDY1OiJUUkFDRVMiLDY2OiJ1bnFTdHJpbmciLDY3OiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDNdLFs0LDVdLFs5LDFdLFsxMCwxXSxbMTMsMV0sWzExLDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsxOCw1XSxbMjQsNV0sWzI0LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDJdLFsyNCwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzE5LDVdLFs1MCw1XSxbNTAsNV0sWzUwLDJdLFs1MCwxXSxbMjAsNV0sWzIwLDVdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbMjIsMV0sWzIyLDFdLFsyNywxXSxbMjcsMV0sWzI5LDFdLFsyOSwxXSxbNDksMV0sWzQ5LDFdLFs1MiwxXSxbNTIsMV0sWzU0LDFdLFs1NCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKTticmVhaztjYXNlIDEwOnRoaXMuJD1bXTticmVhaztjYXNlIDE2OnIuYWRkUmVxdWlyZW1lbnQoYVtzLTNdLGFbcy00XSk7YnJlYWs7Y2FzZSAxNzpyLnNldE5ld1JlcUlkKGFbcy0yXSk7YnJlYWs7Y2FzZSAxODpyLnNldE5ld1JlcVRleHQoYVtzLTJdKTticmVhaztjYXNlIDE5OnIuc2V0TmV3UmVxUmlzayhhW3MtMl0pO2JyZWFrO2Nhc2UgMjA6ci5zZXROZXdSZXFWZXJpZnlNZXRob2QoYVtzLTJdKTticmVhaztjYXNlIDIzOnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDI0OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI2OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI3OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI4OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI5OnRoaXMuJD1yLlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDMwOnRoaXMuJD1yLlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDMxOnRoaXMuJD1yLlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDMzOnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDM2OnIuYWRkRWxlbWVudChhW3MtM10pO2JyZWFrO2Nhc2UgMzc6ci5zZXROZXdFbGVtZW50VHlwZShhW3MtMl0pO2JyZWFrO2Nhc2UgMzg6ci5zZXROZXdFbGVtZW50RG9jUmVmKGFbcy0yXSk7YnJlYWs7Y2FzZSA0MTpyLmFkZFJlbGF0aW9uc2hpcChhW3MtMl0sYVtzXSxhW3MtNF0pO2JyZWFrO2Nhc2UgNDI6ci5hZGRSZWxhdGlvbnNoaXAoYVtzLTJdLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDQ1OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQ2OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDQ4OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ5OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuVFJBQ0VTfX0sdGFibGU6W3szOjEsNDoyLDY6ZSw5OjQsMTQ6bn0sezE6WzNdfSx7Mzo3LDQ6Miw1OlsxLDZdLDY6ZSw5OjQsMTQ6bn0sezU6WzEsOF19LHsxMDo5LDE1OlsxLDEwXX0sezE1OlsyLDZdfSx7MzoxMSw0OjIsNjplLDk6NCwxNDpufSx7MTpbMiwyXX0sezQ6MTYsNTpyLDc6MTIsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7MTE6MjksMTI6WzEsMzBdLDE3OnB9LHQoWzEyLDE3XSxbMiw3XSksezE6WzIsMV19LHs4OlsxLDMyXX0sezQ6MTYsNTpyLDc6MzMsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNCw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM1LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzYsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNyw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHsyMjozOCw2NjpbMSwzOV0sNjc6WzEsNDBdfSx7NDk6NDEsNjY6WzEsNDJdLDY3OlsxLDQzXX0sezU1OlsxLDQ0XSw1NzpbMSw0NV19LHQoeSxbMiwyM10pLHQoeSxbMiwyNF0pLHQoeSxbMiwyNV0pLHQoeSxbMiwyNl0pLHQoeSxbMiwyN10pLHQoeSxbMiwyOF0pLHQoZyxbMiw1Ml0pLHQoZyxbMiw1M10pLHQobSxbMiw0XSksezEzOjQ2LDE2OlsxLDQ3XX0sdChtLFsyLDldKSx7MTpbMiwzXX0sezg6WzIsMTFdfSx7ODpbMiwxMl19LHs4OlsyLDEzXX0sezg6WzIsMTRdfSx7ODpbMiwxNV19LHsyMzpbMSw0OF19LHsyMzpbMiw1MF19LHsyMzpbMiw1MV19LHsyMzpbMSw0OV19LHsyMzpbMiw1Nl19LHsyMzpbMiw1N119LHs1Njo1MCw1OTp2LDYwOmIsNjE6Xyw2Mjp4LDYzOncsNjQ6ayw2NTpUfSx7NTY6NTgsNTk6diw2MDpiLDYxOl8sNjI6eCw2Mzp3LDY0OmssNjU6VH0sezExOjU5LDE3OnB9LHsxNzpbMiw4XX0sezU6WzEsNjBdfSx7NTpbMSw2MV19LHs1NzpbMSw2Ml19LHQoRSxbMiw0M10pLHQoRSxbMiw0NF0pLHQoRSxbMiw0NV0pLHQoRSxbMiw0Nl0pLHQoRSxbMiw0N10pLHQoRSxbMiw0OF0pLHQoRSxbMiw0OV0pLHs1ODpbMSw2M119LHQobSxbMiw1XSksezU6QywyNDo2NCwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1Ok8sMzQ6Qiw1MDo3MSw1MTpMLDUzOkl9LHsyNzo3Niw2NjpmLDY3OmR9LHsyNzo3Nyw2NjpmLDY3OmR9LHQoUixbMiwxNl0pLHsyNjpbMSw3OF19LHsyNjpbMSw3OV19LHsyNjpbMSw4MF19LHsyNjpbMSw4MV19LHs1OkMsMjQ6ODIsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx0KFIsWzIsMjJdKSx0KFIsWzIsMzZdKSx7MjY6WzEsODNdfSx7MjY6WzEsODRdfSx7NTpPLDM0OkIsNTA6ODUsNTE6TCw1MzpJfSx0KFIsWzIsNDBdKSx0KFIsWzIsNDFdKSx0KFIsWzIsNDJdKSx7Mjc6ODYsNjY6Ziw2NzpkfSx7Mjk6ODcsNjY6WzEsODhdLDY3OlsxLDg5XX0sezMxOjkwLDQxOlsxLDkxXSw0MjpbMSw5Ml0sNDM6WzEsOTNdfSx7MzM6OTQsNDQ6WzEsOTVdLDQ1OlsxLDk2XSw0NjpbMSw5N10sNDc6WzEsOThdfSx0KFIsWzIsMjFdKSx7NTI6OTksNjY6WzEsMTAwXSw2NzpbMSwxMDFdfSx7NTQ6MTAyLDY2OlsxLDEwM10sNjc6WzEsMTA0XX0sdChSLFsyLDM5XSksezU6WzEsMTA1XX0sezU6WzEsMTA2XX0sezU6WzIsNTRdfSx7NTpbMiw1NV19LHs1OlsxLDEwN119LHs1OlsyLDI5XX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHs1OlsxLDEwOF19LHs1OlsyLDMyXX0sezU6WzIsMzNdfSx7NTpbMiwzNF19LHs1OlsyLDM1XX0sezU6WzEsMTA5XX0sezU6WzIsNThdfSx7NTpbMiw1OV19LHs1OlsxLDExMF19LHs1OlsyLDYwXX0sezU6WzIsNjFdfSx7NTpDLDI0OjExMSwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1OkMsMjQ6MTEyLDI1OlMsMjg6QSwzMDpNLDMyOk4sMzQ6RH0sezU6QywyNDoxMTMsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx7NTpDLDI0OjExNCwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1Ok8sMzQ6Qiw1MDoxMTUsNTE6TCw1MzpJfSx7NTpPLDM0OkIsNTA6MTE2LDUxOkwsNTM6SX0sdChSLFsyLDE3XSksdChSLFsyLDE4XSksdChSLFsyLDE5XSksdChSLFsyLDIwXSksdChSLFsyLDM3XSksdChSLFsyLDM4XSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDZdLDc6WzIsMl0sMTE6WzIsMV0sMzI6WzIsM10sMzM6WzIsMTFdLDM0OlsyLDEyXSwzNTpbMiwxM10sMzY6WzIsMTRdLDM3OlsyLDE1XSwzOTpbMiw1MF0sNDA6WzIsNTFdLDQyOlsyLDU2XSw0MzpbMiw1N10sNDc6WzIsOF0sODg6WzIsNTRdLDg5OlsyLDU1XSw5MTpbMiwyOV0sOTI6WzIsMzBdLDkzOlsyLDMxXSw5NTpbMiwzMl0sOTY6WzIsMzNdLDk3OlsyLDM0XSw5ODpbMiwzNV0sMTAwOlsyLDU4XSwxMDE6WzIsNTldLDEwMzpbMiw2MF0sMTA0OlsyLDYxXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFA9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTQ7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDE1O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTc7Y2FzZSA0OnJldHVybiAxNjtjYXNlIDU6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDY7Y2FzZSAxMTpyZXR1cm4gMjM7Y2FzZSAxMjpyZXR1cm4gMzQ7Y2FzZSAxMzpyZXR1cm4gMjY7Y2FzZSAxNDpyZXR1cm4gMjU7Y2FzZSAxNTpyZXR1cm4gMjg7Y2FzZSAxNjpyZXR1cm4gMzA7Y2FzZSAxNzpyZXR1cm4gMzI7Y2FzZSAxODpyZXR1cm4gMzU7Y2FzZSAxOTpyZXR1cm4gMzY7Y2FzZSAyMDpyZXR1cm4gMzc7Y2FzZSAyMTpyZXR1cm4gMzg7Y2FzZSAyMjpyZXR1cm4gMzk7Y2FzZSAyMzpyZXR1cm4gNDA7Y2FzZSAyNDpyZXR1cm4gNDE7Y2FzZSAyNTpyZXR1cm4gNDI7Y2FzZSAyNjpyZXR1cm4gNDM7Y2FzZSAyNzpyZXR1cm4gNDQ7Y2FzZSAyODpyZXR1cm4gNDU7Y2FzZSAyOTpyZXR1cm4gNDY7Y2FzZSAzMDpyZXR1cm4gNDc7Y2FzZSAzMTpyZXR1cm4gNDg7Y2FzZSAzMjpyZXR1cm4gNTk7Y2FzZSAzMzpyZXR1cm4gNjA7Y2FzZSAzNDpyZXR1cm4gNjE7Y2FzZSAzNTpyZXR1cm4gNjI7Y2FzZSAzNjpyZXR1cm4gNjM7Y2FzZSAzNzpyZXR1cm4gNjQ7Y2FzZSAzODpyZXR1cm4gNjU7Y2FzZSAzOTpyZXR1cm4gNTE7Y2FzZSA0MDpyZXR1cm4gNTM7Y2FzZSA0MTpyZXR1cm4gNTU7Y2FzZSA0MjpyZXR1cm4gNTg7Y2FzZSA0MzpyZXR1cm4gNTc7Y2FzZSA0NDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ2OnJldHVybiJxU3RyaW5nIjtjYXNlIDQ3OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksNjZ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/OjopL2ksL14oPzppZFxiKS9pLC9eKD86dGV4dFxiKS9pLC9eKD86cmlza1xiKS9pLC9eKD86dmVyaWZ5TWV0aG9kXGIpL2ksL14oPzpyZXF1aXJlbWVudFxiKS9pLC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XGIpL2ksL14oPzppbnRlcmZhY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGVyZm9ybWFuY2VSZXF1aXJlbWVudFxiKS9pLC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86ZGVzaWduQ29uc3RyYWludFxiKS9pLC9eKD86bG93XGIpL2ksL14oPzptZWRpdW1cYikvaSwvXig/OmhpZ2hcYikvaSwvXig/OmFuYWx5c2lzXGIpL2ksL14oPzpkZW1vbnN0cmF0aW9uXGIpL2ksL14oPzppbnNwZWN0aW9uXGIpL2ksL14oPzp0ZXN0XGIpL2ksL14oPzplbGVtZW50XGIpL2ksL14oPzpjb250YWluc1xiKS9pLC9eKD86Y29waWVzXGIpL2ksL14oPzpkZXJpdmVzXGIpL2ksL14oPzpzYXRpc2ZpZXNcYikvaSwvXig/OnZlcmlmaWVzXGIpL2ksL14oPzpyZWZpbmVzXGIpL2ksL14oPzp0cmFjZXNcYikvaSwvXig/OnR5cGVcYikvaSwvXig/OmRvY3JlZlxiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXlxyXG5ce1w8XD5cLVw9XSopL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ3XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaigpe3RoaXMueXk9e319cmV0dXJuIEYubGV4ZXI9UCxqLnByb3RvdHlwZT1GLEYuUGFyc2VyPWosbmV3IGp9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4ODAwKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDY4NzY6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsM10scj1bMSw1XSxpPVsxLDddLGE9WzIsNV0sbz1bMSwxNV0scz1bMSwxN10sYz1bMSwxOF0sdT1bMSwxOV0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwyM10sZD1bMSwyOV0scD1bMSwzMF0seT1bMSwzMV0sZz1bMSwzMl0sbT1bMSwzM10sdj1bMSwzNF0sYj1bMSwzN10sXz1bMSwzOF0seD1bMSwzOV0sdz1bMSw0MF0saz1bMSw0MV0sVD1bMSw0Ml0sRT1bMSw0NV0sQz1bMSw0LDUsMTYsMjAsMjIsMjMsMjQsMzAsMzIsMzMsMzQsMzUsMzYsMzgsNDAsNDEsNDIsNDYsNDcsNDgsNDksNTcsNjddLFM9WzEsNThdLEE9WzQsNSwxNiwyMCwyMiwyMywyNCwzMCwzMiwzMywzNCwzNSwzNiwzOCw0Miw0Niw0Nyw0OCw0OSw1Nyw2N10sTT1bNCw1LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDMzLDM0LDM1LDM2LDM4LDQxLDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxOPVs0LDUsMTYsMjAsMjIsMjMsMjQsMzAsMzIsMzMsMzQsMzUsMzYsMzgsNDAsNDIsNDYsNDcsNDgsNDksNTcsNjddLEQ9WzU1LDU2LDU3XSxPPVsxLDQsNSw3LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDMzLDM0LDM1LDM2LDM4LDQwLDQxLDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxCPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxkaXJlY3RpdmU6NixTRDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxvcGVuRGlyZWN0aXZlOjExLHR5cGVEaXJlY3RpdmU6MTIsY2xvc2VEaXJlY3RpdmU6MTMsIjoiOjE0LGFyZ0RpcmVjdGl2ZToxNSxwYXJ0aWNpcGFudDoxNixhY3RvcjoxNyxBUzoxOCxyZXN0T2ZMaW5lOjE5LHBhcnRpY2lwYW50X2FjdG9yOjIwLHNpZ25hbDoyMSxhdXRvbnVtYmVyOjIyLGFjdGl2YXRlOjIzLGRlYWN0aXZhdGU6MjQsbm90ZV9zdGF0ZW1lbnQ6MjUsbGlua3Nfc3RhdGVtZW50OjI2LGxpbmtfc3RhdGVtZW50OjI3LHByb3BlcnRpZXNfc3RhdGVtZW50OjI4LGRldGFpbHNfc3RhdGVtZW50OjI5LHRpdGxlOjMwLHRleHQyOjMxLGxvb3A6MzIsZW5kOjMzLHJlY3Q6MzQsb3B0OjM1LGFsdDozNixlbHNlX3NlY3Rpb25zOjM3LHBhcjozOCxwYXJfc2VjdGlvbnM6MzksYW5kOjQwLGVsc2U6NDEsbm90ZTo0MixwbGFjZW1lbnQ6NDMsb3Zlcjo0NCxhY3Rvcl9wYWlyOjQ1LGxpbmtzOjQ2LGxpbms6NDcscHJvcGVydGllczo0OCxkZXRhaWxzOjQ5LHNwYWNlTGlzdDo1MCwiLCI6NTEsbGVmdF9vZjo1MixyaWdodF9vZjo1MyxzaWduYWx0eXBlOjU0LCIrIjo1NSwiLSI6NTYsQUNUT1I6NTcsU09MSURfT1BFTl9BUlJPVzo1OCxET1RURURfT1BFTl9BUlJPVzo1OSxTT0xJRF9BUlJPVzo2MCxET1RURURfQVJST1c6NjEsU09MSURfQ1JPU1M6NjIsRE9UVEVEX0NST1NTOjYzLFNPTElEX1BPSU5UOjY0LERPVFRFRF9QT0lOVDo2NSxUWFQ6NjYsb3Blbl9kaXJlY3RpdmU6NjcsdHlwZV9kaXJlY3RpdmU6NjgsYXJnX2RpcmVjdGl2ZTo2OSxjbG9zZV9kaXJlY3RpdmU6NzAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw3OiJTRCIsMTQ6IjoiLDE2OiJwYXJ0aWNpcGFudCIsMTg6IkFTIiwxOToicmVzdE9mTGluZSIsMjA6InBhcnRpY2lwYW50X2FjdG9yIiwyMjoiYXV0b251bWJlciIsMjM6ImFjdGl2YXRlIiwyNDoiZGVhY3RpdmF0ZSIsMzA6InRpdGxlIiwzMjoibG9vcCIsMzM6ImVuZCIsMzQ6InJlY3QiLDM1OiJvcHQiLDM2OiJhbHQiLDM4OiJwYXIiLDQwOiJhbmQiLDQxOiJlbHNlIiw0Mjoibm90ZSIsNDQ6Im92ZXIiLDQ2OiJsaW5rcyIsNDc6ImxpbmsiLDQ4OiJwcm9wZXJ0aWVzIiw0OToiZGV0YWlscyIsNTE6IiwiLDUyOiJsZWZ0X29mIiw1MzoicmlnaHRfb2YiLDU1OiIrIiw1NjoiLSIsNTc6IkFDVE9SIiw1ODoiU09MSURfT1BFTl9BUlJPVyIsNTk6IkRPVFRFRF9PUEVOX0FSUk9XIiw2MDoiU09MSURfQVJST1ciLDYxOiJET1RURURfQVJST1ciLDYyOiJTT0xJRF9DUk9TUyIsNjM6IkRPVFRFRF9DUk9TUyIsNjQ6IlNPTElEX1BPSU5UIiw2NToiRE9UVEVEX1BPSU5UIiw2NjoiVFhUIiw2Nzoib3Blbl9kaXJlY3RpdmUiLDY4OiJ0eXBlX2RpcmVjdGl2ZSIsNjk6ImFyZ19kaXJlY3RpdmUiLDcwOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsMl0sWzgsMF0sWzgsMl0sWzksMl0sWzksMV0sWzksMV0sWzYsNF0sWzYsNl0sWzEwLDVdLFsxMCwzXSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwzXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbMzksMV0sWzM5LDRdLFszNywxXSxbMzcsNF0sWzI1LDRdLFsyNSw0XSxbMjYsM10sWzI3LDNdLFsyOCwzXSxbMjksM10sWzUwLDJdLFs1MCwxXSxbNDUsM10sWzQ1LDFdLFs0MywxXSxbNDMsMV0sWzIxLDVdLFsyMSw1XSxbMjEsNF0sWzE3LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzMxLDFdLFsxMSwxXSxbMTIsMV0sWzE1LDFdLFsxMywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6cmV0dXJuIHIuYXBwbHkoYVtzXSksYVtzXTtjYXNlIDU6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OmNhc2UgNDU6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMjphW3MtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGFbcy0zXS5kZXNjcmlwdGlvbj1yLnBhcnNlTWVzc2FnZShhW3MtMV0pLHRoaXMuJD1hW3MtM107YnJlYWs7Y2FzZSAxMzphW3MtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNDphW3MtM10udHlwZT0iYWRkQWN0b3IiLGFbcy0zXS5kZXNjcmlwdGlvbj1yLnBhcnNlTWVzc2FnZShhW3MtMV0pLHRoaXMuJD1hW3MtM107YnJlYWs7Y2FzZSAxNTphW3MtMV0udHlwZT0iYWRkQWN0b3IiLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNzpyLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19O2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9W3t0eXBlOiJzZXRUaXRsZSIsdGV4dDphW3MtMV19XTticmVhaztjYXNlIDI2OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6YVtzLTJdLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyNzphW3MtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5SRUNUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI4OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5PUFRfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjk6YVtzLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDMwOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfQU5EfSxhW3NdXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX0VMU0V9LGFbc11dKTticmVhaztjYXNlIDM2OnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6YVtzLTJdLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDM3OmFbcy0yXT1bXS5jb25jYXQoYVtzLTFdLGFbcy0xXSkuc2xpY2UoMCwyKSxhW3MtMl1bMF09YVtzLTJdWzBdLmFjdG9yLGFbcy0yXVsxXT1hW3MtMl1bMV0uYWN0b3IsdGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpyLlBMQUNFTUVOVC5PVkVSLGFjdG9yOmFbcy0yXS5zbGljZSgwLDIpLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZExpbmtzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkQUxpbmsiLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGRQcm9wZXJ0aWVzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkRGV0YWlscyIsYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPVthW3MtMl0sYVtzXV07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9ci5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9W2Fbcy00XSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTRdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0zXSxtc2c6YVtzXX0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX1dO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy00XX1dO2JyZWFrO2Nhc2UgNTA6dGhpcy4kPVthW3MtM10sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy0zXS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtMl0sbXNnOmFbc119XTticmVhaztjYXNlIDUxOnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOmFbc119O2JyZWFrO2Nhc2UgNTI6dGhpcy4kPXIuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDUzOnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9PUEVOO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXIuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9DUk9TUzticmVhaztjYXNlIDU3OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDU4OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX1BPSU5UO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXIucGFyc2VNZXNzYWdlKGFbc10udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWs7Y2FzZSA2MTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjI6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjM6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDY0OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInNlcXVlbmNlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDExOjYsNjc6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx0KFsxLDQsNSwxNiwyMCwyMiwyMywyNCwzMCwzMiwzNCwzNSwzNiwzOCw0Miw0Niw0Nyw0OCw0OSw1Nyw2N10sYSx7ODoxMX0pLHsxMjoxMiw2ODpbMSwxM119LHs2ODpbMiw2MV19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjozNSw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozNiwyMDp1LDIxOjIwLDIyOmwsMjM6aCwyNDpmLDI1OjI0LDI2OjI1LDI3OjI2LDI4OjI3LDI5OjI4LDMwOmQsMzI6cCwzNDp5LDM1OmcsMzY6bSwzODp2LDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHsxMzo0MywxNDpbMSw0NF0sNzA6RX0sdChbMTQsNzBdLFsyLDYyXSksdChDLFsyLDZdKSx7NjozNSwxMDo0NiwxMTo2LDE2OmMsMTc6MzYsMjA6dSwyMToyMCwyMjpsLDIzOmgsMjQ6ZiwyNToyNCwyNjoyNSwyNzoyNiwyODoyNywyOToyOCwzMDpkLDMyOnAsMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx0KEMsWzIsOF0pLHQoQyxbMiw5XSksezE3OjQ3LDU3OlR9LHsxNzo0OCw1NzpUfSx7NTpbMSw0OV19LHQoQyxbMiwxN10pLHsxNzo1MCw1NzpUfSx7MTc6NTEsNTc6VH0sezU6WzEsNTJdfSx7NTpbMSw1M119LHs1OlsxLDU0XX0sezU6WzEsNTVdfSx7NTpbMSw1Nl19LHszMTo1Nyw2NjpTfSx7MTk6WzEsNTldfSx7MTk6WzEsNjBdfSx7MTk6WzEsNjFdfSx7MTk6WzEsNjJdfSx7MTk6WzEsNjNdfSx0KEMsWzIsMzFdKSx7NTQ6NjQsNTg6WzEsNjVdLDU5OlsxLDY2XSw2MDpbMSw2N10sNjE6WzEsNjhdLDYyOlsxLDY5XSw2MzpbMSw3MF0sNjQ6WzEsNzFdLDY1OlsxLDcyXX0sezQzOjczLDQ0OlsxLDc0XSw1MjpbMSw3NV0sNTM6WzEsNzZdfSx7MTc6NzcsNTc6VH0sezE3Ojc4LDU3OlR9LHsxNzo3OSw1NzpUfSx7MTc6ODAsNTc6VH0sdChbNSwxOCw1MSw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Nl0sWzIsNTFdKSx7NTpbMSw4MV19LHsxNTo4Miw2OTpbMSw4M119LHs1OlsyLDY0XX0sdChDLFsyLDddKSx7NTpbMSw4NV0sMTg6WzEsODRdfSx7NTpbMSw4N10sMTg6WzEsODZdfSx0KEMsWzIsMTZdKSx7NTpbMSw4OF19LHs1OlsxLDg5XX0sdChDLFsyLDIwXSksdChDLFsyLDIxXSksdChDLFsyLDIyXSksdChDLFsyLDIzXSksdChDLFsyLDI0XSksezU6WzEsOTBdfSx7NTpbMiw2MF19LHQoQSxhLHs4OjkxfSksdChBLGEsezg6OTJ9KSx0KEEsYSx7ODo5M30pLHQoTSxhLHszNzo5NCw4Ojk1fSksdChOLGEsezM5Ojk2LDg6OTd9KSx7MTc6MTAwLDU1OlsxLDk4XSw1NjpbMSw5OV0sNTc6VH0sdChELFsyLDUyXSksdChELFsyLDUzXSksdChELFsyLDU0XSksdChELFsyLDU1XSksdChELFsyLDU2XSksdChELFsyLDU3XSksdChELFsyLDU4XSksdChELFsyLDU5XSksezE3OjEwMSw1NzpUfSx7MTc6MTAzLDQ1OjEwMiw1NzpUfSx7NTc6WzIsNDZdfSx7NTc6WzIsNDddfSx7MzE6MTA0LDY2OlN9LHszMToxMDUsNjY6U30sezMxOjEwNiw2NjpTfSx7MzE6MTA3LDY2OlN9LHQoTyxbMiwxMF0pLHsxMzoxMDgsNzA6RX0sezcwOlsyLDYzXX0sezE5OlsxLDEwOV19LHQoQyxbMiwxM10pLHsxOTpbMSwxMTBdfSx0KEMsWzIsMTVdKSx0KEMsWzIsMThdKSx0KEMsWzIsMTldKSx0KEMsWzIsMjVdKSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsxLDExMV0sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsxLDExMl0sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsxLDExM10sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7MzM6WzEsMTE0XX0sezQ6byw1OnMsNjozNSw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozNiwyMDp1LDIxOjIwLDIyOmwsMjM6aCwyNDpmLDI1OjI0LDI2OjI1LDI3OjI2LDI4OjI3LDI5OjI4LDMwOmQsMzI6cCwzMzpbMiwzNF0sMzQ6eSwzNTpnLDM2Om0sMzg6diw0MTpbMSwxMTVdLDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHszMzpbMSwxMTZdfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsyLDMyXSwzNDp5LDM1OmcsMzY6bSwzODp2LDQwOlsxLDExN10sNDI6Yiw0NjpfLDQ3OngsNDg6dyw0OTprLDU3OlQsNjc6aX0sezE3OjExOCw1NzpUfSx7MTc6MTE5LDU3OlR9LHszMToxMjAsNjY6U30sezMxOjEyMSw2NjpTfSx7MzE6MTIyLDY2OlN9LHs1MTpbMSwxMjNdLDY2OlsyLDQ1XX0sezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1OlsyLDQwXX0sezU6WzIsNDFdfSx7NTpbMSwxMjRdfSx7NTpbMSwxMjVdfSx7NTpbMSwxMjZdfSx0KEMsWzIsMjZdKSx0KEMsWzIsMjddKSx0KEMsWzIsMjhdKSx0KEMsWzIsMjldKSx7MTk6WzEsMTI3XX0sdChDLFsyLDMwXSksezE5OlsxLDEyOF19LHszMToxMjksNjY6U30sezMxOjEzMCw2NjpTfSx7NTpbMiw1MF19LHs1OlsyLDM2XX0sezU6WzIsMzddfSx7MTc6MTMxLDU3OlR9LHQoTyxbMiwxMV0pLHQoQyxbMiwxMl0pLHQoQyxbMiwxNF0pLHQoTSxhLHs4Ojk1LDM3OjEzMn0pLHQoTixhLHs4Ojk3LDM5OjEzM30pLHs1OlsyLDQ4XX0sezU6WzIsNDldfSx7NjY6WzIsNDRdfSx7MzM6WzIsMzVdfSx7MzM6WzIsMzNdfV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsNjFdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0NTpbMiw2NF0sNTg6WzIsNjBdLDc1OlsyLDQ2XSw3NjpbMiw0N10sODM6WzIsNjNdLDEwNDpbMiwzOF0sMTA1OlsyLDM5XSwxMDY6WzIsNDBdLDEwNzpbMiw0MV0sMTIwOlsyLDUwXSwxMjE6WzIsMzZdLDEyMjpbMiwzN10sMTI5OlsyLDQ4XSwxMzA6WzIsNDldLDEzMTpbMiw0NF0sMTMyOlsyLDM1XSwxMzM6WzIsMzNdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCx3LGssVCxFLEMsUyxBLE09e307Oyl7aWYodz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbd10/az10aGlzLmRlZmF1bHRBY3Rpb25zW3ddOihudWxsPT1fJiYoXz1iKCkpLGs9b1t3XSYmb1t3XVtfXSksdm9pZCAwPT09a3x8IWsubGVuZ3RofHwha1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW3ddKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYoa1swXWluc3RhbmNlb2YgQXJyYXkmJmsubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit3KyIsIHRva2VuOiAiK18pO3N3aXRjaChrWzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2goa1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LGtbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw2NztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNjg7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw3MDtjYXNlIDQ6cmV0dXJuIDY5O2Nhc2UgNTpjYXNlIDM5OmNhc2UgNTI6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwxNjtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIwO2Nhc2UgMTM6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSx0aGlzLmJlZ2luKCJBTElBUyIpLDU3O2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiTElORSIpLDE4O2Nhc2UgMTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNTtjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzI7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM0O2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNTtjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQxO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzODtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDA7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgMjQ6cmV0dXJuIDMzO2Nhc2UgMjU6cmV0dXJuIDUyO2Nhc2UgMjY6cmV0dXJuIDUzO2Nhc2UgMjc6cmV0dXJuIDQ2O2Nhc2UgMjg6cmV0dXJuIDQ3O2Nhc2UgMjk6cmV0dXJuIDQ4O2Nhc2UgMzA6cmV0dXJuIDQ5O2Nhc2UgMzE6cmV0dXJuIDQ0O2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzNDpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyNDtjYXNlIDM1OnJldHVybiAzMDtjYXNlIDM2OnJldHVybiA3O2Nhc2UgMzc6cmV0dXJuIDIyO2Nhc2UgMzg6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw1NztjYXNlIDQxOnJldHVybiA2MDtjYXNlIDQyOnJldHVybiA2MTtjYXNlIDQzOnJldHVybiA1ODtjYXNlIDQ0OnJldHVybiA1OTtjYXNlIDQ1OnJldHVybiA2MjtjYXNlIDQ2OnJldHVybiA2MztjYXNlIDQ3OnJldHVybiA2NDtjYXNlIDQ4OnJldHVybiA2NTtjYXNlIDQ5OnJldHVybiA2NjtjYXNlIDUwOnJldHVybiA1NTtjYXNlIDUxOnJldHVybiA1NjtjYXNlIDUzOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86YWN0b3JcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oPz0oKD8hXG4pXHMpK2FzKD8hXG4pXHN8WyNcbjtdfCQpKS9pLC9eKD86YXNcYikvaSwvXig/Oig/OikpL2ksL14oPzpsb29wXGIpL2ksL14oPzpyZWN0XGIpL2ksL14oPzpvcHRcYikvaSwvXig/OmFsdFxiKS9pLC9eKD86ZWxzZVxiKS9pLC9eKD86cGFyXGIpL2ksL14oPzphbmRcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMSw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzLDhdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNCw4XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbNyw4LDEzXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbNyw4LDE0LDE1XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOls3LDgsMjNdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsOSwxMCwxMSwxMiwxNiwxNywxOCwxOSwyMCwyMSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1M10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIEkoKXt0aGlzLnl5PXt9fXJldHVybiBCLmxleGVyPUwsSS5wcm90b3R5cGU9QixCLlBhcnNlcj1JLG5ldyBJfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oMTk5MykucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSwzNTg0Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMTldLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMzBdLGQ9WzEsMjNdLHA9WzEsMjRdLHk9WzEsMjVdLGc9WzEsMjZdLG09WzEsMjddLHY9WzEsMzJdLGI9WzEsMzNdLF89WzEsMzRdLHg9WzEsMzVdLHc9WzEsMzFdLGs9WzEsMzhdLFQ9WzEsNCw1LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxFPVsxLDQsNSwxMiwxMywxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sQz1bMSw0LDUsNywxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sUz1bNCw1LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxBPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5MOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsaWRTdGF0ZW1lbnQ6MTEsREVTQ1I6MTIsIi0tXHgzZSI6MTMsSElERV9FTVBUWToxNCxzY2FsZToxNSxXSURUSDoxNixDT01QT1NJVF9TVEFURToxNyxTVFJVQ1RfU1RBUlQ6MTgsU1RSVUNUX1NUT1A6MTksU1RBVEVfREVTQ1I6MjAsQVM6MjEsSUQ6MjIsRk9SSzoyMyxKT0lOOjI0LENIT0lDRToyNSxDT05DVVJSRU5UOjI2LG5vdGU6Mjcsbm90ZVBvc2l0aW9uOjI4LE5PVEVfVEVYVDoyOSxkaXJlY3Rpb246MzAsb3BlbkRpcmVjdGl2ZTozMSx0eXBlRGlyZWN0aXZlOjMyLGNsb3NlRGlyZWN0aXZlOjMzLCI6IjozNCxhcmdEaXJlY3RpdmU6MzUsZGlyZWN0aW9uX3RiOjM2LGRpcmVjdGlvbl9idDozNyxkaXJlY3Rpb25fcmw6MzgsZGlyZWN0aW9uX2xyOjM5LGVvbDo0MCwiOyI6NDEsRURHRV9TVEFURTo0MixsZWZ0X29mOjQzLHJpZ2h0X29mOjQ0LG9wZW5fZGlyZWN0aXZlOjQ1LHR5cGVfZGlyZWN0aXZlOjQ2LGFyZ19kaXJlY3RpdmU6NDcsY2xvc2VfZGlyZWN0aXZlOjQ4LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkwiLDc6IlNEIiwxMjoiREVTQ1IiLDEzOiItLVx4M2UiLDE0OiJISURFX0VNUFRZIiwxNToic2NhbGUiLDE2OiJXSURUSCIsMTc6IkNPTVBPU0lUX1NUQVRFIiwxODoiU1RSVUNUX1NUQVJUIiwxOToiU1RSVUNUX1NUT1AiLDIwOiJTVEFURV9ERVNDUiIsMjE6IkFTIiwyMjoiSUQiLDIzOiJGT1JLIiwyNDoiSk9JTiIsMjU6IkNIT0lDRSIsMjY6IkNPTkNVUlJFTlQiLDI3OiJub3RlIiwyOToiTk9URV9URVhUIiwzNDoiOiIsMzY6ImRpcmVjdGlvbl90YiIsMzc6ImRpcmVjdGlvbl9idCIsMzg6ImRpcmVjdGlvbl9ybCIsMzk6ImRpcmVjdGlvbl9sciIsNDE6IjsiLDQyOiJFREdFX1NUQVRFIiw0MzoibGVmdF9vZiIsNDQ6InJpZ2h0X29mIiw0NToib3Blbl9kaXJlY3RpdmUiLDQ2OiJ0eXBlX2RpcmVjdGl2ZSIsNDc6ImFyZ19kaXJlY3RpdmUiLDQ4OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsMl0sWzgsMF0sWzgsMl0sWzksMl0sWzksMV0sWzksMV0sWzEwLDFdLFsxMCwyXSxbMTAsM10sWzEwLDRdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMCw0XSxbMTAsM10sWzEwLDZdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbMTAsMV0sWzYsM10sWzYsNV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzMwLDFdLFs0MCwxXSxbNDAsMV0sWzExLDFdLFsxMSwxXSxbMjgsMV0sWzI4LDFdLFszMSwxXSxbMzIsMV0sWzM1LDFdLFszMywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6cmV0dXJuIHIuc2V0Um9vdERvYyhhW3NdKSxhW3NdO2Nhc2UgNTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA2OiJubCIhPWFbc10mJihhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdKTticmVhaztjYXNlIDc6Y2FzZSA4OmNhc2UgMzY6Y2FzZSAzNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSx1PWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgbD1hW3NdLnNwbGl0KCI6Iik7Yz1sWzBdLHU9W3UsbFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjp1fTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOnIuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjphW3MtMl0udHJpbSgpLHRleHQ6YVtzXS50cmltKCl9fTticmVhaztjYXNlIDMwOnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDMxOnIuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDMyOnIuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDMzOnIuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDQwOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MTpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MjphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDM6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwic3RhdGUiKX19LHRhYmxlOlt7MzoxLDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHsxOlszXX0sezM6OCw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx7Mzo5LDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHszOjEwLDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHQoWzEsNCw1LDE0LDE1LDE3LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxhLHs4OjExfSksezMyOjEyLDQ2OlsxLDEzXX0sezQ2OlsyLDQwXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0sezE6WzIsNF0sNDpvLDU6cyw2OjI4LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6bSwzMDoyOSwzMTo2LDM2OnYsMzc6YiwzODpfLDM5OngsNDI6dyw0NTppfSx7MzM6MzYsMzQ6WzEsMzddLDQ4Omt9LHQoWzM0LDQ4XSxbMiw0MV0pLHQoVCxbMiw2XSksezY6MjgsMTA6MzksMTE6MTgsMTQ6YywxNTp1LDE3OmwsMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6bSwzMDoyOSwzMTo2LDM2OnYsMzc6YiwzODpfLDM5OngsNDI6dyw0NTppfSx0KFQsWzIsOF0pLHQoVCxbMiw5XSksdChULFsyLDEwXSx7MTI6WzEsNDBdLDEzOlsxLDQxXX0pLHQoVCxbMiwxNF0pLHsxNjpbMSw0Ml19LHQoVCxbMiwxNl0sezE4OlsxLDQzXX0pLHsyMTpbMSw0NF19LHQoVCxbMiwyMF0pLHQoVCxbMiwyMV0pLHQoVCxbMiwyMl0pLHQoVCxbMiwyM10pLHsyODo0NSwyOTpbMSw0Nl0sNDM6WzEsNDddLDQ0OlsxLDQ4XX0sdChULFsyLDI2XSksdChULFsyLDI3XSksdChFLFsyLDM2XSksdChFLFsyLDM3XSksdChULFsyLDMwXSksdChULFsyLDMxXSksdChULFsyLDMyXSksdChULFsyLDMzXSksdChDLFsyLDI4XSksezM1OjQ5LDQ3OlsxLDUwXX0sdChDLFsyLDQzXSksdChULFsyLDddKSx0KFQsWzIsMTFdKSx7MTE6NTEsMjI6Ziw0Mjp3fSx0KFQsWzIsMTVdKSx0KFMsYSx7ODo1Mn0pLHsyMjpbMSw1M119LHsyMjpbMSw1NF19LHsyMTpbMSw1NV19LHsyMjpbMiwzOF19LHsyMjpbMiwzOV19LHszMzo1Niw0ODprfSx7NDg6WzIsNDJdfSx0KFQsWzIsMTJdLHsxMjpbMSw1N119KSx7NDpvLDU6cyw2OjI4LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMTk6WzEsNThdLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6XywzOTp4LDQyOncsNDU6aX0sdChULFsyLDE4XSx7MTg6WzEsNTldfSksezI5OlsxLDYwXX0sezIyOlsxLDYxXX0sdChDLFsyLDI5XSksdChULFsyLDEzXSksdChULFsyLDE3XSksdChTLGEsezg6NjJ9KSx0KFQsWzIsMjRdKSx0KFQsWzIsMjVdKSx7NDpvLDU6cyw2OjI4LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMTk6WzEsNjNdLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6XywzOTp4LDQyOncsNDU6aX0sdChULFsyLDE5XSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDQwXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sNDc6WzIsMzhdLDQ4OlsyLDM5XSw1MDpbMiw0Ml19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxNPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOmNhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMTpjYXNlIDI3OnJldHVybiAzNztjYXNlIDI6Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAzOmNhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw0NTtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNDY7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDM0O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0ODtjYXNlIDg6cmV0dXJuIDQ3O2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTI6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAzOTpjYXNlIDQ1OmJyZWFrO2Nhc2UgMTE6Y2FzZSA1OTpyZXR1cm4gNTtjYXNlIDE2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU0NBTEUiKSwxNTtjYXNlIDE3OnJldHVybiAxNjtjYXNlIDE4OmNhc2UgMzM6Y2FzZSAzNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDIwOmNhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjM7Y2FzZSAyMTpjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjI6Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjU7Y2FzZSAzMDp0aGlzLmJlZ2luKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUQVRFX0lEIiksIkFTIjtjYXNlIDMyOmNhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgMzQ6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDM1OnJldHVybiAxNztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE4O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJOT1RFIiksMjc7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNDM7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNDQ7Y2FzZSA0Mzp0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEUiKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEVfSUQiKSwiQVMiO2Nhc2UgNDY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwyOTtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI5O2Nhc2UgNTE6Y2FzZSA1MjpyZXR1cm4gNztjYXNlIDUzOnJldHVybiAxNDtjYXNlIDU0OnJldHVybiA0MjtjYXNlIDU1OnJldHVybiAyMjtjYXNlIDU2OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksMTI7Y2FzZSA1NzpyZXR1cm4gMTM7Y2FzZSA1ODpyZXR1cm4gMjY7Y2FzZSA2MDpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXHNdKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Oltcbl0pL2ksL14oPzpub3RlXHMrKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OiIpL2ksL14oPzpccyphc1xzKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cbl0qKS9pLC9eKD86XHMqW146XG5cc1wtXSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzpbXHNcU10qP2VuZCBub3RlXGIpL2ksL14oPzpzdGF0ZURpYWdyYW1ccyspL2ksL14oPzpzdGF0ZURpYWdyYW0tdjJccyspL2ksL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXGIpL2ksL14oPzpcW1wqXF0pL2ksL14oPzpbXjpcblxzXC1ce10rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86LS0+KS9pLC9eKD86LS0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7TElORTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDgsMTMsMTRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDcsMTMsMTRdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1LDEzLDE0XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEzLDE0LDE5LDI2LDI3LDI4LDI5LDM4LDM5LDQwLDU0LDU1LDU2LDU3LDU4XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls0N10saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNDksNTBdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzQ4XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls0MSw0Miw0M10saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzE3LDE4XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbMzJdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzEzLDE0LDIwLDIxLDIyLDIzLDI0LDI1LDMwLDMxLDM1LDM2LDM3XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEyLDE0LDE1LDE2LDE5LDM3LDQwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU5LDYwXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gTigpe3RoaXMueXk9e319cmV0dXJuIEEubGV4ZXI9TSxOLnByb3RvdHlwZT1BLEEuUGFyc2VyPU4sbmV3IE59KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigzMDY5KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDk3NjM6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDE3LDE4LDE5LDIxXSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDIxXSxjPVs0LDYsOSwxMSwxNywxOCwxOSwyMV0sdT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsc2VjdGlvbjoxOCx0YXNrTmFtZToxOSx0YXNrRGF0YToyMCxvcGVuX2RpcmVjdGl2ZToyMSx0eXBlX2RpcmVjdGl2ZToyMixhcmdfZGlyZWN0aXZlOjIzLGNsb3NlX2RpcmVjdGl2ZToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwxOToidGFza05hbWUiLDIwOiJ0YXNrRGF0YSIsMjE6Im9wZW5fZGlyZWN0aXZlIiwyMjoidHlwZV9kaXJlY3RpdmUiLDIzOiJhcmdfZGlyZWN0aXZlIiwyNDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOmNhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxMjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDE1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiam91cm5leSIpfX0sdGFibGU6W3szOjEsNDplLDc6MywxMjo0LDIxOm59LHsxOlszXX0sdChyLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTM6OCwyMjpbMSw5XX0sezIyOlsyLDE1XX0sezY6WzEsMTBdLDc6MTgsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzppLDE4OmEsMTk6bywyMTpufSx7MTpbMiwyXX0sezE0OjE5LDE1OlsxLDIwXSwyNDpzfSx0KFsxNSwyNF0sWzIsMTZdKSx0KHIsWzIsOF0sezE6WzIsMV19KSx0KHIsWzIsNF0pLHs3OjE4LDEwOjIyLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHsyMDpbMSwyM119LHQocixbMiwxNF0pLHsxMTpbMSwyNF19LHsxNjoyNSwyMzpbMSwyNl19LHsxMTpbMiwxOF19LHQocixbMiw1XSksdChyLFsyLDEzXSksdChjLFsyLDldKSx7MTQ6MjcsMjQ6c30sezI0OlsyLDE3XX0sezExOlsxLDI4XX0sdChjLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDE1XSw3OlsyLDJdLDIxOlsyLDE4XSwyNjpbMiwxN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxsPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIxO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMjtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI0O2Nhc2UgNDpyZXR1cm4gMjM7Y2FzZSA1OmNhc2UgNjpjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSAxMDpyZXR1cm4gNDtjYXNlIDExOnJldHVybiAxNztjYXNlIDEyOnJldHVybiAxODtjYXNlIDEzOnJldHVybiAxOTtjYXNlIDE0OnJldHVybiAyMDtjYXNlIDE1OnJldHVybiAxNTtjYXNlIDE2OnJldHVybiA2O2Nhc2UgMTc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGgoKXt0aGlzLnl5PXt9fXJldHVybiB1LmxleGVyPWwsaC5wcm90b3R5cGU9dSx1LlBhcnNlcj1oLG5ldyBofSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oOTE0MykucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSw5NjA5OnQ9PnsidXNlIHN0cmljdCI7dmFyIGU9L14oJTIwfFxzKSooamF2YXNjcmlwdHxkYXRhKS9pbSxuPS9bXlx4MjAtXHg3RV0vZ2ltLHI9L14oW146XSspOi9nbSxpPVsiLiIsIi8iXTt0LmV4cG9ydHM9e3Nhbml0aXplVXJsOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJhYm91dDpibGFuayI7dmFyIGEsbyxzPXQucmVwbGFjZShuLCIiKS50cmltKCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4T2YodFswXSk+LTF9KHMpP3M6KG89cy5tYXRjaChyKSk/KGE9b1swXSxlLnRlc3QoYSk/ImFib3V0OmJsYW5rIjpzKToiYWJvdXQ6YmxhbmsifX19LDM4NDE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmludGVyc2VjdChlKX19LDc0NTg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQoZSx7ZGVmYXVsdDooKT0+bEN9KTt2YXIgcj1uKDE5NDEpLGk9bi5uKHIpLGE9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LG89e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSxzPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1hW3RdJiYodD1hW3RdKSksby50cmFjZT1mdW5jdGlvbigpe30sby5kZWJ1Zz1mdW5jdGlvbigpe30sby5pbmZvPWZ1bmN0aW9uKCl7fSxvLndhcm49ZnVuY3Rpb24oKXt9LG8uZXJyb3I9ZnVuY3Rpb24oKXt9LG8uZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PWEuZmF0YWwmJihvLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGMoIkZBVEFMIikpKSx0PD1hLmVycm9yJiYoby5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGMoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixjKCJFUlJPUiIpKSksdDw9YS53YXJuJiYoby53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGMoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGMoIldBUk4iKSkpLHQ8PWEuaW5mbyYmKG8uaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxjKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixjKCJJTkZPIikpKSx0PD1hLmRlYnVnJiYoby5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGMoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsYygiREVCVUciKSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPWkoKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfTtmdW5jdGlvbiB1KHQsZSl7bGV0IG47aWYodm9pZCAwPT09ZSlmb3IoY29uc3QgZSBvZiB0KW51bGwhPWUmJihuPGV8fHZvaWQgMD09PW4mJmU+PWUpJiYobj1lKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KW51bGwhPShpPWUoaSwrK3IsdCkpJiYobjxpfHx2b2lkIDA9PT1uJiZpPj1pKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUpe2xldCBuO2lmKHZvaWQgMD09PWUpZm9yKGNvbnN0IGUgb2YgdCludWxsIT1lJiYobj5lfHx2b2lkIDA9PT1uJiZlPj1lKSYmKG49ZSk7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1lKGksKytyLHQpKSYmKG4+aXx8dm9pZCAwPT09biYmaT49aSkmJihuPWkpfXJldHVybiBufWZ1bmN0aW9uIGgodCl7cmV0dXJuIHR9dmFyIGY9MWUtNjtmdW5jdGlvbiBkKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0KyIsMCkifWZ1bmN0aW9uIHAodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrdCsiKSJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZT0+K3QoZSl9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0yKmUpLzIsdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxuPT4rdChuKStlfWZ1bmN0aW9uIG0oKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gdih0LGUpe3ZhciBuPVtdLHI9bnVsbCxpPW51bGwsYT02LG89NixzPTMsYz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LHU9MT09PXR8fDQ9PT10Py0xOjEsbD00PT09dHx8Mj09PXQ/IngiOiJ5Iix2PTE9PT10fHwzPT09dD9kOnA7ZnVuY3Rpb24gYihkKXt2YXIgcD1udWxsPT1yP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6cixiPW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOmg6aSxfPU1hdGgubWF4KGEsMCkrcyx4PWUucmFuZ2UoKSx3PSt4WzBdK2Msaz0reFt4Lmxlbmd0aC0xXStjLFQ9KGUuYmFuZHdpZHRoP2c6eSkoZS5jb3B5KCksYyksRT1kLnNlbGVjdGlvbj9kLnNlbGVjdGlvbigpOmQsQz1FLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxTPUUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxlKS5vcmRlcigpLEE9Uy5leGl0KCksTT1TLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTj1TLnNlbGVjdCgibGluZSIpLEQ9Uy5zZWxlY3QoInRleHQiKTtDPUMubWVyZ2UoQy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksUz1TLm1lcmdlKE0pLE49Ti5tZXJnZShNLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIobCsiMiIsdSphKSksRD1ELm1lcmdlKE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIobCx1Kl8pLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGQhPT1FJiYoQz1DLnRyYW5zaXRpb24oZCksUz1TLnRyYW5zaXRpb24oZCksTj1OLnRyYW5zaXRpb24oZCksRD1ELnRyYW5zaXRpb24oZCksQT1BLnRyYW5zaXRpb24oZCkuYXR0cigib3BhY2l0eSIsZikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9VCh0KSk/dih0K2MpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pKSxNLmF0dHIoIm9wYWNpdHkiLGYpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHYoKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTpUKHQpKStjKX0pKSksQS5yZW1vdmUoKSxDLmF0dHIoImQiLDQ9PT10fHwyPT09dD9vPyJNIit1Km8rIiwiK3crIkgiK2MrIlYiK2srIkgiK3UqbzoiTSIrYysiLCIrdysiViIrazpvPyJNIit3KyIsIit1Km8rIlYiK2MrIkgiK2srIlYiK3UqbzoiTSIrdysiLCIrYysiSCIrayksUy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdihUKHQpK2MpfSkpLE4uYXR0cihsKyIyIix1KmEpLEQuYXR0cihsLHUqXykudGV4dChiKSxFLmZpbHRlcihtKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSxFLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9VH0pKX1yZXR1cm4gYi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGIpOmV9LGIudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1BcnJheS5mcm9tKGFyZ3VtZW50cyksYn0sYi50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106QXJyYXkuZnJvbSh0KSxiKTpuLnNsaWNlKCl9LGIudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6QXJyYXkuZnJvbSh0KSxiKTpyJiZyLnNsaWNlKCl9LGIudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGIpOml9LGIudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bz0rdCxiKTphfSxiLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsYik6YX0sYi50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGIpOm99LGIudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsYik6c30sYi5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsYik6Y30sYn1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIF8odCl7cmV0dXJuIG51bGw9PXQ/YjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIG51bGw9PXQ/W106QXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gdygpe3JldHVybltdfWZ1bmN0aW9uIGsodCl7cmV0dXJuIG51bGw9PXQ/dzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIFQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19dmFyIEM9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gUygpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBBPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gTSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIE4odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiBPKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBCKHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBEKHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiBMKHQsZSxuLHIsaSxhLG8pe3ZhciBzLGMsdSxsPW5ldyBNYXAsaD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT1vLmNhbGwoYyxjLl9fZGF0YV9fLHMsZSkrIiIsbC5oYXModSk/aVtzXT1jOmwuc2V0KHUsYykpO2ZvcihzPTA7czxmOysrcyl1PW8uY2FsbCh0LGFbc10scyxhKSsiIiwoYz1sLmdldCh1KSk/KHJbc109YyxjLl9fZGF0YV9fPWFbc10sbC5kZWxldGUodSkpOm5bc109bmV3IEQodCxhW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJmwuZ2V0KGRbc10pPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiBSKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfUQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpELGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBQPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBqPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpQLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gWSh0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxqLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpqW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24geih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gVSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBIKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIFcodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gVih0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBYKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24gWih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8Vih0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBLKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBKKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiB0dCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgcnQodCl9ZnVuY3Rpb24gcnQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPWV0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaXQodCxlKXtmb3IodmFyIG49bnQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBhdCh0LGUpe2Zvcih2YXIgbj1udCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIG90KHQpe3JldHVybiBmdW5jdGlvbigpe2l0KHRoaXMsdCl9fWZ1bmN0aW9uIHN0KHQpe3JldHVybiBmdW5jdGlvbigpe2F0KHRoaXMsdCl9fWZ1bmN0aW9uIGN0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP2l0OmF0KSh0aGlzLHQpfX1mdW5jdGlvbiB1dCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gZnQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBwdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHl0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGd0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1QJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1QP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBidCh0KXt2YXIgZT1ZKHQpO3JldHVybihlLmxvY2FsP3Z0Om10KShlKX1mdW5jdGlvbiBfdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHh0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gd3QoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGt0KCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBFdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5vcHRpb25zKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gQ3QodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGk9dGhpcy5fX29uLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fShlKTtpZihpKWZvcih2YXIgbz0wLHM9aS5sZW5ndGg7bzxzOysrbylpZigocj1pW29dKS50eXBlPT09dC50eXBlJiZyLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcixyLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcj1hLHIub3B0aW9ucz1uKSx2b2lkKHIudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLG4pLHI9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOm59LGk/aS5wdXNoKHIpOnRoaXMuX19vbj1bcl19fWZ1bmN0aW9uIFN0KHQsZSxuKXt2YXIgcj1WKHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN0KHRoaXMsdCxlKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU3QodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19cnQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgTnQ9W251bGxdO2Z1bmN0aW9uIER0KHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIE90KCl7cmV0dXJuIG5ldyBEdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLE50KX1EdC5wcm90b3R5cGU9T3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEdCxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PV8odCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbyxzPWVbaV0sYz1zLmxlbmd0aCx1PXJbaV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShhPXNbbF0pJiYobz10LmNhbGwoYSxhLl9fZGF0YV9fLGwscykpJiYoIl9fZGF0YV9fImluIGEmJihvLl9fZGF0YV9fPWEuX19kYXRhX18pLHVbbF09byk7cmV0dXJuIG5ldyBEdChyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dD0iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0KTprKHQpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IER0KHIsaSl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT10P1M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEMuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFKHQpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT10P006ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFKHQpKSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9VCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgRHQocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsSSk7dmFyIG49ZT9MOkIscj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1PKHQpKTtmb3IodmFyIGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBsPXJbdV0saD1pW3VdLGY9aC5sZW5ndGgsZD1SKHQuY2FsbChsLGwmJmwuX19kYXRhX18sdSxyKSkscD1kLmxlbmd0aCx5PXNbdV09bmV3IEFycmF5KHApLGc9b1t1XT1uZXcgQXJyYXkocCksbT1jW3VdPW5ldyBBcnJheShmKTtuKGwsaCx5LGcsbSxkLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7XzxwOysrXylpZih2PXlbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1nW3hdKSYmKyt4PHA7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihvPW5ldyBEdChvLHIpKS5fZW50ZXI9cyxvLl9leGl0PWMsb30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IER0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKE4pLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEdCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE4pLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHI9dChyKSkmJihyPXIuc2VsZWN0aW9uKCkpOnI9ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSkmJihpPWkuc2VsZWN0aW9uKCkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQsbj10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsaT1uLmxlbmd0aCxhPXIubGVuZ3RoLG89TWF0aC5taW4oaSxhKSxzPW5ldyBBcnJheShpKSxjPTA7YzxvOysrYylmb3IodmFyIHUsbD1uW2NdLGg9cltjXSxmPWwubGVuZ3RoLGQ9c1tjXT1uZXcgQXJyYXkoZikscD0wO3A8ZjsrK3ApKHU9bFtwXXx8aFtwXSkmJihkW3BdPXUpO2Zvcig7YzxpOysrYylzW2NdPW5bY107cmV0dXJuIG5ldyBEdChzLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxhPWkubGVuZ3RoLTEsbz1pW2FdOy0tYT49MDspKHI9aVthXSkmJihvJiY0XnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixvKSxvPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9Rik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgRHQoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcj10W2VdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe3ZhciBvPXJbaV07aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe2xldCB0PTA7Zm9yKGNvbnN0IGUgb2YgdGhpcykrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksYT1lW25dLG89MCxzPWEubGVuZ3RoO288czsrK28pKGk9YVtvXSkmJnQuY2FsbChpLGkuX19kYXRhX18sbyxhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVkodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1U6ejoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP1c6JDpuLmxvY2FsP0g6cSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9HOiJmdW5jdGlvbiI9PXR5cGVvZiBlP1o6WCkodCxlLG51bGw9PW4/IiI6bikpOlEodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/SzoiZnVuY3Rpb24iPT10eXBlb2YgZT90dDpKKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPWV0KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPW50KHRoaXMubm9kZSgpKSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KWlmKCFyLmNvbnRhaW5zKG5baV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2N0OmU/b3Q6c3QpKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3V0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9odDpsdCkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P2Z0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9wdDpkdCkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHl0KX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGd0KX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YnQodCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpidCh0KSxyPW51bGw9PWU/X3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfKGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHh0KX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/a3Q6d3QpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9VHQodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/Q3Q6RXQscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/TXQ6QXQpKHQsZSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByLGk9dFtlXSxhPTAsbz1pLmxlbmd0aDthPG87KythKShyPWlbYV0pJiYoeWllbGQgcil9fTtjb25zdCBCdD1PdDt2YXIgTHQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gSXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgUnQocil9ZnVuY3Rpb24gUnQodCl7dGhpcy5fPXR9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFB0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24ganQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPUx0LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1SdC5wcm90b3R5cGU9SXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9RnQodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09anQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1qdChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49UHQocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgUnQodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IFl0PUl0O3ZhciB6dCxVdCxxdD0wLEh0PTAsJHQ9MCxXdD0wLFZ0PTAsR3Q9MCxYdD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxadD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBRdCgpe3JldHVybiBWdHx8KFp0KEt0KSxWdD1YdC5ub3coKStHdCl9ZnVuY3Rpb24gS3QoKXtWdD0wfWZ1bmN0aW9uIEp0KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB0ZSh0LGUsbil7dmFyIHI9bmV3IEp0O3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gZWUoKXtWdD0oV3Q9WHQubm93KCkpK0d0LHF0PUh0PTA7dHJ5eyFmdW5jdGlvbigpe1F0KCksKytxdDtmb3IodmFyIHQsZT16dDtlOykodD1WdC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKHZvaWQgMCx0KSxlPWUuX25leHQ7LS1xdH0oKX1maW5hbGx5e3F0PTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPXp0LHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTp6dD1lKTtVdD10LHJlKHIpfSgpLFZ0PTB9fWZ1bmN0aW9uIG5lKCl7dmFyIHQ9WHQubm93KCksZT10LVd0O2U+MWUzJiYoR3QtPWUsV3Q9dCl9ZnVuY3Rpb24gcmUodCl7cXR8fChIdCYmKEh0PWNsZWFyVGltZW91dChIdCkpLHQtVnQ+MjQ/KHQ8MS8wJiYoSHQ9c2V0VGltZW91dChlZSx0LVh0Lm5vdygpLUd0KSksJHQmJigkdD1jbGVhckludGVydmFsKCR0KSkpOigkdHx8KFd0PVh0Lm5vdygpLCR0PXNldEludGVydmFsKG5lLDFlMykpLHF0PTEsWnQoZWUpKSl9ZnVuY3Rpb24gaWUodCxlLG4pe3ZhciByPW5ldyBKdDtyZXR1cm4gZT1udWxsPT1lPzA6K2Usci5yZXN0YXJ0KChuPT57ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfUp0LnByb3RvdHlwZT10ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkp0LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9RdCgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxVdD09PXRoaXN8fChVdD9VdC5fbmV4dD10aGlzOnp0PXRoaXMsVXQ9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixyZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxyZSgpKX19O3ZhciBhZT1ZdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxvZT1bXTtmdW5jdGlvbiBzZSh0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gaWUoYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihpZSgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj10ZSgoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjphZSx0d2VlbjpvZSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gY2UodCxlKXt2YXIgbj1sZSh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHVlKHQsZSl7dmFyIG49bGUodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gbGUodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBoZSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX12YXIgZmUsZGU9MTgwL01hdGguUEkscGU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24geWUodCxlLG4scixpLGEpe3ZhciBvLHMsYztyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwoYz10Km4rZSpyKSYmKG4tPXQqYyxyLT1lKmMpLChzPU1hdGguc3FydChuKm4rcipyKSkmJihuLz1zLHIvPXMsYy89cyksdCpyPGUqbiYmKHQ9LXQsZT0tZSxjPS1jLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqZGUsc2tld1g6TWF0aC5hdGFuKGMpKmRlLHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBnZSh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxjPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQscixpLGEsbyxzKXtpZih0IT09aXx8ciE9PWEpe3ZhciBjPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmMtNCx4OmhlKHQsaSl9LHtpOmMtMix4OmhlKHIsYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK24pfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLHIpLTIseDpoZSh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK3IpfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lP2EucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLHIpLTIseDpoZSh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStyKX0oYS5za2V3WCxvLnNrZXdYLHMsYyksZnVuY3Rpb24odCxlLG4scixhLG8pe2lmKHQhPT1ufHxlIT09cil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDpoZSh0LG4pfSx7aTpzLTIseDpoZShlLHIpfSl9ZWxzZSAxPT09biYmMT09PXJ8fGEucHVzaChpKGEpKyJzY2FsZSgiK24rIiwiK3IrIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxjKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPWMubGVuZ3RoOysrbjxyOylzWyhlPWNbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBtZT1nZSgoZnVuY3Rpb24odCl7Y29uc3QgZT1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P3BlOnllKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHZlPWdlKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9wZTooZmV8fChmZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxmZS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9ZmUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/eWUoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6cGUpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBiZSh0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dWUodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBfZSh0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dWUodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24geGUodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dWUodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gbGUodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gd2UodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGtlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIFRlKCl7fXZhciBFZT0uNyxDZT0xL0VlLFNlPSJcXHMqKFsrLV0/XFxkKylcXHMqIixBZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixNZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTmU9L14jKFswLTlhLWZdezMsOH0pJC8sRGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1NlLFNlLFNlXSsiXFwpJCIpLE9lPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tNZSxNZSxNZV0rIlxcKSQiKSxCZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1NlLFNlLFNlLEFlXSsiXFwpJCIpLExlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTWUsTWUsTWUsQWVdKyJcXCkkIiksSWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0FlLE1lLE1lXSsiXFwpJCIpLFJlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQWUsTWUsTWUsQWVdKyJcXCkkIiksRmU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gUGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFllKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPU5lLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/emUoZSk6Mz09PW4/bmV3ICRlKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9VZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9VZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPURlLmV4ZWModCkpP25ldyAkZShlWzFdLGVbMl0sZVszXSwxKTooZT1PZS5leGVjKHQpKT9uZXcgJGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9QmUuZXhlYyh0KSk/VWUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9TGUuZXhlYyh0KSk/VWUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9SWUuZXhlYyh0KSk/WGUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1SZS5leGVjKHQpKT9YZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOkZlLmhhc093blByb3BlcnR5KHQpP3plKEZlW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgJGUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB6ZSh0KXtyZXR1cm4gbmV3ICRlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBVZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3ICRlKHQsZSxuLHIpfWZ1bmN0aW9uIHFlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVGV8fCh0PVllKHQpKSx0P25ldyAkZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgJGV9ZnVuY3Rpb24gSGUodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3FlKHQpOm5ldyAkZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gJGUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIiMiK0dlKHRoaXMucikrR2UodGhpcy5nKStHZSh0aGlzLmIpfWZ1bmN0aW9uIFZlKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gR2UodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBYZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFFlKHQsZSxuLHIpfWZ1bmN0aW9uIFplKHQpe2lmKHQgaW5zdGFuY2VvZiBRZSlyZXR1cm4gbmV3IFFlKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIFRlfHwodD1ZZSh0KSksIXQpcmV0dXJuIG5ldyBRZTtpZih0IGluc3RhbmNlb2YgUWUpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBRZShvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFFlKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBLZSh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gSmUodCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn13ZShUZSxZZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpQZSxmb3JtYXRIZXg6UGUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIFplKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6amUsdG9TdHJpbmc6amV9KSx3ZSgkZSxIZSxrZShUZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9DZTpNYXRoLnBvdyhDZSx0KSxuZXcgJGUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/RWU6TWF0aC5wb3coRWUsdCksbmV3ICRlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6V2UsZm9ybWF0SGV4OldlLGZvcm1hdFJnYjpWZSx0b1N0cmluZzpWZX0pKSx3ZShRZSwoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1plKHQpOm5ldyBRZSh0LGUsbixudWxsPT1yPzE6cil9KSxrZShUZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9DZTpNYXRoLnBvdyhDZSx0KSxuZXcgUWUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9FZTpNYXRoLnBvdyhFZSx0KSxuZXcgUWUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyAkZShLZSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxLZSh0LGksciksS2UodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTtjb25zdCB0bj10PT4oKT0+dDtmdW5jdGlvbiBlbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fSh0LG4pOnRuKGlzTmFOKHQpP2U6dCl9Y29uc3Qgbm49ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP2VuOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6dG4oaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PUhlKHQpKS5yLChlPUhlKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89ZW4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIHJuKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9SGUoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19cm4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBKZSgobi1yL2UpKmUsbyxpLGEscyl9fSkpLHJuKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIEplKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIGFuPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxvbj1uZXcgUmVnRXhwKGFuLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHNuKHQsZSl7dmFyIG4scixpLGE9YW4ubGFzdEluZGV4PW9uLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1hbi5leGVjKHQpKSYmKHI9b24uZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OmhlKG4scil9KSksYT1vbi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGNuKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9oZTplIGluc3RhbmNlb2YgWWU/bm46KG49WWUoZSkpPyhlPW4sbm4pOnNuKSh0LGUpfWZ1bmN0aW9uIHVuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBsbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGhuKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIGZuKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBkbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBwbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHluKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBnbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIG1uKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmZ24odCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIHZuKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmeW4odCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIGJuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Y2UodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIF9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtjZSh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIHhuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dWUodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHduKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt1ZSh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIGtuKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3VlKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBUbih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/Y2U6dWU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIEVuPUJ0LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBDbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBTbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gQW4odCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJlNuKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIE1uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBObih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZNbihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBEbj0wO2Z1bmN0aW9uIE9uKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBCbigpe3JldHVybisrRG59dmFyIExuPUJ0LnByb3RvdHlwZTtPbi5wcm90b3R5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIEJ0KCkudHJhbnNpdGlvbih0KX0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPbixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1fKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pZm9yKHZhciBzLGMsdT1yW29dLGw9dS5sZW5ndGgsaD1hW29dPW5ldyBBcnJheShsKSxmPTA7ZjxsOysrZikocz11W2ZdKSYmKGM9dC5jYWxsKHMscy5fX2RhdGFfXyxmLHUpKSYmKCJfX2RhdGFfXyJpbiBzJiYoYy5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2ZdPWMsc2UoaFtmXSxlLG4sZixoLGxlKHMsbikpKTtyZXR1cm4gbmV3IE9uKGEsdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1rKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPWxlKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmc2UoZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBPbihhLG8sZSxuKX0sc2VsZWN0Q2hpbGQ6TG4uc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46TG4uc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1UKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBPbihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBPbihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgRW4odGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPUJuKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1sZShvLGUpO3NlKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgT24ocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6TG4uY2FsbCxub2RlczpMbi5ub2Rlcyxub2RlOkxuLm5vZGUsc2l6ZTpMbi5zaXplLGVtcHR5OkxuLmVtcHR5LGVhY2g6TG4uZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/bGUodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKFRuKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1ZKHQpLHI9InRyYW5zZm9ybSI9PT1uP3ZlOmNuO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3BuOmRuKShuLHIseGUodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/bG46dW4pKG4pOihuLmxvY2FsP2ZuOmhuKShuLHIsZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPVkodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9tbjp2bikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9tZTpjbjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1RKHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxRKHRoaXMsdCkpO3JldHVybiBhPT09bz9udWxsOmE9PT1uJiZvPT09cj9pOmk9ZShuPWEscj1vKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LENuKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVEodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9USh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIseGUodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXVlKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1DbihlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1RKHRoaXMsdCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLEFuKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KHhlKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxObih0KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1sZSh0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/YmU6X2UpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/Ym46X24pKGUsdCkpOmxlKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3huOnduKShlLHQpKTpsZSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goa24oZSx0KSk6bGUodGhpcy5ub2RlKCksZSkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dWUodGhpcyx0KS5lYXNlPW59fSh0aGlzLl9pZCx0KSl9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49dWUodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpLDA9PT1pJiZhKCl9KSl9LFtTeW1ib2wuaXRlcmF0b3JdOkxuW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBJbj17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fTtmdW5jdGlvbiBSbih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2V9IG5vdCBmb3VuZGApO3JldHVybiBufUJ0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Ll9fdHJhbnNpdGlvbixvPSEwO2lmKGEpe2ZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsYSkobj1hW2ldKS5uYW1lPT09ZT8ocj1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIGFbaV0pOm89ITE7byYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX0odGhpcyx0KX0pKX0sQnQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgT24/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1CbigpLChuPUluKS50aW1lPVF0KCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSkobz1zW3VdKSYmc2Uobyx0LGUsdSxzLG58fFJuKG8sZSkpO3JldHVybiBuZXcgT24ocix0aGlzLl9wYXJlbnRzLHQsZSl9O2NvbnN0e2FiczpGbixtYXg6UG4sbWluOmpufT1NYXRoO2Z1bmN0aW9uIFluKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIHpuKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBVbih0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBxbigpe31bInciLCJlIl0ubWFwKFluKSxbIm4iLCJzIl0ubWFwKFluKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChZbik7dmFyIEhuPS43LCRuPTEvSG4sV249IlxccyooWystXT9cXGQrKVxccyoiLFZuPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLEduPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixYbj0vXiMoWzAtOWEtZl17Myw4fSkkLyxabj1uZXcgUmVnRXhwKCJecmdiXFwoIitbV24sV24sV25dKyJcXCkkIiksUW49bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0duLEduLEduXSsiXFwpJCIpLEtuPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbV24sV24sV24sVm5dKyJcXCkkIiksSm49bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tHbixHbixHbixWbl0rIlxcKSQiKSx0cj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbVm4sR24sR25dKyJcXCkkIiksZXI9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tWbixHbixHbixWbl0rIlxcKSQiKSxucj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBycigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGlyKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gYXIodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9WG4uZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9vcihlKTozPT09bj9uZXcgbHIoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP3NyKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP3NyKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9Wm4uZXhlYyh0KSk/bmV3IGxyKGVbMV0sZVsyXSxlWzNdLDEpOihlPVFuLmV4ZWModCkpP25ldyBscigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1Lbi5leGVjKHQpKT9zcihlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1Kbi5leGVjKHQpKT9zcigyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT10ci5leGVjKHQpKT9wcihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWVyLmV4ZWModCkpP3ByKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6bnIuaGFzT3duUHJvcGVydHkodCk/b3IobnJbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBscihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIG9yKHQpe3JldHVybiBuZXcgbHIodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHNyKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgbHIodCxlLG4scil9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxbnx8KHQ9YXIodCkpLHQ/bmV3IGxyKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBscn1mdW5jdGlvbiB1cih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Y3IodCk6bmV3IGxyKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBscih0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gaHIoKXtyZXR1cm4iIyIrZHIodGhpcy5yKStkcih0aGlzLmcpK2RyKHRoaXMuYil9ZnVuY3Rpb24gZnIoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBkcih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHByKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZ3IodCxlLG4scil9ZnVuY3Rpb24geXIodCl7aWYodCBpbnN0YW5jZW9mIGdyKXJldHVybiBuZXcgZ3IodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcW58fCh0PWFyKHQpKSwhdClyZXR1cm4gbmV3IGdyO2lmKHQgaW5zdGFuY2VvZiBncilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IGdyKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gZ3IodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG1yKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX16bihxbixhcix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpycixmb3JtYXRIZXg6cnIsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHlyKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6aXIsdG9TdHJpbmc6aXJ9KSx6bihscix1cixVbihxbix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8kbjpNYXRoLnBvdygkbix0KSxuZXcgbHIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/SG46TWF0aC5wb3coSG4sdCksbmV3IGxyKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aHIsZm9ybWF0SGV4OmhyLGZvcm1hdFJnYjpmcix0b1N0cmluZzpmcn0pKSx6bihnciwoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3lyKHQpOm5ldyBncih0LGUsbixudWxsPT1yPzE6cil9KSxVbihxbix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8kbjpNYXRoLnBvdygkbix0KSxuZXcgZ3IodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9IbjpNYXRoLnBvdyhIbix0KSxuZXcgZ3IodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyBscihtcih0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxtcih0LGksciksbXIodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTtjb25zdCB2cj1NYXRoLlBJLzE4MCxicj0xODAvTWF0aC5QSSxfcj0uOTY0MjIseHI9LjgyNTIxLHdyPTQvMjksa3I9Ni8yOSxUcj0zKmtyKmtyO2Z1bmN0aW9uIEVyKHQpe2lmKHQgaW5zdGFuY2VvZiBDcilyZXR1cm4gbmV3IENyKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJyKXJldHVybiBMcih0KTt0IGluc3RhbmNlb2YgbHJ8fCh0PWNyKHQpKTt2YXIgZSxuLHI9TnIodC5yKSxpPU5yKHQuZyksYT1Ocih0LmIpLG89U3IoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPVNyKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvX3IpLG49U3IoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS94cikpLG5ldyBDcigxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24gQ3IodCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFNyKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvVHIrd3J9ZnVuY3Rpb24gQXIodCl7cmV0dXJuIHQ+a3I/dCp0KnQ6VHIqKHQtd3IpfWZ1bmN0aW9uIE1yKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gTnIodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gRHIodCl7aWYodCBpbnN0YW5jZW9mIEJyKXJldHVybiBuZXcgQnIodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQ3J8fCh0PUVyKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgQnIoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqYnI7cmV0dXJuIG5ldyBCcihlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBPcih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RHIodCk6bmV3IEJyKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBCcih0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gTHIodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IENyKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqdnI7cmV0dXJuIG5ldyBDcih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXpuKENyLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RXIodCk6bmV3IENyKHQsZSxuLG51bGw9PXI/MTpyKX0pLFVuKHFuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IENyKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3IodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IGxyKE1yKDMuMTMzODU2MSooZT1fcipBcihlKSktMS42MTY4NjY3Kih0PTEqQXIodCkpLS40OTA2MTQ2KihuPXhyKkFyKG4pKSksTXIoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxNciguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLHpuKEJyLE9yLFVuKHFuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJyKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnIodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTHIodGhpcykucmdiKCl9fSkpO2NvbnN0IElyPXQ9PigpPT50O2Z1bmN0aW9uIFJyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gRnIodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/UnIodCxuKTpJcihpc05hTih0KT9lOnQpfWZ1bmN0aW9uIFByKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9T3IoZSkpLmgsKG49T3IobikpLmgpLGk9RnIoZS5jLG4uYyksYT1GcihlLmwsbi5sKSxvPUZyKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fWNvbnN0IGpyPVByKChmdW5jdGlvbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9Scih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6SXIoaXNOYU4odCk/ZTp0KX0pKTtQcihGcik7dmFyIFlyPU1hdGguc3FydCg1MCksenI9TWF0aC5zcXJ0KDEwKSxVcj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gcXIodCxlLG4pe3ZhciByPShlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksYT1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1Zcj8xMDphPj16cj81OmE+PVVyPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49WXI/MTA6YT49enI/NTphPj1Vcj8yOjEpfWZ1bmN0aW9uIEhyKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1Zcj9pKj0xMDphPj16cj9pKj01OmE+PVVyJiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gJHIodCxlKXtyZXR1cm4gbnVsbD09dHx8bnVsbD09ZT9OYU46dDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gV3IodCl7bGV0IGU9dCxuPXQscj10O2Z1bmN0aW9uIGkodCxlLGk9MCxhPXQubGVuZ3RoKXtpZihpPGEpe2lmKDAhPT1uKGUsZSkpcmV0dXJuIGE7ZG97Y29uc3Qgbj1pK2E+Pj4xO3IodFtuXSxlKTwwP2k9bisxOmE9bn13aGlsZShpPGEpfXJldHVybiBpfXJldHVybiAyIT09dC5sZW5ndGgmJihlPShlLG4pPT50KGUpLW4sbj0kcixyPShlLG4pPT4kcih0KGUpLG4pKSx7bGVmdDppLGNlbnRlcjpmdW5jdGlvbih0LG4scj0wLGE9dC5sZW5ndGgpe2NvbnN0IG89aSh0LG4scixhLTEpO3JldHVybiBvPnImJmUodFtvLTFdLG4pPi1lKHRbb10sbik/by0xOm99LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpPTAsYT10Lmxlbmd0aCl7aWYoaTxhKXtpZigwIT09bihlLGUpKXJldHVybiBhO2Rve2NvbnN0IG49aSthPj4+MTtyKHRbbl0sZSk8PTA/aT1uKzE6YT1ufXdoaWxlKGk8YSl9cmV0dXJuIGl9fX1jb25zdCBWcj1XcigkciksR3I9VnIucmlnaHQsWHI9KFZyLmxlZnQsV3IoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9KSkuY2VudGVyLEdyKTtmdW5jdGlvbiBacih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gUXIodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gS3IoKXt9dmFyIEpyPS43LHRpPTEuNDI4NTcxNDI4NTcxNDI4NixlaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsbmk9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIscmk9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGlpPS9eIyhbMC05YS1mXXszLDh9KSQvLGFpPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tlaSxlaSxlaV0rIlxcKSQiKSxvaT1uZXcgUmVnRXhwKCJecmdiXFwoIitbcmkscmkscmldKyJcXCkkIiksc2k9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tlaSxlaSxlaSxuaV0rIlxcKSQiKSxjaT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3JpLHJpLHJpLG5pXSsiXFwpJCIpLHVpPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tuaSxyaSxyaV0rIlxcKSQiKSxsaT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW25pLHJpLHJpLG5pXSsiXFwpJCIpLGhpPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGZpKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZGkoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBwaSh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1paS5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP3lpKGUpOjM9PT1uP25ldyBiaShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/Z2koZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/Z2koZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1haS5leGVjKHQpKT9uZXcgYmkoZVsxXSxlWzJdLGVbM10sMSk6KGU9b2kuZXhlYyh0KSk/bmV3IGJpKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPXNpLmV4ZWModCkpP2dpKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWNpLmV4ZWModCkpP2dpKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPXVpLmV4ZWModCkpP2tpKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9bGkuZXhlYyh0KSk/a2koZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpoaS5oYXNPd25Qcm9wZXJ0eSh0KT95aShoaVt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGJpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24geWkodCl7cmV0dXJuIG5ldyBiaSh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gZ2kodCxlLG4scil7cmV0dXJuIHI8PTAmJih0PWU9bj1OYU4pLG5ldyBiaSh0LGUsbixyKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEtyfHwodD1waSh0KSksdD9uZXcgYmkoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IGJpfWZ1bmN0aW9uIHZpKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9taSh0KTpuZXcgYmkodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGJpKHQsZSxuLHIpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBfaSgpe3JldHVybiIjIit3aSh0aGlzLnIpK3dpKHRoaXMuZykrd2kodGhpcy5iKX1mdW5jdGlvbiB4aSgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIHdpKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24ga2kodCxlLG4scil7cmV0dXJuIHI8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBFaSh0LGUsbixyKX1mdW5jdGlvbiBUaSh0KXtpZih0IGluc3RhbmNlb2YgRWkpcmV0dXJuIG5ldyBFaSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBLcnx8KHQ9cGkodCkpLCF0KXJldHVybiBuZXcgRWk7aWYodCBpbnN0YW5jZW9mIEVpKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksYT1NYXRoLm1heChlLG4sciksbz1OYU4scz1hLWksYz0oYStpKS8yO3JldHVybiBzPyhvPWU9PT1hPyhuLXIpL3MrNioobjxyKTpuPT09YT8oci1lKS9zKzI6KGUtbikvcys0LHMvPWM8LjU/YStpOjItYS1pLG8qPTYwKTpzPWM+MCYmYzwxPzA6byxuZXcgRWkobyxzLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBFaSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQ2kodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIFNpKHQsZSxuLHIsaSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqbisoMSszKnQrMyphLTMqbykqcitvKmkpLzZ9WnIoS3IscGkse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZmksZm9ybWF0SGV4OmZpLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBUaSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOmRpLHRvU3RyaW5nOmRpfSksWnIoYmksdmksUXIoS3Ise2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/dGk6TWF0aC5wb3codGksdCksbmV3IGJpKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0pyOk1hdGgucG93KEpyLHQpLG5ldyBiaSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Ol9pLGZvcm1hdEhleDpfaSxmb3JtYXRSZ2I6eGksdG9TdHJpbmc6eGl9KSksWnIoRWksKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9UaSh0KTpuZXcgRWkodCxlLG4sbnVsbD09cj8xOnIpfSksUXIoS3Ise2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/dGk6TWF0aC5wb3codGksdCksbmV3IEVpKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/SnI6TWF0aC5wb3coSnIsdCksbmV3IEVpKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgYmkoQ2kodD49MjQwP3QtMjQwOnQrMTIwLGksciksQ2kodCxpLHIpLENpKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7Y29uc3QgQWk9dD0+KCk9PnQ7ZnVuY3Rpb24gTWkodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX0odCxuKTpBaShpc05hTih0KT9lOnQpfWNvbnN0IE5pPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9NaTpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOkFpKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD12aSh0KSkuciwoZT12aShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPU1pKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBEaSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPXZpKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fWZ1bmN0aW9uIE9pKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKWFbbl09WWkodFtuXSxlW25dKTtmb3IoO248cjsrK24pb1tuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pb1tuXT1hW25dKHQpO3JldHVybiBvfX1mdW5jdGlvbiBCaSh0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0KigxLXIpK2Uqciksbn19ZnVuY3Rpb24gTGkodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gSWkodCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPVlpKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19RGkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBTaSgobi1yL2UpKmUsbyxpLGEscyl9fSkpLERpKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIFNpKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIFJpPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxGaT1uZXcgUmVnRXhwKFJpLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFBpKHQsZSl7dmFyIG4scixpLGE9UmkubGFzdEluZGV4PUZpLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1SaS5leGVjKHQpKSYmKHI9RmkuZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OkxpKG4scil9KSksYT1GaS5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGppKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIFlpKHQsZSl7dmFyIG4scixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP0FpKGUpOigibnVtYmVyIj09PWk/TGk6InN0cmluZyI9PT1pPyhuPXBpKGUpKT8oZT1uLE5pKTpQaTplIGluc3RhbmNlb2YgcGk/Tmk6ZSBpbnN0YW5jZW9mIERhdGU/Qmk6KHI9ZSwhQXJyYXlCdWZmZXIuaXNWaWV3KHIpfHxyIGluc3RhbmNlb2YgRGF0YVZpZXc/QXJyYXkuaXNBcnJheShlKT9PaToiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/SWk6TGk6amkpKSh0LGUpfWZ1bmN0aW9uIHppKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fWZ1bmN0aW9uIFVpKHQpe3JldHVybit0fXZhciBxaT1bMCwxXTtmdW5jdGlvbiBIaSh0KXtyZXR1cm4gdH1mdW5jdGlvbiAkaSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfToobj1pc05hTihlKT9OYU46LjUsZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBufWZ1bmN0aW9uIFdpKHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9JGkoaSxyKSxhPW4obyxhKSk6KHI9JGkocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIFZpKHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT0kaSh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49WHIodCxlLDEsciktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gWGkoKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLGEsbz1xaSxzPXFpLGM9WWksdT1IaTtmdW5jdGlvbiBsKCl7dmFyIHQsZSxuLGM9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpO3JldHVybiB1IT09SGkmJih0PW9bMF0sZT1vW2MtMV0sdD5lJiYobj10LHQ9ZSxlPW4pLHU9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9KSxyPWM+Mj9WaTpXaSxpPWE9bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIG51bGw9PWV8fGlzTmFOKGU9K2UpP246KGl8fChpPXIoby5tYXAodCkscyxjKSkpKHQodShlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gdShlKChhfHwoYT1yKHMsby5tYXAodCksTGkpKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89QXJyYXkuZnJvbSh0LFVpKSxsKCkpOm8uc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1BcnJheS5mcm9tKHQpLGwoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9QXJyYXkuZnJvbSh0KSxjPXppLGwoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXR8fEhpLGwoKSk6dSE9PUhpfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCgpKTpjfSxoLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxmdW5jdGlvbihuLHIpe3JldHVybiB0PW4sZT1yLGwoKX19KCkoSGksSGkpfWZ1bmN0aW9uIFppKHQsZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBRaSxLaT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBKaSh0KXtpZighKGU9S2kuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IHRhKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIHRhKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIGVhKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIG5hKHQpe3JldHVybih0PWVhKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59ZnVuY3Rpb24gcmEodCxlKXt2YXIgbj1lYSh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfUppLnByb3RvdHlwZT10YS5wcm90b3R5cGUsdGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgaWE9eyIlIjoodCxlKT0+KDEwMCp0KS50b0ZpeGVkKGUpLGI6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygyKSxjOnQ9PnQrIiIsZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9LGU6KHQsZSk9PnQudG9FeHBvbmVudGlhbChlKSxmOih0LGUpPT50LnRvRml4ZWQoZSksZzoodCxlKT0+dC50b1ByZWNpc2lvbihlKSxvOnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoOCkscDoodCxlKT0+cmEoMTAwKnQsZSkscjpyYSxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZWEodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXSxhPWktKFFpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxvPXIubGVuZ3RoO3JldHVybiBhPT09bz9yOmE+bz9yK25ldyBBcnJheShhLW8rMSkuam9pbigiMCIpOmE+MD9yLnNsaWNlKDAsYSkrIi4iK3Iuc2xpY2UoYSk6IjAuIituZXcgQXJyYXkoMS1hKS5qb2luKCIwIikrZWEodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19LFg6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBhYSh0KXtyZXR1cm4gdH12YXIgb2Esc2EsY2EsdWE9QXJyYXkucHJvdG90eXBlLm1hcCxsYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gaGEodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChyPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPXFyKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApe2xldCBuPU1hdGgucm91bmQodC9vKSxyPU1hdGgucm91bmQoZS9vKTtmb3IobipvPHQmJisrbixyKm8+ZSYmLS1yLGE9bmV3IEFycmF5KGk9ci1uKzEpOysrczxpOylhW3NdPShuK3MpKm99ZWxzZXtvPS1vO2xldCBuPU1hdGgucm91bmQodCpvKSxyPU1hdGgucm91bmQoZSpvKTtmb3Iobi9vPHQmJisrbixyL28+ZSYmLS1yLGE9bmV3IEFycmF5KGk9ci1uKzEpOysrczxpOylhW3NdPShuK3MpL299cmV0dXJuIHImJmEucmV2ZXJzZSgpLGF9KG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGE9SHIodCxlLG4pO3N3aXRjaCgocj1KaShudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIG89TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG5hKGUpLzMpKSktbmEoTWF0aC5hYnModCkpKX0oYSxvKSl8fChyLnByZWNpc2lvbj1pKSxjYShyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsbmEoZSktbmEodCkpKzF9KGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsLW5hKE1hdGguYWJzKHQpKSl9KGEpKXx8KHIucHJlY2lzaW9uPWktMiooIiUiPT09ci50eXBlKSl9cmV0dXJuIHNhKHIpfShyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGksYT1lKCksbz0wLHM9YS5sZW5ndGgtMSxjPWFbb10sdT1hW3NdLGw9MTA7Zm9yKHU8YyYmKGk9YyxjPXUsdT1pLGk9byxvPXMscz1pKTtsLS0gPjA7KXtpZigoaT1xcihjLHUsbikpPT09cilyZXR1cm4gYVtvXT1jLGFbc109dSxlKGEpO2lmKGk+MCljPU1hdGguZmxvb3IoYy9pKSppLHU9TWF0aC5jZWlsKHUvaSkqaTtlbHNle2lmKCEoaTwwKSlicmVhaztjPU1hdGguY2VpbChjKmkpL2ksdT1NYXRoLmZsb29yKHUqaSkvaX1yPWl9cmV0dXJuIHR9LHR9ZnVuY3Rpb24gZmEoKXt2YXIgdD1YaSgpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodCxmYSgpKX0sWmkuYXBwbHkodCxhcmd1bWVudHMpLGhhKHQpfW9hPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj12b2lkIDA9PT10Lmdyb3VwaW5nfHx2b2lkIDA9PT10LnRob3VzYW5kcz9hYTooZT11YS5jYWxsKHQuZ3JvdXBpbmcsTnVtYmVyKSxuPXQudGhvdXNhbmRzKyIiLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9W10sbz0wLHM9ZVswXSxjPTA7aT4wJiZzPjAmJihjK3MrMT5yJiYocz1NYXRoLm1heCgxLHItYykpLGEucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGMrPXMrMSk+cikpOylzPWVbbz0obysxKSVlLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4obil9KSxpPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIixhPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixvPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLHM9dm9pZCAwPT09dC5udW1lcmFscz9hYTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSkpfX0odWEuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLGM9dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsdT12b2lkIDA9PT10Lm1pbnVzPyLiiJIiOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PUppKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCx5PXQuY29tbWEsZz10LnByZWNpc2lvbixtPXQudHJpbSx2PXQudHlwZTsibiI9PT12Pyh5PSEwLHY9ImciKTppYVt2XXx8KHZvaWQgMD09PWcmJihnPTEyKSxtPSEwLHY9ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLF89IiQiPT09Zj9hOi9bJXBdLy50ZXN0KHYpP2M6IiIseD1pYVt2XSx3PS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIGsodCl7dmFyIGksYSxjLGY9YixrPV87aWYoImMiPT09dilrPXgodCkrayx0PSIiO2Vsc2V7dmFyIFQ9KHQ9K3QpPDB8fDEvdDwwO2lmKHQ9aXNOYU4odCk/bDp4KE1hdGguYWJzKHQpLGcpLG0mJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgscj0xLGk9LTE7cjxuOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPWU9cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxlPXI7YnJlYWs7ZGVmYXVsdDppZighK3Rbcl0pYnJlYWsgdDtpPjAmJihpPTApfXJldHVybiBpPjA/dC5zbGljZSgwLGkpK3Quc2xpY2UoZSsxKTp0fSh0KSksVCYmMD09K3QmJiIrIiE9PWgmJihUPSExKSxmPShUPyIoIj09PWg/aDp1OiItIj09PWh8fCIoIj09PWg/IiI6aCkrZixrPSgicyI9PT12P2xhWzgrUWkvM106IiIpK2srKFQmJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLGE9dC5sZW5ndGg7KytpPGE7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe2s9KDQ2PT09Yz9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStrLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX15JiYhZCYmKHQ9cih0LDEvMCkpO3ZhciBFPWYubGVuZ3RoK3QubGVuZ3RoK2subGVuZ3RoLEM9RTxwP25ldyBBcnJheShwLUUrMSkuam9pbihlKToiIjtzd2l0Y2goeSYmZCYmKHQ9cihDK3QsQy5sZW5ndGg/cC1rLmxlbmd0aDoxLzApLEM9IiIpLG4pe2Nhc2UiPCI6dD1mK3QraytDO2JyZWFrO2Nhc2UiPSI6dD1mK0MrdCtrO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsRT1DLmxlbmd0aD4+MSkrZit0K2srQy5zbGljZShFKTticmVhaztkZWZhdWx0OnQ9QytmK3Qra31yZXR1cm4gcyh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh2KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxrLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LGt9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPWgoKCh0PUppKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihuYShlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLGE9bGFbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLHNhPW9hLmZvcm1hdCxjYT1vYS5mb3JtYXRQcmVmaXg7Y2xhc3MgZGEgZXh0ZW5kcyBNYXB7Y29uc3RydWN0b3IodCxlPXlhKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOmV9fSksbnVsbCE9dClmb3IoY29uc3RbZSxuXW9mIHQpdGhpcy5zZXQoZSxuKX1nZXQodCl7cmV0dXJuIHN1cGVyLmdldChwYSh0aGlzLHQpKX1oYXModCl7cmV0dXJuIHN1cGVyLmhhcyhwYSh0aGlzLHQpKX1zZXQodCxlKXtyZXR1cm4gc3VwZXIuc2V0KGZ1bmN0aW9uKHtfaW50ZXJuOnQsX2tleTplfSxuKXtjb25zdCByPWUobik7cmV0dXJuIHQuaGFzKHIpP3QuZ2V0KHIpOih0LnNldChyLG4pLG4pfSh0aGlzLHQpLGUpfWRlbGV0ZSh0KXtyZXR1cm4gc3VwZXIuZGVsZXRlKGZ1bmN0aW9uKHtfaW50ZXJuOnQsX2tleTplfSxuKXtjb25zdCByPWUobik7cmV0dXJuIHQuaGFzKHIpJiYobj10LmdldChyKSx0LmRlbGV0ZShyKSksbn0odGhpcyx0KSl9fWZ1bmN0aW9uIHBhKHtfaW50ZXJuOnQsX2tleTplfSxuKXtjb25zdCByPWUobik7cmV0dXJuIHQuaGFzKHIpP3QuZ2V0KHIpOm59ZnVuY3Rpb24geWEodCl7cmV0dXJuIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQ/dC52YWx1ZU9mKCk6dH1TZXQ7Y29uc3QgZ2E9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIG1hKCl7dmFyIHQ9bmV3IGRhLGU9W10sbj1bXSxyPWdhO2Z1bmN0aW9uIGkoaSl7bGV0IGE9dC5nZXQoaSk7aWYodm9pZCAwPT09YSl7aWYociE9PWdhKXJldHVybiByO3Quc2V0KGksYT1lLnB1c2goaSktMSl9cmV0dXJuIG5bYSVuLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PW5ldyBkYTtmb3IoY29uc3QgciBvZiBuKXQuaGFzKHIpfHx0LnNldChyLGUucHVzaChyKS0xKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1BcnJheS5mcm9tKHQpLGkpOm4uc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG1hKGUsbikudW5rbm93bihyKX0sWmkuYXBwbHkoaSxhcmd1bWVudHMpLGl9Y29uc3QgdmE9MWUzLGJhPTZlNCxfYT0zNmU1LHhhPTg2NGU1LHdhPTYwNDhlNSxrYT0zMTUzNmU2O3ZhciBUYT1uZXcgRGF0ZSxFYT1uZXcgRGF0ZTtmdW5jdGlvbiBDYSh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBDYSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBUYS5zZXRUaW1lKCtlKSxFYS5zZXRUaW1lKCtyKSx0KFRhKSx0KEVhKSxNYXRoLmZsb29yKG4oVGEsRWEpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgU2E9Q2EoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTtTYS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP0NhKChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOlNhOm51bGx9O2NvbnN0IEFhPVNhO1NhLnJhbmdlO3ZhciBNYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSp2YSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS92YX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSk7Y29uc3QgTmE9TWE7TWEucmFuZ2U7dmFyIERhPUNhKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKnZhKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmJhKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2JhfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKTtjb25zdCBPYT1EYTtEYS5yYW5nZTt2YXIgQmE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqdmEtdC5nZXRNaW51dGVzKCkqYmEpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqX2EpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvX2F9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKTtjb25zdCBMYT1CYTtCYS5yYW5nZTt2YXIgSWE9Q2EoKHQ9PnQuc2V0SG91cnMoMCwwLDAsMCkpLCgodCxlKT0+dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpKSwoKHQsZSk9PihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmJhKS94YSksKHQ9PnQuZ2V0RGF0ZSgpLTEpKTtjb25zdCBSYT1JYTtmdW5jdGlvbiBGYSh0KXtyZXR1cm4gQ2EoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmJhKS93YX0pKX1JYS5yYW5nZTt2YXIgUGE9RmEoMCksamE9RmEoMSksWWE9RmEoMiksemE9RmEoMyksVWE9RmEoNCkscWE9RmEoNSksSGE9RmEoNiksJGE9KFBhLnJhbmdlLGphLnJhbmdlLFlhLnJhbmdlLHphLnJhbmdlLFVhLnJhbmdlLHFhLnJhbmdlLEhhLnJhbmdlLENhKChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSkpO2NvbnN0IFdhPSRhOyRhLnJhbmdlO3ZhciBWYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7VmEuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9DYSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07Y29uc3QgR2E9VmE7VmEucmFuZ2U7dmFyIFhhPUNhKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmJhKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2JhfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKTtjb25zdCBaYT1YYTtYYS5yYW5nZTt2YXIgUWE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpfYSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9fYX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkpO2NvbnN0IEthPVFhO1FhLnJhbmdlO3ZhciBKYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3hhfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpO2NvbnN0IHRvPUphO2Z1bmN0aW9uIGVvKHQpe3JldHVybiBDYSgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvd2F9KSl9SmEucmFuZ2U7dmFyIG5vPWVvKDApLHJvPWVvKDEpLGlvPWVvKDIpLGFvPWVvKDMpLG9vPWVvKDQpLHNvPWVvKDUpLGNvPWVvKDYpLHVvPShuby5yYW5nZSxyby5yYW5nZSxpby5yYW5nZSxhby5yYW5nZSxvby5yYW5nZSxzby5yYW5nZSxjby5yYW5nZSxDYSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpKTtjb25zdCBsbz11bzt1by5yYW5nZTt2YXIgaG89Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO2hvLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/Q2EoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IGZvPWhvO2Z1bmN0aW9uIHBvKHQsZSxuLHIsaSxhKXtjb25zdCBvPVtbTmEsMSx2YV0sW05hLDUsNWUzXSxbTmEsMTUsMTVlM10sW05hLDMwLDNlNF0sW2EsMSxiYV0sW2EsNSwzZTVdLFthLDE1LDllNV0sW2EsMzAsMThlNV0sW2ksMSxfYV0sW2ksMywxMDhlNV0sW2ksNiwyMTZlNV0sW2ksMTIsNDMyZTVdLFtyLDEseGFdLFtyLDIsMTcyOGU1XSxbbiwxLHdhXSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsa2FdXTtmdW5jdGlvbiBzKGUsbixyKXtjb25zdCBpPU1hdGguYWJzKG4tZSkvcixhPVdyKCgoWywsdF0pPT50KSkucmlnaHQobyxpKTtpZihhPT09by5sZW5ndGgpcmV0dXJuIHQuZXZlcnkoSHIoZS9rYSxuL2thLHIpKTtpZigwPT09YSlyZXR1cm4gQWEuZXZlcnkoTWF0aC5tYXgoSHIoZSxuLHIpLDEpKTtjb25zdFtzLGNdPW9baS9vW2EtMV1bMl08b1thXVsyXS9pP2EtMTphXTtyZXR1cm4gcy5ldmVyeShjKX1yZXR1cm5bZnVuY3Rpb24odCxlLG4pe2NvbnN0IHI9ZTx0O3ImJihbdCxlXT1bZSx0XSk7Y29uc3QgaT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5yYW5nZT9uOnModCxlLG4pLGE9aT9pLnJhbmdlKHQsK2UrMSk6W107cmV0dXJuIHI/YS5yZXZlcnNlKCk6YX0sc119aG8ucmFuZ2U7Y29uc3RbeW8sZ29dPXBvKGZvLGxvLG5vLHRvLEthLFphKSxbbW8sdm9dPXBvKEdhLFdhLFBhLFJhLExhLE9hKTtmdW5jdGlvbiBibyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gX28odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24geG8odCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fXZhciB3byxrbyxUbz17Ii0iOiIiLF86IiAiLDA6IjAifSxFbz0vXlxzKlxkKy8sQ289L14lLyxTbz0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQW8odCxlLG4pe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiByKyhhPG4/bmV3IEFycmF5KG4tYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIHQucmVwbGFjZShTbywiXFwkJiIpfWZ1bmN0aW9uIE5vKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChNbykuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIERvKHQpe3JldHVybiBuZXcgTWFwKHQubWFwKCgodCxlKT0+W3QudG9Mb3dlckNhc2UoKSxlXSkpKX1mdW5jdGlvbiBPbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIHI/KHQueT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpvKHQsZSxuKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWW8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnE9MypyWzBdLTMsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gem8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lm09clswXS0xLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhvKHQsZSxuKXt2YXIgcj1Dby5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj9uK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFpvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LlE9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLbyh0LGUpe3JldHVybiBBbyh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIEpvKHQsZSl7cmV0dXJuIEFvKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIHRzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBlcyh0LGUpe3JldHVybiBBbygxK1JhLmNvdW50KEdhKHQpLHQpLGUsMyl9ZnVuY3Rpb24gbnModCxlKXtyZXR1cm4gQW8odC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIHJzKHQsZSl7cmV0dXJuIG5zKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gaXModCxlKXtyZXR1cm4gQW8odC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBhcyh0LGUpe3JldHVybiBBbyh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG9zKHQsZSl7cmV0dXJuIEFvKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gc3ModCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGNzKHQsZSl7cmV0dXJuIEFvKFBhLmNvdW50KEdhKHQpLTEsdCksZSwyKX1mdW5jdGlvbiB1cyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHwwPT09ZT9VYSh0KTpVYS5jZWlsKHQpfWZ1bmN0aW9uIGxzKHQsZSl7cmV0dXJuIHQ9dXModCksQW8oVWEuY291bnQoR2EodCksdCkrKDQ9PT1HYSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBocyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBmcyh0LGUpe3JldHVybiBBbyhqYS5jb3VudChHYSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gZHModCxlKXtyZXR1cm4gQW8odC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHBzKHQsZSl7cmV0dXJuIEFvKCh0PXVzKHQpKS5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHlzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBncyh0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIEFvKCh0PW4+PTR8fDA9PT1uP1VhKHQpOlVhLmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gbXModCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStBbyhlLzYwfDAsIjAiLDIpK0FvKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIHZzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gYnModCxlKXtyZXR1cm4gQW8odC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gX3ModCxlKXtyZXR1cm4gQW8odC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHhzKHQsZSl7cmV0dXJuIEFvKDErdG8uY291bnQoZm8odCksdCksZSwzKX1mdW5jdGlvbiB3cyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24ga3ModCxlKXtyZXR1cm4gd3ModCxlKSsiMDAwIn1mdW5jdGlvbiBUcyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIEVzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gQ3ModCxlKXtyZXR1cm4gQW8odC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBTcyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gQXModCxlKXtyZXR1cm4gQW8obm8uY291bnQoZm8odCktMSx0KSxlLDIpfWZ1bmN0aW9uIE1zKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP29vKHQpOm9vLmNlaWwodCl9ZnVuY3Rpb24gTnModCxlKXtyZXR1cm4gdD1Ncyh0KSxBbyhvby5jb3VudChmbyh0KSx0KSsoND09PWZvKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIERzKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIE9zKHQsZSl7cmV0dXJuIEFvKHJvLmNvdW50KGZvKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBCcyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTHModCxlKXtyZXR1cm4gQW8oKHQ9TXModCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSXModCxlKXtyZXR1cm4gQW8odC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFJzKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gQW8oKHQ9bj49NHx8MD09PW4/b28odCk6b28uY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBGcygpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gUHMoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24ganModCl7cmV0dXJuK3R9ZnVuY3Rpb24gWXModCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiB6cyh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gVXModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gcXModCxlLG4scixpLGEsbyxzLGMsdSl7dmFyIGw9WGkoKSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIiksXz11KCIlWSIpO2Z1bmN0aW9uIHgodCl7cmV0dXJuKGModCk8dD9kOnModCk8dD9wOm8odCk8dD95OmEodCk8dD9nOnIodCk8dD9pKHQpPHQ/bTp2Om4odCk8dD9iOl8pKHQpfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoaCh0KSl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2YoQXJyYXkuZnJvbSh0LFVzKSk6ZigpLm1hcCh6cyl9LGwudGlja3M9ZnVuY3Rpb24oZSl7dmFyIG49ZigpO3JldHVybiB0KG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT1lPzEwOmUpfSxsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZT94OnUoZSl9LGwubmljZT1mdW5jdGlvbih0KXt2YXIgbj1mKCk7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJhbmdlfHwodD1lKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpKSx0P2YoZnVuY3Rpb24odCxlKXt2YXIgbixyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtyXSxvPXRbaV07cmV0dXJuIG88YSYmKG49cixyPWksaT1uLG49YSxhPW8sbz1uKSx0W3JdPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH0obix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKGwscXModCxlLG4scixpLGEsbyxzLGMsdSkpfSxsfWZ1bmN0aW9uIEhzKCl7fWZ1bmN0aW9uICRzKHQpe3JldHVybiBudWxsPT10P0hzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gV3ModCl7cmV0dXJuIG51bGw9PXQ/W106QXJyYXkuaXNBcnJheSh0KT90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gVnMoKXtyZXR1cm5bXX1mdW5jdGlvbiBHcyh0KXtyZXR1cm4gbnVsbD09dD9WczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIFhzKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIFpzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKHQpfX13bz1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsdT1ObyhpKSxsPURvKGkpLGg9Tm8oYSksZj1EbyhhKSxkPU5vKG8pLHA9RG8obykseT1ObyhzKSxnPURvKHMpLG09Tm8oYyksdj1EbyhjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6S28sZTpLbyxmOnJzLGc6cHMsRzpncyxIOkpvLEk6dHMsajplcyxMOm5zLG06aXMsTTphcyxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpqcyxzOllzLFM6b3MsdTpzcyxVOmNzLFY6bHMsdzpocyxXOmZzLHg6bnVsbCxYOm51bGwseTpkcyxZOnlzLFo6bXMsIiUiOlBzfSxfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6dnMsZTp2cyxmOmtzLGc6THMsRzpScyxIOmJzLEk6X3Msajp4cyxMOndzLG06VHMsTTpFcyxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTpqcyxzOllzLFM6Q3MsdTpTcyxVOkFzLFY6TnMsdzpEcyxXOk9zLHg6bnVsbCxYOm51bGwseTpCcyxZOklzLFo6RnMsIiUiOlBzfSx4PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1kLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1wLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj15LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1nLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gVCh0LGUsbixyKX0sZDpVbyxlOlVvLGY6R28sZzpQbyxHOkZvLEg6SG8sSTpIbyxqOnFvLEw6Vm8sbTp6byxNOiRvLHA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXUuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5wPWwuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LHE6WW8sUTpabyxzOlFvLFM6V28sdTpCbyxVOkxvLFY6SW8sdzpPbyxXOlJvLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpQbyxZOkZvLFo6am8sIiUiOlhvfTtmdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPVRvW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT14bygxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1fbyh4byhhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9yby5jZWlsKHIpOnJvKHIpLHI9dG8ub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9Ym8oeG8oYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/amEuY2VpbChyKTpqYShyKSxyPVJhLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9fbyh4byhhLnksMCwxKSkuZ2V0VVRDRGF5KCk6Ym8oeG8oYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsX28oYSkpOmJvKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT14W2kgaW4gVG8/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KG4sYiksYi5YPXcocixiKSxiLmM9dyhlLGIpLF8ueD13KG4sXyksXy5YPXcocixfKSxfLmM9dyhlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSksa289d28uZm9ybWF0LHdvLnBhcnNlLHdvLnV0Y0Zvcm1hdCx3by51dGNQYXJzZTt2YXIgUXM9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gS3MoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgSnM9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiB0Yygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIGVjKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIG5jKHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIHJjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBpYyh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHM9MCxjPWUubGVuZ3RoLHU9YS5sZW5ndGg7czx1Oysrcykobz1lW3NdKT8oby5fX2RhdGFfXz1hW3NdLHJbc109byk6bltzXT1uZXcgbmModCxhW3NdKTtmb3IoO3M8YzsrK3MpKG89ZVtzXSkmJihpW3NdPW8pfWZ1bmN0aW9uIGFjKHQsZSxuLHIsaSxhLG8pe3ZhciBzLGMsdSxsPW5ldyBNYXAsaD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT1vLmNhbGwoYyxjLl9fZGF0YV9fLHMsZSkrIiIsbC5oYXModSk/aVtzXT1jOmwuc2V0KHUsYykpO2ZvcihzPTA7czxmOysrcyl1PW8uY2FsbCh0LGFbc10scyxhKSsiIiwoYz1sLmdldCh1KSk/KHJbc109YyxjLl9fZGF0YV9fPWFbc10sbC5kZWxldGUodSkpOm5bc109bmV3IG5jKHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsLmdldChkW3NdKT09PWMmJihpW3NdPWMpfWZ1bmN0aW9uIG9jKHQpe3JldHVybiB0Ll9fZGF0YV9ffWZ1bmN0aW9uIHNjKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBjYyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1uYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5jLGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciB1Yz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgbGM9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnVjLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gaGModCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksbGMuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOmxjW2VdLGxvY2FsOnR9OnR9ZnVuY3Rpb24gZmModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGRjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gcGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiB5Yyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBnYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gbWModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gdmModCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGJjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIF9jKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19ZnVuY3Rpb24geGModCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixuKX19ZnVuY3Rpb24gd2ModCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHx2Yyh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBrYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gVGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIEVjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIENjKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBTYyh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBBYyh0KX1mdW5jdGlvbiBBYyh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9Q2ModC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNYyh0LGUpe2Zvcih2YXIgbj1TYyh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4uYWRkKGVbcl0pfWZ1bmN0aW9uIE5jKHQsZSl7Zm9yKHZhciBuPVNjKHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5yZW1vdmUoZVtyXSl9ZnVuY3Rpb24gRGModCl7cmV0dXJuIGZ1bmN0aW9uKCl7TWModGhpcyx0KX19ZnVuY3Rpb24gT2ModCl7cmV0dXJuIGZ1bmN0aW9uKCl7TmModGhpcyx0KX19ZnVuY3Rpb24gQmModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TWM6TmMpKHRoaXMsdCl9fWZ1bmN0aW9uIExjKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBJYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIFJjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBGYygpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFBjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIGpjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gWWMoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gemMoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBVYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PXVjJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT11Yz9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gcWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gSGModCl7dmFyIGU9aGModCk7cmV0dXJuKGUubG9jYWw/cWM6VWMpKGUpfWZ1bmN0aW9uICRjKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2MoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBWYygpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gR2MoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIFhjKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIFpjKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLm9wdGlvbnMpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBRYyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsaT10aGlzLl9fb24sYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSx0aGlzLl9fZGF0YV9fKX19KGUpO2lmKGkpZm9yKHZhciBvPTAscz1pLmxlbmd0aDtvPHM7KytvKWlmKChyPWlbb10pLnR5cGU9PT10LnR5cGUmJnIubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHIudHlwZSxyLmxpc3RlbmVyLHIub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHIudHlwZSxyLmxpc3RlbmVyPWEsci5vcHRpb25zPW4pLHZvaWQoci52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsbikscj17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjphLG9wdGlvbnM6bn0saT9pLnB1c2gocik6dGhpcy5fX29uPVtyXX19ZnVuY3Rpb24gS2ModCxlLG4pe3ZhciByPXZjKHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEpjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtjKHRoaXMsdCxlKX19ZnVuY3Rpb24gdHUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS2ModGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19QWMucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgZXU9W251bGxdO2Z1bmN0aW9uIG51KHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIHJ1KCl7cmV0dXJuIG5ldyBudShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGV1KX1udS5wcm90b3R5cGU9cnUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpudSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PSRzKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG8scz1lW2ldLGM9cy5sZW5ndGgsdT1yW2ldPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkoYT1zW2xdKSYmKG89dC5jYWxsKGEsYS5fX2RhdGFfXyxsLHMpKSYmKCJfX2RhdGFfXyJpbiBhJiYoby5fX2RhdGFfXz1hLl9fZGF0YV9fKSx1W2xdPW8pO3JldHVybiBuZXcgbnUocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFdzKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KHQpOkdzKHQpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IG51KHIsaSl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT10P0tzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRcy5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90OlpzKHQpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT10P3RjOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBKcy5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90OlpzKHQpKSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9WHModCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IG51KHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLG9jKTt2YXIgbj1lP2FjOmljLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cmModCkpO2Zvcih2YXIgYT1pLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGw9clt1XSxoPWlbdV0sZj1oLmxlbmd0aCxkPXNjKHQuY2FsbChsLGwmJmwuX19kYXRhX18sdSxyKSkscD1kLmxlbmd0aCx5PXNbdV09bmV3IEFycmF5KHApLGc9b1t1XT1uZXcgQXJyYXkocCksbT1jW3VdPW5ldyBBcnJheShmKTtuKGwsaCx5LGcsbSxkLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7XzxwOysrXylpZih2PXlbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1nW3hdKSYmKyt4PHA7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihvPW5ldyBudShvLHIpKS5fZW50ZXI9cyxvLl9leGl0PWMsb30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG51KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGVjKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgbnUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChlYyksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8ocj10KHIpKSYmKHI9ci5zZWxlY3Rpb24oKSk6cj1yLmFwcGVuZCh0KyIiKSxudWxsIT1lJiYoaT1lKGkpKSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09bj9hLnJlbW92ZSgpOm4oYSksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxuPXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9ci5sZW5ndGgsbz1NYXRoLm1pbihpLGEpLHM9bmV3IEFycmF5KGkpLGM9MDtjPG87KytjKWZvcih2YXIgdSxsPW5bY10saD1yW2NdLGY9bC5sZW5ndGgsZD1zW2NdPW5ldyBBcnJheShmKSxwPTA7cDxmOysrcCkodT1sW3BdfHxoW3BdKSYmKGRbcF09dSk7Zm9yKDtjPGk7KytjKXNbY109bltjXTtyZXR1cm4gbmV3IG51KHMsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1jYyk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgbnUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcj10W2VdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe3ZhciBvPXJbaV07aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe2xldCB0PTA7Zm9yKGNvbnN0IGUgb2YgdGhpcykrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksYT1lW25dLG89MCxzPWEubGVuZ3RoO288czsrK28pKGk9YVtvXSkmJnQuY2FsbChpLGkuX19kYXRhX18sbyxhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPWhjKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnIuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9kYzpmYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP21jOmdjOm4ubG9jYWw/eWM6cGMpKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/YmM6ImZ1bmN0aW9uIj09dHlwZW9mIGU/eGM6X2MpKHQsZSxudWxsPT1uPyIiOm4pKTp3Yyh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9rYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9FYzpUYykodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1DYyh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1TYyh0aGlzLm5vZGUoKSksaT0tMSxhPW4ubGVuZ3RoOysraTxhOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9CYzplP0RjOk9jKShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9MYzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UmM6SWMpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9GYzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/amM6UGMpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChZYyl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh6Yyl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhjKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SGModCkscj1udWxsPT1lPyRjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JHMoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goV2MpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9HYzpWYyl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1YYyh0KyIiKSxvPWEubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9RYzpaYyxyPTA7cjxvOysrcil0aGlzLmVhY2gocyhhW3JdLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGMsdT0wLGw9cy5sZW5ndGg7dTxsOysrdSlmb3Iocj0wLGM9c1t1XTtyPG87KytyKWlmKChpPWFbcl0pLnR5cGU9PT1jLnR5cGUmJmkubmFtZT09PWMubmFtZSlyZXR1cm4gYy52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT90dTpKYykodCxlKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHIsaT10W2VdLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2EpKHI9aVthXSkmJih5aWVsZCByKX19O2NvbnN0IGl1PXJ1O2Z1bmN0aW9uIGF1KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgbnUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBudShbW3RdXSxldSl9ZnVuY3Rpb24gb3UodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBudShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBudShbV3ModCldLGV1KX1jb25zdCBzdT1NYXRoLlBJLGN1PTIqc3UsdXU9MWUtNixsdT1jdS11dTtmdW5jdGlvbiBodSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZ1KCl7cmV0dXJuIG5ldyBodX1odS5wcm90b3R5cGU9ZnUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpodSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+dXUpaWYoTWF0aC5hYnMobCpzLWMqdSk+dXUmJmkpe3ZhciBmPW4tYSxkPXItbyxwPXMqcytjKmMseT1mKmYrZCpkLGc9TWF0aC5zcXJ0KHApLG09TWF0aC5zcXJ0KGgpLHY9aSpNYXRoLnRhbigoc3UtTWF0aC5hY29zKChwK2gteSkvKDIqZyptKSkpLzIpLGI9di9tLF89di9nO01hdGguYWJzKGItMSk+dXUmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPnV1fHxNYXRoLmFicyh0aGlzLl95MS11KT51dSkmJih0aGlzLl8rPSJMIitjKyIsIit1KSxuJiYoaDwwJiYoaD1oJWN1K2N1KSxoPmx1P3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodC1vKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodGhpcy5feDE9YykrIiwiKyh0aGlzLl95MT11KTpoPnV1JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1zdSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2NvbnN0IGR1PWZ1O2Z1bmN0aW9uIHB1KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgeXU9TWF0aC5hYnMsZ3U9TWF0aC5hdGFuMixtdT1NYXRoLmNvcyx2dT1NYXRoLm1heCxidT1NYXRoLm1pbixfdT1NYXRoLnNpbix4dT1NYXRoLnNxcnQsd3U9MWUtMTIsa3U9TWF0aC5QSSxUdT1rdS8yLEV1PTIqa3U7ZnVuY3Rpb24gQ3UodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/a3U6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIFN1KHQpe3JldHVybiB0Pj0xP1R1OnQ8PS0xPy1UdTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gQXUodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gTXUodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTnUodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBEdSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBPdSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBCdSh0LGUsbixyLGksYSxvLHMpe3ZhciBjPW4tdCx1PXItZSxsPW8taSxoPXMtYSxmPWgqYy1sKnU7aWYoIShmKmY8d3UpKXJldHVyblt0KyhmPShsKihlLWEpLWgqKHQtaSkpL2YpKmMsZStmKnVdfWZ1bmN0aW9uIEx1KHQsZSxuLHIsaSxhLG8pe3ZhciBzPXQtbixjPWUtcix1PShvP2E6LWEpL3h1KHMqcytjKmMpLGw9dSpjLGg9LXUqcyxmPXQrbCxkPWUraCxwPW4rbCx5PXIraCxnPShmK3ApLzIsbT0oZCt5KS8yLHY9cC1mLGI9eS1kLF89dip2K2IqYix4PWktYSx3PWYqeS1wKmQsaz0oYjwwPy0xOjEpKnh1KHZ1KDAseCp4Kl8tdyp3KSksVD0odypiLXYqaykvXyxFPSgtdyp2LWIqaykvXyxDPSh3KmIrdiprKS9fLFM9KC13KnYrYiprKS9fLEE9VC1nLE09RS1tLE49Qy1nLEQ9Uy1tO3JldHVybiBBKkErTSpNPk4qTitEKkQmJihUPUMsRT1TKSx7Y3g6VCxjeTpFLHgwMTotbCx5MDE6LWgseDExOlQqKGkveC0xKSx5MTE6RSooaS94LTEpfX1mdW5jdGlvbiBJdSgpe3ZhciB0PUF1LGU9TXUsbj1wdSgwKSxyPW51bGwsaT1OdSxhPUR1LG89T3Uscz1udWxsO2Z1bmN0aW9uIGMoKXt2YXIgYyx1LGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktVHUsZD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1UdSxwPXl1KGQtZikseT1kPmY7aWYoc3x8KHM9Yz1kdSgpKSxoPGwmJih1PWgsaD1sLGw9dSksaD53dSlpZihwPkV1LXd1KXMubW92ZVRvKGgqbXUoZiksaCpfdShmKSkscy5hcmMoMCwwLGgsZixkLCF5KSxsPnd1JiYocy5tb3ZlVG8obCptdShkKSxsKl91KGQpKSxzLmFyYygwLDAsbCxkLGYseSkpO2Vsc2V7dmFyIGcsbSx2PWYsYj1kLF89Zix4PWQsdz1wLGs9cCxUPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsRT1UPnd1JiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eHUobCpsK2gqaCkpLEM9YnUoeXUoaC1sKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1DLEE9QztpZihFPnd1KXt2YXIgTT1TdShFL2wqX3UoVCkpLE49U3UoRS9oKl91KFQpKTsody09MipNKT53dT8oXys9TSo9eT8xOi0xLHgtPU0pOih3PTAsXz14PShmK2QpLzIpLChrLT0yKk4pPnd1Pyh2Kz1OKj15PzE6LTEsYi09Tik6KGs9MCx2PWI9KGYrZCkvMil9dmFyIEQ9aCptdSh2KSxPPWgqX3UodiksQj1sKm11KHgpLEw9bCpfdSh4KTtpZihDPnd1KXt2YXIgSSxSPWgqbXUoYiksRj1oKl91KGIpLFA9bCptdShfKSxqPWwqX3UoXyk7aWYocDxrdSYmKEk9QnUoRCxPLFAsaixSLEYsQixMKSkpe3ZhciBZPUQtSVswXSx6PU8tSVsxXSxVPVItSVswXSxxPUYtSVsxXSxIPTEvX3UoQ3UoKFkqVSt6KnEpLyh4dShZKlkreip6KSp4dShVKlUrcSpxKSkpLzIpLCQ9eHUoSVswXSpJWzBdK0lbMV0qSVsxXSk7Uz1idShDLChsLSQpLyhILTEpKSxBPWJ1KEMsKGgtJCkvKEgrMSkpfX1rPnd1P0E+d3U/KGc9THUoUCxqLEQsTyxoLEEseSksbT1MdShSLEYsQixMLGgsQSx5KSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8Qz9zLmFyYyhnLmN4LGcuY3ksQSxndShnLnkwMSxnLngwMSksZ3UobS55MDEsbS54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LEEsZ3UoZy55MDEsZy54MDEpLGd1KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGgsZ3UoZy5jeStnLnkxMSxnLmN4K2cueDExKSxndShtLmN5K20ueTExLG0uY3grbS54MTEpLCF5KSxzLmFyYyhtLmN4LG0uY3ksQSxndShtLnkxMSxtLngxMSksZ3UobS55MDEsbS54MDEpLCF5KSkpOihzLm1vdmVUbyhELE8pLHMuYXJjKDAsMCxoLHYsYiwheSkpOnMubW92ZVRvKEQsTyksbD53dSYmdz53dT9TPnd1PyhnPUx1KEIsTCxSLEYsbCwtUyx5KSxtPUx1KEQsTyxQLGosbCwtUyx5KSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFM8Qz9zLmFyYyhnLmN4LGcuY3ksUyxndShnLnkwMSxnLngwMSksZ3UobS55MDEsbS54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFMsZ3UoZy55MDEsZy54MDEpLGd1KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGwsZ3UoZy5jeStnLnkxMSxnLmN4K2cueDExKSxndShtLmN5K20ueTExLG0uY3grbS54MTEpLHkpLHMuYXJjKG0uY3gsbS5jeSxTLGd1KG0ueTExLG0ueDExKSxndShtLnkwMSxtLngwMSksIXkpKSk6cy5hcmMoMCwwLGwseCxfLHkpOnMubGluZVRvKEIsTCl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIta3UvMjtyZXR1cm5bbXUocikqbixfdShyKSpuXX0sYy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB1KCtlKSxjKTp0fSxjLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOmV9LGMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOm59LGMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTpyfSxjLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksYyk6aX0sYy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTphfSxjLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxjKTpzfSxjfWZ1bmN0aW9uIFJ1KHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBGdSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUHUodCl7cmV0dXJuIG5ldyBGdSh0KX1mdW5jdGlvbiBqdSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBZdSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB6dSh0LGUpe3ZhciBuPXB1KCEwKSxyPW51bGwsaT1QdSxhPW51bGw7ZnVuY3Rpb24gbyhvKXt2YXIgcyxjLHUsbD0obz1SdShvKSkubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT1kdSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gdD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnZvaWQgMD09PXQ/anU6cHUodCksZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnZvaWQgMD09PWU/WXU6cHUoZSksby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cHUoK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb31mdW5jdGlvbiBVdSh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBxdSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBIdSgpe31mdW5jdGlvbiAkdSh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gV3UodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFZ1KHQpe3JldHVybiBuZXcgV3UodCl9ZnVuY3Rpb24gR3UodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFh1KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBadSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUXUodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEt1KHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKFF1KGEpK1F1KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gSnUodCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIHRsKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBlbCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbmwodCl7dGhpcy5fY29udGV4dD1uZXcgcmwodCl9ZnVuY3Rpb24gcmwodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGlsKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhbCh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsb1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLG9bZV0tPW4qb1tlLTFdO2ZvcihpW3ItMV09b1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIG9sKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1BcnJheS5wcm90b3R5cGUuc2xpY2UsRnUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX0sV3UucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzokdSh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDokdSh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sR3UucHJvdG90eXBlPXthcmVhU3RhcnQ6SHUsYXJlYUVuZDpIdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6JHUodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LFh1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6JHUodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LFp1LnByb3RvdHlwZT17YXJlYVN0YXJ0Okh1LGFyZWFFbmQ6SHUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sZWwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOnRsKHRoaXMsdGhpcy5fdDAsSnUodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRsKHRoaXMsSnUodGhpcyxuPUt1KHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDp0bCh0aGlzLHRoaXMuX3QwLG49S3UodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwobmwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWwucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtlbC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LHJsLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxyLG4sYSxpKX19LGlsLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciByPWFsKHQpLGk9YWwoZSksYT0wLG89MTtvPG47KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oclswXVthXSxpWzBdW2FdLHJbMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PW4pJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LG9sLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBzbD1uZXcgRGF0ZSxjbD1uZXcgRGF0ZTtmdW5jdGlvbiB1bCh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiB1bCgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBzbC5zZXRUaW1lKCtlKSxjbC5zZXRUaW1lKCtyKSx0KHNsKSx0KGNsKSxNYXRoLmZsb29yKG4oc2wsY2wpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX1jb25zdCBsbD04NjRlNSxobD02MDQ4ZTU7ZnVuY3Rpb24gZmwodCl7cmV0dXJuIHVsKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9obH0pKX12YXIgZGw9ZmwoMCkscGw9ZmwoMSkseWw9ZmwoMiksZ2w9ZmwoMyksbWw9ZmwoNCksdmw9ZmwoNSksYmw9ZmwoNiksX2w9KGRsLnJhbmdlLHBsLnJhbmdlLHlsLnJhbmdlLGdsLnJhbmdlLG1sLnJhbmdlLHZsLnJhbmdlLGJsLnJhbmdlLHVsKChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbGx9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSkpO2NvbnN0IHhsPV9sO2Z1bmN0aW9uIHdsKHQpe3JldHVybiB1bCgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS9obH0pKX1fbC5yYW5nZTt2YXIga2w9d2woMCksVGw9d2woMSksRWw9d2woMiksQ2w9d2woMyksU2w9d2woNCksQWw9d2woNSksTWw9d2woNiksTmw9KGtsLnJhbmdlLFRsLnJhbmdlLEVsLnJhbmdlLENsLnJhbmdlLFNsLnJhbmdlLEFsLnJhbmdlLE1sLnJhbmdlLHVsKCh0PT50LnNldEhvdXJzKDAsMCwwLDApKSwoKHQsZSk9PnQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSksKCh0LGUpPT4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpL2xsKSwodD0+dC5nZXREYXRlKCktMSkpKTtjb25zdCBEbD1ObDtObC5yYW5nZTt2YXIgT2w9dWwoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO09sLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dWwoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IEJsPU9sO09sLnJhbmdlO3ZhciBMbD11bCgoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7TGwuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD91bCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07Y29uc3QgSWw9TGw7ZnVuY3Rpb24gUmwodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIEZsKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFBsKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1MbC5yYW5nZTt2YXIgamwsWWwsemw9eyItIjoiIixfOiIgIiwwOiIwIn0sVWw9L15ccypcZCsvLHFsPS9eJS8sSGw9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uICRsKHQsZSxuKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gcisoYTxuP25ldyBBcnJheShuLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIFdsKHQpe3JldHVybiB0LnJlcGxhY2UoSGwsIlxcJCYiKX1mdW5jdGlvbiBWbCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoV2wpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBHbCh0KXtyZXR1cm4gbmV3IE1hcCh0Lm1hcCgoKHQsZSk9Plt0LnRvTG93ZXJDYXNlKCksZV0pKSl9ZnVuY3Rpb24gWGwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2wodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSmwodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdGgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZWgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuaCh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJoKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGloKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1aCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmaCh0LGUsbil7dmFyIHI9cWwuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBkaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBoKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geWgodCxlKXtyZXR1cm4gJGwodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBnaCh0LGUpe3JldHVybiAkbCh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBtaCh0LGUpe3JldHVybiAkbCh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gdmgodCxlKXtyZXR1cm4gJGwoMStEbC5jb3VudChCbCh0KSx0KSxlLDMpfWZ1bmN0aW9uIGJoKHQsZSl7cmV0dXJuICRsKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBfaCh0LGUpe3JldHVybiBiaCh0LGUpKyIwMDAifWZ1bmN0aW9uIHhoKHQsZSl7cmV0dXJuICRsKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gd2godCxlKXtyZXR1cm4gJGwodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBraCh0LGUpe3JldHVybiAkbCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFRoKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBFaCh0LGUpe3JldHVybiAkbChrbC5jb3VudChCbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQ2godCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/U2wodCk6U2wuY2VpbCh0KX1mdW5jdGlvbiBTaCh0LGUpe3JldHVybiB0PUNoKHQpLCRsKFNsLmNvdW50KEJsKHQpLHQpKyg0PT09QmwodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gQWgodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gTWgodCxlKXtyZXR1cm4gJGwoVGwuY291bnQoQmwodCktMSx0KSxlLDIpfWZ1bmN0aW9uIE5oKHQsZSl7cmV0dXJuICRsKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBEaCh0LGUpe3JldHVybiAkbCgodD1DaCh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBPaCh0LGUpe3JldHVybiAkbCh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gQmgodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiAkbCgodD1uPj00fHwwPT09bj9TbCh0KTpTbC5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIExoKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrJGwoZS82MHwwLCIwIiwyKSskbChlJTYwLCIwIiwyKX1mdW5jdGlvbiBJaCh0LGUpe3JldHVybiAkbCh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIFJoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIEZoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBQaCh0LGUpe3JldHVybiAkbCgxK3hsLmNvdW50KElsKHQpLHQpLGUsMyl9ZnVuY3Rpb24gamgodCxlKXtyZXR1cm4gJGwodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFloKHQsZSl7cmV0dXJuIGpoKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gemgodCxlKXtyZXR1cm4gJGwodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBVaCh0LGUpe3JldHVybiAkbCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHFoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gSGgodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uICRoKHQsZSl7cmV0dXJuICRsKGRsLmNvdW50KElsKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBXaCh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9tbCh0KTptbC5jZWlsKHQpfWZ1bmN0aW9uIFZoKHQsZSl7cmV0dXJuIHQ9V2godCksJGwobWwuY291bnQoSWwodCksdCkrKDQ9PT1JbCh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBHaCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBYaCh0LGUpe3JldHVybiAkbChwbC5jb3VudChJbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gWmgodCxlKXtyZXR1cm4gJGwodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFFoKHQsZSl7cmV0dXJuICRsKCh0PVdoKHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEtoKHQsZSl7cmV0dXJuICRsKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBKaCh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuICRsKCh0PW4+PTR8fDA9PT1uP21sKHQpOm1sLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gdGYoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGVmKCl7cmV0dXJuIiUifWZ1bmN0aW9uIG5mKHQpe3JldHVybit0fWZ1bmN0aW9uIHJmKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9amw9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxyPXQudGltZSxpPXQucGVyaW9kcyxhPXQuZGF5cyxvPXQuc2hvcnREYXlzLHM9dC5tb250aHMsYz10LnNob3J0TW9udGhzLHU9VmwoaSksbD1HbChpKSxoPVZsKGEpLGY9R2woYSksZD1WbChvKSxwPUdsKG8pLHk9VmwocyksZz1HbChzKSxtPVZsKGMpLHY9R2woYyksYj17YTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOnloLGU6eWgsZjpfaCxnOkRoLEc6QmgsSDpnaCxJOm1oLGo6dmgsTDpiaCxtOnhoLE06d2gscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6bmYsczpyZixTOmtoLHU6VGgsVTpFaCxWOlNoLHc6QWgsVzpNaCx4Om51bGwsWDpudWxsLHk6TmgsWTpPaCxaOkxoLCIlIjplZn0sXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOkloLGU6SWgsZjpZaCxnOlFoLEc6SmgsSDpSaCxJOkZoLGo6UGgsTDpqaCxtOnpoLE06VWgscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6bmYsczpyZixTOnFoLHU6SGgsVTokaCxWOlZoLHc6R2gsVzpYaCx4Om51bGwsWDpudWxsLHk6WmgsWTpLaCxaOnRmLCIlIjplZn0seD17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cC5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9Zi5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09di5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Zy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6YWgsZTphaCxmOmhoLGc6ZWgsRzp0aCxIOnNoLEk6c2gsajpvaCxMOmxoLG06aWgsTTpjaCxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxxOnJoLFE6ZGgsczpwaCxTOnVoLHU6WmwsVTpRbCxWOktsLHc6WGwsVzpKbCx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVCh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFQodCxyLGUsbil9LHk6ZWgsWTp0aCxaOm5oLCIlIjpmaH07ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT16bFtyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9UGwoMTkwMCx2b2lkIDAsMSk7aWYoVChhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKGUmJiEoIloiaW4gYSkmJihhLlo9MCksInAiaW4gYSYmKGEuSD1hLkglMTIrMTIqYS5wKSx2b2lkIDA9PT1hLm0mJihhLm09InEiaW4gYT9hLnE6MCksIlYiaW4gYSl7aWYoYS5WPDF8fGEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBhfHwoYS53PTEpLCJaImluIGE/KGk9KHI9RmwoUGwoYS55LDAsMSkpKS5nZXRVVENEYXkoKSxyPWk+NHx8MD09PWk/cGwuY2VpbChyKTpwbChyKSxyPXhsLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0VVRDRnVsbFllYXIoKSxhLm09ci5nZXRVVENNb250aCgpLGEuZD1yLmdldFVUQ0RhdGUoKSsoYS53KzYpJTcpOihpPShyPVJsKFBsKGEueSwwLDEpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pP1RsLmNlaWwocik6VGwocikscj1EbC5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldEZ1bGxZZWFyKCksYS5tPXIuZ2V0TW9udGgoKSxhLmQ9ci5nZXREYXRlKCkrKGEudys2KSU3KX1lbHNlKCJXImluIGF8fCJVImluIGEpJiYoInciaW4gYXx8KGEudz0idSJpbiBhP2EudSU3OiJXImluIGE/MTowKSxpPSJaImluIGE/RmwoUGwoYS55LDAsMSkpLmdldFVUQ0RheSgpOlJsKFBsKGEueSwwLDEpKS5nZXREYXkoKSxhLm09MCxhLmQ9IlciaW4gYT8oYS53KzYpJTcrNyphLlctKGkrNSklNzphLncrNyphLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gYT8oYS5IKz1hLlovMTAwfDAsYS5NKz1hLlolMTAwLEZsKGEpKTpSbChhKX19ZnVuY3Rpb24gVCh0LGUsbixyKXtmb3IodmFyIGksYSxvPTAscz1lLmxlbmd0aCxjPW4ubGVuZ3RoO288czspe2lmKHI+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQobysrKSkpe2lmKGk9ZS5jaGFyQXQobysrKSwhKGE9eFtpIGluIHpsP2UuY2hhckF0KG8rKyk6aV0pfHwocj1hKHQsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfXJldHVybiBiLng9dyhuLGIpLGIuWD13KHIsYiksYi5jPXcoZSxiKSxfLng9dyhuLF8pLF8uWD13KHIsXyksXy5jPXcoZSxfKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsYik7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLFlsPWpsLmZvcm1hdCxqbC5wYXJzZSxqbC51dGNGb3JtYXQsamwudXRjUGFyc2U7dmFyIGFmPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIG9mKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiByfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IHNmKHIpfWZ1bmN0aW9uIHNmKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGNmKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIscj10LmluZGV4T2YoIi4iKTtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiB1Zih0LGUpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChuPXRbcl0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGxmKHQsZSxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09ZSl7dFtyXT1hZix0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9c2YucHJvdG90eXBlPW9mLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c2Ysb246ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMuXyxpPWNmKHQrIiIsciksYT0tMSxvPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPG87KWlmKG49KHQ9aVthXSkudHlwZSlyW25dPWxmKHJbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiByKXJbbl09bGYocltuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8bzspaWYoKG49KHQ9aVthXSkudHlwZSkmJihuPXVmKHJbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHNmKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixyLGk9bmV3IEFycmF5KG4pLGE9MDthPG47KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLG49KHI9dGhpcy5fW3RdKS5sZW5ndGg7YTxuOysrYSlyW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLGE9ci5sZW5ndGg7aTxhOysraSlyW2ldLnZhbHVlLmFwcGx5KGUsbil9fTtjb25zdCBoZj1vZjt2YXIgZmYsZGYscGY9MCx5Zj0wLGdmPTAsbWY9MCx2Zj0wLGJmPTAsX2Y9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUseGY9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gd2YoKXtyZXR1cm4gdmZ8fCh4ZihrZiksdmY9X2Yubm93KCkrYmYpfWZ1bmN0aW9uIGtmKCl7dmY9MH1mdW5jdGlvbiBUZigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gRWYodCxlLG4pe3ZhciByPW5ldyBUZjtyZXR1cm4gci5yZXN0YXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIENmKCl7dmY9KG1mPV9mLm5vdygpKStiZixwZj15Zj0wO3RyeXshZnVuY3Rpb24oKXt3ZigpLCsrcGY7Zm9yKHZhciB0LGU9ZmY7ZTspKHQ9dmYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbCh2b2lkIDAsdCksZT1lLl9uZXh0Oy0tcGZ9KCl9ZmluYWxseXtwZj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1mZixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6ZmY9ZSk7ZGY9dCxBZihyKX0oKSx2Zj0wfX1mdW5jdGlvbiBTZigpe3ZhciB0PV9mLm5vdygpLGU9dC1tZjtlPjFlMyYmKGJmLT1lLG1mPXQpfWZ1bmN0aW9uIEFmKHQpe3BmfHwoeWYmJih5Zj1jbGVhclRpbWVvdXQoeWYpKSx0LXZmPjI0Pyh0PDEvMCYmKHlmPXNldFRpbWVvdXQoQ2YsdC1fZi5ub3coKS1iZikpLGdmJiYoZ2Y9Y2xlYXJJbnRlcnZhbChnZikpKTooZ2Z8fChtZj1fZi5ub3coKSxnZj1zZXRJbnRlcnZhbChTZiwxZTMpKSxwZj0xLHhmKENmKSkpfWZ1bmN0aW9uIE1mKHQsZSxuKXt2YXIgcj1uZXcgVGY7cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgobj0+e3Iuc3RvcCgpLHQobitlKX0pLGUsbikscn1UZi5wcm90b3R5cGU9RWYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUZixyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/d2YoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8ZGY9PT10aGlzfHwoZGY/ZGYuX25leHQ9dGhpczpmZj10aGlzLGRmPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sQWYoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsQWYoKSl9fTt2YXIgTmY9aGYoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksRGY9W107ZnVuY3Rpb24gT2YodCxlLG4scixpLGEpe3ZhciBvPXQuX190cmFuc2l0aW9uO2lmKG8pe2lmKG4gaW4gbylyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gYShjKXt2YXIgdSxsLGgsZjtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2Zvcih1IGluIGkpaWYoKGY9aVt1XSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWYuc3RhdGUpcmV0dXJuIE1mKGEpOzQ9PT1mLnN0YXRlPyhmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKTordTxlJiYoZi5zdGF0ZT02LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVt1XSl9aWYoTWYoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG8oYykpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxyPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSx1PTAsbD0tMTt1PGg7Kyt1KShmPW4udHdlZW5bdV0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihyWysrbF09Zik7ci5sZW5ndGg9bCsxfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgaT1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLGE9LTEsbz1yLmxlbmd0aDsrK2E8bzspclthXS5jYWxsKHQsaSk7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciByIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtlXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtlXT1uLG4udGltZXI9RWYoKGZ1bmN0aW9uKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmYSh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSh0LG4se25hbWU6ZSxpbmRleDpyLGdyb3VwOmksb246TmYsdHdlZW46RGYsdGltZTphLnRpbWUsZGVsYXk6YS5kZWxheSxkdXJhdGlvbjphLmR1cmF0aW9uLGVhc2U6YS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIEJmKHQsZSl7dmFyIG49SWYodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBMZih0LGUpe3ZhciBuPUlmKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIElmKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gUmYodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19dmFyIEZmLFBmPTE4MC9NYXRoLlBJLGpmPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIFlmKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKlBmLHNrZXdYOk1hdGguYXRhbihjKSpQZixzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gemYodCxlLG4scil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sYz1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LHIsaSxhLG8scyl7aWYodCE9PWl8fHIhPT1hKXt2YXIgYz1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpjLTQseDpSZih0LGkpfSx7aTpjLTIseDpSZihyLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStuKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpuLnB1c2goaShuKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6UmYodCxlKX0pKTplJiZuLnB1c2goaShuKSsicm90YXRlKCIrZStyKX0oYS5yb3RhdGUsby5yb3RhdGUscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT9hLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxyKS0yLHg6UmYodCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urcil9KGEuc2tld1gsby5za2V3WCxzLGMpLGZ1bmN0aW9uKHQsZSxuLHIsYSxvKXtpZih0IT09bnx8ZSE9PXIpe3ZhciBzPWEucHVzaChpKGEpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtvLnB1c2goe2k6cy00LHg6UmYodCxuKX0se2k6cy0yLHg6UmYoZSxyKX0pfWVsc2UgMT09PW4mJjE9PT1yfHxhLnB1c2goaShhKSsic2NhbGUoIituKyIsIityKyIpIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsYyksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj1jLmxlbmd0aDsrK248cjspc1soZT1jW25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgVWY9emYoKGZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkodCsiIik7cmV0dXJuIGUuaXNJZGVudGl0eT9qZjpZZihlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZil9KSwicHgsICIsInB4KSIsImRlZykiKSxxZj16ZigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/amY6KEZmfHwoRmY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksRmYuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUZmLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP1lmKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOmpmKX0pLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSGYodCxlKXt2YXIgbixyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUxmKHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1uKWZvcih2YXIgbz0wLHM9KHI9bj1hKS5sZW5ndGg7bzxzOysrbylpZihyW29dLm5hbWU9PT1lKXsocj1yLnNsaWNlKCkpLnNwbGljZShvLDEpO2JyZWFrfWkudHdlZW49cn19ZnVuY3Rpb24gJGYodCxlLG4pe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUxmKHRoaXMsdCksbz1hLnR3ZWVuO2lmKG8hPT1yKXtpPShyPW8pLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sYz0wLHU9aS5sZW5ndGg7Yzx1OysrYylpZihpW2NdLm5hbWU9PT1lKXtpW2NdPXM7YnJlYWt9Yz09PXUmJmkucHVzaChzKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIFdmKHQsZSxuKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PUxmKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksZnVuY3Rpb24odCl7cmV0dXJuIElmKHQscikudmFsdWVbZV19fWZ1bmN0aW9uIFZmKHQsZSxuLHIsaSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqbisoMSszKnQrMyphLTMqbykqcitvKmkpLzZ9Y29uc3QgR2Y9ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP0ZyOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6SXIoaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PXVyKHQpKS5yLChlPXVyKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89RnIodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIFhmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9dXIoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19WGYoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBWZigobi1yL2UpKmUsbyxpLGEscyl9fSkpLFhmKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIFZmKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIFpmPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRZj1uZXcgUmVnRXhwKFpmLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEtmKHQsZSl7dmFyIG4scixpLGE9WmYubGFzdEluZGV4PVFmLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1aZi5leGVjKHQpKSYmKHI9UWYuZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OlJmKG4scil9KSksYT1RZi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIEpmKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9SZjplIGluc3RhbmNlb2YgYXI/R2Y6KG49YXIoZSkpPyhlPW4sR2YpOktmKSh0LGUpfWZ1bmN0aW9uIHRkKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBlZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIG5kKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHJkKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBpZCh0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBhZCh0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIG9kKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBzZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIGNkKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmc2QodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIHVkKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmb2QodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIGxkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7QmYodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGhkKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtCZih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIGZkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TGYodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGRkKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtMZih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIHBkKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0xmKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiB5ZCh0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/QmY6TGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIGdkPWl1LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBtZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiB2ZCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gYmQodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJnZkKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIF9kKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiB4ZCh0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZfZChyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciB3ZD0wO2Z1bmN0aW9uIGtkKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBUZCgpe3JldHVybisrd2R9dmFyIEVkPWl1LnByb3RvdHlwZTtrZC5wcm90b3R5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGl1KCkudHJhbnNpdGlvbih0KX0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprZCxzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD0kcyh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgcyxjLHU9cltvXSxsPXUubGVuZ3RoLGg9YVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpKHM9dVtmXSkmJihjPXQuY2FsbChzLHMuX19kYXRhX18sZix1KSkmJigiX19kYXRhX18iaW4gcyYmKGMuX19kYXRhX189cy5fX2RhdGFfXyksaFtmXT1jLE9mKGhbZl0sZSxuLGYsaCxJZihzLG4pKSk7cmV0dXJuIG5ldyBrZChhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9R3ModCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9SWYoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZPZihmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IGtkKGEsbyxlLG4pfSxzZWxlY3RDaGlsZDpFZC5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpFZC5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVhzKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBrZChyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBrZChvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgZ2QodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPVRkKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1JZihvLGUpO09mKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcga2Qocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6RWQuY2FsbCxub2RlczpFZC5ub2Rlcyxub2RlOkVkLm5vZGUsc2l6ZTpFZC5zaXplLGVtcHR5OkVkLmVtcHR5LGVhY2g6RWQuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/SWYodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKHlkKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1oYyh0KSxyPSJ0cmFuc2Zvcm0iPT09bj9xZjpKZjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9hZDppZCkobixyLFdmKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP2VkOnRkKShuKToobi5sb2NhbD9yZDpuZCkobixyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1oYyh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP2NkOnVkKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP1VmOkpmO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXdjKHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx3Yyh0aGlzLHQpKTtyZXR1cm4gYT09PW8/bnVsbDphPT09biYmbz09PXI/aTppPWUobj1hLHI9byl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxtZCh0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz13Yyh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz13Yyh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIsV2YodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPUxmKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1tZChlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz13Yyh0aGlzLHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixiZCh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fShXZih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUseGQodCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9SWYodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLG89aS5sZW5ndGg7YTxvOysrYSlpZigocj1pW2FdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP0hmOiRmKShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2xkOmhkKShlLHQpKTpJZih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mZDpkZCkoZSx0KSk6SWYodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHBkKGUsdCkpOklmKHRoaXMubm9kZSgpLGUpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO0xmKHRoaXMsdCkuZWFzZT1ufX0odGhpcy5faWQsdCkpfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG49dGhpcyxyPW4uX2lkLGk9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLG8pe3ZhciBzPXt2YWx1ZTpvfSxjPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmYSgpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPUxmKHRoaXMsciksaT1uLm9uO2khPT10JiYoKGU9KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2goYykpLG4ub249ZX0pKSwwPT09aSYmYSgpfSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpFZFtTeW1ib2wuaXRlcmF0b3JdfTt2YXIgQ2Q9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfX07ZnVuY3Rpb24gU2QodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gbn1mdW5jdGlvbiBBZCgpe31mdW5jdGlvbiBNZCh0KXtyZXR1cm4gbnVsbD09dD9BZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIE5kKHQpe3JldHVybiBudWxsPT10P1tdOkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIERkKCl7cmV0dXJuW119ZnVuY3Rpb24gT2QodCl7cmV0dXJuIG51bGw9PXQ/RGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiBCZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBMZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19aXUucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSkpfSxpdS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBrZD8oZT10Ll9pZCx0PXQuX25hbWUpOihlPVRkKCksKG49Q2QpLnRpbWU9d2YoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZPZihvLHQsZSx1LHMsbnx8U2QobyxlKSk7cmV0dXJuIG5ldyBrZChyLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIElkPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIFJkKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIEZkPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gUGQoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBqZCh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBZZCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiB6ZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gVWQodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzPTAsYz1lLmxlbmd0aCx1PWEubGVuZ3RoO3M8dTsrK3MpKG89ZVtzXSk/KG8uX19kYXRhX189YVtzXSxyW3NdPW8pOm5bc109bmV3IFlkKHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiBxZCh0LGUsbixyLGksYSxvKXt2YXIgcyxjLHUsbD1uZXcgTWFwLGg9ZS5sZW5ndGgsZj1hLmxlbmd0aCxkPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJihkW3NdPXU9by5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpKyIiLGwuaGFzKHUpP2lbc109YzpsLnNldCh1LGMpKTtmb3Iocz0wO3M8ZjsrK3MpdT1vLmNhbGwodCxhW3NdLHMsYSkrIiIsKGM9bC5nZXQodSkpPyhyW3NdPWMsYy5fX2RhdGFfXz1hW3NdLGwuZGVsZXRlKHUpKTpuW3NdPW5ldyBZZCh0LGFbc10pO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmbC5nZXQoZFtzXSk9PT1jJiYoaVtzXT1jKX1mdW5jdGlvbiBIZCh0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiAkZCh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gV2QodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59WWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZZCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgVmQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IEdkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpWZCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIFhkKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLEdkLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpHZFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIFpkKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBRZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEtkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gSmQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gdHAodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIGVwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIG5wKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBycCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBpcCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIGFwKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIG9wKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8bnAodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gc3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIGNwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiB1cCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBscCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gaHAodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgZnAodCl9ZnVuY3Rpb24gZnAodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPWxwKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gZHAodCxlKXtmb3IodmFyIG49aHAodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBwcCh0LGUpe2Zvcih2YXIgbj1ocCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIHlwKHQpe3JldHVybiBmdW5jdGlvbigpe2RwKHRoaXMsdCl9fWZ1bmN0aW9uIGdwKHQpe3JldHVybiBmdW5jdGlvbigpe3BwKHRoaXMsdCl9fWZ1bmN0aW9uIG1wKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP2RwOnBwKSh0aGlzLHQpfX1mdW5jdGlvbiB2cCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gYnAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBfcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24geHAoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB3cCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBrcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIFRwKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEVwKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gQ3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1WZCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09VmQ/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIFNwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEFwKHQpe3ZhciBlPVhkKHQpO3JldHVybihlLmxvY2FsP1NwOkNwKShlKX1mdW5jdGlvbiBNcCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIE5wKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRHAoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIE9wKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBCcCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBMcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5vcHRpb25zKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSXAodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGk9dGhpcy5fX29uLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fShlKTtpZihpKWZvcih2YXIgbz0wLHM9aS5sZW5ndGg7bzxzOysrbylpZigocj1pW29dKS50eXBlPT09dC50eXBlJiZyLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcixyLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcj1hLHIub3B0aW9ucz1uKSx2b2lkKHIudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLG4pLHI9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOm59LGk/aS5wdXNoKHIpOnRoaXMuX19vbj1bcl19fWZ1bmN0aW9uIFJwKHQsZSxuKXt2YXIgcj1ucCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShlLG4pOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oaS5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxpLmRldGFpbD1uLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBGcCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBScCh0aGlzLHQsZSl9fWZ1bmN0aW9uIFBwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFJwKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZwLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIGpwPVtudWxsXTtmdW5jdGlvbiBZcCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB6cCgpe3JldHVybiBuZXcgWXAoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxqcCl9WXAucHJvdG90eXBlPXpwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXAsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1NZCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IFlwKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBOZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0KTpPZCh0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1bXSxpPVtdLGE9MDthPG47KythKWZvcih2YXIgbyxzPWVbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSkobz1zW3VdKSYmKHIucHVzaCh0LmNhbGwobyxvLl9fZGF0YV9fLHUscykpLGkucHVzaChvKSk7cmV0dXJuIG5ldyBZcChyLGkpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09dD9SZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSWQuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMZCh0KSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09dD9QZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRmQuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMZCh0KSkpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUJkKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBZcChyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxIZCk7dmFyIG49ZT9xZDpVZCxyPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXpkKHQpKTtmb3IodmFyIGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBsPXJbdV0saD1pW3VdLGY9aC5sZW5ndGgsZD0kZCh0LmNhbGwobCxsJiZsLl9fZGF0YV9fLHUscikpLHA9ZC5sZW5ndGgseT1zW3VdPW5ldyBBcnJheShwKSxnPW9bdV09bmV3IEFycmF5KHApLG09Y1t1XT1uZXcgQXJyYXkoZik7bihsLGgseSxnLG0sZCxlKTtmb3IodmFyIHYsYixfPTAseD0wO188cDsrK18paWYodj15W19dKXtmb3IoXz49eCYmKHg9XysxKTshKGI9Z1t4XSkmJisreDxwOyk7di5fbmV4dD1ifHxudWxsfX1yZXR1cm4obz1uZXcgWXAobyxyKSkuX2VudGVyPXMsby5fZXhpdD1jLG99LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZcCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChqZCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFlwKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoamQpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHI9dChyKSkmJihyPXIuc2VsZWN0aW9uKCkpOnI9ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSkmJihpPWkuc2VsZWN0aW9uKCkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQsbj10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsaT1uLmxlbmd0aCxhPXIubGVuZ3RoLG89TWF0aC5taW4oaSxhKSxzPW5ldyBBcnJheShpKSxjPTA7YzxvOysrYylmb3IodmFyIHUsbD1uW2NdLGg9cltjXSxmPWwubGVuZ3RoLGQ9c1tjXT1uZXcgQXJyYXkoZikscD0wO3A8ZjsrK3ApKHU9bFtwXXx8aFtwXSkmJihkW3BdPXUpO2Zvcig7YzxpOysrYylzW2NdPW5bY107cmV0dXJuIG5ldyBZcChzLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxhPWkubGVuZ3RoLTEsbz1pW2FdOy0tYT49MDspKHI9aVthXSkmJihvJiY0XnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixvKSxvPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9V2QpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSl7Zm9yKHZhciBvLHM9blthXSxjPXMubGVuZ3RoLHU9aVthXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKG89c1tsXSkmJih1W2xdPW8pO3Uuc29ydChlKX1yZXR1cm4gbmV3IFlwKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1yW2ldO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXtsZXQgdD0wO2Zvcihjb25zdCBlIG9mIHRoaXMpKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1YZCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/UWQ6WmQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9lcDp0cDpuLmxvY2FsP0pkOktkKShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP3JwOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2FwOmlwKSh0LGUsbnVsbD09bj8iIjpuKSk6b3AodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/c3A6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dXA6Y3ApKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49bHAodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9aHAodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/bXA6ZT95cDpncCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/dnA6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P19wOmJwKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/eHA6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2twOndwKSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goVHApfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goRXApfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFwKHQpLHI9bnVsbD09ZT9NcDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOk1kKGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE5wKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/T3A6RHApfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9QnAodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/SXA6THAscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/UHA6RnApKHQsZSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByLGk9dFtlXSxhPTAsbz1pLmxlbmd0aDthPG87KythKShyPWlbYV0pJiYoeWllbGQgcil9fTtjb25zdCBVcD16cDt2YXIgcXA9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gSHAoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgJHAocil9ZnVuY3Rpb24gJHAodCl7dGhpcy5fPXR9ZnVuY3Rpb24gV3AodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIFZwKHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gR3AodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPXFwLHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH0kcC5wcm90b3R5cGU9SHAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokcCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9V3AodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09R3AocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1HcChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49VnAocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgJHAodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IFhwPUhwO3ZhciBacCxRcCxLcD0wLEpwPTAsdHk9MCxleT0wLG55PTAscnk9MCxpeT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxheT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBveSgpe3JldHVybiBueXx8KGF5KHN5KSxueT1peS5ub3coKStyeSl9ZnVuY3Rpb24gc3koKXtueT0wfWZ1bmN0aW9uIGN5KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eSh0LGUsbil7dmFyIHI9bmV3IGN5O3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gbHkoKXtueT0oZXk9aXkubm93KCkpK3J5LEtwPUpwPTA7dHJ5eyFmdW5jdGlvbigpe295KCksKytLcDtmb3IodmFyIHQsZT1acDtlOykodD1ueS1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKHZvaWQgMCx0KSxlPWUuX25leHQ7LS1LcH0oKX1maW5hbGx5e0twPTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPVpwLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpacD1lKTtRcD10LGZ5KHIpfSgpLG55PTB9fWZ1bmN0aW9uIGh5KCl7dmFyIHQ9aXkubm93KCksZT10LWV5O2U+MWUzJiYocnktPWUsZXk9dCl9ZnVuY3Rpb24gZnkodCl7S3B8fChKcCYmKEpwPWNsZWFyVGltZW91dChKcCkpLHQtbnk+MjQ/KHQ8MS8wJiYoSnA9c2V0VGltZW91dChseSx0LWl5Lm5vdygpLXJ5KSksdHkmJih0eT1jbGVhckludGVydmFsKHR5KSkpOih0eXx8KGV5PWl5Lm5vdygpLHR5PXNldEludGVydmFsKGh5LDFlMykpLEtwPTEsYXkobHkpKSl9ZnVuY3Rpb24gZHkodCxlLG4pe3ZhciByPW5ldyBjeTtyZXR1cm4gZT1udWxsPT1lPzA6K2Usci5yZXN0YXJ0KChuPT57ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfWN5LnByb3RvdHlwZT11eS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmN5LHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9veSgpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxRcD09PXRoaXN8fChRcD9RcC5fbmV4dD10aGlzOlpwPXRoaXMsUXA9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixmeSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxmeSgpKX19O3ZhciBweT1YcCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx5eT1bXTtmdW5jdGlvbiBneSh0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gZHkoYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihkeSgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj11eSgoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpweSx0d2Vlbjp5eSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gbXkodCxlKXt2YXIgbj1ieSh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHZ5KHQsZSl7dmFyIG49YnkodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gYnkodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBfeSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHQqKDEtbikrZSpufX12YXIgeHksd3k9MTgwL01hdGguUEksa3k9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gVHkodCxlLG4scixpLGEpe3ZhciBvLHMsYztyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwoYz10Km4rZSpyKSYmKG4tPXQqYyxyLT1lKmMpLChzPU1hdGguc3FydChuKm4rcipyKSkmJihuLz1zLHIvPXMsYy89cyksdCpyPGUqbiYmKHQ9LXQsZT0tZSxjPS1jLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqd3ksc2tld1g6TWF0aC5hdGFuKGMpKnd5LHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBFeSh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxjPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQscixpLGEsbyxzKXtpZih0IT09aXx8ciE9PWEpe3ZhciBjPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmMtNCx4Ol95KHQsaSl9LHtpOmMtMix4Ol95KHIsYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK24pfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLHIpLTIseDpfeSh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK3IpfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lP2EucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLHIpLTIseDpfeSh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStyKX0oYS5za2V3WCxvLnNrZXdYLHMsYyksZnVuY3Rpb24odCxlLG4scixhLG8pe2lmKHQhPT1ufHxlIT09cil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDpfeSh0LG4pfSx7aTpzLTIseDpfeShlLHIpfSl9ZWxzZSAxPT09biYmMT09PXJ8fGEucHVzaChpKGEpKyJzY2FsZSgiK24rIiwiK3IrIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxjKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPWMubGVuZ3RoOysrbjxyOylzWyhlPWNbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBDeT1FeSgoZnVuY3Rpb24odCl7Y29uc3QgZT1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P2t5OlR5KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLFN5PUV5KChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9reTooeHl8fCh4eT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx4eS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9eHkudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/VHkoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6a3kpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBBeSh0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dnkodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBNeSh0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dnkodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24gTnkodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dnkodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gYnkodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gRHkodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIE95KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIEJ5KCl7fXZhciBMeT0uNyxJeT0xLjQyODU3MTQyODU3MTQyODYsUnk9IlxccyooWystXT9cXGQrKVxccyoiLEZ5PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFB5PSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixqeT0vXiMoWzAtOWEtZl17Myw4fSkkLyxZeT1uZXcgUmVnRXhwKCJecmdiXFwoIitbUnksUnksUnldKyJcXCkkIiksenk9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1B5LFB5LFB5XSsiXFwpJCIpLFV5PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbUnksUnksUnksRnldKyJcXCkkIikscXk9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tQeSxQeSxQeSxGeV0rIlxcKSQiKSxIeT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbRnksUHksUHldKyJcXCkkIiksJHk9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tGeSxQeSxQeSxGeV0rIlxcKSQiKSxXeT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBWeSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEd5KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gWHkodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9ankuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9aeShlKTozPT09bj9uZXcgdGcoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1F5KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1F5KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9WXkuZXhlYyh0KSk/bmV3IHRnKGVbMV0sZVsyXSxlWzNdLDEpOihlPXp5LmV4ZWModCkpP25ldyB0ZygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1VeS5leGVjKHQpKT9ReShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1xeS5leGVjKHQpKT9ReSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1IeS5leGVjKHQpKT9pZyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPSR5LmV4ZWModCkpP2lnKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6V3kuaGFzT3duUHJvcGVydHkodCk/WnkoV3lbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB0ZyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFp5KHQpe3JldHVybiBuZXcgdGcodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFF5KHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgdGcodCxlLG4scil9ZnVuY3Rpb24gS3kodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBCeXx8KHQ9WHkodCkpLHQ/bmV3IHRnKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB0Z31mdW5jdGlvbiBKeSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/S3kodCk6bmV3IHRnKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB0Zyh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gZWcoKXtyZXR1cm4iIyIrcmcodGhpcy5yKStyZyh0aGlzLmcpK3JnKHRoaXMuYil9ZnVuY3Rpb24gbmcoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiByZyh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGlnKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgb2codCxlLG4scil9ZnVuY3Rpb24gYWcodCl7aWYodCBpbnN0YW5jZW9mIG9nKXJldHVybiBuZXcgb2codC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQnl8fCh0PVh5KHQpKSwhdClyZXR1cm4gbmV3IG9nO2lmKHQgaW5zdGFuY2VvZiBvZylyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IG9nKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gb2codCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHNnKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBjZyh0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fUR5KEJ5LFh5LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlZ5LGZvcm1hdEhleDpWeSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gYWcodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpHeSx0b1N0cmluZzpHeX0pLER5KHRnLEp5LE95KEJ5LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0l5Ok1hdGgucG93KEl5LHQpLG5ldyB0Zyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9MeTpNYXRoLnBvdyhMeSx0KSxuZXcgdGcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDplZyxmb3JtYXRIZXg6ZWcsZm9ybWF0UmdiOm5nLHRvU3RyaW5nOm5nfSkpLER5KG9nLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/YWcodCk6bmV3IG9nKHQsZSxuLG51bGw9PXI/MTpyKX0pLE95KEJ5LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0l5Ok1hdGgucG93KEl5LHQpLG5ldyBvZyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0x5Ok1hdGgucG93KEx5LHQpLG5ldyBvZyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IHRnKHNnKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLHNnKHQsaSxyKSxzZyh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO2NvbnN0IHVnPXQ9PigpPT50O2Z1bmN0aW9uIGxnKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KHQsbik6dWcoaXNOYU4odCk/ZTp0KX1jb25zdCBoZz1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/bGc6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqZSxuKX19KGUsbix0KTp1Zyhpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4oKHQ9SnkodCkpLnIsKGU9SnkoZSkpLnIpLGk9bih0LmcsZS5nKSxhPW4odC5iLGUuYiksbz1sZyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1yKGUpLHQuZz1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gZmcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pcj1KeShlW25dKSxhW25dPXIucnx8MCxvW25dPXIuZ3x8MCxzW25dPXIuYnx8MDtyZXR1cm4gYT10KGEpLG89dChvKSxzPXQocyksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1hKHQpLHIuZz1vKHQpLHIuYj1zKHQpLHIrIiJ9fX1mZygoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtyXSxhPXRbcisxXSxvPXI+MD90W3ItMV06MippLWEscz1yPGUtMT90W3IrMl06MiphLWk7cmV0dXJuIGNnKChuLXIvZSkqZSxvLGksYSxzKX19KSksZmcoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhyK2UtMSklZV0sYT10W3IlZV0sbz10WyhyKzEpJWVdLHM9dFsocisyKSVlXTtyZXR1cm4gY2coKG4tci9lKSplLGksYSxvLHMpfX0pKTt2YXIgZGc9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHBnPW5ldyBSZWdFeHAoZGcuc291cmNlLCJnIik7ZnVuY3Rpb24geWcodCxlKXt2YXIgbixyLGksYT1kZy5sYXN0SW5kZXg9cGcubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPWRnLmV4ZWModCkpJiYocj1wZy5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6X3kobixyKX0pKSxhPXBnLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2codCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP195OmUgaW5zdGFuY2VvZiBYeT9oZzoobj1YeShlKSk/KGU9bixoZyk6eWcpKHQsZSl9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHZnKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gYmcodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24gX2codCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHhnKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHdnKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24ga2codCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFRnKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gRWcodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZUZyh0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gQ2codCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZrZyh0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gU2codCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtteSh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQWcodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe215KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gTWcodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2eSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gTmcodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3Z5KHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gRGcodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dnkodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIE9nKHQsZSxuKXt2YXIgcixpLGE9ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfShlKT9teTp2eTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1hKHRoaXMsdCkscz1vLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksby5vbj1pfX12YXIgQmc9VXAucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIExnKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIElnKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLHIpLG4pfX1mdW5jdGlvbiBSZyh0LGUsbil7dmFyIHIsaTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYocj0oaT1hKSYmSWcodCxhLG4pKSxyfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gRmcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFBnKHQpe3ZhciBlLG47ZnVuY3Rpb24gcigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09biYmKGU9KG49cikmJkZnKHIpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9dmFyIGpnPTA7ZnVuY3Rpb24gWWcodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIHpnKCl7cmV0dXJuKytqZ312YXIgVWc9VXAucHJvdG90eXBlO1lnLnByb3RvdHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gVXAoKS50cmFuc2l0aW9uKHQpfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllnLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU1kKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pZm9yKHZhciBzLGMsdT1yW29dLGw9dS5sZW5ndGgsaD1hW29dPW5ldyBBcnJheShsKSxmPTA7ZjxsOysrZikocz11W2ZdKSYmKGM9dC5jYWxsKHMscy5fX2RhdGFfXyxmLHUpKSYmKCJfX2RhdGFfXyJpbiBzJiYoYy5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2ZdPWMsZ3koaFtmXSxlLG4sZixoLGJ5KHMsbikpKTtyZXR1cm4gbmV3IFlnKGEsdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1PZCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9W10sbz1bXSxzPTA7czxpOysrcylmb3IodmFyIGMsdT1yW3NdLGw9dS5sZW5ndGgsaD0wO2g8bDsrK2gpaWYoYz11W2hdKXtmb3IodmFyIGYsZD10LmNhbGwoYyxjLl9fZGF0YV9fLGgsdSkscD1ieShjLG4pLHk9MCxnPWQubGVuZ3RoO3k8ZzsrK3kpKGY9ZFt5XSkmJmd5KGYsZSxuLHksZCxwKTthLnB1c2goZCksby5wdXNoKGMpfXJldHVybiBuZXcgWWcoYSxvLGUsbil9LHNlbGVjdENoaWxkOlVnLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOlVnLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9QmQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IFlnKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyLGkpLG89bmV3IEFycmF5KHIpLHM9MDtzPGE7KytzKWZvcih2YXIgYyx1PWVbc10sbD1uW3NdLGg9dS5sZW5ndGgsZj1vW3NdPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZCkoYz11W2RdfHxsW2RdKSYmKGZbZF09Yyk7Zm9yKDtzPHI7KytzKW9bc109ZVtzXTtyZXR1cm4gbmV3IFlnKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCZyh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49emcoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSlpZihvPXNbdV0pe3ZhciBsPWJ5KG8sZSk7Z3kobyx0LG4sdSxzLHt0aW1lOmwudGltZStsLmRlbGF5K2wuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpsLmR1cmF0aW9uLGVhc2U6bC5lYXNlfSl9cmV0dXJuIG5ldyBZZyhyLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpVZy5jYWxsLG5vZGVzOlVnLm5vZGVzLG5vZGU6VWcubm9kZSxzaXplOlVnLnNpemUsZW1wdHk6VWcuZW1wdHksZWFjaDpVZy5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9ieSh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goT2cobix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVhkKHQpLHI9InRyYW5zZm9ybSI9PT1uP1N5OmdnO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP3dnOnhnKShuLHIsTnkodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/dmc6bWcpKG4pOihuLmxvY2FsP19nOmJnKShuLHIsZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPVhkKHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKHIubG9jYWw/RWc6Q2cpKHIsZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/Q3k6Z2c7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9b3AodGhpcyx0KSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLG9wKHRoaXMsdCkpO3JldHVybiBhPT09bz9udWxsOmE9PT1uJiZvPT09cj9pOmk9ZShuPWEscj1vKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LExnKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPW9wKHRoaXMsdCkscz1uKHRoaXMpLGM9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksYz1zPW9wKHRoaXMsdCkpLG89PT1jP251bGw6bz09PXImJmM9PT1pP2E6KGk9YyxhPWUocj1vLHMpKX19KHQscixOeSh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGEsbz0ic3R5bGUuIitlLHM9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dnkodGhpcyx0KSx1PWMub24sbD1udWxsPT1jLnZhbHVlW29dP2F8fChhPUxnKGUpKTp2b2lkIDA7dT09PW4mJmk9PT1sfHwocj0obj11KS5jb3B5KCkpLm9uKHMsaT1sKSxjLm9uPXJ9fSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPW9wKHRoaXMsdCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLFJnKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KE55KHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxQZyh0KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1ieSh0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/QXk6TXkpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/U2c6QWcpKGUsdCkpOmJ5KHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P01nOk5nKShlLHQpKTpieSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goRGcoZSx0KSk6YnkodGhpcy5ub2RlKCksZSkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dnkodGhpcyx0KS5lYXNlPW59fSh0aGlzLl9pZCx0KSl9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49dnkodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpLDA9PT1pJiZhKCl9KSl9LFtTeW1ib2wuaXRlcmF0b3JdOlVnW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBxZz17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fTtmdW5jdGlvbiBIZyh0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2V9IG5vdCBmb3VuZGApO3JldHVybiBufWZ1bmN0aW9uICRnKHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1VcC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19KHRoaXMsdCl9KSl9LFVwLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFlnPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9emcoKSwobj1xZykudGltZT1veSgpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJmd5KG8sdCxlLHUscyxufHxIZyhvLGUpKTtyZXR1cm4gbmV3IFlnKHIsdGhpcy5fcGFyZW50cyx0LGUpfSwkZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOiRnLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyAkZyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3ICRnKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3ICRnKDEsMCwwKSwkZy5wcm90b3R5cGU7dmFyIFdnPSJjb21tIixWZz0icnVsZSIsR2c9ImRlY2wiLFhnPU1hdGguYWJzLFpnPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gUWcodCl7cmV0dXJuIHQudHJpbSgpfWZ1bmN0aW9uIEtnKHQsZSxuKXtyZXR1cm4gdC5yZXBsYWNlKGUsbil9ZnVuY3Rpb24gSmcodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfWZ1bmN0aW9uIHRtKHQsZSl7cmV0dXJuIDB8dC5jaGFyQ29kZUF0KGUpfWZ1bmN0aW9uIGVtKHQsZSxuKXtyZXR1cm4gdC5zbGljZShlLG4pfWZ1bmN0aW9uIG5tKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBybSh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gaW0odCxlKXtyZXR1cm4gZS5wdXNoKHQpLHR9ZnVuY3Rpb24gYW0odCxlKXtmb3IodmFyIG49IiIscj1ybSh0KSxpPTA7aTxyO2krKyluKz1lKHRbaV0saSx0LGUpfHwiIjtyZXR1cm4gbn1mdW5jdGlvbiBvbSh0LGUsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlIkBpbXBvcnQiOmNhc2UgR2c6cmV0dXJuIHQucmV0dXJuPXQucmV0dXJufHx0LnZhbHVlO2Nhc2UgV2c6cmV0dXJuIiI7Y2FzZSJAa2V5ZnJhbWVzIjpyZXR1cm4gdC5yZXR1cm49dC52YWx1ZSsieyIrYW0odC5jaGlsZHJlbixyKSsifSI7Y2FzZSBWZzp0LnZhbHVlPXQucHJvcHMuam9pbigiLCIpfXJldHVybiBubShuPWFtKHQuY2hpbGRyZW4scikpP3QucmV0dXJuPXQudmFsdWUrInsiK24rIn0iOiIifU9iamVjdC5hc3NpZ247dmFyIHNtPTEsY209MSx1bT0wLGxtPTAsaG09MCxmbT0iIjtmdW5jdGlvbiBkbSh0LGUsbixyLGksYSxvKXtyZXR1cm57dmFsdWU6dCxyb290OmUscGFyZW50Om4sdHlwZTpyLHByb3BzOmksY2hpbGRyZW46YSxsaW5lOnNtLGNvbHVtbjpjbSxsZW5ndGg6byxyZXR1cm46IiJ9fWZ1bmN0aW9uIHBtKCl7cmV0dXJuIGhtPWxtPjA/dG0oZm0sLS1sbSk6MCxjbS0tLDEwPT09aG0mJihjbT0xLHNtLS0pLGhtfWZ1bmN0aW9uIHltKCl7cmV0dXJuIGhtPWxtPHVtP3RtKGZtLGxtKyspOjAsY20rKywxMD09PWhtJiYoY209MSxzbSsrKSxobX1mdW5jdGlvbiBnbSgpe3JldHVybiB0bShmbSxsbSl9ZnVuY3Rpb24gbW0oKXtyZXR1cm4gbG19ZnVuY3Rpb24gdm0odCxlKXtyZXR1cm4gZW0oZm0sdCxlKX1mdW5jdGlvbiBibSh0KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gNTtjYXNlIDMzOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ3OmNhc2UgNjI6Y2FzZSA2NDpjYXNlIDEyNjpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OnJldHVybiA0O2Nhc2UgNTg6cmV0dXJuIDM7Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA5MTpyZXR1cm4gMjtjYXNlIDQxOmNhc2UgOTM6cmV0dXJuIDF9cmV0dXJuIDB9ZnVuY3Rpb24gX20odCl7cmV0dXJuIFFnKHZtKGxtLTEsa20oOTE9PT10P3QrMjo0MD09PXQ/dCsxOnQpKSl9ZnVuY3Rpb24geG0odCl7Zm9yKDsoaG09Z20oKSkmJmhtPDMzOyl5bSgpO3JldHVybiBibSh0KT4yfHxibShobSk+Mz8iIjoiICJ9ZnVuY3Rpb24gd20odCxlKXtmb3IoOy0tZSYmeW0oKSYmIShobTw0OHx8aG0+MTAyfHxobT41NyYmaG08NjV8fGhtPjcwJiZobTw5Nyk7KTtyZXR1cm4gdm0odCxtbSgpKyhlPDYmJjMyPT1nbSgpJiYzMj09eW0oKSkpfWZ1bmN0aW9uIGttKHQpe2Zvcig7eW0oKTspc3dpdGNoKGhtKXtjYXNlIHQ6cmV0dXJuIGxtO2Nhc2UgMzQ6Y2FzZSAzOTozNCE9PXQmJjM5IT09dCYma20oaG0pO2JyZWFrO2Nhc2UgNDA6NDE9PT10JiZrbSh0KTticmVhaztjYXNlIDkyOnltKCl9cmV0dXJuIGxtfWZ1bmN0aW9uIFRtKHQsZSl7Zm9yKDt5bSgpJiZ0K2htIT09NTcmJih0K2htIT09ODR8fDQ3IT09Z20oKSk7KTtyZXR1cm4iLyoiK3ZtKGUsbG0tMSkrIioiK1pnKDQ3PT09dD90OnltKCkpfWZ1bmN0aW9uIEVtKHQpe2Zvcig7IWJtKGdtKCkpOyl5bSgpO3JldHVybiB2bSh0LGxtKX1mdW5jdGlvbiBDbSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZtPSIiLHR9KFNtKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1mdW5jdGlvbih0KXtyZXR1cm4gc209Y209MSx1bT1ubShmbT10KSxsbT0wLFtdfSh0KSwwLFswXSx0KSl9ZnVuY3Rpb24gU20odCxlLG4scixpLGEsbyxzLGMpe2Zvcih2YXIgdT0wLGw9MCxoPW8sZj0wLGQ9MCxwPTAseT0xLGc9MSxtPTEsdj0wLGI9IiIsXz1pLHg9YSx3PXIsaz1iO2c7KXN3aXRjaChwPXYsdj15bSgpKXtjYXNlIDQwOmlmKDEwOCE9cCYmNTg9PWsuY2hhckNvZGVBdChoLTEpKXstMSE9Smcoays9S2coX20odiksIiYiLCImXGYiKSwiJlxmIikmJihtPS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTprKz1fbSh2KTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6ays9eG0ocCk7YnJlYWs7Y2FzZSA5MjprKz13bShtbSgpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goZ20oKSl7Y2FzZSA0MjpjYXNlIDQ3OmltKE1tKFRtKHltKCksbW0oKSksZSxuKSxjKTticmVhaztkZWZhdWx0OmsrPSIvIn1icmVhaztjYXNlIDEyMyp5OnNbdSsrXT1ubShrKSptO2Nhc2UgMTI1Knk6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKHYpe2Nhc2UgMDpjYXNlIDEyNTpnPTA7Y2FzZSA1OStsOmQ+MCYmbm0oayktaCYmaW0oZD4zMj9ObShrKyI7IixyLG4saC0xKTpObShLZyhrLCIgIiwiIikrIjsiLHIsbixoLTIpLGMpO2JyZWFrO2Nhc2UgNTk6ays9IjsiO2RlZmF1bHQ6aWYoaW0odz1BbShrLGUsbix1LGwsaSxzLGIsXz1bXSx4PVtdLGgpLGEpLDEyMz09PXYpaWYoMD09PWwpU20oayxlLHcsdyxfLGEsaCxzLHgpO2Vsc2Ugc3dpdGNoKGYpe2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1OlNtKHQsdyx3LHImJmltKEFtKHQsdyx3LDAsMCxpLHMsYixpLF89W10saCkseCksaSx4LGgscyxyP186eCk7YnJlYWs7ZGVmYXVsdDpTbShrLHcsdyx3LFsiIl0seCwwLHMseCl9fXU9bD1kPTAseT1tPTEsYj1rPSIiLGg9bzticmVhaztjYXNlIDU4Omg9MStubShrKSxkPXA7ZGVmYXVsdDppZih5PDEpaWYoMTIzPT12KS0teTtlbHNlIGlmKDEyNT09diYmMD09eSsrJiYxMjU9PXBtKCkpY29udGludWU7c3dpdGNoKGsrPVpnKHYpLHYqeSl7Y2FzZSAzODptPWw+MD8xOihrKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OnNbdSsrXT0obm0oayktMSkqbSxtPTE7YnJlYWs7Y2FzZSA2NDo0NT09PWdtKCkmJihrKz1fbSh5bSgpKSksZj1nbSgpLGw9aD1ubShiPWsrPUVtKG1tKCkpKSx2Kys7YnJlYWs7Y2FzZSA0NTo0NT09PXAmJjI9PW5tKGspJiYoeT0wKX19cmV0dXJuIGF9ZnVuY3Rpb24gQW0odCxlLG4scixpLGEsbyxzLGMsdSxsKXtmb3IodmFyIGg9aS0xLGY9MD09PWk/YTpbIiJdLGQ9cm0oZikscD0wLHk9MCxnPTA7cDxyOysrcClmb3IodmFyIG09MCx2PWVtKHQsaCsxLGg9WGcoeT1vW3BdKSksYj10O208ZDsrK20pKGI9UWcoeT4wP2ZbbV0rIiAiK3Y6S2codiwvJlxmL2csZlttXSkpKSYmKGNbZysrXT1iKTtyZXR1cm4gZG0odCxlLG4sMD09PWk/Vmc6cyxjLHUsbCl9ZnVuY3Rpb24gTW0odCxlLG4pe3JldHVybiBkbSh0LGUsbixXZyxaZyhobSksZW0odCwyLC0yKSwwKX1mdW5jdGlvbiBObSh0LGUsbixyKXtyZXR1cm4gZG0odCxlLG4sR2csZW0odCwwLHIpLGVtKHQscisxLC0xKSxyKX1jb25zdCBEbT0iOC4xMy45Ijt2YXIgT209big5NjA5KSxCbT1uKDc4NTYpLExtPW4ubihCbSksSW09ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKC9cXHVbXGRBLUZdezR9L2dpLChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnJlcGxhY2UoL1xcdS9nLCIiKSwxNikpfSkpO3JldHVybiBjb25zb2xlLmxvZyhlKSxlPShlPShlPWUucmVwbGFjZSgvXFx4KFswLTlhLWZdezJ9KS9naSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLDE2KSl9KSkpLnJlcGxhY2UoL1xcW1xkXGRcZF17M30vZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQucmVwbGFjZSgvXFwvZywiIiksOCkpfSkpKS5yZXBsYWNlKC9cXFtcZFxkXGRdezJ9L2dpLChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnJlcGxhY2UoL1xcL2csIiIpLDgpKX0pKX0sUm09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49MDtuPj0wOyl7aWYoISgobj10LmluZGV4T2YoIjxzY3JpcHQiKSk+PTApKXtlKz10LG49LTE7YnJlYWt9ZSs9dC5zdWJzdHIoMCxuKSwobj0odD10LnN1YnN0cihuKzEpKS5pbmRleE9mKCI8XC9zY3JpcHQ+IikpPj0wJiYobis9OSx0PXQuc3Vic3RyKG4pKX12YXIgcj1JbShlKTtyZXR1cm4ocj0ocj0ocj1yLnJlcGxhY2UoL3NjcmlwdD4vZ2ksIiMiKSkucmVwbGFjZSgvamF2YXNjcmlwdDovZ2ksIiMiKSkucmVwbGFjZSgvb25lcnJvcj0vZ2ksIm9uZXJyb3I6IikpLnJlcGxhY2UoLzxpZnJhbWUvZ2ksIiIpfSxGbT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0O3ZhciBuPUxtKCkuc2FuaXRpemUoZnVuY3Rpb24odCxlKXt2YXIgbj10LHI9ITA7aWYoIWUuZmxvd2NoYXJ0fHwhMSE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJiJmYWxzZSIhPT1lLmZsb3djaGFydC5odG1sTGFiZWxzfHwocj0hMSkscil7dmFyIGk9ZS5zZWN1cml0eUxldmVsOyJhbnRpc2NyaXB0Ij09PWl8fCJzdHJpY3QiPT09aT9uPVJtKG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1ZbShuKSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpLnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSxuPWptKG4pKX1yZXR1cm4gbn0odCxlKSk7cmV0dXJuIG59LFBtPS88YnJccypcLz8+L2dpLGptPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKX0sWW09ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShQbSwiI2JyIyIpfSx6bT1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fTtjb25zdCBVbT17Z2V0Um93czpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMTt2YXIgZT1ZbSh0KTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikpLnNwbGl0KCIjYnIjIil9LHNhbml0aXplVGV4dDpGbSxzYW5pdGl6ZVRleHRPckFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0ZtKHQsZSk6dC5mbGF0KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gRm0odCxlKX0pKX0saGFzQnJlYWtzOmZ1bmN0aW9uKHQpe3JldHVybiBQbS50ZXN0KHQpfSxzcGxpdEJyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdChQbSl9LGxpbmVCcmVha1JlZ2V4OlBtLHJlbW92ZVNjcmlwdDpSbSxnZXRVcmw6ZnVuY3Rpb24odCl7dmFyIGU9IiI7cmV0dXJuIHQmJihlPShlPShlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGV9LGV2YWx1YXRlOnptLHJlbW92ZUVzY2FwZXM6SW19O3ZhciBxbT1uKDg2MTMpLEhtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/KDAscW0uYWRqdXN0KSh0LHtzOi00MCxsOjEwfSk6KDAscW0uYWRqdXN0KSh0LHtzOi00MCxsOi0xMH0pfTtmdW5jdGlvbiAkbSh0KXtyZXR1cm4gJG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LCRtKHQpfWZ1bmN0aW9uIFdtKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIFZtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5kYXJrTW9kZT0hMSx0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNkZGQiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xMjB9KSx0aGlzLnRlcnRpYXJ5Q29sb3I9dGhpcy50ZXJ0aWFyeUNvbG9yfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8SG0odGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxIbSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fEhtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8SG0odGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fCgwLHFtLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHwoMCxxbS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fCgwLHFtLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT8oMCxxbS5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8ImdyZXkiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8KDAscW0uZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHwoMCxxbS5pbnZlcnQpKHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fCgwLHFtLmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXRoaXMuZmlsbFR5cGUzfHwoMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXRoaXMuZmlsbFR5cGU2fHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHwoMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHwoMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8KDAscW0uYWRqdXN0KSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPygwLHFtLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3J9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT0kbSh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0sbiYmV20oZS5wcm90b3R5cGUsbiksdH0oKTtmdW5jdGlvbiBHbSh0KXtyZXR1cm4gR209ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LEdtKHQpfWZ1bmN0aW9uIFhtKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIFptPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9KDAscW0ubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPUhtKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUhtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPSgwLHFtLmxpZ2h0ZW4pKCgwLHFtLmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPSgwLHFtLnJnYmEpKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9KDAscW0uZGFya2VuKSgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMudGFza0JvcmRlckNvbG9yPSgwLHFtLnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0oMCxxbS5yZ2JhKSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dmFyIGUsbjtyZXR1cm4gZT10LG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz0oMCxxbS5saWdodGVuKSh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSgwLHFtLmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPSgwLHFtLmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8IiMwYjAwMDAiLHRoaXMucGllMj10aGlzLnBpZTJ8fCIjNGQxMDM3Iix0aGlzLnBpZTM9dGhpcy5waWUzfHwiIzNmNTI1OCIsdGhpcy5waWU0PXRoaXMucGllNHx8IiM0ZjJmMWIiLHRoaXMucGllNT10aGlzLnBpZTV8fCIjNmUwYTBhIix0aGlzLnBpZTY9dGhpcy5waWU2fHwiIzNiMDA0OCIsdGhpcy5waWU3PXRoaXMucGllN3x8IiM5OTVhMDEiLHRoaXMucGllOD10aGlzLnBpZTh8fCIjMTU0NzA2Iix0aGlzLnBpZTk9dGhpcy5waWU5fHwiIzE2MTcyMiIsdGhpcy5waWUxMD10aGlzLnBpZTEwfHwiIzAwMjk2ZiIsdGhpcy5waWUxMT10aGlzLnBpZTExfHwiIzAxNjI5YyIsdGhpcy5waWUxMj10aGlzLnBpZTEyfHwiIzAxMDAyOSIsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/KDAscW0uZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PUdtKHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZYbShlLnByb3RvdHlwZSxuKSx0fSgpO2Z1bmN0aW9uIFFtKHQpe3JldHVybiBRbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sUW0odCl9ZnVuY3Rpb24gS20odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgSm09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPUhtKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUhtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSgwLHFtLnJnYmEpKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMuYWN0b3JCb3JkZXI9KDAscW0ubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fCgwLHFtLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fCgwLHFtLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi00MH0pLHRoaXMucGllOT10aGlzLnBpZTl8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MCxsOi00MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09UW0odCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dLG4mJkttKGUucHJvdG90eXBlLG4pLHR9KCk7ZnVuY3Rpb24gdHYodCl7cmV0dXJuIHR2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx0dih0KX1mdW5jdGlvbiBldih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBudj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj0oMCxxbS5saWdodGVuKSgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUhtKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9SG0odGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9SG0odGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSIjNDg3ZTNhIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFjdG9yQm9yZGVyPSgwLHFtLmRhcmtlbikodGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU1PXRoaXMucGllNXx8KDAscW0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fCgwLHFtLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fCgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTUwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHwoMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXR2KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZldihlLnByb3RvdHlwZSxuKSx0fSgpO2Z1bmN0aW9uIHJ2KHQpe3JldHVybiBydj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scnYodCl9ZnVuY3Rpb24gaXYodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgYXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9KDAscW0ubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9KDAscW0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9SG0odGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1IbSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj0oMCxxbS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9KDAscW0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPSgwLHFtLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9KDAscW0ubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9KDAscW0ubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0oMCxxbS5saWdodGVuKSh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9KDAscW0ubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9KDAscW0uZGFya2VuKSh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPSgwLHFtLmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj0oMCxxbS5kYXJrZW4pKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPSgwLHFtLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz0oMCxxbS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj0oMCxxbS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PSgwLHFtLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXJ2KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZpdihlLnByb3RvdHlwZSxuKSx0fSgpO2NvbnN0IG92PXtiYXNlOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgVm07cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgWm07cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgSm07cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxmb3Jlc3Q6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBudjtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhdjtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19fTtmdW5jdGlvbiBzdih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gY3YodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gY3YodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9jdih0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGN2KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdXYodCl7cmV0dXJuIHV2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx1dih0KX12YXIgbHY9e3RoZW1lOiJkZWZhdWx0Iix0aGVtZVZhcmlhYmxlczpvdi5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksdGhlbWVDU1M6dm9pZCAwLG1heFRleHRTaXplOjVlNCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZmxvd2NoYXJ0OntkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxzZXF1ZW5jZTp7YWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjAsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7dGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHVzZU1heFdpZHRoOiEwLHRvcEF4aXM6ITEsdXNlV2lkdGg6dm9pZCAwfSxqb3VybmV5OntkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnthcnJvd01hcmtlckFic29sdXRlOiExLHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciJ9LGdpdDp7YXJyb3dNYXJrZXJBYnNvbHV0ZTohMSx1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITB9LHN0YXRlOntkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsdXNlTWF4V2lkdGg6ITAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e2RpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMix1c2VNYXhXaWR0aDohMH0scGllOnt1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITB9LHJlcXVpcmVtZW50Ont1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH19O2x2LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9bHYuYXJyb3dNYXJrZXJBYnNvbHV0ZSxsdi5naXQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1sdi5hcnJvd01hcmtlckFic29sdXRlO3ZhciBodj1mdW5jdGlvbiB0KGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiIjtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKChmdW5jdGlvbihyLGkpe3JldHVybiBBcnJheS5pc0FycmF5KGVbaV0pP3I6Im9iamVjdCI9PT11dihlW2ldKSYmbnVsbCE9PWVbaV0/W10uY29uY2F0KHN2KHIpLFtuK2ldLHN2KHQoZVtpXSwiIikpKTpbXS5jb25jYXQoc3YociksW24raV0pfSksW10pfShsdiwiIik7Y29uc3QgZnY9bHY7dmFyIGR2PXZvaWQgMDtmdW5jdGlvbiBwdih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fWZ1bmN0aW9uIHl2KHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj12dih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gZ3YodCl7cmV0dXJuIGd2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxndih0KX1mdW5jdGlvbiBtdih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYnYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx2dih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB2dih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYnYodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9idih0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYnYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgX3YseHY9e2N1cnZlQmFzaXM6VnUsY3VydmVCYXNpc0Nsb3NlZDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd1KHQpfSxjdXJ2ZUJhc2lzT3BlbjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFh1KHQpfSxjdXJ2ZUxpbmVhcjpQdSxjdXJ2ZUxpbmVhckNsb3NlZDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFp1KHQpfSxjdXJ2ZU1vbm90b25lWDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVsKHQpfSxjdXJ2ZU1vbm90b25lWTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5sKHQpfSxjdXJ2ZU5hdHVyYWw6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpbCh0KX0sY3VydmVTdGVwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2wodCwuNSl9LGN1cnZlU3RlcEFmdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2wodCwxKX0sY3VydmVTdGVwQmVmb3JlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2wodCwwKX19LHd2PS9bJV17Mn1be11ccyooPzooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLGt2PS9ccyooPzooPzooXHcrKSg/PTopOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksVHY9L1xzKiUlLipcbi9nbSxFdj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt0cnl7dmFyIG49bmV3IFJlZ0V4cCgiWyVdezJ9KD8hW3tdIi5jb25jYXQoa3Yuc291cmNlLCIpKD89W31dWyVdezJ9KS4qXG4iKSwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UobiwiIikucmVwbGFjZSgvJy9nbSwnIicpLG8uZGVidWcoIkRldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSIuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpO2Zvcih2YXIgcixpPVtdO251bGwhPT0ocj13di5leGVjKHQpKTspaWYoci5pbmRleD09PXd2Lmxhc3RJbmRleCYmd3YubGFzdEluZGV4KyssciYmIWV8fGUmJnJbMV0mJnJbMV0ubWF0Y2goZSl8fGUmJnJbMl0mJnJbMl0ubWF0Y2goZSkpe3ZhciBhPXJbMV0/clsxXTpyWzJdLHM9clszXT9yWzNdLnRyaW0oKTpyWzRdP0pTT04ucGFyc2Uocls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIDA9PT1pLmxlbmd0aCYmaS5wdXNoKHt0eXBlOnQsYXJnczpudWxsfSksMT09PWkubGVuZ3RoP2lbMF06aX1jYXRjaChuKXtyZXR1cm4gby5lcnJvcigiRVJST1I6ICIuY29uY2F0KG4ubWVzc2FnZSwiIC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZVxuICAgICAgIikuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpLHt0eXBlOm51bGwsYXJnczpudWxsfX19LEN2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9dC5yZXBsYWNlKHd2LCIiKS5yZXBsYWNlKFR2LCJcbiIpKS5tYXRjaCgvXlxzKnNlcXVlbmNlRGlhZ3JhbS8pPyJzZXF1ZW5jZSI6dC5tYXRjaCgvXlxzKmdhbnR0Lyk/ImdhbnR0Ijp0Lm1hdGNoKC9eXHMqY2xhc3NEaWFncmFtLXYyLyk/ImNsYXNzRGlhZ3JhbSI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS8pP2UmJmUuY2xhc3MmJiJkYWdyZS13cmFwcGVyIj09PWUuY2xhc3MuZGVmYXVsdFJlbmRlcmVyPyJjbGFzc0RpYWdyYW0iOiJjbGFzcyI6dC5tYXRjaCgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8pPyJzdGF0ZURpYWdyYW0iOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLnN0YXRlLmRlZmF1bHRSZW5kZXJlcj8ic3RhdGVEaWFncmFtIjoic3RhdGUiOnQubWF0Y2goL15ccypnaXRHcmFwaC8pPyJnaXQiOnQubWF0Y2goL15ccypmbG93Y2hhcnQvKT8iZmxvd2NoYXJ0LXYyIjp0Lm1hdGNoKC9eXHMqaW5mby8pPyJpbmZvIjp0Lm1hdGNoKC9eXHMqcGllLyk/InBpZSI6dC5tYXRjaCgvXlxzKmVyRGlhZ3JhbS8pPyJlciI6dC5tYXRjaCgvXlxzKmpvdXJuZXkvKT8iam91cm5leSI6dC5tYXRjaCgvXlxzKnJlcXVpcmVtZW50Lyl8fHQubWF0Y2goL15ccypyZXF1aXJlbWVudERpYWdyYW0vKT8icmVxdWlyZW1lbnQiOmUmJmUuZmxvd2NoYXJ0JiYiZGFncmUtd3JhcHBlciI9PT1lLmZsb3djaGFydC5kZWZhdWx0UmVuZGVyZXI/ImZsb3djaGFydC12MiI6ImZsb3djaGFydCJ9LFN2PWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07dmFyIG89ZT9lLmFwcGx5KGR2LGkpOmlbMF07aWYobyBpbiBuKXJldHVybiBuW29dO3ZhciBzPXQuYXBwbHkodm9pZCAwLGkpO3JldHVybiBuW29dPXMsc319LEF2PWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGU7dmFyIG49ImN1cnZlIi5jb25jYXQodC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpKTtyZXR1cm4geHZbbl18fGV9LE12PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSk6MH0sTnY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IiIscj0wO3I8dC5sZW5ndGg7cisrKXZvaWQgMCE9PXRbcl0mJih0W3JdLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHx0W3JdLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/bj1uK3Rbcl0rIjsiOmU9ZSt0W3JdKyI7Iik7cmV0dXJue3N0eWxlOmUsbGFiZWxTdHlsZTpufX0sRHY9MCxPdj1mdW5jdGlvbigpe3JldHVybiBEdisrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrRHZ9LEJ2PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uLmxlbmd0aCxpPTA7aTx0O2krKyllKz1uLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqcikpO3JldHVybiBlfSh0Lmxlbmd0aCl9LEx2PWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpPU9iamVjdC5hc3NpZ24oe2RlcHRoOjIsY2xvYmJlcjohMX0sciksYT1pLmRlcHRoLG89aS5jbG9iYmVyO3JldHVybiBBcnJheS5pc0FycmF5KG4pJiYhQXJyYXkuaXNBcnJheShlKT8obi5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4scil9KSksZSk6QXJyYXkuaXNBcnJheShuKSYmQXJyYXkuaXNBcnJheShlKT8obi5mb3JFYWNoKChmdW5jdGlvbih0KXstMT09PWUuaW5kZXhPZih0KSYmZS5wdXNoKHQpfSkpLGUpOnZvaWQgMD09PWV8fGE8PTA/bnVsbCE9ZSYmIm9iamVjdCI9PT1ndihlKSYmIm9iamVjdCI9PT1ndihuKT9PYmplY3QuYXNzaWduKGUsbik6bjoodm9pZCAwIT09biYmIm9iamVjdCI9PT1ndihlKSYmIm9iamVjdCI9PT1ndihuKSYmT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24ocil7Im9iamVjdCIhPT1ndihuW3JdKXx8dm9pZCAwIT09ZVtyXSYmIm9iamVjdCIhPT1ndihlW3JdKT8ob3x8Im9iamVjdCIhPT1ndihlW3JdKSYmIm9iamVjdCIhPT1ndihuW3JdKSkmJihlW3JdPW5bcl0pOih2b2lkIDA9PT1lW3JdJiYoZVtyXT1BcnJheS5pc0FycmF5KG5bcl0pP1tdOnt9KSxlW3JdPXQoZVtyXSxuW3JdLHtkZXB0aDphLTEsY2xvYmJlcjpvfSkpfSkpLGUpfSxJdj1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKFVtLmxpbmVCcmVha1JlZ2V4LCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxyLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxyLnN0eWxlKCJmb250LXNpemUiLGUuZm9udFNpemUpLHIuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHIuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZyLmF0dHIoImNsYXNzIixlLmNsYXNzKTt2YXIgaT1yLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrMiplLnRleHRNYXJnaW4pLGkuYXR0cigiZmlsbCIsZS5maWxsKSxpLnRleHQobikscn0sUnY9U3YoKGZ1bmN0aW9uKHQsZSxuKXtpZighdClyZXR1cm4gdDtpZihuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxuKSxVbS5saW5lQnJlYWtSZWdleC50ZXN0KHQpKXJldHVybiB0O3ZhciByPXQuc3BsaXQoIiAiKSxpPVtdLGE9IiI7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgcz1QdigiIi5jb25jYXQodCwiICIpLG4pLGM9UHYoYSxuKTtpZihzPmUpe3ZhciB1PUZ2KHQsZSwiLSIsbiksbD11Lmh5cGhlbmF0ZWRTdHJpbmdzLGg9dS5yZW1haW5pbmdXb3JkO2kucHVzaC5hcHBseShpLFthXS5jb25jYXQobXYobCkpKSxhPWh9ZWxzZSBjK3M+PWU/KGkucHVzaChhKSxhPXQpOmE9W2EsdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtvKzE9PT1yLmxlbmd0aCYmaS5wdXNoKGEpfSkpLGkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4iIiE9PXR9KSkuam9pbihuLmpvaW5XaXRoKX0pLChmdW5jdGlvbih0LGUsbil7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZSwiLSIpLmNvbmNhdChuLmZvbnRTaXplLCItIikuY29uY2F0KG4uZm9udFdlaWdodCwiLSIpLmNvbmNhdChuLmZvbnRGYW1pbHksIi0iKS5jb25jYXQobi5qb2luV2l0aCl9KSksRnY9U3YoKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3I9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjowfSxyKTt2YXIgaT10LnNwbGl0KCIiKSxhPVtdLG89IiI7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxzKXt2YXIgYz0iIi5jb25jYXQobykuY29uY2F0KHQpO2lmKFB2KGMscik+PWUpe3ZhciB1PXMrMSxsPWkubGVuZ3RoPT09dSxoPSIiLmNvbmNhdChjKS5jb25jYXQobik7YS5wdXNoKGw/YzpoKSxvPSIifWVsc2Ugbz1jfSkpLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6b319KSwoZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Ii0iLHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZSwiLSIpLmNvbmNhdChuLCItIikuY29uY2F0KHIuZm9udFNpemUsIi0iKS5jb25jYXQoci5mb250V2VpZ2h0LCItIikuY29uY2F0KHIuZm9udEZhbWlseSl9KSksUHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCJ9LGUpLGp2KHQsZSkud2lkdGh9LGp2PVN2KChmdW5jdGlvbih0LGUpe3ZhciBuPWU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSxyPW4uZm9udFNpemUsaT1uLmZvbnRGYW1pbHksYT1uLmZvbnRXZWlnaHQ7aWYoIXQpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O3ZhciBvPVsic2Fucy1zZXJpZiIsaV0scz10LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxjPVtdLHU9YXUoImJvZHkiKTtpZighdS5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IodmFyIGw9dS5hcHBlbmQoInN2ZyIpLGg9MCxmPW87aDxmLmxlbmd0aDtoKyspe3ZhciBkLHA9ZltoXSx5PTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LG09eXYocyk7dHJ5e2ZvcihtLnMoKTshKGQ9bS5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlLGI9e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07Yi50ZXh0PXY7dmFyIF89SXYobCxiKS5zdHlsZSgiZm9udC1zaXplIixyKS5zdHlsZSgiZm9udC13ZWlnaHQiLGEpLnN0eWxlKCJmb250LWZhbWlseSIscCkseD0oXy5fZ3JvdXBzfHxfKVswXVswXS5nZXRCQm94KCk7Zy53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KGcud2lkdGgseC53aWR0aCkpLHk9TWF0aC5yb3VuZCh4LmhlaWdodCksZy5oZWlnaHQrPXksZy5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoZy5saW5lSGVpZ2h0LHkpKX19Y2F0Y2godCl7bS5lKHQpfWZpbmFsbHl7bS5mKCl9Yy5wdXNoKGcpfXJldHVybiBsLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSxZdj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1hcDtyZXR1cm4gci5zZXQoImhlaWdodCIsdCksbj8oci5zZXQoIndpZHRoIiwiMTAwJSIpLHIuc2V0KCJzdHlsZSIsIm1heC13aWR0aDogIi5jb25jYXQoZSwicHg7IikpKTpyLnNldCgid2lkdGgiLGUpLHJ9LHp2PWZ1bmN0aW9uKHQsZSxuLHIpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHI9eXYoZSk7dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO3QuYXR0cihpWzBdLGlbMV0pfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19KHQsWXYoZSxuLHIpKX0sVXY9ZnVuY3Rpb24gdChlKXtvLmRlYnVnKCJkaXJlY3RpdmVTYW5pdGl6ZXIgY2FsbGVkIHdpdGgiLGUpLCJvYmplY3QiPT09Z3YoZSkmJihlLmxlbmd0aD9lLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe28uZGVidWcoIkNoZWNraW5nIGtleSIsbiksMD09PW4uaW5kZXhPZigiX18iKSYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIF9fIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigicHJvdG8iKT49MCYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIHByb3RvIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigiY29uc3RyIik+PTAmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBjb25zdHIgb3B0aW9uIixuKSxkZWxldGUgZVtuXSksbi5pbmRleE9mKCJ0aGVtZUNTUyIpPj0wJiYoby5kZWJ1Zygic2FuaXRpemluZyB0aGVtZUNzcyBvcHRpb24iKSxlW25dPXF2KGVbbl0pKSxodi5pbmRleE9mKG4pPDA/KG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pOiJvYmplY3QiPT09Z3YoZVtuXSkmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBvYmplY3QiLG4pLHQoZVtuXSkpfSkpKX0scXY9ZnVuY3Rpb24odCl7cmV0dXJuKHQubWF0Y2goL1x7L2cpfHxbXSkubGVuZ3RoIT09KHQubWF0Y2goL1x9L2cpfHxbXSkubGVuZ3RoPyJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9Ijp0fTtjb25zdCBIdj17YXNzaWduV2l0aERlcHRoOkx2LHdyYXBMYWJlbDpSdixjYWxjdWxhdGVUZXh0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjoxNX0sZSksanYodCxlKS5oZWlnaHR9LGNhbGN1bGF0ZVRleHRXaWR0aDpQdixjYWxjdWxhdGVUZXh0RGltZW5zaW9uczpqdixjYWxjdWxhdGVTdmdTaXplQXR0cnM6WXYsY29uZmlndXJlU3ZnU2l6ZTp6dixkZXRlY3RJbml0OmZ1bmN0aW9uKHQsZSl7dmFyIG49RXYodCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLykscj17fTtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXJnc30pKTtVdihpKSxyPUx2KHIsbXYoaSkpfWVsc2Ugcj1uLmFyZ3M7aWYocil7dmFyIGE9Q3YodCxlKTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXJbdF0mJigiZmxvd2NoYXJ0LXYyIj09PWEmJihhPSJmbG93Y2hhcnQiKSxyW2FdPXJbdF0sZGVsZXRlIHJbdF0pfSkpfXJldHVybiByfSxkZXRlY3REaXJlY3RpdmU6RXYsZGV0ZWN0VHlwZTpDdixpc1N1YnN0cmluZ0luQXJyYXk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLm1hdGNoKHQpKXJldHVybiBuO3JldHVybi0xfSxpbnRlcnBvbGF0ZVRvQ3VydmU6QXYsY2FsY0xhYmVsUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPU12KHQsZSksZT10fSkpO3ZhciByPW4vMixpPXZvaWQgMDtyZXR1cm4gZT12b2lkIDAsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihlJiYhaSl7dmFyIG49TXYodCxlKTtpZihuPHIpci09bjtlbHNle3ZhciBhPXIvbjthPD0wJiYoaT1lKSxhPj0xJiYoaT17eDp0LngseTp0Lnl9KSxhPjAmJmE8MSYmKGk9e3g6KDEtYSkqZS54K2EqdC54LHk6KDEtYSkqZS55K2EqdC55fSl9fWU9dH0pKSxpfSh0KX0sY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByO28uaW5mbygib3VyIHBvaW50cyIsZSksZVswXSE9PW4mJihlPWUucmV2ZXJzZSgpKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe012KHQscikscj10fSkpO3ZhciBpLGE9MjU7cj12b2lkIDAsZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhaSl7dmFyIGU9TXYodCxyKTtpZihlPGEpYS09ZTtlbHNle3ZhciBuPWEvZTtuPD0wJiYoaT1yKSxuPj0xJiYoaT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGk9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgcz10PzEwOjUsYz1NYXRoLmF0YW4yKGVbMF0ueS1pLnksZVswXS54LWkueCksdT17eDowLHk6MH07cmV0dXJuIHUueD1NYXRoLnNpbihjKSpzKyhlWzBdLngraS54KS8yLHUueT0tTWF0aC5jb3MoYykqcysoZVswXS55K2kueSkvMix1fSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobikpO28uaW5mbygib3VyIHBvaW50cyIsaSksInN0YXJ0X2xlZnQiIT09ZSYmInN0YXJ0X3JpZ2h0IiE9PWUmJihpPWkucmV2ZXJzZSgpKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe012KHQscikscj10fSkpO3ZhciBhLHM9MjUrdDtyPXZvaWQgMCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHImJiFhKXt2YXIgZT1Ndih0LHIpO2lmKGU8cylzLT1lO2Vsc2V7dmFyIG49cy9lO248PTAmJihhPXIpLG4+PTEmJihhPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoYT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBjPTEwKy41KnQsdT1NYXRoLmF0YW4yKGlbMF0ueS1hLnksaVswXS54LWEueCksbD17eDowLHk6MH07cmV0dXJuIGwueD1NYXRoLnNpbih1KSpjKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModSkqYysoaVswXS55K2EueSkvMiwic3RhcnRfbGVmdCI9PT1lJiYobC54PU1hdGguc2luKHUrTWF0aC5QSSkqYysoaVswXS54K2EueCkvMixsLnk9LU1hdGguY29zKHUrTWF0aC5QSSkqYysoaVswXS55K2EueSkvMiksImVuZF9yaWdodCI9PT1lJiYobC54PU1hdGguc2luKHUtTWF0aC5QSSkqYysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModS1NYXRoLlBJKSpjKyhpWzBdLnkrYS55KS8yLTUpLCJlbmRfbGVmdCI9PT1lJiYobC54PU1hdGguc2luKHUpKmMrKGlbMF0ueCthLngpLzItNSxsLnk9LU1hdGguY29zKHUpKmMrKGlbMF0ueSthLnkpLzItNSksbH0sZm9ybWF0VXJsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC50cmltKCk7aWYobilyZXR1cm4ibG9vc2UiIT09ZS5zZWN1cml0eUxldmVsPygwLE9tLnNhbml0aXplVXJsKShuKTpufSxnZXRTdHlsZXNGcm9tQXJyYXk6TnYsZ2VuZXJhdGVJZDpPdixyYW5kb206QnYsbWVtb2l6ZTpTdixydW5GdW5jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXQuc3BsaXQoIi4iKSxyPW4ubGVuZ3RoLTEsaT1uW3JdLGE9d2luZG93LG89MDtvPHI7bysrKWlmKCEoYT1hW25bb11dKSlyZXR1cm47Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkocz4xP3MtMTowKSx1PTE7dTxzO3UrKyljW3UtMV09YXJndW1lbnRzW3VdOyhlPWEpW2ldLmFwcGx5KGUsYyl9LGVudGl0eURlY29kZTpmdW5jdGlvbih0KXtyZXR1cm4gX3Y9X3Z8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLF92LmlubmVySFRNTD10LHVuZXNjYXBlKF92LnRleHRDb250ZW50KX0saW5pdElkR2VuZXJhdGlvcjpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmRldGVybWluaXN0aWM9ZSx0aGlzLnNlZWQ9bix0aGlzLmNvdW50PW4/bi5sZW5ndGg6MH12YXIgZSxuO3JldHVybiBlPXQsKG49W3trZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGV0ZXJtaW5pc3RpYz90aGlzLmNvdW50Kys6RGF0ZS5ub3coKX19XSkmJnB2KGUucHJvdG90eXBlLG4pLHR9KCksZGlyZWN0aXZlU2FuaXRpemVyOlV2LHNhbml0aXplQ3NzOnF2fTtmdW5jdGlvbiAkdih0KXtyZXR1cm4gJHY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LCR2KHQpfXZhciBXdixWdj1PYmplY3QuZnJlZXplKGZ2KSxHdj1Mdih7fSxWdiksWHY9W10sWnY9THYoe30sVnYpLFF2PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPUx2KHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO3RiKGEpLHI9THYocixhKX1pZihuPUx2KG4sciksci50aGVtZSl7dmFyIG89THYoe30sV3YpLHM9THYoby50aGVtZVZhcmlhYmxlc3x8e30sci50aGVtZVZhcmlhYmxlcyk7bi50aGVtZVZhcmlhYmxlcz1vdltuLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhzKX1yZXR1cm4gWnY9bixufSxLdj1mdW5jdGlvbigpe3JldHVybiBMdih7fSxHdil9LEp2PWZ1bmN0aW9uKCl7cmV0dXJuIEx2KHt9LFp2KX0sdGI9ZnVuY3Rpb24gdChlKXtPYmplY3Qua2V5cyhHdi5zZWN1cmUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWVbR3Yuc2VjdXJlW3RdXSYmKG8uZGVidWcoIkRlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgIi5jb25jYXQoR3Yuc2VjdXJlW3RdKSxlW0d2LnNlY3VyZVt0XV0pLGRlbGV0ZSBlW0d2LnNlY3VyZVt0XV0pfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoIl9fIikmJmRlbGV0ZSBlW3RdfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4peyJzdHJpbmciPT10eXBlb2YgZVtuXSYmKGVbbl0uaW5kZXhPZigiPCIpPi0xfHxlW25dLmluZGV4T2YoIj4iKT4tMXx8ZVtuXS5pbmRleE9mKCJ1cmwoZGF0YToiKT4tMSkmJmRlbGV0ZSBlW25dLCJvYmplY3QiPT09JHYoZVtuXSkmJnQoZVtuXSl9KSl9LGViPWZ1bmN0aW9uKHQpe3QuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLFh2LnB1c2godCksUXYoR3YsWHYpfSxuYj1mdW5jdGlvbigpe1F2KEd2LFh2PVtdKX07ZnVuY3Rpb24gcmIodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgaWI9ImNsYXNzaWQtIixhYj1bXSxvYj17fSxzYj0wLGNiPVtdLHViPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dDtpZih0LmluZGV4T2YoIn4iKT4wKXt2YXIgcj10LnNwbGl0KCJ+Iik7bj1yWzBdLGU9VW0uc2FuaXRpemVUZXh0KHJbMV0sSnYoKSl9cmV0dXJue2NsYXNzTmFtZTpuLHR5cGU6ZX19LGxiPWZ1bmN0aW9uKHQpe3ZhciBlPXViKHQpO3ZvaWQgMD09PW9iW2UuY2xhc3NOYW1lXSYmKG9iW2UuY2xhc3NOYW1lXT17aWQ6ZS5jbGFzc05hbWUsdHlwZTplLnR5cGUsY3NzQ2xhc3NlczpbXSxtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sZG9tSWQ6aWIrZS5jbGFzc05hbWUrIi0iK3NifSxzYisrKX0saGI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKG9iKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYob2JbZVtuXV0uaWQ9PT10KXJldHVybiBvYltlW25dXS5kb21JZH0sZmI9ZnVuY3Rpb24odCxlKXt2YXIgbj11Yih0KS5jbGFzc05hbWUscj1vYltuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LGRiPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49aWIrbiksdm9pZCAwIT09b2Jbbl0mJm9iW25dLmNzc0NsYXNzZXMucHVzaChlKX0pKX0scGI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUp2KCksaT10LGE9aGIoaSk7aWYoImxvb3NlIj09PXIuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSYmdm9pZCAwIT09b2JbaV0pe3ZhciBvPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bz1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKXt2YXIgYz1vW3NdLnRyaW0oKTsnIic9PT1jLmNoYXJBdCgwKSYmJyInPT09Yy5jaGFyQXQoYy5sZW5ndGgtMSkmJihjPWMuc3Vic3RyKDEsYy5sZW5ndGgtMikpLG9bc109Y319MD09PW8ubGVuZ3RoJiZvLnB1c2goYSksY2IucHVzaCgoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KGEsJyJdJykpO251bGwhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXt2YXIgdDtIdi5ydW5GdW5jLmFwcGx5KEh2LFtlXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gcmIodCl9KHQ9byl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiByYih0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP3JiKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpKX0pLCExKX0pKX19LHliPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxnYj1mdW5jdGlvbih0KXt2YXIgZT1hdSgiLm1lcm1haWRUb29sdGlwIik7bnVsbD09PShlLl9ncm91cHN8fGUpWzBdWzBdJiYoZT1hdSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksYXUodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PWF1KHRoaXMpO2lmKG51bGwhPT10LmF0dHIoInRpdGxlIikpe3ZhciBuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS5odG1sKHQuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK24ubGVmdCsobi5yaWdodC1uLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrbi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLGF1KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O2NiLnB1c2goZ2IpO3ZhciBtYj0iVEIiO2NvbnN0IHZiPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBKdigpLmNsYXNzfSxhZGRDbGFzczpsYixiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe2NiLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGNsZWFyOmZ1bmN0aW9uKCl7YWI9W10sb2I9e30sKGNiPVtdKS5wdXNoKGdiKX0sZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIG9iW3RdfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIG9ifSxhZGRBbm5vdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dWIodCkuY2xhc3NOYW1lO29iW25dLmFubm90YXRpb25zLnB1c2goZSl9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiBhYn0sYWRkUmVsYXRpb246ZnVuY3Rpb24odCl7by5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxsYih0LmlkMSksbGIodC5pZDIpLHQuaWQxPXViKHQuaWQxKS5jbGFzc05hbWUsdC5pZDI9dWIodC5pZDIpLmNsYXNzTmFtZSx0LnJlbGF0aW9uVGl0bGUxPVVtLnNhbml0aXplVGV4dCh0LnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxKdigpKSx0LnJlbGF0aW9uVGl0bGUyPVVtLnNhbml0aXplVGV4dCh0LnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxKdigpKSxhYi5wdXNoKHQpfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbWJ9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXttYj10fSxhZGRNZW1iZXI6ZmIsYWRkTWVtYmVyczpmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBmYih0LGUpfSkpKX0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/VW0uc2FuaXRpemVUZXh0KHQuc3Vic3RyKDEpLnRyaW0oKSxKdigpKTp0LnRyaW0oKX0sbGluZVR5cGU6e0xJTkU6MCxET1RURURfTElORToxfSxyZWxhdGlvblR5cGU6eWIsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3BiKHQsZSxuKSxvYlt0XS5oYXZlQ2FsbGJhY2s9ITB9KSksZGIodCwiY2xpY2thYmxlIil9LHNldENzc0NsYXNzOmRiLHNldExpbms6ZnVuY3Rpb24odCxlLG4pe3ZhciByPUp2KCk7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQ7dFswXS5tYXRjaCgvXGQvKSYmKGk9aWIraSksdm9pZCAwIT09b2JbaV0mJihvYltpXS5saW5rPUh2LmZvcm1hdFVybChlLHIpLG9iW2ldLmxpbmtUYXJnZXQ9InN0cmluZyI9PXR5cGVvZiBuP246Il9ibGFuayIpfSkpLGRiKHQsImNsaWNrYWJsZSIpfSxzZXRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7dmFyIG49SnYoKTt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKG9iW3RdLnRvb2x0aXA9VW0uc2FuaXRpemVUZXh0KGUsbikpfSkpfSxsb29rVXBEb21JZDpoYn07dmFyIGJiPW4oNjgxKSxfYj1uLm4oYmIpLHhiPW4oODI4Miksd2I9bi5uKHhiKSxrYj1uKDEzNjIpLFRiPW4ubihrYiksRWI9MCxDYj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9eKFwrfC18fnwjKT8oXHcrKSh+XHcrfnxcW1xdKT9ccysoXHcrKSAqKFwqfFwkKT8kLyksbj10Lm1hdGNoKC9eKFsrfFwtfH58I10pPyhcdyspICpcKCAqKC4qKVwpICooXCp8XCQpPyAqKFx3Klt+fFtcXV0qXHMqXHcqfj8pJC8pO3JldHVybiBlJiYhbj9TYihlKTpuP0FiKG4pOk1iKHQpfSxTYj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/RGIodFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIixzPXRbNV0/dFs1XS50cmltKCk6IiI7bj1yK2krYSsiICIrbyxlPU9iKHMpfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0sQWI9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIjt0cnl7dmFyIHI9dFsxXT90WzFdLnRyaW0oKToiIixpPXRbMl0/dFsyXS50cmltKCk6IiIsYT10WzNdP0RiKHRbM10udHJpbSgpKToiIixvPXRbNF0/dFs0XS50cmltKCk6IiI7bj1yK2krIigiK2ErIikiKyh0WzVdPyIgOiAiK0RiKHRbNV0pLnRyaW0oKToiIiksZT1PYihvKX1jYXRjaChlKXtuPXR9cmV0dXJue2Rpc3BsYXlUZXh0Om4sY3NzU3R5bGU6ZX19LE1iPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiIscj0iIixpPXQuaW5kZXhPZigiKCIpLGE9dC5pbmRleE9mKCIpIik7aWYoaT4xJiZhPmkmJmE8PXQubGVuZ3RoKXt2YXIgbz0iIixzPSIiLGM9dC5zdWJzdHJpbmcoMCwxKTtjLm1hdGNoKC9cdy8pP3M9dC5zdWJzdHJpbmcoMCxpKS50cmltKCk6KGMubWF0Y2goL1wrfC18fnwjLykmJihvPWMpLHM9dC5zdWJzdHJpbmcoMSxpKS50cmltKCkpO3ZhciB1PXQuc3Vic3RyaW5nKGkrMSxhKSxsPXQuc3Vic3RyaW5nKGErMSwxKTtuPU9iKGwpLGU9bytzKyIoIitEYih1LnRyaW0oKSkrIikiLGE8IiIubGVuZ3RoJiYiIiE9PShyPXQuc3Vic3RyaW5nKGErMikudHJpbSgpKSYmKHI9IiA6ICIrRGIocikpfWVsc2UgZT1EYih0KTtyZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZTpufX0sTmI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9Q2IoZSksYT10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixyLnBhZGRpbmcpLnRleHQoaS5kaXNwbGF5VGV4dCk7IiIhPT1pLmNzc1N0eWxlJiZhLmF0dHIoInN0eWxlIixpLmNzc1N0eWxlKSxufHxhLmF0dHIoImR5IixyLnRleHRIZWlnaHQpfSxEYj1mdW5jdGlvbiB0KGUpe3ZhciBuPWU7cmV0dXJuLTEhPWUuaW5kZXhPZigifiIpP3Qobj0obj1uLnJlcGxhY2UoIn4iLCI8IikpLnJlcGxhY2UoIn4iLCI+IikpOm59LE9iPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX07Y29uc3QgQmI9ZnVuY3Rpb24odCxlLG4pe28uaW5mbygiUmVuZGVyaW5nIGNsYXNzICIrZSk7dmFyIHIsaT1lLmlkLGE9e2lkOmksbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxzPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGhiKGkpKS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtyPWUubGluaz9zLmFwcGVuZCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTpzLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLG4udGV4dEhlaWdodCtuLnBhZGRpbmcpLmF0dHIoIngiLDApO3ZhciBjPSEwO2UuYW5ub3RhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3QrIsK7Iik7Y3x8ZS5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KSxjPSExfSkpO3ZhciB1PWUuaWQ7dm9pZCAwIT09ZS50eXBlJiYiIiE9PWUudHlwZSYmKHUrPSI8IitlLnR5cGUrIj4iKTt2YXIgbD1yLmFwcGVuZCgidHNwYW4iKS50ZXh0KHUpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtjfHxsLmF0dHIoImR5IixuLnRleHRIZWlnaHQpO3ZhciBoPXIubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZj1zLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4vMiksZD1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsaCtuLmRpdmlkZXJNYXJnaW4rbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO2M9ITAsZS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe05iKGQsdCxjLG4pLGM9ITF9KSk7dmFyIHA9ZC5ub2RlKCkuZ2V0QkJveCgpLHk9cy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCkuYXR0cigieTIiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCksZz1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsaCsyKm4uZGl2aWRlck1hcmdpbitwLmhlaWdodCtuLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Yz0hMCxlLm1ldGhvZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7TmIoZyx0LGMsbiksYz0hMX0pKTt2YXIgbT1zLm5vZGUoKS5nZXRCQm94KCksdj0iICI7ZS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYodis9ZS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7dmFyIGI9cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsyKm4ucGFkZGluZykuYXR0cigiaGVpZ2h0IixtLmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsdikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gci5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgieCIsKGItdC5nZXRCQm94KCkud2lkdGgpLzIpfSkpLGUudG9vbHRpcCYmci5pbnNlcnQoInRpdGxlIikudGV4dChlLnRvb2x0aXApLGYuYXR0cigieDIiLGIpLHkuYXR0cigieDIiLGIpLGEud2lkdGg9YixhLmhlaWdodD1tLmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luLGF9O2tiLnBhcnNlci55eT12Yjt2YXIgTGI9e30sSWI9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LFJiPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5lbnRyaWVzKExiKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS5sYWJlbD09PXR9KSk7aWYoZSlyZXR1cm4gZVswXX07Y29uc3QgRmI9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SWJbZV09dFtlXX0pKX0sUGI9ZnVuY3Rpb24odCxlKXtMYj17fSxrYi5wYXJzZXIueXkuY2xlYXIoKSxrYi5wYXJzZXIucGFyc2UodCksby5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuLHI9YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSwobj1yKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpO3ZhciBpPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMH0pO2kuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLGkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtmb3IodmFyIGE9dmIuZ2V0Q2xhc3NlcygpLHM9T2JqZWN0LmtleXMoYSksYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgdT1hW3NbY11dLGw9QmIocix1LEliKTtMYltsLmlkXT1sLGkuc2V0Tm9kZShsLmlkLGwpLG8uaW5mbygiT3JnIGhlaWdodDogIitsLmhlaWdodCl9dmIuZ2V0UmVsYXRpb25zKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJ0am9obyIrUmIodC5pZDEpK1JiKHQuaWQyKStKU09OLnN0cmluZ2lmeSh0KSksaS5zZXRFZGdlKFJiKHQuaWQxKSxSYih0LmlkMikse3JlbGF0aW9uOnR9LHQudGl0bGV8fCJERUZBVUxUIil9KSksX2IoKS5sYXlvdXQoaSksaS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkubm9kZSh0KSYmKG8uZGVidWcoIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5ub2RlKHQpKSksYXUoIiMiK2hiKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKG8uZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIHliLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB5Yi5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSB5Yi5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgeWIuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTt2YXIgYSxzLGM9ZS5wb2ludHMsdT16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShWdSksbD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHUoYykpLmF0dHIoImlkIiwiZWRnZSIrRWIpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKSxoPSIiO3IuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKGg9KGg9KGg9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksMT09bi5yZWxhdGlvbi5saW5lVHlwZSYmbC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMSYmbC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitoKyIjIitpKG4ucmVsYXRpb24udHlwZTEpKyJTdGFydCkiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyJiZsLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitoKyIjIitpKG4ucmVsYXRpb24udHlwZTIpKyJFbmQpIik7dmFyIGYsZCxwLHksZz1lLnBvaW50cy5sZW5ndGgsbT1Idi5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyk7aWYoYT1tLngscz1tLnksZyUyIT0wJiZnPjEpe3ZhciB2PUh2LmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLGI9SHYuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMixlLnBvaW50cyxlLnBvaW50c1tnLTFdKTtvLmRlYnVnKCJjYXJkaW5hbGl0eV8xX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkodikpLG8uZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShiKSksZj12LngsZD12LnkscD1iLngseT1iLnl9aWYodm9pZCAwIT09bi50aXRsZSl7dmFyIF89dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsYXNzTGFiZWwiKSx4PV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLGEpLmF0dHIoInkiLHMpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQobi50aXRsZSk7d2luZG93LmxhYmVsPXg7dmFyIHc9eC5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4Iix3Lngtci5wYWRkaW5nLzIpLmF0dHIoInkiLHcueS1yLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLHcud2lkdGgrci5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcuaGVpZ2h0K3IucGFkZGluZyl9by5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShuKSksdm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMSYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMSYmdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLGYpLmF0dHIoInkiLGQpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KG4ucmVsYXRpb25UaXRsZTEpLHZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTImJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTImJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUyKSxFYisrfShyLGkuZWRnZSh0KSxpLmVkZ2UodCkucmVsYXRpb24sSWIpKX0pKTt2YXIgaD1yLm5vZGUoKS5nZXRCQm94KCksZj1oLndpZHRoKzQwLGQ9aC5oZWlnaHQrNDA7enYocixkLGYsSWIudXNlTWF4V2lkdGgpO3ZhciBwPSIiLmNvbmNhdChoLngtMjAsIiAiKS5jb25jYXQoaC55LTIwLCIgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoZCk7by5kZWJ1Zygidmlld0JveCAiLmNvbmNhdChwKSksci5hdHRyKCJ2aWV3Qm94IixwKX07dmFyIGpiPXtleHRlbnNpb246ZnVuY3Rpb24odCxlLG4pe28udHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLG4pLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sYWdncmVnYXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNyb3NzOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fTtjb25zdCBZYj1mdW5jdGlvbih0LGUsbixyKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2piW2VdKHQsbixyKX0pKX07ZnVuY3Rpb24gemIodCl7cmV0dXJuIHpiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx6Yih0KX1jb25zdCBVYj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLHMsYyx1LGwsaD10fHwiIjtpZigib2JqZWN0Ij09PXpiKGgpJiYoaD1oWzBdKSx6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaD1oLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxvLmluZm8oInZlcnRleFRleHQiK2gpLGk9e2lzTm9kZTpyLGxhYmVsOmgucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksbGFiZWxTdHlsZTplLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9LHM9YXUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksYz1zLmFwcGVuZCgieGh0bWw6ZGl2IiksdT1pLmxhYmVsLGw9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsYy5odG1sKCc8c3BhbiBjbGFzcz0iJytsKyciICcrKGkubGFiZWxTdHlsZT8nc3R5bGU9IicraS5sYWJlbFN0eWxlKyciJzoiIikrIj4iK3UrIjwvc3Bhbj4iKSwoYT1pLmxhYmVsU3R5bGUpJiZjLmF0dHIoInN0eWxlIixhKSxjLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksYy5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxjLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHMubm9kZSgpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7Zi5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBkPVtdO2Q9InN0cmluZyI9PXR5cGVvZiBoP2guc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGgpP2g6W107Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikseS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikseS5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj95LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp5LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx5LnRleHRDb250ZW50PWRbcF0udHJpbSgpLGYuYXBwZW5kQ2hpbGQoeSl9cmV0dXJuIGZ9O3ZhciBxYj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaTtpPW58fCJub2RlIGRlZmF1bHQiO3ZhciBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxvPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLHM9InN0cmluZyI9PXR5cGVvZiBlLmxhYmVsVGV4dD9lLmxhYmVsVGV4dDplLmxhYmVsVGV4dFswXSxjPW8ubm9kZSgpLmFwcGVuZENoaWxkKFViKEZtKHJDKHMpLEp2KCkpLGUubGFiZWxTdHlsZSwhMSxyKSksdT1jLmdldEJCb3goKTtpZih6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9Yy5jaGlsZHJlblswXSxoPWF1KGMpO3U9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIix1LndpZHRoKSxoLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfXZhciBmPWUucGFkZGluZy8yO3JldHVybiBvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwgIistdS5oZWlnaHQvMisiKSIpLHtzaGFwZVN2ZzphLGJib3g6dSxoYWxmUGFkZGluZzpmLGxhYmVsOm99fSxIYj1mdW5jdGlvbih0LGUpe3ZhciBuPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHR9O2Z1bmN0aW9uICRiKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIFdiPXt9LFZiPXt9LEdiPXt9LFhiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8udHJhY2UoIkluIGlzRGVjZW5kYW50IixlLCIgIix0LCIgPSAiLFZiW2VdLmluZGV4T2YodCk+PTApLFZiW2VdLmluZGV4T2YodCk+PTB9LFpiPWZ1bmN0aW9uIHQoZSxuLHIsaSl7by53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpO3ZhciBhPW4uY2hpbGRyZW4oZSl8fFtdO2UhPT1pJiZhLnB1c2goZSksby53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIixlLCJub2RlcyIsYSksYS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihuLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXQoYSxuLHIsaSk7ZWxzZXt2YXIgcz1uLm5vZGUoYSk7by5pbmZvKCJjcCAiLGEsIiB0byAiLGksIiB3aXRoIHBhcmVudCAiLGUpLHIuc2V0Tm9kZShhLHMpLGkhPT1uLnBhcmVudChhKSYmKG8ud2FybigiU2V0dGluZyBwYXJlbnQiLGEsbi5wYXJlbnQoYSkpLHIuc2V0UGFyZW50KGEsbi5wYXJlbnQoYSkpKSxlIT09aSYmYSE9PWU/KG8uZGVidWcoIlNldHRpbmcgcGFyZW50IixhLGUpLHIuc2V0UGFyZW50KGEsZSkpOihvLmluZm8oIkluIGNvcHkgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSksby5kZWJ1ZygiTm90IFNldHRpbmcgcGFyZW50IGZvciBub2RlPSIsYSwiY2x1c3RlciE9PXJvb3RJZCIsZSE9PWksIm5vZGUhPT1jbHVzdGVySWQiLGEhPT1lKSk7dmFyIGM9bi5lZGdlcyhhKTtvLmRlYnVnKCJDb3B5aW5nIEVkZ2VzIixjKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygiRWRnZSIsdCk7dmFyIGE9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgZGF0YSIsYSxpKTt0cnl7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uaW5mbygiRGVjZW5kYW50cyBvZiAiLGUsIiBpcyAiLFZiW2VdKSxvLmluZm8oIkVkZ2UgaXMgIix0KSx0LnYhPT1lJiZ0LnchPT1lJiYoVmJbZV0/KG8uaW5mbygiSGVyZSAiKSxWYltlXS5pbmRleE9mKHQudik+PTB8fCEhWGIodC52LGUpfHwhIVhiKHQudyxlKXx8VmJbZV0uaW5kZXhPZih0LncpPj0wKTooby5kZWJ1ZygiVGlsdCwgIixlLCIsbm90IGluIGRlY2VuZGFudHMiKSwhMSkpfSh0LGkpP28uaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdC52LCItLVx4M2UiLHQudywiIHJvb3RJZDogIixpLCIgY2x1c3RlcklkOiIsZSk6KG8uaW5mbygiQ29weWluZyBhcyAiLHQudix0LncsYSx0Lm5hbWUpLHIuc2V0RWRnZSh0LnYsdC53LGEsdC5uYW1lKSxvLmluZm8oIm5ld0dyYXBoIGVkZ2VzICIsci5lZGdlcygpLHIuZWRnZShyLmVkZ2VzKClbMF0pKSl9Y2F0Y2godCl7by5lcnJvcih0KX19KSl9by5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksbi5yZW1vdmVOb2RlKGEpfSkpfSxRYj1mdW5jdGlvbiB0KGUsbil7Zm9yKHZhciByPW4uY2hpbGRyZW4oZSksaT1bXS5jb25jYXQociksYT0wO2E8ci5sZW5ndGg7YSsrKUdiW3JbYV1dPWUsaT1pLmNvbmNhdCh0KHJbYV0sbikpO3JldHVybiBpfSxLYj1mdW5jdGlvbiB0KGUsbil7by50cmFjZSgiU2VhcmNoaW5nIixlKTt2YXIgcj1uLmNoaWxkcmVuKGUpO2lmKG8udHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGUsciksci5sZW5ndGg8MSlyZXR1cm4gby50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGUpLGU7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXQocltpXSxuKTtpZihhKXJldHVybiBvLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGUsIiA9PiAiLGEpLGF9fSxKYj1mdW5jdGlvbih0KXtyZXR1cm4gV2JbdF0mJldiW3RdLmV4dGVybmFsQ29ubmVjdGlvbnMmJldiW3RdP1diW3RdLmlkOnR9LHRfPWZ1bmN0aW9uKHQsZSl7IXR8fGU+MTA/by5kZWJ1ZygiT3B0aW5nIG91dCwgbm8gZ3JhcGggIik6KG8uZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIiksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuY2hpbGRyZW4oZSkubGVuZ3RoPjAmJihvLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLEtiKGUsdCkpLFZiW2VdPVFiKGUsdCksV2JbZV09e2lkOktiKGUsdCksY2x1c3RlckRhdGE6dC5ub2RlKGUpfSl9KSksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW4oZSkscj10LmVkZ2VzKCk7bi5sZW5ndGg+MD8oby5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixlLFZiKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudiE9PWUmJnQudyE9PWUmJlhiKHQudixlKV5YYih0LncsZSkmJihvLndhcm4oIkVkZ2U6ICIsdCwiIGxlYXZlcyBjbHVzdGVyICIsZSksby53YXJuKCJEZWNlbmRhbnRzIG9mIFhYWCAiLGUsIjogIixWYltlXSksV2JbZV0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCl9KSkpOm8uZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixlLFZiKX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO28ud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSkpLG8ud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKGUpKSk7dmFyIHI9ZS52LGk9ZS53O28ud2FybigiRml4IFhYWCIsV2IsImlkczoiLGUudixlLncsIlRyYW5zbGF0ZWluZzogIixXYltlLnZdLCIgLS0tICIsV2JbZS53XSksKFdiW2Uudl18fFdiW2Uud10pJiYoby53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLGUudixlLncsZS5uYW1lKSxyPUpiKGUudiksaT1KYihlLncpLHQucmVtb3ZlRWRnZShlLnYsZS53LGUubmFtZSksciE9PWUudiYmKG4uZnJvbUNsdXN0ZXI9ZS52KSxpIT09ZS53JiYobi50b0NsdXN0ZXI9ZS53KSxvLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHIsaSxlLm5hbWUpLHQuc2V0RWRnZShyLGksbixlLm5hbWUpKX0pKSxvLndhcm4oIkFkanVzdGVkIEdyYXBoIix3YigpLmpzb24ud3JpdGUodCkpLGVfKHQsMCksby50cmFjZShXYikpfSxlXz1mdW5jdGlvbiB0KGUsbil7aWYoby53YXJuKCJleHRyYWN0b3IgLSAiLG4sd2IoKS5qc29uLndyaXRlKGUpLGUuY2hpbGRyZW4oIkQiKSksbj4xMClvLmVycm9yKCJCYWlsaW5nIG91dCIpO2Vsc2V7Zm9yKHZhciByPWUubm9kZXMoKSxpPSExLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPWUuY2hpbGRyZW4ocyk7aT1pfHxjLmxlbmd0aD4wfWlmKGkpe28uZGVidWcoIk5vZGVzID0gIixyLG4pO2Zvcih2YXIgdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgbD1yW3VdO2lmKG8uZGVidWcoIkV4dHJhY3Rpbmcgbm9kZSIsbCxXYixXYltsXSYmIVdiW2xdLmV4dGVybmFsQ29ubmVjdGlvbnMsIWUucGFyZW50KGwpLGUubm9kZShsKSxlLmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLG4pLFdiW2xdKWlmKCFXYltsXS5leHRlcm5hbENvbm5lY3Rpb25zJiZlLmNoaWxkcmVuKGwpJiZlLmNoaWxkcmVuKGwpLmxlbmd0aD4wKXtvLndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsbCxuKTt2YXIgaD0iVEIiPT09ZS5ncmFwaCgpLnJhbmtkaXI/IkxSIjoiVEIiO1diW2xdJiZXYltsXS5jbHVzdGVyRGF0YSYmV2JbbF0uY2x1c3RlckRhdGEuZGlyJiYoaD1XYltsXS5jbHVzdGVyRGF0YS5kaXIsby53YXJuKCJGaXhpbmcgZGlyIixXYltsXS5jbHVzdGVyRGF0YS5kaXIsaCkpO3ZhciBmPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmgsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO28ud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5Iix3YigpLmpzb24ud3JpdGUoZSkpLFpiKGwsZSxmLGwpLGUuc2V0Tm9kZShsLHtjbHVzdGVyTm9kZTohMCxpZDpsLGNsdXN0ZXJEYXRhOldiW2xdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpXYltsXS5sYWJlbFRleHQsZ3JhcGg6Zn0pLG8ud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsbCwiKSIsd2IoKS5qc29uLndyaXRlKGYpKSxvLmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsd2IoKS5qc29uLndyaXRlKGUpKX1lbHNlIG8ud2FybigiQ2x1c3RlciAqKiAiLGwsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFXYltsXS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudChsKSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksby5kZWJ1ZyhXYik7ZWxzZSBvLmRlYnVnKCJOb3QgYSBjbHVzdGVyIixsLG4pfXI9ZS5ub2RlcygpLG8ud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLHk9ZS5ub2RlKHApO28ud2FybigiIE5vdyBuZXh0IGxldmVsIixwLHkpLHkuY2x1c3Rlck5vZGUmJnQoeS5ncmFwaCxuKzEpfX1lbHNlIG8uZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0sbl89ZnVuY3Rpb24gdChlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm5bXTt2YXIgcj1PYmplY3QuYXNzaWduKG4pO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPWUuY2hpbGRyZW4obiksYT10KGUsaSk7cj1yLmNvbmNhdChhKX0pKSxyfSxyXz1mdW5jdGlvbih0KXtyZXR1cm4gbl8odCx0LmNoaWxkcmVuKCkpfSxpXz1uKDM4NDEpO2NvbnN0IGFfPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX07ZnVuY3Rpb24gb18odCxlKXtyZXR1cm4gdCplPjB9Y29uc3Qgc189ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZvXyhmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCx1PXIueCpuLnktbi54KnIueSxsPWEqdC54K3MqdC55K3UsaD1hKmUueCtzKmUueSt1LDAhPT1sJiYwIT09aCYmb18obCxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4geT1NYXRoLmFicyhwLzIpLHt4OihnPW8qdS1zKmMpPDA/KGcteSkvcDooZyt5KS9wLHk6KGc9YSpjLWkqdSk8MD8oZy15KS9wOihnK3kpL3B9fSxjXz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sdV89KG4ubihpXykoKSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFfKHQsZSxlLG4pfSksbF89ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQueCxpPXQueSxhPVtdLG89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyJmdW5jdGlvbiI9PXR5cGVvZiBlLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtvPU1hdGgubWluKG8sdC54KSxzPU1hdGgubWluKHMsdC55KX0pKToobz1NYXRoLm1pbihvLGUueCkscz1NYXRoLm1pbihzLGUueSkpO2Zvcih2YXIgYz1yLXQud2lkdGgvMi1vLHU9aS10LmhlaWdodC8yLXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgaD1lW2xdLGY9ZVtsPGUubGVuZ3RoLTE/bCsxOjBdLGQ9c18odCxuLHt4OmMraC54LHk6dStoLnl9LHt4OmMrZi54LHk6dStmLnl9KTtkJiZhLnB1c2goZCl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxhWzBdKTp0fSxoXz1jXztmdW5jdGlvbiBmXyh0KXtyZXR1cm4gZl89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGZfKHQpfXZhciBkXz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7IkxSIj09PW4mJihpPTEwLGE9NzApO3ZhciBvPXIuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqaS8yKS5hdHRyKCJ5IiwtMSphLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIEhiKGUsbyksZS5oZWlnaHQ9ZS5oZWlnaHQrZS5wYWRkaW5nLzIsZS53aWR0aD1lLndpZHRoK2UucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoXyhlLHQpfSxyfSxwXz17cXVlc3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZysoaS5oZWlnaHQrZS5wYWRkaW5nKSxzPVt7eDphLzIseTowfSx7eDphLHk6LWEvMn0se3g6YS8yLHk6LWF9LHt4OjAseTotYS8yfV07by5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7dmFyIGM9JGIocixhLGEscyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLGxfKGUscyx0KX0scn0scmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuPXFiKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztvLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYz1pLndpZHRoK2UucGFkZGluZyx1PWkuaGVpZ2h0K2UucGFkZGluZztpZihzLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsLWkud2lkdGgvMi1hKS5hdHRyKCJ5IiwtaS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsYykuYXR0cigiaGVpZ2h0Iix1KSxlLnByb3BzKXt2YXIgbD1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1bXSxhPWZ1bmN0aW9uKHQpe2kucHVzaCh0KSxpLnB1c2goMCl9LHM9ZnVuY3Rpb24odCl7aS5wdXNoKDApLGkucHVzaCh0KX07ZS5pbmNsdWRlcygidCIpPyhvLmRlYnVnKCJhZGQgdG9wIGJvcmRlciIpLGEobikpOnMobiksZS5pbmNsdWRlcygiciIpPyhvLmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJiIik/KG8uZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJsIik/KG8uZGVidWcoImFkZCBsZWZ0IGJvcmRlciIpLGEocikpOnMociksdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixpLmpvaW4oIiAiKSl9KHMsZS5wcm9wcy5ib3JkZXJzLGMsdSksbC5kZWxldGUoImJvcmRlcnMiKSksbC5mb3JFYWNoKChmdW5jdGlvbih0KXtvLndhcm4oIlVua25vd24gbm9kZSBwcm9wZXJ0eSAiLmNvbmNhdCh0KSl9KSl9cmV0dXJuIEhiKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhfKGUsdCl9LHJ9LHJlY3RXaXRoVGl0bGU6ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWUuY2xhc3Nlcz8ibm9kZSAiK2UuY2xhc3Nlczoibm9kZSBkZWZhdWx0Ijt2YXIgcixpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxhPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscz1pLmluc2VydCgibGluZSIpLGM9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksdT1lLmxhYmVsVGV4dC5mbGF0P2UubGFiZWxUZXh0LmZsYXQoKTplLmxhYmVsVGV4dDtyPSJvYmplY3QiPT09Zl8odSk/dVswXTp1LG8uaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIscix1LCJvYmplY3QiPT09Zl8odSkpO3ZhciBsPWMubm9kZSgpLmFwcGVuZENoaWxkKFViKHIsZS5sYWJlbFN0eWxlLCEwLCEwKSksaD17d2lkdGg6MCxoZWlnaHQ6MH07aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBmPWwuY2hpbGRyZW5bMF0sZD1hdShsKTtoPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZC5hdHRyKCJ3aWR0aCIsaC53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1vLmluZm8oIlRleHQgMiIsdSk7dmFyIHA9dS5zbGljZSgxLHUubGVuZ3RoKSx5PWwuZ2V0QkJveCgpLGc9Yy5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIocC5qb2luP3Auam9pbigiPGJyLz4iKTpwLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHptKEp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbT1nLmNoaWxkcmVuWzBdLHY9YXUoZyk7aD1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGgud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9dmFyIGI9ZS5wYWRkaW5nLzI7cmV0dXJuIGF1KGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aD55LndpZHRoPzA6KHkud2lkdGgtaC53aWR0aCkvMikrIiwgIisoeS5oZWlnaHQrYis1KSsiKSIpLGF1KGwpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aDx5LndpZHRoPzA6LSh5LndpZHRoLWgud2lkdGgpLzIpKyIsIDApIiksaD1jLm5vZGUoKS5nZXRCQm94KCksYy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrKC1oLmhlaWdodC8yLWIrMykrIikiKSxhLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtaC53aWR0aC8yLWIpLmF0dHIoInkiLC1oLmhlaWdodC8yLWIpLmF0dHIoIndpZHRoIixoLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixoLmhlaWdodCtlLnBhZGRpbmcpLHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1oLndpZHRoLzItYikuYXR0cigieDIiLGgud2lkdGgvMitiKS5hdHRyKCJ5MSIsLWguaGVpZ2h0LzItYit5LmhlaWdodCtiKS5hdHRyKCJ5MiIsLWguaGVpZ2h0LzItYit5LmhlaWdodCtiKSxIYihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoXyhlLHQpfSxpfSxjaG9pY2U6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpO3JldHVybiBuLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsW3t4OjAseToxNH0se3g6MTQseTowfSx7eDowLHk6LTE0fSx7eDotMTQseTowfV0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDI4KS5hdHRyKCJoZWlnaHQiLDI4KSxlLndpZHRoPTI4LGUuaGVpZ2h0PTI4LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB1XyhlLDE0LHQpfSxufSxjaXJjbGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nLHM9ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBzLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLGkud2lkdGgvMithKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSxvLmluZm8oIkNpcmNsZSBtYWluIiksSGIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gby5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLGkud2lkdGgvMithLHQpLHVfKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gSGIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaF8oZSx0KX0scn0saGV4YWdvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXFiKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkuaGVpZ2h0K2UucGFkZGluZyxvPWEvNCxzPWkud2lkdGgrMipvK2UucGFkZGluZyxjPVt7eDpvLHk6MH0se3g6cy1vLHk6MH0se3g6cyx5Oi1hLzJ9LHt4OnMtbyx5Oi1hfSx7eDpvLHk6LWF9LHt4OjAseTotYS8yfV0sdT0kYihyLHMsYSxjKTtyZXR1cm4gdS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSGIoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbF8oZSxjLHQpfSxyfSxyZWN0X2xlZnRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LW8vMix5OjB9LHt4OmEseTowfSx7eDphLHk6LW99LHt4Oi1vLzIseTotb30se3g6MCx5Oi1vLzJ9XTtyZXR1cm4gJGIocixhLG8scykuYXR0cigic3R5bGUiLGUuc3R5bGUpLGUud2lkdGg9YStvLGUuaGVpZ2h0PW8sZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPXFiKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9JGIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sbGVhbl9sZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MipvLzYseTowfSx7eDphK28vNix5OjB9LHt4OmEtMipvLzYseTotb30se3g6LW8vNix5Oi1vfV0sYz0kYihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSGIoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbF8oZSxzLHQpfSxyfSx0cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotMipvLzYseTowfSx7eDphKzIqby82LHk6MH0se3g6YS1vLzYseTotb30se3g6by82LHk6LW99XSxjPSRiKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxIYihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBsXyhlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPSRiKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxIYihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBsXyhlLHMsdCl9LHJ9LHJlY3RfcmlnaHRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmErby8yLHk6MH0se3g6YSx5Oi1vLzJ9LHt4OmErby8yLHk6LW99LHt4OjAseTotb31dLGM9JGIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sY3lsaW5kZXI6ZnVuY3Rpb24odCxlKXt2YXIgbj1xYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWEvMixzPW8vKDIuNSthLzUwKSxjPWkuaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrbysiLCIrcysiIDAsMCwwICIrYSsiIDAgYSAiK28rIiwiK3MrIiAwLDAsMCAiKy1hKyIgMCBsIDAsIitjKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGwgMCwiKy1jLGw9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImQiLHUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiKy0oYy8yK3MpKyIpIik7cmV0dXJuIEhiKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7dmFyIG49aF8oZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxIYihlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB1XyhlLDcsdCl9LG59LGVuZDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksci5hdHRyKCJjbGFzcyIsInN0YXRlLWVuZCIpLmF0dHIoInIiLDUpLmF0dHIoIndpZHRoIiwxMCkuYXR0cigiaGVpZ2h0IiwxMCksSGIoZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdV8oZSw3LHQpfSxufSxub3RlOmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nO28uaW5mbygiQ2xhc3NlcyA9ICIsZS5jbGFzc2VzKTt2YXIgcz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBzLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsLWkud2lkdGgvMi1hKS5hdHRyKCJ5IiwtaS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSxIYihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoXyhlLHQpfSxyfSxzdWJyb3V0aW5lOmZ1bmN0aW9uKHQsZSl7dmFyIG49cWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmEseTowfSx7eDphLHk6LW99LHt4OjAseTotb30se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6YSs4LHk6MH0se3g6YSs4LHk6LW99LHt4Oi04LHk6LW99LHt4Oi04LHk6MH1dLGM9JGIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEhiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGxfKGUscyx0KX0scn0sZm9yazpkXyxqb2luOmRfLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCx1PTQsbD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxoPTAsZj1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIscD1sLm5vZGUoKS5hcHBlbmRDaGlsZChVYihkLGUubGFiZWxTdHlsZSwhMCwhMCkpLHk9cC5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBnPXAuY2hpbGRyZW5bMF0sbT1hdShwKTt5PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbS5hdHRyKCJ3aWR0aCIseS53aWR0aCksbS5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKHUrPXkuaGVpZ2h0KzQsYys9eS53aWR0aCk7dmFyIHY9ZS5jbGFzc0RhdGEuaWQ7dm9pZCAwIT09ZS5jbGFzc0RhdGEudHlwZSYmIiIhPT1lLmNsYXNzRGF0YS50eXBlJiYoSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscz92Kz0iJmx0OyIrZS5jbGFzc0RhdGEudHlwZSsiJmd0OyI6dis9IjwiK2UuY2xhc3NEYXRhLnR5cGUrIj4iKTt2YXIgYj1sLm5vZGUoKS5hcHBlbmRDaGlsZChVYih2LGUubGFiZWxTdHlsZSwhMCwhMCkpO2F1KGIpLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO3ZhciBfPWIuZ2V0QkJveCgpO2lmKHptKEp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgeD1iLmNoaWxkcmVuWzBdLHc9YXUoYik7Xz14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHcuYXR0cigid2lkdGgiLF8ud2lkdGgpLHcuYXR0cigiaGVpZ2h0IixfLmhlaWdodCl9dSs9Xy5oZWlnaHQrNCxfLndpZHRoPmMmJihjPV8ud2lkdGgpO3ZhciBrPVtdO2UuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49Q2IodCkscj1uLmRpc3BsYXlUZXh0O0p2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJihyPXIucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO3ZhciBpPWwubm9kZSgpLmFwcGVuZENoaWxkKFViKHIsbi5jc3NTdHlsZT9uLmNzc1N0eWxlOmUubGFiZWxTdHlsZSwhMCwhMCkpLGE9aS5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBvPWkuY2hpbGRyZW5bMF0scz1hdShpKTthPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5hdHRyKCJ3aWR0aCIsYS53aWR0aCkscy5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KX1hLndpZHRoPmMmJihjPWEud2lkdGgpLHUrPWEuaGVpZ2h0KzQsay5wdXNoKGkpfSkpLHUrPTg7dmFyIFQ9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1DYih0KSxyPW4uZGlzcGxheVRleHQ7SnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZih6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPWF1KGkpO2E9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzLmF0dHIoIndpZHRoIixhLndpZHRoKSxzLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpfWEud2lkdGg+YyYmKGM9YS53aWR0aCksdSs9YS5oZWlnaHQrNCxULnB1c2goaSl9KSksdSs9OCxmKXt2YXIgRT0oYy15LndpZHRoKS8yO2F1KHApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0UpKyIsICIrLTEqdS8yKyIpIiksaD15LmhlaWdodCs0fXZhciBDPShjLV8ud2lkdGgpLzI7cmV0dXJuIGF1KGIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0MpKyIsICIrKC0xKnUvMitoKSsiKSIpLGgrPV8uaGVpZ2h0KzQsby5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtdS8yLXIrOCtoKS5hdHRyKCJ5MiIsLXUvMi1yKzgraCksaCs9OCxrLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F1KHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitoKzQpKyIpIiksaCs9Xy5oZWlnaHQrNH0pKSxoKz04LHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgraCkuYXR0cigieTIiLC11LzItcis4K2gpLGgrPTgsVC5mb3JFYWNoKChmdW5jdGlvbih0KXthdSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWMvMisiLCAiKygtMSp1LzIraCkrIikiKSxoKz1fLmhlaWdodCs0fSkpLGEuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1jLzItcikuYXR0cigieSIsLXUvMi1yKS5hdHRyKCJ3aWR0aCIsYytlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdStlLnBhZGRpbmcpLEhiKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhfKGUsdCl9LGl9fSx5Xz17fSxnXz1mdW5jdGlvbih0KXt2YXIgZT15X1t0LmlkXTtvLnRyYWNlKCJUcmFuc2Zvcm1pbmcgbm9kZSIsdC5kaWZmLHQsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTUpKyIsICIrdC53aWR0aC8yKyIpIik7dmFyIG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItOCkrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LG1fPXtyZWN0OmZ1bmN0aW9uKHQsZSl7by50cmFjZSgiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIisoZS5jbGFzcz8iICIrZS5jbGFzczoiIikpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9aS5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9YS5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPWEuY2hpbGRyZW5bMF0sdT1hdShhKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX12YXIgbD0wKmUucGFkZGluZyxoPWwvMixmPWUud2lkdGg8PXMud2lkdGgrbD9zLndpZHRoK2w6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2w/ZS5kaWZmPShzLndpZHRoLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixvLnRyYWNlKCJEYXRhICIsZSxKU09OLnN0cmluZ2lmeShlKSksci5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixlLngtZi8yKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1oKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMitlLnBhZGRpbmcvMykrIikiKTt2YXIgZD1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9ZC53aWR0aCxlLmhlaWdodD1kLmhlaWdodCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gY18oZSx0KX0sbn0scm91bmRlZFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPW4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksYT1uLmFwcGVuZCgicmVjdCIpLG89aS5ub2RlKCkuYXBwZW5kQ2hpbGQoVWIoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9by5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPW8uY2hpbGRyZW5bMF0sdT1hdShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBsPTAqZS5wYWRkaW5nLGg9bC8yLGY9ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/cy53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHMud2lkdGgrMCplLnBhZGRpbmctZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLHIuYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLGUueC1mLzItaCkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItaCkuYXR0cigid2lkdGgiLGYrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxhLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixlLngtZi8yLWgpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWgrcy5oZWlnaHQtMSkuYXR0cigid2lkdGgiLGYrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsLXMuaGVpZ2h0LTMpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yLWUucGFkZGluZy8zKyh6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpKSsiKSIpO3ZhciBkPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9ZC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGNfKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjXyhlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuZGlmZj0tZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGNfKGUsdCl9LG59fSx2Xz17fSxiXz17fSxfXz17fSx4Xz1mdW5jdGlvbih0LGUpe3ZhciBuPVViKGUubGFiZWwsZS5sYWJlbFN0eWxlKSxyPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpPXIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2kubm9kZSgpLmFwcGVuZENoaWxkKG4pO3ZhciBhLG89bi5nZXRCQm94KCk7aWYoem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBzPW4uY2hpbGRyZW5bMF0sYz1hdShuKTtvPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYy5hdHRyKCJ3aWR0aCIsby53aWR0aCksYy5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KX1pZihpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1vLndpZHRoLzIrIiwgIistby5oZWlnaHQvMisiKSIpLGJfW2UuaWRdPXIsZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuc3RhcnRMYWJlbExlZnQpe3ZhciB1PVViKGUuc3RhcnRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksaD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPWgubm9kZSgpLmFwcGVuZENoaWxkKHUpO3ZhciBmPXUuZ2V0QkJveCgpO2guYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWYud2lkdGgvMisiLCAiKy1mLmhlaWdodC8yKyIpIiksX19bZS5pZF18fChfX1tlLmlkXT17fSksX19bZS5pZF0uc3RhcnRMZWZ0PWwsd18oYSxlLnN0YXJ0TGFiZWxMZWZ0KX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7dmFyIGQ9VWIoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxwPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseT1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPXAubm9kZSgpLmFwcGVuZENoaWxkKGQpLHkubm9kZSgpLmFwcGVuZENoaWxkKGQpO3ZhciBnPWQuZ2V0QkJveCgpO3kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWcud2lkdGgvMisiLCAiKy1nLmhlaWdodC8yKyIpIiksX19bZS5pZF18fChfX1tlLmlkXT17fSksX19bZS5pZF0uc3RhcnRSaWdodD1wLHdfKGEsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXt2YXIgbT1VYihlLmVuZExhYmVsTGVmdCxlLmxhYmVsU3R5bGUpLHY9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxiPXYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2E9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQobSk7dmFyIF89bS5nZXRCQm94KCk7Yi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistXy53aWR0aC8yKyIsICIrLV8uaGVpZ2h0LzIrIikiKSx2Lm5vZGUoKS5hcHBlbmRDaGlsZChtKSxfX1tlLmlkXXx8KF9fW2UuaWRdPXt9KSxfX1tlLmlkXS5lbmRMZWZ0PXYsd18oYSxlLmVuZExhYmVsTGVmdCl9aWYoZS5lbmRMYWJlbFJpZ2h0KXt2YXIgeD1VYihlLmVuZExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSx3PXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksaz13Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPWsubm9kZSgpLmFwcGVuZENoaWxkKHgpO3ZhciBUPXguZ2V0QkJveCgpO2suYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVQud2lkdGgvMisiLCAiKy1ULmhlaWdodC8yKyIpIiksdy5ub2RlKCkuYXBwZW5kQ2hpbGQoeCksX19bZS5pZF18fChfX1tlLmlkXT17fSksX19bZS5pZF0uZW5kUmlnaHQ9dyx3XyhhLGUuZW5kTGFiZWxSaWdodCl9fTtmdW5jdGlvbiB3Xyh0LGUpe0p2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPTkqZS5sZW5ndGgrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfXZhciBrXz1mdW5jdGlvbih0LGUpe28uaW5mbygiTW92aW5nIGxhYmVsIGFiYzc4ICIsdC5pZCx0LmxhYmVsLGJfW3QuaWRdKTt2YXIgbj1lLnVwZGF0ZWRQYXRoP2UudXBkYXRlZFBhdGg6ZS5vcmlnaW5hbFBhdGg7aWYodC5sYWJlbCl7dmFyIHI9Yl9bdC5pZF0saT10LngsYT10Lnk7aWYobil7dmFyIHM9SHYuY2FsY0xhYmVsUG9zaXRpb24obik7by5pbmZvKCJNb3ZpbmcgbGFiZWwgZnJvbSAoIixpLCIsIixhLCIpIHRvICgiLHMueCwiLCIscy55LCIpIGFiYzc4Iil9ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsICIrYSsiKSIpfWlmKHQuc3RhcnRMYWJlbExlZnQpe3ZhciBjPV9fW3QuaWRdLnN0YXJ0TGVmdCx1PXQueCxsPXQueTtpZihuKXt2YXIgaD1Idi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIsbik7dT1oLngsbD1oLnl9Yy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsICIrbCsiKSIpfWlmKHQuc3RhcnRMYWJlbFJpZ2h0KXt2YXIgZj1fX1t0LmlkXS5zdGFydFJpZ2h0LGQ9dC54LHA9dC55O2lmKG4pe3ZhciB5PUh2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9yaWdodCIsbik7ZD15LngscD15Lnl9Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsICIrcCsiKSIpfWlmKHQuZW5kTGFiZWxMZWZ0KXt2YXIgZz1fX1t0LmlkXS5lbmRMZWZ0LG09dC54LHY9dC55O2lmKG4pe3ZhciBiPUh2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLG4pO209Yi54LHY9Yi55fWcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbSsiLCAiK3YrIikiKX1pZih0LmVuZExhYmVsUmlnaHQpe3ZhciBfPV9fW3QuaWRdLmVuZFJpZ2h0LHg9dC54LHc9dC55O2lmKG4pe3ZhciBrPUh2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixuKTt4PWsueCx3PWsueX1fLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3grIiwgIit3KyIpIil9fSxUXz1mdW5jdGlvbih0LGUpe28ud2FybigiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0Iix0LGUpO3ZhciBuPVtdLHI9dFswXSxpPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKG8uaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLHQsZSksZnVuY3Rpb24odCxlKXt2YXIgbj10Lngscj10LnksaT1NYXRoLmFicyhlLngtbiksYT1NYXRoLmFicyhlLnktciksbz10LndpZHRoLzIscz10LmhlaWdodC8yO3JldHVybiBpPj1vfHxhPj1zfShlLHQpfHxpKW8ud2FybigiYWJjODggb3V0c2lkZSIsdCxyKSxyPXQsaXx8bi5wdXNoKHQpO2Vsc2V7dmFyIGE9ZnVuY3Rpb24odCxlLG4pe28ud2FybigiaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6XG4gIG91dHNpZGVQb2ludDogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZSksIlxuICBpbnNpZGVQb2ludCA6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShuKSwiXG4gIG5vZGUgICAgICAgIDogeDoiKS5jb25jYXQodC54LCIgeToiKS5jb25jYXQodC55LCIgdzoiKS5jb25jYXQodC53aWR0aCwiIGg6IikuY29uY2F0KHQuaGVpZ2h0KSk7dmFyIHI9dC54LGk9dC55LGE9TWF0aC5hYnMoci1uLngpLHM9dC53aWR0aC8yLGM9bi54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixsPU1hdGguYWJzKGUueS1uLnkpLGg9TWF0aC5hYnMoZS54LW4ueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMoci1lLngpKnUpe3ZhciBmPW4ueTxlLnk/ZS55LXUtaTppLXUtZS55O2M9aCpmL2w7dmFyIGQ9e3g6bi54PGUueD9uLngrYzpuLngtaCtjLHk6bi55PGUueT9uLnkrbC1mOm4ueS1sK2Z9O3JldHVybiAwPT09YyYmKGQueD1lLngsZC55PWUueSksMD09PWgmJihkLng9ZS54KSwwPT09bCYmKGQueT1lLnkpLG8ud2FybigiYWJjODkgdG9wcC9ib3R0IGNhbGMsIFEgIi5jb25jYXQobCwiLCBxICIpLmNvbmNhdChmLCIsIFIgIikuY29uY2F0KGgsIiwgciAiKS5jb25jYXQoYyksZCksZH12YXIgcD1sKihjPW4ueDxlLng/ZS54LXMtcjpyLXMtZS54KS9oLHk9bi54PGUueD9uLngraC1jOm4ueC1oK2MsZz1uLnk8ZS55P24ueStwOm4ueS1wO3JldHVybiBvLndhcm4oInNpZGVzIGNhbGMgYWJjODksIFEgIi5jb25jYXQobCwiLCBxICIpLmNvbmNhdChwLCIsIFIgIikuY29uY2F0KGgsIiwgciAiKS5jb25jYXQoYykse194OnksX3k6Z30pLDA9PT1jJiYoeT1lLngsZz1lLnkpLDA9PT1oJiYoeT1lLngpLDA9PT1sJiYoZz1lLnkpLHt4OnkseTpnfX0oZSxyLHQpO28ud2FybigiYWJjODggaW5zaWRlIix0LHIsYSksby53YXJuKCJhYmM4OCBpbnRlcnNlY3Rpb24iLGEpO3ZhciBzPSExO24uZm9yRWFjaCgoZnVuY3Rpb24odCl7cz1zfHx0Lng9PT1hLngmJnQueT09PWEueX0pKSxuLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng9PT1hLngmJnQueT09PWEueX0pKT9vLndhcm4oImFiYzg4IG5vIGludGVyc2VjdCIsYSxuKTpuLnB1c2goYSksaT0hMH19KSksby53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixuKSxufSxFXz1mdW5jdGlvbiB0KGUsbixyLGkpe28uaW5mbygiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYIix3YigpLmpzb24ud3JpdGUobiksaSk7dmFyIGE9bi5ncmFwaCgpLnJhbmtkaXI7by50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixhKTt2YXIgcz1lLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO24ubm9kZXMoKT9vLmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixuLm5vZGVzKCkpOm8uaW5mbygiTm8gbm9kZXMgZm91bmQgZm9yIixuKSxuLmVkZ2VzKCkubGVuZ3RoPjAmJm8udHJhY2UoIlJlY3Vyc2l2ZSBlZGdlcyIsbi5lZGdlKG4uZWRnZXMoKVswXSkpO3ZhciBjPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLHU9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLGw9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO24ubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcz1uLm5vZGUoZSk7aWYodm9pZCAwIT09aSl7dmFyIGM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpLmNsdXN0ZXJEYXRhKSk7by5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLGUsIikgIixjLGkpLG4uc2V0Tm9kZShpLmlkLGMpLG4ucGFyZW50KGUpfHwoby50cmFjZSgiU2V0dGluZyBwYXJlbnQiLGUsaS5pZCksbi5zZXRQYXJlbnQoZSxpLmlkLGMpKX1pZihvLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitlKyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKGUpKSkscyYmcy5jbHVzdGVyTm9kZSl7by5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUscy53aWR0aCxuLm5vZGUoZSkpO3ZhciB1PXQoaCxzLmdyYXBoLHIsbi5ub2RlKGUpKSxsPXUuZWxlbTtIYihzLGwpLHMuZGlmZj11LmRpZmZ8fDAsby5pbmZvKCJOb2RlIGJvdW5kcyAoYWJjMTIzKSIsZSxzLHMud2lkdGgscy54LHMueSksZnVuY3Rpb24odCxlKXt5X1tlLmlkXT10fShsLHMpLG8ud2FybigiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSAiLGwscyl9ZWxzZSBuLmNoaWxkcmVuKGUpLmxlbmd0aD4wPyhvLmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsZSxzLmlkLHMsbiksby5pbmZvKEtiKHMuaWQsbikpLFdiW3MuaWRdPXtpZDpLYihzLmlkLG4pLG5vZGU6c30pOihvLmluZm8oIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIixlLHMuaWQscyksZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7ZS5saW5rPyhyPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixlLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxpPXBfW2Uuc2hhcGVdKHIsZSxuKSk6cj1pPXBfW2Uuc2hhcGVdKHQsZSxuKSxlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCksZS5jbGFzcyYmaS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2UuY2xhc3MpLHlfW2UuaWRdPXIsZS5oYXZlQ2FsbGJhY2smJnlfW2UuaWRdLmF0dHIoImNsYXNzIix5X1tlLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIil9KGgsbi5ub2RlKGUpLGEpKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxvLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiLHQsIiAiLEpTT04uc3RyaW5naWZ5KG4uZWRnZSh0KSkpLG8uaW5mbygiRml4IixXYiwiaWRzOiIsdC52LHQudywiVHJhbnNsYXRlaW5nOiAiLFdiW3Qudl0sV2JbdC53XSkseF8obCxlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSl9KSksby5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxvLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyIpLG8uaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksby5pbmZvKG4pLF9iKCkubGF5b3V0KG4pLG8uaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsd2IoKS5qc29uLndyaXRlKG4pKTt2YXIgZj0wO3JldHVybiByXyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLm5vZGUodCk7by5pbmZvKCJQb3NpdGlvbiAiK3QrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUodCkpKSxvLmluZm8oIlBvc2l0aW9uICIrdCsiOiAoIitlLngsIiwiK2UueSwiKSB3aWR0aDogIixlLndpZHRoLCIgaGVpZ2h0OiAiLGUuaGVpZ2h0KSxlJiZlLmNsdXN0ZXJOb2RlP2dfKGUpOm4uY2hpbGRyZW4odCkubGVuZ3RoPjA/KGZ1bmN0aW9uKHQsZSl7by50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTt2YXIgbj1lLnNoYXBlfHwicmVjdCI7dl9bZS5pZF09bV9bbl0odCxlKX0oYyxlKSxXYltlLmlkXS5ub2RlPWUpOmdfKGUpfSkpLG4uZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLmVkZ2UodCk7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeShlKSxlKTt2YXIgaT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIHM9bi5wb2ludHMsYz0hMSx1PWEubm9kZShlLnYpLGw9YS5ub2RlKGUudyk7by5pbmZvKCJhYmM4OCBJbnNlcnRFZGdlOiAiLG4pLGwuaW50ZXJzZWN0JiZ1LmludGVyc2VjdCYmKChzPXMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSkpLnVuc2hpZnQodS5pbnRlcnNlY3Qoc1swXSkpLG8uaW5mbygiTGFzdCBwb2ludCIsc1tzLmxlbmd0aC0xXSxsLGwuaW50ZXJzZWN0KHNbcy5sZW5ndGgtMV0pKSxzLnB1c2gobC5pbnRlcnNlY3Qoc1tzLmxlbmd0aC0xXSkpKSxuLnRvQ2x1c3RlciYmKG8uaW5mbygidG8gY2x1c3RlciBhYmM4OCIscltuLnRvQ2x1c3Rlcl0pLHM9VF8obi5wb2ludHMscltuLnRvQ2x1c3Rlcl0ubm9kZSksYz0hMCksbi5mcm9tQ2x1c3RlciYmKG8uaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixyW24uZnJvbUNsdXN0ZXJdKSxzPVRfKHMucmV2ZXJzZSgpLHJbbi5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLGM9ITApO3ZhciBoLGY9cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTtoPSgiZ3JhcGgiPT09aXx8ImZsb3djaGFydCI9PT1pKSYmbi5jdXJ2ZXx8VnU7dmFyIGQscD16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShoKTtzd2l0Y2gobi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpkPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOmQ9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OmQ9IiJ9c3dpdGNoKG4ucGF0dGVybil7Y2FzZSJzb2xpZCI6ZCs9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpkKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpkKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQifXZhciB5PXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscChmKSkuYXR0cigiaWQiLG4uaWQpLmF0dHIoImNsYXNzIiwiICIrZCsobi5jbGFzc2VzPyIgIituLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsbi5zdHlsZSksZz0iIjtzd2l0Y2goSnYoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYoZz0oZz0oZz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxvLmluZm8oImFycm93VHlwZVN0YXJ0IixuLmFycm93VHlwZVN0YXJ0KSxvLmluZm8oImFycm93VHlwZUVuZCIsbi5hcnJvd1R5cGVFbmQpLG4uYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWRlcGVuZGVuY3lTdGFydCkiKX1zd2l0Y2gobi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2crIiMiK2krIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50Ijp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2crIiMiK2krIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWRlcGVuZGVuY3lFbmQpIil9dmFyIG09e307cmV0dXJuIGMmJihtLnVwZGF0ZWRQYXRoPXMpLG0ub3JpZ2luYWxQYXRoPW4ucG9pbnRzLG19KHUsdCxlLFdiLHIsbik7a18oZSxpKX0pKSxuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO28uaW5mbyh0LGUudHlwZSxlLmRpZmYpLCJncm91cCI9PT1lLnR5cGUmJihmPWUuZGlmZil9KSkse2VsZW06cyxkaWZmOmZ9fSxDXz1mdW5jdGlvbih0LGUsbixyLGkpe1liKHQsbixyLGkpLHlfPXt9LGJfPXt9LF9fPXt9LHZfPXt9LFZiPXt9LEdiPXt9LFdiPXt9LG8ud2FybigiR3JhcGggYXQgZmlyc3Q6Iix3YigpLmpzb24ud3JpdGUoZSkpLHRfKGUpLG8ud2FybigiR3JhcGggYWZ0ZXI6Iix3YigpLmpzb24ud3JpdGUoZSkpLEVfKHQsZSxyKX07a2IucGFyc2VyLnl5PXZiO3ZhciBTXz17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH07ZnVuY3Rpb24gQV8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UgMDplPSJhZ2dyZWdhdGlvbiI7YnJlYWs7Y2FzZSAxOmU9ImV4dGVuc2lvbiI7YnJlYWs7Y2FzZSAyOmU9ImNvbXBvc2l0aW9uIjticmVhaztjYXNlIDM6ZT0iZGVwZW5kZW5jeSI7YnJlYWs7ZGVmYXVsdDplPSJub25lIn1yZXR1cm4gZX12YXIgTV89e30sTl89W10sRF89IiIsT189ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PU1fW3RdJiYoTV9bdF09e2F0dHJpYnV0ZXM6W119LG8uaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6Iix0KSksTV9bdF19O2NvbnN0IEJfPXtDYXJkaW5hbGl0eTp7WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUifSxJZGVudGlmaWNhdGlvbjp7Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtzQy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIEp2KCkuZXJ9LGFkZEVudGl0eTpPXyxhZGRBdHRyaWJ1dGVzOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1PXyh0KTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXIuYXR0cmlidXRlcy5wdXNoKGVbbl0pLG8uZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGVbbl0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIE1ffSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e2VudGl0eUE6dCxyb2xlQTplLGVudGl0eUI6bixyZWxTcGVjOnJ9O05fLnB1c2goaSksby5kZWJ1ZygiQWRkZWQgbmV3IHJlbGF0aW9uc2hpcCA6IixpKX0sZ2V0UmVsYXRpb25zaGlwczpmdW5jdGlvbigpe3JldHVybiBOX30sY2xlYXI6ZnVuY3Rpb24oKXtNXz17fSxOXz1bXSxEXz0iIn0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7RF89dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gRF99fTt2YXIgTF89big1ODkwKSxJXz1uLm4oTF8pLFJfPXtPTkxZX09ORV9TVEFSVDoiT05MWV9PTkVfU1RBUlQiLE9OTFlfT05FX0VORDoiT05MWV9PTkVfRU5EIixaRVJPX09SX09ORV9TVEFSVDoiWkVST19PUl9PTkVfU1RBUlQiLFpFUk9fT1JfT05FX0VORDoiWkVST19PUl9PTkVfRU5EIixPTkVfT1JfTU9SRV9TVEFSVDoiT05FX09SX01PUkVfU1RBUlQiLE9ORV9PUl9NT1JFX0VORDoiT05FX09SX01PUkVfRU5EIixaRVJPX09SX01PUkVfU1RBUlQ6IlpFUk9fT1JfTU9SRV9TVEFSVCIsWkVST19PUl9NT1JFX0VORDoiWkVST19PUl9NT1JFX0VORCJ9O2NvbnN0IEZfPVJfO3ZhciBQXz17fSxqXz1mdW5jdGlvbih0KXtyZXR1cm4odC5lbnRpdHlBK3Qucm9sZUErdC5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sWV89MDtjb25zdCB6Xz1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKVBfW2Vbbl1dPXRbZVtuXV19LFVfPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKSxCXy5jbGVhcigpO3ZhciBuPUlfKCkucGFyc2VyO24ueXk9Ql87dHJ5e24ucGFyc2UodCl9Y2F0Y2godCl7by5kZWJ1ZygiUGFyc2luZyBmYWlsZWQiKX12YXIgcixpPWF1KCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyhmdW5jdGlvbih0LGUpe3ZhciBuO3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUl8uT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSXy5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJfLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJfLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFJfLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSXy5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsUl8uWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixSXy5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSkoaSxQXykscj1uZXcod2IoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpQXy5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTt2YXIgYT1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGkpO3I9dm9pZCAwPT09cj9pOnI7dmFyIG89ImVudGl0eS0iK2kscz1hLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrSnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitQXy5mb250U2l6ZSsicHgiKS50ZXh0KGkpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVBfLmVudGl0eVBhZGRpbmcvMyxpPVBfLmVudGl0eVBhZGRpbmcvMyxhPS44NSpQXy5mb250U2l6ZSxvPWUubm9kZSgpLmdldEJCb3goKSxzPVtdLGM9ITEsdT0hMSxsPTAsaD0wLGY9MCxkPTAscD1vLmhlaWdodCsyKnIseT0xO24uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dC5hdHRyaWJ1dGVLZXlUeXBlJiYoYz0hMCksdm9pZCAwIT09dC5hdHRyaWJ1dGVDb21tZW50JiYodT0hMCl9KSksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT0iIi5jb25jYXQoZS5ub2RlKCkuaWQsIi1hdHRyLSIpLmNvbmNhdCh5KSxvPTAsZz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitKdigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZVR5cGUpLG09dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrSnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVOYW1lKSx2PXt9O3YudG49Zyx2Lm5uPW07dmFyIGI9Zy5ub2RlKCkuZ2V0QkJveCgpLF89bS5ub2RlKCkuZ2V0QkJveCgpO2lmKGw9TWF0aC5tYXgobCxiLndpZHRoKSxoPU1hdGgubWF4KGgsXy53aWR0aCksbz1NYXRoLm1heChiLmhlaWdodCxfLmhlaWdodCksYyl7dmFyIHg9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCIta2V5IikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitKdigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZUtleVR5cGV8fCIiKTt2LmtuPXg7dmFyIHc9eC5ub2RlKCkuZ2V0QkJveCgpO2Y9TWF0aC5tYXgoZix3LndpZHRoKSxvPU1hdGgubWF4KG8sdy5oZWlnaHQpfWlmKHUpe3ZhciBrPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIiwiIi5jb25jYXQoaSwiLWNvbW1lbnQiKSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK0p2KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrYSsicHgiKS50ZXh0KG4uYXR0cmlidXRlQ29tbWVudHx8IiIpO3YuY249azt2YXIgVD1rLm5vZGUoKS5nZXRCQm94KCk7ZD1NYXRoLm1heChkLFQud2lkdGgpLG89TWF0aC5tYXgobyxULmhlaWdodCl9di5oZWlnaHQ9byxzLnB1c2godikscCs9bysyKnIseSs9MX0pKTt2YXIgZz00O2MmJihnKz0yKSx1JiYoZys9Mik7dmFyIG09bCtoK2YrZCx2PXt3aWR0aDpNYXRoLm1heChQXy5taW5FbnRpdHlXaWR0aCxNYXRoLm1heChvLndpZHRoKzIqUF8uZW50aXR5UGFkZGluZyxtK2kqZykpLGhlaWdodDpuLmxlbmd0aD4wP3A6TWF0aC5tYXgoUF8ubWluRW50aXR5SGVpZ2h0LG8uaGVpZ2h0KzIqUF8uZW50aXR5UGFkZGluZyl9O2lmKG4ubGVuZ3RoPjApe3ZhciBiPU1hdGgubWF4KDAsKHYud2lkdGgtbS1pKmcpLyhnLzIpKTtlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Yud2lkdGgvMisiLCIrKHIrby5oZWlnaHQvMikrIikiKTt2YXIgXz1vLmhlaWdodCsyKnIseD0iYXR0cmlidXRlQm94T2RkIjtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPV8rcitlLmhlaWdodC8yO2UudG4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBhPXQuaW5zZXJ0KCJyZWN0IiwiIyIrZS50bi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeCkpLmF0dHIoImZpbGwiLFBfLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLFBfLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLGwrMippK2IpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrMipyKSxvPXBhcnNlRmxvYXQoYS5hdHRyKCJ4IikpK3BhcnNlRmxvYXQoYS5hdHRyKCJ3aWR0aCIpKTtlLm5uLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhvK2kpKyIsIituKyIpIik7dmFyIHM9dC5pbnNlcnQoInJlY3QiLCIjIitlLm5uLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdCh4KSkuYXR0cigiZmlsbCIsUF8uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsUF8uc3Ryb2tlKS5hdHRyKCJ4IixvKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsaCsyKmkrYikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCsyKnIpLHA9cGFyc2VGbG9hdChzLmF0dHIoIngiKSkrcGFyc2VGbG9hdChzLmF0dHIoIndpZHRoIikpO2lmKGMpe2Uua24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHAraSkrIiwiK24rIikiKTt2YXIgeT10Lmluc2VydCgicmVjdCIsIiMiK2Uua24ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHgpKS5hdHRyKCJmaWxsIixQXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixQXy5zdHJva2UpLmF0dHIoIngiLHApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixmKzIqaStiKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KzIqcik7cD1wYXJzZUZsb2F0KHkuYXR0cigieCIpKStwYXJzZUZsb2F0KHkuYXR0cigid2lkdGgiKSl9dSYmKGUuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHAraSkrIiwiK24rIikiKSx0Lmluc2VydCgicmVjdCIsIiMiK2UuY24ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHgpKS5hdHRyKCJmaWxsIixQXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixQXy5zdHJva2UpLmF0dHIoIngiLHApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixkKzIqaStiKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KzIqcikpLF8rPWUuaGVpZ2h0KzIqcix4PSJhdHRyaWJ1dGVCb3hPZGQiPT14PyJhdHRyaWJ1dGVCb3hFdmVuIjoiYXR0cmlidXRlQm94T2RkIn0pKX1lbHNlIHYuaGVpZ2h0PU1hdGgubWF4KFBfLm1pbkVudGl0eUhlaWdodCxwKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Yud2lkdGgvMisiLCIrdi5oZWlnaHQvMisiKSIpO3JldHVybiB2fShhLHMsZVtpXS5hdHRyaWJ1dGVzKSx1PWMud2lkdGgsbD1jLmhlaWdodCxoPWEuaW5zZXJ0KCJyZWN0IiwiIyIrbykuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlCb3giKS5hdHRyKCJmaWxsIixQXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixQXy5zdHJva2UpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGwpLm5vZGUoKS5nZXRCQm94KCk7bi5zZXROb2RlKGkse3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDppfSl9KSkscn0oaSxCXy5nZXRFbnRpdGllcygpLHIpLHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnNldEVkZ2UodC5lbnRpdHlBLHQuZW50aXR5Qix7cmVsYXRpb25zaGlwOnR9LGpfKHQpKX0pKSx0fShCXy5nZXRSZWxhdGlvbnNoaXBzKCkscik7X2IoKS5sYXlvdXQociksZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dm9pZCAwIT09biYmdm9pZCAwIT09ZS5ub2RlKG4pJiZ0LnNlbGVjdCgiIyIrbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShuKS54LWUubm9kZShuKS53aWR0aC8yKSsiLCIrKGUubm9kZShuKS55LWUubm9kZShuKS5oZWlnaHQvMikrIiApIil9KSl9KGkscikscy5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scil7WV8rKzt2YXIgaT1uLmVkZ2UoZS5lbnRpdHlBLGUuZW50aXR5QixqXyhlKSksYT16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShWdSksbz10Lmluc2VydCgicGF0aCIsIiMiK3IpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGEoaS5wb2ludHMpKS5hdHRyKCJzdHJva2UiLFBfLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnJlbFNwZWMucmVsVHlwZT09PUJfLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmby5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7dmFyIHM9IiI7c3dpdGNoKFBfLmFycm93TWFya2VyQWJzb2x1dGUmJihzPShzPShzPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBCXy5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitGXy5aRVJPX09SX09ORV9FTkQrIikiKTticmVhaztjYXNlIEJfLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitGXy5aRVJPX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBCXy5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitGXy5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIEJfLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK0ZfLk9OTFlfT05FX0VORCsiKSIpfXN3aXRjaChlLnJlbFNwZWMuY2FyZEIpe2Nhc2UgQl8uQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitGXy5aRVJPX09SX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgQl8uQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrRl8uWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBCXy5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK0ZfLk9ORV9PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBCXy5DYXJkaW5hbGl0eS5PTkxZX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK0ZfLk9OTFlfT05FX1NUQVJUKyIpIil9dmFyIGM9by5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx1PW8ubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoLjUqYyksbD0icmVsIitZXyxoPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixsKS5hdHRyKCJ4Iix1LngpLmF0dHIoInkiLHUueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrSnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitQXy5mb250U2l6ZSsicHgiKS50ZXh0KGUucm9sZUEpLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitsKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsQm94IikuYXR0cigieCIsdS54LWgud2lkdGgvMikuYXR0cigieSIsdS55LWguaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixoLndpZHRoKS5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0oaSx0LHIsYSl9KSk7dmFyIGM9UF8uZGlhZ3JhbVBhZGRpbmcsdT1pLm5vZGUoKS5nZXRCQm94KCksbD11LndpZHRoKzIqYyxoPXUuaGVpZ2h0KzIqYzt6dihpLGgsbCxQXy51c2VNYXhXaWR0aCksaS5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQodS54LWMsIiAiKS5jb25jYXQodS55LWMsIiAiKS5jb25jYXQobCwiICIpLmNvbmNhdChoKSl9O2Z1bmN0aW9uIHFfKHQpe3JldHVybiBxXz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scV8odCl9ZnVuY3Rpb24gSF8odCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgJF8sV18sVl89ImZsb3djaGFydC0iLEdfPTAsWF89SnYoKSxaXz17fSxRXz1bXSxLXz1bXSxKXz1bXSx0eD17fSxleD17fSxueD0wLHJ4PSEwLGl4PVtdLGF4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhaXyksbj0wO248ZS5sZW5ndGg7bisrKWlmKFpfW2Vbbl1dLmlkPT09dClyZXR1cm4gWl9bZVtuXV0uZG9tSWQ7cmV0dXJuIHR9LG94PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtzdGFydDp0LGVuZDplLHR5cGU6dm9pZCAwLHRleHQ6IiJ9O3ZvaWQgMCE9PShyPW4udGV4dCkmJihpLnRleHQ9VW0uc2FuaXRpemVUZXh0KHIudHJpbSgpLFhfKSwnIic9PT1pLnRleHRbMF0mJiciJz09PWkudGV4dFtpLnRleHQubGVuZ3RoLTFdJiYoaS50ZXh0PWkudGV4dC5zdWJzdHJpbmcoMSxpLnRleHQubGVuZ3RoLTEpKSksdm9pZCAwIT09biYmKGkudHlwZT1uLnR5cGUsaS5zdHJva2U9bi5zdHJva2UsaS5sZW5ndGg9bi5sZW5ndGgpLFFfLnB1c2goaSl9LHN4PWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dm9pZCAwIT09Wl9bbl0mJlpfW25dLmNsYXNzZXMucHVzaChlKSx2b2lkIDAhPT10eFtuXSYmdHhbbl0uY2xhc3Nlcy5wdXNoKGUpfSkpfSxjeD1mdW5jdGlvbih0KXt2YXIgZT1hdSgiLm1lcm1haWRUb29sdGlwIik7bnVsbD09PShlLl9ncm91cHN8fGUpWzBdWzBdJiYoZT1hdSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksYXUodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PWF1KHRoaXMpO2lmKG51bGwhPT10LmF0dHIoInRpdGxlIikpe3ZhciBuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS5odG1sKHQuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK24ubGVmdCsobi5yaWdodC1uLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrbi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLGF1KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O2l4LnB1c2goY3gpO3ZhciB1eD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPEpfLmxlbmd0aDtlKyspaWYoSl9bZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxseD0tMSxoeD1bXSxmeD1mdW5jdGlvbiB0KGUsbil7dmFyIHI9Sl9bbl0ubm9kZXM7aWYoISgobHgrPTEpPjJlMykpe2lmKGh4W2x4XT1uLEpfW25dLmlkPT09ZSlyZXR1cm57cmVzdWx0OiEwLGNvdW50OjB9O2Zvcih2YXIgaT0wLGE9MTtpPHIubGVuZ3RoOyl7dmFyIG89dXgocltpXSk7aWYobz49MCl7dmFyIHM9dChlLG8pO2lmKHMucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6YStzLmNvdW50fTthKz1zLmNvdW50fWkrPTF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDphfX19LGR4PWZ1bmN0aW9uKHQsZSl7dmFyIG49ITE7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2Rlcy5pbmRleE9mKGUpPj0wJiYobj0hMCl9KSksbn0scHg9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyZXR1cm4gdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihyLGkpe2R4KGUscil8fG4ucHVzaCh0Lm5vZGVzW2ldKX0pKSx7bm9kZXM6bn19O2NvbnN0IHl4PXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGRlZmF1bHRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gVnYuZmxvd2NoYXJ0fSxhZGRWZXJ0ZXg6ZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBvLHM9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOnt9LGM9dDt2b2lkIDAhPT1jJiYwIT09Yy50cmltKCkubGVuZ3RoJiYodm9pZCAwPT09Wl9bY10mJihaX1tjXT17aWQ6Yyxkb21JZDpWXytjKyItIitHXyxzdHlsZXM6W10sY2xhc3NlczpbXX0pLEdfKyssdm9pZCAwIT09ZT8oWF89SnYoKSwnIic9PT0obz1VbS5zYW5pdGl6ZVRleHQoZS50cmltKCksWF8pKVswXSYmJyInPT09b1tvLmxlbmd0aC0xXSYmKG89by5zdWJzdHJpbmcoMSxvLmxlbmd0aC0xKSksWl9bY10udGV4dD1vKTp2b2lkIDA9PT1aX1tjXS50ZXh0JiYoWl9bY10udGV4dD10KSx2b2lkIDAhPT1uJiYoWl9bY10udHlwZT1uKSxudWxsIT1yJiZyLmZvckVhY2goKGZ1bmN0aW9uKHQpe1pfW2NdLnN0eWxlcy5wdXNoKHQpfSkpLG51bGwhPWkmJmkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Wl9bY10uY2xhc3Nlcy5wdXNoKHQpfSkpLHZvaWQgMCE9PWEmJihaX1tjXS5kaXI9YSksWl9bY10ucHJvcHM9cyl9LGxvb2tVcERvbUlkOmF4LGFkZExpbms6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxlLmxlbmd0aDthKyspb3godFtpXSxlW2FdLG4scil9LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9RXy5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpRX1t0XS5pbnRlcnBvbGF0ZT1lfSkpfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P1FfLmRlZmF1bHRTdHlsZT1lOigtMT09PUh2LmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsZSkmJmUucHVzaCgiZmlsbDpub25lIiksUV9bdF0uc3R5bGU9ZSl9KSl9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09S19bdF0mJihLX1t0XT17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLG51bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgiY29sb3IiKSl7dmFyIG49ZS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7S19bdF0udGV4dFN0eWxlcy5wdXNoKG4pfUtfW3RdLnN0eWxlcy5wdXNoKGUpfSkpfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7KCRfPXQpLm1hdGNoKC8uKjwvKSYmKCRfPSJSTCIpLCRfLm1hdGNoKC8uKlxeLykmJigkXz0iQlQiKSwkXy5tYXRjaCgvLio+LykmJigkXz0iTFIiKSwkXy5tYXRjaCgvLip2LykmJigkXz0iVEIiKX0sc2V0Q2xhc3M6c3gsc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoZXhbImdlbi0xIj09PVdfP2F4KHQpOnRdPVVtLnNhbml0aXplVGV4dChlLFhfKSl9KSl9LGdldFRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIGV4W3RdfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1heCh0KTtpZigibG9vc2UiPT09SnYoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2k9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS50cmltKCk7JyInPT09by5jaGFyQXQoMCkmJiciJz09PW8uY2hhckF0KG8ubGVuZ3RoLTEpJiYobz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpKSxpW2FdPW99fTA9PT1pLmxlbmd0aCYmaS5wdXNoKHQpLHZvaWQgMCE9PVpfW3RdJiYoWl9bdF0uaGF2ZUNhbGxiYWNrPSEwLGl4LnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChyLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7dmFyIHQ7SHYucnVuRnVuYy5hcHBseShIdixbZV0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEhfKHQpfSh0PWkpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gSF8odCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9IXyh0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSl9KSwhMSl9KSkpfX0odCxlLG4pfSkpLHN4KHQsImNsaWNrYWJsZSIpfSxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09Wl9bdF0mJihaX1t0XS5saW5rPUh2LmZvcm1hdFVybChlLFhfKSxaX1t0XS5saW5rVGFyZ2V0PW4pfSkpLHN4KHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe2l4LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiAkXy50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIFpffSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiBRX30sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBLX30sY2xlYXI6ZnVuY3Rpb24odCl7Wl89e30sS189e30sUV89W10sKGl4PVtdKS5wdXNoKGN4KSxKXz1bXSx0eD17fSxueD0wLGV4PVtdLHJ4PSEwLFdfPXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtXXz10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhPVtdLHM9ZnVuY3Rpb24odCl7dmFyIGUsbj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxyPVtdLGk9dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBpPXFfKHQpO3JldHVybiB0LnN0bXQmJiJkaXIiPT09dC5zdG10PyhlPXQudmFsdWUsITEpOiIiIT09dC50cmltKCkmJihpIGluIG4/IW5baV0uaGFzT3duUHJvcGVydHkodCkmJihuW2ldW3RdPSEwKTohKHIuaW5kZXhPZih0KT49MCkmJnIucHVzaCh0KSl9KSk7cmV0dXJue25vZGVMaXN0OmksZGlyOmV9fShhLmNvbmNhdC5hcHBseShhLGUpKSxjPXMubm9kZUxpc3QsdT1zLmRpcjtpZihhPWMsImdlbi0xIj09PVdfKXtvLndhcm4oIkxPT0tJTkcgVVAiKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylhW2xdPWF4KGFbbF0pfXI9cnx8InN1YkdyYXBoIitueCxpPWl8fCIiLGk9VW0uc2FuaXRpemVUZXh0KGksWF8pLG54Kz0xO3ZhciBoPXtpZDpyLG5vZGVzOmEsdGl0bGU6aS50cmltKCksY2xhc3NlczpbXSxkaXI6dX07cmV0dXJuIG8uaW5mbygiQWRkaW5nIixoLmlkLGgubm9kZXMsaC5kaXIpLGgubm9kZXM9cHgoaCxKXykubm9kZXMsSl8ucHVzaChoKSx0eFtyXT1oLHJ9LGdldERlcHRoRmlyc3RQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIGh4W3RdfSxpbmRleE5vZGVzOmZ1bmN0aW9uKCl7bHg9LTEsSl8ubGVuZ3RoPjAmJmZ4KCJub25lIixKXy5sZW5ndGgtMSl9LGdldFN1YkdyYXBoczpmdW5jdGlvbigpe3JldHVybiBKX30sZGVzdHJ1Y3RMaW5rOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPWUuc2xpY2UoMCwtMSkscj0iYXJyb3dfb3BlbiI7c3dpdGNoKGUuc2xpY2UoLTEpKXtjYXNlIngiOnI9ImFycm93X2Nyb3NzIiwieCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6cj0iYXJyb3dfcG9pbnQiLCI8Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpyPSJhcnJvd19jaXJjbGUiLCJvIj09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSl9dmFyIGk9Im5vcm1hbCIsYT1uLmxlbmd0aC0xOyI9Ij09PW5bMF0mJihpPSJ0aGljayIpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MCxpPTA7aTxuOysraSkiLiI9PT1lW2ldJiYrK3I7cmV0dXJuIHJ9KDAsbik7cmV0dXJuIG8mJihpPSJkb3R0ZWQiLGE9bykse3R5cGU6cixzdHJva2U6aSxsZW5ndGg6YX19KHQpO2lmKGUpe2lmKG49ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKGVbMF0pe2Nhc2UiPCI6bj0iYXJyb3dfcG9pbnQiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIngiOm49ImFycm93X2Nyb3NzIixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGU9ZS5zbGljZSgxKX12YXIgcj0ibm9ybWFsIjtyZXR1cm4tMSE9PWUuaW5kZXhPZigiPSIpJiYocj0idGhpY2siKSwtMSE9PWUuaW5kZXhPZigiLiIpJiYocj0iZG90dGVkIikse3R5cGU6bixzdHJva2U6cn19KGUpLG4uc3Ryb2tlIT09ci5zdHJva2UpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2lmKCJhcnJvd19vcGVuIj09PW4udHlwZSluLnR5cGU9ci50eXBlO2Vsc2V7aWYobi50eXBlIT09ci50eXBlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtuLnR5cGU9ImRvdWJsZV8iK24udHlwZX1yZXR1cm4iZG91YmxlX2Fycm93Ij09PW4udHlwZSYmKG4udHlwZT0iZG91YmxlX2Fycm93X3BvaW50Iiksbi5sZW5ndGg9ci5sZW5ndGgsbn1yZXR1cm4gcn0sbGV4OntmaXJzdEdyYXBoOmZ1bmN0aW9uKCl7cmV0dXJuISFyeCYmKHJ4PSExLCEwKX19LGV4aXN0czpkeCxtYWtlVW5pcTpweH07dmFyIGd4PW4oMzYwMiksbXg9bi5uKGd4KSx2eD1uKDQ5NDkpLGJ4PW4ubih2eCksX3g9big4Mjg0KSx4eD1uLm4oX3gpO2Z1bmN0aW9uIHd4KHQsZSxuKXt2YXIgcj0uOSooZS53aWR0aCtlLmhlaWdodCksaT1be3g6ci8yLHk6MH0se3g6cix5Oi1yLzJ9LHt4OnIvMix5Oi1yfSx7eDowLHk6LXIvMn1dLGE9QngodCxyLHIsaSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBieCgpLmludGVyc2VjdC5wb2x5Z29uKG4saSx0KX0sYX1mdW5jdGlvbiBreCh0LGUsbil7dmFyIHI9ZS5oZWlnaHQsaT1yLzQsYT1lLndpZHRoKzIqaSxvPVt7eDppLHk6MH0se3g6YS1pLHk6MH0se3g6YSx5Oi1yLzJ9LHt4OmEtaSx5Oi1yfSx7eDppLHk6LXJ9LHt4OjAseTotci8yfV0scz1CeCh0LGEscixvKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJ4KCkuaW50ZXJzZWN0LnBvbHlnb24obixvLHQpfSxzfWZ1bmN0aW9uIFR4KHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LWkvMix5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4Oi1pLzIseTotaX0se3g6MCx5Oi1pLzJ9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gRXgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotMippLzYseTowfSx7eDpyLWkvNix5OjB9LHt4OnIrMippLzYseTotaX0se3g6aS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gQ3godCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDoyKmkvNix5OjB9LHt4OnIraS82LHk6MH0se3g6ci0yKmkvNix5Oi1pfSx7eDotaS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gU3godCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotMippLzYseTowfSx7eDpyKzIqaS82LHk6MH0se3g6ci1pLzYseTotaX0se3g6aS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gQXgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDppLzYseTowfSx7eDpyLWkvNix5OjB9LHt4OnIrMippLzYseTotaX0se3g6LTIqaS82LHk6LWl9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gTXgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDowLHk6MH0se3g6citpLzIseTowfSx7eDpyLHk6LWkvMn0se3g6citpLzIseTotaX0se3g6MCx5Oi1pfV0sbz1CeCh0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJ4KCkuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIE54KHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPWUud2lkdGgrci80LGE9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsci8yKS5hdHRyKCJyeSIsci8yKS5hdHRyKCJ4IiwtaS8yKS5hdHRyKCJ5Iiwtci8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJ4KCkuaW50ZXJzZWN0LnJlY3Qobix0KX0sYX1mdW5jdGlvbiBEeCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyLHk6MH0se3g6cix5Oi1pfSx7eDowLHk6LWl9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnIrOCx5OjB9LHt4OnIrOCx5Oi1pfSx7eDotOCx5Oi1pfSx7eDotOCx5OjB9XSxvPUJ4KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYngoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gT3godCxlLG4pe3ZhciByPWUud2lkdGgsaT1yLzIsYT1pLygyLjUrci81MCksbz1lLmhlaWdodCthLHM9Ik0gMCwiK2ErIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgYSAiK2krIiwiK2ErIiAwLDAsMCAiKy1yKyIgMCBsIDAsIitvKyIgYSAiK2krIiwiK2ErIiAwLDAsMCAiK3IrIiAwIGwgMCwiKy1vLGM9dC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYSkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIscykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXIvMisiLCIrLShvLzIrYSkrIikiKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7dmFyIGU9YngoKS5pbnRlcnNlY3QucmVjdChuLHQpLHI9ZS54LW4ueDtpZigwIT1pJiYoTWF0aC5hYnMocik8bi53aWR0aC8yfHxNYXRoLmFicyhyKT09bi53aWR0aC8yJiZNYXRoLmFicyhlLnktbi55KT5uLmhlaWdodC8yLWEpKXt2YXIgbz1hKmEqKDEtcipyLyhpKmkpKTswIT1vJiYobz1NYXRoLnNxcnQobykpLG89YS1vLHQueS1uLnk+MCYmKG89LW8pLGUueSs9b31yZXR1cm4gZX0sY31mdW5jdGlvbiBCeCh0LGUsbixyKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIituLzIrIikiKX1jb25zdCBMeD1mdW5jdGlvbih0KXt0LnNoYXBlcygpLnF1ZXN0aW9uPXd4LHQuc2hhcGVzKCkuaGV4YWdvbj1reCx0LnNoYXBlcygpLnN0YWRpdW09TngsdC5zaGFwZXMoKS5zdWJyb3V0aW5lPUR4LHQuc2hhcGVzKCkuY3lsaW5kZXI9T3gsdC5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PVR4LHQuc2hhcGVzKCkubGVhbl9yaWdodD1FeCx0LnNoYXBlcygpLmxlYW5fbGVmdD1DeCx0LnNoYXBlcygpLnRyYXBlem9pZD1TeCx0LnNoYXBlcygpLmludl90cmFwZXpvaWQ9QXgsdC5zaGFwZXMoKS5yZWN0X3JpZ2h0X2ludl9hcnJvdz1NeH07dmFyIEl4PXt9O2NvbnN0IFJ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspSXhbZVtuXV09dFtlW25dXX0sRng9ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IikseXguY2xlYXIoKSx5eC5zZXRHZW4oImdlbi0xIik7dmFyIG49bXgoKS5wYXJzZXI7bi55eT15eCxuLnBhcnNlKHQpO3ZhciByPXl4LmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO2Zvcih2YXIgaSxhPUp2KCkuZmxvd2NoYXJ0LHM9YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnIsbm9kZXNlcDpzLHJhbmtzZXA6YyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxsPXl4LmdldFN1YkdyYXBocygpLGg9bC5sZW5ndGgtMTtoPj0wO2gtLSlpPWxbaF0seXguYWRkVmVydGV4KGkuaWQsaS50aXRsZSwiZ3JvdXAiLHZvaWQgMCxpLmNsYXNzZXMpO3ZhciBmPXl4LmdldFZlcnRpY2VzKCk7by53YXJuKCJHZXQgdmVydGljZXMiLGYpO3ZhciBkPXl4LmdldEVkZ2VzKCkscD0wO2ZvcihwPWwubGVuZ3RoLTE7cD49MDtwLS0pe2k9bFtwXSxvdSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeT0wO3k8aS5ub2Rlcy5sZW5ndGg7eSsrKW8ud2FybigiU2V0dGluZyBzdWJncmFwaCIsaS5ub2Rlc1t5XSx5eC5sb29rVXBEb21JZChpLm5vZGVzW3ldKSx5eC5sb29rVXBEb21JZChpLmlkKSksdS5zZXRQYXJlbnQoeXgubG9va1VwRG9tSWQoaS5ub2Rlc1t5XSkseXgubG9va1VwRG9tSWQoaS5pZCkpfShmdW5jdGlvbih0LGUsbil7dmFyIHI9YXUoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXSxhPSJkZWZhdWx0IjtpLmNsYXNzZXMubGVuZ3RoPjAmJihhPWkuY2xhc3Nlcy5qb2luKCIgIikpO3ZhciBzLGM9TnYoaS5zdHlsZXMpLHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKHptKEp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbD17bGFiZWw6dS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKX07KHM9eHgoKShyLGwpLm5vZGUoKSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKX1lbHNle3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aC5zZXRBdHRyaWJ1dGUoInN0eWxlIixjLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7Zm9yKHZhciBmPXUuc3BsaXQoVW0ubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7cC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxwLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxwLnNldEF0dHJpYnV0ZSgieCIsIjEiKSxwLnRleHRDb250ZW50PWZbZF0saC5hcHBlbmRDaGlsZChwKX1zPWh9dmFyIHk9MCxnPSIiO3N3aXRjaChpLnR5cGUpe2Nhc2Uicm91bmQiOnk9NSxnPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6Y2FzZSJncm91cCI6ZGVmYXVsdDpnPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpjYXNlIm9kZF9yaWdodCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpnPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6Zz0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6Zz0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmc9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2UiY2lyY2xlIjpnPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Zz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpnPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmc9ImN5bGluZGVyIn1vLndhcm4oIkFkZGluZyBub2RlIixpLmlkLGkuZG9tSWQpLGUuc2V0Tm9kZSh5eC5sb29rVXBEb21JZChpLmlkKSx7bGFiZWxUeXBlOiJzdmciLGxhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWw6cyxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpjLnN0eWxlLGlkOnl4Lmxvb2tVcERvbUlkKGkuaWQpfSl9KSl9KShmLHUsZSksZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDtpZih2b2lkIDAhPT10LmRlZmF1bHRTdHlsZSl7dmFyIGE9TnYodC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLHM9IkxTLSIrYS5zdGFydCxjPSJMRS0iK2EuZW5kLHU9e307ImFycm93X29wZW4iPT09YS50eXBlP3UuYXJyb3doZWFkPSJub25lIjp1LmFycm93aGVhZD0ibm9ybWFsIjt2YXIgbD0iIixoPSIiO2lmKHZvaWQgMCE9PWEuc3R5bGUpe3ZhciBmPU52KGEuc3R5bGUpO2w9Zi5zdHlsZSxoPWYubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmw9ImZpbGw6bm9uZSIsdm9pZCAwIT09biYmKGw9biksdm9pZCAwIT09ciYmKGg9cik7YnJlYWs7Y2FzZSJkb3R0ZWQiOmw9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmw9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9dS5zdHlsZT1sLHUubGFiZWxTdHlsZT1oLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/dS5jdXJ2ZT1BdihhLmludGVycG9sYXRlLFB1KTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT91LmN1cnZlPUF2KHQuZGVmYXVsdEludGVycG9sYXRlLFB1KTp1LmN1cnZlPUF2KEl4LmN1cnZlLFB1KSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKHUuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsdS5sYWJlbHBvcz0iYyIsem0oSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/KHUubGFiZWxUeXBlPSJodG1sIix1LmxhYmVsPSc8c3BhbiBpZD0iTC0nLmNvbmNhdChvLCciIGNsYXNzPSJlZGdlTGFiZWwgTC0nKS5jb25jYXQocywiJyBMLSIpLmNvbmNhdChjLCciPicpLmNvbmNhdChhLnRleHQucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksIjwvc3Bhbj4iKSk6KHUubGFiZWxUeXBlPSJ0ZXh0Iix1LmxhYmVsPWEudGV4dC5yZXBsYWNlKFVtLmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PWEuc3R5bGUmJih1LnN0eWxlPXUuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksdS5sYWJlbFN0eWxlPXUubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksdS5pZD1vLHUuY2xhc3M9cysiICIrYyx1Lm1pbmxlbj1hLmxlbmd0aHx8MSxlLnNldEVkZ2UoeXgubG9va1VwRG9tSWQoYS5zdGFydCkseXgubG9va1VwRG9tSWQoYS5lbmQpLHUsaSl9KSl9KGQsdSk7dmFyIGc9bmV3KDAsYngoKS5yZW5kZXIpO0x4KGcpLGcuYXJyb3dzKCkubm9uZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDAgMCBMIDAgMCB6Iik7YngoKS51dGlsLmFwcGx5U3R5bGUoaSxuW3IrIlN0eWxlIl0pfSxnLmFycm93cygpLm5vcm1hbD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O3ZhciBtPWF1KCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO20uYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksby53YXJuKHUpO3ZhciB2PWF1KCIjIitlKyIgZyIpO2codix1KSx2LnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLChmdW5jdGlvbigpe3JldHVybiB5eC5nZXRUb29sdGlwKHRoaXMuaWQpfSkpO3ZhciBiPWEuZGlhZ3JhbVBhZGRpbmcsXz1tLm5vZGUoKS5nZXRCQm94KCkseD1fLndpZHRoKzIqYix3PV8uaGVpZ2h0KzIqYjt6dihtLHcseCxhLnVzZU1heFdpZHRoKTt2YXIgaz0iIi5jb25jYXQoXy54LWIsIiAiKS5jb25jYXQoXy55LWIsIiAiKS5jb25jYXQoeCwiICIpLmNvbmNhdCh3KTtmb3Ioby5kZWJ1Zygidmlld0JveCAiLmNvbmNhdChrKSksbS5hdHRyKCJ2aWV3Qm94IixrKSx5eC5pbmRleE5vZGVzKCJzdWJHcmFwaCIrcCkscD0wO3A8bC5sZW5ndGg7cCsrKWlmKCJ1bmRlZmluZWQiIT09KGk9bFtwXSkudGl0bGUpe3ZhciBUPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9IicreXgubG9va1VwRG9tSWQoaS5pZCkrJyJdIHJlY3QnKSxFPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9IicreXgubG9va1VwRG9tSWQoaS5pZCkrJyJdJyksQz1UWzBdLnguYmFzZVZhbC52YWx1ZSxTPVRbMF0ueS5iYXNlVmFsLnZhbHVlLEE9VFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLE09YXUoRVswXSkuc2VsZWN0KCIubGFiZWwiKTtNLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdChDK0EvMiwiLCAiKS5jb25jYXQoUysxNCwiKSIpKSxNLmF0dHIoImlkIixlKyJUZXh0Iik7Zm9yKHZhciBOPTA7TjxpLmNsYXNzZXMubGVuZ3RoO04rKylFWzBdLmNsYXNzTGlzdC5hZGQoaS5jbGFzc2VzW05dKX16bShhLmh0bWxMYWJlbHMpO2Zvcih2YXIgRD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxPPTA7TzxELmxlbmd0aDtPKyspe3ZhciBCPURbT10sTD1CLmdldEJCb3goKSxJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7SS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxJLnNldEF0dHJpYnV0ZSgicnkiLDApLEkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsTC53aWR0aCksSS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsTC5oZWlnaHQpLEIuaW5zZXJ0QmVmb3JlKEksQi5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhmKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1mW3RdO2lmKG4ubGluayl7dmFyIHI9YXUoIiMiK2UrJyBbaWQ9IicreXgubG9va1VwRG9tSWQodCkrJyJdJyk7aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTtpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuLmNsYXNzZXMuam9pbigiICIpKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLG4ubGluayksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLG4ubGlua1RhcmdldCYmaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG4ubGlua1RhcmdldCk7dmFyIGE9ci5pbnNlcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSwiOmZpcnN0LWNoaWxkIiksbz1yLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO28mJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBvLm5vZGUoKX0pKTt2YXIgcz1yLnNlbGVjdCgiLmxhYmVsIik7cyYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIHMubm9kZSgpfSkpfX19KSl9O3ZhciBQeD17fTtjb25zdCBqeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKVB4W2Vbbl1dPXRbZVtuXV19LFl4PWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLHl4LmNsZWFyKCkseXguc2V0R2VuKCJnZW4tMiIpO3ZhciBuPW14KCkucGFyc2VyO24ueXk9eXgsbi5wYXJzZSh0KTt2YXIgcj15eC5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTt2YXIgaSxhPUp2KCkuZmxvd2NoYXJ0LHM9YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnIsbm9kZXNlcDpzLHJhbmtzZXA6YyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxsPXl4LmdldFN1YkdyYXBocygpO28uaW5mbygiU3ViZ3JhcGhzIC0gIixsKTtmb3IodmFyIGg9bC5sZW5ndGgtMTtoPj0wO2gtLSlpPWxbaF0sby5pbmZvKCJTdWJncmFwaCAtICIsaSkseXguYWRkVmVydGV4KGkuaWQsaS50aXRsZSwiZ3JvdXAiLHZvaWQgMCxpLmNsYXNzZXMsaS5kaXIpO3ZhciBmPXl4LmdldFZlcnRpY2VzKCksZD15eC5nZXRFZGdlcygpO28uaW5mbyhkKTt2YXIgcD0wO2ZvcihwPWwubGVuZ3RoLTE7cD49MDtwLS0pe2k9bFtwXSxvdSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeT0wO3k8aS5ub2Rlcy5sZW5ndGg7eSsrKW8uaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGkubm9kZXNbeV0saS5pZCksdS5zZXRQYXJlbnQoaS5ub2Rlc1t5XSxpLmlkKX0oZnVuY3Rpb24odCxlLG4pe3ZhciByPWF1KCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgcyxjPU52KGkuc3R5bGVzKSx1PXZvaWQgMCE9PWkudGV4dD9pLnRleHQ6aS5pZDtpZih6bShKdigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhzPXh4KCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIsYy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9cz1ofXZhciB5PTAsZz0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjp5PTUsZz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmNhc2UiZ3JvdXAiOmRlZmF1bHQ6Zz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpnPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpnPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6Y2FzZSJvZGRfcmlnaHQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Zz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmc9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmc9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpnPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlImNpcmNsZSI6Zz0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmc9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Zz0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpnPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpnPSJjeWxpbmRlciJ9ZS5zZXROb2RlKGkuaWQse2xhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWxUZXh0OnUscng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6Yy5zdHlsZSxpZDppLmlkLGxpbms6aS5saW5rLGxpbmtUYXJnZXQ6aS5saW5rVGFyZ2V0LHRvb2x0aXA6eXguZ2V0VG9vbHRpcChpLmlkKXx8IiIsZG9tSWQ6eXgubG9va1VwRG9tSWQoaS5pZCksaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCxkaXI6aS5kaXIsdHlwZTppLnR5cGUscHJvcHM6aS5wcm9wcyxwYWRkaW5nOkp2KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxvLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOmMubGFiZWxTdHlsZSxzaGFwZTpnLGxhYmVsVGV4dDp1LHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOmMuc3R5bGUsaWQ6aS5pZCxkb21JZDp5eC5sb29rVXBEb21JZChpLmlkKSx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUsZGlyOmkuZGlyLHByb3BzOmkucHJvcHMscGFkZGluZzpKdigpLmZsb3djaGFydC5wYWRkaW5nfSl9KSl9KShmLHUsZSksZnVuY3Rpb24odCxlKXtvLmluZm8oImFiYzc4IGVkZ2VzID0gIix0KTt2YXIgbixyLGk9MCxhPXt9O2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgcz1Odih0LmRlZmF1bHRTdHlsZSk7bj1zLnN0eWxlLHI9cy5sYWJlbFN0eWxlfXQuZm9yRWFjaCgoZnVuY3Rpb24ocyl7aSsrO3ZhciBjPSJMLSIrcy5zdGFydCsiLSIrcy5lbmQ7dm9pZCAwPT09YVtjXT8oYVtjXT0wLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTooYVtjXSsrLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTt2YXIgdT1jKyItIithW2NdO28uaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsYyx1LGFbY10pO3ZhciBsPSJMUy0iK3Muc3RhcnQsaD0iTEUtIitzLmVuZCxmPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goZi5taW5sZW49cy5sZW5ndGh8fDEsImFycm93X29wZW4iPT09cy50eXBlP2YuYXJyb3doZWFkPSJub25lIjpmLmFycm93aGVhZD0ibm9ybWFsIixmLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixmLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIscy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6Zi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmYuYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmYuYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpmLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6Zi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6Zi5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSJ9dmFyIGQ9IiIscD0iIjtzd2l0Y2gocy5zdHJva2Upe2Nhc2Uibm9ybWFsIjpkPSJmaWxsOm5vbmU7Iix2b2lkIDAhPT1uJiYoZD1uKSx2b2lkIDAhPT1yJiYocD1yKSxmLnRoaWNrbmVzcz0ibm9ybWFsIixmLnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6Zi50aGlja25lc3M9Im5vcm1hbCIsZi5wYXR0ZXJuPSJkb3R0ZWQiLGYuc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmYudGhpY2tuZXNzPSJ0aGljayIsZi5wYXR0ZXJuPSJzb2xpZCIsZi5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7In1pZih2b2lkIDAhPT1zLnN0eWxlKXt2YXIgeT1OdihzLnN0eWxlKTtkPXkuc3R5bGUscD15LmxhYmVsU3R5bGV9Zi5zdHlsZT1mLnN0eWxlKz1kLGYubGFiZWxTdHlsZT1mLmxhYmVsU3R5bGUrPXAsdm9pZCAwIT09cy5pbnRlcnBvbGF0ZT9mLmN1cnZlPUF2KHMuaW50ZXJwb2xhdGUsUHUpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2YuY3VydmU9QXYodC5kZWZhdWx0SW50ZXJwb2xhdGUsUHUpOmYuY3VydmU9QXYoUHguY3VydmUsUHUpLHZvaWQgMD09PXMudGV4dD92b2lkIDAhPT1zLnN0eWxlJiYoZi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihmLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixmLmxhYmVscG9zPSJjIiksZi5sYWJlbFR5cGU9InRleHQiLGYubGFiZWw9cy50ZXh0LnJlcGxhY2UoVW0ubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09cy5zdHlsZSYmKGYuc3R5bGU9Zi5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IiksZi5sYWJlbFN0eWxlPWYubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLGYuaWQ9dSxmLmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrbCsiICIraCxlLnNldEVkZ2Uocy5zdGFydCxzLmVuZCxmLGkpfSkpfShkLHUpO3ZhciBnPWF1KCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO2cuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIG09YXUoIiMiK2UrIiBnIik7Q18obSx1LFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGUpO3ZhciB2PWEuZGlhZ3JhbVBhZGRpbmcsYj1nLm5vZGUoKS5nZXRCQm94KCksXz1iLndpZHRoKzIqdix4PWIuaGVpZ2h0KzIqdjtpZihvLmRlYnVnKCJuZXcgVmlld0JveCAwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdCh4KSwidHJhbnNsYXRlKCIuY29uY2F0KHYtdS5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQodi11Ll9sYWJlbC5tYXJnaW55LCIpIikpLHp2KGcseCxfLGEudXNlTWF4V2lkdGgpLGcuYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KHgpKSxnLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdCh2LXUuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KHYtYi55LCIpIikpLHl4LmluZGV4Tm9kZXMoInN1YkdyYXBoIitwKSwhYS5odG1sTGFiZWxzKWZvcih2YXIgdz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxrPTA7azx3Lmxlbmd0aDtrKyspe3ZhciBUPXdba10sRT1ULmdldEJCb3goKSxDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Qy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxDLnNldEF0dHJpYnV0ZSgicnkiLDApLEMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRS53aWR0aCksQy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRS5oZWlnaHQpLFQuaW5zZXJ0QmVmb3JlKEMsVC5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhmKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1mW3RdO2lmKG4ubGluayl7dmFyIHI9YXUoIiMiK2UrJyBbaWQ9IicrdCsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX07ZnVuY3Rpb24gengodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgVXgscXgsSHg9IiIsJHg9IiIsV3g9IiIsVng9W10sR3g9W10sWHg9IiIsWng9W10sUXg9W10sS3g9IiIsSng9WyJhY3RpdmUiLCJkb25lIiwiY3JpdCIsIm1pbGVzdG9uZSJdLHR3PVtdLGV3PSExLG53PSExLHJ3PTAsaXc9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIShyLmluZGV4T2YodC5mb3JtYXQoZS50cmltKCkpKT49MCkmJih0Lmlzb1dlZWtkYXkoKT49NiYmbi5pbmRleE9mKCJ3ZWVrZW5kcyIpPj0wfHxuLmluZGV4T2YodC5mb3JtYXQoImRkZGQiKS50b0xvd2VyQ2FzZSgpKT49MHx8bi5pbmRleE9mKHQuZm9ybWF0KGUudHJpbSgpKSk+PTApfSxhdz1mdW5jdGlvbih0LGUsbixyKXtpZihuLmxlbmd0aCYmIXQubWFudWFsRW5kVGltZSl7dmFyIGE9aSgpKHQuc3RhcnRUaW1lLGUsITApO2EuYWRkKDEsImQiKTt2YXIgbz1pKCkodC5lbmRUaW1lLGUsITApLHM9b3coYSxvLGUsbixyKTt0LmVuZFRpbWU9by50b0RhdGUoKSx0LnJlbmRlckVuZFRpbWU9c319LG93PWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBhPSExLG89bnVsbDt0PD1lOylhfHwobz1lLnRvRGF0ZSgpKSwoYT1pdyh0LG4scixpKSkmJmUuYWRkKDEsImQiKSx0LmFkZCgxLCJkIik7cmV0dXJuIG99LHN3PWZ1bmN0aW9uKHQsZSxuKXtuPW4udHJpbSgpO3ZhciByPS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhuLnRyaW0oKSk7aWYobnVsbCE9PXIpe3ZhciBhPW51bGw7aWYoclsxXS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXB3KHQpO3ZvaWQgMCE9PWUmJihhP2UuZW5kVGltZT5hLmVuZFRpbWUmJihhPWUpOmE9ZSl9KSksYSlyZXR1cm4gYS5lbmRUaW1lO3ZhciBzPW5ldyBEYXRlO3JldHVybiBzLnNldEhvdXJzKDAsMCwwLDApLHN9dmFyIGM9aSgpKG4sZS50cmltKCksITApO3JldHVybiBjLmlzVmFsaWQoKT9jLnRvRGF0ZSgpOihvLmRlYnVnKCJJbnZhbGlkIGRhdGU6IituKSxvLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpLG5ldyBEYXRlKX0sY3c9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dClzd2l0Y2godFsyXSl7Y2FzZSJzIjplLmFkZCh0WzFdLCJzZWNvbmRzIik7YnJlYWs7Y2FzZSJtIjplLmFkZCh0WzFdLCJtaW51dGVzIik7YnJlYWs7Y2FzZSJoIjplLmFkZCh0WzFdLCJob3VycyIpO2JyZWFrO2Nhc2UiZCI6ZS5hZGQodFsxXSwiZGF5cyIpO2JyZWFrO2Nhc2UidyI6ZS5hZGQodFsxXSwid2Vla3MiKX1yZXR1cm4gZS50b0RhdGUoKX0sdXc9ZnVuY3Rpb24odCxlLG4scil7cj1yfHwhMSxuPW4udHJpbSgpO3ZhciBhPWkoKShuLGUudHJpbSgpLCEwKTtyZXR1cm4gYS5pc1ZhbGlkKCk/KHImJmEuYWRkKDEsImQiKSxhLnRvRGF0ZSgpKTpjdygvXihbXGRdKykoW3dkaG1zXSkvLmV4ZWMobi50cmltKCkpLGkoKSh0KSl9LGx3PTAsaHc9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/InRhc2siKyhsdys9MSk6dH0sZnc9W10sZHc9e30scHc9ZnVuY3Rpb24odCl7dmFyIGU9ZHdbdF07cmV0dXJuIGZ3W2VdfSx5dz1mdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgZT1md1t0XSxuPSIiO3N3aXRjaChmd1t0XS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOnZhciByPXB3KGUucHJldlRhc2tJZCk7ZS5zdGFydFRpbWU9ci5lbmRUaW1lO2JyZWFrO2Nhc2UiZ2V0U3RhcnREYXRlIjoobj1zdygwLEh4LGZ3W3RdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSkmJihmd1t0XS5zdGFydFRpbWU9bil9cmV0dXJuIGZ3W3RdLnN0YXJ0VGltZSYmKGZ3W3RdLmVuZFRpbWU9dXcoZndbdF0uc3RhcnRUaW1lLEh4LGZ3W3RdLnJhdy5lbmRUaW1lLmRhdGEsZXcpLGZ3W3RdLmVuZFRpbWUmJihmd1t0XS5wcm9jZXNzZWQ9ITAsZndbdF0ubWFudWFsRW5kVGltZT1pKCkoZndbdF0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxhdyhmd1t0XSxIeCxHeCxWeCkpKSxmd1t0XS5wcm9jZXNzZWR9LGU9ITAsbj0wO248ZncubGVuZ3RoO24rKyl0KG4pLGU9ZSYmZndbbl0ucHJvY2Vzc2VkO3JldHVybiBlfSxndz1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1wdyh0KTt2b2lkIDAhPT1uJiZuLmNsYXNzZXMucHVzaChlKX0pKX0sbXc9ZnVuY3Rpb24odCxlKXt0dy5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKSx0dy5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnLXRleHQiXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpfTtjb25zdCB2dz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5nYW50dH0sY2xlYXI6ZnVuY3Rpb24oKXtaeD1bXSxReD1bXSxLeD0iIix0dz1bXSxYeD0iIixsdz0wLFV4PXZvaWQgMCxxeD12b2lkIDAsZnc9W10sSHg9IiIsJHg9IiIsV3g9IiIsVng9W10sR3g9W10sZXc9ITEsbnc9ITEscnc9MH0sc2V0RGF0ZUZvcm1hdDpmdW5jdGlvbih0KXtIeD10fSxnZXREYXRlRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIEh4fSxlbmFibGVJbmNsdXNpdmVFbmREYXRlczpmdW5jdGlvbigpe2V3PSEwfSxlbmREYXRlc0FyZUluY2x1c2l2ZTpmdW5jdGlvbigpe3JldHVybiBld30sZW5hYmxlVG9wQXhpczpmdW5jdGlvbigpe253PSEwfSx0b3BBeGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBud30sc2V0QXhpc0Zvcm1hdDpmdW5jdGlvbih0KXskeD10fSxnZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuICR4fSxzZXRUb2RheU1hcmtlcjpmdW5jdGlvbih0KXtXeD10fSxnZXRUb2RheU1hcmtlcjpmdW5jdGlvbigpe3JldHVybiBXeH0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7WHg9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gWHh9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCl7S3g9dCxaeC5wdXNoKHQpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBaeH0sZ2V0VGFza3M6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9eXcoKSxlPTA7IXQmJmU8MTA7KXQ9eXcoKSxlKys7cmV0dXJuIFF4PWZ3fSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246S3gsdHlwZTpLeCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O2J3KG4scixKeCk7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPWh3KCksci5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDp0fSxyLmVuZFRpbWU9e2RhdGE6blswXX07YnJlYWs7Y2FzZSAyOnIuaWQ9aHcoKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blswXX0sci5lbmRUaW1lPXtkYXRhOm5bMV19O2JyZWFrO2Nhc2UgMzpyLmlkPWh3KG5bMF0pLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzFdfSxyLmVuZFRpbWU9e2RhdGE6blsyXX19cmV0dXJuIHJ9KHF4LGUpO24ucmF3LnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLnJhdy5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5wcmV2VGFza0lkPXF4LG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxuLm9yZGVyPXJ3LHJ3Kys7dmFyIGk9ZncucHVzaChuKTtxeD1uLmlkLGR3W24uaWRdPWktMX0sZmluZFRhc2tCeUlkOnB3LGFkZFRhc2tPcmc6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpLeCx0eXBlOkt4LGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307YncobixyLEp4KTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3ZhciBvPSIiO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9aHcoKSxyLnN0YXJ0VGltZT10LmVuZFRpbWUsbz1uWzBdO2JyZWFrO2Nhc2UgMjpyLmlkPWh3KCksci5zdGFydFRpbWU9c3coMCxIeCxuWzBdKSxvPW5bMV07YnJlYWs7Y2FzZSAzOnIuaWQ9aHcoblswXSksci5zdGFydFRpbWU9c3coMCxIeCxuWzFdKSxvPW5bMl19cmV0dXJuIG8mJihyLmVuZFRpbWU9dXcoci5zdGFydFRpbWUsSHgsbyxldyksci5tYW51YWxFbmRUaW1lPWkoKShvLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLGF3KHIsSHgsR3gsVngpKSxyfShVeCxlKTtuLnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsVXg9bixReC5wdXNoKG4pfSxzZXRJbmNsdWRlczpmdW5jdGlvbih0KXtWeD10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxnZXRJbmNsdWRlczpmdW5jdGlvbigpe3JldHVybiBWeH0sc2V0RXhjbHVkZXM6ZnVuY3Rpb24odCl7R3g9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZ2V0RXhjbHVkZXM6ZnVuY3Rpb24oKXtyZXR1cm4gR3h9LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe2lmKCJsb29zZSI9PT1KdigpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciByPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7cj1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLnRyaW0oKTsnIic9PT1hLmNoYXJBdCgwKSYmJyInPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJihhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLHJbaV09YX19MD09PXIubGVuZ3RoJiZyLnB1c2godCksdm9pZCAwIT09cHcodCkmJm13KHQsKGZ1bmN0aW9uKCl7dmFyIHQ7SHYucnVuRnVuYy5hcHBseShIdixbZV0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHp4KHQpfSh0PXIpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gengodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT96eCh0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSl9KSl9fSh0LGUsbil9KSksZ3codCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1KdigpLnNlY3VyaXR5TGV2ZWwmJihuPSgwLE9tLnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXB3KHQpJiZtdyh0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSl9KSksZ3codCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7dHcuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZHVyYXRpb25Ub0RhdGU6Y3csaXNJbnZhbGlkRGF0ZTppd307ZnVuY3Rpb24gYncodCxlLG4pe2Zvcih2YXIgcj0hMDtyOylyPSExLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bmV3IFJlZ0V4cCgiXlxccyoiK24rIlxccyokIik7dFswXS5tYXRjaChpKSYmKGVbbl09ITAsdC5zaGlmdCgxKSxyPSEwKX0pKX12YXIgX3cseHc9big5OTU5KSx3dz1uLm4oeHcpO3h3LnBhcnNlci55eT12dztjb25zdCBrdz1mdW5jdGlvbih0LGUpe3ZhciBuPUp2KCkuZ2FudHQ7eHcucGFyc2VyLnl5LmNsZWFyKCkseHcucGFyc2VyLnBhcnNlKHQpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PShfdz1yLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYoX3c9MTIwMCksdm9pZCAwIT09bi51c2VXaWR0aCYmKF93PW4udXNlV2lkdGgpO3ZhciBhPXh3LnBhcnNlci55eS5nZXRUYXNrcygpLG89YS5sZW5ndGgqKG4uYmFySGVpZ2h0K24uYmFyR2FwKSsyKm4udG9wUGFkZGluZztyLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK193KyIgIitvKTtmb3IodmFyIHM9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksYz1mdW5jdGlvbigpe3JldHVybiBaaS5hcHBseShxcyhtbyx2byxHYSxXYSxQYSxSYSxMYSxPYSxOYSxrbykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9KCkuZG9tYWluKFtsKGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0VGltZX0pKSx1KGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLF93LW4ubGVmdFBhZGRpbmctbi5yaWdodFBhZGRpbmddKSxoPVtdLGY9MDtmPGEubGVuZ3RoO2YrKyloLnB1c2goYVtmXS50eXBlKTt2YXIgZD1oO2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0W3JdKXx8KGVbdFtyXV09ITAsbi5wdXNoKHRbcl0pKTtyZXR1cm4gbn0oaCksYS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciBuPXQuc3RhcnRUaW1lLHI9ZS5zdGFydFRpbWUsaT0wO3JldHVybiBuPnI/aT0xOm48ciYmKGk9LTEpLGl9KSksZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uYmFySGVpZ2h0LG89YStuLmJhckdhcCx1PW4udG9wUGFkZGluZyxsPW4ubGVmdFBhZGRpbmc7ZmEoKS5kb21haW4oWzAsaC5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKGpyKSxmdW5jdGlvbih0LGUscixhLG8sdSxsLGgpe3ZhciBmPXUucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWUuc3RhcnRUaW1lO3JldHVybiB0P01hdGgubWluKHQsbik6bn0pLDApLGQ9dS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5lbmRUaW1lO3JldHVybiB0P01hdGgubWF4KHQsbik6bn0pLDApLHA9eHcucGFyc2VyLnl5LmdldERhdGVGb3JtYXQoKTtpZihmJiZkKXtmb3IodmFyIHk9W10sZz1udWxsLG09aSgpKGYpO20udmFsdWVPZigpPD1kOyl4dy5wYXJzZXIueXkuaXNJbnZhbGlkRGF0ZShtLHAsbCxoKT9nP2cuZW5kPW0uY2xvbmUoKTpnPXtzdGFydDptLmNsb25lKCksZW5kOm0uY2xvbmUoKX06ZyYmKHkucHVzaChnKSxnPW51bGwpLG0uYWRkKDEsImQiKTtzLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoeSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiJleGNsdWRlLSIrdC5zdGFydC5mb3JtYXQoIllZWVktTU0tREQiKX0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC5zdGFydCkrcn0pKS5hdHRyKCJ5IixuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZW5kLmNsb25lKCkuYWRkKDEsImRheSIpO3JldHVybiBjKGUpLWModC5zdGFydCl9KSkuYXR0cigiaGVpZ2h0IixvLWUtbi5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKGUsbil7cmV0dXJuKGMoZS5zdGFydCkrcisuNSooYyhlLmVuZCktYyhlLnN0YXJ0KSkpLnRvU3RyaW5nKCkrInB4ICIrKG4qdCsuNSpvKS50b1N0cmluZygpKyJweCJ9KSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9fShvLHUsbCwwLHIsdCx4dy5wYXJzZXIueXkuZ2V0RXhjbHVkZXMoKSx4dy5wYXJzZXIueXkuZ2V0SW5jbHVkZXMoKSksZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz0oYT1jLHYoMyxhKSkudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KFlsKHh3LnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKHMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiKyhpLTUwKSsiKSIpLmNhbGwobykuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZHkiLCIxZW0iKSx2dy50b3BBeGlzRW5hYmxlZCgpfHxuLnRvcEF4aXMpe3ZhciB1PWZ1bmN0aW9uKHQpe3JldHVybiB2KDEsdCl9KGMpLnRpY2tTaXplKC1pK2Urbi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChZbCh4dy5wYXJzZXIueXkuZ2V0QXhpc0Zvcm1hdCgpfHxuLmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtzLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwgIitlKyIpIikuY2FsbCh1KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKX19KGwsdSwwLHIpLGZ1bmN0aW9uKHQsZSxyLGksYSxvLHUpe3MuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrci0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS1uLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGgubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1oW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgbD1zLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKTtsLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP2ModC5zdGFydFRpbWUpK2krLjUqKGModC5lbmRUaW1lKS1jKHQuc3RhcnRUaW1lKSktLjUqYTpjKHQuc3RhcnRUaW1lKStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9hOmModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLWModC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49dC5vcmRlciwoYyh0LnN0YXJ0VGltZSkraSsuNSooYyh0LmVuZFRpbWUpLWModC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisobiplK3IrLjUqYSkudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHI9MCxpPTA7aTxoLmxlbmd0aDtpKyspdC50eXBlPT09aFtpXSYmKHI9aSVuLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBhPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/YSs9IiBhY3RpdmVDcml0IjphPSIgYWN0aXZlIjp0LmRvbmU/YT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihhKz0iIGNyaXQiKSwwPT09YS5sZW5ndGgmJihhPSIgdGFzayIpLHQubWlsZXN0b25lJiYoYT0iIG1pbGVzdG9uZSAiK2EpLCJ0YXNrIisoYSs9cikrIiAiK2V9KSksbC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG4uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1jKHQuc3RhcnRUaW1lKSxyPWModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKGModC5lbmRUaW1lKS1jKHQuc3RhcnRUaW1lKSktLjUqYSksdC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIG89dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIG8+ci1lP3IrbysxLjUqbi5sZWZ0UGFkZGluZz51P2UraS01OnIraSs1OihyLWUpLzIrZStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGkpe3JldHVybiB0Lm9yZGVyKmUrbi5iYXJIZWlnaHQvMisobi5mb250U2l6ZS8yLTIpK3J9KSkuYXR0cigidGV4dC1oZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9Yyh0LnN0YXJ0VGltZSkscj1jKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIGk9dGhpcy5nZXRCQm94KCkud2lkdGgsbz0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihvPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgcz0wLGw9MDtsPGgubGVuZ3RoO2wrKyl0LnR5cGU9PT1oW2xdJiYocz1sJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGY9IiI7cmV0dXJuIHQuYWN0aXZlJiYoZj10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0IitzOiJhY3RpdmVUZXh0IitzKSx0LmRvbmU/Zj10LmNyaXQ/ZisiIGRvbmVDcml0VGV4dCIrczpmKyIgZG9uZVRleHQiK3M6dC5jcml0JiYoZj1mKyIgY3JpdFRleHQiK3MpLHQubWlsZXN0b25lJiYoZis9IiBtaWxlc3RvbmVUZXh0IiksaT5yLWU/citpKzEuNSpuLmxlZnRQYWRkaW5nPnU/bysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitzKyIgIitmOm8rIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3MrIiAiK2YrIiB3aWR0aC0iK2k6bysiIHRhc2tUZXh0IHRhc2tUZXh0IitzKyIgIitmKyIgd2lkdGgtIitpfSkpfSh0LG8sdSxsLGEsMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTAsYT0wO2E8aC5sZW5ndGg7YSsrKXJbYV09W2hbYV0sKG89aFthXSxjPWQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufShjKVtvXXx8MCldO3ZhciBvLGM7cy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxuPS0oZS5sZW5ndGgtMSkvMixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7ci5zZXRBdHRyaWJ1dGUoImR5IixuKyJlbSIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTthLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGEuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxpPjAmJmEuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGEudGV4dENvbnRlbnQ9ZVtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByfSkpLmF0dHIoIngiLDEwKS5hdHRyKCJ5IiwoZnVuY3Rpb24obixhKXtpZighKGE+MCkpcmV0dXJuIG5bMV0qdC8yK2U7Zm9yKHZhciBvPTA7bzxhO28rKylyZXR1cm4gaSs9clthLTFdWzFdLG5bMV0qdC8yK2kqdCtlfSkpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspaWYodFswXT09PWhbZV0pcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSkpfShvLHUpLGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXZ3LmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiIhPT1hKXt2YXIgbz1zLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSx1PW5ldyBEYXRlLGw9by5hcHBlbmQoImxpbmUiKTtsLmF0dHIoIngxIixjKHUpK3QpLmF0dHIoIngyIixjKHUpK3QpLmF0dHIoInkxIixuLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsaS1uLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksIiIhPT1hJiZsLmF0dHIoInN0eWxlIixhLnJlcGxhY2UoLywvZywiOyIpKX19KGwsMCwwLHIpfShhLF93LG8pLHp2KHMsbyxfdyxuLnVzZU1heFdpZHRoKSxzLmFwcGVuZCgidGV4dCIpLnRleHQoeHcucGFyc2VyLnl5LmdldFRpdGxlKCkpLmF0dHIoIngiLF93LzIpLmF0dHIoInkiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iil9O3ZhciBUdz17fSxFdz1udWxsLEN3PXttYXN0ZXI6RXd9LFN3PSJtYXN0ZXIiLEF3PSJMUiIsTXc9MDtmdW5jdGlvbiBOdygpe3JldHVybiBCdih7bGVuZ3RoOjd9KX1mdW5jdGlvbiBEdyh0LGUpe28uZGVidWcoIkVudGVyaW5nIGlzZmFzdGZvcndhcmRhYmxlOiIsdC5pZCxlLmlkKTtmb3IodmFyIG49MDt0LnNlcTw9ZS5zZXEmJnQhPT1lJiZuPDFlMyYmKG4rKyxudWxsIT1lLnBhcmVudCk7KXtpZihBcnJheS5pc0FycmF5KGUucGFyZW50KSlyZXR1cm4gby5kZWJ1ZygiSW4gbWVyZ2UgY29tbWl0OiIsZS5wYXJlbnQpLER3KHQsVHdbZS5wYXJlbnRbMF1dKXx8RHcodCxUd1tlLnBhcmVudFsxXV0pO2U9VHdbZS5wYXJlbnRdfXJldHVybiBvLmRlYnVnKHQuaWQsZS5pZCksdC5pZD09PWUuaWR9dmFyIE93PXt9O2Z1bmN0aW9uIEJ3KHQsZSxuKXt2YXIgcj10LmluZGV4T2YoZSk7LTE9PT1yP3QucHVzaChuKTp0LnNwbGljZShyLDEsbil9ZnVuY3Rpb24gTHcodCl7dmFyIGU9dC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxP3Q6ZX0pLHRbMF0pLG49IiI7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtuKz10PT09ZT8iXHQqIjoiXHR8In0pKTt2YXIgcixpLGEscz1bbixlLmlkLGUuc2VxXTtmb3IodmFyIGMgaW4gQ3cpQ3dbY109PT1lLmlkJiZzLnB1c2goYyk7aWYoby5kZWJ1ZyhzLmpvaW4oIiAiKSksQXJyYXkuaXNBcnJheShlLnBhcmVudCkpe3ZhciB1PVR3W2UucGFyZW50WzBdXTtCdyh0LGUsdSksdC5wdXNoKFR3W2UucGFyZW50WzFdXSl9ZWxzZXtpZihudWxsPT1lLnBhcmVudClyZXR1cm47dmFyIGw9VHdbZS5wYXJlbnRdO0J3KHQsZSxsKX1yPXQsaT1mdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0sYT1PYmplY3QuY3JlYXRlKG51bGwpLEx3KHQ9ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49aShlKTtyZXR1cm4gYVtuXXx8KGFbbl09ITAsdC5wdXNoKGUpKSx0fSksW10pKX12YXIgSXc9ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Qua2V5cyhUdykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gVHdbdF19KSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5kZWJ1Zyh0LmlkKX0pKSx0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2VxLXQuc2VxfSkpLHR9O2NvbnN0IFJ3PXtzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7QXc9dH0sc2V0T3B0aW9uczpmdW5jdGlvbih0KXtvLmRlYnVnKCJvcHRpb25zIHN0ciIsdCksdD0odD10JiZ0LnRyaW0oKSl8fCJ7fSI7dHJ5e093PUpTT04ucGFyc2UodCl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIix0Lm1lc3NhZ2UpfX0sZ2V0T3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBPd30sY29tbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPXtpZDpOdygpLG1lc3NhZ2U6dCxzZXE6TXcrKyxwYXJlbnQ6bnVsbD09RXc/bnVsbDpFdy5pZH07RXc9ZSxUd1tlLmlkXT1lLEN3W1N3XT1lLmlkLG8uZGVidWcoImluIHB1c2hDb21taXQgIitlLmlkKX0sYnJhbmNoOmZ1bmN0aW9uKHQpe0N3W3RdPW51bGwhPUV3P0V3LmlkOm51bGwsby5kZWJ1ZygiaW4gY3JlYXRlQnJhbmNoIil9LG1lcmdlOmZ1bmN0aW9uKHQpe3ZhciBlPVR3W0N3W1N3XV0sbj1Ud1tDd1t0XV07aWYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zZXE+ZS5zZXEmJkR3KGUsdCl9KGUsbikpby5kZWJ1ZygiQWxyZWFkeSBtZXJnZWQiKTtlbHNle2lmKER3KGUsbikpQ3dbU3ddPUN3W3RdLEV3PVR3W0N3W1N3XV07ZWxzZXt2YXIgcj17aWQ6TncoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIrdCsiIGludG8gIitTdyxzZXE6TXcrKyxwYXJlbnQ6W251bGw9PUV3P251bGw6RXcuaWQsQ3dbdF1dfTtFdz1yLFR3W3IuaWRdPXIsQ3dbU3ddPXIuaWR9by5kZWJ1ZyhDdyksby5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX19LGNoZWNrb3V0OmZ1bmN0aW9uKHQpe28uZGVidWcoImluIGNoZWNrb3V0Iik7dmFyIGU9Q3dbU3c9dF07RXc9VHdbZV19LHJlc2V0OmZ1bmN0aW9uKHQpe28uZGVidWcoImluIHJlc2V0Iix0KTt2YXIgZT10LnNwbGl0KCI6IilbMF0sbj1wYXJzZUludCh0LnNwbGl0KCI6IilbMV0pLHI9IkhFQUQiPT09ZT9FdzpUd1tDd1tlXV07Zm9yKG8uZGVidWcocixuKTtuPjA7KWlmKG4tLSwhKHI9VHdbci5wYXJlbnRdKSl7dmFyIGk9IkNyaXRpY2FsIGVycm9yIC0gdW5pcXVlIHBhcmVudCBjb21taXQgbm90IGZvdW5kIGR1cmluZyByZXNldCI7dGhyb3cgby5lcnJvcihpKSxpfUV3PXIsQ3dbU3ddPXIuaWR9LHByZXR0eVByaW50OmZ1bmN0aW9uKCl7by5kZWJ1ZyhUdyksTHcoW0l3KClbMF1dKX0sY2xlYXI6ZnVuY3Rpb24oKXtUdz17fSxDdz17bWFzdGVyOkV3PW51bGx9LFN3PSJtYXN0ZXIiLE13PTB9LGdldEJyYW5jaGVzQXNPYmpBcnJheTpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBDdyl0LnB1c2goe25hbWU6ZSxjb21taXQ6VHdbQ3dbZV1dfSk7cmV0dXJuIHR9LGdldEJyYW5jaGVzOmZ1bmN0aW9uKCl7cmV0dXJuIEN3fSxnZXRDb21taXRzOmZ1bmN0aW9uKCl7cmV0dXJuIFR3fSxnZXRDb21taXRzQXJyYXk6SXcsZ2V0Q3VycmVudEJyYW5jaDpmdW5jdGlvbigpe3JldHVybiBTd30sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIEF3fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIEV3fX07dmFyIEZ3LFB3PW4oMjU1Myksanc9bi5uKFB3KSxZdz17fSx6dz17bm9kZVNwYWNpbmc6MTUwLG5vZGVGaWxsQ29sb3I6InllbGxvdyIsbm9kZVN0cm9rZVdpZHRoOjIsbm9kZVN0cm9rZUNvbG9yOiJncmV5IixsaW5lU3Ryb2tlV2lkdGg6NCxicmFuY2hPZmZzZXQ6NTAsbGluZUNvbG9yOiJncmV5IixsZWZ0TWFyZ2luOjUwLGJyYW5jaENvbG9yczpbIiM0NDJmNzQiLCIjOTgzMzUxIiwiIzYwOTczMiIsIiNBQTlBMzkiXSxub2RlUmFkaXVzOjEwLG5vZGVMYWJlbDp7d2lkdGg6NzUsaGVpZ2h0OjEwMCx4Oi0yNSx5OjB9fSxVdz17fTtmdW5jdGlvbiBxdyh0LGUsbixyKXt2YXIgaT1BdihyLFZ1KSxhPXp3LmJyYW5jaENvbG9yc1tuJXp3LmJyYW5jaENvbG9ycy5sZW5ndGhdLG89enUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LngpfSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQueSl9KSkuY3VydmUoaSk7dC5hcHBlbmQoInN2ZzpwYXRoIikuYXR0cigiZCIsbyhlKSkuc3R5bGUoInN0cm9rZSIsYSkuc3R5bGUoInN0cm9rZS13aWR0aCIsencubGluZVN0cm9rZVdpZHRoKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX1mdW5jdGlvbiBIdyh0LGUpe2U9ZXx8dC5ub2RlKCkuZ2V0QkJveCgpO3ZhciBuPXQubm9kZSgpLmdldENUTSgpO3JldHVybntsZWZ0Om4uZStlLngqbi5hLHRvcDpuLmYrZS55Km4uZCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH19ZnVuY3Rpb24gJHcodCxlLG4scixpKXtvLmRlYnVnKCJzdmdEcmF3TGluZUZvckNvbW1pdHM6ICIsZSxuKTt2YXIgYT1Idyh0LnNlbGVjdCgiI25vZGUtIitlKyIgY2lyY2xlIikpLHM9SHcodC5zZWxlY3QoIiNub2RlLSIrbisiIGNpcmNsZSIpKTtzd2l0Y2gocil7Y2FzZSJMUiI6aWYoYS5sZWZ0LXMubGVmdD56dy5ub2RlU3BhY2luZyl7dmFyIGM9e3g6YS5sZWZ0LXp3Lm5vZGVTcGFjaW5nLHk6cy50b3Arcy5oZWlnaHQvMn07cXcodCxbYyx7eDpzLmxlZnQrcy53aWR0aCx5OnMudG9wK3MuaGVpZ2h0LzJ9XSxpLCJsaW5lYXIiKSxxdyh0LFt7eDphLmxlZnQseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtencubm9kZVNwYWNpbmcvMix5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC16dy5ub2RlU3BhY2luZy8yLHk6Yy55fSxjXSxpKX1lbHNlIHF3KHQsW3t4OmEubGVmdCx5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC16dy5ub2RlU3BhY2luZy8yLHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LXp3Lm5vZGVTcGFjaW5nLzIseTpzLnRvcCtzLmhlaWdodC8yfSx7eDpzLmxlZnQrcy53aWR0aCx5OnMudG9wK3MuaGVpZ2h0LzJ9XSxpKTticmVhaztjYXNlIkJUIjppZihzLnRvcC1hLnRvcD56dy5ub2RlU3BhY2luZyl7dmFyIHU9e3g6cy5sZWZ0K3Mud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0K3p3Lm5vZGVTcGFjaW5nfTtxdyh0LFt1LHt4OnMubGVmdCtzLndpZHRoLzIseTpzLnRvcH1dLGksImxpbmVhciIpLHF3KHQsW3t4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodH0se3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0K3p3Lm5vZGVTcGFjaW5nLzJ9LHt4OnMubGVmdCtzLndpZHRoLzIseTp1Lnktencubm9kZVNwYWNpbmcvMn0sdV0saSl9ZWxzZSBxdyh0LFt7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHR9LHt4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCt6dy5ub2RlU3BhY2luZy8yfSx7eDpzLmxlZnQrcy53aWR0aC8yLHk6cy50b3Atencubm9kZVNwYWNpbmcvMn0se3g6cy5sZWZ0K3Mud2lkdGgvMix5OnMudG9wfV0saSl9fWZ1bmN0aW9uIFd3KHQsZSl7cmV0dXJuIHQuc2VsZWN0KGUpLm5vZGUoKS5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIFZ3KHQsZSxuLHIpe3ZhciBpLGE9T2JqZWN0LmtleXMoWXcpLmxlbmd0aDtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBzPTA7ZG97aWYocysrLGk9WXdbZV0sby5kZWJ1ZygiaW4gcmVuZGVyQ29tbWl0SGlzdG9yeSIsaS5pZCxpLnNlcSksdC5zZWxlY3QoIiNub2RlLSIrZSkuc2l6ZSgpPjApcmV0dXJuO3QuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBXdyh0LCIjZGVmLWNvbW1pdCIpfSkpLmF0dHIoImNsYXNzIiwiY29tbWl0IikuYXR0cigiaWQiLChmdW5jdGlvbigpe3JldHVybiJub2RlLSIraS5pZH0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3N3aXRjaChyKXtjYXNlIkxSIjpyZXR1cm4idHJhbnNsYXRlKCIrKGkuc2VxKnp3Lm5vZGVTcGFjaW5nK3p3LmxlZnRNYXJnaW4pKyIsICIrRncqencuYnJhbmNoT2Zmc2V0KyIpIjtjYXNlIkJUIjpyZXR1cm4idHJhbnNsYXRlKCIrKEZ3Knp3LmJyYW5jaE9mZnNldCt6dy5sZWZ0TWFyZ2luKSsiLCAiKyhhLWkuc2VxKSp6dy5ub2RlU3BhY2luZysiKSJ9fSkpLmF0dHIoImZpbGwiLHp3Lm5vZGVGaWxsQ29sb3IpLmF0dHIoInN0cm9rZSIsencubm9kZVN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLHp3Lm5vZGVTdHJva2VXaWR0aCk7dmFyIGM9dm9pZCAwO2Zvcih2YXIgdSBpbiBuKWlmKG5bdV0uY29tbWl0PT09aSl7Yz1uW3VdO2JyZWFrfWMmJihvLmRlYnVnKCJmb3VuZCBicmFuY2ggIixjLm5hbWUpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJicmFuY2gtbGFiZWwiKS50ZXh0KGMubmFtZSsiLCAiKSksdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1pZCIpLnRleHQoaS5pZCksIiIhPT1pLm1lc3NhZ2UmJiJCVCI9PT1yJiZ0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiY29tbWl0LW1zZyIpLnRleHQoIiwgIitpLm1lc3NhZ2UpLGU9aS5wYXJlbnR9d2hpbGUoZSYmWXdbZV0mJnM8MWUzKX1BcnJheS5pc0FycmF5KGUpJiYoby5kZWJ1ZygiZm91bmQgbWVyZ2UgY29tbW1pdCIsZSksVncodCxlWzBdLG4sciksRncrKyxWdyh0LGVbMV0sbixyKSxGdy0tKX1mdW5jdGlvbiBHdyh0LGUsbixyKXtyPXJ8fDA7Zm9yKHZhciBpPTA7ZS5zZXE+MCYmIWUubGluZURyYXduJiZpPDFlMzspaSsrLCJzdHJpbmciPT10eXBlb2YgZS5wYXJlbnQ/KCR3KHQsZS5pZCxlLnBhcmVudCxuLHIpLGUubGluZURyYXduPSEwLGU9WXdbZS5wYXJlbnRdKTpBcnJheS5pc0FycmF5KGUucGFyZW50KSYmKCR3KHQsZS5pZCxlLnBhcmVudFswXSxuLHIpLCR3KHQsZS5pZCxlLnBhcmVudFsxXSxuLHIrMSksR3codCxZd1tlLnBhcmVudFsxXV0sbixyKzEpLGUubGluZURyYXduPSEwLGU9WXdbZS5wYXJlbnRbMF1dKX1jb25zdCBYdz1mdW5jdGlvbih0KXtVdz10fTt2YXIgWnc9IiIsUXc9ITE7Y29uc3QgS3c9e3NldE1lc3NhZ2U6ZnVuY3Rpb24odCl7by5kZWJ1ZygiU2V0dGluZyBtZXNzYWdlIHRvOiAiK3QpLFp3PXR9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gWnd9LHNldEluZm86ZnVuY3Rpb24odCl7UXc9dH0sZ2V0SW5mbzpmdW5jdGlvbigpe3JldHVybiBRd319O3ZhciBKdz1uKDY3NjUpLHRrPW4ubihKdyksZWs9e307Y29uc3Qgbms9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZWtbZV09dFtlXX0pKX07dmFyIHJrPW4oNzA2MiksaWs9bi5uKHJrKSxhaz17fSxvaz0iIixzaz0hMTtjb25zdCBjaz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5waWV9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1ha1t0XSYmKGFrW3RdPWUsby5kZWJ1ZygiQWRkZWQgbmV3IHNlY3Rpb24gOiIsdCkpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBha30sY2xlYW51cFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/KHQ9dC5zdWJzdHJpbmcoMSkudHJpbSgpLE51bWJlcih0LnRyaW0oKSkpOk51bWJlcih0LnRyaW0oKSl9LGNsZWFyOmZ1bmN0aW9uKCl7YWs9e30sb2s9IiIsc2s9ITF9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe29rPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIG9rfSxzZXRTaG93RGF0YTpmdW5jdGlvbih0KXtzaz10fSxnZXRTaG93RGF0YTpmdW5jdGlvbigpe3JldHVybiBza319O3ZhciB1ayxsaz1KdigpO2NvbnN0IGhrPWZ1bmN0aW9uKHQsZSl7dHJ5e2xrPUp2KCk7dmFyIG49aWsoKS5wYXJzZXI7bi55eT1jayxvLmRlYnVnKCJSZW5kZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLG4ueXkuY2xlYXIoKSxuLnBhcnNlKHQpLG8uZGVidWcoIlBhcnNlZCBpbmZvIGRpYWdyYW0iKTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0odWs9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKHVrPTEyMDApLHZvaWQgMCE9PWxrLnVzZVdpZHRoJiYodWs9bGsudXNlV2lkdGgpLHZvaWQgMCE9PWxrLnBpZS51c2VXaWR0aCYmKHVrPWxrLnBpZS51c2VXaWR0aCk7dmFyIGk9YXUoIiMiK2UpO3p2KGksNDUwLHVrLGxrLnBpZS51c2VNYXhXaWR0aCksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIit1aysiIDQ1MCIpO3ZhciBhPU1hdGgubWluKHVrLDQ1MCkvMi00MCxzPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdWsvMisiLDIyNSkiKSxjPWNrLmdldFNlY3Rpb25zKCksdT0wO09iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UrPWNbdF19KSk7dmFyIGw9bGsudGhlbWVWYXJpYWJsZXMsaD1bbC5waWUxLGwucGllMixsLnBpZTMsbC5waWU0LGwucGllNSxsLnBpZTYsbC5waWU3LGwucGllOCxsLnBpZTksbC5waWUxMCxsLnBpZTExLGwucGllMTJdLGY9bWEoKS5yYW5nZShoKSxkPWZ1bmN0aW9uKCl7dmFyIHQ9cXUsZT1VdSxuPW51bGwscj1wdSgwKSxpPXB1KEV1KSxhPXB1KDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPShvPVJ1KG8pKS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGYpLHk9bmV3IEFycmF5KGYpLGc9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLG09TWF0aC5taW4oRXUsTWF0aC5tYXgoLUV1LGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx2PU1hdGgubWluKE1hdGguYWJzKG0pL2YsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9dioobTwwPy0xOjEpO2ZvcihzPTA7czxmOysrcykoaD15W3Bbc109c109K3Qob1tzXSxzLG8pKT4wJiYoZCs9aCk7Zm9yKG51bGwhPWU/cC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKHlbdF0seVtuXSl9KSk6bnVsbCE9biYmcC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKG9bdF0sb1tlXSl9KSkscz0wLHU9ZD8obS1mKmIpL2Q6MDtzPGY7KytzLGc9bCljPXBbc10sbD1nKygoaD15W2NdKT4wP2gqdTowKStiLHlbY109e2RhdGE6b1tjXSxpbmRleDpzLHZhbHVlOmgsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOmwscGFkQW5nbGU6dn07cmV0dXJuIHl9cmV0dXJuIG8udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpwdSgrZSksbyk6dH0sby5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxvKTpufSxvLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksbyk6cn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLG8pOmF9LG99KCkudmFsdWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzFdfSkpLHA9ZChPYmplY3QuZW50cmllcyhjKSkseT1JdSgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKGEpO3Muc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEocCkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIGYodC5kYXRhWzBdKX0pKS5hdHRyKCJjbGFzcyIsInBpZUNpcmNsZSIpLHMuc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEocCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4odC5kYXRhWzFdL3UqMTAwKS50b0ZpeGVkKDApKyIlIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIreS5jZW50cm9pZCh0KSsiKSJ9KSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLHMuYXBwZW5kKCJ0ZXh0IikudGV4dChuLnl5LmdldFRpdGxlKCkpLmF0dHIoIngiLDApLmF0dHIoInkiLC0yMDApLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7dmFyIGc9cy5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKGYuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoMjE2LCIrKDIyKmUtMjIqZi5kb21haW4oKS5sZW5ndGgvMikrIikifSkpO2cuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDE4KS5hdHRyKCJoZWlnaHQiLDE4KS5zdHlsZSgiZmlsbCIsZikuc3R5bGUoInN0cm9rZSIsZiksZy5kYXRhKHApLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyKS5hdHRyKCJ5IiwxNCkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIG4ueXkuZ2V0U2hvd0RhdGEoKXx8bGsuc2hvd0RhdGF8fGxrLnBpZS5zaG93RGF0YT90LmRhdGFbMF0rIiBbIit0LmRhdGFbMV0rIl0iOnQuZGF0YVswXX0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksby5lcnJvcih0KX19O3ZhciBmaz1uKDMxNzYpLGRrPW4ubihmaykscGs9W10seWs9e30sZ2s9e30sbWs9e30sdms9e307Y29uc3QgYms9e1JlcXVpcmVtZW50VHlwZTp7UkVRVUlSRU1FTlQ6IlJlcXVpcmVtZW50IixGVU5DVElPTkFMX1JFUVVJUkVNRU5UOiJGdW5jdGlvbmFsIFJlcXVpcmVtZW50IixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IkludGVyZmFjZSBSZXF1aXJlbWVudCIsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6IlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50IixQSFlTSUNBTF9SRVFVSVJFTUVOVDoiUGh5c2ljYWwgUmVxdWlyZW1lbnQiLERFU0lHTl9DT05TVFJBSU5UOiJEZXNpZ24gQ29uc3RyYWludCJ9LFJpc2tMZXZlbDp7TE9XX1JJU0s6IkxvdyIsTUVEX1JJU0s6Ik1lZGl1bSIsSElHSF9SSVNLOiJIaWdoIn0sVmVyaWZ5VHlwZTp7VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9LFJlbGF0aW9uc2hpcHM6e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5yZXF9LGFkZFJlcXVpcmVtZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWdrW3RdJiYoZ2tbdF09e25hbWU6dCx0eXBlOmUsaWQ6eWsuaWQsdGV4dDp5ay50ZXh0LHJpc2s6eWsucmlzayx2ZXJpZnlNZXRob2Q6eWsudmVyaWZ5TWV0aG9kfSkseWs9e30sZ2tbdF19LGdldFJlcXVpcmVtZW50czpmdW5jdGlvbigpe3JldHVybiBna30sc2V0TmV3UmVxSWQ6ZnVuY3Rpb24odCl7dm9pZCAwIT09eWsmJih5ay5pZD10KX0sc2V0TmV3UmVxVGV4dDpmdW5jdGlvbih0KXt2b2lkIDAhPT15ayYmKHlrLnRleHQ9dCl9LHNldE5ld1JlcVJpc2s6ZnVuY3Rpb24odCl7dm9pZCAwIT09eWsmJih5ay5yaXNrPXQpfSxzZXROZXdSZXFWZXJpZnlNZXRob2Q6ZnVuY3Rpb24odCl7dm9pZCAwIT09eWsmJih5ay52ZXJpZnlNZXRob2Q9dCl9LGFkZEVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXZrW3RdJiYodmtbdF09e25hbWU6dCx0eXBlOm1rLnR5cGUsZG9jUmVmOm1rLmRvY1JlZn0sby5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsdCkpLG1rPXt9LHZrW3RdfSxnZXRFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB2a30sc2V0TmV3RWxlbWVudFR5cGU6ZnVuY3Rpb24odCl7dm9pZCAwIT09bWsmJihtay50eXBlPXQpfSxzZXROZXdFbGVtZW50RG9jUmVmOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PW1rJiYobWsuZG9jUmVmPXQpfSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24odCxlLG4pe3BrLnB1c2goe3R5cGU6dCxzcmM6ZSxkc3Q6bn0pfSxnZXRSZWxhdGlvbnNoaXBzOmZ1bmN0aW9uKCl7cmV0dXJuIHBrfSxjbGVhcjpmdW5jdGlvbigpe3BrPVtdLHlrPXt9LGdrPXt9LG1rPXt9LHZrPXt9fX07dmFyIF9rPXtDT05UQUlOUzoiY29udGFpbnMiLEFSUk9XOiJhcnJvdyJ9O2NvbnN0IHhrPV9rO3ZhciB3az17fSxraz0wLFRrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiIyIrZSkuYXR0cigiY2xhc3MiLCJyZXEgcmVxQm94IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHdrLnJlY3RfbWluX3dpZHRoKyJweCIpLmF0dHIoImhlaWdodCIsd2sucmVjdF9taW5faGVpZ2h0KyJweCIpfSxFaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9d2sucmVjdF9taW5fd2lkdGgvMixpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIscikuYXR0cigieSIsd2sucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXswPT1hP2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsd2sucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQodCk6aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4Iix3ay5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsLjc1KndrLmxpbmVfaGVpZ2h0KS50ZXh0KHQpLGErK30pKTt2YXIgbz0xLjUqd2sucmVjdF9wYWRkaW5nK2Eqd2subGluZV9oZWlnaHQqLjc1O3JldHVybiB0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsd2sucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixvKS5hdHRyKCJ5MiIsbykse3RpdGxlTm9kZTppLHk6b319LENrPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIsd2sucmVjdF9wYWRkaW5nKS5hdHRyKCJ5IixyKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTAsbz1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZT4zMCYmYTwzOyl7dmFyIG49dC5zdWJzdHJpbmcoMCwzMCk7ZT0odD10LnN1YnN0cmluZygzMCx0Lmxlbmd0aCkpLmxlbmd0aCxvW28ubGVuZ3RoXT1uLGErK31pZigzPT1hKXt2YXIgcj1vW28ubGVuZ3RoLTFdO29bby5sZW5ndGgtMV09ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC00KSsiLi4uIn1lbHNlIG9bby5sZW5ndGhdPXQ7YT0wfSkpLG8uZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsd2sucmVjdF9wYWRkaW5nKS5hdHRyKCJkeSIsd2subGluZV9oZWlnaHQpLnRleHQodCl9KSksaX0sU2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpfTtjb25zdCBBaz1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10KWZvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspd2tbZVtuXV09dFtlW25dXX0sTWs9ZnVuY3Rpb24odCxlKXtmay5wYXJzZXIueXk9YmssZmsucGFyc2VyLnl5LmNsZWFyKCksZmsucGFyc2VyLnBhcnNlKHQpO3ZhciBuPWF1KCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyFmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsX2suQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGUubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGUubGluZV9oZWlnaHQpLmF0dHIoInkxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGUubGluZV9oZWlnaHQpLmF0dHIoIngxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixfay5BUlJPVysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsZS5saW5lX2hlaWdodCkuYXR0cigicmVmWSIsLjUqZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwXG4gICAgICBMIi5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTSIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBMMCwiKS5jb25jYXQoZS5saW5lX2hlaWdodCkpLmF0dHIoInN0cm9rZS13aWR0aCIsMSl9KG4sd2spO3ZhciByPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMSxjb21wb3VuZDohMSxkaXJlY3RlZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOndrLmxheW91dERpcmVjdGlvbixtYXJnaW54OjIwLG1hcmdpbnk6MjAsbm9kZXNlcDoxMDAsZWRnZXNlcDoxMDAscmFua3NlcDoxMDB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGk9YmsuZ2V0UmVxdWlyZW1lbnRzKCksYT1iay5nZXRFbGVtZW50cygpLHM9YmsuZ2V0UmVsYXRpb25zaGlwcygpOyFmdW5jdGlvbih0LGUsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9dFtyXTtyPVNrKHIpLG8uaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHIpO3ZhciBhPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLHIpLHM9VGsoYSwicmVxLSIrciksYz1bXSx1PUVrKGEscisiX3RpdGxlIixbIjw8Ii5jb25jYXQoaS50eXBlLCI+PiIpLCIiLmNvbmNhdChpLm5hbWUpXSk7Yy5wdXNoKHUudGl0bGVOb2RlKTt2YXIgbD1DayhhLHIrIl9ib2R5IixbIklkOiAiLmNvbmNhdChpLmlkKSwiVGV4dDogIi5jb25jYXQoaS50ZXh0KSwiUmlzazogIi5jb25jYXQoaS5yaXNrKSwiVmVyaWZpY2F0aW9uOiAiLmNvbmNhdChpLnZlcmlmeU1ldGhvZCldLHUueSk7Yy5wdXNoKGwpO3ZhciBoPXMubm9kZSgpLmdldEJCb3goKTtlLnNldE5vZGUocix7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnJ9KX0pKX0oaSxyLG4pLGZ1bmN0aW9uKHQsZSxuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT10W3JdLGE9U2sociksbz1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixhKSxzPSJlbGVtZW50LSIrYSxjPVRrKG8scyksdT1bXSxsPUVrKG8scysiX3RpdGxlIixbIjw8RWxlbWVudD4+IiwiIi5jb25jYXQocildKTt1LnB1c2gobC50aXRsZU5vZGUpO3ZhciBoPUNrKG8scysiX2JvZHkiLFsiVHlwZTogIi5jb25jYXQoaS50eXBlfHwiTm90IFNwZWNpZmllZCIpLCJEb2MgUmVmOiAiLmNvbmNhdChpLmRvY1JlZnx8Ik5vbmUiKV0sbC55KTt1LnB1c2goaCk7dmFyIGY9Yy5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShhLHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6YX0pfSkpfShhLHIsbiksZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVNrKHQuc3JjKSxyPVNrKHQuZHN0KTtlLnNldEVkZ2UobixyLHtyZWxhdGlvbnNoaXA6dH0pfSkpfShzLHIpLF9iKCkubGF5b3V0KHIpLGZ1bmN0aW9uKHQsZSl7ZS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZvaWQgMCE9PW4mJnZvaWQgMCE9PWUubm9kZShuKSYmKHQuc2VsZWN0KCIjIituKSx0LnNlbGVjdCgiIyIrbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShuKS54LWUubm9kZShuKS53aWR0aC8yKSsiLCIrKGUubm9kZShuKS55LWUubm9kZShuKS5oZWlnaHQvMikrIiApIikpfSkpfShuLHIpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uZWRnZShTayhlLnNyYyksU2soZS5kc3QpKSxhPXp1KCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLG89dC5pbnNlcnQoInBhdGgiLCIjIityKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixhKGkucG9pbnRzKSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnR5cGU9PWJrLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM/by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitVbS5nZXRVcmwod2suYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3Iiksby5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVW0uZ2V0VXJsKHdrLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIit4ay5BUlJPVysiX2xpbmVfZW5kaW5nKSIpKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1lLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGE9ZS5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCguNSppKSxvPSJyZWwiK2trO2trKys7dmFyIHM9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixvKS5hdHRyKCJ4IixhLngpLmF0dHIoInkiLGEueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQocikubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsYS54LXMud2lkdGgvMikuYXR0cigieSIsYS55LXMuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0odCxvLDAsIjw8Ii5jb25jYXQoZS50eXBlLCI+PiIpKX0obix0LHIsZSl9KSk7dmFyIGM9d2sucmVjdF9wYWRkaW5nLHU9bi5ub2RlKCkuZ2V0QkJveCgpLGw9dS53aWR0aCsyKmMsaD11LmhlaWdodCsyKmM7enYobixoLGwsd2sudXNlTWF4V2lkdGgpLG4uYXR0cigidmlld0JveCIsIiIuY29uY2F0KHUueC1jLCIgIikuY29uY2F0KHUueS1jLCIgIikuY29uY2F0KGwsIiAiKS5jb25jYXQoaCkpfTt2YXIgTms9big2ODc2KSxEaz1uLm4oTmspLE9rPXZvaWQgMCxCaz17fSxMaz1bXSxJaz1bXSxSaz0iIixGaz0hMSxQaz0hMSxqaz0hMSxZaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1Ca1t0XTtpJiZlPT09aS5uYW1lJiZudWxsPT1ufHwobnVsbCE9biYmbnVsbCE9bi50ZXh0fHwobj17dGV4dDplLHdyYXA6bnVsbCx0eXBlOnJ9KSxudWxsIT1yJiZudWxsIT1uLnRleHR8fChuPXt0ZXh0OmUsd3JhcDpudWxsLHR5cGU6cn0pLEJrW3RdPXtuYW1lOmUsZGVzY3JpcHRpb246bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZIaygpfHwhIW4ud3JhcCxwcmV2QWN0b3I6T2ssbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpyfHwicGFydGljaXBhbnQifSxPayYmQmtbT2tdJiYoQmtbT2tdLm5leHRBY3Rvcj10KSxPaz10KX0sems9ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxMay5sZW5ndGg7ZSsrKUxrW2VdLnR5cGU9PT0kay5BQ1RJVkVfU1RBUlQmJkxrW2VdLmZyb20uYWN0b3I9PT10JiZuKyssTGtbZV0udHlwZT09PSRrLkFDVElWRV9FTkQmJkxrW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LFVrPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09JGsuQUNUSVZFX0VORCl7dmFyIGk9emsodC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiBMay5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmSGsoKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LHFrPWZ1bmN0aW9uKHQpe3JldHVybiBCa1t0XX0sSGs9ZnVuY3Rpb24oKXtyZXR1cm4gamt9LCRrPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sV2s9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXthY3Rvcjp0LHBsYWNlbWVudDplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZIaygpfHwhIW4ud3JhcH0saT1bXS5jb25jYXQodCx0KTtJay5wdXNoKHIpLExrLnB1c2goe2Zyb206aVswXSx0bzppWzFdLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZIaygpfHwhIW4ud3JhcCx0eXBlOiRrLk5PVEUscGxhY2VtZW50OmV9KX0sVms9ZnVuY3Rpb24odCxlKXt2YXIgbj1xayh0KTt0cnl7dmFyIHI9Rm0oZS50ZXh0LEp2KCkpO3I9KHI9ci5yZXBsYWNlKC8mYW1wOy9nLCImIikpLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKSxHayhuLEpTT04ucGFyc2UocikpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0Iix0KX19O2Z1bmN0aW9uIEdrKHQsZSl7aWYobnVsbD09dC5saW5rcyl0LmxpbmtzPWU7ZWxzZSBmb3IodmFyIG4gaW4gZSl0LmxpbmtzW25dPWVbbl19dmFyIFhrPWZ1bmN0aW9uKHQsZSl7dmFyIG49cWsodCk7dHJ5e3ZhciByPUZtKGUudGV4dCxKdigpKTtaayhuLEpTT04ucGFyc2UocikpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0Iix0KX19O2Z1bmN0aW9uIFprKHQsZSl7aWYobnVsbD09dC5wcm9wZXJ0aWVzKXQucHJvcGVydGllcz1lO2Vsc2UgZm9yKHZhciBuIGluIGUpdC5wcm9wZXJ0aWVzW25dPWVbbl19dmFyIFFrPWZ1bmN0aW9uKHQsZSl7dmFyIG49cWsodCkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLnRleHQpO3RyeXt2YXIgaT1yLmlubmVySFRNTCxhPUpTT04ucGFyc2UoaSk7YS5wcm9wZXJ0aWVzJiZaayhuLGEucHJvcGVydGllcyksYS5saW5rcyYmR2sobixhLmxpbmtzKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIsdCl9fSxLaz1mdW5jdGlvbih0KXtSaz10LnRleHQsRms9dm9pZCAwPT09dC53cmFwJiZIaygpfHwhIXQud3JhcH07Y29uc3QgSms9e2FkZEFjdG9yOllrLGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCxlLG4scil7TGsucHVzaCh7ZnJvbTp0LHRvOmUsbWVzc2FnZTpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJkhrKCl8fCEhbi53cmFwLGFuc3dlcjpyfSl9LGFkZFNpZ25hbDpVayxhZGRMaW5rczpWayxhZGREZXRhaWxzOlFrLGFkZFByb3BlcnRpZXM6WGssYXV0b1dyYXA6SGssc2V0V3JhcDpmdW5jdGlvbih0KXtqaz10fSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtQaz0hMH0sc2hvd1NlcXVlbmNlTnVtYmVyczpmdW5jdGlvbigpe3JldHVybiBQa30sZ2V0TWVzc2FnZXM6ZnVuY3Rpb24oKXtyZXR1cm4gTGt9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBCa30sZ2V0QWN0b3I6cWssZ2V0QWN0b3JLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEJrKX0sZ2V0QWN0b3JQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXQmJnZvaWQgMCE9PXQucHJvcGVydGllcylyZXR1cm4gdC5wcm9wZXJ0aWVzW2VdfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBSa30scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3NDLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gSnYoKS5zZXF1ZW5jZX0sZ2V0VGl0bGVXcmFwcGVkOmZ1bmN0aW9uKCl7cmV0dXJuIEZrfSxjbGVhcjpmdW5jdGlvbigpe0JrPXt9LExrPVtdfSxwYXJzZU1lc3NhZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj17dGV4dDplLnJlcGxhY2UoL15bOl0/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6bnVsbCE9PWUubWF0Y2goL15bOl0/d3JhcDovKXx8bnVsbD09PWUubWF0Y2goL15bOl0/bm93cmFwOi8pJiZ2b2lkIDB9O3JldHVybiBvLmRlYnVnKCJwYXJzZU1lc3NhZ2U6IixuKSxufSxMSU5FVFlQRTokayxBUlJPV1RZUEU6e0ZJTExFRDowLE9QRU46MX0sUExBQ0VNRU5UOntMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxhZGROb3RlOldrLHNldFRpdGxlOktrLGFwcGx5OmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlKX0pKTtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2UiYWRkUGFydGljaXBhbnQiOllrKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLCJwYXJ0aWNpcGFudCIpO2JyZWFrO2Nhc2UiYWRkQWN0b3IiOllrKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLCJhY3RvciIpO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmNhc2UiYWN0aXZlRW5kIjpVayhlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOldrKGUuYWN0b3IsZS5wbGFjZW1lbnQsZS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpWayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRBTGluayI6IWZ1bmN0aW9uKHQsZSl7dmFyIG49cWsodCk7dHJ5e3ZhciByPXt9LGk9Rm0oZS50ZXh0LEp2KCkpLGE9aS5pbmRleE9mKCJAIikscz0oaT0oaT1pLnJlcGxhY2UoLyZhbXA7L2csIiYiKSkucmVwbGFjZSgvJmVxdWFsczsvZywiPSIpKS5zbGljZSgwLGEtMSkudHJpbSgpLGM9aS5zbGljZShhKzEpLnRyaW0oKTtyW3NdPWMsR2sobixyKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsdCl9fShlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpYayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGREZXRhaWxzIjpRayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjpVayhlLmZyb20sZS50byxlLm1zZyxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0IjpVayh2b2lkIDAsdm9pZCAwLGUubG9vcFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOmNhc2UicmVjdEVuZCI6Y2FzZSJvcHRFbmQiOmNhc2UiYWx0RW5kIjpjYXNlInBhckVuZCI6VWsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6VWsodm9pZCAwLHZvaWQgMCxlLmNvbG9yLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6VWsodm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOlVrKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRUaXRsZSI6S2soZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6VWsodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKX19fTt2YXIgdFQ9W10sZVQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sblQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTtuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7YVQoImFjdG9yIitlKyJfcG9wdXAiKX0pKSxuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtvVCgiYWN0b3IiK2UrIl9wb3B1cCIpfSkpfSx0VC5wdXNoKG4pfSxyVD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LmFwcGVuZCgiaW1hZ2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIsbik7dmFyIGE9KDAsT20uc2FuaXRpemVVcmwpKHIpO2kuYXR0cigieGxpbms6aHJlZiIsYSl9LGlUPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJ1c2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIsbik7dmFyIGE9KDAsT20uc2FuaXRpemVVcmwpKHIpO2kuYXR0cigieGxpbms6aHJlZiIsIiMiK2EpfSxhVD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtudWxsIT1lJiYoZS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxvVD1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtudWxsIT1lJiYoZS5zdHlsZS5kaXNwbGF5PSJub25lIil9LHNUPWZ1bmN0aW9uKHQsZSl7dmFyIG49MCxyPTAsaT1lLnRleHQuc3BsaXQoVW0ubGluZUJyZWFrUmVnZXgpLGE9W10sbz0wLHM9ZnVuY3Rpb24oKXtyZXR1cm4gZS55fTtpZih2b2lkIDAhPT1lLnZhbGlnbiYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZlLnRleHRNYXJnaW4+MClzd2l0Y2goZS52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55K2UudGV4dE1hcmdpbil9O2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityK2UudGV4dE1hcmdpbikvMil9O2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pfX1pZih2b2lkIDAhPT1lLmFuY2hvciYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZ2b2lkIDAhPT1lLndpZHRoKXN3aXRjaChlLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjplLng9TWF0aC5yb3VuZChlLngrZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0ic3RhcnQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1hZnRlci1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgvMiksZS5hbmNob3I9Im1pZGRsZSIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLWUudGV4dE1hcmdpbiksZS5hbmNob3I9ImVuZCIsZS5kb21pbmFudEJhc2VsaW5lPSJ0ZXh0LWJlZm9yZS1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUifWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdO3ZvaWQgMCE9PWUudGV4dE1hcmdpbiYmMD09PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS5mb250U2l6ZSYmKG89YyplLmZvbnRTaXplKTt2YXIgbD10LmFwcGVuZCgidGV4dCIpO2lmKGwuYXR0cigieCIsZS54KSxsLmF0dHIoInkiLHMoKSksdm9pZCAwIT09ZS5hbmNob3ImJmwuYXR0cigidGV4dC1hbmNob3IiLGUuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsZS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGUuYWxpZ25tZW50QmFzZWxpbmUpLHZvaWQgMCE9PWUuZm9udEZhbWlseSYmbC5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksdm9pZCAwIT09ZS5mb250U2l6ZSYmbC5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSx2b2lkIDAhPT1lLmZvbnRXZWlnaHQmJmwuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHZvaWQgMCE9PWUuZmlsbCYmbC5hdHRyKCJmaWxsIixlLmZpbGwpLHZvaWQgMCE9PWUuY2xhc3MmJmwuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHZvaWQgMCE9PWUuZHk/bC5hdHRyKCJkeSIsZS5keSk6MCE9PW8mJmwuYXR0cigiZHkiLG8pLGUudHNwYW4pe3ZhciBoPWwuYXBwZW5kKCJ0c3BhbiIpO2guYXR0cigieCIsZS54KSx2b2lkIDAhPT1lLmZpbGwmJmguYXR0cigiZmlsbCIsZS5maWxsKSxoLnRleHQodSl9ZWxzZSBsLnRleHQodSk7dm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjAmJihyKz0obC5fZ3JvdXBzfHxsKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0LG49ciksYS5wdXNoKGwpfXJldHVybiBhfSxjVD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIG4uYXR0cigicG9pbnRzIixmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0KyIsIitlKyIgIisodCtuKSsiLCIrZSsiICIrKHQrbikrIiwiKyhlK3ItNykrIiAiKyh0K24tOC40KSsiLCIrKGUrcikrIiAiK3QrIiwiKyhlK3IpfShlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpKSxuLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxlLnk9ZS55K2UuaGVpZ2h0LzIsc1QodCxlKSxufSx1VD0tMSxsVD1mdW5jdGlvbih0LGUpe3Quc2VsZWN0QWxsJiZ0LnNlbGVjdEFsbCgiLmFjdG9yLWxpbmUiKS5hdHRyKCJjbGFzcyIsIjIwMCIpLmF0dHIoInkyIixlLTU1KX0saFQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSxmVD1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sZFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaStvLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyl7Zm9yKHZhciB1PWMuYWN0b3JGb250U2l6ZSxsPWMuYWN0b3JGb250RmFtaWx5LGg9Yy5hY3RvckZvbnRXZWlnaHQsZj10LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsdSkuc3R5bGUoImZvbnQtd2VpZ2h0IixoKS5zdHlsZSgiZm9udC1mYW1pbHkiLGwpO3kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSx5LmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscih5LHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxwVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4pLmF0dHIoInkiLGkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyl7Zm9yKHZhciB1PWMuYWN0b3JGb250U2l6ZSxsPWMuYWN0b3JGb250RmFtaWx5LGg9Yy5hY3RvckZvbnRXZWlnaHQsZj10LnNwbGl0KFVtLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHUpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5IixsKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSx5LmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscih5LHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSwwLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKTtjb25zdCB5VD1lVCxnVD1mdW5jdGlvbih0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLngrZS53aWR0aC8yOzA9PT1lLnkmJih1VCsrLHQuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrdVQpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsODApLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSk7dmFyIGk9dC5hcHBlbmQoImciKTtpLmF0dHIoImNsYXNzIiwiYWN0b3ItbWFuIik7dmFyIGE9e3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9O2EueD1lLngsYS55PWUueSxhLmZpbGw9IiNlYWVhZWEiLGEud2lkdGg9ZS53aWR0aCxhLmhlaWdodD1lLmhlaWdodCxhLmNsYXNzPSJhY3RvciIsYS5yeD0zLGEucnk9MyxpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIit1VCkuYXR0cigieDEiLHIpLmF0dHIoInkxIixlLnkrMjUpLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsZS55KzQ1KSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK3VUKS5hdHRyKCJ4MSIsci0xOCkuYXR0cigieTEiLGUueSszMykuYXR0cigieDIiLHIrMTgpLmF0dHIoInkyIixlLnkrMzMpLGkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHItMTgpLmF0dHIoInkxIixlLnkrNjApLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsZS55KzQ1KSxpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsZS55KzQ1KS5hdHRyKCJ4MiIscisxNikuYXR0cigieTIiLGUueSs2MCk7dmFyIG89aS5hcHBlbmQoImNpcmNsZSIpO28uYXR0cigiY3giLGUueCtlLndpZHRoLzIpLG8uYXR0cigiY3kiLGUueSsxMCksby5hdHRyKCJyIiwxNSksby5hdHRyKCJ3aWR0aCIsZS53aWR0aCksby5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTt2YXIgcz1pLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXMuaGVpZ2h0LGRUKG4pKGUuZGVzY3JpcHRpb24saSxhLngsYS55KzM1LGEud2lkdGgsYS5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LG4pLGUuaGVpZ2h0fSh0LGUsbik7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLngrZS53aWR0aC8yLGk9dC5hcHBlbmQoImciKSxhPWk7MD09PWUueSYmKHVUKyssYS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIit1VCkuYXR0cigieDEiLHIpLmF0dHIoInkxIiw1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksYT1pLmFwcGVuZCgiZyIpLGUuYWN0b3JDbnQ9dVQsbnVsbCE9ZS5saW5rcyYmKGEuYXR0cigiaWQiLCJyb290LSIrdVQpLG5UKCIjcm9vdC0iK3VULHVUKSkpO3ZhciBvPXt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfSxzPSJhY3RvciI7bnVsbCE9ZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuY2xhc3M/cz1lLnByb3BlcnRpZXMuY2xhc3M6by5maWxsPSIjZWFlYWVhIixvLng9ZS54LG8ueT1lLnksby53aWR0aD1lLndpZHRoLG8uaGVpZ2h0PWUuaGVpZ2h0LG8uY2xhc3M9cyxvLnJ4PTMsby5yeT0zO3ZhciBjPWVUKGEsbyk7aWYoZS5yZWN0RGF0YT1vLG51bGwhPWUucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmljb24pe3ZhciB1PWUucHJvcGVydGllcy5pY29uLnRyaW0oKTsiQCI9PT11LmNoYXJBdCgwKT9pVChhLG8ueCtvLndpZHRoLTIwLG8ueSsxMCx1LnN1YnN0cigxKSk6clQoYSxvLngrby53aWR0aC0yMCxvLnkrMTAsdSl9ZFQobikoZS5kZXNjcmlwdGlvbixhLG8ueCxvLnksby53aWR0aCxvLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sbik7dmFyIGw9ZS5oZWlnaHQ7aWYoYy5ub2RlKXt2YXIgaD1jLm5vZGUoKS5nZXRCQm94KCk7ZS5oZWlnaHQ9aC5oZWlnaHQsbD1oLmhlaWdodH1yZXR1cm4gbH0odCxlLG4pfX0sbVQ9ZnVuY3Rpb24odCxlLG4scixpKXtpZih2b2lkIDA9PT1lLmxpbmtzfHxudWxsPT09ZS5saW5rc3x8MD09PU9iamVjdC5rZXlzKGUubGlua3MpLmxlbmd0aClyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH07dmFyIGE9ZS5saW5rcyxvPWUuYWN0b3JDbnQscz1lLnJlY3REYXRhLGM9Im5vbmUiO2kmJihjPSJibG9jayAhaW1wb3J0YW50Iik7dmFyIHU9dC5hcHBlbmQoImciKTt1LmF0dHIoImlkIiwiYWN0b3IiK28rIl9wb3B1cCIpLHUuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLHUuYXR0cigiZGlzcGxheSIsYyksblQoIiNhY3RvciIrbysiX3BvcHVwIixvKTt2YXIgbD0iIjt2b2lkIDAhPT1zLmNsYXNzJiYobD0iICIrcy5jbGFzcyk7dmFyIGg9cy53aWR0aD5uP3Mud2lkdGg6bixmPXUuYXBwZW5kKCJyZWN0Iik7aWYoZi5hdHRyKCJjbGFzcyIsImFjdG9yUG9wdXBNZW51UGFuZWwiK2wpLGYuYXR0cigieCIscy54KSxmLmF0dHIoInkiLHMuaGVpZ2h0KSxmLmF0dHIoImZpbGwiLHMuZmlsbCksZi5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKSxmLmF0dHIoIndpZHRoIixoKSxmLmF0dHIoImhlaWdodCIscy5oZWlnaHQpLGYuYXR0cigicngiLHMucngpLGYuYXR0cigicnkiLHMucnkpLG51bGwhPWEpe3ZhciBkPTIwO2Zvcih2YXIgcCBpbiBhKXt2YXIgeT11LmFwcGVuZCgiYSIpLGc9KDAsT20uc2FuaXRpemVVcmwpKGFbcF0pO3kuYXR0cigieGxpbms6aHJlZiIsZykseS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSxwVChyKShwLHkscy54KzEwLHMuaGVpZ2h0K2QsaCwyMCx7Y2xhc3M6ImFjdG9yIn0sciksZCs9MzB9fXJldHVybiBmLmF0dHIoImhlaWdodCIsZCkse2hlaWdodDpzLmhlaWdodCtkLHdpZHRoOmh9fSx2VD1mdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBlbmQoImciKX0sYlQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYT17eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH0sbz1lLmFuY2hvcmVkO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS5jbGFzcz0iYWN0aXZhdGlvbiIraSUzLGEud2lkdGg9ZS5zdG9weC1lLnN0YXJ0eCxhLmhlaWdodD1uLWUuc3RhcnR5LGVUKG8sYSl9LF9UPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXIuYm94TWFyZ2luLGE9ci5ib3hUZXh0TWFyZ2luLG89ci5sYWJlbEJveEhlaWdodCxzPXIubGFiZWxCb3hXaWR0aCxjPXIubWVzc2FnZUZvbnRGYW1pbHksdT1yLm1lc3NhZ2VGb250U2l6ZSxsPXIubWVzc2FnZUZvbnRXZWlnaHQsaD10LmFwcGVuZCgiZyIpLGY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGguYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHQpLmF0dHIoInkxIixlKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLHIpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07ZihlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxmKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLHZvaWQgMCE9PWUuc2VjdGlvbnMmJmUuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZihlLnN0YXJ0eCx0LnksZS5zdG9weCx0LnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSkpO3ZhciBkPXt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH07ZC50ZXh0PW4sZC54PWUuc3RhcnR4LGQueT1lLnN0YXJ0eSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLndpZHRoPXN8fDUwLGQuaGVpZ2h0PW98fDIwLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9ImxhYmVsVGV4dCIsY1QoaCxkKSwoZD17eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9KS50ZXh0PWUudGl0bGUsZC54PWUuc3RhcnR4K3MvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zdGFydHkraSthLGQuYW5jaG9yPSJtaWRkbGUiLGQudmFsaWduPSJtaWRkbGUiLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9Imxvb3BUZXh0IixkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPSEwO3ZhciBwPXNUKGgsZCk7cmV0dXJuIHZvaWQgMCE9PWUuc2VjdGlvblRpdGxlcyYmZS5zZWN0aW9uVGl0bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7aWYodC5tZXNzYWdlKXtkLnRleHQ9dC5tZXNzYWdlLGQueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zZWN0aW9uc1tuXS55K2krYSxkLmNsYXNzPSJsb29wVGV4dCIsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPWUud3JhcCxwPXNUKGgsZCk7dmFyIHI9TWF0aC5yb3VuZChwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7ZS5zZWN0aW9uc1tuXS5oZWlnaHQrPXItKGkrYSl9fSkpLGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksaH0seFQ9ZnVuY3Rpb24odCxlKXtlVCh0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSx3VD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxrVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxUVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LEVUPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LENUPWZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxTVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxBVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSxNVD1oVCxOVD1mVDtPbS5zYW5pdGl6ZVVybDtOay5wYXJzZXIueXk9Sms7dmFyIERUPXt9LE9UPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsMD09PXRoaXMuYWN0b3JzLmxlbmd0aD9bMF06dGhpcy5hY3RvcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkpKygwPT09dGhpcy5sb29wcy5sZW5ndGg/MDp0aGlzLmxvb3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKSsoMD09PXRoaXMubWVzc2FnZXMubGVuZ3RoPzA6dGhpcy5tZXNzYWdlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm5vdGVzLmxlbmd0aD8wOnRoaXMubm90ZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSxhZGRBY3RvcjpmdW5jdGlvbih0KXt0aGlzLmFjdG9ycy5wdXNoKHQpfSxhZGRMb29wOmZ1bmN0aW9uKHQpe3RoaXMubG9vcHMucHVzaCh0KX0sYWRkTWVzc2FnZTpmdW5jdGlvbih0KXt0aGlzLm1lc3NhZ2VzLnB1c2godCl9LGFkZE5vdGU6ZnVuY3Rpb24odCl7dGhpcy5ub3Rlcy5wdXNoKHQpfSxsYXN0QWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSxsYXN0TG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSxsYXN0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSxsYXN0Tm90ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoLTFdfSxhY3RvcnM6W10sbG9vcHM6W10sbWVzc2FnZXM6W10sbm90ZXM6W119LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxQVChOay5wYXJzZXIueXkuZ2V0Q29uZmlnKCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLGE9MDtmdW5jdGlvbiBvKG8pe3JldHVybiBmdW5jdGlvbihzKXthKys7dmFyIGM9aS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1hKzE7aS51cGRhdGVWYWwocywic3RhcnR5IixlLWMqRFQuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKkRULmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwoT1QuZGF0YSwic3RhcnR4Iix0LWMqRFQuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChPVC5kYXRhLCJzdG9weCIsbitjKkRULmJveE1hcmdpbixNYXRoLm1heCksImFjdGl2YXRpb24iIT09byYmKGkudXBkYXRlVmFsKHMsInN0YXJ0eCIsdC1jKkRULmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHgiLG4rYypEVC5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKE9ULmRhdGEsInN0YXJ0eSIsZS1jKkRULmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoT1QuZGF0YSwic3RvcHkiLHIrYypEVC5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gobygpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2gobygiYWN0aXZhdGlvbiIpKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoT1QuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChPVC5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKE9ULmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChPVC5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LG5ld0FjdGl2YXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5bdC5mcm9tLmFjdG9yXSxpPWpUKHQuZnJvbS5hY3RvcikubGVuZ3RofHwwLGE9ci54K3Iud2lkdGgvMisoaS0xKSpEVC5hY3RpdmF0aW9uV2lkdGgvMjt0aGlzLmFjdGl2YXRpb25zLnB1c2goe3N0YXJ0eDphLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zKzIsc3RvcHg6YStEVC5hY3RpdmF0aW9uV2lkdGgsc3RvcHk6dm9pZCAwLGFjdG9yOnQuZnJvbS5hY3RvcixhbmNob3JlZDp2VChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5Ok9ULmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sQlQ9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxMVD1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LElUPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sUlQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBjPWVbbltzXV07Yy53aWR0aD1jLndpZHRofHxEVC53aWR0aCxjLmhlaWdodD1NYXRoLm1heChjLmhlaWdodHx8RFQuaGVpZ2h0LERULmhlaWdodCksYy5tYXJnaW49Yy5tYXJnaW58fERULmFjdG9yTWFyZ2luLGMueD1pK2EsYy55PXI7dmFyIHU9Z1QodCxjLERUKTtvPU1hdGgubWF4KG8sdSksT1QuaW5zZXJ0KGMueCxyLGMueCtjLndpZHRoLGMuaGVpZ2h0KSxpKz1jLndpZHRoLGErPWMubWFyZ2luLE9ULm1vZGVscy5hZGRBY3RvcihjKX1PVC5idW1wVmVydGljYWxQb3Mobyl9LEZUPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MCxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLHM9VVQobyksYz1tVCh0LG8scyxEVCxEVC5mb3JjZU1lbnVzKTtjLmhlaWdodD5yJiYocj1jLmhlaWdodCksYy53aWR0aCtvLng+aSYmKGk9Yy53aWR0aCtvLngpfXJldHVybnttYXhIZWlnaHQ6cixtYXhXaWR0aDppfX0sUFQ9ZnVuY3Rpb24odCl7THYoRFQsdCksdC5mb250RmFtaWx5JiYoRFQuYWN0b3JGb250RmFtaWx5PURULm5vdGVGb250RmFtaWx5PURULm1lc3NhZ2VGb250RmFtaWx5PXQuZm9udEZhbWlseSksdC5mb250U2l6ZSYmKERULmFjdG9yRm9udFNpemU9RFQubm90ZUZvbnRTaXplPURULm1lc3NhZ2VGb250U2l6ZT10LmZvbnRTaXplKSx0LmZvbnRXZWlnaHQmJihEVC5hY3RvckZvbnRXZWlnaHQ9RFQubm90ZUZvbnRXZWlnaHQ9RFQubWVzc2FnZUZvbnRXZWlnaHQ9dC5mb250V2VpZ2h0KX0salQ9ZnVuY3Rpb24odCl7cmV0dXJuIE9ULmFjdGl2YXRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0b3I9PT10fSkpfSxZVD1mdW5jdGlvbih0LGUpe3ZhciBuPWVbdF0scj1qVCh0KTtyZXR1cm5bci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZS5zdGFydHgpfSksbi54K24ud2lkdGgvMiksci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS5zdG9weCl9KSxuLngrbi53aWR0aC8yKV19O2Z1bmN0aW9uIHpUKHQsZSxuLHIsaSl7T1QuYnVtcFZlcnRpY2FsUG9zKG4pO3ZhciBhPXI7aWYoZS5pZCYmZS5tZXNzYWdlJiZ0W2UuaWRdKXt2YXIgcz10W2UuaWRdLndpZHRoLGM9QlQoRFQpO2UubWVzc2FnZT1Idi53cmFwTGFiZWwoIlsiLmNvbmNhdChlLm1lc3NhZ2UsIl0iKSxzLTIqRFQud3JhcFBhZGRpbmcsYyksZS53aWR0aD1zLGUud3JhcD0hMDt2YXIgdT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhlLm1lc3NhZ2UsYyksbD1NYXRoLm1heCh1LmhlaWdodCxEVC5sYWJlbEJveEhlaWdodCk7YT1yK2wsby5kZWJ1ZygiIi5jb25jYXQobCwiIC0gIikuY29uY2F0KGUubWVzc2FnZSkpfWkoZSksT1QuYnVtcFZlcnRpY2FsUG9zKGEpfXZhciBVVD1mdW5jdGlvbih0KXt2YXIgZT0wLG49SVQoRFQpO2Zvcih2YXIgciBpbiB0LmxpbmtzKXt2YXIgaT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhyLG4pLndpZHRoKzIqRFQud3JhcFBhZGRpbmcrMipEVC5ib3hNYXJnaW47ZTxpJiYoZT1pKX1yZXR1cm4gZX07Y29uc3QgcVQ9e2JvdW5kczpPVCxkcmF3QWN0b3JzOlJULGRyYXdBY3RvcnNQb3B1cDpGVCxzZXRDb25mOlBULGRyYXc6ZnVuY3Rpb24odCxlKXtEVD1KdigpLnNlcXVlbmNlLE5rLnBhcnNlci55eS5jbGVhcigpLE5rLnBhcnNlci55eS5zZXRXcmFwKERULndyYXApLE5rLnBhcnNlci5wYXJzZSh0KyJcbiIpLE9ULmluaXQoKSxvLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KERULG51bGwsMikpKTt2YXIgbj1hdSgnW2lkPSInLmNvbmNhdChlLCciXScpKSxyPU5rLnBhcnNlci55eS5nZXRBY3RvcnMoKSxpPU5rLnBhcnNlci55eS5nZXRBY3RvcktleXMoKSxhPU5rLnBhcnNlci55eS5nZXRNZXNzYWdlcygpLHM9TmsucGFyc2VyLnl5LmdldFRpdGxlKCksYz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHRbZS50b10mJnRbZS5mcm9tXSl7dmFyIHI9dFtlLnRvXTtpZihlLnBsYWNlbWVudD09PU5rLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GJiYhci5wcmV2QWN0b3IpcmV0dXJuO2lmKGUucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GJiYhci5uZXh0QWN0b3IpcmV0dXJuO3ZhciBpPXZvaWQgMCE9PWUucGxhY2VtZW50LGE9IWksbz1pP0xUKERUKTpCVChEVCkscz1lLndyYXA/SHYud3JhcExhYmVsKGUubWVzc2FnZSxEVC53aWR0aC0yKkRULndyYXBQYWRkaW5nLG8pOmUubWVzc2FnZSxjPUh2LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHMsbykud2lkdGgrMipEVC53cmFwUGFkZGluZzthJiZlLmZyb209PT1yLm5leHRBY3Rvcj9uW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYyk6YSYmZS5mcm9tPT09ci5wcmV2QWN0b3I/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTphJiZlLmZyb209PT1lLnRvPyhuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMiksbltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMvMikpOmUucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6ZS5wbGFjZW1lbnQ9PT1Oay5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj9uW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjKTplLnBsYWNlbWVudD09PU5rLnBhcnNlci55eS5QTEFDRU1FTlQuT1ZFUiYmKHIucHJldkFjdG9yJiYobltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYy8yKSksci5uZXh0QWN0b3ImJihuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMikpKX19KSksby5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixuKSxufShyLGEpO0RULmhlaWdodD1mdW5jdGlvbih0LGUpe3ZhciBuPTA7Zm9yKHZhciByIGluIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZV07ci53cmFwJiYoci5kZXNjcmlwdGlvbj1Idi53cmFwTGFiZWwoci5kZXNjcmlwdGlvbixEVC53aWR0aC0yKkRULndyYXBQYWRkaW5nLElUKERUKSkpO3ZhciBpPUh2LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHIuZGVzY3JpcHRpb24sSVQoRFQpKTtyLndpZHRoPXIud3JhcD9EVC53aWR0aDpNYXRoLm1heChEVC53aWR0aCxpLndpZHRoKzIqRFQud3JhcFBhZGRpbmcpLHIuaGVpZ2h0PXIud3JhcD9NYXRoLm1heChpLmhlaWdodCxEVC5oZWlnaHQpOkRULmhlaWdodCxuPU1hdGgubWF4KG4sci5oZWlnaHQpfSkpLGUpe3ZhciBpPXRbcl07aWYoaSl7dmFyIGE9dFtpLm5leHRBY3Rvcl07aWYoYSl7dmFyIG89ZVtyXStEVC5hY3Rvck1hcmdpbi1pLndpZHRoLzItYS53aWR0aC8yO2kubWFyZ2luPU1hdGgubWF4KG8sRFQuYWN0b3JNYXJnaW4pfX19cmV0dXJuIE1hdGgubWF4KG4sRFQuaGVpZ2h0KX0ocixjKSxTVChuKSxDVChuKSxBVChuKSxSVChuLHIsaSwwKTt2YXIgdT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LHM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9SHYucmFuZG9tKHtsZW5ndGg6MTB9KSx0LnR5cGUpe2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmNhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6cy5wdXNoKHtpZDp0LmlkLG1zZzp0Lm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDp0Lm1lc3NhZ2UmJihuPXMucG9wKCksYVtuLmlkXT1uLGFbdC5pZF09bixzLnB1c2gobikpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuT1BUX0VORDpjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOm49cy5wb3AoKSxhW24uaWRdPW47YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOnZhciBjPWVbdC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yXSx1PWpUKHQuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3RvcikubGVuZ3RoLGw9Yy54K2Mud2lkdGgvMisodS0xKSpEVC5hY3RpdmF0aW9uV2lkdGgvMixoPXtzdGFydHg6bCxzdG9weDpsK0RULmFjdGl2YXRpb25XaWR0aCxhY3Rvcjp0LmZyb20uYWN0b3IsZW5hYmxlZDohMH07T1QuYWN0aXZhdGlvbnMucHVzaChoKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfRU5EOnZhciBmPU9ULmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtkZWxldGUgT1QuYWN0aXZhdGlvbnMuc3BsaWNlKGYsMSlbMF19dm9pZCAwIT09dC5wbGFjZW1lbnQ/KHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3QuZnJvbV0ueCxyPWVbdC50b10ueCxpPXQud3JhcCYmdC5tZXNzYWdlLGE9SHYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9Idi53cmFwTGFiZWwodC5tZXNzYWdlLERULndpZHRoLExUKERUKSk6dC5tZXNzYWdlLExUKERUKSkscz17d2lkdGg6aT9EVC53aWR0aDpNYXRoLm1heChEVC53aWR0aCxhLndpZHRoKzIqRFQubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhzLndpZHRoPWk/TWF0aC5tYXgoRFQud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipEVC5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrRFQuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09TmsucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KHMud2lkdGg9aT9NYXRoLm1heChEVC53aWR0aCxhLndpZHRoKzIqRFQubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipEVC5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uLXMud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1EVC5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpP0h2LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoRFQud2lkdGgsZVt0LmZyb21dLndpZHRoKSxMVChEVCkpOnQubWVzc2FnZSxMVChEVCkpLHMud2lkdGg9aT9NYXRoLm1heChEVC53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxEVC53aWR0aCxhLndpZHRoKzIqRFQubm90ZU1hcmdpbikscy5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLXMud2lkdGgpLzIpOihzLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkrRFQuYWN0b3JNYXJnaW4scy5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItRFQuYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1EVC5hY3Rvck1hcmdpbi8yKSxpJiYocy5tZXNzYWdlPUh2LndyYXBMYWJlbCh0Lm1lc3NhZ2Uscy53aWR0aC0yKkRULndyYXBQYWRkaW5nLExUKERUKSkpLG8uZGVidWcoIk5NOlsiLmNvbmNhdChzLnN0YXJ0eCwiLCIpLmNvbmNhdChzLnN0b3B4LCIsIikuY29uY2F0KHMuc3RhcnR5LCIsIikuY29uY2F0KHMuc3RvcHksIjoiKS5jb25jYXQocy53aWR0aCwiLCIpLmNvbmNhdChzLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksc30odCxlKSx0Lm5vdGVNb2RlbD1yLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1EVC5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtOay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixOay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4sTmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsTmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsTmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1ZVCh0LmZyb20sZSksaT1ZVCh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPUh2LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKkRULndyYXBQYWRkaW5nLERULndpZHRoKSxCVChEVCkpKTt2YXIgdT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsQlQoRFQpKTtyZXR1cm57d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKkRULndyYXBQYWRkaW5nLGMrMipEVC53cmFwUGFkZGluZyxEVC53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJnMubGVuZ3RoPjAmJnMuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktRFQubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktRFQubGFiZWxCb3hXaWR0aH0pKSl9KSksT1QuYWN0aXZhdGlvbnM9W10sby5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9KGEscik7d1QobiksRVQobiksa1QobiksVFQobik7dmFyIGw9MTthLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLGksYTtzd2l0Y2godC50eXBlKXtjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5OT1RFOmk9dC5ub3RlTW9kZWwsZnVuY3Rpb24odCxlKXtPVC5idW1wVmVydGljYWxQb3MoRFQuYm94TWFyZ2luKSxlLmhlaWdodD1EVC5ib3hNYXJnaW4sZS5zdGFydHk9T1QuZ2V0VmVydGljYWxQb3MoKTt2YXIgbj1OVCgpO24ueD1lLnN0YXJ0eCxuLnk9ZS5zdGFydHksbi53aWR0aD1lLndpZHRofHxEVC53aWR0aCxuLmNsYXNzPSJub3RlIjt2YXIgcj10LmFwcGVuZCgiZyIpLGk9eVQocixuKSxhPU1UKCk7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLndpZHRoPW4ud2lkdGgsYS5keT0iMWVtIixhLnRleHQ9ZS5tZXNzYWdlLGEuY2xhc3M9Im5vdGVUZXh0IixhLmZvbnRGYW1pbHk9RFQubm90ZUZvbnRGYW1pbHksYS5mb250U2l6ZT1EVC5ub3RlRm9udFNpemUsYS5mb250V2VpZ2h0PURULm5vdGVGb250V2VpZ2h0LGEuYW5jaG9yPURULm5vdGVBbGlnbixhLnRleHRNYXJnaW49RFQubm90ZU1hcmdpbixhLnZhbGlnbj1EVC5ub3RlQWxpZ247dmFyIG89c1QocixhKSxzPU1hdGgucm91bmQoby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0Ll9ncm91cHN8fHQpWzBdWzBdLmdldEJCb3goKS5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpO2kuYXR0cigiaGVpZ2h0IixzKzIqRFQubm90ZU1hcmdpbiksZS5oZWlnaHQrPXMrMipEVC5ub3RlTWFyZ2luLE9ULmJ1bXBWZXJ0aWNhbFBvcyhzKzIqRFQubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStzKzIqRFQubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K24ud2lkdGgsT1QuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksT1QubW9kZWxzLmFkZE5vdGUoZSl9KG4saSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOk9ULm5ld0FjdGl2YXRpb24odCxuLHIpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9T1QuZW5kQWN0aXZhdGlvbih0KTtyLnN0YXJ0eSsxOD5lJiYoci5zdGFydHk9ZS02LGUrPTEyKSxiVChuLHIsZSxEVCxqVCh0LmZyb20uYWN0b3IpLmxlbmd0aCksT1QuaW5zZXJ0KHIuc3RhcnR4LGUtMTAsci5zdG9weCxlKX0odCxPVC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOnpUKHUsdCxEVC5ib3hNYXJnaW4sRFQuYm94TWFyZ2luK0RULmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmU9T1QuZW5kTG9vcCgpLF9UKG4sZSwibG9vcCIsRFQpLE9ULmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LU9ULmdldFZlcnRpY2FsUG9zKCkpLE9ULm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQ6elQodSx0LERULmJveE1hcmdpbixEVC5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5uZXdMb29wKHZvaWQgMCx0Lm1lc3NhZ2UpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfRU5EOmU9T1QuZW5kTG9vcCgpLHhUKG4sZSksT1QubW9kZWxzLmFkZExvb3AoZSksT1QuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktT1QuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOnpUKHUsdCxEVC5ib3hNYXJnaW4sRFQuYm94TWFyZ2luK0RULmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1PVC5lbmRMb29wKCksX1QobixlLCJvcHQiLERUKSxPVC5idW1wVmVydGljYWxQb3MoZS5zdG9weS1PVC5nZXRWZXJ0aWNhbFBvcygpKSxPVC5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6elQodSx0LERULmJveE1hcmdpbixEVC5ib3hNYXJnaW4rRFQuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIE9ULm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6elQodSx0LERULmJveE1hcmdpbitEVC5ib3hUZXh0TWFyZ2luLERULmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIE9ULmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBOay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPU9ULmVuZExvb3AoKSxfVChuLGUsImFsdCIsRFQpLE9ULmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LU9ULmdldFZlcnRpY2FsUG9zKCkpLE9ULm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDp6VCh1LHQsRFQuYm94TWFyZ2luLERULmJveE1hcmdpbitEVC5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gT1QubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIE5rLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOnpUKHUsdCxEVC5ib3hNYXJnaW4rRFQuYm94VGV4dE1hcmdpbixEVC5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBPVC5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgTmsucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1PVC5lbmRMb29wKCksX1QobixlLCJwYXIiLERUKSxPVC5idW1wVmVydGljYWxQb3MoZS5zdG9weS1PVC5nZXRWZXJ0aWNhbFBvcygpKSxPVC5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9T1QuZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9bCxmdW5jdGlvbih0LGUpe09ULmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1VbS5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT1Idi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLEJUKERUKSksbD11LmhlaWdodC9jO2UuaGVpZ2h0Kz1sLE9ULmJ1bXBWZXJ0aWNhbFBvcyhsKTt2YXIgaD1NVCgpO2gueD1uLGgueT1pKzEwLGgud2lkdGg9ci1uLGguY2xhc3M9Im1lc3NhZ2VUZXh0IixoLmR5PSIxZW0iLGgudGV4dD1hLGguZm9udEZhbWlseT1EVC5tZXNzYWdlRm9udEZhbWlseSxoLmZvbnRTaXplPURULm1lc3NhZ2VGb250U2l6ZSxoLmZvbnRXZWlnaHQ9RFQubWVzc2FnZUZvbnRXZWlnaHQsaC5hbmNob3I9RFQubWVzc2FnZUFsaWduLGgudmFsaWduPURULm1lc3NhZ2VBbGlnbixoLnRleHRNYXJnaW49RFQud3JhcFBhZGRpbmcsaC50c3Bhbj0hMSxzVCh0LGgpO3ZhciBmLGQscD11LmhlaWdodC0xMCx5PXUud2lkdGg7aWYobj09PXIpe2Q9T1QuZ2V0VmVydGljYWxQb3MoKStwLERULnJpZ2h0QW5nbGVzP2Y9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAgIi5jb25jYXQobiwiLCIpLmNvbmNhdChkLCIgSCAiKS5jb25jYXQobitNYXRoLm1heChEVC53aWR0aC8yLHkvMiksIiBWICIpLmNvbmNhdChkKzI1LCIgSCAiKS5jb25jYXQobikpOihwKz1EVC5ib3hNYXJnaW4sZD1PVC5nZXRWZXJ0aWNhbFBvcygpK3AsZj10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrbisiLCIrZCsiIEMgIisobis2MCkrIiwiKyhkLTEwKSsiICIrKG4rNjApKyIsIisoZCszMCkrIiAiK24rIiwiKyhkKzIwKSkpLHArPTMwO3ZhciBnPU1hdGgubWF4KHkvMixEVC53aWR0aC8yKTtPVC5pbnNlcnQobi1nLE9ULmdldFZlcnRpY2FsUG9zKCktMTArcCxyK2csT1QuZ2V0VmVydGljYWxQb3MoKSszMCtwKX1lbHNlIHArPURULmJveE1hcmdpbixkPU9ULmdldFZlcnRpY2FsUG9zKCkrcCwoZj10LmFwcGVuZCgibGluZSIpKS5hdHRyKCJ4MSIsbiksZi5hdHRyKCJ5MSIsZCksZi5hdHRyKCJ4MiIsciksZi5hdHRyKCJ5MiIsZCksT1QuaW5zZXJ0KG4sZC0xMCxyLGQpO289PT1Oay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxvPT09TmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8bz09PU5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlR8fG89PT1Oay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4/KGYuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIiksZi5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMSIpKTpmLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUwIik7dmFyIG09IiI7RFQuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKG09KG09KG09d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZi5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLGYuYXR0cigic3Ryb2tlIiwibm9uZSIpLGYuc3R5bGUoImZpbGwiLCJub25lIiksbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRCYmbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUR8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiNhcnJvd2hlYWQpIiksbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9QT0lOVCYmbyE9PU5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlR8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiNmaWxsZWQtaGVhZCkiKSxvIT09TmsucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTJiZvIT09TmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Nyb3NzaGVhZCkiKSwoSmsuc2hvd1NlcXVlbmNlTnVtYmVycygpfHxEVC5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGYuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIsZCs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0TGVuZ3RoIiwiMTZweCIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KHMpKSxPVC5idW1wVmVydGljYWxQb3MocCksZS5oZWlnaHQrPXAsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxPVC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSl9KG4sYSksT1QubW9kZWxzLmFkZE1lc3NhZ2UoYSl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlIix0KX19W05rLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLE5rLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTixOay5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsTmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCxOay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsTmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxOay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfUE9JTlQsTmsucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXModC50eXBlKSYmbCsrfSkpLERULm1pcnJvckFjdG9ycyYmKE9ULmJ1bXBWZXJ0aWNhbFBvcygyKkRULmJveE1hcmdpbiksUlQobixyLGksT1QuZ2V0VmVydGljYWxQb3MoKSksT1QuYnVtcFZlcnRpY2FsUG9zKERULmJveE1hcmdpbiksbFQobixPVC5nZXRWZXJ0aWNhbFBvcygpKSk7dmFyIGg9RlQobixyLGkpLGY9T1QuZ2V0Qm91bmRzKCkuYm91bmRzO28uZGVidWcoIkZvciBsaW5lIGhlaWdodCBmaXggUXVlcnlpbmc6ICMiK2UrIiAuYWN0b3ItbGluZSIpLG91KCIjIitlKyIgLmFjdG9yLWxpbmUiKS5hdHRyKCJ5MiIsZi5zdG9weSk7dmFyIGQ9Zi5zdG9weS1mLnN0YXJ0eTtkPGgubWF4SGVpZ2h0JiYoZD1oLm1heEhlaWdodCk7dmFyIHA9ZCsyKkRULmRpYWdyYW1NYXJnaW5ZO0RULm1pcnJvckFjdG9ycyYmKHA9cC1EVC5ib3hNYXJnaW4rRFQuYm90dG9tTWFyZ2luQWRqKTt2YXIgeT1mLnN0b3B4LWYuc3RhcnR4O3k8aC5tYXhXaWR0aCYmKHk9aC5tYXhXaWR0aCk7dmFyIGc9eSsyKkRULmRpYWdyYW1NYXJnaW5YO3MmJm4uYXBwZW5kKCJ0ZXh0IikudGV4dChzKS5hdHRyKCJ4IiwoZi5zdG9weC1mLnN0YXJ0eCkvMi0yKkRULmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLHp2KG4scCxnLERULnVzZU1heFdpZHRoKTt2YXIgbT1zPzQwOjA7bi5hdHRyKCJ2aWV3Qm94IixmLnN0YXJ0eC1EVC5kaWFncmFtTWFyZ2luWCsiIC0iKyhEVC5kaWFncmFtTWFyZ2luWSttKSsiICIrZysiICIrKHArbSkpLG8uZGVidWcoIm1vZGVsczoiLE9ULm1vZGVscyl9fTt2YXIgSFQ9bigzNTg0KSwkVD1uLm4oSFQpO2Z1bmN0aW9uIFdUKHQpe3JldHVybiBXVD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sV1QodCl9dmFyIFZUPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sR1Q9W10sWFQ9ZnVuY3Rpb24gdChlLG4scil7aWYoInJlbGF0aW9uIj09PW4uc3RtdCl0KGUsbi5zdGF0ZTEsITApLHQoZSxuLnN0YXRlMiwhMSk7ZWxzZSBpZigic3RhdGUiPT09bi5zdG10JiYiWypdIj09PW4uaWQmJihuLmlkPXI/ZS5pZCsiX3N0YXJ0IjplLmlkKyJfZW5kIixuLnN0YXJ0PXIpLG4uZG9jKXt2YXIgaT1bXSxhPTAsbz1bXTtmb3IoYT0wO2E8bi5kb2MubGVuZ3RoO2ErKylpZigiZGl2aWRlciI9PT1uLmRvY1thXS50eXBlKXt2YXIgcz1WVChuLmRvY1thXSk7cy5kb2M9VlQobyksaS5wdXNoKHMpLG89W119ZWxzZSBvLnB1c2gobi5kb2NbYV0pO2lmKGkubGVuZ3RoPjAmJm8ubGVuZ3RoPjApe3ZhciBjPXtzdG10OiJzdGF0ZSIsaWQ6T3YoKSx0eXBlOiJkaXZpZGVyIixkb2M6VlQobyl9O2kucHVzaChWVChjKSksbi5kb2M9aX1uLmRvYy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdChuLGUsITApfSkpfX0sWlQ9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0sUVQ9WlQucm9vdCxLVD0wLEpUPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09UVQuc3RhdGVzW3RdP1FULnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KFFULnN0YXRlc1t0XS5kb2N8fChRVC5zdGF0ZXNbdF0uZG9jPW4pLFFULnN0YXRlc1t0XS50eXBlfHwoUVQuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihvLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZuRSh0LHIudHJpbSgpKSwib2JqZWN0Ij09PVdUKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBuRSh0LGUudHJpbSgpKX0pKSksaSYmKFFULnN0YXRlc1t0XS5ub3RlPWksUVQuc3RhdGVzW3RdLm5vdGUudGV4dD1VbS5zYW5pdGl6ZVRleHQoUVQuc3RhdGVzW3RdLm5vdGUudGV4dCxKdigpKSl9LHRFPWZ1bmN0aW9uKCl7UVQ9KFpUPXtyb290OntyZWxhdGlvbnM6W10sc3RhdGVzOnt9LGRvY3VtZW50czp7fX19KS5yb290LFFUPVpULnJvb3QsS1Q9MCxpRT1bXX0sZUU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKytLVCxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrS1Qsbz0iZW5kIiksSlQocixhKSxKVChpLG8pLFFULnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpVbS5zYW5pdGl6ZVRleHQobixKdigpKX0pfSxuRT1mdW5jdGlvbih0LGUpe3ZhciBuPVFULnN0YXRlc1t0XSxyPWU7IjoiPT09clswXSYmKHI9ci5zdWJzdHIoMSkudHJpbSgpKSxuLmRlc2NyaXB0aW9ucy5wdXNoKFVtLnNhbml0aXplVGV4dChyLEp2KCkpKX0sckU9MCxpRT1bXSxhRT0iVEIiO2NvbnN0IG9FPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBKdigpLnN0YXRlfSxhZGRTdGF0ZTpKVCxjbGVhcjp0RSxnZXRTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gUVQuc3RhdGVzW3RdfSxnZXRTdGF0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gUVQuc3RhdGVzfSxnZXRSZWxhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gUVQucmVsYXRpb25zfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGlFfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gYUV9LGFkZFJlbGF0aW9uOmVFLGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrckV9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXthRT10fSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigyKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOntBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxsb2dEb2N1bWVudHM6ZnVuY3Rpb24oKXtvLmluZm8oIkRvY3VtZW50cyA9ICIsWlQpfSxnZXRSb290RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIEdUfSxzZXRSb290RG9jOmZ1bmN0aW9uKHQpe28uaW5mbygiU2V0dGluZyByb290IGRvYyIsdCksR1Q9dH0sZ2V0Um9vdERvY1YyOmZ1bmN0aW9uKCl7cmV0dXJuIFhUKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOkdUfSwhMCkse2lkOiJyb290Iixkb2M6R1R9fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxvLmluZm8oZSksdEUoKSxvLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmSlQodC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJmVFKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX07dmFyIHNFPXt9O2Z1bmN0aW9uIGNFKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIHVFLGxFPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPUp2KCkuc3RhdGUucGFkZGluZyxhPTIqSnYoKS5zdGF0ZS5wYWRkaW5nLG89dC5ub2RlKCkuZ2V0QkJveCgpLHM9by53aWR0aCxjPW8ueCx1PXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsSnYoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLEp2KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLGw9dS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK2EsaD1NYXRoLm1heChsLHMpO2g9PT1zJiYoaCs9YSk7dmFyIGY9dC5ub2RlKCkuZ2V0QkJveCgpO2UuZG9jLHI9Yy1pLGw+cyYmKHI9KHMtaCkvMitpKSxNYXRoLmFicyhjLWYueCk8aSYmbD5zJiYocj1jLShsLXMpLzIpO3ZhciBkPTEtSnYoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLGQpLmF0dHIoImNsYXNzIixuPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K0p2KCkuc3RhdGUudGV4dEhlaWdodCtKdigpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksdS5hdHRyKCJ4IixyK2kpLGw8PXMmJnUuYXR0cigieCIsYysoaC1hKS8yLWwvMitpKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLEp2KCkuc3RhdGUudGl0bGVTaGlmdC1KdigpLnN0YXRlLnRleHRIZWlnaHQtSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IiwzKkp2KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLEp2KCkuc3RhdGUucmFkaXVzKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLEp2KCkuc3RhdGUudGl0bGVTaGlmdC1KdigpLnN0YXRlLnRleHRIZWlnaHQtSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCszKzIqSnYoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsSnYoKS5zdGF0ZS5yYWRpdXMpLHR9LGhFPWZ1bmN0aW9uKHQsZSl7ZS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTt2YXIgbj1lLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLEp2KCkuc3RhdGUucGFkZGluZykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0wLGE9ci5hcHBlbmQoInRleHQiKTthLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksYS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7dmFyIG8scz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxjPShzPXMucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoVW0ubGluZUJyZWFrUmVnZXgpLHU9MS4yNSpKdigpLnN0YXRlLm5vdGVNYXJnaW4sbD1mdW5jdGlvbih0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGNFKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/Y0UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KGMpO3RyeXtmb3IobC5zKCk7IShvPWwubigpKS5kb25lOyl7dmFyIGg9by52YWx1ZS50cmltKCk7aWYoaC5sZW5ndGg+MCl7dmFyIGY9YS5hcHBlbmQoInRzcGFuIik7Zi50ZXh0KGgpLDA9PT11JiYodSs9Zi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCksaSs9dSxmLmF0dHIoIngiLDArSnYoKS5zdGF0ZS5ub3RlTWFyZ2luKSxmLmF0dHIoInkiLDAraSsxLjI1Kkp2KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm57dGV4dFdpZHRoOmEubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0Oml9fSh0LDAsMCxlLmFwcGVuZCgiZyIpKSxpPXIudGV4dFdpZHRoLGE9ci50ZXh0SGVpZ2h0O3JldHVybiBuLmF0dHIoImhlaWdodCIsYSsyKkp2KCkuc3RhdGUubm90ZU1hcmdpbiksbi5hdHRyKCJ3aWR0aCIsaSsyKkp2KCkuc3RhdGUubm90ZU1hcmdpbiksbn0sZkU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmlkLHI9e2lkOm4sbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxpPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLG4pLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpOyJzdGFydCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIsSnYoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLEp2KCkuc3RhdGUucGFkZGluZytKdigpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIsSnYoKS5zdGF0ZS5wYWRkaW5nK0p2KCkuc3RhdGUuc2l6ZVVuaXQpfShpKSwiZW5kIj09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsSnYoKS5zdGF0ZS5zaXplVW5pdCtKdigpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsSnYoKS5zdGF0ZS5wYWRkaW5nK0p2KCkuc3RhdGUuc2l6ZVVuaXQrSnYoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLEp2KCkuc3RhdGUucGFkZGluZytKdigpLnN0YXRlLnNpemVVbml0K0p2KCkuc3RhdGUubWluaVBhZGRpbmcpLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLEp2KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixKdigpLnN0YXRlLnBhZGRpbmcrSnYoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsSnYoKS5zdGF0ZS5wYWRkaW5nK0p2KCkuc3RhdGUuc2l6ZVVuaXQrMil9KGkpLCJmb3JrIiE9PWUudHlwZSYmImpvaW4iIT09ZS50eXBlfHxmdW5jdGlvbih0LGUpe3ZhciBuPUp2KCkuc3RhdGUuZm9ya1dpZHRoLHI9SnYoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGUucGFyZW50SWQpe3ZhciBpPW47bj1yLHI9aX10LmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIsbikuYXR0cigiaGVpZ2h0IixyKS5hdHRyKCJ4IixKdigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLEp2KCkuc3RhdGUucGFkZGluZyl9KGksZSksIm5vdGUiPT09ZS50eXBlJiZoRShlLm5vdGUudGV4dCxpKSwiZGl2aWRlciI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIsSnYoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIsMipKdigpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCl9KGkpLCJkZWZhdWx0Ij09PWUudHlwZSYmMD09PWUuZGVzY3JpcHRpb25zLmxlbmd0aCYmZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixKdigpLnN0YXRlLnRleHRIZWlnaHQrMipKdigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsSnYoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCsyKkp2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCsyKkp2KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLEp2KCkuc3RhdGUucmFkaXVzKX0oaSxlKSwiZGVmYXVsdCI9PT1lLnR5cGUmJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipKdigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLEp2KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLEp2KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpKdigpLnN0YXRlLnBhZGRpbmcrSnYoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK0p2KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqSnYoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KGUpO258fHIuYXR0cigiZHkiLEp2KCkuc3RhdGUudGV4dEhlaWdodCl9KGksdCxvKSxvPSExKSxhPSExfSkpO3ZhciBzPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLEp2KCkuc3RhdGUucGFkZGluZytyK0p2KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsSnYoKS5zdGF0ZS5wYWRkaW5nK3IrSnYoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGM9aS5ub2RlKCkuZ2V0QkJveCgpLHU9TWF0aC5tYXgoYy53aWR0aCxuLndpZHRoKTtzLmF0dHIoIngyIix1KzMqSnYoKS5zdGF0ZS5wYWRkaW5nKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLEp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsdSsyKkp2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixjLmhlaWdodCtyKzIqSnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsSnYoKS5zdGF0ZS5yYWRpdXMpfShpLGUpO3ZhciBhLG89aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPW8ud2lkdGgrMipKdigpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9by5oZWlnaHQrMipKdigpLnN0YXRlLnBhZGRpbmcsYT1yLHNFW25dPWEscn0sZEU9MDtIVC5wYXJzZXIueXk9b0U7dmFyIHBFPXt9LHlFPWZ1bmN0aW9uIHQoZSxuLHIsaSl7dmFyIGEscz1uZXcod2IoKS5HcmFwaCkoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KSxjPSEwO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoInJlbGF0aW9uIj09PWVbYV0uc3RtdCl7Yz0hMTticmVha31yP3Muc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpjPzE6dUUuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmM/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpzLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmM/MTp1RS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Yz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSkscy5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLG9FLmV4dHJhY3QoZSk7Zm9yKHZhciB1PW9FLmdldFN0YXRlcygpLGw9b0UuZ2V0UmVsYXRpb25zKCksaD1PYmplY3Qua2V5cyh1KSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPXVbaFtmXV07ciYmKGQucGFyZW50SWQ9cik7dmFyIHA9dm9pZCAwO2lmKGQuZG9jKXt2YXIgeT1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixkLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtwPXQoZC5kb2MseSxkLmlkLCFpKTt2YXIgZz0oeT1sRSh5LGQsaSkpLm5vZGUoKS5nZXRCQm94KCk7cC53aWR0aD1nLndpZHRoLHAuaGVpZ2h0PWcuaGVpZ2h0K3VFLnBhZGRpbmcvMixwRVtkLmlkXT17eTp1RS5jb21wb3NpdFRpdGxlU2l6ZX19ZWxzZSBwPWZFKG4sZCk7aWYoZC5ub3RlKXt2YXIgbT17ZGVzY3JpcHRpb25zOltdLGlkOmQuaWQrIi1ub3RlIixub3RlOmQubm90ZSx0eXBlOiJub3RlIn0sdj1mRShuLG0pOyJsZWZ0IG9mIj09PWQubm90ZS5wb3NpdGlvbj8ocy5zZXROb2RlKHAuaWQrIi1ub3RlIix2KSxzLnNldE5vZGUocC5pZCxwKSk6KHMuc2V0Tm9kZShwLmlkLHApLHMuc2V0Tm9kZShwLmlkKyItbm90ZSIsdikpLHMuc2V0UGFyZW50KHAuaWQscC5pZCsiLWdyb3VwIikscy5zZXRQYXJlbnQocC5pZCsiLW5vdGUiLHAuaWQrIi1ncm91cCIpfWVsc2Ugcy5zZXROb2RlKHAuaWQscCl9by5kZWJ1ZygiQ291bnQ9IixzLm5vZGVDb3VudCgpLHMpO3ZhciBiPTA7bC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZTtiKyssby5kZWJ1ZygiU2V0dGluZyBlZGdlIix0KSxzLnNldEVkZ2UodC5pZDEsdC5pZDIse3JlbGF0aW9uOnQsd2lkdGg6KGU9dC50aXRsZSxlP2UubGVuZ3RoKnVFLmZvbnRTaXplRmFjdG9yOjEpLGhlaWdodDp1RS5sYWJlbEhlaWdodCpVbS5nZXRSb3dzKHQudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrYil9KSksX2IoKS5sYXlvdXQocyksby5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixzLm5vZGVzKCkpO3ZhciBfPW4ubm9kZSgpO3Mubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1zLm5vZGUodCk/KG8ud2FybigiTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKSxhdSgiIyIrXy5pZCsiICMiK3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMikrIiwiKyhzLm5vZGUodCkueSsocEVbdF0/cEVbdF0ueTowKS1zLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpLGF1KCIjIitfLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrXy5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6by5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKX0pKTt2YXIgeD1fLmdldEJCb3goKTtzLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09cy5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkocy5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9enUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoVnUpLGE9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixpKHIpKS5hdHRyKCJpZCIsImVkZ2UiK2RFKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKSxzPSIiO2lmKEp2KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2Ugb0UucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBvRS5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2Ugb0UucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBvRS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fShvRS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSkrIkVuZCkiKSx2b2lkIDAhPT1uLnRpdGxlKXtmb3IodmFyIGM9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx1PUh2LmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxsPXUueCxoPXUueSxmPVVtLmdldFJvd3Mobi50aXRsZSksZD0wLHA9W10seT0wLGc9MCxtPTA7bTw9Zi5sZW5ndGg7bSsrKXt2YXIgdj1jLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChmW21dKS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixoK2QpLGI9di5ub2RlKCkuZ2V0QkJveCgpO2lmKHk9TWF0aC5tYXgoeSxiLndpZHRoKSxnPU1hdGgubWluKGcsYi54KSxvLmluZm8oYi54LGwsaCtkKSwwPT09ZCl7dmFyIF89di5ub2RlKCkuZ2V0QkJveCgpO2Q9Xy5oZWlnaHQsby5pbmZvKCJUaXRsZSBoZWlnaHQiLGQsaCl9cC5wdXNoKHYpfXZhciB4PWQqZi5sZW5ndGg7aWYoZi5sZW5ndGg+MSl7dmFyIHc9KGYubGVuZ3RoLTEpKmQqLjU7cC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmF0dHIoInkiLGgrZSpkLXcpfSkpLHg9ZCpmLmxlbmd0aH12YXIgaz1jLm5vZGUoKS5nZXRCQm94KCk7Yy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGwteS8yLUp2KCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixoLXgvMi1KdigpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIix5K0p2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix4K0p2KCkuc3RhdGUucGFkZGluZyksby5pbmZvKGspfWRFKyt9KG4scy5lZGdlKHQpLHMuZWRnZSh0KS5yZWxhdGlvbikpfSkpLHg9Xy5nZXRCQm94KCk7dmFyIHc9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHcud2lkdGg9eC53aWR0aCsyKnVFLnBhZGRpbmcsdy5oZWlnaHQ9eC5oZWlnaHQrMip1RS5wYWRkaW5nLG8uZGVidWcoIkRvYyByZW5kZXJlZCIsdyxzKSx3fTtjb25zdCBnRT1mdW5jdGlvbih0LGUpe3VFPUp2KCkuc3RhdGUsSFQucGFyc2VyLnl5LmNsZWFyKCksSFQucGFyc2VyLnBhcnNlKHQpLG8uZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG49YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpLG5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPW9FLmdldFJvb3REb2MoKTt5RShyLG4sdm9pZCAwLCExKTt2YXIgaT11RS5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCsyKmksYz1hLmhlaWdodCsyKmk7enYobixjLDEuNzUqcyx1RS51c2VNYXhXaWR0aCksbi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYS54LXVFLnBhZGRpbmcsIiAgIikuY29uY2F0KGEueS11RS5wYWRkaW5nLCIgIikrcysiICIrYyl9O3ZhciBtRT17fSx2RT17fSxiRT1mdW5jdGlvbih0LGUsbixyKXtpZigicm9vdCIhPT1uLmlkKXt2YXIgaT0icmVjdCI7ITA9PT1uLnN0YXJ0JiYoaT0ic3RhcnQiKSwhMT09PW4uc3RhcnQmJihpPSJlbmQiKSwiZGVmYXVsdCIhPT1uLnR5cGUmJihpPW4udHlwZSksdkVbbi5pZF18fCh2RVtuLmlkXT17aWQ6bi5pZCxzaGFwZTppLGRlc2NyaXB0aW9uOlVtLnNhbml0aXplVGV4dChuLmlkLEp2KCkpLGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1zdGF0ZSJ9KSxuLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheSh2RVtuLmlkXS5kZXNjcmlwdGlvbik/KHZFW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIix2RVtuLmlkXS5kZXNjcmlwdGlvbi5wdXNoKG4uZGVzY3JpcHRpb24pKTp2RVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGg+MD8odkVbbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLHZFW24uaWRdLmRlc2NyaXB0aW9uPT09bi5pZD92RVtuLmlkXS5kZXNjcmlwdGlvbj1bbi5kZXNjcmlwdGlvbl06dkVbbi5pZF0uZGVzY3JpcHRpb249W3ZFW24uaWRdLmRlc2NyaXB0aW9uLG4uZGVzY3JpcHRpb25dKToodkVbbi5pZF0uc2hhcGU9InJlY3QiLHZFW24uaWRdLmRlc2NyaXB0aW9uPW4uZGVzY3JpcHRpb24pLHZFW24uaWRdLmRlc2NyaXB0aW9uPVVtLnNhbml0aXplVGV4dE9yQXJyYXkodkVbbi5pZF0uZGVzY3JpcHRpb24sSnYoKSkpLDE9PT12RVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGgmJiJyZWN0V2l0aFRpdGxlIj09PXZFW24uaWRdLnNoYXBlJiYodkVbbi5pZF0uc2hhcGU9InJlY3QiKSwhdkVbbi5pZF0udHlwZSYmbi5kb2MmJihvLmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgIixuLmlkLHdFKG4pKSx2RVtuLmlkXS50eXBlPSJncm91cCIsdkVbbi5pZF0uZGlyPXdFKG4pLHZFW24uaWRdLnNoYXBlPSJkaXZpZGVyIj09PW4udHlwZT8iZGl2aWRlciI6InJvdW5kZWRXaXRoVGl0bGUiLHZFW24uaWRdLmNsYXNzZXM9dkVbbi5pZF0uY2xhc3NlcysiICIrKHI/InN0YXRlZGlhZ3JhbS1jbHVzdGVyIHN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCI6InN0YXRlZGlhZ3JhbS1jbHVzdGVyIikpO3ZhciBhPXtsYWJlbFN0eWxlOiIiLHNoYXBlOnZFW24uaWRdLnNoYXBlLGxhYmVsVGV4dDp2RVtuLmlkXS5kZXNjcmlwdGlvbixjbGFzc2VzOnZFW24uaWRdLmNsYXNzZXMsc3R5bGU6IiIsaWQ6bi5pZCxkaXI6dkVbbi5pZF0uZGlyLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0iK19FLHR5cGU6dkVbbi5pZF0udHlwZSxwYWRkaW5nOjE1fTtpZihuLm5vdGUpe3ZhciBzPXtsYWJlbFN0eWxlOiIiLHNoYXBlOiJub3RlIixsYWJlbFRleHQ6bi5ub3RlLnRleHQsY2xhc3Nlczoic3RhdGVkaWFncmFtLW5vdGUiLHN0eWxlOiIiLGlkOm4uaWQrIi0tLS1ub3RlLSIrX0UsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLS0tLW5vdGUtIitfRSx0eXBlOnZFW24uaWRdLnR5cGUscGFkZGluZzoxNX0sYz17bGFiZWxTdHlsZToiIixzaGFwZToibm90ZUdyb3VwIixsYWJlbFRleHQ6bi5ub3RlLnRleHQsY2xhc3Nlczp2RVtuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQrIi0tLS1wYXJlbnQiLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1wYXJlbnQtIitfRSx0eXBlOiJncm91cCIscGFkZGluZzowfTtfRSsrLHQuc2V0Tm9kZShuLmlkKyItLS0tcGFyZW50IixjKSx0LnNldE5vZGUocy5pZCxzKSx0LnNldE5vZGUobi5pZCxhKSx0LnNldFBhcmVudChuLmlkLG4uaWQrIi0tLS1wYXJlbnQiKSx0LnNldFBhcmVudChzLmlkLG4uaWQrIi0tLS1wYXJlbnQiKTt2YXIgdT1uLmlkLGw9cy5pZDsibGVmdCBvZiI9PT1uLm5vdGUucG9zaXRpb24mJih1PXMuaWQsbD1uLmlkKSx0LnNldEVkZ2UodSxsLHthcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZToiIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGNsYXNzZXM6InRyYW5zaXRpb24gbm90ZS1lZGdlIixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwifSl9ZWxzZSB0LnNldE5vZGUobi5pZCxhKX1lJiYicm9vdCIhPT1lLmlkJiYoby50cmFjZSgiU2V0dGluZyBub2RlICIsbi5pZCwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixlLmlkKSx0LnNldFBhcmVudChuLmlkLGUuaWQpKSxuLmRvYyYmKG8udHJhY2UoIkFkZGluZyBub2RlcyBjaGlsZHJlbiAiKSx4RSh0LG4sbi5kb2MsIXIpKX0sX0U9MCx4RT1mdW5jdGlvbih0LGUsbixyKXtvLnRyYWNlKCJpdGVtcyIsbiksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtpZigic3RhdGUiPT09bi5zdG10fHwiZGVmYXVsdCI9PT1uLnN0bXQpYkUodCxlLG4scik7ZWxzZSBpZigicmVsYXRpb24iPT09bi5zdG10KXtiRSh0LGUsbi5zdGF0ZTEsciksYkUodCxlLG4uc3RhdGUyLHIpO3ZhciBpPXtpZDoiZWRnZSIrX0UsYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixsYWJlbDpVbS5zYW5pdGl6ZVRleHQobi5kZXNjcmlwdGlvbixKdigpKSxhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLF9FKSxfRSsrfX0pKX0sd0U9ZnVuY3Rpb24odCxlKXt2YXIgbj1lfHwiVEIiO2lmKHQuZG9jKWZvcih2YXIgcj0wO3I8dC5kb2MubGVuZ3RoO3IrKyl7dmFyIGk9dC5kb2Nbcl07ImRpciI9PT1pLnN0bXQmJihuPWkudmFsdWUpfXJldHVybiBufTtjb25zdCBrRT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKW1FW2Vbbl1dPXRbZVtuXV19O2Z1bmN0aW9uIFRFKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBFRSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBFRSh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0VFKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRUUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgQ0U9IiIsU0U9IiIsQUU9W10sTUU9W10sTkU9W10sREU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ITAsZT0wO2U8TkUubGVuZ3RoO2UrKylORVtlXS5wcm9jZXNzZWQsdD10JiZORVtlXS5wcm9jZXNzZWQ7cmV0dXJuIHR9O2NvbnN0IE9FPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7c0MucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBKdigpLmpvdXJuZXl9LGNsZWFyOmZ1bmN0aW9uKCl7QUUubGVuZ3RoPTAsTUUubGVuZ3RoPTAsU0U9IiIsQ0U9IiIsTkUubGVuZ3RoPTB9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe0NFPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIENFfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe1NFPXQsQUUucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gQUV9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PURFKCksZT0wOyF0JiZlPDEwMDspdD1ERSgpLGUrKztyZXR1cm4gTUUucHVzaC5hcHBseShNRSxORSksTUV9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLHI9MCxpPVtdOzE9PT1uLmxlbmd0aD8ocj1OdW1iZXIoblswXSksaT1bXSk6KHI9TnVtYmVyKG5bMF0pLGk9blsxXS5zcGxpdCgiLCIpKTt2YXIgYT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkpLG89e3NlY3Rpb246U0UsdHlwZTpTRSxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6cn07TkUucHVzaChvKX0sYWRkVGFza09yZzpmdW5jdGlvbih0KXt2YXIgZT17c2VjdGlvbjpTRSx0eXBlOlNFLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O01FLnB1c2goZSl9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiB0PVtdLE1FLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGVvcGxlJiZ0LnB1c2guYXBwbHkodCxURShlLnBlb3BsZSkpfSkpLFRFKG5ldyBTZXQodCkpLnNvcnQoKTt2YXIgdH19O3ZhciBCRT1uKDk3NjMpLExFPW4ubihCRSksSUU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sUkU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIG4uYXR0cigiY3giLGUuY3gpLG4uYXR0cigiY3kiLGUuY3kpLG4uYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxGRT0tMSxQRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpO2NvbnN0IGpFPVJFLFlFPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9e3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsSUUocixpKSxQRShuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSx6RT1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sVUU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPWUueCtuLndpZHRoLzIscz10LmFwcGVuZCgiZyIpO0ZFKysscy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK0ZFKS5hdHRyKCJ4MSIsbykuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG8pLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxyPXMsaT17Y3g6byxjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4KS5hdHRyKCJjeSIsaS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKGE9ci5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaS5jeC01KS5hdHRyKCJjeSIsaS5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4KzUpLmF0dHIoImN5IixpLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9SXUoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjMpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmN4KyIsIisoaS5jeSsyKSsiKSIpfShhKTppLnNjb3JlPDM/ZnVuY3Rpb24odCl7dmFyIGU9SXUoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqNSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kuY3grIiwiKyhpLmN5KzcpKyIpIil9KGEpOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGkuY3gtNSkuYXR0cigieTEiLGkuY3krNykuYXR0cigieDIiLGkuY3grNSkuYXR0cigieTIiLGkuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX0oYSk7dmFyIGM9e3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTtjLng9ZS54LGMueT1lLnksYy5maWxsPWUuZmlsbCxjLndpZHRoPW4ud2lkdGgsYy5oZWlnaHQ9bi5oZWlnaHQsYy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxjLnJ4PTMsYy5yeT0zLElFKHMsYyk7dmFyIHU9ZS54KzE0O2UucGVvcGxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuYWN0b3JzW3RdLmNvbG9yLHI9e2N4OnUsY3k6ZS55LHI6NyxmaWxsOm4sc3Ryb2tlOiIjMDAwIix0aXRsZTp0LHBvczplLmFjdG9yc1t0XS5wb3NpdGlvbn07UkUocyxyKSx1Kz0xMH0pKSxQRShuKShlLnRhc2sscyxjLngsYy55LGMud2lkdGgsYy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sbixlLmNvbG91cil9O0JFLnBhcnNlci55eT1PRTt2YXIgcUU9e30sSEU9SnYoKS5qb3VybmV5LCRFPUp2KCkuam91cm5leS5sZWZ0TWFyZ2luLFdFPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1KdigpLmpvdXJuZXksYT10aGlzLG89MDt0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bysrO3ZhciBjPWEuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbysxO2EudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KSxhLnVwZGF0ZVZhbChXRS5kYXRhLCJzdGFydHgiLHQtYyppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoV0UuZGF0YSwic3RvcHgiLG4rYyppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKFdFLmRhdGEsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChXRS5kYXRhLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoV0UuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChXRS5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKFdFLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChXRS5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFZFPUhFLnNlY3Rpb25GaWxscyxHRT1IRS5zZWN0aW9uQ29sb3Vycztjb25zdCBYRT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtIRVtlXT10W2VdfSkpfSxaRT1mdW5jdGlvbih0LGUpe3ZhciBuPUp2KCkuam91cm5leTtCRS5wYXJzZXIueXkuY2xlYXIoKSxCRS5wYXJzZXIucGFyc2UodCsiXG4iKSxXRS5pbml0KCk7dmFyIHI9YXUoIiMiK2UpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksci5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIik7dmFyIGk9QkUucGFyc2VyLnl5LmdldFRhc2tzKCksYT1CRS5wYXJzZXIueXkuZ2V0VGl0bGUoKSxvPUJFLnBhcnNlci55eS5nZXRBY3RvcnMoKTtmb3IodmFyIHMgaW4gcUUpZGVsZXRlIHFFW3NdO3ZhciBjPTA7by5mb3JFYWNoKChmdW5jdGlvbih0KXtxRVt0XT17Y29sb3I6bi5hY3RvckNvbG91cnNbYyVuLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOmN9LGMrK30pKSxmdW5jdGlvbih0KXt2YXIgZT1KdigpLmpvdXJuZXksbj02MDtPYmplY3Qua2V5cyhxRSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9cUVbcl0uY29sb3IsYT17Y3g6MjAsY3k6bixyOjcsZmlsbDppLHN0cm9rZToiIzAwMCIscG9zOnFFW3JdLnBvc2l0aW9ufTtqRSh0LGEpO3ZhciBvPXt4OjQwLHk6bis3LGZpbGw6IiM2NjYiLHRleHQ6cix0ZXh0TWFyZ2luOjV8ZS5ib3hUZXh0TWFyZ2lufTt6RSh0LG8pLG4rPTIwfSkpfShyKSxXRS5pbnNlcnQoMCwwLCRFLDUwKk9iamVjdC5rZXlzKHFFKS5sZW5ndGgpLGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9SnYoKS5qb3VybmV5LGk9IiIsYT1uKygyKnIuaGVpZ2h0K3IuZGlhZ3JhbU1hcmdpblkpLG89MCxzPSIjQ0NDIixjPSJibGFjayIsdT0wLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGg9ZVtsXTtpZihpIT09aC5zZWN0aW9uKXtzPVZFW28lVkUubGVuZ3RoXSx1PW8lVkUubGVuZ3RoLGM9R0VbbyVHRS5sZW5ndGhdO3ZhciBmPXt4Omwqci50YXNrTWFyZ2luK2wqci53aWR0aCskRSx5OjUwLHRleHQ6aC5zZWN0aW9uLGZpbGw6cyxudW06dSxjb2xvdXI6Y307WUUodCxmLHIpLGk9aC5zZWN0aW9uLG8rK312YXIgZD1oLnBlb3BsZS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFFW2VdJiYodFtlXT1xRVtlXSksdH0pLHt9KTtoLng9bCpyLnRhc2tNYXJnaW4rbCpyLndpZHRoKyRFLGgueT1hLGgud2lkdGg9ci5kaWFncmFtTWFyZ2luWCxoLmhlaWdodD1yLmRpYWdyYW1NYXJnaW5ZLGguY29sb3VyPWMsaC5maWxsPXMsaC5udW09dSxoLmFjdG9ycz1kLFVFKHQsaCxyKSxXRS5pbnNlcnQoaC54LGgueSxoLngraC53aWR0aCtyLnRhc2tNYXJnaW4sNDUwKX19KHIsaSwwKTt2YXIgdT1XRS5nZXRCb3VuZHMoKTthJiZyLmFwcGVuZCgidGV4dCIpLnRleHQoYSkuYXR0cigieCIsJEUpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTt2YXIgbD11LnN0b3B5LXUuc3RhcnR5KzIqbi5kaWFncmFtTWFyZ2luWSxoPSRFK3Uuc3RvcHgrMipuLmRpYWdyYW1NYXJnaW5YO3p2KHIsbCxoLG4udXNlTWF4V2lkdGgpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLCRFKS5hdHRyKCJ5MSIsNCpuLmhlaWdodCkuYXR0cigieDIiLGgtJEUtNCkuYXR0cigieTIiLDQqbi5oZWlnaHQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7dmFyIGY9YT83MDowO3IuYXR0cigidmlld0JveCIsIiIuY29uY2F0KHUuc3RhcnR4LCIgLTI1ICIpLmNvbmNhdChoLCIgIikuY29uY2F0KGwrZikpLHIuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxyLmF0dHIoImhlaWdodCIsbCtmKzI1KX07dmFyIFFFPXt9O2NvbnN0IEtFPWZ1bmN0aW9uKHQpe3JldHVybiJnLmNsYXNzR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICBmb250LXNpemU6IDEwcHg7XG5cbiAgLnRpdGxlIHtcbiAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICB9XG5cbn1cblxuLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG59XG4ubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7XG4gIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbn1cblxuLmNsYXNzVGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuXG4uZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2U6IDE7XG59XG5cbmcuY2xpY2thYmxlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5nLmNsYXNzR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuY2xhc3NHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmNsYXNzTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmNsYXNzTGFiZWwgLmxhYmVsIHtcbiAgZmlsbDogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbi5yZWxhdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLmRhc2hlZC1saW5le1xuICBzdHJva2UtZGFzaGFycmF5OiAzO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuIil9LEpFPWZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBjb2xvcjogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jbHVzdGVyQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jbHVzdGVyQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSx0Qz1mdW5jdGlvbih0KXtyZXR1cm4iXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogIi5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICB9XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuc3RhdGVHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4udHJhbnNpdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7XG4gIGZpbGw6ICNlMGUwZTA7XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGUtbm90ZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuXG4gIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJhY2tncm91bmRDb2xvciwiO1xuICBvcGFjaXR5OiAwLjU7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVMYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgLmZvcmstam9pbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmlubmVyRW5kQmFja2dyb3VuZCwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmQsIjtcbiAgLy8gc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUJrZ3x8dC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cbi5ub2RlIHBvbHlnb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiOztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgcng6MDtcbiAgcnk6MDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4ubm90ZS1lZGdlIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogNTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHJ4OiAwO1xuICByeTogMDtcbn1cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG4uc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwge1xuICBjb2xvcjogcmVkOyAvLyAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cbiIpfTt2YXIgZUM9e2Zsb3djaGFydDpKRSwiZmxvd2NoYXJ0LXYyIjpKRSxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdG9yUG9wdXBNZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnVQYW5lbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gICAgYm94LXNoYWRvdzogMHB4IDhweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMik7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTtcbn1cbiAgLmFjdG9yLW1hbiBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yQm9yZGVyLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0b3JCa2csIjtcbiAgfVxuICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5hY3RvckJvcmRlciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cbiIpfSxnYW50dDpmdW5jdGlvbih0KXtyZXR1cm4nXG4gIC5tZXJtYWlkLW1haW4tZm9udCB7XG4gICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiAgLmV4Y2x1ZGUtcmFuZ2Uge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuZXhjbHVkZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ncmlkQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICAgIHRleHQge1xuICAgICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRvZGF5TGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAvLyAudGFza1RleHQ6bm90KFtmb250LXNpemVdKSB7XG4gIC8vICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIC8vIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICB9XG5cbiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqL1xuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuICAudGFza1RleHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovXG5cbiAgLnRhc2tUZXh0MCxcbiAgLnRhc2tUZXh0MSxcbiAgLnRhc2tUZXh0MixcbiAgLnRhc2tUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDb2xvciwiO1xuICB9XG5cbiAgLnRhc2swLFxuICAudGFzazEsXG4gIC50YXNrMixcbiAgLnRhc2szIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTAsXG4gIC50YXNrVGV4dE91dHNpZGUyXG4gIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTEsXG4gIC50YXNrVGV4dE91dHNpZGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cblxuICAvKiBBY3RpdmUgdGFzayAqL1xuXG4gIC5hY3RpdmUwLFxuICAuYWN0aXZlMSxcbiAgLmFjdGl2ZTIsXG4gIC5hY3RpdmUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2ZVRleHQwLFxuICAuYWN0aXZlVGV4dDEsXG4gIC5hY3RpdmVUZXh0MixcbiAgLmFjdGl2ZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIENvbXBsZXRlZCB0YXNrICovXG5cbiAgLmRvbmUwLFxuICAuZG9uZTEsXG4gIC5kb25lMixcbiAgLmRvbmUzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVUZXh0MCxcbiAgLmRvbmVUZXh0MSxcbiAgLmRvbmVUZXh0MixcbiAgLmRvbmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqL1xuXG4gIC5jcml0MCxcbiAgLmNyaXQxLFxuICAuY3JpdDIsXG4gIC5jcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jcml0QmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuYWN0aXZlQ3JpdDAsXG4gIC5hY3RpdmVDcml0MSxcbiAgLmFjdGl2ZUNyaXQyLFxuICAuYWN0aXZlQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVDcml0MCxcbiAgLmRvbmVDcml0MSxcbiAgLmRvbmVDcml0MixcbiAgLmRvbmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gIH1cblxuICAubWlsZXN0b25lIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7XG4gIH1cblxuICAubWlsZXN0b25lVGV4dCB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gIC5kb25lQ3JpdFRleHQwLFxuICAuZG9uZUNyaXRUZXh0MSxcbiAgLmRvbmVDcml0VGV4dDIsXG4gIC5kb25lQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuYWN0aXZlQ3JpdFRleHQwLFxuICAuYWN0aXZlQ3JpdFRleHQxLFxuICAuYWN0aXZlQ3JpdFRleHQyLFxuICAuYWN0aXZlQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAudGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIiAgICA7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiIpfSxjbGFzc0RpYWdyYW06S0UsImNsYXNzRGlhZ3JhbS12MiI6S0UsY2xhc3M6S0Usc3RhdGVEaWFncmFtOnRDLHN0YXRlOnRDLGdpdDpmdW5jdGlvbigpe3JldHVybiJcbiAgLmNvbW1pdC1pZCxcbiAgLmNvbW1pdC1tc2csXG4gIC5icmFuY2gtbGFiZWwge1xuICAgIGZpbGw6IGxpZ2h0Z3JleTtcbiAgICBjb2xvcjogbGlnaHRncmV5O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4ifSxpbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LHBpZTpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5waWVDaXJjbGV7XG4gICAgc3Ryb2tlOiAiLmNvbmNhdCh0LnBpZVN0cm9rZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoIDogIikuY29uY2F0KHQucGllU3Ryb2tlV2lkdGgsIjtcbiAgICBvcGFjaXR5IDogIikuY29uY2F0KHQucGllT3BhY2l0eSwiO1xuICB9XG4gIC5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRTaXplLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllVGl0bGVUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVTZWN0aW9uVGV4dENvbG9yLCI7XG4gICAgZm9udC1zaXplOiIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0U2l6ZSwiO1xuICAgIC8vIGZpbGw6IHdoaXRlO1xuICB9XG4gIC5sZWdlbmQgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dENvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZUxlZ2VuZFRleHRTaXplLCI7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveE9kZCB7XG4gICAgZmlsbDogI2ZmZmZmZjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAjZjJmMmYyO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgIikuY29uY2F0KHQuZmFjZUNvbG9yPyJmaWxsOiAiLmNvbmNhdCh0LmZhY2VDb2xvcik6ImZpbGw6ICNGRkY4REMiLCI7XG4gICAgc3Ryb2tlOiAjOTk5O1xuICB9XG5cbiAgLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hcnJvd2hlYWRDb2xvciwiO1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAiKS5jb25jYXQodC5ib3JkZXIyLCI7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgfVxuXG4gIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTEpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUyKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMyk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTQpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU1KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNik6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTcpOiIiLCI7XG4gIH1cblxuICAuYWN0b3ItMCB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IwPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMCk6IiIsIjtcbiAgfVxuICAuYWN0b3ItMSB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IxPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMSk6IiIsIjtcbiAgfVxuICAuYWN0b3ItMiB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IyPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMik6IiIsIjtcbiAgfVxuICAuYWN0b3ItMyB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IzPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMyk6IiIsIjtcbiAgfVxuICAuYWN0b3ItNCB7XG4gICAgIikuY29uY2F0KHQuYWN0b3I0PyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yNCk6IiIsIjtcbiAgfVxuICAuYWN0b3ItNSB7XG4gICAgIikuY29uY2F0KHQuYWN0b3I1PyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yNSk6IiIsIjtcbiAgfVxuXG4gIH1cbiIpfSxyZXF1aXJlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4iXG5cbiAgbWFya2VyIHtcbiAgICBmaWxsOiAiLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgfVxuXG4gIG1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LmZvbnRTaXplLCI7XG4gIH1cblxuICAucmVxQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJhY2tncm91bmQsIjtcbiAgICBmaWxsLW9wYWNpdHk6IDEwMCU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlckNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlclNpemUsIjtcbiAgfVxuICBcbiAgLnJlcVRpdGxlLCAucmVxTGFiZWx7XG4gICAgZmlsbDogICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50VGV4dENvbG9yLCI7XG4gIH1cbiAgLnJlcUxhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgfVxuXG4gIC5yZXEtdGl0bGUtbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlckNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlclNpemUsIjtcbiAgfVxuICAucmVsYXRpb25zaGlwTGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZWxhdGlvbkNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMYWJlbCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucmVsYXRpb25MYWJlbENvbG9yLCI7XG4gIH1cblxuIil9fTtmdW5jdGlvbiBuQyh0KXtyZXR1cm4gbkM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG5DKHQpfXZhciByQz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybihlPShlPWUucmVwbGFjZSgv76yCwrDCsC9nLChmdW5jdGlvbigpe3JldHVybiImIyJ9KSkpLnJlcGxhY2UoL++sgsKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYifSkpKS5yZXBsYWNlKC/CtsOfL2csKGZ1bmN0aW9uKCl7cmV0dXJuIjsifSkpfSxpQz17fTtmdW5jdGlvbiBhQyh0KXt2YXIgZTtYdyh0LmdpdCksUngodC5mbG93Y2hhcnQpLGp4KHQuZmxvd2NoYXJ0KSx2b2lkIDAhPT10LnNlcXVlbmNlRGlhZ3JhbSYmcVQuc2V0Q29uZihMdih0LnNlcXVlbmNlLHQuc2VxdWVuY2VEaWFncmFtKSkscVQuc2V0Q29uZih0LnNlcXVlbmNlKSx0LmdhbnR0LEZiKHQuY2xhc3MpLHQuc3RhdGUsa0UodC5zdGF0ZSksbmsodC5jbGFzcyksel8odC5lciksWEUodC5qb3VybmV5KSxBayh0LnJlcXVpcmVtZW50KSxlPXQuY2xhc3MsT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7UUVbdF09ZVt0XX0pKX12YXIgb0M9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe25iKCk7dmFyIGk9ZSxhPUh2LmRldGVjdEluaXQoaSk7YSYmKFV2KGEpLGViKGEpKTt2YXIgcz1KdigpO2lmKGUubGVuZ3RoPnMubWF4VGV4dFNpemUmJihpPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIiksdm9pZCAwIT09cilyLmlubmVySFRNTD0iIixhdShyKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitzLmZvbnRGYW1pbHkpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKTtlbHNle3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO2MmJmMucmVtb3ZlKCk7dmFyIHU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2QiK3QpO3UmJnUucmVtb3ZlKCksYXUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpfXdpbmRvdy50eHQ9aSxpPWkucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKS5yZXBsYWNlKC8jXHcrOy9nLChmdW5jdGlvbih0KXt2YXIgZT10LnN1YnN0cmluZygxLHQubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChlKT8i76yCwrDCsCIrZSsiwrbDnyI6Iu+sgsKwIitlKyLCtsOfIn0pKTt2YXIgbD1hdSgiI2QiK3QpLm5vZGUoKSxoPUh2LmRldGVjdFR5cGUoaSxzKSxmPWwuZmlyc3RDaGlsZCxkPWYuZmlyc3RDaGlsZCxwPSIiO2lmKHZvaWQgMCE9PXMudGhlbWVDU1MmJihwKz0iXG4iLmNvbmNhdChzLnRoZW1lQ1NTKSksdm9pZCAwIT09cy5mb250RmFtaWx5JiYocCs9IlxuOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuZm9udEZhbWlseSwifSIpKSx2b2lkIDAhPT1zLmFsdEZvbnRGYW1pbHkmJihwKz0iXG46cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuYWx0Rm9udEZhbWlseSwifSIpKSwiZmxvd2NoYXJ0Ij09PWh8fCJmbG93Y2hhcnQtdjIiPT09aHx8ImdyYXBoIj09PWgpe3ZhciB5PWZ1bmN0aW9uKHQpe28uaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIikseXguY2xlYXIoKTt0cnl7dmFyIGU9bXgoKS5wYXJzZXI7cmV0dXJuIGUueXk9eXgsZS5wYXJzZSh0KSx5eC5nZXRDbGFzc2VzKCl9Y2F0Y2godCl7cmV0dXJufX0oaSksZz1zLmh0bWxMYWJlbHN8fHMuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM7Zm9yKHZhciBtIGluIHkpZz8ocCs9IlxuLiIuY29uY2F0KG0sIiA+ICogeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgc3BhbiB7ICIpLmNvbmNhdCh5W21dLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikpOihwKz0iXG4uIi5jb25jYXQobSwiIHBhdGggeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgcmVjdCB7ICIpLmNvbmNhdCh5W21dLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikscCs9IlxuLiIuY29uY2F0KG0sIiBwb2x5Z29uIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSxwKz0iXG4uIi5jb25jYXQobSwiIGVsbGlwc2UgeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgY2lyY2xlIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5W21dLnRleHRTdHlsZXMmJihwKz0iXG4uIi5jb25jYXQobSwiIHRzcGFuIHsgIikuY29uY2F0KHlbbV0udGV4dFN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikpKX12YXIgdj1mdW5jdGlvbih0LGUpe3JldHVybiBhbShDbSgiIi5jb25jYXQodCwieyIpLmNvbmNhdChlLCJ9IikpLG9tKX0oIiMiLmNvbmNhdCh0KSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIiB7XG4gICAgZm9udC1mYW1pbHk6ICIuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQobi50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovXG5cbiAgLmVycm9yLWljb24ge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmVycm9yQmtnQ29sb3IsIjtcbiAgfVxuICAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmVycm9yVGV4dENvbG9yLCI7XG4gIH1cblxuICAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuICAuZWRnZS10aGlja25lc3MtdGhpY2sge1xuICAgIHN0cm9rZS13aWR0aDogMy41cHhcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgLmVkZ2UtcGF0dGVybi1kYXNoZWR7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMztcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLWRvdHRlZCB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMjtcbiAgfVxuXG4gIC5tYXJrZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gIH1cbiAgLm1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdChuLmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdChuLmZvbnRTaXplLCI7XG4gIH1cblxuICAiKS5jb25jYXQoZUNbdF0obiksIlxuXG4gICIpLmNvbmNhdChlLCJcbiIpfShoLHAscy50aGVtZVZhcmlhYmxlcykpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtiLmlubmVySFRNTD0iIyIuY29uY2F0KHQsIiAiKSt2LGYuaW5zZXJ0QmVmb3JlKGIsZCk7dHJ5e3N3aXRjaChoKXtjYXNlImdpdCI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsWHcocy5naXQpLGZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9ancoKS5wYXJzZXI7ci55eT1SdyxyLnl5LmNsZWFyKCksby5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrIlxuIiwiaWQ6IixlLG4pLHIucGFyc2UodCsiXG4iKSx6dz1PYmplY3QuYXNzaWduKHp3LFV3LFJ3LmdldE9wdGlvbnMoKSksby5kZWJ1ZygiZWZmZWN0aXZlIG9wdGlvbnMiLHp3KTt2YXIgaT1Sdy5nZXREaXJlY3Rpb24oKTtZdz1Sdy5nZXRDb21taXRzKCk7dmFyIGE9UncuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7IkJUIj09PWkmJih6dy5ub2RlTGFiZWwueD1hLmxlbmd0aCp6dy5icmFuY2hPZmZzZXQsencubm9kZUxhYmVsLndpZHRoPSIxMDAlIix6dy5ub2RlTGFiZWwueT0tMip6dy5ub2RlUmFkaXVzKTt2YXIgcz1hdSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtmb3IodmFyIGMgaW4gZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImciKS5hdHRyKCJpZCIsImRlZi1jb21taXQiKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLHp3Lm5vZGVSYWRpdXMpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksdC5zZWxlY3QoIiNkZWYtY29tbWl0IikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLHp3Lm5vZGVMYWJlbC53aWR0aCkuYXR0cigiaGVpZ2h0Iix6dy5ub2RlTGFiZWwuaGVpZ2h0KS5hdHRyKCJ4Iix6dy5ub2RlTGFiZWwueCkuYXR0cigieSIsencubm9kZUxhYmVsLnkpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbCIpLmF0dHIoInJlcXVpcmVkRmVhdHVyZXMiLCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiKS5hcHBlbmQoInAiKS5odG1sKCIiKX0ocyksRnc9MSxhKXt2YXIgdT1hW2NdO1Z3KHMsdS5jb21taXQuaWQsYSxpKSxHdyhzLHUuY29tbWl0LGkpLEZ3Kyt9cy5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbigpe3JldHVybiJCVCI9PT1pP09iamVjdC5rZXlzKFl3KS5sZW5ndGgqencubm9kZVNwYWNpbmc6KGEubGVuZ3RoKzEpKnp3LmJyYW5jaE9mZnNldH0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgZ2l0Z3JhcGgiKSxvLmVycm9yKHQubWVzc2FnZSl9fShpLHQsITEpO2JyZWFrO2Nhc2UiZmxvd2NoYXJ0IjpzLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxSeChzLmZsb3djaGFydCksRngoaSx0KTticmVhaztjYXNlImZsb3djaGFydC12MiI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsangocy5mbG93Y2hhcnQpLFl4KGksdCk7YnJlYWs7Y2FzZSJzZXF1ZW5jZSI6cy5zZXF1ZW5jZS5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxzLnNlcXVlbmNlRGlhZ3JhbT8ocVQuc2V0Q29uZihPYmplY3QuYXNzaWduKHMuc2VxdWVuY2Uscy5zZXF1ZW5jZURpYWdyYW0pKSxjb25zb2xlLmVycm9yKCJgbWVybWFpZCBjb25maWcuc2VxdWVuY2VEaWFncmFtYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb25maWcuc2VxdWVuY2VgLiBQbGVhc2UgdXBkYXRlIHlvdXIgbWVybWFpZCBjb25maWcuIikpOnFULnNldENvbmYocy5zZXF1ZW5jZSkscVQuZHJhdyhpLHQpO2JyZWFrO2Nhc2UiZ2FudHQiOnMuZ2FudHQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUscy5nYW50dCxrdyhpLHQpO2JyZWFrO2Nhc2UiY2xhc3MiOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsRmIocy5jbGFzcyksUGIoaSx0KTticmVhaztjYXNlImNsYXNzRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtTX1tlXT10W2VdfSkpfShzLmNsYXNzKSxmdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBjbGFzcyIpLHZiLmNsZWFyKCksa2IucGFyc2VyLnBhcnNlKHQpO3ZhciBuPUp2KCkuZmxvd2NoYXJ0O28uaW5mbygiY29uZmlnOiIsbik7dmFyIHI9bi5ub2RlU3BhY2luZ3x8NTAsaT1uLnJhbmtTcGFjaW5nfHw1MCxhPW5ldyh3YigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnZiLmdldERpcmVjdGlvbigpLG5vZGVzZXA6cixyYW5rc2VwOmksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSkscz12Yi5nZXRDbGFzc2VzKCksYz12Yi5nZXRSZWxhdGlvbnMoKTtvLmluZm8oYyksZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtvLmluZm8oImtleXM6IixuKSxvLmluZm8odCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9IiI7ci5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaT1pKyIgIityLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYSxzPXtsYWJlbFN0eWxlOiIifSxjPXZvaWQgMCE9PXIudGV4dD9yLnRleHQ6ci5pZDtyLnR5cGUsYT0iY2xhc3NfYm94IixlLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTpzLmxhYmVsU3R5bGUsc2hhcGU6YSxsYWJlbFRleHQ6YyxjbGFzc0RhdGE6cixyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTpzLnN0eWxlLGlkOnIuaWQsZG9tSWQ6ci5kb21JZCxoYXZlQ2FsbGJhY2s6ci5oYXZlQ2FsbGJhY2ssbGluazpyLmxpbmssd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6SnYoKS5mbG93Y2hhcnQucGFkZGluZ30pLG8uaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6cy5sYWJlbFN0eWxlLHNoYXBlOmEsbGFiZWxUZXh0OmMscng6MCxyeTowLGNsYXNzOmksc3R5bGU6cy5zdHlsZSxpZDpyLmlkLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOkp2KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0ocyxhKSxmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbihyKXtuKys7dmFyIGk9e2NsYXNzZXM6InJlbGF0aW9uIn07aS5wYXR0ZXJuPTE9PXIucmVsYXRpb24ubGluZVR5cGU/ImRhc2hlZCI6InNvbGlkIixpLmlkPSJpZCIrbiwiYXJyb3dfb3BlbiI9PT1yLnR5cGU/aS5hcnJvd2hlYWQ9Im5vbmUiOmkuYXJyb3doZWFkPSJub3JtYWwiLG8uaW5mbyhpLHIpLGkuc3RhcnRMYWJlbFJpZ2h0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTE/IiI6ci5yZWxhdGlvblRpdGxlMSxpLmVuZExhYmVsTGVmdD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUyPyIiOnIucmVsYXRpb25UaXRsZTIsaS5hcnJvd1R5cGVTdGFydD1BXyhyLnJlbGF0aW9uLnR5cGUxKSxpLmFycm93VHlwZUVuZD1BXyhyLnJlbGF0aW9uLnR5cGUyKTt2YXIgYT0iIixzPSIiO2lmKHZvaWQgMCE9PXIuc3R5bGUpe3ZhciBjPU52KHIuc3R5bGUpO2E9Yy5zdHlsZSxzPWMubGFiZWxTdHlsZX1lbHNlIGE9ImZpbGw6bm9uZSI7aS5zdHlsZT1hLGkubGFiZWxTdHlsZT1zLHZvaWQgMCE9PXIuaW50ZXJwb2xhdGU/aS5jdXJ2ZT1BdihyLmludGVycG9sYXRlLFB1KTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9pLmN1cnZlPUF2KHQuZGVmYXVsdEludGVycG9sYXRlLFB1KTppLmN1cnZlPUF2KFNfLmN1cnZlLFB1KSxyLnRleHQ9ci50aXRsZSx2b2lkIDA9PT1yLnRleHQ/dm9pZCAwIT09ci5zdHlsZSYmKGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooaS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsaS5sYWJlbHBvcz0iYyIsSnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscz8oaS5sYWJlbFR5cGU9Imh0bWwiLGkubGFiZWw9JzxzcGFuIGNsYXNzPSJlZGdlTGFiZWwiPicrci50ZXh0KyI8L3NwYW4+Iik6KGkubGFiZWxUeXBlPSJ0ZXh0IixpLmxhYmVsPXIudGV4dC5yZXBsYWNlKFVtLmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PXIuc3R5bGUmJihpLnN0eWxlPWkuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksaS5sYWJlbFN0eWxlPWkubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksZS5zZXRFZGdlKHIuaWQxLHIuaWQyLGksbil9KSl9KGMsYSk7dmFyIHU9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7dS5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTt2YXIgbD1hdSgiIyIrZSsiIGciKTtDXyhsLGEsWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSJdLCJjbGFzc0RpYWdyYW0iLGUpO3ZhciBoPXUubm9kZSgpLmdldEJCb3goKSxmPWgud2lkdGgrMTYsZD1oLmhlaWdodCsxNjtpZihvLmRlYnVnKCJuZXcgVmlld0JveCAwIDAgIi5jb25jYXQoZiwiICIpLmNvbmNhdChkKSwidHJhbnNsYXRlKCIuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW55LCIpIikpLHp2KHUsZCxmLG4udXNlTWF4V2lkdGgpLHUuYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChmLCIgIikuY29uY2F0KGQpKSx1LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtaC55LCIpIikpLCFuLmh0bWxMYWJlbHMpZm9yKHZhciBwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHk9MDt5PHAubGVuZ3RoO3krKyl7dmFyIGc9cFt5XSxtPWcuZ2V0QkJveCgpLHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt2LnNldEF0dHJpYnV0ZSgicngiLDApLHYuc2V0QXR0cmlidXRlKCJyeSIsMCksdi5zZXRBdHRyaWJ1dGUoIndpZHRoIixtLndpZHRoKSx2LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixtLmhlaWdodCksZy5pbnNlcnRCZWZvcmUodixnLmZpcnN0Q2hpbGQpfX0oaSx0KTticmVhaztjYXNlInN0YXRlIjpzLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLHMuc3RhdGUsZ0UoaSx0KTticmVhaztjYXNlInN0YXRlRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxrRShzLnN0YXRlKSxmdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpLG9FLmNsZWFyKCksdkU9e307dmFyIG49JFQoKS5wYXJzZXI7bi55eT1vRSxuLnBhcnNlKHQpO3ZhciByPW9FLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJMUiIpO3ZhciBpPUp2KCkuc3RhdGUsYT1pLm5vZGVTcGFjaW5nfHw1MCxzPWkucmFua1NwYWNpbmd8fDUwO28uaW5mbyhvRS5nZXRSb290RG9jVjIoKSksb0UuZXh0cmFjdChvRS5nZXRSb290RG9jVjIoKSksby5pbmZvKG9FLmdldFJvb3REb2NWMigpKTt2YXIgYz1uZXcod2IoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp3RShvRS5nZXRSb290RG9jVjIoKSksbm9kZXNlcDphLHJhbmtzZXA6cyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtiRShjLHZvaWQgMCxvRS5nZXRSb290RG9jVjIoKSwhMCk7dmFyIHU9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksbD1hdSgiIyIrZSsiIGciKTtDXyhsLGMsWyJiYXJiIl0sInN0YXRlZGlhZ3JhbSIsZSk7dmFyIGg9dS5ub2RlKCkuZ2V0QkJveCgpLGY9aC53aWR0aCsxNixkPWguaGVpZ2h0KzE2O3UuYXR0cigiY2xhc3MiLCJzdGF0ZWRpYWdyYW0iKTt2YXIgcD11Lm5vZGUoKS5nZXRCQm94KCk7enYodSxkLDEuNzUqZixpLnVzZU1heFdpZHRoKTt2YXIgeT0iIi5jb25jYXQocC54LTgsIiAiKS5jb25jYXQocC55LTgsIiAiKS5jb25jYXQoZiwiICIpLmNvbmNhdChkKTtvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KHkpKSx1LmF0dHIoInZpZXdCb3giLHkpO2Zvcih2YXIgZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB2PWdbbV0sYj12LmdldEJCb3goKSxfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Xy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxfLnNldEF0dHJpYnV0ZSgicnkiLDApLF8uc2V0QXR0cmlidXRlKCJ3aWR0aCIsYi53aWR0aCksXy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYi5oZWlnaHQpLHYuaW5zZXJ0QmVmb3JlKF8sdi5maXJzdENoaWxkKX19KGksdCk7YnJlYWs7Y2FzZSJpbmZvIjpzLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLG5rKHMuY2xhc3MpLGZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9dGsoKS5wYXJzZXI7ci55eT1LdyxvLmRlYnVnKCJSZW5lcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksci5wYXJzZSh0KSxvLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIGk9YXUoIiMiK2UpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwiMzJweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoInYgIituKSxpLmF0dHIoImhlaWdodCIsMTAwKSxpLmF0dHIoIndpZHRoIiw0MDApfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fShpLHQsRG0pO2JyZWFrO2Nhc2UicGllIjpoayhpLHQpO2JyZWFrO2Nhc2UiZXIiOnpfKHMuZXIpLFVfKGksdCk7YnJlYWs7Y2FzZSJqb3VybmV5IjpYRShzLmpvdXJuZXkpLFpFKGksdCk7YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6QWsocy5yZXF1aXJlbWVudCksTWsoaSx0KX19Y2F0Y2goZSl7dGhyb3cgZnVuY3Rpb24odCxlKXt0cnl7by5kZWJ1ZygiUmVuZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3JcbiIpO3ZhciBuPWF1KCIjIit0KSxyPW4uYXBwZW5kKCJnIik7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTA1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK2UpLG4uYXR0cigiaGVpZ2h0IiwxMDApLG4uYXR0cigid2lkdGgiLDQwMCksbi5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgNTEyIDUxMiIpfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fSh0LERtKSxlfWF1KCdbaWQ9IicuY29uY2F0KHQsJyJdJykpLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgXz1hdSgiI2QiK3QpLm5vZGUoKS5pbm5lckhUTUw7aWYoby5kZWJ1ZygiY25mLmFycm93TWFya2VyQWJzb2x1dGUiLHMuYXJyb3dNYXJrZXJBYnNvbHV0ZSkscy5hcnJvd01hcmtlckFic29sdXRlJiYiZmFsc2UiIT09cy5hcnJvd01hcmtlckFic29sdXRlfHwoXz1fLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoLio/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycsImciKSksXz0oXz1yQyhfKSkucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLHZvaWQgMCE9PW4pc3dpdGNoKGgpe2Nhc2UiZmxvd2NoYXJ0IjpjYXNlImZsb3djaGFydC12MiI6bihfLHl4LmJpbmRGdW5jdGlvbnMpO2JyZWFrO2Nhc2UiZ2FudHQiOm4oXyx2dy5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImNsYXNzIjpjYXNlImNsYXNzRGlhZ3JhbSI6bihfLHZiLmJpbmRGdW5jdGlvbnMpO2JyZWFrO2RlZmF1bHQ6bihfKX1lbHNlIG8uZGVidWcoIkNCID0gdW5kZWZpbmVkISIpO3RULmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKSx0VD1bXTt2YXIgeD1hdSgiI2QiK3QpLm5vZGUoKTtyZXR1cm4gbnVsbCE9PXgmJiJmdW5jdGlvbiI9PXR5cGVvZiB4LnJlbW92ZSYmYXUoIiNkIit0KS5ub2RlKCkucmVtb3ZlKCksX30scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9SnYoKSxuPUh2LmRldGVjdEluaXQodCxlKTtuJiZvLmRlYnVnKCJyZWluaXQgIixuKTt2YXIgcixpPUh2LmRldGVjdFR5cGUodCxlKTtzd2l0Y2goby5kZWJ1ZygiVHlwZSAiK2kpLGkpe2Nhc2UiZ2l0Ijoocj1qdygpKS5wYXJzZXIueXk9Unc7YnJlYWs7Y2FzZSJmbG93Y2hhcnQiOmNhc2UiZmxvd2NoYXJ0LXYyIjp5eC5jbGVhcigpLChyPW14KCkpLnBhcnNlci55eT15eDticmVhaztjYXNlInNlcXVlbmNlIjoocj1EaygpKS5wYXJzZXIueXk9Sms7YnJlYWs7Y2FzZSJnYW50dCI6KHI9d3coKSkucGFyc2VyLnl5PXZ3O2JyZWFrO2Nhc2UiY2xhc3MiOmNhc2UiY2xhc3NEaWFncmFtIjoocj1UYigpKS5wYXJzZXIueXk9dmI7YnJlYWs7Y2FzZSJzdGF0ZSI6Y2FzZSJzdGF0ZURpYWdyYW0iOihyPSRUKCkpLnBhcnNlci55eT1vRTticmVhaztjYXNlImluZm8iOm8uZGVidWcoImluZm8gaW5mbyBpbmZvIiksKHI9dGsoKSkucGFyc2VyLnl5PUt3O2JyZWFrO2Nhc2UicGllIjpvLmRlYnVnKCJwaWUiKSwocj1paygpKS5wYXJzZXIueXk9Y2s7YnJlYWs7Y2FzZSJlciI6by5kZWJ1ZygiZXIiKSwocj1JXygpKS5wYXJzZXIueXk9Ql87YnJlYWs7Y2FzZSJqb3VybmV5IjpvLmRlYnVnKCJKb3VybmV5IiksKHI9TEUoKSkucGFyc2VyLnl5PU9FO2JyZWFrO2Nhc2UicmVxdWlyZW1lbnQiOmNhc2UicmVxdWlyZW1lbnREaWFncmFtIjpvLmRlYnVnKCJSZXF1aXJlbWVudERpYWdyYW0iKSwocj1kaygpKS5wYXJzZXIueXk9Ymt9cmV0dXJuIHIucGFyc2VyLnl5LmdyYXBoVHlwZT1pLHIucGFyc2VyLnl5LnBhcnNlRXJyb3I9ZnVuY3Rpb24odCxlKXt0aHJvd3tzdHI6dCxoYXNoOmV9fSxyLnBhcnNlKHQpLHJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuLHIpe3RyeXtpZih2b2lkIDAhPT1lKXN3aXRjaChlPWUudHJpbSgpLG4pe2Nhc2Uib3Blbl9kaXJlY3RpdmUiOmlDPXt9O2JyZWFrO2Nhc2UidHlwZV9kaXJlY3RpdmUiOmlDLnR5cGU9ZS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UiYXJnX2RpcmVjdGl2ZSI6aUMuYXJncz1KU09OLnBhcnNlKGUpO2JyZWFrO2Nhc2UiY2xvc2VfZGlyZWN0aXZlIjooZnVuY3Rpb24odCxlLG4pe3N3aXRjaChvLmRlYnVnKCJEaXJlY3RpdmUgdHlwZT0iLmNvbmNhdChlLnR5cGUsIiB3aXRoIGFyZ3M6IiksZS5hcmdzKSxlLnR5cGUpe2Nhc2UiaW5pdCI6Y2FzZSJpbml0aWFsaXplIjpbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWUuYXJnc1t0XSYmKCJmbG93Y2hhcnQtdjIiPT09biYmKG49ImZsb3djaGFydCIpLGUuYXJnc1tuXT1lLmFyZ3NbdF0sZGVsZXRlIGUuYXJnc1t0XSl9KSksby5kZWJ1Zygic2FuaXRpemUgaW4gaGFuZGxlRGlyZWN0aXZlIixlLmFyZ3MpLFV2KGUuYXJncyksby5kZWJ1Zygic2FuaXRpemUgaW4gaGFuZGxlRGlyZWN0aXZlIChkb25lKSIsZS5hcmdzKSxlLmFyZ3MsZWIoZS5hcmdzKTticmVhaztjYXNlIndyYXAiOmNhc2Uibm93cmFwIjp0JiZ0LnNldFdyYXAmJnQuc2V0V3JhcCgid3JhcCI9PT1lLnR5cGUpO2JyZWFrO2Nhc2UidGhlbWVDc3MiOm8ud2FybigidGhlbWVDc3MgZW5jb3VudGVyZWQiKTticmVhaztkZWZhdWx0Om8ud2FybigiVW5oYW5kbGVkIGRpcmVjdGl2ZTogc291cmNlOiAnJSV7Ii5jb25jYXQoZS50eXBlLCI6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShlLmFyZ3M/ZS5hcmdzOnt9KSwifSUlIiksZSl9fSkodCxpQyxyKSxpQz1udWxsfX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgc2VxdWVuY2VEaWFncmFtIGRpcmVjdGl2ZTogIi5jb25jYXQoZSwiIGppc29uIGNvbnRleHQ6ICIpLmNvbmNhdChuKSksby5lcnJvcih0Lm1lc3NhZ2UpfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0JiZ0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSxmdW5jdGlvbih0KXtXdj1Mdih7fSx0KX0odCksdCYmdC50aGVtZSYmb3ZbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz1vdlt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz1vdi5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PW5DKHQpP2Z1bmN0aW9uKHQpe3JldHVybiBHdj1Mdih7fSxWdiksR3Y9THYoR3YsdCksdC50aGVtZSYmKEd2LnRoZW1lVmFyaWFibGVzPW92W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxadj1RdihHdixYdiksR3Z9KHQpOkt2KCk7YUMoZSkscyhlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxnZXRDb25maWc6SnYsc2V0Q29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBMdihadix0KSxKdigpfSxnZXRTaXRlQ29uZmlnOkt2LHVwZGF0ZVNpdGVDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIEd2PUx2KEd2LHQpLFF2KEd2LFh2KSxHdn0scmVzZXQ6ZnVuY3Rpb24oKXtuYigpfSxnbG9iYWxSZXNldDpmdW5jdGlvbigpe25iKCksYUMoSnYoKSl9LGRlZmF1bHRDb25maWc6VnZ9KTtzKEp2KCkubG9nTGV2ZWwpLG5iKEp2KCkpO2NvbnN0IHNDPW9DO3ZhciBjQz1mdW5jdGlvbigpe3VDLnN0YXJ0T25Mb2FkP3NDLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZ1Qy5pbml0KCk6dm9pZCAwPT09dUMuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJJbiBzdGFydCwgbm8gY29uZmlnIiksc0MuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJnVDLmluaXQoKSl9OyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtjQygpfSksITEpO3ZhciB1Qz17c3RhcnRPbkxvYWQ6ITAsaHRtbExhYmVsczohMCxtZXJtYWlkQVBJOnNDLHBhcnNlOnNDLnBhcnNlLHJlbmRlcjpzQy5yZW5kZXIsaW5pdDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9c0MuZ2V0Q29uZmlnKCk7YXJndW1lbnRzLmxlbmd0aD49Mj8odm9pZCAwIT09YXJndW1lbnRzWzBdJiYodUMuc2VxdWVuY2VDb25maWc9YXJndW1lbnRzWzBdKSx0PWFyZ3VtZW50c1sxXSk6dD1hcmd1bWVudHNbMF0sImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdPyhlPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOnZvaWQgMCE9PXIubWVybWFpZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLm1lcm1haWQuY2FsbGJhY2s/KGU9ci5tZXJtYWlkLmNhbGxiYWNrLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOm8uZGVidWcoIk5vIENhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpLHQ9dm9pZCAwPT09dD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWVybWFpZCIpOiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpOnQgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZT9bdF06dCxvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGJlZm9yZTogIit1Qy5zdGFydE9uTG9hZCksdm9pZCAwIT09dUMuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGlubmVyOiAiK3VDLnN0YXJ0T25Mb2FkKSxzQy51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDp1Qy5zdGFydE9uTG9hZH0pKSx2b2lkIDAhPT11Qy5nYW50dENvbmZpZyYmc0MudXBkYXRlU2l0ZUNvbmZpZyh7Z2FudHQ6dUMuZ2FudHRDb25maWd9KTtmb3IodmFyIGksYT1uZXcgSHYuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07aWYocy5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIikpcmV0dXJuImNvbnRpbnVlIjtzLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCEwKTt2YXIgYz0ibWVybWFpZC0iLmNvbmNhdChhLm5leHQoKSk7aT1zLmlubmVySFRNTCxpPUh2LmVudGl0eURlY29kZShpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTt2YXIgdT1Idi5kZXRlY3RJbml0KGkpO3UmJm8uZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIix1KTt0cnl7c0MucmVuZGVyKGMsaSwoZnVuY3Rpb24odCxuKXtzLmlubmVySFRNTD10LHZvaWQgMCE9PWUmJmUoYyksbiYmbihzKX0pLHMpfWNhdGNoKHQpe28ud2FybigiU3ludGF4IEVycm9yIHJlbmRlcmluZyIpLG8ud2Fybih0KSxuLnBhcnNlRXJyb3ImJm4ucGFyc2VFcnJvcih0KX19LGM9MDtjPHQubGVuZ3RoO2MrKylzKGMpfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQubWVybWFpZCYmKHZvaWQgMCE9PXQubWVybWFpZC5zdGFydE9uTG9hZCYmKHVDLnN0YXJ0T25Mb2FkPXQubWVybWFpZC5zdGFydE9uTG9hZCksdm9pZCAwIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMmJih1Qy5odG1sTGFiZWxzPSJmYWxzZSIhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmITEhPT10Lm1lcm1haWQuaHRtbExhYmVscykpLHNDLmluaXRpYWxpemUodCl9LGNvbnRlbnRMb2FkZWQ6Y0N9O2NvbnN0IGxDPXVDfSw0OTQ5Oih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNjYxNCksZGFncmU6bigxNDYzKSxpbnRlcnNlY3Q6big4MTE0KSxyZW5kZXI6big1Nzg3KSx1dGlsOm4oODM1NSksdmVyc2lvbjpuKDU2ODkpfX0sOTE0NDoodCxlLG4pPT57dmFyIHI9big4MzU1KTtmdW5jdGlvbiBpKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9dC5leHBvcnRzPXtkZWZhdWx0Omksbm9ybWFsOmksdmVlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgTCA0IDUgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9LHVuZGlyZWN0ZWQ6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX19fSw1NjMyOih0LGUsbik9Pnt2YXIgcj1uKDgzNTUpLGk9big0MzIyKSxhPW4oMTMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gci5pc1N1YmdyYXBoKGUsdCl9KSkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShvLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTtyZXR1cm4gcy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLmlkfSkpLnN0eWxlKCJvcGFjaXR5IiwwKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKSxyLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxyPWkuc2VsZWN0KHRoaXMpO2kuc2VsZWN0KHRoaXMpLmFwcGVuZCgicmVjdCIpO3ZhciBvPXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2EobyxuLG4uY2x1c3RlckxhYmVsUG9zKX0pKSxzLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxhPWkuc2VsZWN0KHRoaXMpO3IuYXBwbHlTdHlsZShhLG4uc3R5bGUpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpLHIuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHN9fSw2MzE1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9bigxMDM0KSxpPW4oMTMyMiksYT1uKDgzNTUpLG89big0MzIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtyZXR1cm4gcy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVkZ2VMYWJlbCIsITApLnN0eWxlKCJvcGFjaXR5IiwwKSwocz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBhPWUuZWRnZSh0KSxzPWkobixlLmVkZ2UodCksMCwwKS5jbGFzc2VkKCJsYWJlbCIsITApLGM9cy5ub2RlKCkuZ2V0QkJveCgpO2EubGFiZWxJZCYmcy5hdHRyKCJpZCIsYS5sYWJlbElkKSxyLmhhcyhhLCJ3aWR0aCIpfHwoYS53aWR0aD1jLndpZHRoKSxyLmhhcyhhLCJoZWlnaHQiKXx8KGEuaGVpZ2h0PWMuaGVpZ2h0KX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKSxhLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sOTQwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9bigxMDM0KSxpPW4oNzU4NCksYT1uKDgzNTUpLG89big0MzIyKTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49KG8ubGluZXx8by5zdmcubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk7cmV0dXJuKG4uY3VydmV8fG4uaW50ZXJwb2xhdGUpKHQuY3VydmUpLG4oZSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LnNlbGVjdEFsbCgiZy5lZGdlUGF0aCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGgiKS5zdHlsZSgib3BhY2l0eSIsMCk7cmV0dXJuIG4uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJwYXRoIikuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KSxpPWUubm9kZSh0LnYpLmVsZW07cmV0dXJuIHMobixyLnJhbmdlKG4ucG9pbnRzLmxlbmd0aCkubWFwKChmdW5jdGlvbigpe3JldHVybiBlPSh0PWkpLmdldEJCb3goKSx7eDoobj10Lm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkodC5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKGUud2lkdGgvMixlLmhlaWdodC8yKSkuZSx5Om4uZn07dmFyIHQsZSxufSkpKX0pKSxuLmFwcGVuZCgiZGVmcyIpLG59KGMsZSk7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGl0KCk7YS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9KGMsZSk7dmFyIGw9dm9pZCAwIT09Yy5tZXJnZT9jLm1lcmdlKHUpOmM7cmV0dXJuIGEuYXBwbHlUcmFuc2l0aW9uKGwsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLGwuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcykscj1lLmVkZ2UodCk7ci5lbGVtPXRoaXMsci5pZCYmbi5hdHRyKCJpZCIsci5pZCksYS5hcHBseUNsYXNzKG4sci5jbGFzcywobi5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJlZGdlUGF0aCIpfSkpLGwuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7bi5hcnJvd2hlYWRJZD1yLnVuaXF1ZUlkKCJhcnJvd2hlYWQiKTt2YXIgYz1vLnNlbGVjdCh0aGlzKS5hdHRyKCJtYXJrZXItZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrKHQ9bG9jYXRpb24uaHJlZixlPW4uYXJyb3doZWFkSWQsdC5zcGxpdCgiIyIpWzBdKyIjIitlKyIpIik7dmFyIHQsZX0pKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTthLmFwcGx5VHJhbnNpdGlvbihjLGUpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj10LmVkZ2UoZSkscj10Lm5vZGUoZS52KSxhPXQubm9kZShlLncpLG89bi5wb2ludHMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG8udW5zaGlmdChpKHIsb1swXSkpLG8ucHVzaChpKGEsb1tvLmxlbmd0aC0xXSkpLHMobixvKX0oZSx0KX0pKSxhLmFwcGx5U3R5bGUoYyxuLnN0eWxlKX0pKSxsLnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksbC5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7KDAsbltyLmFycm93aGVhZF0pKG8uc2VsZWN0KHRoaXMpLHIuYXJyb3doZWFkSWQsciwiYXJyb3doZWFkIil9KSksbH19LDYwNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oMTAzNCksaT1uKDEzMjIpLGE9big4MzU1KSxvPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcyxjPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFhLmlzU3ViZ3JhcGgoZSx0KX0pKSx1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGMsKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmNsYXNzZWQoInVwZGF0ZSIsITApO3JldHVybiB1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLCh1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHM9ZS5ub2RlKHQpLGM9by5zZWxlY3QodGhpcyk7YS5hcHBseUNsYXNzKGMscy5jbGFzcywoYy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksYy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgdT1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWkodSxzKSxoPW5bcy5zaGFwZV0sZj1yLnBpY2sobC5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3MuZWxlbT10aGlzLHMuaWQmJmMuYXR0cigiaWQiLHMuaWQpLHMubGFiZWxJZCYmdS5hdHRyKCJpZCIscy5sYWJlbElkKSxyLmhhcyhzLCJ3aWR0aCIpJiYoZi53aWR0aD1zLndpZHRoKSxyLmhhcyhzLCJoZWlnaHQiKSYmKGYuaGVpZ2h0PXMuaGVpZ2h0KSxmLndpZHRoKz1zLnBhZGRpbmdMZWZ0K3MucGFkZGluZ1JpZ2h0LGYuaGVpZ2h0Kz1zLnBhZGRpbmdUb3Arcy5wYWRkaW5nQm90dG9tLHUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMucGFkZGluZ0xlZnQtcy5wYWRkaW5nUmlnaHQpLzIrIiwiKyhzLnBhZGRpbmdUb3Atcy5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIGQ9by5zZWxlY3QodGhpcyk7ZC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgcD1oKGQsZixzKS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTthLmFwcGx5U3R5bGUocCxzLnN0eWxlKTt2YXIgeT1wLm5vZGUoKS5nZXRCQm94KCk7cy53aWR0aD15LndpZHRoLHMuaGVpZ2h0PXkuaGVpZ2h0fSkpLHM9dS5leGl0P3UuZXhpdCgpOnUuc2VsZWN0QWxsKG51bGwpLGEuYXBwbHlUcmFuc2l0aW9uKHMsZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9fSw0MzIyOih0LGUsbik9Pnt2YXIgcjtpZighcil0cnl7cj1uKDcxODgpfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZDMpLHQuZXhwb3J0cz1yfSwxNDYzOih0LGUsbik9Pnt2YXIgcjt0cnl7cj1uKDY4MSl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kYWdyZSksdC5leHBvcnRzPXJ9LDY2MTQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDgxMTQ6KHQsZSxuKT0+e3QuZXhwb3J0cz17bm9kZTpuKDc1ODQpLGNpcmNsZTpuKDY1ODcpLGVsbGlwc2U6bigzMjYwKSxwb2x5Z29uOm4oNTMzNykscmVjdDpuKDgwNDkpfX0sNjU4NzoodCxlLG4pPT57dmFyIHI9bigzMjYwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByKHQsZSxlLG4pfX0sMzI2MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX19LDY4MDg6dD0+e2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdCplPjB9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBhLG8scyxjLHUsbCxoLGYsZCxwLHksZyxtO2lmKCEoYT1uLnktdC55LHM9dC54LW4ueCx1PW4ueCp0LnktdC54Km4ueSxkPWEqci54K3Mqci55K3UscD1hKmkueCtzKmkueSt1LDAhPT1kJiYwIT09cCYmZShkLHApfHwobz1pLnktci55LGM9ci54LWkueCxsPWkueCpyLnktci54KmkueSxoPW8qdC54K2MqdC55K2wsZj1vKm4ueCtjKm4ueStsLDAhPT1oJiYwIT09ZiYmZShoLGYpfHwwPT0oeT1hKmMtbypzKSkpKXJldHVybiBnPU1hdGguYWJzKHkvMikse3g6KG09cypsLWMqdSk8MD8obS1nKS95OihtK2cpL3kseToobT1vKnUtYSpsKTwwPyhtLWcpL3k6KG0rZykveX19fSw3NTg0OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSw1MzM3Oih0LGUsbik9Pnt2YXIgcj1uKDY4MDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9cmV0dXJuIG8ubGVuZ3RoPyhvLmxlbmd0aD4xJiZvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxvWzBdKTooY29uc29sZS5sb2coIk5PIElOVEVSU0VDVElPTiBGT1VORCwgUkVUVVJOIE5PREUgQ0VOVEVSIix0KSx0KX19LDgwNDk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX19LDgyODQ6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGk9bi5hcHBlbmQoInhodG1sOmRpdiIpO2kuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIGE9ZS5sYWJlbDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UiZnVuY3Rpb24iOmkuaW5zZXJ0KGEpO2JyZWFrO2Nhc2Uib2JqZWN0IjppLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTticmVhaztkZWZhdWx0OmkuaHRtbChhKX1yLmFwcGx5U3R5bGUoaSxlLmxhYmVsU3R5bGUpLGkuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciBvPWkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmF0dHIoIndpZHRoIixvLndpZHRoKS5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KSxufX0sMTMyMjoodCxlLG4pPT57dmFyIHI9big3MzE4KSxpPW4oODI4NCksYT1uKDgyODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89ZS5sYWJlbCxzPXQuYXBwZW5kKCJnIik7InN2ZyI9PT1lLmxhYmVsVHlwZT9hKHMsZSk6InN0cmluZyIhPXR5cGVvZiBvfHwiaHRtbCI9PT1lLmxhYmVsVHlwZT9pKHMsZSk6cihzLGUpO3ZhciBjLHU9cy5ub2RlKCkuZ2V0QkJveCgpO3N3aXRjaChuKXtjYXNlInRvcCI6Yz0tZS5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yz1lLmhlaWdodC8yLXUuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yz0tdS5oZWlnaHQvMn1yZXR1cm4gcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdS53aWR0aC8yKyIsIitjKyIpIiksc319LDgyODc6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5ub2RlKCkuYXBwZW5kQ2hpbGQoZS5sYWJlbCksci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sNzMxODoodCxlLG4pPT57dmFyIHI9big4MzU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5hcHBlbmQoInRleHQiKSxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPSIiLHI9ITEsaT0wO2k8dC5sZW5ndGg7KytpKWU9dFtpXSxyPyhuKz0ibiI9PT1lPyJcbiI6ZSxyPSExKToiXFwiPT09ZT9yPSEwOm4rPWU7cmV0dXJuIG59KGUubGFiZWwpLnNwbGl0KCJcbiIpLGE9MDthPGkubGVuZ3RoO2ErKyluLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KGlbYV0pO3JldHVybiByLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSwxMDM0Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17ZGVmYXVsdHM6bigxNzQ3KSxlYWNoOm4oNjA3MyksaXNGdW5jdGlvbjpuKDM1NjApLGlzUGxhaW5PYmplY3Q6big4NjMwKSxwaWNrOm4oOTcyMiksaGFzOm4oODcyMSkscmFuZ2U6big2MDI2KSx1bmlxdWVJZDpuKDM5NTUpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSw2MzgxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpO2Z1bmN0aW9uIGEodCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9bi5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsYSksci5hcHBseVRyYW5zaXRpb24obi5zZWxlY3RBbGwoInJlY3QiKSxlKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5oZWlnaHR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkud2lkdGgvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLWUubm9kZSh0KS5oZWlnaHQvMn0pKX19LDQ1Nzc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgzNTUpLGk9big0MzIyKSxhPW4oMTAzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLmVkZ2UodCk7cmV0dXJuIGEuaGFzKG4sIngiKT8idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikiOiIifXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSw0ODQ5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLm5vZGUodCk7cmV0dXJuInRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sNTc4NzoodCxlLG4pPT57dmFyIHI9bigxMDM0KSxpPW4oNDMyMiksYT1uKDE0NjMpLmxheW91dDt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKDYwNyksZT1uKDU2MzIpLGk9big2MzE1KSx1PW4oOTQwKSxsPW4oNDg0OSksaD1uKDQ1NzcpLGY9big2MzgxKSxkPW4oNDQxOCkscD1uKDkxNDQpLHk9ZnVuY3Rpb24obix5KXshZnVuY3Rpb24odCl7dC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJsYWJlbCIpfHx0LmNoaWxkcmVuKGUpLmxlbmd0aHx8KG4ubGFiZWw9ZSksci5oYXMobiwicGFkZGluZ1giKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmdYLHBhZGRpbmdSaWdodDpuLnBhZGRpbmdYfSksci5oYXMobiwicGFkZGluZ1kiKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nVG9wOm4ucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmdZfSksci5oYXMobiwicGFkZGluZyIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZyxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nLHBhZGRpbmdUb3A6bi5wYWRkaW5nLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nfSksci5kZWZhdWx0cyhuLG8pLHIuZWFjaChbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSwoZnVuY3Rpb24odCl7blt0XT1OdW1iZXIoblt0XSl9KSksci5oYXMobiwid2lkdGgiKSYmKG4uX3ByZXZXaWR0aD1uLndpZHRoKSxyLmhhcyhuLCJoZWlnaHQiKSYmKG4uX3ByZXZIZWlnaHQ9bi5oZWlnaHQpfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5oYXMobiwibGFiZWwiKXx8KG4ubGFiZWw9IiIpLHIuZGVmYXVsdHMobixzKX0pKX0oeSk7dmFyIGc9YyhuLCJvdXRwdXQiKSxtPWMoZywiY2x1c3RlcnMiKSx2PWMoZywiZWRnZVBhdGhzIiksYj1pKGMoZywiZWRnZUxhYmVscyIpLHkpLF89dChjKGcsIm5vZGVzIikseSxkKTthKHkpLGwoXyx5KSxoKGIseSksdSh2LHkscCk7dmFyIHg9ZShtLHkpO2YoeCx5KSxmdW5jdGlvbih0KXtyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwiX3ByZXZXaWR0aCIpP24ud2lkdGg9bi5fcHJldldpZHRoOmRlbGV0ZSBuLndpZHRoLHIuaGFzKG4sIl9wcmV2SGVpZ2h0Iik/bi5oZWlnaHQ9bi5fcHJldkhlaWdodDpkZWxldGUgbi5oZWlnaHQsZGVsZXRlIG4uX3ByZXZXaWR0aCxkZWxldGUgbi5fcHJldkhlaWdodH0pKX0oeSl9O3JldHVybiB5LmNyZWF0ZU5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUseSk6dH0seS5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHkpOmV9LHkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHkpOml9LHkuY3JlYXRlRWRnZVBhdGhzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQseSk6dX0seS5zaGFwZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCx5KTpkfSx5LmFycm93cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10LHkpOnB9LHl9O3ZhciBvPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LHM9e2Fycm93aGVhZDoibm9ybWFsIixjdXJ2ZTppLmN1cnZlTGluZWFyfTtmdW5jdGlvbiBjKHQsZSl7dmFyIG49dC5zZWxlY3QoImcuIitlKTtyZXR1cm4gbi5lbXB0eSgpJiYobj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSksbn19LDQ0MTg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgwNDkpLGk9bigzMjYwKSxhPW4oNjU4Nyksbz1uKDUzMzcpO3QuZXhwb3J0cz17cmVjdDpmdW5jdGlvbih0LGUsbil7dmFyIGk9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsbi5yeCkuYXR0cigicnkiLG4ucnkpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiByKG4sdCl9LGl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lmluc2VydCgiZWxsaXBzZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyeCIscikuYXR0cigicnkiLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLHIsYSx0KX0sb30sY2lyY2xlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KS8yLGk9dC5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyIixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGEobixyLHQpfSxpfSxkaWFtb25kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoKk1hdGguU1FSVDIvMixpPWUuaGVpZ2h0Kk1hdGguU1FSVDIvMixhPVt7eDowLHk6LWl9LHt4Oi1yLHk6MH0se3g6MCx5Oml9LHt4OnIseTowfV0scz10Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbyhuLGEsdCl9LHN9fX0sODM1NToodCxlLG4pPT57dmFyIHI9bigxMDM0KTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LDU2ODk6dD0+e3QuZXhwb3J0cz0iMC42LjQifSw3MTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7bi5yKGUpLG4uZChlLHtGb3JtYXRTcGVjaWZpZXI6KCk9PnVjLGFjdGl2ZTooKT0+SnIsYXJjOigpPT5meCxhcmVhOigpPT52eCxhcmVhUmFkaWFsOigpPT5TeCxhc2NlbmRpbmc6KCk9PmksYXV0b1R5cGU6KCk9PkZvLGF4aXNCb3R0b206KCk9Pml0LGF4aXNMZWZ0OigpPT5hdCxheGlzUmlnaHQ6KCk9PnJ0LGF4aXNUb3A6KCk9Pm50LGJpc2VjdDooKT0+dSxiaXNlY3RMZWZ0OigpPT5jLGJpc2VjdFJpZ2h0OigpPT5zLGJpc2VjdG9yOigpPT5hLGJsb2I6KCk9Pm1zLGJydXNoOigpPT5BaSxicnVzaFNlbGVjdGlvbjooKT0+RWksYnJ1c2hYOigpPT5DaSxicnVzaFk6KCk9PlNpLGJ1ZmZlcjooKT0+YnMsY2hvcmQ6KCk9PkZpLGNsaWVudFBvaW50OigpPT5EbixjbHVzdGVyOigpPT5TZCxjb2xvcjooKT0+VmUsY29udG91ckRlbnNpdHk6KCk9Pm9vLGNvbnRvdXJzOigpPT50byxjcmVhdGU6KCk9PmpfLGNyZWF0b3I6KCk9PmllLGNyb3NzOigpPT5mLGNzdjooKT0+VHMsY3N2Rm9ybWF0OigpPT5Ubyxjc3ZGb3JtYXRCb2R5OigpPT5Fbyxjc3ZGb3JtYXRSb3c6KCk9PlNvLGNzdkZvcm1hdFJvd3M6KCk9PkNvLGNzdkZvcm1hdFZhbHVlOigpPT5Bbyxjc3ZQYXJzZTooKT0+d28sY3N2UGFyc2VSb3dzOigpPT5rbyxjdWJlaGVsaXg6KCk9PkhhLGN1cnZlQmFzaXM6KCk9PnN3LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PnV3LGN1cnZlQmFzaXNPcGVuOigpPT5odyxjdXJ2ZUJ1bmRsZTooKT0+ZHcsY3VydmVDYXJkaW5hbDooKT0+Z3csY3VydmVDYXJkaW5hbENsb3NlZDooKT0+dncsY3VydmVDYXJkaW5hbE9wZW46KCk9Pl93LGN1cnZlQ2F0bXVsbFJvbTooKT0+a3csY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5FdyxjdXJ2ZUNhdG11bGxSb21PcGVuOigpPT5TdyxjdXJ2ZUxpbmVhcjooKT0+cHgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9Pk13LGN1cnZlTW9ub3RvbmVYOigpPT5GdyxjdXJ2ZU1vbm90b25lWTooKT0+UHcsY3VydmVOYXR1cmFsOigpPT56dyxjdXJ2ZVN0ZXA6KCk9PnF3LGN1cnZlU3RlcEFmdGVyOigpPT4kdyxjdXJ2ZVN0ZXBCZWZvcmU6KCk9Pkh3LGN1c3RvbUV2ZW50OigpPT5nZSxkZXNjZW5kaW5nOigpPT5kLGRldmlhdGlvbjooKT0+ZyxkaXNwYXRjaDooKT0+ZnQsZHJhZzooKT0+cG8sZHJhZ0Rpc2FibGU6KCk9PlNlLGRyYWdFbmFibGU6KCk9PkFlLGRzdjooKT0+a3MsZHN2Rm9ybWF0OigpPT5fbyxlYXNlQmFjazooKT0+aHMsZWFzZUJhY2tJbjooKT0+dXMsZWFzZUJhY2tJbk91dDooKT0+aHMsZWFzZUJhY2tPdXQ6KCk9PmxzLGVhc2VCb3VuY2U6KCk9Pm9zLGVhc2VCb3VuY2VJbjooKT0+YXMsZWFzZUJvdW5jZUluT3V0OigpPT5zcyxlYXNlQm91bmNlT3V0OigpPT5vcyxlYXNlQ2lyY2xlOigpPT5ycyxlYXNlQ2lyY2xlSW46KCk9PmVzLGVhc2VDaXJjbGVJbk91dDooKT0+cnMsZWFzZUNpcmNsZU91dDooKT0+bnMsZWFzZUN1YmljOigpPT5YcixlYXNlQ3ViaWNJbjooKT0+VnIsZWFzZUN1YmljSW5PdXQ6KCk9PlhyLGVhc2VDdWJpY091dDooKT0+R3IsZWFzZUVsYXN0aWM6KCk9PnBzLGVhc2VFbGFzdGljSW46KCk9PmRzLGVhc2VFbGFzdGljSW5PdXQ6KCk9PnlzLGVhc2VFbGFzdGljT3V0OigpPT5wcyxlYXNlRXhwOigpPT50cyxlYXNlRXhwSW46KCk9PktvLGVhc2VFeHBJbk91dDooKT0+dHMsZWFzZUV4cE91dDooKT0+Sm8sZWFzZUxpbmVhcjooKT0+am8sZWFzZVBvbHk6KCk9PiRvLGVhc2VQb2x5SW46KCk9PnFvLGVhc2VQb2x5SW5PdXQ6KCk9PiRvLGVhc2VQb2x5T3V0OigpPT5IbyxlYXNlUXVhZDooKT0+VW8sZWFzZVF1YWRJbjooKT0+WW8sZWFzZVF1YWRJbk91dDooKT0+VW8sZWFzZVF1YWRPdXQ6KCk9PnpvLGVhc2VTaW46KCk9PlpvLGVhc2VTaW5JbjooKT0+R28sZWFzZVNpbkluT3V0OigpPT5abyxlYXNlU2luT3V0OigpPT5YbyxlbnRyaWVzOigpPT5wYSxldmVudDooKT0+bGUsZXh0ZW50OigpPT5tLGZvcmNlQ2VudGVyOigpPT5Ccyxmb3JjZUNvbGxpZGU6KCk9PldzLGZvcmNlTGluazooKT0+WHMsZm9yY2VNYW55Qm9keTooKT0+dGMsZm9yY2VSYWRpYWw6KCk9PmVjLGZvcmNlU2ltdWxhdGlvbjooKT0+SnMsZm9yY2VYOigpPT5uYyxmb3JjZVk6KCk9PnJjLGZvcm1hdDooKT0+cGMsZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+YmMsZm9ybWF0TG9jYWxlOigpPT52Yyxmb3JtYXRQcmVmaXg6KCk9PnljLGZvcm1hdFNwZWNpZmllcjooKT0+Y2MsZ2VvQWxiZXJzOigpPT5VZixnZW9BbGJlcnNVc2E6KCk9PnFmLGdlb0FyZWE6KCk9Pnl1LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+VmYsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT5XZixnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+WGYsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PkdmLGdlb0JvdW5kczooKT0+c2wsZ2VvQ2VudHJvaWQ6KCk9PmJsLGdlb0NpcmNsZTooKT0+TmwsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+VWwsZ2VvQ2xpcENpcmNsZTooKT0+cWwsZ2VvQ2xpcEV4dGVudDooKT0+VmwsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+V2wsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PmVkLGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT50ZCxnZW9Db25pY0VxdWFsQXJlYTooKT0+emYsZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PllmLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PmFkLGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PmlkLGdlb0NvbnRhaW5zOigpPT5waCxnZW9EaXN0YW5jZTooKT0+YWgsZ2VvRXF1YWxFYXJ0aDooKT0+ZmQsZ2VvRXF1YWxFYXJ0aFJhdzooKT0+aGQsZ2VvRXF1aXJlY3Rhbmd1bGFyOigpPT5yZCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pm5kLGdlb0dub21vbmljOigpPT5wZCxnZW9Hbm9tb25pY1JhdzooKT0+ZGQsZ2VvR3JhdGljdWxlOigpPT5taCxnZW9HcmF0aWN1bGUxMDooKT0+dmgsZ2VvSWRlbnRpdHk6KCk9PnlkLGdlb0ludGVycG9sYXRlOigpPT5iaCxnZW9MZW5ndGg6KCk9Pm5oLGdlb01lcmNhdG9yOigpPT5RZixnZW9NZXJjYXRvclJhdzooKT0+WmYsZ2VvTmF0dXJhbEVhcnRoMTooKT0+bWQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+Z2QsZ2VvT3J0aG9ncmFwaGljOigpPT5iZCxnZW9PcnRob2dyYXBoaWNSYXc6KCk9PnZkLGdlb1BhdGg6KCk9PmtmLGdlb1Byb2plY3Rpb246KCk9PkZmLGdlb1Byb2plY3Rpb25NdXRhdG9yOigpPT5QZixnZW9Sb3RhdGlvbjooKT0+U2wsZ2VvU3RlcmVvZ3JhcGhpYzooKT0+eGQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+X2QsZ2VvU3RyZWFtOigpPT5udSxnZW9UcmFuc2Zvcm06KCk9PlRmLGdlb1RyYW5zdmVyc2VNZXJjYXRvcjooKT0+a2QsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3OigpPT53ZCxncmF5OigpPT5rYSxoY2w6KCk9Pk9hLGhpZXJhcmNoeTooKT0+TWQsaGlzdG9ncmFtOigpPT5ELGhzbDooKT0+YW4saHRtbDooKT0+RHMsaW1hZ2U6KCk9PkNzLGludGVycG9sYXRlOigpPT5NbixpbnRlcnBvbGF0ZUFycmF5OigpPT54bixpbnRlcnBvbGF0ZUJhc2lzOigpPT51bixpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOigpPT5sbixpbnRlcnBvbGF0ZUJsdWVzOigpPT5mXyxpbnRlcnBvbGF0ZUJyQkc6KCk9PlRiLGludGVycG9sYXRlQnVHbjooKT0+VWIsaW50ZXJwb2xhdGVCdVB1OigpPT5IYixpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PmtfLGludGVycG9sYXRlQ29vbDooKT0+Q18saW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnpwLGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+VF8saW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5VcCxpbnRlcnBvbGF0ZURhdGU6KCk9PmtuLGludGVycG9sYXRlRGlzY3JldGU6KCk9PlNwLGludGVycG9sYXRlR25CdTooKT0+V2IsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PnBfLGludGVycG9sYXRlR3JleXM6KCk9PmdfLGludGVycG9sYXRlSGNsOigpPT5QcCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9PmpwLGludGVycG9sYXRlSHNsOigpPT5McCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PklwLGludGVycG9sYXRlSHVlOigpPT5BcCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PkZfLGludGVycG9sYXRlTGFiOigpPT5ScCxpbnRlcnBvbGF0ZU1hZ21hOigpPT5SXyxpbnRlcnBvbGF0ZU51bWJlcjooKT0+VG4saW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+Ym4saW50ZXJwb2xhdGVPYmplY3Q6KCk9PkVuLGludGVycG9sYXRlT3JSZDooKT0+R2IsaW50ZXJwb2xhdGVPcmFuZ2VzOigpPT53XyxpbnRlcnBvbGF0ZVBSR246KCk9PkNiLGludGVycG9sYXRlUGlZRzooKT0+QWIsaW50ZXJwb2xhdGVQbGFzbWE6KCk9PlBfLGludGVycG9sYXRlUHVCdTooKT0+S2IsaW50ZXJwb2xhdGVQdUJ1R246KCk9PlpiLGludGVycG9sYXRlUHVPcjooKT0+TmIsaW50ZXJwb2xhdGVQdVJkOigpPT50XyxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZfLGludGVycG9sYXRlUmFpbmJvdzooKT0+QV8saW50ZXJwb2xhdGVSZEJ1OigpPT5PYixpbnRlcnBvbGF0ZVJkR3k6KCk9PkxiLGludGVycG9sYXRlUmRQdTooKT0+bl8saW50ZXJwb2xhdGVSZFlsQnU6KCk9PlJiLGludGVycG9sYXRlUmRZbEduOigpPT5QYixpbnRlcnBvbGF0ZVJlZHM6KCk9Pl9fLGludGVycG9sYXRlUmdiOigpPT55bixpbnRlcnBvbGF0ZVJnYkJhc2lzOigpPT5tbixpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkOigpPT52bixpbnRlcnBvbGF0ZVJvdW5kOigpPT5NcCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9Pk9fLGludGVycG9sYXRlU3BlY3RyYWw6KCk9PlliLGludGVycG9sYXRlU3RyaW5nOigpPT5BbixpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczooKT0+cHIsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PnlyLGludGVycG9sYXRlVHVyYm86KCk9PkJfLGludGVycG9sYXRlVmlyaWRpczooKT0+SV8saW50ZXJwb2xhdGVXYXJtOigpPT5FXyxpbnRlcnBvbGF0ZVlsR246KCk9Pm9fLGludGVycG9sYXRlWWxHbkJ1OigpPT5pXyxpbnRlcnBvbGF0ZVlsT3JCcjooKT0+Y18saW50ZXJwb2xhdGVZbE9yUmQ6KCk9PmxfLGludGVycG9sYXRlWm9vbTooKT0+T3AsaW50ZXJydXB0OigpPT5hcixpbnRlcnZhbDooKT0+ZmssaXNvRm9ybWF0OigpPT51ayxpc29QYXJzZTooKT0+aGssanNvbjooKT0+QXMsa2V5czooKT0+ZmEsbGFiOigpPT5UYSxsY2g6KCk9PkRhLGxpbmU6KCk9Pm14LGxpbmVSYWRpYWw6KCk9PkN4LGxpbmtIb3Jpem9udGFsOigpPT5SeCxsaW5rUmFkaWFsOigpPT5QeCxsaW5rVmVydGljYWw6KCk9PkZ4LGxvY2FsOigpPT56XyxtYXA6KCk9Pm5hLG1hdGNoZXI6KCk9Pm10LG1heDooKT0+SSxtZWFuOigpPT5SLG1lZGlhbjooKT0+RixtZXJnZTooKT0+UCxtaW46KCk9PmosbW91c2U6KCk9PkJuLG5hbWVzcGFjZTooKT0+RXQsbmFtZXNwYWNlczooKT0+VHQsbmVzdDooKT0+cmEsbm93OigpPT5IbixwYWNrOigpPT50cCxwYWNrRW5jbG9zZTooKT0+SWQscGFja1NpYmxpbmdzOigpPT5HZCxwYWlyczooKT0+bCxwYXJ0aXRpb246KCk9Pm9wLHBhdGg6KCk9PldpLHBlcm11dGU6KCk9PlkscGllOigpPT54eCxwaWVjZXdpc2U6KCk9PnFwLHBvaW50UmFkaWFsOigpPT5BeCxwb2x5Z29uQXJlYTooKT0+JHAscG9seWdvbkNlbnRyb2lkOigpPT5XcCxwb2x5Z29uQ29udGFpbnM6KCk9PlFwLHBvbHlnb25IdWxsOigpPT5acCxwb2x5Z29uTGVuZ3RoOigpPT5LcCxwcmVjaXNpb25GaXhlZDooKT0+X2MscHJlY2lzaW9uUHJlZml4OigpPT54YyxwcmVjaXNpb25Sb3VuZDooKT0+d2MscXVhZHRyZWU6KCk9PllzLHF1YW50aWxlOigpPT5PLHF1YW50aXplOigpPT5IcCxyYWRpYWxBcmVhOigpPT5TeCxyYWRpYWxMaW5lOigpPT5DeCxyYW5kb21CYXRlczooKT0+aXkscmFuZG9tRXhwb25lbnRpYWw6KCk9PmF5LHJhbmRvbUlyd2luSGFsbDooKT0+cnkscmFuZG9tTG9nTm9ybWFsOigpPT5ueSxyYW5kb21Ob3JtYWw6KCk9PmV5LHJhbmRvbVVuaWZvcm06KCk9PnR5LHJhbmdlOigpPT5rLHJnYjooKT0+UWUscmliYm9uOigpPT5LaSxzY2FsZUJhbmQ6KCk9PmR5LHNjYWxlRGl2ZXJnaW5nOigpPT5vYixzY2FsZURpdmVyZ2luZ0xvZzooKT0+c2Isc2NhbGVEaXZlcmdpbmdQb3c6KCk9PnViLHNjYWxlRGl2ZXJnaW5nU3FydDooKT0+bGIsc2NhbGVEaXZlcmdpbmdTeW1sb2c6KCk9PmNiLHNjYWxlSWRlbnRpdHk6KCk9Pk15LHNjYWxlSW1wbGljaXQ6KCk9Pmh5LHNjYWxlTGluZWFyOigpPT5BeSxzY2FsZUxvZzooKT0+UHksc2NhbGVPcmRpbmFsOigpPT5meSxzY2FsZVBvaW50OigpPT55eSxzY2FsZVBvdzooKT0+Vnksc2NhbGVRdWFudGlsZTooKT0+WHksc2NhbGVRdWFudGl6ZTooKT0+Wnksc2NhbGVTZXF1ZW50aWFsOigpPT5KdixzY2FsZVNlcXVlbnRpYWxMb2c6KCk9PnRiLHNjYWxlU2VxdWVudGlhbFBvdzooKT0+bmIsc2NhbGVTZXF1ZW50aWFsUXVhbnRpbGU6KCk9PmliLHNjYWxlU2VxdWVudGlhbFNxcnQ6KCk9PnJiLHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+ZWIsc2NhbGVTcXJ0OigpPT5HeSxzY2FsZVN5bWxvZzooKT0+VXksc2NhbGVUaHJlc2hvbGQ6KCk9PlF5LHNjYWxlVGltZTooKT0+WXYsc2NhbGVVdGM6KCk9Plp2LHNjYW46KCk9Pnosc2NoZW1lQWNjZW50OigpPT5kYixzY2hlbWVCbHVlczooKT0+aF8sc2NoZW1lQnJCRzooKT0+a2Isc2NoZW1lQnVHbjooKT0+emIsc2NoZW1lQnVQdTooKT0+cWIsc2NoZW1lQ2F0ZWdvcnkxMDooKT0+ZmIsc2NoZW1lRGFyazI6KCk9PnBiLHNjaGVtZUduQnU6KCk9PiRiLHNjaGVtZUdyZWVuczooKT0+ZF8sc2NoZW1lR3JleXM6KCk9PnlfLHNjaGVtZU9yUmQ6KCk9PlZiLHNjaGVtZU9yYW5nZXM6KCk9PnhfLHNjaGVtZVBSR246KCk9PkViLHNjaGVtZVBhaXJlZDooKT0+eWIsc2NoZW1lUGFzdGVsMTooKT0+Z2Isc2NoZW1lUGFzdGVsMjooKT0+bWIsc2NoZW1lUGlZRzooKT0+U2Isc2NoZW1lUHVCdTooKT0+UWIsc2NoZW1lUHVCdUduOigpPT5YYixzY2hlbWVQdU9yOigpPT5NYixzY2hlbWVQdVJkOigpPT5KYixzY2hlbWVQdXJwbGVzOigpPT5tXyxzY2hlbWVSZEJ1OigpPT5EYixzY2hlbWVSZEd5OigpPT5CYixzY2hlbWVSZFB1OigpPT5lXyxzY2hlbWVSZFlsQnU6KCk9PkliLHNjaGVtZVJkWWxHbjooKT0+RmIsc2NoZW1lUmVkczooKT0+Yl8sc2NoZW1lU2V0MTooKT0+dmIsc2NoZW1lU2V0MjooKT0+YmIsc2NoZW1lU2V0MzooKT0+X2Isc2NoZW1lU3BlY3RyYWw6KCk9PmpiLHNjaGVtZVRhYmxlYXUxMDooKT0+eGIsc2NoZW1lWWxHbjooKT0+YV8sc2NoZW1lWWxHbkJ1OigpPT5yXyxzY2hlbWVZbE9yQnI6KCk9PnNfLHNjaGVtZVlsT3JSZDooKT0+dV8sc2VsZWN0OigpPT5UZSxzZWxlY3RBbGw6KCk9PnFfLHNlbGVjdGlvbjooKT0+a2Usc2VsZWN0b3I6KCk9PnB0LHNlbGVjdG9yQWxsOigpPT5ndCxzZXQ6KCk9PmhhLHNodWZmbGU6KCk9PlUsc3RhY2s6KCk9Plh3LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOigpPT5RdyxzdGFja09mZnNldEV4cGFuZDooKT0+Wncsc3RhY2tPZmZzZXROb25lOigpPT5XdyxzdGFja09mZnNldFNpbGhvdWV0dGU6KCk9Pkt3LHN0YWNrT2Zmc2V0V2lnZ2xlOigpPT5KdyxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+dGssc3RhY2tPcmRlckFzY2VuZGluZzooKT0+bmssc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PmlrLHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PmFrLHN0YWNrT3JkZXJOb25lOigpPT5WdyxzdGFja09yZGVyUmV2ZXJzZTooKT0+b2ssc3RyYXRpZnk6KCk9PmhwLHN0eWxlOigpPT5SdCxzdW06KCk9PnEsc3ZnOigpPT5PcyxzeW1ib2w6KCk9PnJ3LHN5bWJvbENpcmNsZTooKT0+angsc3ltYm9sQ3Jvc3M6KCk9Pll4LHN5bWJvbERpYW1vbmQ6KCk9PnF4LHN5bWJvbFNxdWFyZTooKT0+R3gsc3ltYm9sU3RhcjooKT0+Vngsc3ltYm9sVHJpYW5nbGU6KCk9Plp4LHN5bWJvbFd5ZTooKT0+ZXcsc3ltYm9sczooKT0+bncsdGV4dDooKT0+eHMsdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+Qix0aHJlc2hvbGRTY290dDooKT0+TCx0aHJlc2hvbGRTdHVyZ2VzOigpPT5OLHRpY2tGb3JtYXQ6KCk9PkN5LHRpY2tJbmNyZW1lbnQ6KCk9PkEsdGlja1N0ZXA6KCk9Pk0sdGlja3M6KCk9PlMsdGltZURheTooKT0+QWcsdGltZURheXM6KCk9Pk1nLHRpbWVGb3JtYXQ6KCk9PnBtLHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5Jdix0aW1lRm9ybWF0TG9jYWxlOigpPT5mbSx0aW1lRnJpZGF5OigpPT52Zyx0aW1lRnJpZGF5czooKT0+RWcsdGltZUhvdXI6KCk9PkRnLHRpbWVIb3VyczooKT0+T2csdGltZUludGVydmFsOigpPT50Zyx0aW1lTWlsbGlzZWNvbmQ6KCk9PllnLHRpbWVNaWxsaXNlY29uZHM6KCk9PnpnLHRpbWVNaW51dGU6KCk9PkxnLHRpbWVNaW51dGVzOigpPT5JZyx0aW1lTW9uZGF5OigpPT5wZyx0aW1lTW9uZGF5czooKT0+eGcsdGltZU1vbnRoOigpPT5hZyx0aW1lTW9udGhzOigpPT5vZyx0aW1lUGFyc2U6KCk9PnltLHRpbWVTYXR1cmRheTooKT0+YmcsdGltZVNhdHVyZGF5czooKT0+Q2csdGltZVNlY29uZDooKT0+RmcsdGltZVNlY29uZHM6KCk9PlBnLHRpbWVTdW5kYXk6KCk9PmRnLHRpbWVTdW5kYXlzOigpPT5fZyx0aW1lVGh1cnNkYXk6KCk9Pm1nLHRpbWVUaHVyc2RheXM6KCk9PlRnLHRpbWVUdWVzZGF5OigpPT55Zyx0aW1lVHVlc2RheXM6KCk9PndnLHRpbWVXZWRuZXNkYXk6KCk9PmdnLHRpbWVXZWRuZXNkYXlzOigpPT5rZyx0aW1lV2VlazooKT0+ZGcsdGltZVdlZWtzOigpPT5fZyx0aW1lWWVhcjooKT0+bmcsdGltZVllYXJzOigpPT5yZyx0aW1lb3V0OigpPT5Lbix0aW1lcjooKT0+Vm4sdGltZXJGbHVzaDooKT0+R24sdG91Y2g6KCk9Pk9uLHRvdWNoZXM6KCk9PkhfLHRyYW5zaXRpb246KCk9PkhyLHRyYW5zcG9zZTooKT0+SCx0cmVlOigpPT52cCx0cmVlbWFwOigpPT5rcCx0cmVlbWFwQmluYXJ5OigpPT5UcCx0cmVlbWFwRGljZTooKT0+YXAsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PkNwLHRyZWVtYXBTbGljZTooKT0+YnAsdHJlZW1hcFNsaWNlRGljZTooKT0+RXAsdHJlZW1hcFNxdWFyaWZ5OigpPT53cCx0c3Y6KCk9PkVzLHRzdkZvcm1hdDooKT0+T28sdHN2Rm9ybWF0Qm9keTooKT0+Qm8sdHN2Rm9ybWF0Um93OigpPT5Jbyx0c3ZGb3JtYXRSb3dzOigpPT5Mbyx0c3ZGb3JtYXRWYWx1ZTooKT0+Um8sdHN2UGFyc2U6KCk9Pk5vLHRzdlBhcnNlUm93czooKT0+RG8sdXRjRGF5OigpPT5pbSx1dGNEYXlzOigpPT5hbSx1dGNGb3JtYXQ6KCk9PmdtLHV0Y0ZyaWRheTooKT0+R2csdXRjRnJpZGF5czooKT0+ZW0sdXRjSG91cjooKT0+JHYsdXRjSG91cnM6KCk9Pld2LHV0Y01pbGxpc2Vjb25kOigpPT5ZZyx1dGNNaWxsaXNlY29uZHM6KCk9PnpnLHV0Y01pbnV0ZTooKT0+R3YsdXRjTWludXRlczooKT0+WHYsdXRjTW9uZGF5OigpPT5IZyx1dGNNb25kYXlzOigpPT5RZyx1dGNNb250aDooKT0+VXYsdXRjTW9udGhzOigpPT5xdix1dGNQYXJzZTooKT0+bW0sdXRjU2F0dXJkYXk6KCk9PlhnLHV0Y1NhdHVyZGF5czooKT0+bm0sdXRjU2Vjb25kOigpPT5GZyx1dGNTZWNvbmRzOigpPT5QZyx1dGNTdW5kYXk6KCk9PnFnLHV0Y1N1bmRheXM6KCk9PlpnLHV0Y1RodXJzZGF5OigpPT5WZyx1dGNUaHVyc2RheXM6KCk9PnRtLHV0Y1R1ZXNkYXk6KCk9PiRnLHV0Y1R1ZXNkYXlzOigpPT5LZyx1dGNXZWRuZXNkYXk6KCk9PldnLHV0Y1dlZG5lc2RheXM6KCk9PkpnLHV0Y1dlZWs6KCk9PnFnLHV0Y1dlZWtzOigpPT5aZyx1dGNZZWFyOigpPT5zbSx1dGNZZWFyczooKT0+Y20sdmFsdWVzOigpPT5kYSx2YXJpYW5jZTooKT0+eSx2ZXJzaW9uOigpPT5yLHZvcm9ub2k6KCk9PktrLHdpbmRvdzooKT0+T3QseG1sOigpPT5Ocyx6aXA6KCk9Plcsem9vbTooKT0+ZlQsem9vbUlkZW50aXR5OigpPT5uVCx6b29tVHJhbnNmb3JtOigpPT5yVH0pO3ZhciByPSI1LjE2LjAiO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gYSh0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaShlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fXZhciBvPWEoaSkscz1vLnJpZ2h0LGM9by5sZWZ0O2NvbnN0IHU9cztmdW5jdGlvbiBsKHQsZSl7bnVsbD09ZSYmKGU9aCk7Zm9yKHZhciBuPTAscj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShyPDA/MDpyKTtuPHI7KWFbbl09ZShpLGk9dFsrK25dKTtyZXR1cm4gYX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gZih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWgpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24geSh0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1wKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1wKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9ZnVuY3Rpb24gZyh0LGUpe3ZhciBuPXkodCxlKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn1mdW5jdGlvbiBtKHQsZSl7dmFyIG4scixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3Iocj1pPW47KytvPGE7KW51bGwhPShuPXRbb10pJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3Iocj1pPW47KytvPGE7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSk7cmV0dXJuW3IsaV19dmFyIHY9QXJyYXkucHJvdG90eXBlLGI9di5zbGljZSxfPXYubWFwO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHcodCl7cmV0dXJuIHR9ZnVuY3Rpb24gayh0LGUsbil7dD0rdCxlPStlLG49KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorbjtmb3IodmFyIHI9LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxhPW5ldyBBcnJheShpKTsrK3I8aTspYVtyXT10K3IqbjtyZXR1cm4gYX12YXIgVD1NYXRoLnNxcnQoNTApLEU9TWF0aC5zcXJ0KDEwKSxDPU1hdGguc3FydCgyKTtmdW5jdGlvbiBTKHQsZSxuKXt2YXIgcixpLGEsbyxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKHI9ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KG89QSh0LGUsbikpfHwhaXNGaW5pdGUobykpcmV0dXJuW107aWYobz4wKWZvcih0PU1hdGguY2VpbCh0L28pLGU9TWF0aC5mbG9vcihlL28pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KWFbc109KHQrcykqbztlbHNlIGZvcih0PU1hdGguZmxvb3IodCpvKSxlPU1hdGguY2VpbChlKm8pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KWFbc109KHQtcykvbztyZXR1cm4gciYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49VD8xMDphPj1FPzU6YT49Qz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PVQ/MTA6YT49RT81OmE+PUM/MjoxKX1mdW5jdGlvbiBNKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1UP2kqPTEwOmE+PUU/aSo9NTphPj1DJiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gTih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBEKCl7dmFyIHQ9dyxlPW0sbj1OO2Z1bmN0aW9uIHIocil7dmFyIGksYSxvPXIubGVuZ3RoLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlzW2ldPXQocltpXSxpLHIpO3ZhciBjPWUocyksbD1jWzBdLGg9Y1sxXSxmPW4ocyxsLGgpO0FycmF5LmlzQXJyYXkoZil8fChmPU0obCxoLGYpLGY9ayhNYXRoLmNlaWwobC9mKSpmLGgsZikpO2Zvcih2YXIgZD1mLmxlbmd0aDtmWzBdPD1sOylmLnNoaWZ0KCksLS1kO2Zvcig7ZltkLTFdPmg7KWYucG9wKCksLS1kO3ZhciBwLHk9bmV3IEFycmF5KGQrMSk7Zm9yKGk9MDtpPD1kOysraSkocD15W2ldPVtdKS54MD1pPjA/ZltpLTFdOmwscC54MT1pPGQ/ZltpXTpoO2ZvcihpPTA7aTxvOysraSlsPD0oYT1zW2ldKSYmYTw9aCYmeVt1KGYsYSwwLGQpXS5wdXNoKHJbaV0pO3JldHVybiB5fXJldHVybiByLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eChlKSxyKTp0fSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OngoW3RbMF0sdFsxXV0pLHIpOmV9LHIudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/eChiLmNhbGwodCkpOngodCkscik6bn0scn1mdW5jdGlvbiBPKHQsZSxuKXtpZihudWxsPT1uJiYobj1wKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fWZ1bmN0aW9uIEIodCxlLG4pe3JldHVybiB0PV8uY2FsbCh0LHApLnNvcnQoaSksTWF0aC5jZWlsKChuLWUpLygyKihPKHQsLjc1KS1PKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBMKHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqZyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIEkodCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gUih0LGUpe3ZhciBuLHI9dC5sZW5ndGgsaT1yLGE9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1wKHRbYV0pKT8tLWk6bys9bjtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49cChlKHRbYV0sYSx0KSkpPy0taTpvKz1uO2lmKGkpcmV0dXJuIG8vaX1mdW5jdGlvbiBGKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09ZSlmb3IoOysrYTxyOylpc05hTihuPXAodFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPXAoZSh0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBPKG8uc29ydChpKSwuNSl9ZnVuY3Rpb24gUCh0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufWZ1bmN0aW9uIGoodCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmcj5uJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJnI+biYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gWSh0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09dFtlW25dXTtyZXR1cm4gcn1mdW5jdGlvbiB6KHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4scixhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9aSk7KythPG47KShlKHI9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9cixvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX1mdW5jdGlvbiBVKHQsZSxuKXtmb3IodmFyIHIsaSxhPShudWxsPT1uP3QubGVuZ3RoOm4pLShlPW51bGw9PWU/MDorZSk7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLHI9dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPXI7cmV0dXJuIHR9ZnVuY3Rpb24gcSh0LGUpe3ZhciBuLHI9dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxyOykobj0rdFtpXSkmJihhKz1uKTtlbHNlIGZvcig7KytpPHI7KShuPStlKHRbaV0saSx0KSkmJihhKz1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LCQpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gVygpe3JldHVybiBIKGFyZ3VtZW50cyl9dmFyIFY9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEcodCl7cmV0dXJuIHR9dmFyIFg9MWUtNjtmdW5jdGlvbiBaKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gUSh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIEsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybit0KGUpfX1mdW5jdGlvbiBKKHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIHR0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxhPTYsbz02LHM9MyxjPTE9PT10fHw0PT09dD8tMToxLHU9ND09PXR8fDI9PT10PyJ4IjoieSIsbD0xPT09dHx8Mz09PXQ/WjpRO2Z1bmN0aW9uIGgoaCl7dmFyIGY9bnVsbD09cj9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOnIsZD1udWxsPT1pP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpHOmkscD1NYXRoLm1heChhLDApK3MseT1lLnJhbmdlKCksZz0reVswXSsuNSxtPSt5W3kubGVuZ3RoLTFdKy41LHY9KGUuYmFuZHdpZHRoP0o6SykoZS5jb3B5KCkpLGI9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLF89Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGYsZSkub3JkZXIoKSx3PXguZXhpdCgpLGs9eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFQ9eC5zZWxlY3QoImxpbmUiKSxFPXguc2VsZWN0KCJ0ZXh0Iik7Xz1fLm1lcmdlKF8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHg9eC5tZXJnZShrKSxUPVQubWVyZ2Uoay5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUrIjIiLGMqYSkpLEU9RS5tZXJnZShrLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUsYypwKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09YiYmKF89Xy50cmFuc2l0aW9uKGgpLHg9eC50cmFuc2l0aW9uKGgpLFQ9VC50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLFgpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXYodCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLGsuYXR0cigib3BhY2l0eSIsWCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gbChlJiZpc0Zpbml0ZShlPWUodCkpP2U6dih0KSl9KSkpLHcucmVtb3ZlKCksXy5hdHRyKCJkIiw0PT09dHx8Mj09dD9vPyJNIitjKm8rIiwiK2crIkgwLjVWIittKyJIIitjKm86Ik0wLjUsIitnKyJWIittOm8/Ik0iK2crIiwiK2MqbysiVjAuNUgiK20rIlYiK2MqbzoiTSIrZysiLDAuNUgiK20pLHguYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodih0KSl9KSksVC5hdHRyKHUrIjIiLGMqYSksRS5hdHRyKHUsYypwKS50ZXh0KGQpLGIuZmlsdGVyKHR0KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSxiLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9dn0pKX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1WLmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpWLmNhbGwodCksaCk6bi5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOlYuY2FsbCh0KSxoKTpyJiZyLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bz0rdCxoKTphfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsaCk6YX0saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGgpOm99LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsaCk6c30saH1mdW5jdGlvbiBudCh0KXtyZXR1cm4gZXQoMSx0KX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gZXQoMix0KX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gZXQoMyx0KX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gZXQoNCx0KX12YXIgb3Q9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gc3QoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgY3Qocil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gdXQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGx0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gaHQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPW90LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1jdC5wcm90b3R5cGU9c3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9dXQodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09aHQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1odChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49bHQocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgY3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IGZ0PXN0O2Z1bmN0aW9uIGR0KCl7fWZ1bmN0aW9uIHB0KHQpe3JldHVybiBudWxsPT10P2R0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24geXQoKXtyZXR1cm5bXX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gbnVsbD09dD95dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIG10KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIHZ0KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIGJ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIF90KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBidCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24geHQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IGJ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gd3QodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59YnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpidCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIga3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IFR0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDprdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEV0KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFR0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpUdFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIER0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIE90KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBCdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBMdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEl0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8T3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gRnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIFB0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBqdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24genQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgVXQodCl9ZnVuY3Rpb24gVXQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVl0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gcXQodCxlKXtmb3IodmFyIG49enQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBIdCh0LGUpe2Zvcih2YXIgbj16dCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uICR0KHQpe3JldHVybiBmdW5jdGlvbigpe3F0KHRoaXMsdCl9fWZ1bmN0aW9uIFd0KHQpe3JldHVybiBmdW5jdGlvbigpe0h0KHRoaXMsdCl9fWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP3F0Okh0KSh0aGlzLHQpfX1mdW5jdGlvbiBHdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gUXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBKdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHRlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGVlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1rdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09a3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIHJlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGllKHQpe3ZhciBlPUV0KHQpO3JldHVybihlLmxvY2FsP3JlOm5lKShlKX1mdW5jdGlvbiBhZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG9lKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gc2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGNlKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1VdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciB1ZT17fSxsZT1udWxsO2Z1bmN0aW9uIGhlKHQsZSxuKXtyZXR1cm4gdD1mZSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGZlKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9bGU7bGU9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7bGU9aX19fWZ1bmN0aW9uIGRlKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIHBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiB5ZSh0LGUsbil7dmFyIHI9dWUuaGFzT3duUHJvcGVydHkodC50eXBlKT9oZTpmZTtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzLGM9dGhpcy5fX29uLHU9cihlLGEsbyk7aWYoYylmb3IodmFyIGw9MCxoPWMubGVuZ3RoO2w8aDsrK2wpaWYoKHM9Y1tsXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9dSxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsdSxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOnUsY2FwdHVyZTpufSxjP2MucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBnZSh0LGUsbixyKXt2YXIgaT1sZTt0LnNvdXJjZUV2ZW50PWxlLGxlPXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4scil9ZmluYWxseXtsZT1pfX1mdW5jdGlvbiBtZSh0LGUsbil7dmFyIHI9T3QodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbWUodGhpcyx0LGUpfX1mdW5jdGlvbiBiZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBtZSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh1ZT17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIF9lPVtudWxsXTtmdW5jdGlvbiB4ZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB3ZSgpe3JldHVybiBuZXcgeGUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxfZSl9eGUucHJvdG90eXBlPXdlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6eGUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IHhlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IHhlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IHhlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT94dDpfdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLHk9cC5sZW5ndGgsZz1jW2xdPW5ldyBBcnJheSh5KSxtPXNbbF09bmV3IEFycmF5KHkpO3IoaCxmLGcsbSx1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7Xzx5OysrXylpZih2PWdbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1tW3hdKSYmKyt4PHk7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyB4ZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHhlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHZ0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeGUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh2dCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyB4ZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD13dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgeGUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1FdCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/U3Q6Q3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9EdDpOdDpuLmxvY2FsP010OkF0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0J0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0l0Okx0KSh0LGUsbnVsbD09bj8iIjpuKSk6UnQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/RnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/anQ6UHQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49WXQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9enQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/VnQ6ZT8kdDpXdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/R3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1p0Olh0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/UXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0p0Okt0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2godGUpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZWUpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmllKHQpLHI9bnVsbD09ZT9hZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG9lKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/Y2U6c2UpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9ZGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/eWU6cGUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2JlOnZlKSh0LGUpKX19O2NvbnN0IGtlPXdlO2Z1bmN0aW9uIFRlKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB4ZShbW3RdXSxfZSl9ZnVuY3Rpb24gRWUoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBDZSgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gU2UodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1UZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLENlLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLENlLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBBZSh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9VGUodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoci5vbigiY2xpY2suZHJhZyIsQ2UsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBNZSh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gRGUoKXt9dmFyIE9lPS43LEJlPTEvT2UsTGU9IlxccyooWystXT9cXGQrKVxccyoiLEllPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFJlPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixGZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxQZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTGUsTGUsTGVdKyJcXCkkIiksamU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1JlLFJlLFJlXSsiXFwpJCIpLFllPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTGUsTGUsTGUsSWVdKyJcXCkkIiksemU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tSZSxSZSxSZSxJZV0rIlxcKSQiKSxVZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbSWUsUmUsUmVdKyJcXCkkIikscWU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJZSxSZSxSZSxJZV0rIlxcKSQiKSxIZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiAkZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmUodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9RmUuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9HZShlKTozPT09bj9uZXcgS2UoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1hlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1hlKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9UGUuZXhlYyh0KSk/bmV3IEtlKGVbMV0sZVsyXSxlWzNdLDEpOihlPWplLmV4ZWModCkpP25ldyBLZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1ZZS5leGVjKHQpKT9YZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT16ZS5leGVjKHQpKT9YZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1VZS5leGVjKHQpKT9ubihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPXFlLmV4ZWModCkpP25uKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6SGUuaGFzT3duUHJvcGVydHkodCk/R2UoSGVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBLZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEdlKHQpe3JldHVybiBuZXcgS2UodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFhlKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgS2UodCxlLG4scil9ZnVuY3Rpb24gWmUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEZXx8KHQ9VmUodCkpLHQ/bmV3IEtlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBLZX1mdW5jdGlvbiBRZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/WmUodCk6bmV3IEtlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBLZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gSmUoKXtyZXR1cm4iIyIrZW4odGhpcy5yKStlbih0aGlzLmcpK2VuKHRoaXMuYil9ZnVuY3Rpb24gdG4oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBlbih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG5uKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgb24odCxlLG4scil9ZnVuY3Rpb24gcm4odCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiBuZXcgb24odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRGV8fCh0PVZlKHQpKSwhdClyZXR1cm4gbmV3IG9uO2lmKHQgaW5zdGFuY2VvZiBvbilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IG9uKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gYW4odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3JuKHQpOm5ldyBvbih0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gb24odCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHNuKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBjbih0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fWZ1bmN0aW9uIHVuKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBjbigobi1yL2UpKmUsbyxpLGEscyl9fWZ1bmN0aW9uIGxuKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhyK2UtMSklZV0sYT10W3IlZV0sbz10WyhyKzEpJWVdLHM9dFsocisyKSVlXTtyZXR1cm4gY24oKG4tci9lKSplLGksYSxvLHMpfX1mdW5jdGlvbiBobih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZm4odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBkbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mbih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6aG4oaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBwbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mbih0LG4pOmhuKGlzTmFOKHQpP2U6dCl9TWUoRGUsVmUse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6JGUsZm9ybWF0SGV4OiRlLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBybih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOldlLHRvU3RyaW5nOldlfSksTWUoS2UsUWUsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/QmU6TWF0aC5wb3coQmUsdCksbmV3IEtlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P09lOk1hdGgucG93KE9lLHQpLG5ldyBLZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkplLGZvcm1hdEhleDpKZSxmb3JtYXRSZ2I6dG4sdG9TdHJpbmc6dG59KSksTWUob24sYW4sTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/QmU6TWF0aC5wb3coQmUsdCksbmV3IG9uKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/T2U6TWF0aC5wb3coT2UsdCksbmV3IG9uKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgS2Uoc24odD49MjQwP3QtMjQwOnQrMTIwLGksciksc24odCxpLHIpLHNuKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7Y29uc3QgeW49ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP3BuOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6aG4oaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PVFlKHQpKS5yLChlPVFlKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89cG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIGduKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9UWUoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19dmFyIG1uPWduKHVuKSx2bj1nbihsbik7ZnVuY3Rpb24gYm4odCxlKXtlfHwoZT1bXSk7dmFyIG4scj10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLGk9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihhKXtmb3Iobj0wO248cjsrK24paVtuXT10W25dKigxLWEpK2Vbbl0qYTtyZXR1cm4gaX19ZnVuY3Rpb24gX24odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIHhuKHQsZSl7cmV0dXJuKF9uKGUpP2JuOnduKSh0LGUpfWZ1bmN0aW9uIHduKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKWFbbl09TW4odFtuXSxlW25dKTtmb3IoO248cjsrK24pb1tuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pb1tuXT1hW25dKHQpO3JldHVybiBvfX1mdW5jdGlvbiBrbih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0KigxLXIpK2Uqciksbn19ZnVuY3Rpb24gVG4odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gRW4odCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPU1uKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19dmFyIENuPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxTbj1uZXcgUmVnRXhwKENuLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEFuKHQsZSl7dmFyIG4scixpLGE9Q24ubGFzdEluZGV4PVNuLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1Dbi5leGVjKHQpKSYmKHI9U24uZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OlRuKG4scil9KSksYT1Tbi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIE1uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9obihlKTooIm51bWJlciI9PT1yP1RuOiJzdHJpbmciPT09cj8obj1WZShlKSk/KGU9bix5bik6QW46ZSBpbnN0YW5jZW9mIFZlP3luOmUgaW5zdGFuY2VvZiBEYXRlP2tuOl9uKGUpP2JuOkFycmF5LmlzQXJyYXkoZSk/d246ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0VuOlRuKSh0LGUpfWZ1bmN0aW9uIE5uKCl7Zm9yKHZhciB0LGU9bGU7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gRG4odCxlKXt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1uLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD1lLmNsaWVudFgsci55PWUuY2xpZW50WSxbKHI9ci5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LHIueV19dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBPbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9Tm4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBEbih0LHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEJuKHQpe3ZhciBlPU5uKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLERuKHQsZSl9dmFyIExuLEluLFJuPTAsRm49MCxQbj0wLGpuPTAsWW49MCx6bj0wLFVuPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHFuPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEhuKCl7cmV0dXJuIFlufHwocW4oJG4pLFluPVVuLm5vdygpK3puKX1mdW5jdGlvbiAkbigpe1luPTB9ZnVuY3Rpb24gV24oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFZuKHQsZSxuKXt2YXIgcj1uZXcgV247cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBHbigpe0huKCksKytSbjtmb3IodmFyIHQsZT1MbjtlOykodD1Zbi1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tUm59ZnVuY3Rpb24gWG4oKXtZbj0oam49VW4ubm93KCkpK3puLFJuPUZuPTA7dHJ5e0duKCl9ZmluYWxseXtSbj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1MbixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6TG49ZSk7SW49dCxRbihyKX0oKSxZbj0wfX1mdW5jdGlvbiBabigpe3ZhciB0PVVuLm5vdygpLGU9dC1qbjtlPjFlMyYmKHpuLT1lLGpuPXQpfWZ1bmN0aW9uIFFuKHQpe1JufHwoRm4mJihGbj1jbGVhclRpbWVvdXQoRm4pKSx0LVluPjI0Pyh0PDEvMCYmKEZuPXNldFRpbWVvdXQoWG4sdC1Vbi5ub3coKS16bikpLFBuJiYoUG49Y2xlYXJJbnRlcnZhbChQbikpKTooUG58fChqbj1Vbi5ub3coKSxQbj1zZXRJbnRlcnZhbChabiwxZTMpKSxSbj0xLHFuKFhuKSkpfWZ1bmN0aW9uIEtuKHQsZSxuKXt2YXIgcj1uZXcgV247cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfVduLnByb3RvdHlwZT1Wbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlduLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9IbigpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxJbj09PXRoaXN8fChJbj9Jbi5fbmV4dD10aGlzOkxuPXRoaXMsSW49dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixRbigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxRbigpKX19O3ZhciBKbj1mdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx0cj1bXTtmdW5jdGlvbiBlcih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gS24oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihLbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1WbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpKbix0d2Vlbjp0cix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gbnIodCxlKXt2YXIgbj1pcih0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHJyKHQsZSl7dmFyIG49aXIodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gaXIodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBhcih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fXZhciBvcixzcixjcix1cixscj0xODAvTWF0aC5QSSxocj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBmcih0LGUsbixyLGksYSl7dmFyIG8scyxjO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChjPXQqbitlKnIpJiYobi09dCpjLHItPWUqYyksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxjLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGM9LWMsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpscixza2V3WDpNYXRoLmF0YW4oYykqbHIsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIGRyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6VG4odCxpKX0se2k6Yy0yLHg6VG4ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OlRuKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OlRuKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OlRuKHQsbil9LHtpOnMtMix4OlRuKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIHByPWRyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2hyOihvcnx8KG9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHNyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjcj1kb2N1bWVudC5kZWZhdWx0Vmlldyksb3Iuc3R5bGUudHJhbnNmb3JtPXQsdD1jci5nZXRDb21wdXRlZFN0eWxlKHNyLmFwcGVuZENoaWxkKG9yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxzci5yZW1vdmVDaGlsZChvciksZnIoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHlyPWRyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9ocjoodXJ8fCh1cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx1ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9dXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/ZnIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6aHIpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBncih0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9cnIodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBtcih0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9cnIodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24gdnIodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9cnIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gaXIodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gYnIodCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP1RuOmUgaW5zdGFuY2VvZiBWZT95bjoobj1WZShlKSk/KGU9bix5bik6QW4pKHQsZSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHhyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gd3IodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24ga3IodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIFRyKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEVyKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3IodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gQXIodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZTcih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTXIodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZDcih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTnIodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtucih0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe25yKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtycih0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3JyKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gTHIodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7cnIodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIElyKHQsZSxuKXt2YXIgcixpLGE9ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfShlKT9ucjpycjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1hKHRoaXMsdCkscz1vLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksby5vbj1pfX12YXIgUnI9a2UucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFByKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLHIpLG4pfX1mdW5jdGlvbiBqcih0LGUsbil7dmFyIHIsaTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYocj0oaT1hKSYmUHIodCxhLG4pKSxyfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gWXIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlLG47ZnVuY3Rpb24gcigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09biYmKGU9KG49cikmJllyKHIpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9dmFyIFVyPTA7ZnVuY3Rpb24gcXIodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIEhyKHQpe3JldHVybiBrZSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gJHIoKXtyZXR1cm4rK1VyfXZhciBXcj1rZS5wcm90b3R5cGU7ZnVuY3Rpb24gVnIodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIEdyKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBYcih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1xci5wcm90b3R5cGU9SHIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxcixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wdCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgcyxjLHU9cltvXSxsPXUubGVuZ3RoLGg9YVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpKHM9dVtmXSkmJihjPXQuY2FsbChzLHMuX19kYXRhX18sZix1KSkmJigiX19kYXRhX18iaW4gcyYmKGMuX19kYXRhX189cy5fX2RhdGFfXyksaFtmXT1jLGVyKGhbZl0sZSxuLGYsaCxpcihzLG4pKSk7cmV0dXJuIG5ldyBxcihhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9aXIoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZlcihmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IHFyKGEsbyxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW10KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBxcihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBxcihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgUnIodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPSRyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1pcihvLGUpO2VyKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgcXIocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6V3IuY2FsbCxub2RlczpXci5ub2Rlcyxub2RlOldyLm5vZGUsc2l6ZTpXci5zaXplLGVtcHR5OldyLmVtcHR5LGVhY2g6V3IuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aXIodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKElyKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1FdCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj95cjpicjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9FcjpUcikobixyLHZyKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP3hyOl9yKShuKToobi5sb2NhbD9rcjp3cikobixyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1FdCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP0FyOk1yKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP3ByOmJyO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVJ0KHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxSdCh0aGlzLHQpKTtyZXR1cm4gYT09PW8/bnVsbDphPT09biYmbz09PXI/aTppPWUobj1hLHI9byl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxGcih0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz1SdCh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIsdnIodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXJyKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1GcihlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixqcih0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSh2cih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsenIodCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9aXIodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLG89aS5sZW5ndGg7YTxvOysrYSlpZigocj1pW2FdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2dyOm1yKShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P05yOkRyKShlLHQpKTppcih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9PcjpCcikoZSx0KSk6aXIodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKExyKGUsdCkpOmlyKHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49cnIodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpfSkpfX07dmFyIFpyPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpYcn07ZnVuY3Rpb24gUXIodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gWnIudGltZT1IbigpLFpyO3JldHVybiBufWtlLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXthcih0aGlzLHQpfSkpfSxrZS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBxcj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPSRyKCksKG49WnIpLnRpbWU9SG4oKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZlcihvLHQsZSx1LHMsbnx8UXIobyxlKSk7cmV0dXJuIG5ldyBxcihyLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIEtyPVtudWxsXTtmdW5jdGlvbiBKcih0LGUpe3ZhciBuLHIsaT10Ll9fdHJhbnNpdGlvbjtpZihpKWZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsaSlpZigobj1pW3JdKS5zdGF0ZT4xJiZuLm5hbWU9PT1lKXJldHVybiBuZXcgcXIoW1t0XV0sS3IsZSwrcik7cmV0dXJuIG51bGx9ZnVuY3Rpb24gdGkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGVpKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gbmkoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByaSgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIGlpPXtuYW1lOiJkcmFnIn0sYWk9e25hbWU6InNwYWNlIn0sb2k9e25hbWU6ImhhbmRsZSJ9LHNpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBjaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHVpKHQpe3JldHVybltjaSh0WzBdKSxjaSh0WzFdKV19ZnVuY3Rpb24gbGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBPbihlLGxlLnRvdWNoZXMsdCl9fXZhciBoaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGJpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sZmk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChiaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGRpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChiaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp1aSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0scGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LHlpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxnaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sbWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sdmk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gYmkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gX2koKXtyZXR1cm4hbGUuY3RybEtleSYmIWxlLmJ1dHRvbn1mdW5jdGlvbiB4aSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGtpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBFaSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIENpKCl7cmV0dXJuIE1pKGhpKX1mdW5jdGlvbiBTaSgpe3JldHVybiBNaShmaSl9ZnVuY3Rpb24gQWkoKXtyZXR1cm4gTWkoZGkpfWZ1bmN0aW9uIE1pKHQpe3ZhciBlLG49eGkscj1faSxpPXdpLGE9ITAsbz1mdCgic3RhcnQiLCJicnVzaCIsImVuZCIpLHM9NjtmdW5jdGlvbiBjKGUpe3ZhciBuPWUucHJvcGVydHkoIl9fYnJ1c2giLHkpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtiaSgib3ZlcmxheSIpXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixwaS5vdmVybGF5KS5tZXJnZShuKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWtpKHRoaXMpLmV4dGVudDtUZSh0aGlzKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSl9KSksZS5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFtiaSgic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixwaS5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgcj1lLnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEodC5oYW5kbGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpO3IuZXhpdCgpLnJlbW92ZSgpLHIuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gcGlbdC50eXBlXX0pKSxlLmVhY2godSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLGYpLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC5icnVzaCIsZikub24oInRvdWNobW92ZS5icnVzaCIsZCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixwKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gdSgpe3ZhciB0PVRlKHRoaXMpLGU9a2kodGhpcykuc2VsZWN0aW9uO2U/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGVbMF1bMF0pLmF0dHIoInkiLGVbMF1bMV0pLmF0dHIoIndpZHRoIixlWzFdWzBdLWVbMF1bMF0pLmF0dHIoImhlaWdodCIsZVsxXVsxXS1lWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlW3QudHlwZS5sZW5ndGgtMV0/ZVsxXVswXS1zLzI6ZVswXVswXS1zLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9lWzFdWzFdLXMvMjplWzBdWzFdLXMvMn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP2VbMV1bMF0tZVswXVswXStzOnN9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlfHwidyI9PT10LnR5cGU/ZVsxXVsxXS1lWzBdWzFdK3M6c30pKSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwodCxlLG4pe3ZhciByPXQuX19icnVzaC5lbWl0dGVyO3JldHVybiFyfHxuJiZyLmNsZWFuP25ldyBoKHQsZSxuKTpyfWZ1bmN0aW9uIGgodCxlLG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTAsdGhpcy5jbGVhbj1ufWZ1bmN0aW9uIGYoKXtpZigoIWV8fGxlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLHksZyxtPXRoaXMsdj1sZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmxlLm1ldGFLZXk/dj0ib3ZlcmxheSI6dik/aWk6YSYmbGUuYWx0S2V5P3NpOm9pLF89dD09PWZpP251bGw6bWlbdl0seD10PT09aGk/bnVsbDp2aVt2XSx3PWtpKG0pLGs9dy5leHRlbnQsVD13LnNlbGVjdGlvbixFPWtbMF1bMF0sQz1rWzBdWzFdLFM9a1sxXVswXSxBPWtbMV1bMV0sTT0wLE49MCxEPV8mJngmJmEmJmxlLnNoaWZ0S2V5LE89bGUudG91Y2hlcz9saShsZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpCbixCPU8obSksTD1CLEk9bChtLGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT12PyhUJiYocD0hMCksdy5zZWxlY3Rpb249VD1bW249dD09PWZpP0U6QlswXSxvPXQ9PT1oaT9DOkJbMV1dLFtjPXQ9PT1maT9TOm4sZj10PT09aGk/QTpvXV0pOihuPVRbMF1bMF0sbz1UWzBdWzFdLGM9VFsxXVswXSxmPVRbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgUj1UZShtKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxGPVIuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIscGlbdl0pO2lmKGxlLnRvdWNoZXMpSS5tb3ZlZD1qLEkuZW5kZWQ9ejtlbHNle3ZhciBQPVRlKGxlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGosITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZQLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLHEsITApLFNlKGxlLnZpZXcpfW5pKCksYXIobSksdS5jYWxsKG0pLEkuc3RhcnQoKX1mdW5jdGlvbiBqKCl7dmFyIHQ9TyhtKTshRHx8eXx8Z3x8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT9nPSEwOnk9ITApLEw9dCxwPSEwLHJpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLUJbMF0sTj1MWzFdLUJbMV0sYil7Y2FzZSBhaTpjYXNlIGlpOl8mJihNPU1hdGgubWF4KEUtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSx4JiYoTj1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE4pKSxzPW8rTixkPWYrTik7YnJlYWs7Y2FzZSBvaTpfPDA/KE09TWF0aC5tYXgoRS1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTpfPjAmJihNPU1hdGgubWF4KEUtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSkseDwwPyhOPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTikpLHM9bytOLGQ9Zik6eD4wJiYoTj1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE4pKSxzPW8sZD1mK04pO2JyZWFrO2Nhc2Ugc2k6XyYmKGk9TWF0aC5tYXgoRSxNYXRoLm1pbihTLG4tTSpfKSksaD1NYXRoLm1heChFLE1hdGgubWluKFMsYytNKl8pKSkseCYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTip4KSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitOKngpKSl9aDxpJiYoXyo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsdiBpbiB5aSYmRi5hdHRyKCJjdXJzb3IiLHBpW3Y9eWlbdl1dKSksZDxzJiYoeCo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsdiBpbiBnaSYmRi5hdHRyKCJjdXJzb3IiLHBpW3Y9Z2lbdl1dKSksdy5zZWxlY3Rpb24mJihUPXcuc2VsZWN0aW9uKSx5JiYoaT1UWzBdWzBdLGg9VFsxXVswXSksZyYmKHM9VFswXVsxXSxkPVRbMV1bMV0pLFRbMF1bMF09PT1pJiZUWzBdWzFdPT09cyYmVFsxXVswXT09PWgmJlRbMV1bMV09PT1kfHwody5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwobSksSS5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYobmkoKSxsZS50b3VjaGVzKXtpZihsZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQWUobGUudmlldyxwKSxQLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtSLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRi5hdHRyKCJjdXJzb3IiLHBpLm92ZXJsYXkpLHcuc2VsZWN0aW9uJiYoVD13LnNlbGVjdGlvbiksVGkoVCkmJih3LnNlbGVjdGlvbj1udWxsLHUuY2FsbChtKSksSS5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGxlLmtleUNvZGUpe2Nhc2UgMTY6RD1fJiZ4O2JyZWFrO2Nhc2UgMTg6Yj09PW9pJiYoXyYmKGM9aC1NKl8sbj1pK00qXykseCYmKGY9ZC1OKngsbz1zK04qeCksYj1zaSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PW9pJiZiIT09c2l8fChfPDA/Yz1oLU06Xz4wJiYobj1pLU0pLHg8MD9mPWQtTjp4PjAmJihvPXMtTiksYj1haSxGLmF0dHIoImN1cnNvciIscGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJpKCl9ZnVuY3Rpb24gcSgpe3N3aXRjaChsZS5rZXlDb2RlKXtjYXNlIDE2OkQmJih5PWc9RD0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PXNpJiYoXzwwP2M9aDpfPjAmJihuPWkpLHg8MD9mPWQ6eD4wJiYobz1zKSxiPW9pLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09YWkmJihsZS5hbHRLZXk/KF8mJihjPWgtTSpfLG49aStNKl8pLHgmJihmPWQtTip4LG89cytOKngpLGI9c2kpOihfPDA/Yz1oOl8+MCYmKG49aSkseDwwP2Y9ZDp4PjAmJihvPXMpLGI9b2kpLEYuYXR0cigiY3Vyc29yIixwaVt2XSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn1yaSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiB5KCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD11aShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPU1uKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO2FyKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7Z2UobmV3IGVpKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnRpKHVpKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnRpKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0aSghIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIE5pPU1hdGguY29zLERpPU1hdGguc2luLE9pPU1hdGguUEksQmk9T2kvMixMaT0yKk9pLElpPU1hdGgubWF4O2Z1bmN0aW9uIFJpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRmkoKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzLGMsdSxsLGg9aS5sZW5ndGgsZj1bXSxkPWsoaCkscD1bXSx5PVtdLGc9eS5ncm91cHM9bmV3IEFycmF5KGgpLG09bmV3IEFycmF5KGgqaCk7Zm9yKGE9MCx1PS0xOysrdTxoOyl7Zm9yKG89MCxsPS0xOysrbDxoOylvKz1pW3VdW2xdO2YucHVzaChvKSxwLnB1c2goayhoKSksYSs9b31mb3IoZSYmZC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKGZbdF0sZltuXSl9KSksbiYmcC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihpW2VdW3RdLGlbZV1bcl0pfSkpfSkpLGM9KGE9SWkoMCxMaS10KmgpL2EpP3Q6TGkvaCxvPTAsdT0tMTsrK3U8aDspe2ZvcihzPW8sbD0tMTsrK2w8aDspe3ZhciB2PWRbdV0sYj1wW3ZdW2xdLF89aVt2XVtiXSx4PW8sdz1vKz1fKmE7bVtiKmgrdl09e2luZGV4OnYsc3ViaW5kZXg6YixzdGFydEFuZ2xlOngsZW5kQW5nbGU6dyx2YWx1ZTpffX1nW3ZdPXtpbmRleDp2LHN0YXJ0QW5nbGU6cyxlbmRBbmdsZTpvLHZhbHVlOmZbdl19LG8rPWN9Zm9yKHU9LTE7Kyt1PGg7KWZvcihsPXUtMTsrK2w8aDspe3ZhciBUPW1bbCpoK3VdLEU9bVt1KmgrbF07KFQudmFsdWV8fEUudmFsdWUpJiZ5LnB1c2goVC52YWx1ZTxFLnZhbHVlP3tzb3VyY2U6RSx0YXJnZXQ6VH06e3NvdXJjZTpULHRhcmdldDpFfSl9cmV0dXJuIHI/eS5zb3J0KHIpOnl9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9SWkoMCxlKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihyPVJpKHQpKS5fPXQsaSk6ciYmci5ffSxpfXZhciBQaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gamkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBZaT1NYXRoLlBJLHppPTIqWWksVWk9MWUtNixxaT16aS1VaTtmdW5jdGlvbiBIaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uICRpKCl7cmV0dXJuIG5ldyBIaX1IaS5wcm90b3R5cGU9JGkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpIaSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+VWkpaWYoTWF0aC5hYnMobCpzLWMqdSk+VWkmJmkpe3ZhciBmPW4tYSxkPXItbyxwPXMqcytjKmMseT1mKmYrZCpkLGc9TWF0aC5zcXJ0KHApLG09TWF0aC5zcXJ0KGgpLHY9aSpNYXRoLnRhbigoWWktTWF0aC5hY29zKChwK2gteSkvKDIqZyptKSkpLzIpLGI9di9tLF89di9nO01hdGguYWJzKGItMSk+VWkmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPlVpfHxNYXRoLmFicyh0aGlzLl95MS11KT5VaSkmJih0aGlzLl8rPSJMIitjKyIsIit1KSxuJiYoaDwwJiYoaD1oJXppK3ppKSxoPnFpP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodC1vKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodGhpcy5feDE9YykrIiwiKyh0aGlzLl95MT11KTpoPlVpJiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1ZaSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2NvbnN0IFdpPSRpO2Z1bmN0aW9uIFZpKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBHaSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gWGkodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIFppKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gUWkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gS2koKXt2YXIgdD1WaSxlPUdpLG49WGkscj1aaSxpPVFpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1QaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLUJpLGY9aS5hcHBseSh0aGlzLHMpLUJpLGQ9bCpOaShoKSxwPWwqRGkoaCkseT0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLGc9ci5hcHBseSh0aGlzLHMpLUJpLG09aS5hcHBseSh0aGlzLHMpLUJpO2lmKGF8fChhPW89V2koKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT1nJiZmPT09bXx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAseSpOaShnKSx5KkRpKGcpKSxhLmFyYygwLDAseSxnLG0pKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6amkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfXZhciBKaT0iJCI7ZnVuY3Rpb24gdGEoKXt9ZnVuY3Rpb24gZWEodCxlKXt2YXIgbj1uZXcgdGE7aWYodCBpbnN0YW5jZW9mIHRhKXQuZWFjaCgoZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxhPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8YTspbi5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPGE7KW4uc2V0KGUocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgbyBpbiB0KW4uc2V0KG8sdFtvXSk7cmV0dXJuIG59dGEucHJvdG90eXBlPWVhLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dGEsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiBKaSt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tKaSt0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbSmkrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9SmkrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09SmkmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1KaSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PUppKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1KaSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTtjb25zdCBuYT1lYTtmdW5jdGlvbiByYSgpe3ZhciB0LGUsbixyPVtdLGk9W107ZnVuY3Rpb24gYShuLGksbyxzKXtpZihpPj1yLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgYyx1LGwsaD0tMSxmPW4ubGVuZ3RoLGQ9cltpKytdLHA9bmEoKSx5PW8oKTsrK2g8ZjspKGw9cC5nZXQoYz1kKHU9bltoXSkrIiIpKT9sLnB1c2godSk6cC5zZXQoYyxbdV0pO3JldHVybiBwLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyh5LGUsYSh0LGksbyxzKSl9KSkseX1mdW5jdGlvbiBvKHQsbil7aWYoKytuPnIubGVuZ3RoKXJldHVybiB0O3ZhciBhLHM9aVtuLTFdO3JldHVybiBudWxsIT1lJiZuPj1yLmxlbmd0aD9hPXQuZW50cmllcygpOihhPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXthLnB1c2goe2tleTplLHZhbHVlczpvKHQsbil9KX0pKSksbnVsbCE9cz9hLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOmF9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsaWEsYWEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLG9hLHNhKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyhhKHQsMCxvYSxzYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX1mdW5jdGlvbiBpYSgpe3JldHVybnt9fWZ1bmN0aW9uIGFhKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gb2EoKXtyZXR1cm4gbmEoKX1mdW5jdGlvbiBzYSh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBjYSgpe312YXIgdWE9bmEucHJvdG90eXBlO2Z1bmN0aW9uIGxhKHQsZSl7dmFyIG49bmV3IGNhO2lmKHQgaW5zdGFuY2VvZiBjYSl0LmVhY2goKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufWNhLnByb3RvdHlwZT1sYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmNhLGhhczp1YS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW0ppKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOnVhLnJlbW92ZSxjbGVhcjp1YS5jbGVhcix2YWx1ZXM6dWEua2V5cyxzaXplOnVhLnNpemUsZW1wdHk6dWEuZW1wdHksZWFjaDp1YS5lYWNofTtjb25zdCBoYT1sYTtmdW5jdGlvbiBmYSh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9ZnVuY3Rpb24gZGEodCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHBhKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7a2V5Om4sdmFsdWU6dFtuXX0pO3JldHVybiBlfXZhciB5YT1NYXRoLlBJLzE4MCxnYT0xODAvTWF0aC5QSSxtYT0uOTY0MjIsdmE9LjgyNTIxLGJhPTQvMjksX2E9Ni8yOSx4YT0zKl9hKl9hO2Z1bmN0aW9uIHdhKHQpe2lmKHQgaW5zdGFuY2VvZiBFYSlyZXR1cm4gbmV3IEVhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJhKXJldHVybiBMYSh0KTt0IGluc3RhbmNlb2YgS2V8fCh0PVplKHQpKTt2YXIgZSxuLHI9TWEodC5yKSxpPU1hKHQuZyksYT1NYSh0LmIpLG89Q2EoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPUNhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvbWEpLG49Q2EoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS92YSkpLG5ldyBFYSgxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24ga2EodCxlKXtyZXR1cm4gbmV3IEVhKHQsMCwwLG51bGw9PWU/MTplKX1mdW5jdGlvbiBUYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/d2EodCk6bmV3IEVhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBFYSh0LGUsbixyKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQ2EodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC94YStiYX1mdW5jdGlvbiBTYSh0KXtyZXR1cm4gdD5fYT90KnQqdDp4YSoodC1iYSl9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBNYSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBOYSh0KXtpZih0IGluc3RhbmNlb2YgQmEpcmV0dXJuIG5ldyBCYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBFYXx8KHQ9d2EodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBCYShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpnYTtyZXR1cm4gbmV3IEJhKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIERhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OYSh0KTpuZXcgQmEobixlLHQsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIE9hKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OYSh0KTpuZXcgQmEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEJhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBMYSh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgRWEodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp5YTtyZXR1cm4gbmV3IEVhKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9TWUoRWEsVGEsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRWEodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFYSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgS2UoQWEoMy4xMzM4NTYxKihlPW1hKlNhKGUpKS0xLjYxNjg2NjcqKHQ9MSpTYSh0KSktLjQ5MDYxNDYqKG49dmEqU2EobikpKSxBYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLEFhKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksTWUoQmEsT2EsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQmEodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCYSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBMYSh0aGlzKS5yZ2IoKX19KSk7dmFyIElhPS0uMTQ4NjEsUmE9MS43ODI3NyxGYT0tLjI5MjI3LFBhPS0uOTA2NDksamE9MS45NzI5NCxZYT1qYSpQYSx6YT1qYSpSYSxVYT1SYSpGYS1QYSpJYTtmdW5jdGlvbiBxYSh0KXtpZih0IGluc3RhbmNlb2YgJGEpcmV0dXJuIG5ldyAkYSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBLZXx8KHQ9WmUodCkpO3ZhciBlPXQuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPShVYSpyK1lhKmUtemEqbikvKFVhK1lhLXphKSxhPXItaSxvPShqYSoobi1pKS1GYSphKS9QYSxzPU1hdGguc3FydChvKm8rYSphKS8oamEqaSooMS1pKSksYz1zP01hdGguYXRhbjIobyxhKSpnYS0xMjA6TmFOO3JldHVybiBuZXcgJGEoYzwwP2MrMzYwOmMscyxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gSGEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3FhKHQpOm5ldyAkYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gJGEodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfU1lKCRhLEhhLE5lKERlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0JlOk1hdGgucG93KEJlLHQpLG5ldyAkYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P09lOk1hdGgucG93KE9lLHQpLG5ldyAkYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqeWEsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IEtlKDI1NSooZStuKihJYSpyK1JhKmkpKSwyNTUqKGUrbiooRmEqcitQYSppKSksMjU1KihlK24qKGphKnIpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgV2E9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFZhKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBHYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gWGEodCxlKXtmb3IodmFyIG4scj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihuPVphKHQsZVtyXSkpcmV0dXJuIG47cmV0dXJuIDB9ZnVuY3Rpb24gWmEodCxlKXtmb3IodmFyIG49ZVswXSxyPWVbMV0saT0tMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBjPXRbYV0sdT1jWzBdLGw9Y1sxXSxoPXRbc10sZj1oWzBdLGQ9aFsxXTtpZihRYShjLGgsZSkpcmV0dXJuIDA7bD5yIT1kPnImJm48KGYtdSkqKHItbCkvKGQtbCkrdSYmKGk9LWkpfXJldHVybiBpfWZ1bmN0aW9uIFFhKHQsZSxuKXt2YXIgcixpLGEsbztyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPT0oblswXS10WzBdKSooZVsxXS10WzFdKX0odCxlLG4pJiYoaT10W3I9Kyh0WzBdPT09ZVswXSldLGE9bltyXSxvPWVbcl0saTw9YSYmYTw9b3x8bzw9YSYmYTw9aSl9ZnVuY3Rpb24gS2EoKXt9dmFyIEphPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gdG8oKXt2YXIgdD0xLGU9MSxuPU4scj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoVmEpO2Vsc2V7dmFyIHI9bSh0KSxpPXJbMF0sbz1yWzFdO2U9TShpLG8sZSksZT1rKE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3Ioby9lKSplLGUpfXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlKX0pKX1mdW5jdGlvbiBhKG4saSl7dmFyIGE9W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhLHMsYyx1LGwsaCxmPW5ldyBBcnJheSxkPW5ldyBBcnJheTtmb3IoYT1zPS0xLHU9blswXT49cixKYVt1PDwxXS5mb3JFYWNoKHApOysrYTx0LTE7KWM9dSx1PW5bYSsxXT49cixKYVtjfHU8PDFdLmZvckVhY2gocCk7Zm9yKEphW3U8PDBdLmZvckVhY2gocCk7KytzPGUtMTspe2ZvcihhPS0xLHU9bltzKnQrdF0+PXIsbD1uW3MqdF0+PXIsSmFbdTw8MXxsPDwyXS5mb3JFYWNoKHApOysrYTx0LTE7KWM9dSx1PW5bcyp0K3QrYSsxXT49cixoPWwsbD1uW3MqdCthKzFdPj1yLEphW2N8dTw8MXxsPDwyfGg8PDNdLmZvckVhY2gocCk7SmFbdXxsPDwzXS5mb3JFYWNoKHApfWZvcihhPS0xLGw9bltzKnRdPj1yLEphW2w8PDJdLmZvckVhY2gocCk7KythPHQtMTspaD1sLGw9bltzKnQrYSsxXT49cixKYVtsPDwyfGg8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rYSx0WzBdWzFdK3NdLGM9W3RbMV1bMF0rYSx0WzFdWzFdK3NdLHU9byhyKSxsPW8oYyk7KGU9ZFt1XSk/KG49ZltsXSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2goYyksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2goYyksZFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1kW3VdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD11XT1lKTpmW3VdPWRbbF09e3N0YXJ0OnUsZW5kOmwscmluZzpbcixjXX19SmFbbDw8M10uZm9yRWFjaChwKX0obixpLChmdW5jdGlvbih0KXtyKHQsbixpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSh0KT4wP2EucHVzaChbdF0pOnMucHVzaCh0KX0pKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1hLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09WGEoKGU9YVtuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6YX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4scixpKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhLG89blswXSxzPW5bMV0sYz0wfG8sdT0wfHMsbD1yW3UqdCtjXTtvPjAmJm88dCYmYz09PW8mJihhPXJbdSp0K2MtMV0sblswXT1vKyhpLWEpLyhsLWEpLS41KSxzPjAmJnM8ZSYmdT09PXMmJihhPXJbKHUtMSkqdCtjXSxuWzFdPXMrKGktYSkvKGwtYSktLjUpfSkpfXJldHVybiBpLmNvbnRvdXI9YSxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLGE9TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZhPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9HYShXYS5jYWxsKHQpKTpHYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6S2EsaSk6cj09PXN9LGl9ZnVuY3Rpb24gZW8odCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxpOysrbylmb3IodmFyIHM9MCxjPTA7czxyK247KytzKXM8ciYmKGMrPXQuZGF0YVtzK28qcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW3MtYStvKnJdKSxlLmRhdGFbcy1uK28qcl09Yy9NYXRoLm1pbihzKzEsci0xK2EtcyxhKSl9ZnVuY3Rpb24gbm8odCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxyOysrbylmb3IodmFyIHM9MCxjPTA7czxpK247KytzKXM8aSYmKGMrPXQuZGF0YVtvK3Mqcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW28rKHMtYSkqcl0pLGUuZGF0YVtvKyhzLW4pKnJdPWMvTWF0aC5taW4ocysxLGktMSthLXMsYSkpfWZ1bmN0aW9uIHJvKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGlvKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGFvKCl7cmV0dXJuIDF9ZnVuY3Rpb24gb28oKXt2YXIgdD1ybyxlPWlvLG49YW8scj05NjAsaT01MDAsYT0yMCxvPTIscz0zKmEsYz1yKzIqcz4+byx1PWkrMipzPj5vLGw9R2EoMjApO2Z1bmN0aW9uIGgocil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheShjKnUpLGg9bmV3IEZsb2F0MzJBcnJheShjKnUpO3IuZm9yRWFjaCgoZnVuY3Rpb24ocixhLGwpe3ZhciBoPSt0KHIsYSxsKStzPj5vLGY9K2UocixhLGwpK3M+Pm8sZD0rbihyLGEsbCk7aD49MCYmaDxjJiZmPj0wJiZmPHUmJihpW2grZipjXSs9ZCl9KSksZW8oe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLG5vKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKSxlbyh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksbm8oe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pLGVvKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSxubyh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byk7dmFyIGQ9bChpKTtpZighQXJyYXkuaXNBcnJheShkKSl7dmFyIHA9SShpKTtkPU0oMCxwLGQpLChkPWsoMCxNYXRoLmZsb29yKHAvZCkqZCxkKSkuc2hpZnQoKX1yZXR1cm4gdG8oKS50aHJlc2hvbGRzKGQpLnNpemUoW2MsdV0pKGkpLm1hcChmKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlKj1NYXRoLnBvdygyLC0yKm8pLHQuY29vcmRpbmF0ZXMuZm9yRWFjaChkKSx0fWZ1bmN0aW9uIGQodCl7dC5mb3JFYWNoKHApfWZ1bmN0aW9uIHAodCl7dC5mb3JFYWNoKHkpfWZ1bmN0aW9uIHkodCl7dFswXT10WzBdKk1hdGgucG93KDIsbyktcyx0WzFdPXRbMV0qTWF0aC5wb3coMixvKS1zfWZ1bmN0aW9uIGcoKXtyZXR1cm4gYz1yKzIqKHM9MyphKT4+byx1PWkrMipzPj5vLGh9cmV0dXJuIGgueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkdhKCtlKSxoKTp0fSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSgrdCksaCk6ZX0saC53ZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSgrdCksaCk6bn0saC5zaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltyLGldO3ZhciBlPU1hdGguY2VpbCh0WzBdKSxuPU1hdGguY2VpbCh0WzFdKTtpZighKGU+PTB8fGU+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHI9ZSxpPW4sZygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxvO2lmKCEoKHQ9K3QpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIG89TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksZygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0dhKFdhLmNhbGwodCkpOkdhKHQpLGgpOmx9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQoYSooYSsxKSk7aWYoISgodD0rdCk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gYT1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp0KnQrMSktMSkvMiksZygpfSxofWZ1bmN0aW9uIHNvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBjbyh0LGUsbixyLGksYSxvLHMsYyx1KXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PWEsdGhpcy55PW8sdGhpcy5keD1zLHRoaXMuZHk9Yyx0aGlzLl89dX1mdW5jdGlvbiB1bygpe3JldHVybiFsZS5jdHJsS2V5JiYhbGUuYnV0dG9ufWZ1bmN0aW9uIGxvKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBobyh0KXtyZXR1cm4gbnVsbD09dD97eDpsZS54LHk6bGUueX06dH1mdW5jdGlvbiBmbygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBwbygpe3ZhciB0LGUsbixyLGk9dW8sYT1sbyxvPWhvLHM9Zm8sYz17fSx1PWZ0KCJzdGFydCIsImRyYWciLCJlbmQiKSxsPTAsaD0wO2Z1bmN0aW9uIGYodCl7dC5vbigibW91c2Vkb3duLmRyYWciLGQpLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIixnKS5vbigidG91Y2htb3ZlLmRyYWciLG0pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHYpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkKCl7aWYoIXImJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbz1iKCJtb3VzZSIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksQm4sdGhpcyxhcmd1bWVudHMpO28mJihUZShsZS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHAsITApLm9uKCJtb3VzZXVwLmRyYWciLHksITApLFNlKGxlLnZpZXcpLEVlKCksbj0hMSx0PWxlLmNsaWVudFgsZT1sZS5jbGllbnRZLG8oInN0YXJ0IikpfX1mdW5jdGlvbiBwKCl7aWYoQ2UoKSwhbil7dmFyIHI9bGUuY2xpZW50WC10LGk9bGUuY2xpZW50WS1lO249cipyK2kqaT5ofWMubW91c2UoImRyYWciKX1mdW5jdGlvbiB5KCl7VGUobGUudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksQWUobGUudmlldyxuKSxDZSgpLGMubW91c2UoImVuZCIpfWZ1bmN0aW9uIGcoKXtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPWxlLmNoYW5nZWRUb3VjaGVzLHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1uLmxlbmd0aDtmb3IodD0wO3Q8bzsrK3QpKGU9YihuW3RdLmlkZW50aWZpZXIscixPbix0aGlzLGFyZ3VtZW50cykpJiYoRWUoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gbSgpe3ZhciB0LGUsbj1sZS5jaGFuZ2VkVG91Y2hlcyxyPW4ubGVuZ3RoO2Zvcih0PTA7dDxyOysrdCkoZT1jW25bdF0uaWRlbnRpZmllcl0pJiYoQ2UoKSxlKCJkcmFnIikpfWZ1bmN0aW9uIHYoKXt2YXIgdCxlLG49bGUuY2hhbmdlZFRvdWNoZXMsaT1uLmxlbmd0aDtmb3IociYmY2xlYXJUaW1lb3V0KHIpLHI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyPW51bGx9KSw1MDApLHQ9MDt0PGk7Kyt0KShlPWNbblt0XS5pZGVudGlmaWVyXSkmJihFZSgpLGUoImVuZCIpKX1mdW5jdGlvbiBiKHQsZSxuLHIsaSl7dmFyIGEscyxoLGQ9bihlLHQpLHA9dS5jb3B5KCk7aWYoZ2UobmV3IGNvKGYsImJlZm9yZXN0YXJ0IixhLHQsbCxkWzBdLGRbMV0sMCwwLHApLChmdW5jdGlvbigpe3JldHVybiBudWxsIT0obGUuc3ViamVjdD1hPW8uYXBwbHkocixpKSkmJihzPWEueC1kWzBdfHwwLGg9YS55LWRbMV18fDAsITApfSkpKXJldHVybiBmdW5jdGlvbiBvKHUpe3ZhciB5LGc9ZDtzd2l0Y2godSl7Y2FzZSJzdGFydCI6Y1t0XT1vLHk9bCsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgY1t0XSwtLWw7Y2FzZSJkcmFnIjpkPW4oZSx0KSx5PWx9Z2UobmV3IGNvKGYsdSxhLHQseSxkWzBdK3MsZFsxXStoLGRbMF0tZ1swXSxkWzFdLWdbMV0scCkscC5hcHBseSxwLFt1LHIsaV0pfX1yZXR1cm4gZi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzbyghIXQpLGYpOml9LGYuY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c28odCksZik6YX0sZi5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6c28odCksZik6b30sZi50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzbyghIXQpLGYpOnN9LGYub249ZnVuY3Rpb24oKXt2YXIgdD11Lm9uLmFwcGx5KHUsYXJndW1lbnRzKTtyZXR1cm4gdD09PXU/Zjp0fSxmLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KHQ9K3QpKnQsZik6TWF0aC5zcXJ0KGgpfSxmfWNvLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciB5bz17fSxnbz17fTtmdW5jdGlvbiBtbyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsnXSB8fCAiIid9KSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gdm8odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gZXx8bi5wdXNoKGVbcl09cil9KSksbn1mdW5jdGlvbiBibyh0LGUpe3ZhciBuPXQrIiIscj1uLmxlbmd0aDtyZXR1cm4gcjxlP25ldyBBcnJheShlLXIrMSkuam9pbigwKStuOm59ZnVuY3Rpb24gX28odCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcih0LGUpe3ZhciByLGk9W10sYT10Lmxlbmd0aCxvPTAscz0wLGM9YTw9MCx1PSExO2Z1bmN0aW9uIGwoKXtpZihjKXJldHVybiBnbztpZih1KXJldHVybiB1PSExLHlvO3ZhciBlLHIsaT1vO2lmKDM0PT09dC5jaGFyQ29kZUF0KGkpKXtmb3IoO28rKzxhJiYzNCE9PXQuY2hhckNvZGVBdChvKXx8MzQ9PT10LmNoYXJDb2RlQXQoKytvKTspO3JldHVybihlPW8pPj1hP2M9ITA6MTA9PT0ocj10LmNoYXJDb2RlQXQobysrKSk/dT0hMDoxMz09PXImJih1PSEwLDEwPT09dC5jaGFyQ29kZUF0KG8pJiYrK28pLHQuc2xpY2UoaSsxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7bzxhOyl7aWYoMTA9PT0ocj10LmNoYXJDb2RlQXQoZT1vKyspKSl1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbztlbHNlIGlmKHIhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGksZSl9cmV0dXJuIGM9ITAsdC5zbGljZShpLGEpfWZvcigxMD09PXQuY2hhckNvZGVBdChhLTEpJiYtLWEsMTM9PT10LmNoYXJDb2RlQXQoYS0xKSYmLS1hOyhyPWwoKSkhPT1nbzspe2Zvcih2YXIgaD1bXTtyIT09eW8mJnIhPT1nbzspaC5wdXNoKHIpLHI9bCgpO2UmJm51bGw9PShoPWUoaCxzKyspKXx8aS5wdXNoKGgpfXJldHVybiBpfWZ1bmN0aW9uIGkoZSxuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KSkuam9pbih0KX0pKX1mdW5jdGlvbiBhKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6dCBpbnN0YW5jZW9mIERhdGU/ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRVVENIb3VycygpLG49dC5nZXRVVENNaW51dGVzKCkscj10LmdldFVUQ1NlY29uZHMoKSxpPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKHQpPyJJbnZhbGlkIERhdGUiOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/Ii0iK2JvKC10LDYpOnQ+OTk5OT8iKyIrYm8odCw2KTpibyh0LDQpfSh0LmdldFVUQ0Z1bGxZZWFyKCkpKyItIitibyh0LmdldFVUQ01vbnRoKCkrMSwyKSsiLSIrYm8odC5nZXRVVENEYXRlKCksMikrKGk/IlQiK2JvKGUsMikrIjoiK2JvKG4sMikrIjoiK2JvKHIsMikrIi4iK2JvKGksMykrIloiOnI/IlQiK2JvKGUsMikrIjoiK2JvKG4sMikrIjoiK2JvKHIsMikrIloiOm58fGU/IlQiK2JvKGUsMikrIjoiK2JvKG4sMikrIloiOiIiKX0odCk6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxhPXIodCwoZnVuY3Rpb24odCxyKXtpZihuKXJldHVybiBuKHQsci0xKTtpPXQsbj1lP2Z1bmN0aW9uKHQsZSl7dmFyIG49bW8odCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUobihyKSxpLHQpfX0odCxlKTptbyh0KX0pKTtyZXR1cm4gYS5jb2x1bW5zPWl8fFtdLGF9LHBhcnNlUm93czpyLGZvcm1hdDpmdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1uJiYobj12byhlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChpKGUsbikpLmpvaW4oIlxuIil9LGZvcm1hdEJvZHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZSYmKGU9dm8odCkpLGkodCxlKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChhKS5qb2luKCJcbiIpfSxmb3JtYXRSb3c6YSxmb3JtYXRWYWx1ZTpvfX12YXIgeG89X28oIiwiKSx3bz14by5wYXJzZSxrbz14by5wYXJzZVJvd3MsVG89eG8uZm9ybWF0LEVvPXhvLmZvcm1hdEJvZHksQ289eG8uZm9ybWF0Um93cyxTbz14by5mb3JtYXRSb3csQW89eG8uZm9ybWF0VmFsdWUsTW89X28oIlx0IiksTm89TW8ucGFyc2UsRG89TW8ucGFyc2VSb3dzLE9vPU1vLmZvcm1hdCxCbz1Nby5mb3JtYXRCb2R5LExvPU1vLmZvcm1hdFJvd3MsSW89TW8uZm9ybWF0Um93LFJvPU1vLmZvcm1hdFZhbHVlO2Z1bmN0aW9uIEZvKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbixyLGk9dFtlXS50cmltKCk7aWYoaSlpZigidHJ1ZSI9PT1pKWk9ITA7ZWxzZSBpZigiZmFsc2UiPT09aSlpPSExO2Vsc2UgaWYoIk5hTiI9PT1pKWk9TmFOO2Vsc2UgaWYoaXNOYU4obj0raSkpe2lmKCEocj1pLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO1BvJiZyWzRdJiYhcls3XSYmKGk9aS5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxpPW5ldyBEYXRlKGkpfWVsc2UgaT1uO2Vsc2UgaT1udWxsO3RbZV09aX1yZXR1cm4gdH12YXIgUG89bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCk7ZnVuY3Rpb24gam8odCl7cmV0dXJuK3R9ZnVuY3Rpb24gWW8odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiB6byh0KXtyZXR1cm4gdCooMi10KX1mdW5jdGlvbiBVbyh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn12YXIgcW89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxIbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSwkbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxXbz1NYXRoLlBJLFZvPVdvLzI7ZnVuY3Rpb24gR28odCl7cmV0dXJuIDE9PSt0PzE6MS1NYXRoLmNvcyh0KlZvKX1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpWbyl9ZnVuY3Rpb24gWm8odCl7cmV0dXJuKDEtTWF0aC5jb3MoV28qdCkpLzJ9ZnVuY3Rpb24gUW8odCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIEtvKHQpe3JldHVybiBRbygxLSt0KX1mdW5jdGlvbiBKbyh0KXtyZXR1cm4gMS1Rbyh0KX1mdW5jdGlvbiB0cyh0KXtyZXR1cm4oKHQqPTIpPD0xP1FvKDEtdCk6Mi1Rbyh0LTEpKS8yfWZ1bmN0aW9uIGVzKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gbnModCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9ZnVuY3Rpb24gcnModCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGlzPTcuNTYyNTtmdW5jdGlvbiBhcyh0KXtyZXR1cm4gMS1vcygxLXQpfWZ1bmN0aW9uIG9zKHQpe3JldHVybih0PSt0KTwuMzYzNjM2MzYzNjM2MzYzNjU/aXMqdCp0OnQ8LjcyNzI3MjcyNzI3MjcyNzM/aXMqKHQtPS41NDU0NTQ1NDU0NTQ1NDU0KSp0Ky43NTp0PC45MDkwOTA5MDkwOTA5MDkxP2lzKih0LT0uODE4MTgxODE4MTgxODE4MikqdCsuOTM3NTppcyoodC09Ljk1NDU0NTQ1NDU0NTQ1NDYpKnQrLjk4NDM3NX1mdW5jdGlvbiBzcyh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtb3MoMS10KTpvcyh0LTEpKzEpLzJ9dmFyIGNzPTEuNzAxNTgsdXM9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybih0PSt0KSp0KihlKih0LTEpK3QpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oY3MpLGxzPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKHQrMSkqZSt0KSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oY3MpLGhzPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufShjcyksZnM9MipNYXRoLlBJLGRzPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWZzKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKlFvKC0gLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykscHM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZnMpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpRbyh0PSt0KSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykseXM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZnMpO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqUW8oLXQpKk1hdGguc2luKChyLXQpL24pOjItZSpRbyh0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyk7ZnVuY3Rpb24gZ3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBtcyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZ3MpfWZ1bmN0aW9uIHZzKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5hcnJheUJ1ZmZlcigpfWZ1bmN0aW9uIGJzKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbih2cyl9ZnVuY3Rpb24gX3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiB4cyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oX3MpfWZ1bmN0aW9uIHdzKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCkseHMoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSkpfX1mdW5jdGlvbiBrcyh0LGUsbixyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3ZhciBpPV9vKHQpO3JldHVybiB4cyhlLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnNlKHQscil9KSl9dmFyIFRzPXdzKHdvKSxFcz13cyhObyk7ZnVuY3Rpb24gQ3ModCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgYSBpbiBlKWlbYV09ZVthXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe24oaSl9LGkuc3JjPXR9KSl9ZnVuY3Rpb24gU3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO2lmKDIwNCE9PXQuc3RhdHVzJiYyMDUhPT10LnN0YXR1cylyZXR1cm4gdC5qc29uKCl9ZnVuY3Rpb24gQXModCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKFNzKX1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4geHMoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KSl9fWNvbnN0IE5zPU1zKCJhcHBsaWNhdGlvbi94bWwiKTt2YXIgRHM9TXMoInRleHQvaHRtbCIpLE9zPU1zKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gQnModCxlKXt2YXIgbjtmdW5jdGlvbiByKCl7dmFyIHIsaSxhPW4ubGVuZ3RoLG89MCxzPTA7Zm9yKHI9MDtyPGE7KytyKW8rPShpPW5bcl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUscj0wO3I8YTsrK3IpKGk9bltyXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLHIuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscik6ZX0scn1mdW5jdGlvbiBMcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSXMoKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gUnModCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkPXQuX3Jvb3QscD17ZGF0YTpyfSx5PXQuX3gwLGc9dC5feTAsbT10Ll94MSx2PXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigodT1lPj0oYT0oeSttKS8yKSk/eT1hOm09YSwobD1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9byxpPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gaVtoXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2hdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShhPSh5K20pLzIpKT95PWE6bT1hLChsPW4+PShvPShnK3YpLzIpKT9nPW86dj1vfXdoaWxlKChoPWw8PDF8dSk9PShmPShjPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09ZCxpW2hdPXAsdH1mdW5jdGlvbiBGcyh0LGUsbixyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1yLHRoaXMueTE9aX1mdW5jdGlvbiBQcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBqcyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBZcyh0LGUsbil7dmFyIHI9bmV3IHpzKG51bGw9PWU/UHM6ZSxudWxsPT1uP2pzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIHpzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVXModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBxcz1Zcy5wcm90b3R5cGU9enMucHJvdG90eXBlO2Z1bmN0aW9uIEhzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiAkcyh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gV3ModCl7dmFyIGUsbixyPTEsaT0xO2Z1bmN0aW9uIGEoKXtmb3IodmFyIHQsYSxzLGMsdSxsLGgsZj1lLmxlbmd0aCxkPTA7ZDxpOysrZClmb3IoYT1ZcyhlLEhzLCRzKS52aXNpdEFmdGVyKG8pLHQ9MDt0PGY7Kyt0KXM9ZVt0XSxsPW5bcy5pbmRleF0saD1sKmwsYz1zLngrcy52eCx1PXMueStzLnZ5LGEudmlzaXQocCk7ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPXQuZGF0YSxmPXQucixkPWwrZjtpZighbylyZXR1cm4gZT5jK2R8fGk8Yy1kfHxuPnUrZHx8YTx1LWQ7aWYoby5pbmRleD5zLmluZGV4KXt2YXIgcD1jLW8ueC1vLnZ4LHk9dS1vLnktby52eSxnPXAqcCt5Knk7ZzxkKmQmJigwPT09cCYmKGcrPShwPUlzKCkpKnApLDA9PT15JiYoZys9KHk9SXMoKSkqeSksZz0oZC0oZz1NYXRoLnNxcnQoZykpKS9nKnIscy52eCs9KHAqPWcpKihkPShmKj1mKS8oaCtmKSkscy52eSs9KHkqPWcpKmQsby52eC09cCooZD0xLWQpLG8udnktPXkqZCl9fX1mdW5jdGlvbiBvKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciByLGksYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSkscj0wO3I8YTsrK3IpaT1lW3JdLG5baS5pbmRleF09K3QoaSxyLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9THMobnVsbD09dD8xOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LGEuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxhKTppfSxhLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGEpOnJ9LGEucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6THMoK2UpLHMoKSxhKTp0fSxhfWZ1bmN0aW9uIFZzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIEdzKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufWZ1bmN0aW9uIFhzKHQpe3ZhciBlLG4scixpLGEsbz1WcyxzPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sYz1McygzMCksdT0xO2Z1bmN0aW9uIGwocil7Zm9yKHZhciBpPTAsbz10Lmxlbmd0aDtpPHU7KytpKWZvcih2YXIgcyxjLGwsaCxmLGQscCx5PTA7eTxvOysreSljPShzPXRbeV0pLnNvdXJjZSxoPShsPXMudGFyZ2V0KS54K2wudngtYy54LWMudnh8fElzKCksZj1sLnkrbC52eS1jLnktYy52eXx8SXMoKSxoKj1kPSgoZD1NYXRoLnNxcnQoaCpoK2YqZikpLW5beV0pL2QqciplW3ldLGYqPWQsbC52eC09aCoocD1hW3ldKSxsLnZ5LT1mKnAsYy52eCs9aCoocD0xLXApLGMudnkrPWYqcH1mdW5jdGlvbiBoKCl7aWYocil7dmFyIHMsYyx1PXIubGVuZ3RoLGw9dC5sZW5ndGgsaD1uYShyLG8pO2ZvcihzPTAsaT1uZXcgQXJyYXkodSk7czxsOysrcykoYz10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgYy5zb3VyY2UmJihjLnNvdXJjZT1HcyhoLGMuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBjLnRhcmdldCYmKGMudGFyZ2V0PUdzKGgsYy50YXJnZXQpKSxpW2Muc291cmNlLmluZGV4XT0oaVtjLnNvdXJjZS5pbmRleF18fDApKzEsaVtjLnRhcmdldC5pbmRleF09KGlbYy50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsYT1uZXcgQXJyYXkobCk7czxsOysrcyljPXRbc10sYVtzXT1pW2Muc291cmNlLmluZGV4XS8oaVtjLnNvdXJjZS5pbmRleF0raVtjLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGwpLGYoKSxuPW5ldyBBcnJheShsKSxkKCl9fWZ1bmN0aW9uIGYoKXtpZihyKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGgoKX0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGgoKSxsKTp0fSxsLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGwpOnV9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMcygrdCksZigpLGwpOnN9LGwuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMcygrdCksZCgpLGwpOmN9LGx9ZnVuY3Rpb24gWnModCl7cmV0dXJuIHQueH1mdW5jdGlvbiBRcyh0KXtyZXR1cm4gdC55fXFzLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IHpzKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBuO2lmKCFyLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1VcyhyKSxuO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPXIuc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPVVzKGUpKTtyZXR1cm4gbn0scXMuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gUnModGhpcy5jb3ZlcihlLG4pLGUsbix0KX0scXMuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz0xLzAsdT0xLzAsbD0tMS8wLGg9LTEvMDtmb3Iobj0wO248YTsrK24paXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KG9bbl09cixzW25dPWkscjxjJiYoYz1yKSxyPmwmJihsPXIpLGk8dSYmKHU9aSksaT5oJiYoaD1pKSk7aWYoYz5sfHx1PmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyx1KS5jb3ZlcihsLGgpLG49MDtuPGE7KytuKVJzKHRoaXMsb1tuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSxxcy5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihuKSlpPShuPU1hdGguZmxvb3IodCkpKzEsYT0ocj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBvLHMsYz1pLW4sdT10aGlzLl9yb290O24+dHx8dD49aXx8cj5lfHxlPj1hOylzd2l0Y2gocz0oZTxyKTw8MXx0PG4sKG89bmV3IEFycmF5KDQpKVtzXT11LHU9byxjKj0yLHMpe2Nhc2UgMDppPW4rYyxhPXIrYzticmVhaztjYXNlIDE6bj1pLWMsYT1yK2M7YnJlYWs7Y2FzZSAyOmk9bitjLHI9YS1jO2JyZWFrO2Nhc2UgMzpuPWktYyxyPWEtY310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9dSl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30scXMuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LHFzLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0scXMuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scyxjLHUsbD10aGlzLl94MCxoPXRoaXMuX3kwLGY9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLHk9dGhpcy5fcm9vdDtmb3IoeSYmcC5wdXNoKG5ldyBGcyh5LGwsaCxmLGQpKSxudWxsPT1uP249MS8wOihsPXQtbixoPWUtbixmPXQrbixkPWUrbixuKj1uKTtjPXAucG9wKCk7KWlmKCEoISh5PWMubm9kZSl8fChpPWMueDApPmZ8fChhPWMueTApPmR8fChvPWMueDEpPGx8fChzPWMueTEpPGgpKWlmKHkubGVuZ3RoKXt2YXIgZz0oaStvKS8yLG09KGErcykvMjtwLnB1c2gobmV3IEZzKHlbM10sZyxtLG8scyksbmV3IEZzKHlbMl0saSxtLGcscyksbmV3IEZzKHlbMV0sZyxhLG8sbSksbmV3IEZzKHlbMF0saSxhLGcsbSkpLCh1PShlPj1tKTw8MXx0Pj1nKSYmKGM9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS11XSxwW3AubGVuZ3RoLTEtdV09Yyl9ZWxzZXt2YXIgdj10LSt0aGlzLl94LmNhbGwobnVsbCx5LmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwseS5kYXRhKSxfPXYqditiKmI7aWYoXzxuKXt2YXIgeD1NYXRoLnNxcnQobj1fKTtsPXQteCxoPWUteCxmPXQreCxkPWUreCxyPXkuZGF0YX19cmV0dXJuIHJ9LHFzLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoLGYsZD10aGlzLl9yb290LHA9dGhpcy5feDAseT10aGlzLl95MCxnPXRoaXMuX3gxLG09dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigodT1hPj0ocz0ocCtnKS8yKSk/cD1zOmc9cywobD1vPj0oYz0oeSttKS8yKSk/eT1jOm09YyxlPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYobj1lLGY9aCl9Zm9yKDtkLmRhdGEhPT10OylpZihyPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6ZT8oaT9lW2hdPWk6ZGVsZXRlIGVbaF0sKGQ9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJmQ9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFkLmxlbmd0aCYmKG4/bltmXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0scXMucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30scXMucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxxcy5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0scXMudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYSxvLHM9W10sYz10aGlzLl9yb290O2ZvcihjJiZzLnB1c2gobmV3IEZzKGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGM9ZS5ub2RlLHI9ZS54MCxpPWUueTAsYT1lLngxLG89ZS55MSkmJmMubGVuZ3RoKXt2YXIgdT0ocithKS8yLGw9KGkrbykvMjsobj1jWzNdKSYmcy5wdXNoKG5ldyBGcyhuLHUsbCxhLG8pKSwobj1jWzJdKSYmcy5wdXNoKG5ldyBGcyhuLHIsbCx1LG8pKSwobj1jWzFdKSYmcy5wdXNoKG5ldyBGcyhuLHUsaSxhLGwpKSwobj1jWzBdKSYmcy5wdXNoKG5ldyBGcyhuLHIsaSx1LGwpKX1yZXR1cm4gdGhpc30scXMudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgRnModGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBpPWUubm9kZTtpZihpLmxlbmd0aCl7dmFyIGEsbz1lLngwLHM9ZS55MCxjPWUueDEsdT1lLnkxLGw9KG8rYykvMixoPShzK3UpLzI7KGE9aVswXSkmJm4ucHVzaChuZXcgRnMoYSxvLHMsbCxoKSksKGE9aVsxXSkmJm4ucHVzaChuZXcgRnMoYSxsLHMsYyxoKSksKGE9aVsyXSkmJm4ucHVzaChuZXcgRnMoYSxvLGgsbCx1KSksKGE9aVszXSkmJm4ucHVzaChuZXcgRnMoYSxsLGgsYyx1KSl9ci5wdXNoKGUpfWZvcig7ZT1yLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30scXMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LHFzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgS3M9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIEpzKHQpe3ZhciBlLG49MSxyPS4wMDEsaT0xLU1hdGgucG93KHIsMS8zMDApLGE9MCxvPS42LHM9bmEoKSxjPVZuKGwpLHU9ZnQoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBsKCl7aCgpLHUuY2FsbCgidGljayIsZSksbjxyJiYoYy5zdG9wKCksdS5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBoKHIpe3ZhciBjLHUsbD10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGg9MDtoPHI7KytoKWZvcihuKz0oYS1uKSppLHMuZWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxjPTA7YzxsOysrYyludWxsPT0odT10W2NdKS5meD91LngrPXUudngqPW86KHUueD11LmZ4LHUudng9MCksbnVsbD09dS5meT91LnkrPXUudnkqPW86KHUueT11LmZ5LHUudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2Zvcih2YXIgZSxuPTAscj10Lmxlbmd0aDtuPHI7KytuKXtpZigoZT10W25dKS5pbmRleD1uLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQobiksYT1uKktzO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksZigpLGU9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzdGFydChsKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGMuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZigpLHMuZWFjaChkKSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxlKTpufSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTEtdCxlKToxLW99LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9zLnJlbW92ZSh0KTpzLnNldCh0LGQobikpLGUpOnMuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxhLG8scyxjLHU9MCxsPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsdT0wO3U8bDsrK3UpKG89KGk9ZS0ocz10W3VdKS54KSppKyhhPW4tcy55KSphKTxyJiYoYz1zLHI9byk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8odS5vbih0LG4pLGUpOnUub24odCl9fX1mdW5jdGlvbiB0Yygpe3ZhciB0LGUsbixyLGk9THMoLTMwKSxhPTEsbz0xLzAscz0uODE7ZnVuY3Rpb24gYyhyKXt2YXIgaSxhPXQubGVuZ3RoLG89WXModCxacyxRcykudmlzaXRBZnRlcihsKTtmb3Iobj1yLGk9MDtpPGE7KytpKWU9dFtpXSxvLnZpc2l0KGgpfWZ1bmN0aW9uIHUoKXtpZih0KXt2YXIgZSxuLGE9dC5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKW49dFtlXSxyW24uaW5kZXhdPStpKG4sZSx0KX19ZnVuY3Rpb24gbCh0KXt2YXIgZSxuLGksYSxvLHM9MCxjPTA7aWYodC5sZW5ndGgpe2ZvcihpPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihuPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsYys9bixpKz1uKmUueCxhKz1uKmUueSk7dC54PWkvYyx0Lnk9YS9jfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9cltlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gaCh0LGksYyx1KXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgbD10LngtZS54LGg9dC55LWUueSxmPXUtaSxkPWwqbCtoKmg7aWYoZipmL3M8ZClyZXR1cm4gZDxvJiYoMD09PWwmJihkKz0obD1JcygpKSpsKSwwPT09aCYmKGQrPShoPUlzKCkpKmgpLGQ8YSYmKGQ9TWF0aC5zcXJ0KGEqZCkpLGUudngrPWwqdC52YWx1ZSpuL2QsZS52eSs9aCp0LnZhbHVlKm4vZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49bykpeyh0LmRhdGEhPT1lfHx0Lm5leHQpJiYoMD09PWwmJihkKz0obD1JcygpKSpsKSwwPT09aCYmKGQrPShoPUlzKCkpKmgpLGQ8YSYmKGQ9TWF0aC5zcXJ0KGEqZCkpKTtkb3t0LmRhdGEhPT1lJiYoZj1yW3QuZGF0YS5pbmRleF0qbi9kLGUudngrPWwqZixlLnZ5Kz1oKmYpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGMuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsdSgpfSxjLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6THMoK3QpLHUoKSxjKTppfSxjLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxjKTpNYXRoLnNxcnQoYSl9LGMuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCp0LGMpOk1hdGguc3FydChvKX0sYy50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10KnQsYyk6TWF0aC5zcXJ0KHMpfSxjfWZ1bmN0aW9uIGVjKHQsZSxuKXt2YXIgcixpLGEsbz1McyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sdT1jLngtZXx8MWUtNixsPWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KHUqdStsKmwpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9dSpmLGMudnkrPWwqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1McygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6THMoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkxzKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfWZ1bmN0aW9uIG5jKHQpe3ZhciBlLG4scixpPUxzKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oclthXS1pLngpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1McyhudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzKCt0KSxvKCksYSk6aX0sYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6THMoK2UpLG8oKSxhKTp0fSxhfWZ1bmN0aW9uIHJjKHQpe3ZhciBlLG4scixpPUxzKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oclthXS1pLnkpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1McyhudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzKCt0KSxvKCksYSk6aX0sYS55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6THMoK2UpLG8oKSxhKTp0fSxhfWZ1bmN0aW9uIGljKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIGFjKHQpe3JldHVybih0PWljKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIG9jLHNjPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGNjKHQpe2lmKCEoZT1zYy5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgdWMoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gdWModCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gbGModCxlKXt2YXIgbj1pYyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfWNjLnByb3RvdHlwZT11Yy5wcm90b3R5cGUsdWMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgaGM9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxjKDEwMCp0LGUpfSxyOmxjLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1pYyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLGE9aS0ob2M9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLG89ci5sZW5ndGg7cmV0dXJuIGE9PT1vP3I6YT5vP3IrbmV3IEFycmF5KGEtbysxKS5qb2luKCIwIik6YT4wP3Iuc2xpY2UoMCxhKSsiLiIrci5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStpYyh0LE1hdGgubWF4KDAsZSthLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBmYyh0KXtyZXR1cm4gdH12YXIgZGMscGMseWMsZ2M9QXJyYXkucHJvdG90eXBlLm1hcCxtYz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gdmModCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2ZjOihlPWdjLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP2ZjOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fShnYy5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIix1PXZvaWQgMD09PXQubWludXM/Ii0iOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PWNjKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCx5PXQuY29tbWEsZz10LnByZWNpc2lvbixtPXQudHJpbSx2PXQudHlwZTsibiI9PT12Pyh5PSEwLHY9ImciKTpoY1t2XXx8KHZvaWQgMD09PWcmJihnPTEyKSxtPSEwLHY9ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLF89IiQiPT09Zj9hOi9bJXBdLy50ZXN0KHYpP2M6IiIseD1oY1t2XSx3PS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIGsodCl7dmFyIGksYSxjLGY9YixrPV87aWYoImMiPT09dilrPXgodCkrayx0PSIiO2Vsc2V7dmFyIFQ9KHQ9K3QpPDB8fDEvdDwwO2lmKHQ9aXNOYU4odCk/bDp4KE1hdGguYWJzKHQpLGcpLG0mJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgscj0xLGk9LTE7cjxuOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPWU9cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxlPXI7YnJlYWs7ZGVmYXVsdDppZighK3Rbcl0pYnJlYWsgdDtpPjAmJihpPTApfXJldHVybiBpPjA/dC5zbGljZSgwLGkpK3Quc2xpY2UoZSsxKTp0fSh0KSksVCYmMD09K3QmJiIrIiE9PWgmJihUPSExKSxmPShUPyIoIj09PWg/aDp1OiItIj09PWh8fCIoIj09PWg/IiI6aCkrZixrPSgicyI9PT12P21jWzgrb2MvM106IiIpK2srKFQmJiIoIj09PWg/IikiOiIiKSx3KWZvcihpPS0xLGE9dC5sZW5ndGg7KytpPGE7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe2s9KDQ2PT09Yz9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKStrLHQ9dC5zbGljZSgwLGkpO2JyZWFrfX15JiYhZCYmKHQ9cih0LDEvMCkpO3ZhciBFPWYubGVuZ3RoK3QubGVuZ3RoK2subGVuZ3RoLEM9RTxwP25ldyBBcnJheShwLUUrMSkuam9pbihlKToiIjtzd2l0Y2goeSYmZCYmKHQ9cihDK3QsQy5sZW5ndGg/cC1rLmxlbmd0aDoxLzApLEM9IiIpLG4pe2Nhc2UiPCI6dD1mK3QraytDO2JyZWFrO2Nhc2UiPSI6dD1mK0MrdCtrO2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsRT1DLmxlbmd0aD4+MSkrZit0K2srQy5zbGljZShFKTticmVhaztkZWZhdWx0OnQ9QytmK3Qra31yZXR1cm4gcyh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh2KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxrLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LGt9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPWgoKCh0PWNjKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihhYyhlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLGE9bWNbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19ZnVuY3Rpb24gYmModCl7cmV0dXJuIGRjPXZjKHQpLHBjPWRjLmZvcm1hdCx5Yz1kYy5mb3JtYXRQcmVmaXgsZGN9ZnVuY3Rpb24gX2ModCl7cmV0dXJuIE1hdGgubWF4KDAsLWFjKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24geGModCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihhYyhlKS8zKSkpLWFjKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24gd2ModCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxhYyhlKS1hYyh0KSkrMX1mdW5jdGlvbiBrYygpe3JldHVybiBuZXcgVGN9ZnVuY3Rpb24gVGMoKXt0aGlzLnJlc2V0KCl9YmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLFRjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGMscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtDYyhFYyx0LHRoaXMudCksQ2ModGhpcyxFYy5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9RWMudDp0aGlzLnM9RWMudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgRWM9bmV3IFRjO2Z1bmN0aW9uIENjKHQsZSxuKXt2YXIgcj10LnM9ZStuLGk9ci1lLGE9ci1pO3QudD1lLWErKG4taSl9dmFyIFNjPTFlLTYsQWM9MWUtMTIsTWM9TWF0aC5QSSxOYz1NYy8yLERjPU1jLzQsT2M9MipNYyxCYz0xODAvTWMsTGM9TWMvMTgwLEljPU1hdGguYWJzLFJjPU1hdGguYXRhbixGYz1NYXRoLmF0YW4yLFBjPU1hdGguY29zLGpjPU1hdGguY2VpbCxZYz1NYXRoLmV4cCx6Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksVWM9TWF0aC5wb3cscWM9TWF0aC5zaW4sSGM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LCRjPU1hdGguc3FydCxXYz1NYXRoLnRhbjtmdW5jdGlvbiBWYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9NYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gR2ModCl7cmV0dXJuIHQ+MT9OYzp0PC0xPy1OYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gWGModCl7cmV0dXJuKHQ9cWModC8yKSkqdH1mdW5jdGlvbiBaYygpe31mdW5jdGlvbiBRYyh0LGUpe3QmJkpjLmhhc093blByb3BlcnR5KHQudHlwZSkmJkpjW3QudHlwZV0odCxlKX12YXIgS2M9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtRYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspUWMobltyXS5nZW9tZXRyeSxlKX19LEpjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7dHUodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KXR1KG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2V1KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZXUobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVFjKG5bcl0sZSl9fTtmdW5jdGlvbiB0dSh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBldSh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KXR1KHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBudSh0LGUpe3QmJktjLmhhc093blByb3BlcnR5KHQudHlwZSk/S2NbdC50eXBlXSh0LGUpOlFjKHQsZSl9dmFyIHJ1LGl1LGF1LG91LHN1LGN1PWtjKCksdXU9a2MoKSxsdT17cG9pbnQ6WmMsbGluZVN0YXJ0OlpjLGxpbmVFbmQ6WmMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Y3UucmVzZXQoKSxsdS5saW5lU3RhcnQ9aHUsbHUubGluZUVuZD1mdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStjdTt1dS5hZGQodDwwP09jK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9WmN9LHNwaGVyZTpmdW5jdGlvbigpe3V1LmFkZChPYyl9fTtmdW5jdGlvbiBodSgpe2x1LnBvaW50PWR1fWZ1bmN0aW9uIGZ1KCl7cHUocnUsaXUpfWZ1bmN0aW9uIGR1KHQsZSl7bHUucG9pbnQ9cHUscnU9dCxpdT1lLGF1PXQqPUxjLG91PVBjKGU9KGUqPUxjKS8yK0RjKSxzdT1xYyhlKX1mdW5jdGlvbiBwdSh0LGUpe3ZhciBuPSh0Kj1MYyktYXUscj1uPj0wPzE6LTEsaT1yKm4sYT1QYyhlPShlKj1MYykvMitEYyksbz1xYyhlKSxzPXN1Km8sYz1vdSphK3MqUGMoaSksdT1zKnIqcWMoaSk7Y3UuYWRkKEZjKHUsYykpLGF1PXQsb3U9YSxzdT1vfWZ1bmN0aW9uIHl1KHQpe3JldHVybiB1dS5yZXNldCgpLG51KHQsbHUpLDIqdXV9ZnVuY3Rpb24gZ3UodCl7cmV0dXJuW0ZjKHRbMV0sdFswXSksR2ModFsyXSldfWZ1bmN0aW9uIG11KHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9UGMobik7cmV0dXJuW3IqUGMoZSkscipxYyhlKSxxYyhuKV19ZnVuY3Rpb24gdnUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gYnUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIF91KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24geHUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIHd1KHQpe3ZhciBlPSRjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIga3UsVHUsRXUsQ3UsU3UsQXUsTXUsTnUsRHUsT3UsQnUsTHUsSXUsUnUsRnUsUHUsanUsWXUsenUsVXUscXUsSHUsJHUsV3UsVnUsR3UsWHU9a2MoKSxadT17cG9pbnQ6UXUsbGluZVN0YXJ0Okp1LGxpbmVFbmQ6dGwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WnUucG9pbnQ9ZWwsWnUubGluZVN0YXJ0PW5sLFp1LmxpbmVFbmQ9cmwsWHUucmVzZXQoKSxsdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2x1LnBvbHlnb25FbmQoKSxadS5wb2ludD1RdSxadS5saW5lU3RhcnQ9SnUsWnUubGluZUVuZD10bCxjdTwwPyhrdT0tKEV1PTE4MCksVHU9LShDdT05MCkpOlh1PlNjP0N1PTkwOlh1PC0xZS02JiYoVHU9LTkwKSxPdVswXT1rdSxPdVsxXT1FdX0sc3BoZXJlOmZ1bmN0aW9uKCl7a3U9LShFdT0xODApLFR1PS0oQ3U9OTApfX07ZnVuY3Rpb24gUXUodCxlKXtEdS5wdXNoKE91PVtrdT10LEV1PXRdKSxlPFR1JiYoVHU9ZSksZT5DdSYmKEN1PWUpfWZ1bmN0aW9uIEt1KHQsZSl7dmFyIG49bXUoW3QqTGMsZSpMY10pO2lmKE51KXt2YXIgcj1idShOdSxuKSxpPWJ1KFtyWzFdLC1yWzBdLDBdLHIpO3d1KGkpLGk9Z3UoaSk7dmFyIGEsbz10LVN1LHM9bz4wPzE6LTEsYz1pWzBdKkJjKnMsdT1JYyhvKT4xODA7dV4ocypTdTxjJiZjPHMqdCk/KGE9aVsxXSpCYyk+Q3UmJihDdT1hKTp1XihzKlN1PChjPShjKzM2MCklMzYwLTE4MCkmJmM8cyp0KT8oYT0taVsxXSpCYyk8VHUmJihUdT1hKTooZTxUdSYmKFR1PWUpLGU+Q3UmJihDdT1lKSksdT90PFN1P2lsKGt1LHQpPmlsKGt1LEV1KSYmKEV1PXQpOmlsKHQsRXUpPmlsKGt1LEV1KSYmKGt1PXQpOkV1Pj1rdT8odDxrdSYmKGt1PXQpLHQ+RXUmJihFdT10KSk6dD5TdT9pbChrdSx0KT5pbChrdSxFdSkmJihFdT10KTppbCh0LEV1KT5pbChrdSxFdSkmJihrdT10KX1lbHNlIER1LnB1c2goT3U9W2t1PXQsRXU9dF0pO2U8VHUmJihUdT1lKSxlPkN1JiYoQ3U9ZSksTnU9bixTdT10fWZ1bmN0aW9uIEp1KCl7WnUucG9pbnQ9S3V9ZnVuY3Rpb24gdGwoKXtPdVswXT1rdSxPdVsxXT1FdSxadS5wb2ludD1RdSxOdT1udWxsfWZ1bmN0aW9uIGVsKHQsZSl7aWYoTnUpe3ZhciBuPXQtU3U7WHUuYWRkKEljKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgQXU9dCxNdT1lO2x1LnBvaW50KHQsZSksS3UodCxlKX1mdW5jdGlvbiBubCgpe2x1LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHJsKCl7ZWwoQXUsTXUpLGx1LmxpbmVFbmQoKSxJYyhYdSk+U2MmJihrdT0tKEV1PTE4MCkpLE91WzBdPWt1LE91WzFdPUV1LE51PW51bGx9ZnVuY3Rpb24gaWwodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGFsKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBvbCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9ZnVuY3Rpb24gc2wodCl7dmFyIGUsbixyLGksYSxvLHM7aWYoQ3U9RXU9LShrdT1UdT0xLzApLER1PVtdLG51KHQsWnUpLG49RHUubGVuZ3RoKXtmb3IoRHUuc29ydChhbCksZT0xLGE9W3I9RHVbMF1dO2U8bjsrK2Upb2wociwoaT1EdVtlXSlbMF0pfHxvbChyLGlbMV0pPyhpbChyWzBdLGlbMV0pPmlsKHJbMF0sclsxXSkmJihyWzFdPWlbMV0pLGlsKGlbMF0sclsxXSk+aWwoclswXSxyWzFdKSYmKHJbMF09aVswXSkpOmEucHVzaChyPWkpO2ZvcihvPS0xLzAsZT0wLHI9YVtuPWEubGVuZ3RoLTFdO2U8PW47cj1pLCsrZSlpPWFbZV0sKHM9aWwoclsxXSxpWzBdKSk+byYmKG89cyxrdT1pWzBdLEV1PXJbMV0pfXJldHVybiBEdT1PdT1udWxsLGt1PT09MS8wfHxUdT09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1trdSxUdV0sW0V1LEN1XV19dmFyIGNsPXtzcGhlcmU6WmMscG9pbnQ6dWwsbGluZVN0YXJ0OmhsLGxpbmVFbmQ6cGwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Y2wubGluZVN0YXJ0PXlsLGNsLmxpbmVFbmQ9Z2x9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtjbC5saW5lU3RhcnQ9aGwsY2wubGluZUVuZD1wbH19O2Z1bmN0aW9uIHVsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpO2xsKG4qUGModCksbipxYyh0KSxxYyhlKSl9ZnVuY3Rpb24gbGwodCxlLG4peysrQnUsSXUrPSh0LUl1KS9CdSxSdSs9KGUtUnUpL0J1LEZ1Kz0obi1GdSkvQnV9ZnVuY3Rpb24gaGwoKXtjbC5wb2ludD1mbH1mdW5jdGlvbiBmbCh0LGUpe3QqPUxjO3ZhciBuPVBjKGUqPUxjKTtXdT1uKlBjKHQpLFZ1PW4qcWModCksR3U9cWMoZSksY2wucG9pbnQ9ZGwsbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIGRsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpLHI9bipQYyh0KSxpPW4qcWModCksYT1xYyhlKSxvPUZjKCRjKChvPVZ1KmEtR3UqaSkqbysobz1HdSpyLVd1KmEpKm8rKG89V3UqaS1WdSpyKSpvKSxXdSpyK1Z1KmkrR3UqYSk7THUrPW8sUHUrPW8qKFd1KyhXdT1yKSksanUrPW8qKFZ1KyhWdT1pKSksWXUrPW8qKEd1KyhHdT1hKSksbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIHBsKCl7Y2wucG9pbnQ9dWx9ZnVuY3Rpb24geWwoKXtjbC5wb2ludD1tbH1mdW5jdGlvbiBnbCgpe3ZsKEh1LCR1KSxjbC5wb2ludD11bH1mdW5jdGlvbiBtbCh0LGUpe0h1PXQsJHU9ZSx0Kj1MYyxlKj1MYyxjbC5wb2ludD12bDt2YXIgbj1QYyhlKTtXdT1uKlBjKHQpLFZ1PW4qcWModCksR3U9cWMoZSksbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIHZsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpLHI9bipQYyh0KSxpPW4qcWModCksYT1xYyhlKSxvPVZ1KmEtR3UqaSxzPUd1KnItV3UqYSxjPVd1KmktVnUqcix1PSRjKG8qbytzKnMrYypjKSxsPUdjKHUpLGg9dSYmLWwvdTt6dSs9aCpvLFV1Kz1oKnMscXUrPWgqYyxMdSs9bCxQdSs9bCooV3UrKFd1PXIpKSxqdSs9bCooVnUrKFZ1PWkpKSxZdSs9bCooR3UrKEd1PWEpKSxsbChXdSxWdSxHdSl9ZnVuY3Rpb24gYmwodCl7QnU9THU9SXU9UnU9RnU9UHU9anU9WXU9enU9VXU9cXU9MCxudSh0LGNsKTt2YXIgZT16dSxuPVV1LHI9cXUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTxBYyYmKGU9UHUsbj1qdSxyPVl1LEx1PFNjJiYoZT1JdSxuPVJ1LHI9RnUpLChpPWUqZStuKm4rcipyKTxBYyk/W05hTixOYU5dOltGYyhuLGUpKkJjLEdjKHIvJGMoaSkpKkJjXX1mdW5jdGlvbiBfbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geGwodCxlKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIG49dChuLHIpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4obj1lLmludmVydChuLHIpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59ZnVuY3Rpb24gd2wodCxlKXtyZXR1cm5bSWModCk+TWM/dCtNYXRoLnJvdW5kKC10L09jKSpPYzp0LGVdfWZ1bmN0aW9uIGtsKHQsZSxuKXtyZXR1cm4odCU9T2MpP2V8fG4/eGwoRWwodCksQ2woZSxuKSk6RWwodCk6ZXx8bj9DbChlLG4pOndsfWZ1bmN0aW9uIFRsKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVyblsoZSs9dCk+TWM/ZS1PYzplPC1NYz9lK09jOmUsbl19fWZ1bmN0aW9uIEVsKHQpe3ZhciBlPVRsKHQpO3JldHVybiBlLmludmVydD1UbCgtdCksZX1mdW5jdGlvbiBDbCh0LGUpe3ZhciBuPVBjKHQpLHI9cWModCksaT1QYyhlKSxhPXFjKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1QYyhlKSxzPVBjKHQpKm8sYz1xYyh0KSpvLHU9cWMoZSksbD11Km4rcypyO3JldHVybltGYyhjKmktbCphLHMqbi11KnIpLEdjKGwqaStjKmEpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1QYyhlKSxzPVBjKHQpKm8sYz1xYyh0KSpvLHU9cWMoZSksbD11KmktYyphO3JldHVybltGYyhjKmkrdSphLHMqbitsKnIpLEdjKGwqbi1zKnIpXX0sb31mdW5jdGlvbiBTbCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpMYyxlWzFdKkxjKSlbMF0qPUJjLGVbMV0qPUJjLGV9cmV0dXJuIHQ9a2wodFswXSpMYyx0WzFdKkxjLHQubGVuZ3RoPjI/dFsyXSpMYzowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKkxjLGVbMV0qTGMpKVswXSo9QmMsZVsxXSo9QmMsZX0sZX1mdW5jdGlvbiBBbCh0LGUsbixyLGksYSl7aWYobil7dmFyIG89UGMoZSkscz1xYyhlKSxjPXIqbjtudWxsPT1pPyhpPWUrcipPYyxhPWUtYy8yKTooaT1NbChvLGkpLGE9TWwobyxhKSwocj4wP2k8YTppPmEpJiYoaSs9cipPYykpO2Zvcih2YXIgdSxsPWk7cj4wP2w+YTpsPGE7bC09Yyl1PWd1KFtvLC1zKlBjKGwpLC1zKnFjKGwpXSksdC5wb2ludCh1WzBdLHVbMV0pfX1mdW5jdGlvbiBNbCh0LGUpeyhlPW11KGUpKVswXS09dCx3dShlKTt2YXIgbj1WYygtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1uOm4pK09jLVNjKSVPY31mdW5jdGlvbiBObCgpe3ZhciB0LGUsbj1fbChbMCwwXSkscj1fbCg5MCksaT1fbCg2KSxhPXtwb2ludDpmdW5jdGlvbihuLHIpe3QucHVzaChuPWUobixyKSksblswXSo9QmMsblsxXSo9QmN9fTtmdW5jdGlvbiBvKCl7dmFyIG89bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpMYyxjPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKkxjO3JldHVybiB0PVtdLGU9a2woLW9bMF0qTGMsLW9bMV0qTGMsMCkuaW52ZXJ0LEFsKGEscyxjLDEpLG89e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1lPW51bGwsb31yZXR1cm4gby5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfbChbK3RbMF0sK3RbMV1dKSxvKTpufSxvLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9sKCt0KSxvKTpyfSxvLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9sKCt0KSxvKTppfSxvfWZ1bmN0aW9uIERsKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaChbZSxuLHJdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOlpjLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49ZTtyZXR1cm4gZT1bXSx0PW51bGwsbn19fWZ1bmN0aW9uIE9sKHQsZSl7cmV0dXJuIEljKHRbMF0tZVswXSk8U2MmJkljKHRbMV0tZVsxXSk8U2N9ZnVuY3Rpb24gQmwodCxlLG4scil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPW4sdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBMbCh0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihPbChyLG8pKXtpZighclsyXSYmIW9bMl0pe2ZvcihpLmxpbmVTdGFydCgpLGE9MDthPGU7KythKWkucG9pbnQoKHI9dFthXSlbMF0sclsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9b1swXSs9MmUtNn1zLnB1c2gobj1uZXcgQmwocix0LG51bGwsITApKSxjLnB1c2gobi5vPW5ldyBCbChyLG51bGwsbiwhMSkpLHMucHVzaChuPW5ldyBCbChvLHQsbnVsbCwhMSkpLGMucHVzaChuLm89bmV3IEJsKG8sbnVsbCxuLCEwKSl9fSkpLHMubGVuZ3RoKXtmb3IoYy5zb3J0KGUpLElsKHMpLElsKGMpLGE9MCxvPWMubGVuZ3RoO2E8bzsrK2EpY1thXS5lPW49IW47Zm9yKHZhciB1LGwsaD1zWzBdOzspe2Zvcih2YXIgZj1oLGQ9ITA7Zi52OylpZigoZj1mLm4pPT09aClyZXR1cm47dT1mLnosaS5saW5lU3RhcnQoKTtkb3tpZihmLnY9Zi5vLnY9ITAsZi5lKXtpZihkKWZvcihhPTAsbz11Lmxlbmd0aDthPG87KythKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLm4ueCwxLGkpO2Y9Zi5ufWVsc2V7aWYoZClmb3IodT1mLnAueixhPXUubGVuZ3RoLTE7YT49MDstLWEpaS5wb2ludCgobD11W2FdKVswXSxsWzFdKTtlbHNlIHIoZi54LGYucC54LC0xLGkpO2Y9Zi5wfXU9KGY9Zi5vKS56LGQ9IWR9d2hpbGUoIWYudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBJbCh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUsbixyPTAsaT10WzBdOysrcjxlOylpLm49bj10W3JdLG4ucD1pLGk9bjtpLm49bj10WzBdLG4ucD1pfX13bC5pbnZlcnQ9d2w7dmFyIFJsPWtjKCk7ZnVuY3Rpb24gRmwodCl7cmV0dXJuIEljKHRbMF0pPD1NYz90WzBdOkhjKHRbMF0pKigoSWModFswXSkrTWMpJU9jLU1jKX1mdW5jdGlvbiBQbCh0LGUpe3ZhciBuPUZsKGUpLHI9ZVsxXSxpPXFjKHIpLGE9W3FjKG4pLC1QYyhuKSwwXSxvPTAscz0wO1JsLnJlc2V0KCksMT09PWk/cj1OYytTYzotMT09PWkmJihyPS1OYy1TYyk7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9RmwoZikscD1mWzFdLzIrRGMseT1xYyhwKSxnPVBjKHApLG09MDttPGg7KyttLGQ9Yix5PXgsZz13LGY9dil7dmFyIHY9bFttXSxiPUZsKHYpLF89dlsxXS8yK0RjLHg9cWMoXyksdz1QYyhfKSxrPWItZCxUPWs+PTA/MTotMSxFPVQqayxDPUU+TWMsUz15Kng7aWYoUmwuYWRkKEZjKFMqVCpxYyhFKSxnKncrUypQYyhFKSkpLG8rPUM/aytUKk9jOmssQ15kPj1uXmI+PW4pe3ZhciBBPWJ1KG11KGYpLG11KHYpKTt3dShBKTt2YXIgTT1idShhLEEpO3d1KE0pO3ZhciBOPShDXms+PTA/LTE6MSkqR2MoTVsyXSk7KHI+Tnx8cj09PU4mJihBWzBdfHxBWzFdKSkmJihzKz1DXms+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPFNjJiZSbDwtMWUtNileMSZzfWZ1bmN0aW9uIGpsKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9RGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PW0sZi5saW5lU3RhcnQ9dixmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPVAobyk7dmFyIHQ9UGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksTGwobyx6bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiBtKHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gdigpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7bShzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoWWwpKX1yZXR1cm4gZn19ZnVuY3Rpb24gWWwodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gemwodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tTmMtU2M6TmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLU5jLVNjOk5jLWVbMV0pfWNvbnN0IFVsPWpsKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/TWM6LU1jLGM9SWMoYS1uKTtJYyhjLU1jKTxTYz8odC5wb2ludChuLHI9KHIrbykvMj4wP05jOi1OYyksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLHIpLHQucG9pbnQoYSxyKSxlPTApOmkhPT1zJiZjPj1NYyYmKEljKG4taSk8U2MmJihuLT1pKlNjKSxJYyhhLXMpPFNjJiYoYS09cypTYykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89cWModC1uKTtyZXR1cm4gSWMobyk+U2M/UmMoKHFjKGUpKihhPVBjKHIpKSpxYyhuKS1xYyhyKSooaT1QYyhlKSkqcWModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qTmMsci5wb2ludCgtTWMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoTWMsaSksci5wb2ludChNYywwKSxyLnBvaW50KE1jLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLU1jLC1pKSxyLnBvaW50KC1NYywwKSxyLnBvaW50KC1NYyxpKTtlbHNlIGlmKEljKHRbMF0tZVswXSk+U2Mpe3ZhciBhPXRbMF08ZVswXT9NYzotTWM7aT1uKmEvMixyLnBvaW50KC1hLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KGEsaSl9ZWxzZSByLnBvaW50KGVbMF0sZVsxXSl9KSxbLU1jLC1OY10pO2Z1bmN0aW9uIHFsKHQpe3ZhciBlPVBjKHQpLG49NipMYyxyPWU+MCxpPUljKGUpPlNjO2Z1bmN0aW9uIGEodCxuKXtyZXR1cm4gUGModCkqUGMobik+ZX1mdW5jdGlvbiBvKHQsbixyKXt2YXIgaT1bMSwwLDBdLGE9YnUobXUodCksbXUobikpLG89dnUoYSxhKSxzPWFbMF0sYz1vLXMqcztpZighYylyZXR1cm4hciYmdDt2YXIgdT1lKm8vYyxsPS1lKnMvYyxoPWJ1KGksYSksZj14dShpLHUpO191KGYseHUoYSxsKSk7dmFyIGQ9aCxwPXZ1KGYsZCkseT12dShkLGQpLGc9cCpwLXkqKHZ1KGYsZiktMSk7aWYoIShnPDApKXt2YXIgbT0kYyhnKSx2PXh1KGQsKC1wLW0pL3kpO2lmKF91KHYsZiksdj1ndSh2KSwhcilyZXR1cm4gdjt2YXIgYixfPXRbMF0seD1uWzBdLHc9dFsxXSxrPW5bMV07eDxfJiYoYj1fLF89eCx4PWIpO3ZhciBUPXgtXyxFPUljKFQtTWMpPFNjO2lmKCFFJiZrPHcmJihiPXcsdz1rLGs9YiksRXx8VDxTYz9FP3craz4wXnZbMV08KEljKHZbMF0tXyk8U2M/dzprKTp3PD12WzFdJiZ2WzFdPD1rOlQ+TWNeKF88PXZbMF0mJnZbMF08PXgpKXt2YXIgQz14dShkLCgtcCttKS95KTtyZXR1cm4gX3UoQyxmKSxbdixndShDKV19fX1mdW5jdGlvbiBzKGUsbil7dmFyIGk9cj90Ok1jLXQsYT0wO3JldHVybiBlPC1pP2F8PTE6ZT5pJiYoYXw9MiksbjwtaT9hfD00Om4+aSYmKGF8PTgpLGF9cmV0dXJuIGpsKGEsKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYyx1LGw7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9Yz0hMSxsPTF9LHBvaW50OmZ1bmN0aW9uKGgsZil7dmFyIGQscD1baCxmXSx5PWEoaCxmKSxnPXI/eT8wOnMoaCxmKTp5P3MoaCsoaDwwP01jOi1NYyksZik6MDtpZighZSYmKHU9Yz15KSYmdC5saW5lU3RhcnQoKSx5IT09YyYmKCEoZD1vKGUscCkpfHxPbChlLGQpfHxPbChwLGQpKSYmKHBbMl09MSkseSE9PWMpbD0wLHk/KHQubGluZVN0YXJ0KCksZD1vKHAsZSksdC5wb2ludChkWzBdLGRbMV0pKTooZD1vKGUscCksdC5wb2ludChkWzBdLGRbMV0sMiksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeeSl7dmFyIG07ZyZufHwhKG09byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSx0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSwzKSkpfSF5fHxlJiZPbChlLHApfHx0LnBvaW50KHBbMF0scFsxXSksZT1wLGM9eSxuPWd9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGx8KHUmJmMpPDwxfX19KSwoZnVuY3Rpb24oZSxyLGksYSl7QWwoYSx0LG4saSxlLHIpfSkscj9bMCwtdF06Wy1NYyx0LU1jXSl9dmFyIEhsPTFlOSwkbD0tSGw7ZnVuY3Rpb24gV2wodCxlLG4scil7ZnVuY3Rpb24gaShpLGEpe3JldHVybiB0PD1pJiZpPD1uJiZlPD1hJiZhPD1yfWZ1bmN0aW9uIGEoaSxhLHMsdSl7dmFyIGw9MCxoPTA7aWYobnVsbD09aXx8KGw9byhpLHMpKSE9PShoPW8oYSxzKSl8fGMoaSxhKTwwXnM+MClkb3t1LnBvaW50KDA9PT1sfHwzPT09bD90Om4sbD4xP3I6ZSl9d2hpbGUoKGw9KGwrcys0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIG8ocixpKXtyZXR1cm4gSWMoclswXS10KTxTYz9pPjA/MDozOkljKHJbMF0tbik8U2M/aT4wPzI6MTpJYyhyWzFdLWUpPFNjP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGModC54LGUueCl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPW8odCwxKSxyPW8oZSwxKTtyZXR1cm4gbiE9PXI/bi1yOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24obyl7dmFyIGMsdSxsLGgsZixkLHAseSxnLG0sdixiPW8sXz1EbCgpLHg9e3BvaW50OncsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7eC5wb2ludD1rLHUmJnUucHVzaChsPVtdKSxtPSEwLGc9ITEscD15PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihrKGgsZiksZCYmZyYmXy5yZWpvaW4oKSxjLnB1c2goXy5yZXN1bHQoKSkpLHgucG9pbnQ9dyxnJiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj1fLGM9W10sdT1bXSx2PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPTAsaT11Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYSxvLHM9dVtuXSxjPTEsbD1zLmxlbmd0aCxoPXNbMF0sZj1oWzBdLGQ9aFsxXTtjPGw7KytjKWE9ZixvPWQsZj0oaD1zW2NdKVswXSxkPWhbMV0sbzw9cj9kPnImJihmLWEpKihyLW8pPihkLW8pKih0LWEpJiYrK2U6ZDw9ciYmKGYtYSkqKHItbyk8KGQtbykqKHQtYSkmJi0tZTtyZXR1cm4gZX0oKSxuPXYmJmUsaT0oYz1QKGMpKS5sZW5ndGg7KG58fGkpJiYoby5wb2x5Z29uU3RhcnQoKSxuJiYoby5saW5lU3RhcnQoKSxhKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSxpJiZMbChjLHMsZSxhLG8pLG8ucG9seWdvbkVuZCgpKSxiPW8sYz11PWw9bnVsbH19O2Z1bmN0aW9uIHcodCxlKXtpKHQsZSkmJmIucG9pbnQodCxlKX1mdW5jdGlvbiBrKGEsbyl7dmFyIHM9aShhLG8pO2lmKHUmJmwucHVzaChbYSxvXSksbSloPWEsZj1vLGQ9cyxtPSExLHMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQoYSxvKSk7ZWxzZSBpZihzJiZnKWIucG9pbnQoYSxvKTtlbHNle3ZhciBjPVtwPU1hdGgubWF4KCRsLE1hdGgubWluKEhsLHApKSx5PU1hdGgubWF4KCRsLE1hdGgubWluKEhsLHkpKV0sXz1bYT1NYXRoLm1heCgkbCxNYXRoLm1pbihIbCxhKSksbz1NYXRoLm1heCgkbCxNYXRoLm1pbihIbCxvKSldOyFmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG8scz10WzBdLGM9dFsxXSx1PTAsbD0xLGg9ZVswXS1zLGY9ZVsxXS1jO2lmKG89bi1zLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGg+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89aS1zLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGg+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWlmKG89ci1jLGZ8fCEobz4wKSl7aWYoby89ZixmPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGY+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89YS1jLGZ8fCEobzwwKSl7aWYoby89ZixmPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGY+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfXJldHVybiB1PjAmJih0WzBdPXMrdSpoLHRbMV09Yyt1KmYpLGw8MSYmKGVbMF09cytsKmgsZVsxXT1jK2wqZiksITB9fX19fShjLF8sdCxlLG4scik/cyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pLHY9ITEpOihnfHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KGNbMF0sY1sxXSkpLGIucG9pbnQoX1swXSxfWzFdKSxzfHxiLmxpbmVFbmQoKSx2PSExKX1wPWEseT1vLGc9c31yZXR1cm4geH19ZnVuY3Rpb24gVmwoKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9V2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX12YXIgR2wsWGwsWmwsUWw9a2MoKSxLbD17c3BoZXJlOlpjLHBvaW50OlpjLGxpbmVTdGFydDpmdW5jdGlvbigpe0tsLnBvaW50PXRoLEtsLmxpbmVFbmQ9Smx9LGxpbmVFbmQ6WmMscG9seWdvblN0YXJ0OlpjLHBvbHlnb25FbmQ6WmN9O2Z1bmN0aW9uIEpsKCl7S2wucG9pbnQ9S2wubGluZUVuZD1aY31mdW5jdGlvbiB0aCh0LGUpe0dsPXQqPUxjLFhsPXFjKGUqPUxjKSxabD1QYyhlKSxLbC5wb2ludD1laH1mdW5jdGlvbiBlaCh0LGUpe3QqPUxjO3ZhciBuPXFjKGUqPUxjKSxyPVBjKGUpLGk9SWModC1HbCksYT1QYyhpKSxvPXIqcWMoaSkscz1abCpuLVhsKnIqYSxjPVhsKm4rWmwqciphO1FsLmFkZChGYygkYyhvKm8rcypzKSxjKSksR2w9dCxYbD1uLFpsPXJ9ZnVuY3Rpb24gbmgodCl7cmV0dXJuIFFsLnJlc2V0KCksbnUodCxLbCksK1FsfXZhciByaD1bbnVsbCxudWxsXSxpaD17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6cmh9O2Z1bmN0aW9uIGFoKHQsZSl7cmV0dXJuIHJoWzBdPXQscmhbMV09ZSxuaChpaCl9dmFyIG9oPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNoKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihjaChuW3JdLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sc2g9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiB1aCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZih1aChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxoKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYobGgobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoaCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKGhoKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihjaChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gY2godCxlKXtyZXR1cm4hKCF0fHwhc2guaGFzT3duUHJvcGVydHkodC50eXBlKSkmJnNoW3QudHlwZV0odCxlKX1mdW5jdGlvbiB1aCh0LGUpe3JldHVybiAwPT09YWgodCxlKX1mdW5jdGlvbiBsaCh0LGUpe2Zvcih2YXIgbixyLGksYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl7aWYoMD09PShyPWFoKHRbYV0sZSkpKXJldHVybiEwO2lmKGE+MCYmKGk9YWgodFthXSx0W2EtMV0pKT4wJiZuPD1pJiZyPD1pJiYobityLWkpKigxLU1hdGgucG93KChuLXIpL2ksMikpPEFjKmkpcmV0dXJuITA7bj1yfXJldHVybiExfWZ1bmN0aW9uIGhoKHQsZSl7cmV0dXJuISFQbCh0Lm1hcChmaCksZGgoZSkpfWZ1bmN0aW9uIGZoKHQpe3JldHVybih0PXQubWFwKGRoKSkucG9wKCksdH1mdW5jdGlvbiBkaCh0KXtyZXR1cm5bdFswXSpMYyx0WzFdKkxjXX1mdW5jdGlvbiBwaCh0LGUpe3JldHVybih0JiZvaC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP29oW3QudHlwZV06Y2gpKHQsZSl9ZnVuY3Rpb24geWgodCxlLG4pe3ZhciByPWsodCxlLVNjLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pKX19ZnVuY3Rpb24gZ2godCxlLG4pe3ZhciByPWsodCxlLVNjLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gbWgoKXt2YXIgdCxlLG4scixpLGEsbyxzLGMsdSxsLGgsZj0xMCxkPWYscD05MCx5PTM2MCxnPTIuNTtmdW5jdGlvbiBtKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6digpfX1mdW5jdGlvbiB2KCl7cmV0dXJuIGsoamMoci9wKSpwLG4scCkubWFwKGwpLmNvbmNhdChrKGpjKHMveSkqeSxvLHkpLm1hcChoKSkuY29uY2F0KGsoamMoZS9mKSpmLHQsZikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gSWModCVwKT5TY30pKS5tYXAoYykpLmNvbmNhdChrKGpjKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIEljKHQleSk+U2N9KSkubWFwKHUpKX1yZXR1cm4gbS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB2KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LG0ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbChyKS5jb25jYXQoaChvKS5zbGljZSgxKSxsKG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTptLmV4dGVudE1pbm9yKCl9LG0uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sbj0rdFsxXVswXSxzPSt0WzBdWzFdLG89K3RbMV1bMV0scj5uJiYodD1yLHI9bixuPXQpLHM+byYmKHQ9cyxzPW8sbz10KSxtLnByZWNpc2lvbihnKSk6W1tyLHNdLFtuLG9dXX0sbS5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXVswXSx0PStuWzFdWzBdLGE9K25bMF1bMV0saT0rblsxXVsxXSxlPnQmJihuPWUsZT10LHQ9biksYT5pJiYobj1hLGE9aSxpPW4pLG0ucHJlY2lzaW9uKGcpKTpbW2UsYV0sW3QsaV1dfSxtLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOm0uc3RlcE1pbm9yKCl9LG0uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHk9K3RbMV0sbSk6W3AseV19LG0uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sbSk6W2YsZF19LG0ucHJlY2lzaW9uPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStmLGM9eWgoYSxpLDkwKSx1PWdoKGUsdCxnKSxsPXloKHMsbyw5MCksaD1naChyLG4sZyksbSk6Z30sbS5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIHZoKCl7cmV0dXJuIG1oKCkoKX1mdW5jdGlvbiBiaCh0LGUpe3ZhciBuPXRbMF0qTGMscj10WzFdKkxjLGk9ZVswXSpMYyxhPWVbMV0qTGMsbz1QYyhyKSxzPXFjKHIpLGM9UGMoYSksdT1xYyhhKSxsPW8qUGMobiksaD1vKnFjKG4pLGY9YypQYyhpKSxkPWMqcWMoaSkscD0yKkdjKCRjKFhjKGEtcikrbypjKlhjKGktbikpKSx5PXFjKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgZT1xYyh0Kj1wKS95LG49cWMocC10KS95LHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltGYyhpLHIpKkJjLEZjKGEsJGMocipyK2kqaSkpKkJjXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipCYyxyKkJjXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfWZ1bmN0aW9uIF9oKHQpe3JldHVybiB0fXZhciB4aCx3aCxraCxUaCxFaD1rYygpLENoPWtjKCksU2g9e3BvaW50OlpjLGxpbmVTdGFydDpaYyxsaW5lRW5kOlpjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NoLmxpbmVTdGFydD1BaCxTaC5saW5lRW5kPURofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7U2gubGluZVN0YXJ0PVNoLmxpbmVFbmQ9U2gucG9pbnQ9WmMsRWguYWRkKEljKENoKSksQ2gucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9RWgvMjtyZXR1cm4gRWgucmVzZXQoKSx0fX07ZnVuY3Rpb24gQWgoKXtTaC5wb2ludD1NaH1mdW5jdGlvbiBNaCh0LGUpe1NoLnBvaW50PU5oLHhoPWtoPXQsd2g9VGg9ZX1mdW5jdGlvbiBOaCh0LGUpe0NoLmFkZChUaCp0LWtoKmUpLGtoPXQsVGg9ZX1mdW5jdGlvbiBEaCgpe05oKHhoLHdoKX1jb25zdCBPaD1TaDt2YXIgQmg9MS8wLExoPUJoLEloPS1CaCxSaD1JaCxGaD17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PEJoJiYoQmg9dCksdD5JaCYmKEloPXQpLGU8TGgmJihMaD1lKSxlPlJoJiYoUmg9ZSl9LGxpbmVTdGFydDpaYyxsaW5lRW5kOlpjLHBvbHlnb25TdGFydDpaYyxwb2x5Z29uRW5kOlpjLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbQmgsTGhdLFtJaCxSaF1dO3JldHVybiBJaD1SaD0tKExoPUJoPTEvMCksdH19O2NvbnN0IFBoPUZoO3ZhciBqaCxZaCx6aCxVaCxxaD0wLEhoPTAsJGg9MCxXaD0wLFZoPTAsR2g9MCxYaD0wLFpoPTAsUWg9MCxLaD17cG9pbnQ6SmgsbGluZVN0YXJ0OnRmLGxpbmVFbmQ6cmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S2gubGluZVN0YXJ0PWFmLEtoLmxpbmVFbmQ9b2Z9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtLaC5wb2ludD1KaCxLaC5saW5lU3RhcnQ9dGYsS2gubGluZUVuZD1yZn0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9UWg/W1hoL1FoLFpoL1FoXTpHaD9bV2gvR2gsVmgvR2hdOiRoP1txaC8kaCxIaC8kaF06W05hTixOYU5dO3JldHVybiBxaD1IaD0kaD1XaD1WaD1HaD1YaD1aaD1RaD0wLHR9fTtmdW5jdGlvbiBKaCh0LGUpe3FoKz10LEhoKz1lLCsrJGh9ZnVuY3Rpb24gdGYoKXtLaC5wb2ludD1lZn1mdW5jdGlvbiBlZih0LGUpe0toLnBvaW50PW5mLEpoKHpoPXQsVWg9ZSl9ZnVuY3Rpb24gbmYodCxlKXt2YXIgbj10LXpoLHI9ZS1VaCxpPSRjKG4qbityKnIpO1doKz1pKih6aCt0KS8yLFZoKz1pKihVaCtlKS8yLEdoKz1pLEpoKHpoPXQsVWg9ZSl9ZnVuY3Rpb24gcmYoKXtLaC5wb2ludD1KaH1mdW5jdGlvbiBhZigpe0toLnBvaW50PXNmfWZ1bmN0aW9uIG9mKCl7Y2YoamgsWWgpfWZ1bmN0aW9uIHNmKHQsZSl7S2gucG9pbnQ9Y2YsSmgoamg9emg9dCxZaD1VaD1lKX1mdW5jdGlvbiBjZih0LGUpe3ZhciBuPXQtemgscj1lLVVoLGk9JGMobipuK3Iqcik7V2grPWkqKHpoK3QpLzIsVmgrPWkqKFVoK2UpLzIsR2grPWksWGgrPShpPVVoKnQtemgqZSkqKHpoK3QpLFpoKz1pKihVaCtlKSxRaCs9MyppLEpoKHpoPXQsVWg9ZSl9Y29uc3QgdWY9S2g7ZnVuY3Rpb24gbGYodCl7dGhpcy5fY29udGV4dD10fWxmLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxPYyl9fSxyZXN1bHQ6WmN9O3ZhciBoZixmZixkZixwZix5ZixnZj1rYygpLG1mPXtwb2ludDpaYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXttZi5wb2ludD12Zn0sbGluZUVuZDpmdW5jdGlvbigpe2hmJiZiZihmZixkZiksbWYucG9pbnQ9WmN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2hmPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aGY9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2dmO3JldHVybiBnZi5yZXNldCgpLHR9fTtmdW5jdGlvbiB2Zih0LGUpe21mLnBvaW50PWJmLGZmPXBmPXQsZGY9eWY9ZX1mdW5jdGlvbiBiZih0LGUpe3BmLT10LHlmLT1lLGdmLmFkZCgkYyhwZipwZit5Zip5ZikpLHBmPXQseWY9ZX1jb25zdCBfZj1tZjtmdW5jdGlvbiB4Zigpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB3Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBrZih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbnUodCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4oT2gpKSxPaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4oX2YpKSxfZi5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51KHQsbihQaCkpLFBoLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4odWYpKSx1Zi5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxfaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IHhmKTpuZXcgbGYoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX1mdW5jdGlvbiBUZih0KXtyZXR1cm57c3RyZWFtOkVmKHQpfX1mdW5jdGlvbiBFZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IENmO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBDZigpe31mdW5jdGlvbiBTZih0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLG51KG4sdC5zdHJlYW0oUGgpKSxlKFBoLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiBBZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKHIvKG5bMV1bMF0tblswXVswXSksaS8oblsxXVsxXS1uWzBdWzFdKSksbz0rZVswXVswXSsoci1hKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSksbil9ZnVuY3Rpb24gTWYodCxlLG4pe3JldHVybiBBZih0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBOZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxhPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsbz0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1mdW5jdGlvbiBEZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVsxXS1uWzBdWzFdKSxhPS1pKm5bMF1bMF0sbz0oci1pKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX14Zi5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6d2YoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT13Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LENmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q2YscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIE9mPVBjKDMwKkxjKTtmdW5jdGlvbiBCZih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcpe3ZhciBtPXUtcix2PWwtaSxiPW0qbSt2KnY7aWYoYj40KmUmJnktLSl7dmFyIF89bytmLHg9cytkLHc9YytwLGs9JGMoXypfK3gqeCt3KncpLFQ9R2Mody89ayksRT1JYyhJYyh3KS0xKTxTY3x8SWMoYS1oKTxTYz8oYStoKS8yOkZjKHgsXyksQz10KEUsVCksUz1DWzBdLEE9Q1sxXSxNPVMtcixOPUEtaSxEPXYqTS1tKk47KEQqRC9iPmV8fEljKChtKk0rdipOKS9iLS41KT4uM3x8bypmK3MqZCtjKnA8T2YpJiYobihyLGksYSxvLHMsYyxTLEEsRSxfLz1rLHgvPWssdyx5LGcpLGcucG9pbnQoUyxBKSxuKFMsQSxFLF8seCx3LHUsbCxoLGYsZCxwLHksZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxhLG8scyxjLHUsbCxoLGYsZCxwLHk9e3BvaW50OmcsbGluZVN0YXJ0Om0sbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCkseS5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHkubGluZVN0YXJ0PW19fTtmdW5jdGlvbiBnKG4scil7bj10KG4sciksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIG0oKXtsPU5hTix5LnBvaW50PXYsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB2KHIsaSl7dmFyIGE9bXUoW3IsaV0pLG89dChyLGkpO24obCxoLHUsZixkLHAsbD1vWzBdLGg9b1sxXSx1PXIsZj1hWzBdLGQ9YVsxXSxwPWFbMl0sMTYsZSksZS5wb2ludChsLGgpfWZ1bmN0aW9uIGIoKXt5LnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe20oKSx5LnBvaW50PXgseS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3Yocj10LGUpLGk9bCxhPWgsbz1mLHM9ZCxjPXAseS5wb2ludD12fWZ1bmN0aW9uIHcoKXtuKGwsaCx1LGYsZCxwLGksYSxyLG8scyxjLDE2LGUpLHkubGluZUVuZD1iLGIoKX1yZXR1cm4geX19KHQsZSk6ZnVuY3Rpb24odCl7cmV0dXJuIEVmKHtwb2ludDpmdW5jdGlvbihlLG4pe2U9dChlLG4pLHRoaXMuc3RyZWFtLnBvaW50KGVbMF0sZVsxXSl9fSl9KHQpfXZhciBMZj1FZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KkxjLGUqTGMpfX0pO2Z1bmN0aW9uIElmKHQsZSxuLHIsaSl7ZnVuY3Rpb24gYShhLG8pe3JldHVybltlK3QqKGEqPXIpLG4tdCoobyo9aSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihhLG8pe3JldHVyblsoYS1lKS90KnIsKG4tbykvdCppXX0sYX1mdW5jdGlvbiBSZih0LGUsbixyLGksYSl7dmFyIG89UGMoYSkscz1xYyhhKSxjPW8qdCx1PXMqdCxsPW8vdCxoPXMvdCxmPShzKm4tbyplKS90LGQ9KHMqZStvKm4pL3Q7ZnVuY3Rpb24gcCh0LGEpe3JldHVybltjKih0Kj1yKS11KihhKj1pKStlLG4tdSp0LWMqYV19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IqKGwqdC1oKmUrZiksaSooZC1oKnQtbCplKV19LHB9ZnVuY3Rpb24gRmYodCl7cmV0dXJuIFBmKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gUGYodCl7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaD0xNTAsZj00ODAsZD0yNTAscD0wLHk9MCxnPTAsbT0wLHY9MCxiPTAsXz0xLHg9MSx3PW51bGwsaz1VbCxUPW51bGwsRT1faCxDPS41O2Z1bmN0aW9uIFModCl7cmV0dXJuIGModFswXSpMYyx0WzFdKkxjKX1mdW5jdGlvbiBBKHQpe3JldHVybih0PWMuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpCYyx0WzFdKkJjXX1mdW5jdGlvbiBNKCl7dmFyIHQ9UmYoaCwwLDAsXyx4LGIpLmFwcGx5KG51bGwsZShwLHkpKSxyPShiP1JmOklmKShoLGYtdFswXSxkLXRbMV0sXyx4LGIpO3JldHVybiBuPWtsKGcsbSx2KSxzPXhsKGUsciksYz14bChuLHMpLG89QmYocyxDKSxOKCl9ZnVuY3Rpb24gTigpe3JldHVybiB1PWw9bnVsbCxTfXJldHVybiBTLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PUxmKGZ1bmN0aW9uKHQpe3JldHVybiBFZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKGsobyhFKGw9dCkpKSkpfSxTLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dCx3PXZvaWQgMCxOKCkpOmt9LFMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxUPXI9aT1hPW51bGwsTigpKTpFfSxTLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0rdD9xbCh3PXQqTGMpOih3PW51bGwsVWwpLE4oKSk6dypCY30sUy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFQ9cj1pPWE9bnVsbCxfaCk6V2woVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTigpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLGFdXX0sUy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxNKCkpOmh9LFMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sTSgpKTpbZixkXX0sUy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqTGMseT10WzFdJTM2MCpMYyxNKCkpOltwKkJjLHkqQmNdfSxTLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpMYyxtPXRbMV0lMzYwKkxjLHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpMYzowLE0oKSk6W2cqQmMsbSpCYyx2KkJjXX0sUy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpMYyxNKCkpOmIqQmN9LFMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dD8tMToxLE0oKSk6XzwwfSxTLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxNKCkpOng8MH0sUy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89QmYocyxDPXQqdCksTigpKTokYyhDKX0sUy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQWYoUyx0LGUpfSxTLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWYoUyx0LGUpfSxTLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5mKFMsdCxlKX0sUy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGYoUyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFMuaW52ZXJ0PWUuaW52ZXJ0JiZBLE0oKX19ZnVuY3Rpb24gamYodCl7dmFyIGU9MCxuPU1jLzMscj1QZih0KSxpPXIoZSxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihlPXRbMF0qTGMsbj10WzFdKkxjKTpbZSpCYyxuKkJjXX0saX1mdW5jdGlvbiBZZih0LGUpe3ZhciBuPXFjKHQpLHI9KG4rcWMoZSkpLzI7aWYoSWMocik8U2MpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPVBjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLHFjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsR2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9JGMoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49JGMoaS0yKnIqcWMoZSkpL3I7cmV0dXJuW24qcWModCo9ciksYS1uKlBjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUsbz1GYyh0LEljKG4pKSpIYyhuKTtyZXR1cm4gbipyPDAmJihvLT1NYypIYyh0KSpIYyhuKSksW28vcixHYygoaS0odCp0K24qbikqcipyKS8oMipyKSldfSxvfWZ1bmN0aW9uIHpmKCl7cmV0dXJuIGpmKFlmKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVmKCl7cmV0dXJuIHpmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcWYoKXt2YXIgdCxlLG4scixpLGEsbz1VZigpLHM9emYoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9emYoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksdT17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gbCh0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLG4ucG9pbnQoZSxvKSxhfHwoci5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsbH1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5zY2FsZSgpLG49by50cmFuc2xhdGUoKSxyPSh0WzBdLW5bMF0pL2UsaT0odFsxXS1uWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2M6bykuaW52ZXJ0KHQpfSxsLnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDoocj1bby5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxjLnN0cmVhbShuKV0saT1yLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248aTspcltuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIHIsaX0sbC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6by5wcmVjaXNpb24oKX0sbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLGwudHJhbnNsYXRlKG8udHJhbnNsYXRlKCkpKTpvLnNjYWxlKCl9LGwudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvLnRyYW5zbGF0ZSgpO3ZhciBlPW8uc2NhbGUoKSxhPSt0WzBdLGw9K3RbMV07cmV0dXJuIG49by50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLGwtLjIzOCplXSxbYSsuNDU1KmUsbCsuMjM4KmVdXSkuc3RyZWFtKHUpLHI9cy50cmFuc2xhdGUoW2EtLjMwNyplLGwrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplK1NjLGwrLjEyKmUrU2NdLFthLS4yMTQqZS1TYyxsKy4yMzQqZS1TY11dKS5zdHJlYW0odSksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsbCsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrU2MsbCsuMTY2KmUrU2NdLFthLS4xMTUqZS1TYyxsKy4yMzQqZS1TY11dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBBZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBNZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTmYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBEZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9ZnVuY3Rpb24gSGYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9UGMoZSksaT1QYyhuKSxhPXQocippKTtyZXR1cm5bYSppKnFjKGUpLGEqcWMobildfX1mdW5jdGlvbiAkZih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj0kYyhlKmUrbipuKSxpPXQociksYT1xYyhpKSxvPVBjKGkpO3JldHVybltGYyhlKmEscipvKSxHYyhyJiZuKmEvcildfX12YXIgV2Y9SGYoKGZ1bmN0aW9uKHQpe3JldHVybiAkYygyLygxK3QpKX0pKTtmdW5jdGlvbiBWZigpe3JldHVybiBGZihXZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9V2YuaW52ZXJ0PSRmKChmdW5jdGlvbih0KXtyZXR1cm4gMipHYyh0LzIpfSkpO3ZhciBHZj1IZigoZnVuY3Rpb24odCl7cmV0dXJuKHQ9VmModCkpJiZ0L3FjKHQpfSkpO2Z1bmN0aW9uIFhmKCl7cmV0dXJuIEZmKEdmKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9ZnVuY3Rpb24gWmYodCxlKXtyZXR1cm5bdCx6YyhXYygoTmMrZSkvMikpXX1mdW5jdGlvbiBRZigpe3JldHVybiBLZihaZikuc2NhbGUoOTYxL09jKX1mdW5jdGlvbiBLZih0KXt2YXIgZSxuLHIsaT1GZih0KSxhPWkuY2VudGVyLG89aS5zY2FsZSxzPWkudHJhbnNsYXRlLGM9aS5jbGlwRXh0ZW50LHU9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGE9TWMqbygpLHM9aShTbChpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT11P1tbc1swXS1hLHNbMV0tYV0sW3NbMF0rYSxzWzFdK2FdXTp0PT09WmY/W1tNYXRoLm1heChzWzBdLWEsdSksZV0sW01hdGgubWluKHNbMF0rYSxuKSxyXV06W1t1LE1hdGgubWF4KHNbMV0tYSxlKV0sW24sTWF0aC5taW4oc1sxXSthLHIpXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGwoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSxsKCkpOnMoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksbCgpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD91PWU9bj1yPW51bGw6KHU9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLHI9K3RbMV1bMV0pLGwoKSk6bnVsbD09dT9udWxsOltbdSxlXSxbbixyXV19LGwoKX1mdW5jdGlvbiBKZih0KXtyZXR1cm4gV2MoKE5jK3QpLzIpfWZ1bmN0aW9uIHRkKHQsZSl7dmFyIG49UGModCkscj10PT09ZT9xYyh0KTp6YyhuL1BjKGUpKS96YyhKZihlKS9KZih0KSksaT1uKlVjKEpmKHQpLHIpL3I7aWYoIXIpcmV0dXJuIFpmO2Z1bmN0aW9uIGEodCxlKXtpPjA/ZTwtTmMrU2MmJihlPS1OYytTYyk6ZT5OYy1TYyYmKGU9TmMtU2MpO3ZhciBuPWkvVWMoSmYoZSkscik7cmV0dXJuW24qcWMocip0KSxpLW4qUGMocip0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS1lLGE9SGMocikqJGModCp0K24qbiksbz1GYyh0LEljKG4pKSpIYyhuKTtyZXR1cm4gbipyPDAmJihvLT1NYypIYyh0KSpIYyhuKSksW28vciwyKlJjKFVjKGkvYSwxL3IpKS1OY119LGF9ZnVuY3Rpb24gZWQoKXtyZXR1cm4gamYodGQpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiByZCgpe3JldHVybiBGZihuZCkuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBpZCh0LGUpe3ZhciBuPVBjKHQpLHI9dD09PWU/cWModCk6KG4tUGMoZSkpLyhlLXQpLGk9bi9yK3Q7aWYoSWMocik8U2MpcmV0dXJuIG5kO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qcWMoYSksaS1uKlBjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1GYyh0LEljKG4pKSpIYyhuKTtyZXR1cm4gbipyPDAmJihhLT1NYypIYyh0KSpIYyhuKSksW2EvcixpLUhjKHIpKiRjKHQqdCtuKm4pXX0sYX1mdW5jdGlvbiBhZCgpe3JldHVybiBqZihpZCkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX1HZi5pbnZlcnQ9JGYoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLFpmLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqUmMoWWMoZSkpLU5jXX0sbmQuaW52ZXJ0PW5kO3ZhciBvZD0xLjM0MDI2NCxzZD0tLjA4MTEwNixjZD04OTNlLTYsdWQ9LjAwMzc5NixsZD0kYygzKS8yO2Z1bmN0aW9uIGhkKHQsZSl7dmFyIG49R2MobGQqcWMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqUGMobikvKGxkKihvZCszKnNkKnIraSooNypjZCs5KnVkKnIpKSksbioob2Qrc2QqcitpKihjZCt1ZCpyKSldfWZ1bmN0aW9uIGZkKCl7cmV0dXJuIEZmKGhkKS5zY2FsZSgxNzcuMTU4KX1mdW5jdGlvbiBkZCh0LGUpe3ZhciBuPVBjKGUpLHI9UGModCkqbjtyZXR1cm5bbipxYyh0KS9yLHFjKGUpL3JdfWZ1bmN0aW9uIHBkKCl7cmV0dXJuIEZmKGRkKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfWZ1bmN0aW9uIHlkKCl7dmFyIHQsZSxuLHIsaSxhLG8scz0xLGM9MCx1PTAsbD0xLGg9MSxmPTAsZD1udWxsLHA9MSx5PTEsZz1FZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKFt0LGVdKTt0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pLG09X2g7ZnVuY3Rpb24gdigpe3JldHVybiBwPXMqbCx5PXMqaCxhPW89bnVsbCxifWZ1bmN0aW9uIGIobil7dmFyIHI9blswXSpwLGk9blsxXSp5O2lmKGYpe3ZhciBhPWkqdC1yKmU7cj1yKnQraSplLGk9YX1yZXR1cm5bcitjLGkrdV19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByPW5bMF0tYyxpPW5bMV0tdTtpZihmKXt2YXIgYT1pKnQrciplO3I9cip0LWkqZSxpPWF9cmV0dXJuW3IvcCxpL3ldfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYSYmbz09PXQ/YTphPWcobShvPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10LGQ9bj1yPWk9bnVsbCx2KCkpOm19LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhkPW49cj1pPW51bGwsX2gpOldsKGQ9K3RbMF1bMF0sbj0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHYoKSk6bnVsbD09ZD9udWxsOltbZCxuXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdigpKTpzfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSx1PSt0WzFdLHYoKSk6W2MsdV19LGIuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cWMoZj1uJTM2MCpMYyksdD1QYyhmKSx2KCkpOmYqQmN9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dD8tMToxLHYoKSk6bDwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQ/LTE6MSx2KCkpOmg8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQWYoYix0LGUpfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWYoYix0LGUpfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5mKGIsdCxlKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGYoYix0LGUpfSxifWZ1bmN0aW9uIGdkKHQsZSl7dmFyIG49ZSplLHI9bipuO3JldHVyblt0KiguODcwNy0uMTMxOTc5Km4rcioociooLjAwMzk3MSpuLS4wMDE1MjkqciktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K24qKC4wMTUwODUrciooLjAyODg3NCpuLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBtZCgpe3JldHVybiBGZihnZCkuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gdmQodCxlKXtyZXR1cm5bUGMoZSkqcWModCkscWMoZSldfWZ1bmN0aW9uIGJkKCl7cmV0dXJuIEZmKHZkKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9ZnVuY3Rpb24gX2QodCxlKXt2YXIgbj1QYyhlKSxyPTErUGModCkqbjtyZXR1cm5bbipxYyh0KS9yLHFjKGUpL3JdfWZ1bmN0aW9uIHhkKCl7cmV0dXJuIEZmKF9kKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIHdkKHQsZSl7cmV0dXJuW3pjKFdjKChOYytlKS8yKSksLXRdfWZ1bmN0aW9uIGtkKCl7dmFyIHQ9S2Yod2QpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfWZ1bmN0aW9uIFRkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIEVkKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIENkKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBTZCgpe3ZhciB0PVRkLGU9MSxuPTEscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhLG89MDtpLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKEVkLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UoQ2QsMCl9KG4pKTooZS54PWE/bys9dChlLGEpOjAsZS55PTAsYT1lKX0pKTt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KGkpLGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShpKSx1PXMueC10KHMsYykvMixsPWMueCt0KGMscykvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKmUsdC55PShpLnktdC55KSpufTpmdW5jdGlvbih0KXt0Lng9KHQueC11KS8obC11KSplLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKm59KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBBZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIE1kKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBCZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9TmQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBCZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKE9kKX1mdW5jdGlvbiBOZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBEZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gT2QodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBCZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1oZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scj1lLGk9cipyLGE9aSppKmksbz0wO288MTImJihhPShpPShyLT1uPShyKihvZCtzZCppK2EqKGNkK3VkKmkpKS1lKS8ob2QrMypzZCppK2EqKDcqY2QrOSp1ZCppKSkpKnIpKmkqaSwhKEljKG4pPEFjKSk7KytvKTtyZXR1cm5bbGQqdCoob2QrMypzZCppK2EqKDcqY2QrOSp1ZCppKSkvUGMociksR2MocWMocikvbGQpXX0sZGQuaW52ZXJ0PSRmKFJjKSxnZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWUsaT0yNTtkb3t2YXIgYT1yKnIsbz1hKmE7ci09bj0ociooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKEljKG4pPlNjJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSx2ZC5pbnZlcnQ9JGYoR2MpLF9kLmludmVydD0kZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqUmModCl9KSksd2QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqUmMoWWModCkpLU5jXX0sQmQucHJvdG90eXBlPU1kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QmQsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoQWQpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxuPWEuY2hpbGRyZW4pZm9yKHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3Ipby5wdXNoKG5bcl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKWEucHVzaChlW25dKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMsaT1bcl07cj1pLnBvcCgpOylpZih0KHIpLGU9ci5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWkucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAscj1lLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyluKz1yW2ldLnZhbHVlO2UudmFsdWU9bn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCkscj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1uLnBvcCgpLGU9ci5wb3AoKTt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gTWQodGhpcykuZWFjaEJlZm9yZShEZCl9fTt2YXIgTGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIElkKHQpe2Zvcih2YXIgZSxuLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dC5sZW5ndGg7cjspbj1NYXRoLnJhbmRvbSgpKnItLXwwLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fShMZC5jYWxsKHQpKSkubGVuZ3RoLGE9W107cjxpOyllPXRbcl0sbiYmUGQobixlKT8rK3I6KG49WWQoYT1SZChhLGUpKSxyPTApO3JldHVybiBufWZ1bmN0aW9uIFJkKHQsZSl7dmFyIG4scjtpZihqZChlLHQpKXJldHVybltlXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKEZkKGUsdFtuXSkmJmpkKHpkKHRbbl0sZSksdCkpcmV0dXJuW3Rbbl0sZV07Zm9yKG49MDtuPHQubGVuZ3RoLTE7KytuKWZvcihyPW4rMTtyPHQubGVuZ3RoOysrcilpZihGZCh6ZCh0W25dLHRbcl0pLGUpJiZGZCh6ZCh0W25dLGUpLHRbcl0pJiZGZCh6ZCh0W3JdLGUpLHRbbl0pJiZqZChVZCh0W25dLHRbcl0sZSksdCkpcmV0dXJuW3Rbbl0sdFtyXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gRmQodCxlKXt2YXIgbj10LnItZS5yLHI9ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIG48MHx8bipuPHIqcitpKml9ZnVuY3Rpb24gUGQodCxlKXt2YXIgbj10LnItZS5yKzFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBqZCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWlmKCFQZCh0LGVbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFlkKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57eDp0LngseTp0Lnkscjp0LnJ9fSh0WzBdKTtjYXNlIDI6cmV0dXJuIHpkKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBVZCh0WzBdLHRbMV0sdFsyXSl9fWZ1bmN0aW9uIHpkKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBVZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLHk9aS1sLGc9Yy1hLG09aC1hLHY9cipyK2kqaS1hKmEsYj12LW8qby1zKnMrYypjLF89di11KnUtbCpsK2gqaCx4PWQqcC1mKnksdz0ocCpfLXkqYikvKDIqeCktcixrPSh5KmctcCptKS94LFQ9KGQqYi1mKl8pLygyKngpLWksRT0oZiptLWQqZykveCxDPWsqaytFKkUtMSxTPTIqKGErdyprK1QqRSksQT13KncrVCpULWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK3craypNLHk6aStUK0UqTSxyOk19fWZ1bmN0aW9uIHFkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gSGQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiAkZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBXZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gVmQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7cWQobixlLHI9dFsyXSksZT1uZXcgV2QoZSksbj1uZXcgV2Qobikscj1uZXcgV2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3FkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBXZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKEhkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoSGQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPSRkKGUpOyhyPXIubmV4dCkhPT1uOykobz0kZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9SWQoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIFZkKHQpLHR9ZnVuY3Rpb24gWGQodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpaZCh0KX1mdW5jdGlvbiBaZCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gUWQoKXtyZXR1cm4gMH1mdW5jdGlvbiBLZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSmQodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiB0cCgpe3ZhciB0PW51bGwsZT0xLG49MSxyPVFkO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGkueD1lLzIsaS55PW4vMix0P2kuZWFjaEJlZm9yZShlcCh0KSkuZWFjaEFmdGVyKG5wKHIsLjUpKS5lYWNoQmVmb3JlKHJwKDEpKTppLmVhY2hCZWZvcmUoZXAoSmQpKS5lYWNoQWZ0ZXIobnAoUWQsMSkpLmVhY2hBZnRlcihucChyLGkuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShycChNYXRoLm1pbihlLG4pLygyKmkucikpKSxpfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1YZChlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxpKTpbZSxuXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGkpOnJ9LGl9ZnVuY3Rpb24gZXAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBucCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVZkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gcnAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19ZnVuY3Rpb24gaXAodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIGFwKHQsZSxuLHIsaSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGM9by5sZW5ndGgsdT10LnZhbHVlJiYoci1lKS90LnZhbHVlOysrczxjOykoYT1vW3NdKS55MD1uLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKnV9ZnVuY3Rpb24gb3AoKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmYXAocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoaXApLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX12YXIgc3A9e2RlcHRoOi0xfSxjcD17fTtmdW5jdGlvbiB1cCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBscCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBocCgpe3ZhciB0PXVwLGU9bHA7ZnVuY3Rpb24gbihuKXt2YXIgcixpLGEsbyxzLGMsdSxsPW4ubGVuZ3RoLGg9bmV3IEFycmF5KGwpLGY9e307Zm9yKGk9MDtpPGw7KytpKXI9bltpXSxzPWhbaV09bmV3IEJkKHIpLG51bGwhPShjPXQocixpLG4pKSYmKGMrPSIiKSYmKGZbdT0iJCIrKHMuaWQ9YyldPXUgaW4gZj9jcDpzKTtmb3IoaT0wO2k8bDsrK2kpaWYocz1oW2ldLG51bGwhPShjPWUobltpXSxpLG4pKSYmKGMrPSIiKSl7aWYoIShvPWZbIiQiK2NdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYobz09PWNwKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9c3AsYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1sfSkpLmVhY2hCZWZvcmUoT2QpLGEucGFyZW50PW51bGwsbD4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gYX1yZXR1cm4gbi5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1aZChlKSxuKTp0fSxuLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpkKHQpLG4pOmV9LG59ZnVuY3Rpb24gZnAodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gZHAodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBwcCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbZS5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIHlwKHQsZSxuKXt2YXIgcj1uLyhlLmktdC5pKTtlLmMtPXIsZS5zKz1uLHQuYys9cixlLnorPW4sZS5tKz1ufWZ1bmN0aW9uIGdwKHQsZSxuKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpufWZ1bmN0aW9uIG1wKHQsZSl7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPWV9ZnVuY3Rpb24gdnAoKXt2YXIgdD1mcCxlPTEsbj0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhLG89bmV3IG1wKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihyPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1yLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKG49ZS5jaGlsZHJlbltpXT1uZXcgbXAocltpXSxpKSksbi5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IG1wKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihjLmVhY2hBZnRlcihhKSxjLnBhcmVudC5tPS1jLnosYy5lYWNoQmVmb3JlKG8pLHIpaS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIHU9aSxsPWksaD1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PHUueCYmKHU9dCksdC54PmwueCYmKGw9dCksdC5kZXB0aD5oLmRlcHRoJiYoaD10KX0pKTt2YXIgZj11PT09bD8xOnQodSxsKS8yLGQ9Zi11LngscD1lLyhsLngrZitkKSx5PW4vKGguZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCp5fSkpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIG49ZS5jaGlsZHJlbixyPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP3JbZS5pLTFdOm51bGw7aWYobil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9bixlLm0rPW4sbis9ZS5zKyhyKz1lLmMpfShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxuLHIpe2lmKG4pe2Zvcih2YXIgaSxhPWUsbz1lLHM9bixjPWEucGFyZW50LmNoaWxkcmVuWzBdLHU9YS5tLGw9by5tLGg9cy5tLGY9Yy5tO3M9cHAocyksYT1kcChhKSxzJiZhOyljPWRwKGMpLChvPXBwKG8pKS5hPWUsKGk9cy56K2gtYS56LXUrdChzLl8sYS5fKSk+MCYmKHlwKGdwKHMsZSxyKSxlLGkpLHUrPWksbCs9aSksaCs9cy5tLHUrPWEubSxmKz1jLm0sbCs9by5tO3MmJiFwcChvKSYmKG8udD1zLG8ubSs9aC1sKSxhJiYhZHAoYykmJihjLnQ9YSxjLm0rPXUtZixyPWUpfXJldHVybiByfShlLGksZS5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBicCh0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fW1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEJkLnByb3RvdHlwZSk7dmFyIF9wPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiB4cCh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHMsYyx1LGwsaCxmLGQscCx5LGcsbT1bXSx2PWUuY2hpbGRyZW4sYj0wLF89MCx4PXYubGVuZ3RoLHc9ZS52YWx1ZTtiPHg7KXtjPWktbix1PWEtcjtkb3tsPXZbXysrXS52YWx1ZX13aGlsZSghbCYmXzx4KTtmb3IoaD1mPWwsZz1sKmwqKHk9TWF0aC5tYXgodS9jLGMvdSkvKHcqdCkpLHA9TWF0aC5tYXgoZi9nLGcvaCk7Xzx4OysrXyl7aWYobCs9cz12W19dLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSxnPWwqbCp5LChkPU1hdGgubWF4KGYvZyxnL2gpKT5wKXtsLT1zO2JyZWFrfXA9ZH1tLnB1c2gobz17dmFsdWU6bCxkaWNlOmM8dSxjaGlsZHJlbjp2LnNsaWNlKGIsXyl9KSxvLmRpY2U/YXAobyxuLHIsaSx3P3IrPXUqbC93OmEpOmJwKG8sbixyLHc/bis9YypsL3c6aSxhKSx3LT1sLGI9X31yZXR1cm4gbX1jb25zdCB3cD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXt4cChlLHQsbixyLGksYSl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oX3ApO2Z1bmN0aW9uIGtwKCl7dmFyIHQ9d3AsZT0hMSxuPTEscj0xLGk9WzBdLGE9UWQsbz1RZCxzPVFkLGM9UWQsdT1RZDtmdW5jdGlvbiBsKHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPW4sdC55MT1yLHQuZWFjaEJlZm9yZShoKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoaXApLHR9ZnVuY3Rpb24gaChlKXt2YXIgbj1pW2UuZGVwdGhdLHI9ZS54MCtuLGw9ZS55MCtuLGg9ZS54MS1uLGY9ZS55MS1uO2g8ciYmKHI9aD0ocitoKS8yKSxmPGwmJihsPWY9KGwrZikvMiksZS54MD1yLGUueTA9bCxlLngxPWgsZS55MT1mLGUuY2hpbGRyZW4mJihuPWlbZS5kZXB0aCsxXT1hKGUpLzIscis9dShlKS1uLGwrPW8oZSktbiwoaC09cyhlKS1uKTxyJiYocj1oPShyK2gpLzIpLChmLT1jKGUpLW4pPGwmJihsPWY9KGwrZikvMiksdChlLHIsbCxoLGYpKX1yZXR1cm4gbC5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsbCk6ZX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLHI9K3RbMV0sbCk6W24scl19LGwudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1aZChlKSxsKTp0fSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOmwucGFkZGluZ0lubmVyKCl9LGwucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOmF9LGwucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTpsLnBhZGRpbmdUb3AoKX0sbC5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOm99LGwucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOnN9LGwucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OktkKCt0KSxsKTpjfSxsLnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOnV9LGx9ZnVuY3Rpb24gVHAodCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX1mb3IodmFyIGg9dVtlXSxmPXIvMitoLGQ9ZSsxLHA9bi0xO2Q8cDspe3ZhciB5PWQrcD4+PjE7dVt5XTxmP2Q9eSsxOnA9eX1mLXVbZC0xXTx1W2RdLWYmJmUrMTxkJiYtLWQ7dmFyIGc9dVtkXS1oLG09ci1nO2lmKG8taT5jLWEpe3ZhciB2PShpKm0rbypnKS9yO3QoZSxkLGcsaSxhLHYsYyksdChkLG4sbSx2LGEsbyxjKX1lbHNle3ZhciBiPShhKm0rYypnKS9yO3QoZSxkLGcsaSxhLG8sYiksdChkLG4sbSxpLGIsbyxjKX19KDAsYyx0LnZhbHVlLGUsbixyLGkpfWZ1bmN0aW9uIEVwKHQsZSxuLHIsaSl7KDEmdC5kZXB0aD9icDphcCkodCxlLG4scixpKX1jb25zdCBDcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/YXAocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOmJwKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz14cChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KF9wKTtmdW5jdGlvbiBTcCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX1mdW5jdGlvbiBBcCh0LGUpe3ZhciBuPWRuKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fWZ1bmN0aW9uIE1wKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fXZhciBOcD1NYXRoLlNRUlQyO2Z1bmN0aW9uIERwKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIE9wKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvTnAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChOcCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGc9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxtPU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7cj0obS1nKS9OcCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9RHAoZyksYz1vLygyKmQpKihzKihlPU5wKm4rZywoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9EcChOcCpuK2cpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn1mdW5jdGlvbiBCcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWFuKGUpKS5oLChuPWFuKG4pKS5oKSxpPXBuKGUucyxuLnMpLGE9cG4oZS5sLG4ubCksbz1wbihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX1jb25zdCBMcD1CcChkbik7dmFyIElwPUJwKHBuKTtmdW5jdGlvbiBScCh0LGUpe3ZhciBuPXBuKCh0PVRhKHQpKS5sLChlPVRhKGUpKS5sKSxyPXBuKHQuYSxlLmEpLGk9cG4odC5iLGUuYiksYT1wbih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1yKGUpLHQuYj1pKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fWZ1bmN0aW9uIEZwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9T2EoZSkpLmgsKG49T2EobikpLmgpLGk9cG4oZS5jLG4uYyksYT1wbihlLmwsbi5sKSxvPXBuKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fWNvbnN0IFBwPUZwKGRuKTt2YXIganA9RnAocG4pO2Z1bmN0aW9uIFlwKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPUhhKGUpKS5oLChyPUhhKHIpKS5oKSxhPXBuKGUucyxyLnMpLG89cG4oZS5sLHIubCkscz1wbihlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1hKHQpLGUubD1vKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX1jb25zdCB6cD1ZcChkbik7dmFyIFVwPVlwKHBuKTtmdW5jdGlvbiBxcCh0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPXQoaSxpPWVbKytuXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gYVtlXSh0LWUpfX1mdW5jdGlvbiBIcCh0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpbltyXT10KHIvKGUtMSkpO3JldHVybiBufWZ1bmN0aW9uICRwKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn1mdW5jdGlvbiBXcCh0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT0wLG89MCxzPXRbaS0xXSxjPTA7KytyPGk7KWU9cyxzPXRbcl0sYys9bj1lWzBdKnNbMV0tc1swXSplWzFdLGErPShlWzBdK3NbMF0pKm4sbys9KGVbMV0rc1sxXSkqbjtyZXR1cm5bYS8oYyo9Myksby9jXX1mdW5jdGlvbiBWcCh0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSktKGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9ZnVuY3Rpb24gR3AodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gWHAodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49WzAsMV0scj0yLGk9MjtpPGU7KytpKXtmb3IoO3I+MSYmVnAodFtuW3ItMl1dLHRbbltyLTFdXSx0W2ldKTw9MDspLS1yO25bcisrXT1pfXJldHVybiBuLnNsaWNlKDAscil9ZnVuY3Rpb24gWnAodCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChHcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9WHAociksbz1YcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX1mdW5jdGlvbiBRcCh0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1lWzBdLHM9ZVsxXSxjPWFbMF0sdT1hWzFdLGw9ITEsaD0wO2g8aTsrK2gpbj0oYT10W2hdKVswXSwocj1hWzFdKT5zIT11PnMmJm88KGMtbikqKHMtcikvKHUtcikrbiYmKGw9IWwpLGM9bix1PXI7cmV0dXJuIGx9ZnVuY3Rpb24gS3AodCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9dFtpLTFdLG89YVswXSxzPWFbMV0sYz0wOysrcjxpOyllPW8sbj1zLGUtPW89KGE9dFtyXSlbMF0sbi09cz1hWzFdLGMrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gY31mdW5jdGlvbiBKcCgpe3JldHVybiBNYXRoLnJhbmRvbSgpfWNvbnN0IHR5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShKcCksZXk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1yKWE9cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsYT0yKmUoKS0xLGk9cipyK2EqYX13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShKcCksbnk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ZXkuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oSnApLHJ5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KEpwKSxpeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49cnkuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oSnApLGF5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KEpwKTtmdW5jdGlvbiBveSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiBzeSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBjeT1BcnJheS5wcm90b3R5cGUsdXk9Y3kubWFwLGx5PWN5LnNsaWNlLGh5PXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGZ5KCl7dmFyIHQ9bmEoKSxlPVtdLG49W10scj1oeTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkrIiIsbz10LmdldChhKTtpZighbyl7aWYociE9PWh5KXJldHVybiByO3Quc2V0KGEsbz1lLnB1c2goaSkpfXJldHVybiBuWyhvLTEpJW4ubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9bmEoKTtmb3IodmFyIHIsYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KXQuaGFzKGE9KHI9bltvXSkrIiIpfHx0LnNldChhLGUucHVzaChyKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bHkuY2FsbCh0KSxpKTpuLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBmeShlLG4pLnVua25vd24ocil9LG95LmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIGR5KCl7dmFyIHQsZSxuPWZ5KCkudW5rbm93bih2b2lkIDApLHI9bi5kb21haW4saT1uLnJhbmdlLGE9WzAsMV0sbz0hMSxzPTAsYz0wLHU9LjU7ZnVuY3Rpb24gbCgpe3ZhciBuPXIoKS5sZW5ndGgsbD1hWzFdPGFbMF0saD1hW2wtMF0sZj1hWzEtbF07dD0oZi1oKS9NYXRoLm1heCgxLG4tcysyKmMpLG8mJih0PU1hdGguZmxvb3IodCkpLGgrPShmLWgtdCoobi1zKSkqdSxlPXQqKDEtcyksbyYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBkPWsobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIGkobD9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGwoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxvPSEwLGwoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwoKSk6b30sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsYz0rdCksbCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGwoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCgpKTpjfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTp1fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZHkocigpLGEpLnJvdW5kKG8pLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIoYykuYWxpZ24odSl9LG95LmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIHB5KHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHB5KGUoKSl9LHR9ZnVuY3Rpb24geXkoKXtyZXR1cm4gcHkoZHkuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9ZnVuY3Rpb24gZ3kodCl7cmV0dXJuK3R9dmFyIG15PVswLDFdO2Z1bmN0aW9uIHZ5KHQpe3JldHVybiB0fWZ1bmN0aW9uIGJ5KHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OihuPWlzTmFOKGUpP05hTjouNSxmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIG59ZnVuY3Rpb24gX3kodCl7dmFyIGUsbj10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj5yJiYoZT1uLG49cixyPWUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChuLE1hdGgubWluKHIsdCkpfX1mdW5jdGlvbiB4eSh0LGUsbil7dmFyIHI9dFswXSxpPXRbMV0sYT1lWzBdLG89ZVsxXTtyZXR1cm4gaTxyPyhyPWJ5KGksciksYT1uKG8sYSkpOihyPWJ5KHIsaSksYT1uKGEsbykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCkpfX1mdW5jdGlvbiB3eSh0LGUsbil7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytvPHI7KWlbb109YnkodFtvXSx0W28rMV0pLGFbb109bihlW29dLGVbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXUodCxlLDEsciktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24ga3kodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gVHkoKXt2YXIgdCxlLG4scixpLGEsbz1teSxzPW15LGM9TW4sdT12eTtmdW5jdGlvbiBsKCl7cmV0dXJuIHI9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpPjI/d3k6eHksaT1hPW51bGwsaH1mdW5jdGlvbiBoKGUpe3JldHVybiBpc05hTihlPStlKT9uOihpfHwoaT1yKG8ubWFwKHQpLHMsYykpKSh0KHUoZSkpKX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIHUoZSgoYXx8KGE9cihzLG8ubWFwKHQpLFRuKSkpKG4pKSl9LGguZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXV5LmNhbGwodCxneSksdT09PXZ5fHwodT1feShvKSksbCgpKTpvLnNsaWNlKCl9LGgucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bHkuY2FsbCh0KSxsKCkpOnMuc2xpY2UoKX0saC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPWx5LmNhbGwodCksYz1NcCxsKCl9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dD9feShvKTp2eSxoKTp1IT09dnl9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsKCkpOmN9LGgudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGgpOm59LGZ1bmN0aW9uKG4scil7cmV0dXJuIHQ9bixlPXIsbCgpfX1mdW5jdGlvbiBFeSh0LGUpe3JldHVybiBUeSgpKHQsZSl9ZnVuY3Rpb24gQ3kodCxlLG4scil7dmFyIGksYT1NKHQsZSxuKTtzd2l0Y2goKHI9Y2MobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9eGMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSx5YyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPXdjKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9X2MoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gcGMocil9ZnVuY3Rpb24gU3kodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBTKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIEN5KHJbMF0scltyLmxlbmd0aC0xXSxudWxsPT10PzEwOnQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksYT0wLG89aS5sZW5ndGgtMSxzPWlbYV0sYz1pW29dO3JldHVybiBjPHMmJihyPXMscz1jLGM9cixyPWEsYT1vLG89ciksKHI9QShzLGMsbikpPjA/cj1BKHM9TWF0aC5mbG9vcihzL3IpKnIsYz1NYXRoLmNlaWwoYy9yKSpyLG4pOnI8MCYmKHI9QShzPU1hdGguY2VpbChzKnIpL3IsYz1NYXRoLmZsb29yKGMqcikvcixuKSkscj4wPyhpW2FdPU1hdGguZmxvb3Iocy9yKSpyLGlbb109TWF0aC5jZWlsKGMvcikqcixlKGkpKTpyPDAmJihpW2FdPU1hdGguY2VpbChzKnIpL3IsaVtvXT1NYXRoLmZsb29yKGMqcikvcixlKGkpKSx0fSx0fWZ1bmN0aW9uIEF5KCl7dmFyIHQ9RXkodnksdnkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4ga3kodCxBeSgpKX0sb3kuYXBwbHkodCxhcmd1bWVudHMpLFN5KHQpfWZ1bmN0aW9uIE15KHQpe3ZhciBlO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2U6dH1yZXR1cm4gbi5pbnZlcnQ9bixuLmRvbWFpbj1uLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXV5LmNhbGwoZSxneSksbik6dC5zbGljZSgpfSxuLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXkodCkudW5rbm93bihlKX0sdD1hcmd1bWVudHMubGVuZ3RoP3V5LmNhbGwodCxneSk6WzAsMV0sU3kobil9ZnVuY3Rpb24gTnkodCxlKXt2YXIgbixyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtyXSxvPXRbaV07cmV0dXJuIG88YSYmKG49cixyPWksaT1uLG49YSxhPW8sbz1uKSx0W3JdPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBEeSh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gT3kodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIEJ5KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gTHkodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBJeSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gUnkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gRnkodCl7dmFyIGUsbixyPXQoRHksT3kpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/SXk6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPVJ5KGUpLG49UnkobiksdChCeSxMeSkpOnQoRHksT3kpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QseT1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhazt5LnB1c2goaCl9fWVsc2UgeT1TKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj95LnJldmVyc2UoKTp5fSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9cGMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkoTnkoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiBQeSgpe3ZhciB0PUZ5KFR5KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4ga3kodCxQeSgpKS5iYXNlKHQuYmFzZSgpKX0sb3kuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gankodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gWXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24genkodCl7dmFyIGU9MSxuPXQoankoZSksWXkoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoankoZT0rbiksWXkoZSkpOmV9LFN5KG4pfWZ1bmN0aW9uIFV5KCl7dmFyIHQ9enkoVHkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBreSh0LFV5KCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LG95LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBxeSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gSHkodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gJHkodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBXeSh0KXt2YXIgZT10KHZ5LHZ5KSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KHZ5LHZ5KTouNT09PW4/dChIeSwkeSk6dChxeShuKSxxeSgxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LFN5KGUpfWZ1bmN0aW9uIFZ5KCl7dmFyIHQ9V3koVHkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBreSh0LFZ5KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LG95LmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIEd5KCl7cmV0dXJuIFZ5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gWHkoKXt2YXIgdCxlPVtdLG49W10scj1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxpPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShpLTEpOysrdDxpOylyW3QtMV09TyhlLHQvaSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW3UocixlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBpPW4uaW5kZXhPZih0KTtyZXR1cm4gaTwwP1tOYU4sTmFOXTpbaT4wP3JbaS0xXTplWzBdLGk8ci5sZW5ndGg/cltpXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixyPTAsbz10Lmxlbmd0aDtyPG87KytyKW51bGw9PShuPXRbcl0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQoaSksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWx5LmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFh5KCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LG95LmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBaeSgpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVt1KGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT1seS5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFp5KCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxveS5hcHBseShTeShvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIFF5KCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/blt1KGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1seS5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWx5LmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUXkoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sb3kuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBLeT1uZXcgRGF0ZSxKeT1uZXcgRGF0ZTtmdW5jdGlvbiB0Zyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiB0ZygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBLeS5zZXRUaW1lKCtlKSxKeS5zZXRUaW1lKCtyKSx0KEt5KSx0KEp5KSxNYXRoLmZsb29yKG4oS3ksSnkpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgZWc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO2VnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dGcoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IG5nPWVnO3ZhciByZz1lZy5yYW5nZSxpZz10ZygoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpO2NvbnN0IGFnPWlnO3ZhciBvZz1pZy5yYW5nZSxzZz0xZTMsY2c9NmU0LHVnPTM2ZTUsbGc9ODY0ZTUsaGc9NjA0OGU1O2Z1bmN0aW9uIGZnKHQpe3JldHVybiB0ZygoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqY2cpL2hnfSkpfXZhciBkZz1mZygwKSxwZz1mZygxKSx5Zz1mZygyKSxnZz1mZygzKSxtZz1mZyg0KSx2Zz1mZyg1KSxiZz1mZyg2KSxfZz1kZy5yYW5nZSx4Zz1wZy5yYW5nZSx3Zz15Zy5yYW5nZSxrZz1nZy5yYW5nZSxUZz1tZy5yYW5nZSxFZz12Zy5yYW5nZSxDZz1iZy5yYW5nZSxTZz10ZygoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNnKS9sZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKTtjb25zdCBBZz1TZzt2YXIgTWc9U2cucmFuZ2UsTmc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqc2ctdC5nZXRNaW51dGVzKCkqY2cpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdWcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdWd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKTtjb25zdCBEZz1OZzt2YXIgT2c9TmcucmFuZ2UsQmc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqc2cpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqY2cpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvY2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpO2NvbnN0IExnPUJnO3ZhciBJZz1CZy5yYW5nZSxSZz10ZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpzZyl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9zZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSk7Y29uc3QgRmc9Umc7dmFyIFBnPVJnLnJhbmdlLGpnPXRnKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7amcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT90ZygoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpqZzpudWxsfTtjb25zdCBZZz1qZzt2YXIgemc9amcucmFuZ2U7ZnVuY3Rpb24gVWcodCl7cmV0dXJuIHRnKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oZ30pKX12YXIgcWc9VWcoMCksSGc9VWcoMSksJGc9VWcoMiksV2c9VWcoMyksVmc9VWcoNCksR2c9VWcoNSksWGc9VWcoNiksWmc9cWcucmFuZ2UsUWc9SGcucmFuZ2UsS2c9JGcucmFuZ2UsSmc9V2cucmFuZ2UsdG09VmcucmFuZ2UsZW09R2cucmFuZ2Usbm09WGcucmFuZ2Uscm09dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9sZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtjb25zdCBpbT1ybTt2YXIgYW09cm0ucmFuZ2Usb209dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO29tLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dGcoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IHNtPW9tO3ZhciBjbT1vbS5yYW5nZTtmdW5jdGlvbiB1bSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gbG0odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaG0odCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGZtKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMsbz10LnNob3J0RGF5cyxzPXQubW9udGhzLGM9dC5zaG9ydE1vbnRocyx1PVRtKGkpLGw9RW0oaSksaD1UbShhKSxmPUVtKGEpLGQ9VG0obykscD1FbShvKSx5PVRtKHMpLGc9RW0ocyksbT1UbShjKSx2PUVtKGMpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpXbSxlOldtLGY6UW0sZzpjdixHOmx2LEg6Vm0sSTpHbSxqOlhtLEw6Wm0sbTpLbSxNOkptLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROkJ2LHM6THYsUzp0dix1OmV2LFU6bnYsVjppdix3OmF2LFc6b3YseDpudWxsLFg6bnVsbCx5OnN2LFk6dXYsWjpodiwiJSI6T3Z9LF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmdixlOmZ2LGY6bXYsZzpBdixHOk52LEg6ZHYsSTpwdixqOnl2LEw6Z3YsbTp2dixNOmJ2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROkJ2LHM6THYsUzpfdix1Onh2LFU6d3YsVjpUdix3OkV2LFc6Q3YseDpudWxsLFg6bnVsbCx5OlN2LFk6TXYsWjpEdiwiJSI6T3Z9LHg9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PXBbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9ZltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12W3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6Um0sZTpSbSxmOlVtLGc6T20sRzpEbSxIOlBtLEk6UG0sajpGbSxMOnptLG06SW0sTTpqbSxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LHE6TG0sUTpIbSxzOiRtLFM6WW0sdTpTbSxVOkFtLFY6TW0sdzpDbSxXOk5tLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpPbSxZOkRtLFo6Qm0sIiUiOnFtfTtmdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPXZtW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT1obSgxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1sbShobShhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9IZy5jZWlsKHIpOkhnKHIpLHI9aW0ub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9dW0oaG0oYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/cGcuY2VpbChyKTpwZyhyKSxyPUFnLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9sbShobShhLnksMCwxKSkuZ2V0VVRDRGF5KCk6dW0oaG0oYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsbG0oYSkpOnVtKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT14W2kgaW4gdm0/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KG4sYiksYi5YPXcocixiKSxiLmM9dyhlLGIpLF8ueD13KG4sXyksXy5YPXcocixfKSxfLmM9dyhlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIGRtLHBtLHltLGdtLG1tLHZtPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGJtPS9eXHMqXGQrLyxfbT0vXiUvLHhtPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiB3bSh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBrbSh0KXtyZXR1cm4gdC5yZXBsYWNlKHhtLCJcXCQmIil9ZnVuY3Rpb24gVG0odCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGttKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gRW0odCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gQ20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQW0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTW0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTm0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRG0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCbSh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExtKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEltKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6bSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxbSh0LGUsbil7dmFyIHI9X20uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBIbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRtKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV20odCxlKXtyZXR1cm4gd20odC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBWbSh0LGUpe3JldHVybiB3bSh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBHbSh0LGUpe3JldHVybiB3bSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWG0odCxlKXtyZXR1cm4gd20oMStBZy5jb3VudChuZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIFptKHQsZSl7cmV0dXJuIHdtKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBRbSh0LGUpe3JldHVybiBabSh0LGUpKyIwMDAifWZ1bmN0aW9uIEttKHQsZSl7cmV0dXJuIHdtKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gSm0odCxlKXtyZXR1cm4gd20odC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiB0dih0LGUpe3JldHVybiB3bSh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGV2KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBudih0LGUpe3JldHVybiB3bShkZy5jb3VudChuZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gcnYodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/bWcodCk6bWcuY2VpbCh0KX1mdW5jdGlvbiBpdih0LGUpe3JldHVybiB0PXJ2KHQpLHdtKG1nLmNvdW50KG5nKHQpLHQpKyg0PT09bmcodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gYXYodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gb3YodCxlKXtyZXR1cm4gd20ocGcuY291bnQobmcodCktMSx0KSxlLDIpfWZ1bmN0aW9uIHN2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBjdih0LGUpe3JldHVybiB3bSgodD1ydih0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiB1dih0LGUpe3JldHVybiB3bSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gbHYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB3bSgodD1uPj00fHwwPT09bj9tZyh0KTptZy5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGh2KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrd20oZS82MHwwLCIwIiwyKSt3bShlJTYwLCIwIiwyKX1mdW5jdGlvbiBmdih0LGUpe3JldHVybiB3bSh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGR2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIHB2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB5dih0LGUpe3JldHVybiB3bSgxK2ltLmNvdW50KHNtKHQpLHQpLGUsMyl9ZnVuY3Rpb24gZ3YodCxlKXtyZXR1cm4gd20odC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG12KHQsZSl7cmV0dXJuIGd2KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdnYodCxlKXtyZXR1cm4gd20odC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBidih0LGUpe3JldHVybiB3bSh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIF92KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24geHYodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIHd2KHQsZSl7cmV0dXJuIHdtKHFnLmNvdW50KHNtKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrdih0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9WZyh0KTpWZy5jZWlsKHQpfWZ1bmN0aW9uIFR2KHQsZSl7cmV0dXJuIHQ9a3YodCksd20oVmcuY291bnQoc20odCksdCkrKDQ9PT1zbSh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBFdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBDdih0LGUpe3JldHVybiB3bShIZy5jb3VudChzbSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gd20odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEF2KHQsZSl7cmV0dXJuIHdtKCh0PWt2KHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIE12KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBOdih0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHdtKCh0PW4+PTR8fDA9PT1uP1ZnKHQpOlZnLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gRHYoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIE92KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEJ2KHQpe3JldHVybit0fWZ1bmN0aW9uIEx2KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gSXYodCl7cmV0dXJuIGRtPWZtKHQpLHBtPWRtLmZvcm1hdCx5bT1kbS5wYXJzZSxnbT1kbS51dGNGb3JtYXQsbW09ZG0udXRjUGFyc2UsZG19SXYoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgUnY9MzE1MzZlNjtmdW5jdGlvbiBGdih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gUHYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24ganYodCxlLG4scixpLG8scyxjLHUpe3ZhciBsPUV5KHZ5LHZ5KSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIiksXz11KCIlWSIpLHg9W1tzLDEsMWUzXSxbcyw1LDVlM10sW3MsMTUsMTVlM10sW3MsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW3IsMSw4NjRlNV0sW3IsMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsUnZdXTtmdW5jdGlvbiB3KGEpe3JldHVybihzKGEpPGE/ZDpvKGEpPGE/cDppKGEpPGE/eTpyKGEpPGE/ZzplKGEpPGE/bihhKTxhP206djp0KGEpPGE/YjpfKShhKX1mdW5jdGlvbiBrKGUsbixyLGkpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKHItbikvZSxzPWEoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkpLnJpZ2h0KHgsbyk7cz09PXgubGVuZ3RoPyhpPU0obi9SdixyL1J2LGUpLGU9dCk6cz8oaT0ocz14W28veFtzLTFdWzJdPHhbc11bMl0vbz9zLTE6c10pWzFdLGU9c1swXSk6KGk9TWF0aC5tYXgoTShuLHIsZSksMSksZT1jKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShoKHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zih1eS5jYWxsKHQsUHYpKTpmKCkubWFwKEZ2KX0sbC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZigpLGk9clswXSxhPXJbci5sZW5ndGgtMV0sbz1hPGk7cmV0dXJuIG8mJihuPWksaT1hLGE9biksbj0obj1rKHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxvP24ucmV2ZXJzZSgpOm59LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3c6dShlKX0sbC5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZigpO3JldHVybih0PWsodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2YoTnkobix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGt5KGwsanYodCxlLG4scixpLG8scyxjLHUpKX0sbH1mdW5jdGlvbiBZdigpe3JldHVybiBveS5hcHBseShqdihuZyxhZyxkZyxBZyxEZyxMZyxGZyxZZyxwbSkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9dmFyIHp2PXRnKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSk7Y29uc3QgVXY9enY7dmFyIHF2PXp2LnJhbmdlLEh2PXRnKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdWcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdWd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKTtjb25zdCAkdj1Idjt2YXIgV3Y9SHYucmFuZ2UsVnY9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqY2cpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvY2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpO2NvbnN0IEd2PVZ2O3ZhciBYdj1Wdi5yYW5nZTtmdW5jdGlvbiBadigpe3JldHVybiBveS5hcHBseShqdihzbSxVdixxZyxpbSwkdixHdixGZyxZZyxnbSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUXYoKXt2YXIgdCxlLG4scixpLGE9MCxvPTEscz12eSxjPSExO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP2k6cygwPT09bj8uNTooZT0ocihlKS10KSpuLGM/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9cmV0dXJuIHUuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIoYT0raVswXSksZT1yKG89K2lbMV0pLG49dD09PWU/MDoxLyhlLXQpLHUpOlthLG9dfSx1LmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSEhdCx1KTpjfSx1LmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHUpOnN9LHUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHUpOml9LGZ1bmN0aW9uKGkpe3JldHVybiByPWksdD1pKGEpLGU9aShvKSxuPXQ9PT1lPzA6MS8oZS10KSx1fX1mdW5jdGlvbiBLdih0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBKdigpe3ZhciB0PVN5KFF2KCkodnkpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEt2KHQsSnYoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiB0Yigpe3ZhciB0PUZ5KFF2KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCx0YigpKS5iYXNlKHQuYmFzZSgpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIGViKCl7dmFyIHQ9enkoUXYoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LGViKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBuYigpe3ZhciB0PVd5KFF2KCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCxuYigpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxzeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcmIoKXtyZXR1cm4gbmIuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBpYigpe3ZhciB0PVtdLGU9dnk7ZnVuY3Rpb24gbihuKXtpZighaXNOYU4obj0rbikpcmV0dXJuIGUoKHUodCxuKS0xKS8odC5sZW5ndGgtMSkpfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W107Zm9yKHZhciByLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpbnVsbD09KHI9ZVthXSl8fGlzTmFOKHI9K3IpfHx0LnB1c2gocik7cmV0dXJuIHQuc29ydChpKSxufSxuLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBpYihlKS5kb21haW4odCl9LHN5LmFwcGx5KG4sYXJndW1lbnRzKX1mdW5jdGlvbiBhYigpe3ZhciB0LGUsbixyLGksYSxvLHM9MCxjPS41LHU9MSxsPXZ5LGg9ITE7ZnVuY3Rpb24gZih0KXtyZXR1cm4gaXNOYU4odD0rdCk/bzoodD0uNSsoKHQ9K2EodCkpLWUpKih0PGU/cjppKSxsKGg/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKTp0KSl9cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWEocz0rb1swXSksZT1hKGM9K29bMV0pLG49YSh1PStvWzJdKSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLGYpOltzLGMsdV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ISF0LGYpOmh9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZik6bH0sZi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZik6b30sZnVuY3Rpb24obyl7cmV0dXJuIGE9byx0PW8ocyksZT1vKGMpLG49byh1KSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLGZ9fWZ1bmN0aW9uIG9iKCl7dmFyIHQ9U3koYWIoKSh2eSkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCxvYigpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHNiKCl7dmFyIHQ9RnkoYWIoKSkuZG9tYWluKFsuMSwxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LHNiKCkpLmJhc2UodC5iYXNlKCkpfSxzeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gY2IoKXt2YXIgdD16eShhYigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEt2KHQsY2IoKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHViKCl7dmFyIHQ9V3koYWIoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LHViKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBsYigpe3JldHVybiB1Yi5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIGhiKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufWNvbnN0IGZiPWhiKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxkYj1oYigiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IikscGI9aGIoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLHliPWhiKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxnYj1oYigiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksbWI9aGIoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLHZiPWhiKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxiYj1oYigiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksX2I9aGIoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLHhiPWhiKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiB3Yih0KXtyZXR1cm4gbW4odFt0Lmxlbmd0aC0xXSl9dmFyIGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChoYik7Y29uc3QgVGI9d2Ioa2IpO3ZhciBFYj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoaGIpO2NvbnN0IENiPXdiKEViKTt2YXIgU2I9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKGhiKTtjb25zdCBBYj13YihTYik7dmFyIE1iPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChoYik7Y29uc3QgTmI9d2IoTWIpO3ZhciBEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoaGIpO2NvbnN0IE9iPXdiKERiKTt2YXIgQmI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKGhiKTtjb25zdCBMYj13YihCYik7dmFyIEliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChoYik7Y29uc3QgUmI9d2IoSWIpO3ZhciBGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoaGIpO2NvbnN0IFBiPXdiKEZiKTt2YXIgamI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKGhiKTtjb25zdCBZYj13YihqYik7dmFyIHpiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChoYik7Y29uc3QgVWI9d2IoemIpO3ZhciBxYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoaGIpO2NvbnN0IEhiPXdiKHFiKTt2YXIgJGI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKGhiKTtjb25zdCBXYj13YigkYik7dmFyIFZiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChoYik7Y29uc3QgR2I9d2IoVmIpO3ZhciBYYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoaGIpO2NvbnN0IFpiPXdiKFhiKTt2YXIgUWI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKGhiKTtjb25zdCBLYj13YihRYik7dmFyIEpiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChoYik7Y29uc3QgdF89d2IoSmIpO3ZhciBlXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoaGIpO2NvbnN0IG5fPXdiKGVfKTt2YXIgcl89bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKGhiKTtjb25zdCBpXz13YihyXyk7dmFyIGFfPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChoYik7Y29uc3Qgb189d2IoYV8pO3ZhciBzXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoaGIpO2NvbnN0IGNfPXdiKHNfKTt2YXIgdV89bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKGhiKTtjb25zdCBsXz13Yih1Xyk7dmFyIGhfPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChoYik7Y29uc3QgZl89d2IoaF8pO3ZhciBkXz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoaGIpO2NvbnN0IHBfPXdiKGRfKTt2YXIgeV89bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKGhiKTtjb25zdCBnXz13Yih5Xyk7dmFyIG1fPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChoYik7Y29uc3Qgdl89d2IobV8pO3ZhciBiXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoaGIpO2NvbnN0IF9fPXdiKGJfKTt2YXIgeF89bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKGhiKTtjb25zdCB3Xz13Yih4Xyk7ZnVuY3Rpb24ga18odCl7cmV0dXJuIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgtNC41NC10KigzNS4zNC10KigyMzgxLjczLXQqKDY0MDIuNy10Kig3MDI0LjcyLTI3MTAuNTcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDMyLjQ5K3QqKDE3MC43Myt0Kig1Mi44Mi10KigxMzEuNDYtdCooMTc2LjU4LTY3LjM3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCg4MS4yNCt0Kig0NDIuMzYtdCooMjQ4Mi40My10Kig2MTY3LjI0LXQqKDY2MTQuOTQtMjQ3NS42Nyp0KSkpKSkpKSsiKSJ9Y29uc3QgVF89VXAoSGEoMzAwLC41LDApLEhhKC0yNDAsLjUsMSkpO3ZhciBFXz1VcChIYSgtMTAwLC43NSwuMzUpLEhhKDgwLDEuNSwuOCkpLENfPVVwKEhhKDI2MCwuNzUsLjM1KSxIYSg4MCwxLjUsLjgpKSxTXz1IYSgpO2Z1bmN0aW9uIEFfKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gU18uaD0zNjAqdC0xMDAsU18ucz0xLjUtMS41KmUsU18ubD0uOC0uOSplLFNfKyIifXZhciBNXz1RZSgpLE5fPU1hdGguUEkvMyxEXz0yKk1hdGguUEkvMztmdW5jdGlvbiBPXyh0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxNXy5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxNXy5nPTI1NSooZT1NYXRoLnNpbih0K05fKSkqZSxNXy5iPTI1NSooZT1NYXRoLnNpbih0K0RfKSkqZSxNXysiIn1mdW5jdGlvbiBCXyh0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifWZ1bmN0aW9uIExfKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fWNvbnN0IElfPUxfKGhiKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSk7dmFyIFJfPUxfKGhiKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRl89TF8oaGIoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxQXz1MXyhoYigiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIGpfKHQpe3JldHVybiBUZShpZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBZXz0wO2Z1bmN0aW9uIHpfKCl7cmV0dXJuIG5ldyBVX31mdW5jdGlvbiBVXygpe3RoaXMuXz0iQCIrKCsrWV8pLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBxXyh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IHhlKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhlKFtudWxsPT10P1tdOnRdLF9lKX1mdW5jdGlvbiBIXyh0LGUpe251bGw9PWUmJihlPU5uKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAscj1lP2UubGVuZ3RoOjAsaT1uZXcgQXJyYXkocik7bjxyOysrbilpW25dPURuKHQsZVtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gJF8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fVVfLnByb3RvdHlwZT16Xy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVfLGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBXXz1NYXRoLmFicyxWXz1NYXRoLmF0YW4yLEdfPU1hdGguY29zLFhfPU1hdGgubWF4LFpfPU1hdGgubWluLFFfPU1hdGguc2luLEtfPU1hdGguc3FydCxKXz0xZS0xMix0eD1NYXRoLlBJLGV4PXR4LzIsbng9Mip0eDtmdW5jdGlvbiByeCh0KXtyZXR1cm4gdD4xPzA6dDwtMT90eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gaXgodCl7cmV0dXJuIHQ+PTE/ZXg6dDw9LTE/LWV4Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBheCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBveCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBzeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGN4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHV4KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGx4KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjxKXykpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gaHgodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvS18ocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLHk9citoLGc9KGYrcCkvMixtPShkK3kpLzIsdj1wLWYsYj15LWQsXz12KnYrYipiLHg9aS1hLHc9Zip5LXAqZCxrPShiPDA/LTE6MSkqS18oWF8oMCx4KngqXy13KncpKSxUPSh3KmItdiprKS9fLEU9KC13KnYtYiprKS9fLEM9KHcqYit2KmspL18sUz0oLXcqditiKmspL18sQT1ULWcsTT1FLW0sTj1DLWcsRD1TLW07cmV0dXJuIEEqQStNKk0+TipOK0QqRCYmKFQ9QyxFPVMpLHtjeDpULGN5OkUseDAxOi1sLHkwMTotaCx4MTE6VCooaS94LTEpLHkxMTpFKihpL3gtMSl9fWZ1bmN0aW9uIGZ4KCl7dmFyIHQ9YXgsZT1veCxuPSRfKDApLHI9bnVsbCxpPXN4LGE9Y3gsbz11eCxzPW51bGw7ZnVuY3Rpb24gYygpe3ZhciBjLHUsbD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1leCxkPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWV4LHA9V18oZC1mKSx5PWQ+ZjtpZihzfHwocz1jPVdpKCkpLGg8bCYmKHU9aCxoPWwsbD11KSxoPkpfKWlmKHA+bngtSl8pcy5tb3ZlVG8oaCpHXyhmKSxoKlFfKGYpKSxzLmFyYygwLDAsaCxmLGQsIXkpLGw+Sl8mJihzLm1vdmVUbyhsKkdfKGQpLGwqUV8oZCkpLHMuYXJjKDAsMCxsLGQsZix5KSk7ZWxzZXt2YXIgZyxtLHY9ZixiPWQsXz1mLHg9ZCx3PXAsaz1wLFQ9by5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixFPVQ+Sl8mJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpLXyhsKmwraCpoKSksQz1aXyhXXyhoLWwpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxTPUMsQT1DO2lmKEU+Sl8pe3ZhciBNPWl4KEUvbCpRXyhUKSksTj1peChFL2gqUV8oVCkpOyh3LT0yKk0pPkpfPyhfKz1NKj15PzE6LTEseC09TSk6KHc9MCxfPXg9KGYrZCkvMiksKGstPTIqTik+Sl8/KHYrPU4qPXk/MTotMSxiLT1OKTooaz0wLHY9Yj0oZitkKS8yKX12YXIgRD1oKkdfKHYpLE89aCpRXyh2KSxCPWwqR18oeCksTD1sKlFfKHgpO2lmKEM+Sl8pe3ZhciBJLFI9aCpHXyhiKSxGPWgqUV8oYiksUD1sKkdfKF8pLGo9bCpRXyhfKTtpZihwPHR4JiYoST1seChELE8sUCxqLFIsRixCLEwpKSl7dmFyIFk9RC1JWzBdLHo9Ty1JWzFdLFU9Ui1JWzBdLHE9Ri1JWzFdLEg9MS9RXyhyeCgoWSpVK3oqcSkvKEtfKFkqWSt6KnopKktfKFUqVStxKnEpKSkvMiksJD1LXyhJWzBdKklbMF0rSVsxXSpJWzFdKTtTPVpfKEMsKGwtJCkvKEgtMSkpLEE9Wl8oQywoaC0kKS8oSCsxKSl9fWs+Sl8/QT5KXz8oZz1oeChQLGosRCxPLGgsQSx5KSxtPWh4KFIsRixCLEwsaCxBLHkpLHMubW92ZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksQTxDP3MuYXJjKGcuY3gsZy5jeSxBLFZfKGcueTAxLGcueDAxKSxWXyhtLnkwMSxtLngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksQSxWXyhnLnkwMSxnLngwMSksVl8oZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsaCxWXyhnLmN5K2cueTExLGcuY3grZy54MTEpLFZfKG0uY3krbS55MTEsbS5jeCttLngxMSksIXkpLHMuYXJjKG0uY3gsbS5jeSxBLFZfKG0ueTExLG0ueDExKSxWXyhtLnkwMSxtLngwMSksIXkpKSk6KHMubW92ZVRvKEQsTykscy5hcmMoMCwwLGgsdixiLCF5KSk6cy5tb3ZlVG8oRCxPKSxsPkpfJiZ3PkpfP1M+Sl8/KGc9aHgoQixMLFIsRixsLC1TLHkpLG09aHgoRCxPLFAsaixsLC1TLHkpLHMubGluZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksUzxDP3MuYXJjKGcuY3gsZy5jeSxTLFZfKGcueTAxLGcueDAxKSxWXyhtLnkwMSxtLngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksUyxWXyhnLnkwMSxnLngwMSksVl8oZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsbCxWXyhnLmN5K2cueTExLGcuY3grZy54MTEpLFZfKG0uY3krbS55MTEsbS5jeCttLngxMSkseSkscy5hcmMobS5jeCxtLmN5LFMsVl8obS55MTEsbS54MTEpLFZfKG0ueTAxLG0ueDAxKSwheSkpKTpzLmFyYygwLDAsbCx4LF8seSk6cy5saW5lVG8oQixMKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSxjKXJldHVybiBzPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi10eC8yO3JldHVybltHXyhyKSpuLFFfKHIpKm5dfSxjLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JF8oK2UpLGMpOnR9LGMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6ZX0sYy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6bn0sYy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOnJ9LGMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxjKTppfSxjLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOmF9LGMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6b30sYy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGMpOnN9LGN9ZnVuY3Rpb24gZHgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHB4KHQpe3JldHVybiBuZXcgZHgodCl9ZnVuY3Rpb24geXgodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gZ3godCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbXgoKXt2YXIgdD15eCxlPWd4LG49JF8oITApLHI9bnVsbCxpPXB4LGE9bnVsbDtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsPW8ubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT1XaSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JF8oK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXyghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb31mdW5jdGlvbiB2eCgpe3ZhciB0PXl4LGU9bnVsbCxuPSRfKDApLHI9Z3gsaT0kXyghMCksYT1udWxsLG89cHgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLHk9ITEsZz1uZXcgQXJyYXkocCksbT1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1XaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT15KWlmKHk9IXkpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoZ1toXSxtW2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX15JiYoZ1t1XT0rdChmLHUsYyksbVt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTpnW3VdLHI/K3IoZix1LGMpOm1bdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIG14KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjokXygrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTokXygrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfWZ1bmN0aW9uIGJ4KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIF94KHQpe3JldHVybiB0fWZ1bmN0aW9uIHh4KCl7dmFyIHQ9X3gsZT1ieCxuPW51bGwscj0kXygwKSxpPSRfKG54KSxhPSRfKDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSx5PW5ldyBBcnJheShmKSxnPStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxtPU1hdGgubWluKG54LE1hdGgubWF4KC1ueCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSksdj1NYXRoLm1pbihNYXRoLmFicyhtKS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXYqKG08MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9eVtwW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh5W3RdLHlbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KG0tZipiKS9kOjA7czxmOysrcyxnPWwpYz1wW3NdLGw9ZysoKGg9eVtjXSk+MD9oKnU6MCkrYix5W2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpsLHBhZEFuZ2xlOnZ9O3JldHVybiB5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JF8oK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxvKTphfSxvfWR4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciB3eD1UeChweCk7ZnVuY3Rpb24ga3godCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBUeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcga3godChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBFeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShUeCh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBDeCgpe3JldHVybiBFeChteCgpLmN1cnZlKHd4KSl9ZnVuY3Rpb24gU3goKXt2YXIgdD12eCgpLmN1cnZlKHd4KSxlPXQuY3VydmUsbj10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsYT10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIEV4KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBFeChyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRXgoaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEV4KGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoVHgodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gQXgodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19a3gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgTXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIE54KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBEeCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gT3godCl7dmFyIGU9Tngsbj1EeCxyPXl4LGk9Z3gsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPU14LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVdpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokXygrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gQngodCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiBMeCh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIEl4KHQsZSxuLHIsaSl7dmFyIGE9QXgoZSxuKSxvPUF4KGUsbj0obitpKS8yKSxzPUF4KHIsbiksYz1BeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBSeCgpe3JldHVybiBPeChCeCl9ZnVuY3Rpb24gRngoKXtyZXR1cm4gT3goTHgpfWZ1bmN0aW9uIFB4KCl7dmFyIHQ9T3goSXgpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9Y29uc3Qgang9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS90eCk7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLG54KX19LFl4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19O3ZhciB6eD1NYXRoLnNxcnQoMS8zKSxVeD0yKnp4O2NvbnN0IHF4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvVXgpLHI9bip6eDt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19O3ZhciBIeD1NYXRoLnNpbih0eC8xMCkvTWF0aC5zaW4oNyp0eC8xMCksJHg9TWF0aC5zaW4obngvMTApKkh4LFd4PS1NYXRoLmNvcyhueC8xMCkqSHg7Y29uc3QgVng9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSkscj0keCpuLGk9V3gqbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgYT0xO2E8NTsrK2Epe3ZhciBvPW54KmEvNSxzPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7dC5saW5lVG8oYypuLC1zKm4pLHQubGluZVRvKHMqci1jKmksYypyK3MqaSl9dC5jbG9zZVBhdGgoKX19LEd4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUpLHI9LW4vMjt0LnJlY3QocixyLG4sbil9fTt2YXIgWHg9TWF0aC5zcXJ0KDMpO2NvbnN0IFp4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKlh4KSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC1YeCpuLC1uKSx0LmxpbmVUbyhYeCpuLC1uKSx0LmNsb3NlUGF0aCgpfX07dmFyIFF4PS0uNSxLeD1NYXRoLnNxcnQoMykvMixKeD0xL01hdGguc3FydCgxMiksdHc9MyooSngvMisxKTtjb25zdCBldz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3R3KSxyPW4vMixpPW4qSngsYT1yLG89bipKeCtuLHM9LWEsYz1vO3QubW92ZVRvKHIsaSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGMpLHQubGluZVRvKFF4KnItS3gqaSxLeCpyK1F4KmkpLHQubGluZVRvKFF4KmEtS3gqbyxLeCphK1F4Km8pLHQubGluZVRvKFF4KnMtS3gqYyxLeCpzK1F4KmMpLHQubGluZVRvKFF4KnIrS3gqaSxReCppLUt4KnIpLHQubGluZVRvKFF4KmErS3gqbyxReCpvLUt4KmEpLHQubGluZVRvKFF4KnMrS3gqYyxReCpjLUt4KnMpLHQuY2xvc2VQYXRoKCl9fTt2YXIgbnc9W2p4LFl4LHF4LEd4LFZ4LFp4LGV3XTtmdW5jdGlvbiBydygpe3ZhciB0PSRfKGp4KSxlPSRfKDY0KSxuPW51bGw7ZnVuY3Rpb24gcigpe3ZhciByO2lmKG58fChuPXI9V2koKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhuLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gbj1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOiRfKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKCt0KSxyKTplfSxyLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOnQscik6bn0scn1mdW5jdGlvbiBpdygpe31mdW5jdGlvbiBhdyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gb3codCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHN3KHQpe3JldHVybiBuZXcgb3codCl9ZnVuY3Rpb24gY3codCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV3KHQpe3JldHVybiBuZXcgY3codCl9ZnVuY3Rpb24gbHcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh3KHQpe3JldHVybiBuZXcgbHcodCl9ZnVuY3Rpb24gZncodCxlKXt0aGlzLl9iYXNpcz1uZXcgb3codCksdGhpcy5fYmV0YT1lfW93LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6YXcodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6YXcodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGN3LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OmF3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxsdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgbj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKG4scik6dGhpcy5fY29udGV4dC5tb3ZlVG8obixyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmF3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07Y29uc3QgZHc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgb3codCk6bmV3IGZ3KHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSk7ZnVuY3Rpb24gcHcodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB5dyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnB3KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpwdyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3QgZ3c9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgeXcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gbXcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fW13LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpwdyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3Qgdnc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgbXcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gYncodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWJ3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OnB3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBfdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBidyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiB4dyh0LGUsbil7dmFyIHI9dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+Sl8pe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPkpfKXt2YXIgdT0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKnUrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9sLG89KG8qdSt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2x9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxhLG8sdC5feDIsdC5feTIpfWZ1bmN0aW9uIHd3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9d3cucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp4dyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O2NvbnN0IGt3PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgd3codCxlKTpuZXcgeXcodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBUdyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR3LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6eHcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBFdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFR3KHQsZSk6bmV3IG13KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gQ3codCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1Ddy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6eHcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBTdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IEN3KHQsZSk6bmV3IGJ3KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gQXcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE13KHQpe3JldHVybiBuZXcgQXcodCl9ZnVuY3Rpb24gTncodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIER3KHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKE53KGEpK053KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gT3codCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIEJ3KHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBMdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSXcodCl7dGhpcy5fY29udGV4dD1uZXcgUncodCl9ZnVuY3Rpb24gUncodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ3KHQpe3JldHVybiBuZXcgTHcodCl9ZnVuY3Rpb24gUHcodCl7cmV0dXJuIG5ldyBJdyh0KX1mdW5jdGlvbiBqdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWXcodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1mdW5jdGlvbiB6dyh0KXtyZXR1cm4gbmV3IGp3KHQpfWZ1bmN0aW9uIFV3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBxdyh0KXtyZXR1cm4gbmV3IFV3KHQsLjUpfWZ1bmN0aW9uIEh3KHQpe3JldHVybiBuZXcgVXcodCwwKX1mdW5jdGlvbiAkdyh0KXtyZXR1cm4gbmV3IFV3KHQsMSl9ZnVuY3Rpb24gV3codCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihyPW8sbz10W2VbYV1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfWZ1bmN0aW9uIFZ3KHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBHdyh0LGUpe3JldHVybiB0W2VdfWZ1bmN0aW9uIFh3KCl7dmFyIHQ9JF8oW10pLGU9Vncsbj1XdyxyPUd3O2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9aS5sZW5ndGgsdT1zLmxlbmd0aCxsPW5ldyBBcnJheSh1KTtmb3IoYT0wO2E8dTsrK2Epe2Zvcih2YXIgaCxmPXNbYV0sZD1sW2FdPW5ldyBBcnJheShjKSxwPTA7cDxjOysrcClkW3BdPWg9WzAsK3IoaVtwXSxmLHAsaSldLGguZGF0YT1pW3BdO2Qua2V5PWZ9Zm9yKGE9MCxvPWUobCk7YTx1OysrYSlsW29bYV1dLmluZGV4PWE7cmV0dXJuIG4obCxvKSxsfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTokXyhNeC5jYWxsKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6JF8oK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9WdzoiZnVuY3Rpb24iPT10eXBlb2YgdD90OiRfKE14LmNhbGwodCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/V3c6dCxpKTpufSxpfWZ1bmN0aW9uIFp3KHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfVd3KHQsZSl9fWZ1bmN0aW9uIFF3KHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLHIsaSxhLG8scyxjPTAsdT10W2VbMF1dLmxlbmd0aDtjPHU7KytjKWZvcihhPW89MCxuPTA7bjxzOysrbikoaT0ocj10W2Vbbl1dW2NdKVsxXS1yWzBdKT4wPyhyWzBdPWEsclsxXT1hKz1pKTppPDA/KHJbMV09byxyWzBdPW8rPWkpOihyWzBdPTAsclsxXT1pKX1mdW5jdGlvbiBLdyh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO3I8YTsrK3Ipe2Zvcih2YXIgbz0wLHM9MDtvPG47KytvKXMrPXRbb11bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tcy8yfVd3KHQsZSl9fWZ1bmN0aW9uIEp3KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxXdyh0LGUpfX1mdW5jdGlvbiB0ayh0KXt2YXIgZT10Lm1hcChlayk7cmV0dXJuIFZ3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBlayh0KXtmb3IodmFyIGUsbj0tMSxyPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytuPGk7KShlPSt0W25dWzFdKT5hJiYoYT1lLHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gbmsodCl7dmFyIGU9dC5tYXAocmspO3JldHVybiBWdyh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gcmsodCl7Zm9yKHZhciBlLG49MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShlPSt0W3JdWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIGlrKHQpe3JldHVybiBuayh0KS5yZXZlcnNlKCl9ZnVuY3Rpb24gYWsodCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAocmspLGE9dGsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9ZnVuY3Rpb24gb2sodCl7cmV0dXJuIFZ3KHQpLnJldmVyc2UoKX1Bdy5wcm90b3R5cGU9e2FyZWFTdGFydDppdyxhcmVhRW5kOml3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LEx3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpCdyh0aGlzLHRoaXMuX3QwLE93KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxCdyh0aGlzLE93KHRoaXMsbj1Edyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6QncodGhpcyx0aGlzLl90MCxuPUR3KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKEl3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEx3LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7THcucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxSdy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxqdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1Zdyh0KSxpPVl3KGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxVdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgc2s9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsY2s9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06Z20oc2spO2NvbnN0IHVrPWNrO3ZhciBsaz0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9Om1tKHNrKTtjb25zdCBoaz1saztmdW5jdGlvbiBmayh0LGUsbil7dmFyIHI9bmV3IFduLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooZT0rZSxuPW51bGw9PW4/SG4oKTorbixyLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxyLnJlc3RhcnQoYSxpKz1lLG4pLHQobyl9KSxlLG4pLHIpfWZ1bmN0aW9uIGRrKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5ayh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBnaygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIG1rKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gdmsodCxlKXt2YXIgbj1lLHI9ZS5SLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLlI9ci5MLG4uUiYmKG4uUi5VPW4pLHIuTD1ufWZ1bmN0aW9uIGJrKHQsZSl7dmFyIG49ZSxyPWUuTCxpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5MPXIuUixuLkwmJihuLkwuVT1uKSxyLlI9bn1mdW5jdGlvbiBfayh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9Z2sucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpnayxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PV9rKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLG49dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxuPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPW4sZS5DPSEwLHQ9ZTtuJiZuLkM7KW49PT0ocj1uLlUpLkw/KGk9ci5SKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5SJiYodmsodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsYmsodGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5MJiYoYmsodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsdmsodGhpcyxyKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4scixpPXQuVSxhPXQuTCxvPXQuUjtpZihuPWE/bz9fayhvKTphOm8saT9pLkw9PT10P2kuTD1uOmkuUj1uOnRoaXMuXz1uLGEmJm8/KHI9bi5DLG4uQz10LkMsbi5MPWEsYS5VPW4sbiE9PW8/KGk9bi5VLG4uVT10LlUsdD1uLlIsaS5MPXQsbi5SPW8sby5VPW4pOihuLlU9aSxpPW4sdD1uLlIpKToocj10LkMsdD1uKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsdmsodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxiayh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSx2ayh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsYmsodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCx2ayh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxiayh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07Y29uc3QgeGs9Z2s7ZnVuY3Rpb24gd2sodCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sYT1Xay5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZUayhpLHQsZSxuKSxyJiZUayhpLGUsdCxyKSxIa1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxIa1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxpfWZ1bmN0aW9uIGtrKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBUayh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gRWsodCxlLG4scixpKXt2YXIgYSxvPXRbMF0scz10WzFdLGM9b1swXSx1PW9bMV0sbD0wLGg9MSxmPXNbMF0tYyxkPXNbMV0tdTtpZihhPWUtYyxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPXItYyxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihmPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1pZihhPW4tdSxkfHwhKGE+MCkpe2lmKGEvPWQsZDwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihkPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPWktdSxkfHwhKGE8MCkpe2lmKGEvPWQsZDwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihkPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4hKGw+MHx8aDwxKXx8KGw+MCYmKHRbMF09W2MrbCpmLHUrbCpkXSksaDwxJiYodFsxXT1bYytoKmYsdStoKmRdKSwhMCl9fX19fWZ1bmN0aW9uIENrKHQsZSxuLHIsaSl7dmFyIGE9dFsxXTtpZihhKXJldHVybiEwO3ZhciBvLHMsYz10WzBdLHU9dC5sZWZ0LGw9dC5yaWdodCxoPXVbMF0sZj11WzFdLGQ9bFswXSxwPWxbMV0seT0oaCtkKS8yLGc9KGYrcCkvMjtpZihwPT09Zil7aWYoeTxlfHx5Pj1yKXJldHVybjtpZihoPmQpe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1beSxuXTthPVt5LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxuKXJldHVybn1lbHNlIGM9W3ksaV07YT1beSxuXX19ZWxzZSBpZihzPWctKG89KGgtZCkvKHAtZikpKnksbzwtMXx8bz4xKWlmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsobi1zKS9vLG5dO2E9WyhpLXMpL28saV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bKGktcykvbyxpXTthPVsobi1zKS9vLG5dfWVsc2UgaWYoZjxwKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W2UsbyplK3NdO2E9W3IsbypyK3NdfWVsc2V7aWYoYyl7aWYoY1swXTxlKXJldHVybn1lbHNlIGM9W3IsbypyK3NdO2E9W2UsbyplK3NdfXJldHVybiB0WzBdPWMsdFsxXT1hLCEwfWZ1bmN0aW9uIFNrKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gQWsodCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIE1rKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgTmssRGs9W107ZnVuY3Rpb24gT2soKXttayh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gQmsodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxhPW4uc2l0ZTtpZihyIT09YSl7dmFyIG89aVswXSxzPWlbMV0sYz1yWzBdLW8sdT1yWzFdLXMsbD1hWzBdLW8saD1hWzFdLXMsZj0yKihjKmgtdSpsKTtpZighKGY+PS1Haykpe3ZhciBkPWMqYyt1KnUscD1sKmwraCpoLHk9KGgqZC11KnApL2YsZz0oYypwLWwqZCkvZixtPURrLnBvcCgpfHxuZXcgT2s7bS5hcmM9dCxtLnNpdGU9aSxtLng9eStvLG0ueT0obS5jeT1nK3MpK01hdGguc3FydCh5KnkrZypnKSx0LmNpcmNsZT1tO2Zvcih2YXIgdj1udWxsLGI9JGsuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn0kay5pbnNlcnQodixtKSx2fHwoTms9bSl9fX19ZnVuY3Rpb24gTGsodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KE5rPWUuTiksJGsucmVtb3ZlKGUpLERrLnB1c2goZSksbWsoZSksdC5jaXJjbGU9bnVsbCl9dmFyIElrPVtdO2Z1bmN0aW9uIFJrKCl7bWsodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEZrKHQpe3ZhciBlPUlrLnBvcCgpfHxuZXcgUms7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gUGsodCl7TGsodCkscWsucmVtb3ZlKHQpLElrLnB1c2godCksbWsodCl9ZnVuY3Rpb24gamsodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sYT10LlAsbz10Lk4scz1bdF07UGsodCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKG4tYy5jaXJjbGUueCk8VmsmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPFZrOylhPWMuUCxzLnVuc2hpZnQoYyksUGsoYyksYz1hO3MudW5zaGlmdChjKSxMayhjKTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxWayYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8Vms7KW89dS5OLHMucHVzaCh1KSxQayh1KSx1PW87cy5wdXNoKHUpLExrKHUpO3ZhciBsLGg9cy5sZW5ndGg7Zm9yKGw9MTtsPGg7KytsKXU9c1tsXSxjPXNbbC0xXSxUayh1LmVkZ2UsYy5zaXRlLHUuc2l0ZSxpKTtjPXNbMF0sKHU9c1toLTFdKS5lZGdlPXdrKGMuc2l0ZSx1LnNpdGUsbnVsbCxpKSxCayhjKSxCayh1KX1mdW5jdGlvbiBZayh0KXtmb3IodmFyIGUsbixyLGksYT10WzBdLG89dFsxXSxzPXFrLl87czspaWYoKHI9emsocyxvKS1hKT5WaylzPXMuTDtlbHNle2lmKCEoKGk9YS1VayhzLG8pKT5Waykpe3I+LVZrPyhlPXMuUCxuPXMpOmk+LVZrPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7SGtbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgYz1Gayh0KTtpZihxay5pbnNlcnQoZSxjKSxlfHxuKXtpZihlPT09bilyZXR1cm4gTGsoZSksbj1GayhlLnNpdGUpLHFrLmluc2VydChjLG4pLGMuZWRnZT1uLmVkZ2U9d2soZS5zaXRlLGMuc2l0ZSksQmsoZSksdm9pZCBCayhuKTtpZihuKXtMayhlKSxMayhuKTt2YXIgdT1lLnNpdGUsbD11WzBdLGg9dVsxXSxmPXRbMF0tbCxkPXRbMV0taCxwPW4uc2l0ZSx5PXBbMF0tbCxnPXBbMV0taCxtPTIqKGYqZy1kKnkpLHY9ZipmK2QqZCxiPXkqeStnKmcsXz1bKGcqdi1kKmIpL20rbCwoZipiLXkqdikvbStoXTtUayhuLmVkZ2UsdSxwLF8pLGMuZWRnZT13ayh1LHQsbnVsbCxfKSxuLmVkZ2U9d2sodCxwLG51bGwsXyksQmsoZSksQmsobil9ZWxzZSBjLmVkZ2U9d2soZS5zaXRlLGMuc2l0ZSl9fWZ1bmN0aW9uIHprKHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sYT1pLWU7aWYoIWEpcmV0dXJuIHI7dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7dmFyIHM9KG49by5zaXRlKVswXSxjPW5bMV0sdT1jLWU7aWYoIXUpcmV0dXJuIHM7dmFyIGw9cy1yLGg9MS9hLTEvdSxmPWwvdTtyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKGwqbC8oLTIqdSktYyt1LzIraS1hLzIpKSkvaCtyOihyK3MpLzJ9ZnVuY3Rpb24gVWsodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gemsobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBxayxIaywkayxXayxWaz0xZS02LEdrPTFlLTEyO2Z1bmN0aW9uIFhrKHQsZSxuKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS10WzFdKS0odFswXS1lWzBdKSooblsxXS10WzFdKX1mdW5jdGlvbiBaayh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiBRayh0LGUpe3ZhciBuLHIsaSxhPXQuc29ydChaaykucG9wKCk7Zm9yKFdrPVtdLEhrPW5ldyBBcnJheSh0Lmxlbmd0aCkscWs9bmV3IHhrLCRrPW5ldyB4azs7KWlmKGk9TmssYSYmKCFpfHxhWzFdPGkueXx8YVsxXT09PWkueSYmYVswXTxpLngpKWFbMF09PT1uJiZhWzFdPT09cnx8KFlrKGEpLG49YVswXSxyPWFbMV0pLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2prKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scixpPTAsYT1Iay5sZW5ndGg7aTxhOysraSlpZigodD1Ia1tpXSkmJihyPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgbz1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKW9bbl09bixzW25dPVNrKHQsV2tbZVtuXV0pO2ZvcihvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pKSxuPTA7bjxyOysrbilzW25dPWVbb1tuXV07Zm9yKG49MDtuPHI7KytuKWVbbl09c1tuXX19KCksZSl7dmFyIG89K2VbMF1bMF0scz0rZVswXVsxXSxjPStlWzFdWzBdLHU9K2VbMV1bMV07IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaSxhPVdrLmxlbmd0aDthLS07KUNrKGk9V2tbYV0sdCxlLG4scikmJkVrKGksdCxlLG4scikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPlZrfHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPlZrKXx8ZGVsZXRlIFdrW2FdfShvLHMsYyx1KSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZCxwLHksZz1Iay5sZW5ndGgsbT0hMDtmb3IoaT0wO2k8ZzsrK2kpaWYoYT1Ia1tpXSl7Zm9yKG89YS5zaXRlLHM9KGM9YS5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KVdrW2Nbc11dfHxjLnNwbGljZShzLDEpO2ZvcihzPTAsdT1jLmxlbmd0aDtzPHU7KXA9KGQ9TWsoYSxXa1tjW3NdXSkpWzBdLHk9ZFsxXSxoPShsPUFrKGEsV2tbY1srK3MldV1dKSlbMF0sZj1sWzFdLChNYXRoLmFicyhwLWgpPlZrfHxNYXRoLmFicyh5LWYpPlZrKSYmKGMuc3BsaWNlKHMsMCxXay5wdXNoKGtrKG8sZCxNYXRoLmFicyhwLXQpPFZrJiZyLXk+Vms/W3QsTWF0aC5hYnMoaC10KTxWaz9mOnJdOk1hdGguYWJzKHktcik8VmsmJm4tcD5Waz9bTWF0aC5hYnMoZi1yKTxWaz9oOm4scl06TWF0aC5hYnMocC1uKTxWayYmeS1lPlZrP1tuLE1hdGguYWJzKGgtbik8Vms/ZjplXTpNYXRoLmFicyh5LWUpPFZrJiZwLXQ+Vms/W01hdGguYWJzKGYtZSk8Vms/aDp0LGVdOm51bGwpKS0xKSwrK3UpO3UmJihtPSExKX1pZihtKXt2YXIgdixiLF8seD0xLzA7Zm9yKGk9MCxtPW51bGw7aTxnOysraSkoYT1Ia1tpXSkmJihfPSh2PShvPWEuc2l0ZSlbMF0tdCkqdisoYj1vWzFdLWUpKmIpPHgmJih4PV8sbT1hKTtpZihtKXt2YXIgdz1bdCxlXSxrPVt0LHJdLFQ9W24scl0sRT1bbixlXTttLmhhbGZlZGdlcy5wdXNoKFdrLnB1c2goa2sobz1tLnNpdGUsdyxrKSktMSxXay5wdXNoKGtrKG8sayxUKSktMSxXay5wdXNoKGtrKG8sVCxFKSktMSxXay5wdXNoKGtrKG8sRSx3KSktMSl9fWZvcihpPTA7aTxnOysraSkoYT1Ia1tpXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBIa1tpXSl9KG8scyxjLHUpfXRoaXMuZWRnZXM9V2ssdGhpcy5jZWxscz1Iayxxaz0kaz1Xaz1Iaz1udWxsfWZ1bmN0aW9uIEtrKCl7dmFyIHQ9cGssZT15ayxuPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IFFrKHIubWFwKChmdW5jdGlvbihuLGkpe3ZhciBhPVtNYXRoLnJvdW5kKHQobixpLHIpL1ZrKSpWayxNYXRoLnJvdW5kKGUobixpLHIpL1ZrKSpWa107cmV0dXJuIGEuaW5kZXg9aSxhLmRhdGE9bixhfSkpLG4pfXJldHVybiByLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnBvbHlnb25zKCl9LHIubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkubGlua3MoKX0sci50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkudHJpYW5nbGVzKCl9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmRrKCtlKSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaygrdCkscik6ZX0sci5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLHIpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLHIpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0scn1mdW5jdGlvbiBKayh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdFQodCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiBlVCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59UWsucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRayxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBBayhlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4scil7aWYoYT0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxhLG8scz1uLnNpdGUsYz0tMSx1PWVbaVthLTFdXSxsPXUubGVmdD09PXM/dS5yaWdodDp1LmxlZnQ7KytjPGE7KW89bCxsPSh1PWVbaVtjXV0pLmxlZnQ9PT1zP3UucmlnaHQ6dS5sZWZ0LG8mJmwmJnI8by5pbmRleCYmcjxsLmluZGV4JiZYayhzLG8sbCk8MCYmdC5wdXNoKFtzLmRhdGEsby5kYXRhLGwuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fSxlVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVULHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBlVCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IGVUKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIG5UPW5ldyBlVCgxLDAsMCk7ZnVuY3Rpb24gclQodCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBuVDtyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gaVQoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhVCgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gb1QoKXtyZXR1cm4hbGUuY3RybEtleSYmIWxlLmJ1dHRvbn1mdW5jdGlvbiBzVCgpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBjVCgpe3JldHVybiB0aGlzLl9fem9vbXx8blR9ZnVuY3Rpb24gdVQoKXtyZXR1cm4tbGUuZGVsdGFZKigxPT09bGUuZGVsdGFNb2RlPy4wNTpsZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBsVCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBoVCh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9ZnVuY3Rpb24gZlQoKXt2YXIgdCxlLG49b1Qscj1zVCxpPWhULGE9dVQsbz1sVCxzPVswLDEvMF0sYz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx1PTI1MCxsPU9wLGg9ZnQoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGY9NTAwLGQ9MDtmdW5jdGlvbiBwKHQpe3QucHJvcGVydHkoIl9fem9vbSIsY1QpLm9uKCJ3aGVlbC56b29tIix4KS5vbigibW91c2Vkb3duLnpvb20iLHcpLm9uKCJkYmxjbGljay56b29tIixrKS5maWx0ZXIobykub24oInRvdWNoc3RhcnQuem9vbSIsVCkub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixDKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24geSh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IGVUKGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIHI9ZVswXS1uWzBdKnQuayxpPWVbMV0tblsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgZVQodC5rLHIsaSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB2KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7Yih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1hcmd1bWVudHMsYT1iKHQsaSksbz1yLmFwcGx5KHQsaSkscz1udWxsPT1uP20obyk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LGkpOm4sYz1NYXRoLm1heChvWzFdWzBdLW9bMF1bMF0sb1sxXVsxXS1vWzBdWzFdKSx1PXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LGkpOmUsZj1sKHUuaW52ZXJ0KHMpLmNvbmNhdChjL3UuayksaC5pbnZlcnQocykuY29uY2F0KGMvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWYodCksbj1jL2VbMl07dD1uZXcgZVQobixzWzBdLWVbMF0qbixzWzFdLWVbMV0qbil9YS56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIGIodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IF8odCxlKX1mdW5jdGlvbiBfKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1yLmFwcGx5KHQsZSksdGhpcy50YXBzPTB9ZnVuY3Rpb24geCgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1iKHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLHI9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLG89Qm4odGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09b1swXSYmdC5tb3VzZVswXVsxXT09PW9bMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09bykpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PXIpcmV0dXJuO3QubW91c2U9W28sZS5pbnZlcnQobyldLGFyKHRoaXMpLHQuc3RhcnQoKX1hVCgpLHQud2hlZWw9c2V0VGltZW91dCh1LDE1MCksdC56b29tKCJtb3VzZSIsaShnKHkoZSxyKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGMpKX1mdW5jdGlvbiB1KCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIHcoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PWIodGhpcyxhcmd1bWVudHMsITApLHI9VGUobGUudmlldykub24oIm1vdXNlbW92ZS56b29tIix1LCEwKS5vbigibW91c2V1cC56b29tIixsLCEwKSxhPUJuKHRoaXMpLG89bGUuY2xpZW50WCxzPWxlLmNsaWVudFk7U2UobGUudmlldyksaVQoKSx0Lm1vdXNlPVthLHRoaXMuX196b29tLmludmVydChhKV0sYXIodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIHUoKXtpZihhVCgpLCF0Lm1vdmVkKXt2YXIgZT1sZS5jbGllbnRYLW8sbj1sZS5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPmR9dC56b29tKCJtb3VzZSIsaShnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1Cbih0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LGMpKX1mdW5jdGlvbiBsKCl7ci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxBZShsZS52aWV3LHQubW92ZWQpLGFUKCksdC5lbmQoKX19ZnVuY3Rpb24gaygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPUJuKHRoaXMpLGE9dC5pbnZlcnQoZSksbz10LmsqKGxlLnNoaWZ0S2V5Py41OjIpLHM9aShnKHkodCxvKSxlLGEpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGMpO2FUKCksdT4wP1RlKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih1KS5jYWxsKHYscyxlKTpUZSh0aGlzKS5jYWxsKHAudHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBUKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLHIsaSxhLG89bGUudG91Y2hlcyxzPW8ubGVuZ3RoLGM9Yih0aGlzLGFyZ3VtZW50cyxsZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKTtmb3IoaVQoKSxyPTA7cjxzOysrcilhPVthPU9uKHRoaXMsbywoaT1vW3JdKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoYSksaS5pZGVudGlmaWVyXSxjLnRvdWNoMD9jLnRvdWNoMXx8Yy50b3VjaDBbMl09PT1hWzJdfHwoYy50b3VjaDE9YSxjLnRhcHM9MCk6KGMudG91Y2gwPWEsZT0hMCxjLnRhcHM9MSshIXQpO3QmJih0PWNsZWFyVGltZW91dCh0KSksZSYmKGMudGFwczwyJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGYpKSxhcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89Yih0aGlzLGFyZ3VtZW50cykscz1sZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2ZvcihhVCgpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upcj1Pbih0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSxwPShwPWZbMF0tbFswXSkqcCsocD1mWzFdLWxbMV0pKnAsbT0obT1kWzBdLWhbMF0pKm0rKG09ZFsxXS1oWzFdKSptO249eShuLE1hdGguc3FydChwL20pKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKGcobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gQygpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9Yih0aGlzLGFyZ3VtZW50cyksaT1sZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihpVCgpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksZiksdD0wO3Q8YTsrK3Qpbj1pW3RdLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7aWYoci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDApci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTtlbHNlIGlmKHIuZW5kKCksMj09PXIudGFwcyl7dmFyIG89VGUodGhpcykub24oImRibGNsaWNrLnpvb20iKTtvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O3IucHJvcGVydHkoIl9fem9vbSIsY1QpLHQhPT1yP3YodCxlLG4pOnIuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0scC5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtwLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LHAuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7cC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLG89bnVsbD09bj9tKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1hLmludmVydChvKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIGkoZyh5KGEsdSksbyxzKSx0LGMpfSksbil9LHAudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe3AudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyl9KSl9LHAudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sYSl7cC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLHM9bnVsbD09YT9tKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE7cmV0dXJuIGkoblQudHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxjKX0pLGEpfSxfLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtnZShuZXcgdFQocCx0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxwLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKaygrdCkscCk6YX0scC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKayghIXQpLHApOm59LHAudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmsoISF0KSxwKTpvfSxwLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkprKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxwKTpyfSxwLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0scCk6W3NbMF0sc1sxXV19LHAudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjWzBdWzBdPSt0WzBdWzBdLGNbMV1bMF09K3RbMV1bMF0sY1swXVsxXT0rdFswXVsxXSxjWzFdWzFdPSt0WzFdWzFdLHApOltbY1swXVswXSxjWzBdWzFdXSxbY1sxXVswXSxjWzFdWzFdXV19LHAuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscCk6aX0scC5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxwKTp1fSxwLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQscCk6bH0scC5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9wOnR9LHAuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0odD0rdCkqdCxwKTpNYXRoLnNxcnQoZCl9LHB9clQucHJvdG90eXBlPWVULnByb3RvdHlwZX0sNjgxOih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNTc0KSxsYXlvdXQ6big4MTIzKSxkZWJ1ZzpuKDc1NzApLHV0aWw6e3RpbWU6bigxMTM4KS50aW1lLG5vdGltZTpuKDExMzgpLm5vdGltZX0sdmVyc2lvbjpuKDgxNzcpfX0sMTIwNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDQwNzkpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJncmVlZHkiPT09dC5ncmFwaCgpLmFjeWNsaWNlcj9pKHQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkud2VpZ2h0fX0odCkpOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49e30saT17fTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gYShvKXtyLmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKG8pLChmdW5jdGlvbih0KXtyLmhhcyhuLHQudyk/ZS5wdXNoKHQpOmEodC53KX0pKSxkZWxldGUgbltvXSl9KSksZX0odCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTt0LnJlbW92ZUVkZ2UoZSksbi5mb3J3YXJkTmFtZT1lLm5hbWUsbi5yZXZlcnNlZD0hMCx0LnNldEVkZ2UoZS53LGUudixuLHIudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciByPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixyKX19KSl9fX0sMTEzMzoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixyLGEsbyl7dmFyIHM9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6ZX0sYz1hW2VdW28tMV0sdT1pLmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHMsbik7YVtlXVtvXT11LHQuc2V0UGFyZW50KHUsciksYyYmdC5zZXRFZGdlKGMsdSx7d2VpZ2h0OjF9KX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24gZShuKXt2YXIgaT10LmNoaWxkcmVuKG4pLG89dC5ub2RlKG4pO2lmKGkubGVuZ3RoJiZyLmZvckVhY2goaSxlKSxyLmhhcyhvLCJtaW5SYW5rIikpe28uYm9yZGVyTGVmdD1bXSxvLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgcz1vLm1pblJhbmssYz1vLm1heFJhbmsrMTtzPGM7KytzKWEodCwiYm9yZGVyTGVmdCIsIl9ibCIsbixvLHMpLGEodCwiYm9yZGVyUmlnaHQiLCJfYnIiLG4sbyxzKX19KSl9fSwzMjU4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCksImxyIiE9PWUmJiJybCIhPT1lfHwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cyh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMscyksci5oYXMobiwieCIpJiZzKG4pfSkpfSh0KSxpKHQpKX19fSw3ODIyOnQ9PntmdW5jdGlvbiBlKCl7dmFyIHQ9e307dC5fbmV4dD10Ll9wcmV2PXQsdGhpcy5fc2VudGluZWw9dH1mdW5jdGlvbiBuKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gcih0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX10LmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VudGluZWwsZT10Ll9wcmV2O2lmKGUhPT10KXJldHVybiBuKGUpLGV9LGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmbih0KSx0Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj10LGUuX25leHQ9dCx0Ll9wcmV2PWV9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5fc2VudGluZWwsbj1lLl9wcmV2O24hPT1lOyl0LnB1c2goSlNPTi5zdHJpbmdpZnkobixyKSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifX0sNzU3MDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDU3NCkuR3JhcGg7dC5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPW5ldyBhKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtuLnNldE5vZGUoZSx7bGFiZWw6ZX0pLG4uc2V0UGFyZW50KGUsImxheWVyIit0Lm5vZGUoZSkucmFuayl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7bi5zZXRFZGdlKHQudix0Lncse30sdC5uYW1lKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXt2YXIgaT0ibGF5ZXIiK2U7bi5zZXROb2RlKGkse3Jhbms6InNhbWUifSksci5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19fSw1NzQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDQwNzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNiksaT1uKDU3NCkuR3JhcGgsYT1uKDc4MjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgaSxvPTAscz0wO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciByPW4uZWRnZSh0LnYsdC53KXx8MCxpPWUodCksYT1yK2k7bi5zZXRFZGdlKHQudix0LncsYSkscz1NYXRoLm1heChzLG4ubm9kZSh0LnYpLm91dCs9aSksbz1NYXRoLm1heChvLG4ubm9kZSh0LncpLmluKz1pKX0pKTt2YXIgdT1yLnJhbmdlKHMrbyszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhfSkpLGw9bysxO3JldHVybiByLmZvckVhY2gobi5ub2RlcygpLChmdW5jdGlvbih0KXtjKHUsbCxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6dSx6ZXJvSWR4Omx9fSh0LGV8fG8pLHU9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpPVtdLGE9ZVtlLmxlbmd0aC0xXSxvPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSw4MTIzOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMTIwNyksYT1uKDU5OTUpLG89big4MDkzKSxzPW4oMTEzOCkubm9ybWFsaXplUmFua3MsYz1uKDQyMTkpLHU9bigxMTM4KS5yZW1vdmVFbXB0eVJhbmtzLGw9bigyOTgxKSxoPW4oMTEzMyksZj1uKDMyNTgpLGQ9bigzNDA4KSxwPW4oNzg3MykseT1uKDExMzgpLGc9big1NzQpLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWUmJmUuZGVidWdUaW1pbmc/eS50aW1lOnkubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bmV3IGcoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxuPUModC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChyLm1lcmdlKHt9LHYsRShuLG0pLHIucGljayhuLGIpKSksci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9Qyh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHIuZGVmYXVsdHMoRShpLF8pLHgpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sci5tZXJnZSh7fSxrLEUoaSx3KSxyLnBpY2soaSxUKSkpfSkpLGV9KHQpfSkpO24oIiAgcnVuTGF5b3V0IiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5lZGdlKG4pO3IubWlubGVuKj0yLCJjIiE9PXIubGFiZWxwb3MudG9Mb3dlckNhc2UoKSYmKCJUQiI9PT1lLnJhbmtkaXJ8fCJCVCI9PT1lLnJhbmtkaXI/ci53aWR0aCs9ci5sYWJlbG9mZnNldDpyLmhlaWdodCs9ci5sYWJlbG9mZnNldCl9KSl9KHQpfSkpLGUoIiAgICByZW1vdmVTZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciBuPXQubm9kZShlLnYpO24uc2VsZkVkZ2VzfHwobi5zZWxmRWRnZXM9W10pLG4uc2VsZkVkZ2VzLnB1c2goe2UsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pKX0odCl9KSksZSgiICAgIGFjeWNsaWMiLChmdW5jdGlvbigpe2kucnVuKHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXtsLnJ1bih0KX0pKSxlKCIgICAgcmFuayIsKGZ1bmN0aW9uKCl7byh5LmFzTm9uQ29tcG91bmRHcmFwaCh0KSl9KSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi53aWR0aCYmbi5oZWlnaHQpe3ZhciByPXQubm9kZShlLnYpLGk9e3Jhbms6KHQubm9kZShlLncpLnJhbmstci5yYW5rKS8yK3IucmFuayxlfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgbT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdj17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sXz1bIndpZHRoIiwiaGVpZ2h0Il0seD17d2lkdGg6MCxoZWlnaHQ6MH0sdz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sVD1bImxhYmVscG9zIl07ZnVuY3Rpb24gRSh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSw4NDM2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmVEZWVwOm4oMzYxKSxjb25zdGFudDpuKDU3MDMpLGRlZmF1bHRzOm4oMTc0NyksZWFjaDpuKDYwNzMpLGZpbHRlcjpuKDMxMDUpLGZpbmQ6bigzMzExKSxmbGF0dGVuOm4oNTU2NCksZm9yRWFjaDpuKDQ0ODYpLGZvckluOm4oMjYyMCksaGFzOm4oODcyMSksaXNVbmRlZmluZWQ6bigyMzUzKSxsYXN0Om4oOTI4KSxtYXA6big1MTYxKSxtYXBWYWx1ZXM6big2NjA0KSxtYXg6big2MTYyKSxtZXJnZTpuKDM4NTcpLG1pbjpuKDM2MzIpLG1pbkJ5Om4oMjc2Miksbm93Om4oNzc3MSkscGljazpuKDk3MjIpLHJhbmdlOm4oNjAyNikscmVkdWNlOm4oNDA2MSksc29ydEJ5Om4oOTczNCksdW5pcXVlSWQ6bigzOTU1KSx2YWx1ZXM6bigyNjI4KSx6aXBPYmplY3Q6big3Mjg3KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sMjk4MToodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixvLHMsYyx1KXt2YXIgbD10LmNoaWxkcmVuKHUpO2lmKGwubGVuZ3RoKXt2YXIgaD1pLmFkZEJvcmRlck5vZGUodCwiX2J0IiksZj1pLmFkZEJvcmRlck5vZGUodCwiX2JiIiksZD10Lm5vZGUodSk7dC5zZXRQYXJlbnQoaCx1KSxkLmJvcmRlclRvcD1oLHQuc2V0UGFyZW50KGYsdSksZC5ib3JkZXJCb3R0b209ZixyLmZvckVhY2gobCwoZnVuY3Rpb24ocil7YSh0LGUsbixvLHMsYyxyKTt2YXIgaT10Lm5vZGUociksbD1pLmJvcmRlclRvcD9pLmJvcmRlclRvcDpyLGQ9aS5ib3JkZXJCb3R0b20/aS5ib3JkZXJCb3R0b206cixwPWkuYm9yZGVyVG9wP286MipvLHk9bCE9PWQ/MTpzLWNbdV0rMTt0LnNldEVkZ2UoaCxsLHt3ZWlnaHQ6cCxtaW5sZW46eSxuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShkLGYse3dlaWdodDpwLG1pbmxlbjp5LG5lc3RpbmdFZGdlOiEwfSl9KSksdC5wYXJlbnQodSl8fHQuc2V0RWRnZShlLGgse3dlaWdodDowLG1pbmxlbjpzK2NbdV19KX1lbHNlIHUhPT1lJiZ0LnNldEVkZ2UoZSx1LHt3ZWlnaHQ6MCxtaW5sZW46bn0pfXQuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKSxlW2ldPWF9cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKHQpe24odCwxKX0pKSxlfSh0KSxvPXIubWF4KHIudmFsdWVzKG4pKS0xLHM9MipvKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm1pbmxlbio9c30pKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gci5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0odCkrMTtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihyKXthKHQsZSxzLGMsbyxuLHIpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1zfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTt0LnJlbW92ZU5vZGUoZS5uZXN0aW5nUm9vdCksZGVsZXRlIGUubmVzdGluZ1Jvb3Qsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm5lc3RpbmdFZGdlJiZ0LnJlbW92ZUVkZ2UoZSl9KSl9fX0sNTk5NToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDExMzgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyx1PXQubm9kZShjKS5yYW5rLGw9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYodSE9PXMrMSl7Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8dTsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSxsKSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sbCl9fSh0LGUpfSkpfSx1bmRvOmZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKGUpe3ZhciBuLHI9dC5ub2RlKGUpLGk9ci5lZGdlTGFiZWw7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosaSk7ci5kdW1teTspbj10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLGkucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksImVkZ2UtbGFiZWwiPT09ci5kdW1teSYmKGkueD1yLngsaS55PXIueSxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpLGU9bixyPXQubm9kZShlKX0pKX19fSw1MDkzOih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYT17fTtyLmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciByLG8scz10LnBhcmVudChuKTtzOyl7aWYoKHI9dC5wYXJlbnQocykpPyhvPWFbcl0sYVtyXT1zKToobz1pLGk9cyksbyYmbyE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKG8scyk7cz1yfX0pKX19LDU0Mzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuaW5FZGdlcyhlKTtpZihuLmxlbmd0aCl7dmFyIGk9ci5yZWR1Y2UobiwoZnVuY3Rpb24oZSxuKXt2YXIgcj10LmVkZ2UobiksaT10Lm5vZGUobi52KTtyZXR1cm57c3VtOmUuc3VtK3Iud2VpZ2h0Kmkub3JkZXIsd2VpZ2h0OmUud2VpZ2h0K3Iud2VpZ2h0fX0pLHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmUsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fXJldHVybnt2OmV9fSkpfX0sMzEyODoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSw2NjMwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9ci56aXBPYmplY3QobixyLm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxhPXIuZmxhdHRlbihyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gci5zb3J0Qnkoci5tYXAodC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJue3BvczppW2Uud10sd2VpZ2h0OnQuZWRnZShlKS53ZWlnaHR9fSkpLCJwb3MiKX0pKSwhMCksbz0xO288bi5sZW5ndGg7KW88PD0xO3ZhciBzPTIqby0xO28tPTE7dmFyIGM9ci5tYXAobmV3IEFycmF5KHMpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLHU9MDtyZXR1cm4gci5mb3JFYWNoKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztjW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPWNbZSsxXSksY1tlPWUtMT4+MV0rPXQud2VpZ2h0O3UrPXQud2VpZ2h0Km59KSkpLHV9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj0xO3I8ZS5sZW5ndGg7KytyKW4rPWkodCxlW3ItMV0sZVtyXSk7cmV0dXJuIG59fSwzNDA4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMjU4OCksYT1uKDY2MzApLG89bigxMDI2KSxzPW4oMzEyOCksYz1uKDUwOTMpLHU9big1NzQpLkdyYXBoLGw9bigxMTM4KTtmdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHModCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1uZXcgdTtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGk9dC5ncmFwaCgpLnJvb3QsYT1vKHQsaSxuLGUpO3IuZm9yRWFjaChhLnZzLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpLGModCxuLGEudnMpfSkpfWZ1bmN0aW9uIGQodCxlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSl9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWwubWF4UmFuayh0KSxuPWgodCxyLnJhbmdlKDEsZSsxKSwiaW5FZGdlcyIpLG89aCh0LHIucmFuZ2UoZS0xLC0xLC0xKSwib3V0RWRnZXMiKSxzPWkodCk7ZCh0LHMpO2Zvcih2YXIgYyx1PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAseT0wO3k8NDsrK3AsKyt5KXtmKHAlMj9uOm8scCU0Pj0yKSxzPWwuYnVpbGRMYXllck1hdHJpeCh0KTt2YXIgZz1hKHQscyk7Zzx1JiYoeT0wLGM9ci5jbG9uZURlZXAocyksdT1nKX1kKHQsYyl9fSwyNTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSksbz1yLnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIHIuZm9yRWFjaChvLChmdW5jdGlvbiBuKGkpe2lmKCFyLmhhcyhlLGkpKXtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfX0pKSxhfX0sOTU2NzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTtyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fChpLmJhcnljZW50ZXI9dC5iYXJ5Y2VudGVyLGkud2VpZ2h0PXQud2VpZ2h0KX0pKSxyLmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgZT1uW3Qudl0saT1uW3Qud107ci5pc1VuZGVmaW5lZChlKXx8ci5pc1VuZGVmaW5lZChpKXx8KGkuaW5kZWdyZWUrKyxlLm91dC5wdXNoKG5bdC53XSkpfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGksYSxvO2UubWVyZ2VkfHwoci5pc1VuZGVmaW5lZChlLmJhcnljZW50ZXIpfHxyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGk9ZSxhPTAsbz0wLChuPXQpLndlaWdodCYmKGErPW4uYmFyeWNlbnRlcipuLndlaWdodCxvKz1uLndlaWdodCksaS53ZWlnaHQmJihhKz1pLmJhcnljZW50ZXIqaS53ZWlnaHQsbys9aS53ZWlnaHQpLG4udnM9aS52cy5jb25jYXQobi52cyksbi5iYXJ5Y2VudGVyPWEvbyxuLndlaWdodD1vLG4uaT1NYXRoLm1pbihpLmksbi5pKSxpLm1lcmdlZD0hMCl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciBhPXQucG9wKCk7ZS5wdXNoKGEpLHIuZm9yRWFjaChhLmluLnJldmVyc2UoKSxuKGEpKSxyLmZvckVhY2goYS5vdXQsaShhKSl9cmV0dXJuIHIubWFwKHIuZmlsdGVyKGUsKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1lcmdlZH0pKSwoZnVuY3Rpb24odCl7cmV0dXJuIHIucGljayh0LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pKX0oci5maWx0ZXIobiwoZnVuY3Rpb24odCl7cmV0dXJuIXQuaW5kZWdyZWV9KSkpfX0sMTAyNjoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTQzOSksYT1uKDk1NjcpLG89big3MzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4scyxjKXt2YXIgdT1lLmNoaWxkcmVuKG4pLGw9ZS5ub2RlKG4pLGg9bD9sLmJvcmRlckxlZnQ6dm9pZCAwLGY9bD9sLmJvcmRlclJpZ2h0OnZvaWQgMCxkPXt9O2gmJih1PXIuZmlsdGVyKHUsKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aCYmdCE9PWZ9KSkpO3ZhciBwPWkoZSx1KTtyLmZvckVhY2gocCwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIGk9dChlLG4udixzLGMpO2Rbbi52XT1pLHIuaGFzKGksImJhcnljZW50ZXIiKSYmKGE9bixvPWksci5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpPyhhLmJhcnljZW50ZXI9by5iYXJ5Y2VudGVyLGEud2VpZ2h0PW8ud2VpZ2h0KTooYS5iYXJ5Y2VudGVyPShhLmJhcnljZW50ZXIqYS53ZWlnaHQrby5iYXJ5Y2VudGVyKm8ud2VpZ2h0KS8oYS53ZWlnaHQrby53ZWlnaHQpLGEud2VpZ2h0Kz1vLndlaWdodCkpfXZhciBhLG99KSk7dmFyIHk9YShwLHMpOyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt0LnZzPXIuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0oeSxkKTt2YXIgZz1vKHksYyk7aWYoaCYmKGcudnM9ci5mbGF0dGVuKFtoLGcudnMsZl0sITApLGUucHJlZGVjZXNzb3JzKGgpLmxlbmd0aCkpe3ZhciBtPWUubm9kZShlLnByZWRlY2Vzc29ycyhoKVswXSksdj1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoZilbMF0pO3IuaGFzKGcsImJhcnljZW50ZXIiKXx8KGcuYmFyeWNlbnRlcj0wLGcud2VpZ2h0PTApLGcuYmFyeWNlbnRlcj0oZy5iYXJ5Y2VudGVyKmcud2VpZ2h0K20ub3JkZXIrdi5vcmRlcikvKGcud2VpZ2h0KzIpLGcud2VpZ2h0Kz0yfXJldHVybiBnfX0sNzMwNDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpO2UubGVuZ3RoJiYoaT1yLmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSkscz1vLmxocyxjPXIuc29ydEJ5KG8ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLHU9W10sbD0wLGg9MCxmPTA7cy5zb3J0KChuPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpuP2UuaS10Lmk6dC5pLWUuaX0pKSxmPWEodSxjLGYpLHIuZm9yRWFjaChzLChmdW5jdGlvbih0KXtmKz10LnZzLmxlbmd0aCx1LnB1c2godC52cyksbCs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGgrPXQud2VpZ2h0LGY9YSh1LGMsZil9KSk7dmFyIGQ9e3ZzOnIuZmxhdHRlbih1LCEwKX07cmV0dXJuIGgmJihkLmJhcnljZW50ZXI9bC9oLGQud2VpZ2h0PWgpLGR9fSw0MjE5Oih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGkoYSl7dmFyIG89bjtyLmZvckVhY2godC5jaGlsZHJlbihhKSxpKSxlW2FdPXtsb3c6byxsaW06bisrfX0pKSxlfSh0KTtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihuKXtmb3IodmFyIHI9dC5ub2RlKG4pLGk9ci5lZGdlT2JqLGE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVtdLHM9W10sYz1NYXRoLm1pbihlW25dLmxvdyxlW3JdLmxvdyksdT1NYXRoLm1heChlW25dLmxpbSxlW3JdLmxpbSk7aT1uO2Rve2k9dC5wYXJlbnQoaSksby5wdXNoKGkpfXdoaWxlKGkmJihlW2ldLmxvdz5jfHx1PmVbaV0ubGltKSk7Zm9yKGE9aSxpPXI7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCx1PW9bY10sbD0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksbCl7Zm9yKDsodT1vW2NdKSE9PXMmJnQubm9kZSh1KS5tYXhSYW5rPHIucmFuazspYysrO3U9PT1zJiYobD0hMSl9aWYoIWwpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUodT1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO3U9b1tjXX10LnNldFBhcmVudChuLHUpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LDM1NzM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg0MzYpLGk9big1NzQpLkdyYXBoLGE9bigxMTM4KTtmdW5jdGlvbiBvKHQsZSl7dmFyIG49e307cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIGE9MCxvPTAscz1lLmxlbmd0aCx1PXIubGFzdChpKTtyZXR1cm4gci5mb3JFYWNoKGksKGZ1bmN0aW9uKGUsbCl7dmFyIGg9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIHIuZmluZCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5kdW1teX0pKX0odCxlKSxmPWg/dC5ub2RlKGgpLm9yZGVyOnM7KGh8fGU9PT11KSYmKHIuZm9yRWFjaChpLnNsaWNlKG8sbCsxKSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUociksbz1pLm9yZGVyOyEobzxhfHxmPG8pfHxpLmR1bW15JiZ0Lm5vZGUoZSkuZHVtbXl8fGMobixyLGUpfSkpfSkpLG89bCsxLGE9Zil9KSksaX0pKSxufWZ1bmN0aW9uIHModCxlKXt2YXIgbj17fTtmdW5jdGlvbiBpKGUsaSxhLG8scyl7dmFyIHU7ci5mb3JFYWNoKHIucmFuZ2UoaSxhKSwoZnVuY3Rpb24oaSl7dT1lW2ldLHQubm9kZSh1KS5kdW1teSYmci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKHUpLChmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSk7ci5kdW1teSYmKHIub3JkZXI8b3x8ci5vcmRlcj5zKSYmYyhuLGUsdSl9KSl9KSl9cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsbil7dmFyIGEsbz0tMSxzPTA7cmV0dXJuIHIuZm9yRWFjaChuLChmdW5jdGlvbihyLGMpe2lmKCJib3JkZXIiPT09dC5ub2RlKHIpLmR1bW15KXt2YXIgdT10LnByZWRlY2Vzc29ycyhyKTt1Lmxlbmd0aCYmKGE9dC5ub2RlKHVbMF0pLm9yZGVyLGkobixzLGMsbyxhKSxzPWMsbz1hKX1pKG4scyxuLmxlbmd0aCxhLGUubGVuZ3RoKX0pKSxufSkpLG59ZnVuY3Rpb24gYyh0LGUsbil7aWYoZT5uKXt2YXIgcj1lO2U9bixuPXJ9dmFyIGk9dFtlXTtpfHwodFtlXT1pPXt9KSxpW25dPSEwfWZ1bmN0aW9uIHUodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXJldHVybiByLmhhcyh0W2VdLG4pfWZ1bmN0aW9uIGwodCxlLG4saSl7dmFyIGE9e30sbz17fSxzPXt9O3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7YVt0XT10LG9bdF09dCxzW3RdPWV9KSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3ZhciBlPS0xO3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgYz1pKHQpO2lmKGMubGVuZ3RoKXtjPXIuc29ydEJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdfSkpO2Zvcih2YXIgbD0oYy5sZW5ndGgtMSkvMixoPU1hdGguZmxvb3IobCksZj1NYXRoLmNlaWwobCk7aDw9ZjsrK2gpe3ZhciBkPWNbaF07b1t0XT09PXQmJmU8c1tkXSYmIXUobix0LGQpJiYob1tkXT10LG9bdF09YVt0XT1hW2RdLGU9c1tkXSl9fX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksdT1pLm5vZGUobyksbD0wO2lmKGwrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKGwrPW4/czotcykscz0wLGwrPShjLmR1bW15P2U6dCkvMixsKz0odS5kdW1teT9lOnQpLzIsbCs9dS53aWR0aC8yLHIuaGFzKHUsImxhYmVscG9zIikpc3dpdGNoKHUubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPXUud2lkdGgvMjticmVhaztjYXNlInIiOnM9LXUud2lkdGgvMn1yZXR1cm4gcyYmKGwrPW4/czotcykscz0wLGx9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksdT1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiBsKChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLGwoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT11JiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyx1PXRbY107aWYodSE9PWUpe3ZhciBsPXIudmFsdWVzKHUpOyhzPSJsIj09PW8/aS1yLm1pbihsKTphLXIubWF4KGwpKSYmKHRbY109ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9bCgwLGUsaSxvKSx1PWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJih1PXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09dX0pKX0pKTt2YXIgdT1mKHQsYyk7cmV0dXJuIGQoYyx1KSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDp1LHZlcnRpY2FsQWxpZ25tZW50OmwsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSw3ODczOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDM1NzMpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sMzAwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaCxhPW4oNjY4MSkuc2xhY2s7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbiBuKGkpe3IuZm9yRWFjaChlLm5vZGVFZGdlcyhpKSwoZnVuY3Rpb24ocil7dmFyIG89ci52LHM9aT09PW8/ci53Om87dC5oYXNOb2RlKHMpfHxhKGUscil8fCh0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKGkscyx7fSksbihzKSl9KSl9KSksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHIubWluQnkoZS5lZGdlcygpLChmdW5jdGlvbihuKXtpZih0Lmhhc05vZGUobi52KSE9PXQuaGFzTm9kZShuLncpKXJldHVybiBhKGUsbil9KSl9ZnVuY3Rpb24gYyh0LGUsbil7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5ub2RlKHQpLnJhbmsrPW59KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1uZXcgaSh7ZGlyZWN0ZWQ6ITF9KSx1PXQubm9kZXMoKVswXSxsPXQubm9kZUNvdW50KCk7Zm9yKHIuc2V0Tm9kZSh1LHt9KTtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LDgwOTM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY2ODEpLmxvbmdlc3RQYXRoLGk9bigzMDApLGE9bigyNDcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpkZWZhdWx0OiFmdW5jdGlvbih0KXthKHQpfSh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiFmdW5jdGlvbih0KXtyKHQpLGkodCl9KHQpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpvKHQpfX07dmFyIG89cn0sMjQ3MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDMwMCksYT1uKDY2ODEpLnNsYWNrLG89big2NjgxKS5sb25nZXN0UGF0aCxzPW4oNTc0KS5hbGcucHJlb3JkZXIsYz1uKDU3NCkuYWxnLnBvc3RvcmRlcix1PW4oMTEzOCkuc2ltcGxpZnk7ZnVuY3Rpb24gbCh0KXt0PXUodCksbyh0KTt2YXIgZSxuPWkodCk7Zm9yKGQobiksaChuLHQpO2U9eShuKTspbShuLHQsZSxnKG4sdCxlKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuPWModCx0Lm5vZGVzKCkpO249bi5zbGljZSgwLG4ubGVuZ3RoLTEpLHIuZm9yRWFjaChuLChmdW5jdGlvbihuKXshZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQ7dC5lZGdlKG4scikuY3V0dmFsdWU9Zih0LGUsbil9KHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LGE9ITAsbz1lLmVkZ2UobixpKSxzPTA7cmV0dXJuIG98fChhPSExLG89ZS5lZGdlKGksbikpLHM9by53ZWlnaHQsci5mb3JFYWNoKGUubm9kZUVkZ2VzKG4pLChmdW5jdGlvbihyKXt2YXIgbyxjLHU9ci52PT09bixsPXU/ci53OnIudjtpZihsIT09aSl7dmFyIGg9dT09PWEsZj1lLmVkZ2Uocikud2VpZ2h0O2lmKHMrPWg/ZjotZixvPW4sYz1sLHQuaGFzRWRnZShvLGMpKXt2YXIgZD10LmVkZ2UobixsKS5jdXR2YWx1ZTtzKz1oPy1kOmR9fX0pKSxzfWZ1bmN0aW9uIGQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSkscCh0LHt9LDEsZSl9ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPW4scz10Lm5vZGUoaSk7cmV0dXJuIGVbaV09ITAsci5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihhKXtyLmhhcyhlLGEpfHwobj1wKHQsZSxuLGEsaSkpfSkpLHMubG93PW8scy5saW09bisrLGE/cy5wYXJlbnQ9YTpkZWxldGUgcy5wYXJlbnQsbn1mdW5jdGlvbiB5KHQpe3JldHVybiByLmZpbmQodC5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9bi52LG89bi53O2UuaGFzRWRnZShpLG8pfHwoaT1uLncsbz1uLnYpO3ZhciBzPXQubm9kZShpKSxjPXQubm9kZShvKSx1PXMsbD0hMTtzLmxpbT5jLmxpbSYmKHU9YyxsPSEwKTt2YXIgaD1yLmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09digwLHQubm9kZShlLnYpLHUpJiZsIT09digwLHQubm9kZShlLncpLHUpfSkpO3JldHVybiByLm1pbkJ5KGgsKGZ1bmN0aW9uKHQpe3JldHVybiBhKGUsdCl9KSl9ZnVuY3Rpb24gbSh0LGUsbixpKXt2YXIgYT1uLnYsbz1uLnc7dC5yZW1vdmVFZGdlKGEsbyksdC5zZXRFZGdlKGkudixpLncse30pLGQodCksaCh0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5maW5kKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIWUubm9kZSh0KS5wYXJlbnR9KSksaT1zKHQsbik7aT1pLnNsaWNlKDEpLHIuZm9yRWFjaChpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobikucGFyZW50LGk9ZS5lZGdlKG4sciksYT0hMTtpfHwoaT1lLmVkZ2UocixuKSxhPSEwKSxlLm5vZGUobikucmFuaz1lLm5vZGUocikucmFuaysoYT9pLm1pbmxlbjotaS5taW5sZW4pfSkpfSh0LGUpfWZ1bmN0aW9uIHYodCxlLG4pe3JldHVybiBuLmxvdzw9ZS5saW0mJmUubGltPD1uLmxpbX10LmV4cG9ydHM9bCxsLmluaXRMb3dMaW1WYWx1ZXM9ZCxsLmluaXRDdXRWYWx1ZXM9aCxsLmNhbGNDdXRWYWx1ZT1mLGwubGVhdmVFZGdlPXksbC5lbnRlckVkZ2U9ZyxsLmV4Y2hhbmdlRWRnZXM9bX0sNjY4MToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPXtsb25nZXN0UGF0aDpmdW5jdGlvbih0KXt2YXIgZT17fTtyLmZvckVhY2godC5zb3VyY2VzKCksKGZ1bmN0aW9uIG4oaSl7dmFyIGE9dC5ub2RlKGkpO2lmKHIuaGFzKGUsaSkpcmV0dXJuIGEucmFuaztlW2ldPSEwO3ZhciBvPXIubWluKHIubWFwKHQub3V0RWRnZXMoaSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKGUudyktdC5lZGdlKGUpLm1pbmxlbn0pKSk7cmV0dXJuIG8hPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJm51bGwhPW98fChvPTApLGEucmFuaz1vfSkpfSxzbGFjazpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZS53KS5yYW5rLXQubm9kZShlLnYpLnJhbmstdC5lZGdlKGUpLm1pbmxlbn19fSwxMTM4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPXUqby9zLHI9dSk6KG88MCYmKGM9LWMpLG49YyxyPWMqcy9vKSx7eDppK24seTphK3J9fSxidWlsZExheWVyTWF0cml4OmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHIucmFuZ2Uobyh0KSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLGE9aS5yYW5rO3IuaXNVbmRlZmluZWQoYSl8fChlW2FdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobik7ci5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbih0KXt2YXIgZT1yLm1pbihyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksbj1bXTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUocikucmFuay1lO25baV18fChuW2ldPVtdKSxuW2ldLnB1c2gocil9KSk7dmFyIGk9MCxhPXQuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtyLmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXtyLmlzVW5kZWZpbmVkKGUpJiZuJWEhPTA/LS1pOmkmJnIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkucmFuays9aX0pKX0pKX0sYWRkQm9yZGVyTm9kZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihpLnJhbms9bixpLm9yZGVyPXIpLGEodCwiYm9yZGVyIixpLGUpfSxtYXhSYW5rOm8scGFydGl0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49e2xoczpbXSxyaHM6W119O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbih0LGUpe3ZhciBuPXIubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoci5ub3coKS1uKSsibXMiKX19LG5vdGltZTpmdW5jdGlvbih0LGUpe3JldHVybiBlKCl9fX0sODE3Nzp0PT57dC5leHBvcnRzPSIwLjguNSJ9LDc4NTY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PU9iamVjdC5oYXNPd25Qcm9wZXJ0eSxlPU9iamVjdC5zZXRQcm90b3R5cGVPZixuPU9iamVjdC5pc0Zyb3plbixyPU9iamVjdC5nZXRQcm90b3R5cGVPZixpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYT1PYmplY3QuZnJlZXplLG89T2JqZWN0LnNlYWwscz1PYmplY3QuY3JlYXRlLGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LHU9Yy5hcHBseSxsPWMuY29uc3RydWN0O3V8fCh1PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hcHBseShlLG4pfSksYXx8KGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxvfHwobz1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLGx8fChsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSh0LFtudWxsXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1BcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspbltlXT10W2VdO3JldHVybiBufXJldHVybiBBcnJheS5mcm9tKHQpfShlKSkpKX0pO3ZhciBoLGY9dyhBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksZD13KEFycmF5LnByb3RvdHlwZS5wb3ApLHA9dyhBcnJheS5wcm90b3R5cGUucHVzaCkseT13KFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLGc9dyhTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxtPXcoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSx2PXcoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxiPXcoU3RyaW5nLnByb3RvdHlwZS50cmltKSxfPXcoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSx4PShoPVR5cGVFcnJvcixmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9QXJyYXkodCksbj0wO248dDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGwoaCxlKX0pO2Z1bmN0aW9uIHcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiB1KHQsZSxyKX19ZnVuY3Rpb24gayh0LHIpe2UmJmUodCxudWxsKTtmb3IodmFyIGk9ci5sZW5ndGg7aS0tOyl7dmFyIGE9cltpXTtpZigic3RyaW5nIj09dHlwZW9mIGEpe3ZhciBvPXkoYSk7byE9PWEmJihuKHIpfHwocltpXT1vKSxhPW8pfXRbYV09ITB9cmV0dXJuIHR9ZnVuY3Rpb24gVChlKXt2YXIgbj1zKG51bGwpLHI9dm9pZCAwO2ZvcihyIGluIGUpdSh0LGUsW3JdKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gRSh0LGUpe2Zvcig7bnVsbCE9PXQ7KXt2YXIgbj1pKHQsZSk7aWYobil7aWYobi5nZXQpcmV0dXJuIHcobi5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnZhbHVlKXJldHVybiB3KG4udmFsdWUpfXQ9cih0KX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIix0KSxudWxsfX12YXIgQz1hKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxTPWEoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEE9YShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxNPWEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmZWRyb3BzaGFkb3ciLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLE49YShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIl0pLEQ9YShbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksTz1hKFsiI3RleHQiXSksQj1hKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxMPWEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEk9YShbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxSPWEoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxGPW8oL1x7XHtbXHNcU10qfFtcc1xTXSpcfVx9L2dtKSxQPW8oLzwlW1xzXFNdKnxbXHNcU10qJT4vZ20pLGo9bygvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxZPW8oL15hcmlhLVtcLVx3XSskLyksej1vKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksVT1vKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxxPW8oL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksSD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH07ZnVuY3Rpb24gJCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPUFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20odCl9dmFyIFc9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9udWxsOndpbmRvd30sVj1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6SCh0KSl8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNyZWF0ZVBvbGljeSlyZXR1cm4gbnVsbDt2YXIgbj1udWxsLHI9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7ZS5jdXJyZW50U2NyaXB0JiZlLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKHIpJiYobj1lLmN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKHIpKTt2YXIgaT0iZG9tcHVyaWZ5Iisobj8iIyIrbjoiIik7dHJ5e3JldHVybiB0LmNyZWF0ZVBvbGljeShpLHtjcmVhdGVIVE1MOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pfWNhdGNoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitpKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O3JldHVybiBmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlcoKSxuPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfTtpZihuLnZlcnNpb249IjIuMy40IixuLnJlbW92ZWQ9W10sIWV8fCFlLmRvY3VtZW50fHw5IT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbi5pc1N1cHBvcnRlZD0hMSxuO3ZhciByPWUuZG9jdW1lbnQsaT1lLmRvY3VtZW50LG89ZS5Eb2N1bWVudEZyYWdtZW50LHM9ZS5IVE1MVGVtcGxhdGVFbGVtZW50LGM9ZS5Ob2RlLHU9ZS5FbGVtZW50LGw9ZS5Ob2RlRmlsdGVyLGg9ZS5OYW1lZE5vZGVNYXAsdz12b2lkIDA9PT1oP2UuTmFtZWROb2RlTWFwfHxlLk1vek5hbWVkQXR0ck1hcDpoLEc9ZS5IVE1MRm9ybUVsZW1lbnQsWD1lLkRPTVBhcnNlcixaPWUudHJ1c3RlZFR5cGVzLFE9dS5wcm90b3R5cGUsSz1FKFEsImNsb25lTm9kZSIpLEo9RShRLCJuZXh0U2libGluZyIpLHR0PUUoUSwiY2hpbGROb2RlcyIpLGV0PUUoUSwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzKXt2YXIgbnQ9aS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO250LmNvbnRlbnQmJm50LmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGk9bnQuY29udGVudC5vd25lckRvY3VtZW50KX12YXIgcnQ9VihaLHIpLGl0PXJ0JiZSdD9ydC5jcmVhdGVIVE1MKCIiKToiIixhdD1pLG90PWF0LmltcGxlbWVudGF0aW9uLHN0PWF0LmNyZWF0ZU5vZGVJdGVyYXRvcixjdD1hdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LHV0PWF0LmdldEVsZW1lbnRzQnlUYWdOYW1lLGx0PXIuaW1wb3J0Tm9kZSxodD17fTt0cnl7aHQ9VChpKS5kb2N1bWVudE1vZGU/aS5kb2N1bWVudE1vZGU6e319Y2F0Y2godCl7fXZhciBmdD17fTtuLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBldCYmb3QmJnZvaWQgMCE9PW90LmNyZWF0ZUhUTUxEb2N1bWVudCYmOSE9PWh0O3ZhciBkdD1GLHB0PVAseXQ9aixndD1ZLG10PVUsdnQ9cSxidD16LF90PW51bGwseHQ9ayh7fSxbXS5jb25jYXQoJChDKSwkKFMpLCQoQSksJChOKSwkKE8pKSksd3Q9bnVsbCxrdD1rKHt9LFtdLmNvbmNhdCgkKEIpLCQoTCksJChJKSwkKFIpKSksVHQ9T2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksRXQ9bnVsbCxDdD1udWxsLFN0PSEwLEF0PSEwLE10PSExLE50PSExLER0PSExLE90PSExLEJ0PSExLEx0PSExLEl0PSExLFJ0PSExLEZ0PSEwLFB0PSEwLGp0PSExLFl0PXt9LHp0PW51bGwsVXQ9ayh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pLHF0PW51bGwsSHQ9ayh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLCR0PW51bGwsV3Q9ayh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLFZ0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixHdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFh0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixadD1YdCxRdD0hMSxLdD12b2lkIDAsSnQ9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSx0ZT0idGV4dC9odG1sIixlZT12b2lkIDAsbmU9bnVsbCxyZT1pLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxpZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFJlZ0V4cHx8dCBpbnN0YW5jZW9mIEZ1bmN0aW9ufSxhZT1mdW5jdGlvbih0KXtuZSYmbmU9PT10fHwodCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpIKHQpKXx8KHQ9e30pLHQ9VCh0KSxfdD0iQUxMT1dFRF9UQUdTImluIHQ/ayh7fSx0LkFMTE9XRURfVEFHUyk6eHQsd3Q9IkFMTE9XRURfQVRUUiJpbiB0P2soe30sdC5BTExPV0VEX0FUVFIpOmt0LCR0PSJBRERfVVJJX1NBRkVfQVRUUiJpbiB0P2soVChXdCksdC5BRERfVVJJX1NBRkVfQVRUUik6V3QscXQ9IkFERF9EQVRBX1VSSV9UQUdTImluIHQ/ayhUKEh0KSx0LkFERF9EQVRBX1VSSV9UQUdTKTpIdCx6dD0iRk9SQklEX0NPTlRFTlRTImluIHQ/ayh7fSx0LkZPUkJJRF9DT05URU5UUyk6VXQsRXQ9IkZPUkJJRF9UQUdTImluIHQ/ayh7fSx0LkZPUkJJRF9UQUdTKTp7fSxDdD0iRk9SQklEX0FUVFIiaW4gdD9rKHt9LHQuRk9SQklEX0FUVFIpOnt9LFl0PSJVU0VfUFJPRklMRVMiaW4gdCYmdC5VU0VfUFJPRklMRVMsU3Q9ITEhPT10LkFMTE9XX0FSSUFfQVRUUixBdD0hMSE9PXQuQUxMT1dfREFUQV9BVFRSLE10PXQuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLE50PXQuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxEdD10LldIT0xFX0RPQ1VNRU5UfHwhMSxMdD10LlJFVFVSTl9ET018fCExLEl0PXQuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsUnQ9dC5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxCdD10LkZPUkNFX0JPRFl8fCExLEZ0PSExIT09dC5TQU5JVElaRV9ET00sUHQ9ITEhPT10LktFRVBfQ09OVEVOVCxqdD10LklOX1BMQUNFfHwhMSxidD10LkFMTE9XRURfVVJJX1JFR0VYUHx8YnQsWnQ9dC5OQU1FU1BBQ0V8fFh0LHQuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJmllKHQuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKFR0LnRhZ05hbWVDaGVjaz10LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksdC5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmaWUodC5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoVHQuYXR0cmlidXRlTmFtZUNoZWNrPXQuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSx0LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiB0LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKFR0LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz10LkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksS3Q9S3Q9LTE9PT1KdC5pbmRleE9mKHQuUEFSU0VSX01FRElBX1RZUEUpP3RlOnQuUEFSU0VSX01FRElBX1RZUEUsZWU9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1LdD9mdW5jdGlvbih0KXtyZXR1cm4gdH06eSxOdCYmKEF0PSExKSxJdCYmKEx0PSEwKSxZdCYmKF90PWsoe30sW10uY29uY2F0KCQoTykpKSx3dD1bXSwhMD09PVl0Lmh0bWwmJihrKF90LEMpLGsod3QsQikpLCEwPT09WXQuc3ZnJiYoayhfdCxTKSxrKHd0LEwpLGsod3QsUikpLCEwPT09WXQuc3ZnRmlsdGVycyYmKGsoX3QsQSksayh3dCxMKSxrKHd0LFIpKSwhMD09PVl0Lm1hdGhNbCYmKGsoX3QsTiksayh3dCxJKSxrKHd0LFIpKSksdC5BRERfVEFHUyYmKF90PT09eHQmJihfdD1UKF90KSksayhfdCx0LkFERF9UQUdTKSksdC5BRERfQVRUUiYmKHd0PT09a3QmJih3dD1UKHd0KSksayh3dCx0LkFERF9BVFRSKSksdC5BRERfVVJJX1NBRkVfQVRUUiYmaygkdCx0LkFERF9VUklfU0FGRV9BVFRSKSx0LkZPUkJJRF9DT05URU5UUyYmKHp0PT09VXQmJih6dD1UKHp0KSksayh6dCx0LkZPUkJJRF9DT05URU5UUykpLFB0JiYoX3RbIiN0ZXh0Il09ITApLER0JiZrKF90LFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLF90LnRhYmxlJiYoayhfdCxbInRib2R5Il0pLGRlbGV0ZSBFdC50Ym9keSksYSYmYSh0KSxuZT10KX0sb2U9ayh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksc2U9ayh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxjZT1rKHt9LFMpO2soY2UsQSksayhjZSxNKTt2YXIgdWU9ayh7fSxOKTtrKHVlLEQpO3ZhciBsZT1mdW5jdGlvbih0KXt2YXIgZT1ldCh0KTtlJiZlLnRhZ05hbWV8fChlPXtuYW1lc3BhY2VVUkk6WHQsdGFnTmFtZToidGVtcGxhdGUifSk7dmFyIG49eSh0LnRhZ05hbWUpLHI9eShlLnRhZ05hbWUpO2lmKHQubmFtZXNwYWNlVVJJPT09R3QpcmV0dXJuIGUubmFtZXNwYWNlVVJJPT09WHQ/InN2ZyI9PT1uOmUubmFtZXNwYWNlVVJJPT09VnQ/InN2ZyI9PT1uJiYoImFubm90YXRpb24teG1sIj09PXJ8fG9lW3JdKTpCb29sZWFuKGNlW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PVZ0KXJldHVybiBlLm5hbWVzcGFjZVVSST09PVh0PyJtYXRoIj09PW46ZS5uYW1lc3BhY2VVUkk9PT1HdD8ibWF0aCI9PT1uJiZzZVtyXTpCb29sZWFuKHVlW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PVh0KXtpZihlLm5hbWVzcGFjZVVSST09PUd0JiYhc2Vbcl0pcmV0dXJuITE7aWYoZS5uYW1lc3BhY2VVUkk9PT1WdCYmIW9lW3JdKXJldHVybiExO3ZhciBpPWsoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7cmV0dXJuIXVlW25dJiYoaVtuXXx8IWNlW25dKX1yZXR1cm4hMX0saGU9ZnVuY3Rpb24odCl7cChuLnJlbW92ZWQse2VsZW1lbnQ6dH0pO3RyeXt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y2F0Y2goZSl7dHJ5e3Qub3V0ZXJIVE1MPWl0fWNhdGNoKGUpe3QucmVtb3ZlKCl9fX0sZmU9ZnVuY3Rpb24odCxlKXt0cnl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTplLmdldEF0dHJpYnV0ZU5vZGUodCksZnJvbTplfSl9Y2F0Y2godCl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206ZX0pfWlmKGUucmVtb3ZlQXR0cmlidXRlKHQpLCJpcyI9PT10JiYhd3RbdF0paWYoTHR8fEl0KXRyeXtoZShlKX1jYXRjaCh0KXt9ZWxzZSB0cnl7ZS5zZXRBdHRyaWJ1dGUodCwiIil9Y2F0Y2godCl7fX0sZGU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwLG49dm9pZCAwO2lmKEJ0KXQ9IjxyZW1vdmU+PC9yZW1vdmU+Iit0O2Vsc2V7dmFyIHI9Zyh0LC9eW1xyXG5cdCBdKy8pO249ciYmclswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PUt0JiYodD0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjwvaGVhZD48Ym9keT4nK3QrIjwvYm9keT48L2h0bWw+Iik7dmFyIGE9cnQ/cnQuY3JlYXRlSFRNTCh0KTp0O2lmKFp0PT09WHQpdHJ5e2U9KG5ldyBYKS5wYXJzZUZyb21TdHJpbmcoYSxLdCl9Y2F0Y2godCl7fWlmKCFlfHwhZS5kb2N1bWVudEVsZW1lbnQpe2U9b3QuY3JlYXRlRG9jdW1lbnQoWnQsInRlbXBsYXRlIixudWxsKTt0cnl7ZS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPVF0PyIiOmF9Y2F0Y2godCl7fX12YXIgbz1lLmJvZHl8fGUuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0JiZuJiZvLmluc2VydEJlZm9yZShpLmNyZWF0ZVRleHROb2RlKG4pLG8uY2hpbGROb2Rlc1swXXx8bnVsbCksWnQ9PT1YdD91dC5jYWxsKGUsRHQ/Imh0bWwiOiJib2R5IilbMF06RHQ/ZS5kb2N1bWVudEVsZW1lbnQ6b30scGU9ZnVuY3Rpb24odCl7cmV0dXJuIHN0LmNhbGwodC5vd25lckRvY3VtZW50fHx0LHQsbC5TSE9XX0VMRU1FTlR8bC5TSE9XX0NPTU1FTlR8bC5TSE9XX1RFWFQsbnVsbCwhMSl9LHllPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRyYmKCJzdHJpbmciIT10eXBlb2YgdC5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiB0LnRleHRDb250ZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgdC5yZW1vdmVDaGlsZHx8ISh0LmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiB3KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgdC5uYW1lc3BhY2VVUkl8fCJmdW5jdGlvbiIhPXR5cGVvZiB0Lmluc2VydEJlZm9yZSl9LGdlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PWM/InVuZGVmaW5lZCI6SChjKSk/dCBpbnN0YW5jZW9mIGM6dCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpIKHQpKSYmIm51bWJlciI9PXR5cGVvZiB0Lm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIHQubm9kZU5hbWV9LG1lPWZ1bmN0aW9uKHQsZSxyKXtmdFt0XSYmZihmdFt0XSwoZnVuY3Rpb24odCl7dC5jYWxsKG4sZSxyLG5lKX0pKX0sdmU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwO2lmKG1lKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix0LG51bGwpLHllKHQpKXJldHVybiBoZSh0KSwhMDtpZihnKHQubm9kZU5hbWUsL1tcdTAwODAtXHVGRkZGXS8pKXJldHVybiBoZSh0KSwhMDt2YXIgcj1lZSh0Lm5vZGVOYW1lKTtpZihtZSgidXBvblNhbml0aXplRWxlbWVudCIsdCx7dGFnTmFtZTpyLGFsbG93ZWRUYWdzOl90fSksIWdlKHQuZmlyc3RFbGVtZW50Q2hpbGQpJiYoIWdlKHQuY29udGVudCl8fCFnZSh0LmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmXygvPFsvXHddL2csdC5pbm5lckhUTUwpJiZfKC88Wy9cd10vZyx0LnRleHRDb250ZW50KSlyZXR1cm4gaGUodCksITA7aWYoInNlbGVjdCI9PT1yJiZfKC88dGVtcGxhdGUvaSx0LmlubmVySFRNTCkpcmV0dXJuIGhlKHQpLCEwO2lmKCFfdFtyXXx8RXRbcl0pe2lmKFB0JiYhenRbcl0pe3ZhciBpPWV0KHQpfHx0LnBhcmVudE5vZGUsYT10dCh0KXx8dC5jaGlsZE5vZGVzO2lmKGEmJmkpZm9yKHZhciBvPWEubGVuZ3RoLTE7bz49MDstLW8paS5pbnNlcnRCZWZvcmUoSyhhW29dLCEwKSxKKHQpKX1pZighRXRbcl0mJl9lKHIpKXtpZihUdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJl8oVHQudGFnTmFtZUNoZWNrLHIpKXJldHVybiExO2lmKFR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZUdC50YWdOYW1lQ2hlY2socikpcmV0dXJuITF9cmV0dXJuIGhlKHQpLCEwfXJldHVybiB0IGluc3RhbmNlb2YgdSYmIWxlKHQpPyhoZSh0KSwhMCk6Im5vc2NyaXB0IiE9PXImJiJub2VtYmVkIiE9PXJ8fCFfKC88XC9ubyhzY3JpcHR8ZW1iZWQpL2ksdC5pbm5lckhUTUwpPyhOdCYmMz09PXQubm9kZVR5cGUmJihlPXQudGV4dENvbnRlbnQsZT1tKGUsZHQsIiAiKSxlPW0oZSxwdCwiICIpLHQudGV4dENvbnRlbnQhPT1lJiYocChuLnJlbW92ZWQse2VsZW1lbnQ6dC5jbG9uZU5vZGUoKX0pLHQudGV4dENvbnRlbnQ9ZSkpLG1lKCJhZnRlclNhbml0aXplRWxlbWVudHMiLHQsbnVsbCksITEpOihoZSh0KSwhMCl9LGJlPWZ1bmN0aW9uKHQsZSxuKXtpZihGdCYmKCJpZCI9PT1lfHwibmFtZSI9PT1lKSYmKG4gaW4gaXx8biBpbiByZSkpcmV0dXJuITE7aWYoQXQmJiFDdFtlXSYmXyh5dCxlKSk7ZWxzZSBpZihTdCYmXyhndCxlKSk7ZWxzZSBpZighd3RbZV18fEN0W2VdKXtpZighKF9lKHQpJiYoVHQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZfKFR0LnRhZ05hbWVDaGVjayx0KXx8VHQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlR0LnRhZ05hbWVDaGVjayh0KSkmJihUdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJl8oVHQuYXR0cmlidXRlTmFtZUNoZWNrLGUpfHxUdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmVHQuYXR0cmlidXRlTmFtZUNoZWNrKGUpKXx8ImlzIj09PWUmJlR0LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKFR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmXyhUdC50YWdOYW1lQ2hlY2ssbil8fFR0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZUdC50YWdOYW1lQ2hlY2sobikpKSlyZXR1cm4hMX1lbHNlIGlmKCR0W2VdKTtlbHNlIGlmKF8oYnQsbShuLHZ0LCIiKSkpO2Vsc2UgaWYoInNyYyIhPT1lJiYieGxpbms6aHJlZiIhPT1lJiYiaHJlZiIhPT1lfHwic2NyaXB0Ij09PXR8fDAhPT12KG4sImRhdGE6Iil8fCFxdFt0XSlpZihNdCYmIV8obXQsbShuLHZ0LCIiKSkpO2Vsc2UgaWYobilyZXR1cm4hMTtyZXR1cm4hMH0sX2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5kZXhPZigiLSIpPjB9LHhlPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCxyPXZvaWQgMCxpPXZvaWQgMCxhPXZvaWQgMDttZSgiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIix0LG51bGwpO3ZhciBvPXQuYXR0cmlidXRlcztpZihvKXt2YXIgcz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOnd0fTtmb3IoYT1vLmxlbmd0aDthLS07KXt2YXIgYz1lPW9bYV0sdT1jLm5hbWUsbD1jLm5hbWVzcGFjZVVSSTtpZihyPWIoZS52YWx1ZSksaT1lZSh1KSxzLmF0dHJOYW1lPWkscy5hdHRyVmFsdWU9cixzLmtlZXBBdHRyPSEwLHMuZm9yY2VLZWVwQXR0cj12b2lkIDAsbWUoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsdCxzKSxyPXMuYXR0clZhbHVlLCFzLmZvcmNlS2VlcEF0dHImJihmZSh1LHQpLHMua2VlcEF0dHIpKWlmKF8oL1wvPi9pLHIpKWZlKHUsdCk7ZWxzZXtOdCYmKHI9bShyLGR0LCIgIikscj1tKHIscHQsIiAiKSk7dmFyIGg9ZWUodC5ub2RlTmFtZSk7aWYoYmUoaCxpLHIpKXRyeXtsP3Quc2V0QXR0cmlidXRlTlMobCx1LHIpOnQuc2V0QXR0cmlidXRlKHUsciksZChuLnJlbW92ZWQpfWNhdGNoKHQpe319fW1lKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsdCxudWxsKX19LHdlPWZ1bmN0aW9uIHQoZSl7dmFyIG49dm9pZCAwLHI9cGUoZSk7Zm9yKG1lKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsZSxudWxsKTtuPXIubmV4dE5vZGUoKTspbWUoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLG4sbnVsbCksdmUobil8fChuLmNvbnRlbnQgaW5zdGFuY2VvZiBvJiZ0KG4uY29udGVudCkseGUobikpO21lKCJhZnRlclNhbml0aXplU2hhZG93RE9NIixlLG51bGwpfTtyZXR1cm4gbi5zYW5pdGl6ZT1mdW5jdGlvbih0LGkpe3ZhciBhPXZvaWQgMCxzPXZvaWQgMCx1PXZvaWQgMCxsPXZvaWQgMCxoPXZvaWQgMDtpZigoUXQ9IXQpJiYodD0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIHQmJiFnZSh0KSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmcpdGhyb3cgeCgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigic3RyaW5nIiE9dHlwZW9mKHQ9dC50b1N0cmluZygpKSl0aHJvdyB4KCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIW4uaXNTdXBwb3J0ZWQpe2lmKCJvYmplY3QiPT09SChlLnRvU3RhdGljSFRNTCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RhdGljSFRNTCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBlLnRvU3RhdGljSFRNTCh0KTtpZihnZSh0KSlyZXR1cm4gZS50b1N0YXRpY0hUTUwodC5vdXRlckhUTUwpfXJldHVybiB0fWlmKE90fHxhZShpKSxuLnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiB0JiYoanQ9ITEpLGp0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBjKTE9PT0ocz0oYT1kZSgiXHgzYyEtLS0tXHgzZSIpKS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUodCwhMCkpLm5vZGVUeXBlJiYiQk9EWSI9PT1zLm5vZGVOYW1lfHwiSFRNTCI9PT1zLm5vZGVOYW1lP2E9czphLmFwcGVuZENoaWxkKHMpO2Vsc2V7aWYoIUx0JiYhTnQmJiFEdCYmLTE9PT10LmluZGV4T2YoIjwiKSlyZXR1cm4gcnQmJlJ0P3J0LmNyZWF0ZUhUTUwodCk6dDtpZighKGE9ZGUodCkpKXJldHVybiBMdD9udWxsOml0fWEmJkJ0JiZoZShhLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZj1wZShqdD90OmEpO3U9Zi5uZXh0Tm9kZSgpOykzPT09dS5ub2RlVHlwZSYmdT09PWx8fHZlKHUpfHwodS5jb250ZW50IGluc3RhbmNlb2YgbyYmd2UodS5jb250ZW50KSx4ZSh1KSxsPXUpO2lmKGw9bnVsbCxqdClyZXR1cm4gdDtpZihMdCl7aWYoSXQpZm9yKGg9Y3QuY2FsbChhLm93bmVyRG9jdW1lbnQpO2EuZmlyc3RDaGlsZDspaC5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO2Vsc2UgaD1hO3JldHVybiB3dC5zaGFkb3dyb290JiYoaD1sdC5jYWxsKHIsaCwhMCkpLGh9dmFyIGQ9RHQ/YS5vdXRlckhUTUw6YS5pbm5lckhUTUw7cmV0dXJuIE50JiYoZD1tKGQsZHQsIiAiKSxkPW0oZCxwdCwiICIpKSxydCYmUnQ/cnQuY3JlYXRlSFRNTChkKTpkfSxuLnNldENvbmZpZz1mdW5jdGlvbih0KXthZSh0KSxPdD0hMH0sbi5jbGVhckNvbmZpZz1mdW5jdGlvbigpe25lPW51bGwsT3Q9ITF9LG4uaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7bmV8fGFlKHt9KTt2YXIgcj1lZSh0KSxpPWVlKGUpO3JldHVybiBiZShyLGksbil9LG4uYWRkSG9vaz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZnRbdF09ZnRbdF18fFtdLHAoZnRbdF0sZSkpfSxuLnJlbW92ZUhvb2s9ZnVuY3Rpb24odCl7ZnRbdF0mJmQoZnRbdF0pfSxuLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKHQpe2Z0W3RdJiYoZnRbdF09W10pfSxuLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7ZnQ9e319LG59KCl9KCl9LDgyODI6KHQsZSxuKT0+e3ZhciByPW4oMjM1NCk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246big4OTc0KSxhbGc6bigyNDQwKSx2ZXJzaW9uOnIudmVyc2lvbn19LDI4NDI6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSwzOTg0Oih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO2Z1bmN0aW9uIGkodCxlLG4sYSxvLHMpe3IuaGFzKGEsZSl8fChhW2VdPSEwLG58fHMucHVzaChlKSxyLmVhY2gobyhlKSwoZnVuY3Rpb24oZSl7aSh0LGUsbixhLG8scyl9KSksbiYmcy5wdXNoKGUpKX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3IuaXNBcnJheShlKXx8KGU9W2VdKTt2YXIgYT0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLG89W10scz17fTtyZXR1cm4gci5lYWNoKGUsKGZ1bmN0aW9uKGUpe2lmKCF0Lmhhc05vZGUoZSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrZSk7aSh0LGUsInBvc3QiPT09bixzLGEsbyl9KSksb319LDQ4NDc6KHQsZSxuKT0+e3ZhciByPW4oMzc2MyksaT1uKDkxMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGkudHJhbnNmb3JtKHQubm9kZXMoKSwoZnVuY3Rpb24oaSxhKXtpW2FdPXIodCxhLGUsbil9KSx7fSl9fSwzNzYzOih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpLGk9big5Njc1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBhLG8scz17fSxjPW5ldyBpLHU9ZnVuY3Rpb24odCl7dmFyIGU9dC52IT09YT90LnY6dC53LHI9c1tlXSxpPW4odCksdT1vLmRpc3RhbmNlK2k7aWYoaTwwKXRocm93IG5ldyBFcnJvcigiZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiBCYWQgZWRnZTogIit0KyIgV2VpZ2h0OiAiK2kpO3U8ci5kaXN0YW5jZSYmKHIuZGlzdGFuY2U9dSxyLnByZWRlY2Vzc29yPWEsYy5kZWNyZWFzZShlLHUpKX07Zm9yKHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Muc2l6ZSgpPjAmJihhPWMucmVtb3ZlTWluKCksKG89c1thXSkuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOylyKGEpLmZvckVhY2godSk7cmV0dXJuIHN9KHQsU3RyaW5nKGUpLG58fGEscnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX07dmFyIGE9ci5jb25zdGFudCgxKX0sOTA5NjoodCxlLG4pPT57dmFyIHI9big5MTI2KSxpPW4oNTAyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmZpbHRlcihpKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+MXx8MT09PWUubGVuZ3RoJiZ0Lmhhc0VkZ2UoZVswXSxlWzBdKX0pKX19LDg5MjQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9LGk9dC5ub2RlcygpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09e30sclt0XVt0XT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKHJbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi52PT09dD9uLnc6bi52LGE9ZShuKTtyW3RdW2ldPXtkaXN0YW5jZTphLHByZWRlY2Vzc29yOnR9fSkpfSkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhPXJbbl07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1hW3RdLGk9ZVtuXSxvPWFbbl0scz1yLmRpc3RhbmNlK2kuZGlzdGFuY2U7czxvLmRpc3RhbmNlJiYoby5kaXN0YW5jZT1zLG8ucHJlZGVjZXNzb3I9aS5wcmVkZWNlc3Nvcil9KSl9KSl9KSkscn0odCxlfHxpLG58fGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUpfSl9O3ZhciBpPXIuY29uc3RhbnQoMSl9LDI0NDA6KHQsZSxuKT0+e3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDI4NDIpLGRpamtzdHJhOm4oMzc2MyksZGlqa3N0cmFBbGw6big0ODQ3KSxmaW5kQ3ljbGVzOm4oOTA5NiksZmxveWRXYXJzaGFsbDpuKDg5MjQpLGlzQWN5Y2xpYzpuKDI3MDcpLHBvc3RvcmRlcjpuKDg4MjgpLHByZW9yZGVyOm4oMjY0OCkscHJpbTpuKDUxNCksdGFyamFuOm4oNTAyMyksdG9wc29ydDpuKDIxNjYpfX0sMjcwNzoodCxlLG4pPT57dmFyIHI9bigyMTY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3IodCl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIHIuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH19LDg4Mjg6KHQsZSxuKT0+e3ZhciByPW4oMzk4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwb3N0Iil9fSwyNjQ4Oih0LGUsbik9Pnt2YXIgcj1uKDM5ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwicHJlIil9fSw1MTQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDc3MSksYT1uKDk2NzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO2Zvcih2YXIgbD0hMTtjLnNpemUoKT4wOyl7aWYobj1jLnJlbW92ZU1pbigpLHIuaGFzKHMsbikpby5zZXRFZGdlKG4sc1tuXSk7ZWxzZXtpZihsKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTtsPSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2godSl9cmV0dXJuIG99fSw1MDIzOih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLG49W10saT17fSxhPVtdO2Z1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgdSxsPVtdO2Rve3U9bi5wb3AoKSxpW3VdLm9uU3RhY2s9ITEsbC5wdXNoKHUpfXdoaWxlKHMhPT11KTthLnB1c2gobCl9fXJldHVybiB0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5oYXMoaSx0KXx8byh0KX0pKSxhfX0sMjE2NjoodCxlLG4pPT57dmFyIHI9big5MTI2KTtmdW5jdGlvbiBpKHQpe3ZhciBlPXt9LG49e30saT1bXTtpZihyLmVhY2godC5zaW5rcygpLChmdW5jdGlvbiBvKHMpe2lmKHIuaGFzKG4scykpdGhyb3cgbmV3IGE7ci5oYXMoZSxzKXx8KG5bc109ITAsZVtzXT0hMCxyLmVhY2godC5wcmVkZWNlc3NvcnMocyksbyksZGVsZXRlIG5bc10saS5wdXNoKHMpKX0pKSxyLnNpemUoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBhO3JldHVybiBpfWZ1bmN0aW9uIGEoKXt9dC5leHBvcnRzPWksaS5DeWNsZUV4Y2VwdGlvbj1hLGEucHJvdG90eXBlPW5ldyBFcnJvcn0sOTY3NToodCxlLG4pPT57dmFyIHI9big5MTI2KTtmdW5jdGlvbiBpKCl7dGhpcy5fYXJyPVtdLHRoaXMuX2tleUluZGljZXM9e319dC5leHBvcnRzPWksaS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofSxpLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0saS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9rZXlJbmRpY2VzLHQpfSxpLnByb3RvdHlwZS5wcmlvcml0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKHZvaWQgMCE9PWUpcmV0dXJuIHRoaXMuX2FycltlXS5wcmlvcml0eX0saS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXM7aWYodD1TdHJpbmcodCksIXIuaGFzKG4sdCkpe3ZhciBpPXRoaXMuX2FycixhPWkubGVuZ3RoO3JldHVybiBuW3RdPWEsaS5wdXNoKHtrZXk6dCxwcmlvcml0eTplfSksdGhpcy5fZGVjcmVhc2UoYSksITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciB0PXRoaXMuX2Fyci5wb3AoKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2tleUluZGljZXNbdC5rZXldLHRoaXMuX2hlYXBpZnkoMCksdC5rZXl9LGkucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlc1t0XTtpZihlPnRoaXMuX2FycltuXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK3QrIiBPbGQ6ICIrdGhpcy5fYXJyW25dLnByaW9yaXR5KyIgTmV3OiAiK2UpO3RoaXMuX2FycltuXS5wcmlvcml0eT1lLHRoaXMuX2RlY3JlYXNlKG4pfSxpLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hcnIsbj0yKnQscj1uKzEsaT10O248ZS5sZW5ndGgmJihpPWVbbl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9uOmkscjxlLmxlbmd0aCYmKGk9ZVtyXS5wcmlvcml0eTxlW2ldLnByaW9yaXR5P3I6aSksaSE9PXQmJih0aGlzLl9zd2FwKHQsaSksdGhpcy5faGVhcGlmeShpKSkpfSxpLnByb3RvdHlwZS5fZGVjcmVhc2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5fYXJyLHI9blt0XS5wcmlvcml0eTswIT09dCYmIShuW2U9dD4+MV0ucHJpb3JpdHk8cik7KXRoaXMuX3N3YXAodCxlKSx0PWV9LGkucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYXJyLHI9dGhpcy5fa2V5SW5kaWNlcyxpPW5bdF0sYT1uW2VdO25bdF09YSxuW2VdPWksclthLmtleV09dCxyW2kua2V5XT1lfX0sNzcxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big5MTI2KTt0LmV4cG9ydHM9YTt2YXIgaT0iXDAiO2Z1bmN0aW9uIGEodCl7dGhpcy5faXNEaXJlY3RlZD0hci5oYXModCwiZGlyZWN0ZWQiKXx8dC5kaXJlY3RlZCx0aGlzLl9pc011bHRpZ3JhcGg9ISFyLmhhcyh0LCJtdWx0aWdyYXBoIikmJnQubXVsdGlncmFwaCx0aGlzLl9pc0NvbXBvdW5kPSEhci5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX25vZGVzPXt9LHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnQ9e30sdGhpcy5fY2hpbGRyZW49e30sdGhpcy5fY2hpbGRyZW5bIlwwIl09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319ZnVuY3Rpb24gbyh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBzKHQsZSl7LS10W2VdfHxkZWxldGUgdFtlXX1mdW5jdGlvbiBjKHQsZSxuLGkpe3ZhciBhPSIiK2Usbz0iIituO2lmKCF0JiZhPm8pe3ZhciBzPWE7YT1vLG89c31yZXR1cm4gYSsiASIrbysiASIrKHIuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiB1KHQsZSxuLHIpe3ZhciBpPSIiK2UsYT0iIituO2lmKCF0JiZpPmEpe3ZhciBvPWk7aT1hLGE9b312YXIgcz17djppLHc6YX07cmV0dXJuIHImJihzLm5hbWU9ciksc31mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGModCxlLnYsZS53LGUubmFtZSl9YS5wcm90b3R5cGUuX25vZGVDb3VudD0wLGEucHJvdG90eXBlLl9lZGdlQ291bnQ9MCxhLnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LGEucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9LGEucHJvdG90eXBlLmlzQ29tcG91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wb3VuZH0sYS5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30sYS5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9LGEucHJvdG90eXBlLnNldERlZmF1bHROb2RlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXQsdGhpc30sYS5wcm90b3R5cGUubm9kZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH0sYS5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5rZXlzKHRoaXMuX25vZGVzKX0sYS5wcm90b3R5cGUuc291cmNlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9pbltlXSl9KSl9LGEucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX291dFtlXSl9KSl9LGEucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLGk9dGhpcztyZXR1cm4gci5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LGEucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3RdPWUpLHRoaXMpOih0aGlzLl9ub2Rlc1t0XT1hcmd1bWVudHMubGVuZ3RoPjE/ZTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4odCksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFt0XT1pLHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0sYS5wcm90b3R5cGUubm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbm9kZXNbdF19LGEucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpfSxhLnByb3RvdHlwZS5yZW1vdmVOb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoci5oYXModGhpcy5fbm9kZXMsdCkpe3ZhciBuPWZ1bmN0aW9uKHQpe2UucmVtb3ZlRWRnZShlLl9lZGdlT2Jqc1t0XSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1t0XSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksZGVsZXRlIHRoaXMuX3BhcmVudFt0XSxyLmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxyLmVhY2goci5rZXlzKHRoaXMuX2luW3RdKSxuKSxkZWxldGUgdGhpcy5faW5bdF0sZGVsZXRlIHRoaXMuX3ByZWRzW3RdLHIuZWFjaChyLmtleXModGhpcy5fb3V0W3RdKSxuKSxkZWxldGUgdGhpcy5fb3V0W3RdLGRlbGV0ZSB0aGlzLl9zdWNzW3RdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoci5pc1VuZGVmaW5lZChlKSllPWk7ZWxzZXtmb3IodmFyIG49ZSs9IiI7IXIuaXNVbmRlZmluZWQobik7bj10aGlzLnBhcmVudChuKSlpZihuPT09dCl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitlKyIgYXMgcGFyZW50IG9mICIrdCsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKGUpfXJldHVybiB0aGlzLnNldE5vZGUodCksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksdGhpcy5fcGFyZW50W3RdPWUsdGhpcy5fY2hpbGRyZW5bZV1bdF09ITAsdGhpc30sYS5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxhLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fcGFyZW50W3RdO2lmKGUhPT1pKXJldHVybiBlfX0sYS5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoci5pc1VuZGVmaW5lZCh0KSYmKHQ9aSksdGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fY2hpbGRyZW5bdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfWVsc2V7aWYodD09PWkpcmV0dXJuIHRoaXMubm9kZXMoKTtpZih0aGlzLmhhc05vZGUodCkpcmV0dXJuW119fSxhLnByb3RvdHlwZS5wcmVkZWNlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJlZHNbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxhLnByb3RvdHlwZS5zdWNjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1Y3NbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxhLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gci51bmlvbihlLHRoaXMuc3VjY2Vzc29ycyh0KSl9LGEucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PSh0aGlzLmlzRGlyZWN0ZWQoKT90aGlzLnN1Y2Nlc3NvcnModCk6dGhpcy5uZWlnaGJvcnModCkpLmxlbmd0aH0sYS5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO3IuZWFjaCh0aGlzLl9ub2RlcywoZnVuY3Rpb24obixyKXt0KHIpJiZlLnNldE5vZGUocixuKX0pKSxyLmVhY2godGhpcy5fZWRnZU9ianMsKGZ1bmN0aW9uKHQpe2UuaGFzTm9kZSh0LnYpJiZlLmhhc05vZGUodC53KSYmZS5zZXRFZGdlKHQsbi5lZGdlKHQpKX0pKTt2YXIgaT17fTtmdW5jdGlvbiBhKHQpe3ZhciByPW4ucGFyZW50KHQpO3JldHVybiB2b2lkIDA9PT1yfHxlLmhhc05vZGUocik/KGlbdF09cixyKTpyIGluIGk/aVtyXTphKHIpfXJldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZyLmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LGEodCkpfSkpLGV9LGEucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30sYS5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH0sYS5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxhLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cztyZXR1cm4gci5yZWR1Y2UodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UodCxyLGUpOm4uc2V0RWRnZSh0LHIpLHJ9KSksdGhpc30sYS5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLGE9ITEscz1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiBzJiZudWxsIT09cyYmInYiaW4gcz8odD1zLnYsZT1zLncsbj1zLm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxhPSEwKSk6KHQ9cyxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxhPSEwKSksdD0iIit0LGU9IiIrZSxyLmlzVW5kZWZpbmVkKG4pfHwobj0iIituKTt2YXIgbD1jKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO2lmKHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbCkpcmV0dXJuIGEmJih0aGlzLl9lZGdlTGFiZWxzW2xdPWkpLHRoaXM7aWYoIXIuaXNVbmRlZmluZWQobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHQpLHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9lZGdlTGFiZWxzW2xdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odCxlLG4pO3ZhciBoPXUodGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHQ9aC52LGU9aC53LE9iamVjdC5mcmVlemUoaCksdGhpcy5fZWRnZU9ianNbbF09aCxvKHRoaXMuX3ByZWRzW2VdLHQpLG8odGhpcy5fc3Vjc1t0XSxlKSx0aGlzLl9pbltlXVtsXT1oLHRoaXMuX291dFt0XVtsXT1oLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9LGEucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP2wodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbcl19LGEucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP2wodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsaSl9LGEucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP2wodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbiksaT10aGlzLl9lZGdlT2Jqc1tyXTtyZXR1cm4gaSYmKHQ9aS52LGU9aS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3JdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tyXSxzKHRoaXMuX3ByZWRzW2VdLHQpLHModGhpcy5fc3Vjc1t0XSxlKSxkZWxldGUgdGhpcy5faW5bZV1bcl0sZGVsZXRlIHRoaXMuX291dFt0XVtyXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc30sYS5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2luW3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY9PT1lfSkpOml9fSxhLnByb3RvdHlwZS5vdXRFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX291dFt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC53PT09ZX0pKTppfX0sYS5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5pbkVkZ2VzKHQsZSk7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyh0LGUpKX19LDIzNTQ6KHQsZSxuKT0+e3QuZXhwb3J0cz17R3JhcGg6big3NzEpLHZlcnNpb246big5NjMxKX19LDg5NzQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDc3MSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSksaT10LnBhcmVudChlKSxhPXt2OmV9O3JldHVybiByLmlzVW5kZWZpbmVkKG4pfHwoYS52YWx1ZT1uKSxyLmlzVW5kZWZpbmVkKGkpfHwoYS5wYXJlbnQ9aSksYX0pKX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1hcCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKSxpPXt2OmUudix3OmUud307cmV0dXJuIHIuaXNVbmRlZmluZWQoZS5uYW1lKXx8KGkubmFtZT1lLm5hbWUpLHIuaXNVbmRlZmluZWQobil8fChpLnZhbHVlPW4pLGl9KSl9dC5leHBvcnRzPXt3cml0ZTpmdW5jdGlvbih0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczphKHQpLGVkZ2VzOm8odCl9O3JldHVybiByLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSksZX0scmVhZDpmdW5jdGlvbih0KXt2YXIgZT1uZXcgaSh0Lm9wdGlvbnMpLnNldEdyYXBoKHQudmFsdWUpO3JldHVybiByLmVhY2godC5ub2RlcywoZnVuY3Rpb24odCl7ZS5zZXROb2RlKHQudix0LnZhbHVlKSx0LnBhcmVudCYmZS5zZXRQYXJlbnQodC52LHQucGFyZW50KX0pKSxyLmVhY2godC5lZGdlcywoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHt2OnQudix3OnQudyxuYW1lOnQubmFtZX0sdC52YWx1ZSl9KSksZX19fSw5MTI2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmU6big2Njc4KSxjb25zdGFudDpuKDU3MDMpLGVhY2g6big2MDczKSxmaWx0ZXI6bigzMTA1KSxoYXM6big4NzIxKSxpc0FycmF5Om4oMTQ2OSksaXNFbXB0eTpuKDE2MDkpLGlzRnVuY3Rpb246bigzNTYwKSxpc1VuZGVmaW5lZDpuKDIzNTMpLGtleXM6bigzNjc0KSxtYXA6big1MTYxKSxyZWR1Y2U6big0MDYxKSxzaXplOm4oNDIzOCksdHJhbnNmb3JtOm4oODcxOCksdW5pb246bigzMzg2KSx2YWx1ZXM6bigyNjI4KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sOTYzMTp0PT57dC5leHBvcnRzPSIyLjEuOCJ9LDE3NzM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oNzYyOCksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZT1uZXcgaS5kZWZhdWx0fXJldHVybiB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGUudHlwZT0wLHRoaXN9LHQucHJvdG90eXBlLl9lbnN1cmVIU0w9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmgsbj10LnMsaT10Lmw7dm9pZCAwPT09ZSYmKHQuaD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImgiKSksdm9pZCAwPT09biYmKHQucz1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsInMiKSksdm9pZCAwPT09aSYmKHQubD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSl9LHQucHJvdG90eXBlLl9lbnN1cmVSR0I9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LnIsbj10LmcsaT10LmI7dm9pZCAwPT09ZSYmKHQucj1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsInIiKSksdm9pZCAwPT09biYmKHQuZz1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImciKSksdm9pZCAwPT09aSYmKHQuYj1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImIiKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiciIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQucjtyZXR1cm4gdGhpcy50eXBlLmlzKDIpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsInIiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMSksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJnIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5nO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiZyIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgxKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmc9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LmI7cmV0dXJuIHRoaXMudHlwZS5pcygyKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0LCJiIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDEpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuYj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuaDtyZXR1cm4gdGhpcy50eXBlLmlzKDEpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImgiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5zO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwicyIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgyKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnM9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmw7cmV0dXJuIHRoaXMudHlwZS5pcygxKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0LCJsIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEubD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuYT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZS5kZWZhdWx0PWF9LDgxNjc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bmV3KG4oMTc3MykuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LDc2Mjg6KHQsZSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT0wfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlJiZ0aGlzLnR5cGUhPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNoYW5nZSBib3RoIFJHQiBhbmQgSFNMIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUiKTt0aGlzLnR5cGU9dH0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnR5cGU9MH0sdC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHlwZT09PXR9LHR9KCk7ZS5kZWZhdWx0PW59LDE2NTU6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big4MTY3KSxpPW4oNjA2MSksYT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTpmdW5jdGlvbih0KXtpZigzNT09PXQuY2hhckNvZGVBdCgwKSl7dmFyIGU9dC5tYXRjaChhLnJlKTtpZihlKXt2YXIgbj1lWzFdLGk9cGFyc2VJbnQobiwxNiksbz1uLmxlbmd0aCxzPW8lND09MCxjPW8+NCx1PWM/MToxNyxsPWM/ODo0LGg9cz8wOi0xLGY9Yz8yNTU6MTU7cmV0dXJuIHIuZGVmYXVsdC5zZXQoe3I6KGk+PmwqKGgrMykmZikqdSxnOihpPj5sKihoKzIpJmYpKnUsYjooaT4+bCooaCsxKSZmKSp1LGE6cz8oaSZmKSp1LzI1NToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5yLG49dC5nLHI9dC5iLGE9dC5hO3JldHVybiBhPDE/IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildK2kuREVDMkhFWFtNYXRoLnJvdW5kKDI1NSphKV06IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildfX07ZS5kZWZhdWx0PWF9LDg1ODk6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oODE2NyksYT17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEuaHVlUmUpO2lmKGUpe3ZhciBuPWVbMV07c3dpdGNoKGVbMl0pe2Nhc2UiZ3JhZCI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoLjkqcGFyc2VGbG9hdChuKSk7Y2FzZSJyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDE4MCpwYXJzZUZsb2F0KG4pL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoMzYwKnBhcnNlRmxvYXQobikpfX1yZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29kZUF0KDApO2lmKDEwND09PWV8fDcyPT09ZSl7dmFyIG49dC5tYXRjaChhLnJlKTtpZihuKXt2YXIgbz1uWzFdLHM9blsyXSxjPW5bM10sdT1uWzRdLGw9bls1XTtyZXR1cm4gaS5kZWZhdWx0LnNldCh7aDphLl9odWUyZGVnKG8pLHM6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxsOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChjKSksYTp1P3IuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobD9wYXJzZUZsb2F0KHUpLzEwMDpwYXJzZUZsb2F0KHUpKToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5oLG49dC5zLGk9dC5sLGE9dC5hO3JldHVybiBhPDE/ImhzbGEoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlLCAiK2ErIikiOiJoc2woIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlKSJ9fTtlLmRlZmF1bHQ9YX0sMjE5MToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2NTUpLGk9big3NTM4KSxhPW4oNjc2Miksbz1uKDg1ODkpLHM9e2Zvcm1hdDp7a2V5d29yZDppLmRlZmF1bHQsaGV4OnIuZGVmYXVsdCxyZ2I6YS5kZWZhdWx0LHJnYmE6YS5kZWZhdWx0LGhzbDpvLmRlZmF1bHQsaHNsYTpvLmRlZmF1bHR9LHBhcnNlOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT1yLmRlZmF1bHQucGFyc2UodCl8fGEuZGVmYXVsdC5wYXJzZSh0KXx8by5kZWZhdWx0LnBhcnNlKHQpfHxpLmRlZmF1bHQucGFyc2UodCk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIicrdCsnIicpfSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hhbmdlZCYmdC5jb2xvcj90LmNvbG9yOnQudHlwZS5pcygyKXx8dm9pZCAwPT09dC5kYXRhLnI/by5kZWZhdWx0LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9hLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnIuZGVmYXVsdC5zdHJpbmdpZnkodCl9fTtlLmRlZmF1bHQ9c30sNzUzODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2NTUpLGk9e2NvbG9yczp7YWxpY2VibHVlOiIjZjBmOGZmIixhbnRpcXVld2hpdGU6IiNmYWViZDciLGFxdWE6IiMwMGZmZmYiLGFxdWFtYXJpbmU6IiM3ZmZmZDQiLGF6dXJlOiIjZjBmZmZmIixiZWlnZToiI2Y1ZjVkYyIsYmlzcXVlOiIjZmZlNGM0IixibGFjazoiIzAwMDAwMCIsYmxhbmNoZWRhbG1vbmQ6IiNmZmViY2QiLGJsdWU6IiMwMDAwZmYiLGJsdWV2aW9sZXQ6IiM4YTJiZTIiLGJyb3duOiIjYTUyYTJhIixidXJseXdvb2Q6IiNkZWI4ODciLGNhZGV0Ymx1ZToiIzVmOWVhMCIsY2hhcnRyZXVzZToiIzdmZmYwMCIsY2hvY29sYXRlOiIjZDI2OTFlIixjb3JhbDoiI2ZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IiM2NDk1ZWQiLGNvcm5zaWxrOiIjZmZmOGRjIixjcmltc29uOiIjZGMxNDNjIixjeWFuYXF1YToiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZWVuOiIjMDA2NDAwIixkYXJrZ3JleToiI2E5YTlhOSIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsZ3JleToiIzgwODA4MCIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRyYW5zcGFyZW50OiIjMDAwMDAwMDAiLHR1cnF1b2lzZToiIzQwZTBkMCIsdmlvbGV0OiIjZWU4MmVlIix3aGVhdDoiI2Y1ZGViMyIsd2hpdGU6IiNmZmZmZmYiLHdoaXRlc21va2U6IiNmNWY1ZjUiLHllbGxvdzoiI2ZmZmYwMCIseWVsbG93Z3JlZW46IiM5YWNkMzIifSxwYXJzZTpmdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgZT1pLmNvbG9yc1t0XTtpZihlKXJldHVybiByLmRlZmF1bHQucGFyc2UoZSl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHQuc3RyaW5naWZ5KHQpO2Zvcih2YXIgbiBpbiBpLmNvbG9ycylpZihpLmNvbG9yc1tuXT09PWUpcmV0dXJuIG59fTtlLmRlZmF1bHQ9aX0sNjc2MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MTY3KSxhPXtyZTovXnJnYmE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkpP1xzKj9cKSQvaSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTE0PT09ZXx8ODI9PT1lKXt2YXIgbj10Lm1hdGNoKGEucmUpO2lmKG4pe3ZhciBvPW5bMV0scz1uWzJdLGM9blszXSx1PW5bNF0sbD1uWzVdLGg9bls2XSxmPW5bN10sZD1uWzhdO3JldHVybiBpLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIocz8yLjU1KnBhcnNlRmxvYXQobyk6cGFyc2VGbG9hdChvKSksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKHU/Mi41NSpwYXJzZUZsb2F0KGMpOnBhcnNlRmxvYXQoYykpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihoPzIuNTUqcGFyc2VGbG9hdChsKTpwYXJzZUZsb2F0KGwpKSxhOmY/ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShkP3BhcnNlRmxvYXQoZikvMTAwOnBhcnNlRmxvYXQoZikpOjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT10LnIsbj10LmcsaT10LmIsYT10LmE7cmV0dXJuIGE8MT8icmdiYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGUpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQobikrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChpKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGEpKyIpIjoicmdiKCIrci5kZWZhdWx0Lmxhbmcucm91bmQoZSkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChuKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIpIn19O2UuZGVmYXVsdD1hfSw2MDYxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT17fTtlLkRFQzJIRVg9aTtmb3IodmFyIGE9MDthPD0yNTU7YSsrKWlbYV09ci5kZWZhdWx0LnVuaXQuZGVjMmhleChhKX0sODYxMzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxMjAzKSl9LDUzNzE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMTkxKSxpPW4oNDE4KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCksYT17fTtmb3IodmFyIG8gaW4gZSllW29dJiYoYVtvXT1uW29dK2Vbb10pO3JldHVybiBpLmRlZmF1bHQodCxhKX19LDE0MTY6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1pLmRlZmF1bHQucGFyc2UodCksbz1hW2VdLHM9ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXBbZV0obytuKTtyZXR1cm4gbyE9PXMmJihhW2VdPXMpLGkuZGVmYXVsdC5zdHJpbmdpZnkoYSl9fSw5MzUzOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYSIpfX0sMzM5NDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImIiKX19LDQxODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQucGFyc2UodCk7Zm9yKHZhciBhIGluIGUpblthXT1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFthXShlW2FdKTtyZXR1cm4gaS5kZWZhdWx0LnN0cmluZ2lmeShuKX19LDYxOTc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKGkuZGVmYXVsdC5wYXJzZSh0KVtlXSl9fSw3MzYxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTQxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIsMTgwKX19LDMwNDI6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oODM0Nik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS5kZWZhdWx0KHQpLGE9aS5kZWZhdWx0KGUpLG89TWF0aC5tYXgobixhKSxzPU1hdGgubWluKG4sYSksYz0obytOdW1iZXIuRVBTSUxPTikvKHMrTnVtYmVyLkVQU0lMT04pO3JldHVybiByLmRlZmF1bHQubGFuZy5yb3VuZChyLmRlZmF1bHQubGFuZy5jbGFtcChjLDEsMTApKX19LDEzNjQ6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImwiLC1lKX19LDk2MTA6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLC1lKX19LDU3MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDQxOCk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCx7czowfSl9fSwyMjk5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiZyIpfX0sMzExNjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MTY3KSxhPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihvPTEpO3ZhciBzPWkuZGVmYXVsdC5zZXQoe2g6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCh0KSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMoZSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKG4pLGE6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShvKX0pO3JldHVybiBhLmRlZmF1bHQuc3RyaW5naWZ5KHMpfX0sMzAwODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImgiKX19LDEyMDM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2NTM4KTtlLmhleD1yLmRlZmF1bHQ7dmFyIGk9big2NTM4KTtlLnJnYj1pLmRlZmF1bHQ7dmFyIGE9big2NTM4KTtlLnJnYmE9YS5kZWZhdWx0O3ZhciBvPW4oMzExNik7ZS5oc2w9by5kZWZhdWx0O3ZhciBzPW4oMzExNik7ZS5oc2xhPXMuZGVmYXVsdDt2YXIgYz1uKDI2MTkpO2UudG9LZXl3b3JkPWMuZGVmYXVsdDt2YXIgdT1uKDQzMDcpO2UudG9IZXg9dS5kZWZhdWx0O3ZhciBsPW4oNDEyNSk7ZS50b1JnYmE9bC5kZWZhdWx0O3ZhciBoPW4oNzMyOSk7ZS50b0hzbGE9aC5kZWZhdWx0O3ZhciBmPW4oNjE5Nyk7ZS5jaGFubmVsPWYuZGVmYXVsdDt2YXIgZD1uKDk2NDApO2UucmVkPWQuZGVmYXVsdDt2YXIgcD1uKDIyOTkpO2UuZ3JlZW49cC5kZWZhdWx0O3ZhciB5PW4oMzM5NCk7ZS5ibHVlPXkuZGVmYXVsdDt2YXIgZz1uKDMwMDgpO2UuaHVlPWcuZGVmYXVsdDt2YXIgbT1uKDY0NTEpO2Uuc2F0dXJhdGlvbj1tLmRlZmF1bHQ7dmFyIHY9big5MjM1KTtlLmxpZ2h0bmVzcz12LmRlZmF1bHQ7dmFyIGI9big5MzUzKTtlLmFscGhhPWIuZGVmYXVsdDt2YXIgXz1uKDkzNTMpO2Uub3BhY2l0eT1fLmRlZmF1bHQ7dmFyIHg9bigzMDQyKTtlLmNvbnRyYXN0PXguZGVmYXVsdDt2YXIgdz1uKDgzNDYpO2UubHVtaW5hbmNlPXcuZGVmYXVsdDt2YXIgaz1uKDQxMTcpO2UuaXNEYXJrPWsuZGVmYXVsdDt2YXIgVD1uKDIyMjQpO2UuaXNMaWdodD1ULmRlZmF1bHQ7dmFyIEU9big1ODUpO2UuaXNWYWxpZD1FLmRlZmF1bHQ7dmFyIEM9bigxMDgwKTtlLnNhdHVyYXRlPUMuZGVmYXVsdDt2YXIgUz1uKDk2MTApO2UuZGVzYXR1cmF0ZT1TLmRlZmF1bHQ7dmFyIEE9bigzMjM1KTtlLmxpZ2h0ZW49QS5kZWZhdWx0O3ZhciBNPW4oMTM2NCk7ZS5kYXJrZW49TS5kZWZhdWx0O3ZhciBOPW4oNzE4OSk7ZS5vcGFjaWZ5PU4uZGVmYXVsdDt2YXIgRD1uKDcxODkpO2UuZmFkZUluPUQuZGVmYXVsdDt2YXIgTz1uKDQ5ODkpO2UudHJhbnNwYXJlbnRpemU9Ty5kZWZhdWx0O3ZhciBCPW4oNDk4OSk7ZS5mYWRlT3V0PUIuZGVmYXVsdDt2YXIgTD1uKDczNjEpO2UuY29tcGxlbWVudD1MLmRlZmF1bHQ7dmFyIEk9big1NzIpO2UuZ3JheXNjYWxlPUkuZGVmYXVsdDt2YXIgUj1uKDUzNzEpO2UuYWRqdXN0PVIuZGVmYXVsdDt2YXIgRj1uKDQxOCk7ZS5jaGFuZ2U9Ri5kZWZhdWx0O3ZhciBQPW4oNTY2KTtlLmludmVydD1QLmRlZmF1bHQ7dmFyIGo9bigxODYxKTtlLm1peD1qLmRlZmF1bHQ7dmFyIFk9big3MDgxKTtlLnNjYWxlPVkuZGVmYXVsdH0sNTY2Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSksaT1uKDE4NjEpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTEwMCk7dmFyIG49ci5kZWZhdWx0LnBhcnNlKHQpO3JldHVybiBuLnI9MjU1LW4ucixuLmc9MjU1LW4uZyxuLmI9MjU1LW4uYixpLmRlZmF1bHQobix0LGUpfX0sNDExNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIyMjQpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4hci5kZWZhdWx0KHQpfX0sMjIyNDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDgzNDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LDU4NToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHIuZGVmYXVsdC5wYXJzZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSwzMjM1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTQxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIixlKX19LDkyMzU6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2MTk3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIil9fSw4MzQ2Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt2YXIgZT1pLmRlZmF1bHQucGFyc2UodCksbj1lLnIsYT1lLmcsbz1lLmIscz0uMjEyNipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihuKSsuNzE1MipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihhKSsuMDcyMipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihvKTtyZXR1cm4gci5kZWZhdWx0Lmxhbmcucm91bmQocyl9fSwxODYxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSksaT1uKDY1MzgpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49NTApO3ZhciBhPXIuZGVmYXVsdC5wYXJzZSh0KSxvPWEucixzPWEuZyxjPWEuYix1PWEuYSxsPXIuZGVmYXVsdC5wYXJzZShlKSxoPWwucixmPWwuZyxkPWwuYixwPWwuYSx5PW4vMTAwLGc9Mip5LTEsbT11LXAsdj0oKGcqbT09LTE/ZzooZyttKS8oMStnKm0pKSsxKS8yLGI9MS12LF89byp2K2gqYix4PXMqditmKmIsdz1jKnYrZCpiLGs9dSp5K3AqKDEteSk7cmV0dXJuIGkuZGVmYXVsdChfLHgsdyxrKX19LDcxODk6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLGUpfX0sOTY0MDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInIiKX19LDY1Mzg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oODE2NyksYT1uKDIxOTEpLG89big0MTgpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixzKXtpZih2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1zJiYocz0xKSwibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIG8uZGVmYXVsdCh0LHthOmV9KTt2YXIgYz1pLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIodCksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKGUpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEocyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShjKX19LDEwODA6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLGUpfX0sNjQ1MToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInMiKX19LDcwODE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSksYT1uKDUzNzEpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZhciBuLG8scyxjPWkuZGVmYXVsdC5wYXJzZSh0KSx1PXt9O2Zvcih2YXIgbCBpbiBlKXVbbF09KG49Y1tsXSxvPWVbbF0scz1yLmRlZmF1bHQuY2hhbm5lbC5tYXhbbF0sbz4wPyhzLW4pKm8vMTAwOm4qby8xMDApO3JldHVybiBhLmRlZmF1bHQodCx1KX19LDQzMDc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdC5mb3JtYXQuaGV4LnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sNzMyOToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5oc2xhLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sMjYxOToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5rZXl3b3JkLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sNDEyNToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5yZ2JhLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sNDk4OToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0MTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsLWUpfX0sNzk5NDoodCxlKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxnOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0saDpmdW5jdGlvbih0KXtyZXR1cm4gdCUzNjB9LHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwMD8xMDA6dDwwPzA6dH0sbDpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xPzE6dDwwPzA6dH19LHRvTGluZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXQvMjU1O3JldHVybiB0Pi4wMzkyOD9NYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpOmUvMTIuOTJ9LGh1ZTJyZ2I6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCsoZS10KSooMi8zLW4pKjY6dH0saHNsMnJnYjpmdW5jdGlvbih0LGUpe3ZhciByPXQuaCxpPXQucyxhPXQubDtpZighaSlyZXR1cm4gMi41NSphO3IvPTM2MCxpLz0xMDA7dmFyIG89KGEvPTEwMCk8LjU/YSooMStpKTphK2ktYSppLHM9MiphLW87c3dpdGNoKGUpe2Nhc2UiciI6cmV0dXJuIDI1NSpuLmh1ZTJyZ2IocyxvLHIrMS8zKTtjYXNlImciOnJldHVybiAyNTUqbi5odWUycmdiKHMsbyxyKTtjYXNlImIiOnJldHVybiAyNTUqbi5odWUycmdiKHMsbyxyLTEvMyl9fSxyZ2IyaHNsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5yLHI9dC5nLGk9dC5iO24vPTI1NSxyLz0yNTUsaS89MjU1O3ZhciBhPU1hdGgubWF4KG4scixpKSxvPU1hdGgubWluKG4scixpKSxzPShhK28pLzI7aWYoImwiPT09ZSlyZXR1cm4gMTAwKnM7aWYoYT09PW8pcmV0dXJuIDA7dmFyIGM9YS1vO2lmKCJzIj09PWUpcmV0dXJuIDEwMCoocz4uNT9jLygyLWEtbyk6Yy8oYStvKSk7c3dpdGNoKGEpe2Nhc2UgbjpyZXR1cm4gNjAqKChyLWkpL2MrKHI8aT82OjApKTtjYXNlIHI6cmV0dXJuIDYwKigoaS1uKS9jKzIpO2Nhc2UgaTpyZXR1cm4gNjAqKChuLXIpL2MrNCk7ZGVmYXVsdDpyZXR1cm4tMX19fTtlLmRlZmF1bHQ9bn0sMTA4MzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc5OTQpLGk9big0MDI3KSxhPW4oMzE4KSxvPXtjaGFubmVsOnIuZGVmYXVsdCxsYW5nOmkuZGVmYXVsdCx1bml0OmEuZGVmYXVsdH07ZS5kZWZhdWx0PW99LDQwMjc6KHQsZSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtjbGFtcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGU+bj9NYXRoLm1pbihlLE1hdGgubWF4KG4sdCkpOk1hdGgubWluKG4sTWF0aC5tYXgoZSx0KSl9LHJvdW5kOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDFlMTAqdCkvMWUxMH19O2UuZGVmYXVsdD1ufSwzMTg6KHQsZSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXtkZWMyaGV4OmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD4xP2U6IjAiK2V9fTtlLmRlZmF1bHQ9bn0sODU1MjoodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIkRhdGFWaWV3Iik7dC5leHBvcnRzPXJ9LDE5ODk6KHQsZSxuKT0+e3ZhciByPW4oMTc4OSksaT1uKDQwMSksYT1uKDc2NjcpLG89bigxMzI3KSxzPW4oMTg2Nik7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSw4NDA3Oih0LGUsbik9Pnt2YXIgcj1uKDcwNDApLGk9bigyMTg4KSxhPW4oMjExNyksbz1uKDc1MTgpLHM9big0NzA1KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LDcwNzE6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJNYXAiKTt0LmV4cG9ydHM9cn0sMzM2OToodCxlLG4pPT57dmFyIHI9big0Nzg1KSxpPW4oMTI4NSksYT1uKDZlMyksbz1uKDk5MTYpLHM9big1MjY1KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LDM4MTg6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJQcm9taXNlIik7dC5leHBvcnRzPXJ9LDg1MjU6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJTZXQiKTt0LmV4cG9ydHM9cn0sODY2ODoodCxlLG4pPT57dmFyIHI9bigzMzY5KSxpPW4oNjE5KSxhPW4oMjM4NSk7ZnVuY3Rpb24gbyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgcjsrK2U8bjspdGhpcy5hZGQodFtlXSl9by5wcm90b3R5cGUuYWRkPW8ucHJvdG90eXBlLnB1c2g9aSxvLnByb3RvdHlwZS5oYXM9YSx0LmV4cG9ydHM9b30sNjM4NDoodCxlLG4pPT57dmFyIHI9big4NDA3KSxpPW4oNzQ2NSksYT1uKDM3NzkpLG89big3NTk5KSxzPW4oNDc1OCksYz1uKDQzMDkpO2Z1bmN0aW9uIHUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgcih0KTt0aGlzLnNpemU9ZS5zaXplfXUucHJvdG90eXBlLmNsZWFyPWksdS5wcm90b3R5cGUuZGVsZXRlPWEsdS5wcm90b3R5cGUuZ2V0PW8sdS5wcm90b3R5cGUuaGFzPXMsdS5wcm90b3R5cGUuc2V0PWMsdC5leHBvcnRzPXV9LDI3MDU6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSkuU3ltYm9sO3QuZXhwb3J0cz1yfSwxMTQ5Oih0LGUsbik9Pnt2YXIgcj1uKDU2MzkpLlVpbnQ4QXJyYXk7dC5leHBvcnRzPXJ9LDU3NzoodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIldlYWtNYXAiKTt0LmV4cG9ydHM9cn0sNjg3NDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gdC5jYWxsKGUsblswXSk7Y2FzZSAyOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0pO2Nhc2UgMzpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdLG5bMl0pfXJldHVybiB0LmFwcGx5KGUsbil9fSw3NDEyOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHImJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH19LDQ5NjM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPTAsYT1bXTsrK248cjspe3ZhciBvPXRbbl07ZShvLG4sdCkmJihhW2krK109byl9cmV0dXJuIGF9fSw3NDQzOih0LGUsbik9Pnt2YXIgcj1uKDIxMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEobnVsbD09dHx8IXQubGVuZ3RoKSYmcih0LGUsMCk+LTF9fSwxMTk2OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK3I8aTspaWYobihlLHRbcl0pKXJldHVybiEwO3JldHVybiExfX0sNDYzNjoodCxlLG4pPT57dmFyIHI9bigyNTQ1KSxpPW4oNTY5NCksYT1uKDE0NjkpLG89big0MTQ0KSxzPW4oNTc3NiksYz1uKDY3MTkpLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hKHQpLGw9IW4mJmkodCksaD0hbiYmIWwmJm8odCksZj0hbiYmIWwmJiFoJiZjKHQpLGQ9bnx8bHx8aHx8ZixwPWQ/cih0Lmxlbmd0aCxTdHJpbmcpOltdLHk9cC5sZW5ndGg7Zm9yKHZhciBnIGluIHQpIWUmJiF1LmNhbGwodCxnKXx8ZCYmKCJsZW5ndGgiPT1nfHxoJiYoIm9mZnNldCI9PWd8fCJwYXJlbnQiPT1nKXx8ZiYmKCJidWZmZXIiPT1nfHwiYnl0ZUxlbmd0aCI9PWd8fCJieXRlT2Zmc2V0Ij09Zyl8fHMoZyx5KSl8fHAucHVzaChnKTtyZXR1cm4gcH19LDk5MzI6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPUFycmF5KHIpOysrbjxyOylpW25dPWUodFtuXSxuLHQpO3JldHVybiBpfX0sMjQ4ODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK248cjspdFtpK25dPWVbbl07cmV0dXJuIHR9fSwyNjYzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9LTEsYT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHImJmEmJihuPXRbKytpXSk7KytpPGE7KW49ZShuLHRbaV0saSx0KTtyZXR1cm4gbn19LDI5MDg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248cjspaWYoZSh0W25dLG4sdCkpcmV0dXJuITA7cmV0dXJuITF9fSw4OTgzOih0LGUsbik9Pnt2YXIgcj1uKDM3MSkoImxlbmd0aCIpO3QuZXhwb3J0cz1yfSw2NTU2Oih0LGUsbik9Pnt2YXIgcj1uKDk0NjUpLGk9big3ODEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyh2b2lkIDAhPT1uJiYhaSh0W2VdLG4pfHx2b2lkIDA9PT1uJiYhKGUgaW4gdCkpJiZyKHQsZSxuKX19LDQ4NjU6KHQsZSxuKT0+e3ZhciByPW4oOTQ2NSksaT1uKDc4MTMpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPXRbZV07YS5jYWxsKHQsZSkmJmkobyxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sODQ3MDoodCxlLG4pPT57dmFyIHI9big3ODEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5sZW5ndGg7bi0tOylpZihyKHRbbl1bMF0sZSkpcmV0dXJuIG47cmV0dXJuLTF9fSw0MDM3Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSwzODg2Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigxNzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSw5NDY1Oih0LGUsbik9Pnt2YXIgcj1uKDg3NzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Il9fcHJvdG9fXyI9PWUmJnI/cih0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTp0W2VdPW59fSw1OTkwOih0LGUsbik9Pnt2YXIgcj1uKDYzODQpLGk9big3NDEyKSxhPW4oNDg2NSksbz1uKDQwMzcpLHM9bigzODg2KSxjPW4oNDYyNiksdT1uKDI3OCksbD1uKDg4MDUpLGg9bigxOTExKSxmPW4oODIzNCksZD1uKDY5MDQpLHA9big0MTYwKSx5PW4oMzgyNCksZz1uKDkxNDgpLG09big4NTE3KSx2PW4oMTQ2OSksYj1uKDQxNDQpLF89big2Njg4KSx4PW4oMzIxOCksdz1uKDI5MjgpLGs9bigzNjc0KSxUPW4oMTcwNCksRT0iW29iamVjdCBBcmd1bWVudHNdIixDPSJbb2JqZWN0IEZ1bmN0aW9uXSIsUz0iW29iamVjdCBPYmplY3RdIixBPXt9O0FbRV09QVsiW29iamVjdCBBcnJheV0iXT1BWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUFbIltvYmplY3QgRGF0YVZpZXddIl09QVsiW29iamVjdCBCb29sZWFuXSJdPUFbIltvYmplY3QgRGF0ZV0iXT1BWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1BWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1BWyJbb2JqZWN0IEludDhBcnJheV0iXT1BWyJbb2JqZWN0IEludDE2QXJyYXldIl09QVsiW29iamVjdCBJbnQzMkFycmF5XSJdPUFbIltvYmplY3QgTWFwXSJdPUFbIltvYmplY3QgTnVtYmVyXSJdPUFbU109QVsiW29iamVjdCBSZWdFeHBdIl09QVsiW29iamVjdCBTZXRdIl09QVsiW29iamVjdCBTdHJpbmddIl09QVsiW29iamVjdCBTeW1ib2xdIl09QVsiW29iamVjdCBVaW50OEFycmF5XSJdPUFbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09QVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1BWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLEFbIltvYmplY3QgRXJyb3JdIl09QVtDXT1BWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLE0sTixELE8pe3ZhciBCLEw9MSZuLEk9MiZuLFI9NCZuO2lmKE0mJihCPUQ/TShlLE4sRCxPKTpNKGUpKSx2b2lkIDAhPT1CKXJldHVybiBCO2lmKCF4KGUpKXJldHVybiBlO3ZhciBGPXYoZSk7aWYoRil7aWYoQj15KGUpLCFMKXJldHVybiB1KGUsQil9ZWxzZXt2YXIgUD1wKGUpLGo9UD09Q3x8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09UDtpZihiKGUpKXJldHVybiBjKGUsTCk7aWYoUD09U3x8UD09RXx8aiYmIUQpe2lmKEI9SXx8aj97fTptKGUpLCFMKXJldHVybiBJP2goZSxzKEIsZSkpOmwoZSxvKEIsZSkpfWVsc2V7aWYoIUFbUF0pcmV0dXJuIEQ/ZTp7fTtCPWcoZSxQLEwpfX1PfHwoTz1uZXcgcik7dmFyIFk9Ty5nZXQoZSk7aWYoWSlyZXR1cm4gWTtPLnNldChlLEIpLHcoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtCLmFkZCh0KHIsbixNLHIsZSxPKSl9KSk6XyhlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe0Iuc2V0KGksdChyLG4sTSxpLGUsTykpfSkpO3ZhciB6PUY/dm9pZCAwOihSP0k/ZDpmOkk/VDprKShlKTtyZXR1cm4gaSh6fHxlLChmdW5jdGlvbihyLGkpe3omJihyPWVbaT1yXSksYShCLGksdChyLG4sTSxpLGUsTykpfSkpLEJ9fSwzMTE4Oih0LGUsbik9Pnt2YXIgcj1uKDMyMTgpLGk9T2JqZWN0LmNyZWF0ZSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIXIoZSkpcmV0dXJue307aWYoaSlyZXR1cm4gaShlKTt0LnByb3RvdHlwZT1lO3ZhciBuPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsbn19KCk7dC5leHBvcnRzPWF9LDk4ODE6KHQsZSxuKT0+e3ZhciByPW4oNzgxNiksaT1uKDkyOTEpKHIpO3QuZXhwb3J0cz1pfSw2MDI5Oih0LGUsbik9Pnt2YXIgcj1uKDM0NDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXt2YXIgbz10W2ldLHM9ZShvKTtpZihudWxsIT1zJiYodm9pZCAwPT09Yz9zPT1zJiYhcihzKTpuKHMsYykpKXZhciBjPXMsdT1vfXJldHVybiB1fX0sNzYwOih0LGUsbik9Pnt2YXIgcj1uKDk4ODEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixpKXtlKHQscixpKSYmbi5wdXNoKHQpfSkpLG59fSwxODQ4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bisocj8xOi0xKTtyP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9fSwxMDc4Oih0LGUsbik9Pnt2YXIgcj1uKDI0ODgpLGk9big3Mjg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3ZhciBjPS0xLHU9ZS5sZW5ndGg7Zm9yKGF8fChhPWkpLHN8fChzPVtdKTsrK2M8dTspe3ZhciBsPWVbY107bj4wJiZhKGwpP24+MT90KGwsbi0xLGEsbyxzKTpyKHMsbCk6b3x8KHNbcy5sZW5ndGhdPWwpfXJldHVybiBzfX0sODQ4MzoodCxlLG4pPT57dmFyIHI9big1MDYzKSgpO3QuZXhwb3J0cz1yfSw3ODE2Oih0LGUsbik9Pnt2YXIgcj1uKDg0ODMpLGk9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcih0LGUsaSl9fSw3Nzg2Oih0LGUsbik9Pnt2YXIgcj1uKDE4MTEpLGk9bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGE9KGU9cihlLHQpKS5sZW5ndGg7bnVsbCE9dCYmbjxhOyl0PXRbaShlW24rK10pXTtyZXR1cm4gbiYmbj09YT90OnZvaWQgMH19LDg4NjY6KHQsZSxuKT0+e3ZhciByPW4oMjQ4OCksaT1uKDE0NjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZSh0KTtyZXR1cm4gaSh0KT9hOnIoYSxuKHQpKX19LDQyMzk6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1uKDk2MDcpLGE9bigyMzMzKSxvPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOm8mJm8gaW4gT2JqZWN0KHQpP2kodCk6YSh0KX19LDMzMjU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PmV9fSw4NTY1OnQ9Pnt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsIT10JiZlLmNhbGwodCxuKX19LDEzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9fSwyMTE4Oih0LGUsbik9Pnt2YXIgcj1uKDE4NDgpLGk9bigyNzIyKSxhPW4oMjM1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT09ZT9hKHQsZSxuKTpyKHQsaSxuKX19LDk0NTQ6KHQsZSxuKT0+e3ZhciByPW4oNDIzOSksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXIodCl9fSw5Mzk6KHQsZSxuKT0+e3ZhciByPW4oMjQ5MiksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7cmV0dXJuIGU9PT1ufHwobnVsbD09ZXx8bnVsbD09bnx8IWkoZSkmJiFpKG4pP2UhPWUmJm4hPW46cihlLG4sYSxvLHQscykpfX0sMjQ5MjoodCxlLG4pPT57dmFyIHI9big2Mzg0KSxpPW4oNzExNCksYT1uKDgzNTEpLG89big2MDk2KSxzPW4oNDE2MCksYz1uKDE0NjkpLHU9big0MTQ0KSxsPW4oNjcxOSksaD0iW29iamVjdCBBcmd1bWVudHNdIixmPSJbb2JqZWN0IEFycmF5XSIsZD0iW29iamVjdCBPYmplY3RdIixwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHksZyxtKXt2YXIgdj1jKHQpLGI9YyhlKSxfPXY/ZjpzKHQpLHg9Yj9mOnMoZSksdz0oXz1fPT1oP2Q6Xyk9PWQsaz0oeD14PT1oP2Q6eCk9PWQsVD1fPT14O2lmKFQmJnUodCkpe2lmKCF1KGUpKXJldHVybiExO3Y9ITAsdz0hMX1pZihUJiYhdylyZXR1cm4gbXx8KG09bmV3IHIpLHZ8fGwodCk/aSh0LGUsbix5LGcsbSk6YSh0LGUsXyxuLHksZyxtKTtpZighKDEmbikpe3ZhciBFPXcmJnAuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLEM9ayYmcC5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYoRXx8Qyl7dmFyIFM9RT90LnZhbHVlKCk6dCxBPUM/ZS52YWx1ZSgpOmU7cmV0dXJuIG18fChtPW5ldyByKSxnKFMsQSxuLHksbSl9fXJldHVybiEhVCYmKG18fChtPW5ldyByKSxvKHQsZSxuLHksZyxtKSl9fSw1NTg4Oih0LGUsbik9Pnt2YXIgcj1uKDQxNjApLGk9big3MDA1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IE1hcF0iPT1yKHQpfX0sMjk1ODoodCxlLG4pPT57dmFyIHI9big2Mzg0KSxpPW4oOTM5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bi5sZW5ndGgscz1vLGM9IWE7aWYobnVsbD09dClyZXR1cm4hcztmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIHU9bltvXTtpZihjJiZ1WzJdP3VbMV0hPT10W3VbMF1dOiEodVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHM7KXt2YXIgbD0odT1uW29dKVswXSxoPXRbbF0sZj11WzFdO2lmKGMmJnVbMl0pe2lmKHZvaWQgMD09PWgmJiEobCBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyByO2lmKGEpdmFyIHA9YShoLGYsbCx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP2koZixoLDMsYSxkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9fSwyNzIyOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSw4NDU4Oih0LGUsbik9Pnt2YXIgcj1uKDM1NjApLGk9big1MzQ2KSxhPW4oMzIxOCksbz1uKDM0Nikscz0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxjPUZ1bmN0aW9uLnByb3RvdHlwZSx1PU9iamVjdC5wcm90b3R5cGUsbD1jLnRvU3RyaW5nLGg9dS5oYXNPd25Qcm9wZXJ0eSxmPVJlZ0V4cCgiXiIrbC5jYWxsKGgpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFhKHQpfHxpKHQpKSYmKHIodCk/ZjpzKS50ZXN0KG8odCkpfX0sOTIyMToodCxlLG4pPT57dmFyIHI9big0MTYwKSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBTZXRdIj09cih0KX19LDg3NDk6KHQsZSxuKT0+e3ZhciByPW4oNDIzOSksaT1uKDE3ODApLGE9big3MDA1KSxvPXt9O29bIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW9bIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW9bIltvYmplY3QgSW50OEFycmF5XSJdPW9bIltvYmplY3QgSW50MTZBcnJheV0iXT1vWyJbb2JqZWN0IEludDMyQXJyYXldIl09b1siW29iamVjdCBVaW50OEFycmF5XSJdPW9bIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b1siW29iamVjdCBVaW50MTZBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLG9bIltvYmplY3QgQXJndW1lbnRzXSJdPW9bIltvYmplY3QgQXJyYXldIl09b1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1vWyJbb2JqZWN0IEJvb2xlYW5dIl09b1siW29iamVjdCBEYXRhVmlld10iXT1vWyJbb2JqZWN0IERhdGVdIl09b1siW29iamVjdCBFcnJvcl0iXT1vWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW9bIltvYmplY3QgTWFwXSJdPW9bIltvYmplY3QgTnVtYmVyXSJdPW9bIltvYmplY3QgT2JqZWN0XSJdPW9bIltvYmplY3QgUmVnRXhwXSJdPW9bIltvYmplY3QgU2V0XSJdPW9bIltvYmplY3QgU3RyaW5nXSJdPW9bIltvYmplY3QgV2Vha01hcF0iXT0hMSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkmJmkodC5sZW5ndGgpJiYhIW9bcih0KV19fSw3MjA2Oih0LGUsbik9Pnt2YXIgcj1uKDE1NzMpLGk9big2NDMyKSxhPW4oNjU1Nyksbz1uKDE0NjkpLHM9big5NjAxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsPT10P2E6Im9iamVjdCI9PXR5cGVvZiB0P28odCk/aSh0WzBdLHRbMV0pOnIodCk6cyh0KX19LDI4MDoodCxlLG4pPT57dmFyIHI9big1NzI2KSxpPW4oNjkxNiksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm4gaSh0KTt2YXIgZT1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWEuY2FsbCh0LG4pJiYiY29uc3RydWN0b3IiIT1uJiZlLnB1c2gobik7cmV0dXJuIGV9fSwzMTM6KHQsZSxuKT0+e3ZhciByPW4oMzIxOCksaT1uKDU3MjYpLGE9bigzNDk4KSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBhKHQpO3ZhciBlPWkodCksbj1bXTtmb3IodmFyIHMgaW4gdCkoImNvbnN0cnVjdG9yIiE9c3x8IWUmJm8uY2FsbCh0LHMpKSYmbi5wdXNoKHMpO3JldHVybiBufX0sNDMzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sOTE5OToodCxlLG4pPT57dmFyIHI9big5ODgxKSxpPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEsYT1pKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7YVsrK25dPWUodCxyLGkpfSkpLGF9fSwxNTczOih0LGUsbik9Pnt2YXIgcj1uKDI5NTgpLGk9bigxNDk5KSxhPW4oMjYzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP2EoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fHIobix0LGUpfX19LDY0MzI6KHQsZSxuKT0+e3ZhciByPW4oOTM5KSxpPW4oMTkxNyksYT1uKDkwOTUpLG89big1NDAzKSxzPW4oOTE2MiksYz1uKDI2MzQpLHU9bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvKHQpJiZzKGUpP2ModSh0KSxlKTpmdW5jdGlvbihuKXt2YXIgbz1pKG4sdCk7cmV0dXJuIHZvaWQgMD09PW8mJm89PT1lP2Eobix0KTpyKGUsbywzKX19fSwyOTgwOih0LGUsbik9Pnt2YXIgcj1uKDYzODQpLGk9big2NTU2KSxhPW4oODQ4Myksbz1uKDk3ODMpLHM9bigzMjE4KSxjPW4oMTcwNCksdT1uKDYzOTApO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixsLGgsZil7ZSE9PW4mJmEobiwoZnVuY3Rpb24oYSxjKXtpZihmfHwoZj1uZXcgcikscyhhKSlvKGUsbixjLGwsdCxoLGYpO2Vsc2V7dmFyIGQ9aD9oKHUoZSxjKSxhLGMrIiIsZSxuLGYpOnZvaWQgMDt2b2lkIDA9PT1kJiYoZD1hKSxpKGUsYyxkKX19KSxjKX19LDk3ODM6KHQsZSxuKT0+e3ZhciByPW4oNjU1NiksaT1uKDQ2MjYpLGE9big3MTMzKSxvPW4oMjc4KSxzPW4oODUxNyksYz1uKDU2OTQpLHU9bigxNDY5KSxsPW4oOTI0NiksaD1uKDQxNDQpLGY9bigzNTYwKSxkPW4oMzIxOCkscD1uKDg2MzApLHk9big2NzE5KSxnPW4oNjM5MCksbT1uKDM2NzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix2LGIsXyx4KXt2YXIgdz1nKHQsbiksaz1nKGUsbiksVD14LmdldChrKTtpZihUKXIodCxuLFQpO2Vsc2V7dmFyIEU9Xz9fKHcsayxuKyIiLHQsZSx4KTp2b2lkIDAsQz12b2lkIDA9PT1FO2lmKEMpe3ZhciBTPXUoayksQT0hUyYmaChrKSxNPSFTJiYhQSYmeShrKTtFPWssU3x8QXx8TT91KHcpP0U9dzpsKHcpP0U9byh3KTpBPyhDPSExLEU9aShrLCEwKSk6TT8oQz0hMSxFPWEoaywhMCkpOkU9W106cChrKXx8YyhrKT8oRT13LGModyk/RT1tKHcpOmQodykmJiFmKHcpfHwoRT1zKGspKSk6Qz0hMX1DJiYoeC5zZXQoayxFKSxiKEUsayx2LF8seCkseC5kZWxldGUoaykpLHIodCxuLEUpfX19LDk1NTY6KHQsZSxuKT0+e3ZhciByPW4oOTkzMiksaT1uKDc3ODYpLGE9big3MjA2KSxvPW4oOTE5OSkscz1uKDExMzEpLGM9bigxNzE3KSx1PW4oNTAyMiksbD1uKDY1NTcpLGg9bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2U9ZS5sZW5ndGg/cihlLChmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT9mdW5jdGlvbihlKXtyZXR1cm4gaShlLDE9PT10Lmxlbmd0aD90WzBdOnQpfTp0fSkpOltsXTt2YXIgZj0tMTtlPXIoZSxjKGEpKTt2YXIgZD1vKHQsKGZ1bmN0aW9uKHQsbixpKXtyZXR1cm57Y3JpdGVyaWE6cihlLChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxpbmRleDorK2YsdmFsdWU6dH19KSk7cmV0dXJuIHMoZCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LGUsbil9KSl9fSw1OTcwOih0LGUsbik9Pnt2YXIgcj1uKDMwMTIpLGk9big5MDk1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkodCxuKX0pKX19LDMwMTI6KHQsZSxuKT0+e3ZhciByPW4oNzc4NiksaT1uKDYxMSksYT1uKDE4MTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPS0xLHM9ZS5sZW5ndGgsYz17fTsrK288czspe3ZhciB1PWVbb10sbD1yKHQsdSk7bihsLHUpJiZpKGMsYSh1LHQpLGwpfXJldHVybiBjfX0sMzcxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX19LDkxNTI6KHQsZSxuKT0+e3ZhciByPW4oNzc4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihlLHQpfX19LDk4OnQ9Pnt2YXIgZT1NYXRoLmNlaWwsbj1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyLGksYSl7Zm9yKHZhciBvPS0xLHM9bihlKChyLXQpLyhpfHwxKSksMCksYz1BcnJheShzKTtzLS07KWNbYT9zOisrb109dCx0Kz1pO3JldHVybiBjfX0sMTA3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gaSh0LChmdW5jdGlvbih0LGksYSl7bj1yPyhyPSExLHQpOmUobix0LGksYSl9KSksbn19LDU5NzY6KHQsZSxuKT0+e3ZhciByPW4oNjU1NyksaT1uKDUzNTcpLGE9big2MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoaSh0LGUsciksdCsiIil9fSw2MTE6KHQsZSxuKT0+e3ZhciByPW4oNDg2NSksaT1uKDE4MTEpLGE9big1Nzc2KSxvPW4oMzIxOCkscz1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe2lmKCFvKHQpKXJldHVybiB0O2Zvcih2YXIgdT0tMSxsPShlPWkoZSx0KSkubGVuZ3RoLGg9bC0xLGY9dDtudWxsIT1mJiYrK3U8bDspe3ZhciBkPXMoZVt1XSkscD1uO2lmKCJfX3Byb3RvX18iPT09ZHx8ImNvbnN0cnVjdG9yIj09PWR8fCJwcm90b3R5cGUiPT09ZClyZXR1cm4gdDtpZih1IT1oKXt2YXIgeT1mW2RdO3ZvaWQgMD09PShwPWM/Yyh5LGQsZik6dm9pZCAwKSYmKHA9byh5KT95OmEoZVt1KzFdKT9bXTp7fSl9cihmLGQscCksZj1mW2RdfXJldHVybiB0fX0sNjU2MDoodCxlLG4pPT57dmFyIHI9big1NzAzKSxpPW4oODc3NyksYT1uKDY1NTcpLG89aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6cihlKSx3cml0YWJsZTohMH0pfTphO3QuZXhwb3J0cz1vfSwxMTMxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmxlbmd0aDtmb3IodC5zb3J0KGUpO24tLTspdFtuXT10W25dLnZhbHVlO3JldHVybiB0fX0sMjU0NTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9QXJyYXkodCk7KytuPHQ7KXJbbl09ZShuKTtyZXR1cm4gcn19LDUzMToodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPW4oOTkzMiksYT1uKDE0NjkpLG89bigzNDQ4KSxzPXI/ci5wcm90b3R5cGU6dm9pZCAwLGM9cz9zLnRvU3RyaW5nOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYShlKSlyZXR1cm4gaShlLHQpKyIiO2lmKG8oZSkpcmV0dXJuIGM/Yy5jYWxsKGUpOiIiO3ZhciBuPWUrIiI7cmV0dXJuIjAiPT1uJiYxL2U9PS0xLzA/Ii0wIjpufX0sNzU2MToodCxlLG4pPT57dmFyIHI9big3OTkwKSxpPS9eXHMrLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5zbGljZSgwLHIodCkrMSkucmVwbGFjZShpLCIiKTp0fX0sMTcxNzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19fSw1NjUyOih0LGUsbik9Pnt2YXIgcj1uKDg2NjgpLGk9big3NDQzKSxhPW4oMTE5Niksbz1uKDQ3NTcpLHM9bigzNTkzKSxjPW4oMTgxNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT0tMSxsPWksaD10Lmxlbmd0aCxmPSEwLGQ9W10scD1kO2lmKG4pZj0hMSxsPWE7ZWxzZSBpZihoPj0yMDApe3ZhciB5PWU/bnVsbDpzKHQpO2lmKHkpcmV0dXJuIGMoeSk7Zj0hMSxsPW8scD1uZXcgcn1lbHNlIHA9ZT9bXTpkO3Q6Zm9yKDsrK3U8aDspe3ZhciBnPXRbdV0sbT1lP2UoZyk6ZztpZihnPW58fDAhPT1nP2c6MCxmJiZtPT1tKXtmb3IodmFyIHY9cC5sZW5ndGg7di0tOylpZihwW3ZdPT09bSljb250aW51ZSB0O2UmJnAucHVzaChtKSxkLnB1c2goZyl9ZWxzZSBsKHAsbSxuKXx8KHAhPT1kJiZwLnB1c2gobSksZC5wdXNoKGcpKX1yZXR1cm4gZH19LDc0MTU6KHQsZSxuKT0+e3ZhciByPW4oOTkzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9fSwxNzU3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgsbz17fTsrK3I8aTspe3ZhciBzPXI8YT9lW3JdOnZvaWQgMDtuKG8sdFtyXSxzKX1yZXR1cm4gb319LDQ3NTc6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmhhcyhlKX19LDQyOTA6KHQsZSxuKT0+e3ZhciByPW4oNjU1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cn19LDE4MTE6KHQsZSxuKT0+e3ZhciByPW4oMTQ2OSksaT1uKDU0MDMpLGE9big1NTE0KSxvPW4oOTgzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCk/dDppKHQsZSk/W3RdOmEobyh0KSl9fSw0MzE4Oih0LGUsbik9Pnt2YXIgcj1uKDExNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgcihlKS5zZXQobmV3IHIodCkpLGV9fSw0NjI2Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPW4oNTYzOSksaT1lJiYhZS5ub2RlVHlwZSYmZSxhPWkmJnQmJiF0Lm5vZGVUeXBlJiZ0LG89YSYmYS5leHBvcnRzPT09aT9yLkJ1ZmZlcjp2b2lkIDAscz1vP28uYWxsb2NVbnNhZmU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgbj10Lmxlbmd0aCxyPXM/cyhuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KHIpLHJ9fSw3MTU3Oih0LGUsbik9Pnt2YXIgcj1uKDQzMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWU/cih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9fSwzMTQ3OnQ9Pnt2YXIgZT0vXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLGUuZXhlYyh0KSk7cmV0dXJuIG4ubGFzdEluZGV4PXQubGFzdEluZGV4LG59fSw0MTk6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1yP3IucHJvdG90eXBlOnZvaWQgMCxhPWk/aS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/T2JqZWN0KGEuY2FsbCh0KSk6e319fSw3MTMzOih0LGUsbik9Pnt2YXIgcj1uKDQzMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWU/cih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQubGVuZ3RoKX19LDYzOTM6KHQsZSxuKT0+e3ZhciByPW4oMzQ0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpe3ZhciBuPXZvaWQgMCE9PXQsaT1udWxsPT09dCxhPXQ9PXQsbz1yKHQpLHM9dm9pZCAwIT09ZSxjPW51bGw9PT1lLHU9ZT09ZSxsPXIoZSk7aWYoIWMmJiFsJiYhbyYmdD5lfHxvJiZzJiZ1JiYhYyYmIWx8fGkmJnMmJnV8fCFuJiZ1fHwhYSlyZXR1cm4gMTtpZighaSYmIW8mJiFsJiZ0PGV8fGwmJm4mJmEmJiFpJiYhb3x8YyYmbiYmYXx8IXMmJmF8fCF1KXJldHVybi0xfXJldHVybiAwfX0sNTAyMjoodCxlLG4pPT57dmFyIHI9big2MzkzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQuY3JpdGVyaWEsbz1lLmNyaXRlcmlhLHM9YS5sZW5ndGgsYz1uLmxlbmd0aDsrK2k8czspe3ZhciB1PXIoYVtpXSxvW2ldKTtpZih1KXJldHVybiBpPj1jP3U6dSooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9fSwyNzg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KHIpKTsrK248cjspZVtuXT10W25dO3JldHVybiBlfX0sODM2MzoodCxlLG4pPT57dmFyIHI9big0ODY1KSxpPW4oOTQ2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPSFuO258fChuPXt9KTtmb3IodmFyIHM9LTEsYz1lLmxlbmd0aDsrK3M8Yzspe3ZhciB1PWVbc10sbD1hP2Eoblt1XSx0W3VdLHUsbix0KTp2b2lkIDA7dm9pZCAwPT09bCYmKGw9dFt1XSksbz9pKG4sdSxsKTpyKG4sdSxsKX1yZXR1cm4gbn19LDg4MDU6KHQsZSxuKT0+e3ZhciByPW4oODM2MyksaT1uKDk1NTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LDE5MTE6KHQsZSxuKT0+e3ZhciByPW4oODM2MyksaT1uKDE0NDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LDQ0Mjk6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSlbIl9fY29yZS1qc19zaGFyZWRfXyJdO3QuZXhwb3J0cz1yfSwxNzUwOih0LGUsbik9Pnt2YXIgcj1uKDU5NzYpLGk9big2NjEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKGUsbil7dmFyIHI9LTEsYT1uLmxlbmd0aCxvPWE+MT9uW2EtMV06dm9pZCAwLHM9YT4yP25bMl06dm9pZCAwO2ZvcihvPXQubGVuZ3RoPjMmJiJmdW5jdGlvbiI9PXR5cGVvZiBvPyhhLS0sbyk6dm9pZCAwLHMmJmkoblswXSxuWzFdLHMpJiYobz1hPDM/dm9pZCAwOm8sYT0xKSxlPU9iamVjdChlKTsrK3I8YTspe3ZhciBjPW5bcl07YyYmdChlLGMscixvKX1yZXR1cm4gZX0pKX19LDkyOTE6KHQsZSxuKT0+e3ZhciByPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYobnVsbD09bilyZXR1cm4gbjtpZighcihuKSlyZXR1cm4gdChuLGkpO2Zvcih2YXIgYT1uLmxlbmd0aCxvPWU/YTotMSxzPU9iamVjdChuKTsoZT9vLS06KytvPGEpJiYhMSE9PWkoc1tvXSxvLHMpOyk7cmV0dXJuIG59fX0sNTA2Mzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLG89cihlKSxzPW8ubGVuZ3RoO3MtLTspe3ZhciBjPW9bdD9zOisraV07aWYoITE9PT1uKGFbY10sYyxhKSlicmVha31yZXR1cm4gZX19fSw3NzQwOih0LGUsbik9Pnt2YXIgcj1uKDcyMDYpLGk9big4NjEyKSxhPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7dmFyIHM9T2JqZWN0KGUpO2lmKCFpKGUpKXt2YXIgYz1yKG4sMyk7ZT1hKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGMoc1t0XSx0LHMpfX12YXIgdT10KGUsbixvKTtyZXR1cm4gdT4tMT9zW2M/ZVt1XTp1XTp2b2lkIDB9fX0sNzQ0NToodCxlLG4pPT57dmFyIHI9big5OCksaT1uKDY2MTIpLGE9big4NjAxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gbyYmIm51bWJlciIhPXR5cGVvZiBvJiZpKGUsbixvKSYmKG49bz12b2lkIDApLGU9YShlKSx2b2lkIDA9PT1uPyhuPWUsZT0wKTpuPWEobiksbz12b2lkIDA9PT1vP2U8bj8xOi0xOmEobykscihlLG4sbyx0KX19fSwzNTkzOih0LGUsbik9Pnt2YXIgcj1uKDg1MjUpLGk9bigzMDgpLGE9bigxODE0KSxvPXImJjEvYShuZXcgcihbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKHQpfTppO3QuZXhwb3J0cz1vfSw4Nzc3Oih0LGUsbik9Pnt2YXIgcj1uKDg1MiksaT1mdW5jdGlvbigpe3RyeXt2YXIgdD1yKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1pfSw3MTE0Oih0LGUsbik9Pnt2YXIgcj1uKDg2NjgpLGk9bigyOTA4KSxhPW4oNDc1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8scyxjKXt2YXIgdT0xJm4sbD10Lmxlbmd0aCxoPWUubGVuZ3RoO2lmKGwhPWgmJiEodSYmaD5sKSlyZXR1cm4hMTt2YXIgZj1jLmdldCh0KSxkPWMuZ2V0KGUpO2lmKGYmJmQpcmV0dXJuIGY9PWUmJmQ9PXQ7dmFyIHA9LTEseT0hMCxnPTImbj9uZXcgcjp2b2lkIDA7Zm9yKGMuc2V0KHQsZSksYy5zZXQoZSx0KTsrK3A8bDspe3ZhciBtPXRbcF0sdj1lW3BdO2lmKG8pdmFyIGI9dT9vKHYsbSxwLGUsdCxjKTpvKG0sdixwLHQsZSxjKTtpZih2b2lkIDAhPT1iKXtpZihiKWNvbnRpbnVlO3k9ITE7YnJlYWt9aWYoZyl7aWYoIWkoZSwoZnVuY3Rpb24odCxlKXtpZighYShnLGUpJiYobT09PXR8fHMobSx0LG4sbyxjKSkpcmV0dXJuIGcucHVzaChlKX0pKSl7eT0hMTticmVha319ZWxzZSBpZihtIT09diYmIXMobSx2LG4sbyxjKSl7eT0hMTticmVha319cmV0dXJuIGMuZGVsZXRlKHQpLGMuZGVsZXRlKGUpLHl9fSw4MzUxOih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9bigxMTQ5KSxhPW4oNzgxMyksbz1uKDcxMTQpLHM9big4Nzc2KSxjPW4oMTgxNCksdT1yP3IucHJvdG90eXBlOnZvaWQgMCxsPXU/dS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scix1LGgsZil7c3dpdGNoKG4pe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWgobmV3IGkodCksbmV3IGkoZSkpKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiBhKCt0LCtlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIHQ9PWUrIiI7Y2FzZSJbb2JqZWN0IE1hcF0iOnZhciBkPXM7Y2FzZSJbb2JqZWN0IFNldF0iOnZhciBwPTEmcjtpZihkfHwoZD1jKSx0LnNpemUhPWUuc2l6ZSYmIXApcmV0dXJuITE7dmFyIHk9Zi5nZXQodCk7aWYoeSlyZXR1cm4geT09ZTtyfD0yLGYuc2V0KHQsZSk7dmFyIGc9byhkKHQpLGQoZSkscix1LGgsZik7cmV0dXJuIGYuZGVsZXRlKHQpLGc7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKGwpcmV0dXJuIGwuY2FsbCh0KT09bC5jYWxsKGUpfXJldHVybiExfX0sNjA5NjoodCxlLG4pPT57dmFyIHI9big4MjM0KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEsbyxzKXt2YXIgYz0xJm4sdT1yKHQpLGw9dS5sZW5ndGg7aWYobCE9cihlKS5sZW5ndGgmJiFjKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXVbaF07aWYoIShjP2YgaW4gZTppLmNhbGwoZSxmKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQodCkscD1zLmdldChlKTtpZihkJiZwKXJldHVybiBkPT1lJiZwPT10O3ZhciB5PSEwO3Muc2V0KHQsZSkscy5zZXQoZSx0KTtmb3IodmFyIGc9YzsrK2g8bDspe3ZhciBtPXRbZj11W2hdXSx2PWVbZl07aWYoYSl2YXIgYj1jP2EodixtLGYsZSx0LHMpOmEobSx2LGYsdCxlLHMpO2lmKCEodm9pZCAwPT09Yj9tPT09dnx8byhtLHYsbixhLHMpOmIpKXt5PSExO2JyZWFrfWd8fChnPSJjb25zdHJ1Y3RvciI9PWYpfWlmKHkmJiFnKXt2YXIgXz10LmNvbnN0cnVjdG9yLHg9ZS5jb25zdHJ1Y3RvcjtfPT14fHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgXyYmImZ1bmN0aW9uIj09dHlwZW9mIHgmJnggaW5zdGFuY2VvZiB4fHwoeT0hMSl9cmV0dXJuIHMuZGVsZXRlKHQpLHMuZGVsZXRlKGUpLHl9fSw5MDIxOih0LGUsbik9Pnt2YXIgcj1uKDU1NjQpLGk9big1MzU3KSxhPW4oNjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQsdm9pZCAwLHIpLHQrIiIpfX0sMTk1NzoodCxlLG4pPT57dmFyIHI9Im9iamVjdCI9PXR5cGVvZiBuLmcmJm4uZyYmbi5nLk9iamVjdD09PU9iamVjdCYmbi5nO3QuZXhwb3J0cz1yfSw4MjM0Oih0LGUsbik9Pnt2YXIgcj1uKDg4NjYpLGk9big5NTUxKSxhPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LDY5MDQ6KHQsZSxuKT0+e3ZhciByPW4oODg2NiksaT1uKDE0NDIpLGE9bigxNzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxhLGkpfX0sNTA1MDoodCxlLG4pPT57dmFyIHI9big3MDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Ll9fZGF0YV9fO3JldHVybiByKGUpP25bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06bi5tYXB9fSwxNDk5Oih0LGUsbik9Pnt2YXIgcj1uKDkxNjIpLGk9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodCksbj1lLmxlbmd0aDtuLS07KXt2YXIgYT1lW25dLG89dFthXTtlW25dPVthLG8scihvKV19cmV0dXJuIGV9fSw4NTI6KHQsZSxuKT0+e3ZhciByPW4oODQ1OCksaT1uKDc4MDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkodCxlKTtyZXR1cm4gcihuKT9uOnZvaWQgMH19LDU5MjQ6KHQsZSxuKT0+e3ZhciByPW4oNTU2OSkoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dC5leHBvcnRzPXJ9LDk2MDc6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1PYmplY3QucHJvdG90eXBlLGE9aS5oYXNPd25Qcm9wZXJ0eSxvPWkudG9TdHJpbmcscz1yP3IudG9TdHJpbmdUYWc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hLmNhbGwodCxzKSxuPXRbc107dHJ5e3Rbc109dm9pZCAwO3ZhciByPSEwfWNhdGNoKHQpe312YXIgaT1vLmNhbGwodCk7cmV0dXJuIHImJihlP3Rbc109bjpkZWxldGUgdFtzXSksaX19LDk1NTE6KHQsZSxuKT0+e3ZhciByPW4oNDk2MyksaT1uKDQ3OSksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzPW8/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9T2JqZWN0KHQpLHIobyh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2FsbCh0LGUpfSkpKX06aTt0LmV4cG9ydHM9c30sMTQ0MjoodCxlLG4pPT57dmFyIHI9bigyNDg4KSxpPW4oNTkyNCksYT1uKDk1NTEpLG89big0NzkpLHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspcihlLGEodCkpLHQ9aSh0KTtyZXR1cm4gZX06bzt0LmV4cG9ydHM9c30sNDE2MDoodCxlLG4pPT57dmFyIHI9big4NTUyKSxpPW4oNzA3MSksYT1uKDM4MTgpLG89big4NTI1KSxzPW4oNTc3KSxjPW4oNDIzOSksdT1uKDM0NiksbD0iW29iamVjdCBNYXBdIixoPSJbb2JqZWN0IFByb21pc2VdIixmPSJbb2JqZWN0IFNldF0iLGQ9IltvYmplY3QgV2Vha01hcF0iLHA9IltvYmplY3QgRGF0YVZpZXddIix5PXUociksZz11KGkpLG09dShhKSx2PXUobyksYj11KHMpLF89YzsociYmXyhuZXcgcihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9cHx8aSYmXyhuZXcgaSkhPWx8fGEmJl8oYS5yZXNvbHZlKCkpIT1ofHxvJiZfKG5ldyBvKSE9Znx8cyYmXyhuZXcgcykhPWQpJiYoXz1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLG49IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP3Uobik6IiI7aWYocilzd2l0Y2gocil7Y2FzZSB5OnJldHVybiBwO2Nhc2UgZzpyZXR1cm4gbDtjYXNlIG06cmV0dXJuIGg7Y2FzZSB2OnJldHVybiBmO2Nhc2UgYjpyZXR1cm4gZH1yZXR1cm4gZX0pLHQuZXhwb3J0cz1ffSw3ODAxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX19LDIyMjoodCxlLG4pPT57dmFyIHI9bigxODExKSxpPW4oNTY5NCksYT1uKDE0NjkpLG89big1Nzc2KSxzPW4oMTc4MCksYz1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHU9LTEsbD0oZT1yKGUsdCkpLmxlbmd0aCxoPSExOysrdTxsOyl7dmFyIGY9YyhlW3VdKTtpZighKGg9bnVsbCE9dCYmbih0LGYpKSlicmVhazt0PXRbZl19cmV0dXJuIGh8fCsrdSE9bD9oOiEhKGw9bnVsbD09dD8wOnQubGVuZ3RoKSYmcyhsKSYmbyhmLGwpJiYoYSh0KXx8aSh0KSl9fSwyNjg5OnQ9Pnt2YXIgZT1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnRlc3QodCl9fSwxNzg5Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MzYpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189cj9yKG51bGwpOnt9LHRoaXMuc2l6ZT0wfX0sNDAxOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSw3NjY3Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MzYpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihyKXt2YXIgbj1lW3RdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PW4/dm9pZCAwOm59cmV0dXJuIGkuY2FsbChlLHQpP2VbdF06dm9pZCAwfX0sMTMyNzoodCxlLG4pPT57dmFyIHI9big0NTM2KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHI/dm9pZCAwIT09ZVt0XTppLmNhbGwoZSx0KX19LDE4NjY6KHQsZSxuKT0+e3ZhciByPW4oNDUzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsblt0XT1yJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9fSwzODI0OnQ9Pnt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKG4pO3JldHVybiBuJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJmUuY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn19LDkxNDg6KHQsZSxuKT0+e3ZhciByPW4oNDMxOCksaT1uKDcxNTcpLGE9bigzMTQ3KSxvPW4oNDE5KSxzPW4oNzEzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4gcih0KTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBjKCt0KTtjYXNlIltvYmplY3QgRGF0YVZpZXddIjpyZXR1cm4gaSh0LG4pO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBzKHQsbik7Y2FzZSJbb2JqZWN0IE1hcF0iOmNhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGModCk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBhKHQpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gbyh0KX19fSw4NTE3Oih0LGUsbik9Pnt2YXIgcj1uKDMxMTgpLGk9big1OTI0KSxhPW4oNTcyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxhKHQpP3t9OnIoaSh0KSl9fSw3Mjg1Oih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9big1Njk0KSxhPW4oMTQ2OSksbz1yP3IuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCl8fGkodCl8fCEhKG8mJnQmJnRbb10pfX0sNTc3Njp0PT57dmFyIGU9L14oPzowfFsxLTldXGQqKSQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPXR5cGVvZiB0O3JldHVybiEhKG49bnVsbD09bj85MDA3MTk5MjU0NzQwOTkxOm4pJiYoIm51bWJlciI9PXJ8fCJzeW1ib2wiIT1yJiZlLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8bn19LDY2MTI6KHQsZSxuKT0+e3ZhciByPW4oNzgxMyksaT1uKDg2MTIpLGE9big1Nzc2KSxvPW4oMzIxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighbyhuKSlyZXR1cm4hMTt2YXIgcz10eXBlb2YgZTtyZXR1cm4hISgibnVtYmVyIj09cz9pKG4pJiZhKGUsbi5sZW5ndGgpOiJzdHJpbmciPT1zJiZlIGluIG4pJiZyKG5bZV0sdCl9fSw1NDAzOih0LGUsbik9Pnt2YXIgcj1uKDE0NjkpLGk9bigzNDQ4KSxhPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLG89L15cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFpKHQpKXx8by50ZXN0KHQpfHwhYS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX19LDcwMTk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fX0sNTM0NjoodCxlLG4pPT57dmFyIHIsaT1uKDQ0MjkpLGE9KHI9L1teLl0rJC8uZXhlYyhpJiZpLmtleXMmJmkua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3I6IiI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhYSYmYSBpbiB0fX0sNTcyNjp0PT57dmFyIGU9T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5wcm90b3R5cGV8fGUpfX0sOTE2MjoodCxlLG4pPT57dmFyIHI9bigzMjE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sNzA0MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH19LDIxODg6KHQsZSxuKT0+e3ZhciByPW4oODQ3MCksaT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cihlLHQpO3JldHVybiEobjwwfHwobj09ZS5sZW5ndGgtMT9lLnBvcCgpOmkuY2FsbChlLG4sMSksLS10aGlzLnNpemUsMCkpfX0sMjExNzoodCxlLG4pPT57dmFyIHI9big4NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4gbjwwP3ZvaWQgMDplW25dWzFdfX0sNzUxODoodCxlLG4pPT57dmFyIHI9big4NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5fX2RhdGFfXyx0KT4tMX19LDQ3MDU6KHQsZSxuKT0+e3ZhciByPW4oODQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXIobix0KTtyZXR1cm4gaTwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW3QsZV0pKTpuW2ldWzFdPWUsdGhpc319LDQ3ODU6KHQsZSxuKT0+e3ZhciByPW4oMTk4OSksaT1uKDg0MDcpLGE9big3MDcxKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyByLG1hcDpuZXcoYXx8aSksc3RyaW5nOm5ldyByfX19LDEyODU6KHQsZSxuKT0+e3ZhciByPW4oNTA1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LDZlMzoodCxlLG4pPT57dmFyIHI9big1MDUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0KS5nZXQodCl9fSw5OTE2Oih0LGUsbik9Pnt2YXIgcj1uKDUwNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmhhcyh0KX19LDUyNjU6KHQsZSxuKT0+e3ZhciByPW4oNTA1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfX0sODc3Njp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe25bKytlXT1bcix0XX0pKSxufX0sMjYzNDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZuW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KG4pKX19fSw0NTIzOih0LGUsbik9Pnt2YXIgcj1uKDgzMDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX19LDQ1MzY6KHQsZSxuKT0+e3ZhciByPW4oODUyKShPYmplY3QsImNyZWF0ZSIpO3QuZXhwb3J0cz1yfSw2OTE2Oih0LGUsbik9Pnt2YXIgcj1uKDU1NjkpKE9iamVjdC5rZXlzLE9iamVjdCk7dC5leHBvcnRzPXJ9LDM0OTg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtpZihudWxsIT10KWZvcih2YXIgbiBpbiBPYmplY3QodCkpZS5wdXNoKG4pO3JldHVybiBlfX0sMTE2NzoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1uKDE5NTcpLGk9ZSYmIWUubm9kZVR5cGUmJmUsYT1pJiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWkmJnIucHJvY2VzcyxzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhJiZhLnJlcXVpcmUmJmEucmVxdWlyZSgidXRpbCIpLnR5cGVzfHxvJiZvLmJpbmRpbmcmJm8uYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCk7dC5leHBvcnRzPXN9LDIzMzM6dD0+e3ZhciBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCl9fSw1NTY5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fX0sNTM1NzoodCxlLG4pPT57dmFyIHI9big2ODc0KSxpPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGU9aSh2b2lkIDA9PT1lP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMsbz0tMSxzPWkoYS5sZW5ndGgtZSwwKSxjPUFycmF5KHMpOysrbzxzOyljW29dPWFbZStvXTtvPS0xO2Zvcih2YXIgdT1BcnJheShlKzEpOysrbzxlOyl1W29dPWFbb107cmV0dXJuIHVbZV09bihjKSxyKHQsdGhpcyx1KX19fSw1NjM5Oih0LGUsbik9Pnt2YXIgcj1uKDE5NTcpLGk9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixhPXJ8fGl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dC5leHBvcnRzPWF9LDYzOTA6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCgiY29uc3RydWN0b3IiIT09ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0pJiYiX19wcm90b19fIiE9ZSlyZXR1cm4gdFtlXX19LDYxOTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh0LCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIiksdGhpc319LDIzODU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSwxODE0OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59fSw2MToodCxlLG4pPT57dmFyIHI9big2NTYwKSxpPW4oMTI3NSkocik7dC5leHBvcnRzPWl9LDEyNzU6dD0+e3ZhciBlPURhdGUubm93O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lKCksYT0xNi0oaS1yKTtpZihyPWksYT4wKXtpZigrK24+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2Ugbj0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX19LDc0NjU6KHQsZSxuKT0+e3ZhciByPW4oODQwNyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1uZXcgcix0aGlzLnNpemU9MH19LDM3Nzk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn19LDc1OTk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9fSw0NzU4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfX0sNDMwOToodCxlLG4pPT57dmFyIHI9big4NDA3KSxpPW4oNzA3MSksYT1uKDMzNjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIHIpe3ZhciBvPW4uX19kYXRhX187aWYoIWl8fG8ubGVuZ3RoPDE5OSlyZXR1cm4gby5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IGEobyl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfX0sMjM1MTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9bi0xLGk9dC5sZW5ndGg7KytyPGk7KWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfX0sODAxNjoodCxlLG4pPT57dmFyIHI9big4OTgzKSxpPW4oMjY4OSksYT1uKDE5MDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9hKHQpOnIodCl9fSw1NTE0Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MjMpLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csYT0vXFwoXFwpPy9nLG89cigoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShpLChmdW5jdGlvbih0LG4scixpKXtlLnB1c2gocj9pLnJlcGxhY2UoYSwiJDEiKTpufHx0KX0pKSxlfSkpO3QuZXhwb3J0cz1vfSwzMjc6KHQsZSxuKT0+e3ZhciByPW4oMzQ0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LDM0Njp0PT57dmFyIGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIGUuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9fSw3OTkwOnQ9Pnt2YXIgZT0vXHMvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIG49dC5sZW5ndGg7bi0tJiZlLnRlc3QodC5jaGFyQXQobikpOyk7cmV0dXJuIG59fSwxOTAzOnQ9Pnt2YXIgZT0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLG49IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIscj0iW15cXHVkODAwLVxcdWRmZmZdIixpPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixhPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixvPSIoPzoiK2UrInwiK24rIik/IixzPSJbXFx1ZmUwZVxcdWZlMGZdPyIsYz1zK28rIig/OlxcdTIwMGQoPzoiK1tyLGksYV0uam9pbigifCIpKyIpIitzK28rIikqIix1PSIoPzoiK1tyK2UrIj8iLGUsaSxhLCJbXFx1ZDgwMC1cXHVkZmZmXSJdLmpvaW4oInwiKSsiKSIsbD1SZWdFeHAobisiKD89IituKyIpfCIrdStjLCJnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1sLmxhc3RJbmRleD0wO2wudGVzdCh0KTspKytlO3JldHVybiBlfX0sNjY3ODoodCxlLG4pPT57dmFyIHI9big1OTkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw0KX19LDM2MToodCxlLG4pPT57dmFyIHI9big1OTkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw1KX19LDU3MDM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19fSwxNzQ3Oih0LGUsbik9Pnt2YXIgcj1uKDU5NzYpLGk9big3ODEzKSxhPW4oNjYxMiksbz1uKDE3MDQpLHM9T2JqZWN0LnByb3RvdHlwZSxjPXMuaGFzT3duUHJvcGVydHksdT1yKChmdW5jdGlvbih0LGUpe3Q9T2JqZWN0KHQpO3ZhciBuPS0xLHI9ZS5sZW5ndGgsdT1yPjI/ZVsyXTp2b2lkIDA7Zm9yKHUmJmEoZVswXSxlWzFdLHUpJiYocj0xKTsrK248cjspZm9yKHZhciBsPWVbbl0saD1vKGwpLGY9LTEsZD1oLmxlbmd0aDsrK2Y8ZDspe3ZhciBwPWhbZl0seT10W3BdOyh2b2lkIDA9PT15fHxpKHksc1twXSkmJiFjLmNhbGwodCxwKSkmJih0W3BdPWxbcF0pfXJldHVybiB0fSkpO3QuZXhwb3J0cz11fSw2MDczOih0LGUsbik9Pnt0LmV4cG9ydHM9big0NDg2KX0sNzgxMzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfX0sMzEwNToodCxlLG4pPT57dmFyIHI9big0OTYzKSxpPW4oNzYwKSxhPW4oNzIwNiksbz1uKDE0NjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUsMykpfX0sMzMxMToodCxlLG4pPT57dmFyIHI9big3NzQwKShuKDk5OCkpO3QuZXhwb3J0cz1yfSw5OTg6KHQsZSxuKT0+e3ZhciByPW4oMTg0OCksaT1uKDcyMDYpLGE9big1NTQpLG89TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcz1udWxsPT10PzA6dC5sZW5ndGg7aWYoIXMpcmV0dXJuLTE7dmFyIGM9bnVsbD09bj8wOmEobik7cmV0dXJuIGM8MCYmKGM9byhzK2MsMCkpLHIodCxpKGUsMyksYyl9fSw1NTY0Oih0LGUsbik9Pnt2YXIgcj1uKDEwNzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5sZW5ndGg/cih0LDEpOltdfX0sNDQ4NjoodCxlLG4pPT57dmFyIHI9big3NDEyKSxpPW4oOTg4MSksYT1uKDQyOTApLG89bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmkpKHQsYShlKSl9fSwyNjIwOih0LGUsbik9Pnt2YXIgcj1uKDg0ODMpLGk9big0MjkwKSxhPW4oMTcwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpyKHQsaShlKSxhKX19LDE5MTc6KHQsZSxuKT0+e3ZhciByPW4oNzc4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1udWxsPT10P3ZvaWQgMDpyKHQsZSk7cmV0dXJuIHZvaWQgMD09PWk/bjppfX0sODcyMToodCxlLG4pPT57dmFyIHI9big4NTY1KSxpPW4oMjIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSw5MDk1Oih0LGUsbik9Pnt2YXIgcj1uKDEzKSxpPW4oMjIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSw2NTU3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSw1Njk0Oih0LGUsbik9Pnt2YXIgcj1uKDk0NTQpLGk9big3MDA1KSxhPU9iamVjdC5wcm90b3R5cGUsbz1hLmhhc093blByb3BlcnR5LHM9YS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxjPXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9yOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZvLmNhbGwodCwiY2FsbGVlIikmJiFzLmNhbGwodCwiY2FsbGVlIil9O3QuZXhwb3J0cz1jfSwxNDY5OnQ9Pnt2YXIgZT1BcnJheS5pc0FycmF5O3QuZXhwb3J0cz1lfSw4NjEyOih0LGUsbik9Pnt2YXIgcj1uKDM1NjApLGk9bigxNzgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LDkyNDY6KHQsZSxuKT0+e3ZhciByPW4oODYxMiksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmcih0KX19LDQxNDQ6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9big1NjM5KSxpPW4oNTA2MiksYT1lJiYhZS5ub2RlVHlwZSYmZSxvPWEmJnQmJiF0Lm5vZGVUeXBlJiZ0LHM9byYmby5leHBvcnRzPT09YT9yLkJ1ZmZlcjp2b2lkIDAsYz0ocz9zLmlzQnVmZmVyOnZvaWQgMCl8fGk7dC5leHBvcnRzPWN9LDE2MDk6KHQsZSxuKT0+e3ZhciByPW4oMjgwKSxpPW4oNDE2MCksYT1uKDU2OTQpLG89bigxNDY5KSxzPW4oODYxMiksYz1uKDQxNDQpLHU9big1NzI2KSxsPW4oNjcxOSksaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiEwO2lmKHModCkmJihvKHQpfHwic3RyaW5nIj09dHlwZW9mIHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNwbGljZXx8Yyh0KXx8bCh0KXx8YSh0KSkpcmV0dXJuIXQubGVuZ3RoO3ZhciBlPWkodCk7aWYoIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lKXJldHVybiF0LnNpemU7aWYodSh0KSlyZXR1cm4hcih0KS5sZW5ndGg7Zm9yKHZhciBuIGluIHQpaWYoaC5jYWxsKHQsbikpcmV0dXJuITE7cmV0dXJuITB9fSwzNTYwOih0LGUsbik9Pnt2YXIgcj1uKDQyMzkpLGk9bigzMjE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWkodCkpcmV0dXJuITE7dmFyIGU9cih0KTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IFByb3h5XSI9PWV9fSwxNzgwOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PTkwMDcxOTkyNTQ3NDA5OTF9fSw2Njg4Oih0LGUsbik9Pnt2YXIgcj1uKDU1ODgpLGk9bigxNzE3KSxhPW4oMTE2Nyksbz1hJiZhLmlzTWFwLHM9bz9pKG8pOnI7dC5leHBvcnRzPXN9LDMyMTg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX19LDcwMDU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fX0sODYzMDoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oNTkyNCksYT1uKDcwMDUpLG89RnVuY3Rpb24ucHJvdG90eXBlLHM9T2JqZWN0LnByb3RvdHlwZSxjPW8udG9TdHJpbmcsdT1zLmhhc093blByb3BlcnR5LGw9Yy5jYWxsKE9iamVjdCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpfHwiW29iamVjdCBPYmplY3RdIiE9cih0KSlyZXR1cm4hMTt2YXIgZT1pKHQpO2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciBuPXUuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiZlLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmYy5jYWxsKG4pPT1sfX0sMjkyODoodCxlLG4pPT57dmFyIHI9big5MjIxKSxpPW4oMTcxNyksYT1uKDExNjcpLG89YSYmYS5pc1NldCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSw3MDM3Oih0LGUsbik9Pnt2YXIgcj1uKDQyMzkpLGk9bigxNDY5KSxhPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWkodCkmJmEodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1yKHQpfX0sMzQ0ODoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8aSh0KSYmIltvYmplY3QgU3ltYm9sXSI9PXIodCl9fSw2NzE5Oih0LGUsbik9Pnt2YXIgcj1uKDg3NDkpLGk9bigxNzE3KSxhPW4oMTE2Nyksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSwyMzUzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSwzNjc0Oih0LGUsbik9Pnt2YXIgcj1uKDQ2MzYpLGk9bigyODApLGE9big4NjEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0KTppKHQpfX0sMTcwNDoodCxlLG4pPT57dmFyIHI9big0NjM2KSxpPW4oMzEzKSxhPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3IodCwhMCk6aSh0KX19LDkyODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06dm9pZCAwfX0sNTE2MToodCxlLG4pPT57dmFyIHI9big5OTMyKSxpPW4oNzIwNiksYT1uKDkxOTkpLG89bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmEpKHQsaShlLDMpKX19LDY2MDQ6KHQsZSxuKT0+e3ZhciByPW4oOTQ2NSksaT1uKDc4MTYpLGE9big3MjA2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gZT1hKGUsMyksaSh0LChmdW5jdGlvbih0LGksYSl7cihuLGksZSh0LGksYSkpfSkpLG59fSw2MTYyOih0LGUsbik9Pnt2YXIgcj1uKDYwMjkpLGk9bigzMzI1KSxhPW4oNjU1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsYSxpKTp2b2lkIDB9fSw4MzA2Oih0LGUsbik9Pnt2YXIgcj1uKDMzNjkpO2Z1bmN0aW9uIGkodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMscik6clswXSxhPW4uY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBvPXQuYXBwbHkodGhpcyxyKTtyZXR1cm4gbi5jYWNoZT1hLnNldChpLG8pfHxhLG99O3JldHVybiBuLmNhY2hlPW5ldyhpLkNhY2hlfHxyKSxufWkuQ2FjaGU9cix0LmV4cG9ydHM9aX0sMzg1NzoodCxlLG4pPT57dmFyIHI9bigyOTgwKSxpPW4oMTc1MCkoKGZ1bmN0aW9uKHQsZSxuKXtyKHQsZSxuKX0pKTt0LmV4cG9ydHM9aX0sMzYzMjoodCxlLG4pPT57dmFyIHI9big2MDI5KSxpPW4oNDMzKSxhPW4oNjU1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsYSxpKTp2b2lkIDB9fSwyNzYyOih0LGUsbik9Pnt2YXIgcj1uKDYwMjkpLGk9big3MjA2KSxhPW4oNDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGkoZSwyKSxhKTp2b2lkIDB9fSwzMDg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbigpe319LDc3NzE6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuRGF0ZS5ub3coKX19LDk3MjI6KHQsZSxuKT0+e3ZhciByPW4oNTk3MCksaT1uKDkwMjEpKChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3t9OnIodCxlKX0pKTt0LmV4cG9ydHM9aX0sOTYwMToodCxlLG4pPT57dmFyIHI9bigzNzEpLGk9big5MTUyKSxhPW4oNTQwMyksbz1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3Iobyh0KSk6aSh0KX19LDYwMjY6KHQsZSxuKT0+e3ZhciByPW4oNzQ0NSkoKTt0LmV4cG9ydHM9cn0sNDA2MToodCxlLG4pPT57dmFyIHI9bigyNjYzKSxpPW4oOTg4MSksYT1uKDcyMDYpLG89bigxMDcpLHM9bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXModCk/cjpvLHU9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBjKHQsYShlLDQpLG4sdSxpKX19LDQyMzg6KHQsZSxuKT0+e3ZhciByPW4oMjgwKSxpPW4oNDE2MCksYT1uKDg2MTIpLG89big3MDM3KSxzPW4oODAxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoYSh0KSlyZXR1cm4gbyh0KT9zKHQpOnQubGVuZ3RoO3ZhciBlPWkodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PWV8fCJbb2JqZWN0IFNldF0iPT1lP3Quc2l6ZTpyKHQpLmxlbmd0aH19LDk3MzQ6KHQsZSxuKT0+e3ZhciByPW4oMTA3OCksaT1uKDk1NTYpLGE9big1OTc2KSxvPW4oNjYxMikscz1hKChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmbyh0LGVbMF0sZVsxXSk/ZT1bXTpuPjImJm8oZVswXSxlWzFdLGVbMl0pJiYoZT1bZVswXV0pLGkodCxyKGUsMSksW10pfSkpO3QuZXhwb3J0cz1zfSw0Nzk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybltdfX0sNTA2Mjp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSw4NjAxOih0LGUsbik9Pnt2YXIgcj1uKDQ4NDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9JbmZpbml0eT09PSh0PXIodCkpfHx0PT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9fSw1NTQ6KHQsZSxuKT0+e3ZhciByPW4oODYwMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1lJTE7cmV0dXJuIGU9PWU/bj9lLW46ZTowfX0sNDg0MToodCxlLG4pPT57dmFyIHI9big3NTYxKSxpPW4oMzIxOCksYT1uKDM0NDgpLG89L15bLStdMHhbMC05YS1mXSskL2kscz0vXjBiWzAxXSskL2ksYz0vXjBvWzAtN10rJC9pLHU9cGFyc2VJbnQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihhKHQpKXJldHVybiBOYU47aWYoaSh0KSl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9aShlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9cih0KTt2YXIgbj1zLnRlc3QodCk7cmV0dXJuIG58fGMudGVzdCh0KT91KHQuc2xpY2UoMiksbj8yOjgpOm8udGVzdCh0KT9OYU46K3R9fSwzNjc4Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigxNzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxpKHQpKX19LDk4MzM6KHQsZSxuKT0+e3ZhciByPW4oNTMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6cih0KX19LDg3MTg6KHQsZSxuKT0+e3ZhciByPW4oNzQxMiksaT1uKDMxMTgpLGE9big3ODE2KSxvPW4oNzIwNikscz1uKDU5MjQpLGM9bigxNDY5KSx1PW4oNDE0NCksbD1uKDM1NjApLGg9bigzMjE4KSxmPW4oNjcxOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgZD1jKHQpLHA9ZHx8dSh0KXx8Zih0KTtpZihlPW8oZSw0KSxudWxsPT1uKXt2YXIgeT10JiZ0LmNvbnN0cnVjdG9yO249cD9kP25ldyB5OltdOmgodCkmJmwoeSk/aShzKHQpKTp7fX1yZXR1cm4ocD9yOmEpKHQsKGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gZShuLHQscixpKX0pKSxufX0sMzM4NjoodCxlLG4pPT57dmFyIHI9bigxMDc4KSxpPW4oNTk3NiksYT1uKDU2NTIpLG89big5MjQ2KSxzPWkoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCwxLG8sITApKX0pKTt0LmV4cG9ydHM9c30sMzk1NToodCxlLG4pPT57dmFyIHI9big5ODMzKSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sMjYyODoodCxlLG4pPT57dmFyIHI9big3NDE1KSxpPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOnIodCxpKHQpKX19LDcyODc6KHQsZSxuKT0+e3ZhciByPW4oNDg2NSksaT1uKDE3NTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKHR8fFtdLGV8fFtdLHIpfX0sOTIzNDooKT0+e30sMTc0ODoodCxlLG4pPT57dmFyIHI9eyIuL2xvY2FsZSI6OTIzNCwiLi9sb2NhbGUuanMiOjkyMzR9O2Z1bmN0aW9uIGkodCl7dmFyIGU9YSh0KTtyZXR1cm4gbihlKX1mdW5jdGlvbiBhKHQpe2lmKCFuLm8ocix0KSl7dmFyIGU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrdCsiJyIpO3Rocm93IGUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZX1yZXR1cm4gclt0XX1pLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMocil9LGkucmVzb2x2ZT1hLHQuZXhwb3J0cz1pLGkuaWQ9MTc0OH0sMTk0MTpmdW5jdGlvbih0LGUsbil7KHQ9bi5ubWQodCkpLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGUscjtmdW5jdGlvbiBpKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10JiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBzKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIGModCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbixyPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pci5wdXNoKGUodFtuXSxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciBuIGluIGUpaChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gaChlLCJ0b1N0cmluZyIpJiYodC50b1N0cmluZz1lLnRvU3RyaW5nKSxoKGUsInZhbHVlT2YiKSYmKHQudmFsdWVPZj1lLnZhbHVlT2YpLHR9ZnVuY3Rpb24gZCh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMCkudXRjKCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09dC5fcGYmJih0Ll9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksdC5fcGZ9ZnVuY3Rpb24geSh0KXtpZihudWxsPT10Ll9pc1ZhbGlkKXt2YXIgZT1wKHQpLG49ci5jYWxsKGUucGFyc2VkRGF0ZVBhcnRzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKSxpPSFpc05hTih0Ll9kLmdldFRpbWUoKSkmJmUub3ZlcmZsb3c8MCYmIWUuZW1wdHkmJiFlLmludmFsaWRNb250aCYmIWUuaW52YWxpZFdlZWtkYXkmJiFlLndlZWtkYXlNaXNtYXRjaCYmIWUubnVsbElucHV0JiYhZS5pbnZhbGlkRm9ybWF0JiYhZS51c2VySW52YWxpZGF0ZWQmJighZS5tZXJpZGllbXx8ZS5tZXJpZGllbSYmbik7aWYodC5fc3RyaWN0JiYoaT1pJiYwPT09ZS5jaGFyc0xlZnRPdmVyJiYwPT09ZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1lLmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKHQpKXJldHVybiBpO3QuX2lzVmFsaWQ9aX1yZXR1cm4gdC5faXNWYWxpZH1mdW5jdGlvbiBnKHQpe3ZhciBlPWQoTmFOKTtyZXR1cm4gbnVsbCE9dD9mKHAoZSksdCk6cChlKS51c2VySW52YWxpZGF0ZWQ9ITAsZX1yPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3QodGhpcyksbj1lLmxlbmd0aD4+PjAscj0wO3I8bjtyKyspaWYociBpbiBlJiZ0LmNhbGwodGhpcyxlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBtPWkubW9tZW50UHJvcGVydGllcz1bXTtmdW5jdGlvbiB2KHQsZSl7dmFyIG4scixpO2lmKHMoZS5faXNBTW9tZW50T2JqZWN0KXx8KHQuX2lzQU1vbWVudE9iamVjdD1lLl9pc0FNb21lbnRPYmplY3QpLHMoZS5faSl8fCh0Ll9pPWUuX2kpLHMoZS5fZil8fCh0Ll9mPWUuX2YpLHMoZS5fbCl8fCh0Ll9sPWUuX2wpLHMoZS5fc3RyaWN0KXx8KHQuX3N0cmljdD1lLl9zdHJpY3QpLHMoZS5fdHptKXx8KHQuX3R6bT1lLl90em0pLHMoZS5faXNVVEMpfHwodC5faXNVVEM9ZS5faXNVVEMpLHMoZS5fb2Zmc2V0KXx8KHQuX29mZnNldD1lLl9vZmZzZXQpLHMoZS5fcGYpfHwodC5fcGY9cChlKSkscyhlLl9sb2NhbGUpfHwodC5fbG9jYWxlPWUuX2xvY2FsZSksMDxtLmxlbmd0aClmb3Iobj0wO248bS5sZW5ndGg7bisrKXMoaT1lW3I9bVtuXV0pfHwodFtyXT1pKTtyZXR1cm4gdH12YXIgYj0hMTtmdW5jdGlvbiBfKHQpe3YodGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1iJiYoYj0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzKSxiPSExKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2YgX3x8bnVsbCE9dCYmbnVsbCE9dC5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIHcodCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX1mdW5jdGlvbiBrKHQpe3ZhciBlPSt0LG49MDtyZXR1cm4gMCE9PWUmJmlzRmluaXRlKGUpJiYobj13KGUpKSxufWZ1bmN0aW9uIFQodCxlLG4pe3ZhciByLGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGE9TWF0aC5hYnModC5sZW5ndGgtZS5sZW5ndGgpLG89MDtmb3Iocj0wO3I8aTtyKyspKG4mJnRbcl0hPT1lW3JdfHwhbiYmayh0W3JdKSE9PWsoZVtyXSkpJiZvKys7cmV0dXJuIG8rYX1mdW5jdGlvbiBFKHQpeyExPT09aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrdCl9ZnVuY3Rpb24gQyh0LGUpe3ZhciBuPSEwO3JldHVybiBmKChmdW5jdGlvbigpe2lmKG51bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLHQpLG4pe2Zvcih2YXIgcixhPVtdLG89MDtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXtpZihyPSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW29dKXtmb3IodmFyIHMgaW4gcis9IlxuWyIrbysiXSAiLGFyZ3VtZW50c1swXSlyKz1zKyI6ICIrYXJndW1lbnRzWzBdW3NdKyIsICI7cj1yLnNsaWNlKDAsLTIpfWVsc2Ugcj1hcmd1bWVudHNbb107YS5wdXNoKHIpfUUodCsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjayksbj0hMX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxlKX12YXIgUyxBPXt9O2Z1bmN0aW9uIE0odCxlKXtudWxsIT1pLmRlcHJlY2F0aW9uSGFuZGxlciYmaS5kZXByZWNhdGlvbkhhbmRsZXIodCxlKSxBW3RdfHwoRShlKSxBW3RdPSEwKX1mdW5jdGlvbiBOKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gRCh0LGUpe3ZhciBuLHI9Zih7fSx0KTtmb3IobiBpbiBlKWgoZSxuKSYmKG8odFtuXSkmJm8oZVtuXSk/KHJbbl09e30sZihyW25dLHRbbl0pLGYocltuXSxlW25dKSk6bnVsbCE9ZVtuXT9yW25dPWVbbl06ZGVsZXRlIHJbbl0pO2ZvcihuIGluIHQpaCh0LG4pJiYhaChlLG4pJiZvKHRbbl0pJiYocltuXT1mKHt9LHJbbl0pKTtyZXR1cm4gcn1mdW5jdGlvbiBPKHQpe251bGwhPXQmJnRoaXMuc2V0KHQpfWkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLGkuZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsUz1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbih0KXt2YXIgZSxuPVtdO2ZvcihlIGluIHQpaCh0LGUpJiZuLnB1c2goZSk7cmV0dXJuIG59O3ZhciBCPXt9O2Z1bmN0aW9uIEwodCxlKXt2YXIgbj10LnRvTG93ZXJDYXNlKCk7QltuXT1CW24rInMiXT1CW2VdPXR9ZnVuY3Rpb24gSSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/Qlt0XXx8Qlt0LnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBSKHQpe3ZhciBlLG4scj17fTtmb3IobiBpbiB0KWgodCxuKSYmKGU9SShuKSkmJihyW2VdPXRbbl0pO3JldHVybiByfXZhciBGPXt9O2Z1bmN0aW9uIFAodCxlKXtGW3RdPWV9ZnVuY3Rpb24gaih0LGUsbil7dmFyIHI9IiIrTWF0aC5hYnModCksaT1lLXIubGVuZ3RoO3JldHVybigwPD10P24/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxpKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrcn12YXIgWT0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyx6PS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFU9e30scT17fTtmdW5jdGlvbiBIKHQsZSxuLHIpe3ZhciBpPXI7InN0cmluZyI9PXR5cGVvZiByJiYoaT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKCl9KSx0JiYocVt0XT1pKSxlJiYocVtlWzBdXT1mdW5jdGlvbigpe3JldHVybiBqKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVbMV0sZVsyXSl9KSxuJiYocVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQpfSl9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT8oZT1XKGUsdC5sb2NhbGVEYXRhKCkpLFVbZV09VVtlXXx8ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9dC5tYXRjaChZKTtmb3IoZT0wLG49aS5sZW5ndGg7ZTxuO2UrKylxW2lbZV1dP2lbZV09cVtpW2VdXTppW2VdPShyPWlbZV0pLm1hdGNoKC9cW1tcc1xTXS8pP3IucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpyLnJlcGxhY2UoL1xcL2csIiIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixhPSIiO2ZvcihyPTA7cjxuO3IrKylhKz1OKGlbcl0pP2lbcl0uY2FsbChlLHQpOmlbcl07cmV0dXJuIGF9fShlKSxVW2VdKHQpKTp0LmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFcodCxlKXt2YXIgbj01O2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUubG9uZ0RhdGVGb3JtYXQodCl8fHR9Zm9yKHoubGFzdEluZGV4PTA7MDw9biYmei50ZXN0KHQpOyl0PXQucmVwbGFjZSh6LHIpLHoubGFzdEluZGV4PTAsbi09MTtyZXR1cm4gdH12YXIgVj0vXGQvLEc9L1xkXGQvLFg9L1xkezN9LyxaPS9cZHs0fS8sUT0vWystXT9cZHs2fS8sSz0vXGRcZD8vLEo9L1xkXGRcZFxkPy8sdHQ9L1xkXGRcZFxkXGRcZD8vLGV0PS9cZHsxLDN9LyxudD0vXGR7MSw0fS8scnQ9L1srLV0/XGR7MSw2fS8saXQ9L1xkKy8sYXQ9L1srLV0/XGQrLyxvdD0vWnxbKy1dXGRcZDo/XGRcZC9naSxzdD0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLGN0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksdXQ9e307ZnVuY3Rpb24gbHQodCxlLG4pe3V0W3RdPU4oZSk/ZTpmdW5jdGlvbih0LHIpe3JldHVybiB0JiZuP246ZX19ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gaCh1dCx0KT91dFt0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ0KHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csKGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGV8fG58fHJ8fGl9KSkpKX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfXZhciBkdD17fTtmdW5jdGlvbiBwdCh0LGUpe3ZhciBuLHI9ZTtmb3IoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLGMoZSkmJihyPWZ1bmN0aW9uKHQsbil7bltlXT1rKHQpfSksbj0wO248dC5sZW5ndGg7bisrKWR0W3Rbbl1dPXJ9ZnVuY3Rpb24geXQodCxlKXtwdCh0LChmdW5jdGlvbih0LG4scixpKXtyLl93PXIuX3d8fHt9LGUodCxyLl93LHIsaSl9KSl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIG10KHQpPzM2NjozNjV9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIHQlND09MCYmdCUxMDAhPTB8fHQlNDAwPT0wfUgoIlkiLDAsMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnllYXIoKTtyZXR1cm4gdDw9OTk5OT8iIit0OiIrIit0fSkpLEgoMCxbIllZIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSksSCgwLFsiWVlZWSIsNF0sMCwieWVhciIpLEgoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIiksSCgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksTCgieWVhciIsInkiKSxQKCJ5ZWFyIiwxKSxsdCgiWSIsYXQpLGx0KCJZWSIsSyxHKSxsdCgiWVlZWSIsbnQsWiksbHQoIllZWVlZIixydCxRKSxsdCgiWVlZWVlZIixydCxRKSxwdChbIllZWVlZIiwiWVlZWVlZIl0sMCkscHQoIllZWVkiLChmdW5jdGlvbih0LGUpe2VbMF09Mj09PXQubGVuZ3RoP2kucGFyc2VUd29EaWdpdFllYXIodCk6ayh0KX0pKSxwdCgiWVkiLChmdW5jdGlvbih0LGUpe2VbMF09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxwdCgiWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1wYXJzZUludCh0LDEwKX0pKSxpLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBrKHQpKyg2ODxrKHQpPzE5MDA6MmUzKX07dmFyIHZ0LGJ0PV90KCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIF90KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uPyh3dCh0aGlzLHQsbiksaS51cGRhdGVPZmZzZXQodGhpcyxlKSx0aGlzKTp4dCh0aGlzLHQpfX1mdW5jdGlvbiB4dCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT90Ll9kWyJnZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oKTpOYU59ZnVuY3Rpb24gd3QodCxlLG4pe3QuaXNWYWxpZCgpJiYhaXNOYU4obikmJigiRnVsbFllYXIiPT09ZSYmbXQodC55ZWFyKCkpJiYxPT09dC5tb250aCgpJiYyOT09PXQuZGF0ZSgpP3QuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuLHQubW9udGgoKSxrdChuLHQubW9udGgoKSkpOnQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuKSl9ZnVuY3Rpb24ga3QodCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjt2YXIgbj0oZSUxMisxMiklMTI7cmV0dXJuIHQrPShlLW4pLzEyLDE9PT1uP210KHQpPzI5OjI4OjMxLW4lNyUyfXZ0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDsrK2UpaWYodGhpc1tlXT09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LEgoIk0iLFsiTU0iLDJdLCJNbyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSkpLEgoIk1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyx0KX0pKSxIKCJNTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyx0KX0pKSxMKCJtb250aCIsIk0iKSxQKCJtb250aCIsOCksbHQoIk0iLEspLGx0KCJNTSIsSyxHKSxsdCgiTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJNTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pKSxwdChbIk0iLCJNTSJdLChmdW5jdGlvbih0LGUpe2VbMV09ayh0KS0xfSkpLHB0KFsiTU1NIiwiTU1NTSJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUubW9udGhzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lWzFdPWk6cChuKS5pbnZhbGlkTW9udGg9dH0pKTt2YXIgVHQ9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxFdD0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxDdD0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gU3QodCxlKXt2YXIgbjtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPWsoZSk7ZWxzZSBpZighYyhlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpKSlyZXR1cm4gdDtyZXR1cm4gbj1NYXRoLm1pbih0LmRhdGUoKSxrdCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsbiksdH1mdW5jdGlvbiBBdCh0KXtyZXR1cm4gbnVsbCE9dD8oU3QodGhpcyx0KSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTp4dCh0aGlzLCJNb250aCIpfXZhciBNdD1jdCxOdD1jdDtmdW5jdGlvbiBEdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyPVtdLGk9W10sYT1bXTtmb3IoZT0wO2U8MTI7ZSsrKW49ZChbMmUzLGVdKSxyLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSksaS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKTtmb3Ioci5zb3J0KHQpLGkuc29ydCh0KSxhLnNvcnQodCksZT0wO2U8MTI7ZSsrKXJbZV09ZnQocltlXSksaVtlXT1mdChpW2VdKTtmb3IoZT0wO2U8MjQ7ZSsrKWFbZV09ZnQoYVtlXSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE90KHQpe3ZhciBlO2lmKHQ8MTAwJiYwPD10KXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO25bMF09dCs0MDAsZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLG4pKSxpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpfWVsc2UgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlfWZ1bmN0aW9uIEJ0KHQsZSxuKXt2YXIgcj03K2UtbjtyZXR1cm4tKDcrT3QodCwwLHIpLmdldFVUQ0RheSgpLWUpJTcrci0xfWZ1bmN0aW9uIEx0KHQsZSxuLHIsaSl7dmFyIGEsbyxzPTErNyooZS0xKSsoNytuLXIpJTcrQnQodCxyLGkpO3JldHVybiBvPXM8PTA/Z3QoYT10LTEpK3M6cz5ndCh0KT8oYT10KzEscy1ndCh0KSk6KGE9dCxzKSx7eWVhcjphLGRheU9mWWVhcjpvfX1mdW5jdGlvbiBJdCh0LGUsbil7dmFyIHIsaSxhPUJ0KHQueWVhcigpLGUsbiksbz1NYXRoLmZsb29yKCh0LmRheU9mWWVhcigpLWEtMSkvNykrMTtyZXR1cm4gbzwxP3I9bytSdChpPXQueWVhcigpLTEsZSxuKTpvPlJ0KHQueWVhcigpLGUsbik/KHI9by1SdCh0LnllYXIoKSxlLG4pLGk9dC55ZWFyKCkrMSk6KGk9dC55ZWFyKCkscj1vKSx7d2VlazpyLHllYXI6aX19ZnVuY3Rpb24gUnQodCxlLG4pe3ZhciByPUJ0KHQsZSxuKSxpPUJ0KHQrMSxlLG4pO3JldHVybihndCh0KS1yK2kpLzd9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC5zbGljZShlLDcpLmNvbmNhdCh0LnNsaWNlKDAsZSkpfUgoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxIKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksTCgid2VlayIsInciKSxMKCJpc29XZWVrIiwiVyIpLFAoIndlZWsiLDUpLFAoImlzb1dlZWsiLDUpLGx0KCJ3IixLKSxsdCgid3ciLEssRyksbHQoIlciLEspLGx0KCJXVyIsSyxHKSx5dChbInciLCJ3dyIsIlciLCJXVyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMSldPWsodCl9KSksSCgiZCIsMCwiZG8iLCJkYXkiKSxIKCJkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pKSxIKCJkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyx0KX0pKSxIKCJkZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLHQpfSkpLEgoImUiLDAsMCwid2Vla2RheSIpLEgoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEwoImRheSIsImQiKSxMKCJ3ZWVrZGF5IiwiZSIpLEwoImlzb1dlZWtkYXkiLCJFIiksUCgiZGF5IiwxMSksUCgid2Vla2RheSIsMTEpLFAoImlzb1dlZWtkYXkiLDExKSxsdCgiZCIsSyksbHQoImUiLEspLGx0KCJFIixLKSxsdCgiZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzTWluUmVnZXgodCl9KSksbHQoImRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJkZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1JlZ2V4KHQpfSkpLHl0KFsiZGQiLCJkZGQiLCJkZGRkIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZS5kPWk6cChuKS5pbnZhbGlkV2Vla2RheT10fSkpLHl0KFsiZCIsImUiLCJFIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09ayh0KX0pKTt2YXIgUHQ9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLGp0PSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksWXQ9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHp0PWN0LFV0PWN0LHF0PWN0O2Z1bmN0aW9uIEh0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHIsaSxhLG89W10scz1bXSxjPVtdLHU9W107Zm9yKGU9MDtlPDc7ZSsrKW49ZChbMmUzLDFdKS5kYXkoZSkscj10aGlzLndlZWtkYXlzTWluKG4sIiIpLGk9dGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLGE9dGhpcy53ZWVrZGF5cyhuLCIiKSxvLnB1c2gocikscy5wdXNoKGkpLGMucHVzaChhKSx1LnB1c2gociksdS5wdXNoKGkpLHUucHVzaChhKTtmb3Ioby5zb3J0KHQpLHMuc29ydCh0KSxjLnNvcnQodCksdS5zb3J0KHQpLGU9MDtlPDc7ZSsrKXNbZV09ZnQoc1tlXSksY1tlXT1mdChjW2VdKSx1W2VdPWZ0KHVbZV0pO3RoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitjLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK28uam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uICR0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gV3QodCxlKXtIKHQsMCwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZSl9KSl9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gZS5fbWVyaWRpZW1QYXJzZX1IKCJIIixbIkhIIiwyXSwwLCJob3VyIiksSCgiaCIsWyJoaCIsMl0sMCwkdCksSCgiayIsWyJrayIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pKSxIKCJobW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIiskdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpfSkpLEgoImhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrJHQuYXBwbHkodGhpcykraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLEgoIkhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStqKHRoaXMubWludXRlcygpLDIpfSkpLEgoIkhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMikraih0aGlzLnNlY29uZHMoKSwyKX0pKSxXdCgiYSIsITApLFd0KCJBIiwhMSksTCgiaG91ciIsImgiKSxQKCJob3VyIiwxMyksbHQoImEiLFZ0KSxsdCgiQSIsVnQpLGx0KCJIIixLKSxsdCgiaCIsSyksbHQoImsiLEspLGx0KCJISCIsSyxHKSxsdCgiaGgiLEssRyksbHQoImtrIixLLEcpLGx0KCJobW0iLEopLGx0KCJobW1zcyIsdHQpLGx0KCJIbW0iLEopLGx0KCJIbW1zcyIsdHQpLHB0KFsiSCIsIkhIIl0sMykscHQoWyJrIiwia2siXSwoZnVuY3Rpb24odCxlLG4pe3ZhciByPWsodCk7ZVszXT0yND09PXI/MDpyfSkpLHB0KFsiYSIsIkEiXSwoZnVuY3Rpb24odCxlLG4pe24uX2lzUG09bi5fbG9jYWxlLmlzUE0odCksbi5fbWVyaWRpZW09dH0pKSxwdChbImgiLCJoaCJdLChmdW5jdGlvbih0LGUsbil7ZVszXT1rKHQpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiaG1tIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTI7ZVszXT1rKHQuc3Vic3RyKDAscikpLGVbNF09ayh0LnN1YnN0cihyKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPWsodC5zdWJzdHIoMCxyKSksZVs0XT1rKHQuc3Vic3RyKHIsMikpLGVbNV09ayh0LnN1YnN0cihpKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJIbW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPWsodC5zdWJzdHIoMCxyKSksZVs0XT1rKHQuc3Vic3RyKHIpKX0pKSxwdCgiSG1tc3MiLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtNCxpPXQubGVuZ3RoLTI7ZVszXT1rKHQuc3Vic3RyKDAscikpLGVbNF09ayh0LnN1YnN0cihyLDIpKSxlWzVdPWsodC5zdWJzdHIoaSkpfSkpO3ZhciBHdCxYdD1fdCgiSG91cnMiLCEwKSxadD17Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOkV0LG1vbnRoc1Nob3J0OkN0LHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpQdCx3ZWVrZGF5c01pbjpZdCx3ZWVrZGF5c1Nob3J0Omp0LG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxRdD17fSxLdD17fTtmdW5jdGlvbiBKdCh0KXtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKTp0fWZ1bmN0aW9uIHRlKGUpe3ZhciByPW51bGw7aWYoIVF0W2VdJiZ0JiZ0LmV4cG9ydHMpdHJ5e3I9R3QuX2FiYnIsbigxNzQ4KSgiLi8iK2UpLGVlKHIpfWNhdGNoKGUpe31yZXR1cm4gUXRbZV19ZnVuY3Rpb24gZWUodCxlKXt2YXIgbjtyZXR1cm4gdCYmKChuPXMoZSk/cmUodCk6bmUodCxlKSk/R3Q9bjoidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIit0KyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxHdC5fYWJicn1mdW5jdGlvbiBuZSh0LGUpe2lmKG51bGw9PT1lKXJldHVybiBkZWxldGUgUXRbdF0sbnVsbDt2YXIgbixyPVp0O2lmKGUuYWJicj10LG51bGwhPVF0W3RdKU0oImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIikscj1RdFt0XS5fY29uZmlnO2Vsc2UgaWYobnVsbCE9ZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9UXRbZS5wYXJlbnRMb2NhbGVdKXI9UXRbZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0obj10ZShlLnBhcmVudExvY2FsZSkpKXJldHVybiBLdFtlLnBhcmVudExvY2FsZV18fChLdFtlLnBhcmVudExvY2FsZV09W10pLEt0W2UucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOnQsY29uZmlnOmV9KSxudWxsO3I9bi5fY29uZmlnfXJldHVybiBRdFt0XT1uZXcgTyhEKHIsZSkpLEt0W3RdJiZLdFt0XS5mb3JFYWNoKChmdW5jdGlvbih0KXtuZSh0Lm5hbWUsdC5jb25maWcpfSkpLGVlKHQpLFF0W3RdfWZ1bmN0aW9uIHJlKHQpe3ZhciBlO2lmKHQmJnQuX2xvY2FsZSYmdC5fbG9jYWxlLl9hYmJyJiYodD10Ll9sb2NhbGUuX2FiYnIpLCF0KXJldHVybiBHdDtpZighYSh0KSl7aWYoZT10ZSh0KSlyZXR1cm4gZTt0PVt0XX1yZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGE9MDthPHQubGVuZ3RoOyl7Zm9yKGU9KGk9SnQodFthXSkuc3BsaXQoIi0iKSkubGVuZ3RoLG49KG49SnQodFthKzFdKSk/bi5zcGxpdCgiLSIpOm51bGw7MDxlOyl7aWYocj10ZShpLnNsaWNlKDAsZSkuam9pbigiLSIpKSlyZXR1cm4gcjtpZihuJiZuLmxlbmd0aD49ZSYmVChpLG4sITApPj1lLTEpYnJlYWs7ZS0tfWErK31yZXR1cm4gR3R9KHQpfWZ1bmN0aW9uIGllKHQpe3ZhciBlLG49dC5fYTtyZXR1cm4gbiYmLTI9PT1wKHQpLm92ZXJmbG93JiYoZT1uWzFdPDB8fDExPG5bMV0/MTpuWzJdPDF8fG5bMl0+a3QoblswXSxuWzFdKT8yOm5bM108MHx8MjQ8blszXXx8MjQ9PT1uWzNdJiYoMCE9PW5bNF18fDAhPT1uWzVdfHwwIT09bls2XSk/MzpuWzRdPDB8fDU5PG5bNF0/NDpuWzVdPDB8fDU5PG5bNV0/NTpuWzZdPDB8fDk5OTxuWzZdPzY6LTEscCh0KS5fb3ZlcmZsb3dEYXlPZlllYXImJihlPDB8fDI8ZSkmJihlPTIpLHAodCkuX292ZXJmbG93V2Vla3MmJi0xPT09ZSYmKGU9NykscCh0KS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PWUmJihlPTgpLHAodCkub3ZlcmZsb3c9ZSksdH1mdW5jdGlvbiBhZSh0LGUsbil7cmV0dXJuIG51bGwhPXQ/dDpudWxsIT1lP2U6bn1mdW5jdGlvbiBvZSh0KXt2YXIgZSxuLHIsYSxvLHM9W107aWYoIXQuX2Qpe3ZhciBjLHU7Zm9yKGM9dCx1PW5ldyBEYXRlKGkubm93KCkpLHI9Yy5fdXNlVVRDP1t1LmdldFVUQ0Z1bGxZZWFyKCksdS5nZXRVVENNb250aCgpLHUuZ2V0VVRDRGF0ZSgpXTpbdS5nZXRGdWxsWWVhcigpLHUuZ2V0TW9udGgoKSx1LmdldERhdGUoKV0sdC5fdyYmbnVsbD09dC5fYVsyXSYmbnVsbD09dC5fYVsxXSYmZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYSxvLHMsYztpZihudWxsIT0oZT10Ll93KS5HR3x8bnVsbCE9ZS5XfHxudWxsIT1lLkUpYT0xLG89NCxuPWFlKGUuR0csdC5fYVswXSxJdChfZSgpLDEsNCkueWVhcikscj1hZShlLlcsMSksKChpPWFlKGUuRSwxKSk8MXx8NzxpKSYmKGM9ITApO2Vsc2V7YT10Ll9sb2NhbGUuX3dlZWsuZG93LG89dC5fbG9jYWxlLl93ZWVrLmRveTt2YXIgdT1JdChfZSgpLGEsbyk7bj1hZShlLmdnLHQuX2FbMF0sdS55ZWFyKSxyPWFlKGUudyx1LndlZWspLG51bGwhPWUuZD8oKGk9ZS5kKTwwfHw2PGkpJiYoYz0hMCk6bnVsbCE9ZS5lPyhpPWUuZSthLChlLmU8MHx8NjxlLmUpJiYoYz0hMCkpOmk9YX1yPDF8fHI+UnQobixhLG8pP3AodCkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9Yz9wKHQpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KHM9THQobixyLGksYSxvKSx0Ll9hWzBdPXMueWVhcix0Ll9kYXlPZlllYXI9cy5kYXlPZlllYXIpfSh0KSxudWxsIT10Ll9kYXlPZlllYXImJihvPWFlKHQuX2FbMF0sclswXSksKHQuX2RheU9mWWVhcj5ndChvKXx8MD09PXQuX2RheU9mWWVhcikmJihwKHQpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksbj1PdChvLDAsdC5fZGF5T2ZZZWFyKSx0Ll9hWzFdPW4uZ2V0VVRDTW9udGgoKSx0Ll9hWzJdPW4uZ2V0VVRDRGF0ZSgpKSxlPTA7ZTwzJiZudWxsPT10Ll9hW2VdOysrZSl0Ll9hW2VdPXNbZV09cltlXTtmb3IoO2U8NztlKyspdC5fYVtlXT1zW2VdPW51bGw9PXQuX2FbZV0/Mj09PWU/MTowOnQuX2FbZV07MjQ9PT10Ll9hWzNdJiYwPT09dC5fYVs0XSYmMD09PXQuX2FbNV0mJjA9PT10Ll9hWzZdJiYodC5fbmV4dERheT0hMCx0Ll9hWzNdPTApLHQuX2Q9KHQuX3VzZVVUQz9PdDpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcztyZXR1cm4gdDwxMDAmJjA8PXQ/KHM9bmV3IERhdGUodCs0MDAsZSxuLHIsaSxhLG8pLGlzRmluaXRlKHMuZ2V0RnVsbFllYXIoKSkmJnMuc2V0RnVsbFllYXIodCkpOnM9bmV3IERhdGUodCxlLG4scixpLGEsbyksc30pLmFwcGx5KG51bGwscyksYT10Ll91c2VVVEM/dC5fZC5nZXRVVENEYXkoKTp0Ll9kLmdldERheSgpLG51bGwhPXQuX3R6bSYmdC5fZC5zZXRVVENNaW51dGVzKHQuX2QuZ2V0VVRDTWludXRlcygpLXQuX3R6bSksdC5fbmV4dERheSYmKHQuX2FbM109MjQpLHQuX3cmJnZvaWQgMCE9PXQuX3cuZCYmdC5fdy5kIT09YSYmKHAodCkud2Vla2RheU1pc21hdGNoPSEwKX19dmFyIHNlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLGNlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyx1ZT0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/LyxsZT1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1cZC9dLFsiR0dHRy1bV11XVyIsL1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0tXGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHszfS9dLFsiR0dHR1tXXVdXIiwvXGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dXSxoZT1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6XGRcZDpcZFxkLFxkKy9dLFsiSEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NTIiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10sWyJISG1tIiwvXGRcZFxkXGQvXSxbIkhIIiwvXGRcZC9dXSxmZT0vXlwvP0RhdGVcKChcLT9cZCspL2k7ZnVuY3Rpb24gZGUodCl7dmFyIGUsbixyLGksYSxvLHM9dC5faSxjPXNlLmV4ZWMocyl8fGNlLmV4ZWMocyk7aWYoYyl7Zm9yKHAodCkuaXNvPSEwLGU9MCxuPWxlLmxlbmd0aDtlPG47ZSsrKWlmKGxlW2VdWzFdLmV4ZWMoY1sxXSkpe2k9bGVbZV1bMF0scj0hMSE9PWxlW2VdWzJdO2JyZWFrfWlmKG51bGw9PWkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1szXSl7Zm9yKGU9MCxuPWhlLmxlbmd0aDtlPG47ZSsrKWlmKGhlW2VdWzFdLmV4ZWMoY1szXSkpe2E9KGNbMl18fCIgIikraGVbZV1bMF07YnJlYWt9aWYobnVsbD09YSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKX1pZighciYmbnVsbCE9YSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihjWzRdKXtpZighdWUuZXhlYyhjWzRdKSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtvPSJaIn10Ll9mPWkrKGF8fCIiKSsob3x8IiIpLG1lKHQpfWVsc2UgdC5faXNWYWxpZD0hMX12YXIgcGU9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC87dmFyIHllPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBnZSh0KXt2YXIgZSxuLHIsaT1wZS5leGVjKHQuX2kucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIikpO2lmKGkpe3ZhciBhPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbz1bZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU8PTQ5PzJlMytlOmU8PTk5OT8xOTAwK2U6ZX0odCksQ3QuaW5kZXhPZihlKSxwYXJzZUludChuLDEwKSxwYXJzZUludChyLDEwKSxwYXJzZUludChpLDEwKV07cmV0dXJuIGEmJm8ucHVzaChwYXJzZUludChhLDEwKSksb30oaVs0XSxpWzNdLGlbMl0saVs1XSxpWzZdLGlbN10pO2lmKG49YSxyPXQsKGU9aVsxXSkmJmp0LmluZGV4T2YoZSkhPT1uZXcgRGF0ZShuWzBdLG5bMV0sblsyXSkuZ2V0RGF5KCkmJihwKHIpLndlZWtkYXlNaXNtYXRjaD0hMCwhKHIuX2lzVmFsaWQ9ITEpKSlyZXR1cm47dC5fYT1hLHQuX3R6bT1mdW5jdGlvbih0LGUsbil7aWYodClyZXR1cm4geWVbdF07aWYoZSlyZXR1cm4gMDt2YXIgcj1wYXJzZUludChuLDEwKSxpPXIlMTAwO3JldHVybihyLWkpLzEwMCo2MCtpfShpWzhdLGlbOV0saVsxMF0pLHQuX2Q9T3QuYXBwbHkobnVsbCx0Ll9hKSx0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSxwKHQpLnJmYzI4MjI9ITB9ZWxzZSB0Ll9pc1ZhbGlkPSExfWZ1bmN0aW9uIG1lKHQpe2lmKHQuX2YhPT1pLklTT184NjAxKWlmKHQuX2YhPT1pLlJGQ18yODIyKXt0Ll9hPVtdLHAodCkuZW1wdHk9ITA7dmFyIGUsbixyLGEsbyxzLGMsdSxsPSIiK3QuX2ksZj1sLmxlbmd0aCxkPTA7Zm9yKHI9Vyh0Ll9mLHQuX2xvY2FsZSkubWF0Y2goWSl8fFtdLGU9MDtlPHIubGVuZ3RoO2UrKylhPXJbZV0sKG49KGwubWF0Y2goaHQoYSx0KSl8fFtdKVswXSkmJigwPChvPWwuc3Vic3RyKDAsbC5pbmRleE9mKG4pKSkubGVuZ3RoJiZwKHQpLnVudXNlZElucHV0LnB1c2gobyksbD1sLnNsaWNlKGwuaW5kZXhPZihuKStuLmxlbmd0aCksZCs9bi5sZW5ndGgpLHFbYV0/KG4/cCh0KS5lbXB0eT0hMTpwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpLHM9YSx1PXQsbnVsbCE9KGM9bikmJmgoZHQscykmJmR0W3NdKGMsdS5fYSx1LHMpKTp0Ll9zdHJpY3QmJiFuJiZwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpO3AodCkuY2hhcnNMZWZ0T3Zlcj1mLWQsMDxsLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKGwpLHQuX2FbM108PTEyJiYhMD09PXAodCkuYmlnSG91ciYmMDx0Ll9hWzNdJiYocCh0KS5iaWdIb3VyPXZvaWQgMCkscCh0KS5wYXJzZWREYXRlUGFydHM9dC5fYS5zbGljZSgwKSxwKHQpLm1lcmlkaWVtPXQuX21lcmlkaWVtLHQuX2FbM109ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBudWxsPT1uP2U6bnVsbCE9dC5tZXJpZGllbUhvdXI/dC5tZXJpZGllbUhvdXIoZSxuKToobnVsbCE9dC5pc1BNJiYoKHI9dC5pc1BNKG4pKSYmZTwxMiYmKGUrPTEyKSxyfHwxMiE9PWV8fChlPTApKSxlKX0odC5fbG9jYWxlLHQuX2FbM10sdC5fbWVyaWRpZW0pLG9lKHQpLGllKHQpfWVsc2UgZ2UodCk7ZWxzZSBkZSh0KX1mdW5jdGlvbiB2ZSh0KXt2YXIgZSxuLHIsaCxkPXQuX2ksbT10Ll9mO3JldHVybiB0Ll9sb2NhbGU9dC5fbG9jYWxlfHxyZSh0Ll9sKSxudWxsPT09ZHx8dm9pZCAwPT09bSYmIiI9PT1kP2coe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIGQmJih0Ll9pPWQ9dC5fbG9jYWxlLnByZXBhcnNlKGQpKSx4KGQpP25ldyBfKGllKGQpKToodShkKT90Ll9kPWQ6YShtKT9mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhO2lmKDA9PT10Ll9mLmxlbmd0aClyZXR1cm4gcCh0KS5pbnZhbGlkRm9ybWF0PSEwLHQuX2Q9bmV3IERhdGUoTmFOKTtmb3IoaT0wO2k8dC5fZi5sZW5ndGg7aSsrKWE9MCxlPXYoe30sdCksbnVsbCE9dC5fdXNlVVRDJiYoZS5fdXNlVVRDPXQuX3VzZVVUQyksZS5fZj10Ll9mW2ldLG1lKGUpLHkoZSkmJihhKz1wKGUpLmNoYXJzTGVmdE92ZXIsYSs9MTAqcChlKS51bnVzZWRUb2tlbnMubGVuZ3RoLHAoZSkuc2NvcmU9YSwobnVsbD09cnx8YTxyKSYmKHI9YSxuPWUpKTtmKHQsbnx8ZSl9KHQpOm0/bWUodCk6cyhuPShlPXQpLl9pKT9lLl9kPW5ldyBEYXRlKGkubm93KCkpOnUobik/ZS5fZD1uZXcgRGF0ZShuLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiBuPyhyPWUsbnVsbD09PShoPWZlLmV4ZWMoci5faSkpPyhkZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxnZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxpLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHIpKSkpOnIuX2Q9bmV3IERhdGUoK2hbMV0pKTphKG4pPyhlLl9hPWwobi5zbGljZSgwKSwoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSkpLG9lKGUpKTpvKG4pP2Z1bmN0aW9uKHQpe2lmKCF0Ll9kKXt2YXIgZT1SKHQuX2kpO3QuX2E9bChbZS55ZWFyLGUubW9udGgsZS5kYXl8fGUuZGF0ZSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQsZS5taWxsaXNlY29uZF0sKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pKSxvZSh0KX19KGUpOmMobik/ZS5fZD1uZXcgRGF0ZShuKTppLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpLHkodCl8fCh0Ll9kPW51bGwpLHQpKX1mdW5jdGlvbiBiZSh0LGUsbixyLGkpe3ZhciBzLGM9e307cmV0dXJuITAhPT1uJiYhMSE9PW58fChyPW4sbj12b2lkIDApLChvKHQpJiZmdW5jdGlvbih0KXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aDt2YXIgZTtmb3IoZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITE7cmV0dXJuITB9KHQpfHxhKHQpJiYwPT09dC5sZW5ndGgpJiYodD12b2lkIDApLGMuX2lzQU1vbWVudE9iamVjdD0hMCxjLl91c2VVVEM9Yy5faXNVVEM9aSxjLl9sPW4sYy5faT10LGMuX2Y9ZSxjLl9zdHJpY3Q9ciwocz1uZXcgXyhpZSh2ZShjKSkpKS5fbmV4dERheSYmKHMuYWRkKDEsImQiKSxzLl9uZXh0RGF5PXZvaWQgMCksc31mdW5jdGlvbiBfZSh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMSl9aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1DKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIiwoZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSksaS5JU09fODYwMT1mdW5jdGlvbigpe30saS5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIHhlPUMoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIiwoZnVuY3Rpb24oKXt2YXIgdD1fZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PHRoaXM/dGhpczp0OmcoKX0pKSx3ZT1DKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9X2UuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dGhpczx0P3RoaXM6dDpnKCl9KSk7ZnVuY3Rpb24ga2UodCxlKXt2YXIgbixyO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiBfZSgpO2ZvcihuPWVbMF0scj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0uaXNWYWxpZCgpJiYhZVtyXVt0XShuKXx8KG49ZVtyXSk7cmV0dXJuIG59dmFyIFRlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBFZSh0KXt2YXIgZT1SKHQpLG49ZS55ZWFyfHwwLHI9ZS5xdWFydGVyfHwwLGk9ZS5tb250aHx8MCxhPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsYz1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGw9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09dnQuY2FsbChUZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPFRlLmxlbmd0aDsrK3IpaWYodFtUZVtyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdCh0W1RlW3JdXSkhPT1rKHRbVGVbcl1dKSYmKG49ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2wrMWUzKnUrNmU0KmMrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KmEsdGhpcy5fbW9udGhzPStpKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiBBZSh0LGUpe0godCwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxuPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxuPSItIiksbitqKH5+KHQvNjApLDIpK2Uraih+fnQlNjAsMil9KSl9QWUoIloiLCI6IiksQWUoIlpaIiwiIiksbHQoIloiLHN0KSxsdCgiWloiLHN0KSxwdChbIloiLCJaWiJdLChmdW5jdGlvbih0LGUsbil7bi5fdXNlVVRDPSEwLG4uX3R6bT1OZShzdCx0KX0pKTt2YXIgTWU9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj0oZXx8IiIpLm1hdGNoKHQpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO3ZhciByPSgobltuLmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaChNZSl8fFsiLSIsMCwwXSxpPTYwKnJbMV0rayhyWzJdKTtyZXR1cm4gMD09PWk/MDoiKyI9PT1yWzBdP2k6LWl9ZnVuY3Rpb24gRGUodCxlKXt2YXIgbixyO3JldHVybiBlLl9pc1VUQz8obj1lLmNsb25lKCkscj0oeCh0KXx8dSh0KT90LnZhbHVlT2YoKTpfZSh0KS52YWx1ZU9mKCkpLW4udmFsdWVPZigpLG4uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStyKSxpLnVwZGF0ZU9mZnNldChuLCExKSxuKTpfZSh0KS5sb2NhbCgpfWZ1bmN0aW9uIE9lKHQpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0Ll9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9aS51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBMZT0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLEllPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBSZSh0LGUpe3ZhciBuLHIsaSxhPXQsbz1udWxsO3JldHVybiBDZSh0KT9hPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfTpjKHQpPyhhPXt9LGU/YVtlXT10OmEubWlsbGlzZWNvbmRzPXQpOihvPUxlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OjAsZDprKG9bMl0pKm4saDprKG9bM10pKm4sbTprKG9bNF0pKm4sczprKG9bNV0pKm4sbXM6ayhTZSgxZTMqb1s2XSkpKm59KToobz1JZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTpGZShvWzJdLG4pLE06RmUob1szXSxuKSx3OkZlKG9bNF0sbiksZDpGZShvWzVdLG4pLGg6RmUob1s2XSxuKSxtOkZlKG9bN10sbiksczpGZShvWzhdLG4pfSk6bnVsbD09YT9hPXt9OiJvYmplY3QiPT10eXBlb2YgYSYmKCJmcm9tImluIGF8fCJ0byJpbiBhKSYmKGk9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpPyhlPURlKGUsdCksdC5pc0JlZm9yZShlKT9uPVBlKHQsZSk6KChuPVBlKGUsdCkpLm1pbGxpc2Vjb25kcz0tbi5taWxsaXNlY29uZHMsbi5tb250aHM9LW4ubW9udGhzKSxuKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fShfZShhLmZyb20pLF9lKGEudG8pKSwoYT17fSkubXM9aS5taWxsaXNlY29uZHMsYS5NPWkubW9udGhzKSxyPW5ldyBFZShhKSxDZSh0KSYmaCh0LCJfbG9jYWxlIikmJihyLl9sb2NhbGU9dC5fbG9jYWxlKSxyfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIG49dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKmV9ZnVuY3Rpb24gUGUodCxlKXt2YXIgbj17fTtyZXR1cm4gbi5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLW4ubW9udGhzLG4ubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIiksbn1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO3JldHVybiBudWxsPT09cnx8aXNOYU4oK3IpfHwoTShlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxpPW4sbj1yLHI9aSksWWUodGhpcyxSZShuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLHIpLHQpLHRoaXN9fWZ1bmN0aW9uIFllKHQsZSxuLHIpe3ZhciBhPWUuX21pbGxpc2Vjb25kcyxvPVNlKGUuX2RheXMpLHM9U2UoZS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKHI9bnVsbD09cnx8cixzJiZTdCh0LHh0KHQsIk1vbnRoIikrcypuKSxvJiZ3dCh0LCJEYXRlIix4dCh0LCJEYXRlIikrbypuKSxhJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrYSpuKSxyJiZpLnVwZGF0ZU9mZnNldCh0LG98fHMpKX1SZS5mbj1FZS5wcm90b3R5cGUsUmUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBSZShOYU4pfTt2YXIgemU9amUoMSwiYWRkIiksVWU9amUoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gcWUodCxlKXt2YXIgbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuLShuKyhlLXI8MD8oZS1yKS8oci10LmNsb25lKCkuYWRkKG4tMSwibW9udGhzIikpOihlLXIpLyh0LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiktcikpKXx8MH1mdW5jdGlvbiBIZSh0KXt2YXIgZTtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShlPXJlKHQpKSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1pLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixpLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciAkZT1DKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSkpO2Z1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgVmU9MTI2MjI3ODA4ZTU7ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9uZXcgRGF0ZSh0KzQwMCxlLG4pLVZlOm5ldyBEYXRlKHQsZSxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9EYXRlLlVUQyh0KzQwMCxlLG4pLVZlOkRhdGUuVVRDKHQsZSxuKX1mdW5jdGlvbiBRZSh0LGUpe0goMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBLZSh0LGUsbixyLGkpe3ZhciBhO3JldHVybiBudWxsPT10P0l0KHRoaXMscixpKS55ZWFyOigoYT1SdCh0LHIsaSkpPGUmJihlPWEpLGZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9THQodCxlLG4scixpKSxvPU90KGEueWVhciwwLGEuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxuLHIsaSkpfUgoMCxbImdnIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSkpLEgoMCxbIkdHIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSkpLFFlKCJnZ2dnIiwid2Vla1llYXIiKSxRZSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLFFlKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxRZSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksUCgid2Vla1llYXIiLDEpLFAoImlzb1dlZWtZZWFyIiwxKSxsdCgiRyIsYXQpLGx0KCJnIixhdCksbHQoIkdHIixLLEcpLGx0KCJnZyIsSyxHKSxsdCgiR0dHRyIsbnQsWiksbHQoImdnZ2ciLG50LFopLGx0KCJHR0dHRyIscnQsUSksbHQoImdnZ2dnIixydCxRKSx5dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMildPWsodCl9KSkseXQoWyJnZyIsIkdHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxIKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxMKCJxdWFydGVyIiwiUSIpLFAoInF1YXJ0ZXIiLDcpLGx0KCJRIixWKSxwdCgiUSIsKGZ1bmN0aW9uKHQsZSl7ZVsxXT0zKihrKHQpLTEpfSkpLEgoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMKCJkYXRlIiwiRCIpLFAoImRhdGUiLDkpLGx0KCJEIixLKSxsdCgiREQiLEssRyksbHQoIkRvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxlLl9vcmRpbmFsUGFyc2U6ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSkscHQoWyJEIiwiREQiXSwyKSxwdCgiRG8iLChmdW5jdGlvbih0LGUpe2VbMl09ayh0Lm1hdGNoKEspWzBdKX0pKTt2YXIgSmU9X3QoIkRhdGUiLCEwKTtIKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMKCJkYXlPZlllYXIiLCJEREQiKSxQKCJkYXlPZlllYXIiLDQpLGx0KCJEREQiLGV0KSxsdCgiRERERCIsWCkscHQoWyJEREQiLCJEREREIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9kYXlPZlllYXI9ayh0KX0pKSxIKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxMKCJtaW51dGUiLCJtIiksUCgibWludXRlIiwxNCksbHQoIm0iLEspLGx0KCJtbSIsSyxHKSxwdChbIm0iLCJtbSJdLDQpO3ZhciB0bj1fdCgiTWludXRlcyIsITEpO0goInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEwoInNlY29uZCIsInMiKSxQKCJzZWNvbmQiLDE1KSxsdCgicyIsSyksbHQoInNzIixLLEcpLHB0KFsicyIsInNzIl0sNSk7dmFyIGVuLG5uPV90KCJTZWNvbmRzIiwhMSk7Zm9yKEgoIlMiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSxIKDAsWyJTUyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLEgoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxIKDAsWyJTU1NTIiw0XSwwLChmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1MiLDVdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1NTIiw2XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSkpLEgoMCxbIlNTU1NTU1MiLDddLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1NTU1MiLDhdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSksSCgwLFsiU1NTU1NTU1NTIiw5XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkpLEwoIm1pbGxpc2Vjb25kIiwibXMiKSxQKCJtaWxsaXNlY29uZCIsMTYpLGx0KCJTIixldCxWKSxsdCgiU1MiLGV0LEcpLGx0KCJTU1MiLGV0LFgpLGVuPSJTU1NTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilsdChlbixpdCk7ZnVuY3Rpb24gcm4odCxlKXtlWzZdPWsoMWUzKigiMC4iK3QpKX1mb3IoZW49IlMiO2VuLmxlbmd0aDw9OTtlbis9IlMiKXB0KGVuLHJuKTt2YXIgYW49X3QoIk1pbGxpc2Vjb25kcyIsITEpO0goInoiLDAsMCwiem9uZUFiYnIiKSxIKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciBvbj1fLnByb3RvdHlwZTtmdW5jdGlvbiBzbih0KXtyZXR1cm4gdH1vbi5hZGQ9emUsb24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10fHxfZSgpLHI9RGUobix0aGlzKS5zdGFydE9mKCJkYXkiKSxhPWkuY2FsZW5kYXJGb3JtYXQodGhpcyxyKXx8InNhbWVFbHNlIixvPWUmJihOKGVbYV0pP2VbYV0uY2FsbCh0aGlzLG4pOmVbYV0pO3JldHVybiB0aGlzLmZvcm1hdChvfHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihhLHRoaXMsX2UobikpKX0sb24uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF8odGhpcyl9LG9uLmRpZmY9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKHI9RGUodCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGk9NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGU9SShlKSl7Y2FzZSJ5ZWFyIjphPXFlKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6YT1xZSh0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6YT1xZSh0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOmE9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjphPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOmE9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6YT0odGhpcy1yLWkpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6YT0odGhpcy1yLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OmE9dGhpcy1yfXJldHVybiBuP2E6dyhhKX0sb24uZW5kT2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MzZlNS1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KS0xO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTZlNC1HZShlLDZlNCktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0xZTMtR2UoZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2kuZGVmYXVsdEZvcm1hdFV0YzppLmRlZmF1bHRGb3JtYXQpO3ZhciBlPSQodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sb24uZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHgodCkmJnQuaXNWYWxpZCgpfHxfZSh0KS5pc1ZhbGlkKCkpP1JlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24uZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKF9lKCksdCl9LG9uLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoeCh0KSYmdC5pc1ZhbGlkKCl8fF9lKHQpLmlzVmFsaWQoKSk/UmUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byhfZSgpLHQpfSxvbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE4odGhpc1t0PUkodCldKT90aGlzW3RdKCk6dGhpc30sb24uaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykub3ZlcmZsb3d9LG9uLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj14KHQpP3Q6X2UodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk6bi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sb24uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj14KHQpP3Q6X2UodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LG9uLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT14KHQpP3Q6X2UodCksYT14KGUpP2U6X2UoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmkuaXNWYWxpZCgpJiZhLmlzVmFsaWQoKSkmJigiKCI9PT0ocj1yfHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoaSxuKTohdGhpcy5pc0JlZm9yZShpLG4pKSYmKCIpIj09PXJbMV0/dGhpcy5pc0JlZm9yZShhLG4pOiF0aGlzLmlzQWZ0ZXIoYSxuKSl9LG9uLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9eCh0KT90Ol9lKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhci5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09ci52YWx1ZU9mKCk6KG49ci52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1uJiZuPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9LG9uLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9LG9uLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNCZWZvcmUodCxlKX0sb24uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSxvbi5sYW5nPSRlLG9uLmxvY2FsZT1IZSxvbi5sb2NhbGVEYXRhPVdlLG9uLm1heD13ZSxvbi5taW49eGUsb24ucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGYoe30scCh0aGlzKSl9LG9uLnNldD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHt1bml0Om4scHJpb3JpdHk6RltuXX0pO3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pKSxlfSh0PVIodCkpLHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzW25bcl0udW5pdF0odFtuW3JdLnVuaXRdKTtlbHNlIGlmKE4odGhpc1t0PUkodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sb24uc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1JKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlLDZlNCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uc3VidHJhY3Q9VWUsb24udG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX0sb24udG9PYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybnt5ZWFyczp0LnllYXIoKSxtb250aHM6dC5tb250aCgpLGRhdGU6dC5kYXRlKCksaG91cnM6dC5ob3VycygpLG1pbnV0ZXM6dC5taW51dGVzKCksc2Vjb25kczp0LnNlY29uZHMoKSxtaWxsaXNlY29uZHM6dC5taWxsaXNlY29uZHMoKX19LG9uLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG9uLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgZT0hMCE9PXQsbj1lP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHw5OTk5PG4ueWVhcigpPyQobixlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6TihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/ZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsJChuLCJaIikpOiQobixlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sb24uaW5zcGVjdD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgdD0ibW9tZW50IixlPSIiO3RoaXMuaXNMb2NhbCgpfHwodD0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLGU9IloiKTt2YXIgbj0iWyIrdCsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsaT1lKydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2kpfSxvbi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG9uLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxvbi51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sb24udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LG9uLmNyZWF0aW9uRGF0YT1mdW5jdGlvbigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LG9uLnllYXI9YnQsb24uaXNMZWFwWWVhcj1mdW5jdGlvbigpe3JldHVybiBtdCh0aGlzLnllYXIoKSl9LG9uLndlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBLZS5jYWxsKHRoaXMsdCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sb24uaXNvV2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIEtlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LG9uLnF1YXJ0ZXI9b24ucXVhcnRlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih0LTEpK3RoaXMubW9udGgoKSUzKX0sb24ubW9udGg9QXQsb24uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4ga3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sb24ud2Vlaz1vbi53ZWVrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi5pc29XZWVrPW9uLmlzb1dlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPUl0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi53ZWVrc0luWWVhcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBSdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9LG9uLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KHRoaXMueWVhcigpLDEsNCl9LG9uLmRhdGU9SmUsb24uZGF5PW9uLmRheXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlLG4scj10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLHQ9InN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/Im51bWJlciI9PXR5cGVvZihlPW4ud2Vla2RheXNQYXJzZShlKSk/ZTpudWxsOnBhcnNlSW50KGUsMTApLHRoaXMuYWRkKHQtciwiZCIpKTpyfSxvbi53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLmRheSgpfHw3O3ZhciBlLG4scj0oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksInN0cmluZyI9PXR5cGVvZiBlP24ud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9yOnItNyl9LG9uLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaG91cj1vbi5ob3Vycz1YdCxvbi5taW51dGU9b24ubWludXRlcz10bixvbi5zZWNvbmQ9b24uc2Vjb25kcz1ubixvbi5taWxsaXNlY29uZD1vbi5taWxsaXNlY29uZHM9YW4sb24udXRjT2Zmc2V0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5faXNVVEM/YTpPZSh0aGlzKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0odD1OZShzdCx0KSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyh0KTwxNiYmIW4mJih0Kj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZlJiYocj1PZSh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9ciYmdGhpcy5hZGQociwibSIpLGEhPT10JiYoIWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/WWUodGhpcyxSZSh0LWEsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfSxvbi51dGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsdCl9LG9uLmxvY2FsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChPZSh0aGlzKSwibSIpKSx0aGlzfSxvbi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIHQ9TmUob3QsdGhpcy5faSk7bnVsbCE9dD90aGlzLnV0Y09mZnNldCh0KTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sb24uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKHQ9dD9fZSh0KS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLXQpJTYwPT0wKX0sb24uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxvbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxvbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxvbi5pc1V0Yz1CZSxvbi5pc1VUQz1CZSxvbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0sb24uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sb24uZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEplKSxvbi5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixBdCksb24ueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsYnQpLG9uLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSkpLG9uLmlzRFNUU2hpZnRlZD1DKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIiwoZnVuY3Rpb24oKXtpZighcyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYodih0LHRoaXMpLCh0PXZlKHQpKS5fYSl7dmFyIGU9dC5faXNVVEM/ZCh0Ll9hKTpfZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJjA8VCh0Ll9hLGUudG9BcnJheSgpKX1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfSkpO3ZhciBjbj1PLnByb3RvdHlwZTtmdW5jdGlvbiB1bih0LGUsbixyKXt2YXIgaT1yZSgpLGE9ZCgpLnNldChyLGUpO3JldHVybiBpW25dKGEsdCl9ZnVuY3Rpb24gbG4odCxlLG4pe2lmKGModCkmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gdW4odCxlLG4sIm1vbnRoIik7dmFyIHIsaT1bXTtmb3Iocj0wO3I8MTI7cisrKWlbcl09dW4odCxyLG4sIm1vbnRoIik7cmV0dXJuIGl9ZnVuY3Rpb24gaG4odCxlLG4scil7ImJvb2xlYW4iPT10eXBlb2YgdD9jKGUpJiYobj1lLGU9dm9pZCAwKTooZT10LHQ9ITEsYyhuPWUpJiYobj1lLGU9dm9pZCAwKSksZT1lfHwiIjt2YXIgaSxhPXJlKCksbz10P2EuX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gdW4oZSwobitvKSU3LHIsImRheSIpO3ZhciBzPVtdO2ZvcihpPTA7aTw3O2krKylzW2ldPXVuKGUsKGkrbyklNyxyLCJkYXkiKTtyZXR1cm4gc31jbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fY2FsZW5kYXJbdF18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBOKHIpP3IuY2FsbChlLG4pOnJ9LGNuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IW4/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMSl9KSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxjbi5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sY24ub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LGNuLnByZXBhcnNlPXNuLGNuLnBvc3Rmb3JtYXQ9c24sY24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gTihpKT9pKHQsZSxuLHIpOmkucmVwbGFjZSgvJWQvaSx0KX0sY24ucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVswPHQ/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gTihuKT9uKGUpOm4ucmVwbGFjZSgvJXMvaSxlKX0sY24uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKG4gaW4gdClOKGU9dFtuXSk/dGhpc1tuXT1lOnRoaXNbIl8iK25dPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sY24ubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxUdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sY24ubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W1R0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LGNuLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLHI9MDtyPDEyOysrcilhPWQoWzJlMyxyXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT10aGlzLm1vbnRoc1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/Ik1NTSI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT12dC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOiJNTU0iPT09ZT8tMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxEdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9TnQpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8RHQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fEh0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fEh0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fEh0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXF0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT1rKHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gbW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciB2bj1tbigibXMiKSxibj1tbigicyIpLF9uPW1uKCJtIikseG49bW4oImgiKSx3bj1tbigiZCIpLGtuPW1uKCJ3IiksVG49bW4oIk0iKSxFbj1tbigiUSIpLENuPW1uKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksTm49U24oIm1pbnV0ZXMiKSxEbj1TbigiaG91cnMiKSxPbj1TbigiZGF5cyIpLEJuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT13KCh0PXcobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT13KGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPUVlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPXZuLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9X24sWW4uYXNIb3Vycz14bixZbi5hc0RheXM9d24sWW4uYXNXZWVrcz1rbixZbi5hc01vbnRocz1UbixZbi5hc1F1YXJ0ZXJzPUVuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqayh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PXcoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9dyh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPXcoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9dyh5bihvKz13KG4vMjQpKSksby09cG4oZ24oaSkpLHI9dyhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9Tm4sWW4uaG91cnM9RG4sWW4uZGF5cz1PbixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiB3KHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9Qm4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT1IZSxZbi5sb2NhbGVEYXRhPVdlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz0kZSxIKCJYIiwwLDAsInVuaXgiKSxIKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKGsodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPV9lLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4ga2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGtlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4gX2UoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD14LGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gX2UuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgTyhlPUQoaSxlKSkpLnBhcmVudExvY2FsZT1RdFt0XSxRdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9UXRbdF0mJihudWxsIT1RdFt0XS5wYXJlbnRMb2NhbGU/UXRbdF09UXRbdF0ucGFyZW50TG9jYWxlOm51bGwhPVF0W3RdJiZkZWxldGUgUXRbdF0pO3JldHVybiBRdFt0XX0saS5sb2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoUXQpfSxpLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNTaG9ydCIpfSxpLm5vcm1hbGl6ZVVuaXRzPUksaS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9JbjoiZnVuY3Rpb24iPT10eXBlb2YgdCYmKEluPXQsITApfSxpLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1Sblt0XSYmKHZvaWQgMD09PWU/Um5bdF06KFJuW3RdPWUsInMiPT09dCYmKFJuLnNzPWUtMSksITApKX0saS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIG48LTY/InNhbWVFbHNlIjpuPC0xPyJsYXN0V2VlayI6bjwwPyJsYXN0RGF5IjpuPDE/InNhbWVEYXkiOm48Mj8ibmV4dERheSI6bjw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0saS5wcm90b3R5cGU9b24saS5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saX0oKX0sNjQ3MDp0PT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSl9ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgbixyPSIiLGk9MCxhPS0xLG89MCxzPTA7czw9dC5sZW5ndGg7KytzKXtpZihzPHQubGVuZ3RoKW49dC5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1uKWJyZWFrO249NDd9aWYoNDc9PT1uKXtpZihhPT09cy0xfHwxPT09byk7ZWxzZSBpZihhIT09cy0xJiYyPT09byl7aWYoci5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXt2YXIgYz1yLmxhc3RJbmRleE9mKCIvIik7aWYoYyE9PXIubGVuZ3RoLTEpey0xPT09Yz8ocj0iIixpPTApOmk9KHI9ci5zbGljZSgwLGMpKS5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKCIvIiksYT1zLG89MDtjb250aW51ZX19ZWxzZSBpZigyPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aCl7cj0iIixpPTAsYT1zLG89MDtjb250aW51ZX1lJiYoci5sZW5ndGg+MD9yKz0iLy4uIjpyPSIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9Ii8iK3Quc2xpY2UoYSsxLHMpOnI9dC5zbGljZShhKzEscyksaT1zLWEtMTthPXMsbz0wfWVsc2UgNDY9PT1uJiYtMSE9PW8/KytvOm89LTF9cmV0dXJuIHJ9dmFyIHI9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQscj0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvO2E+PTA/bz1hcmd1bWVudHNbYV06KHZvaWQgMD09PXQmJih0PXByb2Nlc3MuY3dkKCkpLG89dCksZShvKSwwIT09by5sZW5ndGgmJihyPW8rIi8iK3IsaT00Nz09PW8uY2hhckNvZGVBdCgwKSl9cmV0dXJuIHI9bihyLCFpKSxpP3IubGVuZ3RoPjA/Ii8iK3I6Ii8iOnIubGVuZ3RoPjA/cjoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbih0KXtpZihlKHQpLDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7dmFyIHI9NDc9PT10LmNoYXJDb2RlQXQoMCksaT00Nz09PXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKTtyZXR1cm4gMCE9PSh0PW4odCwhcikpLmxlbmd0aHx8cnx8KHQ9Ii4iKSx0Lmxlbmd0aD4wJiZpJiYodCs9Ii8iKSxyPyIvIit0OnR9LGlzQWJzb2x1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUodCksdC5sZW5ndGg+MCYmNDc9PT10LmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciB0LG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXt2YXIgaT1hcmd1bWVudHNbbl07ZShpKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09dD90PWk6dCs9Ii8iK2kpfXJldHVybiB2b2lkIDA9PT10PyIuIjpyLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmU6ZnVuY3Rpb24odCxuKXtpZihlKHQpLGUobiksdD09PW4pcmV0dXJuIiI7aWYoKHQ9ci5yZXNvbHZlKHQpKT09PShuPXIucmVzb2x2ZShuKSkpcmV0dXJuIiI7Zm9yKHZhciBpPTE7aTx0Lmxlbmd0aCYmNDc9PT10LmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIGE9dC5sZW5ndGgsbz1hLWkscz0xO3M8bi5sZW5ndGgmJjQ3PT09bi5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBjPW4ubGVuZ3RoLXMsdT1vPGM/bzpjLGw9LTEsaD0wO2g8PXU7KytoKXtpZihoPT09dSl7aWYoYz51KXtpZig0Nz09PW4uY2hhckNvZGVBdChzK2gpKXJldHVybiBuLnNsaWNlKHMraCsxKTtpZigwPT09aClyZXR1cm4gbi5zbGljZShzK2gpfWVsc2Ugbz51JiYoNDc9PT10LmNoYXJDb2RlQXQoaStoKT9sPWg6MD09PWgmJihsPTApKTticmVha312YXIgZj10LmNoYXJDb2RlQXQoaStoKTtpZihmIT09bi5jaGFyQ29kZUF0KHMraCkpYnJlYWs7NDc9PT1mJiYobD1oKX12YXIgZD0iIjtmb3IoaD1pK2wrMTtoPD1hOysraCloIT09YSYmNDchPT10LmNoYXJDb2RlQXQoaCl8fCgwPT09ZC5sZW5ndGg/ZCs9Ii4uIjpkKz0iLy4uIik7cmV0dXJuIGQubGVuZ3RoPjA/ZCtuLnNsaWNlKHMrbCk6KHMrPWwsNDc9PT1uLmNoYXJDb2RlQXQocykmJisrcyxuLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxkaXJuYW1lOmZ1bmN0aW9uKHQpe2lmKGUodCksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIG49dC5jaGFyQ29kZUF0KDApLHI9NDc9PT1uLGk9LTEsYT0hMCxvPXQubGVuZ3RoLTE7bz49MTstLW8paWYoNDc9PT0obj10LmNoYXJDb2RlQXQobykpKXtpZighYSl7aT1vO2JyZWFrfX1lbHNlIGE9ITE7cmV0dXJuLTE9PT1pP3I/Ii8iOiIuIjpyJiYxPT09aT8iLy8iOnQuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24odCxuKXtpZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2UodCk7dmFyIHIsaT0wLGE9LTEsbz0hMDtpZih2b2lkIDAhPT1uJiZuLmxlbmd0aD4wJiZuLmxlbmd0aDw9dC5sZW5ndGgpe2lmKG4ubGVuZ3RoPT09dC5sZW5ndGgmJm49PT10KXJldHVybiIiO3ZhciBzPW4ubGVuZ3RoLTEsYz0tMTtmb3Iocj10Lmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgdT10LmNoYXJDb2RlQXQocik7aWYoNDc9PT11KXtpZighbyl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWMmJihvPSExLGM9cisxKSxzPj0wJiYodT09PW4uY2hhckNvZGVBdChzKT8tMT09LS1zJiYoYT1yKToocz0tMSxhPWMpKX1yZXR1cm4gaT09PWE/YT1jOi0xPT09YSYmKGE9dC5sZW5ndGgpLHQuc2xpY2UoaSxhKX1mb3Iocj10Lmxlbmd0aC0xO3I+PTA7LS1yKWlmKDQ3PT09dC5jaGFyQ29kZUF0KHIpKXtpZighbyl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWEmJihvPSExLGE9cisxKTtyZXR1cm4tMT09PWE/IiI6dC5zbGljZShpLGEpfSxleHRuYW1lOmZ1bmN0aW9uKHQpe2UodCk7Zm9yKHZhciBuPS0xLHI9MCxpPS0xLGE9ITAsbz0wLHM9dC5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGM9dC5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09YyktMT09PWkmJihhPSExLGk9cysxKSw0Nj09PWM/LTE9PT1uP249czoxIT09byYmKG89MSk6LTEhPT1uJiYobz0tMSk7ZWxzZSBpZighYSl7cj1zKzE7YnJlYWt9fXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09b3x8MT09PW8mJm49PT1pLTEmJm49PT1yKzE/IiI6dC5zbGljZShuLGkpfSxmb3JtYXQ6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5kaXJ8fGUucm9vdCxyPWUuYmFzZXx8KGUubmFtZXx8IiIpKyhlLmV4dHx8IiIpO3JldHVybiBuP249PT1lLnJvb3Q/bityOm4rIi8iK3I6cn0oMCx0KX0scGFyc2U6ZnVuY3Rpb24odCl7ZSh0KTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PXQubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9dC5jaGFyQ29kZUF0KDApLGE9NDc9PT1pO2E/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBvPS0xLHM9MCxjPS0xLHU9ITAsbD10Lmxlbmd0aC0xLGg9MDtsPj1yOy0tbClpZig0NyE9PShpPXQuY2hhckNvZGVBdChsKSkpLTE9PT1jJiYodT0hMSxjPWwrMSksNDY9PT1pPy0xPT09bz9vPWw6MSE9PWgmJihoPTEpOi0xIT09byYmKGg9LTEpO2Vsc2UgaWYoIXUpe3M9bCsxO2JyZWFrfXJldHVybi0xPT09b3x8LTE9PT1jfHwwPT09aHx8MT09PWgmJm89PT1jLTEmJm89PT1zKzE/LTEhPT1jJiYobi5iYXNlPW4ubmFtZT0wPT09cyYmYT90LnNsaWNlKDEsYyk6dC5zbGljZShzLGMpKTooMD09PXMmJmE/KG4ubmFtZT10LnNsaWNlKDEsbyksbi5iYXNlPXQuc2xpY2UoMSxjKSk6KG4ubmFtZT10LnNsaWNlKHMsbyksbi5iYXNlPXQuc2xpY2UocyxjKSksbi5leHQ9dC5zbGljZShvLGMpKSxzPjA/bi5kaXI9dC5zbGljZSgwLHMtMSk6YSYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLHQuZXhwb3J0cz1yfSw4MjE4OigpPT57fSw4MDA5OigpPT57fSw1MzU0OigpPT57fSw2ODc4OigpPT57fSw4MTgzOigpPT57fSwxNDI4OigpPT57fSw0NTUxOigpPT57fSw4ODAwOigpPT57fSwxOTkzOigpPT57fSwzMDY5OigpPT57fSw5MTQzOigpPT57fX0sZT17fTtmdW5jdGlvbiBuKHIpe3ZhciBpPWVbcl07aWYodm9pZCAwIT09aSlyZXR1cm4gaS5leHBvcnRzO3ZhciBhPWVbcl09e2lkOnIsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubG9hZGVkPSEwLGEuZXhwb3J0c31uLmM9ZSxuLm49dD0+e3ZhciBlPXQmJnQuX19lc01vZHVsZT8oKT0+dC5kZWZhdWx0OigpPT50O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPSh0LGUpPT57Zm9yKHZhciByIGluIGUpbi5vKGUscikmJiFuLm8odCxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89KHQsZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpLG4ucj10PT57InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi5ubWQ9dD0+KHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLHQpO3ZhciByPW4obi5zPTc0NTgpO3JldHVybiByLmRlZmF1bHR9KSgpfSkpOwovLyMgc291cmNlTWFwcGluZ1VSTD1tZXJtYWlkLm1pbi5qcy5tYXA=`; \ No newline at end of file +module.exports = `LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgbWVybWFpZC5taW4uanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoKCk9PigoKT0+e3ZhciB0PXsyNTM2Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw2XSxuPVsxLDddLHI9WzEsOF0saT1bMSw5XSxhPVsxLDE2XSxvPVsxLDExXSxzPVsxLDEyXSxsPVsxLDEzXSx1PVsxLDE0XSxoPVsxLDE1XSxmPVsxLDI3XSxkPVsxLDMzXSxwPVsxLDM0XSxnPVsxLDM1XSx5PVsxLDM2XSxtPVsxLDM3XSxiPVsxLDcyXSx2PVsxLDczXSxfPVsxLDc0XSx4PVsxLDc1XSxrPVsxLDc2XSx3PVsxLDc3XSxUPVsxLDc4XSxFPVsxLDM4XSxDPVsxLDM5XSxTPVsxLDQwXSxBPVsxLDQxXSxNPVsxLDQyXSxOPVsxLDQzXSxPPVsxLDQ0XSxEPVsxLDQ1XSxCPVsxLDQ2XSxMPVsxLDQ3XSxJPVsxLDQ4XSxGPVsxLDQ5XSxSPVsxLDUwXSxQPVsxLDUxXSxqPVsxLDUyXSx6PVsxLDUzXSxZPVsxLDU0XSxVPVsxLDU1XSwkPVsxLDU2XSxXPVsxLDU3XSxxPVsxLDU5XSxIPVsxLDYwXSxWPVsxLDYxXSxHPVsxLDYyXSxYPVsxLDYzXSxaPVsxLDY0XSxRPVsxLDY1XSxLPVsxLDY2XSxKPVsxLDY3XSx0dD1bMSw2OF0sZXQ9WzEsNjldLG50PVsyNCw1Ml0scnQ9WzI0LDQ0LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0XSxpdD1bMTUsMjQsNDQsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODRdLGF0PVsxLDk0XSxvdD1bMSw5NV0sc3Q9WzEsOTZdLGN0PVsxLDk3XSxsdD1bMTUsMjQsNTJdLHV0PVs3LDgsOSwxMCwxOCwyMiwyNSwyNiwyNywyOF0saHQ9WzE1LDI0LDQzLDUyXSxmdD1bMTUsMjQsNDMsNTIsODYsODcsODksOTBdLGR0PVsxNSw0M10scHQ9WzQ0LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0XSxndD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LGRpcmVjdGlvbjo1LGRpcmVjdGl2ZTo2LGRpcmVjdGlvbl90Yjo3LGRpcmVjdGlvbl9idDo4LGRpcmVjdGlvbl9ybDo5LGRpcmVjdGlvbl9scjoxMCxncmFwaENvbmZpZzoxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsTkVXTElORToxNSwiOiI6MTYsYXJnRGlyZWN0aXZlOjE3LG9wZW5fZGlyZWN0aXZlOjE4LHR5cGVfZGlyZWN0aXZlOjE5LGFyZ19kaXJlY3RpdmU6MjAsY2xvc2VfZGlyZWN0aXZlOjIxLEM0X0NPTlRFWFQ6MjIsc3RhdGVtZW50czoyMyxFT0Y6MjQsQzRfQ09OVEFJTkVSOjI1LEM0X0NPTVBPTkVOVDoyNixDNF9EWU5BTUlDOjI3LEM0X0RFUExPWU1FTlQ6Mjgsb3RoZXJTdGF0ZW1lbnRzOjI5LGRpYWdyYW1TdGF0ZW1lbnRzOjMwLG90aGVyU3RhdGVtZW50OjMxLHRpdGxlOjMyLGFjY0Rlc2NyaXB0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGJvdW5kYXJ5U3RhdGVtZW50OjM5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6NDAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjQxLGJvdW5kYXJ5U3RhcnQ6NDIsTEJSQUNFOjQzLEVOVEVSUFJJU0VfQk9VTkRBUlk6NDQsYXR0cmlidXRlczo0NSxTWVNURU1fQk9VTkRBUlk6NDYsQk9VTkRBUlk6NDcsQ09OVEFJTkVSX0JPVU5EQVJZOjQ4LE5PREU6NDksTk9ERV9MOjUwLE5PREVfUjo1MSxSQlJBQ0U6NTIsZGlhZ3JhbVN0YXRlbWVudDo1MyxQRVJTT046NTQsUEVSU09OX0VYVDo1NSxTWVNURU06NTYsU1lTVEVNX0RCOjU3LFNZU1RFTV9RVUVVRTo1OCxTWVNURU1fRVhUOjU5LFNZU1RFTV9FWFRfREI6NjAsU1lTVEVNX0VYVF9RVUVVRTo2MSxDT05UQUlORVI6NjIsQ09OVEFJTkVSX0RCOjYzLENPTlRBSU5FUl9RVUVVRTo2NCxDT05UQUlORVJfRVhUOjY1LENPTlRBSU5FUl9FWFRfREI6NjYsQ09OVEFJTkVSX0VYVF9RVUVVRTo2NyxDT01QT05FTlQ6NjgsQ09NUE9ORU5UX0RCOjY5LENPTVBPTkVOVF9RVUVVRTo3MCxDT01QT05FTlRfRVhUOjcxLENPTVBPTkVOVF9FWFRfREI6NzIsQ09NUE9ORU5UX0VYVF9RVUVVRTo3MyxSRUw6NzQsQklSRUw6NzUsUkVMX1U6NzYsUkVMX0Q6NzcsUkVMX0w6NzgsUkVMX1I6NzksUkVMX0I6ODAsUkVMX0lOREVYOjgxLFVQREFURV9FTF9TVFlMRTo4MixVUERBVEVfUkVMX1NUWUxFOjgzLFVQREFURV9MQVlPVVRfQ09ORklHOjg0LGF0dHJpYnV0ZTo4NSxTVFI6ODYsU1RSX0tFWTo4NyxTVFJfVkFMVUU6ODgsQVRUUklCVVRFOjg5LEFUVFJJQlVURV9FTVBUWTo5MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiZGlyZWN0aW9uX3RiIiw4OiJkaXJlY3Rpb25fYnQiLDk6ImRpcmVjdGlvbl9ybCIsMTA6ImRpcmVjdGlvbl9sciIsMTU6Ik5FV0xJTkUiLDE2OiI6IiwxODoib3Blbl9kaXJlY3RpdmUiLDE5OiJ0eXBlX2RpcmVjdGl2ZSIsMjA6ImFyZ19kaXJlY3RpdmUiLDIxOiJjbG9zZV9kaXJlY3RpdmUiLDIyOiJDNF9DT05URVhUIiwyNDoiRU9GIiwyNToiQzRfQ09OVEFJTkVSIiwyNjoiQzRfQ09NUE9ORU5UIiwyNzoiQzRfRFlOQU1JQyIsMjg6IkM0X0RFUExPWU1FTlQiLDMyOiJ0aXRsZSIsMzM6ImFjY0Rlc2NyaXB0aW9uIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDM6IkxCUkFDRSIsNDQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDQ2OiJTWVNURU1fQk9VTkRBUlkiLDQ3OiJCT1VOREFSWSIsNDg6IkNPTlRBSU5FUl9CT1VOREFSWSIsNDk6Ik5PREUiLDUwOiJOT0RFX0wiLDUxOiJOT0RFX1IiLDUyOiJSQlJBQ0UiLDU0OiJQRVJTT04iLDU1OiJQRVJTT05fRVhUIiw1NjoiU1lTVEVNIiw1NzoiU1lTVEVNX0RCIiw1ODoiU1lTVEVNX1FVRVVFIiw1OToiU1lTVEVNX0VYVCIsNjA6IlNZU1RFTV9FWFRfREIiLDYxOiJTWVNURU1fRVhUX1FVRVVFIiw2MjoiQ09OVEFJTkVSIiw2MzoiQ09OVEFJTkVSX0RCIiw2NDoiQ09OVEFJTkVSX1FVRVVFIiw2NToiQ09OVEFJTkVSX0VYVCIsNjY6IkNPTlRBSU5FUl9FWFRfREIiLDY3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw2ODoiQ09NUE9ORU5UIiw2OToiQ09NUE9ORU5UX0RCIiw3MDoiQ09NUE9ORU5UX1FVRVVFIiw3MToiQ09NUE9ORU5UX0VYVCIsNzI6IkNPTVBPTkVOVF9FWFRfREIiLDczOiJDT01QT05FTlRfRVhUX1FVRVVFIiw3NDoiUkVMIiw3NToiQklSRUwiLDc2OiJSRUxfVSIsNzc6IlJFTF9EIiw3ODoiUkVMX0wiLDc5OiJSRUxfUiIsODA6IlJFTF9CIiw4MToiUkVMX0lOREVYIiw4MjoiVVBEQVRFX0VMX1NUWUxFIiw4MzoiVVBEQVRFX1JFTF9TVFlMRSIsODQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw4NjoiU1RSIiw4NzoiU1RSX0tFWSIsODg6IlNUUl9WQUxVRSIsODk6IkFUVFJJQlVURSIsOTA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywyXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbNiw0XSxbNiw2XSxbMTIsMV0sWzEzLDFdLFsxNywxXSxbMTQsMV0sWzExLDRdLFsxMSw0XSxbMTEsNF0sWzExLDRdLFsxMSw0XSxbMjMsMV0sWzIzLDFdLFsyMywyXSxbMjksMV0sWzI5LDJdLFsyOSwzXSxbMzEsMV0sWzMxLDFdLFszMSwyXSxbMzEsMl0sWzMxLDFdLFszOSwzXSxbNDAsM10sWzQwLDNdLFs0MCw0XSxbNDIsMl0sWzQyLDJdLFs0MiwyXSxbNDIsMl0sWzQyLDJdLFs0MiwyXSxbNDIsMl0sWzQxLDFdLFszMCwxXSxbMzAsMl0sWzMwLDNdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDFdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzUzLDJdLFs1MywyXSxbNTMsMl0sWzQ1LDFdLFs0NSwyXSxbODUsMV0sWzg1LDJdLFs4NSwxXSxbODUsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnIuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNTpyLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDY6ci5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA3OnIuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgMTE6Y29uc29sZS5sb2coIm9wZW5fZGlyZWN0aXZlOiAiLGFbc10pLHIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksY29uc29sZS5sb2coImFyZ19kaXJlY3RpdmU6ICIsYVtzXSksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNDpjb25zb2xlLmxvZygiY2xvc2VfZGlyZWN0aXZlOiAiLGFbc10pLHIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImM0Q29udGV4dCIpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6Y2FzZSAxOTpyLnNldEM0VHlwZShhW3MtM10pO2JyZWFrO2Nhc2UgMjY6ci5zZXRUaXRsZShhW3NdLnN1YnN0cmluZyg2KSksdGhpcy4kPWFbc10uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMjc6ci5zZXRBY2NEZXNjcmlwdGlvbihhW3NdLnN1YnN0cmluZygxNSkpLHRoaXMuJD1hW3NdLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMDp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNjpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLGFbc10uc3BsaWNlKDIsMCwiRU5URVJQUklTRSIpLHIuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5hW3NdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDM3OmNvbnNvbGUubG9nKGFbcy0xXSxKU09OLnN0cmluZ2lmeShhW3NdKSksci5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzg6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxhW3NdLnNwbGljZSgyLDAsIkNPTlRBSU5FUiIpLHIuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSAzOTpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkRGVwbG95bWVudE5vZGUoIm5vZGUiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNDA6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZERlcGxveW1lbnROb2RlKCJub2RlTCIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0MTpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5hW3NdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDQyOnIucG9wQm91bmRhcnlQYXJzZVN0YWNrKCk7YnJlYWs7Y2FzZSA0Njpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oInBlcnNvbiIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0Nzpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0ODpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0OTpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9kYiIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1MDpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1MTpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1Mjpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9kYiIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1Mzpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1NDpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkQ29udGFpbmVyKCJjb250YWluZXIiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNTU6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZENvbnRhaW5lcigiY29udGFpbmVyX2RiIiwuLi5hW3NdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU2OmNvbnNvbGUubG9nKGFbcy0xXSxKU09OLnN0cmluZ2lmeShhW3NdKSksci5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1Nzpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXIiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNTg6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX2RiIiwuLi5hW3NdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU5OmNvbnNvbGUubG9nKGFbcy0xXSxKU09OLnN0cmluZ2lmeShhW3NdKSksci5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA2MDpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkQ29tcG9uZW50KCJjb21wb25lbnQiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNjE6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZENvbXBvbmVudCgiY29tcG9uZW50X2RiIiwuLi5hW3NdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDYyOmNvbnNvbGUubG9nKGFbcy0xXSxKU09OLnN0cmluZ2lmeShhW3NdKSksci5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA2Mzpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnQiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNjQ6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X2RiIiwuLi5hW3NdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDY1OmNvbnNvbGUubG9nKGFbcy0xXSxKU09OLnN0cmluZ2lmeShhW3NdKSksci5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA2Nzpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIuYWRkUmVsKCJyZWwiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNjg6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZFJlbCgiYmlyZWwiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNjk6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZFJlbCgicmVsX3UiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzA6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZFJlbCgicmVsX2QiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzE6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZFJlbCgicmVsX2wiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzI6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZFJlbCgicmVsX3IiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzM6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLmFkZFJlbCgicmVsX2IiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzQ6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxhW3NdLnNwbGljZSgwLDEpLHIuYWRkUmVsKCJyZWwiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzU6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4uYVtzXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3Njpjb25zb2xlLmxvZyhhW3MtMV0sSlNPTi5zdHJpbmdpZnkoYVtzXSkpLHIudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzc6Y29uc29sZS5sb2coYVtzLTFdLEpTT04uc3RyaW5naWZ5KGFbc10pKSxyLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLmFbc10pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzg6Y29uc29sZS5sb2coIlBVU0ggQVRUUklCVVRFOiAiLGFbc10pLHRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSA3OTpjb25zb2xlLmxvZygiUFVTSCBBVFRSSUJVVEU6ICIsYVtzLTFdKSxhW3NdLnVuc2hpZnQoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDgwOmNhc2UgODI6dGhpcy4kPWFbc10udHJpbSgpO2JyZWFrO2Nhc2UgODE6Y29uc29sZS5sb2coImt2OiAiLGFbcy0xXSxhW3NdKTtsZXQgdD17fTt0W2Fbcy0xXS50cmltKCldPWFbc10udHJpbSgpLHRoaXMuJD10O2JyZWFrO2Nhc2UgODM6dGhpcy4kPSIifX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzplLDg6biw5OnIsMTA6aSwxMTo1LDEyOjEwLDE4OmEsMjI6bywyNTpzLDI2OmwsMjc6dSwyODpofSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezM6MTcsNDoyLDU6Myw2OjQsNzplLDg6biw5OnIsMTA6aSwxMTo1LDEyOjEwLDE4OmEsMjI6bywyNTpzLDI2OmwsMjc6dSwyODpofSx7MTpbMiw4XX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezE6WzIsN119LHsxMzoxOCwxOTpbMSwxOV19LHsxNTpbMSwyMF19LHsxNTpbMSwyMV19LHsxNTpbMSwyMl19LHsxNTpbMSwyM119LHsxNTpbMSwyNF19LHsxOTpbMiwxMV19LHsxOlsyLDNdfSx7MTQ6MjUsMTY6WzEsMjZdLDIxOmZ9LHQoWzE2LDIxXSxbMiwxMl0pLHsyMzoyOCwyOToyOSwzMDozMCwzMTozMSwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Yiw0Njp2LDQ3Ol8sNDg6eCw0OTprLDUwOncsNTE6VCw1MzozMiw1NDpFLDU1OkMsNTY6Uyw1NzpBLDU4Ok0sNTk6Tiw2MDpPLDYxOkQsNjI6Qiw2MzpMLDY0OkksNjU6Riw2NjpSLDY3OlAsNjg6aiw2OTp6LDcwOlksNzE6VSw3MjokLDczOlcsNzQ6cSw3NTpILDc2OlYsNzc6Ryw3ODpYLDc5OlosODA6USw4MTpLLDgyOkosODM6dHQsODQ6ZXR9LHsyMzo3OSwyOToyOSwzMDozMCwzMTozMSwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Yiw0Njp2LDQ3Ol8sNDg6eCw0OTprLDUwOncsNTE6VCw1MzozMiw1NDpFLDU1OkMsNTY6Uyw1NzpBLDU4Ok0sNTk6Tiw2MDpPLDYxOkQsNjI6Qiw2MzpMLDY0OkksNjU6Riw2NjpSLDY3OlAsNjg6aiw2OTp6LDcwOlksNzE6VSw3MjokLDczOlcsNzQ6cSw3NTpILDc2OlYsNzc6Ryw3ODpYLDc5OlosODA6USw4MTpLLDgyOkosODM6dHQsODQ6ZXR9LHsyMzo4MCwyOToyOSwzMDozMCwzMTozMSwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Yiw0Njp2LDQ3Ol8sNDg6eCw0OTprLDUwOncsNTE6VCw1MzozMiw1NDpFLDU1OkMsNTY6Uyw1NzpBLDU4Ok0sNTk6Tiw2MDpPLDYxOkQsNjI6Qiw2MzpMLDY0OkksNjU6Riw2NjpSLDY3OlAsNjg6aiw2OTp6LDcwOlksNzE6VSw3MjokLDczOlcsNzQ6cSw3NTpILDc2OlYsNzc6Ryw3ODpYLDc5OlosODA6USw4MTpLLDgyOkosODM6dHQsODQ6ZXR9LHsyMzo4MSwyOToyOSwzMDozMCwzMTozMSwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Yiw0Njp2LDQ3Ol8sNDg6eCw0OTprLDUwOncsNTE6VCw1MzozMiw1NDpFLDU1OkMsNTY6Uyw1NzpBLDU4Ok0sNTk6Tiw2MDpPLDYxOkQsNjI6Qiw2MzpMLDY0OkksNjU6Riw2NjpSLDY3OlAsNjg6aiw2OTp6LDcwOlksNzE6VSw3MjokLDczOlcsNzQ6cSw3NTpILDc2OlYsNzc6Ryw3ODpYLDc5OlosODA6USw4MTpLLDgyOkosODM6dHQsODQ6ZXR9LHsyMzo4MiwyOToyOSwzMDozMCwzMTozMSwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6NTgsNDA6NzAsNDI6NzEsNDQ6Yiw0Njp2LDQ3Ol8sNDg6eCw0OTprLDUwOncsNTE6VCw1MzozMiw1NDpFLDU1OkMsNTY6Uyw1NzpBLDU4Ok0sNTk6Tiw2MDpPLDYxOkQsNjI6Qiw2MzpMLDY0OkksNjU6Riw2NjpSLDY3OlAsNjg6aiw2OTp6LDcwOlksNzE6VSw3MjokLDczOlcsNzQ6cSw3NTpILDc2OlYsNzc6Ryw3ODpYLDc5OlosODA6USw4MTpLLDgyOkosODM6dHQsODQ6ZXR9LHsxNTpbMSw4M119LHsxNzo4NCwyMDpbMSw4NV19LHsxNTpbMiwxNF19LHsyNDpbMSw4Nl19LHQobnQsWzIsMjBdLHs1MzozMiwzOTo1OCw0MDo3MCw0Mjo3MSwzMDo4Nyw0NDpiLDQ2OnYsNDc6Xyw0ODp4LDQ5OmssNTA6dyw1MTpULDU0OkUsNTU6Qyw1NjpTLDU3OkEsNTg6TSw1OTpOLDYwOk8sNjE6RCw2MjpCLDYzOkwsNjQ6SSw2NTpGLDY2OlIsNjc6UCw2ODpqLDY5OnosNzA6WSw3MTpVLDcyOiQsNzM6Vyw3NDpxLDc1OkgsNzY6Viw3NzpHLDc4OlgsNzk6Wiw4MDpRLDgxOkssODI6Siw4Mzp0dCw4NDpldH0pLHQobnQsWzIsMjFdKSx0KHJ0LFsyLDIzXSx7MTU6WzEsODhdfSksdChudCxbMiw0M10sezE1OlsxLDg5XX0pLHQoaXQsWzIsMjZdKSx0KGl0LFsyLDI3XSksezM1OlsxLDkwXX0sezM3OlsxLDkxXX0sdChpdCxbMiwzMF0pLHs0NTo5Miw4NTo5Myw4NjphdCw4NzpvdCw4OTpzdCw5MDpjdH0sezQ1Ojk4LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6OTksODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDAsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDEsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDIsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDMsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDQsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDUsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDYsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDcsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDgsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMDksODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTAsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTEsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTIsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTMsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTQsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTUsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHs0NToxMTYsODU6OTMsODY6YXQsODc6b3QsODk6c3QsOTA6Y3R9LHQobHQsWzIsNjZdKSx7NDU6MTE3LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTE4LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTE5LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTIwLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTIxLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTIyLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTIzLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTI0LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTI1LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTI2LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTI3LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7MzA6MTI4LDM5OjU4LDQwOjcwLDQyOjcxLDQ0OmIsNDY6diw0NzpfLDQ4OngsNDk6ayw1MDp3LDUxOlQsNTM6MzIsNTQ6RSw1NTpDLDU2OlMsNTc6QSw1ODpNLDU5Ok4sNjA6Tyw2MTpELDYyOkIsNjM6TCw2NDpJLDY1OkYsNjY6Uiw2NzpQLDY4OmosNjk6eiw3MDpZLDcxOlUsNzI6JCw3MzpXLDc0OnEsNzU6SCw3NjpWLDc3OkcsNzg6WCw3OTpaLDgwOlEsODE6Syw4MjpKLDgzOnR0LDg0OmV0fSx7MTU6WzEsMTMwXSw0MzpbMSwxMjldfSx7NDU6MTMxLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTMyLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTMzLDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTM0LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTM1LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTM2LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7NDU6MTM3LDg1OjkzLDg2OmF0LDg3Om90LDg5OnN0LDkwOmN0fSx7MjQ6WzEsMTM4XX0sezI0OlsxLDEzOV19LHsyNDpbMSwxNDBdfSx7MjQ6WzEsMTQxXX0sdCh1dCxbMiw5XSksezE0OjE0MiwyMTpmfSx7MjE6WzIsMTNdfSx7MTpbMiwxNV19LHQobnQsWzIsMjJdKSx0KHJ0LFsyLDI0XSx7MzE6MzEsMjk6MTQzLDMyOmQsMzM6cCwzNDpnLDM2OnksMzg6bX0pLHQobnQsWzIsNDRdLHsyOToyOSwzMDozMCwzMTozMSw1MzozMiwzOTo1OCw0MDo3MCw0Mjo3MSwyMzoxNDQsMzI6ZCwzMzpwLDM0OmcsMzY6eSwzODptLDQ0OmIsNDY6diw0NzpfLDQ4OngsNDk6ayw1MDp3LDUxOlQsNTQ6RSw1NTpDLDU2OlMsNTc6QSw1ODpNLDU5Ok4sNjA6Tyw2MTpELDYyOkIsNjM6TCw2NDpJLDY1OkYsNjY6Uiw2NzpQLDY4OmosNjk6eiw3MDpZLDcxOlUsNzI6JCw3MzpXLDc0OnEsNzU6SCw3NjpWLDc3OkcsNzg6WCw3OTpaLDgwOlEsODE6Syw4MjpKLDgzOnR0LDg0OmV0fSksdChpdCxbMiwyOF0pLHQoaXQsWzIsMjldKSx0KGx0LFsyLDQ2XSksdChodCxbMiw3OF0sezg1OjkzLDQ1OjE0NSw4NjphdCw4NzpvdCw4OTpzdCw5MDpjdH0pLHQoZnQsWzIsODBdKSx7ODg6WzEsMTQ2XX0sdChmdCxbMiw4Ml0pLHQoZnQsWzIsODNdKSx0KGx0LFsyLDQ3XSksdChsdCxbMiw0OF0pLHQobHQsWzIsNDldKSx0KGx0LFsyLDUwXSksdChsdCxbMiw1MV0pLHQobHQsWzIsNTJdKSx0KGx0LFsyLDUzXSksdChsdCxbMiw1NF0pLHQobHQsWzIsNTVdKSx0KGx0LFsyLDU2XSksdChsdCxbMiw1N10pLHQobHQsWzIsNThdKSx0KGx0LFsyLDU5XSksdChsdCxbMiw2MF0pLHQobHQsWzIsNjFdKSx0KGx0LFsyLDYyXSksdChsdCxbMiw2M10pLHQobHQsWzIsNjRdKSx0KGx0LFsyLDY1XSksdChsdCxbMiw2N10pLHQobHQsWzIsNjhdKSx0KGx0LFsyLDY5XSksdChsdCxbMiw3MF0pLHQobHQsWzIsNzFdKSx0KGx0LFsyLDcyXSksdChsdCxbMiw3M10pLHQobHQsWzIsNzRdKSx0KGx0LFsyLDc1XSksdChsdCxbMiw3Nl0pLHQobHQsWzIsNzddKSx7NDE6MTQ3LDUyOlsxLDE0OF19LHsxNTpbMSwxNDldfSx7NDM6WzEsMTUwXX0sdChkdCxbMiwzNV0pLHQoZHQsWzIsMzZdKSx0KGR0LFsyLDM3XSksdChkdCxbMiwzOF0pLHQoZHQsWzIsMzldKSx0KGR0LFsyLDQwXSksdChkdCxbMiw0MV0pLHsxOlsyLDE2XX0sezE6WzIsMTddfSx7MTpbMiwxOF19LHsxOlsyLDE5XX0sezE1OlsxLDE1MV19LHQocnQsWzIsMjVdKSx0KG50LFsyLDQ1XSksdChodCxbMiw3OV0pLHQoZnQsWzIsODFdKSx0KGx0LFsyLDMxXSksdChsdCxbMiw0Ml0pLHQocHQsWzIsMzJdKSx0KHB0LFsyLDMzXSx7MTU6WzEsMTUyXX0pLHQodXQsWzIsMTBdKSx0KHB0LFsyLDM0XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNTpbMiw4XSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw5OlsyLDddLDE2OlsyLDExXSwxNzpbMiwzXSwyNzpbMiwxNF0sODU6WzIsMTNdLDg2OlsyLDE1XSwxMzg6WzIsMTZdLDEzOTpbMiwxN10sMTQwOlsyLDE4XSwxNDE6WzIsMTldfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCxsPTAsdT0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIGI9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIHYoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT1fJiYoXz12KCkpLHc9b1trXSYmb1trXVtfXSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK18pO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOihsPXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsdT4wJiZ1LS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGImJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLGwsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0seXQ9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTg7Y2FzZSAxOnJldHVybiA3O2Nhc2UgMjpyZXR1cm4gODtjYXNlIDM6cmV0dXJuIDk7Y2FzZSA0OnJldHVybiAxMDtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTk7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE2O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyMTtjYXNlIDg6cmV0dXJuIDIwO2Nhc2UgOTpyZXR1cm4gMzI7Y2FzZSAxMDpyZXR1cm4gMzM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM2O2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE4OmNhc2UgMjE6YnJlYWs7Y2FzZSAxOTpjO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIDE1O2Nhc2UgMjI6cmV0dXJuIDIyO2Nhc2UgMjM6cmV0dXJuIDI1O2Nhc2UgMjQ6cmV0dXJuIDI2O2Nhc2UgMjU6cmV0dXJuIDI3O2Nhc2UgMjY6cmV0dXJuIDI4O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbl9leHQiKSxjb25zb2xlLmxvZygiYmVnaW4gcGVyc29uX2V4dCIpLDU1O2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLGNvbnNvbGUubG9nKCJiZWdpbiBwZXJzb24iKSw1NDtjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X3F1ZXVlIiksY29uc29sZS5sb2coImJlZ2luIHN5c3RlbV9leHRfcXVldWUiKSw2MTtjYXNlIDMwOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksY29uc29sZS5sb2coImJlZ2luIHN5c3RlbV9leHRfZGIiKSw2MDtjYXNlIDMxOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0IiksY29uc29sZS5sb2coImJlZ2luIHN5c3RlbV9leHQiKSw1OTtjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fcXVldWUiKSxjb25zb2xlLmxvZygiYmVnaW4gc3lzdGVtX3F1ZXVlIiksNTg7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2RiIiksY29uc29sZS5sb2coImJlZ2luIHN5c3RlbV9kYiIpLDU3O2Nhc2UgMzQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLGNvbnNvbGUubG9nKCJiZWdpbiBzeXN0ZW0iKSw1NjtjYXNlIDM1OnJldHVybiB0aGlzLmJlZ2luKCJib3VuZGFyeSIpLGNvbnNvbGUubG9nKCJiZWdpbiBib3VuZGFyeSIpLDQ3O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImVudGVycHJpc2VfYm91bmRhcnkiKSxjb25zb2xlLmxvZygiYmVnaW4gZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDQ0O2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLGNvbnNvbGUubG9nKCJiZWdpbiBzeXN0ZW1fYm91bmRhcnkiKSw0NjtjYXNlIDM4OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X3F1ZXVlIiksY29uc29sZS5sb2coImJlZ2luIGNvbnRhaW5lcl9leHRfcXVldWUiKSw2NztjYXNlIDM5OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksY29uc29sZS5sb2coImJlZ2luIGNvbnRhaW5lcl9leHRfZGIiKSw2NjtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0IiksY29uc29sZS5sb2coImJlZ2luIGNvbnRhaW5lcl9leHQiKSw2NTtjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfcXVldWUiKSxjb25zb2xlLmxvZygiYmVnaW4gY29udGFpbmVyX3F1ZXVlIiksNjQ7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2RiIiksY29uc29sZS5sb2coImJlZ2luIGNvbnRhaW5lcl9kYiIpLDYzO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLGNvbnNvbGUubG9nKCJiZWdpbiBjb250YWluZXIiKSw2MjtjYXNlIDQ0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfYm91bmRhcnkiKSxjb25zb2xlLmxvZygiYmVnaW4gY29udGFpbmVyX2JvdW5kYXJ5IiksNDg7Y2FzZSA0NTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9xdWV1ZSIpLGNvbnNvbGUubG9nKCJiZWdpbiBjb21wb25lbnRfZXh0X3F1ZXVlIiksNzM7Y2FzZSA0NjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9kYiIpLGNvbnNvbGUubG9nKCJiZWdpbiBjb21wb25lbnRfZXh0X2RiIiksNzI7Y2FzZSA0NzpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLGNvbnNvbGUubG9nKCJiZWdpbiBjb21wb25lbnRfZXh0IiksNzE7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X3F1ZXVlIiksY29uc29sZS5sb2coImJlZ2luIGNvbXBvbmVudF9xdWV1ZSIpLDcwO2Nhc2UgNDk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLGNvbnNvbGUubG9nKCJiZWdpbiBjb21wb25lbnRfZGIiKSw2OTtjYXNlIDUwOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnQiKSxjb25zb2xlLmxvZygiYmVnaW4gY29tcG9uZW50IiksNjg7Y2FzZSA1MTpjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksY29uc29sZS5sb2coImJlZ2luIG5vZGUiKSw0OTtjYXNlIDUzOnJldHVybiB0aGlzLmJlZ2luKCJub2RlX2wiKSxjb25zb2xlLmxvZygiYmVnaW4gbm9kZV9sIiksNTA7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksY29uc29sZS5sb2coImJlZ2luIG5vZGVfciIpLDUxO2Nhc2UgNTU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbCIpLGNvbnNvbGUubG9nKCJiZWdpbiByZWwiKSw3NDtjYXNlIDU2OnJldHVybiB0aGlzLmJlZ2luKCJiaXJlbCIpLGNvbnNvbGUubG9nKCJiZWdpbiBiaXJlbCIpLDc1O2Nhc2UgNTc6Y2FzZSA1ODpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSxjb25zb2xlLmxvZygiYmVnaW4gcmVsX3UiKSw3NjtjYXNlIDU5OmNhc2UgNjA6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksY29uc29sZS5sb2coImJlZ2luIHJlbF9kIiksNzc7Y2FzZSA2MTpjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLGNvbnNvbGUubG9nKCJiZWdpbiByZWxfbCIpLDc4O2Nhc2UgNjM6Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSxjb25zb2xlLmxvZygiYmVnaW4gcmVsX3IiKSw3OTtjYXNlIDY1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfYiIpLGNvbnNvbGUubG9nKCJiZWdpbiByZWxfYiIpLDgwO2Nhc2UgNjY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9pbmRleCIpLGNvbnNvbGUubG9nKCJiZWdpbiByZWxfaW5kZXgiKSw4MTtjYXNlIDY3OnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSxjb25zb2xlLmxvZygiYmVnaW4gdXBkYXRlX2VsX3N0eWxlIiksODI7Y2FzZSA2ODpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX3JlbF9zdHlsZSIpLGNvbnNvbGUubG9nKCJiZWdpbiB1cGRhdGVfcmVsX3N0eWxlIiksODM7Y2FzZSA2OTpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSxjb25zb2xlLmxvZygiYmVnaW4gdXBkYXRlX2xheW91dF9jb25maWciKSw4NDtjYXNlIDcwOnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDcxOnJldHVybiBjb25zb2xlLmxvZygiYmVnaW4gYXR0cmlidXRlIHdpdGggQVRUUklCVVRFX0VNUFRZIiksdGhpcy5iZWdpbigiYXR0cmlidXRlIiksIkFUVFJJQlVURV9FTVBUWSI7Y2FzZSA3Mjpjb25zb2xlLmxvZygiYmVnaW4gYXR0cmlidXRlIiksdGhpcy5iZWdpbigiYXR0cmlidXRlIik7YnJlYWs7Y2FzZSA3Mzpjb25zb2xlLmxvZygiU1RPUCBhdHRyaWJ1dGUiKSx0aGlzLnBvcFN0YXRlKCksY29uc29sZS5sb2coIlNUT1AgZGlhZ3JhbSIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc0OnJldHVybiBjb25zb2xlLmxvZygiLCwiKSw5MDtjYXNlIDc1OmNvbnNvbGUubG9nKCIsIik7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gY29uc29sZS5sb2coIkFUVFJJQlVURV9FTVBUWSIpLDkwO2Nhc2UgNzc6Y29uc29sZS5sb2coImJlZ2luIHN0cmluZyIpLHRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgNzg6Y29uc29sZS5sb2coIlNUT1Agc3RyaW5nIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzk6cmV0dXJuIGNvbnNvbGUubG9nKCJTVFIiKSwiU1RSIjtjYXNlIDgwOmNvbnNvbGUubG9nKCJiZWdpbiBzdHJpbmdfa3YiKSx0aGlzLmJlZ2luKCJzdHJpbmdfa3YiKTticmVhaztjYXNlIDgxOnJldHVybiBjb25zb2xlLmxvZygiU1RSX0tFWSIpLHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7Y2FzZSA4Mjpjb25zb2xlLmxvZygiYmVnaW4gc3RyaW5nX2t2X3ZhbHVlIiksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInN0cmluZ19rdl92YWx1ZSIpO2JyZWFrO2Nhc2UgODM6cmV0dXJuIGNvbnNvbGUubG9nKCJTVFJfVkFMVUUiKSwiU1RSX1ZBTFVFIjtjYXNlIDg0OmNvbnNvbGUubG9nKCJTVE9QIHN0cmluZ19rdl92YWx1ZSIpLHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4NTpyZXR1cm4gY29uc29sZS5sb2coIm5vdCBTVFIiKSwiU1RSIjtjYXNlIDg2OnJldHVybiBjb25zb2xlLmxvZygiYmVnaW4gYm91bmRhcnkgYmxvY2siKSwiTEJSQUNFIjtjYXNlIDg3OnJldHVybiBjb25zb2xlLmxvZygiU1RPUCBib3VuZGFyeSBibG9jayIpLCJSQlJBQ0UiO2Nhc2UgODg6cmV0dXJuIlNQQUNFIjtjYXNlIDg5OnJldHVybiJFT0wiO2Nhc2UgOTA6cmV0dXJuIDI0fX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OnRpdGxlXHNbXiNcbjtdKykvLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpDNENvbnRleHRcYikvLC9eKD86QzRDb250YWluZXJcYikvLC9eKD86QzRDb21wb25lbnRcYikvLC9eKD86QzREeW5hbWljXGIpLywvXig/OkM0RGVwbG95bWVudFxiKS8sL14oPzpQZXJzb25fRXh0XGIpLywvXig/OlBlcnNvblxiKS8sL14oPzpTeXN0ZW1RdWV1ZV9FeHRcYikvLC9eKD86U3lzdGVtRGJfRXh0XGIpLywvXig/OlN5c3RlbV9FeHRcYikvLC9eKD86U3lzdGVtUXVldWVcYikvLC9eKD86U3lzdGVtRGJcYikvLC9eKD86U3lzdGVtXGIpLywvXig/OkJvdW5kYXJ5XGIpLywvXig/OkVudGVycHJpc2VfQm91bmRhcnlcYikvLC9eKD86U3lzdGVtX0JvdW5kYXJ5XGIpLywvXig/OkNvbnRhaW5lclF1ZXVlX0V4dFxiKS8sL14oPzpDb250YWluZXJEYl9FeHRcYikvLC9eKD86Q29udGFpbmVyX0V4dFxiKS8sL14oPzpDb250YWluZXJRdWV1ZVxiKS8sL14oPzpDb250YWluZXJEYlxiKS8sL14oPzpDb250YWluZXJcYikvLC9eKD86Q29udGFpbmVyX0JvdW5kYXJ5XGIpLywvXig/OkNvbXBvbmVudFF1ZXVlX0V4dFxiKS8sL14oPzpDb21wb25lbnREYl9FeHRcYikvLC9eKD86Q29tcG9uZW50X0V4dFxiKS8sL14oPzpDb21wb25lbnRRdWV1ZVxiKS8sL14oPzpDb21wb25lbnREYlxiKS8sL14oPzpDb21wb25lbnRcYikvLC9eKD86RGVwbG95bWVudF9Ob2RlXGIpLywvXig/Ok5vZGVcYikvLC9eKD86Tm9kZV9MXGIpLywvXig/Ok5vZGVfUlxiKS8sL14oPzpSZWxcYikvLC9eKD86QmlSZWxcYikvLC9eKD86UmVsX1VwXGIpLywvXig/OlJlbF9VXGIpLywvXig/OlJlbF9Eb3duXGIpLywvXig/OlJlbF9EXGIpLywvXig/OlJlbF9MZWZ0XGIpLywvXig/OlJlbF9MXGIpLywvXig/OlJlbF9SaWdodFxiKS8sL14oPzpSZWxfUlxiKS8sL14oPzpSZWxfQmFja1xiKS8sL14oPzpSZWxJbmRleFxiKS8sL14oPzpVcGRhdGVFbGVtZW50U3R5bGVcYikvLC9eKD86VXBkYXRlUmVsU3R5bGVcYikvLC9eKD86VXBkYXRlTGF5b3V0Q29uZmlnXGIpLywvXig/OiQpLywvXig/OlsoXVsgXSpbLF0pLywvXig/OlsoXSkvLC9eKD86WyldKS8sL14oPzosLCkvLC9eKD86LCkvLC9eKD86WyBdKlsiXVsiXSkvLC9eKD86WyBdKlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86WyBdKltcJF0pLywvXig/OltePV0qKS8sL14oPzpbPV1bIF0qWyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpbXixdKykvLC9eKD86XHspLywvXig/Olx9KS8sL14oPzpbXHNdKykvLC9eKD86W1xuXHJdKykvLC9eKD86JCkvXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTYsMTddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTJdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdl92YWx1ZTp7cnVsZXM6WzgzLDg0XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdl9rZXk6e3J1bGVzOls4Ml0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Y6e3J1bGVzOls4MV0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxhdHRyaWJ1dGU6e3J1bGVzOls3Myw3NCw3NSw3Niw3Nyw4MCw4NV0saW5jbHVzaXZlOiExfSx1cGRhdGVfbGF5b3V0X2NvbmZpZzp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9yZWxfc3R5bGU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSx1cGRhdGVfZWxfc3R5bGU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxyZWxfYjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHJlbF9yOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0scmVsX2w6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxyZWxfZDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHJlbF91OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0scmVsX2JpOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHJlbDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LG5vZGVfcjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LG5vZGVfbDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LG5vZGU6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxpbmRleDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWxfaW5kZXg6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X3F1ZXVlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHRfZGI6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X3F1ZXVlOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2RiOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2JvdW5kYXJ5OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls3MCw3MSw3Miw3M10saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNzAsNzEsNzIsNzNdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzcwLDcxLDcyLDczXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsOSwxMCwxMSwxMywxNSwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG10KCl7dGhpcy55eT17fX1yZXR1cm4gZ3QubGV4ZXI9eXQsbXQucHJvdG90eXBlPWd0LGd0LlBhcnNlcj1tdCxuZXcgbXR9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big1NTUpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sMTM2MjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsM10sbj1bMSw3XSxyPVsxLDhdLGk9WzEsOV0sYT1bMSwxMF0sbz1bMSwxM10scz1bMSwxMl0sYz1bMSwxNiwyNV0sbD1bMSwyMF0sdT1bMSwzMV0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNV0scD1bMSwzOF0sZz1bMSwzNl0seT1bMSwzN10sbT1bMSwzOV0sYj1bMSw0MF0sdj1bMSw0MV0sXz1bMSw0Ml0seD1bMSw0NV0saz1bMSw0Nl0sdz1bMSw0N10sVD1bMSw0OF0sRT1bMTYsMjVdLEM9WzEsNjJdLFM9WzEsNjNdLEE9WzEsNjRdLE09WzEsNjVdLE49WzEsNjZdLE89WzEsNjddLEQ9WzEsNjhdLEI9WzE2LDI1LDMyLDQ0LDQ1LDUzLDU2LDU3LDU4LDU5LDYwLDYxLDYyLDY3LDY5XSxMPVsxNiwyNSwzMCwzMiw0NCw0NSw0OSw1Myw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Nyw2OSw4NCw4NSw4Niw4N10sST1bNSw4LDksMTAsMTEsMTYsMTksMjMsMjVdLEY9WzUzLDg0LDg1LDg2LDg3XSxSPVs1Myw2MSw2Miw4NCw4NSw4Niw4N10sUD1bNTMsNTYsNTcsNTgsNTksNjAsODQsODUsODYsODddLGo9WzE2LDI1LDMyXSx6PVsxLDEwMF0sWT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LHN0YXRtZW50czo1LGRpcmVjdGlvbjo2LGRpcmVjdGl2ZTo3LGRpcmVjdGlvbl90Yjo4LGRpcmVjdGlvbl9idDo5LGRpcmVjdGlvbl9ybDoxMCxkaXJlY3Rpb25fbHI6MTEsZ3JhcGhDb25maWc6MTIsb3BlbkRpcmVjdGl2ZToxMyx0eXBlRGlyZWN0aXZlOjE0LGNsb3NlRGlyZWN0aXZlOjE1LE5FV0xJTkU6MTYsIjoiOjE3LGFyZ0RpcmVjdGl2ZToxOCxvcGVuX2RpcmVjdGl2ZToxOSx0eXBlX2RpcmVjdGl2ZToyMCxhcmdfZGlyZWN0aXZlOjIxLGNsb3NlX2RpcmVjdGl2ZToyMixDTEFTU19ESUFHUkFNOjIzLHN0YXRlbWVudHM6MjQsRU9GOjI1LHN0YXRlbWVudDoyNixjbGFzc05hbWU6MjcsYWxwaGFOdW1Ub2tlbjoyOCxjbGFzc0xpdGVyYWxOYW1lOjI5LEdFTkVSSUNUWVBFOjMwLHJlbGF0aW9uU3RhdGVtZW50OjMxLExBQkVMOjMyLGNsYXNzU3RhdGVtZW50OjMzLG1ldGhvZFN0YXRlbWVudDozNCxhbm5vdGF0aW9uU3RhdGVtZW50OjM1LGNsaWNrU3RhdGVtZW50OjM2LGNzc0NsYXNzU3RhdGVtZW50OjM3LGFjY190aXRsZTozOCxhY2NfdGl0bGVfdmFsdWU6MzksYWNjX2Rlc2NyOjQwLGFjY19kZXNjcl92YWx1ZTo0MSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjQyLENMQVNTOjQzLFNUWUxFX1NFUEFSQVRPUjo0NCxTVFJVQ1RfU1RBUlQ6NDUsbWVtYmVyczo0NixTVFJVQ1RfU1RPUDo0NyxBTk5PVEFUSU9OX1NUQVJUOjQ4LEFOTk9UQVRJT05fRU5EOjQ5LE1FTUJFUjo1MCxTRVBBUkFUT1I6NTEscmVsYXRpb246NTIsU1RSOjUzLHJlbGF0aW9uVHlwZTo1NCxsaW5lVHlwZTo1NSxBR0dSRUdBVElPTjo1NixFWFRFTlNJT046NTcsQ09NUE9TSVRJT046NTgsREVQRU5ERU5DWTo1OSxMT0xMSVBPUDo2MCxMSU5FOjYxLERPVFRFRF9MSU5FOjYyLENBTExCQUNLOjYzLExJTks6NjQsTElOS19UQVJHRVQ6NjUsQ0xJQ0s6NjYsQ0FMTEJBQ0tfTkFNRTo2NyxDQUxMQkFDS19BUkdTOjY4LEhSRUY6NjksQ1NTQ0xBU1M6NzAsY29tbWVudFRva2VuOjcxLHRleHRUb2tlbjo3MixncmFwaENvZGVUb2tlbnM6NzMsdGV4dE5vVGFnc1Rva2VuOjc0LFRBR1NUQVJUOjc1LFRBR0VORDo3NiwiPT0iOjc3LCItLSI6NzgsUENUOjc5LERFRkFVTFQ6ODAsU1BBQ0U6ODEsTUlOVVM6ODIsa2V5d29yZHM6ODMsVU5JQ09ERV9URVhUOjg0LE5VTTo4NSxBTFBIQTo4NixCUVVPVEVfU1RSOjg3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJzdGF0bWVudHMiLDg6ImRpcmVjdGlvbl90YiIsOToiZGlyZWN0aW9uX2J0IiwxMDoiZGlyZWN0aW9uX3JsIiwxMToiZGlyZWN0aW9uX2xyIiwxNjoiTkVXTElORSIsMTc6IjoiLDE5OiJvcGVuX2RpcmVjdGl2ZSIsMjA6InR5cGVfZGlyZWN0aXZlIiwyMToiYXJnX2RpcmVjdGl2ZSIsMjI6ImNsb3NlX2RpcmVjdGl2ZSIsMjM6IkNMQVNTX0RJQUdSQU0iLDI1OiJFT0YiLDMwOiJHRU5FUklDVFlQRSIsMzI6IkxBQkVMIiwzODoiYWNjX3RpdGxlIiwzOToiYWNjX3RpdGxlX3ZhbHVlIiw0MDoiYWNjX2Rlc2NyIiw0MToiYWNjX2Rlc2NyX3ZhbHVlIiw0MjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDM6IkNMQVNTIiw0NDoiU1RZTEVfU0VQQVJBVE9SIiw0NToiU1RSVUNUX1NUQVJUIiw0NzoiU1RSVUNUX1NUT1AiLDQ4OiJBTk5PVEFUSU9OX1NUQVJUIiw0OToiQU5OT1RBVElPTl9FTkQiLDUwOiJNRU1CRVIiLDUxOiJTRVBBUkFUT1IiLDUzOiJTVFIiLDU2OiJBR0dSRUdBVElPTiIsNTc6IkVYVEVOU0lPTiIsNTg6IkNPTVBPU0lUSU9OIiw1OToiREVQRU5ERU5DWSIsNjA6IkxPTExJUE9QIiw2MToiTElORSIsNjI6IkRPVFRFRF9MSU5FIiw2MzoiQ0FMTEJBQ0siLDY0OiJMSU5LIiw2NToiTElOS19UQVJHRVQiLDY2OiJDTElDSyIsNjc6IkNBTExCQUNLX05BTUUiLDY4OiJDQUxMQkFDS19BUkdTIiw2OToiSFJFRiIsNzA6IkNTU0NMQVNTIiw3MzoiZ3JhcGhDb2RlVG9rZW5zIiw3NToiVEFHU1RBUlQiLDc2OiJUQUdFTkQiLDc3OiI9PSIsNzg6Ii0tIiw3OToiUENUIiw4MDoiREVGQVVMVCIsODE6IlNQQUNFIiw4MjoiTUlOVVMiLDgzOiJrZXl3b3JkcyIsODQ6IlVOSUNPREVfVEVYVCIsODU6Ik5VTSIsODY6IkFMUEhBIiw4NzoiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywxXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNCwxXSxbNyw0XSxbNyw2XSxbMTMsMV0sWzE0LDFdLFsxOCwxXSxbMTUsMV0sWzEyLDRdLFsyNCwxXSxbMjQsMl0sWzI0LDNdLFsyNywxXSxbMjcsMV0sWzI3LDJdLFsyNywyXSxbMjcsMl0sWzI2LDFdLFsyNiwyXSxbMjYsMV0sWzI2LDFdLFsyNiwxXSxbMjYsMV0sWzI2LDFdLFsyNiwxXSxbMjYsMV0sWzI2LDJdLFsyNiwyXSxbMjYsMV0sWzMzLDJdLFszMyw0XSxbMzMsNV0sWzMzLDddLFszNSw0XSxbNDYsMV0sWzQ2LDJdLFszNCwxXSxbMzQsMl0sWzM0LDFdLFszNCwxXSxbMzEsM10sWzMxLDRdLFszMSw0XSxbMzEsNV0sWzUyLDNdLFs1MiwyXSxbNTIsMl0sWzUyLDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU1LDFdLFs1NSwxXSxbMzYsM10sWzM2LDRdLFszNiwzXSxbMzYsNF0sWzM2LDRdLFszNiw1XSxbMzYsM10sWzM2LDRdLFszNiw0XSxbMzYsNV0sWzM2LDNdLFszNiw0XSxbMzYsNF0sWzM2LDVdLFszNywzXSxbNzEsMV0sWzcxLDFdLFs3MiwxXSxbNzIsMV0sWzcyLDFdLFs3MiwxXSxbNzIsMV0sWzcyLDFdLFs3MiwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzI4LDFdLFsyOCwxXSxbMjgsMV0sWzI5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNTpyLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDY6ci5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA3OnIuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgODpyLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDEyOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNDphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTU6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiY2xhc3MiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAyMzpjYXNlIDI0OnRoaXMuJD1hW3MtMV0rIn4iK2Fbc107YnJlYWs7Y2FzZSAyNTpyLmFkZFJlbGF0aW9uKGFbc10pO2JyZWFrO2Nhc2UgMjY6YVtzLTFdLnRpdGxlPXIuY2xlYW51cExhYmVsKGFbc10pLHIuYWRkUmVsYXRpb24oYVtzLTFdKTticmVhaztjYXNlIDM0OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzNzpyLmFkZENsYXNzKGFbc10pO2JyZWFrO2Nhc2UgMzg6ci5hZGRDbGFzcyhhW3MtMl0pLHIuc2V0Q3NzQ2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgMzk6ci5hZGRDbGFzcyhhW3MtM10pLHIuYWRkTWVtYmVycyhhW3MtM10sYVtzLTFdKTticmVhaztjYXNlIDQwOnIuYWRkQ2xhc3MoYVtzLTVdKSxyLnNldENzc0NsYXNzKGFbcy01XSxhW3MtM10pLHIuYWRkTWVtYmVycyhhW3MtNV0sYVtzLTFdKTticmVhaztjYXNlIDQxOnIuYWRkQW5ub3RhdGlvbihhW3NdLGFbcy0yXSk7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNDM6YVtzXS5wdXNoKGFbcy0xXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0NDpjYXNlIDQ2OmNhc2UgNDc6YnJlYWs7Y2FzZSA0NTpyLmFkZE1lbWJlcihhW3MtMV0sci5jbGVhbnVwTGFiZWwoYVtzXSkpO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXtpZDE6YVtzLTJdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDQ5OnRoaXMuJD17aWQxOmFbcy0zXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMV0scmVsYXRpb25UaXRsZTE6YVtzLTJdLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e2lkMTphW3MtM10saWQyOmFbc10scmVsYXRpb246YVtzLTJdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtpZDE6YVtzLTRdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0yXSxyZWxhdGlvblRpdGxlMTphW3MtM10scmVsYXRpb25UaXRsZTI6YVtzLTFdfTticmVhaztjYXNlIDUyOnRoaXMuJD17dHlwZTE6YVtzLTJdLHR5cGUyOmFbc10sbGluZVR5cGU6YVtzLTFdfTticmVhaztjYXNlIDUzOnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOmFbc10sbGluZVR5cGU6YVtzLTFdfTticmVhaztjYXNlIDU0OnRoaXMuJD17dHlwZTE6YVtzLTFdLHR5cGUyOiJub25lIixsaW5lVHlwZTphW3NdfTticmVhaztjYXNlIDU1OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZTphW3NdfTticmVhaztjYXNlIDU2OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjticmVhaztjYXNlIDU3OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5FWFRFTlNJT047YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT047YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTticmVhaztjYXNlIDYwOnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDticmVhaztjYXNlIDYxOnRoaXMuJD1yLmxpbmVUeXBlLkxJTkU7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9ci5saW5lVHlwZS5ET1RURURfTElORTticmVhaztjYXNlIDYzOmNhc2UgNjk6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjQ6Y2FzZSA3MDp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdKSxyLnNldFRvb2x0aXAoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgNjU6Y2FzZSA3Mzp0aGlzLiQ9YVtzLTJdLHIuc2V0TGluayhhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA2NjpjYXNlIDc0OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA2NzpjYXNlIDc1OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA2ODpjYXNlIDc2OnRoaXMuJD1hW3MtNF0sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSksci5zZXRUb29sdGlwKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDcyOnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgNzc6ci5zZXRDc3NDbGFzcyhhW3MtMV0sYVtzXSl9fSx0YWJsZTpbezM6MSw0OjIsNTplLDY6NCw3OjUsODpuLDk6ciwxMDppLDExOmEsMTI6NiwxMzoxMSwxOTpvLDIzOnN9LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0sezM6MTQsNDoyLDU6ZSw2OjQsNzo1LDg6biw5OnIsMTA6aSwxMTphLDEyOjYsMTM6MTEsMTk6bywyMzpzfSx7MTpbMiw5XX0sdChjLFsyLDVdKSx0KGMsWzIsNl0pLHQoYyxbMiw3XSksdChjLFsyLDhdKSx7MTQ6MTUsMjA6WzEsMTZdfSx7MTY6WzEsMTddfSx7MjA6WzIsMTJdfSx7MTpbMiw0XX0sezE1OjE4LDE3OlsxLDE5XSwyMjpsfSx0KFsxNywyMl0sWzIsMTNdKSx7NjozMCw3OjI5LDg6biw5OnIsMTA6aSwxMTphLDEzOjExLDE5Om8sMjQ6MjEsMjY6MjIsMjc6MzQsMjg6NDMsMjk6NDQsMzE6MjMsMzM6MjQsMzQ6MjUsMzU6MjYsMzY6MjcsMzc6MjgsMzg6dSw0MDpoLDQyOmYsNDM6ZCw0ODpwLDUwOmcsNTE6eSw2MzptLDY0OmIsNjY6diw3MDpfLDg0OngsODU6ayw4Njp3LDg3OlR9LHsxNjpbMSw0OV19LHsxODo1MCwyMTpbMSw1MV19LHsxNjpbMiwxNV19LHsyNTpbMSw1Ml19LHsxNjpbMSw1M10sMjU6WzIsMTddfSx0KEUsWzIsMjVdLHszMjpbMSw1NF19KSx0KEUsWzIsMjddKSx0KEUsWzIsMjhdKSx0KEUsWzIsMjldKSx0KEUsWzIsMzBdKSx0KEUsWzIsMzFdKSx0KEUsWzIsMzJdKSx0KEUsWzIsMzNdKSx7Mzk6WzEsNTVdfSx7NDE6WzEsNTZdfSx0KEUsWzIsMzZdKSx0KEUsWzIsNDRdLHs1Mjo1Nyw1NDo2MCw1NTo2MSwzMjpbMSw1OV0sNTM6WzEsNThdLDU2OkMsNTc6Uyw1ODpBLDU5Ok0sNjA6Tiw2MTpPLDYyOkR9KSx7Mjc6NjksMjg6NDMsMjk6NDQsODQ6eCw4NTprLDg2OncsODc6VH0sdChFLFsyLDQ2XSksdChFLFsyLDQ3XSksezI4OjcwLDg0OngsODU6ayw4Njp3fSx7Mjc6NzEsMjg6NDMsMjk6NDQsODQ6eCw4NTprLDg2OncsODc6VH0sezI3OjcyLDI4OjQzLDI5OjQ0LDg0OngsODU6ayw4Njp3LDg3OlR9LHsyNzo3MywyODo0MywyOTo0NCw4NDp4LDg1OmssODY6dyw4NzpUfSx7NTM6WzEsNzRdfSx0KEIsWzIsMjBdLHsyODo0MywyOTo0NCwyNzo3NSwzMDpbMSw3Nl0sODQ6eCw4NTprLDg2OncsODc6VH0pLHQoQixbMiwyMV0sezMwOlsxLDc3XX0pLHQoTCxbMiw5MV0pLHQoTCxbMiw5Ml0pLHQoTCxbMiw5M10pLHQoWzE2LDI1LDMwLDMyLDQ0LDQ1LDUzLDU2LDU3LDU4LDU5LDYwLDYxLDYyLDY3LDY5XSxbMiw5NF0pLHQoSSxbMiwxMF0pLHsxNTo3OCwyMjpsfSx7MjI6WzIsMTRdfSx7MTpbMiwxNl19LHs2OjMwLDc6MjksODpuLDk6ciwxMDppLDExOmEsMTM6MTEsMTk6bywyNDo3OSwyNTpbMiwxOF0sMjY6MjIsMjc6MzQsMjg6NDMsMjk6NDQsMzE6MjMsMzM6MjQsMzQ6MjUsMzU6MjYsMzY6MjcsMzc6MjgsMzg6dSw0MDpoLDQyOmYsNDM6ZCw0ODpwLDUwOmcsNTE6eSw2MzptLDY0OmIsNjY6diw3MDpfLDg0OngsODU6ayw4Njp3LDg3OlR9LHQoRSxbMiwyNl0pLHQoRSxbMiwzNF0pLHQoRSxbMiwzNV0pLHsyNzo4MCwyODo0MywyOTo0NCw1MzpbMSw4MV0sODQ6eCw4NTprLDg2OncsODc6VH0sezUyOjgyLDU0OjYwLDU1OjYxLDU2OkMsNTc6Uyw1ODpBLDU5Ok0sNjA6Tiw2MTpPLDYyOkR9LHQoRSxbMiw0NV0pLHs1NTo4Myw2MTpPLDYyOkR9LHQoRixbMiw1NV0sezU0Ojg0LDU2OkMsNTc6Uyw1ODpBLDU5Ok0sNjA6Tn0pLHQoUixbMiw1Nl0pLHQoUixbMiw1N10pLHQoUixbMiw1OF0pLHQoUixbMiw1OV0pLHQoUixbMiw2MF0pLHQoUCxbMiw2MV0pLHQoUCxbMiw2Ml0pLHQoRSxbMiwzN10sezQ0OlsxLDg1XSw0NTpbMSw4Nl19KSx7NDk6WzEsODddfSx7NTM6WzEsODhdfSx7NTM6WzEsODldfSx7Njc6WzEsOTBdLDY5OlsxLDkxXX0sezI4OjkyLDg0OngsODU6ayw4Njp3fSx0KEIsWzIsMjJdKSx0KEIsWzIsMjNdKSx0KEIsWzIsMjRdKSx7MTY6WzEsOTNdfSx7MjU6WzIsMTldfSx0KGosWzIsNDhdKSx7Mjc6OTQsMjg6NDMsMjk6NDQsODQ6eCw4NTprLDg2OncsODc6VH0sezI3Ojk1LDI4OjQzLDI5OjQ0LDUzOlsxLDk2XSw4NDp4LDg1OmssODY6dyw4NzpUfSx0KEYsWzIsNTRdLHs1NDo5Nyw1NjpDLDU3OlMsNTg6QSw1OTpNLDYwOk59KSx0KEYsWzIsNTNdKSx7Mjg6OTgsODQ6eCw4NTprLDg2Ond9LHs0Njo5OSw1MDp6fSx7Mjc6MTAxLDI4OjQzLDI5OjQ0LDg0OngsODU6ayw4Njp3LDg3OlR9LHQoRSxbMiw2M10sezUzOlsxLDEwMl19KSx0KEUsWzIsNjVdLHs1MzpbMSwxMDRdLDY1OlsxLDEwM119KSx0KEUsWzIsNjldLHs1MzpbMSwxMDVdLDY4OlsxLDEwNl19KSx0KEUsWzIsNzNdLHs1MzpbMSwxMDhdLDY1OlsxLDEwN119KSx0KEUsWzIsNzddKSx0KEksWzIsMTFdKSx0KGosWzIsNTBdKSx0KGosWzIsNDldKSx7Mjc6MTA5LDI4OjQzLDI5OjQ0LDg0OngsODU6ayw4Njp3LDg3OlR9LHQoRixbMiw1Ml0pLHQoRSxbMiwzOF0sezQ1OlsxLDExMF19KSx7NDc6WzEsMTExXX0sezQ2OjExMiw0NzpbMiw0Ml0sNTA6en0sdChFLFsyLDQxXSksdChFLFsyLDY0XSksdChFLFsyLDY2XSksdChFLFsyLDY3XSx7NjU6WzEsMTEzXX0pLHQoRSxbMiw3MF0pLHQoRSxbMiw3MV0sezUzOlsxLDExNF19KSx0KEUsWzIsNzRdKSx0KEUsWzIsNzVdLHs2NTpbMSwxMTVdfSksdChqLFsyLDUxXSksezQ2OjExNiw1MDp6fSx0KEUsWzIsMzldKSx7NDc6WzIsNDNdfSx0KEUsWzIsNjhdKSx0KEUsWzIsNzJdKSx0KEUsWzIsNzZdKSx7NDc6WzEsMTE3XX0sdChFLFsyLDQwXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiwzXSw2OlsyLDldLDEzOlsyLDEyXSwxNDpbMiw0XSwyMDpbMiwxNV0sNTE6WzIsMTRdLDUyOlsyLDE2XSw3OTpbMiwxOV0sMTEyOlsyLDQzXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsbD0wLHU9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciBiPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiB2KCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09XyYmKF89digpKSx3PW9ba10mJm9ba11bX10pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIitfKTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToobD1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLHU+MCYmdS0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxiJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyxsLGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTk7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjpyZXR1cm4gOTtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gMTE7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDIwO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjI7Y2FzZSA4OnJldHVybiAyMTtjYXNlIDk6Y2FzZSAxMDpjYXNlIDE5OmNhc2UgMjc6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzg7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDQwO2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDE2OmNhc2UgMzc6Y2FzZSA0MDpjYXNlIDQzOmNhc2UgNDY6Y2FzZSA0OTpjYXNlIDUyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE4OnJldHVybiAxNjtjYXNlIDIwOmNhc2UgMjE6cmV0dXJuIDIzO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDQ1O2Nhc2UgMjM6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMjQ6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMjU6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7Y2FzZSAyODpyZXR1cm4iTUVNQkVSIjtjYXNlIDI5OnJldHVybiA0MztjYXNlIDMwOnJldHVybiA3MDtjYXNlIDMxOnJldHVybiA2MztjYXNlIDMyOnJldHVybiA2NDtjYXNlIDMzOnJldHVybiA2NjtjYXNlIDM0OnJldHVybiA0ODtjYXNlIDM1OnJldHVybiA0OTtjYXNlIDM2OnRoaXMuYmVnaW4oImdlbmVyaWMiKTticmVhaztjYXNlIDM4OnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSAzOTp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQxOnJldHVybiJTVFIiO2Nhc2UgNDI6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDQ0OnJldHVybiJCUVVPVEVfU1RSIjtjYXNlIDQ1OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDQ3OnJldHVybiA2OTtjYXNlIDQ4OnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDUwOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gNjc7Y2FzZSA1MzpyZXR1cm4gNjg7Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gNjU7Y2FzZSA1ODpjYXNlIDU5OnJldHVybiA1NztjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIDU5O2Nhc2UgNjI6cmV0dXJuIDU4O2Nhc2UgNjM6cmV0dXJuIDU2O2Nhc2UgNjQ6cmV0dXJuIDYwO2Nhc2UgNjU6cmV0dXJuIDYxO2Nhc2UgNjY6cmV0dXJuIDYyO2Nhc2UgNjc6cmV0dXJuIDMyO2Nhc2UgNjg6cmV0dXJuIDQ0O2Nhc2UgNjk6cmV0dXJuIDgyO2Nhc2UgNzA6cmV0dXJuIkRPVCI7Y2FzZSA3MTpyZXR1cm4iUExVUyI7Y2FzZSA3MjpyZXR1cm4gNzk7Y2FzZSA3MzpjYXNlIDc0OnJldHVybiJFUVVBTFMiO2Nhc2UgNzU6cmV0dXJuIDg2O2Nhc2UgNzY6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDc3OnJldHVybiA4NTtjYXNlIDc4OnJldHVybiA4NDtjYXNlIDc5OnJldHVybiA4MTtjYXNlIDgwOnJldHVybiAyNX19LHJ1bGVzOlsvXig/OiUlXHspLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpjbGFzc0RpYWdyYW0tdjJcYikvLC9eKD86Y2xhc3NEaWFncmFtXGIpLywvXig/Olt7XSkvLC9eKD86XFtcKlxdKS8sL14oPzokKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNsYXNzXGIpLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpbfl0pLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86W2BdKS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpocmVmW1xzXStbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86XHMqXChcKSkvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTYsMTddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTJdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzcsOF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzVdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzUyLDUzXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOls0OSw1MCw1MV0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbNDYsNDddLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMjMsMjQsMjUsMjYsMjcsMjhdLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzM3LDM4XSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbNDMsNDRdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDAsNDFdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEzLDE1LDE4LDE5LDIwLDIxLDIyLDIzLDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM5LDQyLDQ1LDQ4LDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gJCgpe3RoaXMueXk9e319cmV0dXJuIFkubGV4ZXI9VSwkLnByb3RvdHlwZT1ZLFkuUGFyc2VyPSQsbmV3ICR9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4MjE4KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDU4OTA6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDIzLDI1LDI3LDI5LDMwLDQ5XSxpPVsxLDE3XSxhPVsxLDE4XSxvPVsxLDE5XSxzPVsxLDIwXSxjPVsxLDIxXSxsPVsxLDI0XSx1PVsxLDI5XSxoPVsxLDMwXSxmPVsxLDMxXSxkPVsxLDMyXSxwPVs2LDksMTEsMTUsMjAsMjMsMjUsMjcsMjksMzAsNDIsNDMsNDQsNDUsNDldLGc9WzEsNDVdLHk9WzMwLDQ2LDQ3XSxtPVs0LDYsOSwxMSwyMywyNSwyNywyOSwzMCw0OV0sYj1bNDIsNDMsNDQsNDVdLHY9WzIyLDM3XSxfPVsxLDY0XSx4PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNixlbnRpdHlOYW1lOjE3LHJlbFNwZWM6MTgscm9sZToxOSxCTE9DS19TVEFSVDoyMCxhdHRyaWJ1dGVzOjIxLEJMT0NLX1NUT1A6MjIsdGl0bGU6MjMsdGl0bGVfdmFsdWU6MjQsYWNjX3RpdGxlOjI1LGFjY190aXRsZV92YWx1ZToyNixhY2NfZGVzY3I6MjcsYWNjX2Rlc2NyX3ZhbHVlOjI4LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjksQUxQSEFOVU06MzAsIi4iOjMxLGF0dHJpYnV0ZTozMixhdHRyaWJ1dGVUeXBlOjMzLGF0dHJpYnV0ZU5hbWU6MzQsYXR0cmlidXRlS2V5VHlwZTozNSxhdHRyaWJ1dGVDb21tZW50OjM2LEFUVFJJQlVURV9XT1JEOjM3LEFUVFJJQlVURV9LRVk6MzgsQ09NTUVOVDozOSxjYXJkaW5hbGl0eTo0MCxyZWxUeXBlOjQxLFpFUk9fT1JfT05FOjQyLFpFUk9fT1JfTU9SRTo0MyxPTkVfT1JfTU9SRTo0NCxPTkxZX09ORTo0NSxOT05fSURFTlRJRllJTkc6NDYsSURFTlRJRllJTkc6NDcsV09SRDo0OCxvcGVuX2RpcmVjdGl2ZTo0OSx0eXBlX2RpcmVjdGl2ZTo1MCxhcmdfZGlyZWN0aXZlOjUxLGNsb3NlX2RpcmVjdGl2ZTo1MiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwyMDoiQkxPQ0tfU1RBUlQiLDIyOiJCTE9DS19TVE9QIiwyMzoidGl0bGUiLDI0OiJ0aXRsZV92YWx1ZSIsMjU6ImFjY190aXRsZSIsMjY6ImFjY190aXRsZV92YWx1ZSIsMjc6ImFjY19kZXNjciIsMjg6ImFjY19kZXNjcl92YWx1ZSIsMjk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDMwOiJBTFBIQU5VTSIsMzE6Ii4iLDM3OiJBVFRSSUJVVEVfV09SRCIsMzg6IkFUVFJJQlVURV9LRVkiLDM5OiJDT01NRU5UIiw0MjoiWkVST19PUl9PTkUiLDQzOiJaRVJPX09SX01PUkUiLDQ0OiJPTkVfT1JfTU9SRSIsNDU6Ik9OTFlfT05FIiw0NjoiTk9OX0lERU5USUZZSU5HIiw0NzoiSURFTlRJRllJTkciLDQ4OiJXT1JEIiw0OToib3Blbl9kaXJlY3RpdmUiLDUwOiJ0eXBlX2RpcmVjdGl2ZSIsNTE6ImFyZ19kaXJlY3RpdmUiLDUyOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzUsMF0sWzUsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzcsNF0sWzcsNl0sWzEwLDFdLFsxMCw1XSxbMTAsNF0sWzEwLDNdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzE3LDFdLFsxNywzXSxbMjEsMV0sWzIxLDJdLFszMiwyXSxbMzIsM10sWzMyLDNdLFszMiw0XSxbMzMsMV0sWzM0LDFdLFszNSwxXSxbMzYsMV0sWzE4LDNdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDEsMV0sWzQxLDFdLFsxOSwxXSxbMTksMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpicmVhaztjYXNlIDM6Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDIwOmNhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgNDA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMjpyLmFkZEVudGl0eShhW3MtNF0pLHIuYWRkRW50aXR5KGFbcy0yXSksci5hZGRSZWxhdGlvbnNoaXAoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy0zXSk7YnJlYWs7Y2FzZSAxMzpyLmFkZEVudGl0eShhW3MtM10pLHIuYWRkQXR0cmlidXRlcyhhW3MtM10sYVtzLTFdKTticmVhaztjYXNlIDE0OnIuYWRkRW50aXR5KGFbcy0yXSk7YnJlYWs7Y2FzZSAxNTpyLmFkZEVudGl0eShhW3NdKTticmVhaztjYXNlIDE2OmNhc2UgMTc6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE4OmNhc2UgMTk6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDIxOnRoaXMuJD1hW3MtMl0rYVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMjM6YVtzXS5wdXNoKGFbcy0xXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6YVtzLTFdLGF0dHJpYnV0ZU5hbWU6YVtzXX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6YVtzLTJdLGF0dHJpYnV0ZU5hbWU6YVtzLTFdLGF0dHJpYnV0ZUtleVR5cGU6YVtzXX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6YVtzLTJdLGF0dHJpYnV0ZU5hbWU6YVtzLTFdLGF0dHJpYnV0ZUNvbW1lbnQ6YVtzXX07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6YVtzLTNdLGF0dHJpYnV0ZU5hbWU6YVtzLTJdLGF0dHJpYnV0ZUtleVR5cGU6YVtzLTFdLGF0dHJpYnV0ZUNvbW1lbnQ6YVtzXX07YnJlYWs7Y2FzZSAzMTpjYXNlIDM5OnRoaXMuJD1hW3NdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9e2NhcmRBOmFbc10scmVsVHlwZTphW3MtMV0sY2FyZEI6YVtzLTJdfTticmVhaztjYXNlIDMzOnRoaXMuJD1yLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkxZX09ORTticmVhaztjYXNlIDM3OnRoaXMuJD1yLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDM4OnRoaXMuJD1yLklkZW50aWZpY2F0aW9uLklERU5USUZZSU5HO2JyZWFrO2Nhc2UgNDE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0NDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJlciIpfX0sdGFibGU6W3szOjEsNDplLDc6MywxMjo0LDQ5Om59LHsxOlszXX0sdChyLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6ZSw3OjMsMTI6NCw0OTpufSx7MTM6OCw1MDpbMSw5XX0sezUwOlsyLDQxXX0sezY6WzEsMTBdLDc6MTUsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzoxNiwyMzppLDI1OmEsMjc6bywyOTpzLDMwOmMsNDk6bn0sezE6WzIsMl19LHsxNDoyMiwxNTpbMSwyM10sNTI6bH0sdChbMTUsNTJdLFsyLDQyXSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyNSwxMjo0LDE3OjE2LDIzOmksMjU6YSwyNzpvLDI5OnMsMzA6Yyw0OTpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDExXSksdChyLFsyLDE1XSx7MTg6MjYsNDA6MjgsMjA6WzEsMjddLDQyOnUsNDM6aCw0NDpmLDQ1OmR9KSx7MjQ6WzEsMzNdfSx7MjY6WzEsMzRdfSx7Mjg6WzEsMzVdfSx0KHIsWzIsMTldKSx0KHAsWzIsMjBdLHszMTpbMSwzNl19KSx7MTE6WzEsMzddfSx7MTY6MzgsNTE6WzEsMzldfSx7MTE6WzIsNDRdfSx0KHIsWzIsNV0pLHsxNzo0MCwzMDpjfSx7MjE6NDEsMjI6WzEsNDJdLDMyOjQzLDMzOjQ0LDM3Omd9LHs0MTo0Niw0NjpbMSw0N10sNDc6WzEsNDhdfSx0KHksWzIsMzNdKSx0KHksWzIsMzRdKSx0KHksWzIsMzVdKSx0KHksWzIsMzZdKSx0KHIsWzIsMTZdKSx0KHIsWzIsMTddKSx0KHIsWzIsMThdKSx7MTc6NDksMzA6Y30sdChtLFsyLDldKSx7MTQ6NTAsNTI6bH0sezUyOlsyLDQzXX0sezE1OlsxLDUxXX0sezIyOlsxLDUyXX0sdChyLFsyLDE0XSksezIxOjUzLDIyOlsyLDIyXSwzMjo0MywzMzo0NCwzNzpnfSx7MzQ6NTQsMzc6WzEsNTVdfSx7Mzc6WzIsMjhdfSx7NDA6NTYsNDI6dSw0MzpoLDQ0OmYsNDU6ZH0sdChiLFsyLDM3XSksdChiLFsyLDM4XSksdChwLFsyLDIxXSksezExOlsxLDU3XX0sezE5OjU4LDMwOlsxLDYwXSw0ODpbMSw1OV19LHQocixbMiwxM10pLHsyMjpbMiwyM119LHQodixbMiwyNF0sezM1OjYxLDM2OjYyLDM4OlsxLDYzXSwzOTpffSksdChbMjIsMzcsMzgsMzldLFsyLDI5XSksezMwOlsyLDMyXX0sdChtLFsyLDEwXSksdChyLFsyLDEyXSksdChyLFsyLDM5XSksdChyLFsyLDQwXSksdCh2LFsyLDI1XSx7MzY6NjUsMzk6X30pLHQodixbMiwyNl0pLHQoWzIyLDM3LDM5XSxbMiwzMF0pLHQodixbMiwzMV0pLHQodixbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiw0MV0sNzpbMiwyXSwyNDpbMiw0NF0sMzk6WzIsNDNdLDQ1OlsyLDI4XSw1MzpbMiwyM10sNTY6WzIsMzJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCxsPTAsdT0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIGI9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIHYoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT1fJiYoXz12KCkpLHc9b1trXSYmb1trXVtfXSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK18pO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOihsPXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsdT4wJiZ1LS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGImJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLGwsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0saz17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjU7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNDk7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDUwO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDUyO2Nhc2UgMTE6cmV0dXJuIDUxO2Nhc2UgMTI6Y2FzZSAxMzpjYXNlIDE1OmNhc2UgMjA6Y2FzZSAyNTpicmVhaztjYXNlIDE0OnJldHVybiAxMTtjYXNlIDE2OnJldHVybiA5O2Nhc2UgMTc6cmV0dXJuIDQ4O2Nhc2UgMTg6cmV0dXJuIDQ7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwyMDtjYXNlIDIxOnJldHVybiAzODtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIDM3O2Nhc2UgMjQ6cmV0dXJuIDM5O2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyMjtjYXNlIDI3OmNhc2UgNDA6cmV0dXJuIGUueXl0ZXh0WzBdO2Nhc2UgMjg6Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAyOTpjYXNlIDMzOnJldHVybiA0MztjYXNlIDMwOmNhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzE6cmV0dXJuIDQ1O2Nhc2UgMzU6Y2FzZSAzNzpjYXNlIDM4OnJldHVybiA0NjtjYXNlIDM2OnJldHVybiA0NztjYXNlIDM5OnJldHVybiAzMDtjYXNlIDQxOnJldHVybiA2fX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OlxzKykvaSwvXig/OlxiKCg/OlBLKXwoPzpGSykpXGIpL2ksL14oPzooLio/KVt+XSguKj8pKlt+XSkvaSwvXig/OltBLVphLXpdW0EtWmEtejAtOVwtX1xbXF1dKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/Olx8b1xiKS9pLC9eKD86XH1vXGIpL2ksL14oPzpcfVx8KS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzpcLi0pL2ksL14oPzotXC4pL2ksL14oPzpbQS1aYS16XVtBLVphLXowLTlcLV9dKikvaSwvXig/Oi4pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlsxMCwxMV0saW5jbHVzaXZlOiExfSxibG9jazp7cnVsZXM6WzIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDIsNCw3LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdygpe3RoaXMueXk9e319cmV0dXJuIHgubGV4ZXI9ayx3LnByb3RvdHlwZT14LHguUGFyc2VyPXcsbmV3IHd9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4MDA5KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDM2MDI6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDldLG49WzEsN10scj1bMSw2XSxpPVsxLDhdLGE9WzEsMjAsMjEsMjIsMjMsMzgsNDQsNDYsNDgsNTIsNjYsNjcsODYsODcsODgsODksOTAsOTEsOTUsMTA1LDEwNiwxMDksMTExLDExMiwxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLG89WzIsMTBdLHM9WzEsMjBdLGM9WzEsMjFdLGw9WzEsMjJdLHU9WzEsMjNdLGg9WzEsMzBdLGY9WzEsMzJdLGQ9WzEsMzNdLHA9WzEsMzRdLGc9WzEsNjJdLHk9WzEsNDhdLG09WzEsNTJdLGI9WzEsMzZdLHY9WzEsMzddLF89WzEsMzhdLHg9WzEsMzldLGs9WzEsNDBdLHc9WzEsNTZdLFQ9WzEsNjNdLEU9WzEsNTFdLEM9WzEsNTNdLFM9WzEsNTVdLEE9WzEsNTldLE09WzEsNjBdLE49WzEsNDFdLE89WzEsNDJdLEQ9WzEsNDNdLEI9WzEsNDRdLEw9WzEsNjFdLEk9WzEsNTBdLEY9WzEsNTRdLFI9WzEsNTddLFA9WzEsNThdLGo9WzEsNDldLHo9WzEsNjZdLFk9WzEsNzFdLFU9WzEsMjAsMjEsMjIsMjMsMzgsNDIsNDQsNDYsNDgsNTIsNjYsNjcsODYsODcsODgsODksOTAsOTEsOTUsMTA1LDEwNiwxMDksMTExLDExMiwxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLCQ9WzEsNzVdLFc9WzEsNzRdLHE9WzEsNzZdLEg9WzIwLDIxLDIzLDgxLDgyXSxWPVsxLDk5XSxHPVsxLDEwNF0sWD1bMSwxMDddLFo9WzEsMTA4XSxRPVsxLDEwMV0sSz1bMSwxMDZdLEo9WzEsMTA5XSx0dD1bMSwxMDJdLGV0PVsxLDExNF0sbnQ9WzEsMTEzXSxydD1bMSwxMDNdLGl0PVsxLDEwNV0sYXQ9WzEsMTEwXSxvdD1bMSwxMTFdLHN0PVsxLDExMl0sY3Q9WzEsMTE1XSxsdD1bMjAsMjEsMjIsMjMsODEsODJdLHV0PVsyMCwyMSwyMiwyMyw1Myw4MSw4Ml0saHQ9WzIwLDIxLDIyLDIzLDQwLDUyLDUzLDU1LDU3LDU5LDYxLDYzLDY1LDY2LDY3LDY5LDcxLDczLDc0LDc2LDgxLDgyLDkxLDk1LDEwNSwxMDYsMTA5LDExMSwxMTIsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLGZ0PVsyMCwyMSwyM10sZHQ9WzIwLDIxLDIzLDUyLDY2LDY3LDgxLDgyLDkxLDk1LDEwNSwxMDYsMTA5LDExMSwxMTIsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLHB0PVsxLDEyLDIwLDIxLDIyLDIzLDI0LDM4LDQyLDQ0LDQ2LDQ4LDUyLDY2LDY3LDg2LDg3LDg4LDg5LDkwLDkxLDk1LDEwNSwxMDYsMTA5LDExMSwxMTIsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3XSxndD1bNTIsNjYsNjcsOTEsOTUsMTA1LDEwNiwxMDksMTExLDExMiwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyN10seXQ9WzEsMTQ5XSxtdD1bMSwxNTddLGJ0PVsxLDE1OF0sdnQ9WzEsMTU5XSxfdD1bMSwxNjBdLHh0PVsxLDE0NF0sa3Q9WzEsMTQ1XSx3dD1bMSwxNDFdLFR0PVsxLDE1Ml0sRXQ9WzEsMTUzXSxDdD1bMSwxNTRdLFN0PVsxLDE1NV0sQXQ9WzEsMTU2XSxNdD1bMSwxNjFdLE50PVsxLDE2Ml0sT3Q9WzEsMTQ3XSxEdD1bMSwxNTBdLEJ0PVsxLDE0Nl0sTHQ9WzEsMTQzXSxJdD1bMjAsMjEsMjIsMjMsMzgsNDIsNDQsNDYsNDgsNTIsNjYsNjcsODYsODcsODgsODksOTAsOTEsOTUsMTA1LDEwNiwxMDksMTExLDExMiwxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLEZ0PVsxLDE2NV0sUnQ9WzIwLDIxLDIyLDIzLDI2LDUyLDY2LDY3LDkxLDEwNSwxMDYsMTA5LDExMSwxMTIsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLFB0PVsyMCwyMSwyMiwyMywyNCwyNiwzOCw0MCw0MSw0Miw1Miw1Niw1OCw2MCw2Miw2NCw2Niw2Nyw2OCw3MCw3Miw3Myw3NSw3Nyw4MSw4Miw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5NSwxMDUsMTA2LDEwOSwxMTEsMTEyLDExMywxMTQsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjddLGp0PVsxMiwyMSwyMiwyNF0senQ9WzIyLDEwNl0sWXQ9WzEsMjUwXSxVdD1bMSwyNDVdLCR0PVsxLDI0Nl0sV3Q9WzEsMjU0XSxxdD1bMSwyNTFdLEh0PVsxLDI0OF0sVnQ9WzEsMjQ3XSxHdD1bMSwyNDldLFh0PVsxLDI1Ml0sWnQ9WzEsMjUzXSxRdD1bMSwyNTVdLEt0PVsxLDI3M10sSnQ9WzIwLDIxLDIzLDEwNl0sdGU9WzIwLDIxLDIyLDIzLDY2LDY3LDg2LDEwMiwxMDUsMTA2LDEwOSwxMTAsMTExLDExMiwxMTNdLGVlPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aXZlOjUsb3BlbkRpcmVjdGl2ZTo2LHR5cGVEaXJlY3RpdmU6NyxjbG9zZURpcmVjdGl2ZTo4LHNlcGFyYXRvcjo5LCI6IjoxMCxhcmdEaXJlY3RpdmU6MTEsb3Blbl9kaXJlY3RpdmU6MTIsdHlwZV9kaXJlY3RpdmU6MTMsYXJnX2RpcmVjdGl2ZToxNCxjbG9zZV9kaXJlY3RpdmU6MTUsZ3JhcGhDb25maWc6MTYsZG9jdW1lbnQ6MTcsbGluZToxOCxzdGF0ZW1lbnQ6MTksU0VNSToyMCxORVdMSU5FOjIxLFNQQUNFOjIyLEVPRjoyMyxHUkFQSDoyNCxOT0RJUjoyNSxESVI6MjYsRmlyc3RTdG10U2VwZXJhdG9yOjI3LGVuZGluZzoyOCxlbmRUb2tlbjoyOSxzcGFjZUxpc3Q6MzAsc3BhY2VMaXN0TmV3bGluZTozMSx2ZXJ0aWNlU3RhdGVtZW50OjMyLHN0eWxlU3RhdGVtZW50OjMzLGxpbmtTdHlsZVN0YXRlbWVudDozNCxjbGFzc0RlZlN0YXRlbWVudDozNSxjbGFzc1N0YXRlbWVudDozNixjbGlja1N0YXRlbWVudDozNyxzdWJncmFwaDozOCx0ZXh0OjM5LFNRUzo0MCxTUUU6NDEsZW5kOjQyLGRpcmVjdGlvbjo0MyxhY2NfdGl0bGU6NDQsYWNjX3RpdGxlX3ZhbHVlOjQ1LGFjY19kZXNjcjo0NixhY2NfZGVzY3JfdmFsdWU6NDcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTo0OCxsaW5rOjQ5LG5vZGU6NTAsdmVydGV4OjUxLEFNUDo1MixTVFlMRV9TRVBBUkFUT1I6NTMsaWRTdHJpbmc6NTQsRE9VQkxFQ0lSQ0xFU1RBUlQ6NTUsRE9VQkxFQ0lSQ0xFRU5EOjU2LFBTOjU3LFBFOjU4LCIoLSI6NTksIi0pIjo2MCxTVEFESVVNU1RBUlQ6NjEsU1RBRElVTUVORDo2MixTVUJST1VUSU5FU1RBUlQ6NjMsU1VCUk9VVElORUVORDo2NCxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo2NSxBTFBIQTo2NixDT0xPTjo2NyxQSVBFOjY4LENZTElOREVSU1RBUlQ6NjksQ1lMSU5ERVJFTkQ6NzAsRElBTU9ORF9TVEFSVDo3MSxESUFNT05EX1NUT1A6NzIsVEFHRU5EOjczLFRSQVBTVEFSVDo3NCxUUkFQRU5EOjc1LElOVlRSQVBTVEFSVDo3NixJTlZUUkFQRU5EOjc3LGxpbmtTdGF0ZW1lbnQ6NzgsYXJyb3dUZXh0Ojc5LFRFU1RTVFI6ODAsU1RBUlRfTElOSzo4MSxMSU5LOjgyLHRleHRUb2tlbjo4MyxTVFI6ODQsa2V5d29yZHM6ODUsU1RZTEU6ODYsTElOS1NUWUxFOjg3LENMQVNTREVGOjg4LENMQVNTOjg5LENMSUNLOjkwLERPV046OTEsVVA6OTIsdGV4dE5vVGFnczo5Myx0ZXh0Tm9UYWdzVG9rZW46OTQsREVGQVVMVDo5NSxzdHlsZXNPcHQ6OTYsYWxwaGFOdW06OTcsQ0FMTEJBQ0tOQU1FOjk4LENBTExCQUNLQVJHUzo5OSxIUkVGOjEwMCxMSU5LX1RBUkdFVDoxMDEsSEVYOjEwMixudW1MaXN0OjEwMyxJTlRFUlBPTEFURToxMDQsTlVNOjEwNSxDT01NQToxMDYsc3R5bGU6MTA3LHN0eWxlQ29tcG9uZW50OjEwOCxNSU5VUzoxMDksVU5JVDoxMTAsQlJLVDoxMTEsRE9UOjExMixQQ1Q6MTEzLFRBR1NUQVJUOjExNCxhbHBoYU51bVRva2VuOjExNSxpZFN0cmluZ1Rva2VuOjExNixhbHBoYU51bVN0YXRlbWVudDoxMTcsZGlyZWN0aW9uX3RiOjExOCxkaXJlY3Rpb25fYnQ6MTE5LGRpcmVjdGlvbl9ybDoxMjAsZGlyZWN0aW9uX2xyOjEyMSxQVU5DVFVBVElPTjoxMjIsVU5JQ09ERV9URVhUOjEyMyxQTFVTOjEyNCxFUVVBTFM6MTI1LE1VTFQ6MTI2LFVOREVSU0NPUkU6MTI3LGdyYXBoQ29kZVRva2VuczoxMjgsQVJST1dfQ1JPU1M6MTI5LEFSUk9XX1BPSU5UOjEzMCxBUlJPV19DSVJDTEU6MTMxLEFSUk9XX09QRU46MTMyLFFVT1RFOjEzMywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsMTA6IjoiLDEyOiJvcGVuX2RpcmVjdGl2ZSIsMTM6InR5cGVfZGlyZWN0aXZlIiwxNDoiYXJnX2RpcmVjdGl2ZSIsMTU6ImNsb3NlX2RpcmVjdGl2ZSIsMjA6IlNFTUkiLDIxOiJORVdMSU5FIiwyMjoiU1BBQ0UiLDIzOiJFT0YiLDI0OiJHUkFQSCIsMjU6Ik5PRElSIiwyNjoiRElSIiwzODoic3ViZ3JhcGgiLDQwOiJTUVMiLDQxOiJTUUUiLDQyOiJlbmQiLDQ0OiJhY2NfdGl0bGUiLDQ1OiJhY2NfdGl0bGVfdmFsdWUiLDQ2OiJhY2NfZGVzY3IiLDQ3OiJhY2NfZGVzY3JfdmFsdWUiLDQ4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw1MjoiQU1QIiw1MzoiU1RZTEVfU0VQQVJBVE9SIiw1NToiRE9VQkxFQ0lSQ0xFU1RBUlQiLDU2OiJET1VCTEVDSVJDTEVFTkQiLDU3OiJQUyIsNTg6IlBFIiw1OToiKC0iLDYwOiItKSIsNjE6IlNUQURJVU1TVEFSVCIsNjI6IlNUQURJVU1FTkQiLDYzOiJTVUJST1VUSU5FU1RBUlQiLDY0OiJTVUJST1VUSU5FRU5EIiw2NToiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDY2OiJBTFBIQSIsNjc6IkNPTE9OIiw2ODoiUElQRSIsNjk6IkNZTElOREVSU1RBUlQiLDcwOiJDWUxJTkRFUkVORCIsNzE6IkRJQU1PTkRfU1RBUlQiLDcyOiJESUFNT05EX1NUT1AiLDczOiJUQUdFTkQiLDc0OiJUUkFQU1RBUlQiLDc1OiJUUkFQRU5EIiw3NjoiSU5WVFJBUFNUQVJUIiw3NzoiSU5WVFJBUEVORCIsODA6IlRFU1RTVFIiLDgxOiJTVEFSVF9MSU5LIiw4MjoiTElOSyIsODQ6IlNUUiIsODY6IlNUWUxFIiw4NzoiTElOS1NUWUxFIiw4ODoiQ0xBU1NERUYiLDg5OiJDTEFTUyIsOTA6IkNMSUNLIiw5MToiRE9XTiIsOTI6IlVQIiw5NToiREVGQVVMVCIsOTg6IkNBTExCQUNLTkFNRSIsOTk6IkNBTExCQUNLQVJHUyIsMTAwOiJIUkVGIiwxMDE6IkxJTktfVEFSR0VUIiwxMDI6IkhFWCIsMTA0OiJJTlRFUlBPTEFURSIsMTA1OiJOVU0iLDEwNjoiQ09NTUEiLDEwOToiTUlOVVMiLDExMDoiVU5JVCIsMTExOiJCUktUIiwxMTI6IkRPVCIsMTEzOiJQQ1QiLDExNDoiVEFHU1RBUlQiLDExODoiZGlyZWN0aW9uX3RiIiwxMTk6ImRpcmVjdGlvbl9idCIsMTIwOiJkaXJlY3Rpb25fcmwiLDEyMToiZGlyZWN0aW9uX2xyIiwxMjI6IlBVTkNUVUFUSU9OIiwxMjM6IlVOSUNPREVfVEVYVCIsMTI0OiJQTFVTIiwxMjU6IkVRVUFMUyIsMTI2OiJNVUxUIiwxMjc6IlVOREVSU0NPUkUiLDEyOToiQVJST1dfQ1JPU1MiLDEzMDoiQVJST1dfUE9JTlQiLDEzMToiQVJST1dfQ0lSQ0xFIiwxMzI6IkFSUk9XX09QRU4iLDEzMzoiUVVPVEUifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsNF0sWzUsNl0sWzYsMV0sWzcsMV0sWzExLDFdLFs4LDFdLFs0LDJdLFsxNywwXSxbMTcsMl0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTYsMl0sWzE2LDJdLFsxNiwyXSxbMTYsM10sWzI4LDJdLFsyOCwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjcsMV0sWzI3LDFdLFsyNywyXSxbMzEsMl0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzMwLDJdLFszMCwxXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksOV0sWzE5LDZdLFsxOSw0XSxbMTksMV0sWzE5LDJdLFsxOSwyXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzMyLDNdLFszMiw0XSxbMzIsMl0sWzMyLDFdLFs1MCwxXSxbNTAsNV0sWzUwLDNdLFs1MSw0XSxbNTEsNF0sWzUxLDZdLFs1MSw0XSxbNTEsNF0sWzUxLDRdLFs1MSw4XSxbNTEsNF0sWzUxLDRdLFs1MSw0XSxbNTEsNl0sWzUxLDRdLFs1MSw0XSxbNTEsNF0sWzUxLDRdLFs1MSw0XSxbNTEsMV0sWzQ5LDJdLFs0OSwzXSxbNDksM10sWzQ5LDFdLFs0OSwzXSxbNzgsMV0sWzc5LDNdLFszOSwxXSxbMzksMl0sWzM5LDFdLFs4NSwxXSxbODUsMV0sWzg1LDFdLFs4NSwxXSxbODUsMV0sWzg1LDFdLFs4NSwxXSxbODUsMV0sWzg1LDFdLFs4NSwxXSxbODUsMV0sWzkzLDFdLFs5MywyXSxbMzUsNV0sWzM1LDVdLFszNiw1XSxbMzcsMl0sWzM3LDRdLFszNywzXSxbMzcsNV0sWzM3LDJdLFszNyw0XSxbMzcsNF0sWzM3LDZdLFszNywyXSxbMzcsNF0sWzM3LDJdLFszNyw0XSxbMzcsNF0sWzM3LDZdLFszMyw1XSxbMzMsNV0sWzM0LDVdLFszNCw1XSxbMzQsOV0sWzM0LDldLFszNCw3XSxbMzQsN10sWzEwMywxXSxbMTAzLDNdLFs5NiwxXSxbOTYsM10sWzEwNywxXSxbMTA3LDJdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzU0LDFdLFs1NCwyXSxbOTcsMV0sWzk3LDJdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzQzLDFdLFsxMTUsMV0sWzExNSwxXSxbMTE1LDFdLFsxMTUsMV0sWzExNSwxXSxbMTE1LDFdLFsxMTUsMV0sWzExNSwxXSxbMTE1LDFdLFsxMTUsMV0sWzExNSwxXSxbMTE1LDFdLFsxMTUsMV0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTE2LDFdLFsxMTYsMV0sWzExNiwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV0sWzEyOCwxXSxbMTI4LDFdLFsxMjgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZmxvd2NoYXJ0Iik7YnJlYWs7Y2FzZSAxMDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA4MjpjYXNlIDg0OmNhc2UgOTY6Y2FzZSAxNTI6Y2FzZSAxNTQ6Y2FzZSAxNTU6Y2FzZSA3ODpjYXNlIDE1MDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMjA6ci5zZXREaXJlY3Rpb24oYVtzLTFdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPWFbcy0xXS5ub2RlczticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ1OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA0NjpjYXNlIDQ3OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA1MTpyLmFkZExpbmsoYVtzLTJdLnN0bXQsYVtzXSxhW3MtMV0pLHRoaXMuJD17c3RtdDphW3NdLG5vZGVzOmFbc10uY29uY2F0KGFbcy0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTI6ci5hZGRMaW5rKGFbcy0zXS5zdG10LGFbcy0xXSxhW3MtMl0pLHRoaXMuJD17c3RtdDphW3MtMV0sbm9kZXM6YVtzLTFdLmNvbmNhdChhW3MtM10ubm9kZXMpfTticmVhaztjYXNlIDUzOnRoaXMuJD17c3RtdDphW3MtMV0sbm9kZXM6YVtzLTFdfTticmVhaztjYXNlIDU0OnRoaXMuJD17c3RtdDphW3NdLG5vZGVzOmFbc119O2JyZWFrO2Nhc2UgNTU6Y2FzZSAxMjM6Y2FzZSAxMjU6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDU2OnRoaXMuJD1hW3MtNF0uY29uY2F0KGFbc10pO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPVthW3MtMl1dLHIuc2V0Q2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzcXVhcmUiKTticmVhaztjYXNlIDU5OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9YVtzLTVdLHIuYWRkVmVydGV4KGFbcy01XSxhW3MtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJlbGxpcHNlIik7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDYzOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPWFbcy03XSxyLmFkZFZlcnRleChhW3MtN10sYVtzLTFdLCJyZWN0Iix2b2lkIDAsdm9pZCAwLHZvaWQgMCxPYmplY3QuZnJvbUVudHJpZXMoW1thW3MtNV0sYVtzLTNdXV0pKTticmVhaztjYXNlIDY1OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwicm91bmQiKTticmVhaztjYXNlIDY3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sIm9kZCIpO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDcxOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX3JpZ2h0Iik7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPWFbc10sci5hZGRWZXJ0ZXgoYVtzXSk7YnJlYWs7Y2FzZSA3NTphW3MtMV0udGV4dD1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3NjpjYXNlIDc3OmFbcy0yXS50ZXh0PWFbcy0xXSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgNzk6dmFyIGM9ci5kZXN0cnVjdExpbmsoYVtzXSxhW3MtMl0pO3RoaXMuJD17dHlwZTpjLnR5cGUsc3Ryb2tlOmMuc3Ryb2tlLGxlbmd0aDpjLmxlbmd0aCx0ZXh0OmFbcy0xXX07YnJlYWs7Y2FzZSA4MDpjPXIuZGVzdHJ1Y3RMaW5rKGFbc10pLHRoaXMuJD17dHlwZTpjLnR5cGUsc3Ryb2tlOmMuc3Ryb2tlLGxlbmd0aDpjLmxlbmd0aH07YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgODM6Y2FzZSA5NzpjYXNlIDE1MzpjYXNlIDE1MTp0aGlzLiQ9YVtzLTFdKyIiK2Fbc107YnJlYWs7Y2FzZSA5ODpjYXNlIDk5OnRoaXMuJD1hW3MtNF0sci5hZGRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDA6dGhpcy4kPWFbcy00XSxyLnNldENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDEwMTpjYXNlIDEwOTp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAxMDI6Y2FzZSAxMTA6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSksci5zZXRUb29sdGlwKGFbcy0zXSxhW3NdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTA1OmNhc2UgMTExOnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwNjpjYXNlIDExMjp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTA3OmNhc2UgMTEzOnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDg6Y2FzZSAxMTQ6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTU6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExNjpjYXNlIDExODp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTk6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMjE6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDEyMjp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDEyNDpjYXNlIDEyNjphW3MtMl0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgMTI4OnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDE1Njp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTU3OnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTg6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU5OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE2MDp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNjE6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6bCwyMzp1LDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDQ6Ziw0NjpkLDQ4OnAsNTA6MzUsNTE6NDUsNTI6Zyw1NDo0Niw2Njp5LDY3Om0sODY6Yiw4Nzp2LDg4Ol8sODk6eCw5MDprLDkxOncsOTU6VCwxMDU6RSwxMDY6QywxMDk6UywxMTE6QSwxMTI6TSwxMTY6NDcsMTE4Ok4sMTE5Ok8sMTIwOkQsMTIxOkIsMTIyOkwsMTIzOkksMTI0OkYsMTI1OlIsMTI2OlAsMTI3Omp9LHs4OjY0LDEwOlsxLDY1XSwxNTp6fSx0KFsxMCwxNV0sWzIsNl0pLHQoYSxbMiwxN10pLHQoYSxbMiwxOF0pLHQoYSxbMiwxOV0pLHsyMDpbMSw2OF0sMjE6WzEsNjldLDIyOlksMjc6NjcsMzA6NzB9LHQoVSxbMiwxMV0pLHQoVSxbMiwxMl0pLHQoVSxbMiwxM10pLHQoVSxbMiwxNF0pLHQoVSxbMiwxNV0pLHQoVSxbMiwxNl0pLHs5OjcyLDIwOiQsMjE6VywyMzpxLDQ5OjczLDc4Ojc3LDgxOlsxLDc4XSw4MjpbMSw3OV19LHs5OjgwLDIwOiQsMjE6VywyMzpxfSx7OTo4MSwyMDokLDIxOlcsMjM6cX0sezk6ODIsMjA6JCwyMTpXLDIzOnF9LHs5OjgzLDIwOiQsMjE6VywyMzpxfSx7OTo4NCwyMDokLDIxOlcsMjM6cX0sezk6ODYsMjA6JCwyMTpXLDIyOlsxLDg1XSwyMzpxfSx0KFUsWzIsNDRdKSx7NDU6WzEsODddfSx7NDc6WzEsODhdfSx0KFUsWzIsNDddKSx0KEgsWzIsNTRdLHszMDo4OSwyMjpZfSksezIyOlsxLDkwXX0sezIyOlsxLDkxXX0sezIyOlsxLDkyXX0sezIyOlsxLDkzXX0sezI2OlYsNTI6Ryw2NjpYLDY3OlosODQ6WzEsOTddLDkxOlEsOTc6OTYsOTg6WzEsOTRdLDEwMDpbMSw5NV0sMTA1OkssMTA2OkosMTA5OnR0LDExMTpldCwxMTI6bnQsMTE1OjEwMCwxMTc6OTgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHQoVSxbMiwxNThdKSx0KFUsWzIsMTU5XSksdChVLFsyLDE2MF0pLHQoVSxbMiwxNjFdKSx0KGx0LFsyLDU1XSx7NTM6WzEsMTE2XX0pLHQodXQsWzIsNzRdLHsxMTY6MTI5LDQwOlsxLDExN10sNTI6Zyw1NTpbMSwxMThdLDU3OlsxLDExOV0sNTk6WzEsMTIwXSw2MTpbMSwxMjFdLDYzOlsxLDEyMl0sNjU6WzEsMTIzXSw2Njp5LDY3Om0sNjk6WzEsMTI0XSw3MTpbMSwxMjVdLDczOlsxLDEyNl0sNzQ6WzEsMTI3XSw3NjpbMSwxMjhdLDkxOncsOTU6VCwxMDU6RSwxMDY6QywxMDk6UywxMTE6QSwxMTI6TSwxMjI6TCwxMjM6SSwxMjQ6RiwxMjU6UiwxMjY6UCwxMjc6an0pLHQoaHQsWzIsMTUwXSksdChodCxbMiwxNzVdKSx0KGh0LFsyLDE3Nl0pLHQoaHQsWzIsMTc3XSksdChodCxbMiwxNzhdKSx0KGh0LFsyLDE3OV0pLHQoaHQsWzIsMTgwXSksdChodCxbMiwxODFdKSx0KGh0LFsyLDE4Ml0pLHQoaHQsWzIsMTgzXSksdChodCxbMiwxODRdKSx0KGh0LFsyLDE4NV0pLHQoaHQsWzIsMTg2XSksdChodCxbMiwxODddKSx0KGh0LFsyLDE4OF0pLHQoaHQsWzIsMTg5XSksdChodCxbMiwxOTBdKSx7OToxMzAsMjA6JCwyMTpXLDIzOnF9LHsxMToxMzEsMTQ6WzEsMTMyXX0sdChmdCxbMiw4XSksdChhLFsyLDIwXSksdChhLFsyLDI2XSksdChhLFsyLDI3XSksezIxOlsxLDEzM119LHQoZHQsWzIsMzRdLHszMDoxMzQsMjI6WX0pLHQoVSxbMiwzNV0pLHs1MDoxMzUsNTE6NDUsNTI6Zyw1NDo0Niw2Njp5LDY3Om0sOTE6dyw5NTpULDEwNTpFLDEwNjpDLDEwOTpTLDExMTpBLDExMjpNLDExNjo0NywxMjI6TCwxMjM6SSwxMjQ6RiwxMjU6UiwxMjY6UCwxMjc6an0sdChwdCxbMiw0OF0pLHQocHQsWzIsNDldKSx0KHB0LFsyLDUwXSksdChndCxbMiw3OF0sezc5OjEzNiw2ODpbMSwxMzhdLDgwOlsxLDEzN119KSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsMzk6MTM5LDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjE0MCw4NDp3dCw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sdChbNTIsNjYsNjcsNjgsODAsOTEsOTUsMTA1LDEwNiwxMDksMTExLDExMiwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyN10sWzIsODBdKSx0KFUsWzIsMzZdKSx0KFUsWzIsMzddKSx0KFUsWzIsMzhdKSx0KFUsWzIsMzldKSx0KFUsWzIsNDBdKSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsMzk6MTYzLDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjE0MCw4NDp3dCw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sdChJdCxvLHsxNzoxNjR9KSx0KFUsWzIsNDVdKSx0KFUsWzIsNDZdKSx0KEgsWzIsNTNdLHs1MjpGdH0pLHsyNjpWLDUyOkcsNjY6WCw2NzpaLDkxOlEsOTc6MTY2LDEwMjpbMSwxNjddLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDExNToxMDAsMTE3Ojk4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7OTU6WzEsMTY4XSwxMDM6MTY5LDEwNTpbMSwxNzBdfSx7MjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDk1OlsxLDE3MV0sOTc6MTcyLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDExNToxMDAsMTE3Ojk4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDk3OjE3MywxMDU6SywxMDY6SiwxMDk6dHQsMTExOmV0LDExMjpudCwxMTU6MTAwLDExNzo5OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sdChmdCxbMiwxMDFdLHsyMjpbMSwxNzRdLDk5OlsxLDE3NV19KSx0KGZ0LFsyLDEwNV0sezIyOlsxLDE3Nl19KSx0KGZ0LFsyLDEwOV0sezExNToxMDAsMTE3OjE3OCwyMjpbMSwxNzddLDI2OlYsNTI6Ryw2NjpYLDY3OlosOTE6USwxMDU6SywxMDY6SiwxMDk6dHQsMTExOmV0LDExMjpudCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0pLHQoZnQsWzIsMTExXSx7MjI6WzEsMTc5XX0pLHQoUnQsWzIsMTUyXSksdChSdCxbMiwxNTRdKSx0KFJ0LFsyLDE1NV0pLHQoUnQsWzIsMTU2XSksdChSdCxbMiwxNTddKSx0KFB0LFsyLDE2Ml0pLHQoUHQsWzIsMTYzXSksdChQdCxbMiwxNjRdKSx0KFB0LFsyLDE2NV0pLHQoUHQsWzIsMTY2XSksdChQdCxbMiwxNjddKSx0KFB0LFsyLDE2OF0pLHQoUHQsWzIsMTY5XSksdChQdCxbMiwxNzBdKSx0KFB0LFsyLDE3MV0pLHQoUHQsWzIsMTcyXSksdChQdCxbMiwxNzNdKSx0KFB0LFsyLDE3NF0pLHs1MjpnLDU0OjE4MCw2Njp5LDY3Om0sOTE6dyw5NTpULDEwNTpFLDEwNjpDLDEwOTpTLDExMTpBLDExMjpNLDExNjo0NywxMjI6TCwxMjM6SSwxMjQ6RiwxMjU6UiwxMjY6UCwxMjc6an0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjE4MSw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCwzOToxODIsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MTQwLDg0Ond0LDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsMzk6MTg0LDQyOl90LDUyOkcsNTc6WzEsMTgzXSw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MTQwLDg0Ond0LDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsMzk6MTg1LDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjE0MCw4NDp3dCw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjE4Niw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCwzOToxODcsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MTQwLDg0Ond0LDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7NjY6WzEsMTg4XX0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjE4OSw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCwzOToxOTAsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzE6WzEsMTkxXSw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCwzOToxOTIsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MTQwLDg0Ond0LDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsMzk6MTkzLDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjE0MCw4NDp3dCw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjE5NCw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHQoaHQsWzIsMTUxXSksdChqdCxbMiwzXSksezg6MTk1LDE1Onp9LHsxNTpbMiw3XX0sdChhLFsyLDI4XSksdChkdCxbMiwzM10pLHQoSCxbMiw1MV0sezMwOjE5NiwyMjpZfSksdChndCxbMiw3NV0sezIyOlsxLDE5N119KSx7MjI6WzEsMTk4XX0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjE5OSw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MjpbMSwyMDBdLDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sdChQdCxbMiw4Ml0pLHQoUHQsWzIsODRdKSx0KFB0LFsyLDE0MF0pLHQoUHQsWzIsMTQxXSksdChQdCxbMiwxNDJdKSx0KFB0LFsyLDE0M10pLHQoUHQsWzIsMTQ0XSksdChQdCxbMiwxNDVdKSx0KFB0LFsyLDE0Nl0pLHQoUHQsWzIsMTQ3XSksdChQdCxbMiwxNDhdKSx0KFB0LFsyLDE0OV0pLHQoUHQsWzIsODVdKSx0KFB0LFsyLDg2XSksdChQdCxbMiw4N10pLHQoUHQsWzIsODhdKSx0KFB0LFsyLDg5XSksdChQdCxbMiw5MF0pLHQoUHQsWzIsOTFdKSx0KFB0LFsyLDkyXSksdChQdCxbMiw5M10pLHQoUHQsWzIsOTRdKSx0KFB0LFsyLDk1XSksezk6MjAzLDIwOiQsMjE6VywyMjp5dCwyMzpxLDI0Om10LDI2OmJ0LDM4OnZ0LDQwOlsxLDIwMl0sNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MjAxLDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOmwsMjM6dSwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDIwNF0sNDM6MzEsNDQ6Ziw0NjpkLDQ4OnAsNTA6MzUsNTE6NDUsNTI6Zyw1NDo0Niw2Njp5LDY3Om0sODY6Yiw4Nzp2LDg4Ol8sODk6eCw5MDprLDkxOncsOTU6VCwxMDU6RSwxMDY6QywxMDk6UywxMTE6QSwxMTI6TSwxMTY6NDcsMTE4Ok4sMTE5Ok8sMTIwOkQsMTIxOkIsMTIyOkwsMTIzOkksMTI0OkYsMTI1OlIsMTI2OlAsMTI3Omp9LHsyMjpZLDMwOjIwNX0sezIyOlsxLDIwNl0sMjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDExNToxMDAsMTE3OjE3OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOlsxLDIwN119LHsyMjpbMSwyMDhdfSx7MjI6WzEsMjA5XSwxMDY6WzEsMjEwXX0sdCh6dCxbMiwxMjNdKSx7MjI6WzEsMjExXX0sezIyOlsxLDIxMl0sMjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDExNToxMDAsMTE3OjE3OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOlsxLDIxM10sMjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDExNToxMDAsMTE3OjE3OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezg0OlsxLDIxNF19LHQoZnQsWzIsMTAzXSx7MjI6WzEsMjE1XX0pLHs4NDpbMSwyMTZdLDEwMTpbMSwyMTddfSx7ODQ6WzEsMjE4XX0sdChSdCxbMiwxNTNdKSx7ODQ6WzEsMjE5XSwxMDE6WzEsMjIwXX0sdChsdCxbMiw1N10sezExNjoxMjksNTI6Zyw2Njp5LDY3Om0sOTE6dyw5NTpULDEwNTpFLDEwNjpDLDEwOTpTLDExMTpBLDExMjpNLDEyMjpMLDEyMzpJLDEyNDpGLDEyNTpSLDEyNjpQLDEyNzpqfSksezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDQxOlsxLDIyMV0sNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MjAxLDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsNDI6X3QsNTI6Ryw1NjpbMSwyMjJdLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoyMDEsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCwzOToyMjMsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MTQwLDg0Ond0LDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsNDI6X3QsNTI6Ryw1ODpbMSwyMjRdLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoyMDEsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MjpfdCw1MjpHLDYwOlsxLDIyNV0sNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDQyOl90LDUyOkcsNjI6WzEsMjI2XSw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MjAxLDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsNDI6X3QsNTI6Ryw2NDpbMSwyMjddLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoyMDEsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHs2NzpbMSwyMjhdfSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzA6WzEsMjI5XSw3Mzp4dCw4MTprdCw4MzoyMDEsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3MjpbMSwyMzBdLDczOnh0LDgxOmt0LDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjIzMSw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MTpbMSwyMzJdLDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDc1OlsxLDIzM10sNzc6WzEsMjM0XSw4MTprdCw4MzoyMDEsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw3NTpbMSwyMzZdLDc3OlsxLDIzNV0sODE6a3QsODM6MjAxLDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7OToyMzcsMjA6JCwyMTpXLDIzOnF9LHQoSCxbMiw1Ml0sezUyOkZ0fSksdChndCxbMiw3N10pLHQoZ3QsWzIsNzZdKSx7MjI6eXQsMjQ6bXQsMjY6YnQsMzg6dnQsNDI6X3QsNTI6Ryw2NjpYLDY3OlosNjg6WzEsMjM4XSw3Mzp4dCw4MTprdCw4MzoyMDEsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHQoZ3QsWzIsNzldKSx0KFB0LFsyLDgzXSksezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjIzOSw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHQoSXQsbyx7MTc6MjQwfSksdChVLFsyLDQzXSksezUxOjI0MSw1MjpnLDU0OjQ2LDY2OnksNjc6bSw5MTp3LDk1OlQsMTA1OkUsMTA2OkMsMTA5OlMsMTExOkEsMTEyOk0sMTE2OjQ3LDEyMjpMLDEyMzpJLDEyNDpGLDEyNTpSLDEyNjpQLDEyNzpqfSx7MjI6WXQsNjY6VXQsNjc6JHQsODY6V3QsOTY6MjQyLDEwMjpxdCwxMDU6SHQsMTA3OjI0MywxMDg6MjQ0LDEwOTpWdCwxMTA6R3QsMTExOlh0LDExMjpadCwxMTM6UXR9LHsyMjpZdCw2NjpVdCw2NzokdCw4NjpXdCw5NjoyNTYsMTAyOnF0LDEwNTpIdCwxMDc6MjQzLDEwODoyNDQsMTA5OlZ0LDExMDpHdCwxMTE6WHQsMTEyOlp0LDExMzpRdH0sezIyOll0LDY2OlV0LDY3OiR0LDg2Old0LDk2OjI1NywxMDI6cXQsMTA0OlsxLDI1OF0sMTA1Okh0LDEwNzoyNDMsMTA4OjI0NCwxMDk6VnQsMTEwOkd0LDExMTpYdCwxMTI6WnQsMTEzOlF0fSx7MjI6WXQsNjY6VXQsNjc6JHQsODY6V3QsOTY6MjU5LDEwMjpxdCwxMDQ6WzEsMjYwXSwxMDU6SHQsMTA3OjI0MywxMDg6MjQ0LDEwOTpWdCwxMTA6R3QsMTExOlh0LDExMjpadCwxMTM6UXR9LHsxMDU6WzEsMjYxXX0sezIyOll0LDY2OlV0LDY3OiR0LDg2Old0LDk2OjI2MiwxMDI6cXQsMTA1Okh0LDEwNzoyNDMsMTA4OjI0NCwxMDk6VnQsMTEwOkd0LDExMTpYdCwxMTI6WnQsMTEzOlF0fSx7MjI6WXQsNjY6VXQsNjc6JHQsODY6V3QsOTY6MjYzLDEwMjpxdCwxMDU6SHQsMTA3OjI0MywxMDg6MjQ0LDEwOTpWdCwxMTA6R3QsMTExOlh0LDExMjpadCwxMTM6UXR9LHsyNjpWLDUyOkcsNjY6WCw2NzpaLDkxOlEsOTc6MjY0LDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDExNToxMDAsMTE3Ojk4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx0KGZ0LFsyLDEwMl0pLHs4NDpbMSwyNjVdfSx0KGZ0LFsyLDEwNl0sezIyOlsxLDI2Nl19KSx0KGZ0LFsyLDEwN10pLHQoZnQsWzIsMTEwXSksdChmdCxbMiwxMTJdLHsyMjpbMSwyNjddfSksdChmdCxbMiwxMTNdKSx0KHV0LFsyLDU4XSksdCh1dCxbMiw1OV0pLHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MjpfdCw1MjpHLDU4OlsxLDI2OF0sNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sdCh1dCxbMiw2Nl0pLHQodXQsWzIsNjFdKSx0KHV0LFsyLDYyXSksdCh1dCxbMiw2M10pLHs2NjpbMSwyNjldfSx0KHV0LFsyLDY1XSksdCh1dCxbMiw2N10pLHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3MjpbMSwyNzBdLDczOnh0LDgxOmt0LDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sdCh1dCxbMiw2OV0pLHQodXQsWzIsNzBdKSx0KHV0LFsyLDcyXSksdCh1dCxbMiw3MV0pLHQodXQsWzIsNzNdKSx0KGp0LFsyLDRdKSx0KFsyMiw1Miw2Niw2Nyw5MSw5NSwxMDUsMTA2LDEwOSwxMTEsMTEyLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3XSxbMiw4MV0pLHsyMjp5dCwyNDptdCwyNjpidCwzODp2dCw0MTpbMSwyNzFdLDQyOl90LDUyOkcsNjY6WCw2NzpaLDczOnh0LDgxOmt0LDgzOjIwMSw4NToxNTEsODY6VHQsODc6RXQsODg6Q3QsODk6U3QsOTA6QXQsOTE6TXQsOTI6TnQsOTQ6MTQyLDk1Ok90LDEwNTpLLDEwNjpKLDEwOTpEdCwxMTE6ZXQsMTEyOm50LDExMzpCdCwxMTQ6THQsMTE1OjE0OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjpsLDIzOnUsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNzJdLDQzOjMxLDQ0OmYsNDY6ZCw0ODpwLDUwOjM1LDUxOjQ1LDUyOmcsNTQ6NDYsNjY6eSw2NzptLDg2OmIsODc6diw4ODpfLDg5OngsOTA6ayw5MTp3LDk1OlQsMTA1OkUsMTA2OkMsMTA5OlMsMTExOkEsMTEyOk0sMTE2OjQ3LDExODpOLDExOTpPLDEyMDpELDEyMTpCLDEyMjpMLDEyMzpJLDEyNDpGLDEyNTpSLDEyNjpQLDEyNzpqfSx0KGx0LFsyLDU2XSksdChmdCxbMiwxMTVdLHsxMDY6S3R9KSx0KEp0LFsyLDEyNV0sezEwODoyNzQsMjI6WXQsNjY6VXQsNjc6JHQsODY6V3QsMTAyOnF0LDEwNTpIdCwxMDk6VnQsMTEwOkd0LDExMTpYdCwxMTI6WnQsMTEzOlF0fSksdCh0ZSxbMiwxMjddKSx0KHRlLFsyLDEyOV0pLHQodGUsWzIsMTMwXSksdCh0ZSxbMiwxMzFdKSx0KHRlLFsyLDEzMl0pLHQodGUsWzIsMTMzXSksdCh0ZSxbMiwxMzRdKSx0KHRlLFsyLDEzNV0pLHQodGUsWzIsMTM2XSksdCh0ZSxbMiwxMzddKSx0KHRlLFsyLDEzOF0pLHQodGUsWzIsMTM5XSksdChmdCxbMiwxMTZdLHsxMDY6S3R9KSx0KGZ0LFsyLDExN10sezEwNjpLdH0pLHsyMjpbMSwyNzVdfSx0KGZ0LFsyLDExOF0sezEwNjpLdH0pLHsyMjpbMSwyNzZdfSx0KHp0LFsyLDEyNF0pLHQoZnQsWzIsOThdLHsxMDY6S3R9KSx0KGZ0LFsyLDk5XSx7MTA2Okt0fSksdChmdCxbMiwxMDBdLHsxMTU6MTAwLDExNzoxNzgsMjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSksdChmdCxbMiwxMDRdKSx7MTAxOlsxLDI3N119LHsxMDE6WzEsMjc4XX0sezU4OlsxLDI3OV19LHs2ODpbMSwyODBdfSx7NzI6WzEsMjgxXX0sezk6MjgyLDIwOiQsMjE6VywyMzpxfSx0KFUsWzIsNDJdKSx7MjI6WXQsNjY6VXQsNjc6JHQsODY6V3QsMTAyOnF0LDEwNTpIdCwxMDc6MjgzLDEwODoyNDQsMTA5OlZ0LDExMDpHdCwxMTE6WHQsMTEyOlp0LDExMzpRdH0sdCh0ZSxbMiwxMjhdKSx7MjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDk3OjI4NCwxMDU6SywxMDY6SiwxMDk6dHQsMTExOmV0LDExMjpudCwxMTU6MTAwLDExNzo5OCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0sezI2OlYsNTI6Ryw2NjpYLDY3OlosOTE6USw5NzoyODUsMTA1OkssMTA2OkosMTA5OnR0LDExMTpldCwxMTI6bnQsMTE1OjEwMCwxMTc6OTgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHQoZnQsWzIsMTA4XSksdChmdCxbMiwxMTRdKSx0KHV0LFsyLDYwXSksezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDM5OjI4Niw0MjpfdCw1MjpHLDY2OlgsNjc6Wiw3Mzp4dCw4MTprdCw4MzoxNDAsODQ6d3QsODU6MTUxLDg2OlR0LDg3OkV0LDg4OkN0LDg5OlN0LDkwOkF0LDkxOk10LDkyOk50LDk0OjE0Miw5NTpPdCwxMDU6SywxMDY6SiwxMDk6RHQsMTExOmV0LDExMjpudCwxMTM6QnQsMTE0Okx0LDExNToxNDgsMTIyOnJ0LDEyMzppdCwxMjQ6YXQsMTI1Om90LDEyNjpzdCwxMjc6Y3R9LHQodXQsWzIsNjhdKSx0KEl0LG8sezE3OjI4N30pLHQoSnQsWzIsMTI2XSx7MTA4OjI3NCwyMjpZdCw2NjpVdCw2NzokdCw4NjpXdCwxMDI6cXQsMTA1Okh0LDEwOTpWdCwxMTA6R3QsMTExOlh0LDExMjpadCwxMTM6UXR9KSx0KGZ0LFsyLDEyMV0sezExNToxMDAsMTE3OjE3OCwyMjpbMSwyODhdLDI2OlYsNTI6Ryw2NjpYLDY3OlosOTE6USwxMDU6SywxMDY6SiwxMDk6dHQsMTExOmV0LDExMjpudCwxMjI6cnQsMTIzOml0LDEyNDphdCwxMjU6b3QsMTI2OnN0LDEyNzpjdH0pLHQoZnQsWzIsMTIyXSx7MTE1OjEwMCwxMTc6MTc4LDIyOlsxLDI4OV0sMjY6Viw1MjpHLDY2OlgsNjc6Wiw5MTpRLDEwNTpLLDEwNjpKLDEwOTp0dCwxMTE6ZXQsMTEyOm50LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSksezIyOnl0LDI0Om10LDI2OmJ0LDM4OnZ0LDQxOlsxLDI5MF0sNDI6X3QsNTI6Ryw2NjpYLDY3OlosNzM6eHQsODE6a3QsODM6MjAxLDg1OjE1MSw4NjpUdCw4NzpFdCw4ODpDdCw4OTpTdCw5MDpBdCw5MTpNdCw5MjpOdCw5NDoxNDIsOTU6T3QsMTA1OkssMTA2OkosMTA5OkR0LDExMTpldCwxMTI6bnQsMTEzOkJ0LDExNDpMdCwxMTU6MTQ4LDEyMjpydCwxMjM6aXQsMTI0OmF0LDEyNTpvdCwxMjY6c3QsMTI3OmN0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOmwsMjM6dSwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI5MV0sNDM6MzEsNDQ6Ziw0NjpkLDQ4OnAsNTA6MzUsNTE6NDUsNTI6Zyw1NDo0Niw2Njp5LDY3Om0sODY6Yiw4Nzp2LDg4Ol8sODk6eCw5MDprLDkxOncsOTU6VCwxMDU6RSwxMDY6QywxMDk6UywxMTE6QSwxMTI6TSwxMTY6NDcsMTE4Ok4sMTE5Ok8sMTIwOkQsMTIxOkIsMTIyOkwsMTIzOkksMTI0OkYsMTI1OlIsMTI2OlAsMTI3Omp9LHsyMjpZdCw2NjpVdCw2NzokdCw4NjpXdCw5NjoyOTIsMTAyOnF0LDEwNTpIdCwxMDc6MjQzLDEwODoyNDQsMTA5OlZ0LDExMDpHdCwxMTE6WHQsMTEyOlp0LDExMzpRdH0sezIyOll0LDY2OlV0LDY3OiR0LDg2Old0LDk2OjI5MywxMDI6cXQsMTA1Okh0LDEwNzoyNDMsMTA4OjI0NCwxMDk6VnQsMTEwOkd0LDExMTpYdCwxMTI6WnQsMTEzOlF0fSx0KHV0LFsyLDY0XSksdChVLFsyLDQxXSksdChmdCxbMiwxMTldLHsxMDY6S3R9KSx0KGZ0LFsyLDEyMF0sezEwNjpLdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEzMjpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsbD0wLHU9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciBiPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiB2KCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09XyYmKF89digpKSx3PW9ba10mJm9ba11bX10pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIitfKTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToobD1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLHU+MCYmdS0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxiJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyxsLGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LG5lPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDEyO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxMztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTA7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE1O2Nhc2UgNDpyZXR1cm4gMTQ7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDQ0O2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksNDY7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6Y2FzZSAxNTpjYXNlIDI0OmNhc2UgMjc6Y2FzZSAzMDpjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIlNUUiI7Y2FzZSAxNzpyZXR1cm4gODY7Y2FzZSAxODpyZXR1cm4gOTU7Y2FzZSAxOTpyZXR1cm4gODc7Y2FzZSAyMDpyZXR1cm4gMTA0O2Nhc2UgMjE6cmV0dXJuIDg4O2Nhc2UgMjI6cmV0dXJuIDg5O2Nhc2UgMjM6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDEwMDtjYXNlIDI2OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjk6cmV0dXJuIDk4O2Nhc2UgMzE6cmV0dXJuIDk5O2Nhc2UgMzI6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDM0OnJldHVybiA5MDtjYXNlIDM1OmNhc2UgMzY6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzNzpyZXR1cm4gMzg7Y2FzZSAzODpyZXR1cm4gNDI7Y2FzZSAzOTpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA0MjpyZXR1cm4gMTAxO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNTtjYXNlIDQ0OmNhc2UgNDU6Y2FzZSA0NjpjYXNlIDQ3OmNhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA1NDpyZXR1cm4gMTE4O2Nhc2UgNTU6cmV0dXJuIDExOTtjYXNlIDU2OnJldHVybiAxMjA7Y2FzZSA1NzpyZXR1cm4gMTIxO2Nhc2UgNTg6cmV0dXJuIDEwNTtjYXNlIDU5OnJldHVybiAxMTE7Y2FzZSA2MDpyZXR1cm4gNTM7Y2FzZSA2MTpyZXR1cm4gNjc7Y2FzZSA2MjpyZXR1cm4gNTI7Y2FzZSA2MzpyZXR1cm4gMjA7Y2FzZSA2NDpyZXR1cm4gMTA2O2Nhc2UgNjU6cmV0dXJuIDEyNjtjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpyZXR1cm4gODI7Y2FzZSA2OTpjYXNlIDcwOmNhc2UgNzE6cmV0dXJuIDgxO2Nhc2UgNzI6cmV0dXJuIDU5O2Nhc2UgNzM6cmV0dXJuIDYwO2Nhc2UgNzQ6cmV0dXJuIDYxO2Nhc2UgNzU6cmV0dXJuIDYyO2Nhc2UgNzY6cmV0dXJuIDYzO2Nhc2UgNzc6cmV0dXJuIDY0O2Nhc2UgNzg6cmV0dXJuIDY1O2Nhc2UgNzk6cmV0dXJuIDY5O2Nhc2UgODA6cmV0dXJuIDcwO2Nhc2UgODE6cmV0dXJuIDU1O2Nhc2UgODI6cmV0dXJuIDU2O2Nhc2UgODM6cmV0dXJuIDEwOTtjYXNlIDg0OnJldHVybiAxMTI7Y2FzZSA4NTpyZXR1cm4gMTI3O2Nhc2UgODY6cmV0dXJuIDEyNDtjYXNlIDg3OnJldHVybiAxMTM7Y2FzZSA4ODpjYXNlIDg5OnJldHVybiAxMjU7Y2FzZSA5MDpyZXR1cm4gMTE0O2Nhc2UgOTE6cmV0dXJuIDczO2Nhc2UgOTI6cmV0dXJuIDkyO2Nhc2UgOTM6cmV0dXJuIlNFUCI7Y2FzZSA5NDpyZXR1cm4gOTE7Y2FzZSA5NTpyZXR1cm4gNjY7Y2FzZSA5NjpyZXR1cm4gNzU7Y2FzZSA5NzpyZXR1cm4gNzQ7Y2FzZSA5ODpyZXR1cm4gNzc7Y2FzZSA5OTpyZXR1cm4gNzY7Y2FzZSAxMDA6cmV0dXJuIDEyMjtjYXNlIDEwMTpyZXR1cm4gMTIzO2Nhc2UgMTAyOnJldHVybiA2ODtjYXNlIDEwMzpyZXR1cm4gNTc7Y2FzZSAxMDQ6cmV0dXJuIDU4O2Nhc2UgMTA1OnJldHVybiA0MDtjYXNlIDEwNjpyZXR1cm4gNDE7Y2FzZSAxMDc6cmV0dXJuIDcxO2Nhc2UgMTA4OnJldHVybiA3MjtjYXNlIDEwOTpyZXR1cm4gMTMzO2Nhc2UgMTEwOnJldHVybiAyMTtjYXNlIDExMTpyZXR1cm4gMjI7Y2FzZSAxMTI6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpzdHlsZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxiKS8sL14oPzpjbGFzc1xiKS8sL14oPzpocmVmW1xzXStbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86Y2xpY2tbXHNdKykvLC9eKD86W1xzXG5dKS8sL14oPzpbXlxzXG5dKikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlwoLSkvLC9eKD86LVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVwpKS8sL14oPzpcW1xbKS8sL14oPzpcXVxdKS8sL14oPzpcW1x8KS8sL14oPzpcW1woKS8sL14oPzpcKVxdKS8sL14oPzpcKFwoXCgpLywvXig/OlwpXClcKSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OltcX10pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpbQS1aYS16XSspLywvXig/OlxcXF0pLywvXig/OlxbXC8pLywvXig/OlwvXF0pLywvXig/OlxbXFwpLywvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/Olx8KS8sL14oPzpcKCkvLC9eKD86XCkpLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86XHspLywvXig/Olx9KS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzMwLDMxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzI3LDI4LDI5XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyNCwyNV0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzMzLDM0XSxpbmNsdXNpdmU6ITF9LHZlcnRleDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxkaXI6e3J1bGVzOls0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1M10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw5LDExLDE0LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI2LDMyLDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMl0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIHJlKCl7dGhpcy55eT17fX1yZXR1cm4gZWUubGV4ZXI9bmUscmUucHJvdG90eXBlPWVlLGVlLlBhcnNlcj1yZSxuZXcgcmV9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big1MzU0KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDk5NTk6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bNyw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIyLDI0LDI1LDI3LDM0LDM5XSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDE4XSxjPVsxLDE5XSxsPVsxLDIwXSx1PVsxLDIxXSxoPVsxLDIyXSxmPVsxLDIzXSxkPVsxLDI0XSxwPVsxLDI1XSxnPVsxLDI2XSx5PVsxLDI4XSxtPVsxLDMwXSxiPVsxLDMzXSx2PVs1LDcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMiwyNCwyNSwyNywzNCwzOV0sXz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsZ2FudHQ6NSxkb2N1bWVudDo2LEVPRjo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxOTDoxMSxkYXRlRm9ybWF0OjEyLGluY2x1c2l2ZUVuZERhdGVzOjEzLHRvcEF4aXM6MTQsYXhpc0Zvcm1hdDoxNSxleGNsdWRlczoxNixpbmNsdWRlczoxNyx0b2RheU1hcmtlcjoxOCx0aXRsZToxOSxhY2NfdGl0bGU6MjAsYWNjX3RpdGxlX3ZhbHVlOjIxLGFjY19kZXNjcjoyMixhY2NfZGVzY3JfdmFsdWU6MjMsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyNCxzZWN0aW9uOjI1LGNsaWNrU3RhdGVtZW50OjI2LHRhc2tUeHQ6MjcsdGFza0RhdGE6Mjgsb3BlbkRpcmVjdGl2ZToyOSx0eXBlRGlyZWN0aXZlOjMwLGNsb3NlRGlyZWN0aXZlOjMxLCI6IjozMixhcmdEaXJlY3RpdmU6MzMsY2xpY2s6MzQsY2FsbGJhY2tuYW1lOjM1LGNhbGxiYWNrYXJnczozNixocmVmOjM3LGNsaWNrU3RhdGVtZW50RGVidWc6Mzgsb3Blbl9kaXJlY3RpdmU6MzksdHlwZV9kaXJlY3RpdmU6NDAsYXJnX2RpcmVjdGl2ZTo0MSxjbG9zZV9kaXJlY3RpdmU6NDIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6ImdhbnR0Iiw3OiJFT0YiLDk6IlNQQUNFIiwxMToiTkwiLDEyOiJkYXRlRm9ybWF0IiwxMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDE0OiJ0b3BBeGlzIiwxNToiYXhpc0Zvcm1hdCIsMTY6ImV4Y2x1ZGVzIiwxNzoiaW5jbHVkZXMiLDE4OiJ0b2RheU1hcmtlciIsMTk6InRpdGxlIiwyMDoiYWNjX3RpdGxlIiwyMToiYWNjX3RpdGxlX3ZhbHVlIiwyMjoiYWNjX2Rlc2NyIiwyMzoiYWNjX2Rlc2NyX3ZhbHVlIiwyNDoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjU6InNlY3Rpb24iLDI3OiJ0YXNrVHh0IiwyODoidGFza0RhdGEiLDMyOiI6IiwzNDoiY2xpY2siLDM1OiJjYWxsYmFja25hbWUiLDM2OiJjYWxsYmFja2FyZ3MiLDM3OiJocmVmIiwzOToib3Blbl9kaXJlY3RpdmUiLDQwOiJ0eXBlX2RpcmVjdGl2ZSIsNDE6ImFyZ19kaXJlY3RpdmUiLDQyOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzYsMF0sWzYsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzI2LDJdLFsyNiwzXSxbMjYsM10sWzI2LDRdLFsyNiwzXSxbMjYsNF0sWzI2LDJdLFszOCwyXSxbMzgsM10sWzM4LDNdLFszOCw0XSxbMzgsM10sWzM4LDRdLFszOCwyXSxbMjksMV0sWzMwLDFdLFszMywxXSxbMzEsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAyOnJldHVybiBhW3MtMV07Y2FzZSAzOmNhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA5OnIuc2V0RGF0ZUZvcm1hdChhW3NdLnN1YnN0cigxMSkpLHRoaXMuJD1hW3NdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxMDpyLmVuYWJsZUluY2x1c2l2ZUVuZERhdGVzKCksdGhpcy4kPWFbc10uc3Vic3RyKDE4KTticmVhaztjYXNlIDExOnIuVG9wQXhpcygpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDEyOnIuc2V0QXhpc0Zvcm1hdChhW3NdLnN1YnN0cigxMSkpLHRoaXMuJD1hW3NdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxMzpyLnNldEV4Y2x1ZGVzKGFbc10uc3Vic3RyKDkpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAxNDpyLnNldEluY2x1ZGVzKGFbc10uc3Vic3RyKDkpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAxNTpyLnNldFRvZGF5TWFya2VyKGFbc10uc3Vic3RyKDEyKSksdGhpcy4kPWFbc10uc3Vic3RyKDEyKTticmVhaztjYXNlIDE2OnIuc2V0RGlhZ3JhbVRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTg6Y2FzZSAxOTp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMjA6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAyMjpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSxudWxsKTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdLGFbcy0xXSksci5zZXRMaW5rKGFbcy0zXSxhW3NdKTticmVhaztjYXNlIDMwOnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3NdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdKTticmVhaztjYXNlIDMxOnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMV0sYVtzXSksci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPWFbcy0xXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMzM6Y2FzZSAzOTp0aGlzLiQ9YVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzQ6Y2FzZSAzNTpjYXNlIDM3OnRoaXMuJD1hW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDM2OmNhc2UgMzg6dGhpcy4kPWFbcy0zXSsiICIrYVtzLTJdKyIgIithW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSA0MDpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDE6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDI6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQzOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdhbnR0Iil9fSx0YWJsZTpbezM6MSw0OjIsNTplLDI5OjQsMzk6bn0sezE6WzNdfSx7Mzo2LDQ6Miw1OmUsMjk6NCwzOTpufSx0KHIsWzIsM10sezY6N30pLHszMDo4LDQwOlsxLDldfSx7NDA6WzIsNDBdfSx7MTpbMiwxXX0sezQ6MjksNzpbMSwxMF0sODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6aSwxMzphLDE0Om8sMTU6cywxNjpjLDE3OmwsMTg6dSwxOTpoLDIwOmYsMjI6ZCwyNDpwLDI1OmcsMjY6MjcsMjc6eSwyOTo0LDM0Om0sMzk6bn0sezMxOjMxLDMyOlsxLDMyXSw0MjpifSx0KFszMiw0Ml0sWzIsNDFdKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI5LDEwOjM0LDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzpsLDE4OnUsMTk6aCwyMDpmLDIyOmQsMjQ6cCwyNTpnLDI2OjI3LDI3OnksMjk6NCwzNDptLDM5Om59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsOV0pLHQocixbMiwxMF0pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHQocixbMiwxM10pLHQocixbMiwxNF0pLHQocixbMiwxNV0pLHQocixbMiwxNl0pLHsyMTpbMSwzNV19LHsyMzpbMSwzNl19LHQocixbMiwxOV0pLHQocixbMiwyMF0pLHQocixbMiwyMV0pLHsyODpbMSwzN119LHQocixbMiwyM10pLHszNTpbMSwzOF0sMzc6WzEsMzldfSx7MTE6WzEsNDBdfSx7MzM6NDEsNDE6WzEsNDJdfSx7MTE6WzIsNDNdfSx0KHIsWzIsNV0pLHQocixbMiwxN10pLHQocixbMiwxOF0pLHQocixbMiwyMl0pLHQocixbMiwyNl0sezM2OlsxLDQzXSwzNzpbMSw0NF19KSx0KHIsWzIsMzJdLHszNTpbMSw0NV19KSx0KHYsWzIsMjRdKSx7MzE6NDYsNDI6Yn0sezQyOlsyLDQyXX0sdChyLFsyLDI3XSx7Mzc6WzEsNDddfSksdChyLFsyLDI4XSksdChyLFsyLDMwXSx7MzY6WzEsNDhdfSksezExOlsxLDQ5XX0sdChyLFsyLDI5XSksdChyLFsyLDMxXSksdCh2LFsyLDI1XSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDQwXSw2OlsyLDFdLDMzOlsyLDQzXSw0MjpbMiw0Ml19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLGw9MCx1PTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgYj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gdigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PV8mJihfPXYoKSksdz1vW2tdJiZvW2tdW19dKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIrXyk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KGw9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyx1PjAmJnUtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsbCxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx4PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDM5O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw0MDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMzI7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQyO2Nhc2UgNDpyZXR1cm4gNDE7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyMDtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMDpjYXNlIDIwOmNhc2UgMjM6Y2FzZSAyNjpjYXNlIDI5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDExOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztjYXNlIDE1OnJldHVybiAxMTtjYXNlIDE5OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDIxOnJldHVybiAzNztjYXNlIDIyOnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDM1O2Nhc2UgMjc6cmV0dXJuIDM2O2Nhc2UgMjg6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDMwOnJldHVybiAzNDtjYXNlIDMxOnJldHVybiA1O2Nhc2UgMzI6cmV0dXJuIDEyO2Nhc2UgMzM6cmV0dXJuIDEzO2Nhc2UgMzQ6cmV0dXJuIDE0O2Nhc2UgMzU6cmV0dXJuIDE1O2Nhc2UgMzY6cmV0dXJuIDE3O2Nhc2UgMzc6cmV0dXJuIDE2O2Nhc2UgMzg6cmV0dXJuIDE4O2Nhc2UgMzk6cmV0dXJuImRhdGUiO2Nhc2UgNDA6cmV0dXJuIDE5O2Nhc2UgNDE6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQyOnJldHVybiAyNTtjYXNlIDQzOnJldHVybiAyNztjYXNlIDQ0OnJldHVybiAyODtjYXNlIDQ1OnJldHVybiAzMjtjYXNlIDQ2OnJldHVybiA3O2Nhc2UgNDc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzolJSg/IVx7KSpbXlxuXSopL2ksL14oPzpbXlx9XSUlKlteXG5dKikvaSwvXig/OiUlKlteXG5dKltcbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdWRlc1xzW14jXG47XSspL2ksL14oPzpleGNsdWRlc1xzW14jXG47XSspL2ksL14oPzp0b2RheU1hcmtlclxzW15cbjtdKykvaSwvXig/OlxkXGRcZFxkLVxkXGQtXGRcZFxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTAsMTFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls2XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMywyNCwyNV0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMjAsMjFdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyOSwzMF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDcsOSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMiwyOCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGsoKXt0aGlzLnl5PXt9fXJldHVybiBfLmxleGVyPXgsay5wcm90b3R5cGU9XyxfLlBhcnNlcj1rLG5ldyBrfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oNjg3OCkucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSwyNTUzOih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw0XSxuPVsxLDddLHI9WzEsNV0saT1bMSw5XSxhPVsxLDZdLG89WzIsNl0scz1bMSwxNl0sYz1bNiw4LDE0LDIwLDIyLDI0LDI1LDI3LDI5LDMyLDM1LDM5LDQ5LDUzXSxsPVs4LDE0LDIwLDIyLDI0LDI1LDI3LDI5LDMyLDM1LDM5XSx1PVs4LDEzLDE0LDIwLDIyLDI0LDI1LDI3LDI5LDMyLDM1LDM5XSxoPVsxLDI2XSxmPVs2LDgsMTQsNDksNTNdLGQ9WzgsMTQsNTNdLHA9WzEsNjRdLGc9WzEsNjVdLHk9WzEsNjZdLG09WzgsMTQsMzMsMzgsNDEsNTNdLGI9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LEdHOjYsZG9jdW1lbnQ6NyxFT0Y6OCwiOiI6OSxESVI6MTAsb3B0aW9uczoxMSxib2R5OjEyLE9QVDoxMyxOTDoxNCxsaW5lOjE1LHN0YXRlbWVudDoxNixjb21taXRTdGF0ZW1lbnQ6MTcsbWVyZ2VTdGF0ZW1lbnQ6MTgsY2hlcnJ5UGlja1N0YXRlbWVudDoxOSxhY2NfdGl0bGU6MjAsYWNjX3RpdGxlX3ZhbHVlOjIxLGFjY19kZXNjcjoyMixhY2NfZGVzY3JfdmFsdWU6MjMsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyNCxzZWN0aW9uOjI1LGJyYW5jaFN0YXRlbWVudDoyNixDSEVDS09VVDoyNyxJRDoyOCxCUkFOQ0g6MjksT1JERVI6MzAsTlVNOjMxLENIRVJSWV9QSUNLOjMyLENPTU1JVF9JRDozMyxTVFI6MzQsTUVSR0U6MzUsQ09NTUlUX1RZUEU6MzYsY29tbWl0VHlwZTozNyxDT01NSVRfVEFHOjM4LENPTU1JVDozOSxjb21taXRfYXJnOjQwLENPTU1JVF9NU0c6NDEsTk9STUFMOjQyLFJFVkVSU0U6NDMsSElHSExJR0hUOjQ0LG9wZW5EaXJlY3RpdmU6NDUsdHlwZURpcmVjdGl2ZTo0NixjbG9zZURpcmVjdGl2ZTo0NyxhcmdEaXJlY3RpdmU6NDgsb3Blbl9kaXJlY3RpdmU6NDksdHlwZV9kaXJlY3RpdmU6NTAsYXJnX2RpcmVjdGl2ZTo1MSxjbG9zZV9kaXJlY3RpdmU6NTIsIjsiOjUzLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJHRyIsODoiRU9GIiw5OiI6IiwxMDoiRElSIiwxMzoiT1BUIiwxNDoiTkwiLDIwOiJhY2NfdGl0bGUiLDIxOiJhY2NfdGl0bGVfdmFsdWUiLDIyOiJhY2NfZGVzY3IiLDIzOiJhY2NfZGVzY3JfdmFsdWUiLDI0OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNToic2VjdGlvbiIsMjc6IkNIRUNLT1VUIiwyODoiSUQiLDI5OiJCUkFOQ0giLDMwOiJPUkRFUiIsMzE6Ik5VTSIsMzI6IkNIRVJSWV9QSUNLIiwzMzoiQ09NTUlUX0lEIiwzNDoiU1RSIiwzNToiTUVSR0UiLDM2OiJDT01NSVRfVFlQRSIsMzg6IkNPTU1JVF9UQUciLDM5OiJDT01NSVQiLDQxOiJDT01NSVRfTVNHIiw0MjoiTk9STUFMIiw0MzoiUkVWRVJTRSIsNDQ6IkhJR0hMSUdIVCIsNDk6Im9wZW5fZGlyZWN0aXZlIiw1MDoidHlwZV9kaXJlY3RpdmUiLDUxOiJhcmdfZGlyZWN0aXZlIiw1MjoiY2xvc2VfZGlyZWN0aXZlIiw1MzoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNywwXSxbNywyXSxbMTEsMl0sWzExLDFdLFsxMiwwXSxbMTIsMl0sWzE1LDJdLFsxNSwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMl0sWzE2LDJdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwyXSxbMjYsMl0sWzI2LDRdLFsxOSwzXSxbMTgsMl0sWzE4LDRdLFsxOCw0XSxbMTgsNF0sWzE4LDZdLFsxOCw2XSxbMTgsNl0sWzE4LDZdLFsxOCw2XSxbMTgsNl0sWzE4LDhdLFsxOCw4XSxbMTgsOF0sWzE4LDhdLFsxOCw4XSxbMTgsOF0sWzE3LDJdLFsxNywzXSxbMTcsM10sWzE3LDVdLFsxNyw1XSxbMTcsM10sWzE3LDVdLFsxNyw1XSxbMTcsNV0sWzE3LDVdLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNywzXSxbMTcsNV0sWzE3LDVdLFsxNyw1XSxbMTcsNV0sWzE3LDVdLFsxNyw1XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsN10sWzE3LDddLFsxNyw3XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbMTcsOV0sWzE3LDldLFsxNyw5XSxbNDAsMF0sWzQwLDFdLFszNywxXSxbMzcsMV0sWzM3LDFdLFs1LDNdLFs1LDVdLFs0NSwxXSxbNDYsMV0sWzQ4LDFdLFs0NywxXSxbNCwxXSxbNCwxXSxbNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDM6cmV0dXJuIGFbc107Y2FzZSA0OnJldHVybiBhW3MtMV07Y2FzZSA1OnJldHVybiByLnNldERpcmVjdGlvbihhW3MtM10pLGFbcy0xXTtjYXNlIDc6ci5zZXRPcHRpb25zKGFbcy0xXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA4OmFbcy0xXSs9YVtzXSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDEyOnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTg6Y2FzZSAxOTp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMjA6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAyMjpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMjM6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAyNDpyLmJyYW5jaChhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyNTpyLmNoZXJyeVBpY2soYVtzXSk7YnJlYWs7Y2FzZSAyNjpyLm1lcmdlKGFbc10sIiIsIiIsIiIpO2JyZWFrO2Nhc2UgMjc6ci5tZXJnZShhW3MtMl0sYVtzXSwiIiwiIik7YnJlYWs7Y2FzZSAyODpyLm1lcmdlKGFbcy0yXSwiIixhW3NdLCIiKTticmVhaztjYXNlIDI5OnIubWVyZ2UoYVtzLTJdLCIiLCIiLGFbc10pO2JyZWFrO2Nhc2UgMzA6ci5tZXJnZShhW3MtNF0sYVtzXSwiIixhW3MtMl0pO2JyZWFrO2Nhc2UgMzE6ci5tZXJnZShhW3MtNF0sIiIsYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzI6ci5tZXJnZShhW3MtNF0sIiIsYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgMzM6ci5tZXJnZShhW3MtNF0sYVtzLTJdLGFbc10sIiIpO2JyZWFrO2Nhc2UgMzQ6ci5tZXJnZShhW3MtNF0sYVtzLTJdLCIiLGFbc10pO2JyZWFrO2Nhc2UgMzU6ci5tZXJnZShhW3MtNF0sYVtzXSxhW3MtMl0sIiIpO2JyZWFrO2Nhc2UgMzY6ci5tZXJnZShhW3MtNl0sYVtzLTRdLGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDM3OnIubWVyZ2UoYVtzLTZdLGFbc10sYVtzLTRdLGFbcy0yXSk7YnJlYWs7Y2FzZSAzODpyLm1lcmdlKGFbcy02XSxhW3MtNF0sYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzk6ci5tZXJnZShhW3MtNl0sYVtzLTJdLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDQwOnIubWVyZ2UoYVtzLTZdLGFbc10sYVtzLTJdLGFbcy00XSk7YnJlYWs7Y2FzZSA0MTpyLm1lcmdlKGFbcy02XSxhW3MtMl0sYVtzXSxhW3MtNF0pO2JyZWFrO2Nhc2UgNDI6ci5jb21taXQoYVtzXSk7YnJlYWs7Y2FzZSA0MzpyLmNvbW1pdCgiIiwiIixyLmNvbW1pdFR5cGUuTk9STUFMLGFbc10pO2JyZWFrO2Nhc2UgNDQ6ci5jb21taXQoIiIsIiIsYVtzXSwiIik7YnJlYWs7Y2FzZSA0NTpyLmNvbW1pdCgiIiwiIixhW3NdLGFbcy0yXSk7YnJlYWs7Y2FzZSA0NjpyLmNvbW1pdCgiIiwiIixhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA0NzpyLmNvbW1pdCgiIixhW3NdLHIuY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNDg6ci5jb21taXQoIiIsYVtzLTJdLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzXSk7YnJlYWs7Y2FzZSA0OTpyLmNvbW1pdCgiIixhW3NdLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzLTJdKTticmVhaztjYXNlIDUwOnIuY29tbWl0KCIiLGFbcy0yXSxhW3NdLCIiKTticmVhaztjYXNlIDUxOnIuY29tbWl0KCIiLGFbc10sYVtzLTJdLCIiKTticmVhaztjYXNlIDUyOnIuY29tbWl0KCIiLGFbcy00XSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1MzpyLmNvbW1pdCgiIixhW3MtNF0sYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgNTQ6ci5jb21taXQoIiIsYVtzLTJdLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDU1OnIuY29tbWl0KCIiLGFbc10sYVtzLTRdLGFbcy0yXSk7YnJlYWs7Y2FzZSA1NjpyLmNvbW1pdCgiIixhW3NdLGFbcy0yXSxhW3MtNF0pO2JyZWFrO2Nhc2UgNTc6ci5jb21taXQoIiIsYVtzLTJdLGFbc10sYVtzLTRdKTticmVhaztjYXNlIDU4OnIuY29tbWl0KGFbc10sIiIsci5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA1OTpyLmNvbW1pdChhW3NdLCIiLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzLTJdKTticmVhaztjYXNlIDYwOnIuY29tbWl0KGFbcy0yXSwiIixyLmNvbW1pdFR5cGUuTk9STUFMLGFbc10pO2JyZWFrO2Nhc2UgNjE6ci5jb21taXQoYVtzLTJdLCIiLGFbc10sIiIpO2JyZWFrO2Nhc2UgNjI6ci5jb21taXQoYVtzXSwiIixhW3MtMl0sIiIpO2JyZWFrO2Nhc2UgNjM6ci5jb21taXQoYVtzXSxhW3MtMl0sci5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA2NDpyLmNvbW1pdChhW3MtMl0sYVtzXSxyLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY1OnIuY29tbWl0KGFbcy00XSwiIixhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA2NjpyLmNvbW1pdChhW3MtNF0sIiIsYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgNjc6ci5jb21taXQoYVtzLTJdLCIiLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDY4OnIuY29tbWl0KGFbc10sIiIsYVtzLTRdLGFbcy0yXSk7YnJlYWs7Y2FzZSA2OTpyLmNvbW1pdChhW3NdLCIiLGFbcy0yXSxhW3MtNF0pO2JyZWFrO2Nhc2UgNzA6ci5jb21taXQoYVtzLTJdLCIiLGFbc10sYVtzLTRdKTticmVhaztjYXNlIDcxOnIuY29tbWl0KGFbcy00XSxhW3NdLGFbcy0yXSwiIik7YnJlYWs7Y2FzZSA3MjpyLmNvbW1pdChhW3MtNF0sYVtzLTJdLGFbc10sIiIpO2JyZWFrO2Nhc2UgNzM6ci5jb21taXQoYVtzLTJdLGFbc10sYVtzLTRdLCIiKTticmVhaztjYXNlIDc0OnIuY29tbWl0KGFbc10sYVtzLTJdLGFbcy00XSwiIik7YnJlYWs7Y2FzZSA3NTpyLmNvbW1pdChhW3NdLGFbcy00XSxhW3MtMl0sIiIpO2JyZWFrO2Nhc2UgNzY6ci5jb21taXQoYVtzLTJdLGFbcy00XSxhW3NdLCIiKTticmVhaztjYXNlIDc3OnIuY29tbWl0KGFbcy00XSxhW3NdLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzLTJdKTticmVhaztjYXNlIDc4OnIuY29tbWl0KGFbcy00XSxhW3MtMl0sci5jb21taXRUeXBlLk5PUk1BTCxhW3NdKTticmVhaztjYXNlIDc5OnIuY29tbWl0KGFbcy0yXSxhW3NdLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzLTRdKTticmVhaztjYXNlIDgwOnIuY29tbWl0KGFbc10sYVtzLTJdLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzLTRdKTticmVhaztjYXNlIDgxOnIuY29tbWl0KGFbc10sYVtzLTRdLHIuY29tbWl0VHlwZS5OT1JNQUwsYVtzLTJdKTticmVhaztjYXNlIDgyOnIuY29tbWl0KGFbcy0yXSxhW3MtNF0sci5jb21taXRUeXBlLk5PUk1BTCxhW3NdKTticmVhaztjYXNlIDgzOnIuY29tbWl0KGFbcy02XSxhW3MtNF0sYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgODQ6ci5jb21taXQoYVtzLTZdLGFbcy00XSxhW3NdLGFbcy0yXSk7YnJlYWs7Y2FzZSA4NTpyLmNvbW1pdChhW3MtNl0sYVtzLTJdLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDg2OnIuY29tbWl0KGFbcy02XSxhW3NdLGFbcy00XSxhW3MtMl0pO2JyZWFrO2Nhc2UgODc6ci5jb21taXQoYVtzLTZdLGFbcy0yXSxhW3NdLGFbcy00XSk7YnJlYWs7Y2FzZSA4ODpyLmNvbW1pdChhW3MtNl0sYVtzXSxhW3MtMl0sYVtzLTRdKTticmVhaztjYXNlIDg5OnIuY29tbWl0KGFbcy00XSxhW3MtNl0sYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgOTA6ci5jb21taXQoYVtzLTRdLGFbcy02XSxhW3NdLGFbcy0yXSk7YnJlYWs7Y2FzZSA5MTpyLmNvbW1pdChhW3MtMl0sYVtzLTZdLGFbcy00XSxhW3NdKTticmVhaztjYXNlIDkyOnIuY29tbWl0KGFbc10sYVtzLTZdLGFbcy00XSxhW3MtMl0pO2JyZWFrO2Nhc2UgOTM6ci5jb21taXQoYVtzLTJdLGFbcy02XSxhW3NdLGFbcy00XSk7YnJlYWs7Y2FzZSA5NDpyLmNvbW1pdChhW3NdLGFbcy02XSxhW3MtMl0sYVtzLTRdKTticmVhaztjYXNlIDk1OnIuY29tbWl0KGFbc10sYVtzLTRdLGFbcy0yXSxhW3MtNl0pO2JyZWFrO2Nhc2UgOTY6ci5jb21taXQoYVtzLTJdLGFbcy00XSxhW3NdLGFbcy02XSk7YnJlYWs7Y2FzZSA5NzpyLmNvbW1pdChhW3NdLGFbcy0yXSxhW3MtNF0sYVtzLTZdKTticmVhaztjYXNlIDk4OnIuY29tbWl0KGFbcy0yXSxhW3NdLGFbcy00XSxhW3MtNl0pO2JyZWFrO2Nhc2UgOTk6ci5jb21taXQoYVtzLTRdLGFbcy0yXSxhW3NdLGFbcy02XSk7YnJlYWs7Y2FzZSAxMDA6ci5jb21taXQoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy02XSk7YnJlYWs7Y2FzZSAxMDE6ci5jb21taXQoYVtzLTJdLGFbcy00XSxhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDI6ci5jb21taXQoYVtzXSxhW3MtNF0sYVtzLTZdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMDM6ci5jb21taXQoYVtzLTJdLGFbc10sYVtzLTZdLGFbcy00XSk7YnJlYWs7Y2FzZSAxMDQ6ci5jb21taXQoYVtzXSxhW3MtMl0sYVtzLTZdLGFbcy00XSk7YnJlYWs7Y2FzZSAxMDU6ci5jb21taXQoYVtzLTRdLGFbcy0yXSxhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDY6ci5jb21taXQoYVtzLTRdLGFbc10sYVtzLTZdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMDc6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTA4OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTA5OnRoaXMuJD1yLmNvbW1pdFR5cGUuTk9STUFMO2JyZWFrO2Nhc2UgMTEwOnRoaXMuJD1yLmNvbW1pdFR5cGUuUkVWRVJTRTticmVhaztjYXNlIDExMTp0aGlzLiQ9ci5jb21taXRUeXBlLkhJR0hMSUdIVDticmVhaztjYXNlIDExNDpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTE1OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDExNjphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTE3OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdpdEdyYXBoIil9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6ZSw4Om4sMTQ6ciw0NTo4LDQ5OmksNTM6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSw4Om4sMTQ6ciw0NTo4LDQ5OmksNTM6YX0sezM6MTEsNDoyLDU6Myw2OmUsODpuLDE0OnIsNDU6OCw0OTppLDUzOmF9LHs3OjEyLDg6byw5OlsxLDEzXSwxMDpbMSwxNF0sMTE6MTUsMTQ6c30sdChjLFsyLDExOF0pLHQoYyxbMiwxMTldKSx0KGMsWzIsMTIwXSksezQ2OjE3LDUwOlsxLDE4XX0sezUwOlsyLDExNF19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezg6WzEsMTldfSx7NzoyMCw4Om8sMTE6MTUsMTQ6c30sezk6WzEsMjFdfSx0KGwsWzIsMTBdLHsxMjoyMiwxMzpbMSwyM119KSx0KHUsWzIsOV0pLHs5OlsxLDI1XSw0NzoyNCw1MjpofSx0KFs5LDUyXSxbMiwxMTVdKSx7MTpbMiwzXX0sezg6WzEsMjddfSx7NzoyOCw4Om8sMTE6MTUsMTQ6c30sezg6WzIsN10sMTQ6WzEsMzFdLDE1OjI5LDE2OjMwLDE3OjMyLDE4OjMzLDE5OjM0LDIwOlsxLDM1XSwyMjpbMSwzNl0sMjQ6WzEsMzddLDI1OlsxLDM4XSwyNjozOSwyNzpbMSw0MF0sMjk6WzEsNDRdLDMyOlsxLDQzXSwzNTpbMSw0Ml0sMzk6WzEsNDFdfSx0KHUsWzIsOF0pLHQoZixbMiwxMTJdKSx7NDg6NDUsNTE6WzEsNDZdfSx0KGYsWzIsMTE3XSksezE6WzIsNF19LHs4OlsxLDQ3XX0sdChsLFsyLDExXSksezQ6NDgsODpuLDE0OnIsNTM6YX0sdChsLFsyLDEzXSksdChkLFsyLDE0XSksdChkLFsyLDE1XSksdChkLFsyLDE2XSksezIxOlsxLDQ5XX0sezIzOlsxLDUwXX0sdChkLFsyLDE5XSksdChkLFsyLDIwXSksdChkLFsyLDIxXSksezI4OlsxLDUxXX0sdChkLFsyLDEwN10sezQwOjUyLDMzOlsxLDU1XSwzNDpbMSw1N10sMzY6WzEsNTRdLDM4OlsxLDUzXSw0MTpbMSw1Nl19KSx7Mjg6WzEsNThdfSx7MzM6WzEsNTldfSx7Mjg6WzEsNjBdfSx7NDc6NjEsNTI6aH0sezUyOlsyLDExNl19LHsxOlsyLDVdfSx0KGwsWzIsMTJdKSx0KGQsWzIsMTddKSx0KGQsWzIsMThdKSx0KGQsWzIsMjJdKSx0KGQsWzIsNDJdKSx7MzQ6WzEsNjJdfSx7Mzc6NjMsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSw2N119LHszNDpbMSw2OF19LHQoZCxbMiwxMDhdKSx0KGQsWzIsMjZdLHszMzpbMSw2OV0sMzY6WzEsNzBdLDM4OlsxLDcxXX0pLHszNDpbMSw3Ml19LHQoZCxbMiwyM10sezMwOlsxLDczXX0pLHQoZixbMiwxMTNdKSx0KGQsWzIsNDNdLHszMzpbMSw3NV0sMzY6WzEsNzRdLDQxOlsxLDc2XX0pLHQoZCxbMiw0NF0sezMzOlsxLDc4XSwzODpbMSw3N10sNDE6WzEsNzldfSksdChtLFsyLDEwOV0pLHQobSxbMiwxMTBdKSx0KG0sWzIsMTExXSksdChkLFsyLDQ3XSx7MzY6WzEsODFdLDM4OlsxLDgwXSw0MTpbMSw4Ml19KSx0KGQsWzIsNThdLHszMzpbMSw4NV0sMzY6WzEsODRdLDM4OlsxLDgzXX0pLHszNDpbMSw4Nl19LHszNzo4Nyw0MjpwLDQzOmcsNDQ6eX0sezM0OlsxLDg4XX0sdChkLFsyLDI1XSksezMxOlsxLDg5XX0sezM3OjkwLDQyOnAsNDM6Zyw0NDp5fSx7MzQ6WzEsOTFdfSx7MzQ6WzEsOTJdfSx7MzQ6WzEsOTNdfSx7MzQ6WzEsOTRdfSx7MzQ6WzEsOTVdfSx7MzQ6WzEsOTZdfSx7Mzc6OTcsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSw5OF19LHszNDpbMSw5OV19LHszNzoxMDAsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSwxMDFdfSx0KGQsWzIsMjddLHszNjpbMSwxMDJdLDM4OlsxLDEwM119KSx0KGQsWzIsMjhdLHszMzpbMSwxMDVdLDM4OlsxLDEwNF19KSx0KGQsWzIsMjldLHszMzpbMSwxMDZdLDM2OlsxLDEwN119KSx0KGQsWzIsMjRdKSx0KGQsWzIsNDVdLHszMzpbMSwxMDhdLDQxOlsxLDEwOV19KSx0KGQsWzIsNDldLHszNjpbMSwxMTBdLDQxOlsxLDExMV19KSx0KGQsWzIsNTldLHszMzpbMSwxMTNdLDM2OlsxLDExMl19KSx0KGQsWzIsNDZdLHszMzpbMSwxMTRdLDQxOlsxLDExNV19KSx0KGQsWzIsNTFdLHszODpbMSwxMTZdLDQxOlsxLDExN119KSx0KGQsWzIsNjJdLHszMzpbMSwxMTldLDM4OlsxLDExOF19KSx0KGQsWzIsNDhdLHszNjpbMSwxMjBdLDQxOlsxLDEyMV19KSx0KGQsWzIsNTBdLHszODpbMSwxMjJdLDQxOlsxLDEyM119KSx0KGQsWzIsNjNdLHszNjpbMSwxMjRdLDM4OlsxLDEyNV19KSx0KGQsWzIsNjBdLHszMzpbMSwxMjddLDM2OlsxLDEyNl19KSx0KGQsWzIsNjFdLHszMzpbMSwxMjldLDM4OlsxLDEyOF19KSx0KGQsWzIsNjRdLHszNjpbMSwxMzBdLDM4OlsxLDEzMV19KSx7Mzc6MTMyLDQyOnAsNDM6Zyw0NDp5fSx7MzQ6WzEsMTMzXX0sezM0OlsxLDEzNF19LHszNDpbMSwxMzVdfSx7MzQ6WzEsMTM2XX0sezM3OjEzNyw0MjpwLDQzOmcsNDQ6eX0sezM0OlsxLDEzOF19LHszNDpbMSwxMzldfSx7Mzc6MTQwLDQyOnAsNDM6Zyw0NDp5fSx7MzQ6WzEsMTQxXX0sezM3OjE0Miw0MjpwLDQzOmcsNDQ6eX0sezM0OlsxLDE0M119LHszNDpbMSwxNDRdfSx7MzQ6WzEsMTQ1XX0sezM0OlsxLDE0Nl19LHszNDpbMSwxNDddfSx7MzQ6WzEsMTQ4XX0sezM0OlsxLDE0OV19LHszNzoxNTAsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSwxNTFdfSx7MzQ6WzEsMTUyXX0sezM0OlsxLDE1M119LHszNzoxNTQsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSwxNTVdfSx7Mzc6MTU2LDQyOnAsNDM6Zyw0NDp5fSx7MzQ6WzEsMTU3XX0sezM0OlsxLDE1OF19LHszNDpbMSwxNTldfSx7Mzc6MTYwLDQyOnAsNDM6Zyw0NDp5fSx7MzQ6WzEsMTYxXX0sdChkLFsyLDMzXSx7Mzg6WzEsMTYyXX0pLHQoZCxbMiwzNF0sezM2OlsxLDE2M119KSx0KGQsWzIsMzJdLHszMzpbMSwxNjRdfSksdChkLFsyLDM1XSx7Mzg6WzEsMTY1XX0pLHQoZCxbMiwzMF0sezM2OlsxLDE2Nl19KSx0KGQsWzIsMzFdLHszMzpbMSwxNjddfSksdChkLFsyLDU2XSx7NDE6WzEsMTY4XX0pLHQoZCxbMiw2OV0sezMzOlsxLDE2OV19KSx0KGQsWzIsNTddLHs0MTpbMSwxNzBdfSksdChkLFsyLDgwXSx7MzY6WzEsMTcxXX0pLHQoZCxbMiw3MF0sezMzOlsxLDE3Ml19KSx0KGQsWzIsNzldLHszNjpbMSwxNzNdfSksdChkLFsyLDU1XSx7NDE6WzEsMTc0XX0pLHQoZCxbMiw2OF0sezMzOlsxLDE3NV19KSx0KGQsWzIsNTRdLHs0MTpbMSwxNzZdfSksdChkLFsyLDc0XSx7Mzg6WzEsMTc3XX0pLHQoZCxbMiw2N10sezMzOlsxLDE3OF19KSx0KGQsWzIsNzNdLHszODpbMSwxNzldfSksdChkLFsyLDUzXSx7NDE6WzEsMTgwXX0pLHQoZCxbMiw4MV0sezM2OlsxLDE4MV19KSx0KGQsWzIsNTJdLHs0MTpbMSwxODJdfSksdChkLFsyLDc1XSx7Mzg6WzEsMTgzXX0pLHQoZCxbMiw3Nl0sezM4OlsxLDE4NF19KSx0KGQsWzIsODJdLHszNjpbMSwxODVdfSksdChkLFsyLDY2XSx7MzM6WzEsMTg2XX0pLHQoZCxbMiw3N10sezM2OlsxLDE4N119KSx0KGQsWzIsNjVdLHszMzpbMSwxODhdfSksdChkLFsyLDcxXSx7Mzg6WzEsMTg5XX0pLHQoZCxbMiw3Ml0sezM4OlsxLDE5MF19KSx0KGQsWzIsNzhdLHszNjpbMSwxOTFdfSksezM0OlsxLDE5Ml19LHszNzoxOTMsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSwxOTRdfSx7MzQ6WzEsMTk1XX0sezM3OjE5Niw0MjpwLDQzOmcsNDQ6eX0sezM0OlsxLDE5N119LHszNDpbMSwxOThdfSx7MzQ6WzEsMTk5XX0sezM0OlsxLDIwMF19LHszNzoyMDEsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSwyMDJdfSx7Mzc6MjAzLDQyOnAsNDM6Zyw0NDp5fSx7MzQ6WzEsMjA0XX0sezM0OlsxLDIwNV19LHszNDpbMSwyMDZdfSx7MzQ6WzEsMjA3XX0sezM0OlsxLDIwOF19LHszNDpbMSwyMDldfSx7MzQ6WzEsMjEwXX0sezM3OjIxMSw0MjpwLDQzOmcsNDQ6eX0sezM0OlsxLDIxMl19LHszNDpbMSwyMTNdfSx7MzQ6WzEsMjE0XX0sezM3OjIxNSw0MjpwLDQzOmcsNDQ6eX0sezM0OlsxLDIxNl19LHszNzoyMTcsNDI6cCw0MzpnLDQ0Onl9LHszNDpbMSwyMThdfSx7MzQ6WzEsMjE5XX0sezM0OlsxLDIyMF19LHszNzoyMjEsNDI6cCw0MzpnLDQ0Onl9LHQoZCxbMiwzNl0pLHQoZCxbMiwzOF0pLHQoZCxbMiwzN10pLHQoZCxbMiwzOV0pLHQoZCxbMiw0MV0pLHQoZCxbMiw0MF0pLHQoZCxbMiw5N10pLHQoZCxbMiw5OF0pLHQoZCxbMiw5NV0pLHQoZCxbMiw5Nl0pLHQoZCxbMiwxMDBdKSx0KGQsWzIsOTldKSx0KGQsWzIsMTA0XSksdChkLFsyLDEwM10pLHQoZCxbMiwxMDJdKSx0KGQsWzIsMTAxXSksdChkLFsyLDEwNl0pLHQoZCxbMiwxMDVdKSx0KGQsWzIsOTRdKSx0KGQsWzIsOTNdKSx0KGQsWzIsOTJdKSx0KGQsWzIsOTFdKSx0KGQsWzIsODldKSx0KGQsWzIsOTBdKSx0KGQsWzIsODhdKSx0KGQsWzIsODddKSx0KGQsWzIsODZdKSx0KGQsWzIsODVdKSx0KGQsWzIsODNdKSx0KGQsWzIsODRdKV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMTE0XSwxMDpbMiwxXSwxMTpbMiwyXSwxOTpbMiwzXSwyNzpbMiw0XSw0NjpbMiwxMTZdLDQ3OlsyLDVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCxsPTAsdT0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIGI9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIHYoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT1fJiYoXz12KCkpLHc9b1trXSYmb1trXVtfXSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK18pO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOihsPXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsdT4wJiZ1LS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGImJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLGwsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sdj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw0OTtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNTA7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDk7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDUyO2Nhc2UgNDpyZXR1cm4gNTE7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyMDtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMDpjYXNlIDM1OmNhc2UgMzg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTI6cmV0dXJuIDE0O2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDY7Y2FzZSAxNzpyZXR1cm4gMzk7Y2FzZSAxODpyZXR1cm4gMzM7Y2FzZSAxOTpyZXR1cm4gMzY7Y2FzZSAyMDpyZXR1cm4gNDE7Y2FzZSAyMTpyZXR1cm4gNDI7Y2FzZSAyMjpyZXR1cm4gNDM7Y2FzZSAyMzpyZXR1cm4gNDQ7Y2FzZSAyNDpyZXR1cm4gMzg7Y2FzZSAyNTpyZXR1cm4gMjk7Y2FzZSAyNjpyZXR1cm4gMzA7Y2FzZSAyNzpyZXR1cm4gMzU7Y2FzZSAyODpyZXR1cm4gMzI7Y2FzZSAyOTpyZXR1cm4gMjc7Y2FzZSAzMDpjYXNlIDMxOnJldHVybiAxMDtjYXNlIDMyOnJldHVybiA5O2Nhc2UgMzM6cmV0dXJuIkNBUkVUIjtjYXNlIDM0OnRoaXMuYmVnaW4oIm9wdGlvbnMiKTticmVhaztjYXNlIDM2OnJldHVybiAxMztjYXNlIDM3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIDM0O2Nhc2UgNDA6cmV0dXJuIDMxO2Nhc2UgNDE6cmV0dXJuIDI4O2Nhc2UgNDI6cmV0dXJuIDh9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oihccj9cbikrKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpnaXRHcmFwaFxiKS9pLC9eKD86Y29tbWl0XGIpL2ksL14oPzppZDopL2ksL14oPzp0eXBlOikvaSwvXig/Om1zZzopL2ksL14oPzpOT1JNQUxcYikvaSwvXig/OlJFVkVSU0VcYikvaSwvXig/OkhJR0hMSUdIVFxiKS9pLC9eKD86dGFnOikvaSwvXig/OmJyYW5jaFxiKS9pLC9eKD86b3JkZXI6KS9pLC9eKD86bWVyZ2VcYikvaSwvXig/OmNoZXJyeS1waWNrXGIpL2ksL14oPzpjaGVja291dFxiKS9pLC9eKD86TFJcYikvaSwvXig/OkJUXGIpL2ksL14oPzo6KS9pLC9eKD86XF4pL2ksL14oPzpvcHRpb25zXHI/XG4pL2ksL14oPzpbIFxyXG5cdF0rZW5kXGIpL2ksL14oPzpbXHNcU10rKD89WyBcclxuXHRdK2VuZCkpL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlswLTldKykvaSwvXig/OlthLXpBLVpdWy1fXC4vYS16QS1aMC05XSpbLV9hLXpBLVowLTldKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEwLDExXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNl0saW5jbHVzaXZlOiExfSxjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sb3B0aW9uczp7cnVsZXM6WzM1LDM2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzM4LDM5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNyw5LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDQwLDQxLDQyXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gXygpe3RoaXMueXk9e319cmV0dXJuIGIubGV4ZXI9dixfLnByb3RvdHlwZT1iLGIuUGFyc2VyPV8sbmV3IF99KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4MTgzKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDY3NjU6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVs2LDksMTBdLG49e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7c3dpdGNoKGEubGVuZ3RoLGkpe2Nhc2UgMTpyZXR1cm4gcjtjYXNlIDQ6YnJlYWs7Y2FzZSA2OnIuc2V0SW5mbyghMCl9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0sdChlLFsyLDNdKSx0KGUsWzIsNF0pLHQoZSxbMiw1XSksdChlLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLGw9MCx1PTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgYj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gdigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PV8mJihfPXYoKSksdz1vW2tdJiZvW2tdW19dKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIrXyk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KGw9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyx1PjAmJnUtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsbCxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxyPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIG4ubGV4ZXI9cixpLnByb3RvdHlwZT1uLG4uUGFyc2VyPWksbmV3IGl9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigxNDI4KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDcwNjI6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDRdLG49WzEsNV0scj1bMSw2XSxpPVsxLDddLGE9WzEsOV0sbz1bMSwxMSwxMywxNSwxNywxOSwyMCwyNiwyNywyOCwyOV0scz1bMiw1XSxjPVsxLDYsMTEsMTMsMTUsMTcsMTksMjAsMjYsMjcsMjgsMjldLGw9WzI2LDI3LDI4XSx1PVsyLDhdLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMjBdLHA9WzEsMjFdLGc9WzEsMjJdLHk9WzEsMjNdLG09WzEsMjhdLGI9WzYsMjYsMjcsMjgsMjldLHY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LFBJRTo2LGRvY3VtZW50Ojcsc2hvd0RhdGE6OCxsaW5lOjksc3RhdGVtZW50OjEwLHR4dDoxMSx2YWx1ZToxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLG9wZW5EaXJlY3RpdmU6MjEsdHlwZURpcmVjdGl2ZToyMixjbG9zZURpcmVjdGl2ZToyMywiOiI6MjQsYXJnRGlyZWN0aXZlOjI1LE5FV0xJTkU6MjYsIjsiOjI3LEVPRjoyOCxvcGVuX2RpcmVjdGl2ZToyOSx0eXBlX2RpcmVjdGl2ZTozMCxhcmdfZGlyZWN0aXZlOjMxLGNsb3NlX2RpcmVjdGl2ZTozMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiUElFIiw4OiJzaG93RGF0YSIsMTE6InR4dCIsMTI6InZhbHVlIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyNDoiOiIsMjY6Ik5FV0xJTkUiLDI3OiI7IiwyODoiRU9GIiwyOToib3Blbl9kaXJlY3RpdmUiLDMwOiJ0eXBlX2RpcmVjdGl2ZSIsMzE6ImFyZ19kaXJlY3RpdmUiLDMyOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsM10sWzcsMF0sWzcsMl0sWzksMl0sWzEwLDBdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbNSwzXSxbNSw1XSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIyLDFdLFsyNSwxXSxbMjMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnIuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgOTpyLmFkZFNlY3Rpb24oYVtzLTFdLHIuY2xlYW51cFZhbHVlKGFbc10pKTticmVhaztjYXNlIDEwOnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEyOmNhc2UgMTM6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE0OnIuYWRkU2VjdGlvbihhW3NdLnN1YnN0cig4KSksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDIyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDIzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyNDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjplLDIxOjgsMjY6biwyNzpyLDI4OmksMjk6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSwyMTo4LDI2Om4sMjc6ciwyODppLDI5OmF9LHszOjExLDQ6Miw1OjMsNjplLDIxOjgsMjY6biwyNzpyLDI4OmksMjk6YX0sdChvLHMsezc6MTIsODpbMSwxM119KSx0KGMsWzIsMThdKSx0KGMsWzIsMTldKSx0KGMsWzIsMjBdKSx7MjI6MTQsMzA6WzEsMTVdfSx7MzA6WzIsMjFdfSx7MTpbMiwxXX0sezE6WzIsMl19LHQobCx1LHsyMTo4LDk6MTYsMTA6MTcsNToyNCwxOlsyLDNdLDExOmgsMTM6ZiwxNTpkLDE3OnAsMTk6ZywyMDp5LDI5OmF9KSx0KG8scyx7NzoyNX0pLHsyMzoyNiwyNDpbMSwyN10sMzI6bX0sdChbMjQsMzJdLFsyLDIyXSksdChvLFsyLDZdKSx7NDoyOSwyNjpuLDI3OnIsMjg6aX0sezEyOlsxLDMwXX0sezE0OlsxLDMxXX0sezE2OlsxLDMyXX0sezE4OlsxLDMzXX0sdChsLFsyLDEzXSksdChsLFsyLDE0XSksdChsLFsyLDE1XSksdChsLHUsezIxOjgsOToxNiwxMDoxNyw1OjI0LDE6WzIsNF0sMTE6aCwxMzpmLDE1OmQsMTc6cCwxOTpnLDIwOnksMjk6YX0pLHQoYixbMiwxNl0pLHsyNTozNCwzMTpbMSwzNV19LHQoYixbMiwyNF0pLHQobyxbMiw3XSksdChsLFsyLDldKSx0KGwsWzIsMTBdKSx0KGwsWzIsMTFdKSx0KGwsWzIsMTJdKSx7MjM6MzYsMzI6bX0sezMyOlsyLDIzXX0sdChiLFsyLDE3XSldLGRlZmF1bHRBY3Rpb25zOns5OlsyLDIxXSwxMDpbMiwxXSwxMTpbMiwyXSwzNTpbMiwyM119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLGw9MCx1PTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgYj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gdigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PV8mJihfPXYoKSksdz1vW2tdJiZvW2tdW19dKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIrXyk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KGw9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyx1PjAmJnUtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsbCxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxfPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDI5O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzMDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDMyO2Nhc2UgNDpyZXR1cm4gMzE7Y2FzZSA1OmNhc2UgNjpjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMjY7Y2FzZSAxMDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDExOnJldHVybiB0aGlzLnBvcFN0YXRlKCksInRpdGxlX3ZhbHVlIjtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxNTtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTc7Y2FzZSAxNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTY6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTc6Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxODpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxOTp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDIxOnJldHVybiJ0eHQiO2Nhc2UgMjI6cmV0dXJuIDY7Y2FzZSAyMzpyZXR1cm4gODtjYXNlIDI0OnJldHVybiJ2YWx1ZSI7Y2FzZSAyNTpyZXR1cm4gMjh9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86cGllXGIpL2ksL14oPzpzaG93RGF0YVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTVdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTNdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbMTFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjAsMjFdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDEyLDE0LDE2LDE5LDIyLDIzLDI0LDI1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24geCgpe3RoaXMueXk9e319cmV0dXJuIHYubGV4ZXI9Xyx4LnByb3RvdHlwZT12LHYuUGFyc2VyPXgsbmV3IHh9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big0NTUxKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDMxNzY6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bMSw2XSxpPVsxLDddLGE9WzEsOF0sbz1bNSw2LDgsMTQsMTYsMTgsMTksNDAsNDEsNDIsNDMsNDQsNDUsNTMsNzEsNzJdLHM9WzEsMjJdLGM9WzIsMTNdLGw9WzEsMjZdLHU9WzEsMjddLGg9WzEsMjhdLGY9WzEsMjldLGQ9WzEsMzBdLHA9WzEsMzFdLGc9WzEsMjRdLHk9WzEsMzJdLG09WzEsMzNdLGI9WzEsMzZdLHY9WzcxLDcyXSxfPVs1LDgsMTQsMTYsMTgsMTksNDAsNDEsNDIsNDMsNDQsNDUsNTMsNjAsNjIsNzEsNzJdLHg9WzEsNTZdLGs9WzEsNTddLHc9WzEsNThdLFQ9WzEsNTldLEU9WzEsNjBdLEM9WzEsNjFdLFM9WzEsNjJdLEE9WzYyLDYzXSxNPVsxLDc0XSxOPVsxLDcwXSxPPVsxLDcxXSxEPVsxLDcyXSxCPVsxLDczXSxMPVsxLDc1XSxJPVsxLDc5XSxGPVsxLDgwXSxSPVsxLDc3XSxQPVsxLDc4XSxqPVs1LDgsMTQsMTYsMTgsMTksNDAsNDEsNDIsNDMsNDQsNDUsNTMsNzEsNzJdLHo9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxvcGVuRGlyZWN0aXZlOjksdHlwZURpcmVjdGl2ZToxMCxjbG9zZURpcmVjdGl2ZToxMSwiOiI6MTIsYXJnRGlyZWN0aXZlOjEzLGFjY190aXRsZToxNCxhY2NfdGl0bGVfdmFsdWU6MTUsYWNjX2Rlc2NyOjE2LGFjY19kZXNjcl92YWx1ZToxNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE4LG9wZW5fZGlyZWN0aXZlOjE5LHR5cGVfZGlyZWN0aXZlOjIwLGFyZ19kaXJlY3RpdmU6MjEsY2xvc2VfZGlyZWN0aXZlOjIyLHJlcXVpcmVtZW50RGVmOjIzLGVsZW1lbnREZWY6MjQscmVsYXRpb25zaGlwRGVmOjI1LHJlcXVpcmVtZW50VHlwZToyNixyZXF1aXJlbWVudE5hbWU6MjcsU1RSVUNUX1NUQVJUOjI4LHJlcXVpcmVtZW50Qm9keToyOSxJRDozMCxDT0xPTlNFUDozMSxpZDozMixURVhUOjMzLHRleHQ6MzQsUklTSzozNSxyaXNrTGV2ZWw6MzYsVkVSSUZZTVRIRDozNyx2ZXJpZnlUeXBlOjM4LFNUUlVDVF9TVE9QOjM5LFJFUVVJUkVNRU5UOjQwLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6NDEsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjQyLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjQzLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjQ0LERFU0lHTl9DT05TVFJBSU5UOjQ1LExPV19SSVNLOjQ2LE1FRF9SSVNLOjQ3LEhJR0hfUklTSzo0OCxWRVJJRllfQU5BTFlTSVM6NDksVkVSSUZZX0RFTU9OU1RSQVRJT046NTAsVkVSSUZZX0lOU1BFQ1RJT046NTEsVkVSSUZZX1RFU1Q6NTIsRUxFTUVOVDo1MyxlbGVtZW50TmFtZTo1NCxlbGVtZW50Qm9keTo1NSxUWVBFOjU2LHR5cGU6NTcsRE9DUkVGOjU4LHJlZjo1OSxFTkRfQVJST1dfTDo2MCxyZWxhdGlvbnNoaXA6NjEsTElORTo2MixFTkRfQVJST1dfUjo2MyxDT05UQUlOUzo2NCxDT1BJRVM6NjUsREVSSVZFUzo2NixTQVRJU0ZJRVM6NjcsVkVSSUZJRVM6NjgsUkVGSU5FUzo2OSxUUkFDRVM6NzAsdW5xU3RyaW5nOjcxLHFTdHJpbmc6NzIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDEyOiI6IiwxNDoiYWNjX3RpdGxlIiwxNToiYWNjX3RpdGxlX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyIiwxNzoiYWNjX2Rlc2NyX3ZhbHVlIiwxODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTk6Im9wZW5fZGlyZWN0aXZlIiwyMDoidHlwZV9kaXJlY3RpdmUiLDIxOiJhcmdfZGlyZWN0aXZlIiwyMjoiY2xvc2VfZGlyZWN0aXZlIiwyODoiU1RSVUNUX1NUQVJUIiwzMDoiSUQiLDMxOiJDT0xPTlNFUCIsMzM6IlRFWFQiLDM1OiJSSVNLIiwzNzoiVkVSSUZZTVRIRCIsMzk6IlNUUlVDVF9TVE9QIiw0MDoiUkVRVUlSRU1FTlQiLDQxOiJGVU5DVElPTkFMX1JFUVVJUkVNRU5UIiw0MjoiSU5URVJGQUNFX1JFUVVJUkVNRU5UIiw0MzoiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQiLDQ0OiJQSFlTSUNBTF9SRVFVSVJFTUVOVCIsNDU6IkRFU0lHTl9DT05TVFJBSU5UIiw0NjoiTE9XX1JJU0siLDQ3OiJNRURfUklTSyIsNDg6IkhJR0hfUklTSyIsNDk6IlZFUklGWV9BTkFMWVNJUyIsNTA6IlZFUklGWV9ERU1PTlNUUkFUSU9OIiw1MToiVkVSSUZZX0lOU1BFQ1RJT04iLDUyOiJWRVJJRllfVEVTVCIsNTM6IkVMRU1FTlQiLDU2OiJUWVBFIiw1ODoiRE9DUkVGIiw2MDoiRU5EX0FSUk9XX0wiLDYyOiJMSU5FIiw2MzoiRU5EX0FSUk9XX1IiLDY0OiJDT05UQUlOUyIsNjU6IkNPUElFUyIsNjY6IkRFUklWRVMiLDY3OiJTQVRJU0ZJRVMiLDY4OiJWRVJJRklFUyIsNjk6IlJFRklORVMiLDcwOiJUUkFDRVMiLDcxOiJ1bnFTdHJpbmciLDcyOiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDNdLFs0LDVdLFs0LDJdLFs0LDJdLFs0LDFdLFs5LDFdLFsxMCwxXSxbMTMsMV0sWzExLDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsyMyw1XSxbMjksNV0sWzI5LDVdLFsyOSw1XSxbMjksNV0sWzI5LDJdLFsyOSwxXSxbMjYsMV0sWzI2LDFdLFsyNiwxXSxbMjYsMV0sWzI2LDFdLFsyNiwxXSxbMzYsMV0sWzM2LDFdLFszNiwxXSxbMzgsMV0sWzM4LDFdLFszOCwxXSxbMzgsMV0sWzI0LDVdLFs1NSw1XSxbNTUsNV0sWzU1LDJdLFs1NSwxXSxbMjUsNV0sWzI1LDVdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFs2MSwxXSxbMjcsMV0sWzI3LDFdLFszMiwxXSxbMzIsMV0sWzM0LDFdLFszNCwxXSxbNTQsMV0sWzU0LDFdLFs1NywxXSxbNTcsMV0sWzU5LDFdLFs1OSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA5OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMDpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMTphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTI6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIik7YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxOTpyLmFkZFJlcXVpcmVtZW50KGFbcy0zXSxhW3MtNF0pO2JyZWFrO2Nhc2UgMjA6ci5zZXROZXdSZXFJZChhW3MtMl0pO2JyZWFrO2Nhc2UgMjE6ci5zZXROZXdSZXFUZXh0KGFbcy0yXSk7YnJlYWs7Y2FzZSAyMjpyLnNldE5ld1JlcVJpc2soYVtzLTJdKTticmVhaztjYXNlIDIzOnIuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKGFbcy0yXSk7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI4OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5JTlRFUkZBQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuREVTSUdOX0NPTlNUUkFJTlQ7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9ci5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9ci5SaXNrTGV2ZWwuTUVEX1JJU0s7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9ci5SaXNrTGV2ZWwuSElHSF9SSVNLO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfSU5TUEVDVElPTjticmVhaztjYXNlIDM4OnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSAzOTpyLmFkZEVsZW1lbnQoYVtzLTNdKTticmVhaztjYXNlIDQwOnIuc2V0TmV3RWxlbWVudFR5cGUoYVtzLTJdKTticmVhaztjYXNlIDQxOnIuc2V0TmV3RWxlbWVudERvY1JlZihhW3MtMl0pO2JyZWFrO2Nhc2UgNDQ6ci5hZGRSZWxhdGlvbnNoaXAoYVtzLTJdLGFbc10sYVtzLTRdKTticmVhaztjYXNlIDQ1OnIuYWRkUmVsYXRpb25zaGlwKGFbcy0yXSxhW3MtNF0sYVtzXSk7YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5DT1BJRVM7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLkRFUklWRVM7YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDUwOnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuVkVSSUZJRVM7YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlJFRklORVM7YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlRSQUNFU319LHRhYmxlOlt7MzoxLDQ6Miw2OmUsOTo0LDE0Om4sMTY6ciwxODppLDE5OmF9LHsxOlszXX0sezM6MTAsNDoyLDU6WzEsOV0sNjplLDk6NCwxNDpuLDE2OnIsMTg6aSwxOTphfSx7NTpbMSwxMV19LHsxMDoxMiwyMDpbMSwxM119LHsxNTpbMSwxNF19LHsxNzpbMSwxNV19LHQobyxbMiw4XSksezIwOlsyLDldfSx7MzoxNiw0OjIsNjplLDk6NCwxNDpuLDE2OnIsMTg6aSwxOTphfSx7MTpbMiwyXX0sezQ6MjEsNTpzLDc6MTcsODpjLDk6NCwxNDpuLDE2OnIsMTg6aSwxOTphLDIzOjE4LDI0OjE5LDI1OjIwLDI2OjIzLDMyOjI1LDQwOmwsNDE6dSw0MjpoLDQzOmYsNDQ6ZCw0NTpwLDUzOmcsNzE6eSw3MjptfSx7MTE6MzQsMTI6WzEsMzVdLDIyOmJ9LHQoWzEyLDIyXSxbMiwxMF0pLHQobyxbMiw2XSksdChvLFsyLDddKSx7MTpbMiwxXX0sezg6WzEsMzddfSx7NDoyMSw1OnMsNzozOCw4OmMsOTo0LDE0Om4sMTY6ciwxODppLDE5OmEsMjM6MTgsMjQ6MTksMjU6MjAsMjY6MjMsMzI6MjUsNDA6bCw0MTp1LDQyOmgsNDM6Ziw0NDpkLDQ1OnAsNTM6Zyw3MTp5LDcyOm19LHs0OjIxLDU6cyw3OjM5LDg6Yyw5OjQsMTQ6biwxNjpyLDE4OmksMTk6YSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpsLDQxOnUsNDI6aCw0MzpmLDQ0OmQsNDU6cCw1MzpnLDcxOnksNzI6bX0sezQ6MjEsNTpzLDc6NDAsODpjLDk6NCwxNDpuLDE2OnIsMTg6aSwxOTphLDIzOjE4LDI0OjE5LDI1OjIwLDI2OjIzLDMyOjI1LDQwOmwsNDE6dSw0MjpoLDQzOmYsNDQ6ZCw0NTpwLDUzOmcsNzE6eSw3MjptfSx7NDoyMSw1OnMsNzo0MSw4OmMsOTo0LDE0Om4sMTY6ciwxODppLDE5OmEsMjM6MTgsMjQ6MTksMjU6MjAsMjY6MjMsMzI6MjUsNDA6bCw0MTp1LDQyOmgsNDM6Ziw0NDpkLDQ1OnAsNTM6Zyw3MTp5LDcyOm19LHs0OjIxLDU6cyw3OjQyLDg6Yyw5OjQsMTQ6biwxNjpyLDE4OmksMTk6YSwyMzoxOCwyNDoxOSwyNToyMCwyNjoyMywzMjoyNSw0MDpsLDQxOnUsNDI6aCw0MzpmLDQ0OmQsNDU6cCw1MzpnLDcxOnksNzI6bX0sezI3OjQzLDcxOlsxLDQ0XSw3MjpbMSw0NV19LHs1NDo0Niw3MTpbMSw0N10sNzI6WzEsNDhdfSx7NjA6WzEsNDldLDYyOlsxLDUwXX0sdCh2LFsyLDI2XSksdCh2LFsyLDI3XSksdCh2LFsyLDI4XSksdCh2LFsyLDI5XSksdCh2LFsyLDMwXSksdCh2LFsyLDMxXSksdChfLFsyLDU1XSksdChfLFsyLDU2XSksdChvLFsyLDRdKSx7MTM6NTEsMjE6WzEsNTJdfSx0KG8sWzIsMTJdKSx7MTpbMiwzXX0sezg6WzIsMTRdfSx7ODpbMiwxNV19LHs4OlsyLDE2XX0sezg6WzIsMTddfSx7ODpbMiwxOF19LHsyODpbMSw1M119LHsyODpbMiw1M119LHsyODpbMiw1NF19LHsyODpbMSw1NF19LHsyODpbMiw1OV19LHsyODpbMiw2MF19LHs2MTo1NSw2NDp4LDY1OmssNjY6dyw2NzpULDY4OkUsNjk6Qyw3MDpTfSx7NjE6NjMsNjQ6eCw2NTprLDY2OncsNjc6VCw2ODpFLDY5OkMsNzA6U30sezExOjY0LDIyOmJ9LHsyMjpbMiwxMV19LHs1OlsxLDY1XX0sezU6WzEsNjZdfSx7NjI6WzEsNjddfSx0KEEsWzIsNDZdKSx0KEEsWzIsNDddKSx0KEEsWzIsNDhdKSx0KEEsWzIsNDldKSx0KEEsWzIsNTBdKSx0KEEsWzIsNTFdKSx0KEEsWzIsNTJdKSx7NjM6WzEsNjhdfSx0KG8sWzIsNV0pLHs1Ok0sMjk6NjksMzA6TiwzMzpPLDM1OkQsMzc6QiwzOTpMfSx7NTpJLDM5OkYsNTU6NzYsNTY6Uiw1ODpQfSx7MzI6ODEsNzE6eSw3MjptfSx7MzI6ODIsNzE6eSw3MjptfSx0KGosWzIsMTldKSx7MzE6WzEsODNdfSx7MzE6WzEsODRdfSx7MzE6WzEsODVdfSx7MzE6WzEsODZdfSx7NTpNLDI5Ojg3LDMwOk4sMzM6TywzNTpELDM3OkIsMzk6TH0sdChqLFsyLDI1XSksdChqLFsyLDM5XSksezMxOlsxLDg4XX0sezMxOlsxLDg5XX0sezU6SSwzOTpGLDU1OjkwLDU2OlIsNTg6UH0sdChqLFsyLDQzXSksdChqLFsyLDQ0XSksdChqLFsyLDQ1XSksezMyOjkxLDcxOnksNzI6bX0sezM0OjkyLDcxOlsxLDkzXSw3MjpbMSw5NF19LHszNjo5NSw0NjpbMSw5Nl0sNDc6WzEsOTddLDQ4OlsxLDk4XX0sezM4Ojk5LDQ5OlsxLDEwMF0sNTA6WzEsMTAxXSw1MTpbMSwxMDJdLDUyOlsxLDEwM119LHQoaixbMiwyNF0pLHs1NzoxMDQsNzE6WzEsMTA1XSw3MjpbMSwxMDZdfSx7NTk6MTA3LDcxOlsxLDEwOF0sNzI6WzEsMTA5XX0sdChqLFsyLDQyXSksezU6WzEsMTEwXX0sezU6WzEsMTExXX0sezU6WzIsNTddfSx7NTpbMiw1OF19LHs1OlsxLDExMl19LHs1OlsyLDMyXX0sezU6WzIsMzNdfSx7NTpbMiwzNF19LHs1OlsxLDExM119LHs1OlsyLDM1XX0sezU6WzIsMzZdfSx7NTpbMiwzN119LHs1OlsyLDM4XX0sezU6WzEsMTE0XX0sezU6WzIsNjFdfSx7NTpbMiw2Ml19LHs1OlsxLDExNV19LHs1OlsyLDYzXX0sezU6WzIsNjRdfSx7NTpNLDI5OjExNiwzMDpOLDMzOk8sMzU6RCwzNzpCLDM5Okx9LHs1Ok0sMjk6MTE3LDMwOk4sMzM6TywzNTpELDM3OkIsMzk6TH0sezU6TSwyOToxMTgsMzA6TiwzMzpPLDM1OkQsMzc6QiwzOTpMfSx7NTpNLDI5OjExOSwzMDpOLDMzOk8sMzU6RCwzNzpCLDM5Okx9LHs1OkksMzk6Riw1NToxMjAsNTY6Uiw1ODpQfSx7NTpJLDM5OkYsNTU6MTIxLDU2OlIsNTg6UH0sdChqLFsyLDIwXSksdChqLFsyLDIxXSksdChqLFsyLDIyXSksdChqLFsyLDIzXSksdChqLFsyLDQwXSksdChqLFsyLDQxXSldLGRlZmF1bHRBY3Rpb25zOns4OlsyLDldLDEwOlsyLDJdLDE2OlsyLDFdLDM3OlsyLDNdLDM4OlsyLDE0XSwzOTpbMiwxNV0sNDA6WzIsMTZdLDQxOlsyLDE3XSw0MjpbMiwxOF0sNDQ6WzIsNTNdLDQ1OlsyLDU0XSw0NzpbMiw1OV0sNDg6WzIsNjBdLDUyOlsyLDExXSw5MzpbMiw1N10sOTQ6WzIsNThdLDk2OlsyLDMyXSw5NzpbMiwzM10sOTg6WzIsMzRdLDEwMDpbMiwzNV0sMTAxOlsyLDM2XSwxMDI6WzIsMzddLDEwMzpbMiwzOF0sMTA1OlsyLDYxXSwxMDY6WzIsNjJdLDEwODpbMiw2M10sMTA5OlsyLDY0XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsbD0wLHU9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciBiPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiB2KCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09XyYmKF89digpKSx3PW9ba10mJm9ba11bX10pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIitfKTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToobD1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLHU+MCYmdS0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxiJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyxsLGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFk9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTk7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDIwO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjI7Y2FzZSA0OnJldHVybiAyMTtjYXNlIDU6cmV0dXJuInRpdGxlIjtjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDE0O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTY7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTpjYXNlIDUzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA1O2Nhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmJyZWFrO2Nhc2UgMTc6cmV0dXJuIDg7Y2FzZSAxODpyZXR1cm4gNjtjYXNlIDE5OnJldHVybiAyODtjYXNlIDIwOnJldHVybiAzOTtjYXNlIDIxOnJldHVybiAzMTtjYXNlIDIyOnJldHVybiAzMDtjYXNlIDIzOnJldHVybiAzMztjYXNlIDI0OnJldHVybiAzNTtjYXNlIDI1OnJldHVybiAzNztjYXNlIDI2OnJldHVybiA0MDtjYXNlIDI3OnJldHVybiA0MTtjYXNlIDI4OnJldHVybiA0MjtjYXNlIDI5OnJldHVybiA0MztjYXNlIDMwOnJldHVybiA0NDtjYXNlIDMxOnJldHVybiA0NTtjYXNlIDMyOnJldHVybiA0NjtjYXNlIDMzOnJldHVybiA0NztjYXNlIDM0OnJldHVybiA0ODtjYXNlIDM1OnJldHVybiA0OTtjYXNlIDM2OnJldHVybiA1MDtjYXNlIDM3OnJldHVybiA1MTtjYXNlIDM4OnJldHVybiA1MjtjYXNlIDM5OnJldHVybiA1MztjYXNlIDQwOnJldHVybiA2NDtjYXNlIDQxOnJldHVybiA2NTtjYXNlIDQyOnJldHVybiA2NjtjYXNlIDQzOnJldHVybiA2NztjYXNlIDQ0OnJldHVybiA2ODtjYXNlIDQ1OnJldHVybiA2OTtjYXNlIDQ2OnJldHVybiA3MDtjYXNlIDQ3OnJldHVybiA1NjtjYXNlIDQ4OnJldHVybiA1ODtjYXNlIDQ5OnJldHVybiA2MDtjYXNlIDUwOnJldHVybiA2MztjYXNlIDUxOnJldHVybiA2MjtjYXNlIDUyOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgNTQ6cmV0dXJuInFTdHJpbmciO2Nhc2UgNTU6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw3MX19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTEsMTJdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOV0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls3XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNTMsNTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTVdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBVKCl7dGhpcy55eT17fX1yZXR1cm4gei5sZXhlcj1ZLFUucHJvdG90eXBlPXosei5QYXJzZXI9VSxuZXcgVX0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDg4MDApLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sNjg3NjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSwzXSxyPVsxLDVdLGk9WzEsN10sYT1bMiw1XSxvPVsxLDE1XSxzPVsxLDE3XSxjPVsxLDE4XSxsPVsxLDE5XSx1PVsxLDIxXSxoPVsxLDIyXSxmPVsxLDIzXSxkPVsxLDI5XSxwPVsxLDMwXSxnPVsxLDMxXSx5PVsxLDMyXSxtPVsxLDMzXSxiPVsxLDM0XSx2PVsxLDM1XSxfPVsxLDM2XSx4PVsxLDM3XSxrPVsxLDM4XSx3PVsxLDM5XSxUPVsxLDQwXSxFPVsxLDQzXSxDPVsxLDQ0XSxTPVsxLDQ1XSxBPVsxLDQ2XSxNPVsxLDQ3XSxOPVsxLDQ4XSxPPVsxLDUxXSxEPVsxLDQsNSwxNiwyMCwyMiwyNSwyNiwzMiwzMywzNCwzNiwzOCwzOSw0MCw0MSw0Miw0Myw0NSw0Nyw0OSw1MCw1MSw1Miw1Myw1OCw1OSw2MCw2MSw2OSw3OV0sQj1bNCw1LDE2LDIwLDIyLDI1LDI2LDMyLDMzLDM0LDM2LDM4LDM5LDQwLDQxLDQyLDQzLDQ1LDQ3LDQ5LDUzLDU4LDU5LDYwLDYxLDY5LDc5XSxMPVs0LDUsMTYsMjAsMjIsMjUsMjYsMzIsMzMsMzQsMzYsMzgsMzksNDAsNDEsNDIsNDMsNDUsNDcsNDksNTIsNTMsNTgsNTksNjAsNjEsNjksNzldLEk9WzQsNSwxNiwyMCwyMiwyNSwyNiwzMiwzMywzNCwzNiwzOCwzOSw0MCw0MSw0Miw0Myw0NSw0Nyw0OSw1MSw1Myw1OCw1OSw2MCw2MSw2OSw3OV0sRj1bNCw1LDE2LDIwLDIyLDI1LDI2LDMyLDMzLDM0LDM2LDM4LDM5LDQwLDQxLDQyLDQzLDQ1LDQ3LDQ5LDUwLDUzLDU4LDU5LDYwLDYxLDY5LDc5XSxSPVs2Nyw2OCw2OV0sUD1bMSwxMjFdLGo9WzEsNCw1LDcsMTYsMjAsMjIsMjUsMjYsMzIsMzMsMzQsMzYsMzgsMzksNDAsNDEsNDIsNDMsNDUsNDcsNDksNTAsNTEsNTIsNTMsNTgsNTksNjAsNjEsNjksNzldLHo9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkVXTElORTo1LGRpcmVjdGl2ZTo2LFNEOjcsZG9jdW1lbnQ6OCxsaW5lOjksc3RhdGVtZW50OjEwLG9wZW5EaXJlY3RpdmU6MTEsdHlwZURpcmVjdGl2ZToxMixjbG9zZURpcmVjdGl2ZToxMywiOiI6MTQsYXJnRGlyZWN0aXZlOjE1LHBhcnRpY2lwYW50OjE2LGFjdG9yOjE3LEFTOjE4LHJlc3RPZkxpbmU6MTkscGFydGljaXBhbnRfYWN0b3I6MjAsc2lnbmFsOjIxLGF1dG9udW1iZXI6MjIsTlVNOjIzLG9mZjoyNCxhY3RpdmF0ZToyNSxkZWFjdGl2YXRlOjI2LG5vdGVfc3RhdGVtZW50OjI3LGxpbmtzX3N0YXRlbWVudDoyOCxsaW5rX3N0YXRlbWVudDoyOSxwcm9wZXJ0aWVzX3N0YXRlbWVudDozMCxkZXRhaWxzX3N0YXRlbWVudDozMSx0aXRsZTozMixsZWdhY3lfdGl0bGU6MzMsYWNjX3RpdGxlOjM0LGFjY190aXRsZV92YWx1ZTozNSxhY2NfZGVzY3I6MzYsYWNjX2Rlc2NyX3ZhbHVlOjM3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzgsbG9vcDozOSxlbmQ6NDAscmVjdDo0MSxvcHQ6NDIsYWx0OjQzLGVsc2Vfc2VjdGlvbnM6NDQscGFyOjQ1LHBhcl9zZWN0aW9uczo0Nixjcml0aWNhbDo0NyxvcHRpb25fc2VjdGlvbnM6NDgsYnJlYWs6NDksb3B0aW9uOjUwLGFuZDo1MSxlbHNlOjUyLG5vdGU6NTMscGxhY2VtZW50OjU0LHRleHQyOjU1LG92ZXI6NTYsYWN0b3JfcGFpcjo1NyxsaW5rczo1OCxsaW5rOjU5LHByb3BlcnRpZXM6NjAsZGV0YWlsczo2MSxzcGFjZUxpc3Q6NjIsIiwiOjYzLGxlZnRfb2Y6NjQscmlnaHRfb2Y6NjUsc2lnbmFsdHlwZTo2NiwiKyI6NjcsIi0iOjY4LEFDVE9SOjY5LFNPTElEX09QRU5fQVJST1c6NzAsRE9UVEVEX09QRU5fQVJST1c6NzEsU09MSURfQVJST1c6NzIsRE9UVEVEX0FSUk9XOjczLFNPTElEX0NST1NTOjc0LERPVFRFRF9DUk9TUzo3NSxTT0xJRF9QT0lOVDo3NixET1RURURfUE9JTlQ6NzcsVFhUOjc4LG9wZW5fZGlyZWN0aXZlOjc5LHR5cGVfZGlyZWN0aXZlOjgwLGFyZ19kaXJlY3RpdmU6ODEsY2xvc2VfZGlyZWN0aXZlOjgyLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkVXTElORSIsNzoiU0QiLDE0OiI6IiwxNjoicGFydGljaXBhbnQiLDE4OiJBUyIsMTk6InJlc3RPZkxpbmUiLDIwOiJwYXJ0aWNpcGFudF9hY3RvciIsMjI6ImF1dG9udW1iZXIiLDIzOiJOVU0iLDI0OiJvZmYiLDI1OiJhY3RpdmF0ZSIsMjY6ImRlYWN0aXZhdGUiLDMyOiJ0aXRsZSIsMzM6ImxlZ2FjeV90aXRsZSIsMzQ6ImFjY190aXRsZSIsMzU6ImFjY190aXRsZV92YWx1ZSIsMzY6ImFjY19kZXNjciIsMzc6ImFjY19kZXNjcl92YWx1ZSIsMzg6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM5OiJsb29wIiw0MDoiZW5kIiw0MToicmVjdCIsNDI6Im9wdCIsNDM6ImFsdCIsNDU6InBhciIsNDc6ImNyaXRpY2FsIiw0OToiYnJlYWsiLDUwOiJvcHRpb24iLDUxOiJhbmQiLDUyOiJlbHNlIiw1Mzoibm90ZSIsNTY6Im92ZXIiLDU4OiJsaW5rcyIsNTk6ImxpbmsiLDYwOiJwcm9wZXJ0aWVzIiw2MToiZGV0YWlscyIsNjM6IiwiLDY0OiJsZWZ0X29mIiw2NToicmlnaHRfb2YiLDY3OiIrIiw2ODoiLSIsNjk6IkFDVE9SIiw3MDoiU09MSURfT1BFTl9BUlJPVyIsNzE6IkRPVFRFRF9PUEVOX0FSUk9XIiw3MjoiU09MSURfQVJST1ciLDczOiJET1RURURfQVJST1ciLDc0OiJTT0xJRF9DUk9TUyIsNzU6IkRPVFRFRF9DUk9TUyIsNzY6IlNPTElEX1BPSU5UIiw3NzoiRE9UVEVEX1BPSU5UIiw3ODoiVFhUIiw3OToib3Blbl9kaXJlY3RpdmUiLDgwOiJ0eXBlX2RpcmVjdGl2ZSIsODE6ImFyZ19kaXJlY3RpdmUiLDgyOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsMl0sWzgsMF0sWzgsMl0sWzksMl0sWzksMV0sWzksMV0sWzYsNF0sWzYsNl0sWzEwLDVdLFsxMCwzXSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsNF0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbNDgsMV0sWzQ4LDRdLFs0NiwxXSxbNDYsNF0sWzQ0LDFdLFs0NCw0XSxbMjcsNF0sWzI3LDRdLFsyOCwzXSxbMjksM10sWzMwLDNdLFszMSwzXSxbNjIsMl0sWzYyLDFdLFs1NywzXSxbNTcsMV0sWzU0LDFdLFs1NCwxXSxbMjEsNV0sWzIxLDVdLFsyMSw0XSxbMTcsMV0sWzY2LDFdLFs2NiwxXSxbNjYsMV0sWzY2LDFdLFs2NiwxXSxbNjYsMV0sWzY2LDFdLFs2NiwxXSxbNTUsMV0sWzExLDFdLFsxMiwxXSxbMTUsMV0sWzEzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4gci5hcHBseShhW3NdKSxhW3NdO2Nhc2UgNTpjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6Y2FzZSA1Njp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDEyOmFbcy0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsYVtzLTNdLmRlc2NyaXB0aW9uPXIucGFyc2VNZXNzYWdlKGFbcy0xXSksdGhpcy4kPWFbcy0zXTticmVhaztjYXNlIDEzOmFbcy0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDE0OmFbcy0zXS50eXBlPSJhZGRBY3RvciIsYVtzLTNdLmRlc2NyaXB0aW9uPXIucGFyc2VNZXNzYWdlKGFbcy0xXSksdGhpcy4kPWFbcy0zXTticmVhaztjYXNlIDE1OmFbcy0xXS50eXBlPSJhZGRBY3RvciIsdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDE3OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoYVtzLTJdKSxzZXF1ZW5jZUluZGV4U3RlcDpOdW1iZXIoYVtzLTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihhW3MtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiExLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIwOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIxOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6YVtzLTFdfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjphW3MtMV19O2JyZWFrO2Nhc2UgMjg6ci5zZXREaWFncmFtVGl0bGUoYVtzXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1hW3NdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDI5OnIuc2V0RGlhZ3JhbVRpdGxlKGFbc10uc3Vic3RyaW5nKDcpKSx0aGlzLiQ9YVtzXS5zdWJzdHJpbmcoNyk7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzM6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuTE9PUF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDphW3MtMl0sc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM0OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzU6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAzNjphW3MtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzc6YVtzLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM4OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJjcml0aWNhbFN0YXJ0Iixjcml0aWNhbFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToiY3JpdGljYWxFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMzk6YVtzLTFdLnVuc2hpZnQoe3R5cGU6ImJyZWFrU3RhcnQiLGJyZWFrVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5CUkVBS19TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJicmVha0VuZCIsb3B0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5CUkVBS19FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPWFbcy0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OfSxhW3NdXSk7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfQU5EfSxhW3NdXSk7YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX0VMU0V9LGFbc11dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6YVtzLTJdLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDQ4OmFbcy0yXT1bXS5jb25jYXQoYVtzLTFdLGFbcy0xXSkuc2xpY2UoMCwyKSxhW3MtMl1bMF09YVtzLTJdWzBdLmFjdG9yLGFbcy0yXVsxXT1hW3MtMl1bMV0uYWN0b3IsdGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpyLlBMQUNFTUVOVC5PVkVSLGFjdG9yOmFbcy0yXS5zbGljZSgwLDIpLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZExpbmtzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkQUxpbmsiLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDUxOnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGRQcm9wZXJ0aWVzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkRGV0YWlscyIsYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVthW3MtMl0sYVtzXV07YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9ci5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPXIuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9W2Fbcy00XSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTRdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0zXSxtc2c6YVtzXX0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX1dO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy00XX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVthW3MtM10sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy0zXS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtMl0sbXNnOmFbc119XTticmVhaztjYXNlIDYyOnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOmFbc119O2JyZWFrO2Nhc2UgNjM6dGhpcy4kPXIuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDY0OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9PUEVOO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPXIuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9DUk9TUzticmVhaztjYXNlIDY4OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDY5OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX1BPSU5UO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPXIucGFyc2VNZXNzYWdlKGFbc10udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWs7Y2FzZSA3MjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzM6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzQ6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDc1OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInNlcXVlbmNlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw3OTppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDExOjYsNzk6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw3OTppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMTE6Niw3OTppfSx0KFsxLDQsNSwxNiwyMCwyMiwyNSwyNiwzMiwzMywzNCwzNiwzOCwzOSw0MSw0Miw0Myw0NSw0Nyw0OSw1Myw1OCw1OSw2MCw2MSw2OSw3OV0sYSx7ODoxMX0pLHsxMjoxMiw4MDpbMSwxM119LHs4MDpbMiw3Ml19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjo0MSw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzo0MiwyMDpsLDIxOjIwLDIyOnUsMjU6aCwyNjpmLDI3OjI0LDI4OjI1LDI5OjI2LDMwOjI3LDMxOjI4LDMyOmQsMzM6cCwzNDpnLDM2OnksMzg6bSwzOTpiLDQxOnYsNDI6Xyw0Mzp4LDQ1OmssNDc6dyw0OTpULDUzOkUsNTg6Qyw1OTpTLDYwOkEsNjE6TSw2OTpOLDc5Oml9LHsxMzo0OSwxNDpbMSw1MF0sODI6T30sdChbMTQsODJdLFsyLDczXSksdChELFsyLDZdKSx7Njo0MSwxMDo1MiwxMTo2LDE2OmMsMTc6NDIsMjA6bCwyMToyMCwyMjp1LDI1OmgsMjY6ZiwyNzoyNCwyODoyNSwyOToyNiwzMDoyNywzMToyOCwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6Yiw0MTp2LDQyOl8sNDM6eCw0NTprLDQ3OncsNDk6VCw1MzpFLDU4OkMsNTk6Uyw2MDpBLDYxOk0sNjk6Tiw3OTppfSx0KEQsWzIsOF0pLHQoRCxbMiw5XSksezE3OjUzLDY5Ok59LHsxNzo1NCw2OTpOfSx7NTpbMSw1NV19LHs1OlsxLDU4XSwyMzpbMSw1Nl0sMjQ6WzEsNTddfSx7MTc6NTksNjk6Tn0sezE3OjYwLDY5Ok59LHs1OlsxLDYxXX0sezU6WzEsNjJdfSx7NTpbMSw2M119LHs1OlsxLDY0XX0sezU6WzEsNjVdfSx0KEQsWzIsMjhdKSx0KEQsWzIsMjldKSx7MzU6WzEsNjZdfSx7Mzc6WzEsNjddfSx0KEQsWzIsMzJdKSx7MTk6WzEsNjhdfSx7MTk6WzEsNjldfSx7MTk6WzEsNzBdfSx7MTk6WzEsNzFdfSx7MTk6WzEsNzJdfSx7MTk6WzEsNzNdfSx7MTk6WzEsNzRdfSx0KEQsWzIsNDBdKSx7NjY6NzUsNzA6WzEsNzZdLDcxOlsxLDc3XSw3MjpbMSw3OF0sNzM6WzEsNzldLDc0OlsxLDgwXSw3NTpbMSw4MV0sNzY6WzEsODJdLDc3OlsxLDgzXX0sezU0Ojg0LDU2OlsxLDg1XSw2NDpbMSw4Nl0sNjU6WzEsODddfSx7MTc6ODgsNjk6Tn0sezE3Ojg5LDY5Ok59LHsxNzo5MCw2OTpOfSx7MTc6OTEsNjk6Tn0sdChbNSwxOCw2Myw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OF0sWzIsNjJdKSx7NTpbMSw5Ml19LHsxNTo5Myw4MTpbMSw5NF19LHs1OlsyLDc1XX0sdChELFsyLDddKSx7NTpbMSw5Nl0sMTg6WzEsOTVdfSx7NTpbMSw5OF0sMTg6WzEsOTddfSx0KEQsWzIsMTZdKSx7NTpbMSwxMDBdLDIzOlsxLDk5XX0sezU6WzEsMTAxXX0sdChELFsyLDIwXSksezU6WzEsMTAyXX0sezU6WzEsMTAzXX0sdChELFsyLDIzXSksdChELFsyLDI0XSksdChELFsyLDI1XSksdChELFsyLDI2XSksdChELFsyLDI3XSksdChELFsyLDMwXSksdChELFsyLDMxXSksdChCLGEsezg6MTA0fSksdChCLGEsezg6MTA1fSksdChCLGEsezg6MTA2fSksdChMLGEsezQ0OjEwNyw4OjEwOH0pLHQoSSxhLHs0NjoxMDksODoxMTB9KSx0KEYsYSx7NDg6MTExLDg6MTEyfSksdChCLGEsezg6MTEzfSksezE3OjExNiw2NzpbMSwxMTRdLDY4OlsxLDExNV0sNjk6Tn0sdChSLFsyLDYzXSksdChSLFsyLDY0XSksdChSLFsyLDY1XSksdChSLFsyLDY2XSksdChSLFsyLDY3XSksdChSLFsyLDY4XSksdChSLFsyLDY5XSksdChSLFsyLDcwXSksezE3OjExNyw2OTpOfSx7MTc6MTE5LDU3OjExOCw2OTpOfSx7Njk6WzIsNTddfSx7Njk6WzIsNThdfSx7NTU6MTIwLDc4OlB9LHs1NToxMjIsNzg6UH0sezU1OjEyMyw3ODpQfSx7NTU6MTI0LDc4OlB9LHQoaixbMiwxMF0pLHsxMzoxMjUsODI6T30sezgyOlsyLDc0XX0sezE5OlsxLDEyNl19LHQoRCxbMiwxM10pLHsxOTpbMSwxMjddfSx0KEQsWzIsMTVdKSx7NTpbMSwxMjhdfSx0KEQsWzIsMThdKSx0KEQsWzIsMTldKSx0KEQsWzIsMjFdKSx0KEQsWzIsMjJdKSx7NDpvLDU6cyw2OjQxLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjQyLDIwOmwsMjE6MjAsMjI6dSwyNTpoLDI2OmYsMjc6MjQsMjg6MjUsMjk6MjYsMzA6MjcsMzE6MjgsMzI6ZCwzMzpwLDM0OmcsMzY6eSwzODptLDM5OmIsNDA6WzEsMTI5XSw0MTp2LDQyOl8sNDM6eCw0NTprLDQ3OncsNDk6VCw1MzpFLDU4OkMsNTk6Uyw2MDpBLDYxOk0sNjk6Tiw3OTppfSx7NDpvLDU6cyw2OjQxLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjQyLDIwOmwsMjE6MjAsMjI6dSwyNTpoLDI2OmYsMjc6MjQsMjg6MjUsMjk6MjYsMzA6MjcsMzE6MjgsMzI6ZCwzMzpwLDM0OmcsMzY6eSwzODptLDM5OmIsNDA6WzEsMTMwXSw0MTp2LDQyOl8sNDM6eCw0NTprLDQ3OncsNDk6VCw1MzpFLDU4OkMsNTk6Uyw2MDpBLDYxOk0sNjk6Tiw3OTppfSx7NDpvLDU6cyw2OjQxLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjQyLDIwOmwsMjE6MjAsMjI6dSwyNTpoLDI2OmYsMjc6MjQsMjg6MjUsMjk6MjYsMzA6MjcsMzE6MjgsMzI6ZCwzMzpwLDM0OmcsMzY6eSwzODptLDM5OmIsNDA6WzEsMTMxXSw0MTp2LDQyOl8sNDM6eCw0NTprLDQ3OncsNDk6VCw1MzpFLDU4OkMsNTk6Uyw2MDpBLDYxOk0sNjk6Tiw3OTppfSx7NDA6WzEsMTMyXX0sezQ6byw1OnMsNjo0MSw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzo0MiwyMDpsLDIxOjIwLDIyOnUsMjU6aCwyNjpmLDI3OjI0LDI4OjI1LDI5OjI2LDMwOjI3LDMxOjI4LDMyOmQsMzM6cCwzNDpnLDM2OnksMzg6bSwzOTpiLDQwOlsyLDQ1XSw0MTp2LDQyOl8sNDM6eCw0NTprLDQ3OncsNDk6VCw1MjpbMSwxMzNdLDUzOkUsNTg6Qyw1OTpTLDYwOkEsNjE6TSw2OTpOLDc5Oml9LHs0MDpbMSwxMzRdfSx7NDpvLDU6cyw2OjQxLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjQyLDIwOmwsMjE6MjAsMjI6dSwyNTpoLDI2OmYsMjc6MjQsMjg6MjUsMjk6MjYsMzA6MjcsMzE6MjgsMzI6ZCwzMzpwLDM0OmcsMzY6eSwzODptLDM5OmIsNDA6WzIsNDNdLDQxOnYsNDI6Xyw0Mzp4LDQ1OmssNDc6dyw0OTpULDUxOlsxLDEzNV0sNTM6RSw1ODpDLDU5OlMsNjA6QSw2MTpNLDY5Ok4sNzk6aX0sezQwOlsxLDEzNl19LHs0Om8sNTpzLDY6NDEsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6NDIsMjA6bCwyMToyMCwyMjp1LDI1OmgsMjY6ZiwyNzoyNCwyODoyNSwyOToyNiwzMDoyNywzMToyOCwzMjpkLDMzOnAsMzQ6ZywzNjp5LDM4Om0sMzk6Yiw0MDpbMiw0MV0sNDE6diw0MjpfLDQzOngsNDU6ayw0Nzp3LDQ5OlQsNTA6WzEsMTM3XSw1MzpFLDU4OkMsNTk6Uyw2MDpBLDYxOk0sNjk6Tiw3OTppfSx7NDpvLDU6cyw2OjQxLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjQyLDIwOmwsMjE6MjAsMjI6dSwyNTpoLDI2OmYsMjc6MjQsMjg6MjUsMjk6MjYsMzA6MjcsMzE6MjgsMzI6ZCwzMzpwLDM0OmcsMzY6eSwzODptLDM5OmIsNDA6WzEsMTM4XSw0MTp2LDQyOl8sNDM6eCw0NTprLDQ3OncsNDk6VCw1MzpFLDU4OkMsNTk6Uyw2MDpBLDYxOk0sNjk6Tiw3OTppfSx7MTc6MTM5LDY5Ok59LHsxNzoxNDAsNjk6Tn0sezU1OjE0MSw3ODpQfSx7NTU6MTQyLDc4OlB9LHs1NToxNDMsNzg6UH0sezYzOlsxLDE0NF0sNzg6WzIsNTZdfSx7NTpbMiw0OV19LHs1OlsyLDcxXX0sezU6WzIsNTBdfSx7NTpbMiw1MV19LHs1OlsyLDUyXX0sezU6WzEsMTQ1XX0sezU6WzEsMTQ2XX0sezU6WzEsMTQ3XX0sdChELFsyLDE3XSksdChELFsyLDMzXSksdChELFsyLDM0XSksdChELFsyLDM1XSksdChELFsyLDM2XSksezE5OlsxLDE0OF19LHQoRCxbMiwzN10pLHsxOTpbMSwxNDldfSx0KEQsWzIsMzhdKSx7MTk6WzEsMTUwXX0sdChELFsyLDM5XSksezU1OjE1MSw3ODpQfSx7NTU6MTUyLDc4OlB9LHs1OlsyLDYxXX0sezU6WzIsNDddfSx7NTpbMiw0OF19LHsxNzoxNTMsNjk6Tn0sdChqLFsyLDExXSksdChELFsyLDEyXSksdChELFsyLDE0XSksdChMLGEsezg6MTA4LDQ0OjE1NH0pLHQoSSxhLHs4OjExMCw0NjoxNTV9KSx0KEYsYSx7ODoxMTIsNDg6MTU2fSksezU6WzIsNTldfSx7NTpbMiw2MF19LHs3ODpbMiw1NV19LHs0MDpbMiw0Nl19LHs0MDpbMiw0NF19LHs0MDpbMiw0Ml19XSxkZWZhdWx0QWN0aW9uczp7NzpbMiw3Ml0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDUxOlsyLDc1XSw4NjpbMiw1N10sODc6WzIsNThdLDk0OlsyLDc0XSwxMjA6WzIsNDldLDEyMTpbMiw3MV0sMTIyOlsyLDUwXSwxMjM6WzIsNTFdLDEyNDpbMiw1Ml0sMTQxOlsyLDYxXSwxNDI6WzIsNDddLDE0MzpbMiw0OF0sMTUxOlsyLDU5XSwxNTI6WzIsNjBdLDE1MzpbMiw1NV0sMTU0OlsyLDQ2XSwxNTU6WzIsNDRdLDE1NjpbMiw0Ml19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLGw9MCx1PTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgYj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gdigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PV8mJihfPXYoKSksdz1vW2tdJiZvW2tdW19dKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIrXyk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KGw9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyx1PjAmJnUtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsbCxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxZPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDc5O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw4MDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDgyO2Nhc2UgNDpyZXR1cm4gODE7Y2FzZSA1OmNhc2UgNTI6Y2FzZSA2NTpyZXR1cm4gNTtjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAyMztjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDE2O2Nhc2UgMTM6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjA7Y2FzZSAxNDpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLHRoaXMuYmVnaW4oIkFMSUFTIiksNjk7Y2FzZSAxNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJMSU5FIiksMTg7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1O2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzOTtjYXNlIDE4OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQyO2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MztjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNTI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ1O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw1MTtjYXNlIDI0OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDc7Y2FzZSAyNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDUwO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTtjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7Y2FzZSAyODpyZXR1cm4gNDA7Y2FzZSAyOTpyZXR1cm4gNjQ7Y2FzZSAzMDpyZXR1cm4gNjU7Y2FzZSAzMTpyZXR1cm4gNTg7Y2FzZSAzMjpyZXR1cm4gNTk7Y2FzZSAzMzpyZXR1cm4gNjA7Y2FzZSAzNDpyZXR1cm4gNjE7Y2FzZSAzNTpyZXR1cm4gNTY7Y2FzZSAzNjpyZXR1cm4gNTM7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyNTtjYXNlIDM4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDI2O2Nhc2UgMzk6cmV0dXJuIDMyO2Nhc2UgNDA6cmV0dXJuIDMzO2Nhc2UgNDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM0O2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjtjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0NTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0Njp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0ODpyZXR1cm4gNztjYXNlIDQ5OnJldHVybiAyMjtjYXNlIDUwOnJldHVybiAyNDtjYXNlIDUxOnJldHVybiA2MztjYXNlIDUzOnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksNjk7Y2FzZSA1NDpyZXR1cm4gNzI7Y2FzZSA1NTpyZXR1cm4gNzM7Y2FzZSA1NjpyZXR1cm4gNzA7Y2FzZSA1NzpyZXR1cm4gNzE7Y2FzZSA1ODpyZXR1cm4gNzQ7Y2FzZSA1OTpyZXR1cm4gNzU7Y2FzZSA2MDpyZXR1cm4gNzY7Y2FzZSA2MTpyZXR1cm4gNzc7Y2FzZSA2MjpyZXR1cm4gNzg7Y2FzZSA2MzpyZXR1cm4gNjc7Y2FzZSA2NDpyZXR1cm4gNjg7Y2FzZSA2NjpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzphY3RvclxiKS9pLC9eKD86W15cLT46XG4sO10rPyg/PSgoPyFcbilccykrYXMoPyFcbilcc3xbI1xuO118JCkpL2ksL14oPzphc1xiKS9pLC9eKD86KD86KSkvaSwvXig/Omxvb3BcYikvaSwvXig/OnJlY3RcYikvaSwvXig/Om9wdFxiKS9pLC9eKD86YWx0XGIpL2ksL14oPzplbHNlXGIpL2ksL14oPzpwYXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDYsNDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDJdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxLDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDMsOF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDhdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls3LDgsMTRdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOls3LDgsMTUsMTZdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzcsOCwyN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsOCw5LDEwLDExLDEyLDEzLDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQzLDQ1LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gVSgpe3RoaXMueXk9e319cmV0dXJuIHoubGV4ZXI9WSxVLnByb3RvdHlwZT16LHouUGFyc2VyPVUsbmV3IFV9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigxOTkzKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDM1ODQ6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsM10scj1bMSw1XSxpPVsxLDddLGE9WzIsNV0sbz1bMSwxNV0scz1bMSwxN10sYz1bMSwxOV0sbD1bMSwyMF0sdT1bMSwyMV0saD1bMSwyMl0sZj1bMSwzM10sZD1bMSwyM10scD1bMSwyNF0sZz1bMSwyNV0seT1bMSwyNl0sbT1bMSwyN10sYj1bMSwzMF0sdj1bMSwzMV0sXz1bMSwzMl0seD1bMSwzNV0saz1bMSwzNl0sdz1bMSwzN10sVD1bMSwzOF0sRT1bMSwzNF0sQz1bMSw0MV0sUz1bMSw0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzEsMzMsMzUsNDEsNDIsNDMsNDQsNDcsNTBdLEE9WzEsNCw1LDEyLDEzLDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDMxLDMzLDM1LDQxLDQyLDQzLDQ0LDQ3LDUwXSxNPVsxLDQsNSw3LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDMxLDMzLDM1LDQxLDQyLDQzLDQ0LDQ3LDUwXSxOPVs0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzEsMzMsMzUsNDEsNDIsNDMsNDQsNDcsNTBdLE89e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxkaXJlY3RpdmU6NixTRDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxpZFN0YXRlbWVudDoxMSxERVNDUjoxMiwiLS1ceDNlIjoxMyxISURFX0VNUFRZOjE0LHNjYWxlOjE1LFdJRFRIOjE2LENPTVBPU0lUX1NUQVRFOjE3LFNUUlVDVF9TVEFSVDoxOCxTVFJVQ1RfU1RPUDoxOSxTVEFURV9ERVNDUjoyMCxBUzoyMSxJRDoyMixGT1JLOjIzLEpPSU46MjQsQ0hPSUNFOjI1LENPTkNVUlJFTlQ6MjYsbm90ZToyNyxub3RlUG9zaXRpb246MjgsTk9URV9URVhUOjI5LGRpcmVjdGlvbjozMCxhY2NfdGl0bGU6MzEsYWNjX3RpdGxlX3ZhbHVlOjMyLGFjY19kZXNjcjozMyxhY2NfZGVzY3JfdmFsdWU6MzQsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNSxvcGVuRGlyZWN0aXZlOjM2LHR5cGVEaXJlY3RpdmU6MzcsY2xvc2VEaXJlY3RpdmU6MzgsIjoiOjM5LGFyZ0RpcmVjdGl2ZTo0MCxkaXJlY3Rpb25fdGI6NDEsZGlyZWN0aW9uX2J0OjQyLGRpcmVjdGlvbl9ybDo0MyxkaXJlY3Rpb25fbHI6NDQsZW9sOjQ1LCI7Ijo0NixFREdFX1NUQVRFOjQ3LGxlZnRfb2Y6NDgscmlnaHRfb2Y6NDksb3Blbl9kaXJlY3RpdmU6NTAsdHlwZV9kaXJlY3RpdmU6NTEsYXJnX2RpcmVjdGl2ZTo1MixjbG9zZV9kaXJlY3RpdmU6NTMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNzoiU0QiLDEyOiJERVNDUiIsMTM6Ii0tXHgzZSIsMTQ6IkhJREVfRU1QVFkiLDE1OiJzY2FsZSIsMTY6IldJRFRIIiwxNzoiQ09NUE9TSVRfU1RBVEUiLDE4OiJTVFJVQ1RfU1RBUlQiLDE5OiJTVFJVQ1RfU1RPUCIsMjA6IlNUQVRFX0RFU0NSIiwyMToiQVMiLDIyOiJJRCIsMjM6IkZPUksiLDI0OiJKT0lOIiwyNToiQ0hPSUNFIiwyNjoiQ09OQ1VSUkVOVCIsMjc6Im5vdGUiLDI5OiJOT1RFX1RFWFQiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzOToiOiIsNDE6ImRpcmVjdGlvbl90YiIsNDI6ImRpcmVjdGlvbl9idCIsNDM6ImRpcmVjdGlvbl9ybCIsNDQ6ImRpcmVjdGlvbl9sciIsNDY6IjsiLDQ3OiJFREdFX1NUQVRFIiw0ODoibGVmdF9vZiIsNDk6InJpZ2h0X29mIiw1MDoib3Blbl9kaXJlY3RpdmUiLDUxOiJ0eXBlX2RpcmVjdGl2ZSIsNTI6ImFyZ19kaXJlY3RpdmUiLDUzOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsMl0sWzgsMF0sWzgsMl0sWzksMl0sWzksMV0sWzksMV0sWzEwLDFdLFsxMCwyXSxbMTAsM10sWzEwLDRdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMCw0XSxbMTAsM10sWzEwLDZdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzYsM10sWzYsNV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzMwLDFdLFs0NSwxXSxbNDUsMV0sWzExLDFdLFsxMSwxXSxbMjgsMV0sWzI4LDFdLFszNiwxXSxbMzcsMV0sWzQwLDFdLFszOCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6cmV0dXJuIHIuc2V0Um9vdERvYyhhW3NdKSxhW3NdO2Nhc2UgNTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA2OiJubCIhPWFbc10mJihhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdKTticmVhaztjYXNlIDc6Y2FzZSA4OmNhc2UgMzk6Y2FzZSA0MDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSxsPWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgdT1hW3NdLnNwbGl0KCI6Iik7Yz11WzBdLGw9W2wsdVsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpsfTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOnIuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjphW3MtMl0udHJpbSgpLHRleHQ6YVtzXS50cmltKCl9fTticmVhaztjYXNlIDI4OnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1hW3NdLnRyaW0oKSxyLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMzpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzNDpyLnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzNTpyLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzNjpyLnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSA0MzpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDQ6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDU6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQ2OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInN0YXRlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMzY6Niw1MDppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDM2OjYsNTA6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMzY6Niw1MDppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMzY6Niw1MDppfSx0KFsxLDQsNSwxNCwxNSwxNywyMCwyMiwyMywyNCwyNSwyNiwyNywzMSwzMywzNSw0MSw0Miw0Myw0NCw0Nyw1MF0sYSx7ODoxMX0pLHszNzoxMiw1MTpbMSwxM119LHs1MTpbMiw0M119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6bCwxNzp1LDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6ZywyNjp5LDI3Om0sMzA6MjksMzE6YiwzMzp2LDM1Ol8sMzY6Niw0MTp4LDQyOmssNDM6dyw0NDpULDQ3OkUsNTA6aX0sezM4OjM5LDM5OlsxLDQwXSw1MzpDfSx0KFszOSw1M10sWzIsNDRdKSx0KFMsWzIsNl0pLHs2OjI4LDEwOjQyLDExOjE4LDE0OmMsMTU6bCwxNzp1LDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6ZywyNjp5LDI3Om0sMzA6MjksMzE6YiwzMzp2LDM1Ol8sMzY6Niw0MTp4LDQyOmssNDM6dyw0NDpULDQ3OkUsNTA6aX0sdChTLFsyLDhdKSx0KFMsWzIsOV0pLHQoUyxbMiwxMF0sezEyOlsxLDQzXSwxMzpbMSw0NF19KSx0KFMsWzIsMTRdKSx7MTY6WzEsNDVdfSx0KFMsWzIsMTZdLHsxODpbMSw0Nl19KSx7MjE6WzEsNDddfSx0KFMsWzIsMjBdKSx0KFMsWzIsMjFdKSx0KFMsWzIsMjJdKSx0KFMsWzIsMjNdKSx7Mjg6NDgsMjk6WzEsNDldLDQ4OlsxLDUwXSw0OTpbMSw1MV19LHQoUyxbMiwyNl0pLHQoUyxbMiwyN10pLHszMjpbMSw1Ml19LHszNDpbMSw1M119LHQoUyxbMiwzMF0pLHQoQSxbMiwzOV0pLHQoQSxbMiw0MF0pLHQoUyxbMiwzM10pLHQoUyxbMiwzNF0pLHQoUyxbMiwzNV0pLHQoUyxbMiwzNl0pLHQoTSxbMiwzMV0pLHs0MDo1NCw1MjpbMSw1NV19LHQoTSxbMiw0Nl0pLHQoUyxbMiw3XSksdChTLFsyLDExXSksezExOjU2LDIyOmYsNDc6RX0sdChTLFsyLDE1XSksdChOLGEsezg6NTd9KSx7MjI6WzEsNThdfSx7MjI6WzEsNTldfSx7MjE6WzEsNjBdfSx7MjI6WzIsNDFdfSx7MjI6WzIsNDJdfSx0KFMsWzIsMjhdKSx0KFMsWzIsMjldKSx7Mzg6NjEsNTM6Q30sezUzOlsyLDQ1XX0sdChTLFsyLDEyXSx7MTI6WzEsNjJdfSksezQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6bCwxNzp1LDE5OlsxLDYzXSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OmcsMjY6eSwyNzptLDMwOjI5LDMxOmIsMzM6diwzNTpfLDM2OjYsNDE6eCw0MjprLDQzOncsNDQ6VCw0NzpFLDUwOml9LHQoUyxbMiwxOF0sezE4OlsxLDY0XX0pLHsyOTpbMSw2NV19LHsyMjpbMSw2Nl19LHQoTSxbMiwzMl0pLHQoUyxbMiwxM10pLHQoUyxbMiwxN10pLHQoTixhLHs4OjY3fSksdChTLFsyLDI0XSksdChTLFsyLDI1XSksezQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6bCwxNzp1LDE5OlsxLDY4XSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OmcsMjY6eSwyNzptLDMwOjI5LDMxOmIsMzM6diwzNTpfLDM2OjYsNDE6eCw0MjprLDQzOncsNDQ6VCw0NzpFLDUwOml9LHQoUyxbMiwxOV0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiw0M10sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDUwOlsyLDQxXSw1MTpbMiw0Ml0sNTU6WzIsNDVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCxsPTAsdT0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIGI9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIHYoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT1fJiYoXz12KCkpLHc9b1trXSYmb1trXVtfXSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK18pO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOihsPXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsdT4wJiZ1LS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGImJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLGwsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sRD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpjYXNlIDMzOnJldHVybiA0MTtjYXNlIDE6Y2FzZSAzNDpyZXR1cm4gNDI7Y2FzZSAyOmNhc2UgMzU6cmV0dXJuIDQzO2Nhc2UgMzpjYXNlIDM2OnJldHVybiA0NDtjYXNlIDQ6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNTA7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDUxO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwzOTtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNTM7Y2FzZSA4OnJldHVybiA1MjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgNDY6Y2FzZSA1MjpicmVhaztjYXNlIDExOmNhc2UgNjY6cmV0dXJuIDU7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTU7Y2FzZSAxNzpyZXR1cm4gMTY7Y2FzZSAxODpjYXNlIDI0OmNhc2UgNDA6Y2FzZSA0Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDIzOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDI1OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDI2OnRoaXMucHVzaFN0YXRlKCJTVEFURSIpO2JyZWFrO2Nhc2UgMjc6Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDI4OmNhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAyOTpjYXNlIDMyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNTtjYXNlIDM3OnRoaXMuYmVnaW4oIlNUQVRFX1NUUklORyIpO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgMzk6Y2FzZSA1NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA0MTpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgNDI6cmV0dXJuIDE3O2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTg7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgNDc6cmV0dXJuIHRoaXMuYmVnaW4oIk5PVEUiKSwyNztjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw0ODtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw0OTtjYXNlIDUwOnRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URSIpO2JyZWFrO2Nhc2UgNTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URV9JRCIpLCJBUyI7Y2FzZSA1MzpyZXR1cm4iTk9URV9URVhUIjtjYXNlIDU1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfVEVYVCIpLDIyO2Nhc2UgNTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDI5O2Nhc2UgNTc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjk7Y2FzZSA1ODpjYXNlIDU5OnJldHVybiA3O2Nhc2UgNjA6cmV0dXJuIDE0O2Nhc2UgNjE6cmV0dXJuIDQ3O2Nhc2UgNjI6cmV0dXJuIDIyO2Nhc2UgNjM6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSwxMjtjYXNlIDY0OnJldHVybiAxMztjYXNlIDY1OnJldHVybiAyNjtjYXNlIDY3OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c3RhdGVccyspL2ksL14oPzouKjw8Zm9yaz4+KS9pLC9eKD86Lio8PGpvaW4+PikvaSwvXig/Oi4qPDxjaG9pY2U+PikvaSwvXig/Oi4qXFtcW2ZvcmtcXVxdKS9pLC9eKD86LipcW1xbam9pblxdXF0pL2ksL14oPzouKlxbXFtjaG9pY2VcXVxdKS9pLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OlsiXSkvaSwvXig/OlxzKmFzXHMrKS9pLC9eKD86W15cblx7XSopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5cc1x7XSspL2ksL14oPzpcbikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbNyw4LDEzLDE0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbNiw3LDEzLDE0XSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbNSwxMywxNF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsxMywxNCwyNiwzMywzNCwzNSwzNiw0NSw0Niw0Nyw2MSw2Miw2Myw2NCw2NV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFX0lEOntydWxlczpbNTRdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URTp7cnVsZXM6WzUxLDUyLDUzXSxpbmNsdXNpdmU6ITF9LE5PVEVfVEVYVDp7cnVsZXM6WzU2LDU3XSxpbmNsdXNpdmU6ITF9LE5PVEVfSUQ6e3J1bGVzOls1NV0saW5jbHVzaXZlOiExfSxOT1RFOntydWxlczpbNDgsNDksNTBdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzIyXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzIwXSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOlszOV0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0MCw0MV0saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbMTMsMTQsMjcsMjgsMjksMzAsMzEsMzIsMzcsMzgsNDIsNDMsNDRdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDksMTAsMTEsMTIsMTQsMTUsMTYsMTksMjEsMjMsMjYsNDQsNDcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjYsNjddLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBCKCl7dGhpcy55eT17fX1yZXR1cm4gTy5sZXhlcj1ELEIucHJvdG90eXBlPU8sTy5QYXJzZXI9QixuZXcgQn0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDMwNjkpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sOTc2MzoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSw1XSxyPVs2LDksMTEsMTcsMTgsMjAsMjIsMjMsMjQsMjZdLGk9WzEsMTVdLGE9WzEsMTZdLG89WzEsMTddLHM9WzEsMThdLGM9WzEsMTldLGw9WzEsMjBdLHU9WzEsMjRdLGg9WzQsNiw5LDExLDE3LDE4LDIwLDIyLDIzLDI0LDI2XSxmPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNix0aXRsZToxNyxhY2NfdGl0bGU6MTgsYWNjX3RpdGxlX3ZhbHVlOjE5LGFjY19kZXNjcjoyMCxhY2NfZGVzY3JfdmFsdWU6MjEsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyMixzZWN0aW9uOjIzLHRhc2tOYW1lOjI0LHRhc2tEYXRhOjI1LG9wZW5fZGlyZWN0aXZlOjI2LHR5cGVfZGlyZWN0aXZlOjI3LGFyZ19kaXJlY3RpdmU6MjgsY2xvc2VfZGlyZWN0aXZlOjI5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDE3OiJ0aXRsZSIsMTg6ImFjY190aXRsZSIsMTk6ImFjY190aXRsZV92YWx1ZSIsMjA6ImFjY19kZXNjciIsMjE6ImFjY19kZXNjcl92YWx1ZSIsMjI6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIzOiJzZWN0aW9uIiwyNDoidGFza05hbWUiLDI1OiJ0YXNrRGF0YSIsMjY6Im9wZW5fZGlyZWN0aXZlIiwyNzoidHlwZV9kaXJlY3RpdmUiLDI4OiJhcmdfZGlyZWN0aXZlIiwyOToiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOmNhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMTpyLnNldERpYWdyYW1UaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTI6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEzOmNhc2UgMTQ6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE1OnIuYWRkU2VjdGlvbihhW3NdLnN1YnN0cig4KSksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTY6ci5hZGRUYXNrKGFbcy0xXSxhW3NdKSx0aGlzLiQ9InRhc2siO2JyZWFrO2Nhc2UgMTg6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE5OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDIwOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJqb3VybmV5Iil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsMjY6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDI2Om59LHsxMzo4LDI3OlsxLDldfSx7Mjc6WzIsMThdfSx7NjpbMSwxMF0sNzoyMSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OmksMTg6YSwyMDpvLDIyOnMsMjM6YywyNDpsLDI2Om59LHsxOlsyLDJdfSx7MTQ6MjIsMTU6WzEsMjNdLDI5OnV9LHQoWzE1LDI5XSxbMiwxOV0pLHQocixbMiw4XSx7MTpbMiwxXX0pLHQocixbMiw0XSksezc6MjEsMTA6MjUsMTI6NCwxNzppLDE4OmEsMjA6bywyMjpzLDIzOmMsMjQ6bCwyNjpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDExXSksezE5OlsxLDI2XX0sezIxOlsxLDI3XX0sdChyLFsyLDE0XSksdChyLFsyLDE1XSksezI1OlsxLDI4XX0sdChyLFsyLDE3XSksezExOlsxLDI5XX0sezE2OjMwLDI4OlsxLDMxXX0sezExOlsyLDIxXX0sdChyLFsyLDVdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMTNdKSx0KHIsWzIsMTZdKSx0KGgsWzIsOV0pLHsxNDozMiwyOTp1fSx7Mjk6WzIsMjBdfSx7MTE6WzEsMzNdfSx0KGgsWzIsMTBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMThdLDc6WzIsMl0sMjQ6WzIsMjFdLDMxOlsyLDIwXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsbD0wLHU9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciBiPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiB2KCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09XyYmKF89digpKSx3PW9ba10mJm9ba11bX10pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIitfKTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToobD1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLHU+MCYmdS0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxiJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyxsLGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGQ9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjY7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDI3O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjk7Y2FzZSA0OnJldHVybiAyODtjYXNlIDU6Y2FzZSA2OmNhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDEwOnJldHVybiA0O2Nhc2UgMTE6cmV0dXJuIDE3O2Nhc2UgMTI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDE4O2Nhc2UgMTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyMDtjYXNlIDE1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxNjp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxODpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxOTpyZXR1cm4gMjM7Y2FzZSAyMDpyZXR1cm4gMjQ7Y2FzZSAyMTpyZXR1cm4gMjU7Y2FzZSAyMjpyZXR1cm4gMTU7Y2FzZSAyMzpyZXR1cm4gNjtjYXNlIDI0OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86am91cm5leVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxNywxOF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxNV0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTQsMTYsMTksMjAsMjEsMjIsMjMsMjRdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBwKCl7dGhpcy55eT17fX1yZXR1cm4gZi5sZXhlcj1kLHAucHJvdG90eXBlPWYsZi5QYXJzZXI9cCxuZXcgcH0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDkxNDMpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sNzk2NzoodCxlKT0+eyJ1c2Ugc3RyaWN0IjtlLk49dm9pZCAwO3ZhciBuPS9eKFteXHddKikoamF2YXNjcmlwdHxkYXRhfHZic2NyaXB0KS9pbSxyPS8mIyhcdyspKF5cd3w7KT8vZyxpPS9bXHUwMDAwLVx1MDAxRlx1MDA3Ri1cdTAwOUZcdTIwMDAtXHUyMDBEXHVGRUZGXS9naW0sYT0vXihbXjpdKyk6L2dtLG89WyIuIiwiLyJdO2UuTj1mdW5jdGlvbih0KXt2YXIgZSxzPShlPXR8fCIiLGUucmVwbGFjZShyLChmdW5jdGlvbih0LGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSkpKS5yZXBsYWNlKGksIiIpLnRyaW0oKTtpZighcylyZXR1cm4iYWJvdXQ6YmxhbmsiO2lmKGZ1bmN0aW9uKHQpe3JldHVybiBvLmluZGV4T2YodFswXSk+LTF9KHMpKXJldHVybiBzO3ZhciBjPXMubWF0Y2goYSk7aWYoIWMpcmV0dXJuIHM7dmFyIGw9Y1swXTtyZXR1cm4gbi50ZXN0KGwpPyJhYm91dDpibGFuayI6c319LDM4NDE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmludGVyc2VjdChlKX19LDYxODc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtuLmQoZSx7ZGVmYXVsdDooKT0+ZnV9KTt2YXIgcj1uKDE5NDEpLGk9bi5uKHIpLGE9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LG89e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSxzPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1hW3RdJiYodD1hW3RdKSksby50cmFjZT1mdW5jdGlvbigpe30sby5kZWJ1Zz1mdW5jdGlvbigpe30sby5pbmZvPWZ1bmN0aW9uKCl7fSxvLndhcm49ZnVuY3Rpb24oKXt9LG8uZXJyb3I9ZnVuY3Rpb24oKXt9LG8uZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PWEuZmF0YWwmJihvLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGMoIkZBVEFMIikpKSx0PD1hLmVycm9yJiYoby5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGMoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixjKCJFUlJPUiIpKSksdDw9YS53YXJuJiYoby53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGMoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGMoIldBUk4iKSkpLHQ8PWEuaW5mbyYmKG8uaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxjKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixjKCJJTkZPIikpKSx0PD1hLmRlYnVnJiYoby5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGMoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsYygiREVCVUciKSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPWkoKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfSxsPW4oNzU0MyksdT0iY29tbSIsaD0icnVsZSIsZj0iZGVjbCIsZD1NYXRoLmFicyxwPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC50cmltKCl9ZnVuY3Rpb24geSh0LGUsbil7cmV0dXJuIHQucmVwbGFjZShlLG4pfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gMHx0LmNoYXJDb2RlQXQoZSl9ZnVuY3Rpb24gdih0LGUsbil7cmV0dXJuIHQuc2xpY2UoZSxuKX1mdW5jdGlvbiBfKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiB4KHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGUucHVzaCh0KSx0fWZ1bmN0aW9uIHcodCxlKXtmb3IodmFyIG49IiIscj14KHQpLGk9MDtpPHI7aSsrKW4rPWUodFtpXSxpLHQsZSl8fCIiO3JldHVybiBufWZ1bmN0aW9uIFQodCxlLG4scil7c3dpdGNoKHQudHlwZSl7Y2FzZSJAaW1wb3J0IjpjYXNlIGY6cmV0dXJuIHQucmV0dXJuPXQucmV0dXJufHx0LnZhbHVlO2Nhc2UgdTpyZXR1cm4iIjtjYXNlIkBrZXlmcmFtZXMiOnJldHVybiB0LnJldHVybj10LnZhbHVlKyJ7Iit3KHQuY2hpbGRyZW4scikrIn0iO2Nhc2UgaDp0LnZhbHVlPXQucHJvcHMuam9pbigiLCIpfXJldHVybiBfKG49dyh0LmNoaWxkcmVuLHIpKT90LnJldHVybj10LnZhbHVlKyJ7IituKyJ9IjoiIn1PYmplY3QuYXNzaWduO3ZhciBFPTEsQz0xLFM9MCxBPTAsTT0wLE49IiI7ZnVuY3Rpb24gTyh0LGUsbixyLGksYSxvKXtyZXR1cm57dmFsdWU6dCxyb290OmUscGFyZW50Om4sdHlwZTpyLHByb3BzOmksY2hpbGRyZW46YSxsaW5lOkUsY29sdW1uOkMsbGVuZ3RoOm8scmV0dXJuOiIifX1mdW5jdGlvbiBEKCl7cmV0dXJuIE09QT4wP2IoTiwtLUEpOjAsQy0tLDEwPT09TSYmKEM9MSxFLS0pLE19ZnVuY3Rpb24gQigpe3JldHVybiBNPUE8Uz9iKE4sQSsrKTowLEMrKywxMD09PU0mJihDPTEsRSsrKSxNfWZ1bmN0aW9uIEwoKXtyZXR1cm4gYihOLEEpfWZ1bmN0aW9uIEkoKXtyZXR1cm4gQX1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIHYoTix0LGUpfWZ1bmN0aW9uIFIodCl7c3dpdGNoKHQpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIFAodCl7cmV0dXJuIGcoRihBLTEsWSg5MT09PXQ/dCsyOjQwPT09dD90KzE6dCkpKX1mdW5jdGlvbiBqKHQpe2Zvcig7KE09TCgpKSYmTTwzMzspQigpO3JldHVybiBSKHQpPjJ8fFIoTSk+Mz8iIjoiICJ9ZnVuY3Rpb24geih0LGUpe2Zvcig7LS1lJiZCKCkmJiEoTTw0OHx8TT4xMDJ8fE0+NTcmJk08NjV8fE0+NzAmJk08OTcpOyk7cmV0dXJuIEYodCxJKCkrKGU8NiYmMzI9PUwoKSYmMzI9PUIoKSkpfWZ1bmN0aW9uIFkodCl7Zm9yKDtCKCk7KXN3aXRjaChNKXtjYXNlIHQ6cmV0dXJuIEE7Y2FzZSAzNDpjYXNlIDM5OjM0IT09dCYmMzkhPT10JiZZKE0pO2JyZWFrO2Nhc2UgNDA6NDE9PT10JiZZKHQpO2JyZWFrO2Nhc2UgOTI6QigpfXJldHVybiBBfWZ1bmN0aW9uIFUodCxlKXtmb3IoO0IoKSYmdCtNIT09NTcmJih0K00hPT04NHx8NDchPT1MKCkpOyk7cmV0dXJuIi8qIitGKGUsQS0xKSsiKiIrcCg0Nz09PXQ/dDpCKCkpfWZ1bmN0aW9uICQodCl7Zm9yKDshUihMKCkpOylCKCk7cmV0dXJuIEYodCxBKX1mdW5jdGlvbiBXKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTj0iIix0fShxKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1mdW5jdGlvbih0KXtyZXR1cm4gRT1DPTEsUz1fKE49dCksQT0wLFtdfSh0KSwwLFswXSx0KSl9ZnVuY3Rpb24gcSh0LGUsbixyLGksYSxvLHMsYyl7Zm9yKHZhciBsPTAsdT0wLGg9byxmPTAsZD0wLGc9MCxiPTEsdj0xLHg9MSx3PTAsVD0iIixFPWksQz1hLFM9cixBPVQ7djspc3dpdGNoKGc9dyx3PUIoKSl7Y2FzZSA0MDppZigxMDghPWcmJjU4PT1BLmNoYXJDb2RlQXQoaC0xKSl7LTEhPW0oQSs9eShQKHcpLCImIiwiJlxmIiksIiZcZiIpJiYoeD0tMSk7YnJlYWt9Y2FzZSAzNDpjYXNlIDM5OmNhc2UgOTE6QSs9UCh3KTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6QSs9aihnKTticmVhaztjYXNlIDkyOkErPXooSSgpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goTCgpKXtjYXNlIDQyOmNhc2UgNDc6ayhWKFUoQigpLEkoKSksZSxuKSxjKTticmVhaztkZWZhdWx0OkErPSIvIn1icmVhaztjYXNlIDEyMypiOnNbbCsrXT1fKEEpKng7Y2FzZSAxMjUqYjpjYXNlIDU5OmNhc2UgMDpzd2l0Y2godyl7Y2FzZSAwOmNhc2UgMTI1OnY9MDtjYXNlIDU5K3U6ZD4wJiZfKEEpLWgmJmsoZD4zMj9HKEErIjsiLHIsbixoLTEpOkcoeShBLCIgIiwiIikrIjsiLHIsbixoLTIpLGMpO2JyZWFrO2Nhc2UgNTk6QSs9IjsiO2RlZmF1bHQ6aWYoayhTPUgoQSxlLG4sbCx1LGkscyxULEU9W10sQz1bXSxoKSxhKSwxMjM9PT13KWlmKDA9PT11KXEoQSxlLFMsUyxFLGEsaCxzLEMpO2Vsc2Ugc3dpdGNoKGYpe2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1OnEodCxTLFMsciYmayhIKHQsUyxTLDAsMCxpLHMsVCxpLEU9W10saCksQyksaSxDLGgscyxyP0U6Qyk7YnJlYWs7ZGVmYXVsdDpxKEEsUyxTLFMsWyIiXSxDLDAscyxDKX19bD11PWQ9MCxiPXg9MSxUPUE9IiIsaD1vO2JyZWFrO2Nhc2UgNTg6aD0xK18oQSksZD1nO2RlZmF1bHQ6aWYoYjwxKWlmKDEyMz09dyktLWI7ZWxzZSBpZigxMjU9PXcmJjA9PWIrKyYmMTI1PT1EKCkpY29udGludWU7c3dpdGNoKEErPXAodyksdypiKXtjYXNlIDM4Ong9dT4wPzE6KEErPSJcZiIsLTEpO2JyZWFrO2Nhc2UgNDQ6c1tsKytdPShfKEEpLTEpKngseD0xO2JyZWFrO2Nhc2UgNjQ6NDU9PT1MKCkmJihBKz1QKEIoKSkpLGY9TCgpLHU9aD1fKFQ9QSs9JChJKCkpKSx3Kys7YnJlYWs7Y2FzZSA0NTo0NT09PWcmJjI9PV8oQSkmJihiPTApfX1yZXR1cm4gYX1mdW5jdGlvbiBIKHQsZSxuLHIsaSxhLG8scyxjLGwsdSl7Zm9yKHZhciBmPWktMSxwPTA9PT1pP2E6WyIiXSxtPXgocCksYj0wLF89MCxrPTA7YjxyOysrYilmb3IodmFyIHc9MCxUPXYodCxmKzEsZj1kKF89b1tiXSkpLEU9dDt3PG07Kyt3KShFPWcoXz4wP3Bbd10rIiAiK1Q6eShULC8mXGYvZyxwW3ddKSkpJiYoY1trKytdPUUpO3JldHVybiBPKHQsZSxuLDA9PT1pP2g6cyxjLGwsdSl9ZnVuY3Rpb24gVih0LGUsbil7cmV0dXJuIE8odCxlLG4sdSxwKE0pLHYodCwyLC0yKSwwKX1mdW5jdGlvbiBHKHQsZSxuLHIpe3JldHVybiBPKHQsZSxuLGYsdih0LDAsciksdih0LHIrMSwtMSkscil9Y29uc3QgWD0iOS4xLjciO2Z1bmN0aW9uIFoodCl7cmV0dXJuIFo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LFoodCl9Y29uc3QgUT1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaT1PYmplY3QuYXNzaWduKHtkZXB0aDoyLGNsb2JiZXI6ITF9LHIpLGE9aS5kZXB0aCxvPWkuY2xvYmJlcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIUFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuLHIpfSkpLGUpOkFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX0pKSxlKTp2b2lkIDA9PT1lfHxhPD0wP251bGwhPWUmJiJvYmplY3QiPT09WihlKSYmIm9iamVjdCI9PT1aKG4pP09iamVjdC5hc3NpZ24oZSxuKTpuOih2b2lkIDAhPT1uJiYib2JqZWN0Ij09PVooZSkmJiJvYmplY3QiPT09WihuKSYmT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24ocil7Im9iamVjdCIhPT1aKG5bcl0pfHx2b2lkIDAhPT1lW3JdJiYib2JqZWN0IiE9PVooZVtyXSk/KG98fCJvYmplY3QiIT09WihlW3JdKSYmIm9iamVjdCIhPT1aKG5bcl0pKSYmKGVbcl09bltyXSk6KHZvaWQgMD09PWVbcl0mJihlW3JdPUFycmF5LmlzQXJyYXkobltyXSk/W106e30pLGVbcl09dChlW3JdLG5bcl0se2RlcHRoOmEtMSxjbG9iYmVyOm99KSl9KSksZSl9LEs9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjp0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsZzp0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsYjp0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsaDp0PT50JTM2MCxzOnQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCxsOnQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCxhOnQ9PnQ+PTE/MTp0PDA/MDp0fSx0b0xpbmVhcjp0PT57Y29uc3QgZT10LzI1NTtyZXR1cm4gdD4uMDM5Mjg/TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KTplLzEyLjkyfSxodWUycmdiOih0LGUsbik9PihuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCsoZS10KSooMi8zLW4pKjY6dCksaHNsMnJnYjooe2g6dCxzOmUsbDpufSxyKT0+e2lmKCFlKXJldHVybiAyLjU1Km47dC89MzYwLGUvPTEwMDtjb25zdCBpPShuLz0xMDApPC41P24qKDErZSk6bitlLW4qZSxhPTIqbi1pO3N3aXRjaChyKXtjYXNlInIiOnJldHVybiAyNTUqSy5odWUycmdiKGEsaSx0KzEvMyk7Y2FzZSJnIjpyZXR1cm4gMjU1KksuaHVlMnJnYihhLGksdCk7Y2FzZSJiIjpyZXR1cm4gMjU1KksuaHVlMnJnYihhLGksdC0xLzMpfX0scmdiMmhzbDooe3I6dCxnOmUsYjpufSxyKT0+e3QvPTI1NSxlLz0yNTUsbi89MjU1O2NvbnN0IGk9TWF0aC5tYXgodCxlLG4pLGE9TWF0aC5taW4odCxlLG4pLG89KGkrYSkvMjtpZigibCI9PT1yKXJldHVybiAxMDAqbztpZihpPT09YSlyZXR1cm4gMDtjb25zdCBzPWktYTtpZigicyI9PT1yKXJldHVybiAxMDAqKG8+LjU/cy8oMi1pLWEpOnMvKGkrYSkpO3N3aXRjaChpKXtjYXNlIHQ6cmV0dXJuIDYwKigoZS1uKS9zKyhlPG4/NjowKSk7Y2FzZSBlOnJldHVybiA2MCooKG4tdCkvcysyKTtjYXNlIG46cmV0dXJuIDYwKigodC1lKS9zKzQpO2RlZmF1bHQ6cmV0dXJuLTF9fX0sSj17Y2hhbm5lbDpLLGxhbmc6e2NsYW1wOih0LGUsbik9PmU+bj9NYXRoLm1pbihlLE1hdGgubWF4KG4sdCkpOk1hdGgubWluKG4sTWF0aC5tYXgoZSx0KSkscm91bmQ6dD0+TWF0aC5yb3VuZCgxZTEwKnQpLzFlMTB9LHVuaXQ6e2RlYzJoZXg6dD0+e2NvbnN0IGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZTpgMCR7ZX1gfX19LHR0PXt9O2ZvcihsZXQgdD0wO3Q8PTI1NTt0KyspdHRbdF09Si51bml0LmRlYzJoZXgodCk7Y29uc3QgZXQ9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPTB9Z2V0KCl7cmV0dXJuIHRoaXMudHlwZX1zZXQodCl7aWYodGhpcy50eXBlJiZ0aGlzLnR5cGUhPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNoYW5nZSBib3RoIFJHQiBhbmQgSFNMIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUiKTt0aGlzLnR5cGU9dH1yZXNldCgpe3RoaXMudHlwZT0wfWlzKHQpe3JldHVybiB0aGlzLnR5cGU9PT10fX19c2V0KHQsZSl7cmV0dXJuIHRoaXMuY29sb3I9ZSx0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPXQsdGhpcy50eXBlLnR5cGU9MCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCB0PXRoaXMuZGF0YSx7aDplLHM6bixsOnJ9PXQ7dm9pZCAwPT09ZSYmKHQuaD1KLmNoYW5uZWwucmdiMmhzbCh0LCJoIikpLHZvaWQgMD09PW4mJih0LnM9Si5jaGFubmVsLnJnYjJoc2wodCwicyIpKSx2b2lkIDA9PT1yJiYodC5sPUouY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IHQ9dGhpcy5kYXRhLHtyOmUsZzpuLGI6cn09dDt2b2lkIDA9PT1lJiYodC5yPUouY2hhbm5lbC5oc2wycmdiKHQsInIiKSksdm9pZCAwPT09biYmKHQuZz1KLmNoYW5uZWwuaHNsMnJnYih0LCJnIikpLHZvaWQgMD09PXImJih0LmI9Si5jaGFubmVsLmhzbDJyZ2IodCwiYiIpKX1nZXQgcigpe2NvbnN0IHQ9dGhpcy5kYXRhLGU9dC5yO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLEouY2hhbm5lbC5oc2wycmdiKHQsInIiKSk6ZX1nZXQgZygpe2NvbnN0IHQ9dGhpcy5kYXRhLGU9dC5nO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLEouY2hhbm5lbC5oc2wycmdiKHQsImciKSk6ZX1nZXQgYigpe2NvbnN0IHQ9dGhpcy5kYXRhLGU9dC5iO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLEouY2hhbm5lbC5oc2wycmdiKHQsImIiKSk6ZX1nZXQgaCgpe2NvbnN0IHQ9dGhpcy5kYXRhLGU9dC5oO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLEouY2hhbm5lbC5yZ2IyaHNsKHQsImgiKSk6ZX1nZXQgcygpe2NvbnN0IHQ9dGhpcy5kYXRhLGU9dC5zO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLEouY2hhbm5lbC5yZ2IyaHNsKHQsInMiKSk6ZX1nZXQgbCgpe2NvbnN0IHQ9dGhpcy5kYXRhLGU9dC5sO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLEouY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSk6ZX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcih0KXt0aGlzLnR5cGUuc2V0KDEpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucj10fXNldCBnKHQpe3RoaXMudHlwZS5zZXQoMSksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5nPXR9c2V0IGIodCl7dGhpcy50eXBlLnNldCgxKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9dH1zZXQgaCh0KXt0aGlzLnR5cGUuc2V0KDIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuaD10fXNldCBzKHQpe3RoaXMudHlwZS5zZXQoMiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5zPXR9c2V0IGwodCl7dGhpcy50eXBlLnNldCgyKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9dH1zZXQgYSh0KXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9dH19KHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLG50PXtyZTovXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLHBhcnNlOnQ9PntpZigzNSE9PXQuY2hhckNvZGVBdCgwKSlyZXR1cm47Y29uc3QgZT10Lm1hdGNoKG50LnJlKTtpZighZSlyZXR1cm47Y29uc3Qgbj1lWzFdLHI9cGFyc2VJbnQobiwxNiksaT1uLmxlbmd0aCxhPWklND09MCxvPWk+NCxzPW8/MToxNyxjPW8/ODo0LGw9YT8wOi0xLHU9bz8yNTU6MTU7cmV0dXJuIGV0LnNldCh7cjoocj4+YyoobCszKSZ1KSpzLGc6KHI+PmMqKGwrMikmdSkqcyxiOihyPj5jKihsKzEpJnUpKnMsYTphPyhyJnUpKnMvMjU1OjF9LHQpfSxzdHJpbmdpZnk6dD0+e2NvbnN0e3I6ZSxnOm4sYjpyLGE6aX09dDtyZXR1cm4gaTwxP2AjJHt0dFtNYXRoLnJvdW5kKGUpXX0ke3R0W01hdGgucm91bmQobildfSR7dHRbTWF0aC5yb3VuZChyKV19JHt0dFtNYXRoLnJvdW5kKDI1NSppKV19YDpgIyR7dHRbTWF0aC5yb3VuZChlKV19JHt0dFtNYXRoLnJvdW5kKG4pXX0ke3R0W01hdGgucm91bmQocildfWB9fSxydD1udCxpdD17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzp0PT57Y29uc3QgZT10Lm1hdGNoKGl0Lmh1ZVJlKTtpZihlKXtjb25zdFssdCxuXT1lO3N3aXRjaChuKXtjYXNlImdyYWQiOnJldHVybiBKLmNoYW5uZWwuY2xhbXAuaCguOSpwYXJzZUZsb2F0KHQpKTtjYXNlInJhZCI6cmV0dXJuIEouY2hhbm5lbC5jbGFtcC5oKDE4MCpwYXJzZUZsb2F0KHQpL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIEouY2hhbm5lbC5jbGFtcC5oKDM2MCpwYXJzZUZsb2F0KHQpKX19cmV0dXJuIEouY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodCkpfSxwYXJzZTp0PT57Y29uc3QgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTA0IT09ZSYmNzIhPT1lKXJldHVybjtjb25zdCBuPXQubWF0Y2goaXQucmUpO2lmKCFuKXJldHVybjtjb25zdFsscixpLGEsbyxzXT1uO3JldHVybiBldC5zZXQoe2g6aXQuX2h1ZTJkZWcociksczpKLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KGkpKSxsOkouY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQoYSkpLGE6bz9KLmNoYW5uZWwuY2xhbXAuYShzP3BhcnNlRmxvYXQobykvMTAwOnBhcnNlRmxvYXQobykpOjF9LHQpfSxzdHJpbmdpZnk6dD0+e2NvbnN0e2g6ZSxzOm4sbDpyLGE6aX09dDtyZXR1cm4gaTwxP2Boc2xhKCR7Si5sYW5nLnJvdW5kKGUpfSwgJHtKLmxhbmcucm91bmQobil9JSwgJHtKLmxhbmcucm91bmQocil9JSwgJHtpfSlgOmBoc2woJHtKLmxhbmcucm91bmQoZSl9LCAke0oubGFuZy5yb3VuZChuKX0lLCAke0oubGFuZy5yb3VuZChyKX0lKWB9fSxhdD1pdCxvdD17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOnQ9Pnt0PXQudG9Mb3dlckNhc2UoKTtjb25zdCBlPW90LmNvbG9yc1t0XTtpZihlKXJldHVybiBydC5wYXJzZShlKX0sc3RyaW5naWZ5OnQ9Pntjb25zdCBlPXJ0LnN0cmluZ2lmeSh0KTtmb3IoY29uc3QgdCBpbiBvdC5jb2xvcnMpaWYob3QuY29sb3JzW3RdPT09ZSlyZXR1cm4gdH19LHN0PW90LGN0PXtyZTovXnJnYmE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkpP1xzKj9cKSQvaSxwYXJzZTp0PT57Y29uc3QgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTE0IT09ZSYmODIhPT1lKXJldHVybjtjb25zdCBuPXQubWF0Y2goY3QucmUpO2lmKCFuKXJldHVybjtjb25zdFsscixpLGEsbyxzLGMsbCx1XT1uO3JldHVybiBldC5zZXQoe3I6Si5jaGFubmVsLmNsYW1wLnIoaT8yLjU1KnBhcnNlRmxvYXQocik6cGFyc2VGbG9hdChyKSksZzpKLmNoYW5uZWwuY2xhbXAuZyhvPzIuNTUqcGFyc2VGbG9hdChhKTpwYXJzZUZsb2F0KGEpKSxiOkouY2hhbm5lbC5jbGFtcC5iKGM/Mi41NSpwYXJzZUZsb2F0KHMpOnBhcnNlRmxvYXQocykpLGE6bD9KLmNoYW5uZWwuY2xhbXAuYSh1P3BhcnNlRmxvYXQobCkvMTAwOnBhcnNlRmxvYXQobCkpOjF9LHQpfSxzdHJpbmdpZnk6dD0+e2NvbnN0e3I6ZSxnOm4sYjpyLGE6aX09dDtyZXR1cm4gaTwxP2ByZ2JhKCR7Si5sYW5nLnJvdW5kKGUpfSwgJHtKLmxhbmcucm91bmQobil9LCAke0oubGFuZy5yb3VuZChyKX0sICR7Si5sYW5nLnJvdW5kKGkpfSlgOmByZ2IoJHtKLmxhbmcucm91bmQoZSl9LCAke0oubGFuZy5yb3VuZChuKX0sICR7Si5sYW5nLnJvdW5kKHIpfSlgfX0sbHQ9Y3QsdXQ9e2Zvcm1hdDp7a2V5d29yZDpzdCxoZXg6cnQscmdiOmx0LHJnYmE6bHQsaHNsOmF0LGhzbGE6YXR9LHBhcnNlOnQ9PntpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7Y29uc3QgZT1ydC5wYXJzZSh0KXx8bHQucGFyc2UodCl8fGF0LnBhcnNlKHQpfHxzdC5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJHt0fSJgKX0sc3RyaW5naWZ5OnQ9PiF0LmNoYW5nZWQmJnQuY29sb3I/dC5jb2xvcjp0LnR5cGUuaXMoMil8fHZvaWQgMD09PXQuZGF0YS5yP2F0LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9sdC5zdHJpbmdpZnkodCk6cnQuc3RyaW5naWZ5KHQpfSxodD0odCxlKT0+e2NvbnN0IG49dXQucGFyc2UodCk7Zm9yKGNvbnN0IHQgaW4gZSluW3RdPUouY2hhbm5lbC5jbGFtcFt0XShlW3RdKTtyZXR1cm4gdXQuc3RyaW5naWZ5KG4pfSxmdD0odCxlKT0+e2NvbnN0IG49dXQucGFyc2UodCkscj17fTtmb3IoY29uc3QgdCBpbiBlKWVbdF0mJihyW3RdPW5bdF0rZVt0XSk7cmV0dXJuIGh0KHQscil9LGR0PSh0LGUsbj0wLHI9MSk9PntpZigibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIGh0KHQse2E6ZX0pO2NvbnN0IGk9ZXQuc2V0KHtyOkouY2hhbm5lbC5jbGFtcC5yKHQpLGc6Si5jaGFubmVsLmNsYW1wLmcoZSksYjpKLmNoYW5uZWwuY2xhbXAuYihuKSxhOkouY2hhbm5lbC5jbGFtcC5hKHIpfSk7cmV0dXJuIHV0LnN0cmluZ2lmeShpKX0scHQ9KHQsZT0xMDApPT57Y29uc3Qgbj11dC5wYXJzZSh0KTtyZXR1cm4gbi5yPTI1NS1uLnIsbi5nPTI1NS1uLmcsbi5iPTI1NS1uLmIsKCh0LGUsbj01MCk9Pntjb25zdHtyLGc6aSxiOmEsYTpvfT11dC5wYXJzZSh0KSx7cjpzLGc6YyxiOmwsYTp1fT11dC5wYXJzZShlKSxoPW4vMTAwLGY9MipoLTEsZD1vLXUscD0oKGYqZD09LTE/ZjooZitkKS8oMStmKmQpKSsxKS8yLGc9MS1wO3JldHVybiBkdChyKnArcypnLGkqcCtjKmcsYSpwK2wqZyxvKmgrdSooMS1oKSl9KShuLHQsZSl9LGd0PSh0LGUsbik9Pntjb25zdCByPXV0LnBhcnNlKHQpLGk9cltlXSxhPUouY2hhbm5lbC5jbGFtcFtlXShpK24pO3JldHVybiBpIT09YSYmKHJbZV09YSksdXQuc3RyaW5naWZ5KHIpfSx5dD0odCxlKT0+Z3QodCwibCIsLWUpLG10PSh0LGUpPT5ndCh0LCJsIixlKTt2YXIgYnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnQodCxlP3tzOi00MCxsOjEwfTp7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHZ0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSx2dCh0KX1mdW5jdGlvbiBfdCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciB4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMuZGFya01vZGU9ITEsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZWVlIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTEyMH0pLHRoaXMudGVydGlhcnlDb2xvcj10aGlzLnRlcnRpYXJ5Q29sb3J8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8YnQodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxidCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fGJ0KHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8YnQodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fHB0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8cHQodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcnx8cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT95dCh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLm5vZGVUZXh0Q29sb3I9dGhpcy5ub2RlVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckJvcmRlcj10aGlzLmFjdG9yQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFjdG9yQmtnPXRoaXMuYWN0b3JCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JMaW5lQ29sb3J8fCJncmV5Iix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fHl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMTApLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj10aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3J8fHB0KHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fG10KHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucGVyc29uQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLnBlcnNvbkJrZ3x8dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fGZ0KHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxmdCh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP3l0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPW10KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPW10KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPW10KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPW10KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PW10KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PW10KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PW10KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PW10KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9eXQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9eXQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9eXQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9eXQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9eXQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9eXQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9eXQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9eXQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8cHQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxwdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHB0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8cHQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxwdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHB0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8cHQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxwdCh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4In19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXZ0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZfdChlLnByb3RvdHlwZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2Z1bmN0aW9uIGt0KHQpe3JldHVybiBrdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sa3QodCl9ZnVuY3Rpb24gd3QodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjMzMzIix0aGlzLnByaW1hcnlDb2xvcj0iIzFmMjAyMCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciwxNiksdGhpcy50ZXJ0aWFyeUNvbG9yPWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1wdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9YnQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9YnQodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1wdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9cHQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1wdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXB0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj1tdChwdCgiIzMyM0Q0NyIpLDEwKSx0aGlzLmxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ib3JkZXIxPSIjODFCMURCIix0aGlzLmJvcmRlcjI9ZHQoMjU1LDI1NSwyNTUsLjI1KSx0aGlzLmFycm93aGVhZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiMxODE4MTgiLHRoaXMudGV4dENvbG9yPSIjY2NjIix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjRjlGRkZFIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9ImJsYWNrIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj15dCgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMudGFza0JvcmRlckNvbG9yPWR0KDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1kdCgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLnBlcnNvbkJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5wZXJzb25Ca2c9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjYTQ0MTQxIix0aGlzLmVycm9yVGV4dENvbG9yPSIjZGRkIn12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2Vjb25kQmtnPW10KHRoaXMubWFpbkJrZywxNiksdGhpcy5saW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFycm93aGVhZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9bXQodGhpcy5sYWJlbEJhY2tncm91bmQsMjUpLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmJhY2tncm91bmQsdGhpcy50YXNrQmtnQ29sb3I9bXQodGhpcy5tYWluQmtnLDIzKSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy5kYXJrVGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLmdyaWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy5kYXJrVGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjNTU1Iix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PWZ0KHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiIzBiMDAwMCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM0ZDEwMzciLHRoaXMucGllMz10aGlzLnBpZTN8fCIjM2Y1MjU4Iix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzRmMmYxYiIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM2ZTBhMGEiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjM2IwMDQ4Iix0aGlzLnBpZTc9dGhpcy5waWU3fHwiIzk5NWEwMSIsdGhpcy5waWU4PXRoaXMucGllOHx8IiMxNTQ3MDYiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjMTYxNzIyIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjMDAyOTZmIix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjMDE2MjljIix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjMDEwMDI5Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT95dCh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9bXQodGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQxPW10KHRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQyPW10KHRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLDIwKSx0aGlzLmdpdDM9bXQodGhpcy5waWU0fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSwyMCksdGhpcy5naXQ0PW10KHRoaXMucGllNXx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksMjApLHRoaXMuZ2l0NT1tdCh0aGlzLnBpZTZ8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLDEwKSx0aGlzLmdpdDY9bXQodGhpcy5waWU3fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLDEwKSx0aGlzLmdpdDc9bXQodGhpcy5waWU4fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSwyMCksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8cHQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxwdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHB0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8cHQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxwdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHB0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8cHQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxwdCh0aGlzLmdpdDcpLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4In19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PWt0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZ3dChlLnByb3RvdHlwZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2Z1bmN0aW9uIEV0KHQpe3JldHVybiBFdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sRXQodCl9ZnVuY3Rpb24gQ3QodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgU3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj1mdCh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWJ0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9YnQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9YnQodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1wdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9cHQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1wdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXB0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1kdCgxMDIsMTAyLDI1NSwuNDkpLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjZmZmNDAwIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy50YXNrQmtnQ29sb3I9IiM4YTkwZGQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiNiZmM3ZmYiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMucGVyc29uQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJrZz0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMuYWN0b3JCb3JkZXI9bXQodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PWZ0KHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fGZ0KHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxmdCh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fGZ0KHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi00MH0pLHRoaXMucGllOT10aGlzLnBpZTl8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNDB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MCxsOi00MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1tdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1tdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1tdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1tdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1tdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1tdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1tdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1tdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPXl0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPXl0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPXl0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPXl0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PXl0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PXl0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PXl0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PXl0KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHl0KHB0KHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHB0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8cHQodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxwdCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHB0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8cHQodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxwdCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHB0KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHB0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxwdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCJ9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1FdCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0sbiYmQ3QoZS5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBBdCh0KXtyZXR1cm4gQXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LEF0KHQpfWZ1bmN0aW9uIE10KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIE50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNjZGU0OTgiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNjZGZmYjIiLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRCa2c9IiNjZGZmYjIiLHRoaXMubGluZUNvbG9yPSJncmVlbiIsdGhpcy5ib3JkZXIxPSIjMTM1NDBjIix0aGlzLmJvcmRlcjI9IiM2ZWFhNDkiLHRoaXMuYXJyb3doZWFkQ29sb3I9ImdyZWVuIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy50ZXJ0aWFyeUNvbG9yPW10KCIjY2RlNDk4IiwxMCksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9YnQodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1idCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1idCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXB0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1wdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXB0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1wdCh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXB0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMucGVyc29uQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXl0KHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PWZ0KHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxmdCh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fGZ0KHRoaXMudGVydGlhcnlDb2xvcix7aDo0MCxsOi00MH0pLHRoaXMucGllNz10aGlzLnBpZTd8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fGZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTUwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9bXQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9bXQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9bXQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9bXQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9bXQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9bXQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9bXQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9bXQodGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD15dCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT15dCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj15dCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz15dCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND15dCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT15dCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj15dCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz15dCh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxwdCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHB0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8cHQodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxwdCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHB0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8cHQodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxwdCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHB0KHRoaXMuZ2l0NyksdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgifX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09QXQodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dLG4mJk10KGUucHJvdG90eXBlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZnVuY3Rpb24gT3QodCl7cmV0dXJuIE90PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxPdCh0KX1mdW5jdGlvbiBEdCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBCdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1tdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJhY2tncm91bmQ9IiNmZmZmZmYiLHRoaXMudGVydGlhcnlDb2xvcj1mdCh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9YnQodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1idCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1idCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXB0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1wdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXB0KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9cHQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1wdCh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iI2VlZSIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubGluZUNvbG9yPSIjNjY2Iix0aGlzLmJvcmRlcjE9IiM5OTkiLHRoaXMuYm9yZGVyMj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlPSIjZmZhIix0aGlzLnRleHQ9IiMzMzMiLHRoaXMuY3JpdGljYWw9IiNkNDIiLHRoaXMuZG9uZT0iI2JiYiIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMucGVyc29uQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJrZz0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2Vjb25kQmtnPW10KHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYm9yZGVyMj10aGlzLmNvbnRyYXN0LHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yQm9yZGVyPW10KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9bXQodGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPW10KHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPXl0KHRoaXMuY29udHJhc3QsMTApLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMuY29udHJhc3QsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50ZXh0LHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5ncmlkQ29sb3I9bXQodGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPXl0KHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PWZ0KHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PWZ0KHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9ZnQodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9eXQodGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8ZnQodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHxmdCh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxwdCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHB0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8cHQodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxwdCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHB0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8cHQodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxwdCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHB0KHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgifX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09T3QodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dLG4mJkR0KGUucHJvdG90eXBlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7Y29uc3QgTHQ9e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB4dDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LGRhcms6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBUdDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LGRlZmF1bHQ6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBTdDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LGZvcmVzdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IE50O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sbmV1dHJhbDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEJ0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX19O2Z1bmN0aW9uIEl0KHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBGdCh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBGdCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0Z0KHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRnQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gUnQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LFJ0KHQpfXZhciBQdD17dGhlbWU6ImRlZmF1bHQiLHRoZW1lVmFyaWFibGVzOkx0LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSx0aGVtZUNTUzp2b2lkIDAsbWF4VGV4dFNpemU6NWU0LGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIl0sZGV0ZXJtaW5pc3RpY0lkczohMSxkZXRlcm1pbmlzdGljSURTZWVkOnZvaWQgMCxmbG93Y2hhcnQ6e2RpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsdXNlTWF4V2lkdGg6ITAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS1kMyJ9LHNlcXVlbmNlOntoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMCxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX0sbm90ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LGFjdG9yRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX19LGdhbnR0Ont0aXRsZVRvcE1hcmdpbjoyNSxiYXJIZWlnaHQ6MjAsYmFyR2FwOjQsdG9wUGFkZGluZzo1MCxyaWdodFBhZGRpbmc6NzUsbGVmdFBhZGRpbmc6NzUsZ3JpZExpbmVTdGFydFBhZGRpbmc6MzUsZm9udFNpemU6MTEsc2VjdGlvbkZvbnRTaXplOjExLG51bWJlclNlY3Rpb25TdHlsZXM6NCxheGlzRm9ybWF0OiIlWS0lbS0lZCIsdXNlTWF4V2lkdGg6ITAsdG9wQXhpczohMSx1c2VXaWR0aDp2b2lkIDB9LGpvdXJuZXk6e2RpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnthcnJvd01hcmtlckFic29sdXRlOiExLGRpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTAsdXNlTWF4V2lkdGg6ITAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sc3RhdGU6e2RpdmlkZXJNYXJnaW46MTAsc2l6ZVVuaXQ6NSxwYWRkaW5nOjgsdGV4dEhlaWdodDoxMCx0aXRsZVNoaWZ0Oi0xNSxub3RlTWFyZ2luOjEwLGZvcmtXaWR0aDo3MCxmb3JrSGVpZ2h0OjcsbWluaVBhZGRpbmc6Mixmb250U2l6ZUZhY3Rvcjo1LjAyLGZvbnRTaXplOjI0LGxhYmVsSGVpZ2h0OjE2LGVkZ2VMZW5ndGhGYWN0b3I6IjIwIixjb21wb3NpdFRpdGxlU2l6ZTozNSxyYWRpdXM6NSx1c2VNYXhXaWR0aDohMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxlcjp7ZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LHN0cm9rZToiZ3JheSIsZmlsbDoiaG9uZXlkZXciLGZvbnRTaXplOjEyLHVzZU1heFdpZHRoOiEwfSxwaWU6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMH0scmVxdWlyZW1lbnQ6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMCxyZWN0X2ZpbGw6IiNmOWY5ZjkiLHRleHRfY29sb3I6IiMzMzMiLHJlY3RfYm9yZGVyX3NpemU6IjAuNXB4IixyZWN0X2JvcmRlcl9jb2xvcjoiI2JiYiIscmVjdF9taW5fd2lkdGg6MjAwLHJlY3RfbWluX2hlaWdodDoyMDAsZm9udFNpemU6MTQscmVjdF9wYWRkaW5nOjEwLGxpbmVfaGVpZ2h0OjIwfSxnaXRHcmFwaDp7ZGlhZ3JhbVBhZGRpbmc6OCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfSxtYWluQnJhbmNoTmFtZToibWFpbiIsbWFpbkJyYW5jaE9yZGVyOjAsc2hvd0NvbW1pdExhYmVsOiEwLHNob3dCcmFuY2hlczohMCxyb3RhdGVDb21taXRMYWJlbDohMH0sYzQ6e3VzZVdpZHRoOnZvaWQgMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxjNFNoYXBlTWFyZ2luOjUwLGM0U2hhcGVQYWRkaW5nOjIwLHdpZHRoOjIxNixoZWlnaHQ6NjAsYm94TWFyZ2luOjEwLHVzZU1heFdpZHRoOiEwLGM0U2hhcGVJblJvdzo0LG5leHRMaW5lUGFkZGluZ1g6MCxjNEJvdW5kYXJ5SW5Sb3c6MixwZXJzb25Gb250U2l6ZToxNCxwZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicscGVyc29uRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9wZXJzb25Gb250U2l6ZToxNCxleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1Gb250U2l6ZToxNCxzeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fZGJGb250U2l6ZToxNCxzeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fcXVldWVGb250U2l6ZToxNCxzeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixib3VuZGFyeUZvbnRTaXplOjE0LGJvdW5kYXJ5Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGJvdW5kYXJ5Rm9udFdlaWdodDoibm9ybWFsIixtZXNzYWdlRm9udFNpemU6MTIsbWVzc2FnZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJGb250U2l6ZToxNCxjb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfZGJGb250U2l6ZToxNCxjb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfcXVldWVGb250U2l6ZToxNCxjb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRGb250U2l6ZToxNCxjb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfZGJGb250U2l6ZToxNCxjb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxjb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIix3cmFwOiEwLHdyYXBQYWRkaW5nOjEwLHBlcnNvbkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnBlcnNvbkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5wZXJzb25Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMucGVyc29uRm9udFdlaWdodH19LGV4dGVybmFsX3BlcnNvbkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodH19LHN5c3RlbUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtRm9udFdlaWdodH19LGV4dGVybmFsX3N5c3RlbUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodH19LHN5c3RlbV9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtX2RiRm9udFdlaWdodH19LGV4dGVybmFsX3N5c3RlbV9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodH19LHN5c3RlbV9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1fcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtX3F1ZXVlRm9udFdlaWdodH19LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodH19LGNvbnRhaW5lckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyRm9udFdlaWdodH19LGV4dGVybmFsX2NvbnRhaW5lckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodH19LGNvbnRhaW5lcl9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyX2RiRm9udFdlaWdodH19LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodH19LGNvbnRhaW5lcl9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodH19LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodH19LGNvbXBvbmVudEZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50Rm9udFdlaWdodH19LGV4dGVybmFsX2NvbXBvbmVudEZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodH19LGNvbXBvbmVudF9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50X2RiRm9udFdlaWdodH19LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodH19LGNvbXBvbmVudF9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodH19LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodH19LGJvdW5kYXJ5Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYm91bmRhcnlGb250V2VpZ2h0fX0sbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LHBlcnNvbl9iZ19jb2xvcjoiIzA4NDI3QiIscGVyc29uX2JvcmRlcl9jb2xvcjoiIzA3M0I2RiIsZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yOiIjNjg2ODY4IixleHRlcm5hbF9wZXJzb25fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixzeXN0ZW1fYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9kYl9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9zeXN0ZW1fYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9kYl9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixjb250YWluZXJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9kYl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9jb250YWluZXJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjQTZBNkE2Iixjb21wb25lbnRfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9kYl9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4IixleHRlcm5hbF9jb21wb25lbnRfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIn19O1B0LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9UHQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxQdC5naXRHcmFwaC5hcnJvd01hcmtlckFic29sdXRlPVB0LmFycm93TWFya2VyQWJzb2x1dGU7dmFyIGp0PWZ1bmN0aW9uIHQoZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiO3JldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVtpXSk/cjoib2JqZWN0Ij09PVJ0KGVbaV0pJiZudWxsIT09ZVtpXT9bXS5jb25jYXQoSXQociksW24raV0sSXQodChlW2ldLCIiKSkpOltdLmNvbmNhdChJdChyKSxbbitpXSl9KSxbXSl9KFB0LCIiKTtjb25zdCB6dD1QdDtmdW5jdGlvbiBZdCh0KXtyZXR1cm4gWXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LFl0KHQpfXZhciBVdCwkdD1PYmplY3QuZnJlZXplKHp0KSxXdD1RKHt9LCR0KSxxdD1bXSxIdD1RKHt9LCR0KSxWdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1RKHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO1p0KGEpLHI9UShyLGEpfWlmKG49UShuLHIpLHIudGhlbWUmJkx0W3IudGhlbWVdKXt2YXIgbz1RKHt9LFV0KSxzPVEoby50aGVtZVZhcmlhYmxlc3x8e30sci50aGVtZVZhcmlhYmxlcyk7bi50aGVtZVZhcmlhYmxlcz1MdFtuLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhzKX1yZXR1cm4gSHQ9bixufSxHdD1mdW5jdGlvbigpe3JldHVybiBRKHt9LFd0KX0sWHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUSh7fSxIdCl9LFp0PWZ1bmN0aW9uIHQoZSl7T2JqZWN0LmtleXMoV3Quc2VjdXJlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lW1d0LnNlY3VyZVt0XV0mJihvLmRlYnVnKCJEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICIuY29uY2F0KFd0LnNlY3VyZVt0XSksZVtXdC5zZWN1cmVbdF1dKSxkZWxldGUgZVtXdC5zZWN1cmVbdF1dKX0pKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXswPT09dC5pbmRleE9mKCJfXyIpJiZkZWxldGUgZVt0XX0pKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXsic3RyaW5nIj09dHlwZW9mIGVbbl0mJihlW25dLmluZGV4T2YoIjwiKT4tMXx8ZVtuXS5pbmRleE9mKCI+Iik+LTF8fGVbbl0uaW5kZXhPZigidXJsKGRhdGE6Iik+LTEpJiZkZWxldGUgZVtuXSwib2JqZWN0Ij09PVl0KGVbbl0pJiZ0KGVbbl0pfSkpfSxRdD1mdW5jdGlvbih0KXt0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSxxdC5wdXNoKHQpLFZ0KFd0LHF0KX0sS3Q9ZnVuY3Rpb24oKXtWdChXdCxxdD1bXSl9LEp0PW4oNzg1NiksdGU9bi5uKEp0KSxlZT1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UoL1xcdVtcZEEtRl17NH0vZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQucmVwbGFjZSgvXFx1L2csIiIpLDE2KSl9KSk7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC9cXHgoWzAtOWEtZl17Mn0pL2dpLChmdW5jdGlvbih0LGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUsMTYpKX0pKSkucmVwbGFjZSgvXFxbXGRcZFxkXXszfS9naSwoZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodC5yZXBsYWNlKC9cXC9nLCIiKSw4KSl9KSkpLnJlcGxhY2UoL1xcW1xkXGRcZF17Mn0vZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQucmVwbGFjZSgvXFwvZywiIiksOCkpfSkpfSxuZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0wO24+PTA7KXtpZighKChuPXQuaW5kZXhPZigiPHNjcmlwdCIpKT49MCkpe2UrPXQsbj0tMTticmVha31lKz10LnN1YnN0cigwLG4pLChuPSh0PXQuc3Vic3RyKG4rMSkpLmluZGV4T2YoIjxcL3NjcmlwdD4iKSk+PTAmJihuKz05LHQ9dC5zdWJzdHIobikpfXZhciByPWVlKGUpO3JldHVybihyPShyPShyPShyPXIucmVwbGFjZSgvc2NyaXB0Pi9naSwiIyIpKS5yZXBsYWNlKC9qYXZhc2NyaXB0Oi9naSwiIyIpKS5yZXBsYWNlKC9qYXZhc2NyaXB0JmNvbG9uL2dpLCIjIikpLnJlcGxhY2UoL29uZXJyb3I9L2dpLCJvbmVycm9yOiIpKS5yZXBsYWNlKC88aWZyYW1lL2dpLCIiKX0scmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LHI9ITA7aWYoIWUuZmxvd2NoYXJ0fHwhMSE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJiJmYWxzZSIhPT1lLmZsb3djaGFydC5odG1sTGFiZWxzfHwocj0hMSkscil7dmFyIGk9ZS5zZWN1cml0eUxldmVsOyJhbnRpc2NyaXB0Ij09PWl8fCJzdHJpY3QiPT09aT9uPW5lKG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1zZShuKSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpLnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSxuPW9lKG4pKX1yZXR1cm4gbn0saWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLmRvbXB1cmlmeUNvbmZpZz90ZSgpLnNhbml0aXplKHJlKHQsZSksZS5kb21wdXJpZnlDb25maWcpOnRlKCkuc2FuaXRpemUocmUodCxlKSk6dH0sYWU9LzxiclxzKlwvPz4vZ2ksb2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpfSxzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKGFlLCIjYnIjIil9LGNlPWZ1bmN0aW9uKHQpe3JldHVybiJmYWxzZSIhPT10JiYhMSE9PXR9LGxlPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZTtyZXR1cm4tMSE9ZS5pbmRleE9mKCJ+Iik/dChuPShuPW4ucmVwbGFjZSgifiIsIjwiKSkucmVwbGFjZSgifiIsIj4iKSk6bn07Y29uc3QgdWU9e2dldFJvd3M6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIDE7dmFyIGU9c2UodCk7cmV0dXJuKGU9ZS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpKS5zcGxpdCgiI2JyIyIpfSxzYW5pdGl6ZVRleHQ6aWUsc2FuaXRpemVUZXh0T3JBcnJheTpmdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9pZSh0LGUpOnQuZmxhdCgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGllKHQsZSl9KSl9LGhhc0JyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gYWUudGVzdCh0KX0sc3BsaXRCcmVha3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoYWUpfSxsaW5lQnJlYWtSZWdleDphZSxyZW1vdmVTY3JpcHQ6bmUsZ2V0VXJsOmZ1bmN0aW9uKHQpe3ZhciBlPSIiO3JldHVybiB0JiYoZT0oZT0oZT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxlfSxldmFsdWF0ZTpjZSxyZW1vdmVFc2NhcGVzOmVlfTt2YXIgaGU9IiIsZmU9IiIsZGU9IiIscGU9ZnVuY3Rpb24odCl7cmV0dXJuIGllKHQsWHQoKSl9LGdlPWZ1bmN0aW9uKCl7aGU9IiIsZGU9IiIsZmU9IiJ9LHllPWZ1bmN0aW9uKHQpe2hlPXBlKHQpLnJlcGxhY2UoL15ccysvZywiIil9LG1lPWZ1bmN0aW9uKCl7cmV0dXJuIGhlfHxmZX0sYmU9ZnVuY3Rpb24odCl7ZGU9cGUodCkucmVwbGFjZSgvXG5ccysvZywiXG4iKX0sdmU9ZnVuY3Rpb24oKXtyZXR1cm4gZGV9LF9lPWZ1bmN0aW9uKHQpe2ZlPXBlKHQpfSx4ZT1mdW5jdGlvbigpe3JldHVybiBmZX07ZnVuY3Rpb24ga2UodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1uKXt2YXIgcixpLGE9W10sbz0hMCxzPSExO3RyeXtmb3Iobj1uLmNhbGwodCk7IShvPShyPW4ubmV4dCgpKS5kb25lKSYmKGEucHVzaChyLnZhbHVlKSwhZXx8YS5sZW5ndGghPT1lKTtvPSEwKTt9Y2F0Y2godCl7cz0hMCxpPXR9ZmluYWxseXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fXJldHVybiBhfX0odCxlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHdlKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/d2UodCxlKTp2b2lkIDB9fSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gd2UodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBUZSh0KXtyZXR1cm4gVGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LFRlKHQpfXZhciBFZSxDZT1bXSxTZT1bIiJdLEFlPSJnbG9iYWwiLE1lPSIiLE5lPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxPZT1bXSxEZT0iIixCZT0hMSxMZT00LEllPTIsRmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/Q2U6Q2UuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnRCb3VuZGFyeT09PXR9KSl9LFJlPWZ1bmN0aW9uKCl7cmV0dXJuIEJlfTtjb25zdCBQZT17YWRkUGVyc29uT3JTeXN0ZW06ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7aWYobnVsbCE9PWUmJm51bGwhPT1uKXt2YXIgcz17fSxjPUNlLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFsaWFzPT09ZX0pKTtpZihjJiZlPT09Yy5hbGlhcz9zPWM6KHMuYWxpYXM9ZSxDZS5wdXNoKHMpKSxzLmxhYmVsPW51bGw9PW4/e3RleHQ6IiJ9Ont0ZXh0Om59LG51bGw9PXIpcy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZigib2JqZWN0Ij09PVRlKHIpKXt2YXIgbD1rZShPYmplY3QuZW50cmllcyhyKVswXSwyKSx1PWxbMF0saD1sWzFdO3NbdV09e3RleHQ6aH19ZWxzZSBzLmRlc2NyPXt0ZXh0OnJ9O2lmKCJvYmplY3QiPT09VGUoaSkpe3ZhciBmPWtlKE9iamVjdC5lbnRyaWVzKGkpWzBdLDIpLGQ9ZlswXSxwPWZbMV07c1tkXT1wfWVsc2Ugcy5zcHJpdGU9aTtpZigib2JqZWN0Ij09PVRlKGEpKXt2YXIgZz1rZShPYmplY3QuZW50cmllcyhhKVswXSwyKSx5PWdbMF0sbT1nWzFdO3NbeV09bX1lbHNlIHMudGFncz1hO2lmKCJvYmplY3QiPT09VGUobykpe3ZhciBiPWtlKE9iamVjdC5lbnRyaWVzKG8pWzBdLDIpLHY9YlswXSxfPWJbMV07c1t2XT1ffWVsc2Ugcy5saW5rPW87cy50eXBlQzRTaGFwZT17dGV4dDp0fSxzLnBhcmVudEJvdW5kYXJ5PUFlLHMud3JhcD1SZSgpfX0sYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeTpmdW5jdGlvbih0LGUsbixyLGkpe2lmKG51bGwhPT10JiZudWxsIT09ZSl7dmFyIGE9e30sbz1OZS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hbGlhcz09PXR9KSk7aWYobyYmdD09PW8uYWxpYXM/YT1vOihhLmFsaWFzPXQsTmUucHVzaChhKSksYS5sYWJlbD1udWxsPT1lP3t0ZXh0OiIifTp7dGV4dDplfSxudWxsPT1uKWEudHlwZT17dGV4dDoic3lzdGVtIn07ZWxzZSBpZigib2JqZWN0Ij09PVRlKG4pKXt2YXIgcz1rZShPYmplY3QuZW50cmllcyhuKVswXSwyKSxjPXNbMF0sbD1zWzFdO2FbY109e3RleHQ6bH19ZWxzZSBhLnR5cGU9e3RleHQ6bn07aWYoIm9iamVjdCI9PT1UZShyKSl7dmFyIHU9a2UoT2JqZWN0LmVudHJpZXMocilbMF0sMiksaD11WzBdLGY9dVsxXTthW2hdPWZ9ZWxzZSBhLnRhZ3M9cjtpZigib2JqZWN0Ij09PVRlKGkpKXt2YXIgZD1rZShPYmplY3QuZW50cmllcyhpKVswXSwyKSxwPWRbMF0sZz1kWzFdO2FbcF09Z31lbHNlIGEubGluaz1pO2EucGFyZW50Qm91bmRhcnk9QWUsYS53cmFwPVJlKCksTWU9QWUsQWU9dCxTZS5wdXNoKE1lKX19LGFkZENvbnRhaW5lcjpmdW5jdGlvbih0LGUsbixyLGksYSxvLHMpe2lmKG51bGwhPT1lJiZudWxsIT09bil7dmFyIGM9e30sbD1DZS5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlhcz09PWV9KSk7aWYobCYmZT09PWwuYWxpYXM/Yz1sOihjLmFsaWFzPWUsQ2UucHVzaChjKSksYy5sYWJlbD1udWxsPT1uP3t0ZXh0OiIifTp7dGV4dDpufSxudWxsPT1yKWMudGVjaG49e3RleHQ6IiJ9O2Vsc2UgaWYoIm9iamVjdCI9PT1UZShyKSl7dmFyIHU9a2UoT2JqZWN0LmVudHJpZXMocilbMF0sMiksaD11WzBdLGY9dVsxXTtjW2hdPXt0ZXh0OmZ9fWVsc2UgYy50ZWNobj17dGV4dDpyfTtpZihudWxsPT1pKWMuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYoIm9iamVjdCI9PT1UZShpKSl7dmFyIGQ9a2UoT2JqZWN0LmVudHJpZXMoaSlbMF0sMikscD1kWzBdLGc9ZFsxXTtjW3BdPXt0ZXh0Omd9fWVsc2UgYy5kZXNjcj17dGV4dDppfTtpZigib2JqZWN0Ij09PVRlKGEpKXt2YXIgeT1rZShPYmplY3QuZW50cmllcyhhKVswXSwyKSxtPXlbMF0sYj15WzFdO2NbbV09Yn1lbHNlIGMuc3ByaXRlPWE7aWYoIm9iamVjdCI9PT1UZShvKSl7dmFyIHY9a2UoT2JqZWN0LmVudHJpZXMobylbMF0sMiksXz12WzBdLHg9dlsxXTtjW19dPXh9ZWxzZSBjLnRhZ3M9bztpZigib2JqZWN0Ij09PVRlKHMpKXt2YXIgaz1rZShPYmplY3QuZW50cmllcyhzKVswXSwyKSx3PWtbMF0sVD1rWzFdO2Nbd109VH1lbHNlIGMubGluaz1zO2Mud3JhcD1SZSgpLGMudHlwZUM0U2hhcGU9e3RleHQ6dH0sYy5wYXJlbnRCb3VuZGFyeT1BZX19LGFkZENvbnRhaW5lckJvdW5kYXJ5OmZ1bmN0aW9uKHQsZSxuLHIsaSl7aWYobnVsbCE9PXQmJm51bGwhPT1lKXt2YXIgYT17fSxvPU5lLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFsaWFzPT09dH0pKTtpZihvJiZ0PT09by5hbGlhcz9hPW86KGEuYWxpYXM9dCxOZS5wdXNoKGEpKSxhLmxhYmVsPW51bGw9PWU/e3RleHQ6IiJ9Ont0ZXh0OmV9LG51bGw9PW4pYS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKCJvYmplY3QiPT09VGUobikpe3ZhciBzPWtlKE9iamVjdC5lbnRyaWVzKG4pWzBdLDIpLGM9c1swXSxsPXNbMV07YVtjXT17dGV4dDpsfX1lbHNlIGEudHlwZT17dGV4dDpufTtpZigib2JqZWN0Ij09PVRlKHIpKXt2YXIgdT1rZShPYmplY3QuZW50cmllcyhyKVswXSwyKSxoPXVbMF0sZj11WzFdO2FbaF09Zn1lbHNlIGEudGFncz1yO2lmKCJvYmplY3QiPT09VGUoaSkpe3ZhciBkPWtlKE9iamVjdC5lbnRyaWVzKGkpWzBdLDIpLHA9ZFswXSxnPWRbMV07YVtwXT1nfWVsc2UgYS5saW5rPWk7YS5wYXJlbnRCb3VuZGFyeT1BZSxhLndyYXA9UmUoKSxNZT1BZSxBZT10LFNlLnB1c2goTWUpfX0sYWRkQ29tcG9uZW50OmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8scyl7aWYobnVsbCE9PWUmJm51bGwhPT1uKXt2YXIgYz17fSxsPUNlLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFsaWFzPT09ZX0pKTtpZihsJiZlPT09bC5hbGlhcz9jPWw6KGMuYWxpYXM9ZSxDZS5wdXNoKGMpKSxjLmxhYmVsPW51bGw9PW4/e3RleHQ6IiJ9Ont0ZXh0Om59LG51bGw9PXIpYy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZigib2JqZWN0Ij09PVRlKHIpKXt2YXIgdT1rZShPYmplY3QuZW50cmllcyhyKVswXSwyKSxoPXVbMF0sZj11WzFdO2NbaF09e3RleHQ6Zn19ZWxzZSBjLnRlY2huPXt0ZXh0OnJ9O2lmKG51bGw9PWkpYy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZigib2JqZWN0Ij09PVRlKGkpKXt2YXIgZD1rZShPYmplY3QuZW50cmllcyhpKVswXSwyKSxwPWRbMF0sZz1kWzFdO2NbcF09e3RleHQ6Z319ZWxzZSBjLmRlc2NyPXt0ZXh0Oml9O2lmKCJvYmplY3QiPT09VGUoYSkpe3ZhciB5PWtlKE9iamVjdC5lbnRyaWVzKGEpWzBdLDIpLG09eVswXSxiPXlbMV07Y1ttXT1ifWVsc2UgYy5zcHJpdGU9YTtpZigib2JqZWN0Ij09PVRlKG8pKXt2YXIgdj1rZShPYmplY3QuZW50cmllcyhvKVswXSwyKSxfPXZbMF0seD12WzFdO2NbX109eH1lbHNlIGMudGFncz1vO2lmKCJvYmplY3QiPT09VGUocykpe3ZhciBrPWtlKE9iamVjdC5lbnRyaWVzKHMpWzBdLDIpLHc9a1swXSxUPWtbMV07Y1t3XT1UfWVsc2UgYy5saW5rPXM7Yy53cmFwPVJlKCksYy50eXBlQzRTaGFwZT17dGV4dDp0fSxjLnBhcmVudEJvdW5kYXJ5PUFlfX0sYWRkRGVwbG95bWVudE5vZGU6ZnVuY3Rpb24odCxlLG4scixpLGEsbyxzKXtpZihudWxsIT09ZSYmbnVsbCE9PW4pe3ZhciBjPXt9LGw9TmUuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpYXM9PT1lfSkpO2lmKGwmJmU9PT1sLmFsaWFzP2M9bDooYy5hbGlhcz1lLE5lLnB1c2goYykpLGMubGFiZWw9bnVsbD09bj97dGV4dDoiIn06e3RleHQ6bn0sbnVsbD09ciljLnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKCJvYmplY3QiPT09VGUocikpe3ZhciB1PWtlKE9iamVjdC5lbnRyaWVzKHIpWzBdLDIpLGg9dVswXSxmPXVbMV07Y1toXT17dGV4dDpmfX1lbHNlIGMudHlwZT17dGV4dDpyfTtpZihudWxsPT1pKWMuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYoIm9iamVjdCI9PT1UZShpKSl7dmFyIGQ9a2UoT2JqZWN0LmVudHJpZXMoaSlbMF0sMikscD1kWzBdLGc9ZFsxXTtjW3BdPXt0ZXh0Omd9fWVsc2UgYy5kZXNjcj17dGV4dDppfTtpZigib2JqZWN0Ij09PVRlKG8pKXt2YXIgeT1rZShPYmplY3QuZW50cmllcyhvKVswXSwyKSxtPXlbMF0sYj15WzFdO2NbbV09Yn1lbHNlIGMudGFncz1vO2lmKCJvYmplY3QiPT09VGUocykpe3ZhciB2PWtlKE9iamVjdC5lbnRyaWVzKHMpWzBdLDIpLF89dlswXSx4PXZbMV07Y1tfXT14fWVsc2UgYy5saW5rPXM7Yy5ub2RlVHlwZT10LGMucGFyZW50Qm91bmRhcnk9QWUsYy53cmFwPVJlKCksTWU9QWUsQWU9ZSxTZS5wdXNoKE1lKX19LHBvcEJvdW5kYXJ5UGFyc2VTdGFjazpmdW5jdGlvbigpe0FlPU1lLFNlLnBvcCgpLE1lPVNlLnBvcCgpLFNlLnB1c2goTWUpfSxhZGRSZWw6ZnVuY3Rpb24odCxlLG4scixpLGEsbyxzLGMpe2lmKG51bGwhPXQmJm51bGwhPWUmJm51bGwhPW4mJm51bGwhPXIpe3ZhciBsPXt9LHU9T2UuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbT09PWUmJnQudG89PT1ufSkpO2lmKHU/bD11Ok9lLnB1c2gobCksbC50eXBlPXQsbC5mcm9tPWUsbC50bz1uLGwubGFiZWw9e3RleHQ6cn0sbnVsbD09aSlsLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKCJvYmplY3QiPT09VGUoaSkpe3ZhciBoPWtlKE9iamVjdC5lbnRyaWVzKGkpWzBdLDIpLGY9aFswXSxkPWhbMV07bFtmXT17dGV4dDpkfX1lbHNlIGwudGVjaG49e3RleHQ6aX07aWYobnVsbD09YSlsLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKCJvYmplY3QiPT09VGUoYSkpe3ZhciBwPWtlKE9iamVjdC5lbnRyaWVzKGEpWzBdLDIpLGc9cFswXSx5PXBbMV07bFtnXT17dGV4dDp5fX1lbHNlIGwuZGVzY3I9e3RleHQ6YX07aWYoIm9iamVjdCI9PT1UZShvKSl7dmFyIG09a2UoT2JqZWN0LmVudHJpZXMobylbMF0sMiksYj1tWzBdLHY9bVsxXTtsW2JdPXZ9ZWxzZSBsLnNwcml0ZT1vO2lmKCJvYmplY3QiPT09VGUocykpe3ZhciBfPWtlKE9iamVjdC5lbnRyaWVzKHMpWzBdLDIpLHg9X1swXSxrPV9bMV07bFt4XT1rfWVsc2UgbC50YWdzPXM7aWYoIm9iamVjdCI9PT1UZShjKSl7dmFyIHc9a2UoT2JqZWN0LmVudHJpZXMoYylbMF0sMiksVD13WzBdLEU9d1sxXTtsW1RdPUV9ZWxzZSBsLmxpbms9YztsLndyYXA9UmUoKX19LHVwZGF0ZUVsU3R5bGU6ZnVuY3Rpb24odCxlLG4scixpLGEsbyxzLGMsbCx1KXt2YXIgaD1DZS5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlhcz09PWV9KSk7aWYodm9pZCAwIT09aHx8dm9pZCAwIT09KGg9TmUuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpYXM9PT1lfSkpKSl7aWYobnVsbCE9bilpZigib2JqZWN0Ij09PVRlKG4pKXt2YXIgZj1rZShPYmplY3QuZW50cmllcyhuKVswXSwyKSxkPWZbMF0scD1mWzFdO2hbZF09cH1lbHNlIGguYmdDb2xvcj1uO2lmKG51bGwhPXIpaWYoIm9iamVjdCI9PT1UZShyKSl7dmFyIGc9a2UoT2JqZWN0LmVudHJpZXMocilbMF0sMikseT1nWzBdLG09Z1sxXTtoW3ldPW19ZWxzZSBoLmZvbnRDb2xvcj1yO2lmKG51bGwhPWkpaWYoIm9iamVjdCI9PT1UZShpKSl7dmFyIGI9a2UoT2JqZWN0LmVudHJpZXMoaSlbMF0sMiksdj1iWzBdLF89YlsxXTtoW3ZdPV99ZWxzZSBoLmJvcmRlckNvbG9yPWk7aWYobnVsbCE9YSlpZigib2JqZWN0Ij09PVRlKGEpKXt2YXIgeD1rZShPYmplY3QuZW50cmllcyhhKVswXSwyKSxrPXhbMF0sdz14WzFdO2hba109d31lbHNlIGguc2hhZG93aW5nPWE7aWYobnVsbCE9bylpZigib2JqZWN0Ij09PVRlKG8pKXt2YXIgVD1rZShPYmplY3QuZW50cmllcyhvKVswXSwyKSxFPVRbMF0sQz1UWzFdO2hbRV09Q31lbHNlIGguc2hhcGU9bztpZihudWxsIT1zKWlmKCJvYmplY3QiPT09VGUocykpe3ZhciBTPWtlKE9iamVjdC5lbnRyaWVzKHMpWzBdLDIpLEE9U1swXSxNPVNbMV07aFtBXT1NfWVsc2UgaC5zcHJpdGU9cztpZihudWxsIT1jKWlmKCJvYmplY3QiPT09VGUoYykpe3ZhciBOPWtlKE9iamVjdC5lbnRyaWVzKGMpWzBdLDIpLE89TlswXSxEPU5bMV07aFtPXT1EfWVsc2UgaC50ZWNobj1jO2lmKG51bGwhPWwpaWYoIm9iamVjdCI9PT1UZShsKSl7dmFyIEI9a2UoT2JqZWN0LmVudHJpZXMobClbMF0sMiksTD1CWzBdLEk9QlsxXTtoW0xdPUl9ZWxzZSBoLmxlZ2VuZFRleHQ9bDtpZihudWxsIT11KWlmKCJvYmplY3QiPT09VGUodSkpe3ZhciBGPWtlKE9iamVjdC5lbnRyaWVzKHUpWzBdLDIpLFI9RlswXSxQPUZbMV07aFtSXT1QfWVsc2UgaC5sZWdlbmRTcHJpdGU9dX19LHVwZGF0ZVJlbFN0eWxlOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPU9lLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb209PT1lJiZ0LnRvPT09bn0pKTtpZih2b2lkIDAhPT1zKXtpZihudWxsIT1yKWlmKCJvYmplY3QiPT09VGUocikpe3ZhciBjPWtlKE9iamVjdC5lbnRyaWVzKHIpWzBdLDIpLGw9Y1swXSx1PWNbMV07c1tsXT11fWVsc2Ugcy50ZXh0Q29sb3I9cjtpZihudWxsIT1pKWlmKCJvYmplY3QiPT09VGUoaSkpe3ZhciBoPWtlKE9iamVjdC5lbnRyaWVzKGkpWzBdLDIpLGY9aFswXSxkPWhbMV07c1tmXT1kfWVsc2Ugcy5saW5lQ29sb3I9aTtpZihudWxsIT1hKWlmKCJvYmplY3QiPT09VGUoYSkpe3ZhciBwPWtlKE9iamVjdC5lbnRyaWVzKGEpWzBdLDIpLGc9cFswXSx5PXBbMV07c1tnXT1wYXJzZUludCh5KX1lbHNlIHMub2Zmc2V0WD1wYXJzZUludChhKTtpZihudWxsIT1vKWlmKCJvYmplY3QiPT09VGUobykpe3ZhciBtPWtlKE9iamVjdC5lbnRyaWVzKG8pWzBdLDIpLGI9bVswXSx2PW1bMV07c1tiXT1wYXJzZUludCh2KX1lbHNlIHMub2Zmc2V0WT1wYXJzZUludChvKX19LHVwZGF0ZUxheW91dENvbmZpZzpmdW5jdGlvbih0LGUsbil7dmFyIHI9TGUsaT1JZTtpZigib2JqZWN0Ij09PVRlKGUpKXt2YXIgYT1rZShPYmplY3QuZW50cmllcyhlKVswXSwyKSxvPShhWzBdLGFbMV0pO3I9cGFyc2VJbnQobyl9ZWxzZSByPXBhcnNlSW50KGUpO2lmKCJvYmplY3QiPT09VGUobikpe3ZhciBzPWtlKE9iamVjdC5lbnRyaWVzKG4pWzBdLDIpLGM9KHNbMF0sc1sxXSk7aT1wYXJzZUludChjKX1lbHNlIGk9cGFyc2VJbnQobik7cj49MSYmKExlPXIpLGk+PTEmJihJZT1pKX0sYXV0b1dyYXA6UmUsc2V0V3JhcDpmdW5jdGlvbih0KXtCZT10fSxnZXRDNFNoYXBlQXJyYXk6RmUsZ2V0QzRTaGFwZTpmdW5jdGlvbih0KXtyZXR1cm4gQ2UuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWxpYXM9PT10fSkpfSxnZXRDNFNoYXBlS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoRmUodCkpfSxnZXRCb3VuZGFyeXM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TmU6TmUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnRCb3VuZGFyeT09PXR9KSl9LGdldEN1cnJlbnRCb3VuZGFyeVBhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIEFlfSxnZXRQYXJlbnRCb3VuZGFyeVBhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIE1lfSxnZXRSZWxzOmZ1bmN0aW9uKCl7cmV0dXJuIE9lfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBEZX0sZ2V0QzRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEVlfSxnZXRDNFNoYXBlSW5Sb3c6ZnVuY3Rpb24oKXtyZXR1cm4gTGV9LGdldEM0Qm91bmRhcnlJblJvdzpmdW5jdGlvbigpe3JldHVybiBJZX0sc2V0QWNjVGl0bGU6eWUsZ2V0QWNjVGl0bGU6bWUsZ2V0QWNjRGVzY3JpcHRpb246dmUsc2V0QWNjRGVzY3JpcHRpb246YmUscGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gWHQoKS5jNH0sY2xlYXI6ZnVuY3Rpb24oKXtDZT1bXSxOZT1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sTWU9IiIsQWU9Imdsb2JhbCIsU2U9WyIiXSxPZT1bXSxTZT1bIiJdLERlPSIiLEJlPSExLExlPTQsSWU9Mn0sTElORVRZUEU6e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxBUlJPV1RZUEU6e0ZJTExFRDowLE9QRU46MX0sUExBQ0VNRU5UOntMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxzZXRUaXRsZTpmdW5jdGlvbih0KXt2YXIgZT1pZSh0LFh0KCkpO0RlPWV9LHNldEM0VHlwZTpmdW5jdGlvbih0KXt2YXIgZT1pZSh0LFh0KCkpO0VlPWV9fTt2YXIgamU9big3OTY3KTtmdW5jdGlvbiB6ZSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBZZT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7aWYobi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoIndpZHRoIixlLndpZHRoKSxuLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLG4uYXR0cigicngiLGUucngpLG4uYXR0cigicnkiLGUucnkpLCJ1bmRlZmluZWQiIT09ZS5hdHRycyYmbnVsbCE9PWUuYXR0cnMpZm9yKHZhciByIGluIGUuYXR0cnMpbi5hdHRyKHIsZS5hdHRyc1tyXSk7cmV0dXJuInVuZGVmaW5lZCIhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpK28vMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjKXtmb3IodmFyIGw9Yy5mb250U2l6ZSx1PWMuZm9udEZhbWlseSxoPWMuZm9udFdlaWdodCxmPXQuc3BsaXQodWUubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZCpsLWwqKGYubGVuZ3RoLTEpLzIsZz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGwpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5Iix1KTtnLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtYXRoZW1hdGljYWwiKSxyKGcscyl9fWZ1bmN0aW9uIG4odCxuLGksYSxvLHMsYyxsKXt2YXIgdT1uLmFwcGVuZCgic3dpdGNoIiksaD11LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGkpLmF0dHIoInkiLGEpLmF0dHIoIndpZHRoIixvKS5hdHRyKCJoZWlnaHQiLHMpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodCksZSh0LHUsaSxhLG8sMCxjLGwpLHIoaCxjKX1mdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpO2NvbnN0ICRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLmJnQ29sb3I/ZS5iZ0NvbG9yOm5bZS50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSxpPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjpuW2UudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLGE9ZS5mb250Q29sb3I/ZS5mb250Q29sb3I6IiNGRkZGRkYiLG89ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpvPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6bz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9In12YXIgcz10LmFwcGVuZCgiZyIpO3MuYXR0cigiY2xhc3MiLCJwZXJzb24tbWFuIik7dmFyIGM9e3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9O3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6Yy54PWUueCxjLnk9ZS55LGMuZmlsbD1yLGMud2lkdGg9ZS53aWR0aCxjLmhlaWdodD1lLmhlaWdodCxjLnN0eWxlPSJzdHJva2U6IitpKyI7c3Ryb2tlLXdpZHRoOjAuNTsiLGMucng9Mi41LGMucnk9Mi41LFllKHMsYyk7YnJlYWs7Y2FzZSJzeXN0ZW1fZGIiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX2RiIjpjYXNlImNvbnRhaW5lcl9kYiI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfZGIiOmNhc2UiY29tcG9uZW50X2RiIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9kYiI6cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixyKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMwLC0xMCBoYWxmLC0xMCBoYWxmLC0xMGMwLDAgaGFsZiwwIGhhbGYsMTBsMCxoZWlnaHRjMCwxMCAtaGFsZiwxMCAtaGFsZiwxMGMwLDAgLWhhbGYsMCAtaGFsZiwtMTBsMCwtaGVpZ2h0Ii5yZXBsYWNlQWxsKCJzdGFydHgiLGUueCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoImhhbGYiLGUud2lkdGgvMikucmVwbGFjZUFsbCgiaGVpZ2h0IixlLmhlaWdodCkpLHMuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMwLDEwIGhhbGYsMTAgaGFsZiwxMGMwLDAgaGFsZiwwIGhhbGYsLTEwIi5yZXBsYWNlQWxsKCJzdGFydHgiLGUueCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoImhhbGYiLGUud2lkdGgvMikpO2JyZWFrO2Nhc2Uic3lzdGVtX3F1ZXVlIjpjYXNlImV4dGVybmFsX3N5c3RlbV9xdWV1ZSI6Y2FzZSJjb250YWluZXJfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlIjpjYXNlImNvbXBvbmVudF9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfcXVldWUiOnMuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIscikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHlsd2lkdGgsMGM1LDAgNSxoYWxmIDUsaGFsZmMwLDAgMCxoYWxmIC01LGhhbGZsLXdpZHRoLDBjLTUsMCAtNSwtaGFsZiAtNSwtaGFsZmMwLDAgMCwtaGFsZiA1LC1oYWxmIi5yZXBsYWNlQWxsKCJzdGFydHgiLGUueCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoIndpZHRoIixlLndpZHRoKS5yZXBsYWNlQWxsKCJoYWxmIixlLmhlaWdodC8yKSkscy5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5Yy01LDAgLTUsaGFsZiAtNSxoYWxmYzAsaGFsZiA1LGhhbGYgNSxoYWxmIi5yZXBsYWNlQWxsKCJzdGFydHgiLGUueCtlLndpZHRoKS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgiaGFsZiIsZS5oZWlnaHQvMikpfXZhciBsLHUsaD0obD1uLHU9ZS50eXBlQzRTaGFwZS50ZXh0LHtmb250RmFtaWx5OmxbdSsiRm9udEZhbWlseSJdLGZvbnRTaXplOmxbdSsiRm9udFNpemUiXSxmb250V2VpZ2h0OmxbdSsiRm9udFdlaWdodCJdfSk7c3dpdGNoKHMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsYSkuYXR0cigiZm9udC1mYW1pbHkiLGguZm9udEZhbWlseSkuYXR0cigiZm9udC1zaXplIixoLmZvbnRTaXplLTIpLmF0dHIoImZvbnQtc3R5bGUiLCJpdGFsaWMiKS5hdHRyKCJsZW5ndGhBZGp1c3QiLCJzcGFjaW5nIikuYXR0cigidGV4dExlbmd0aCIsZS50eXBlQzRTaGFwZS53aWR0aCkuYXR0cigieCIsZS54K2Uud2lkdGgvMi1lLnR5cGVDNFNoYXBlLndpZHRoLzIpLmF0dHIoInkiLGUueStlLnR5cGVDNFNoYXBlLlkpLnRleHQoIjw8IitlLnR5cGVDNFNoYXBlLnRleHQrIj4+IiksZS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOiFmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5hcHBlbmQoImltYWdlIik7by5hdHRyKCJ3aWR0aCIsZSksby5hdHRyKCJoZWlnaHQiLG4pLG8uYXR0cigieCIsciksby5hdHRyKCJ5IixpKTt2YXIgcz1hLnN0YXJ0c1dpdGgoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCIpP2E6KDAsamUuTikoYSk7by5hdHRyKCJ4bGluazpocmVmIixzKX0ocyw0OCw0OCxlLngrZS53aWR0aC8yLTI0LGUueStlLmltYWdlLlksbyl9dmFyIGY9bltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBmLmZvbnRXZWlnaHQ9ImJvbGQiLGYuZm9udFNpemU9Zi5mb250U2l6ZSsyLGYuZm9udENvbG9yPWEsVWUobikoZS5sYWJlbC50ZXh0LHMsZS54LGUueStlLmxhYmVsLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDphfSxmKSwoZj1uW2UudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCkpLmZvbnRDb2xvcj1hLGUudGhjaG4mJiIiIT09ZS50aGNobi50ZXh0P1VlKG4pKGUudGhjaG4udGV4dCxzLGUueCxlLnkrZS50aGNobi5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpOmUudHlwZSYmIiIhPT1lLnR5cGUudGV4dCYmVWUobikoZS50eXBlLnRleHQscyxlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpLGUuZGVzY3ImJiIiIT09ZS5kZXNjci50ZXh0JiYoKGY9bi5wZXJzb25Gb250KCkpLmZvbnRDb2xvcj1hLFVlKG4pKGUuZGVzY3IudGV4dCxzLGUueCxlLnkrZS5kZXNjci5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YX0sZikpLGUuaGVpZ2h0fSxXZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT10LmFwcGVuZCgiZyIpLGE9MCxvPWZ1bmN0aW9uKHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gemUodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT96ZSh0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7biYmKHQ9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX0oZSk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlLGM9cy50ZXh0Q29sb3I/cy50ZXh0Q29sb3I6IiM0NDQ0NDQiLGw9cy5saW5lQ29sb3I/cy5saW5lQ29sb3I6IiM0NDQ0NDQiLHU9cy5vZmZzZXRYP3BhcnNlSW50KHMub2Zmc2V0WCk6MCxoPXMub2Zmc2V0WT9wYXJzZUludChzLm9mZnNldFkpOjA7aWYoMD09PWEpe3ZhciBmPWkuYXBwZW5kKCJsaW5lIik7Zi5hdHRyKCJ4MSIscy5zdGFydFBvaW50LngpLGYuYXR0cigieTEiLHMuc3RhcnRQb2ludC55KSxmLmF0dHIoIngyIixzLmVuZFBvaW50LngpLGYuYXR0cigieTIiLHMuZW5kUG9pbnQueSksZi5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIiksZi5hdHRyKCJzdHJva2UiLGwpLGYuc3R5bGUoImZpbGwiLCJub25lIiksInJlbF9iIiE9PXMudHlwZSYmZi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIiksImJpcmVsIiE9PXMudHlwZSYmInJlbF9iIiE9PXMudHlwZXx8Zi5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoI2Fycm93ZW5kKSIpLGE9LTF9ZWxzZXt2YXIgZD1pLmFwcGVuZCgicGF0aCIpO2QuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIikuYXR0cigic3Ryb2tlIixsKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5ICIucmVwbGFjZUFsbCgic3RhcnR4IixzLnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbCgic3RhcnR5IixzLnN0YXJ0UG9pbnQueSkucmVwbGFjZUFsbCgiY29udHJvbHgiLHMuc3RhcnRQb2ludC54KyhzLmVuZFBvaW50Lngtcy5zdGFydFBvaW50LngpLzItKHMuZW5kUG9pbnQueC1zLnN0YXJ0UG9pbnQueCkvNCkucmVwbGFjZUFsbCgiY29udHJvbHkiLHMuc3RhcnRQb2ludC55KyhzLmVuZFBvaW50Lnktcy5zdGFydFBvaW50LnkpLzIpLnJlcGxhY2VBbGwoInN0b3B4IixzLmVuZFBvaW50LngpLnJlcGxhY2VBbGwoInN0b3B5IixzLmVuZFBvaW50LnkpKSwicmVsX2IiIT09cy50eXBlJiZkLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSwiYmlyZWwiIT09cy50eXBlJiYicmVsX2IiIT09cy50eXBlfHxkLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgjYXJyb3dlbmQpIil9dmFyIHA9bi5tZXNzYWdlRm9udCgpO1VlKG4pKHMubGFiZWwudGV4dCxpLE1hdGgubWluKHMuc3RhcnRQb2ludC54LHMuZW5kUG9pbnQueCkrTWF0aC5hYnMocy5lbmRQb2ludC54LXMuc3RhcnRQb2ludC54KS8yK3UsTWF0aC5taW4ocy5zdGFydFBvaW50Lnkscy5lbmRQb2ludC55KStNYXRoLmFicyhzLmVuZFBvaW50Lnktcy5zdGFydFBvaW50LnkpLzIraCxzLmxhYmVsLndpZHRoLHMubGFiZWwuaGVpZ2h0LHtmaWxsOmN9LHApLHMudGVjaG4mJiIiIT09cy50ZWNobi50ZXh0JiYocD1uLm1lc3NhZ2VGb250KCksVWUobikoIlsiK3MudGVjaG4udGV4dCsiXSIsaSxNYXRoLm1pbihzLnN0YXJ0UG9pbnQueCxzLmVuZFBvaW50LngpK01hdGguYWJzKHMuZW5kUG9pbnQueC1zLnN0YXJ0UG9pbnQueCkvMit1LE1hdGgubWluKHMuc3RhcnRQb2ludC55LHMuZW5kUG9pbnQueSkrTWF0aC5hYnMocy5lbmRQb2ludC55LXMuc3RhcnRQb2ludC55KS8yK24ubWVzc2FnZUZvbnRTaXplKzUraCxNYXRoLm1heChzLmxhYmVsLndpZHRoLHMudGVjaG4ud2lkdGgpLHMudGVjaG4uaGVpZ2h0LHtmaWxsOmMsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxwKSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfX07amUuTjt2YXIgcWU9bigyNTM2KSxIZT1uLm4ocWUpLFZlPS9bJV17Mn1be11ccyooPzooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLEdlPS9ccyolJS4qXG4vZ20sWGU9e307Y29uc3QgWmU9ZnVuY3Rpb24odCxlKXtpZigodD10LnJlcGxhY2UoVmUsIiIpLnJlcGxhY2UoR2UsIlxuIikpLm1hdGNoKC9eXHMqQzRDb250ZXh0fEM0Q29udGFpbmVyfEM0Q29tcG9uZW50fEM0RHluYW1pY3xDNERlcGxveW1lbnQvKSlyZXR1cm4iYzQiO2lmKCJlcnJvciI9PT10KXJldHVybiJlcnJvciI7aWYodC5tYXRjaCgvXlxzKnNlcXVlbmNlRGlhZ3JhbS8pKXJldHVybiJzZXF1ZW5jZSI7aWYodC5tYXRjaCgvXlxzKmdhbnR0LykpcmV0dXJuImdhbnR0IjtpZih0Lm1hdGNoKC9eXHMqY2xhc3NEaWFncmFtLXYyLykpcmV0dXJuImNsYXNzRGlhZ3JhbSI7aWYodC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS8pKXJldHVybiBlJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLmNsYXNzLmRlZmF1bHRSZW5kZXJlcj8iY2xhc3NEaWFncmFtIjoiY2xhc3MiO2lmKHQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0tdjIvKSlyZXR1cm4ic3RhdGVEaWFncmFtIjtpZih0Lm1hdGNoKC9eXHMqc3RhdGVEaWFncmFtLykpcmV0dXJuIGUmJmUuY2xhc3MmJiJkYWdyZS13cmFwcGVyIj09PWUuc3RhdGUuZGVmYXVsdFJlbmRlcmVyPyJzdGF0ZURpYWdyYW0iOiJzdGF0ZSI7aWYodC5tYXRjaCgvXlxzKmZsb3djaGFydC8pKXJldHVybiJmbG93Y2hhcnQtdjIiO2lmKHQubWF0Y2goL15ccyppbmZvLykpcmV0dXJuImluZm8iO2lmKHQubWF0Y2goL15ccypwaWUvKSlyZXR1cm4icGllIjtpZih0Lm1hdGNoKC9eXHMqZXJEaWFncmFtLykpcmV0dXJuImVyIjtpZih0Lm1hdGNoKC9eXHMqam91cm5leS8pKXJldHVybiJqb3VybmV5IjtpZih0Lm1hdGNoKC9eXHMqcmVxdWlyZW1lbnQvKXx8dC5tYXRjaCgvXlxzKnJlcXVpcmVtZW50RGlhZ3JhbS8pKXJldHVybiJyZXF1aXJlbWVudCI7aWYoZSYmZS5mbG93Y2hhcnQmJiJkYWdyZS13cmFwcGVyIj09PWUuZmxvd2NoYXJ0LmRlZmF1bHRSZW5kZXJlcilyZXR1cm4iZmxvd2NoYXJ0LXYyIjtmb3IodmFyIG49T2JqZWN0LmtleXMoWGUpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxhPVhlW2ldO2lmKGEmJmEuZGV0ZWN0b3IodCkpcmV0dXJuIGl9cmV0dXJuImZsb3djaGFydCJ9O3ZhciBRZT12b2lkIDA7ZnVuY3Rpb24gS2UodCl7cmV0dXJuIEtlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxLZSh0KX1mdW5jdGlvbiBKZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fWZ1bmN0aW9uIHRuKHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj1ubih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gZW4odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHJuKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8bm4odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbm4odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHJuKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/cm4odCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHJuKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGFuLG9uPXtjdXJ2ZUJhc2lzOmwuY3VydmVCYXNpcyxjdXJ2ZUJhc2lzQ2xvc2VkOmwuY3VydmVCYXNpc0Nsb3NlZCxjdXJ2ZUJhc2lzT3BlbjpsLmN1cnZlQmFzaXNPcGVuLGN1cnZlTGluZWFyOmwuY3VydmVMaW5lYXIsY3VydmVMaW5lYXJDbG9zZWQ6bC5jdXJ2ZUxpbmVhckNsb3NlZCxjdXJ2ZU1vbm90b25lWDpsLmN1cnZlTW9ub3RvbmVYLGN1cnZlTW9ub3RvbmVZOmwuY3VydmVNb25vdG9uZVksY3VydmVOYXR1cmFsOmwuY3VydmVOYXR1cmFsLGN1cnZlU3RlcDpsLmN1cnZlU3RlcCxjdXJ2ZVN0ZXBBZnRlcjpsLmN1cnZlU3RlcEFmdGVyLGN1cnZlU3RlcEJlZm9yZTpsLmN1cnZlU3RlcEJlZm9yZX0sc249L1slXXsyfVt7XVxzKig/Oig/OihcdyspXHMqOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksY249L1xzKig/Oig/OihcdyspKD89Oik6fChcdyspKVxzKig/Oig/OihcdyspKXwoKD86KD8hW31dWyVdezJ9KS58XHI/XG4pKikpP1xzKikoPzpbfV1bJV17Mn0pPy9naSxsbj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt0cnl7dmFyIG49bmV3IFJlZ0V4cCgiWyVdezJ9KD8hW3tdIi5jb25jYXQoY24uc291cmNlLCIpKD89W31dWyVdezJ9KS4qXG4iKSwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UobiwiIikucmVwbGFjZSgvJy9nbSwnIicpLG8uZGVidWcoIkRldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSIuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpO2Zvcih2YXIgcixpPVtdO251bGwhPT0ocj1zbi5leGVjKHQpKTspaWYoci5pbmRleD09PXNuLmxhc3RJbmRleCYmc24ubGFzdEluZGV4KyssciYmIWV8fGUmJnJbMV0mJnJbMV0ubWF0Y2goZSl8fGUmJnJbMl0mJnJbMl0ubWF0Y2goZSkpe3ZhciBhPXJbMV0/clsxXTpyWzJdLHM9clszXT9yWzNdLnRyaW0oKTpyWzRdP0pTT04ucGFyc2Uocls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIDA9PT1pLmxlbmd0aCYmaS5wdXNoKHt0eXBlOnQsYXJnczpudWxsfSksMT09PWkubGVuZ3RoP2lbMF06aX1jYXRjaChuKXtyZXR1cm4gby5lcnJvcigiRVJST1I6ICIuY29uY2F0KG4ubWVzc2FnZSwiIC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZVxuICAgICAgIikuY29uY2F0KG51bGwhPT1lPyIgdHlwZToiK2U6IiIsIiBiYXNlZCBvbiB0aGUgdGV4dDoiKS5jb25jYXQodCkpLHt0eXBlOm51bGwsYXJnczpudWxsfX19LHVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07dmFyIG89ZT9lLmFwcGx5KFFlLGkpOmlbMF07aWYobyBpbiBuKXJldHVybiBuW29dO3ZhciBzPXQuYXBwbHkodm9pZCAwLGkpO3JldHVybiBuW29dPXMsc319LGhuPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGU7dmFyIG49ImN1cnZlIi5jb25jYXQodC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpKTtyZXR1cm4gb25bbl18fGV9LGZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSk6MH0sZG49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IiIscj0wO3I8dC5sZW5ndGg7cisrKXZvaWQgMCE9PXRbcl0mJih0W3JdLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHx0W3JdLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/bj1uK3Rbcl0rIjsiOmU9ZSt0W3JdKyI7Iik7cmV0dXJue3N0eWxlOmUsbGFiZWxTdHlsZTpufX0scG49MCxnbj1mdW5jdGlvbigpe3JldHVybiBwbisrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrcG59LHluPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uLmxlbmd0aCxpPTA7aTx0O2krKyllKz1uLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqcikpO3JldHVybiBlfSh0Lmxlbmd0aCl9LG1uPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS50ZXh0LnJlcGxhY2UodWUubGluZUJyZWFrUmVnZXgsIiAiKSxyPXQuYXBwZW5kKCJ0ZXh0Iik7ci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLHIuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHIuc3R5bGUoImZvbnQtc2l6ZSIsZS5mb250U2l6ZSksci5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksci5hdHRyKCJmaWxsIixlLmZpbGwpLHZvaWQgMCE9PWUuY2xhc3MmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpO3ZhciBpPXIuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBpLmF0dHIoIngiLGUueCsyKmUudGV4dE1hcmdpbiksaS5hdHRyKCJmaWxsIixlLmZpbGwpLGkudGV4dChuKSxyfSxibj11bigoZnVuY3Rpb24odCxlLG4pe2lmKCF0KXJldHVybiB0O2lmKG49T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLGpvaW5XaXRoOiI8YnIvPiJ9LG4pLHVlLmxpbmVCcmVha1JlZ2V4LnRlc3QodCkpcmV0dXJuIHQ7dmFyIHI9dC5zcGxpdCgiICIpLGk9W10sYT0iIjtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbih0LG8pe3ZhciBzPXhuKCIiLmNvbmNhdCh0LCIgIiksbiksYz14bihhLG4pO2lmKHM+ZSl7dmFyIGw9dm4odCxlLCItIixuKSx1PWwuaHlwaGVuYXRlZFN0cmluZ3MsaD1sLnJlbWFpbmluZ1dvcmQ7aS5wdXNoLmFwcGx5KGksW2FdLmNvbmNhdChlbih1KSkpLGE9aH1lbHNlIGMrcz49ZT8oaS5wdXNoKGEpLGE9dCk6YT1bYSx0XS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO28rMT09PXIubGVuZ3RoJiZpLnB1c2goYSl9KSksaS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiIiIT09dH0pKS5qb2luKG4uam9pbldpdGgpfSksKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLCItIikuY29uY2F0KG4uZm9udFNpemUsIi0iKS5jb25jYXQobi5mb250V2VpZ2h0LCItIikuY29uY2F0KG4uZm9udEZhbWlseSwiLSIpLmNvbmNhdChuLmpvaW5XaXRoKX0pKSx2bj11bigoZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Ii0iLHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LHIpO3ZhciBpPXQuc3BsaXQoIiIpLGE9W10sbz0iIjtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0LHMpe3ZhciBjPSIiLmNvbmNhdChvKS5jb25jYXQodCk7aWYoeG4oYyxyKT49ZSl7dmFyIGw9cysxLHU9aS5sZW5ndGg9PT1sLGg9IiIuY29uY2F0KGMpLmNvbmNhdChuKTthLnB1c2godT9jOmgpLG89IiJ9ZWxzZSBvPWN9KSkse2h5cGhlbmF0ZWRTdHJpbmdzOmEscmVtYWluaW5nV29yZDpvfX0pLChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLCItIikuY29uY2F0KG4sIi0iKS5jb25jYXQoci5mb250U2l6ZSwiLSIpLmNvbmNhdChyLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoci5mb250RmFtaWx5KX0pKSxfbj1mdW5jdGlvbih0LGUpe3JldHVybiBlPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MTV9LGUpLGtuKHQsZSkuaGVpZ2h0fSx4bj1mdW5jdGlvbih0LGUpe3JldHVybiBlPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSksa24odCxlKS53aWR0aH0sa249dW4oKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCJ9LGUpLHI9bi5mb250U2l6ZSxpPW4uZm9udEZhbWlseSxhPW4uZm9udFdlaWdodDtpZighdClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07dmFyIG89WyJzYW5zLXNlcmlmIixpXSxzPXQuc3BsaXQodWUubGluZUJyZWFrUmVnZXgpLGM9W10sdT0oMCxsLnNlbGVjdCkoImJvZHkiKTtpZighdS5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IodmFyIGg9dS5hcHBlbmQoInN2ZyIpLGY9MCxkPW87ZjxkLmxlbmd0aDtmKyspe3ZhciBwLGc9ZFtmXSx5PTAsbT17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LGI9dG4ocyk7dHJ5e2ZvcihiLnMoKTshKHA9Yi5uKCkpLmRvbmU7KXt2YXIgdj1wLnZhbHVlLF89e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07Xy50ZXh0PXY7dmFyIHg9bW4oaCxfKS5zdHlsZSgiZm9udC1zaXplIixyKS5zdHlsZSgiZm9udC13ZWlnaHQiLGEpLnN0eWxlKCJmb250LWZhbWlseSIsZyksaz0oeC5fZ3JvdXBzfHx4KVswXVswXS5nZXRCQm94KCk7bS53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KG0ud2lkdGgsay53aWR0aCkpLHk9TWF0aC5yb3VuZChrLmhlaWdodCksbS5oZWlnaHQrPXksbS5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgobS5saW5lSGVpZ2h0LHkpKX19Y2F0Y2godCl7Yi5lKHQpfWZpbmFsbHl7Yi5mKCl9Yy5wdXNoKG0pfXJldHVybiBoLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSx3bj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1hcDtyZXR1cm4gbj8oci5zZXQoIndpZHRoIiwiMTAwJSIpLHIuc2V0KCJzdHlsZSIsIm1heC13aWR0aDogIi5jb25jYXQoZSwicHg7IikpKTpyLnNldCgid2lkdGgiLGUpLHJ9LFRuPWZ1bmN0aW9uKHQsZSxuLHIpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHI9dG4oZSk7dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO3QuYXR0cihpWzBdLGlbMV0pfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19KHQsd24oMCwxKm4scikpfSxFbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1lLm5vZGUoKS5nZXRCQm94KCksYT1pLndpZHRoLHM9aS5oZWlnaHQ7by5pbmZvKCJTVkcgYm91bmRzOiAiLmNvbmNhdChhLCJ4IikuY29uY2F0KHMpLGkpO3ZhciBjPXQuX2xhYmVsLndpZHRoLGw9dC5fbGFiZWwuaGVpZ2h0O28uaW5mbygiR3JhcGggYm91bmRzOiAiLmNvbmNhdChjLCJ4IikuY29uY2F0KGwpLHQpLGM9YSsyKm4sbD1zKzIqbixvLmluZm8oIkNhbGN1bGF0ZWQgYm91bmRzOiAiLmNvbmNhdChjLCJ4IikuY29uY2F0KGwpKSxUbihlLDAsYyxyKTt2YXIgdT0iIi5jb25jYXQoaS54LW4sIiAiKS5jb25jYXQoaS55LW4sIiAiKS5jb25jYXQoaS53aWR0aCsyKm4sIiAiKS5jb25jYXQoaS5oZWlnaHQrMipuKTtvLmluZm8oIkdyYXBoLmxhYmVsIix0Ll9sYWJlbCwic3dpZHRoIixhLCJzaGVpZ2h0IixzLCJ3aWR0aCIsYywiaGVpZ2h0IixsLCJ2Qm94Iix1KSxlLmF0dHIoInZpZXdCb3giLHUpfSxDbj1mdW5jdGlvbiB0KGUpe2lmKG8uZGVidWcoImRpcmVjdGl2ZVNhbml0aXplciBjYWxsZWQgd2l0aCIsZSksIm9iamVjdCI9PT1LZShlKSYmKGUubGVuZ3RoP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9KSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7by5kZWJ1ZygiQ2hlY2tpbmcga2V5IixuKSwwPT09bi5pbmRleE9mKCJfXyIpJiYoby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgX18gb3B0aW9uIixuKSxkZWxldGUgZVtuXSksbi5pbmRleE9mKCJwcm90byIpPj0wJiYoby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgcHJvdG8gb3B0aW9uIixuKSxkZWxldGUgZVtuXSksbi5pbmRleE9mKCJjb25zdHIiKT49MCYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIGNvbnN0ciBvcHRpb24iLG4pLGRlbGV0ZSBlW25dKSxuLmluZGV4T2YoInRoZW1lQ1NTIik+PTAmJihvLmRlYnVnKCJzYW5pdGl6aW5nIHRoZW1lQ3NzIG9wdGlvbiIpLGVbbl09U24oZVtuXSkpLG4uaW5kZXhPZigiZm9udEZhbWlseSIpPj0wJiYoby5kZWJ1Zygic2FuaXRpemluZyBmb250RmFtaWx5IG9wdGlvbiIpLGVbbl09U24oZVtuXSkpLG4uaW5kZXhPZigiYWx0Rm9udEZhbWlseSIpPj0wJiYoby5kZWJ1Zygic2FuaXRpemluZyBhbHRGb250RmFtaWx5IG9wdGlvbiIpLGVbbl09U24oZVtuXSkpLGp0LmluZGV4T2Yobik8MD8oby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgb3B0aW9uIixuKSxkZWxldGUgZVtuXSk6Im9iamVjdCI9PT1LZShlW25dKSYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIG9iamVjdCIsbiksdChlW25dKSl9KSkpLGUudGhlbWVWYXJpYWJsZXMpZm9yKHZhciBuPU9iamVjdC5rZXlzKGUudGhlbWVWYXJpYWJsZXMpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxhPWUudGhlbWVWYXJpYWJsZXNbaV07YSYmYS5tYXRjaCYmIWEubWF0Y2goL15bYS16QS1aMC05IywiOygpJS4gXSskLykmJihlLnRoZW1lVmFyaWFibGVzW2ldPSIiKX1vLmRlYnVnKCJBZnRlciBzYW5pdGl6YXRpb24iLGUpfSxTbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPTAscj0wO3I8dC5sZW5ndGg7cisrKXtpZihlPG4pcmV0dXJuInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOyJ7Ij09PXRbcl0/ZSsrOiJ9Ij09PXRbcl0mJm4rK31yZXR1cm4gZSE9PW4/InsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOnR9O2NvbnN0IEFuPXthc3NpZ25XaXRoRGVwdGg6USx3cmFwTGFiZWw6Ym4sY2FsY3VsYXRlVGV4dEhlaWdodDpfbixjYWxjdWxhdGVUZXh0V2lkdGg6eG4sY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6a24sY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzOnduLGNvbmZpZ3VyZVN2Z1NpemU6VG4sc2V0dXBHcmFwaFZpZXdib3g6RW4sZGV0ZWN0SW5pdDpmdW5jdGlvbih0LGUpe3ZhciBuPWxuKHQsLyg/OmluaXRcYil8KD86aW5pdGlhbGl6ZVxiKS8pLHI9e307aWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIGk9bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFyZ3N9KSk7Q24oaSkscj1RKHIsZW4oaSkpfWVsc2Ugcj1uLmFyZ3M7aWYocil7dmFyIGE9WmUodCxlKTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXJbdF0mJigiZmxvd2NoYXJ0LXYyIj09PWEmJihhPSJmbG93Y2hhcnQiKSxyW2FdPXJbdF0sZGVsZXRlIHJbdF0pfSkpfXJldHVybiByfSxkZXRlY3REaXJlY3RpdmU6bG4saXNTdWJzdHJpbmdJbkFycmF5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZVtuXS5tYXRjaCh0KSlyZXR1cm4gbjtyZXR1cm4tMX0saW50ZXJwb2xhdGVUb0N1cnZlOmhuLGNhbGNMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbih0KXt2YXIgZSxuPTA7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtuKz1mbih0LGUpLGU9dH0pKTt2YXIgcj1uLzIsaT12b2lkIDA7cmV0dXJuIGU9dm9pZCAwLHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoZSYmIWkpe3ZhciBuPWZuKHQsZSk7aWYobjxyKXItPW47ZWxzZXt2YXIgYT1yL247YTw9MCYmKGk9ZSksYT49MSYmKGk9e3g6dC54LHk6dC55fSksYT4wJiZhPDEmJihpPXt4OigxLWEpKmUueCthKnQueCx5OigxLWEpKmUueSthKnQueX0pfX1lPXR9KSksaX0odCl9LGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtvLmluZm8oIm91ciBwb2ludHMiLGUpLGVbMF0hPT1uJiYoZT1lLnJldmVyc2UoKSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtmbih0LHIpLHI9dH0pKTt2YXIgaSxhPTI1O3I9dm9pZCAwLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWkpe3ZhciBlPWZuKHQscik7aWYoZTxhKWEtPWU7ZWxzZXt2YXIgbj1hL2U7bjw9MCYmKGk9ciksbj49MSYmKGk9e3g6dC54LHk6dC55fSksbj4wJiZuPDEmJihpPXt4OigxLW4pKnIueCtuKnQueCx5OigxLW4pKnIueStuKnQueX0pfX1yPXR9KSk7dmFyIHM9dD8xMDo1LGM9TWF0aC5hdGFuMihlWzBdLnktaS55LGVbMF0ueC1pLngpLGw9e3g6MCx5OjB9O3JldHVybiBsLng9TWF0aC5zaW4oYykqcysoZVswXS54K2kueCkvMixsLnk9LU1hdGguY29zKGMpKnMrKGVbMF0ueStpLnkpLzIsbH0sY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHIsaT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG4pKTtvLmluZm8oIm91ciBwb2ludHMiLGkpLCJzdGFydF9sZWZ0IiE9PWUmJiJzdGFydF9yaWdodCIhPT1lJiYoaT1pLnJldmVyc2UoKSksaS5mb3JFYWNoKChmdW5jdGlvbih0KXtmbih0LHIpLHI9dH0pKTt2YXIgYSxzPTI1K3Q7cj12b2lkIDAsaS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhYSl7dmFyIGU9Zm4odCxyKTtpZihlPHMpcy09ZTtlbHNle3ZhciBuPXMvZTtuPD0wJiYoYT1yKSxuPj0xJiYoYT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGE9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgYz0xMCsuNSp0LGw9TWF0aC5hdGFuMihpWzBdLnktYS55LGlbMF0ueC1hLngpLHU9e3g6MCx5OjB9O3JldHVybiB1Lng9TWF0aC5zaW4obCkqYysoaVswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwpKmMrKGlbMF0ueSthLnkpLzIsInN0YXJ0X2xlZnQiPT09ZSYmKHUueD1NYXRoLnNpbihsK01hdGguUEkpKmMrKGlbMF0ueCthLngpLzIsdS55PS1NYXRoLmNvcyhsK01hdGguUEkpKmMrKGlbMF0ueSthLnkpLzIpLCJlbmRfcmlnaHQiPT09ZSYmKHUueD1NYXRoLnNpbihsLU1hdGguUEkpKmMrKGlbMF0ueCthLngpLzItNSx1Lnk9LU1hdGguY29zKGwtTWF0aC5QSSkqYysoaVswXS55K2EueSkvMi01KSwiZW5kX2xlZnQiPT09ZSYmKHUueD1NYXRoLnNpbihsKSpjKyhpWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsKSpjKyhpWzBdLnkrYS55KS8yLTUpLHV9LGZvcm1hdFVybDpmdW5jdGlvbih0LGUpe3ZhciBuPXQudHJpbSgpO2lmKG4pcmV0dXJuImxvb3NlIiE9PWUuc2VjdXJpdHlMZXZlbD8oMCxqZS5OKShuKTpufSxnZXRTdHlsZXNGcm9tQXJyYXk6ZG4sZ2VuZXJhdGVJZDpnbixyYW5kb206eW4sbWVtb2l6ZTp1bixydW5GdW5jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXQuc3BsaXQoIi4iKSxyPW4ubGVuZ3RoLTEsaT1uW3JdLGE9d2luZG93LG89MDtvPHI7bysrKWlmKCEoYT1hW25bb11dKSlyZXR1cm47Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkocz4xP3MtMTowKSxsPTE7bDxzO2wrKyljW2wtMV09YXJndW1lbnRzW2xdOyhlPWEpW2ldLmFwcGx5KGUsYyl9LGVudGl0eURlY29kZTpmdW5jdGlvbih0KXtyZXR1cm4gYW49YW58fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLGFuLmlubmVySFRNTD10LHVuZXNjYXBlKGFuLnRleHRDb250ZW50KX0saW5pdElkR2VuZXJhdG9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4peyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuZGV0ZXJtaW5pc3RpYz1lLHRoaXMuc2VlZD1uLHRoaXMuY291bnQ9bj9uLmxlbmd0aDowfXZhciBlLG47cmV0dXJuIGU9dCwobj1be2tleToibmV4dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXRlcm1pbmlzdGljP3RoaXMuY291bnQrKzpEYXRlLm5vdygpfX1dKSYmSmUoZS5wcm90b3R5cGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKSxkaXJlY3RpdmVTYW5pdGl6ZXI6Q24sc2FuaXRpemVDc3M6U259O2Z1bmN0aW9uIE1uKHQsZSxuKXtpZih2b2lkIDAhPT1lLmluc2VydCl7dmFyIHI9dC5nZXRBY2NUaXRsZSgpLGk9dC5nZXRBY2NEZXNjcmlwdGlvbigpO2UuYXR0cigicm9sZSIsImltZyIpLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsImNoYXJ0LXRpdGxlLSIrbisiIGNoYXJ0LWRlc2MtIituKSxlLmluc2VydCgiZGVzYyIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIiwiY2hhcnQtZGVzYy0iK24pLnRleHQoaSksZS5pbnNlcnQoInRpdGxlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLCJjaGFydC10aXRsZS0iK24pLnRleHQocil9fWZ1bmN0aW9uIE5uKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gT24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBEbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fWZ1bmN0aW9uIEJuKHQsZSxuKXtyZXR1cm4gZSYmRG4odC5wcm90b3R5cGUsZSksbiYmRG4odCxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fXZhciBMbj0wLEluPTAsRm49NCxSbj0yO3FlLnBhcnNlci55eT1QZTt2YXIgUG49e30sam49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe09uKHRoaXMsdCksdGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17fSx0aGlzLmRhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHg9dm9pZCAwLHRoaXMuZGF0YS5zdGFydHk9dm9pZCAwLHRoaXMuZGF0YS5zdG9weT12b2lkIDAsdGhpcy5kYXRhLndpZHRoTGltaXQ9dm9pZCAwLHRoaXMubmV4dERhdGE9e30sdGhpcy5uZXh0RGF0YS5zdGFydHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B5PXZvaWQgMCx0aGlzLm5leHREYXRhLmNudD0wLHpuKGUuZGIuZ2V0Q29uZmlnKCkpfXJldHVybiBCbih0LFt7a2V5OiJzZXREYXRhIix2YWx1ZTpmdW5jdGlvbih0LGUsbixyKXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PXQsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9ZSx0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PW4sdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9cn19LHtrZXk6InVwZGF0ZVZhbCIsdmFsdWU6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9fSx7a2V5OiJpbnNlcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7dmFyIGU9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrdC5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCsyKnQubWFyZ2luLG49ZSt0LndpZHRoLHI9dGhpcy5uZXh0RGF0YS5zdGFydHkrMip0Lm1hcmdpbixpPXIrdC5oZWlnaHQ7KGU+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxuPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+Rm4pJiYoZT10aGlzLm5leHREYXRhLnN0YXJ0eCt0Lm1hcmdpbitQbi5uZXh0TGluZVBhZGRpbmdYLHI9dGhpcy5uZXh0RGF0YS5zdG9weSsyKnQubWFyZ2luLHRoaXMubmV4dERhdGEuc3RvcHg9bj1lK3Qud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PWk9cit0LmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSx0Lng9ZSx0Lnk9cix0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIsZSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLHIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLGksTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIsZSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixyLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsbixNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLGksTWF0aC5tYXgpfX0se2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSx6bih0LmRiLmdldENvbmZpZygpKX19LHtrZXk6ImJ1bXBMYXN0TWFyZ2luIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmRhdGEuc3RvcHgrPXQsdGhpcy5kYXRhLnN0b3B5Kz10fX1dKSx0fSgpLHpuPWZ1bmN0aW9uKHQpe1EoUG4sdCksdC5mb250RmFtaWx5JiYoUG4ucGVyc29uRm9udEZhbWlseT1Qbi5zeXN0ZW1Gb250RmFtaWx5PVBuLm1lc3NhZ2VGb250RmFtaWx5PXQuZm9udEZhbWlseSksdC5mb250U2l6ZSYmKFBuLnBlcnNvbkZvbnRTaXplPVBuLnN5c3RlbUZvbnRTaXplPVBuLm1lc3NhZ2VGb250U2l6ZT10LmZvbnRTaXplKSx0LmZvbnRXZWlnaHQmJihQbi5wZXJzb25Gb250V2VpZ2h0PVBuLnN5c3RlbUZvbnRXZWlnaHQ9UG4ubWVzc2FnZUZvbnRXZWlnaHQ9dC5mb250V2VpZ2h0KX0sWW49ZnVuY3Rpb24odCxlKXtyZXR1cm57Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX19LFVuPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnQuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnQuYm91bmRhcnlGb250V2VpZ2h0fX07ZnVuY3Rpb24gJG4odCxlLG4scixpKXtpZighZVt0XS53aWR0aClpZihuKWVbdF0udGV4dD1ibihlW3RdLnRleHQsaSxyKSxlW3RdLnRleHRMaW5lcz1lW3RdLnRleHQuc3BsaXQodWUubGluZUJyZWFrUmVnZXgpLmxlbmd0aCxlW3RdLndpZHRoPWksZVt0XS5oZWlnaHQ9X24oZVt0XS50ZXh0LHIpO2Vsc2V7dmFyIGE9ZVt0XS50ZXh0LnNwbGl0KHVlLmxpbmVCcmVha1JlZ2V4KTtlW3RdLnRleHRMaW5lcz1hLmxlbmd0aDt2YXIgbz0wO2VbdF0uaGVpZ2h0PTAsZVt0XS53aWR0aD0wO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKWVbdF0ud2lkdGg9TWF0aC5tYXgoeG4oYVtzXSxyKSxlW3RdLndpZHRoKSxvPV9uKGFbc10sciksZVt0XS5oZWlnaHQ9ZVt0XS5oZWlnaHQrb319dmFyIFduPWZ1bmN0aW9uKHQsZSxuKXtlLng9bi5kYXRhLnN0YXJ0eCxlLnk9bi5kYXRhLnN0YXJ0eSxlLndpZHRoPW4uZGF0YS5zdG9weC1uLmRhdGEuc3RhcnR4LGUuaGVpZ2h0PW4uZGF0YS5zdG9weS1uLmRhdGEuc3RhcnR5LGUubGFiZWwueT1Qbi5jNFNoYXBlTWFyZ2luLTM1O3ZhciByPWUud3JhcCYmUG4ud3JhcCxpPVVuKFBuKTtpLmZvbnRTaXplPWkuZm9udFNpemUrMixpLmZvbnRXZWlnaHQ9ImJvbGQiLCRuKCJsYWJlbCIsZSxyLGkseG4oZS5sYWJlbC50ZXh0LGkpKSxmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5hcHBlbmQoImciKSxpPWUuYmdDb2xvcj9lLmJnQ29sb3I6Im5vbmUiLGE9ZS5ib3JkZXJDb2xvcj9lLmJvcmRlckNvbG9yOiIjNDQ0NDQ0IixvPWUuZm9udENvbG9yP2UuZm9udENvbG9yOiJibGFjayIscz17InN0cm9rZS13aWR0aCI6MSwic3Ryb2tlLWRhc2hhcnJheSI6IjcuMCw3LjAifTtlLm5vZGVUeXBlJiYocz17InN0cm9rZS13aWR0aCI6MX0pO3ZhciBjPXt4OmUueCx5OmUueSxmaWxsOmksc3Ryb2tlOmEsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQscng6Mi41LHJ5OjIuNSxhdHRyczpzfTtZZShyLGMpO3ZhciBsPW4uYm91bmRhcnlGb250KCk7bC5mb250V2VpZ2h0PSJib2xkIixsLmZvbnRTaXplPWwuZm9udFNpemUrMixsLmZvbnRDb2xvcj1vLFVlKG4pKGUubGFiZWwudGV4dCxyLGUueCxlLnkrZS5sYWJlbC5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxsKSxlLnR5cGUmJiIiIT09ZS50eXBlLnRleHQmJigobD1uLmJvdW5kYXJ5Rm9udCgpKS5mb250Q29sb3I9byxVZShuKShlLnR5cGUudGV4dCxyLGUueCxlLnkrZS50eXBlLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LGwpKSxlLmRlc2NyJiYiIiE9PWUuZGVzY3IudGV4dCYmKChsPW4uYm91bmRhcnlGb250KCkpLmZvbnRTaXplPWwuZm9udFNpemUtMixsLmZvbnRDb2xvcj1vLFVlKG4pKGUuZGVzY3IudGV4dCxyLGUueCxlLnkrZS5kZXNjci5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxsKSl9KHQsZSxQbil9LHFuPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT0wLGE9MDthPHIubGVuZ3RoO2ErKyl7aT0wO3ZhciBvPW5bclthXV0scz1ZbihQbixvLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChzLmZvbnRTaXplPXMuZm9udFNpemUtMixvLnR5cGVDNFNoYXBlLndpZHRoPXhuKCI8PCIrby50eXBlQzRTaGFwZS50ZXh0KyI+PiIscyksby50eXBlQzRTaGFwZS5oZWlnaHQ9cy5mb250U2l6ZSsyLG8udHlwZUM0U2hhcGUuWT1Qbi5jNFNoYXBlUGFkZGluZyxpPW8udHlwZUM0U2hhcGUuWStvLnR5cGVDNFNoYXBlLmhlaWdodC00LG8uaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSxvLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6by5pbWFnZS53aWR0aD00OCxvLmltYWdlLmhlaWdodD00OCxvLmltYWdlLlk9aSxpPW8uaW1hZ2UuWStvLmltYWdlLmhlaWdodH1vLnNwcml0ZSYmKG8uaW1hZ2Uud2lkdGg9NDgsby5pbWFnZS5oZWlnaHQ9NDgsby5pbWFnZS5ZPWksaT1vLmltYWdlLlkrby5pbWFnZS5oZWlnaHQpO3ZhciBjPW8ud3JhcCYmUG4ud3JhcCxsPVBuLndpZHRoLTIqUG4uYzRTaGFwZVBhZGRpbmcsdT1ZbihQbixvLnR5cGVDNFNoYXBlLnRleHQpO3UuZm9udFNpemU9dS5mb250U2l6ZSsyLHUuZm9udFdlaWdodD0iYm9sZCIsJG4oImxhYmVsIixvLGMsdSxsKSxvLmxhYmVsLlk9aSs4LGk9by5sYWJlbC5ZK28ubGFiZWwuaGVpZ2h0LG8udHlwZSYmIiIhPT1vLnR5cGUudGV4dD8oby50eXBlLnRleHQ9IlsiK28udHlwZS50ZXh0KyJdIiwkbigidHlwZSIsbyxjLFluKFBuLG8udHlwZUM0U2hhcGUudGV4dCksbCksby50eXBlLlk9aSs1LGk9by50eXBlLlkrby50eXBlLmhlaWdodCk6by50ZWNobiYmIiIhPT1vLnRlY2huLnRleHQmJihvLnRlY2huLnRleHQ9IlsiK28udGVjaG4udGV4dCsiXSIsJG4oInRlY2huIixvLGMsWW4oUG4sby50ZWNobi50ZXh0KSxsKSxvLnRlY2huLlk9aSs1LGk9by50ZWNobi5ZK28udGVjaG4uaGVpZ2h0KTt2YXIgaD1pLGY9by5sYWJlbC53aWR0aDtvLmRlc2NyJiYiIiE9PW8uZGVzY3IudGV4dCYmKCRuKCJkZXNjciIsbyxjLFluKFBuLG8udHlwZUM0U2hhcGUudGV4dCksbCksby5kZXNjci5ZPWkrMjAsaT1vLmRlc2NyLlkrby5kZXNjci5oZWlnaHQsZj1NYXRoLm1heChvLmxhYmVsLndpZHRoLG8uZGVzY3Iud2lkdGgpLGg9aS01Km8uZGVzY3IudGV4dExpbmVzKSxmKz1Qbi5jNFNoYXBlUGFkZGluZyxvLndpZHRoPU1hdGgubWF4KG8ud2lkdGh8fFBuLndpZHRoLGYsUG4ud2lkdGgpLG8uaGVpZ2h0PU1hdGgubWF4KG8uaGVpZ2h0fHxQbi5oZWlnaHQsaCxQbi5oZWlnaHQpLG8ubWFyZ2luPW8ubWFyZ2lufHxQbi5jNFNoYXBlTWFyZ2luLHQuaW5zZXJ0KG8pLCRlKGUsbyxQbil9dC5idW1wTGFzdE1hcmdpbihQbi5jNFNoYXBlTWFyZ2luKX0sSG49Qm4oKGZ1bmN0aW9uIHQoZSxuKXtPbih0aGlzLHQpLHRoaXMueD1lLHRoaXMueT1ufSkpLFZuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC54LHI9dC55LGk9ZS54LGE9ZS55LG89bit0LndpZHRoLzIscz1yK3QuaGVpZ2h0LzIsYz1NYXRoLmFicyhuLWkpLGw9TWF0aC5hYnMoci1hKSx1PWwvYyxoPXQuaGVpZ2h0L3Qud2lkdGgsZj1udWxsO3JldHVybiByPT1hJiZuPGk/Zj1uZXcgSG4obit0LndpZHRoLHMpOnI9PWEmJm4+aT9mPW5ldyBIbihuLHMpOm49PWkmJnI8YT9mPW5ldyBIbihvLHIrdC5oZWlnaHQpOm49PWkmJnI+YSYmKGY9bmV3IEhuKG8scikpLG4+aSYmcjxhP2Y9aD49dT9uZXcgSG4obixzK3UqdC53aWR0aC8yKTpuZXcgSG4oby1jL2wqdC5oZWlnaHQvMixyK3QuaGVpZ2h0KTpuPGkmJnI8YT9mPWg+PXU/bmV3IEhuKG4rdC53aWR0aCxzK3UqdC53aWR0aC8yKTpuZXcgSG4obytjL2wqdC5oZWlnaHQvMixyK3QuaGVpZ2h0KTpuPGkmJnI+YT9mPWg+PXU/bmV3IEhuKG4rdC53aWR0aCxzLXUqdC53aWR0aC8yKTpuZXcgSG4obyt0LmhlaWdodC8yKmMvbCxyKTpuPmkmJnI+YSYmKGY9aD49dT9uZXcgSG4obixzLXQud2lkdGgvMip1KTpuZXcgSG4oby10LmhlaWdodC8yKmMvbCxyKSksZn0sR249ZnVuY3Rpb24odCxlKXt2YXIgbj17eDowLHk6MH07bi54PWUueCtlLndpZHRoLzIsbi55PWUueStlLmhlaWdodC8yO3ZhciByPVZuKHQsbik7cmV0dXJuIG4ueD10LngrdC53aWR0aC8yLG4ueT10LnkrdC5oZWlnaHQvMix7c3RhcnRQb2ludDpyLGVuZFBvaW50OlZuKGUsbil9fTtmdW5jdGlvbiBYbih0LGUsbixyLGkpe3ZhciBhPW5ldyBqbihpKTthLmRhdGEud2lkdGhMaW1pdD1uLmRhdGEud2lkdGhMaW1pdC9NYXRoLm1pbihSbixyLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb10sYz0wO3MuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSxzLnNwcml0ZSYmKHMuaW1hZ2Uud2lkdGg9NDgscy5pbWFnZS5oZWlnaHQ9NDgscy5pbWFnZS5ZPWMsYz1zLmltYWdlLlkrcy5pbWFnZS5oZWlnaHQpO3ZhciBsPXMud3JhcCYmUG4ud3JhcCx1PVVuKFBuKTtpZih1LmZvbnRTaXplPXUuZm9udFNpemUrMix1LmZvbnRXZWlnaHQ9ImJvbGQiLCRuKCJsYWJlbCIscyxsLHUsYS5kYXRhLndpZHRoTGltaXQpLHMubGFiZWwuWT1jKzgsYz1zLmxhYmVsLlkrcy5sYWJlbC5oZWlnaHQscy50eXBlJiYiIiE9PXMudHlwZS50ZXh0JiYocy50eXBlLnRleHQ9IlsiK3MudHlwZS50ZXh0KyJdIiwkbigidHlwZSIscyxsLFVuKFBuKSxhLmRhdGEud2lkdGhMaW1pdCkscy50eXBlLlk9Yys1LGM9cy50eXBlLlkrcy50eXBlLmhlaWdodCkscy5kZXNjciYmIiIhPT1zLmRlc2NyLnRleHQpe3ZhciBoPVVuKFBuKTtoLmZvbnRTaXplPWguZm9udFNpemUtMiwkbigiZGVzY3IiLHMsbCxoLGEuZGF0YS53aWR0aExpbWl0KSxzLmRlc2NyLlk9YysyMCxjPXMuZGVzY3IuWStzLmRlc2NyLmhlaWdodH1pZigwPT1vfHxvJVJuPT0wKXt2YXIgZj1uLmRhdGEuc3RhcnR4K1BuLmRpYWdyYW1NYXJnaW5YLGQ9bi5kYXRhLnN0b3B5K1BuLmRpYWdyYW1NYXJnaW5ZK2M7YS5zZXREYXRhKGYsZixkLGQpfWVsc2V7dmFyIHA9YS5kYXRhLnN0b3B4IT09YS5kYXRhLnN0YXJ0eD9hLmRhdGEuc3RvcHgrUG4uZGlhZ3JhbU1hcmdpblg6YS5kYXRhLnN0YXJ0eCxnPWEuZGF0YS5zdGFydHk7YS5zZXREYXRhKHAscCxnLGcpfWEubmFtZT1zLmFsaWFzO3ZhciB5PWkuZGIuZ2V0QzRTaGFwZUFycmF5KHMuYWxpYXMpLG09aS5kYi5nZXRDNFNoYXBlS2V5cyhzLmFsaWFzKTttLmxlbmd0aD4wJiZxbihhLHQseSxtKSxlPXMuYWxpYXM7dmFyIGI9aS5kYi5nZXRCb3VuZGFyeXMoZSk7Yi5sZW5ndGg+MCYmWG4odCxlLGEsYixpKSwiZ2xvYmFsIiE9PXMuYWxpYXMmJlduKHQscyxhKSxuLmRhdGEuc3RvcHk9TWF0aC5tYXgoYS5kYXRhLnN0b3B5K1BuLmM0U2hhcGVNYXJnaW4sbi5kYXRhLnN0b3B5KSxuLmRhdGEuc3RvcHg9TWF0aC5tYXgoYS5kYXRhLnN0b3B4K1BuLmM0U2hhcGVNYXJnaW4sbi5kYXRhLnN0b3B4KSxMbj1NYXRoLm1heChMbixuLmRhdGEuc3RvcHgpLEluPU1hdGgubWF4KEluLG4uZGF0YS5zdG9weSl9fWNvbnN0IFpuPXtkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTpxbixkcmF3Qm91bmRhcnk6V24sc2V0Q29uZjp6bixkcmF3OmZ1bmN0aW9uKHQsZSxuLHIpe1BuPVh0KCkuYzQ7dmFyIGksYT1YdCgpLnNlY3VyaXR5TGV2ZWw7InNhbmRib3giPT09YSYmKGk9KDAsbC5zZWxlY3QpKCIjaSIrZSkpO3ZhciBzPSJzYW5kYm94Ij09PWE/KDAsbC5zZWxlY3QpKGkubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6KDAsbC5zZWxlY3QpKCJib2R5IiksYz1yLmRiO3IuZGIuc2V0V3JhcChQbi53cmFwKSxGbj1jLmdldEM0U2hhcGVJblJvdygpLFJuPWMuZ2V0QzRCb3VuZGFyeUluUm93KCksby5kZWJ1ZygiQzoiLmNvbmNhdChKU09OLnN0cmluZ2lmeShQbixudWxsLDIpKSk7dmFyIHU9InNhbmRib3giPT09YT9zLnNlbGVjdCgnW2lkPSInLmNvbmNhdChlLCciXScpKTooMCxsLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7dS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKSxmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0odSksZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0odSk7dmFyIGg9bmV3IGpuKHIpO2guc2V0RGF0YShQbi5kaWFncmFtTWFyZ2luWCxQbi5kaWFncmFtTWFyZ2luWCxQbi5kaWFncmFtTWFyZ2luWSxQbi5kaWFncmFtTWFyZ2luWSksaC5kYXRhLndpZHRoTGltaXQ9c2NyZWVuLmF2YWlsV2lkdGgsTG49UG4uZGlhZ3JhbU1hcmdpblgsSW49UG4uZGlhZ3JhbU1hcmdpblk7dmFyIGY9ci5kYi5nZXRUaXRsZSgpO3IuZGIuZ2V0QzRUeXBlKCksWG4odSwiIixoLHIuZGIuZ2V0Qm91bmRhcnlzKCIiKSxyKSxmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSh1KSxmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSh1KSxmdW5jdGlvbih0KXt2YXIgZT10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjcm9zc2hlYWQiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTUpLmF0dHIoIm1hcmtlckhlaWdodCIsOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmF0dHIoInJlZlgiLDE2KS5hdHRyKCJyZWZZIiw0KTtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSA5LDIgViA2IEwxNiw0IFoiKSxlLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDAsMSBMIDYsNyBNIDYsMSBMIDAsNyIpfSh1KSxmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSh1KSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89MCxzPWZ1bmN0aW9uKHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gTm4odCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9Obih0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7biYmKHQ9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX0oZSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO28rPTE7dmFyIGw9Yy53cmFwJiZQbi53cmFwLHU9e2ZvbnRGYW1pbHk6KGE9UG4pLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmEubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6YS5tZXNzYWdlRm9udFdlaWdodH07IkM0RHluYW1pYyI9PT1yLmRiLmdldEM0VHlwZSgpJiYoYy5sYWJlbC50ZXh0PW8rIjogIitjLmxhYmVsLnRleHQpO3ZhciBoPXhuKGMubGFiZWwudGV4dCx1KTskbigibGFiZWwiLGMsbCx1LGgpLGMudGVjaG4mJiIiIT09Yy50ZWNobi50ZXh0JiYkbigidGVjaG4iLGMsbCx1LGg9eG4oYy50ZWNobi50ZXh0LHUpKSxjLmRlc2NyJiYiIiE9PWMuZGVzY3IudGV4dCYmJG4oImRlc2NyIixjLGwsdSxoPXhuKGMuZGVzY3IudGV4dCx1KSk7dmFyIGY9bihjLmZyb20pLGQ9bihjLnRvKSxwPUduKGYsZCk7Yy5zdGFydFBvaW50PXAuc3RhcnRQb2ludCxjLmVuZFBvaW50PXAuZW5kUG9pbnR9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfVdlKHQsZSxQbil9KHUsci5kYi5nZXRSZWxzKCksci5kYi5nZXRDNFNoYXBlLHIpLGguZGF0YS5zdG9weD1MbixoLmRhdGEuc3RvcHk9SW47dmFyIGQ9aC5kYXRhLHA9ZC5zdG9weS1kLnN0YXJ0eSsyKlBuLmRpYWdyYW1NYXJnaW5ZLGc9ZC5zdG9weC1kLnN0YXJ0eCsyKlBuLmRpYWdyYW1NYXJnaW5YO2YmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChmKS5hdHRyKCJ4IiwoZC5zdG9weC1kLnN0YXJ0eCkvMi00KlBuLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixkLnN0YXJ0eStQbi5kaWFncmFtTWFyZ2luWSksVG4odSwwLGcsUG4udXNlTWF4V2lkdGgpO3ZhciB5PWY/NjA6MDt1LmF0dHIoInZpZXdCb3giLGQuc3RhcnR4LVBuLmRpYWdyYW1NYXJnaW5YKyIgLSIrKFBuLmRpYWdyYW1NYXJnaW5ZK3kpKyIgIitnKyIgIisocCt5KSksTW4ocWUucGFyc2VyLnl5LHUsZSksby5kZWJ1ZygibW9kZWxzOiIsZCl9fTtmdW5jdGlvbiBRbih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBLbj0iY2xhc3NpZC0iLEpuPVtdLHRyPXt9LGVyPTAsbnI9W10scnI9ZnVuY3Rpb24odCl7cmV0dXJuIHVlLnNhbml0aXplVGV4dCh0LFh0KCkpfSxpcj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPXQ7aWYodC5pbmRleE9mKCJ+Iik+MCl7dmFyIHI9dC5zcGxpdCgifiIpO249clswXSxlPXVlLnNhbml0aXplVGV4dChyWzFdLFh0KCkpfXJldHVybntjbGFzc05hbWU6bix0eXBlOmV9fSxhcj1mdW5jdGlvbih0KXt2YXIgZT1pcih0KTt2b2lkIDA9PT10cltlLmNsYXNzTmFtZV0mJih0cltlLmNsYXNzTmFtZV09e2lkOmUuY2xhc3NOYW1lLHR5cGU6ZS50eXBlLGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOktuK2UuY2xhc3NOYW1lKyItIitlcn0sZXIrKyl9LG9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0ciksbj0wO248ZS5sZW5ndGg7bisrKWlmKHRyW2Vbbl1dLmlkPT09dClyZXR1cm4gdHJbZVtuXV0uZG9tSWR9LHNyPWZ1bmN0aW9uKHQsZSl7dmFyIG49aXIodCkuY2xhc3NOYW1lLHI9dHJbbl07aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgaT1lLnRyaW0oKTtpLnN0YXJ0c1dpdGgoIjw8IikmJmkuZW5kc1dpdGgoIj4+Iik/ci5hbm5vdGF0aW9ucy5wdXNoKHJyKGkuc3Vic3RyaW5nKDIsaS5sZW5ndGgtMikpKTppLmluZGV4T2YoIikiKT4wP3IubWV0aG9kcy5wdXNoKHJyKGkpKTppJiZyLm1lbWJlcnMucHVzaChycihpKSl9fSxjcj1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10O3RbMF0ubWF0Y2goL1xkLykmJihuPUtuK24pLHZvaWQgMCE9PXRyW25dJiZ0cltuXS5jc3NDbGFzc2VzLnB1c2goZSl9KSl9LGxyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1YdCgpLGk9dCxhPW9yKGkpO2lmKCJsb29zZSI9PT1yLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUmJnZvaWQgMCE9PXRyW2ldKXt2YXIgbz1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe289bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGM9b1tzXS50cmltKCk7JyInPT09Yy5jaGFyQXQoMCkmJiciJz09PWMuY2hhckF0KGMubGVuZ3RoLTEpJiYoYz1jLnN1YnN0cigxLGMubGVuZ3RoLTIpKSxvW3NdPWN9fTA9PT1vLmxlbmd0aCYmby5wdXNoKGEpLG5yLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChhLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7dmFyIHQ7QW4ucnVuRnVuYy5hcHBseShBbixbZV0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIFFuKHQpfSh0PW8pfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gUW4odCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9Rbih0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSl9KSwhMSl9KSl9fSx1cj1mdW5jdGlvbih0KXt2YXIgZT0oMCxsLnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9KDAsbC5zZWxlY3QpKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSwoMCxsLnNlbGVjdCkodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PSgwLGwuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUudGV4dCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLGUuaHRtbChlLmh0bWwoKS5yZXBsYWNlKC8mbHQ7YnJcLyZndDsvZywiPGJyLz4iKSksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLCgwLGwuc2VsZWN0KSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSkpfTtuci5wdXNoKHVyKTt2YXIgaHI9IlRCIjtjb25zdCBmcj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxzZXRBY2NUaXRsZTp5ZSxnZXRBY2NUaXRsZTptZSxnZXRBY2NEZXNjcmlwdGlvbjp2ZSxzZXRBY2NEZXNjcmlwdGlvbjpiZSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gWHQoKS5jbGFzc30sYWRkQ2xhc3M6YXIsYmluZEZ1bmN0aW9uczpmdW5jdGlvbih0KXtuci5mb3JFYWNoKChmdW5jdGlvbihlKXtlKHQpfSkpfSxjbGVhcjpmdW5jdGlvbigpe0puPVtdLHRyPXt9LChucj1bXSkucHVzaCh1ciksZ2UoKX0sZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHRyW3RdfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRyfSxhZGRBbm5vdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49aXIodCkuY2xhc3NOYW1lO3RyW25dLmFubm90YXRpb25zLnB1c2goZSl9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiBKbn0sYWRkUmVsYXRpb246ZnVuY3Rpb24odCl7by5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxhcih0LmlkMSksYXIodC5pZDIpLHQuaWQxPWlyKHQuaWQxKS5jbGFzc05hbWUsdC5pZDI9aXIodC5pZDIpLmNsYXNzTmFtZSx0LnJlbGF0aW9uVGl0bGUxPXVlLnNhbml0aXplVGV4dCh0LnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxYdCgpKSx0LnJlbGF0aW9uVGl0bGUyPXVlLnNhbml0aXplVGV4dCh0LnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxYdCgpKSxKbi5wdXNoKHQpfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gaHJ9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXtocj10fSxhZGRNZW1iZXI6c3IsYWRkTWVtYmVyczpmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBzcih0LGUpfSkpKX0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/dWUuc2FuaXRpemVUZXh0KHQuc3Vic3RyKDEpLnRyaW0oKSxYdCgpKTpycih0LnRyaW0oKSl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOntBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozLExPTExJUE9QOjR9LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtscih0LGUsbiksdHJbdF0uaGF2ZUNhbGxiYWNrPSEwfSkpLGNyKHQsImNsaWNrYWJsZSIpfSxzZXRDc3NDbGFzczpjcixzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1YdCgpO3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10O3RbMF0ubWF0Y2goL1xkLykmJihpPUtuK2kpLHZvaWQgMCE9PXRyW2ldJiYodHJbaV0ubGluaz1Bbi5mb3JtYXRVcmwoZSxyKSwic2FuZGJveCI9PT1yLnNlY3VyaXR5TGV2ZWw/dHJbaV0ubGlua1RhcmdldD0iX3RvcCI6dHJbaV0ubGlua1RhcmdldD0ic3RyaW5nIj09dHlwZW9mIG4/cnIobik6Il9ibGFuayIpfSkpLGNyKHQsImNsaWNrYWJsZSIpfSxnZXRUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0clt0XS50b29sdGlwfSxzZXRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7dmFyIG49WHQoKTt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKHRyW3RdLnRvb2x0aXA9dWUuc2FuaXRpemVUZXh0KGUsbikpfSkpfSxsb29rVXBEb21JZDpvcn07dmFyIGRyPW4oNjgxKSxwcj1uLm4oZHIpLGdyPW4oODI4MikseXI9bi5uKGdyKSxtcj0wLGJyPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goL14oXCt8LXx+fCMpPyhcdyspKH5cdyt+fFxbXF0pP1xzKyhcdyspICooXCp8XCQpPyQvKSxuPXQubWF0Y2goL14oWyt8XC18fnwjXSk/KFx3KykgKlwoICooLiopXCkgKihcKnxcJCk/ICooXHcqW358W1xdXSpccypcdyp+PykkLyk7cmV0dXJuIGUmJiFuP3ZyKGUpOm4/X3Iobik6eHIodCl9LHZyPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiI7dHJ5e3ZhciByPXRbMV0/dFsxXS50cmltKCk6IiIsaT10WzJdP3RbMl0udHJpbSgpOiIiLGE9dFszXT9sZSh0WzNdLnRyaW0oKSk6IiIsbz10WzRdP3RbNF0udHJpbSgpOiIiLHM9dFs1XT90WzVdLnRyaW0oKToiIjtuPXIraSthKyIgIitvLGU9d3Iocyl9Y2F0Y2goZSl7bj10fXJldHVybntkaXNwbGF5VGV4dDpuLGNzc1N0eWxlOmV9fSxfcj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/bGUodFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIjtuPXIraSsiKCIrYSsiKSIrKHRbNV0/IiA6ICIrbGUodFs1XSkudHJpbSgpOiIiKSxlPXdyKG8pfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0seHI9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIixyPSIiLGk9dC5pbmRleE9mKCIoIiksYT10LmluZGV4T2YoIikiKTtpZihpPjEmJmE+aSYmYTw9dC5sZW5ndGgpe3ZhciBvPSIiLHM9IiIsYz10LnN1YnN0cmluZygwLDEpO2MubWF0Y2goL1x3Lyk/cz10LnN1YnN0cmluZygwLGkpLnRyaW0oKTooYy5tYXRjaCgvXCt8LXx+fCMvKSYmKG89Yykscz10LnN1YnN0cmluZygxLGkpLnRyaW0oKSk7dmFyIGw9dC5zdWJzdHJpbmcoaSsxLGEpLHU9dC5zdWJzdHJpbmcoYSsxLDEpO249d3IodSksZT1vK3MrIigiK2xlKGwudHJpbSgpKSsiKSIsYTwiIi5sZW5ndGgmJiIiIT09KHI9dC5zdWJzdHJpbmcoYSsyKS50cmltKCkpJiYocj0iIDogIitsZShyKSl9ZWxzZSBlPWxlKHQpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOm59fSxrcj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1icihlKSxhPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHIucGFkZGluZykudGV4dChpLmRpc3BsYXlUZXh0KTsiIiE9PWkuY3NzU3R5bGUmJmEuYXR0cigic3R5bGUiLGkuY3NzU3R5bGUpLG58fGEuYXR0cigiZHkiLHIudGV4dEhlaWdodCl9LHdyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX07Y29uc3QgVHI9ZnVuY3Rpb24odCxlLG4scil7by5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIsZSxuKTt2YXIgaSxhPWUuaWQscz17aWQ6YSxsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGM9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsci5kYi5sb29rVXBEb21JZChhKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7aT1lLmxpbms/Yy5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsZS5saW5rKS5hdHRyKCJ0YXJnZXQiLGUubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsbi50ZXh0SGVpZ2h0K24ucGFkZGluZykuYXR0cigieCIsMCk6Yy5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTt2YXIgbD0hMDtlLmFubm90YXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWkuYXBwZW5kKCJ0c3BhbiIpLnRleHQoIsKrIit0KyLCuyIpO2x8fGUuYXR0cigiZHkiLG4udGV4dEhlaWdodCksbD0hMX0pKTt2YXIgdT1lLmlkO3ZvaWQgMCE9PWUudHlwZSYmIiIhPT1lLnR5cGUmJih1Kz0iPCIrZS50eXBlKyI+Iik7dmFyIGg9aS5hcHBlbmQoInRzcGFuIikudGV4dCh1KS5hdHRyKCJjbGFzcyIsInRpdGxlIik7bHx8aC5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KTt2YXIgZj1pLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LGQ9Yy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytmK24uZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsbi5wYWRkaW5nK2Yrbi5kaXZpZGVyTWFyZ2luLzIpLHA9Yy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGYrbi5kaXZpZGVyTWFyZ2luK24udGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtsPSEwLGUubWVtYmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtrcihwLHQsbCxuKSxsPSExfSkpO3ZhciBnPXAubm9kZSgpLmdldEJCb3goKSx5PWMuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixuLnBhZGRpbmcrZituLmRpdmlkZXJNYXJnaW4rZy5oZWlnaHQpLmF0dHIoInkyIixuLnBhZGRpbmcrZituLmRpdmlkZXJNYXJnaW4rZy5oZWlnaHQpLG09Yy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGYrMipuLmRpdmlkZXJNYXJnaW4rZy5oZWlnaHQrbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO2w9ITAsZS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tyKG0sdCxsLG4pLGw9ITF9KSk7dmFyIGI9Yy5ub2RlKCkuZ2V0QkJveCgpLHY9IiAiO2UuY3NzQ2xhc3Nlcy5sZW5ndGg+MCYmKHYrPWUuY3NzQ2xhc3Nlcy5qb2luKCIgIikpO3ZhciBfPWMuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLGIud2lkdGgrMipuLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsYi5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbikuYXR0cigiY2xhc3MiLHYpLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIGkubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoIngiLChfLXQuZ2V0QkJveCgpLndpZHRoKS8yKX0pKSxlLnRvb2x0aXAmJmkuaW5zZXJ0KCJ0aXRsZSIpLnRleHQoZS50b29sdGlwKSxkLmF0dHIoIngyIixfKSx5LmF0dHIoIngyIixfKSxzLndpZHRoPV8scy5oZWlnaHQ9Yi5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbixzfTt2YXIgRXI9e30sQ3I9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmVudHJpZXMoRXIpLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdLmxhYmVsPT09dH0pKTtpZihlKXJldHVybiBlWzBdfTtjb25zdCBTcj17ZHJhdzpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1YdCgpLmNsYXNzO0VyPXt9LG8uaW5mbygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTt2YXIgYSxzPVh0KCkuc2VjdXJpdHlMZXZlbDsic2FuZGJveCI9PT1zJiYoYT0oMCxsLnNlbGVjdCkoIiNpIitlKSk7dmFyIGMsdT0ic2FuZGJveCI9PT1zPygwLGwuc2VsZWN0KShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOigwLGwuc2VsZWN0KSgiYm9keSIpLGg9KCJzYW5kYm94Ij09PXM/YS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCx1LnNlbGVjdCgiW2lkPSciLmNvbmNhdChlLCInXSIpKSk7KGM9aCkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSxjLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpLGMuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGMuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxjLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxjLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksYy5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGMuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKTt2YXIgZj1uZXcoeXIoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITB9KTtmLnNldEdyYXBoKHtpc011bHRpR3JhcGg6ITB9KSxmLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7Zm9yKHZhciBkPXIuZGIuZ2V0Q2xhc3NlcygpLHA9T2JqZWN0LmtleXMoZCksZz0wO2c8cC5sZW5ndGg7ZysrKXt2YXIgeT1kW3BbZ11dLG09VHIoaCx5LGkscik7RXJbbS5pZF09bSxmLnNldE5vZGUobS5pZCxtKSxvLmluZm8oIk9yZyBoZWlnaHQ6ICIrbS5oZWlnaHQpfXIuZGIuZ2V0UmVsYXRpb25zKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJ0am9obyIrQ3IodC5pZDEpK0NyKHQuaWQyKStKU09OLnN0cmluZ2lmeSh0KSksZi5zZXRFZGdlKENyKHQuaWQxKSxDcih0LmlkMikse3JlbGF0aW9uOnR9LHQudGl0bGV8fCJERUZBVUxUIil9KSkscHIoKS5sYXlvdXQoZiksZi5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWYubm9kZSh0KSYmKG8uZGVidWcoIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoZi5ub2RlKHQpKSksdS5zZWxlY3QoIiMiK3IuZGIubG9va1VwRG9tSWQodCkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLm5vZGUodCkueC1mLm5vZGUodCkud2lkdGgvMikrIiwiKyhmLm5vZGUodCkueS1mLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpKX0pKSxmLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09Zi5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZi5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBpLmRiLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgaS5kYi5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBpLmRiLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBpLmRiLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kiO2Nhc2UgaS5kYi5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7dmFyIHMsYyx1PWUucG9pbnRzLGg9KDAsbC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShsLmN1cnZlQmFzaXMpLGY9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixoKHUpKS5hdHRyKCJpZCIsImVkZ2UiK21yKS5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIiksZD0iIjtyLmFycm93TWFya2VyQWJzb2x1dGUmJihkPShkPShkPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLDE9PW4ucmVsYXRpb24ubGluZVR5cGUmJmYuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkYXNoZWQtbGluZSIpLCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEmJmYuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZCsiIyIrYShuLnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMiYmZi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZCsiIyIrYShuLnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO3ZhciBwLGcseSxtLGI9ZS5wb2ludHMubGVuZ3RoLHY9QW4uY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpO2lmKHM9di54LGM9di55LGIlMiE9MCYmYj4xKXt2YXIgXz1Bbi5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbigibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUxLGUucG9pbnRzLGUucG9pbnRzWzBdKSx4PUFuLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTIsZS5wb2ludHMsZS5wb2ludHNbYi0xXSk7by5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KF8pKSxvLmRlYnVnKCJjYXJkaW5hbGl0eV8yX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoeCkpLHA9Xy54LGc9Xy55LHk9eC54LG09eC55fWlmKHZvaWQgMCE9PW4udGl0bGUpe3ZhciBrPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIiksdz1rLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixjKS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KG4udGl0bGUpO3dpbmRvdy5sYWJlbD13O3ZhciBUPXcubm9kZSgpLmdldEJCb3goKTtrLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsVC54LXIucGFkZGluZy8yKS5hdHRyKCJ5IixULnktci5wYWRkaW5nLzIpLmF0dHIoIndpZHRoIixULndpZHRoK3IucGFkZGluZykuYXR0cigiaGVpZ2h0IixULmhlaWdodCtyLnBhZGRpbmcpfW8uaW5mbygiUmVuZGVyaW5nIHJlbGF0aW9uICIrSlNPTi5zdHJpbmdpZnkobikpLHZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTEmJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTEmJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTEiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixnKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUxKSx2b2lkIDAhPT1uLnJlbGF0aW9uVGl0bGUyJiYibm9uZSIhPT1uLnJlbGF0aW9uVGl0bGUyJiZ0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUyIikuYXR0cigieCIseSkuYXR0cigieSIsbSkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQobi5yZWxhdGlvblRpdGxlMiksbXIrK30oaCxmLmVkZ2UodCksZi5lZGdlKHQpLnJlbGF0aW9uLGkscikpfSkpO3ZhciBiPWgubm9kZSgpLmdldEJCb3goKSx2PWIud2lkdGgrNDAsXz1iLmhlaWdodCs0MDtUbihoLDAsdixpLnVzZU1heFdpZHRoKTt2YXIgeD0iIi5jb25jYXQoYi54LTIwLCIgIikuY29uY2F0KGIueS0yMCwiICIpLmNvbmNhdCh2LCIgIikuY29uY2F0KF8pO28uZGVidWcoInZpZXdCb3ggIi5jb25jYXQoeCkpLGguYXR0cigidmlld0JveCIseCksTW4oci5kYixoLGUpfX07dmFyIEFyPXtleHRlbnNpb246ZnVuY3Rpb24odCxlLG4pe28udHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLG4pLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sYWdncmVnYXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGxvbGxpcG9wOmZ1bmN0aW9uKHQsZSxuKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNikuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSxwb2ludDpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY2lyY2xlOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfX07Y29uc3QgTXI9ZnVuY3Rpb24odCxlLG4scil7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtBcltlXSh0LG4scil9KSl9O2Z1bmN0aW9uIE5yKHQpe3JldHVybiBOcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sTnIodCl9Y29uc3QgT3I9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dHx8IiI7aWYoIm9iamVjdCI9PT1OcihpKSYmKGk9aVswXSksY2UoWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+Iiksby5pbmZvKCJ2ZXJ0ZXhUZXh0IitpKTt2YXIgYT1mdW5jdGlvbih0KXt2YXIgZSxuPSgwLGwuc2VsZWN0KShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZm9yZWlnbk9iamVjdCIpKSxyPW4uYXBwZW5kKCJ4aHRtbDpkaXYiKSxpPXQubGFiZWwsYT10LmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtyZXR1cm4gci5odG1sKCc8c3BhbiBjbGFzcz0iJythKyciICcrKHQubGFiZWxTdHlsZT8nc3R5bGU9IicrdC5sYWJlbFN0eWxlKyciJzoiIikrIj4iK2krIjwvc3Bhbj4iKSwoZT10LmxhYmVsU3R5bGUpJiZyLmF0dHIoInN0eWxlIixlKSxyLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksci5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxyLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLG4ubm9kZSgpfSh7aXNOb2RlOnIsbGFiZWw6aXUoaSkucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksbGFiZWxTdHlsZTplLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9KTtyZXR1cm4gYX12YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO3Muc2V0QXR0cmlidXRlKCJzdHlsZSIsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTt2YXIgYz1bXTtjPSJzdHJpbmciPT10eXBlb2YgaT9pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT9pOltdO2Zvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtoLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLGguc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGguc2V0QXR0cmlidXRlKCJ4IiwiMCIpLG4/aC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6aC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksaC50ZXh0Q29udGVudD1jW3VdLnRyaW0oKSxzLmFwcGVuZENoaWxkKGgpfXJldHVybiBzfTt2YXIgRHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aT1ufHwibm9kZSBkZWZhdWx0Ijt2YXIgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsZS5sYWJlbFN0eWxlKSxzPSJzdHJpbmciPT10eXBlb2YgZS5sYWJlbFRleHQ/ZS5sYWJlbFRleHQ6ZS5sYWJlbFRleHRbMF0sYz1vLm5vZGUoKS5hcHBlbmRDaGlsZChPcihpZShpdShzKSxYdCgpKSxlLmxhYmVsU3R5bGUsITEscikpLHU9Yy5nZXRCQm94KCk7aWYoY2UoWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBoPWMuY2hpbGRyZW5bMF0sZj0oMCxsLnNlbGVjdCkoYyk7dT1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLHUud2lkdGgpLGYuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCl9dmFyIGQ9ZS5wYWRkaW5nLzI7cmV0dXJuIG8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXUud2lkdGgvMisiLCAiKy11LmhlaWdodC8yKyIpIikse3NoYXBlU3ZnOmEsYmJveDp1LGhhbGZQYWRkaW5nOmQsbGFiZWw6b319LEJyPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ub2RlKCkuZ2V0QkJveCgpO3Qud2lkdGg9bi53aWR0aCx0LmhlaWdodD1uLmhlaWdodH07ZnVuY3Rpb24gTHIodCxlLG4scil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIituLzIrIikiKX12YXIgSXI9e30sRnI9e30sUnI9e30sUHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gby50cmFjZSgiSW4gaXNEZWNlbmRhbnQiLGUsIiAiLHQsIiA9ICIsRnJbZV0uaW5kZXhPZih0KT49MCksRnJbZV0uaW5kZXhPZih0KT49MH0sanI9ZnVuY3Rpb24gdChlLG4scixpKXtvLndhcm4oIkNvcHlpbmcgY2hpbGRyZW4gb2YgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSk7dmFyIGE9bi5jaGlsZHJlbihlKXx8W107ZSE9PWkmJmEucHVzaChlKSxvLndhcm4oIkNvcHlpbmcgKG5vZGVzKSBjbHVzdGVySWQiLGUsIm5vZGVzIixhKSxhLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKG4uY2hpbGRyZW4oYSkubGVuZ3RoPjApdChhLG4scixpKTtlbHNle3ZhciBzPW4ubm9kZShhKTtvLmluZm8oImNwICIsYSwiIHRvICIsaSwiIHdpdGggcGFyZW50ICIsZSksci5zZXROb2RlKGEscyksaSE9PW4ucGFyZW50KGEpJiYoby53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxuLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxuLnBhcmVudChhKSkpLGUhPT1pJiZhIT09ZT8oby5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsZSksci5zZXRQYXJlbnQoYSxlKSk6KG8uaW5mbygiSW4gY29weSAiLGUsInJvb3QiLGksImRhdGEiLG4ubm9kZShlKSxpKSxvLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIixlIT09aSwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PWUpKTt2YXIgYz1uLmVkZ2VzKGEpO28uZGVidWcoIkNvcHlpbmcgRWRnZXMiLGMpLGMuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJFZGdlIix0KTt2YXIgYT1uLmVkZ2UodC52LHQudyx0Lm5hbWUpO28uaW5mbygiRWRnZSBkYXRhIixhLGkpO3RyeXshZnVuY3Rpb24odCxlKXtyZXR1cm4gby5pbmZvKCJEZWNlbmRhbnRzIG9mICIsZSwiIGlzICIsRnJbZV0pLG8uaW5mbygiRWRnZSBpcyAiLHQpLHQudiE9PWUmJnQudyE9PWUmJihGcltlXT8oby5pbmZvKCJIZXJlICIpLEZyW2VdLmluZGV4T2YodC52KT49MHx8ISFQcih0LnYsZSl8fCEhUHIodC53LGUpfHxGcltlXS5pbmRleE9mKHQudyk+PTApOihvLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVjZW5kYW50cyIpLCExKSl9KHQsaSk/by5pbmZvKCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgIix0LnYsIi0tXHgzZSIsdC53LCIgcm9vdElkOiAiLGksIiBjbHVzdGVySWQ6IixlKTooby5pbmZvKCJDb3B5aW5nIGFzICIsdC52LHQudyxhLHQubmFtZSksci5zZXRFZGdlKHQudix0LncsYSx0Lm5hbWUpLG8uaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKX1jYXRjaCh0KXtvLmVycm9yKHQpfX0pKX1vLmRlYnVnKCJSZW1vdmluZyBub2RlIixhKSxuLnJlbW92ZU5vZGUoYSl9KSl9LHpyPWZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9bi5jaGlsZHJlbihlKSxpPVtdLmNvbmNhdChyKSxhPTA7YTxyLmxlbmd0aDthKyspUnJbclthXV09ZSxpPWkuY29uY2F0KHQoclthXSxuKSk7cmV0dXJuIGl9LFlyPWZ1bmN0aW9uIHQoZSxuKXtvLnRyYWNlKCJTZWFyY2hpbmciLGUpO3ZhciByPW4uY2hpbGRyZW4oZSk7aWYoby50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsZSxyKSxyLmxlbmd0aDwxKXJldHVybiBvLnRyYWNlKCJUaGlzIGlzIGEgdmFsaWQgbm9kZSIsZSksZTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9dChyW2ldLG4pO2lmKGEpcmV0dXJuIG8udHJhY2UoIkZvdW5kIHJlcGxhY2VtZW50IGZvciIsZSwiID0+ICIsYSksYX19LFVyPWZ1bmN0aW9uKHQpe3JldHVybiBJclt0XSYmSXJbdF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmSXJbdF0/SXJbdF0uaWQ6dH0sJHI9ZnVuY3Rpb24odCxlKXshdHx8ZT4xMD9vLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTooby5kZWJ1ZygiT3B0aW5nIGluLCBncmFwaCAiKSx0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbihlKS5sZW5ndGg+MCYmKG8ud2FybigiQ2x1c3RlciBpZGVudGlmaWVkIixlLCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6ICIsWXIoZSx0KSksRnJbZV09enIoZSx0KSxJcltlXT17aWQ6WXIoZSx0KSxjbHVzdGVyRGF0YTp0Lm5vZGUoZSl9KX0pKSx0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5jaGlsZHJlbihlKSxyPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhvLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUsRnIpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC52IT09ZSYmdC53IT09ZSYmUHIodC52LGUpXlByKHQudyxlKSYmKG8ud2FybigiRWRnZTogIix0LCIgbGVhdmVzIGNsdXN0ZXIgIixlKSxvLndhcm4oIkRlY2VuZGFudHMgb2YgWFhYICIsZSwiOiAiLEZyW2VdKSxJcltlXS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX0pKSk6by5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGUsRnIpfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7by53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeShlKSksby53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeSh0LmVkZ2UoZSkpKTt2YXIgcj1lLnYsaT1lLnc7aWYoby53YXJuKCJGaXggWFhYIixJciwiaWRzOiIsZS52LGUudywiVHJhbnNsYXRlaW5nOiAiLElyW2Uudl0sIiAtLS0gIixJcltlLnddKSxJcltlLnZdJiZJcltlLnddJiZJcltlLnZdPT09SXJbZS53XSl7by53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIixlLnYsZS53LGUubmFtZSksby53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLGUudixlLncsZS5uYW1lKSxyPVVyKGUudiksaT1VcihlLncpLHQucmVtb3ZlRWRnZShlLnYsZS53LGUubmFtZSk7dmFyIGE9ZS53KyItLS0iK2Uudjt0LnNldE5vZGUoYSx7ZG9tSWQ6YSxpZDphLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0Om4ubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7dmFyIHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSksYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG4pKTtzLmxhYmVsPSIiLHMuYXJyb3dUeXBlRW5kPSJub25lIixjLmxhYmVsPSIiLHMuZnJvbUNsdXN0ZXI9ZS52LGMudG9DbHVzdGVyPWUudix0LnNldEVkZ2UocixhLHMsZS5uYW1lKyItY3ljbGljLXNwZWNpYWwiKSx0LnNldEVkZ2UoYSxpLGMsZS5uYW1lKyItY3ljbGljLXNwZWNpYWwiKX1lbHNlKElyW2Uudl18fElyW2Uud10pJiYoby53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLGUudixlLncsZS5uYW1lKSxyPVVyKGUudiksaT1VcihlLncpLHQucmVtb3ZlRWRnZShlLnYsZS53LGUubmFtZSksciE9PWUudiYmKG4uZnJvbUNsdXN0ZXI9ZS52KSxpIT09ZS53JiYobi50b0NsdXN0ZXI9ZS53KSxvLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHIsaSxlLm5hbWUpLHQuc2V0RWRnZShyLGksbixlLm5hbWUpKX0pKSxvLndhcm4oIkFkanVzdGVkIEdyYXBoIix5cigpLmpzb24ud3JpdGUodCkpLFdyKHQsMCksby50cmFjZShJcikpfSxXcj1mdW5jdGlvbiB0KGUsbil7aWYoby53YXJuKCJleHRyYWN0b3IgLSAiLG4seXIoKS5qc29uLndyaXRlKGUpLGUuY2hpbGRyZW4oIkQiKSksbj4xMClvLmVycm9yKCJCYWlsaW5nIG91dCIpO2Vsc2V7Zm9yKHZhciByPWUubm9kZXMoKSxpPSExLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPWUuY2hpbGRyZW4ocyk7aT1pfHxjLmxlbmd0aD4wfWlmKGkpe28uZGVidWcoIk5vZGVzID0gIixyLG4pO2Zvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgdT1yW2xdO2lmKG8uZGVidWcoIkV4dHJhY3Rpbmcgbm9kZSIsdSxJcixJclt1XSYmIUlyW3VdLmV4dGVybmFsQ29ubmVjdGlvbnMsIWUucGFyZW50KHUpLGUubm9kZSh1KSxlLmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLG4pLElyW3VdKWlmKCFJclt1XS5leHRlcm5hbENvbm5lY3Rpb25zJiZlLmNoaWxkcmVuKHUpJiZlLmNoaWxkcmVuKHUpLmxlbmd0aD4wKXtvLndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsdSxuKTt2YXIgaD0iVEIiPT09ZS5ncmFwaCgpLnJhbmtkaXI/IkxSIjoiVEIiO0lyW3VdJiZJclt1XS5jbHVzdGVyRGF0YSYmSXJbdV0uY2x1c3RlckRhdGEuZGlyJiYoaD1Jclt1XS5jbHVzdGVyRGF0YS5kaXIsby53YXJuKCJGaXhpbmcgZGlyIixJclt1XS5jbHVzdGVyRGF0YS5kaXIsaCkpO3ZhciBmPW5ldyh5cigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmgsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO28ud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5Iix5cigpLmpzb24ud3JpdGUoZSkpLGpyKHUsZSxmLHUpLGUuc2V0Tm9kZSh1LHtjbHVzdGVyTm9kZTohMCxpZDp1LGNsdXN0ZXJEYXRhOklyW3VdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpJclt1XS5sYWJlbFRleHQsZ3JhcGg6Zn0pLG8ud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsdSwiKSIseXIoKS5qc29uLndyaXRlKGYpKSxvLmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIseXIoKS5qc29uLndyaXRlKGUpKX1lbHNlIG8ud2FybigiQ2x1c3RlciAqKiAiLHUsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFJclt1XS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudCh1KSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbih1KSYmZS5jaGlsZHJlbih1KS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksby5kZWJ1ZyhJcik7ZWxzZSBvLmRlYnVnKCJOb3QgYSBjbHVzdGVyIix1LG4pfXI9ZS5ub2RlcygpLG8ud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLGc9ZS5ub2RlKHApO28ud2FybigiIE5vdyBuZXh0IGxldmVsIixwLGcpLGcuY2x1c3Rlck5vZGUmJnQoZy5ncmFwaCxuKzEpfX1lbHNlIG8uZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0scXI9ZnVuY3Rpb24gdChlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm5bXTt2YXIgcj1PYmplY3QuYXNzaWduKG4pO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPWUuY2hpbGRyZW4obiksYT10KGUsaSk7cj1yLmNvbmNhdChhKX0pKSxyfSxIcj1mdW5jdGlvbih0KXtyZXR1cm4gcXIodCx0LmNoaWxkcmVuKCkpfSxWcj1uKDM4NDEpO2NvbnN0IEdyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSxsPU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYobD0tbCk7dmFyIHU9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYodT0tdSkse3g6aStsLHk6YSt1fX07ZnVuY3Rpb24gWHIodCxlKXtyZXR1cm4gdCplPjB9Y29uc3QgWnI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyxsLHUsaCxmLGQscCxnLHk7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZYcihmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCxsPXIueCpuLnktbi54KnIueSx1PWEqdC54K3MqdC55K2wsaD1hKmUueCtzKmUueStsLDAhPT11JiYwIT09aCYmWHIodSxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4gZz1NYXRoLmFicyhwLzIpLHt4Oih5PW8qbC1zKmMpPDA/KHktZykvcDooeStnKS9wLHk6KHk9YSpjLWkqbCk8MD8oeS1nKS9wOih5K2cpL3B9fSxRcj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSpsPyhzPDAmJihsPS1sKSxuPTA9PT1zPzA6bCpvL3Mscj1sKToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sS3I9KG4ubihWcikoKSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIEdyKHQsZSxlLG4pfSksSnI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQueCxpPXQueSxhPVtdLG89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyJmdW5jdGlvbiI9PXR5cGVvZiBlLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtvPU1hdGgubWluKG8sdC54KSxzPU1hdGgubWluKHMsdC55KX0pKToobz1NYXRoLm1pbihvLGUueCkscz1NYXRoLm1pbihzLGUueSkpO2Zvcih2YXIgYz1yLXQud2lkdGgvMi1vLGw9aS10LmhlaWdodC8yLXMsdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgaD1lW3VdLGY9ZVt1PGUubGVuZ3RoLTE/dSsxOjBdLGQ9WnIodCxuLHt4OmMraC54LHk6bCtoLnl9LHt4OmMrZi54LHk6bCtmLnl9KTtkJiZhLnB1c2goZCl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxhWzBdKTp0fSx0aT1RcjtmdW5jdGlvbiBlaSh0KXtyZXR1cm4gZWk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGVpKHQpfWZ1bmN0aW9uIG5pKHQsZSxuLHIpe3ZhciBpPVtdLGE9ZnVuY3Rpb24odCl7aS5wdXNoKHQpLGkucHVzaCgwKX0scz1mdW5jdGlvbih0KXtpLnB1c2goMCksaS5wdXNoKHQpfTtlLmluY2x1ZGVzKCJ0Iik/KG8uZGVidWcoImFkZCB0b3AgYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJyIik/KG8uZGVidWcoImFkZCByaWdodCBib3JkZXIiKSxhKHIpKTpzKHIpLGUuaW5jbHVkZXMoImIiKT8oby5kZWJ1ZygiYWRkIGJvdHRvbSBib3JkZXIiKSxhKG4pKTpzKG4pLGUuaW5jbHVkZXMoImwiKT8oby5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksYShyKSk6cyhyKSx0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGkuam9pbigiICIpKX12YXIgcmk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT03MCxhPTEwOyJMUiI9PT1uJiYoaT0xMCxhPTcwKTt2YXIgbz1yLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0xKmkvMikuYXR0cigieSIsLTEqYS8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJjbGFzcyIsImZvcmstam9pbiIpO3JldHVybiBCcihlLG8pLGUuaGVpZ2h0PWUuaGVpZ2h0K2UucGFkZGluZy8yLGUud2lkdGg9ZS53aWR0aCtlLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGkoZSx0KX0scn0saWk9e3F1ZXN0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49RHIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcrKGkuaGVpZ2h0K2UucGFkZGluZykscz1be3g6YS8yLHk6MH0se3g6YSx5Oi1hLzJ9LHt4OmEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO28uaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO3ZhciBjPUxyKHIsYSxhLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxCcihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxKcihlLHMsdCl9LHJ9LHJlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgbj1Ecih0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7by50cmFjZSgiQ2xhc3NlcyA9ICIsZS5jbGFzc2VzKTt2YXIgcz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGM9aS53aWR0aCtlLnBhZGRpbmcsbD1pLmhlaWdodCtlLnBhZGRpbmc7aWYocy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGMpLmF0dHIoImhlaWdodCIsbCksZS5wcm9wcyl7dmFyIHU9bmV3IFNldChPYmplY3Qua2V5cyhlLnByb3BzKSk7ZS5wcm9wcy5ib3JkZXJzJiYobmkocyxlLnByb3BzLmJvcmRlcnMsYyxsKSx1LmRlbGV0ZSgiYm9yZGVycyIpKSx1LmZvckVhY2goKGZ1bmN0aW9uKHQpe28ud2FybigiVW5rbm93biBub2RlIHByb3BlcnR5ICIuY29uY2F0KHQpKX0pKX1yZXR1cm4gQnIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGkoZSx0KX0scn0sbGFiZWxSZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIG49RHIodCxlLCJsYWJlbCIsITApLHI9bi5zaGFwZVN2ZztuLmJib3gsbi5oYWxmUGFkZGluZyxvLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBpPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7aWYoaS5hdHRyKCJ3aWR0aCIsMCkuYXR0cigiaGVpZ2h0IiwwKSxyLmF0dHIoImNsYXNzIiwibGFiZWwgZWRnZUxhYmVsIiksZS5wcm9wcyl7dmFyIGE9bmV3IFNldChPYmplY3Qua2V5cyhlLnByb3BzKSk7ZS5wcm9wcy5ib3JkZXJzJiYobmkoaSxlLnByb3BzLmJvcmRlcnMsMCwwKSxhLmRlbGV0ZSgiYm9yZGVycyIpKSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe28ud2FybigiVW5rbm93biBub2RlIHByb3BlcnR5ICIuY29uY2F0KHQpKX0pKX1yZXR1cm4gQnIoZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGkoZSx0KX0scn0scmVjdFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuO249ZS5jbGFzc2VzPyJub2RlICIrZS5jbGFzc2VzOiJub2RlIGRlZmF1bHQiO3ZhciByLGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWkuaW5zZXJ0KCJsaW5lIiksYz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSx1PWUubGFiZWxUZXh0LmZsYXQ/ZS5sYWJlbFRleHQuZmxhdCgpOmUubGFiZWxUZXh0O3I9Im9iamVjdCI9PT1laSh1KT91WzBdOnUsby5pbmZvKCJMYWJlbCB0ZXh0IGFiYzc5IixyLHUsIm9iamVjdCI9PT1laSh1KSk7dmFyIGg9Yy5ub2RlKCkuYXBwZW5kQ2hpbGQoT3IocixlLmxhYmVsU3R5bGUsITAsITApKSxmPXt3aWR0aDowLGhlaWdodDowfTtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGQ9aC5jaGlsZHJlblswXSxwPSgwLGwuc2VsZWN0KShoKTtmPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscC5hdHRyKCJ3aWR0aCIsZi53aWR0aCkscC5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KX1vLmluZm8oIlRleHQgMiIsdSk7dmFyIGc9dS5zbGljZSgxLHUubGVuZ3RoKSx5PWguZ2V0QkJveCgpLG09Yy5ub2RlKCkuYXBwZW5kQ2hpbGQoT3IoZy5qb2luP2cuam9pbigiPGJyLz4iKTpnLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGNlKFh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgYj1tLmNoaWxkcmVuWzBdLHY9KDAsbC5zZWxlY3QpKG0pO2Y9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixmLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZi5oZWlnaHQpfXZhciBfPWUucGFkZGluZy8yO3JldHVybigwLGwuc2VsZWN0KShtKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGYud2lkdGg+eS53aWR0aD8wOih5LndpZHRoLWYud2lkdGgpLzIpKyIsICIrKHkuaGVpZ2h0K18rNSkrIikiKSwoMCxsLnNlbGVjdCkoaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKyhmLndpZHRoPHkud2lkdGg/MDotKHkud2lkdGgtZi53aWR0aCkvMikrIiwgMCkiKSxmPWMubm9kZSgpLmdldEJCb3goKSxjLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1mLndpZHRoLzIrIiwgIisoLWYuaGVpZ2h0LzItXyszKSsiKSIpLGEuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1mLndpZHRoLzItXykuYXR0cigieSIsLWYuaGVpZ2h0LzItXykuYXR0cigid2lkdGgiLGYud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K2UucGFkZGluZykscy5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWYud2lkdGgvMi1fKS5hdHRyKCJ4MiIsZi53aWR0aC8yK18pLmF0dHIoInkxIiwtZi5oZWlnaHQvMi1fK3kuaGVpZ2h0K18pLmF0dHIoInkyIiwtZi5oZWlnaHQvMi1fK3kuaGVpZ2h0K18pLEJyKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRpKGUsdCl9LGl9LGNob2ljZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCk7cmV0dXJuIG4uaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixbe3g6MCx5OjE0fSx7eDoxNCx5OjB9LHt4OjAseTotMTR9LHt4Oi0xNCx5OjB9XS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGUud2lkdGg9MjgsZS5oZWlnaHQ9MjgsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEtyKGUsMTQsdCl9LG59LGNpcmNsZTpmdW5jdGlvbih0LGUpe3ZhciBuPURyKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmcscz1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsaS53aWR0aC8yK2EpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLG8uaW5mbygiQ2lyY2xlIG1haW4iKSxCcihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsaS53aWR0aC8yK2EsdCksS3IoZSxpLndpZHRoLzIrYSx0KX0scn0sZG91YmxlY2lyY2xlOmZ1bmN0aW9uKHQsZSl7dmFyIG49RHIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZyxzPXIuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksYz1zLmluc2VydCgiY2lyY2xlIiksbD1zLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsaS53aWR0aC8yK2ErNSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKzEwKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZysxMCksbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJyIixpLndpZHRoLzIrYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksby5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLEJyKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG8uaW5mbygiRG91YmxlQ2lyY2xlIGludGVyc2VjdCIsZSxpLndpZHRoLzIrYSs1LHQpLEtyKGUsaS53aWR0aC8yK2ErNSx0KX0scn0sc3RhZGl1bTpmdW5jdGlvbih0LGUpe3ZhciBuPURyKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkuaGVpZ2h0K2UucGFkZGluZyxvPWkud2lkdGgrYS80K2UucGFkZGluZyxzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixhLzIpLmF0dHIoInJ5IixhLzIpLmF0dHIoIngiLC1vLzIpLmF0dHIoInkiLC1hLzIpLmF0dHIoIndpZHRoIixvKS5hdHRyKCJoZWlnaHQiLGEpO3JldHVybiBCcihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aShlLHQpfSxyfSxoZXhhZ29uOmZ1bmN0aW9uKHQsZSl7dmFyIG49RHIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89YS80LHM9aS53aWR0aCsyKm8rZS5wYWRkaW5nLGM9W3t4Om8seTowfSx7eDpzLW8seTowfSx7eDpzLHk6LWEvMn0se3g6cy1vLHk6LWF9LHt4Om8seTotYX0se3g6MCx5Oi1hLzJ9XSxsPUxyKHIscyxhLGMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxCcihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBKcihlLGMsdCl9LHJ9LHJlY3RfbGVmdF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1Ecih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotby8yLHk6MH0se3g6YSx5OjB9LHt4OmEseTotb30se3g6LW8vMix5Oi1vfSx7eDowLHk6LW8vMn1dO3JldHVybiBMcihyLGEsbyxzKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksZS53aWR0aD1hK28sZS5oZWlnaHQ9byxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSnIoZSxzLHQpfSxyfSxsZWFuX3JpZ2h0OmZ1bmN0aW9uKHQsZSl7dmFyIG49RHIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqby82LHk6MH0se3g6YS1vLzYseTowfSx7eDphKzIqby82LHk6LW99LHt4Om8vNix5Oi1vfV0sYz1McihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksQnIoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSnIoZSxzLHQpfSxyfSxsZWFuX2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1Ecih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKm8vNix5OjB9LHt4OmErby82LHk6MH0se3g6YS0yKm8vNix5Oi1vfSx7eDotby82LHk6LW99XSxjPUxyKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxCcihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBKcihlLHMsdCl9LHJ9LHRyYXBlem9pZDpmdW5jdGlvbih0LGUpe3ZhciBuPURyKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmErMipvLzYseTowfSx7eDphLW8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9THIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEJyKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEpyKGUscyx0KX0scn0saW52X3RyYXBlem9pZDpmdW5jdGlvbih0LGUpe3ZhciBuPURyKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Om8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDotMipvLzYseTotb31dLGM9THIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLEJyKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEpyKGUscyx0KX0scn0scmVjdF9yaWdodF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1Ecih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6YStvLzIseTowfSx7eDphLHk6LW8vMn0se3g6YStvLzIseTotb30se3g6MCx5Oi1vfV0sYz1McihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksQnIoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSnIoZSxzLHQpfSxyfSxjeWxpbmRlcjpmdW5jdGlvbih0LGUpe3ZhciBuPURyKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89YS8yLHM9by8oMi41K2EvNTApLGM9aS5oZWlnaHQrcytlLnBhZGRpbmcsbD0iTSAwLCIrcysiIGEgIitvKyIsIitzKyIgMCwwLDAgIithKyIgMCBhICIrbysiLCIrcysiIDAsMCwwICIrLWErIiAwIGwgMCwiK2MrIiBhICIrbysiLCIrcysiIDAsMCwwICIrYSsiIDAgbCAwLCIrLWMsdT1yLmF0dHIoImxhYmVsLW9mZnNldC15IixzKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigiZCIsbCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrLShjLzIrcykrIikiKTtyZXR1cm4gQnIoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgbj10aShlLHQpLHI9bi54LWUueDtpZigwIT1vJiYoTWF0aC5hYnMocik8ZS53aWR0aC8yfHxNYXRoLmFicyhyKT09ZS53aWR0aC8yJiZNYXRoLmFicyhuLnktZS55KT5lLmhlaWdodC8yLXMpKXt2YXIgaT1zKnMqKDEtcipyLyhvKm8pKTswIT1pJiYoaT1NYXRoLnNxcnQoaSkpLGk9cy1pLHQueS1lLnk+MCYmKGk9LWkpLG4ueSs9aX1yZXR1cm4gbn0scn0sc3RhcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHI9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiByLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLEJyKGUsciksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEtyKGUsNyx0KX0sbn0sZW5kOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxpPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxyLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxCcihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBLcihlLDcsdCl9LG59LG5vdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1Ecih0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7by5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLEJyKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRpKGUsdCl9LHJ9LHN1YnJvdXRpbmU6ZnVuY3Rpb24odCxlKXt2YXIgbj1Ecih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6YSx5OjB9LHt4OmEseTotb30se3g6MCx5Oi1vfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDphKzgseTowfSx7eDphKzgseTotb30se3g6LTgseTotb30se3g6LTgseTowfV0sYz1McihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksQnIoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSnIoZSxzLHQpfSxyfSxmb3JrOnJpLGpvaW46cmksY2xhc3NfYm94OmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLnBhZGRpbmcvMjtuPWUuY2xhc3Nlcz8ibm9kZSAiK2UuY2xhc3Nlczoibm9kZSBkZWZhdWx0Ijt2YXIgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixuKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksYT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLG89aS5pbnNlcnQoImxpbmUiKSxzPWkuaW5zZXJ0KCJsaW5lIiksYz0wLHU9NCxoPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGY9MCxkPWUuY2xhc3NEYXRhLmFubm90YXRpb25zJiZlLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSxwPWUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdPyLCqyIrZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIsK7IjoiIixnPWgubm9kZSgpLmFwcGVuZENoaWxkKE9yKHAsZS5sYWJlbFN0eWxlLCEwLCEwKSkseT1nLmdldEJCb3goKTtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG09Zy5jaGlsZHJlblswXSxiPSgwLGwuc2VsZWN0KShnKTt5PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYi5hdHRyKCJ3aWR0aCIseS53aWR0aCksYi5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKHUrPXkuaGVpZ2h0KzQsYys9eS53aWR0aCk7dmFyIHY9ZS5jbGFzc0RhdGEuaWQ7dm9pZCAwIT09ZS5jbGFzc0RhdGEudHlwZSYmIiIhPT1lLmNsYXNzRGF0YS50eXBlJiYoWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz92Kz0iJmx0OyIrZS5jbGFzc0RhdGEudHlwZSsiJmd0OyI6dis9IjwiK2UuY2xhc3NEYXRhLnR5cGUrIj4iKTt2YXIgXz1oLm5vZGUoKS5hcHBlbmRDaGlsZChPcih2LGUubGFiZWxTdHlsZSwhMCwhMCkpOygwLGwuc2VsZWN0KShfKS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTt2YXIgeD1fLmdldEJCb3goKTtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGs9Xy5jaGlsZHJlblswXSx3PSgwLGwuc2VsZWN0KShfKTt4PWsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdy5hdHRyKCJ3aWR0aCIseC53aWR0aCksdy5hdHRyKCJoZWlnaHQiLHguaGVpZ2h0KX11Kz14LmhlaWdodCs0LHgud2lkdGg+YyYmKGM9eC53aWR0aCk7dmFyIFQ9W107ZS5jbGFzc0RhdGEubWVtYmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1icih0KSxyPW4uZGlzcGxheVRleHQ7WHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoT3IocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPSgwLGwuc2VsZWN0KShpKTthPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5hdHRyKCJ3aWR0aCIsYS53aWR0aCkscy5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KX1hLndpZHRoPmMmJihjPWEud2lkdGgpLHUrPWEuaGVpZ2h0KzQsVC5wdXNoKGkpfSkpLHUrPTg7dmFyIEU9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1icih0KSxyPW4uZGlzcGxheVRleHQ7WHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoT3IocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPSgwLGwuc2VsZWN0KShpKTthPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5hdHRyKCJ3aWR0aCIsYS53aWR0aCkscy5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KX1hLndpZHRoPmMmJihjPWEud2lkdGgpLHUrPWEuaGVpZ2h0KzQsRS5wdXNoKGkpfSkpLHUrPTgsZCl7dmFyIEM9KGMteS53aWR0aCkvMjsoMCxsLnNlbGVjdCkoZykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpjLzIrQykrIiwgIistMSp1LzIrIikiKSxmPXkuaGVpZ2h0KzR9dmFyIFM9KGMteC53aWR0aCkvMjtyZXR1cm4oMCxsLnNlbGVjdCkoXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpjLzIrUykrIiwgIisoLTEqdS8yK2YpKyIpIiksZis9eC5oZWlnaHQrNCxvLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtYy8yLXIpLmF0dHIoIngyIixjLzIrcikuYXR0cigieTEiLC11LzItcis4K2YpLmF0dHIoInkyIiwtdS8yLXIrOCtmKSxmKz04LFQuZm9yRWFjaCgoZnVuY3Rpb24odCl7KDAsbC5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitmKzQpKyIpIiksZis9eC5oZWlnaHQrNH0pKSxmKz04LHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgrZikuYXR0cigieTIiLC11LzItcis4K2YpLGYrPTgsRS5mb3JFYWNoKChmdW5jdGlvbih0KXsoMCxsLnNlbGVjdCkodCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1jLzIrIiwgIisoLTEqdS8yK2YpKyIpIiksZis9eC5oZWlnaHQrNH0pKSxhLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtYy8yLXIpLmF0dHIoInkiLC11LzItcikuYXR0cigid2lkdGgiLGMrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHUrZS5wYWRkaW5nKSxCcihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aShlLHQpfSxpfX0sYWk9e30sb2k9ZnVuY3Rpb24odCl7dmFyIGU9YWlbdC5pZF07by50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO3ZhciBuPXQuZGlmZnx8MDtyZXR1cm4gdC5jbHVzdGVyTm9kZT9lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh0Lngrbi10LndpZHRoLzIpKyIsICIrKHQueS10LmhlaWdodC8yLTgpKyIpIik6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgIit0LnkrIikiKSxufSxzaT17cmVjdDpmdW5jdGlvbih0LGUpe28udHJhY2UoIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGUuY2xhc3M/IiAiK2UuY2xhc3M6IiIpKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPWkubm9kZSgpLmFwcGVuZENoaWxkKE9yKGUubGFiZWxUZXh0LGUubGFiZWxTdHlsZSx2b2lkIDAsITApKSxzPWEuZ2V0QkJveCgpO2lmKGNlKFh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgYz1hLmNoaWxkcmVuWzBdLHU9KDAsbC5zZWxlY3QpKGEpO3M9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1LmF0dHIoIndpZHRoIixzLndpZHRoKSx1LmF0dHIoImhlaWdodCIscy5oZWlnaHQpfXZhciBoPTAqZS5wYWRkaW5nLGY9aC8yLGQ9ZS53aWR0aDw9cy53aWR0aCtoP3Mud2lkdGgraDplLndpZHRoO2Uud2lkdGg8PXMud2lkdGgraD9lLmRpZmY9KHMud2lkdGgtZS53aWR0aCkvMi1lLnBhZGRpbmcvMjplLmRpZmY9LWUucGFkZGluZy8yLG8udHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKSxyLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1kLzIpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2gpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yK2UucGFkZGluZy8zKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1wLndpZHRoLGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBRcihlLHQpfSxufSxyb3VuZGVkV2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPW4uYXBwZW5kKCJyZWN0Iiksbz1pLm5vZGUoKS5hcHBlbmRDaGlsZChPcihlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSkscz1vLmdldEJCb3goKTtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGM9by5jaGlsZHJlblswXSx1PSgwLGwuc2VsZWN0KShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBoPTAqZS5wYWRkaW5nLGY9aC8yLGQ9ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/cy53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHMud2lkdGgrMCplLnBhZGRpbmctZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLHIuYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLGUueC1kLzItZikuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItZikuYXR0cigid2lkdGgiLGQraCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtoKSxhLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixlLngtZC8yLWYpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYrcy5oZWlnaHQtMSkuYXR0cigid2lkdGgiLGQraCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtoLXMuaGVpZ2h0LTMpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yLWUucGFkZGluZy8zKyhjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9cC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFFyKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBRcihlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuZGlmZj0tZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFFyKGUsdCl9LG59fSxjaT17fSxsaT17fSx1aT17fSxoaT1mdW5jdGlvbih0LGUpe3ZhciBuPU9yKGUubGFiZWwsZS5sYWJlbFN0eWxlKSxyPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpPXIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2kubm9kZSgpLmFwcGVuZENoaWxkKG4pO3ZhciBhLG89bi5nZXRCQm94KCk7aWYoY2UoWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBzPW4uY2hpbGRyZW5bMF0sYz0oMCxsLnNlbGVjdCkobik7bz1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGMuYXR0cigid2lkdGgiLG8ud2lkdGgpLGMuYXR0cigiaGVpZ2h0IixvLmhlaWdodCl9aWYoaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistby53aWR0aC8yKyIsICIrLW8uaGVpZ2h0LzIrIikiKSxsaVtlLmlkXT1yLGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLnN0YXJ0TGFiZWxMZWZ0KXt2YXIgdT1PcihlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1mLm5vZGUoKS5hcHBlbmRDaGlsZCh1KTt2YXIgZD11LmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLHVpW2UuaWRdfHwodWlbZS5pZF09e30pLHVpW2UuaWRdLnN0YXJ0TGVmdD1oLGZpKGEsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe3ZhciBwPU9yKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLHk9Zy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1nLm5vZGUoKS5hcHBlbmRDaGlsZChwKSx5Lm5vZGUoKS5hcHBlbmRDaGlsZChwKTt2YXIgbT1wLmdldEJCb3goKTt5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1tLndpZHRoLzIrIiwgIistbS5oZWlnaHQvMisiKSIpLHVpW2UuaWRdfHwodWlbZS5pZF09e30pLHVpW2UuaWRdLnN0YXJ0UmlnaHQ9ZyxmaShhLGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7dmFyIGI9T3IoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSx2PXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksXz12Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPV8ubm9kZSgpLmFwcGVuZENoaWxkKGIpO3ZhciB4PWIuZ2V0QkJveCgpO18uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXgud2lkdGgvMisiLCAiKy14LmhlaWdodC8yKyIpIiksdi5ub2RlKCkuYXBwZW5kQ2hpbGQoYiksdWlbZS5pZF18fCh1aVtlLmlkXT17fSksdWlbZS5pZF0uZW5kTGVmdD12LGZpKGEsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7dmFyIGs9T3IoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksdz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLFQ9dy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1ULm5vZGUoKS5hcHBlbmRDaGlsZChrKTt2YXIgRT1rLmdldEJCb3goKTtULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1FLndpZHRoLzIrIiwgIistRS5oZWlnaHQvMisiKSIpLHcubm9kZSgpLmFwcGVuZENoaWxkKGspLHVpW2UuaWRdfHwodWlbZS5pZF09e30pLHVpW2UuaWRdLmVuZFJpZ2h0PXcsZmkoYSxlLmVuZExhYmVsUmlnaHQpfX07ZnVuY3Rpb24gZmkodCxlKXtYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZ0JiYodC5zdHlsZS53aWR0aD05KmUubGVuZ3RoKyJweCIsdC5zdHlsZS5oZWlnaHQ9IjEycHgiKX12YXIgZGk9ZnVuY3Rpb24odCxlKXtvLmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLHQuaWQsdC5sYWJlbCxsaVt0LmlkXSk7dmFyIG49ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoO2lmKHQubGFiZWwpe3ZhciByPWxpW3QuaWRdLGk9dC54LGE9dC55O2lmKG4pe3ZhciBzPUFuLmNhbGNMYWJlbFBvc2l0aW9uKG4pO28uaW5mbygiTW92aW5nIGxhYmVsIGZyb20gKCIsaSwiLCIsYSwiKSB0byAoIixzLngsIiwiLHMueSwiKSBhYmM3OCIpfXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCAiK2ErIikiKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXt2YXIgYz11aVt0LmlkXS5zdGFydExlZnQsbD10LngsdT10Lnk7aWYobil7dmFyIGg9QW4uY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLG4pO2w9aC54LHU9aC55fWMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbCsiLCAiK3UrIikiKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7dmFyIGY9dWlbdC5pZF0uc3RhcnRSaWdodCxkPXQueCxwPXQueTtpZihuKXt2YXIgZz1Bbi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLG4pO2Q9Zy54LHA9Zy55fWYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZCsiLCAiK3ArIikiKX1pZih0LmVuZExhYmVsTGVmdCl7dmFyIHk9dWlbdC5pZF0uZW5kTGVmdCxtPXQueCxiPXQueTtpZihuKXt2YXIgdj1Bbi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixuKTttPXYueCxiPXYueX15LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIiwgIitiKyIpIil9aWYodC5lbmRMYWJlbFJpZ2h0KXt2YXIgXz11aVt0LmlkXS5lbmRSaWdodCx4PXQueCxrPXQueTtpZihuKXt2YXIgdz1Bbi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIsbik7eD13Lngsaz13Lnl9Xy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit4KyIsICIraysiKSIpfX0scGk9ZnVuY3Rpb24odCxlKXtvLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTt2YXIgbj1bXSxyPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihvLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50Iix0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC54LHI9dC55LGk9TWF0aC5hYnMoZS54LW4pLGE9TWF0aC5hYnMoZS55LXIpLG89dC53aWR0aC8yLHM9dC5oZWlnaHQvMjtyZXR1cm4gaT49b3x8YT49c30oZSx0KXx8aSlvLndhcm4oImFiYzg4IG91dHNpZGUiLHQscikscj10LGl8fG4ucHVzaCh0KTtlbHNle3ZhciBhPWZ1bmN0aW9uKHQsZSxuKXtvLndhcm4oImludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpLCJcbiAgaW5zaWRlUG9pbnQgOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobiksIlxuICBub2RlICAgICAgICA6IHg6IikuY29uY2F0KHQueCwiIHk6IikuY29uY2F0KHQueSwiIHc6IikuY29uY2F0KHQud2lkdGgsIiBoOiIpLmNvbmNhdCh0LmhlaWdodCkpO3ZhciByPXQueCxpPXQueSxhPU1hdGguYWJzKHItbi54KSxzPXQud2lkdGgvMixjPW4ueDxlLng/cy1hOnMrYSxsPXQuaGVpZ2h0LzIsdT1NYXRoLmFicyhlLnktbi55KSxoPU1hdGguYWJzKGUueC1uLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKHItZS54KSpsKXt2YXIgZj1uLnk8ZS55P2UueS1sLWk6aS1sLWUueTtjPWgqZi91O3ZhciBkPXt4Om4ueDxlLng/bi54K2M6bi54LWgrYyx5Om4ueTxlLnk/bi55K3UtZjpuLnktdStmfTtyZXR1cm4gMD09PWMmJihkLng9ZS54LGQueT1lLnkpLDA9PT1oJiYoZC54PWUueCksMD09PXUmJihkLnk9ZS55KSxvLndhcm4oImFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICIuY29uY2F0KHUsIiwgcSAiKS5jb25jYXQoZiwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KGMpLGQpLGR9dmFyIHA9dSooYz1uLng8ZS54P2UueC1zLXI6ci1zLWUueCkvaCxnPW4ueDxlLng/bi54K2gtYzpuLngtaCtjLHk9bi55PGUueT9uLnkrcDpuLnktcDtyZXR1cm4gby53YXJuKCJzaWRlcyBjYWxjIGFiYzg5LCBRICIuY29uY2F0KHUsIiwgcSAiKS5jb25jYXQocCwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KGMpLHtfeDpnLF95Onl9KSwwPT09YyYmKGc9ZS54LHk9ZS55KSwwPT09aCYmKGc9ZS54KSwwPT09dSYmKHk9ZS55KSx7eDpnLHl9fShlLHIsdCk7by53YXJuKCJhYmM4OCBpbnNpZGUiLHQscixhKSxvLndhcm4oImFiYzg4IGludGVyc2VjdGlvbiIsYSk7dmFyIHM9ITE7bi5mb3JFYWNoKChmdW5jdGlvbih0KXtzPXN8fHQueD09PWEueCYmdC55PT09YS55fSkpLG4uZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueD09PWEueCYmdC55PT09YS55fSkpP28ud2FybigiYWJjODggbm8gaW50ZXJzZWN0IixhLG4pOm4ucHVzaChhKSxpPSEwfX0pKSxvLndhcm4oImFiYzg4IHJldHVybmluZyBwb2ludHMiLG4pLG59LGdpPWZ1bmN0aW9uIHQoZSxuLHIsaSl7by5pbmZvKCJHcmFwaCBpbiByZWN1cnNpdmUgcmVuZGVyOiBYWFgiLHlyKCkuanNvbi53cml0ZShuKSxpKTt2YXIgYT1uLmdyYXBoKCkucmFua2RpcjtvLnRyYWNlKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLGEpO3ZhciBzPWUuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7bi5ub2RlcygpP28uaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLG4ubm9kZXMoKSk6by5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLG4pLG4uZWRnZXMoKS5sZW5ndGg+MCYmby50cmFjZSgiUmVjdXJzaXZlIGVkZ2VzIixuLmVkZ2Uobi5lZGdlcygpWzBdKSk7dmFyIGM9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXJzIiksdT1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGhzIiksaD1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVscyIpLGY9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIik7bi5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBzPW4ubm9kZShlKTtpZih2b2lkIDAhPT1pKXt2YXIgYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkuY2x1c3RlckRhdGEpKTtvLmluZm8oIlNldHRpbmcgZGF0YSBmb3IgY2x1c3RlciBYWFggKCIsZSwiKSAiLGMsaSksbi5zZXROb2RlKGkuaWQsYyksbi5wYXJlbnQoZSl8fChvLnRyYWNlKCJTZXR0aW5nIHBhcmVudCIsZSxpLmlkKSxuLnNldFBhcmVudChlLGkuaWQsYykpfWlmKG8uaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK2UrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUoZSkpKSxzJiZzLmNsdXN0ZXJOb2RlKXtvLmluZm8oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSxzLndpZHRoLG4ubm9kZShlKSk7dmFyIGw9dChmLHMuZ3JhcGgscixuLm5vZGUoZSkpLHU9bC5lbGVtO0JyKHMsdSkscy5kaWZmPWwuZGlmZnx8MCxvLmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixlLHMscy53aWR0aCxzLngscy55KSxmdW5jdGlvbih0LGUpe2FpW2UuaWRdPXR9KHUscyksby53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlICIsdSxzKX1lbHNlIG4uY2hpbGRyZW4oZSkubGVuZ3RoPjA/KG8uaW5mbygiQ2x1c3RlciAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWFhYIixlLHMuaWQscyxuKSxvLmluZm8oWXIocy5pZCxuKSksSXJbcy5pZF09e2lkOllyKHMuaWQsbiksbm9kZTpzfSk6KG8uaW5mbygiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGgiLGUscy5pZCxzKSxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2UubGluaz8oInNhbmRib3giPT09WHQoKS5zZWN1cml0eUxldmVsP2E9Il90b3AiOmUubGlua1RhcmdldCYmKGE9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIikscj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsYSksaT1paVtlLnNoYXBlXShyLGUsbikpOnI9aT1paVtlLnNoYXBlXSh0LGUsbiksZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxhaVtlLmlkXT1yLGUuaGF2ZUNhbGxiYWNrJiZhaVtlLmlkXS5hdHRyKCJjbGFzcyIsYWlbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpfShmLG4ubm9kZShlKSxhKSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSksby5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIix0LCIgIixKU09OLnN0cmluZ2lmeShuLmVkZ2UodCkpKSxvLmluZm8oIkZpeCIsSXIsImlkczoiLHQudix0LncsIlRyYW5zbGF0ZWluZzogIixJclt0LnZdLElyW3Qud10pLGhpKGgsZSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkodCkpfSkpLG8uaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksby5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxvLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpLG8uaW5mbyhuKSxwcigpLmxheW91dChuKSxvLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLHlyKCkuanNvbi53cml0ZShuKSk7dmFyIGQ9MDtyZXR1cm4gSHIobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO28uaW5mbygiUG9zaXRpb24gIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKHQpKSksby5pbmZvKCJQb3NpdGlvbiAiK3QrIjogKCIrZS54LCIsIitlLnksIikgd2lkdGg6ICIsZS53aWR0aCwiIGhlaWdodDogIixlLmhlaWdodCksZSYmZS5jbHVzdGVyTm9kZT9vaShlKTpuLmNoaWxkcmVuKHQpLmxlbmd0aD4wPyhmdW5jdGlvbih0LGUpe28udHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7dmFyIG49ZS5zaGFwZXx8InJlY3QiO2NpW2UuaWRdPXNpW25dKHQsZSl9KGMsZSksSXJbZS5pZF0ubm9kZT1lKTpvaShlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQpO28uaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSksZSk7dmFyIGk9ZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBzPW4ucG9pbnRzLGM9ITEsdT1hLm5vZGUoZS52KSxoPWEubm9kZShlLncpO28uaW5mbygiYWJjODggSW5zZXJ0RWRnZTogIixuKSxoLmludGVyc2VjdCYmdS5pbnRlcnNlY3QmJigocz1zLnNsaWNlKDEsbi5wb2ludHMubGVuZ3RoLTEpKS51bnNoaWZ0KHUuaW50ZXJzZWN0KHNbMF0pKSxvLmluZm8oIkxhc3QgcG9pbnQiLHNbcy5sZW5ndGgtMV0saCxoLmludGVyc2VjdChzW3MubGVuZ3RoLTFdKSkscy5wdXNoKGguaW50ZXJzZWN0KHNbcy5sZW5ndGgtMV0pKSksbi50b0NsdXN0ZXImJihvLmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHJbbi50b0NsdXN0ZXJdKSxzPXBpKG4ucG9pbnRzLHJbbi50b0NsdXN0ZXJdLm5vZGUpLGM9ITApLG4uZnJvbUNsdXN0ZXImJihvLmluZm8oImZyb20gY2x1c3RlciBhYmM4OCIscltuLmZyb21DbHVzdGVyXSkscz1waShzLnJldmVyc2UoKSxyW24uZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxjPSEwKTt2YXIgZixkPXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7Zj0oImdyYXBoIj09PWl8fCJmbG93Y2hhcnQiPT09aSkmJm4uY3VydmV8fGwuY3VydmVCYXNpczt2YXIgcCxnPSgwLGwubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoZik7c3dpdGNoKG4udGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6cD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpwPSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDpwPSIifXN3aXRjaChuLnBhdHRlcm4pe2Nhc2Uic29saWQiOnArPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6cCs9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6cCs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIn12YXIgeT10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGcoZCkpLmF0dHIoImlkIixuLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3ArKG4uY2xhc3Nlcz8iICIrbi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLG4uc3R5bGUpLG09IiI7c3dpdGNoKFh0KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKG09KG09KG09d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksby5pbmZvKCJhcnJvd1R5cGVTdGFydCIsbi5hcnJvd1R5cGVTdGFydCksby5pbmZvKCJhcnJvd1R5cGVFbmQiLG4uYXJyb3dUeXBlRW5kKSxuLmFycm93VHlwZVN0YXJ0KXtjYXNlImFycm93X2Nyb3NzIjp5LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1jcm9zc1N0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjp5LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1iYXJiU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWNpcmNsZVN0YXJ0KSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWV4dGVuc2lvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWNvbXBvc2l0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5Ijp5LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIitpKyItbG9sbGlwb3BTdGFydCkiKX1zd2l0Y2gobi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50Ijp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWxvbGxpcG9wRW5kKSIpfXZhciBiPXt9O3JldHVybiBjJiYoYi51cGRhdGVkUGF0aD1zKSxiLm9yaWdpbmFsUGF0aD1uLnBvaW50cyxifSh1LHQsZSxJcixyLG4pO2RpKGUsaSl9KSksbi5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4ubm9kZSh0KTtvLmluZm8odCxlLnR5cGUsZS5kaWZmKSwiZ3JvdXAiPT09ZS50eXBlJiYoZD1lLmRpZmYpfSkpLHtlbGVtOnMsZGlmZjpkfX0seWk9ZnVuY3Rpb24odCxlLG4scixpKXtNcih0LG4scixpKSxhaT17fSxsaT17fSx1aT17fSxjaT17fSxGcj17fSxScj17fSxJcj17fSxvLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIseXIoKS5qc29uLndyaXRlKGUpKSwkcihlKSxvLndhcm4oIkdyYXBoIGFmdGVyOiIseXIoKS5qc29uLndyaXRlKGUpKSxnaSh0LGUscil9LG1pPXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwfTtmdW5jdGlvbiBiaSh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSAwOmU9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6ZT0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6ZT0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzplPSJkZXBlbmRlbmN5IjticmVhaztjYXNlIDQ6ZT0ibG9sbGlwb3AiO2JyZWFrO2RlZmF1bHQ6ZT0ibm9uZSJ9cmV0dXJuIGV9Y29uc3Qgdmk9e3NldENvbmY6ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bWlbZV09dFtlXX0pKX0sZHJhdzpmdW5jdGlvbih0LGUsbixyKXtvLmluZm8oIkRyYXdpbmcgY2xhc3MgLSAiLGUpO3ZhciBpPVh0KCkuZmxvd2NoYXJ0LGE9WHQoKS5zZWN1cml0eUxldmVsO28uaW5mbygiY29uZmlnOiIsaSk7dmFyIHMsYz1pLm5vZGVTcGFjaW5nfHw1MCx1PWkucmFua1NwYWNpbmd8fDUwLGg9bmV3KHlyKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6ci5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmMscmFua3NlcDp1LG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGY9ci5kYi5nZXRDbGFzc2VzKCksZD1yLmRiLmdldFJlbGF0aW9ucygpO28uaW5mbyhkKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1PYmplY3Qua2V5cyh0KTtvLmluZm8oImtleXM6IixpKSxvLmluZm8odCksaS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT10W25dLGE9IiI7aS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoYT1hKyIgIitpLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgcyxjLGw9e2xhYmVsU3R5bGU6IiJ9LHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2kudHlwZSxjPSJjbGFzc19ib3giLGUuc2V0Tm9kZShpLmlkLHtsYWJlbFN0eWxlOmwubGFiZWxTdHlsZSxzaGFwZTpjLGxhYmVsVGV4dDoocz11LHVlLnNhbml0aXplVGV4dChzLFh0KCkpKSxjbGFzc0RhdGE6aSxyeDowLHJ5OjAsY2xhc3M6YSxzdHlsZTpsLnN0eWxlLGlkOmkuaWQsZG9tSWQ6aS5kb21JZCx0b29sdGlwOnIuZGIuZ2V0VG9vbHRpcChpLmlkKXx8IiIsaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLGxpbms6aS5saW5rLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCx0eXBlOmkudHlwZSxwYWRkaW5nOlh0KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxvLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOmwubGFiZWxTdHlsZSxzaGFwZTpjLGxhYmVsVGV4dDp1LHJ4OjAscnk6MCxjbGFzczphLHN0eWxlOmwuc3R5bGUsaWQ6aS5pZCx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUscGFkZGluZzpYdCgpLmZsb3djaGFydC5wYWRkaW5nfSl9KSl9KGYsaCwwLHIpLGZ1bmN0aW9uKHQsZSl7dmFyIG49WHQoKS5mbG93Y2hhcnQscj0wO3QuZm9yRWFjaCgoZnVuY3Rpb24oaSl7cisrO3ZhciBhPXtjbGFzc2VzOiJyZWxhdGlvbiJ9O2EucGF0dGVybj0xPT1pLnJlbGF0aW9uLmxpbmVUeXBlPyJkYXNoZWQiOiJzb2xpZCIsYS5pZD0iaWQiK3IsImFycm93X29wZW4iPT09aS50eXBlP2EuYXJyb3doZWFkPSJub25lIjphLmFycm93aGVhZD0ibm9ybWFsIixvLmluZm8oYSxpKSxhLnN0YXJ0TGFiZWxSaWdodD0ibm9uZSI9PT1pLnJlbGF0aW9uVGl0bGUxPyIiOmkucmVsYXRpb25UaXRsZTEsYS5lbmRMYWJlbExlZnQ9Im5vbmUiPT09aS5yZWxhdGlvblRpdGxlMj8iIjppLnJlbGF0aW9uVGl0bGUyLGEuYXJyb3dUeXBlU3RhcnQ9YmkoaS5yZWxhdGlvbi50eXBlMSksYS5hcnJvd1R5cGVFbmQ9YmkoaS5yZWxhdGlvbi50eXBlMik7dmFyIHM9IiIsYz0iIjtpZih2b2lkIDAhPT1pLnN0eWxlKXt2YXIgdT1kbihpLnN0eWxlKTtzPXUuc3R5bGUsYz11LmxhYmVsU3R5bGV9ZWxzZSBzPSJmaWxsOm5vbmUiO2Euc3R5bGU9cyxhLmxhYmVsU3R5bGU9Yyx2b2lkIDAhPT1pLmludGVycG9sYXRlP2EuY3VydmU9aG4oaS5pbnRlcnBvbGF0ZSxsLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9hLmN1cnZlPWhuKHQuZGVmYXVsdEludGVycG9sYXRlLGwuY3VydmVMaW5lYXIpOmEuY3VydmU9aG4obi5jdXJ2ZSxsLmN1cnZlTGluZWFyKSxpLnRleHQ9aS50aXRsZSx2b2lkIDA9PT1pLnRleHQ/dm9pZCAwIT09aS5zdHlsZSYmKGEuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooYS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsYS5sYWJlbHBvcz0iYyIsWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz8oYS5sYWJlbFR5cGU9Imh0bWwiLGEubGFiZWw9JzxzcGFuIGNsYXNzPSJlZGdlTGFiZWwiPicraS50ZXh0KyI8L3NwYW4+Iik6KGEubGFiZWxUeXBlPSJ0ZXh0IixhLmxhYmVsPWkudGV4dC5yZXBsYWNlKHVlLmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PWkuc3R5bGUmJihhLnN0eWxlPWEuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksYS5sYWJlbFN0eWxlPWEubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksZS5zZXRFZGdlKGkuaWQxLGkuaWQyLGEscil9KSl9KGQsaCksInNhbmRib3giPT09YSYmKHM9KDAsbC5zZWxlY3QpKCIjaSIrZSkpO3ZhciBwPSJzYW5kYm94Ij09PWE/KDAsbC5zZWxlY3QpKHMubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6KDAsbC5zZWxlY3QpKCJib2R5IiksZz1wLnNlbGVjdCgnW2lkPSInLmNvbmNhdChlLCciXScpKSx5PXAuc2VsZWN0KCIjIitlKyIgZyIpO2lmKHlpKHksaCxbImFnZ3JlZ2F0aW9uIiwiZXh0ZW5zaW9uIiwiY29tcG9zaXRpb24iLCJkZXBlbmRlbmN5IiwibG9sbGlwb3AiXSwiY2xhc3NEaWFncmFtIixlKSxFbihoLGcsaS5kaWFncmFtUGFkZGluZyxpLnVzZU1heFdpZHRoKSwhaS5odG1sTGFiZWxzKWZvcih2YXIgbT0ic2FuZGJveCI9PT1hP3Mubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsYj1tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHY9MDt2PGIubGVuZ3RoO3YrKyl7dmFyIF89Ylt2XSx4PV8uZ2V0QkJveCgpLGs9bS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO2suc2V0QXR0cmlidXRlKCJyeCIsMCksay5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxrLnNldEF0dHJpYnV0ZSgid2lkdGgiLHgud2lkdGgpLGsuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHguaGVpZ2h0KSxfLmluc2VydEJlZm9yZShrLF8uZmlyc3RDaGlsZCl9TW4oci5kYixnLGUpfX07dmFyIF9pPW4oMTM2MikseGk9bi5uKF9pKSxraT17fSx3aT1bXSxUaT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09a2lbdF0mJihraVt0XT17YXR0cmlidXRlczpbXX0sby5pbmZvKCJBZGRlZCBuZXcgZW50aXR5IDoiLHQpKSxraVt0XX07Y29uc3QgRWk9e0NhcmRpbmFsaXR5OntaRVJPX09SX09ORToiWkVST19PUl9PTkUiLFpFUk9fT1JfTU9SRToiWkVST19PUl9NT1JFIixPTkVfT1JfTU9SRToiT05FX09SX01PUkUiLE9OTFlfT05FOiJPTkxZX09ORSJ9LElkZW50aWZpY2F0aW9uOntOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gWHQoKS5lcn0sYWRkRW50aXR5OlRpLGFkZEF0dHJpYnV0ZXM6ZnVuY3Rpb24odCxlKXt2YXIgbixyPVRpKHQpO2ZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0pci5hdHRyaWJ1dGVzLnB1c2goZVtuXSksby5kZWJ1ZygiQWRkZWQgYXR0cmlidXRlICIsZVtuXS5hdHRyaWJ1dGVOYW1lKX0sZ2V0RW50aXRpZXM6ZnVuY3Rpb24oKXtyZXR1cm4ga2l9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17ZW50aXR5QTp0LHJvbGVBOmUsZW50aXR5QjpuLHJlbFNwZWM6cn07d2kucHVzaChpKSxvLmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLGkpfSxnZXRSZWxhdGlvbnNoaXBzOmZ1bmN0aW9uKCl7cmV0dXJuIHdpfSxjbGVhcjpmdW5jdGlvbigpe2tpPXt9LHdpPVtdLGdlKCl9LHNldEFjY1RpdGxlOnllLGdldEFjY1RpdGxlOm1lLHNldEFjY0Rlc2NyaXB0aW9uOmJlLGdldEFjY0Rlc2NyaXB0aW9uOnZlfTt2YXIgQ2k9e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIn07Y29uc3QgU2k9Q2k7dmFyIEFpPXt9LE1pPWZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSxOaT0wO2NvbnN0IE9pPXtzZXRDb25mOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspQWlbZVtuXV09dFtlW25dXX0sZHJhdzpmdW5jdGlvbih0LGUsbixyKXtBaT1YdCgpLmVyLG8uaW5mbygiRHJhd2luZyBFUiBkaWFncmFtIik7dmFyIGksYT1YdCgpLnNlY3VyaXR5TGV2ZWw7InNhbmRib3giPT09YSYmKGk9KDAsbC5zZWxlY3QpKCIjaSIrZSkpO3ZhciBzLGM9KCJzYW5kYm94Ij09PWE/KDAsbC5zZWxlY3QpKGkubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6KDAsbC5zZWxlY3QpKCJib2R5IikpLnNlbGVjdCgiW2lkPSciLmNvbmNhdChlLCInXSIpKTsoZnVuY3Rpb24odCxlKXt2YXIgbjt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLENpLk9OTFlfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsQ2kuT05MWV9PTkVfRU5EKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsMCBMMywxOCBNOSwwIEw5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixDaS5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDIxKS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixDaS5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixDaS5PTkVfT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyNyIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsQ2kuT05FX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwyNykuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLENpLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNDgpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsQ2kuWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMTgiKX0pKGMsQWkpLHM9bmV3KHlyKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGRpcmVjdGVkOiEwLGNvbXBvdW5kOiExfSkuc2V0R3JhcGgoe3JhbmtkaXI6QWkubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dmFyIHUsaCxmPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGE9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsaSk7cj12b2lkIDA9PT1yP2k6cjt2YXIgbz0iZW50aXR5LSIraSxzPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIixvKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitYdCgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK0FpLmZvbnRTaXplKyJweCIpLnRleHQoaSksYz1mdW5jdGlvbih0LGUsbil7dmFyIHI9QWkuZW50aXR5UGFkZGluZy8zLGk9QWkuZW50aXR5UGFkZGluZy8zLGE9Ljg1KkFpLmZvbnRTaXplLG89ZS5ub2RlKCkuZ2V0QkJveCgpLHM9W10sYz0hMSxsPSExLHU9MCxoPTAsZj0wLGQ9MCxwPW8uaGVpZ2h0KzIqcixnPTE7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10LmF0dHJpYnV0ZUtleVR5cGUmJihjPSEwKSx2b2lkIDAhPT10LmF0dHJpYnV0ZUNvbW1lbnQmJihsPSEwKX0pKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPSIiLmNvbmNhdChlLm5vZGUoKS5pZCwiLWF0dHItIikuY29uY2F0KGcpLG89MCx5PWxlKG4uYXR0cmlidXRlVHlwZSksbT10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitYdCgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dCh5KSxiPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIiwiIi5jb25jYXQoaSwiLW5hbWUiKSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK1h0KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrYSsicHgiKS50ZXh0KG4uYXR0cmlidXRlTmFtZSksdj17fTt2LnRuPW0sdi5ubj1iO3ZhciBfPW0ubm9kZSgpLmdldEJCb3goKSx4PWIubm9kZSgpLmdldEJCb3goKTtpZih1PU1hdGgubWF4KHUsXy53aWR0aCksaD1NYXRoLm1heChoLHgud2lkdGgpLG89TWF0aC5tYXgoXy5oZWlnaHQseC5oZWlnaHQpLGMpe3ZhciBrPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIiwiIi5jb25jYXQoaSwiLWtleSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrWHQoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVLZXlUeXBlfHwiIik7di5rbj1rO3ZhciB3PWsubm9kZSgpLmdldEJCb3goKTtmPU1hdGgubWF4KGYsdy53aWR0aCksbz1NYXRoLm1heChvLHcuaGVpZ2h0KX1pZihsKXt2YXIgVD10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi1jb21tZW50IikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitYdCgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZUNvbW1lbnR8fCIiKTt2LmNuPVQ7dmFyIEU9VC5ub2RlKCkuZ2V0QkJveCgpO2Q9TWF0aC5tYXgoZCxFLndpZHRoKSxvPU1hdGgubWF4KG8sRS5oZWlnaHQpfXYuaGVpZ2h0PW8scy5wdXNoKHYpLHArPW8rMipyLGcrPTF9KSk7dmFyIHk9NDtjJiYoeSs9MiksbCYmKHkrPTIpO3ZhciBtPXUraCtmK2QsYj17d2lkdGg6TWF0aC5tYXgoQWkubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoby53aWR0aCsyKkFpLmVudGl0eVBhZGRpbmcsbStpKnkpKSxoZWlnaHQ6bi5sZW5ndGg+MD9wOk1hdGgubWF4KEFpLm1pbkVudGl0eUhlaWdodCxvLmhlaWdodCsyKkFpLmVudGl0eVBhZGRpbmcpfTtpZihuLmxlbmd0aD4wKXt2YXIgdj1NYXRoLm1heCgwLChiLndpZHRoLW0taSp5KS8oeS8yKSk7ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitiLndpZHRoLzIrIiwiKyhyK28uaGVpZ2h0LzIpKyIpIik7dmFyIF89by5oZWlnaHQrMipyLHg9ImF0dHJpYnV0ZUJveE9kZCI7cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1fK3IrZS5oZWlnaHQvMjtlLnRuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2krIiwiK24rIikiKTt2YXIgYT10Lmluc2VydCgicmVjdCIsIiMiK2UudG4ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHgpKS5hdHRyKCJmaWxsIixBaS5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixBaS5zdHJva2UpLmF0dHIoIngiLDApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIix1KzIqaSt2KS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KzIqciksbz1wYXJzZUZsb2F0KGEuYXR0cigieCIpKStwYXJzZUZsb2F0KGEuYXR0cigid2lkdGgiKSk7ZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobytpKSsiLCIrbisiKSIpO3ZhciBzPXQuaW5zZXJ0KCJyZWN0IiwiIyIrZS5ubi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeCkpLmF0dHIoImZpbGwiLEFpLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLEFpLnN0cm9rZSkuYXR0cigieCIsbykuYXR0cigieSIsXykuYXR0cigid2lkdGgiLGgrMippK3YpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrMipyKSxwPXBhcnNlRmxvYXQocy5hdHRyKCJ4IikpK3BhcnNlRmxvYXQocy5hdHRyKCJ3aWR0aCIpKTtpZihjKXtlLmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwK2kpKyIsIituKyIpIik7dmFyIGc9dC5pbnNlcnQoInJlY3QiLCIjIitlLmtuLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdCh4KSkuYXR0cigiZmlsbCIsQWkuZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsQWkuc3Ryb2tlKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsZisyKmkrdikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCsyKnIpO3A9cGFyc2VGbG9hdChnLmF0dHIoIngiKSkrcGFyc2VGbG9hdChnLmF0dHIoIndpZHRoIikpfWwmJihlLmNuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwK2kpKyIsIituKyIpIiksdC5pbnNlcnQoInJlY3QiLCIjIitlLmNuLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdCh4KSkuYXR0cigiZmlsbCIsQWkuZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsQWkuc3Ryb2tlKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsZCsyKmkrdikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCsyKnIpKSxfKz1lLmhlaWdodCsyKnIseD0iYXR0cmlidXRlQm94T2RkIj09eD8iYXR0cmlidXRlQm94RXZlbiI6ImF0dHJpYnV0ZUJveE9kZCJ9KSl9ZWxzZSBiLmhlaWdodD1NYXRoLm1heChBaS5taW5FbnRpdHlIZWlnaHQscCksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitiLndpZHRoLzIrIiwiK2IuaGVpZ2h0LzIrIikiKTtyZXR1cm4gYn0oYSxzLGVbaV0uYXR0cmlidXRlcyksbD1jLndpZHRoLHU9Yy5oZWlnaHQsaD1hLmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5Qm94IikuYXR0cigiZmlsbCIsQWkuZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsQWkuc3Ryb2tlKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsbCkuYXR0cigiaGVpZ2h0Iix1KS5ub2RlKCkuZ2V0QkJveCgpO24uc2V0Tm9kZShpLHt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6aX0pfSkpLHJ9KGMsci5kYi5nZXRFbnRpdGllcygpLHMpLGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnNldEVkZ2UodC5lbnRpdHlBLHQuZW50aXR5Qix7cmVsYXRpb25zaGlwOnR9LE1pKHQpKX0pKSx0fShyLmRiLmdldFJlbGF0aW9uc2hpcHMoKSxzKTtwcigpLmxheW91dChzKSx1PWMsKGg9cykubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1oLm5vZGUodCkmJnUuc2VsZWN0KCIjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaC5ub2RlKHQpLngtaC5ub2RlKHQpLndpZHRoLzIpKyIsIisoaC5ub2RlKHQpLnktaC5ub2RlKHQpLmhlaWdodC8yKSsiICkiKX0pKSxkLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbixyLGkpe05pKys7dmFyIGE9bi5lZGdlKGUuZW50aXR5QSxlLmVudGl0eUIsTWkoZSkpLG89KDAsbC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShsLmN1cnZlQmFzaXMpLHM9dC5pbnNlcnQoInBhdGgiLCIjIityKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixvKGEucG9pbnRzKSkuYXR0cigic3Ryb2tlIixBaS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIik7ZS5yZWxTcGVjLnJlbFR5cGU9PT1pLmRiLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmcy5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7dmFyIGM9IiI7c3dpdGNoKEFpLmFycm93TWFya2VyQWJzb2x1dGUmJihjPShjPShjPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOnMuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2MrIiMiK1NpLlpFUk9fT1JfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6cy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYysiIyIrU2kuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpzLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitjKyIjIitTaS5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6cy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYysiIyIrU2kuT05MWV9PTkVfRU5EKyIpIil9c3dpdGNoKGUucmVsU3BlYy5jYXJkQil7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOnMuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYysiIyIrU2kuWkVST19PUl9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOnMuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYysiIyIrU2kuWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOnMuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYysiIyIrU2kuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6cy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitjKyIjIitTaS5PTkxZX09ORV9TVEFSVCsiKSIpfXZhciB1PXMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksaD1zLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKC41KnUpLGY9InJlbCIrTmksZD10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGFiZWwiKS5hdHRyKCJpZCIsZikuYXR0cigieCIsaC54KS5hdHRyKCJ5IixoLnkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK1h0KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrQWkuZm9udFNpemUrInB4IikudGV4dChlLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIrZikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbEJveCIpLmF0dHIoIngiLGgueC1kLndpZHRoLzIpLmF0dHIoInkiLGgueS1kLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCkuYXR0cigiaGVpZ2h0IixkLmhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiZmlsbC1vcGFjaXR5IiwiODUlIil9KGMsdCxzLGYscil9KSk7dmFyIHA9QWkuZGlhZ3JhbVBhZGRpbmcsZz1jLm5vZGUoKS5nZXRCQm94KCkseT1nLndpZHRoKzIqcCxtPWcuaGVpZ2h0KzIqcDtUbihjLDAseSxBaS51c2VNYXhXaWR0aCksYy5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoZy54LXAsIiAiKS5jb25jYXQoZy55LXAsIiAiKS5jb25jYXQoeSwiICIpLmNvbmNhdChtKSksTW4oci5kYixjLGUpfX07dmFyIERpPXt9O2NvbnN0IEJpPXtzZXRDb25mOmZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe0RpW2VdPXRbZV19KSl9LGRyYXc6ZnVuY3Rpb24odCxlLG4pe3RyeXtvLmRlYnVnKCJSZW5lcmluZyBzdmcgZm9yIHN5bnRheCBlcnJvclxuIik7dmFyIHI9KDAsbC5zZWxlY3QpKCIjIitlKSxpPXIuYXBwZW5kKCJnIik7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTQ0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK24pLHIuYXR0cigiaGVpZ2h0IiwxMDApLHIuYXR0cigid2lkdGgiLDUwMCksci5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgOTEyIDUxMiIpfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fX07dmFyIExpPW4oNTg5MCksSWk9bi5uKExpKTtmdW5jdGlvbiBGaSh0KXtyZXR1cm4gRmk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LEZpKHQpfWZ1bmN0aW9uIFJpKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIFBpLGppLHppPSJmbG93Y2hhcnQtIixZaT0wLFVpPVh0KCksJGk9e30sV2k9W10scWk9W10sSGk9W10sVmk9e30sR2k9e30sWGk9MCxaaT0hMCxRaT1bXSxLaT1mdW5jdGlvbih0KXtyZXR1cm4gdWUuc2FuaXRpemVUZXh0KHQsVWkpfSxKaT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMoJGkpLG49MDtuPGUubGVuZ3RoO24rKylpZigkaVtlW25dXS5pZD09PXQpcmV0dXJuICRpW2Vbbl1dLmRvbUlkO3JldHVybiB0fSx0YT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT17c3RhcnQ6dCxlbmQ6ZSx0eXBlOnZvaWQgMCx0ZXh0OiIifTt2b2lkIDAhPT0ocj1uLnRleHQpJiYoaS50ZXh0PUtpKHIudHJpbSgpKSwnIic9PT1pLnRleHRbMF0mJiciJz09PWkudGV4dFtpLnRleHQubGVuZ3RoLTFdJiYoaS50ZXh0PWkudGV4dC5zdWJzdHJpbmcoMSxpLnRleHQubGVuZ3RoLTEpKSksdm9pZCAwIT09biYmKGkudHlwZT1uLnR5cGUsaS5zdHJva2U9bi5zdHJva2UsaS5sZW5ndGg9bi5sZW5ndGgpLFdpLnB1c2goaSl9LGVhPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dm9pZCAwIT09JGlbbl0mJiRpW25dLmNsYXNzZXMucHVzaChlKSx2b2lkIDAhPT1WaVtuXSYmVmlbbl0uY2xhc3Nlcy5wdXNoKGUpfSkpfSxuYT1mdW5jdGlvbih0KXt2YXIgZT0oMCxsLnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9KDAsbC5zZWxlY3QpKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSwoMCxsLnNlbGVjdCkodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PSgwLGwuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUudGV4dCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLGUuaHRtbChlLmh0bWwoKS5yZXBsYWNlKC8mbHQ7YnJcLyZndDsvZywiPGJyLz4iKSksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLCgwLGwuc2VsZWN0KSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSkpfTtRaS5wdXNoKG5hKTt2YXIgcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxIaS5sZW5ndGg7ZSsrKWlmKEhpW2VdLmlkPT09dClyZXR1cm4gZTtyZXR1cm4tMX0saWE9LTEsYWE9W10sb2E9ZnVuY3Rpb24gdChlLG4pe3ZhciByPUhpW25dLm5vZGVzO2lmKCEoKGlhKz0xKT4yZTMpKXtpZihhYVtpYV09bixIaVtuXS5pZD09PWUpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtmb3IodmFyIGk9MCxhPTE7aTxyLmxlbmd0aDspe3ZhciBvPXJhKHJbaV0pO2lmKG8+PTApe3ZhciBzPXQoZSxvKTtpZihzLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OmErcy5jb3VudH07YSs9cy5jb3VudH1pKz0xfXJldHVybntyZXN1bHQ6ITEsY291bnQ6YX19fSxzYT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZXMuaW5kZXhPZihlKT49MCYmKG49ITApfSkpLG59LGNhPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtzYShlLHIpfHxuLnB1c2godC5ub2Rlc1tpXSl9KSkse25vZGVzOm59fTtjb25zdCBsYT17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxkZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuICR0LmZsb3djaGFydH0sc2V0QWNjVGl0bGU6eWUsZ2V0QWNjVGl0bGU6bWUsZ2V0QWNjRGVzY3JpcHRpb246dmUsc2V0QWNjRGVzY3JpcHRpb246YmUsYWRkVmVydGV4OmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTp7fSxjPXQ7dm9pZCAwIT09YyYmMCE9PWMudHJpbSgpLmxlbmd0aCYmKHZvaWQgMD09PSRpW2NdJiYoJGlbY109e2lkOmMsZG9tSWQ6emkrYysiLSIrWWksc3R5bGVzOltdLGNsYXNzZXM6W119KSxZaSsrLHZvaWQgMCE9PWU/KFVpPVh0KCksJyInPT09KG89S2koZS50cmltKCkpKVswXSYmJyInPT09b1tvLmxlbmd0aC0xXSYmKG89by5zdWJzdHJpbmcoMSxvLmxlbmd0aC0xKSksJGlbY10udGV4dD1vKTp2b2lkIDA9PT0kaVtjXS50ZXh0JiYoJGlbY10udGV4dD10KSx2b2lkIDAhPT1uJiYoJGlbY10udHlwZT1uKSxudWxsIT1yJiZyLmZvckVhY2goKGZ1bmN0aW9uKHQpeyRpW2NdLnN0eWxlcy5wdXNoKHQpfSkpLG51bGwhPWkmJmkuZm9yRWFjaCgoZnVuY3Rpb24odCl7JGlbY10uY2xhc3Nlcy5wdXNoKHQpfSkpLHZvaWQgMCE9PWEmJigkaVtjXS5kaXI9YSksJGlbY10ucHJvcHM9cyl9LGxvb2tVcERvbUlkOkppLGFkZExpbms6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxlLmxlbmd0aDthKyspdGEodFtpXSxlW2FdLG4scil9LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9XaS5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpXaVt0XS5pbnRlcnBvbGF0ZT1lfSkpfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P1dpLmRlZmF1bHRTdHlsZT1lOigtMT09PUFuLmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsZSkmJmUucHVzaCgiZmlsbDpub25lIiksV2lbdF0uc3R5bGU9ZSl9KSl9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09cWlbdF0mJihxaVt0XT17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLG51bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgiY29sb3IiKSl7dmFyIG49ZS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7cWlbdF0udGV4dFN0eWxlcy5wdXNoKG4pfXFpW3RdLnN0eWxlcy5wdXNoKGUpfSkpfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7KFBpPXQpLm1hdGNoKC8uKjwvKSYmKFBpPSJSTCIpLFBpLm1hdGNoKC8uKlxeLykmJihQaT0iQlQiKSxQaS5tYXRjaCgvLio+LykmJihQaT0iTFIiKSxQaS5tYXRjaCgvLip2LykmJihQaT0iVEIiKX0sc2V0Q2xhc3M6ZWEsc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoR2lbImdlbi0xIj09PWppP0ppKHQpOnRdPUtpKGUpKX0pKX0sZ2V0VG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gR2lbdF19LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe3ZhciByPUppKHQpO2lmKCJsb29zZSI9PT1YdCgpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciBpPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aT1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLnRyaW0oKTsnIic9PT1vLmNoYXJBdCgwKSYmJyInPT09by5jaGFyQXQoby5sZW5ndGgtMSkmJihvPW8uc3Vic3RyKDEsby5sZW5ndGgtMikpLGlbYV09b319MD09PWkubGVuZ3RoJiZpLnB1c2godCksdm9pZCAwIT09JGlbdF0mJigkaVt0XS5oYXZlQ2FsbGJhY2s9ITAsUWkucHVzaCgoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KHIsJyJdJykpO251bGwhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXt2YXIgdDtBbi5ydW5GdW5jLmFwcGx5KEFuLFtlXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gUmkodCl9KHQ9aSl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBSaSh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1JpKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpKX0pLCExKX0pKSl9fSh0LGUsbil9KSksZWEodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT0kaVt0XSYmKCRpW3RdLmxpbms9QW4uZm9ybWF0VXJsKGUsVWkpLCRpW3RdLmxpbmtUYXJnZXQ9bil9KSksZWEodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7UWkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFBpLnRyaW0oKX0sZ2V0VmVydGljZXM6ZnVuY3Rpb24oKXtyZXR1cm4gJGl9LGdldEVkZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIFdpfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHFpfSxjbGVhcjpmdW5jdGlvbih0KXskaT17fSxxaT17fSxXaT1bXSwoUWk9W10pLnB1c2gobmEpLEhpPVtdLFZpPXt9LFhpPTAsR2k9W10sWmk9ITAsamk9dHx8Imdlbi0xIixnZSgpfSxzZXRHZW46ZnVuY3Rpb24odCl7amk9dHx8Imdlbi0xIn0sZGVmYXVsdFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In0sYWRkU3ViR3JhcGg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQudHJpbSgpLGk9bjt0PT09biYmbi5tYXRjaCgvXHMvKSYmKHI9dm9pZCAwKTt2YXIgYT1bXSxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e2Jvb2xlYW46e30sbnVtYmVyOnt9LHN0cmluZzp7fX0scj1bXSxpPXQuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgaT1GaSh0KTtyZXR1cm4gdC5zdG10JiYiZGlyIj09PXQuc3RtdD8oZT10LnZhbHVlLCExKToiIiE9PXQudHJpbSgpJiYoaSBpbiBuPyFuW2ldLmhhc093blByb3BlcnR5KHQpJiYobltpXVt0XT0hMCk6IShyLmluZGV4T2YodCk+PTApJiZyLnB1c2godCkpfSkpO3JldHVybntub2RlTGlzdDppLGRpcjplfX0oYS5jb25jYXQuYXBwbHkoYSxlKSksYz1zLm5vZGVMaXN0LGw9cy5kaXI7aWYoYT1jLCJnZW4tMSI9PT1qaSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylhW3VdPUppKGFbdV0pO3I9cnx8InN1YkdyYXBoIitYaSxpPUtpKGk9aXx8IiIpLFhpKz0xO3ZhciBoPXtpZDpyLG5vZGVzOmEsdGl0bGU6aS50cmltKCksY2xhc3NlczpbXSxkaXI6bH07cmV0dXJuIG8uaW5mbygiQWRkaW5nIixoLmlkLGgubm9kZXMsaC5kaXIpLGgubm9kZXM9Y2EoaCxIaSkubm9kZXMsSGkucHVzaChoKSxWaVtyXT1oLHJ9LGdldERlcHRoRmlyc3RQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIGFhW3RdfSxpbmRleE5vZGVzOmZ1bmN0aW9uKCl7aWE9LTEsSGkubGVuZ3RoPjAmJm9hKCJub25lIixIaS5sZW5ndGgtMSl9LGdldFN1YkdyYXBoczpmdW5jdGlvbigpe3JldHVybiBIaX0sZGVzdHJ1Y3RMaW5rOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPWUuc2xpY2UoMCwtMSkscj0iYXJyb3dfb3BlbiI7c3dpdGNoKGUuc2xpY2UoLTEpKXtjYXNlIngiOnI9ImFycm93X2Nyb3NzIiwieCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6cj0iYXJyb3dfcG9pbnQiLCI8Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpyPSJhcnJvd19jaXJjbGUiLCJvIj09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSl9dmFyIGk9Im5vcm1hbCIsYT1uLmxlbmd0aC0xOyI9Ij09PW5bMF0mJihpPSJ0aGljayIpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MCxpPTA7aTxuOysraSkiLiI9PT1lW2ldJiYrK3I7cmV0dXJuIHJ9KDAsbik7cmV0dXJuIG8mJihpPSJkb3R0ZWQiLGE9bykse3R5cGU6cixzdHJva2U6aSxsZW5ndGg6YX19KHQpO2lmKGUpe2lmKG49ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKGVbMF0pe2Nhc2UiPCI6bj0iYXJyb3dfcG9pbnQiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIngiOm49ImFycm93X2Nyb3NzIixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGU9ZS5zbGljZSgxKX12YXIgcj0ibm9ybWFsIjtyZXR1cm4tMSE9PWUuaW5kZXhPZigiPSIpJiYocj0idGhpY2siKSwtMSE9PWUuaW5kZXhPZigiLiIpJiYocj0iZG90dGVkIikse3R5cGU6bixzdHJva2U6cn19KGUpLG4uc3Ryb2tlIT09ci5zdHJva2UpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2lmKCJhcnJvd19vcGVuIj09PW4udHlwZSluLnR5cGU9ci50eXBlO2Vsc2V7aWYobi50eXBlIT09ci50eXBlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtuLnR5cGU9ImRvdWJsZV8iK24udHlwZX1yZXR1cm4iZG91YmxlX2Fycm93Ij09PW4udHlwZSYmKG4udHlwZT0iZG91YmxlX2Fycm93X3BvaW50Iiksbi5sZW5ndGg9ci5sZW5ndGgsbn1yZXR1cm4gcn0sbGV4OntmaXJzdEdyYXBoOmZ1bmN0aW9uKCl7cmV0dXJuISFaaSYmKFppPSExLCEwKX19LGV4aXN0czpzYSxtYWtlVW5pcTpjYX07dmFyIHVhPW4oNDk0OSksaGE9bi5uKHVhKSxmYT1uKDgyODQpLGRhPW4ubihmYSk7ZnVuY3Rpb24gcGEodCxlLG4pe3ZhciByPS45KihlLndpZHRoK2UuaGVpZ2h0KSxpPVt7eDpyLzIseTowfSx7eDpyLHk6LXIvMn0se3g6ci8yLHk6LXJ9LHt4OjAseTotci8yfV0sYT1FYSh0LHIscixpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhhKCkuaW50ZXJzZWN0LnBvbHlnb24obixpLHQpfSxhfWZ1bmN0aW9uIGdhKHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPXIvNCxhPWUud2lkdGgrMippLG89W3t4OmkseTowfSx7eDphLWkseTowfSx7eDphLHk6LXIvMn0se3g6YS1pLHk6LXJ9LHt4OmkseTotcn0se3g6MCx5Oi1yLzJ9XSxzPUVhKHQsYSxyLG8pO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaGEoKS5pbnRlcnNlY3QucG9seWdvbihuLG8sdCl9LHN9ZnVuY3Rpb24geWEodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotaS8yLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6LWkvMix5Oi1pfSx7eDowLHk6LWkvMn1dLG89RWEodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoYSgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBtYSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89RWEodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoYSgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBiYSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjIqaS82LHk6MH0se3g6citpLzYseTowfSx7eDpyLTIqaS82LHk6LWl9LHt4Oi1pLzYseTotaX1dLG89RWEodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoYSgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiB2YSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnIrMippLzYseTowfSx7eDpyLWkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89RWEodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoYSgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBfYSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDotMippLzYseTotaX1dLG89RWEodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoYSgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiB4YSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyK2kvMix5OjB9LHt4OnIseTotaS8yfSx7eDpyK2kvMix5Oi1pfSx7eDowLHk6LWl9XSxvPUVhKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaGEoKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24ga2EodCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ZS53aWR0aCtyLzQsYT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixyLzIpLmF0dHIoInJ5IixyLzIpLmF0dHIoIngiLC1pLzIpLmF0dHIoInkiLC1yLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaGEoKS5pbnRlcnNlY3QucmVjdChuLHQpfSxhfWZ1bmN0aW9uIHdhKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4OjAseTotaX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6cis4LHk6MH0se3g6cis4LHk6LWl9LHt4Oi04LHk6LWl9LHt4Oi04LHk6MH1dLG89RWEodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBoYSgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBUYSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPXIvMixhPWkvKDIuNStyLzUwKSxvPWUuaGVpZ2h0K2Escz0iTSAwLCIrYSsiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBhICIraSsiLCIrYSsiIDAsMCwwICIrLXIrIiAwIGwgMCwiK28rIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgbCAwLCIrLW8sYz10LmF0dHIoImxhYmVsLW9mZnNldC15IixhKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistci8yKyIsIistKG8vMithKSsiKSIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgZT1oYSgpLmludGVyc2VjdC5yZWN0KG4sdCkscj1lLngtbi54O2lmKDAhPWkmJihNYXRoLmFicyhyKTxuLndpZHRoLzJ8fE1hdGguYWJzKHIpPT1uLndpZHRoLzImJk1hdGguYWJzKGUueS1uLnkpPm4uaGVpZ2h0LzItYSkpe3ZhciBvPWEqYSooMS1yKnIvKGkqaSkpOzAhPW8mJihvPU1hdGguc3FydChvKSksbz1hLW8sdC55LW4ueT4wJiYobz0tbyksZS55Kz1vfXJldHVybiBlfSxjfWZ1bmN0aW9uIEVhKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK24vMisiKSIpfWNvbnN0IENhPWZ1bmN0aW9uKHQpe3Quc2hhcGVzKCkucXVlc3Rpb249cGEsdC5zaGFwZXMoKS5oZXhhZ29uPWdhLHQuc2hhcGVzKCkuc3RhZGl1bT1rYSx0LnNoYXBlcygpLnN1YnJvdXRpbmU9d2EsdC5zaGFwZXMoKS5jeWxpbmRlcj1UYSx0LnNoYXBlcygpLnJlY3RfbGVmdF9pbnZfYXJyb3c9eWEsdC5zaGFwZXMoKS5sZWFuX3JpZ2h0PW1hLHQuc2hhcGVzKCkubGVhbl9sZWZ0PWJhLHQuc2hhcGVzKCkudHJhcGV6b2lkPXZhLHQuc2hhcGVzKCkuaW52X3RyYXBlem9pZD1fYSx0LnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PXhhfTt2YXIgU2E9e30sQWE9ZnVuY3Rpb24odCxlLG4scixpLGEpe1h0KCkuc2VjdXJpdHlMZXZlbDt2YXIgcz1yP3Iuc2VsZWN0KCdbaWQ9IicuY29uY2F0KG4sJyJdJykpOigwLGwuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChuLCciXScpKSxjPWl8fGRvY3VtZW50O09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl0saT0iZGVmYXVsdCI7ci5jbGFzc2VzLmxlbmd0aD4wJiYoaT1yLmNsYXNzZXMuam9pbigiICIpKTt2YXIgbCx1PWRuKHIuc3R5bGVzKSxoPXZvaWQgMCE9PXIudGV4dD9yLnRleHQ6ci5pZDtpZihjZShYdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGY9e2xhYmVsOmgucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhsPWRhKCkocyxmKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobCl9ZWxzZXt2YXIgZD1jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7ZC5zZXRBdHRyaWJ1dGUoInN0eWxlIix1LmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7Zm9yKHZhciBwPWguc3BsaXQodWUubGluZUJyZWFrUmVnZXgpLGc9MDtnPHAubGVuZ3RoO2crKyl7dmFyIHk9Yy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHkuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHkuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLHkudGV4dENvbnRlbnQ9cFtnXSxkLmFwcGVuZENoaWxkKHkpfWw9ZH12YXIgbT0wLGI9IiI7c3dpdGNoKHIudHlwZSl7Y2FzZSJyb3VuZCI6bT01LGI9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpjYXNlImdyb3VwIjpkZWZhdWx0OmI9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Yj0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Yj0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmNhc2Uib2RkX3JpZ2h0IjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmI9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpiPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpiPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Yj0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJjaXJjbGUiOmI9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpiPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmI9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Yj0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Yj0iY3lsaW5kZXIifW8ud2FybigiQWRkaW5nIG5vZGUiLHIuaWQsci5kb21JZCksZS5zZXROb2RlKGEuZGIubG9va1VwRG9tSWQoci5pZCkse2xhYmVsVHlwZToic3ZnIixsYWJlbFN0eWxlOnUubGFiZWxTdHlsZSxzaGFwZTpiLGxhYmVsOmwscng6bSxyeTptLGNsYXNzOmksc3R5bGU6dS5zdHlsZSxpZDphLmRiLmxvb2tVcERvbUlkKHIuaWQpfSl9KSl9LE1hPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9MDtpZih2b2lkIDAhPT10LmRlZmF1bHRTdHlsZSl7dmFyIG89ZG4odC5kZWZhdWx0U3R5bGUpO3I9by5zdHlsZSxpPW8ubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKG8pe2ErKzt2YXIgcz0iTC0iK28uc3RhcnQrIi0iK28uZW5kLGM9IkxTLSIrby5zdGFydCx1PSJMRS0iK28uZW5kLGg9e307ImFycm93X29wZW4iPT09by50eXBlP2guYXJyb3doZWFkPSJub25lIjpoLmFycm93aGVhZD0ibm9ybWFsIjt2YXIgZj0iIixkPSIiO2lmKHZvaWQgMCE9PW8uc3R5bGUpe3ZhciBwPWRuKG8uc3R5bGUpO2Y9cC5zdHlsZSxkPXAubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChvLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmY9ImZpbGw6bm9uZSIsdm9pZCAwIT09ciYmKGY9ciksdm9pZCAwIT09aSYmKGQ9aSk7YnJlYWs7Y2FzZSJkb3R0ZWQiOmY9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmY9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9aC5zdHlsZT1mLGgubGFiZWxTdHlsZT1kLHZvaWQgMCE9PW8uaW50ZXJwb2xhdGU/aC5jdXJ2ZT1obihvLmludGVycG9sYXRlLGwuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2guY3VydmU9aG4odC5kZWZhdWx0SW50ZXJwb2xhdGUsbC5jdXJ2ZUxpbmVhcik6aC5jdXJ2ZT1obihTYS5jdXJ2ZSxsLmN1cnZlTGluZWFyKSx2b2lkIDA9PT1vLnRleHQ/dm9pZCAwIT09by5zdHlsZSYmKGguYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooaC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsaC5sYWJlbHBvcz0iYyIsY2UoWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/KGgubGFiZWxUeXBlPSJodG1sIixoLmxhYmVsPSc8c3BhbiBpZD0iTC0nLmNvbmNhdChzLCciIGNsYXNzPSJlZGdlTGFiZWwgTC0nKS5jb25jYXQoYywiJyBMLSIpLmNvbmNhdCh1LCciIHN0eWxlPSInKS5jb25jYXQoaC5sYWJlbFN0eWxlLCciPicpLmNvbmNhdChvLnRleHQucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksIjwvc3Bhbj4iKSk6KGgubGFiZWxUeXBlPSJ0ZXh0IixoLmxhYmVsPW8udGV4dC5yZXBsYWNlKHVlLmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PW8uc3R5bGUmJihoLnN0eWxlPWguc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksaC5sYWJlbFN0eWxlPWgubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksaC5pZD1zLGguY2xhc3M9YysiICIrdSxoLm1pbmxlbj1vLmxlbmd0aHx8MSxlLnNldEVkZ2Uobi5kYi5sb29rVXBEb21JZChvLnN0YXJ0KSxuLmRiLmxvb2tVcERvbUlkKG8uZW5kKSxoLGEpfSkpfTtjb25zdCBOYT17c2V0Q29uZjpmdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKVNhW2Vbbl1dPXRbZVtuXV19LGFkZFZlcnRpY2VzOkFhLGFkZEVkZ2VzOk1hLGdldENsYXNzZXM6ZnVuY3Rpb24odCxlKXtvLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLGUuZGIuY2xlYXIoKTt0cnl7cmV0dXJuIGUucGFyc2UodCksZS5kYi5nZXRDbGFzc2VzKCl9Y2F0Y2godCl7cmV0dXJufX0sZHJhdzpmdW5jdGlvbih0LGUsbixyKXtvLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0Iiksci5kYi5jbGVhcigpO3ZhciBpLGE9WHQoKS5zZWN1cml0eUxldmVsOyJzYW5kYm94Ij09PWEmJihpPSgwLGwuc2VsZWN0KSgiI2kiK2UpKTt2YXIgcz0ic2FuZGJveCI9PT1hPygwLGwuc2VsZWN0KShpLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOigwLGwuc2VsZWN0KSgiYm9keSIpLGM9InNhbmRib3giPT09YT9pLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O3RyeXtyLnBhcnNlci5wYXJzZSh0KX1jYXRjaCh0KXtvLmRlYnVnKCJQYXJzaW5nIGZhaWxlZCIpfXZhciB1PXIuZGIuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09dSYmKHU9IlREIik7Zm9yKHZhciBoLGY9WHQoKS5mbG93Y2hhcnQsZD1mLm5vZGVTcGFjaW5nfHw1MCxwPWYucmFua1NwYWNpbmd8fDUwLGc9bmV3KHlyKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6dSxub2Rlc2VwOmQscmFua3NlcDpwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLHk9ci5kYi5nZXRTdWJHcmFwaHMoKSxtPXkubGVuZ3RoLTE7bT49MDttLS0paD15W21dLHIuZGIuYWRkVmVydGV4KGguaWQsaC50aXRsZSwiZ3JvdXAiLHZvaWQgMCxoLmNsYXNzZXMpO3ZhciBiPXIuZGIuZ2V0VmVydGljZXMoKTtvLndhcm4oIkdldCB2ZXJ0aWNlcyIsYik7dmFyIHY9ci5kYi5nZXRFZGdlcygpLF89MDtmb3IoXz15Lmxlbmd0aC0xO18+PTA7Xy0tKXtoPXlbX10sKDAsbC5zZWxlY3RBbGwpKCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKHZhciB4PTA7eDxoLm5vZGVzLmxlbmd0aDt4Kyspby53YXJuKCJTZXR0aW5nIHN1YmdyYXBoIixoLm5vZGVzW3hdLHIuZGIubG9va1VwRG9tSWQoaC5ub2Rlc1t4XSksci5kYi5sb29rVXBEb21JZChoLmlkKSksZy5zZXRQYXJlbnQoci5kYi5sb29rVXBEb21JZChoLm5vZGVzW3hdKSxyLmRiLmxvb2tVcERvbUlkKGguaWQpKX1BYShiLGcsZSxzLGMsciksTWEodixnLHIpO3ZhciBrPW5ldygwLGhhKCkucmVuZGVyKTtDYShrKSxrLmFycm93cygpLm5vbmU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO2hhKCkudXRpbC5hcHBseVN0eWxlKGksbltyKyJTdHlsZSJdKX0say5hcnJvd3MoKS5ub3JtYWw9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93aGVhZFBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfTt2YXIgdz1zLnNlbGVjdCgnW2lkPSInLmNvbmNhdChlLCciXScpKTtNbihyLmRiLHcsZSk7dmFyIFQ9cy5zZWxlY3QoIiMiK2UrIiBnIik7Zm9yKGsoVCxnKSxULnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLChmdW5jdGlvbigpe3JldHVybiByLmRiLmdldFRvb2x0aXAodGhpcy5pZCl9KSksci5kYi5pbmRleE5vZGVzKCJzdWJHcmFwaCIrXyksXz0wO188eS5sZW5ndGg7XysrKWlmKCJ1bmRlZmluZWQiIT09KGg9eVtfXSkudGl0bGUpe3ZhciBFPWMucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytyLmRiLmxvb2tVcERvbUlkKGguaWQpKyciXSByZWN0JyksQz1jLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2UrJyBbaWQ9Iicrci5kYi5sb29rVXBEb21JZChoLmlkKSsnIl0nKSxTPUVbMF0ueC5iYXNlVmFsLnZhbHVlLEE9RVswXS55LmJhc2VWYWwudmFsdWUsTT1FWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsTj0oMCxsLnNlbGVjdCkoQ1swXSkuc2VsZWN0KCIubGFiZWwiKTtOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdChTK00vMiwiLCAiKS5jb25jYXQoQSsxNCwiKSIpKSxOLmF0dHIoImlkIixlKyJUZXh0Iik7Zm9yKHZhciBPPTA7TzxoLmNsYXNzZXMubGVuZ3RoO08rKylDWzBdLmNsYXNzTGlzdC5hZGQoaC5jbGFzc2VzW09dKX1jZShmLmh0bWxMYWJlbHMpO2Zvcih2YXIgRD1jLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLEI9MDtCPEQubGVuZ3RoO0IrKyl7dmFyIEw9RFtCXSxJPUwuZ2V0QkJveCgpLEY9Yy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO0Yuc2V0QXR0cmlidXRlKCJyeCIsMCksRi5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxGLnNldEF0dHJpYnV0ZSgid2lkdGgiLEkud2lkdGgpLEYuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEkuaGVpZ2h0KSxMLmluc2VydEJlZm9yZShGLEwuZmlyc3RDaGlsZCl9RW4oZyx3LGYuZGlhZ3JhbVBhZGRpbmcsZi51c2VNYXhXaWR0aCksT2JqZWN0LmtleXMoYikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49Ylt0XTtpZihuLmxpbmspe3ZhciBpPXMuc2VsZWN0KCIjIitlKycgW2lkPSInK3IuZGIubG9va1VwRG9tSWQodCkrJyJdJyk7aWYoaSl7dmFyIG89Yy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO28uc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLG8uc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxvLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksInNhbmRib3giPT09YT9vLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpuLmxpbmtUYXJnZXQmJm8uc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixuLmxpbmtUYXJnZXQpO3ZhciBsPWkuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBvfSksIjpmaXJzdC1jaGlsZCIpLHU9aS5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTt1JiZsLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gdS5ub2RlKCl9KSk7dmFyIGg9aS5zZWxlY3QoIi5sYWJlbCIpO2gmJmwuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBoLm5vZGUoKX0pKX19fSkpfX07dmFyIE9hPXt9LERhPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgcz1yLnNlbGVjdCgnW2lkPSInLmNvbmNhdChuLCciXScpKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGM9ImRlZmF1bHQiO3IuY2xhc3Nlcy5sZW5ndGg+MCYmKGM9ci5jbGFzc2VzLmpvaW4oIiAiKSk7dmFyIGwsdT1kbihyLnN0eWxlcyksaD12b2lkIDAhPT1yLnRleHQ/ci50ZXh0OnIuaWQ7aWYoY2UoWHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBmPXtsYWJlbDpoLnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsobD1kYSgpKHMsZikubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWVsc2V7dmFyIGQ9aS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2Quc2V0QXR0cmlidXRlKCJzdHlsZSIsdS5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgcD1oLnNwbGl0KHVlLmxpbmVCcmVha1JlZ2V4KSxnPTA7ZzxwLmxlbmd0aDtnKyspe3ZhciB5PWkuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7eS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSx5LnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSx5LnNldEF0dHJpYnV0ZSgieCIsIjEiKSx5LnRleHRDb250ZW50PXBbZ10sZC5hcHBlbmRDaGlsZCh5KX1sPWR9dmFyIG09MCxiPSIiO3N3aXRjaChyLnR5cGUpe2Nhc2Uicm91bmQiOm09NSxiPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6Y2FzZSJncm91cCI6ZGVmYXVsdDpiPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmI9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmI9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpjYXNlIm9kZF9yaWdodCI6Yj0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpiPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6Yj0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6Yj0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmI9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2UiY2lyY2xlIjpiPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Yj0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpiPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmI9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmI9ImN5bGluZGVyIjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6Yj0iZG91YmxlY2lyY2xlIn1lLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTp1LmxhYmVsU3R5bGUsc2hhcGU6YixsYWJlbFRleHQ6aCxyeDptLHJ5Om0sY2xhc3M6YyxzdHlsZTp1LnN0eWxlLGlkOnIuaWQsbGluazpyLmxpbmssbGlua1RhcmdldDpyLmxpbmtUYXJnZXQsdG9vbHRpcDphLmRiLmdldFRvb2x0aXAoci5pZCl8fCIiLGRvbUlkOmEuZGIubG9va1VwRG9tSWQoci5pZCksaGF2ZUNhbGxiYWNrOnIuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCxkaXI6ci5kaXIsdHlwZTpyLnR5cGUscHJvcHM6ci5wcm9wcyxwYWRkaW5nOlh0KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxvLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOnUubGFiZWxTdHlsZSxzaGFwZTpiLGxhYmVsVGV4dDpoLHJ4Om0scnk6bSxjbGFzczpjLHN0eWxlOnUuc3R5bGUsaWQ6ci5pZCxkb21JZDphLmRiLmxvb2tVcERvbUlkKHIuaWQpLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxkaXI6ci5kaXIscHJvcHM6ci5wcm9wcyxwYWRkaW5nOlh0KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0sQmE9ZnVuY3Rpb24odCxlLG4pe28uaW5mbygiYWJjNzggZWRnZXMgPSAiLHQpO3ZhciByLGksYT0wLHM9e307aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBjPWRuKHQuZGVmYXVsdFN0eWxlKTtyPWMuc3R5bGUsaT1jLmxhYmVsU3R5bGV9dC5mb3JFYWNoKChmdW5jdGlvbihuKXthKys7dmFyIGM9IkwtIituLnN0YXJ0KyItIituLmVuZDt2b2lkIDA9PT1zW2NdPyhzW2NdPTAsby5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLGMsc1tjXSkpOihzW2NdKyssby5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLGMsc1tjXSkpO3ZhciB1PWMrIi0iK3NbY107by5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixjLHUsc1tjXSk7dmFyIGg9IkxTLSIrbi5zdGFydCxmPSJMRS0iK24uZW5kLGQ9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaChkLm1pbmxlbj1uLmxlbmd0aHx8MSwiYXJyb3dfb3BlbiI9PT1uLnR5cGU/ZC5hcnJvd2hlYWQ9Im5vbmUiOmQuYXJyb3doZWFkPSJub3JtYWwiLGQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLGQuYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIixuLnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjpkLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6ZC5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6ZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOmQuYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpkLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjpkLmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIn12YXIgcD0iIixnPSIiO3N3aXRjaChuLnN0cm9rZSl7Y2FzZSJub3JtYWwiOnA9ImZpbGw6bm9uZTsiLHZvaWQgMCE9PXImJihwPXIpLHZvaWQgMCE9PWkmJihnPWkpLGQudGhpY2tuZXNzPSJub3JtYWwiLGQucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpkLnRoaWNrbmVzcz0ibm9ybWFsIixkLnBhdHRlcm49ImRvdHRlZCIsZC5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6ZC50aGlja25lc3M9InRoaWNrIixkLnBhdHRlcm49InNvbGlkIixkLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsifWlmKHZvaWQgMCE9PW4uc3R5bGUpe3ZhciB5PWRuKG4uc3R5bGUpO3A9eS5zdHlsZSxnPXkubGFiZWxTdHlsZX1kLnN0eWxlPWQuc3R5bGUrPXAsZC5sYWJlbFN0eWxlPWQubGFiZWxTdHlsZSs9Zyx2b2lkIDAhPT1uLmludGVycG9sYXRlP2QuY3VydmU9aG4obi5pbnRlcnBvbGF0ZSxsLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9kLmN1cnZlPWhuKHQuZGVmYXVsdEludGVycG9sYXRlLGwuY3VydmVMaW5lYXIpOmQuY3VydmU9aG4oT2EuY3VydmUsbC5jdXJ2ZUxpbmVhciksdm9pZCAwPT09bi50ZXh0P3ZvaWQgMCE9PW4uc3R5bGUmJihkLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGQuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGQubGFiZWxwb3M9ImMiKSxkLmxhYmVsVHlwZT0idGV4dCIsZC5sYWJlbD1uLnRleHQucmVwbGFjZSh1ZS5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1uLnN0eWxlJiYoZC5zdHlsZT1kLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxkLmxhYmVsU3R5bGU9ZC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksZC5pZD11LGQuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitoKyIgIitmLGUuc2V0RWRnZShuLnN0YXJ0LG4uZW5kLGQsYSl9KSl9O2NvbnN0IExhPXtzZXRDb25mOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspT2FbZVtuXV09dFtlW25dXX0sYWRkVmVydGljZXM6RGEsYWRkRWRnZXM6QmEsZ2V0Q2xhc3NlczpmdW5jdGlvbih0LGUpe28uaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIiksZS5kYi5jbGVhcigpO3RyeXtyZXR1cm4gZS5wYXJzZSh0KSxlLmRiLmdldENsYXNzZXMoKX1jYXRjaCh0KXtyZXR1cm59fSxkcmF3OmZ1bmN0aW9uKHQsZSxuLHIpe28uaW5mbygiRHJhd2luZyBmbG93Y2hhcnQiKSxyLmRiLmNsZWFyKCksbGEuc2V0R2VuKCJnZW4tMiIpLHIucGFyc2VyLnBhcnNlKHQpO3ZhciBpPXIuZGIuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09aSYmKGk9IlREIik7dmFyIGEscz1YdCgpLmZsb3djaGFydCxjPXMubm9kZVNwYWNpbmd8fDUwLHU9cy5yYW5rU3BhY2luZ3x8NTAsaD1YdCgpLnNlY3VyaXR5TGV2ZWw7InNhbmRib3giPT09aCYmKGE9KDAsbC5zZWxlY3QpKCIjaSIrZSkpO3ZhciBmLGQ9InNhbmRib3giPT09aD8oMCxsLnNlbGVjdCkoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTooMCxsLnNlbGVjdCkoImJvZHkiKSxwPSJzYW5kYm94Ij09PWg/YS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxnPW5ldyh5cigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmksbm9kZXNlcDpjLHJhbmtzZXA6dSxtYXJnaW54OjAsbWFyZ2lueTowfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSx5PXIuZGIuZ2V0U3ViR3JhcGhzKCk7by5pbmZvKCJTdWJncmFwaHMgLSAiLHkpO2Zvcih2YXIgbT15Lmxlbmd0aC0xO20+PTA7bS0tKWY9eVttXSxvLmluZm8oIlN1YmdyYXBoIC0gIixmKSxyLmRiLmFkZFZlcnRleChmLmlkLGYudGl0bGUsImdyb3VwIix2b2lkIDAsZi5jbGFzc2VzLGYuZGlyKTt2YXIgYj1yLmRiLmdldFZlcnRpY2VzKCksdj1yLmRiLmdldEVkZ2VzKCk7by5pbmZvKHYpO3ZhciBfPTA7Zm9yKF89eS5sZW5ndGgtMTtfPj0wO18tLSl7Zj15W19dLCgwLGwuc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeD0wO3g8Zi5ub2Rlcy5sZW5ndGg7eCsrKW8uaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGYubm9kZXNbeF0sZi5pZCksZy5zZXRQYXJlbnQoZi5ub2Rlc1t4XSxmLmlkKX1EYShiLGcsZSxkLHAsciksQmEodixnKTt2YXIgaz1kLnNlbGVjdCgnW2lkPSInLmNvbmNhdChlLCciXScpKTtNbihyLmRiLGssZSk7dmFyIHc9ZC5zZWxlY3QoIiMiK2UrIiBnIik7aWYoeWkodyxnLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGUpLEVuKGcsayxzLmRpYWdyYW1QYWRkaW5nLHMudXNlTWF4V2lkdGgpLHIuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK18pLCFzLmh0bWxMYWJlbHMpZm9yKHZhciBUPXAucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRT0wO0U8VC5sZW5ndGg7RSsrKXt2YXIgQz1UW0VdLFM9Qy5nZXRCQm94KCksQT1wLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7QS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxBLnNldEF0dHJpYnV0ZSgicnkiLDApLEEuc2V0QXR0cmlidXRlKCJ3aWR0aCIsUy53aWR0aCksQS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUy5oZWlnaHQpLEMuaW5zZXJ0QmVmb3JlKEEsQy5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1iW3RdO2lmKG4ubGluayl7dmFyIHI9KDAsbC5zZWxlY3QpKCIjIitlKycgW2lkPSInK3QrJyJdJyk7aWYocil7dmFyIGk9cC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksInNhbmRib3giPT09aD9pLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpuLmxpbmtUYXJnZXQmJmkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixuLmxpbmtUYXJnZXQpO3ZhciBhPXIuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBpfSksIjpmaXJzdC1jaGlsZCIpLG89ci5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtvJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gby5ub2RlKCl9KSk7dmFyIHM9ci5zZWxlY3QoIi5sYWJlbCIpO3MmJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBzLm5vZGUoKX0pKX19fSkpfX07dmFyIElhPW4oMzYwMiksRmE9bi5uKElhKTtmdW5jdGlvbiBSYSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBQYSxqYSx6YT0iIixZYT0iIixVYT0iIiwkYT1bXSxXYT1bXSxxYT17fSxIYT1bXSxWYT1bXSxHYT0iIixYYT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl0sWmE9W10sUWE9ITEsS2E9ITEsSmE9MCx0bz1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4hKHIuaW5kZXhPZih0LmZvcm1hdChlLnRyaW0oKSkpPj0wKSYmKHQuaXNvV2Vla2RheSgpPj02JiZuLmluZGV4T2YoIndlZWtlbmRzIik+PTB8fG4uaW5kZXhPZih0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPj0wfHxuLmluZGV4T2YodC5mb3JtYXQoZS50cmltKCkpKT49MCl9LGVvPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKG4ubGVuZ3RoJiYhdC5tYW51YWxFbmRUaW1lKXt2YXIgYT1pKCkodC5zdGFydFRpbWUsZSwhMCk7YS5hZGQoMSwiZCIpO3ZhciBvPWkoKSh0LmVuZFRpbWUsZSwhMCkscz1ubyhhLG8sZSxuLHIpO3QuZW5kVGltZT1vLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1zfX0sbm89ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIGE9ITEsbz1udWxsO3Q8PWU7KWF8fChvPWUudG9EYXRlKCkpLChhPXRvKHQsbixyLGkpKSYmZS5hZGQoMSwiZCIpLHQuYWRkKDEsImQiKTtyZXR1cm4gb30scm89ZnVuY3Rpb24odCxlLG4pe249bi50cmltKCk7dmFyIHI9L15hZnRlclxzKyhbXGRcdy0gXSspLy5leGVjKG4udHJpbSgpKTtpZihudWxsIT09cil7dmFyIGE9bnVsbDtpZihyWzFdLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dW8odCk7dm9pZCAwIT09ZSYmKGE/ZS5lbmRUaW1lPmEuZW5kVGltZSYmKGE9ZSk6YT1lKX0pKSxhKXJldHVybiBhLmVuZFRpbWU7dmFyIHM9bmV3IERhdGU7cmV0dXJuIHMuc2V0SG91cnMoMCwwLDAsMCksc312YXIgYz1pKCkobixlLnRyaW0oKSwhMCk7cmV0dXJuIGMuaXNWYWxpZCgpP2MudG9EYXRlKCk6KG8uZGVidWcoIkludmFsaWQgZGF0ZToiK24pLG8uZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IitlLnRyaW0oKSksbmV3IERhdGUpfSxpbz1mdW5jdGlvbih0LGUpe2lmKG51bGwhPT10KXN3aXRjaCh0WzJdKXtjYXNlIm1zIjplLmFkZCh0WzFdLCJtaWxsaXNlY29uZHMiKTticmVhaztjYXNlInMiOmUuYWRkKHRbMV0sInNlY29uZHMiKTticmVhaztjYXNlIm0iOmUuYWRkKHRbMV0sIm1pbnV0ZXMiKTticmVhaztjYXNlImgiOmUuYWRkKHRbMV0sImhvdXJzIik7YnJlYWs7Y2FzZSJkIjplLmFkZCh0WzFdLCJkYXlzIik7YnJlYWs7Y2FzZSJ3IjplLmFkZCh0WzFdLCJ3ZWVrcyIpfXJldHVybiBlLnRvRGF0ZSgpfSxhbz1mdW5jdGlvbih0LGUsbixyKXtyPXJ8fCExLG49bi50cmltKCk7dmFyIGE9aSgpKG4sZS50cmltKCksITApO3JldHVybiBhLmlzVmFsaWQoKT8ociYmYS5hZGQoMSwiZCIpLGEudG9EYXRlKCkpOmlvKC9eKFtcZF0rKShbd2RobXNdfG1zKSQvLmV4ZWMobi50cmltKCkpLGkoKSh0KSl9LG9vPTAsc289ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/InRhc2siKyhvbys9MSk6dH0sY289W10sbG89e30sdW89ZnVuY3Rpb24odCl7dmFyIGU9bG9bdF07cmV0dXJuIGNvW2VdfSxobz1mdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgZT1jb1t0XSxuPSIiO3N3aXRjaChjb1t0XS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOnZhciByPXVvKGUucHJldlRhc2tJZCk7ZS5zdGFydFRpbWU9ci5lbmRUaW1lO2JyZWFrO2Nhc2UiZ2V0U3RhcnREYXRlIjoobj1ybygwLHphLGNvW3RdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSkmJihjb1t0XS5zdGFydFRpbWU9bil9cmV0dXJuIGNvW3RdLnN0YXJ0VGltZSYmKGNvW3RdLmVuZFRpbWU9YW8oY29bdF0uc3RhcnRUaW1lLHphLGNvW3RdLnJhdy5lbmRUaW1lLmRhdGEsUWEpLGNvW3RdLmVuZFRpbWUmJihjb1t0XS5wcm9jZXNzZWQ9ITAsY29bdF0ubWFudWFsRW5kVGltZT1pKCkoY29bdF0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxlbyhjb1t0XSx6YSxXYSwkYSkpKSxjb1t0XS5wcm9jZXNzZWR9LGU9ITAsbj0wO248Y28ubGVuZ3RoO24rKyl0KG4pLGU9ZSYmY29bbl0ucHJvY2Vzc2VkO3JldHVybiBlfSxmbz1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj11byh0KTt2b2lkIDAhPT1uJiZuLmNsYXNzZXMucHVzaChlKX0pKX0scG89ZnVuY3Rpb24odCxlKXtaYS5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKSxaYS5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnLXRleHQiXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpfTtjb25zdCBnbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gWHQoKS5nYW50dH0sY2xlYXI6ZnVuY3Rpb24oKXtIYT1bXSxWYT1bXSxHYT0iIixaYT1bXSxvbz0wLFBhPXZvaWQgMCxqYT12b2lkIDAsY289W10semE9IiIsWWE9IiIsVWE9IiIsJGE9W10sV2E9W10sUWE9ITEsS2E9ITEsSmE9MCxxYT17fSxnZSgpfSxzZXREYXRlRm9ybWF0OmZ1bmN0aW9uKHQpe3phPXR9LGdldERhdGVGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gemF9LGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmZ1bmN0aW9uKCl7UWE9ITB9LGVuZERhdGVzQXJlSW5jbHVzaXZlOmZ1bmN0aW9uKCl7cmV0dXJuIFFhfSxlbmFibGVUb3BBeGlzOmZ1bmN0aW9uKCl7S2E9ITB9LHRvcEF4aXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIEthfSxzZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKHQpe1lhPXR9LGdldEF4aXNGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWWF9LHNldFRvZGF5TWFya2VyOmZ1bmN0aW9uKHQpe1VhPXR9LGdldFRvZGF5TWFya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIFVhfSxzZXRBY2NUaXRsZTp5ZSxnZXRBY2NUaXRsZTptZSxzZXREaWFncmFtVGl0bGU6X2UsZ2V0RGlhZ3JhbVRpdGxlOnhlLHNldEFjY0Rlc2NyaXB0aW9uOmJlLGdldEFjY0Rlc2NyaXB0aW9uOnZlLGFkZFNlY3Rpb246ZnVuY3Rpb24odCl7R2E9dCxIYS5wdXNoKHQpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBIYX0sZ2V0VGFza3M6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9aG8oKSxlPTA7IXQmJmU8MTA7KXQ9aG8oKSxlKys7cmV0dXJuIFZhPWNvfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246R2EsdHlwZTpHYSxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O3lvKG4scixYYSk7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPXNvKCksci5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDp0fSxyLmVuZFRpbWU9e2RhdGE6blswXX07YnJlYWs7Y2FzZSAyOnIuaWQ9c28oKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blswXX0sci5lbmRUaW1lPXtkYXRhOm5bMV19O2JyZWFrO2Nhc2UgMzpyLmlkPXNvKG5bMF0pLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzFdfSxyLmVuZFRpbWU9e2RhdGE6blsyXX19cmV0dXJuIHJ9KGphLGUpO24ucmF3LnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLnJhdy5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5wcmV2VGFza0lkPWphLG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxuLm9yZGVyPUphLEphKys7dmFyIGk9Y28ucHVzaChuKTtqYT1uLmlkLGxvW24uaWRdPWktMX0sZmluZFRhc2tCeUlkOnVvLGFkZFRhc2tPcmc6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpHYSx0eXBlOkdhLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307eW8obixyLFhhKTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3ZhciBvPSIiO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9c28oKSxyLnN0YXJ0VGltZT10LmVuZFRpbWUsbz1uWzBdO2JyZWFrO2Nhc2UgMjpyLmlkPXNvKCksci5zdGFydFRpbWU9cm8oMCx6YSxuWzBdKSxvPW5bMV07YnJlYWs7Y2FzZSAzOnIuaWQ9c28oblswXSksci5zdGFydFRpbWU9cm8oMCx6YSxuWzFdKSxvPW5bMl19cmV0dXJuIG8mJihyLmVuZFRpbWU9YW8oci5zdGFydFRpbWUsemEsbyxRYSksci5tYW51YWxFbmRUaW1lPWkoKShvLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLGVvKHIsemEsV2EsJGEpKSxyfShQYSxlKTtuLnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsUGE9bixWYS5wdXNoKG4pfSxzZXRJbmNsdWRlczpmdW5jdGlvbih0KXskYT10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxnZXRJbmNsdWRlczpmdW5jdGlvbigpe3JldHVybiAkYX0sc2V0RXhjbHVkZXM6ZnVuY3Rpb24odCl7V2E9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZ2V0RXhjbHVkZXM6ZnVuY3Rpb24oKXtyZXR1cm4gV2F9LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe2lmKCJsb29zZSI9PT1YdCgpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciByPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7cj1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLnRyaW0oKTsnIic9PT1hLmNoYXJBdCgwKSYmJyInPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJihhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLHJbaV09YX19MD09PXIubGVuZ3RoJiZyLnB1c2godCksdm9pZCAwIT09dW8odCkmJnBvKHQsKGZ1bmN0aW9uKCl7dmFyIHQ7QW4ucnVuRnVuYy5hcHBseShBbixbZV0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIFJhKHQpfSh0PXIpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gUmEodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9SYSh0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSl9KSl9fSh0LGUsbil9KSksZm8odCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1YdCgpLnNlY3VyaXR5TGV2ZWwmJihuPSgwLGplLk4pKGUpKSx0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dW8odCkmJihwbyh0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSkscWFbdF09bil9KSksZm8odCwiY2xpY2thYmxlIil9LGdldExpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHFhfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe1phLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGR1cmF0aW9uVG9EYXRlOmlvLGlzSW52YWxpZERhdGU6dG99O2Z1bmN0aW9uIHlvKHQsZSxuKXtmb3IodmFyIHI9ITA7cjspcj0hMSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW5ldyBSZWdFeHAoIl5cXHMqIituKyJcXHMqJCIpO3RbMF0ubWF0Y2goaSkmJihlW25dPSEwLHQuc2hpZnQoMSkscj0hMCl9KSl9dmFyIG1vO2NvbnN0IGJvPXtzZXRDb25mOmZ1bmN0aW9uKCl7by5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSxkcmF3OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBhLG89WHQoKS5nYW50dCxzPVh0KCkuc2VjdXJpdHlMZXZlbDsic2FuZGJveCI9PT1zJiYoYT0oMCxsLnNlbGVjdCkoIiNpIitlKSk7dmFyIGM9InNhbmRib3giPT09cz8oMCxsLnNlbGVjdCkoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTooMCxsLnNlbGVjdCkoImJvZHkiKSx1PSJzYW5kYm94Ij09PXM/YS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxoPXUuZ2V0RWxlbWVudEJ5SWQoZSk7dm9pZCAwPT09KG1vPWgucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCkmJihtbz0xMjAwKSx2b2lkIDAhPT1vLnVzZVdpZHRoJiYobW89by51c2VXaWR0aCk7dmFyIGY9ci5kYi5nZXRUYXNrcygpLGQ9Zi5sZW5ndGgqKG8uYmFySGVpZ2h0K28uYmFyR2FwKSsyKm8udG9wUGFkZGluZztoLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK21vKyIgIitkKTtmb3IodmFyIHA9Yy5zZWxlY3QoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksZz0oMCxsLnNjYWxlVGltZSkoKS5kb21haW4oWygwLGwubWluKShmLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGFydFRpbWV9KSksKDAsbC5tYXgpKGYsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLG1vLW8ubGVmdFBhZGRpbmctby5yaWdodFBhZGRpbmddKSx5PVtdLG09MDttPGYubGVuZ3RoO20rKyl5LnB1c2goZlttXS50eXBlKTt2YXIgYj15O3k9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0W3JdKXx8KGVbdFtyXV09ITAsbi5wdXNoKHRbcl0pKTtyZXR1cm4gbn0oeSksZi5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciBuPXQuc3RhcnRUaW1lLHI9ZS5zdGFydFRpbWUsaT0wO3JldHVybiBuPnI/aT0xOm48ciYmKGk9LTEpLGl9KSksZnVuY3Rpb24odCxuLGEpe3ZhciBzPW8uYmFySGVpZ2h0LGM9cytvLmJhckdhcCxoPW8udG9wUGFkZGluZyxmPW8ubGVmdFBhZGRpbmc7KDAsbC5zY2FsZUxpbmVhcikoKS5kb21haW4oWzAseS5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKGwuaW50ZXJwb2xhdGVIY2wpLGZ1bmN0aW9uKHQsZSxuLGEscyxjLGwsdSl7dmFyIGg9Yy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdGFydFRpbWU7cmV0dXJuIHQ/TWF0aC5taW4odCxuKTpufSksMCksZj1jLnJlZHVjZSgoZnVuY3Rpb24odCxlKXt2YXIgbj1lLmVuZFRpbWU7cmV0dXJuIHQ/TWF0aC5tYXgodCxuKTpufSksMCksZD1yLmRiLmdldERhdGVGb3JtYXQoKTtpZihoJiZmKXtmb3IodmFyIHk9W10sbT1udWxsLGI9aSgpKGgpO2IudmFsdWVPZigpPD1mOylyLmRiLmlzSW52YWxpZERhdGUoYixkLGwsdSk/bT9tLmVuZD1iLmNsb25lKCk6bT17c3RhcnQ6Yi5jbG9uZSgpLGVuZDpiLmNsb25lKCl9Om0mJih5LnB1c2gobSksbT1udWxsKSxiLmFkZCgxLCJkIik7cC5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHkpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4iZXhjbHVkZS0iK3Quc3RhcnQuZm9ybWF0KCJZWVlZLU1NLUREIil9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQuc3RhcnQpK259KSkuYXR0cigieSIsby5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXt2YXIgZT10LmVuZC5jbG9uZSgpLmFkZCgxLCJkYXkiKTtyZXR1cm4gZyhlKS1nKHQuc3RhcnQpfSkpLmF0dHIoImhlaWdodCIscy1lLW8uZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLChmdW5jdGlvbihlLHIpe3JldHVybihnKGUuc3RhcnQpK24rLjUqKGcoZS5lbmQpLWcoZS5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhyKnQrLjUqcykudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfX0oYyxoLGYsMCxhLHQsci5kYi5nZXRFeGNsdWRlcygpLHIuZGIuZ2V0SW5jbHVkZXMoKSksZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9KDAsbC5heGlzQm90dG9tKShnKS50aWNrU2l6ZSgtaStlK28uZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoKDAsbC50aW1lRm9ybWF0KShyLmRiLmdldEF4aXNGb3JtYXQoKXx8by5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYocC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKGktNTApKyIpIikuY2FsbChhKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHIuZGIudG9wQXhpc0VuYWJsZWQoKXx8by50b3BBeGlzKXt2YXIgcz0oMCxsLmF4aXNUb3ApKGcpLnRpY2tTaXplKC1pK2Urby5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdCgoMCxsLnRpbWVGb3JtYXQpKHIuZGIuZ2V0QXhpc0Zvcm1hdCgpfHxvLmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtwLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QrIiwgIitlKyIpIikuY2FsbChzKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKX19KGYsaCwwLGEpLGZ1bmN0aW9uKHQsbixpLGEscyxjLHUpe3AuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm9yZGVyKm4raS0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS1vLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsbikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHkubGVuZ3RoO2UrKylpZih0LnR5cGU9PT15W2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulby5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgaD1wLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKSxmPXIuZGIuZ2V0TGlua3MoKTtpZihoLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP2codC5zdGFydFRpbWUpK2ErLjUqKGcodC5lbmRUaW1lKS1nKHQuc3RhcnRUaW1lKSktLjUqczpnKHQuc3RhcnRUaW1lKSthfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm9yZGVyKm4raX0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9zOmcodC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLWcodC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIscykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9dC5vcmRlciwoZyh0LnN0YXJ0VGltZSkrYSsuNSooZyh0LmVuZFRpbWUpLWcodC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoZSpuK2krLjUqcykudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIG49MCxyPTA7cjx5Lmxlbmd0aDtyKyspdC50eXBlPT09eVtyXSYmKG49ciVvLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBpPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/aSs9IiBhY3RpdmVDcml0IjppPSIgYWN0aXZlIjp0LmRvbmU/aT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihpKz0iIGNyaXQiKSwwPT09aS5sZW5ndGgmJihpPSIgdGFzayIpLHQubWlsZXN0b25lJiYoaT0iIG1pbGVzdG9uZSAiK2kpLCJ0YXNrIisoaSs9bikrIiAiK2V9KSksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG8uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1nKHQuc3RhcnRUaW1lKSxuPWcodC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKGcodC5lbmRUaW1lKS1nKHQuc3RhcnRUaW1lKSktLjUqcyksdC5taWxlc3RvbmUmJihuPWUrcyk7dmFyIHI9dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIHI+bi1lP24rcisxLjUqby5sZWZ0UGFkZGluZz51P2UrYS01Om4rYSs1OihuLWUpLzIrZSthfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm9yZGVyKm4rby5iYXJIZWlnaHQvMisoby5mb250U2l6ZS8yLTIpK2l9KSkuYXR0cigidGV4dC1oZWlnaHQiLHMpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9Zyh0LnN0YXJ0VGltZSksbj1nKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihuPWUrcyk7dmFyIHI9dGhpcy5nZXRCQm94KCkud2lkdGgsaT0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihpPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgYT0wLGM9MDtjPHkubGVuZ3RoO2MrKyl0LnR5cGU9PT15W2NdJiYoYT1jJW8ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGw9IiI7cmV0dXJuIHQuYWN0aXZlJiYobD10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0IithOiJhY3RpdmVUZXh0IithKSx0LmRvbmU/bD10LmNyaXQ/bCsiIGRvbmVDcml0VGV4dCIrYTpsKyIgZG9uZVRleHQiK2E6dC5jcml0JiYobD1sKyIgY3JpdFRleHQiK2EpLHQubWlsZXN0b25lJiYobCs9IiBtaWxlc3RvbmVUZXh0Iikscj5uLWU/bityKzEuNSpvLmxlZnRQYWRkaW5nPnU/aSsiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIithKyIgIitsOmkrIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK2ErIiAiK2wrIiB3aWR0aC0iK3I6aSsiIHRhc2tUZXh0IHRhc2tUZXh0IithKyIgIitsKyIgd2lkdGgtIityfSkpLCJzYW5kYm94Ij09PVh0KCkuc2VjdXJpdHlMZXZlbCl7dmFyIGQ7ZD0oMCxsLnNlbGVjdCkoIiNpIitlKSwoMCxsLnNlbGVjdCkoZC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTt2YXIgbT1kLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O2guZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09Zlt0LmlkXX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1tLnF1ZXJ5U2VsZWN0b3IoIiMiK3QuaWQpLG49bS5xdWVyeVNlbGVjdG9yKCIjIit0LmlkKyItdGV4dCIpLHI9ZS5wYXJlbnROb2RlLGk9bS5jcmVhdGVFbGVtZW50KCJhIik7aS5zZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiLGZbdC5pZF0pLGkuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksci5hcHBlbmRDaGlsZChpKSxpLmFwcGVuZENoaWxkKGUpLGkuYXBwZW5kQ2hpbGQobil9KSl9fSh0LGMsaCxmLHMsMCxuKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxyPTAsaT0wO2k8eS5sZW5ndGg7aSsrKW5baV09W3lbaV0sKGE9eVtpXSxzPWIsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufShzKVthXXx8MCldO3ZhciBhLHM7cC5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKG4pLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KHVlLmxpbmVCcmVha1JlZ2V4KSxuPS0oZS5sZW5ndGgtMSkvMixyPXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyLnNldEF0dHJpYnV0ZSgiZHkiLG4rImVtIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7YS5zZXRBdHRyaWJ1dGUoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxhLnNldEF0dHJpYnV0ZSgieCIsIjEwIiksaT4wJiZhLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxhLnRleHRDb250ZW50PWVbaV0sci5hcHBlbmRDaGlsZChhKX1yZXR1cm4gcn0pKS5hdHRyKCJ4IiwxMCkuYXR0cigieSIsKGZ1bmN0aW9uKGksYSl7aWYoIShhPjApKXJldHVybiBpWzFdKnQvMitlO2Zvcih2YXIgbz0wO288YTtvKyspcmV0dXJuIHIrPW5bYS0xXVsxXSxpWzFdKnQvMityKnQrZX0pKS5hdHRyKCJmb250LXNpemUiLG8uc2VjdGlvbkZvbnRTaXplKS5hdHRyKCJmb250LXNpemUiLG8uc2VjdGlvbkZvbnRTaXplKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8eS5sZW5ndGg7ZSsrKWlmKHRbMF09PT15W2VdKXJldHVybiJzZWN0aW9uVGl0bGUgc2VjdGlvblRpdGxlIitlJW8ubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvblRpdGxlIn0pKX0oYyxoKSxmdW5jdGlvbih0LGUsbixpKXt2YXIgYT1yLmRiLmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiIhPT1hKXt2YXIgcz1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSxjPW5ldyBEYXRlLGw9cy5hcHBlbmQoImxpbmUiKTtsLmF0dHIoIngxIixnKGMpK3QpLmF0dHIoIngyIixnKGMpK3QpLmF0dHIoInkxIixvLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsaS1vLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksIiIhPT1hJiZsLmF0dHIoInN0eWxlIixhLnJlcGxhY2UoLywvZywiOyIpKX19KGYsMCwwLGEpfShmLG1vLGQpLFRuKHAsMCxtbyxvLnVzZU1heFdpZHRoKSxwLmFwcGVuZCgidGV4dCIpLnRleHQoci5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsbW8vMikuYXR0cigieSIsby50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKSxNbihyLmRiLHAsZSl9fTt2YXIgdm89big5OTU5KSxfbz1uLm4odm8pLHhvPSIiLGtvPSExO2NvbnN0IHdvPXtzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe28uZGVidWcoIlNldHRpbmcgbWVzc2FnZSB0bzogIit0KSx4bz10fSxnZXRNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHhvfSxzZXRJbmZvOmZ1bmN0aW9uKHQpe2tvPXR9LGdldEluZm86ZnVuY3Rpb24oKXtyZXR1cm4ga299fSxUbz17ZHJhdzpmdW5jdGlvbih0LGUsbixyKXt0cnl7by5kZWJ1ZygiUmVuZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpO3ZhciBpLGE9WHQoKS5zZWN1cml0eUxldmVsOyJzYW5kYm94Ij09PWEmJihpPSgwLGwuc2VsZWN0KSgiI2kiK2UpKTt2YXIgcz0ic2FuZGJveCI9PT1hPygwLGwuc2VsZWN0KShpLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOigwLGwuc2VsZWN0KSgiYm9keSIpLGM9KCJzYW5kYm94Ij09PWE/aS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxzLnNlbGVjdCgiIyIrZSkpO2MuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwiMzJweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoInYgIituKSxjLmF0dHIoImhlaWdodCIsMTAwKSxjLmF0dHIoIndpZHRoIiw0MDApfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fX07dmFyIEVvPW4oNjc2NSksQ289bi5uKEVvKSxTbz1uKDcwNjIpLEFvPW4ubihTbyksTW89e30sTm89ITE7Y29uc3QgT289e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtjdS5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIFh0KCkucGllfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQsZSl7dD11ZS5zYW5pdGl6ZVRleHQodCxYdCgpKSx2b2lkIDA9PT1Nb1t0XSYmKE1vW3RdPWUsby5kZWJ1ZygiQWRkZWQgbmV3IHNlY3Rpb24gOiIsdCkpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBNb30sY2xlYW51cFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/KHQ9dC5zdWJzdHJpbmcoMSkudHJpbSgpLE51bWJlcih0LnRyaW0oKSkpOk51bWJlcih0LnRyaW0oKSl9LGNsZWFyOmZ1bmN0aW9uKCl7TW89e30sTm89ITEsZ2UoKX0sc2V0QWNjVGl0bGU6eWUsZ2V0QWNjVGl0bGU6bWUsc2V0RGlhZ3JhbVRpdGxlOl9lLGdldERpYWdyYW1UaXRsZTp4ZSxzZXRTaG93RGF0YTpmdW5jdGlvbih0KXtObz10fSxnZXRTaG93RGF0YTpmdW5jdGlvbigpe3JldHVybiBOb30sZ2V0QWNjRGVzY3JpcHRpb246dmUsc2V0QWNjRGVzY3JpcHRpb246YmV9O3ZhciBEbyxCbz1YdCgpO2NvbnN0IExvPXtkcmF3OmZ1bmN0aW9uKHQsZSxuLHIpe3RyeXtCbz1YdCgpLG8uZGVidWcoIlJlbmRlcmluZyBpbmZvIGRpYWdyYW1cbiIrdCk7dmFyIGksYT1YdCgpLnNlY3VyaXR5TGV2ZWw7InNhbmRib3giPT09YSYmKGk9KDAsbC5zZWxlY3QpKCIjaSIrZSkpO3ZhciBzPSJzYW5kYm94Ij09PWE/KDAsbC5zZWxlY3QpKGkubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6KDAsbC5zZWxlY3QpKCJib2R5IiksYz0ic2FuZGJveCI9PT1hP2kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7ci5kYi5jbGVhcigpLHIucGFyc2VyLnBhcnNlKHQpLG8uZGVidWcoIlBhcnNlZCBpbmZvIGRpYWdyYW0iKTt2YXIgdT1jLmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PShEbz11LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYoRG89MTIwMCksdm9pZCAwIT09Qm8udXNlV2lkdGgmJihEbz1Cby51c2VXaWR0aCksdm9pZCAwIT09Qm8ucGllLnVzZVdpZHRoJiYoRG89Qm8ucGllLnVzZVdpZHRoKTt2YXIgaD1zLnNlbGVjdCgiIyIrZSk7VG4oaCwwLERvLEJvLnBpZS51c2VNYXhXaWR0aCksTW4oci5kYixoLGUpLHUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrRG8rIiA0NTAiKTt2YXIgZj1NYXRoLm1pbihEbyw0NTApLzItNDAsZD1oLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0RvLzIrIiwyMjUpIikscD1yLmRiLmdldFNlY3Rpb25zKCksZz0wO09iamVjdC5rZXlzKHApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2crPXBbdF19KSk7dmFyIHk9Qm8udGhlbWVWYXJpYWJsZXMsbT1beS5waWUxLHkucGllMix5LnBpZTMseS5waWU0LHkucGllNSx5LnBpZTYseS5waWU3LHkucGllOCx5LnBpZTkseS5waWUxMCx5LnBpZTExLHkucGllMTJdLGI9KDAsbC5zY2FsZU9yZGluYWwpKCkucmFuZ2UobSksdj0oMCxsLnBpZSkoKS52YWx1ZSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkoT2JqZWN0LmVudHJpZXMocCkpLF89KDAsbC5hcmMpKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoZik7ZC5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh2KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLF8pLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gYih0LmRhdGFbMF0pfSkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIiksZC5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh2KS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybih0LmRhdGFbMV0vZyoxMDApLnRvRml4ZWQoMCkrIiUifSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitfLmNlbnRyb2lkKHQpKyIpIn0pKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNsaWNlIiksZC5hcHBlbmQoInRleHQiKS50ZXh0KHIuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLmF0dHIoIngiLDApLmF0dHIoInkiLC0yMDApLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7dmFyIHg9ZC5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKGIuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoMjE2LCIrKDIyKmUtMjIqYi5kb21haW4oKS5sZW5ndGgvMikrIikifSkpO3guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDE4KS5hdHRyKCJoZWlnaHQiLDE4KS5zdHlsZSgiZmlsbCIsYikuc3R5bGUoInN0cm9rZSIsYikseC5kYXRhKHYpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyKS5hdHRyKCJ5IiwxNCkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHIuZGIuZ2V0U2hvd0RhdGEoKXx8Qm8uc2hvd0RhdGF8fEJvLnBpZS5zaG93RGF0YT90LmRhdGFbMF0rIiBbIit0LmRhdGFbMV0rIl0iOnQuZGF0YVswXX0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksby5lcnJvcih0KX19fTt2YXIgSW89bigzMTc2KSxGbz1uLm4oSW8pLFJvPVtdLFBvPXt9LGpvPXt9LHpvPXt9LFlvPXt9O2NvbnN0IFVvPXtSZXF1aXJlbWVudFR5cGU6e1JFUVVJUkVNRU5UOiJSZXF1aXJlbWVudCIsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDoiRnVuY3Rpb25hbCBSZXF1aXJlbWVudCIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOiJJbnRlcmZhY2UgUmVxdWlyZW1lbnQiLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOiJQZXJmb3JtYW5jZSBSZXF1aXJlbWVudCIsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6IlBoeXNpY2FsIFJlcXVpcmVtZW50IixERVNJR05fQ09OU1RSQUlOVDoiRGVzaWduIENvbnN0cmFpbnQifSxSaXNrTGV2ZWw6e0xPV19SSVNLOiJMb3ciLE1FRF9SSVNLOiJNZWRpdW0iLEhJR0hfUklTSzoiSGlnaCJ9LFZlcmlmeVR5cGU6e1ZFUklGWV9BTkFMWVNJUzoiQW5hbHlzaXMiLFZFUklGWV9ERU1PTlNUUkFUSU9OOiJEZW1vbnN0cmF0aW9uIixWRVJJRllfSU5TUEVDVElPTjoiSW5zcGVjdGlvbiIsVkVSSUZZX1RFU1Q6IlRlc3QifSxSZWxhdGlvbnNoaXBzOntDT05UQUlOUzoiY29udGFpbnMiLENPUElFUzoiY29waWVzIixERVJJVkVTOiJkZXJpdmVzIixTQVRJU0ZJRVM6InNhdGlzZmllcyIsVkVSSUZJRVM6InZlcmlmaWVzIixSRUZJTkVTOiJyZWZpbmVzIixUUkFDRVM6InRyYWNlcyJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtjdS5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIFh0KCkucmVxfSxhZGRSZXF1aXJlbWVudDpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1qb1t0XSYmKGpvW3RdPXtuYW1lOnQsdHlwZTplLGlkOlBvLmlkLHRleHQ6UG8udGV4dCxyaXNrOlBvLnJpc2ssdmVyaWZ5TWV0aG9kOlBvLnZlcmlmeU1ldGhvZH0pLFBvPXt9LGpvW3RdfSxnZXRSZXF1aXJlbWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gam99LHNldE5ld1JlcUlkOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PVBvJiYoUG8uaWQ9dCl9LHNldE5ld1JlcVRleHQ6ZnVuY3Rpb24odCl7dm9pZCAwIT09UG8mJihQby50ZXh0PXQpfSxzZXROZXdSZXFSaXNrOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PVBvJiYoUG8ucmlzaz10KX0sc2V0TmV3UmVxVmVyaWZ5TWV0aG9kOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PVBvJiYoUG8udmVyaWZ5TWV0aG9kPXQpfSxzZXRBY2NUaXRsZTp5ZSxnZXRBY2NUaXRsZTptZSxzZXRBY2NEZXNjcmlwdGlvbjpiZSxnZXRBY2NEZXNjcmlwdGlvbjp2ZSxhZGRFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1Zb1t0XSYmKFlvW3RdPXtuYW1lOnQsdHlwZTp6by50eXBlLGRvY1JlZjp6by5kb2NSZWZ9LG8uaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHQpKSx6bz17fSxZb1t0XX0sZ2V0RWxlbWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gWW99LHNldE5ld0VsZW1lbnRUeXBlOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXpvJiYoem8udHlwZT10KX0sc2V0TmV3RWxlbWVudERvY1JlZjpmdW5jdGlvbih0KXt2b2lkIDAhPT16byYmKHpvLmRvY1JlZj10KX0sYWRkUmVsYXRpb25zaGlwOmZ1bmN0aW9uKHQsZSxuKXtSby5wdXNoKHt0eXBlOnQsc3JjOmUsZHN0Om59KX0sZ2V0UmVsYXRpb25zaGlwczpmdW5jdGlvbigpe3JldHVybiBSb30sY2xlYXI6ZnVuY3Rpb24oKXtSbz1bXSxQbz17fSxqbz17fSx6bz17fSxZbz17fSxnZSgpfX07dmFyICRvPXtDT05UQUlOUzoiY29udGFpbnMiLEFSUk9XOiJhcnJvdyJ9O2NvbnN0IFdvPSRvO3ZhciBxbz17fSxIbz0wLFZvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiIyIrZSkuYXR0cigiY2xhc3MiLCJyZXEgcmVxQm94IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHFvLnJlY3RfbWluX3dpZHRoKyJweCIpLmF0dHIoImhlaWdodCIscW8ucmVjdF9taW5faGVpZ2h0KyJweCIpfSxHbz1mdW5jdGlvbih0LGUsbil7dmFyIHI9cW8ucmVjdF9taW5fd2lkdGgvMixpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIscikuYXR0cigieSIscW8ucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXswPT1hP2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIscW8ucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQodCk6aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4Iixxby5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsLjc1KnFvLmxpbmVfaGVpZ2h0KS50ZXh0KHQpLGErK30pKTt2YXIgbz0xLjUqcW8ucmVjdF9wYWRkaW5nK2EqcW8ubGluZV9oZWlnaHQqLjc1O3JldHVybiB0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIscW8ucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixvKS5hdHRyKCJ5MiIsbykse3RpdGxlTm9kZTppLHk6b319LFhvPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIscW8ucmVjdF9wYWRkaW5nKS5hdHRyKCJ5IixyKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTAsbz1bXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZT4zMCYmYTwzOyl7dmFyIG49dC5zdWJzdHJpbmcoMCwzMCk7ZT0odD10LnN1YnN0cmluZygzMCx0Lmxlbmd0aCkpLmxlbmd0aCxvW28ubGVuZ3RoXT1uLGErK31pZigzPT1hKXt2YXIgcj1vW28ubGVuZ3RoLTFdO29bby5sZW5ndGgtMV09ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC00KSsiLi4uIn1lbHNlIG9bby5sZW5ndGhdPXQ7YT0wfSkpLG8uZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscW8ucmVjdF9wYWRkaW5nKS5hdHRyKCJkeSIscW8ubGluZV9oZWlnaHQpLnRleHQodCl9KSksaX0sWm89ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpfTtjb25zdCBRbz17ZHJhdzpmdW5jdGlvbih0LGUsbixyKXtxbz1YdCgpLnJlcXVpcmVtZW50LHIuZGIuY2xlYXIoKSxyLnBhcnNlci5wYXJzZSh0KTt2YXIgaSxhPXFvLnNlY3VyaXR5TGV2ZWw7InNhbmRib3giPT09YSYmKGk9KDAsbC5zZWxlY3QpKCIjaSIrZSkpO3ZhciBzPSJzYW5kYm94Ij09PWE/KDAsbC5zZWxlY3QpKGkubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6KDAsbC5zZWxlY3QpKCJib2R5IiksYz0oInNhbmRib3giPT09YT9pLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LHMuc2VsZWN0KCJbaWQ9JyIuY29uY2F0KGUsIiddIikpKTshZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCRvLkNPTlRBSU5TKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIm1hcmtlcldpZHRoIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGUubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImciKTtuLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUubGluZV9oZWlnaHQvMikuYXR0cigiY3kiLGUubGluZV9oZWlnaHQvMikuYXR0cigiciIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJ5MSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJ5MiIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLG4uYXBwZW5kKCJsaW5lIikuYXR0cigieTEiLDApLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJ4MSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJ4MiIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsJG8uQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLGUubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KmUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGUubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFxuICAgICAgTCIuY29uY2F0KGUubGluZV9oZWlnaHQsIiwiKS5jb25jYXQoZS5saW5lX2hlaWdodC8yLCJcbiAgICAgIE0iKS5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTDAsIikuY29uY2F0KGUubGluZV9oZWlnaHQpKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfShjLHFvKTt2YXIgdSxoLGYsZD1uZXcoeXIoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjpxby5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxwPXIuZGIuZ2V0UmVxdWlyZW1lbnRzKCksZz1yLmRiLmdldEVsZW1lbnRzKCkseT1yLmRiLmdldFJlbGF0aW9uc2hpcHMoKTt1PXAsaD1kLGY9YyxPYmplY3Qua2V5cyh1KS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT11W3RdO3Q9Wm8odCksby5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsdCk7dmFyIG49Zi5hcHBlbmQoImciKS5hdHRyKCJpZCIsdCkscj1WbyhuLCJyZXEtIit0KSxpPVtdLGE9R28obix0KyJfdGl0bGUiLFsiPDwiLmNvbmNhdChlLnR5cGUsIj4+IiksIiIuY29uY2F0KGUubmFtZSldKTtpLnB1c2goYS50aXRsZU5vZGUpO3ZhciBzPVhvKG4sdCsiX2JvZHkiLFsiSWQ6ICIuY29uY2F0KGUuaWQpLCJUZXh0OiAiLmNvbmNhdChlLnRleHQpLCJSaXNrOiAiLmNvbmNhdChlLnJpc2spLCJWZXJpZmljYXRpb246ICIuY29uY2F0KGUudmVyaWZ5TWV0aG9kKV0sYS55KTtpLnB1c2gocyk7dmFyIGM9ci5ub2RlKCkuZ2V0QkJveCgpO2guc2V0Tm9kZSh0LHt3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6dH0pfSkpLGZ1bmN0aW9uKHQsZSxuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT10W3JdLGE9Wm8ociksbz1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixhKSxzPSJlbGVtZW50LSIrYSxjPVZvKG8scyksbD1bXSx1PUdvKG8scysiX3RpdGxlIixbIjw8RWxlbWVudD4+IiwiIi5jb25jYXQocildKTtsLnB1c2godS50aXRsZU5vZGUpO3ZhciBoPVhvKG8scysiX2JvZHkiLFsiVHlwZTogIi5jb25jYXQoaS50eXBlfHwiTm90IFNwZWNpZmllZCIpLCJEb2MgUmVmOiAiLmNvbmNhdChpLmRvY1JlZnx8Ik5vbmUiKV0sdS55KTtsLnB1c2goaCk7dmFyIGY9Yy5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShhLHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6YX0pfSkpfShnLGQsYyksZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVpvKHQuc3JjKSxyPVpvKHQuZHN0KTtlLnNldEVkZ2UobixyLHtyZWxhdGlvbnNoaXA6dH0pfSkpfSh5LGQpLHByKCkubGF5b3V0KGQpLGZ1bmN0aW9uKHQsZSl7ZS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZvaWQgMCE9PW4mJnZvaWQgMCE9PWUubm9kZShuKSYmKHQuc2VsZWN0KCIjIituKSx0LnNlbGVjdCgiIyIrbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShuKS54LWUubm9kZShuKS53aWR0aC8yKSsiLCIrKGUubm9kZShuKS55LWUubm9kZShuKS5oZWlnaHQvMikrIiApIikpfSkpfShjLGQpLHkuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9bi5lZGdlKFpvKGUuc3JjKSxabyhlLmRzdCkpLG89KDAsbC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKSxzPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsbyhhLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1pLmRiLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM/cy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1ZS5nZXRVcmwocW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihzLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3Iikscy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdWUuZ2V0VXJsKHFvLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIitXby5BUlJPVysiX2xpbmVfZW5kaW5nKSIpKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1lLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGE9ZS5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCguNSppKSxvPSJyZWwiK0hvO0hvKys7dmFyIHM9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixvKS5hdHRyKCJ4IixhLngpLmF0dHIoInkiLGEueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQocikubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsYS54LXMud2lkdGgvMikuYXR0cigieSIsYS55LXMuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0odCxzLDAsIjw8Ii5jb25jYXQoZS50eXBlLCI+PiIpKX0oYyx0LGQsZSxyKX0pKTt2YXIgbT1xby5yZWN0X3BhZGRpbmcsYj1jLm5vZGUoKS5nZXRCQm94KCksdj1iLndpZHRoKzIqbSxfPWIuaGVpZ2h0KzIqbTtUbihjLDAsdixxby51c2VNYXhXaWR0aCksYy5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYi54LW0sIiAiKS5jb25jYXQoYi55LW0sIiAiKS5jb25jYXQodiwiICIpLmNvbmNhdChfKSksTW4oci5kYixjLGUpfX07dmFyIEtvLEpvPW4oNjg3NiksdHM9bi5uKEpvKSxlcz12b2lkIDAsbnM9e30scnM9W10saXM9W10sYXM9ITEsb3M9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bnNbdF07aSYmZT09PWkubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGwsdHlwZTpyfSksbnVsbCE9ciYmbnVsbCE9bi50ZXh0fHwobj17dGV4dDplLHdyYXA6bnVsbCx0eXBlOnJ9KSxuc1t0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdXMoKXx8ISFuLndyYXAscHJldkFjdG9yOmVzLGxpbmtzOnt9LHByb3BlcnRpZXM6e30sYWN0b3JDbnQ6bnVsbCxyZWN0RGF0YTpudWxsLHR5cGU6cnx8InBhcnRpY2lwYW50In0sZXMmJm5zW2VzXSYmKG5zW2VzXS5uZXh0QWN0b3I9dCksZXM9dCl9LHNzPWZ1bmN0aW9uKHQpe3ZhciBlLG49MDtmb3IoZT0wO2U8cnMubGVuZ3RoO2UrKylyc1tlXS50eXBlPT09aHMuQUNUSVZFX1NUQVJUJiZyc1tlXS5mcm9tLmFjdG9yPT09dCYmbisrLHJzW2VdLnR5cGU9PT1ocy5BQ1RJVkVfRU5EJiZyc1tlXS5mcm9tLmFjdG9yPT09dCYmbi0tO3JldHVybiBufSxjcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7dGV4dDp2b2lkIDAsd3JhcDp2b2lkIDB9LHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYocj09PWhzLkFDVElWRV9FTkQpe3ZhciBpPXNzKHQuYWN0b3IpO2lmKGk8MSl7dmFyIGE9bmV3IEVycm9yKCJUcnlpbmcgdG8gaW5hY3RpdmF0ZSBhbiBpbmFjdGl2ZSBwYXJ0aWNpcGFudCAoIit0LmFjdG9yKyIpIik7dGhyb3cgYS5oYXNoPXt0ZXh0OiItPj4tIix0b2tlbjoiLT4+LSIsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyInQUNUSVZFX1BBUlRJQ0lQQU5UJyJdfSxhfX1yZXR1cm4gcnMucHVzaCh7ZnJvbTp0LHRvOmUsbWVzc2FnZTpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJnVzKCl8fCEhbi53cmFwLHR5cGU6cn0pLCEwfSxscz1mdW5jdGlvbih0KXtyZXR1cm4gbnNbdF19LHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PUtvP0tvOlh0KCkuc2VxdWVuY2Uud3JhcH0saHM9e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1LEFVVE9OVU1CRVI6MjYsQ1JJVElDQUxfU1RBUlQ6MjcsQ1JJVElDQUxfT1BUSU9OOjI4LENSSVRJQ0FMX0VORDoyOSxCUkVBS19TVEFSVDozMCxCUkVBS19FTkQ6MzF9LGZzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17YWN0b3I6dCxwbGFjZW1lbnQ6ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdXMoKXx8ISFuLndyYXB9LGk9W10uY29uY2F0KHQsdCk7aXMucHVzaChyKSxycy5wdXNoKHtmcm9tOmlbMF0sdG86aVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdXMoKXx8ISFuLndyYXAsdHlwZTpocy5OT1RFLHBsYWNlbWVudDplfSl9LGRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49bHModCk7dHJ5e3ZhciByPWllKGUudGV4dCxYdCgpKTtyPShyPXIucmVwbGFjZSgvJmFtcDsvZywiJiIpKS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9IikscHMobixKU09OLnBhcnNlKHIpKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsdCl9fTtmdW5jdGlvbiBwcyh0LGUpe2lmKG51bGw9PXQubGlua3MpdC5saW5rcz1lO2Vsc2UgZm9yKHZhciBuIGluIGUpdC5saW5rc1tuXT1lW25dfXZhciBncz1mdW5jdGlvbih0LGUpe3ZhciBuPWxzKHQpO3RyeXt2YXIgcj1pZShlLnRleHQsWHQoKSk7eXMobixKU09OLnBhcnNlKHIpKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIHByb3BlcnRpZXMgdGV4dCIsdCl9fTtmdW5jdGlvbiB5cyh0LGUpe2lmKG51bGw9PXQucHJvcGVydGllcyl0LnByb3BlcnRpZXM9ZTtlbHNlIGZvcih2YXIgbiBpbiBlKXQucHJvcGVydGllc1tuXT1lW25dfXZhciBtcz1mdW5jdGlvbih0LGUpe3ZhciBuPWxzKHQpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS50ZXh0KTt0cnl7dmFyIGk9ci5pbm5lckhUTUwsYT1KU09OLnBhcnNlKGkpO2EucHJvcGVydGllcyYmeXMobixhLnByb3BlcnRpZXMpLGEubGlua3MmJnBzKG4sYS5saW5rcyl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBkZXRhaWxzIHRleHQiLHQpfX07Y29uc3QgYnM9e2FkZEFjdG9yOm9zLGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCxlLG4scil7cnMucHVzaCh7ZnJvbTp0LHRvOmUsbWVzc2FnZTpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJnVzKCl8fCEhbi53cmFwLGFuc3dlcjpyfSl9LGFkZFNpZ25hbDpjcyxhZGRMaW5rczpkcyxhZGREZXRhaWxzOm1zLGFkZFByb3BlcnRpZXM6Z3MsYXV0b1dyYXA6dXMsc2V0V3JhcDpmdW5jdGlvbih0KXtLbz10fSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXthcz0hMH0sZGlzYWJsZVNlcXVlbmNlTnVtYmVyczpmdW5jdGlvbigpe2FzPSExfSxzaG93U2VxdWVuY2VOdW1iZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGFzfSxnZXRNZXNzYWdlczpmdW5jdGlvbigpe3JldHVybiByc30sZ2V0QWN0b3JzOmZ1bmN0aW9uKCl7cmV0dXJuIG5zfSxnZXRBY3RvcjpscyxnZXRBY3RvcktleXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMobnMpfSxnZXRBY3RvclByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09dCYmdm9pZCAwIT09dC5wcm9wZXJ0aWVzKXJldHVybiB0LnByb3BlcnRpZXNbZV19LGdldEFjY1RpdGxlOm1lLGdldERpYWdyYW1UaXRsZTp4ZSxzZXREaWFncmFtVGl0bGU6X2UscGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gWHQoKS5zZXF1ZW5jZX0sY2xlYXI6ZnVuY3Rpb24oKXtucz17fSxycz1bXSxhcz0hMSxnZSgpfSxwYXJzZU1lc3NhZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj17dGV4dDplLnJlcGxhY2UoL15bOl0/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6bnVsbCE9PWUubWF0Y2goL15bOl0/d3JhcDovKXx8bnVsbD09PWUubWF0Y2goL15bOl0/bm93cmFwOi8pJiZ2b2lkIDB9O3JldHVybiBvLmRlYnVnKCJwYXJzZU1lc3NhZ2U6IixuKSxufSxMSU5FVFlQRTpocyxBUlJPV1RZUEU6e0ZJTExFRDowLE9QRU46MX0sUExBQ0VNRU5UOntMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxhZGROb3RlOmZzLHNldEFjY1RpdGxlOnllLGFwcGx5OmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlKX0pKTtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2Uic2VxdWVuY2VJbmRleCI6cnMucHVzaCh7ZnJvbTp2b2lkIDAsdG86dm9pZCAwLG1lc3NhZ2U6e3N0YXJ0OmUuc2VxdWVuY2VJbmRleCxzdGVwOmUuc2VxdWVuY2VJbmRleFN0ZXAsdmlzaWJsZTplLnNlcXVlbmNlVmlzaWJsZX0sd3JhcDohMSx0eXBlOmUuc2lnbmFsVHlwZX0pO2JyZWFrO2Nhc2UiYWRkUGFydGljaXBhbnQiOm9zKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLCJwYXJ0aWNpcGFudCIpO2JyZWFrO2Nhc2UiYWRkQWN0b3IiOm9zKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLCJhY3RvciIpO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmNhc2UiYWN0aXZlRW5kIjpjcyhlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOmZzKGUuYWN0b3IsZS5wbGFjZW1lbnQsZS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpkcyhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRBTGluayI6IWZ1bmN0aW9uKHQsZSl7dmFyIG49bHModCk7dHJ5e3ZhciByPXt9LGk9aWUoZS50ZXh0LFh0KCkpLGE9aS5pbmRleE9mKCJAIikscz0oaT0oaT1pLnJlcGxhY2UoLyZhbXA7L2csIiYiKSkucmVwbGFjZSgvJmVxdWFsczsvZywiPSIpKS5zbGljZSgwLGEtMSkudHJpbSgpLGM9aS5zbGljZShhKzEpLnRyaW0oKTtyW3NdPWMscHMobixyKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsdCl9fShlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpncyhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGREZXRhaWxzIjptcyhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjpjcyhlLmZyb20sZS50byxlLm1zZyxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0Ijpjcyh2b2lkIDAsdm9pZCAwLGUubG9vcFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOmNhc2UicmVjdEVuZCI6Y2FzZSJvcHRFbmQiOmNhc2UiYWx0RW5kIjpjYXNlInBhckVuZCI6Y2FzZSJjcml0aWNhbEVuZCI6Y2FzZSJicmVha0VuZCI6Y3Modm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6Y3Modm9pZCAwLHZvaWQgMCxlLmNvbG9yLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6Y3Modm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOmNzKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRBY2NUaXRsZSI6eWUoZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6Y3Modm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsU3RhcnQiOmNzKHZvaWQgMCx2b2lkIDAsZS5jcml0aWNhbFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdGlvbiI6Y3Modm9pZCAwLHZvaWQgMCxlLm9wdGlvblRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOmNzKHZvaWQgMCx2b2lkIDAsZS5icmVha1RleHQsZS5zaWduYWxUeXBlKX19LHNldEFjY0Rlc2NyaXB0aW9uOmJlLGdldEFjY0Rlc2NyaXB0aW9uOnZlfTt2YXIgdnM9W10sX3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0seHM9ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTswIT09bi5sZW5ndGgmJihuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7VHMoImFjdG9yIitlKyJfcG9wdXAiKX0pKSxuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtFcygiYWN0b3IiK2UrIl9wb3B1cCIpfSkpKX0sdnMucHVzaChuKX0sa3M9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoImltYWdlIik7aS5hdHRyKCJ4IixlKSxpLmF0dHIoInkiLG4pO3ZhciBhPSgwLGplLk4pKHIpO2kuYXR0cigieGxpbms6aHJlZiIsYSl9LHdzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJ1c2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIsbik7dmFyIGE9KDAsamUuTikocik7aS5hdHRyKCJ4bGluazpocmVmIiwiIyIrYSl9LFRzPWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO251bGwhPWUmJihlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LEVzPWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO251bGwhPWUmJihlLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sQ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj0wLHI9MCxpPWUudGV4dC5zcGxpdCh1ZS5saW5lQnJlYWtSZWdleCksYT1bXSxvPTAscz1mdW5jdGlvbigpe3JldHVybiBlLnl9O2lmKHZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wKXN3aXRjaChlLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrZS50ZXh0TWFyZ2luKX07YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55KyhuK3IrZS50ZXh0TWFyZ2luKS8yKX07YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55KyhuK3IrMiplLnRleHRNYXJnaW4pLWUudGV4dE1hcmdpbil9fWlmKHZvaWQgMCE9PWUuYW5jaG9yJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUud2lkdGgpc3dpdGNoKGUuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmUueD1NYXRoLnJvdW5kKGUueCtlLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJzdGFydCIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC8yKSxlLmFuY2hvcj0ibWlkZGxlIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgtZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0iZW5kIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIn1mb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIGw9aVtjXTt2b2lkIDAhPT1lLnRleHRNYXJnaW4mJjA9PT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUuZm9udFNpemUmJihvPWMqZS5mb250U2l6ZSk7dmFyIHU9dC5hcHBlbmQoInRleHQiKTtpZih1LmF0dHIoIngiLGUueCksdS5hdHRyKCJ5IixzKCkpLHZvaWQgMCE9PWUuYW5jaG9yJiZ1LmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSx2b2lkIDAhPT1lLmZvbnRGYW1pbHkmJnUuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHZvaWQgMCE9PWUuZm9udFNpemUmJnUuc3R5bGUoImZvbnQtc2l6ZSIsZS5mb250U2l6ZSksdm9pZCAwIT09ZS5mb250V2VpZ2h0JiZ1LnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSx2b2lkIDAhPT1lLmZpbGwmJnUuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZ1LmF0dHIoImNsYXNzIixlLmNsYXNzKSx2b2lkIDAhPT1lLmR5P3UuYXR0cigiZHkiLGUuZHkpOjAhPT1vJiZ1LmF0dHIoImR5IixvKSxlLnRzcGFuKXt2YXIgaD11LmFwcGVuZCgidHNwYW4iKTtoLmF0dHIoIngiLGUueCksdm9pZCAwIT09ZS5maWxsJiZoLmF0dHIoImZpbGwiLGUuZmlsbCksaC50ZXh0KGwpfWVsc2UgdS50ZXh0KGwpO3ZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wJiYocis9KHUuX2dyb3Vwc3x8dSlbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxuPXIpLGEucHVzaCh1KX1yZXR1cm4gYX0sU3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBuLmF0dHIoInBvaW50cyIsZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gdCsiLCIrZSsiICIrKHQrbikrIiwiK2UrIiAiKyh0K24pKyIsIisoZStyLTcpKyIgIisodCtuLTguNCkrIiwiKyhlK3IpKyIgIit0KyIsIisoZStyKX0oZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLENzKHQsZSksbn0sQXM9LTEsTXM9ZnVuY3Rpb24odCxlKXt0LnNlbGVjdEFsbCYmdC5zZWxlY3RBbGwoIi5hY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJ5MiIsZS01NSl9LE5zPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sT3M9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LERzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLGEsbyxzKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMpe2Zvcih2YXIgbD1jLmFjdG9yRm9udFNpemUsdT1jLmFjdG9yRm9udEZhbWlseSxoPWMuYWN0b3JGb250V2VpZ2h0LGY9bCYmbC5yZXBsYWNlP2wucmVwbGFjZSgicHgiLCIiKTpsLGQ9dC5zcGxpdCh1ZS5saW5lQnJlYWtSZWdleCkscD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgZz1wKmYtZiooZC5sZW5ndGgtMSkvMix5PWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGwpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5Iix1KTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLGcpLnRleHQoZFtwXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLGwpe3ZhciB1PW4uYXBwZW5kKCJzd2l0Y2giKSxoPXUuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsdSxpLGEsbyxzLGMsbCkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCksQnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMpe2Zvcih2YXIgbD1jLmFjdG9yRm9udFNpemUsdT1jLmFjdG9yRm9udEZhbWlseSxoPWMuYWN0b3JGb250V2VpZ2h0LGY9dC5zcGxpdCh1ZS5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKmwtbCooZi5sZW5ndGgtMSkvMixnPWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS5zdHlsZSgiZm9udC1zaXplIixsKS5zdHlsZSgiZm9udC13ZWlnaHQiLGgpLnN0eWxlKCJmb250LWZhbWlseSIsdSk7Zy5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsbikuYXR0cigiZHkiLHApLnRleHQoZltkXSksZy5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoZyxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLGwpe3ZhciB1PW4uYXBwZW5kKCJzd2l0Y2giKSxoPXUuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsdSxpLGEsMCxzLGMsbCkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCk7Y29uc3QgTHM9X3MsSXM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMjswPT09ZS55JiYoQXMrKyx0LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK0FzKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLDgwKS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikpO3ZhciBpPXQuYXBwZW5kKCJnIik7aS5hdHRyKCJjbGFzcyIsImFjdG9yLW1hbiIpO3ZhciBhPXt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTthLng9ZS54LGEueT1lLnksYS5maWxsPSIjZWFlYWVhIixhLndpZHRoPWUud2lkdGgsYS5oZWlnaHQ9ZS5oZWlnaHQsYS5jbGFzcz0iYWN0b3IiLGEucng9MyxhLnJ5PTMsaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrQXMpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsZS55KzI1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLGUueSs0NSksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi1hcm1zIitBcykuYXR0cigieDEiLHItMTgpLmF0dHIoInkxIixlLnkrMzMpLmF0dHIoIngyIixyKzE4KS5hdHRyKCJ5MiIsZS55KzMzKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixyLTE4KS5hdHRyKCJ5MSIsZS55KzYwKS5hdHRyKCJ4MiIscikuYXR0cigieTIiLGUueSs0NSksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLGUueSs0NSkuYXR0cigieDIiLHIrMTYpLmF0dHIoInkyIixlLnkrNjApO3ZhciBvPWkuYXBwZW5kKCJjaXJjbGUiKTtvLmF0dHIoImN4IixlLngrZS53aWR0aC8yKSxvLmF0dHIoImN5IixlLnkrMTApLG8uYXR0cigiciIsMTUpLG8uYXR0cigid2lkdGgiLGUud2lkdGgpLG8uYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7dmFyIHM9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1zLmhlaWdodCxEcyhuKShlLmRlc2NyaXB0aW9uLGksYS54LGEueSszNSxhLndpZHRoLGEuaGVpZ2h0LHtjbGFzczoiYWN0b3IifSxuKSxlLmhlaWdodH0odCxlLG4pO2Nhc2UicGFydGljaXBhbnQiOnJldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMixpPXQuYXBwZW5kKCJnIiksYT1pOzA9PT1lLnkmJihBcysrLGEuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrQXMpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsNSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNXB4IikuYXR0cigic3Ryb2tlIiwiIzk5OSIpLGE9aS5hcHBlbmQoImciKSxlLmFjdG9yQ250PUFzLG51bGwhPWUubGlua3MmJihhLmF0dHIoImlkIiwicm9vdC0iK0FzKSx4cygiI3Jvb3QtIitBcyxBcykpKTt2YXIgbz17eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH0scz0iYWN0b3IiO251bGwhPWUucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmNsYXNzP3M9ZS5wcm9wZXJ0aWVzLmNsYXNzOm8uZmlsbD0iI2VhZWFlYSIsby54PWUueCxvLnk9ZS55LG8ud2lkdGg9ZS53aWR0aCxvLmhlaWdodD1lLmhlaWdodCxvLmNsYXNzPXMsby5yeD0zLG8ucnk9Mzt2YXIgYz1fcyhhLG8pO2lmKGUucmVjdERhdGE9byxudWxsIT1lLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5pY29uKXt2YXIgbD1lLnByb3BlcnRpZXMuaWNvbi50cmltKCk7IkAiPT09bC5jaGFyQXQoMCk/d3MoYSxvLngrby53aWR0aC0yMCxvLnkrMTAsbC5zdWJzdHIoMSkpOmtzKGEsby54K28ud2lkdGgtMjAsby55KzEwLGwpfURzKG4pKGUuZGVzY3JpcHRpb24sYSxvLngsby55LG8ud2lkdGgsby5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LG4pO3ZhciB1PWUuaGVpZ2h0O2lmKGMubm9kZSl7dmFyIGg9Yy5ub2RlKCkuZ2V0QkJveCgpO2UuaGVpZ2h0PWguaGVpZ2h0LHU9aC5oZWlnaHR9cmV0dXJuIHV9KHQsZSxuKX19LEZzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7aWYodm9pZCAwPT09ZS5saW5rc3x8bnVsbD09PWUubGlua3N8fDA9PT1PYmplY3Qua2V5cyhlLmxpbmtzKS5sZW5ndGgpcmV0dXJue2hlaWdodDowLHdpZHRoOjB9O3ZhciBhPWUubGlua3Msbz1lLmFjdG9yQ250LHM9ZS5yZWN0RGF0YSxjPSJub25lIjtpJiYoYz0iYmxvY2sgIWltcG9ydGFudCIpO3ZhciBsPXQuYXBwZW5kKCJnIik7bC5hdHRyKCJpZCIsImFjdG9yIitvKyJfcG9wdXAiKSxsLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxsLmF0dHIoImRpc3BsYXkiLGMpLHhzKCIjYWN0b3IiK28rIl9wb3B1cCIsbyk7dmFyIHU9IiI7dm9pZCAwIT09cy5jbGFzcyYmKHU9IiAiK3MuY2xhc3MpO3ZhciBoPXMud2lkdGg+bj9zLndpZHRoOm4sZj1sLmFwcGVuZCgicmVjdCIpO2lmKGYuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIit1KSxmLmF0dHIoIngiLHMueCksZi5hdHRyKCJ5IixzLmhlaWdodCksZi5hdHRyKCJmaWxsIixzLmZpbGwpLGYuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksZi5hdHRyKCJ3aWR0aCIsaCksZi5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KSxmLmF0dHIoInJ4IixzLnJ4KSxmLmF0dHIoInJ5IixzLnJ5KSxudWxsIT1hKXt2YXIgZD0yMDtmb3IodmFyIHAgaW4gYSl7dmFyIGc9bC5hcHBlbmQoImEiKSx5PSgwLGplLk4pKGFbcF0pO2cuYXR0cigieGxpbms6aHJlZiIseSksZy5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSxCcyhyKShwLGcscy54KzEwLHMuaGVpZ2h0K2QsaCwyMCx7Y2xhc3M6ImFjdG9yIn0sciksZCs9MzB9fXJldHVybiBmLmF0dHIoImhlaWdodCIsZCkse2hlaWdodDpzLmhlaWdodCtkLHdpZHRoOmh9fSxScz1mdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBlbmQoImciKX0sUHM9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYT17eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH0sbz1lLmFuY2hvcmVkO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS5jbGFzcz0iYWN0aXZhdGlvbiIraSUzLGEud2lkdGg9ZS5zdG9weC1lLnN0YXJ0eCxhLmhlaWdodD1uLWUuc3RhcnR5LF9zKG8sYSl9LGpzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXIuYm94TWFyZ2luLGE9ci5ib3hUZXh0TWFyZ2luLG89ci5sYWJlbEJveEhlaWdodCxzPXIubGFiZWxCb3hXaWR0aCxjPXIubWVzc2FnZUZvbnRGYW1pbHksbD1yLm1lc3NhZ2VGb250U2l6ZSx1PXIubWVzc2FnZUZvbnRXZWlnaHQsaD10LmFwcGVuZCgiZyIpLGY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGguYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHQpLmF0dHIoInkxIixlKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLHIpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07ZihlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxmKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLHZvaWQgMCE9PWUuc2VjdGlvbnMmJmUuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZihlLnN0YXJ0eCx0LnksZS5zdG9weCx0LnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSkpO3ZhciBkPXt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH07ZC50ZXh0PW4sZC54PWUuc3RhcnR4LGQueT1lLnN0YXJ0eSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPWwsZC5mb250V2VpZ2h0PXUsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLndpZHRoPXN8fDUwLGQuaGVpZ2h0PW98fDIwLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9ImxhYmVsVGV4dCIsU3MoaCxkKSwoZD17eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9KS50ZXh0PWUudGl0bGUsZC54PWUuc3RhcnR4K3MvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zdGFydHkraSthLGQuYW5jaG9yPSJtaWRkbGUiLGQudmFsaWduPSJtaWRkbGUiLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9Imxvb3BUZXh0IixkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPWwsZC5mb250V2VpZ2h0PXUsZC53cmFwPSEwO3ZhciBwPUNzKGgsZCk7cmV0dXJuIHZvaWQgMCE9PWUuc2VjdGlvblRpdGxlcyYmZS5zZWN0aW9uVGl0bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7aWYodC5tZXNzYWdlKXtkLnRleHQ9dC5tZXNzYWdlLGQueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zZWN0aW9uc1tuXS55K2krYSxkLmNsYXNzPSJsb29wVGV4dCIsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPWwsZC5mb250V2VpZ2h0PXUsZC53cmFwPWUud3JhcCxwPUNzKGgsZCk7dmFyIHI9TWF0aC5yb3VuZChwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7ZS5zZWN0aW9uc1tuXS5oZWlnaHQrPXItKGkrYSl9fSkpLGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksaH0senM9ZnVuY3Rpb24odCxlKXtfcyh0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxZcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxVcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwkcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LFdzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LHFzPWZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxIcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxWcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSxHcz1OcyxYcz1PcztqZS5OO3ZhciBacz17fSxRcz17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxhY3RpdmF0aW9uczpbXSxtb2RlbHM6e2dldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLDA9PT10aGlzLmFjdG9ycy5sZW5ndGg/WzBdOnRoaXMuYWN0b3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpKSsoMD09PXRoaXMubG9vcHMubGVuZ3RoPzA6dGhpcy5sb29wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm1lc3NhZ2VzLmxlbmd0aD8wOnRoaXMubWVzc2FnZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5ub3Rlcy5sZW5ndGg/MDp0aGlzLm5vdGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQWN0b3I6ZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sYWRkTG9vcDpmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSxhZGROb3RlOmZ1bmN0aW9uKHQpe3RoaXMubm90ZXMucHVzaCh0KX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAscmMoWHQoKSl9LHVwZGF0ZVZhbDpmdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT10W2VdP3RbZV09bjp0W2VdPXIobix0W2VdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsYT0wO2Z1bmN0aW9uIG8obyl7cmV0dXJuIGZ1bmN0aW9uKHMpe2ErKzt2YXIgYz1pLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWErMTtpLnVwZGF0ZVZhbChzLCJzdGFydHkiLGUtYypacy5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B5IixyK2MqWnMuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChRcy5kYXRhLCJzdGFydHgiLHQtYypacy5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKFFzLmRhdGEsInN0b3B4IixuK2MqWnMuYm94TWFyZ2luLE1hdGgubWF4KSwiYWN0aXZhdGlvbiIhPT1vJiYoaS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqWnMuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChzLCJzdG9weCIsbitjKlpzLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwoUXMuZGF0YSwic3RhcnR5IixlLWMqWnMuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChRcy5kYXRhLCJzdG9weSIscitjKlpzLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChvKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChvKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9TWF0aC5taW4odCxuKSxhPU1hdGgubWF4KHQsbiksbz1NYXRoLm1pbihlLHIpLHM9TWF0aC5tYXgoZSxyKTt0aGlzLnVwZGF0ZVZhbChRcy5kYXRhLCJzdGFydHgiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKFFzLmRhdGEsInN0YXJ0eSIsbyxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoUXMuZGF0YSwic3RvcHgiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKFFzLmRhdGEsInN0b3B5IixzLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhpLG8sYSxzKX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9blt0LmZyb20uYWN0b3JdLGk9aWModC5mcm9tLmFjdG9yKS5sZW5ndGh8fDAsYT1yLngrci53aWR0aC8yKyhpLTEpKlpzLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4OmEsc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDphK1pzLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6dC5mcm9tLmFjdG9yLGFuY2hvcmVkOlJzKGUpfSl9LGVuZEFjdGl2YXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3RpdmF0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFjdG9yfSkpLmxhc3RJbmRleE9mKHQuZnJvbS5hY3Rvcik7cmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGUsMSlbMF19LGNyZWF0ZUxvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybntzdGFydHg6dm9pZCAwLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zLHN0b3B4OnZvaWQgMCxzdG9weTp2b2lkIDAsdGl0bGU6dC5tZXNzYWdlLHdyYXA6dC53cmFwLHdpZHRoOnQud2lkdGgsaGVpZ2h0OjAsZmlsbDplfX0sbmV3TG9vcDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7dGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMb29wKHQsZSkpfSxlbmRMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKX0sYWRkU2VjdGlvblRvTG9vcDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlcXVlbmNlSXRlbXMucG9wKCk7ZS5zZWN0aW9ucz1lLnNlY3Rpb25zfHxbXSxlLnNlY3Rpb25UaXRsZXM9ZS5zZWN0aW9uVGl0bGVzfHxbXSxlLnNlY3Rpb25zLnB1c2goe3k6UXMuZ2V0VmVydGljYWxQb3MoKSxoZWlnaHQ6MH0pLGUuc2VjdGlvblRpdGxlcy5wdXNoKHQpLHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKGUpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybntib3VuZHM6dGhpcy5kYXRhLG1vZGVsczp0aGlzLm1vZGVsc319fSxLcz1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnQubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5tZXNzYWdlRm9udFdlaWdodH19LEpzPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQubm90ZUZvbnRGYW1pbHksZm9udFNpemU6dC5ub3RlRm9udFNpemUsZm9udFdlaWdodDp0Lm5vdGVGb250V2VpZ2h0fX0sdGM9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dC5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dC5hY3RvckZvbnRXZWlnaHR9fSxlYz1mdW5jdGlvbih0LGUsbixyLGksYSl7aWYoITA9PT1pLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHMpe3ZhciBvPW5ldyBTZXQ7YS5mb3JFYWNoKChmdW5jdGlvbih0KXtvLmFkZCh0LmZyb20pLG8uYWRkKHQudG8pfSkpLG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmhhcyh0KX0pKX1mb3IodmFyIHM9MCxjPTAsbD0wLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9ZVtuW3VdXTtoLndpZHRoPWgud2lkdGh8fFpzLndpZHRoLGguaGVpZ2h0PU1hdGgubWF4KGguaGVpZ2h0fHxacy5oZWlnaHQsWnMuaGVpZ2h0KSxoLm1hcmdpbj1oLm1hcmdpbnx8WnMuYWN0b3JNYXJnaW4saC54PXMrYyxoLnk9cjt2YXIgZj1Jcyh0LGgsWnMpO2w9TWF0aC5tYXgobCxmKSxRcy5pbnNlcnQoaC54LHIsaC54K2gud2lkdGgsaC5oZWlnaHQpLHMrPWgud2lkdGgsYys9aC5tYXJnaW4sUXMubW9kZWxzLmFkZEFjdG9yKGgpfVFzLmJ1bXBWZXJ0aWNhbFBvcyhsKX0sbmM9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9ZVtuW29dXSxjPXNjKHMpLGw9RnModCxzLGMsWnMsWnMuZm9yY2VNZW51cyxyKTtsLmhlaWdodD5pJiYoaT1sLmhlaWdodCksbC53aWR0aCtzLng+YSYmKGE9bC53aWR0aCtzLngpfXJldHVybnttYXhIZWlnaHQ6aSxtYXhXaWR0aDphfX0scmM9ZnVuY3Rpb24odCl7UShacyx0KSx0LmZvbnRGYW1pbHkmJihacy5hY3RvckZvbnRGYW1pbHk9WnMubm90ZUZvbnRGYW1pbHk9WnMubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoWnMuYWN0b3JGb250U2l6ZT1acy5ub3RlRm9udFNpemU9WnMubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKFpzLmFjdG9yRm9udFdlaWdodD1acy5ub3RlRm9udFdlaWdodD1acy5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSxpYz1mdW5jdGlvbih0KXtyZXR1cm4gUXMuYWN0aXZhdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KSl9LGFjPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0XSxyPWljKHQpO3JldHVybltyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxlLnN0YXJ0eCl9KSxuLngrbi53aWR0aC8yKSxyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnN0b3B4KX0pLG4ueCtuLndpZHRoLzIpXX07ZnVuY3Rpb24gb2ModCxlLG4scixpKXtRcy5idW1wVmVydGljYWxQb3Mobik7dmFyIGE9cjtpZihlLmlkJiZlLm1lc3NhZ2UmJnRbZS5pZF0pe3ZhciBzPXRbZS5pZF0ud2lkdGgsYz1Lcyhacyk7ZS5tZXNzYWdlPUFuLndyYXBMYWJlbCgiWyIuY29uY2F0KGUubWVzc2FnZSwiXSIpLHMtMipacy53cmFwUGFkZGluZyxjKSxlLndpZHRoPXMsZS53cmFwPSEwO3ZhciBsPUFuLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGUubWVzc2FnZSxjKSx1PU1hdGgubWF4KGwuaGVpZ2h0LFpzLmxhYmVsQm94SGVpZ2h0KTthPXIrdSxvLmRlYnVnKCIiLmNvbmNhdCh1LCIgLSAiKS5jb25jYXQoZS5tZXNzYWdlKSl9aShlKSxRcy5idW1wVmVydGljYWxQb3MoYSl9dmFyIHNjPWZ1bmN0aW9uKHQpe3ZhciBlPTAsbj10Yyhacyk7Zm9yKHZhciByIGluIHQubGlua3Mpe3ZhciBpPUFuLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHIsbikud2lkdGgrMipacy53cmFwUGFkZGluZysyKlpzLmJveE1hcmdpbjtlPGkmJihlPWkpfXJldHVybiBlfTtjb25zdCBjYz17Ym91bmRzOlFzLGRyYXdBY3RvcnM6ZWMsZHJhd0FjdG9yc1BvcHVwOm5jLHNldENvbmY6cmMsZHJhdzpmdW5jdGlvbih0LGUsbixyKXtacz1YdCgpLnNlcXVlbmNlO3ZhciBpLGE9WHQoKS5zZWN1cml0eUxldmVsOyJzYW5kYm94Ij09PWEmJihpPSgwLGwuc2VsZWN0KSgiI2kiK2UpKTt2YXIgcz0ic2FuZGJveCI9PT1hPygwLGwuc2VsZWN0KShpLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOigwLGwuc2VsZWN0KSgiYm9keSIpLGM9InNhbmRib3giPT09YT9pLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1FzLmluaXQoKSxvLmRlYnVnKHIuZGIpO3ZhciB1PSJzYW5kYm94Ij09PWE/cy5zZWxlY3QoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk6KDAsbC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLGg9ci5kYi5nZXRBY3RvcnMoKSxmPXIuZGIuZ2V0QWN0b3JLZXlzKCksZD1yLmRiLmdldE1lc3NhZ2VzKCkscD1yLmRiLmdldERpYWdyYW1UaXRsZSgpLGc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHRbZS50b10mJnRbZS5mcm9tXSl7dmFyIGk9dFtlLnRvXTtpZihlLnBsYWNlbWVudD09PW4uZGIuUExBQ0VNRU5ULkxFRlRPRiYmIWkucHJldkFjdG9yKXJldHVybjtpZihlLnBsYWNlbWVudD09PW4uZGIuUExBQ0VNRU5ULlJJR0hUT0YmJiFpLm5leHRBY3RvcilyZXR1cm47dmFyIGE9dm9pZCAwIT09ZS5wbGFjZW1lbnQsbz0hYSxzPWE/SnMoWnMpOktzKFpzKSxjPWUud3JhcD9Bbi53cmFwTGFiZWwoZS5tZXNzYWdlLFpzLndpZHRoLTIqWnMud3JhcFBhZGRpbmcscyk6ZS5tZXNzYWdlLGw9QW4uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYyxzKS53aWR0aCsyKlpzLndyYXBQYWRkaW5nO28mJmUuZnJvbT09PWkubmV4dEFjdG9yP3JbZS50b109TWF0aC5tYXgocltlLnRvXXx8MCxsKTpvJiZlLmZyb209PT1pLnByZXZBY3Rvcj9yW2UuZnJvbV09TWF0aC5tYXgocltlLmZyb21dfHwwLGwpOm8mJmUuZnJvbT09PWUudG8/KHJbZS5mcm9tXT1NYXRoLm1heChyW2UuZnJvbV18fDAsbC8yKSxyW2UudG9dPU1hdGgubWF4KHJbZS50b118fDAsbC8yKSk6ZS5wbGFjZW1lbnQ9PT1uLmRiLlBMQUNFTUVOVC5SSUdIVE9GP3JbZS5mcm9tXT1NYXRoLm1heChyW2UuZnJvbV18fDAsbCk6ZS5wbGFjZW1lbnQ9PT1uLmRiLlBMQUNFTUVOVC5MRUZUT0Y/cltpLnByZXZBY3Rvcl09TWF0aC5tYXgocltpLnByZXZBY3Rvcl18fDAsbCk6ZS5wbGFjZW1lbnQ9PT1uLmRiLlBMQUNFTUVOVC5PVkVSJiYoaS5wcmV2QWN0b3ImJihyW2kucHJldkFjdG9yXT1NYXRoLm1heChyW2kucHJldkFjdG9yXXx8MCxsLzIpKSxpLm5leHRBY3RvciYmKHJbZS5mcm9tXT1NYXRoLm1heChyW2UuZnJvbV18fDAsbC8yKSkpfX0pKSxvLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLHIpLHJ9KGgsZCxyKTtacy5oZWlnaHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0wO2Zvcih2YXIgciBpbiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj10W2VdO3Iud3JhcCYmKHIuZGVzY3JpcHRpb249QW4ud3JhcExhYmVsKHIuZGVzY3JpcHRpb24sWnMud2lkdGgtMipacy53cmFwUGFkZGluZyx0YyhacykpKTt2YXIgaT1Bbi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhyLmRlc2NyaXB0aW9uLHRjKFpzKSk7ci53aWR0aD1yLndyYXA/WnMud2lkdGg6TWF0aC5tYXgoWnMud2lkdGgsaS53aWR0aCsyKlpzLndyYXBQYWRkaW5nKSxyLmhlaWdodD1yLndyYXA/TWF0aC5tYXgoaS5oZWlnaHQsWnMuaGVpZ2h0KTpacy5oZWlnaHQsbj1NYXRoLm1heChuLHIuaGVpZ2h0KX0pKSxlKXt2YXIgaT10W3JdO2lmKGkpe3ZhciBhPXRbaS5uZXh0QWN0b3JdO2lmKGEpe3ZhciBvPWVbcl0rWnMuYWN0b3JNYXJnaW4taS53aWR0aC8yLWEud2lkdGgvMjtpLm1hcmdpbj1NYXRoLm1heChvLFpzLmFjdG9yTWFyZ2luKX19fXJldHVybiBNYXRoLm1heChuLFpzLmhlaWdodCl9KGgsZyksSHModSkscXModSksVnModSksZWModSxoLGYsMCxacyxkKTt2YXIgeT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLHMsYz17fSxsPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmlkPUFuLnJhbmRvbSh7bGVuZ3RoOjEwfSksdC50eXBlKXtjYXNlIHIuZGIuTElORVRZUEUuTE9PUF9TVEFSVDpjYXNlIHIuZGIuTElORVRZUEUuQUxUX1NUQVJUOmNhc2Ugci5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6Y2FzZSByLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpjYXNlIHIuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSByLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmwucHVzaCh7aWQ6dC5pZCxtc2c6dC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIHIuZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIHIuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOnQubWVzc2FnZSYmKGk9bC5wb3AoKSxjW2kuaWRdPWksY1t0LmlkXT1pLGwucHVzaChpKSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2Ugci5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2Ugci5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2Ugci5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2Ugci5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSByLmRiLkxJTkVUWVBFLkJSRUFLX0VORDppPWwucG9wKCksY1tpLmlkXT1pO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6dmFyIG49ZVt0LmZyb20/dC5mcm9tLmFjdG9yOnQudG8uYWN0b3JdLHU9aWModC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yKS5sZW5ndGgsaD1uLngrbi53aWR0aC8yKyh1LTEpKlpzLmFjdGl2YXRpb25XaWR0aC8yLGY9e3N0YXJ0eDpoLHN0b3B4OmgrWnMuYWN0aXZhdGlvbldpZHRoLGFjdG9yOnQuZnJvbS5hY3RvcixlbmFibGVkOiEwfTtRcy5hY3RpdmF0aW9ucy5wdXNoKGYpO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOnZhciBkPVFzLmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtkZWxldGUgUXMuYWN0aXZhdGlvbnMuc3BsaWNlKGQsMSlbMF19dm9pZCAwIT09dC5wbGFjZW1lbnQ/KGE9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWVbdC5mcm9tXS54LGk9ZVt0LnRvXS54LGE9dC53cmFwJiZ0Lm1lc3NhZ2Uscz1Bbi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhP0FuLndyYXBMYWJlbCh0Lm1lc3NhZ2UsWnMud2lkdGgsSnMoWnMpKTp0Lm1lc3NhZ2UsSnMoWnMpKSxjPXt3aWR0aDphP1pzLndpZHRoOk1hdGgubWF4KFpzLndpZHRoLHMud2lkdGgrMipacy5ub3RlTWFyZ2luKSxoZWlnaHQ6MCxzdGFydHg6ZVt0LmZyb21dLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlfTtyZXR1cm4gdC5wbGFjZW1lbnQ9PT1uLmRiLlBMQUNFTUVOVC5SSUdIVE9GPyhjLndpZHRoPWE/TWF0aC5tYXgoWnMud2lkdGgscy53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLHMud2lkdGgrMipacy5ub3RlTWFyZ2luKSxjLnN0YXJ0eD1yKyhlW3QuZnJvbV0ud2lkdGgrWnMuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09bi5kYi5QTEFDRU1FTlQuTEVGVE9GPyhjLndpZHRoPWE/TWF0aC5tYXgoWnMud2lkdGgscy53aWR0aCsyKlpzLm5vdGVNYXJnaW4pOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aC8yK2VbdC50b10ud2lkdGgvMixzLndpZHRoKzIqWnMubm90ZU1hcmdpbiksYy5zdGFydHg9ci1jLndpZHRoKyhlW3QuZnJvbV0ud2lkdGgtWnMuYWN0b3JNYXJnaW4pLzIpOnQudG89PT10LmZyb20/KHM9QW4uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYT9Bbi53cmFwTGFiZWwodC5tZXNzYWdlLE1hdGgubWF4KFpzLndpZHRoLGVbdC5mcm9tXS53aWR0aCksSnMoWnMpKTp0Lm1lc3NhZ2UsSnMoWnMpKSxjLndpZHRoPWE/TWF0aC5tYXgoWnMud2lkdGgsZVt0LmZyb21dLndpZHRoKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgsWnMud2lkdGgscy53aWR0aCsyKlpzLm5vdGVNYXJnaW4pLGMuc3RhcnR4PXIrKGVbdC5mcm9tXS53aWR0aC1jLndpZHRoKS8yKTooYy53aWR0aD1NYXRoLmFicyhyK2VbdC5mcm9tXS53aWR0aC8yLShpK2VbdC50b10ud2lkdGgvMikpK1pzLmFjdG9yTWFyZ2luLGMuc3RhcnR4PXI8aT9yK2VbdC5mcm9tXS53aWR0aC8yLVpzLmFjdG9yTWFyZ2luLzI6aStlW3QudG9dLndpZHRoLzItWnMuYWN0b3JNYXJnaW4vMiksYSYmKGMubWVzc2FnZT1Bbi53cmFwTGFiZWwodC5tZXNzYWdlLGMud2lkdGgtMipacy53cmFwUGFkZGluZyxKcyhacykpKSxvLmRlYnVnKCJOTTpbIi5jb25jYXQoYy5zdGFydHgsIiwiKS5jb25jYXQoYy5zdG9weCwiLCIpLmNvbmNhdChjLnN0YXJ0eSwiLCIpLmNvbmNhdChjLnN0b3B5LCI6IikuY29uY2F0KGMud2lkdGgsIiwiKS5jb25jYXQoYy5oZWlnaHQsIj0iKS5jb25jYXQodC5tZXNzYWdlLCJdIikpLGN9KHQsZSxyKSx0Lm5vdGVNb2RlbD1hLGwuZm9yRWFjaCgoZnVuY3Rpb24odCl7KGk9dCkuZnJvbT1NYXRoLm1pbihpLmZyb20sYS5zdGFydHgpLGkudG89TWF0aC5tYXgoaS50byxhLnN0YXJ0eCthLndpZHRoKSxpLndpZHRoPU1hdGgubWF4KGkud2lkdGgsTWF0aC5hYnMoaS5mcm9tLWkudG8pKS1acy5sYWJlbEJveFdpZHRofSkpKToocz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ITE7aWYoW24uZGIuTElORVRZUEUuU09MSURfT1BFTixuLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLG4uZGIuTElORVRZUEUuU09MSUQsbi5kYi5MSU5FVFlQRS5ET1RURUQsbi5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxuLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxuLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULG4uZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyh0LnR5cGUpJiYocj0hMCksIXIpcmV0dXJue307dmFyIGk9YWModC5mcm9tLGUpLGE9YWModC50byxlKSxvPWlbMF08PWFbMF0/MTowLHM9aVswXTxhWzBdPzA6MSxjPWkuY29uY2F0KGEpLGw9TWF0aC5hYnMoYVtzXS1pW29dKTt0LndyYXAmJnQubWVzc2FnZSYmKHQubWVzc2FnZT1Bbi53cmFwTGFiZWwodC5tZXNzYWdlLE1hdGgubWF4KGwrMipacy53cmFwUGFkZGluZyxacy53aWR0aCksS3MoWnMpKSk7dmFyIHU9QW4uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModC5tZXNzYWdlLEtzKFpzKSk7cmV0dXJue3dpZHRoOk1hdGgubWF4KHQud3JhcD8wOnUud2lkdGgrMipacy53cmFwUGFkZGluZyxsKzIqWnMud3JhcFBhZGRpbmcsWnMud2lkdGgpLGhlaWdodDowLHN0YXJ0eDppW29dLHN0b3B4OmFbc10sc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZSx0eXBlOnQudHlwZSx3cmFwOnQud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwsYyksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxjKX19KHQsZSxyKSx0Lm1zZ01vZGVsPXMscy5zdGFydHgmJnMuc3RvcHgmJmwubGVuZ3RoPjAmJmwuZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoaT1uLHMuc3RhcnR4PT09cy5zdG9weCl7dmFyIHI9ZVt0LmZyb21dLGE9ZVt0LnRvXTtpLmZyb209TWF0aC5taW4oci54LXMud2lkdGgvMixyLngtci53aWR0aC8yLGkuZnJvbSksaS50bz1NYXRoLm1heChhLngrcy53aWR0aC8yLGEueCtyLndpZHRoLzIsaS50byksaS53aWR0aD1NYXRoLm1heChpLndpZHRoLE1hdGguYWJzKGkudG8taS5mcm9tKSktWnMubGFiZWxCb3hXaWR0aH1lbHNlIGkuZnJvbT1NYXRoLm1pbihzLnN0YXJ0eCxpLmZyb20pLGkudG89TWF0aC5tYXgocy5zdG9weCxpLnRvKSxpLndpZHRoPU1hdGgubWF4KGkud2lkdGgscy53aWR0aCktWnMubGFiZWxCb3hXaWR0aH0pKSl9KSksUXMuYWN0aXZhdGlvbnM9W10sby5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGMpLGN9KGQsaCwwLHIpO1lzKHUpLFdzKHUpLFVzKHUpLCRzKHUpO3ZhciBtPTEsYj0xLHY9QXJyYXkoKTtkLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLG4saTtzd2l0Y2godC50eXBlKXtjYXNlIHIuZGIuTElORVRZUEUuTk9URTpuPXQubm90ZU1vZGVsLGZ1bmN0aW9uKHQsZSl7UXMuYnVtcFZlcnRpY2FsUG9zKFpzLmJveE1hcmdpbiksZS5oZWlnaHQ9WnMuYm94TWFyZ2luLGUuc3RhcnR5PVFzLmdldFZlcnRpY2FsUG9zKCk7dmFyIG49WHMoKTtuLng9ZS5zdGFydHgsbi55PWUuc3RhcnR5LG4ud2lkdGg9ZS53aWR0aHx8WnMud2lkdGgsbi5jbGFzcz0ibm90ZSI7dmFyIHI9dC5hcHBlbmQoImciKSxpPUxzKHIsbiksYT1HcygpO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS53aWR0aD1uLndpZHRoLGEuZHk9IjFlbSIsYS50ZXh0PWUubWVzc2FnZSxhLmNsYXNzPSJub3RlVGV4dCIsYS5mb250RmFtaWx5PVpzLm5vdGVGb250RmFtaWx5LGEuZm9udFNpemU9WnMubm90ZUZvbnRTaXplLGEuZm9udFdlaWdodD1acy5ub3RlRm9udFdlaWdodCxhLmFuY2hvcj1acy5ub3RlQWxpZ24sYS50ZXh0TWFyZ2luPVpzLm5vdGVNYXJnaW4sYS52YWxpZ249ImNlbnRlciI7dmFyIG89Q3MocixhKSxzPU1hdGgucm91bmQoby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0Ll9ncm91cHN8fHQpWzBdWzBdLmdldEJCb3goKS5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpO2kuYXR0cigiaGVpZ2h0IixzKzIqWnMubm90ZU1hcmdpbiksZS5oZWlnaHQrPXMrMipacy5ub3RlTWFyZ2luLFFzLmJ1bXBWZXJ0aWNhbFBvcyhzKzIqWnMubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStzKzIqWnMubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K24ud2lkdGgsUXMuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksUXMubW9kZWxzLmFkZE5vdGUoZSl9KHUsbik7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpRcy5uZXdBY3RpdmF0aW9uKHQsdSxoKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuQUNUSVZFX0VORDohZnVuY3Rpb24odCxlKXt2YXIgbj1Rcy5lbmRBY3RpdmF0aW9uKHQpO24uc3RhcnR5KzE4PmUmJihuLnN0YXJ0eT1lLTYsZSs9MTIpLFBzKHUsbixlLFpzLGljKHQuZnJvbS5hY3RvcikubGVuZ3RoKSxRcy5pbnNlcnQobi5zdGFydHgsZS0xMCxuLnN0b3B4LGUpfSh0LFFzLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOm9jKHksdCxacy5ib3hNYXJnaW4sWnMuYm94TWFyZ2luK1pzLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBRcy5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5MT09QX0VORDplPVFzLmVuZExvb3AoKSxqcyh1LGUsImxvb3AiLFpzKSxRcy5idW1wVmVydGljYWxQb3MoZS5zdG9weS1Rcy5nZXRWZXJ0aWNhbFBvcygpKSxRcy5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuUkVDVF9TVEFSVDpvYyh5LHQsWnMuYm94TWFyZ2luLFpzLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFFzLm5ld0xvb3Aodm9pZCAwLHQubWVzc2FnZSl9KSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLlJFQ1RfRU5EOmU9UXMuZW5kTG9vcCgpLHpzKHUsZSksUXMubW9kZWxzLmFkZExvb3AoZSksUXMuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktUXMuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpvYyh5LHQsWnMuYm94TWFyZ2luLFpzLmJveE1hcmdpbitacy5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gUXMubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuT1BUX0VORDplPVFzLmVuZExvb3AoKSxqcyh1LGUsIm9wdCIsWnMpLFFzLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LVFzLmdldFZlcnRpY2FsUG9zKCkpLFFzLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6b2MoeSx0LFpzLmJveE1hcmdpbixacy5ib3hNYXJnaW4rWnMuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFFzLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLkFMVF9FTFNFOm9jKHksdCxacy5ib3hNYXJnaW4rWnMuYm94VGV4dE1hcmdpbixacy5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBRcy5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5BTFRfRU5EOmU9UXMuZW5kTG9vcCgpLGpzKHUsZSwiYWx0IixacyksUXMuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktUXMuZ2V0VmVydGljYWxQb3MoKSksUXMubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpvYyh5LHQsWnMuYm94TWFyZ2luLFpzLmJveE1hcmdpbitacy5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gUXMubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuUEFSX0FORDpvYyh5LHQsWnMuYm94TWFyZ2luK1pzLmJveFRleHRNYXJnaW4sWnMuYm94TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gUXMuYWRkU2VjdGlvblRvTG9vcCh0KX0pKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuUEFSX0VORDplPVFzLmVuZExvb3AoKSxqcyh1LGUsInBhciIsWnMpLFFzLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LVFzLmdldFZlcnRpY2FsUG9zKCkpLFFzLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2Ugci5kYi5MSU5FVFlQRS5BVVRPTlVNQkVSOm09dC5tZXNzYWdlLnN0YXJ0fHxtLGI9dC5tZXNzYWdlLnN0ZXB8fGIsdC5tZXNzYWdlLnZpc2libGU/ci5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTpyLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6b2MoeSx0LFpzLmJveE1hcmdpbixacy5ib3hNYXJnaW4rWnMuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFFzLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjpvYyh5LHQsWnMuYm94TWFyZ2luK1pzLmJveFRleHRNYXJnaW4sWnMuYm94TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gUXMuYWRkU2VjdGlvblRvTG9vcCh0KX0pKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOmU9UXMuZW5kTG9vcCgpLGpzKHUsZSwiY3JpdGljYWwiLFpzKSxRcy5idW1wVmVydGljYWxQb3MoZS5zdG9weS1Rcy5nZXRWZXJ0aWNhbFBvcygpKSxRcy5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIHIuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6b2MoeSx0LFpzLmJveE1hcmdpbixacy5ib3hNYXJnaW4rWnMuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFFzLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSByLmRiLkxJTkVUWVBFLkJSRUFLX0VORDplPVFzLmVuZExvb3AoKSxqcyh1LGUsImJyZWFrIixacyksUXMuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktUXMuZ2V0VmVydGljYWxQb3MoKSksUXMubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7ZGVmYXVsdDp0cnl7KGk9dC5tc2dNb2RlbCkuc3RhcnR5PVFzLmdldFZlcnRpY2FsUG9zKCksaS5zZXF1ZW5jZUluZGV4PW0saS5zZXF1ZW5jZVZpc2libGU9ci5kYi5zaG93U2VxdWVuY2VOdW1iZXJzKCk7dmFyIGE9ZnVuY3Rpb24odCxlKXtRcy5idW1wVmVydGljYWxQb3MoMTApO3ZhciBuLHI9ZS5zdGFydHgsaT1lLnN0b3B4LGE9ZS5tZXNzYWdlLG89dWUuc3BsaXRCcmVha3MoYSkubGVuZ3RoLHM9QW4uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYSxLcyhacykpLGM9cy5oZWlnaHQvbztlLmhlaWdodCs9YyxRcy5idW1wVmVydGljYWxQb3MoYyk7dmFyIGw9cy5oZWlnaHQtMTAsdT1zLndpZHRoO2lmKHI9PT1pKXtuPVFzLmdldFZlcnRpY2FsUG9zKCkrbCxacy5yaWdodEFuZ2xlc3x8KGwrPVpzLmJveE1hcmdpbixuPVFzLmdldFZlcnRpY2FsUG9zKCkrbCksbCs9MzA7dmFyIGg9TWF0aC5tYXgodS8yLFpzLndpZHRoLzIpO1FzLmluc2VydChyLWgsUXMuZ2V0VmVydGljYWxQb3MoKS0xMCtsLGkraCxRcy5nZXRWZXJ0aWNhbFBvcygpKzMwK2wpfWVsc2UgbCs9WnMuYm94TWFyZ2luLG49UXMuZ2V0VmVydGljYWxQb3MoKStsLFFzLmluc2VydChyLG4tMTAsaSxuKTtyZXR1cm4gUXMuYnVtcFZlcnRpY2FsUG9zKGwpLGUuaGVpZ2h0Kz1sLGUuc3RvcHk9ZS5zdGFydHkrZS5oZWlnaHQsUXMuaW5zZXJ0KGUuZnJvbUJvdW5kcyxlLnN0YXJ0eSxlLnRvQm91bmRzLGUuc3RvcHkpLG59KDAsaSk7di5wdXNoKHttZXNzYWdlTW9kZWw6aSxsaW5lU3RhcnR5OmF9KSxRcy5tb2RlbHMuYWRkTWVzc2FnZShpKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLHQpfX1bci5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHIuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sci5kYi5MSU5FVFlQRS5TT0xJRCxyLmRiLkxJTkVUWVBFLkRPVFRFRCxyLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLHIuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLHIuZGIuTElORVRZUEUuU09MSURfUE9JTlQsci5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihtKz1iKX0pKSx2LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1lLnN0YXJ0eCxhPWUuc3RvcHgsbz1lLnN0YXJ0eSxzPWUubWVzc2FnZSxjPWUudHlwZSxsPWUuc2VxdWVuY2VJbmRleCx1PWUuc2VxdWVuY2VWaXNpYmxlLGg9QW4uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocyxLcyhacykpLGY9R3MoKTtmLng9aSxmLnk9bysxMCxmLndpZHRoPWEtaSxmLmNsYXNzPSJtZXNzYWdlVGV4dCIsZi5keT0iMWVtIixmLnRleHQ9cyxmLmZvbnRGYW1pbHk9WnMubWVzc2FnZUZvbnRGYW1pbHksZi5mb250U2l6ZT1acy5tZXNzYWdlRm9udFNpemUsZi5mb250V2VpZ2h0PVpzLm1lc3NhZ2VGb250V2VpZ2h0LGYuYW5jaG9yPVpzLm1lc3NhZ2VBbGlnbixmLnZhbGlnbj0iY2VudGVyIixmLnRleHRNYXJnaW49WnMud3JhcFBhZGRpbmcsZi50c3Bhbj0hMSxDcyh0LGYpO3ZhciBkLHA9aC53aWR0aDtpPT09YT9kPVpzLnJpZ2h0QW5nbGVzP3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gICIuY29uY2F0KGksIiwiKS5jb25jYXQobiwiIEggIikuY29uY2F0KGkrTWF0aC5tYXgoWnMud2lkdGgvMixwLzIpLCIgViAiKS5jb25jYXQobisyNSwiIEggIikuY29uY2F0KGkpKTp0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIraSsiLCIrbisiIEMgIisoaSs2MCkrIiwiKyhuLTEwKSsiICIrKGkrNjApKyIsIisobiszMCkrIiAiK2krIiwiKyhuKzIwKSk6KChkPXQuYXBwZW5kKCJsaW5lIikpLmF0dHIoIngxIixpKSxkLmF0dHIoInkxIixuKSxkLmF0dHIoIngyIixhKSxkLmF0dHIoInkyIixuKSksYz09PXIuZGIuTElORVRZUEUuRE9UVEVEfHxjPT09ci5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fGM9PT1yLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8Yz09PXIuZGIuTElORVRZUEUuRE9UVEVEX09QRU4/KGQuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIiksZC5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMSIpKTpkLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUwIik7dmFyIGc9IiI7WnMuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKGc9KGc9KGc9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZC5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLGQuYXR0cigic3Ryb2tlIiwibm9uZSIpLGQuc3R5bGUoImZpbGwiLCJub25lIiksYyE9PXIuZGIuTElORVRZUEUuU09MSUQmJmMhPT1yLmRiLkxJTkVUWVBFLkRPVFRFRHx8ZC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiI2Fycm93aGVhZCkiKSxjIT09ci5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCYmYyE9PXIuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxkLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjZmlsbGVkLWhlYWQpIiksYyE9PXIuZGIuTElORVRZUEUuU09MSURfQ1JPU1MmJmMhPT1yLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8ZC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiI2Nyb3NzaGVhZCkiKSwodXx8WnMuc2hvd1NlcXVlbmNlTnVtYmVycykmJihkLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2crIiNzZXF1ZW5jZW51bWJlcikiKSx0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGkpLmF0dHIoInkiLG4rNCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwiMTJweCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzZXF1ZW5jZU51bWJlciIpLnRleHQobCkpfSh1LHQubWVzc2FnZU1vZGVsLHQubGluZVN0YXJ0eSxyKX0pKSxacy5taXJyb3JBY3RvcnMmJihRcy5idW1wVmVydGljYWxQb3MoMipacy5ib3hNYXJnaW4pLGVjKHUsaCxmLFFzLmdldFZlcnRpY2FsUG9zKCksWnMsZCksUXMuYnVtcFZlcnRpY2FsUG9zKFpzLmJveE1hcmdpbiksTXModSxRcy5nZXRWZXJ0aWNhbFBvcygpKSk7dmFyIF89bmModSxoLGYsYykseD1Rcy5nZXRCb3VuZHMoKS5ib3VuZHM7by5kZWJ1ZygiRm9yIGxpbmUgaGVpZ2h0IGZpeCBRdWVyeWluZzogIyIrZSsiIC5hY3Rvci1saW5lIiksKDAsbC5zZWxlY3RBbGwpKCIjIitlKyIgLmFjdG9yLWxpbmUiKS5hdHRyKCJ5MiIseC5zdG9weSk7dmFyIGs9eC5zdG9weS14LnN0YXJ0eTtrPF8ubWF4SGVpZ2h0JiYoaz1fLm1heEhlaWdodCk7dmFyIHc9aysyKlpzLmRpYWdyYW1NYXJnaW5ZO1pzLm1pcnJvckFjdG9ycyYmKHc9dy1acy5ib3hNYXJnaW4rWnMuYm90dG9tTWFyZ2luQWRqKTt2YXIgVD14LnN0b3B4LXguc3RhcnR4O1Q8Xy5tYXhXaWR0aCYmKFQ9Xy5tYXhXaWR0aCk7dmFyIEU9VCsyKlpzLmRpYWdyYW1NYXJnaW5YO3AmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChwKS5hdHRyKCJ4IiwoeC5zdG9weC14LnN0YXJ0eCkvMi0yKlpzLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLFRuKHUsMCxFLFpzLnVzZU1heFdpZHRoKTt2YXIgQz1wPzQwOjA7dS5hdHRyKCJ2aWV3Qm94Iix4LnN0YXJ0eC1acy5kaWFncmFtTWFyZ2luWCsiIC0iKyhacy5kaWFncmFtTWFyZ2luWStDKSsiICIrRSsiICIrKHcrQykpLE1uKHIuZGIsdSxlKSxvLmRlYnVnKCJtb2RlbHM6IixRcy5tb2RlbHMpfX07dmFyIGxjPW4oMzU4NCksdWM9bi5uKGxjKTtmdW5jdGlvbiBoYyh0KXtyZXR1cm4gaGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGhjKHQpfXZhciBmYz1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSl9LGRjPVtdLHBjPWZ1bmN0aW9uIHQoZSxuLHIpe2lmKCJyZWxhdGlvbiI9PT1uLnN0bXQpdChlLG4uc3RhdGUxLCEwKSx0KGUsbi5zdGF0ZTIsITEpO2Vsc2UgaWYoInN0YXRlIj09PW4uc3RtdCYmIlsqXSI9PT1uLmlkJiYobi5pZD1yP2UuaWQrIl9zdGFydCI6ZS5pZCsiX2VuZCIsbi5zdGFydD1yKSxuLmRvYyl7dmFyIGk9W10sYT0wLG89W107Zm9yKGE9MDthPG4uZG9jLmxlbmd0aDthKyspaWYoImRpdmlkZXIiPT09bi5kb2NbYV0udHlwZSl7dmFyIHM9ZmMobi5kb2NbYV0pO3MuZG9jPWZjKG8pLGkucHVzaChzKSxvPVtdfWVsc2Ugby5wdXNoKG4uZG9jW2FdKTtpZihpLmxlbmd0aD4wJiZvLmxlbmd0aD4wKXt2YXIgYz17c3RtdDoic3RhdGUiLGlkOmduKCksdHlwZToiZGl2aWRlciIsZG9jOmZjKG8pfTtpLnB1c2goZmMoYykpLG4uZG9jPWl9bi5kb2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlLCEwKX0pKX19LGdjPXtyb290OntyZWxhdGlvbnM6W10sc3RhdGVzOnt9LGRvY3VtZW50czp7fX19LHljPWdjLnJvb3QsbWM9MCxiYz1mdW5jdGlvbih0LGUsbixyLGkpe3ZvaWQgMD09PXljLnN0YXRlc1t0XT95Yy5zdGF0ZXNbdF09e2lkOnQsZGVzY3JpcHRpb25zOltdLHR5cGU6ZSxkb2M6bixub3RlOml9Oih5Yy5zdGF0ZXNbdF0uZG9jfHwoeWMuc3RhdGVzW3RdLmRvYz1uKSx5Yy5zdGF0ZXNbdF0udHlwZXx8KHljLnN0YXRlc1t0XS50eXBlPWUpKSxyJiYoby5pbmZvKCJBZGRpbmcgc3RhdGUgIix0LHIpLCJzdHJpbmciPT10eXBlb2YgciYmeGModCxyLnRyaW0oKSksIm9iamVjdCI9PT1oYyhyKSYmci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4geGModCxlLnRyaW0oKSl9KSkpLGkmJih5Yy5zdGF0ZXNbdF0ubm90ZT1pLHljLnN0YXRlc1t0XS5ub3RlLnRleHQ9dWUuc2FuaXRpemVUZXh0KHljLnN0YXRlc1t0XS5ub3RlLnRleHQsWHQoKSkpfSx2Yz1mdW5jdGlvbih0KXt5Yz0oZ2M9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0pLnJvb3QseWM9Z2Mucm9vdCxtYz0wLHdjPVtdLHR8fGdlKCl9LF9jPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LGk9ZSxhPSJkZWZhdWx0IixvPSJkZWZhdWx0IjsiWypdIj09PXQmJihyPSJzdGFydCIrICsrbWMsYT0ic3RhcnQiKSwiWypdIj09PWUmJihpPSJlbmQiK21jLG89ImVuZCIpLGJjKHIsYSksYmMoaSxvKSx5Yy5yZWxhdGlvbnMucHVzaCh7aWQxOnIsaWQyOmksdGl0bGU6dWUuc2FuaXRpemVUZXh0KG4sWHQoKSl9KX0seGM9ZnVuY3Rpb24odCxlKXt2YXIgbj15Yy5zdGF0ZXNbdF0scj1lOyI6Ij09PXJbMF0mJihyPXIuc3Vic3RyKDEpLnRyaW0oKSksbi5kZXNjcmlwdGlvbnMucHVzaCh1ZS5zYW5pdGl6ZVRleHQocixYdCgpKSl9LGtjPTAsd2M9W10sVGM9IlRCIjtjb25zdCBFYz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe2N1LnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gWHQoKS5zdGF0ZX0sYWRkU3RhdGU6YmMsY2xlYXI6dmMsZ2V0U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHljLnN0YXRlc1t0XX0sZ2V0U3RhdGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHljLnN0YXRlc30sZ2V0UmVsYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHljLnJlbGF0aW9uc30sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB3Y30sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFRjfSxhZGRSZWxhdGlvbjpfYyxnZXREaXZpZGVySWQ6ZnVuY3Rpb24oKXtyZXR1cm4iZGl2aWRlci1pZC0iKyArK2tjfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7VGM9dH0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/dC5zdWJzdHIoMikudHJpbSgpOnQudHJpbSgpfSxsaW5lVHlwZTp7TElORTowLERPVFRFRF9MSU5FOjF9LHJlbGF0aW9uVHlwZTp7QUdHUkVHQVRJT046MCxFWFRFTlNJT046MSxDT01QT1NJVElPTjoyLERFUEVOREVOQ1k6M30sbG9nRG9jdW1lbnRzOmZ1bmN0aW9uKCl7by5pbmZvKCJEb2N1bWVudHMgPSAiLGdjKX0sZ2V0Um9vdERvYzpmdW5jdGlvbigpe3JldHVybiBkY30sc2V0Um9vdERvYzpmdW5jdGlvbih0KXtvLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLHQpLGRjPXR9LGdldFJvb3REb2NWMjpmdW5jdGlvbigpe3JldHVybiBwYyh7aWQ6InJvb3QifSx7aWQ6InJvb3QiLGRvYzpkY30sITApLHtpZDoicm9vdCIsZG9jOmRjfX0sZXh0cmFjdDpmdW5jdGlvbih0KXt2YXIgZTtlPXQuZG9jP3QuZG9jOnQsby5pbmZvKGUpLHZjKCEwKSxvLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmYmModC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJl9jKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfSxnZXRBY2NUaXRsZTptZSxzZXRBY2NUaXRsZTp5ZSxnZXRBY2NEZXNjcmlwdGlvbjp2ZSxzZXRBY2NEZXNjcmlwdGlvbjpiZX07dmFyIENjPXt9O2Z1bmN0aW9uIFNjKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEFjLE1jPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPVh0KCkuc3RhdGUucGFkZGluZyxhPTIqWHQoKS5zdGF0ZS5wYWRkaW5nLG89dC5ub2RlKCkuZ2V0QkJveCgpLHM9by53aWR0aCxjPW8ueCxsPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsWHQoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLFh0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLHU9bC5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK2EsaD1NYXRoLm1heCh1LHMpO2g9PT1zJiYoaCs9YSk7dmFyIGY9dC5ub2RlKCkuZ2V0QkJveCgpO2UuZG9jLHI9Yy1pLHU+cyYmKHI9KHMtaCkvMitpKSxNYXRoLmFicyhjLWYueCk8aSYmdT5zJiYocj1jLSh1LXMpLzIpO3ZhciBkPTEtWHQoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLGQpLmF0dHIoImNsYXNzIixuPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K1h0KCkuc3RhdGUudGV4dEhlaWdodCtYdCgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksbC5hdHRyKCJ4IixyK2kpLHU8PXMmJmwuYXR0cigieCIsYysoaC1hKS8yLXUvMitpKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLFh0KCkuc3RhdGUudGl0bGVTaGlmdC1YdCgpLnN0YXRlLnRleHRIZWlnaHQtWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IiwzKlh0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLFh0KCkuc3RhdGUucmFkaXVzKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLFh0KCkuc3RhdGUudGl0bGVTaGlmdC1YdCgpLnN0YXRlLnRleHRIZWlnaHQtWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCszKzIqWHQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsWHQoKS5zdGF0ZS5yYWRpdXMpLHR9LE5jPWZ1bmN0aW9uKHQsZSl7ZS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTt2YXIgbj1lLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLFh0KCkuc3RhdGUucGFkZGluZykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0wLGE9ci5hcHBlbmQoInRleHQiKTthLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksYS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7dmFyIG8scz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxjPShzPXMucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQodWUubGluZUJyZWFrUmVnZXgpLGw9MS4yNSpYdCgpLnN0YXRlLm5vdGVNYXJnaW4sdT1mdW5jdGlvbih0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIFNjKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/U2ModCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KGMpO3RyeXtmb3IodS5zKCk7IShvPXUubigpKS5kb25lOyl7dmFyIGg9by52YWx1ZS50cmltKCk7aWYoaC5sZW5ndGg+MCl7dmFyIGY9YS5hcHBlbmQoInRzcGFuIik7Zi50ZXh0KGgpLDA9PT1sJiYobCs9Zi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCksaSs9bCxmLmF0dHIoIngiLDArWHQoKS5zdGF0ZS5ub3RlTWFyZ2luKSxmLmF0dHIoInkiLDAraSsxLjI1Klh0KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXt1LmUodCl9ZmluYWxseXt1LmYoKX1yZXR1cm57dGV4dFdpZHRoOmEubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0Oml9fSh0LDAsMCxlLmFwcGVuZCgiZyIpKSxpPXIudGV4dFdpZHRoLGE9ci50ZXh0SGVpZ2h0O3JldHVybiBuLmF0dHIoImhlaWdodCIsYSsyKlh0KCkuc3RhdGUubm90ZU1hcmdpbiksbi5hdHRyKCJ3aWR0aCIsaSsyKlh0KCkuc3RhdGUubm90ZU1hcmdpbiksbn0sT2M9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmlkLHI9e2lkOm4sbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxpPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLG4pLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpOyJzdGFydCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIsWHQoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLFh0KCkuc3RhdGUucGFkZGluZytYdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIsWHQoKS5zdGF0ZS5wYWRkaW5nK1h0KCkuc3RhdGUuc2l6ZVVuaXQpfShpKSwiZW5kIj09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsWHQoKS5zdGF0ZS5zaXplVW5pdCtYdCgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsWHQoKS5zdGF0ZS5wYWRkaW5nK1h0KCkuc3RhdGUuc2l6ZVVuaXQrWHQoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLFh0KCkuc3RhdGUucGFkZGluZytYdCgpLnN0YXRlLnNpemVVbml0K1h0KCkuc3RhdGUubWluaVBhZGRpbmcpLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLFh0KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixYdCgpLnN0YXRlLnBhZGRpbmcrWHQoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsWHQoKS5zdGF0ZS5wYWRkaW5nK1h0KCkuc3RhdGUuc2l6ZVVuaXQrMil9KGkpLCJmb3JrIiE9PWUudHlwZSYmImpvaW4iIT09ZS50eXBlfHxmdW5jdGlvbih0LGUpe3ZhciBuPVh0KCkuc3RhdGUuZm9ya1dpZHRoLHI9WHQoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGUucGFyZW50SWQpe3ZhciBpPW47bj1yLHI9aX10LmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIsbikuYXR0cigiaGVpZ2h0IixyKS5hdHRyKCJ4IixYdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLFh0KCkuc3RhdGUucGFkZGluZyl9KGksZSksIm5vdGUiPT09ZS50eXBlJiZOYyhlLm5vdGUudGV4dCxpKSwiZGl2aWRlciI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIsWHQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIsMipYdCgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCl9KGkpLCJkZWZhdWx0Ij09PWUudHlwZSYmMD09PWUuZGVzY3JpcHRpb25zLmxlbmd0aCYmZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixYdCgpLnN0YXRlLnRleHRIZWlnaHQrMipYdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsWHQoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFh0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCsyKlh0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCsyKlh0KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLFh0KCkuc3RhdGUucmFkaXVzKX0oaSxlKSwiZGVmYXVsdCI9PT1lLnR5cGUmJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipYdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLFh0KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLFh0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLFh0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpYdCgpLnN0YXRlLnBhZGRpbmcrWHQoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK1h0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqWHQoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KGUpO258fHIuYXR0cigiZHkiLFh0KCkuc3RhdGUudGV4dEhlaWdodCl9KGksdCxvKSxvPSExKSxhPSExfSkpO3ZhciBzPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFh0KCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLFh0KCkuc3RhdGUucGFkZGluZytyK1h0KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsWHQoKS5zdGF0ZS5wYWRkaW5nK3IrWHQoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGM9aS5ub2RlKCkuZ2V0QkJveCgpLGw9TWF0aC5tYXgoYy53aWR0aCxuLndpZHRoKTtzLmF0dHIoIngyIixsKzMqWHQoKS5zdGF0ZS5wYWRkaW5nKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFh0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbCsyKlh0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixjLmhlaWdodCtyKzIqWHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsWHQoKS5zdGF0ZS5yYWRpdXMpfShpLGUpO3ZhciBhLG89aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPW8ud2lkdGgrMipYdCgpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9by5oZWlnaHQrMipYdCgpLnN0YXRlLnBhZGRpbmcsYT1yLENjW25dPWEscn0sRGM9MCxCYz17fSxMYz1mdW5jdGlvbiB0KGUsbixyLGksYSxzLGMpe3ZhciB1LGg9bmV3KHlyKCkuR3JhcGgpKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSksZj0hMDtmb3IodT0wO3U8ZS5sZW5ndGg7dSsrKWlmKCJyZWxhdGlvbiI9PT1lW3VdLnN0bXQpe2Y9ITE7YnJlYWt9cj9oLnNldEdyYXBoKHtyYW5rZGlyOiJMUiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZXI6InRpZ2h0LXRyZWUiLHJhbmtzZXA6Zj8xOkFjLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpmPzE6NTAsaXNNdWx0aUdyYXBoOiEwfSk6aC5zZXRHcmFwaCh7cmFua2RpcjoiVEIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua3NlcDpmPzE6QWMuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmY/MTo1MCxyYW5rZXI6InRpZ2h0LXRyZWUiLGlzTXVsdGlHcmFwaDohMH0pLGguc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxjLmRiLmV4dHJhY3QoZSk7Zm9yKHZhciBkPWMuZGIuZ2V0U3RhdGVzKCkscD1jLmRiLmdldFJlbGF0aW9ucygpLGc9T2JqZWN0LmtleXMoZCkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgbT1kW2dbeV1dO3ImJihtLnBhcmVudElkPXIpO3ZhciBiPXZvaWQgMDtpZihtLmRvYyl7dmFyIHY9bi5hcHBlbmQoImciKS5hdHRyKCJpZCIsbS5pZCkuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7Yj10KG0uZG9jLHYsbS5pZCwhaSxhLHMsYyk7dmFyIF89KHY9TWModixtLGkpKS5ub2RlKCkuZ2V0QkJveCgpO2Iud2lkdGg9Xy53aWR0aCxiLmhlaWdodD1fLmhlaWdodCtBYy5wYWRkaW5nLzIsQmNbbS5pZF09e3k6QWMuY29tcG9zaXRUaXRsZVNpemV9fWVsc2UgYj1PYyhuLG0pO2lmKG0ubm90ZSl7dmFyIHg9e2Rlc2NyaXB0aW9uczpbXSxpZDptLmlkKyItbm90ZSIsbm90ZTptLm5vdGUsdHlwZToibm90ZSJ9LGs9T2Mobix4KTsibGVmdCBvZiI9PT1tLm5vdGUucG9zaXRpb24/KGguc2V0Tm9kZShiLmlkKyItbm90ZSIsayksaC5zZXROb2RlKGIuaWQsYikpOihoLnNldE5vZGUoYi5pZCxiKSxoLnNldE5vZGUoYi5pZCsiLW5vdGUiLGspKSxoLnNldFBhcmVudChiLmlkLGIuaWQrIi1ncm91cCIpLGguc2V0UGFyZW50KGIuaWQrIi1ub3RlIixiLmlkKyItZ3JvdXAiKX1lbHNlIGguc2V0Tm9kZShiLmlkLGIpfW8uZGVidWcoIkNvdW50PSIsaC5ub2RlQ291bnQoKSxoKTt2YXIgdz0wO3AuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU7dysrLG8uZGVidWcoIlNldHRpbmcgZWRnZSIsdCksaC5zZXRFZGdlKHQuaWQxLHQuaWQyLHtyZWxhdGlvbjp0LHdpZHRoOihlPXQudGl0bGUsZT9lLmxlbmd0aCpBYy5mb250U2l6ZUZhY3RvcjoxKSxoZWlnaHQ6QWMubGFiZWxIZWlnaHQqdWUuZ2V0Um93cyh0LnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK3cpfSkpLHByKCkubGF5b3V0KGgpLG8uZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIsaC5ub2RlcygpKTt2YXIgVD1uLm5vZGUoKTtoLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09aC5ub2RlKHQpPyhvLndhcm4oIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoaC5ub2RlKHQpKSksYS5zZWxlY3QoIiMiK1QuaWQrIiAjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaC5ub2RlKHQpLngtaC5ub2RlKHQpLndpZHRoLzIpKyIsIisoaC5ub2RlKHQpLnkrKEJjW3RdP0JjW3RdLnk6MCktaC5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSxhLnNlbGVjdCgiIyIrVC5pZCsiICMiK3QpLmF0dHIoImRhdGEteC1zaGlmdCIsaC5ub2RlKHQpLngtaC5ub2RlKHQpLndpZHRoLzIpLHMucXVlcnlTZWxlY3RvckFsbCgiIyIrVC5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6by5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShoLm5vZGUodCkpKX0pKTt2YXIgRT1ULmdldEJCb3goKTtoLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09aC5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoaC5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9KDAsbC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShsLmN1cnZlQmFzaXMpLGE9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixpKHIpKS5hdHRyKCJpZCIsImVkZ2UiK0RjKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKSxzPSIiO2lmKFh0KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgRWMucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBFYy5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgRWMucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBFYy5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fShFYy5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSkrIkVuZCkiKSx2b2lkIDAhPT1uLnRpdGxlKXtmb3IodmFyIGM9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx1PUFuLmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxoPXUueCxmPXUueSxkPXVlLmdldFJvd3Mobi50aXRsZSkscD0wLGc9W10seT0wLG09MCxiPTA7Yjw9ZC5sZW5ndGg7YisrKXt2YXIgdj1jLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkW2JdKS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixmK3ApLF89di5ub2RlKCkuZ2V0QkJveCgpO2lmKHk9TWF0aC5tYXgoeSxfLndpZHRoKSxtPU1hdGgubWluKG0sXy54KSxvLmluZm8oXy54LGgsZitwKSwwPT09cCl7dmFyIHg9di5ub2RlKCkuZ2V0QkJveCgpO3A9eC5oZWlnaHQsby5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZil9Zy5wdXNoKHYpfXZhciBrPXAqZC5sZW5ndGg7aWYoZC5sZW5ndGg+MSl7dmFyIHc9KGQubGVuZ3RoLTEpKnAqLjU7Zy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmF0dHIoInkiLGYrZSpwLXcpfSkpLGs9cCpkLmxlbmd0aH12YXIgVD1jLm5vZGUoKS5nZXRCQm94KCk7Yy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGgteS8yLVh0KCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixmLWsvMi1YdCgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIix5K1h0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixrK1h0KCkuc3RhdGUucGFkZGluZyksby5pbmZvKFQpfURjKyt9KG4saC5lZGdlKHQpLGguZWRnZSh0KS5yZWxhdGlvbikpfSkpLEU9VC5nZXRCQm94KCk7dmFyIEM9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIEMud2lkdGg9RS53aWR0aCsyKkFjLnBhZGRpbmcsQy5oZWlnaHQ9RS5oZWlnaHQrMipBYy5wYWRkaW5nLG8uZGVidWcoIkRvYyByZW5kZXJlZCIsQyxoKSxDfTtjb25zdCBJYz17c2V0Q29uZjpmdW5jdGlvbigpe30sZHJhdzpmdW5jdGlvbih0LGUsbixyKXtBYz1YdCgpLnN0YXRlO3ZhciBpLGE9WHQoKS5zZWN1cml0eUxldmVsOyJzYW5kYm94Ij09PWEmJihpPSgwLGwuc2VsZWN0KSgiI2kiK2UpKTt2YXIgcz0ic2FuZGJveCI9PT1hPygwLGwuc2VsZWN0KShpLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOigwLGwuc2VsZWN0KSgiYm9keSIpLGM9InNhbmRib3giPT09YT9pLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O28uZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIHU9cy5zZWxlY3QoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7dS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpLG5ldyh5cigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciBoPXIuZGIuZ2V0Um9vdERvYygpO0xjKGgsdSx2b2lkIDAsITEscyxjLHIpO3ZhciBmPUFjLnBhZGRpbmcsZD11Lm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoKzIqZixnPWQuaGVpZ2h0KzIqZjtUbih1LDAsMS43NSpwLEFjLnVzZU1heFdpZHRoKSx1LmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChkLngtQWMucGFkZGluZywiICAiKS5jb25jYXQoZC55LUFjLnBhZGRpbmcsIiAiKStwKyIgIitnKSxNbihyLmRiLHUsZSl9fTt2YXIgRmM9e30sUmM9e30sUGM9ZnVuY3Rpb24odCxlLG4scil7aWYoInJvb3QiIT09bi5pZCl7dmFyIGk9InJlY3QiOyEwPT09bi5zdGFydCYmKGk9InN0YXJ0IiksITE9PT1uLnN0YXJ0JiYoaT0iZW5kIiksImRlZmF1bHQiIT09bi50eXBlJiYoaT1uLnR5cGUpLFJjW24uaWRdfHwoUmNbbi5pZF09e2lkOm4uaWQsc2hhcGU6aSxkZXNjcmlwdGlvbjp1ZS5zYW5pdGl6ZVRleHQobi5pZCxYdCgpKSxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tc3RhdGUifSksbi5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoUmNbbi5pZF0uZGVzY3JpcHRpb24pPyhSY1tuLmlkXS5zaGFwZT0icmVjdFdpdGhUaXRsZSIsUmNbbi5pZF0uZGVzY3JpcHRpb24ucHVzaChuLmRlc2NyaXB0aW9uKSk6UmNbbi5pZF0uZGVzY3JpcHRpb24ubGVuZ3RoPjA/KFJjW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIixSY1tuLmlkXS5kZXNjcmlwdGlvbj09PW4uaWQ/UmNbbi5pZF0uZGVzY3JpcHRpb249W24uZGVzY3JpcHRpb25dOlJjW24uaWRdLmRlc2NyaXB0aW9uPVtSY1tuLmlkXS5kZXNjcmlwdGlvbixuLmRlc2NyaXB0aW9uXSk6KFJjW24uaWRdLnNoYXBlPSJyZWN0IixSY1tuLmlkXS5kZXNjcmlwdGlvbj1uLmRlc2NyaXB0aW9uKSxSY1tuLmlkXS5kZXNjcmlwdGlvbj11ZS5zYW5pdGl6ZVRleHRPckFycmF5KFJjW24uaWRdLmRlc2NyaXB0aW9uLFh0KCkpKSwxPT09UmNbbi5pZF0uZGVzY3JpcHRpb24ubGVuZ3RoJiYicmVjdFdpdGhUaXRsZSI9PT1SY1tuLmlkXS5zaGFwZSYmKFJjW24uaWRdLnNoYXBlPSJyZWN0IiksIVJjW24uaWRdLnR5cGUmJm4uZG9jJiYoby5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsbi5pZCxZYyhuKSksUmNbbi5pZF0udHlwZT0iZ3JvdXAiLFJjW24uaWRdLmRpcj1ZYyhuKSxSY1tuLmlkXS5zaGFwZT0iZGl2aWRlciI9PT1uLnR5cGU/ImRpdmlkZXIiOiJyb3VuZGVkV2l0aFRpdGxlIixSY1tuLmlkXS5jbGFzc2VzPVJjW24uaWRdLmNsYXNzZXMrIiAiKyhyPyJzdGF0ZWRpYWdyYW0tY2x1c3RlciBzdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQiOiJzdGF0ZWRpYWdyYW0tY2x1c3RlciIpKTt2YXIgYT17bGFiZWxTdHlsZToiIixzaGFwZTpSY1tuLmlkXS5zaGFwZSxsYWJlbFRleHQ6UmNbbi5pZF0uZGVzY3JpcHRpb24sY2xhc3NlczpSY1tuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQsZGlyOlJjW24uaWRdLmRpcixkb21JZDoic3RhdGUtIituLmlkKyItIitqYyx0eXBlOlJjW24uaWRdLnR5cGUscGFkZGluZzoxNX07aWYobi5ub3RlKXt2YXIgcz17bGFiZWxTdHlsZToiIixzaGFwZToibm90ZSIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1ub3RlIixzdHlsZToiIixpZDpuLmlkKyItLS0tbm90ZS0iK2pjLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1ub3RlLSIramMsdHlwZTpSY1tuLmlkXS50eXBlLHBhZGRpbmc6MTV9LGM9e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGVHcm91cCIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6UmNbbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkKyItLS0tcGFyZW50Iixkb21JZDoic3RhdGUtIituLmlkKyItLS0tcGFyZW50LSIramMsdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07amMrKyx0LnNldE5vZGUobi5pZCsiLS0tLXBhcmVudCIsYyksdC5zZXROb2RlKHMuaWQscyksdC5zZXROb2RlKG4uaWQsYSksdC5zZXRQYXJlbnQobi5pZCxuLmlkKyItLS0tcGFyZW50IiksdC5zZXRQYXJlbnQocy5pZCxuLmlkKyItLS0tcGFyZW50Iik7dmFyIGw9bi5pZCx1PXMuaWQ7ImxlZnQgb2YiPT09bi5ub3RlLnBvc2l0aW9uJiYobD1zLmlkLHU9bi5pZCksdC5zZXRFZGdlKGwsdSx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixjbGFzc2VzOiJ0cmFuc2l0aW9uIG5vdGUtZWRnZSIsYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIn0pfWVsc2UgdC5zZXROb2RlKG4uaWQsYSl9ZSYmInJvb3QiIT09ZS5pZCYmKG8udHJhY2UoIlNldHRpbmcgbm9kZSAiLG4uaWQsIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50ICIsZS5pZCksdC5zZXRQYXJlbnQobi5pZCxlLmlkKSksbi5kb2MmJihvLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksemModCxuLG4uZG9jLCFyKSl9LGpjPTAsemM9ZnVuY3Rpb24odCxlLG4scil7by50cmFjZSgiaXRlbXMiLG4pLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoInN0YXRlIj09PW4uc3RtdHx8ImRlZmF1bHQiPT09bi5zdG10KVBjKHQsZSxuLHIpO2Vsc2UgaWYoInJlbGF0aW9uIj09PW4uc3RtdCl7UGModCxlLG4uc3RhdGUxLHIpLFBjKHQsZSxuLnN0YXRlMixyKTt2YXIgaT17aWQ6ImVkZ2UiK2pjLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsbGFiZWw6dWUuc2FuaXRpemVUZXh0KG4uZGVzY3JpcHRpb24sWHQoKSksYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJ0cmFuc2l0aW9uIn0sYT1uLnN0YXRlMS5pZCxvPW4uc3RhdGUyLmlkO3Quc2V0RWRnZShhLG8saSxqYyksamMrK319KSl9LFljPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZXx8IlRCIjtpZih0LmRvYylmb3IodmFyIHI9MDtyPHQuZG9jLmxlbmd0aDtyKyspe3ZhciBpPXQuZG9jW3JdOyJkaXIiPT09aS5zdG10JiYobj1pLnZhbHVlKX1yZXR1cm4gbn07Y29uc3QgVWM9e3NldENvbmY6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylGY1tlW25dXT10W2Vbbl1dfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8udHJhY2UoIkV4dHJhY3RpbmcgY2xhc3NlcyIpLGUuc2IuY2xlYXIoKSxlLnBhcnNlci5wYXJzZSh0KSxlLnNiLmdldENsYXNzZXMoKX0sZHJhdzpmdW5jdGlvbih0LGUsbixyKXtvLmluZm8oIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpIixlKSxSYz17fTt2YXIgaT1yLmRiLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PWkmJihpPSJMUiIpO3ZhciBhPVh0KCkuc3RhdGUscz1hLm5vZGVTcGFjaW5nfHw1MCxjPWEucmFua1NwYWNpbmd8fDUwLHU9WHQoKS5zZWN1cml0eUxldmVsO28uaW5mbyhyLmRiLmdldFJvb3REb2NWMigpKSxyLmRiLmV4dHJhY3Qoci5kYi5nZXRSb290RG9jVjIoKSksby5pbmZvKHIuZGIuZ2V0Um9vdERvY1YyKCkpO3ZhciBoLGY9bmV3KHlyKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6WWMoci5kYi5nZXRSb290RG9jVjIoKSksbm9kZXNlcDpzLHJhbmtzZXA6YyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtQYyhmLHZvaWQgMCxyLmRiLmdldFJvb3REb2NWMigpLCEwKSwic2FuZGJveCI9PT11JiYoaD0oMCxsLnNlbGVjdCkoIiNpIitlKSk7dmFyIGQ9InNhbmRib3giPT09dT8oMCxsLnNlbGVjdCkoaC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTooMCxsLnNlbGVjdCkoImJvZHkiKSxwPSgic2FuZGJveCI9PT11P2gubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsZC5zZWxlY3QoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSkpLGc9ZC5zZWxlY3QoIiMiK2UrIiBnIik7eWkoZyxmLFsiYmFyYiJdLCJzdGF0ZWRpYWdyYW0iLGUpO3ZhciB5PXAubm9kZSgpLmdldEJCb3goKSxtPXkud2lkdGgrMTYsYj15LmhlaWdodCsxNjtwLmF0dHIoImNsYXNzIiwic3RhdGVkaWFncmFtIik7dmFyIHY9cC5ub2RlKCkuZ2V0QkJveCgpO1RuKHAsMCxtLGEudXNlTWF4V2lkdGgpO3ZhciBfPSIiLmNvbmNhdCh2LngtOCwiICIpLmNvbmNhdCh2LnktOCwiICIpLmNvbmNhdChtLCIgIikuY29uY2F0KGIpO28uZGVidWcoInZpZXdCb3ggIi5jb25jYXQoXykpLHAuYXR0cigidmlld0JveCIsXyk7Zm9yKHZhciB4PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIHc9eFtrXSxUPXcuZ2V0QkJveCgpLEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtFLnNldEF0dHJpYnV0ZSgicngiLDApLEUuc2V0QXR0cmlidXRlKCJyeSIsMCksRS5zZXRBdHRyaWJ1dGUoIndpZHRoIixULndpZHRoKSxFLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixULmhlaWdodCksdy5pbnNlcnRCZWZvcmUoRSx3LmZpcnN0Q2hpbGQpfU1uKHIuZGIscCxlKX19O2Z1bmN0aW9uICRjKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBXYyh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBXYyh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1djKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gV2ModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgcWM9IiIsSGM9W10sVmM9W10sR2M9W10sWGM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ITAsZT0wO2U8R2MubGVuZ3RoO2UrKylHY1tlXS5wcm9jZXNzZWQsdD10JiZHY1tlXS5wcm9jZXNzZWQ7cmV0dXJuIHR9O2NvbnN0IFpjPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7Y3UucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBYdCgpLmpvdXJuZXl9LGNsZWFyOmZ1bmN0aW9uKCl7SGMubGVuZ3RoPTAsVmMubGVuZ3RoPTAscWM9IiIsR2MubGVuZ3RoPTAsZ2UoKX0sc2V0RGlhZ3JhbVRpdGxlOl9lLGdldERpYWdyYW1UaXRsZTp4ZSxzZXRBY2NUaXRsZTp5ZSxnZXRBY2NUaXRsZTptZSxzZXRBY2NEZXNjcmlwdGlvbjpiZSxnZXRBY2NEZXNjcmlwdGlvbjp2ZSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe3FjPXQsSGMucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gSGN9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVhjKCksZT0wOyF0JiZlPDEwMDspdD1YYygpLGUrKztyZXR1cm4gVmMucHVzaC5hcHBseShWYyxHYyksVmN9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLHI9MCxpPVtdOzE9PT1uLmxlbmd0aD8ocj1OdW1iZXIoblswXSksaT1bXSk6KHI9TnVtYmVyKG5bMF0pLGk9blsxXS5zcGxpdCgiLCIpKTt2YXIgYT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkpLG89e3NlY3Rpb246cWMsdHlwZTpxYyxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6cn07R2MucHVzaChvKX0sYWRkVGFza09yZzpmdW5jdGlvbih0KXt2YXIgZT17c2VjdGlvbjpxYyx0eXBlOnFjLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O1ZjLnB1c2goZSl9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiB0PVtdLFZjLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGVvcGxlJiZ0LnB1c2guYXBwbHkodCwkYyhlLnBlb3BsZSkpfSkpLCRjKG5ldyBTZXQodCkpLnNvcnQoKTt2YXIgdH19O3ZhciBRYz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSxLYz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gbi5hdHRyKCJjeCIsZS5jeCksbi5hdHRyKCJjeSIsZS5jeSksbi5hdHRyKCJjbGFzcyIsImFjdG9yLSIrZS5wb3MpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigiciIsZS5yKSx2b2lkIDAhPT1uLmNsYXNzJiZuLmF0dHIoImNsYXNzIixuLmNsYXNzKSx2b2lkIDAhPT1lLnRpdGxlJiZuLmFwcGVuZCgidGl0bGUiKS50ZXh0KGUudGl0bGUpLG59LEpjPS0xLHRsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLGEsbyxzLGMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaStvLzIrNSkuc3R5bGUoImZvbnQtY29sb3IiLGMpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMsbCl7Zm9yKHZhciB1PWMudGFza0ZvbnRTaXplLGg9Yy50YXNrRm9udEZhbWlseSxmPXQuc3BsaXQoLzxiclxzKlwvPz4vZ2kpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZCp1LXUqKGYubGVuZ3RoLTEpLzIsZz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpKS5hdHRyKCJmaWxsIixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIix1KS5zdHlsZSgiZm9udC1mYW1pbHkiLGgpO2cuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSxnLmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscihnLHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsbCl7dmFyIHU9bi5hcHBlbmQoInN3aXRjaCIpLGg9dS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodCksZSh0LHUsaSxhLG8scyxjLGwpLHIoaCxjKX1mdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuIGluIGUpbiBpbiBlJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCk7Y29uc3QgZWw9S2Msbmw9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJnIiksaT17eDowLHk6MCx3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9O2kueD1lLngsaS55PWUueSxpLmZpbGw9ZS5maWxsLGkud2lkdGg9bi53aWR0aCxpLmhlaWdodD1uLmhlaWdodCxpLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW0saS5yeD0zLGkucnk9MyxRYyhyLGkpLHRsKG4pKGUudGV4dCxyLGkueCxpLnksaS53aWR0aCxpLmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bX0sbixlLmNvbG91cil9LHJsPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS50ZXh0LnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIiAiKSxyPXQuYXBwZW5kKCJ0ZXh0Iik7ci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLmF0dHIoImNsYXNzIiwibGVnZW5kIiksci5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSx2b2lkIDAhPT1lLmNsYXNzJiZyLmF0dHIoImNsYXNzIixlLmNsYXNzKTt2YXIgaT1yLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrMiplLnRleHRNYXJnaW4pLGkudGV4dChuKSxyfSxpbD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG89ZS54K24ud2lkdGgvMixzPXQuYXBwZW5kKCJnIik7SmMrKyxzLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrSmMpLmF0dHIoIngxIixvKS5hdHRyKCJ5MSIsZS55KS5hdHRyKCJ4MiIsbykuYXR0cigieTIiLDQ1MCkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHI9cyxpPXtjeDpvLGN5OjMwMCszMCooNS1lLnNjb3JlKSxzY29yZTplLnNjb3JlfSxyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGkuY3gpLmF0dHIoImN5IixpLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSwoYT1yLmFwcGVuZCgiZyIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4LTUpLmF0dHIoImN5IixpLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxhLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGkuY3grNSkuYXR0cigiY3kiLGkuY3ktNSkuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLGkuc2NvcmU+Mz9mdW5jdGlvbih0KXt2YXIgZT0oMCxsLmFyYykoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjMpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmN4KyIsIisoaS5jeSsyKSsiKSIpfShhKTppLnNjb3JlPDM/ZnVuY3Rpb24odCl7dmFyIGU9KDAsbC5hcmMpKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjUpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmN4KyIsIisoaS5jeSs3KSsiKSIpfShhKTpmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixpLmN4LTUpLmF0dHIoInkxIixpLmN5KzcpLmF0dHIoIngyIixpLmN4KzUpLmF0dHIoInkyIixpLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9KGEpO3ZhciBjPXt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH07Yy54PWUueCxjLnk9ZS55LGMuZmlsbD1lLmZpbGwsYy53aWR0aD1uLndpZHRoLGMuaGVpZ2h0PW4uaGVpZ2h0LGMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0sYy5yeD0zLGMucnk9MyxRYyhzLGMpO3ZhciB1PWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmFjdG9yc1t0XS5jb2xvcixyPXtjeDp1LGN5OmUueSxyOjcsZmlsbDpuLHN0cm9rZToiIzAwMCIsdGl0bGU6dCxwb3M6ZS5hY3RvcnNbdF0ucG9zaXRpb259O0tjKHMsciksdSs9MTB9KSksdGwobikoZS50YXNrLHMsYy54LGMueSxjLndpZHRoLGMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LG4sZS5jb2xvdXIpfTt2YXIgYWw9e30sb2w9WHQoKS5qb3VybmV5LHNsPVh0KCkuam91cm5leS5sZWZ0TWFyZ2luLGNsPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1YdCgpLmpvdXJuZXksYT10aGlzLG89MDt0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bysrO3ZhciBjPWEuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbysxO2EudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KSxhLnVwZGF0ZVZhbChjbC5kYXRhLCJzdGFydHgiLHQtYyppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoY2wuZGF0YSwic3RvcHgiLG4rYyppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKGNsLmRhdGEsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChjbC5kYXRhLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoY2wuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChjbC5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKGNsLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChjbC5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LGxsPW9sLnNlY3Rpb25GaWxscyx1bD1vbC5zZWN0aW9uQ29sb3Vycztjb25zdCBobD17c2V0Q29uZjpmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtvbFtlXT10W2VdfSkpfSxkcmF3OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVh0KCkuam91cm5leTtyLmRiLmNsZWFyKCksci5wYXJzZXIucGFyc2UodCsiXG4iKTt2YXIgYSxvPVh0KCkuc2VjdXJpdHlMZXZlbDsic2FuZGJveCI9PT1vJiYoYT0oMCxsLnNlbGVjdCkoIiNpIitlKSk7dmFyIHM9InNhbmRib3giPT09bz8oMCxsLnNlbGVjdCkoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTooMCxsLnNlbGVjdCkoImJvZHkiKTtjbC5pbml0KCk7dmFyIGM9cy5zZWxlY3QoIiMiK2UpO2MuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpO3ZhciB1PXIuZGIuZ2V0VGFza3MoKSxoPXIuZGIuZ2V0RGlhZ3JhbVRpdGxlKCksZj1yLmRiLmdldEFjdG9ycygpO2Zvcih2YXIgZCBpbiBhbClkZWxldGUgYWxbZF07dmFyIHA9MDtmLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FsW3RdPXtjb2xvcjppLmFjdG9yQ29sb3Vyc1twJWkuYWN0b3JDb2xvdXJzLmxlbmd0aF0scG9zaXRpb246cH0scCsrfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPVh0KCkuam91cm5leSxuPTYwO09iamVjdC5rZXlzKGFsKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT1hbFtyXS5jb2xvcixhPXtjeDoyMCxjeTpuLHI6NyxmaWxsOmksc3Ryb2tlOiIjMDAwIixwb3M6YWxbcl0ucG9zaXRpb259O2VsKHQsYSk7dmFyIG89e3g6NDAseTpuKzcsZmlsbDoiIzY2NiIsdGV4dDpyLHRleHRNYXJnaW46NXxlLmJveFRleHRNYXJnaW59O3JsKHQsbyksbis9MjB9KSl9KGMpLGNsLmluc2VydCgwLDAsc2wsNTAqT2JqZWN0LmtleXMoYWwpLmxlbmd0aCksZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1YdCgpLmpvdXJuZXksaT0iIixhPW4rKDIqci5oZWlnaHQrci5kaWFncmFtTWFyZ2luWSksbz0wLHM9IiNDQ0MiLGM9ImJsYWNrIixsPTAsdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgaD1lW3VdO2lmKGkhPT1oLnNlY3Rpb24pe3M9bGxbbyVsbC5sZW5ndGhdLGw9byVsbC5sZW5ndGgsYz11bFtvJXVsLmxlbmd0aF07dmFyIGY9e3g6dSpyLnRhc2tNYXJnaW4rdSpyLndpZHRoK3NsLHk6NTAsdGV4dDpoLnNlY3Rpb24sZmlsbDpzLG51bTpsLGNvbG91cjpjfTtubCh0LGYsciksaT1oLnNlY3Rpb24sbysrfXZhciBkPWgucGVvcGxlLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYWxbZV0mJih0W2VdPWFsW2VdKSx0fSkse30pO2gueD11KnIudGFza01hcmdpbit1KnIud2lkdGgrc2wsaC55PWEsaC53aWR0aD1yLmRpYWdyYW1NYXJnaW5YLGguaGVpZ2h0PXIuZGlhZ3JhbU1hcmdpblksaC5jb2xvdXI9YyxoLmZpbGw9cyxoLm51bT1sLGguYWN0b3JzPWQsaWwodCxoLHIpLGNsLmluc2VydChoLngsaC55LGgueCtoLndpZHRoK3IudGFza01hcmdpbiw0NTApfX0oYyx1LDApO3ZhciBnPWNsLmdldEJvdW5kcygpO2gmJmMuYXBwZW5kKCJ0ZXh0IikudGV4dChoKS5hdHRyKCJ4IixzbCkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjUpO3ZhciB5PWcuc3RvcHktZy5zdGFydHkrMippLmRpYWdyYW1NYXJnaW5ZLG09c2wrZy5zdG9weCsyKmkuZGlhZ3JhbU1hcmdpblg7VG4oYywwLG0saS51c2VNYXhXaWR0aCksYy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsc2wpLmF0dHIoInkxIiw0KmkuaGVpZ2h0KS5hdHRyKCJ4MiIsbS1zbC00KS5hdHRyKCJ5MiIsNCppLmhlaWdodCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTt2YXIgYj1oPzcwOjA7Yy5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoZy5zdGFydHgsIiAtMjUgIikuY29uY2F0KG0sIiAiKS5jb25jYXQoeStiKSksYy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpLGMuYXR0cigiaGVpZ2h0Iix5K2IrMjUpLE1uKHIuZGIsYyxlKX19O3ZhciBmbD1uKDk3NjMpLGRsPW4ubihmbCkscGw9e2M0OntkYjpQZSxyZW5kZXJlcjpabixwYXJzZXI6SGUoKSxpbml0OmZ1bmN0aW9uKHQpe1puLnNldENvbmYodC5jNCl9fSxjbGFzczp7ZGI6ZnIscmVuZGVyZXI6U3IscGFyc2VyOnhpKCksaW5pdDpmdW5jdGlvbih0KXt0LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLGZyLmNsZWFyKCl9fSxlcnJvcjp7ZGI6e30scmVuZGVyZXI6QmkscGFyc2VyOntwYXJzZXI6e3l5Ont9fSxwYXJzZTpmdW5jdGlvbigpe319LGluaXQ6ZnVuY3Rpb24oKXt9fSxjbGFzc0RpYWdyYW06e2RiOmZyLHJlbmRlcmVyOnZpLHBhcnNlcjp4aSgpLGluaXQ6ZnVuY3Rpb24odCl7dC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxmci5jbGVhcigpfX0sZXI6e2RiOkVpLHJlbmRlcmVyOk9pLHBhcnNlcjpJaSgpfSxmbG93Y2hhcnQ6e2RiOmxhLHJlbmRlcmVyOk5hLHBhcnNlcjpGYSgpLGluaXQ6ZnVuY3Rpb24odCl7TmEuc2V0Q29uZih0LmZsb3djaGFydCksdC5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsbGEuY2xlYXIoKSxsYS5zZXRHZW4oImdlbi0xIil9fSwiZmxvd2NoYXJ0LXYyIjp7ZGI6bGEscmVuZGVyZXI6TGEscGFyc2VyOkZhKCksaW5pdDpmdW5jdGlvbih0KXtMYS5zZXRDb25mKHQuZmxvd2NoYXJ0KSx0LmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxsYS5jbGVhcigpLGxhLnNldEdlbigiZ2VuLTIiKX19LGdhbnR0OntkYjpnbyxyZW5kZXJlcjpibyxwYXJzZXI6X28oKSxpbml0OmZ1bmN0aW9uKHQpe2JvLnNldENvbmYodC5nYW50dCl9fSxpbmZvOntkYjp3byxyZW5kZXJlcjpUbyxwYXJzZXI6Q28oKX0scGllOntkYjpPbyxyZW5kZXJlcjpMbyxwYXJzZXI6QW8oKX0scmVxdWlyZW1lbnQ6e2RiOlVvLHJlbmRlcmVyOlFvLHBhcnNlcjpGbygpfSxzZXF1ZW5jZTp7ZGI6YnMscmVuZGVyZXI6Y2MscGFyc2VyOnRzKCksaW5pdDpmdW5jdGlvbih0KXt0LnNlcXVlbmNlLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLHQuc2VxdWVuY2VEaWFncmFtJiYoY2Muc2V0Q29uZihPYmplY3QuYXNzaWduKHQuc2VxdWVuY2UsdC5zZXF1ZW5jZURpYWdyYW0pKSxjb25zb2xlLmVycm9yKCJgbWVybWFpZCBjb25maWcuc2VxdWVuY2VEaWFncmFtYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb25maWcuc2VxdWVuY2VgLiBQbGVhc2UgdXBkYXRlIHlvdXIgbWVybWFpZCBjb25maWcuIikpLGJzLnNldFdyYXAodC53cmFwKSxjYy5zZXRDb25mKHQuc2VxdWVuY2UpfX0sc3RhdGU6e2RiOkVjLHJlbmRlcmVyOkljLHBhcnNlcjp1YygpLGluaXQ6ZnVuY3Rpb24odCl7dC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxFYy5jbGVhcigpfX0sc3RhdGVEaWFncmFtOntkYjpFYyxyZW5kZXJlcjpVYyxwYXJzZXI6dWMoKSxpbml0OmZ1bmN0aW9uKHQpe3QuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsRWMuY2xlYXIoKX19LGpvdXJuZXk6e2RiOlpjLHJlbmRlcmVyOmhsLHBhcnNlcjpkbCgpLGluaXQ6ZnVuY3Rpb24odCl7aGwuc2V0Q29uZih0LmpvdXJuZXkpLFpjLmNsZWFyKCl9fX0sZ2w9ZnVuY3Rpb24oKXtyZXR1cm4gcGx9O2Z1bmN0aW9uIHlsKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBtbCh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj95bChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2JsKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTp5bChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiBibCh0LGUsbil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1uLHR9dmFyIHZsPVh0KCkuZ2l0R3JhcGgubWFpbkJyYW5jaE5hbWUsX2w9WHQoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIseGw9e30sa2w9bnVsbCx3bD17fTt3bFt2bF09e25hbWU6dmwsb3JkZXI6X2x9O3ZhciBUbD17fTtUbFt2bF09a2w7dmFyIEVsPXZsLENsPSJMUiIsU2w9MDtmdW5jdGlvbiBBbCgpe3JldHVybiB5bih7bGVuZ3RoOjd9KX12YXIgTWw9e30sTmw9ZnVuY3Rpb24odCl7aWYodD11ZS5zYW5pdGl6ZVRleHQodCxYdCgpKSx2b2lkIDA9PT1UbFt0XSl7dmFyIGU9bmV3IEVycm9yKCdUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJyt0KyciKScpO3Rocm93IGUuaGFzaD17dGV4dDoiY2hlY2tvdXQgIit0LHRva2VuOiJjaGVja291dCAiK3QsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciYnJhbmNoICcrdCsnIiddfSxlfXZhciBuPVRsW0VsPXRdO2tsPXhsW25dfTtmdW5jdGlvbiBPbCh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIERsKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLHM9W24sZS5pZCxlLnNlcV07Zm9yKHZhciBjIGluIFRsKVRsW2NdPT09ZS5pZCYmcy5wdXNoKGMpO2lmKG8uZGVidWcocy5qb2luKCIgIikpLGUucGFyZW50cyYmMj09ZS5wYXJlbnRzLmxlbmd0aCl7dmFyIGw9eGxbZS5wYXJlbnRzWzBdXTtPbCh0LGUsbCksdC5wdXNoKHhsW2UucGFyZW50c1sxXV0pfWVsc2V7aWYoMD09ZS5wYXJlbnRzLmxlbmd0aClyZXR1cm47dmFyIHU9eGxbZS5wYXJlbnRzXTtPbCh0LGUsdSl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxEbCh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIEJsPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoeGwpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHhsW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe28uZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcS1lLnNlcX0pKSx0fSxMbD17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH07Y29uc3QgSWw9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXtjdS5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIFh0KCkuZ2l0R3JhcGh9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXtDbD10fSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQpe28uZGVidWcoIm9wdGlvbnMgc3RyIix0KSx0PSh0PXQmJnQudHJpbSgpKXx8Int9Ijt0cnl7TWw9SlNPTi5wYXJzZSh0KX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGdpdEdyYXBoIG9wdGlvbnMiLHQubWVzc2FnZSl9fSxnZXRPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIE1sfSxjb21taXQ6ZnVuY3Rpb24odCxlLG4scil7by5kZWJ1ZygiRW50ZXJpbmcgY29tbWl0OiIsdCxlLG4sciksZT11ZS5zYW5pdGl6ZVRleHQoZSxYdCgpKSx0PXVlLnNhbml0aXplVGV4dCh0LFh0KCkpLHI9dWUuc2FuaXRpemVUZXh0KHIsWHQoKSk7dmFyIGk9e2lkOmV8fFNsKyItIitBbCgpLG1lc3NhZ2U6dCxzZXE6U2wrKyx0eXBlOm58fExsLk5PUk1BTCx0YWc6cnx8IiIscGFyZW50czpudWxsPT1rbD9bXTpba2wuaWRdLGJyYW5jaDpFbH07a2w9aSx4bFtpLmlkXT1pLFRsW0VsXT1pLmlkLG8uZGVidWcoImluIHB1c2hDb21taXQgIitpLmlkKX0sYnJhbmNoOmZ1bmN0aW9uKHQsZSl7aWYodD11ZS5zYW5pdGl6ZVRleHQodCxYdCgpKSx2b2lkIDAhPT1UbFt0XSl7dmFyIG49bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJyt0KyciKScpO3Rocm93IG4uaGFzaD17dGV4dDoiYnJhbmNoICIrdCx0b2tlbjoiYnJhbmNoICIrdCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK3QrJyInXX0sbn1UbFt0XT1udWxsIT1rbD9rbC5pZDpudWxsLHdsW3RdPXtuYW1lOnQsb3JkZXI6ZT9wYXJzZUludChlLDEwKTpudWxsfSxObCh0KSxvLmRlYnVnKCJpbiBjcmVhdGVCcmFuY2giKX0sbWVyZ2U6ZnVuY3Rpb24odCxlLG4scil7dD11ZS5zYW5pdGl6ZVRleHQodCxYdCgpKSxlPXVlLnNhbml0aXplVGV4dChlLFh0KCkpO3ZhciBpPXhsW1RsW0VsXV0sYT14bFtUbFt0XV07aWYoRWw9PT10KXt2YXIgcz1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDYW5ub3QgbWVyZ2UgYSBicmFuY2ggdG8gaXRzZWxmJyk7dGhyb3cgcy5oYXNoPXt0ZXh0OiJtZXJnZSAiK3QsdG9rZW46Im1lcmdlICIrdCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImJyYW5jaCBhYmMiXX0sc31pZih2b2lkIDA9PT1pfHwhaSl7dmFyIGM9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrRWwrIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IGMuaGFzaD17dGV4dDoibWVyZ2UgIit0LHRva2VuOiJtZXJnZSAiK3QsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0sY31pZih2b2lkIDA9PT1UbFt0XSl7dmFyIGw9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJyt0KyIpIGRvZXMgbm90IGV4aXN0Iik7dGhyb3cgbC5oYXNoPXt0ZXh0OiJtZXJnZSAiK3QsdG9rZW46Im1lcmdlICIrdCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImJyYW5jaCAiK3RdfSxsfWlmKHZvaWQgMD09PWF8fCFhKXt2YXIgdT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK3QrIikgaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyB1Lmhhc2g9e3RleHQ6Im1lcmdlICIrdCx0b2tlbjoibWVyZ2UgIit0LGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsnImNvbW1pdCInXX0sdX1pZihpPT09YSl7dmFyIGg9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IGguaGFzaD17dGV4dDoibWVyZ2UgIit0LHRva2VuOiJtZXJnZSAiK3QsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LGh9aWYoZSYmdm9pZCAwIT09eGxbZV0pe3ZhciBmPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIENvbW1pdCB3aXRoIGlkOicrZSsiIGFscmVhZHkgZXhpc3RzLCB1c2UgZGlmZmVyZW50IGN1c3RvbSBJZCIpO3Rocm93IGYuaGFzaD17dGV4dDoibWVyZ2UgIit0K2UrbityLHRva2VuOiJtZXJnZSAiK3QrZStuK3IsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJtZXJnZSAiK3QrIiAiK2UrIl9VTklRVUUgIituKyIgIityXX0sZn12YXIgZD17aWQ6ZXx8U2wrIi0iK0FsKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrRWwsc2VxOlNsKysscGFyZW50czpbbnVsbD09a2w/bnVsbDprbC5pZCxUbFt0XV0sYnJhbmNoOkVsLHR5cGU6TGwuTUVSR0UsY3VzdG9tVHlwZTpuLGN1c3RvbUlkOiEhZSx0YWc6cnx8IiJ9O2tsPWQseGxbZC5pZF09ZCxUbFtFbF09ZC5pZCxvLmRlYnVnKFRsKSxvLmRlYnVnKCJpbiBtZXJnZUJyYW5jaCIpfSxjaGVycnlQaWNrOmZ1bmN0aW9uKHQsZSl7aWYodD11ZS5zYW5pdGl6ZVRleHQodCxYdCgpKSxlPXVlLnNhbml0aXplVGV4dChlLFh0KCkpLCF0fHx2b2lkIDA9PT14bFt0XSl7dmFyIG49bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTt0aHJvdyBuLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIit0KyIgIitlLHRva2VuOiJjaGVycnlQaWNrICIrdCsiICIrZSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxufXZhciByPXhsW3RdLGk9ci5icmFuY2g7aWYoci50eXBlPT09TGwuTUVSR0Upe3ZhciBhPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBzaG91bGQgbm90IGJlIGEgbWVyZ2UgY29tbWl0Jyk7dGhyb3cgYS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIrdCsiICIrZSx0b2tlbjoiY2hlcnJ5UGljayAiK3QrIiAiK2UsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sYX1pZighZXx8dm9pZCAwPT09eGxbZV0pe2lmKGk9PT1FbCl7dmFyIHM9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBzLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIit0KyIgIitlLHRva2VuOiJjaGVycnlQaWNrICIrdCsiICIrZSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxzfXZhciBjPXhsW1RsW0VsXV07aWYodm9pZCAwPT09Y3x8IWMpe3ZhciBsPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnktcGljayIuIEN1cnJlbnQgYnJhbmNoICgnK0VsKyIpaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBsLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIit0KyIgIitlLHRva2VuOiJjaGVycnlQaWNrICIrdCsiICIrZSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxsfXZhciB1PXtpZDpTbCsiLSIrQWwoKSxtZXNzYWdlOiJjaGVycnktcGlja2VkICIrcisiIGludG8gIitFbCxzZXE6U2wrKyxwYXJlbnRzOltudWxsPT1rbD9udWxsOmtsLmlkLHIuaWRdLGJyYW5jaDpFbCx0eXBlOkxsLkNIRVJSWV9QSUNLLHRhZzoiY2hlcnJ5LXBpY2s6IityLmlkfTtrbD11LHhsW3UuaWRdPXUsVGxbRWxdPXUuaWQsby5kZWJ1ZyhUbCksby5kZWJ1ZygiaW4gY2hlZXJ5UGljayIpfX0sY2hlY2tvdXQ6TmwscHJldHR5UHJpbnQ6ZnVuY3Rpb24oKXtvLmRlYnVnKHhsKSxEbChbQmwoKVswXV0pfSxjbGVhcjpmdW5jdGlvbigpe3hsPXt9LGtsPW51bGw7dmFyIHQ9WHQoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxlPVh0KCkuZ2l0R3JhcGgubWFpbkJyYW5jaE9yZGVyOyhUbD17fSlbdF09bnVsbCwod2w9e30pW3RdPXtuYW1lOnQsb3JkZXI6ZX0sRWw9dCxTbD0wLGdlKCl9LGdldEJyYW5jaGVzQXNPYmpBcnJheTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHdsKS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPT10Lm9yZGVyP3Q6bWwobWwoe30sdCkse30se29yZGVyOnBhcnNlRmxvYXQoIjAuIi5jb25jYXQoZSksMTApfSl9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5vcmRlci1lLm9yZGVyfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dC5uYW1lfX0pKX0sZ2V0QnJhbmNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4gVGx9LGdldENvbW1pdHM6ZnVuY3Rpb24oKXtyZXR1cm4geGx9LGdldENvbW1pdHNBcnJheTpCbCxnZXRDdXJyZW50QnJhbmNoOmZ1bmN0aW9uKCl7cmV0dXJuIEVsfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gQ2x9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4ga2x9LHNldEFjY1RpdGxlOnllLGdldEFjY1RpdGxlOm1lLGdldEFjY0Rlc2NyaXB0aW9uOnZlLHNldEFjY0Rlc2NyaXB0aW9uOmJlLGNvbW1pdFR5cGU6TGx9O3ZhciBGbD17fSxSbD17fSxQbD17fSxqbD1bXSx6bD0wLFlsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1YdCgpLmdpdEdyYXBoLGk9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1idWxsZXRzIiksYT10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVscyIpLG89MDtPYmplY3Qua2V5cyhlKS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLnNlcS1lW25dLnNlcX0pKS5mb3JFYWNoKChmdW5jdGlvbih0LHMpe3ZhciBjPWVbdF0sbD1SbFtjLmJyYW5jaF0ucG9zLHU9bysxMDtpZihuKXt2YXIgaCxmPXZvaWQgMCE9PWMuY3VzdG9tVHlwZSYmIiIhPT1jLmN1c3RvbVR5cGU/Yy5jdXN0b21UeXBlOmMudHlwZTtzd2l0Y2goZil7Y2FzZSAwOmRlZmF1bHQ6aD0iY29tbWl0LW5vcm1hbCI7YnJlYWs7Y2FzZSAxOmg9ImNvbW1pdC1yZXZlcnNlIjticmVhaztjYXNlIDI6aD0iY29tbWl0LWhpZ2hsaWdodCI7YnJlYWs7Y2FzZSAzOmg9ImNvbW1pdC1tZXJnZSI7YnJlYWs7Y2FzZSA0Omg9ImNvbW1pdC1jaGVycnktcGljayJ9aWYoMj09PWYpe3ZhciBkPWkuYXBwZW5kKCJyZWN0Iik7ZC5hdHRyKCJ4Iix1LTEwKSxkLmF0dHIoInkiLGwtMTApLGQuYXR0cigiaGVpZ2h0IiwyMCksZC5hdHRyKCJ3aWR0aCIsMjApLGQuYXR0cigiY2xhc3MiLCJjb21taXQgIi5jb25jYXQoYy5pZCwiIGNvbW1pdC1oaWdobGlnaHQiKS5jb25jYXQoUmxbYy5icmFuY2hdLmluZGV4JTgsIiAiKS5jb25jYXQoaCwiLW91dGVyIikpLGkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsdS02KS5hdHRyKCJ5IixsLTYpLmF0dHIoImhlaWdodCIsMTIpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiY2xhc3MiLCJjb21taXQgIi5jb25jYXQoYy5pZCwiIGNvbW1pdCIpLmNvbmNhdChSbFtjLmJyYW5jaF0uaW5kZXglOCwiICIpLmNvbmNhdChoLCItaW5uZXIiKSl9ZWxzZSBpZig0PT09ZilpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHUpLmF0dHIoImN5IixsKS5hdHRyKCJyIiwxMCkuYXR0cigiY2xhc3MiLCJjb21taXQgIi5jb25jYXQoYy5pZCwiICIpLmNvbmNhdChoKSksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4Iix1LTMpLmF0dHIoImN5IixsKzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLCJjb21taXQgIi5jb25jYXQoYy5pZCwiICIpLmNvbmNhdChoKSksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4Iix1KzMpLmF0dHIoImN5IixsKzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLCJjb21taXQgIi5jb25jYXQoYy5pZCwiICIpLmNvbmNhdChoKSksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdSszKS5hdHRyKCJ5MSIsbCsxKS5hdHRyKCJ4MiIsdSkuYXR0cigieTIiLGwtNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIiwiY29tbWl0ICIuY29uY2F0KGMuaWQsIiAiKS5jb25jYXQoaCkpLGkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHUtMykuYXR0cigieTEiLGwrMSkuYXR0cigieDIiLHUpLmF0dHIoInkyIixsLTUpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsImNvbW1pdCAiLmNvbmNhdChjLmlkLCIgIikuY29uY2F0KGgpKTtlbHNle3ZhciBwPWkuYXBwZW5kKCJjaXJjbGUiKTtpZihwLmF0dHIoImN4Iix1KSxwLmF0dHIoImN5IixsKSxwLmF0dHIoInIiLDM9PT1jLnR5cGU/OToxMCkscC5hdHRyKCJjbGFzcyIsImNvbW1pdCAiLmNvbmNhdChjLmlkLCIgY29tbWl0IikuY29uY2F0KFJsW2MuYnJhbmNoXS5pbmRleCU4KSksMz09PWYpe3ZhciBnPWkuYXBwZW5kKCJjaXJjbGUiKTtnLmF0dHIoImN4Iix1KSxnLmF0dHIoImN5IixsKSxnLmF0dHIoInIiLDYpLGcuYXR0cigiY2xhc3MiLCJjb21taXQgIi5jb25jYXQoaCwiICIpLmNvbmNhdChjLmlkLCIgY29tbWl0IikuY29uY2F0KFJsW2MuYnJhbmNoXS5pbmRleCU4KSl9MT09PWYmJmkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIi5jb25jYXQodS01LCIsIikuY29uY2F0KGwtNSwiTCIpLmNvbmNhdCh1KzUsIiwiKS5jb25jYXQobCs1LCJNIikuY29uY2F0KHUtNSwiLCIpLmNvbmNhdChsKzUsIkwiKS5jb25jYXQodSs1LCIsIikuY29uY2F0KGwtNSkpLmF0dHIoImNsYXNzIiwiY29tbWl0ICIuY29uY2F0KGgsIiAiKS5jb25jYXQoYy5pZCwiIGNvbW1pdCIpLmNvbmNhdChSbFtjLmJyYW5jaF0uaW5kZXglOCkpfX1pZihQbFtjLmlkXT17eDpvKzEwLHk6bH0sbil7aWYoNCE9PWMudHlwZSYmKGMuY3VzdG9tSWQmJjM9PT1jLnR5cGV8fDMhPT1jLnR5cGUpJiZyLnNob3dDb21taXRMYWJlbCl7dmFyIHk9YS5hcHBlbmQoImciKSxtPXkuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIiksYj15LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG8pLmF0dHIoInkiLGwrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChjLmlkKSx2PWIubm9kZSgpLmdldEJCb3goKTtpZihtLmF0dHIoIngiLG8rMTAtdi53aWR0aC8yLTIpLmF0dHIoInkiLGwrMTMuNSkuYXR0cigid2lkdGgiLHYud2lkdGgrNCkuYXR0cigiaGVpZ2h0Iix2LmhlaWdodCs0KSxiLmF0dHIoIngiLG8rMTAtdi53aWR0aC8yKSxyLnJvdGF0ZUNvbW1pdExhYmVsKXt2YXIgXz0tNy41LSh2LndpZHRoKzEwKS8yNSo5LjUseD0xMCt2LndpZHRoLzI1KjguNTt5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIiwgIit4KyIpIHJvdGF0ZSgtNDUsICIrbysiLCAiK2wrIikiKX19aWYoYy50YWcpe3ZhciBrPWEuaW5zZXJ0KCJwb2x5Z29uIiksdz1hLmFwcGVuZCgiY2lyY2xlIiksVD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGwtMTYpLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsIikudGV4dChjLnRhZyksRT1ULm5vZGUoKS5nZXRCQm94KCk7VC5hdHRyKCJ4IixvKzEwLUUud2lkdGgvMik7dmFyIEM9RS5oZWlnaHQvMixTPWwtMTkuMjtrLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsIlxuICAgICAgICAgICIuY29uY2F0KG8tRS53aWR0aC8yLTIsIiwiKS5jb25jYXQoUysyLCJcbiAgICAgICAgICAiKS5jb25jYXQoby1FLndpZHRoLzItMiwiLCIpLmNvbmNhdChTLTIsIlxuICAgICAgICAgICIpLmNvbmNhdChvKzEwLUUud2lkdGgvMi00LCIsIikuY29uY2F0KFMtQy0yLCJcbiAgICAgICAgICAiKS5jb25jYXQobysxMCtFLndpZHRoLzIrNCwiLCIpLmNvbmNhdChTLUMtMiwiXG4gICAgICAgICAgIikuY29uY2F0KG8rMTArRS53aWR0aC8yKzQsIiwiKS5jb25jYXQoUytDKzIsIlxuICAgICAgICAgICIpLmNvbmNhdChvKzEwLUUud2lkdGgvMi00LCIsIikuY29uY2F0KFMrQysyKSksdy5hdHRyKCJjeCIsby1FLndpZHRoLzIrMikuYXR0cigiY3kiLFMpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpfX0obys9NTApPnpsJiYoemw9byl9KSl9LFVsPWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpPXJ8fDAsYT1lK01hdGguYWJzKGUtbikvMjtpZihpPjUpcmV0dXJuIGE7Zm9yKHZhciBvPSEwLHM9MDtzPGpsLmxlbmd0aDtzKyspTWF0aC5hYnMoamxbc10tYSk8MTAmJihvPSExKTtyZXR1cm4gbz8oamwucHVzaChhKSxhKTp0KGUsbi1NYXRoLmFicyhlLW4pLzUsaSsxKX07Y29uc3QgJGw9e2RyYXc6ZnVuY3Rpb24odCxlLG4scil7Umw9e30sUGw9e30sRmw9e30semw9MCxqbD1bXTt2YXIgaT1YdCgpLGE9WHQoKS5naXRHcmFwaDtvLmRlYnVnKCJpbiBnaXRncmFwaCByZW5kZXJlciIsdCsiXG4iLCJpZDoiLGUsbiksRmw9ci5kYi5nZXRDb21taXRzKCk7dmFyIHM9ci5kYi5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKSxjPTA7cy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe1JsW3QubmFtZV09e3BvczpjLGluZGV4OmV9LGMrPTUwKyhhLnJvdGF0ZUNvbW1pdExhYmVsPzQwOjApfSkpO3ZhciB1PSgwLGwuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtNbihyLmRiLHUsZSksWWwodSxGbCwhMSksYS5zaG93QnJhbmNoZXMmJmZ1bmN0aW9uKHQsZSl7dmFyIG49WHQoKS5naXRHcmFwaCxyPXQuYXBwZW5kKCJnIik7ZS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciBpPWUlOCxhPVJsW3QubmFtZV0ucG9zLG89ci5hcHBlbmQoImxpbmUiKTtvLmF0dHIoIngxIiwwKSxvLmF0dHIoInkxIixhKSxvLmF0dHIoIngyIix6bCksby5hdHRyKCJ5MiIsYSksby5hdHRyKCJjbGFzcyIsImJyYW5jaCBicmFuY2giK2kpLGpsLnB1c2goYSk7dmFyIHM9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKSxuPVtdO249InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KHQpP3Q6W107Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksaS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksaS5zZXRBdHRyaWJ1dGUoIngiLCIwIiksaS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksaS50ZXh0Q29udGVudD1uW3JdLnRyaW0oKSxlLmFwcGVuZENoaWxkKGkpfXJldHVybiBlfSh0Lm5hbWUpLGM9ci5pbnNlcnQoInJlY3QiKSxsPXIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIitpKTtsLm5vZGUoKS5hcHBlbmRDaGlsZChzKTt2YXIgdT1zLmdldEJCb3goKTtjLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWxCa2cgbGFiZWwiK2kpLmF0dHIoInJ4Iiw0KS5hdHRyKCJyeSIsNCkuYXR0cigieCIsLXUud2lkdGgtNC0oITA9PT1uLnJvdGF0ZUNvbW1pdExhYmVsPzMwOjApKS5hdHRyKCJ5IiwtdS5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsdS53aWR0aCsxOCkuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCs0KSxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtdS53aWR0aC0xNC0oITA9PT1uLnJvdGF0ZUNvbW1pdExhYmVsPzMwOjApKSsiLCAiKyhhLXUuaGVpZ2h0LzItMSkrIikiKSxjLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKGEtdS5oZWlnaHQvMikrIikiKX0pKX0odSxzKSxmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYXJyb3dzIik7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgaT1lW3RdO2kucGFyZW50cyYmaS5wYXJlbnRzLmxlbmd0aD4wJiZpLnBhcmVudHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVh0KCksYT1QbFtlLmlkXSxvPVBsW24uaWRdLHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBQbFtlLmlkXSxQbFt0LmlkXSxPYmplY3Qua2V5cyhuKS5maWx0ZXIoKGZ1bmN0aW9uKHIpe3JldHVybiBuW3JdLmJyYW5jaD09PWUuYnJhbmNoJiZuW3JdLnNlcT50LnNlcSYmbltyXS5zZXE8ZS5zZXF9KSkubGVuZ3RoPjB9KGUsbixyKTtpLmFycm93TWFya2VyQWJzb2x1dGUmJih3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikucmVwbGFjZSgvXCkvZywiXFwpIik7dmFyIGMsbD0iIix1PSIiLGg9MCxmPTAsZD1SbFtuLmJyYW5jaF0uaW5kZXg7aWYocyl7bD0iQSAxMCAxMCwgMCwgMCwgMCwiLHU9IkEgMTAgMTAsIDAsIDAsIDEsIixoPTEwLGY9MTAsZD1SbFtuLmJyYW5jaF0uaW5kZXg7dmFyIHA9YS55PG8ueT9VbChhLnksby55KTpVbChvLnksYS55KTtjPWEueTxvLnk/Ik0gIi5jb25jYXQoYS54LCIgIikuY29uY2F0KGEueSwiIEwgIikuY29uY2F0KGEueCwiICIpLmNvbmNhdChwLWgsIiAiKS5jb25jYXQobCwiICIpLmNvbmNhdChhLngrZiwiICIpLmNvbmNhdChwLCIgTCAiKS5jb25jYXQoby54LWgsIiAiKS5jb25jYXQocCwiICIpLmNvbmNhdCh1LCIgIikuY29uY2F0KG8ueCwiICIpLmNvbmNhdChwK2YsIiBMICIpLmNvbmNhdChvLngsIiAiKS5jb25jYXQoby55KToiTSAiLmNvbmNhdChhLngsIiAiKS5jb25jYXQoYS55LCIgTCAiKS5jb25jYXQoYS54LCIgIikuY29uY2F0KHAraCwiICIpLmNvbmNhdCh1LCIgIikuY29uY2F0KGEueCtmLCIgIikuY29uY2F0KHAsIiBMICIpLmNvbmNhdChvLngtaCwiICIpLmNvbmNhdChwLCIgIikuY29uY2F0KGwsIiAiKS5jb25jYXQoby54LCIgIikuY29uY2F0KHAtZiwiIEwgIikuY29uY2F0KG8ueCwiICIpLmNvbmNhdChvLnkpfWVsc2UgYS55PG8ueSYmKGw9IkEgMjAgMjAsIDAsIDAsIDAsIixoPTIwLGY9MjAsZD1SbFtuLmJyYW5jaF0uaW5kZXgsYz0iTSAiLmNvbmNhdChhLngsIiAiKS5jb25jYXQoYS55LCIgTCAiKS5jb25jYXQoYS54LCIgIikuY29uY2F0KG8ueS1oLCIgIikuY29uY2F0KGwsIiAiKS5jb25jYXQoYS54K2YsIiAiKS5jb25jYXQoby55LCIgTCAiKS5jb25jYXQoby54LCIgIikuY29uY2F0KG8ueSkpLGEueT5vLnkmJihsPSJBIDIwIDIwLCAwLCAwLCAwLCIsaD0yMCxmPTIwLGQ9UmxbZS5icmFuY2hdLmluZGV4LGM9Ik0gIi5jb25jYXQoYS54LCIgIikuY29uY2F0KGEueSwiIEwgIikuY29uY2F0KG8ueC1oLCIgIikuY29uY2F0KGEueSwiICIpLmNvbmNhdChsLCIgIikuY29uY2F0KG8ueCwiICIpLmNvbmNhdChhLnktZiwiIEwgIikuY29uY2F0KG8ueCwiICIpLmNvbmNhdChvLnkpKSxhLnk9PT1vLnkmJihkPVJsW2UuYnJhbmNoXS5pbmRleCxjPSJNICIuY29uY2F0KGEueCwiICIpLmNvbmNhdChhLnksIiBMICIpLmNvbmNhdChhLngsIiAiKS5jb25jYXQoby55LWgsIiAiKS5jb25jYXQobCwiICIpLmNvbmNhdChhLngrZiwiICIpLmNvbmNhdChvLnksIiBMICIpLmNvbmNhdChvLngsIiAiKS5jb25jYXQoby55KSk7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixjKS5hdHRyKCJjbGFzcyIsImFycm93IGFycm93IitkJTgpfShuLGVbdF0saSxlKX0pKX0pKX0odSxGbCksWWwodSxGbCwhMCk7dmFyIGg9YS5kaWFncmFtUGFkZGluZyxmPXUubm9kZSgpLmdldEJCb3goKSxkPWYud2lkdGgrMipoLHA9Zi5oZWlnaHQrMipoO1RuKHUsMCxkLGkudXNlTWF4V2lkdGgpO3ZhciBnPSIiLmNvbmNhdChmLngtaC0oYS5zaG93QnJhbmNoZXMmJiEwPT09YS5yb3RhdGVDb21taXRMYWJlbD8zMDowKSwiICIpLmNvbmNhdChmLnktaCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApO3UuYXR0cigidmlld0JveCIsZyl9fTt2YXIgV2w9bigyNTUzKSxxbD1uLm4oV2wpO2NvbnN0IEhsPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoKC9eXHMqZ2l0R3JhcGgvKT8iZ2l0R3JhcGgiOm51bGx9LFZsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaSxhO3Q9ImdpdEdyYXBoIixlPXFsKCksbj1JbCxyPSRsLGk9dm9pZCAwLGE9SGwscGxbdF09e3BhcnNlcjplLGRiOm4scmVuZGVyZXI6cixpbml0Oml9LGZ1bmN0aW9uKHQsZSl7WGVbdF09e2RldGVjdG9yOmV9fSh0LGEpfTtmdW5jdGlvbiBHbCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fWZ1bmN0aW9uIFhsKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH12YXIgWmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuLHI7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksWGwodGhpcywidHlwZSIsImdyYXBoIiksWGwodGhpcywicGFyc2VyIix2b2lkIDApLFhsKHRoaXMsInJlbmRlcmVyIix2b2lkIDApLFhsKHRoaXMsImRiIix2b2lkIDApO3ZhciBpPWdsKCksYT1YdCgpO3RoaXMudHh0PWUsdGhpcy50eXBlPVplKGUsYSksby5kZWJ1ZygiVHlwZSAiK3RoaXMudHlwZSksdGhpcy5kYj1pW3RoaXMudHlwZV0uZGIsbnVsbD09PShuPShyPXRoaXMuZGIpLmNsZWFyKXx8dm9pZCAwPT09bnx8bi5jYWxsKHIpLHRoaXMucmVuZGVyZXI9aVt0aGlzLnR5cGVdLnJlbmRlcmVyLHRoaXMucGFyc2VyPWlbdGhpcy50eXBlXS5wYXJzZXIsdGhpcy5wYXJzZXIucGFyc2VyLnl5PXRoaXMuZGIsImZ1bmN0aW9uIj09dHlwZW9mIGlbdGhpcy50eXBlXS5pbml0JiYoaVt0aGlzLnR5cGVdLmluaXQoYSksby5kZWJ1ZygiSW5pdGlhbGl6ZWQgZGlhZ3JhbSAiK3RoaXMudHlwZSxhKSksdGhpcy50eHQ9dGhpcy50eHQrIlxuIix0aGlzLnBhcnNlci5wYXJzZXIueXkuZ3JhcGhUeXBlPXRoaXMudHlwZSx0aGlzLnBhcnNlci5wYXJzZXIueXkucGFyc2VFcnJvcj1mdW5jdGlvbih0LGUpe3Rocm93e3N0cjp0LGhhc2g6ZX19LHRoaXMucGFyc2VyLnBhcnNlKHRoaXMudHh0KX12YXIgZSxyO3JldHVybiBlPXQsKHI9W3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hMTt0cnl7dCs9IlxuIix0aGlzLmRiLmNsZWFyKCksdGhpcy5wYXJzZXIucGFyc2UodCl9Y2F0Y2godCl7aWYoZT0hMCwhbi5nLm1lcm1haWQucGFyc2VFcnJvcil0aHJvdyB0O251bGwhPXQuc3RyP24uZy5tZXJtYWlkLnBhcnNlRXJyb3IodC5zdHIsdC5oYXNoKTpuLmcubWVybWFpZC5wYXJzZUVycm9yKHQpfXJldHVybiFlfX0se2tleToiZ2V0UGFyc2VyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlcn19LHtrZXk6ImdldFR5cGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX19XSkmJkdsKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7Y29uc3QgUWw9WmwsS2w9ZnVuY3Rpb24odCl7cmV0dXJuImcuY2xhc3NHcm91cCB0ZXh0IHtcbiAgZmlsbDogIi5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxuICAudGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxufVxuXG4ubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbn1cbi5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuY2xhc3NUZXh0LCI7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHtcbiAgYmFja2dyb3VuZDogIikuY29uY2F0KHQubWFpbkJrZywiO1xufVxuXG4uY2xhc3NUaXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG4ubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG5cbi5kaXZpZGVyIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZTogMTtcbn1cblxuZy5jbGlja2FibGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmcuY2xhc3NHcm91cCByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbn1cblxuZy5jbGFzc0dyb3VwIGxpbmUge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uY2xhc3NMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uY2xhc3NMYWJlbCAubGFiZWwge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuLnJlbGF0aW9uIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xuICBmaWxsOiBub25lO1xufVxuXG4uZGFzaGVkLWxpbmV7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDM7XG59XG5cbiNjb21wb3NpdGlvblN0YXJ0LCAuY29tcG9zaXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2NvbXBvc2l0aW9uRW5kLCAuY29tcG9zaXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2RlcGVuZGVuY3lTdGFydCwgLmRlcGVuZGVuY3kge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2RlcGVuZGVuY3lTdGFydCwgLmRlcGVuZGVuY3kge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2V4dGVuc2lvblN0YXJ0LCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25FbmQsIC5leHRlbnNpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2FnZ3JlZ2F0aW9uU3RhcnQsIC5hZ2dyZWdhdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNsb2xsaXBvcFN0YXJ0LCAubG9sbGlwb3Age1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNsb2xsaXBvcEVuZCwgLmxvbGxpcG9wIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuIil9LEpsPWZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBjb2xvcjogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jbHVzdGVyQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jbHVzdGVyQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSx0dT1mdW5jdGlvbih0KXtyZXR1cm4iXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogIi5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICB9XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuc3RhdGVHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4udHJhbnNpdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7XG4gIGZpbGw6ICNlMGUwZTA7XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGUtbm90ZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuXG4gIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJhY2tncm91bmRDb2xvciwiO1xuICBvcGFjaXR5OiAwLjU7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVMYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgLmZvcmstam9pbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmlubmVyRW5kQmFja2dyb3VuZCwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmQsIjtcbiAgLy8gc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUJrZ3x8dC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cbi5ub2RlIHBvbHlnb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiOztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgcng6MDtcbiAgcnk6MDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4ubm90ZS1lZGdlIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogNTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHJ4OiAwO1xuICByeTogMDtcbn1cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG4uc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwge1xuICBjb2xvcjogcmVkOyAvLyAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cbiIpfTt2YXIgZXU9e2Zsb3djaGFydDpKbCwiZmxvd2NoYXJ0LXYyIjpKbCxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxhYmVsQm94IHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxhYmVsQm94Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJveEJrZ0NvbG9yLCI7XG4gIH1cblxuICAubGFiZWxUZXh0LCAubGFiZWxUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmxhYmVsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubG9vcFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wTGluZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxhYmVsQm94Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAubm90ZSB7XG4gICAgLy9zdHJva2U6ICNkZWNjOTM7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAuYWN0aXZhdGlvbjAge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZhdGlvbjEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZhdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5hY3RvclBvcHVwTWVudVBhbmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0b3JCa2csIjtcbiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDNweCA1cHggMnB4IHJnYigwIDAgMCAvIDAuNCkpO1xufVxuICAuYWN0b3ItbWFuIGxpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG4gIC5hY3Rvci1tYW4gY2lyY2xlLCBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yQm9yZGVyLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0b3JCa2csIjtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuIil9LGdhbnR0OmZ1bmN0aW9uKHQpe3JldHVybidcbiAgLm1lcm1haWQtbWFpbi1mb250IHtcbiAgICBmb250LWZhbWlseTogInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuICAuZXhjbHVkZS1yYW5nZSB7XG4gICAgZmlsbDogJy5jb25jYXQodC5leGNsdWRlQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uIHtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgb3BhY2l0eTogMC4yO1xuICB9XG5cbiAgLnNlY3Rpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zZWN0aW9uQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMiB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yMiwiO1xuICB9XG5cbiAgLnNlY3Rpb24xLFxuICAuc2VjdGlvbjMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFsdFNlY3Rpb25Ca2dDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUwIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMSB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlIHtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gICAgLy8gdGV4dC1oZWlnaHQ6IDE0cHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG5cbiAgLyogR3JpZCBhbmQgYXhpcyAqL1xuXG4gIC5ncmlkIC50aWNrIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmdyaWRDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gICAgdGV4dCB7XG4gICAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQgcGF0aCB7XG4gICAgc3Ryb2tlLXdpZHRoOiAwO1xuICB9XG5cblxuICAvKiBUb2RheSBsaW5lICovXG5cbiAgLnRvZGF5IHtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudG9kYXlMaW5lQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuXG5cbiAgLyogVGFzayBzdHlsaW5nICovXG5cbiAgLyogRGVmYXVsdCB0YXNrICovXG5cbiAgLnRhc2sge1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC50YXNrVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIC50YXNrVGV4dDpub3QoW2ZvbnQtc2l6ZV0pIHtcbiAgLy8gICBmb250LXNpemU6ICIpLmNvbmNhdCh0LmdhbnR0Rm9udFNpemUsIjtcbiAgLy8gfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiO1xuICAgIHRleHQtYW5jaG9yOiBlbmQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIH1cblxuICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovXG4gIC50YXNrLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC50YXNrVGV4dC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi9cblxuICAudGFza1RleHQwLFxuICAudGFza1RleHQxLFxuICAudGFza1RleHQyLFxuICAudGFza1RleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENvbG9yLCI7XG4gIH1cblxuICAudGFzazAsXG4gIC50YXNrMSxcbiAgLnRhc2syLFxuICAudGFzazMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudGFza0JvcmRlckNvbG9yLCI7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMCxcbiAgLnRhc2tUZXh0T3V0c2lkZTJcbiAge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0T3V0c2lkZUNvbG9yLCI7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMSxcbiAgLnRhc2tUZXh0T3V0c2lkZTMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0T3V0c2lkZUNvbG9yLCI7XG4gIH1cblxuXG4gIC8qIEFjdGl2ZSB0YXNrICovXG5cbiAgLmFjdGl2ZTAsXG4gIC5hY3RpdmUxLFxuICAuYWN0aXZlMixcbiAgLmFjdGl2ZTMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZlVGFza0JvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZlVGV4dDAsXG4gIC5hY3RpdmVUZXh0MSxcbiAgLmFjdGl2ZVRleHQyLFxuICAuYWN0aXZlVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogQ29tcGxldGVkIHRhc2sgKi9cblxuICAuZG9uZTAsXG4gIC5kb25lMSxcbiAgLmRvbmUyLFxuICAuZG9uZTMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuZG9uZVRhc2tCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZVRleHQwLFxuICAuZG9uZVRleHQxLFxuICAuZG9uZVRleHQyLFxuICAuZG9uZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovXG5cbiAgLmNyaXQwLFxuICAuY3JpdDEsXG4gIC5jcml0MixcbiAgLmNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmNyaXRCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5hY3RpdmVDcml0MCxcbiAgLmFjdGl2ZUNyaXQxLFxuICAuYWN0aXZlQ3JpdDIsXG4gIC5hY3RpdmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZUNyaXQwLFxuICAuZG9uZUNyaXQxLFxuICAuZG9uZUNyaXQyLFxuICAuZG9uZUNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlcztcbiAgfVxuXG4gIC5taWxlc3RvbmUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTtcbiAgfVxuXG4gIC5taWxlc3RvbmVUZXh0IHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgLmRvbmVDcml0VGV4dDAsXG4gIC5kb25lQ3JpdFRleHQxLFxuICAuZG9uZUNyaXRUZXh0MixcbiAgLmRvbmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5hY3RpdmVDcml0VGV4dDAsXG4gIC5hY3RpdmVDcml0VGV4dDEsXG4gIC5hY3RpdmVDcml0VGV4dDIsXG4gIC5hY3RpdmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC50aXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiICAgIDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuIil9LGNsYXNzRGlhZ3JhbTpLbCwiY2xhc3NEaWFncmFtLXYyIjpLbCxjbGFzczpLbCxzdGF0ZURpYWdyYW06dHUsc3RhdGU6dHUsZ2l0R3JhcGg6ZnVuY3Rpb24odCl7cmV0dXJuIlxuICAuY29tbWl0LWlkLFxuICAuY29tbWl0LW1zZyxcbiAgLmJyYW5jaC1sYWJlbCB7XG4gICAgZmlsbDogbGlnaHRncmV5O1xuICAgIGNvbG9yOiBsaWdodGdyZXk7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiAgIi5jb25jYXQoWzAsMSwyLDMsNCw1LDYsN10ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iXG4gICAgICAgIC5icmFuY2gtbGFiZWwiLmNvbmNhdChlLCIgeyBmaWxsOiAiKS5jb25jYXQodFsiZ2l0QnJhbmNoTGFiZWwiK2VdLCI7IH1cbiAgICAgICAgLmNvbW1pdCIpLmNvbmNhdChlLCIgeyBzdHJva2U6ICIpLmNvbmNhdCh0WyJnaXQiK2VdLCI7IGZpbGw6ICIpLmNvbmNhdCh0WyJnaXQiK2VdLCI7IH1cbiAgICAgICAgLmNvbW1pdC1oaWdobGlnaHQiKS5jb25jYXQoZSwiIHsgc3Ryb2tlOiAiKS5jb25jYXQodFsiZ2l0SW52IitlXSwiOyBmaWxsOiAiKS5jb25jYXQodFsiZ2l0SW52IitlXSwiOyB9XG4gICAgICAgIC5sYWJlbCIpLmNvbmNhdChlLCIgIHsgZmlsbDogIikuY29uY2F0KHRbImdpdCIrZV0sIjsgfVxuICAgICAgICAuYXJyb3ciKS5jb25jYXQoZSwiIHsgc3Ryb2tlOiAiKS5jb25jYXQodFsiZ2l0IitlXSwiOyB9XG4gICAgICAgICIpfSkpLmpvaW4oIlxuIiksIlxuXG4gIC5icmFuY2gge1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7XG4gIH1cbiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogIikuY29uY2F0KHQuY29tbWl0TGFiZWxGb250U2l6ZSwiOyBmaWxsOiAiKS5jb25jYXQodC5jb21taXRMYWJlbENvbG9yLCI7fVxuICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogIikuY29uY2F0KHQuY29tbWl0TGFiZWxGb250U2l6ZSwiOyBmaWxsOiAiKS5jb25jYXQodC5jb21taXRMYWJlbEJhY2tncm91bmQsIjsgb3BhY2l0eTogMC41OyB9XG4gIC50YWctbGFiZWwgeyBmb250LXNpemU6ICIpLmNvbmNhdCh0LnRhZ0xhYmVsRm9udFNpemUsIjsgZmlsbDogIikuY29uY2F0KHQudGFnTGFiZWxDb2xvciwiO31cbiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAiKS5jb25jYXQodC50YWdMYWJlbEJhY2tncm91bmQsIjsgc3Ryb2tlOiAiKS5jb25jYXQodC50YWdMYWJlbEJvcmRlciwiOyB9XG4gIC50YWctaG9sZSB7IGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiOyB9XG5cbiAgLmNvbW1pdC1tZXJnZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5wcmltYXJ5Q29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5wcmltYXJ5Q29sb3IsIjtcbiAgfVxuICAuY29tbWl0LXJldmVyc2Uge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucHJpbWFyeUNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucHJpbWFyeUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAzO1xuICB9XG4gIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHtcbiAgfVxuICAuY29tbWl0LWhpZ2hsaWdodC1pbm5lciB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5wcmltYXJ5Q29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5wcmltYXJ5Q29sb3IsIjtcbiAgfVxuXG4gIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfVxuICB9XG4iKX0saW5mbzpmdW5jdGlvbigpe3JldHVybiIifSxwaWU6ZnVuY3Rpb24odCl7cmV0dXJuIlxuICAucGllQ2lyY2xle1xuICAgIHN0cm9rZTogIi5jb25jYXQodC5waWVTdHJva2VDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aCA6ICIpLmNvbmNhdCh0LnBpZVN0cm9rZVdpZHRoLCI7XG4gICAgb3BhY2l0eSA6ICIpLmNvbmNhdCh0LnBpZU9wYWNpdHksIjtcbiAgfVxuICAucGllVGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQucGllVGl0bGVUZXh0U2l6ZSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnBpZVRpdGxlVGV4dENvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgfVxuICAuc2xpY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllU2VjdGlvblRleHRDb2xvciwiO1xuICAgIGZvbnQtc2l6ZToiKS5jb25jYXQodC5waWVTZWN0aW9uVGV4dFNpemUsIjtcbiAgICAvLyBmaWxsOiB3aGl0ZTtcbiAgfVxuICAubGVnZW5kIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnBpZUxlZ2VuZFRleHRDb2xvciwiO1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5waWVMZWdlbmRUZXh0U2l6ZSwiO1xuICB9XG4iKX0sZXI6ZnVuY3Rpb24odCl7cmV0dXJuIlxuICAuZW50aXR5Qm94IHtcbiAgICBmaWxsOiAiLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hPZGQge1xuICAgIGZpbGw6ICNmZmZmZmY7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIH1cblxuICAuYXR0cmlidXRlQm94RXZlbiB7XG4gICAgZmlsbDogI2YyZjJmMjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgICByZWN0IHtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgfVxuICB9XG5cbiAgICAucmVsYXRpb25zaGlwTGluZSB7XG4gICAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIH1cbiIpfSxlcnJvcjpmdW5jdGlvbigpe3JldHVybiIifSxqb3VybmV5OmZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICAgIGNvbG9yOiAiLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICB9XG4gIC5tb3V0aCB7XG4gICAgc3Ryb2tlOiAjNjY2O1xuICB9XG5cbiAgbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLmxlZ2VuZCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIzMzMztcbiAgfVxuICAubGFiZWwge1xuICAgIGNvbG9yOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLmZhY2Uge1xuICAgICIpLmNvbmNhdCh0LmZhY2VDb2xvcj8iZmlsbDogIi5jb25jYXQodC5mYWNlQ29sb3IpOiJmaWxsOiAjRkZGOERDIiwiO1xuICAgIHN0cm9rZTogIzk5OTtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYXJyb3doZWFkQ29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgcmVjdCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5jbHVzdGVyIHJlY3Qge1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgZGl2Lm1lcm1haWRUb29sdGlwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1heC13aWR0aDogMjAwcHg7XG4gICAgcGFkZGluZzogMnB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTApOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUxKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMik6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTMpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU0KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTYpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU3KToiIiwiO1xuICB9XG5cbiAgLmFjdG9yLTAge1xuICAgICIpLmNvbmNhdCh0LmFjdG9yMD8iZmlsbDogIi5jb25jYXQodC5hY3RvcjApOiIiLCI7XG4gIH1cbiAgLmFjdG9yLTEge1xuICAgICIpLmNvbmNhdCh0LmFjdG9yMT8iZmlsbDogIi5jb25jYXQodC5hY3RvcjEpOiIiLCI7XG4gIH1cbiAgLmFjdG9yLTIge1xuICAgICIpLmNvbmNhdCh0LmFjdG9yMj8iZmlsbDogIi5jb25jYXQodC5hY3RvcjIpOiIiLCI7XG4gIH1cbiAgLmFjdG9yLTMge1xuICAgICIpLmNvbmNhdCh0LmFjdG9yMz8iZmlsbDogIi5jb25jYXQodC5hY3RvcjMpOiIiLCI7XG4gIH1cbiAgLmFjdG9yLTQge1xuICAgICIpLmNvbmNhdCh0LmFjdG9yND8iZmlsbDogIi5jb25jYXQodC5hY3RvcjQpOiIiLCI7XG4gIH1cbiAgLmFjdG9yLTUge1xuICAgICIpLmNvbmNhdCh0LmFjdG9yNT8iZmlsbDogIi5jb25jYXQodC5hY3RvcjUpOiIiLCI7XG4gIH1cblxuICB9XG4iKX0scmVxdWlyZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIlxuXG4gIG1hcmtlciB7XG4gICAgZmlsbDogIi5jb25jYXQodC5yZWxhdGlvbkNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZWxhdGlvbkNvbG9yLCI7XG4gIH1cblxuICBtYXJrZXIuY3Jvc3Mge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIH1cblxuICBzdmcge1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5mb250U2l6ZSwiO1xuICB9XG5cbiAgLnJlcUJveCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucmVxdWlyZW1lbnRCYWNrZ3JvdW5kLCI7XG4gICAgZmlsbC1vcGFjaXR5OiAxMDAlO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVxdWlyZW1lbnRCb3JkZXJDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogIikuY29uY2F0KHQucmVxdWlyZW1lbnRCb3JkZXJTaXplLCI7XG4gIH1cbiAgXG4gIC5yZXFUaXRsZSwgLnJlcUxhYmVse1xuICAgIGZpbGw6ICAiKS5jb25jYXQodC5yZXF1aXJlbWVudFRleHRDb2xvciwiO1xuICB9XG4gIC5yZXFMYWJlbEJveCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucmVsYXRpb25MYWJlbEJhY2tncm91bmQsIjtcbiAgICBmaWxsLW9wYWNpdHk6IDEwMCU7XG4gIH1cblxuICAucmVxLXRpdGxlLWxpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVxdWlyZW1lbnRCb3JkZXJDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogIikuY29uY2F0KHQucmVxdWlyZW1lbnRCb3JkZXJTaXplLCI7XG4gIH1cbiAgLnJlbGF0aW9uc2hpcExpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgfVxuICAucmVsYXRpb25zaGlwTGFiZWwge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlbGF0aW9uTGFiZWxDb2xvciwiO1xuICB9XG5cbiIpfSxjNDpmdW5jdGlvbih0KXtyZXR1cm4iLnBlcnNvbiB7XG4gICAgc3Ryb2tlOiAiLmNvbmNhdCh0LnBlcnNvbkJvcmRlciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnBlcnNvbkJrZywiO1xuICB9XG4iKX19O2Z1bmN0aW9uIG51KHQpe3JldHVybiBudT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbnUodCl9dmFyIHJ1PSExLGl1PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuKGU9KGU9ZS5yZXBsYWNlKC/vrILCsMKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYjIn0pKSkucmVwbGFjZSgv76yCwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiJ9KSkpLnJlcGxhY2UoL8K2w58vZywoZnVuY3Rpb24oKXtyZXR1cm4iOyJ9KSl9LGF1PXt9O2Z1bmN0aW9uIG91KHQpe05hLnNldENvbmYodC5mbG93Y2hhcnQpLExhLnNldENvbmYodC5mbG93Y2hhcnQpLHZvaWQgMCE9PXQuc2VxdWVuY2VEaWFncmFtJiZjYy5zZXRDb25mKFEodC5zZXF1ZW5jZSx0LnNlcXVlbmNlRGlhZ3JhbSkpLGNjLnNldENvbmYodC5zZXF1ZW5jZSksYm8uc2V0Q29uZih0LmdhbnR0KSxJYy5zZXRDb25mKHQuc3RhdGUpLFVjLnNldENvbmYodC5zdGF0ZSksaGwuc2V0Q29uZih0LmpvdXJuZXkpLEJpLnNldENvbmYodC5jbGFzcyl9dmFyIHN1PU9iamVjdC5mcmVlemUoe3JlbmRlcjpmdW5jdGlvbih0LGUsbixyKXtydXx8KFZsKCkscnU9ITApLEt0KCk7dmFyIGk9ZS5yZXBsYWNlKC9cclxuPy9nLCJcbiIpLGE9QW4uZGV0ZWN0SW5pdChpKTthJiYoQ24oYSksUXQoYSkpO3ZhciBzPVh0KCk7by5kZWJ1ZyhzKSxlLmxlbmd0aD5zLm1heFRleHRTaXplJiYoaT0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIpO3ZhciBjLHUsaD0oMCxsLnNlbGVjdCkoImJvZHkiKTtpZih2b2lkIDAhPT1yKXtpZigic2FuZGJveCI9PT1zLnNlY3VyaXR5TGV2ZWwpe3ZhciBmPSgwLGwuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLCJpIit0KS5hdHRyKCJzdHlsZSIsIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IikuYXR0cigic2FuZGJveCIsIiIpOyhoPSgwLGwuc2VsZWN0KShmLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpKS5ub2RlKCkuc3R5bGUubWFyZ2luPTB9aWYoci5pbm5lckhUTUw9IiIsInNhbmRib3giPT09cy5zZWN1cml0eUxldmVsKXt2YXIgZD0oMCxsLnNlbGVjdCkocikuYXBwZW5kKCJpZnJhbWUiKS5hdHRyKCJpZCIsImkiK3QpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIik7KGg9KDAsbC5zZWxlY3QpKGQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkpLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGg9KDAsbC5zZWxlY3QpKHIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrcy5mb250RmFtaWx5KS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIix0KS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIikuYXBwZW5kKCJnIil9ZWxzZXt2YXIgcCxnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO2lmKGcmJmcucmVtb3ZlKCksKHA9InNhbmRib3giIT09cy5zZWN1cml0eUxldmVsP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkIit0KTpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaSIrdCkpJiZwLnJlbW92ZSgpLCJzYW5kYm94Ij09PXMuc2VjdXJpdHlMZXZlbCl7dmFyIHk9KDAsbC5zZWxlY3QpKCJib2R5IikuYXBwZW5kKCJpZnJhbWUiKS5hdHRyKCJpZCIsImkiK3QpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIik7KGg9KDAsbC5zZWxlY3QpKHkubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkpLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGg9KDAsbC5zZWxlY3QpKCJib2R5Iik7aC5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpfWk9aS5yZXBsYWNlKC9zdHlsZS4qOlxTKiMuKjsvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSl9KSkucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpLnJlcGxhY2UoLyNcdys7L2csKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7cmV0dXJuL15cKz9cZCskLy50ZXN0KGUpPyLvrILCsMKwIitlKyLCtsOfIjoi76yCwrAiK2UrIsK2w58ifSkpO3RyeXtjPW5ldyBRbChpKX1jYXRjaCh0KXtjPW5ldyBRbCgiZXJyb3IiKSx1PXR9dmFyIG09aC5zZWxlY3QoIiNkIit0KS5ub2RlKCksYj1jLnR5cGUsdj1tLmZpcnN0Q2hpbGQsXz12LmZpcnN0Q2hpbGQseD0iIjtpZih2b2lkIDAhPT1zLnRoZW1lQ1NTJiYoeCs9IlxuIi5jb25jYXQocy50aGVtZUNTUykpLHZvaWQgMCE9PXMuZm9udEZhbWlseSYmKHgrPSJcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAiLmNvbmNhdChzLmZvbnRGYW1pbHksIn0iKSksdm9pZCAwIT09cy5hbHRGb250RmFtaWx5JiYoeCs9IlxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAiLmNvbmNhdChzLmFsdEZvbnRGYW1pbHksIn0iKSksImZsb3djaGFydCI9PT1ifHwiZmxvd2NoYXJ0LXYyIj09PWJ8fCJncmFwaCI9PT1iKXt2YXIgaz1OYS5nZXRDbGFzc2VzKGksYyksRT1zLmh0bWxMYWJlbHN8fHMuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM7Zm9yKHZhciBDIGluIGspRT8oeCs9IlxuLiIuY29uY2F0KEMsIiA+ICogeyAiKS5jb25jYXQoa1tDXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHgrPSJcbi4iLmNvbmNhdChDLCIgc3BhbiB7ICIpLmNvbmNhdChrW0NdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikpOih4Kz0iXG4uIi5jb25jYXQoQywiIHBhdGggeyAiKS5jb25jYXQoa1tDXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHgrPSJcbi4iLmNvbmNhdChDLCIgcmVjdCB7ICIpLmNvbmNhdChrW0NdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikseCs9IlxuLiIuY29uY2F0KEMsIiBwb2x5Z29uIHsgIikuY29uY2F0KGtbQ10uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx4Kz0iXG4uIi5jb25jYXQoQywiIGVsbGlwc2UgeyAiKS5jb25jYXQoa1tDXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHgrPSJcbi4iLmNvbmNhdChDLCIgY2lyY2xlIHsgIikuY29uY2F0KGtbQ10uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSxrW0NdLnRleHRTdHlsZXMmJih4Kz0iXG4uIi5jb25jYXQoQywiIHRzcGFuIHsgIikuY29uY2F0KGtbQ10udGV4dFN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikpKX12YXIgUz1mdW5jdGlvbih0LGUpe3JldHVybiB3KFcoIiIuY29uY2F0KHQsInsiKS5jb25jYXQoZSwifSIpKSxUKX0oIiMiLmNvbmNhdCh0KSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIiB7XG4gICAgZm9udC1mYW1pbHk6ICIuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQobi50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovXG5cbiAgLmVycm9yLWljb24ge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmVycm9yQmtnQ29sb3IsIjtcbiAgfVxuICAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmVycm9yVGV4dENvbG9yLCI7XG4gIH1cblxuICAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuICAuZWRnZS10aGlja25lc3MtdGhpY2sge1xuICAgIHN0cm9rZS13aWR0aDogMy41cHhcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgLmVkZ2UtcGF0dGVybi1kYXNoZWR7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMztcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLWRvdHRlZCB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMjtcbiAgfVxuXG4gIC5tYXJrZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gIH1cbiAgLm1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdChuLmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdChuLmZvbnRTaXplLCI7XG4gIH1cblxuICAiKS5jb25jYXQoZXVbdF0obiksIlxuXG4gICIpLmNvbmNhdChlLCJcbiIpfShiLHgscy50aGVtZVZhcmlhYmxlcykpLEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtBLmlubmVySFRNTD0iIyIuY29uY2F0KHQsIiAiKStTLHYuaW5zZXJ0QmVmb3JlKEEsXyk7dHJ5e2MucmVuZGVyZXIuZHJhdyhpLHQsWCxjKX1jYXRjaChlKXt0aHJvdyBCaS5kcmF3KHQsWCksZX1oLnNlbGVjdCgnW2lkPSInLmNvbmNhdCh0LCciXScpKS5zZWxlY3RBbGwoImZvcmVpZ25vYmplY3QgPiAqIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIE09aC5zZWxlY3QoIiNkIit0KS5ub2RlKCkuaW5uZXJIVE1MO2lmKG8uZGVidWcoImNuZi5hcnJvd01hcmtlckFic29sdXRlIixzLmFycm93TWFya2VyQWJzb2x1dGUpLHMuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmImZhbHNlIiE9PXMuYXJyb3dNYXJrZXJBYnNvbHV0ZXx8InNhbmRib3giPT09cy5hcnJvd01hcmtlckFic29sdXRlfHwoTT1NLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoLio/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycsImciKSksTT0oTT1pdShNKSkucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLCJzYW5kYm94Ij09PXMuc2VjdXJpdHlMZXZlbCl7dmFyIE49aC5zZWxlY3QoIiNkIit0KyIgc3ZnIikubm9kZSgpLE89IjEwMCUiO04mJihPPU4udmlld0JveC5iYXNlVmFsLmhlaWdodCsicHgiKSxNPSc8aWZyYW1lIHN0eWxlPSJ3aWR0aDonLmNvbmNhdCgiMTAwJSIsIjtoZWlnaHQ6IikuY29uY2F0KE8sJztib3JkZXI6MDttYXJnaW46MDsiIHNyYz0iZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LCcpLmNvbmNhdChidG9hKCc8Ym9keSBzdHlsZT0ibWFyZ2luOjAiPicrTSsiPC9ib2R5PiIpLCciIHNhbmRib3g9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiPlxuICBUaGUg4oCcaWZyYW1l4oCdIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci5cbjwvaWZyYW1lPicpfWVsc2UibG9vc2UiIT09cy5zZWN1cml0eUxldmVsJiYoTT10ZSgpLnNhbml0aXplKE0se0FERF9UQUdTOlsiZm9yZWlnbm9iamVjdCJdLEFERF9BVFRSOlsiZG9taW5hbnQtYmFzZWxpbmUiXX0pKTtpZih2b2lkIDAhPT1uKXN3aXRjaChiKXtjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOm4oTSxsYS5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImdhbnR0IjpuKE0sZ28uYmluZEZ1bmN0aW9ucyk7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOm4oTSxmci5iaW5kRnVuY3Rpb25zKTticmVhaztkZWZhdWx0Om4oTSl9ZWxzZSBvLmRlYnVnKCJDQiA9IHVuZGVmaW5lZCEiKTt2cy5mb3JFYWNoKChmdW5jdGlvbih0KXt0KCl9KSksdnM9W107dmFyIEQ9InNhbmRib3giPT09cy5zZWN1cml0eUxldmVsPyIjaSIrdDoiI2QiK3QsQj0oMCxsLnNlbGVjdCkoRCkubm9kZSgpO2lmKG51bGwhPT1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5yZW1vdmUmJigwLGwuc2VsZWN0KShEKS5ub2RlKCkucmVtb3ZlKCksdSl0aHJvdyB1O3JldHVybiBNfSxwYXJzZTpmdW5jdGlvbih0LGUpe3J1fHwoVmwoKSxydT0hMCk7dmFyIG49ITE7dHJ5e3ZhciByPWV8fG5ldyBRbCh0KTtyZXR1cm4gci5kYi5jbGVhcigpLHIucGFyc2UodCl9Y2F0Y2godCl7aWYobj0hMCwhZnUucGFyc2VFcnJvcil0aHJvdyB0O251bGwhPXQuc3RyP2Z1LnBhcnNlRXJyb3IodC5zdHIsdC5oYXNoKTpmdS5wYXJzZUVycm9yKHQpfXJldHVybiFufSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbixyKXt0cnl7aWYodm9pZCAwIT09ZSlzd2l0Y2goZT1lLnRyaW0oKSxuKXtjYXNlIm9wZW5fZGlyZWN0aXZlIjphdT17fTticmVhaztjYXNlInR5cGVfZGlyZWN0aXZlIjphdS50eXBlPWUudG9Mb3dlckNhc2UoKTticmVhaztjYXNlImFyZ19kaXJlY3RpdmUiOmF1LmFyZ3M9SlNPTi5wYXJzZShlKTticmVhaztjYXNlImNsb3NlX2RpcmVjdGl2ZSI6KGZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goby5kZWJ1ZygiRGlyZWN0aXZlIHR5cGU9Ii5jb25jYXQoZS50eXBlLCIgd2l0aCBhcmdzOiIpLGUuYXJncyksZS50eXBlKXtjYXNlImluaXQiOmNhc2UiaW5pdGlhbGl6ZSI6WyJjb25maWciXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lLmFyZ3NbdF0mJigiZmxvd2NoYXJ0LXYyIj09PW4mJihuPSJmbG93Y2hhcnQiKSxlLmFyZ3Nbbl09ZS5hcmdzW3RdLGRlbGV0ZSBlLmFyZ3NbdF0pfSkpLG8uZGVidWcoInNhbml0aXplIGluIGhhbmRsZURpcmVjdGl2ZSIsZS5hcmdzKSxDbihlLmFyZ3MpLG8uZGVidWcoInNhbml0aXplIGluIGhhbmRsZURpcmVjdGl2ZSAoZG9uZSkiLGUuYXJncyksUXQoZS5hcmdzKTticmVhaztjYXNlIndyYXAiOmNhc2Uibm93cmFwIjp0JiZ0LnNldFdyYXAmJnQuc2V0V3JhcCgid3JhcCI9PT1lLnR5cGUpO2JyZWFrO2Nhc2UidGhlbWVDc3MiOm8ud2FybigidGhlbWVDc3MgZW5jb3VudGVyZWQiKTticmVhaztkZWZhdWx0Om8ud2FybigiVW5oYW5kbGVkIGRpcmVjdGl2ZTogc291cmNlOiAnJSV7Ii5jb25jYXQoZS50eXBlLCI6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShlLmFyZ3M/ZS5hcmdzOnt9KSwifSUlIiksZSl9fSkodCxhdSxyKSxhdT1udWxsfX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgc2VxdWVuY2VEaWFncmFtIGRpcmVjdGl2ZTogIi5jb25jYXQoZSwiIGppc29uIGNvbnRleHQ6ICIpLmNvbmNhdChuKSksby5lcnJvcih0Lm1lc3NhZ2UpfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsIT10JiZ0LmZvbnRGYW1pbHkmJihudWxsIT09KGU9dC50aGVtZVZhcmlhYmxlcykmJnZvaWQgMCE9PWUmJmUuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLGZ1bmN0aW9uKHQpe1V0PVEoe30sdCl9KHQpLG51bGwhPXQmJnQudGhlbWUmJkx0W3QudGhlbWVdP3QudGhlbWVWYXJpYWJsZXM9THRbdC50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXModC50aGVtZVZhcmlhYmxlcyk6dCYmKHQudGhlbWVWYXJpYWJsZXM9THQuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSk7dmFyIG49Im9iamVjdCI9PT1udSh0KT9mdW5jdGlvbih0KXtyZXR1cm4gV3Q9USh7fSwkdCksV3Q9UShXdCx0KSx0LnRoZW1lJiZMdFt0LnRoZW1lXSYmKFd0LnRoZW1lVmFyaWFibGVzPUx0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxIdD1WdChXdCxxdCksV3R9KHQpOkd0KCk7b3UobikscyhuLmxvZ0xldmVsKSxydXx8KFZsKCkscnU9ITApfSxnZXRDb25maWc6WHQsc2V0Q29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBRKEh0LHQpLFh0KCl9LGdldFNpdGVDb25maWc6R3QsdXBkYXRlU2l0ZUNvbmZpZzpmdW5jdGlvbih0KXtyZXR1cm4gV3Q9UShXdCx0KSxWdChXdCxxdCksV3R9LHJlc2V0OmZ1bmN0aW9uKCl7S3QoKX0sZ2xvYmFsUmVzZXQ6ZnVuY3Rpb24oKXtLdCgpLG91KFh0KCkpfSxkZWZhdWx0Q29uZmlnOiR0fSk7cyhYdCgpLmxvZ0xldmVsKSxLdChYdCgpKTtjb25zdCBjdT1zdTt2YXIgbHU9ZnVuY3Rpb24oKXt2YXIgdCxlLG49Y3UuZ2V0Q29uZmlnKCk7YXJndW1lbnRzLmxlbmd0aD49Mj8odm9pZCAwIT09YXJndW1lbnRzWzBdJiYoaHUuc2VxdWVuY2VDb25maWc9YXJndW1lbnRzWzBdKSx0PWFyZ3VtZW50c1sxXSk6dD1hcmd1bWVudHNbMF0sImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdPyhlPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOnZvaWQgMCE9PW4ubWVybWFpZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLm1lcm1haWQuY2FsbGJhY2s/KGU9bi5tZXJtYWlkLmNhbGxiYWNrLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOm8uZGVidWcoIk5vIENhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpLHQ9dm9pZCAwPT09dD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWVybWFpZCIpOiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpOnQgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZT9bdF06dCxvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGJlZm9yZTogIitodS5zdGFydE9uTG9hZCksdm9pZCAwIT09aHUuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGlubmVyOiAiK2h1LnN0YXJ0T25Mb2FkKSxjdS51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpodS5zdGFydE9uTG9hZH0pKSx2b2lkIDAhPT1odS5nYW50dENvbmZpZyYmY3UudXBkYXRlU2l0ZUNvbmZpZyh7Z2FudHQ6aHUuZ2FudHRDb25maWd9KTtmb3IodmFyIHIsaT1uZXcgQW4uaW5pdElkR2VuZXJhdG9yKG4uZGV0ZXJtaW5pc3RpY0lkcyxuLmRldGVybWluaXN0aWNJRFNlZWQpLGE9W10scz1mdW5jdGlvbihuKXtvLmluZm8oIlJlbmRlcmluZyBkaWFncmFtOiAiK3Rbbl0uaWQsbik7dmFyIHM9dFtuXTtpZihzLmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSlyZXR1cm4iY29udGludWUiO3Muc2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIsITApO3ZhciBjPSJtZXJtYWlkLSIuY29uY2F0KGkubmV4dCgpKTtyPXMuaW5uZXJIVE1MLHI9QW4uZW50aXR5RGVjb2RlKHIpLnRyaW0oKS5yZXBsYWNlKC88YnJccypcLz8+L2dpLCI8YnIvPiIpO3ZhciBsPUFuLmRldGVjdEluaXQocik7bCYmby5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGwpO3RyeXtjdS5yZW5kZXIoYyxyLChmdW5jdGlvbih0LG4pe3MuaW5uZXJIVE1MPXQsdm9pZCAwIT09ZSYmZShjKSxuJiZuKHMpfSkscyl9Y2F0Y2godCl7by53YXJuKCJDYXRjaGluZyBFcnJvciAoYm9vdHN0cmFwKSIsdCksImZ1bmN0aW9uIj09dHlwZW9mIGh1LnBhcnNlRXJyb3ImJmh1LnBhcnNlRXJyb3Ioe2Vycm9yOnQsc3RyOnQuc3RyLGhhc2g6dC5oYXNoLG1lc3NhZ2U6dC5zdHJ9KSxhLnB1c2goe2Vycm9yOnQsc3RyOnQuc3RyLGhhc2g6dC5oYXNoLG1lc3NhZ2U6dC5zdHJ9KX19LGM9MDtjPHQubGVuZ3RoO2MrKylzKGMpO2lmKGEubGVuZ3RoPjApdGhyb3cgYVswXX0sdXU9ZnVuY3Rpb24oKXtodS5zdGFydE9uTG9hZD9jdS5nZXRDb25maWcoKS5zdGFydE9uTG9hZCYmaHUuaW5pdCgpOnZvaWQgMD09PWh1LnN0YXJ0T25Mb2FkJiYoby5kZWJ1ZygiSW4gc3RhcnQsIG5vIGNvbmZpZyIpLGN1LmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZodS5pbml0KCkpfTsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKCl7dXUoKX0pLCExKTt2YXIgaHU9e3N0YXJ0T25Mb2FkOiEwLGh0bWxMYWJlbHM6ITAsZGlhZ3JhbXM6e30sbWVybWFpZEFQSTpjdSxwYXJzZTpudWxsIT1jdT9jdS5wYXJzZTpudWxsLHJlbmRlcjpudWxsIT1jdT9jdS5yZW5kZXI6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dHJ5e2x1LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfWNhdGNoKHQpe28ud2FybigiU3ludGF4IEVycm9yIHJlbmRlcmluZyIpLG8ud2Fybih0LnN0cil9fSxpbml0VGhyb3dzRXJyb3JzOmx1LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dC5tZXJtYWlkJiYodm9pZCAwIT09dC5tZXJtYWlkLnN0YXJ0T25Mb2FkJiYoaHUuc3RhcnRPbkxvYWQ9dC5tZXJtYWlkLnN0YXJ0T25Mb2FkKSx2b2lkIDAhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmKGh1Lmh0bWxMYWJlbHM9ImZhbHNlIiE9PXQubWVybWFpZC5odG1sTGFiZWxzJiYhMSE9PXQubWVybWFpZC5odG1sTGFiZWxzKSksY3UuaW5pdGlhbGl6ZSh0KX0sY29udGVudExvYWRlZDp1dSxzZXRQYXJzZUVycm9ySGFuZGxlcjpmdW5jdGlvbih0KXtodS5wYXJzZUVycm9yPXR9fTtjb25zdCBmdT1odX0sNDk0OToodCxlLG4pPT57dC5leHBvcnRzPXtncmFwaGxpYjpuKDY2MTQpLGRhZ3JlOm4oNjQ3OCksaW50ZXJzZWN0Om4oODExNCkscmVuZGVyOm4oNTc4NyksdXRpbDpuKDgzNTUpLHZlcnNpb246big1Njg5KX19LDkxNDQ6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7ZnVuY3Rpb24gaSh0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfXQuZXhwb3J0cz17ZGVmYXVsdDppLG5vcm1hbDppLHZlZTpmdW5jdGlvbih0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIEwgNCA1IHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfSx1bmRpcmVjdGVkOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgNSIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9fX0sNTYzMjoodCxlLG4pPT57dmFyIHI9big4MzU1KSxpPW4oNDMyMiksYT1uKDEzMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89ZS5ub2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNTdWJncmFwaChlLHQpfSkpLHM9dC5zZWxlY3RBbGwoImcuY2x1c3RlciIpLmRhdGEobywoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cmV0dXJuIHMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5pZH0pKS5zdHlsZSgib3BhY2l0eSIsMCkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIiksci5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMSkscy5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCkscj1pLnNlbGVjdCh0aGlzKTtpLnNlbGVjdCh0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgbz1yLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthKG8sbixuLmNsdXN0ZXJMYWJlbFBvcyl9KSkscy5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCksYT1pLnNlbGVjdCh0aGlzKTtyLmFwcGx5U3R5bGUoYSxuLnN0eWxlKX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKSxyLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sNjMxNToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oMTAzNCksaT1uKDEzMjIpLGE9big4MzU1KSxvPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7cmV0dXJuIHMuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlZGdlTGFiZWwiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCksKHM9dC5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIikpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpO24uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYT1lLmVkZ2UodCkscz1pKG4sZS5lZGdlKHQpLDAsMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxjPXMubm9kZSgpLmdldEJCb3goKTthLmxhYmVsSWQmJnMuYXR0cigiaWQiLGEubGFiZWxJZCksci5oYXMoYSwid2lkdGgiKXx8KGEud2lkdGg9Yy53aWR0aCksci5oYXMoYSwiaGVpZ2h0Iil8fChhLmhlaWdodD1jLmhlaWdodCl9KSksbj1zLmV4aXQ/cy5leGl0KCk6cy5zZWxlY3RBbGwobnVsbCksYS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LDk0MDoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oMTAzNCksaT1uKDMwNDIpLGE9big4MzU1KSxvPW4oNDMyMik7ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPShvLmxpbmV8fG8uc3ZnLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpO3JldHVybihuLmN1cnZlfHxuLmludGVycG9sYXRlKSh0LmN1cnZlKSxuKGUpfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5zZWxlY3RBbGwoImcuZWRnZVBhdGgiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCksbD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRoIikuc3R5bGUoIm9wYWNpdHkiLDApO3JldHVybiBuLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoImQiLChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCksaT1lLm5vZGUodC52KS5lbGVtO3JldHVybiBzKG4sci5yYW5nZShuLnBvaW50cy5sZW5ndGgpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZT0odD1pKS5nZXRCQm94KCkse3g6KG49dC5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KHQuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShlLndpZHRoLzIsZS5oZWlnaHQvMikpLmUseTpuLmZ9O3ZhciB0LGUsbn0pKSl9KSksbi5hcHBlbmQoImRlZnMiKSxufShjLGUpOyFmdW5jdGlvbih0LGUpe3ZhciBuPXQuZXhpdCgpO2EuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfShjLGUpO3ZhciB1PXZvaWQgMCE9PWMubWVyZ2U/Yy5tZXJnZShsKTpjO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbih1LGUpLnN0eWxlKCJvcGFjaXR5IiwxKSx1LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLHI9ZS5lZGdlKHQpO3IuZWxlbT10aGlzLHIuaWQmJm4uYXR0cigiaWQiLHIuaWQpLGEuYXBwbHlDbGFzcyhuLHIuY2xhc3MsKG4uY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsiZWRnZVBhdGgiKX0pKSx1LnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO24uYXJyb3doZWFkSWQ9ci51bmlxdWVJZCgiYXJyb3doZWFkIik7dmFyIGM9by5zZWxlY3QodGhpcykuYXR0cigibWFya2VyLWVuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuInVybCgiKyh0PWxvY2F0aW9uLmhyZWYsZT1uLmFycm93aGVhZElkLHQuc3BsaXQoIiMiKVswXSsiIyIrZSsiKSIpO3ZhciB0LGV9KSkuc3R5bGUoImZpbGwiLCJub25lIik7YS5hcHBseVRyYW5zaXRpb24oYyxlKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lZGdlKGUpLHI9dC5ub2RlKGUudiksYT10Lm5vZGUoZS53KSxvPW4ucG9pbnRzLnNsaWNlKDEsbi5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBvLnVuc2hpZnQoaShyLG9bMF0pKSxvLnB1c2goaShhLG9bby5sZW5ndGgtMV0pKSxzKG4sbyl9KGUsdCl9KSksYS5hcHBseVN0eWxlKGMsbi5zdHlsZSl9KSksdS5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLHUuc2VsZWN0QWxsKCJkZWZzIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpOygwLG5bci5hcnJvd2hlYWRdKShvLnNlbGVjdCh0aGlzKSxyLmFycm93aGVhZElkLHIsImFycm93aGVhZCIpfSkpLHV9fSw2MDc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwMzQpLGk9bigxMzIyKSxhPW4oODM1NSksbz1uKDQzMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHMsYz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYS5pc1N1YmdyYXBoKGUsdCl9KSksbD10LnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShjLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtyZXR1cm4gbC5leGl0KCkucmVtb3ZlKCksbC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSwobD10LnNlbGVjdEFsbCgiZy5ub2RlIikpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBzPWUubm9kZSh0KSxjPW8uc2VsZWN0KHRoaXMpO2EuYXBwbHlDbGFzcyhjLHMuY2xhc3MsKGMuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsibm9kZSIpLGMuc2VsZWN0KCJnLmxhYmVsIikucmVtb3ZlKCk7dmFyIGw9Yy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksdT1pKGwscyksaD1uW3Muc2hhcGVdLGY9ci5waWNrKHUubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtzLmVsZW09dGhpcyxzLmlkJiZjLmF0dHIoImlkIixzLmlkKSxzLmxhYmVsSWQmJmwuYXR0cigiaWQiLHMubGFiZWxJZCksci5oYXMocywid2lkdGgiKSYmKGYud2lkdGg9cy53aWR0aCksci5oYXMocywiaGVpZ2h0IikmJihmLmhlaWdodD1zLmhlaWdodCksZi53aWR0aCs9cy5wYWRkaW5nTGVmdCtzLnBhZGRpbmdSaWdodCxmLmhlaWdodCs9cy5wYWRkaW5nVG9wK3MucGFkZGluZ0JvdHRvbSxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLnBhZGRpbmdMZWZ0LXMucGFkZGluZ1JpZ2h0KS8yKyIsIisocy5wYWRkaW5nVG9wLXMucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBkPW8uc2VsZWN0KHRoaXMpO2Quc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHA9aChkLGYscykuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7YS5hcHBseVN0eWxlKHAscy5zdHlsZSk7dmFyIGc9cC5ub2RlKCkuZ2V0QkJveCgpO3Mud2lkdGg9Zy53aWR0aCxzLmhlaWdodD1nLmhlaWdodH0pKSxzPWwuZXhpdD9sLmV4aXQoKTpsLnNlbGVjdEFsbChudWxsKSxhLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxsfX0sNDMyMjoodCxlLG4pPT57dmFyIHI7aWYoIXIpdHJ5e3I9big3NTQzKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmQzKSx0LmV4cG9ydHM9cn0sNjQ3ODoodCxlLG4pPT57dmFyIHI7dHJ5e3I9big2ODEpfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZGFncmUpLHQuZXhwb3J0cz1yfSw2NjE0Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj1uKDgyODIpfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZ3JhcGhsaWIpLHQuZXhwb3J0cz1yfSw4MTE0Oih0LGUsbik9Pnt0LmV4cG9ydHM9e25vZGU6bigzMDQyKSxjaXJjbGU6big2NTg3KSxlbGxpcHNlOm4oMzI2MCkscG9seWdvbjpuKDUzMzcpLHJlY3Q6big4MDQ5KX19LDY1ODc6KHQsZSxuKT0+e3ZhciByPW4oMzI2MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcih0LGUsZSxuKX19LDMyNjA6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LngsYT10Lnksbz1pLXIueCxzPWEtci55LGM9TWF0aC5zcXJ0KGUqZSpzKnMrbipuKm8qbyksbD1NYXRoLmFicyhlKm4qby9jKTtyLng8aSYmKGw9LWwpO3ZhciB1PU1hdGguYWJzKGUqbipzL2MpO3JldHVybiByLnk8YSYmKHU9LXUpLHt4OmkrbCx5OmErdX19fSw2ODA4OnQ9PntmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQqZT4wfXQuZXhwb3J0cz1mdW5jdGlvbih0LG4scixpKXt2YXIgYSxvLHMsYyxsLHUsaCxmLGQscCxnLHksbTtpZighKGE9bi55LXQueSxzPXQueC1uLngsbD1uLngqdC55LXQueCpuLnksZD1hKnIueCtzKnIueStsLHA9YSppLngrcyppLnkrbCwwIT09ZCYmMCE9PXAmJmUoZCxwKXx8KG89aS55LXIueSxjPXIueC1pLngsdT1pLngqci55LXIueCppLnksaD1vKnQueCtjKnQueSt1LGY9bypuLngrYypuLnkrdSwwIT09aCYmMCE9PWYmJmUoaCxmKXx8MD09KGc9YSpjLW8qcykpKSlyZXR1cm4geT1NYXRoLmFicyhnLzIpLHt4OihtPXMqdS1jKmwpPDA/KG0teSkvZzoobSt5KS9nLHk6KG09bypsLWEqdSk8MD8obS15KS9nOihtK3kpL2d9fX0sMzA0Mjp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sNTMzNzoodCxlLG4pPT57dmFyIHI9big2ODA4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQueCxhPXQueSxvPVtdLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7cz1NYXRoLm1pbihzLHQueCksYz1NYXRoLm1pbihjLHQueSl9KSk7Zm9yKHZhciBsPWktdC53aWR0aC8yLXMsdT1hLXQuaGVpZ2h0LzItYyxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBmPWVbaF0sZD1lW2g8ZS5sZW5ndGgtMT9oKzE6MF0scD1yKHQsbix7eDpsK2YueCx5OnUrZi55fSx7eDpsK2QueCx5OnUrZC55fSk7cCYmby5wdXNoKHApfXJldHVybiBvLmxlbmd0aD8oby5sZW5ndGg+MSYmby5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSksb1swXSk6KGNvbnNvbGUubG9nKCJOTyBJTlRFUlNFQ1RJT04gRk9VTkQsIFJFVFVSTiBOT0RFIENFTlRFUiIsdCksdCl9fSw4MDQ5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC54LGE9dC55LG89ZS54LWkscz1lLnktYSxjPXQud2lkdGgvMixsPXQuaGVpZ2h0LzI7cmV0dXJuIE1hdGguYWJzKHMpKmM+TWF0aC5hYnMobykqbD8oczwwJiYobD0tbCksbj0wPT09cz8wOmwqby9zLHI9bCk6KG88MCYmKGM9LWMpLG49YyxyPTA9PT1vPzA6YypzL28pLHt4Omkrbix5OmErcn19fSw4Mjg0Oih0LGUsbik9Pnt2YXIgcj1uKDgzNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCIxMDAwMDAiKSxpPW4uYXBwZW5kKCJ4aHRtbDpkaXYiKTtpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciBhPWUubGFiZWw7c3dpdGNoKHR5cGVvZiBhKXtjYXNlImZ1bmN0aW9uIjppLmluc2VydChhKTticmVhaztjYXNlIm9iamVjdCI6aS5pbnNlcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSk7YnJlYWs7ZGVmYXVsdDppLmh0bWwoYSl9ci5hcHBseVN0eWxlKGksZS5sYWJlbFN0eWxlKSxpLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksaS5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTt2YXIgbz1pLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5hdHRyKCJ3aWR0aCIsby53aWR0aCkuYXR0cigiaGVpZ2h0IixvLmhlaWdodCksbn19LDEzMjI6KHQsZSxuKT0+e3ZhciByPW4oNzMxOCksaT1uKDgyODQpLGE9big4Mjg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPWUubGFiZWwscz10LmFwcGVuZCgiZyIpOyJzdmciPT09ZS5sYWJlbFR5cGU/YShzLGUpOiJzdHJpbmciIT10eXBlb2Ygb3x8Imh0bWwiPT09ZS5sYWJlbFR5cGU/aShzLGUpOnIocyxlKTt2YXIgYyxsPXMubm9kZSgpLmdldEJCb3goKTtzd2l0Y2gobil7Y2FzZSJ0b3AiOmM9LWUuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmM9ZS5oZWlnaHQvMi1sLmhlaWdodDticmVhaztkZWZhdWx0OmM9LWwuaGVpZ2h0LzJ9cmV0dXJuIHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWwud2lkdGgvMisiLCIrYysiKSIpLHN9fSw4Mjg3Oih0LGUsbik9Pnt2YXIgcj1uKDgzNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQ7cmV0dXJuIG4ubm9kZSgpLmFwcGVuZENoaWxkKGUubGFiZWwpLHIuYXBwbHlTdHlsZShuLGUubGFiZWxTdHlsZSksbn19LDczMTg6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuYXBwZW5kKCJ0ZXh0IiksaT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbj0iIixyPSExLGk9MDtpPHQubGVuZ3RoOysraSllPXRbaV0scj8obis9Im4iPT09ZT8iXG4iOmUscj0hMSk6IlxcIj09PWU/cj0hMDpuKz1lO3JldHVybiBufShlLmxhYmVsKS5zcGxpdCgiXG4iKSxhPTA7YTxpLmxlbmd0aDthKyspbi5hcHBlbmQoInRzcGFuIikuYXR0cigieG1sOnNwYWNlIiwicHJlc2VydmUiKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoIngiLCIxIikudGV4dChpW2FdKTtyZXR1cm4gci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sMTAzNDoodCxlLG4pPT57dmFyIHI7dHJ5e3I9e2RlZmF1bHRzOm4oMTc0NyksZWFjaDpuKDYwNzMpLGlzRnVuY3Rpb246bigzNTYwKSxpc1BsYWluT2JqZWN0Om4oODYzMCkscGljazpuKDk3MjIpLGhhczpuKDg3MjEpLHJhbmdlOm4oNjAyNiksdW5pcXVlSWQ6bigzOTU1KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sNjM4MToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODM1NSksaT1uKDQzMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKTtmdW5jdGlvbiBhKHQpe3ZhciBuPWUubm9kZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikifW4uYXR0cigidHJhbnNmb3JtIixhKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKG4uc2VsZWN0QWxsKCJyZWN0IiksZSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkuaGVpZ2h0fSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4tZS5ub2RlKHQpLndpZHRoLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkuaGVpZ2h0LzJ9KSl9fSw0NTc3Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMiksYT1uKDEwMzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5lZGdlKHQpO3JldHVybiBhLmhhcyhuLCJ4Iik/InRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIjoiIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sNDg0OToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODM1NSksaT1uKDQzMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpLmF0dHIoInRyYW5zZm9ybSIsbiksci5hcHBseVRyYW5zaXRpb24odCxlKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixuKX19LDU3ODc6KHQsZSxuKT0+e3ZhciByPW4oMTAzNCksaT1uKDQzMjIpLGE9big2NDc4KS5sYXlvdXQ7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9big2MDcpLGU9big1NjMyKSxpPW4oNjMxNSksbD1uKDk0MCksdT1uKDQ4NDkpLGg9big0NTc3KSxmPW4oNjM4MSksZD1uKDQ0MTgpLHA9big5MTQ0KSxnPWZ1bmN0aW9uKG4sZyl7IWZ1bmN0aW9uKHQpe3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwibGFiZWwiKXx8dC5jaGlsZHJlbihlKS5sZW5ndGh8fChuLmxhYmVsPWUpLHIuaGFzKG4sInBhZGRpbmdYIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ0xlZnQ6bi5wYWRkaW5nWCxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nWH0pLHIuaGFzKG4sInBhZGRpbmdZIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ1RvcDpuLnBhZGRpbmdZLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nWX0pLHIuaGFzKG4sInBhZGRpbmciKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmcscGFkZGluZ1JpZ2h0Om4ucGFkZGluZyxwYWRkaW5nVG9wOm4ucGFkZGluZyxwYWRkaW5nQm90dG9tOm4ucGFkZGluZ30pLHIuZGVmYXVsdHMobixvKSxyLmVhY2goWyJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sKGZ1bmN0aW9uKHQpe25bdF09TnVtYmVyKG5bdF0pfSkpLHIuaGFzKG4sIndpZHRoIikmJihuLl9wcmV2V2lkdGg9bi53aWR0aCksci5oYXMobiwiaGVpZ2h0IikmJihuLl9wcmV2SGVpZ2h0PW4uaGVpZ2h0KX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sImxhYmVsIil8fChuLmxhYmVsPSIiKSxyLmRlZmF1bHRzKG4scyl9KSl9KGcpO3ZhciB5PWMobiwib3V0cHV0IiksbT1jKHksImNsdXN0ZXJzIiksYj1jKHksImVkZ2VQYXRocyIpLHY9aShjKHksImVkZ2VMYWJlbHMiKSxnKSxfPXQoYyh5LCJub2RlcyIpLGcsZCk7YShnKSx1KF8sZyksaCh2LGcpLGwoYixnLHApO3ZhciB4PWUobSxnKTtmKHgsZyksZnVuY3Rpb24odCl7ci5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO3IuaGFzKG4sIl9wcmV2V2lkdGgiKT9uLndpZHRoPW4uX3ByZXZXaWR0aDpkZWxldGUgbi53aWR0aCxyLmhhcyhuLCJfcHJldkhlaWdodCIpP24uaGVpZ2h0PW4uX3ByZXZIZWlnaHQ6ZGVsZXRlIG4uaGVpZ2h0LGRlbGV0ZSBuLl9wcmV2V2lkdGgsZGVsZXRlIG4uX3ByZXZIZWlnaHR9KSl9KGcpfTtyZXR1cm4gZy5jcmVhdGVOb2Rlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGcpOnR9LGcuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxnKTplfSxnLmNyZWF0ZUVkZ2VMYWJlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxnKTppfSxnLmNyZWF0ZUVkZ2VQYXRocz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGcpOmx9LGcuc2hhcGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQsZyk6ZH0sZy5hcnJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dCxnKTpwfSxnfTt2YXIgbz17cGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLHBhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxyeDowLHJ5OjAsc2hhcGU6InJlY3QifSxzPXthcnJvd2hlYWQ6Im5vcm1hbCIsY3VydmU6aS5jdXJ2ZUxpbmVhcn07ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPXQuc2VsZWN0KCJnLiIrZSk7cmV0dXJuIG4uZW1wdHkoKSYmKG49dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSkpLG59fSw0NDE4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MDQ5KSxpPW4oMzI2MCksYT1uKDY1ODcpLG89big1MzM3KTt0LmV4cG9ydHM9e3JlY3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLG4ucngpLmF0dHIoInJ5IixuLnJ5KS5hdHRyKCJ4IiwtZS53aWR0aC8yKS5hdHRyKCJ5IiwtZS5oZWlnaHQvMikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gcihuLHQpfSxpfSxlbGxpcHNlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoLzIsYT1lLmhlaWdodC8yLG89dC5pbnNlcnQoImVsbGlwc2UiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwtZS53aWR0aC8yKS5hdHRyKCJ5IiwtZS5oZWlnaHQvMikuYXR0cigicngiLHIpLmF0dHIoInJ5IixhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGkobixyLGEsdCl9LG99LGNpcmNsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9TWF0aC5tYXgoZS53aWR0aCxlLmhlaWdodCkvMixpPXQuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwtZS53aWR0aC8yKS5hdHRyKCJ5IiwtZS5oZWlnaHQvMikuYXR0cigiciIscik7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhKG4scix0KX0saX0sZGlhbW9uZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS53aWR0aCpNYXRoLlNRUlQyLzIsaT1lLmhlaWdodCpNYXRoLlNRUlQyLzIsYT1be3g6MCx5Oi1pfSx7eDotcix5OjB9LHt4OjAseTppfSx7eDpyLHk6MH1dLHM9dC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLGEubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG8obixhLHQpfSxzfX19LDgzNTU6KHQsZSxuKT0+e3ZhciByPW4oMTAzNCk7dC5leHBvcnRzPXtpc1N1YmdyYXBoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0LmNoaWxkcmVuKGUpLmxlbmd0aH0sZWRnZVRvSWQ6ZnVuY3Rpb24odCl7cmV0dXJuIGEodC52KSsiOiIrYSh0LncpKyI6IithKHQubmFtZSl9LGFwcGx5U3R5bGU6ZnVuY3Rpb24odCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX0sYXBwbHlDbGFzczpmdW5jdGlvbih0LGUsbil7ZSYmdC5hdHRyKCJjbGFzcyIsZSkuYXR0cigiY2xhc3MiLG4rIiAiK3QuYXR0cigiY2xhc3MiKSl9LGFwcGx5VHJhbnNpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBuPWUuZ3JhcGgoKTtpZihyLmlzUGxhaW5PYmplY3Qobikpe3ZhciBpPW4udHJhbnNpdGlvbjtpZihyLmlzRnVuY3Rpb24oaSkpcmV0dXJuIGkodCl9cmV0dXJuIHR9fTt2YXIgaT0vOi9nO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQ/U3RyaW5nKHQpLnJlcGxhY2UoaSwiXFw6Iik6IiJ9fSw1Njg5OnQ9Pnt0LmV4cG9ydHM9IjAuNi40In0sNjgxOih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNTc0KSxsYXlvdXQ6big4MTIzKSxkZWJ1ZzpuKDc1NzApLHV0aWw6e3RpbWU6bigxMTM4KS50aW1lLG5vdGltZTpuKDExMzgpLm5vdGltZX0sdmVyc2lvbjpuKDgxNzcpfX0sMjE4ODoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDQwNzkpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJncmVlZHkiPT09dC5ncmFwaCgpLmFjeWNsaWNlcj9pKHQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkud2VpZ2h0fX0odCkpOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49e30saT17fTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gYShvKXtyLmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKG8pLChmdW5jdGlvbih0KXtyLmhhcyhuLHQudyk/ZS5wdXNoKHQpOmEodC53KX0pKSxkZWxldGUgbltvXSl9KSksZX0odCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTt0LnJlbW92ZUVkZ2UoZSksbi5mb3J3YXJkTmFtZT1lLm5hbWUsbi5yZXZlcnNlZD0hMCx0LnNldEVkZ2UoZS53LGUudixuLHIudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciByPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixyKX19KSl9fX0sMTEzMzoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixyLGEsbyl7dmFyIHM9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6ZX0sYz1hW2VdW28tMV0sbD1pLmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHMsbik7YVtlXVtvXT1sLHQuc2V0UGFyZW50KGwsciksYyYmdC5zZXRFZGdlKGMsbCx7d2VpZ2h0OjF9KX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24gZShuKXt2YXIgaT10LmNoaWxkcmVuKG4pLG89dC5ub2RlKG4pO2lmKGkubGVuZ3RoJiZyLmZvckVhY2goaSxlKSxyLmhhcyhvLCJtaW5SYW5rIikpe28uYm9yZGVyTGVmdD1bXSxvLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgcz1vLm1pblJhbmssYz1vLm1heFJhbmsrMTtzPGM7KytzKWEodCwiYm9yZGVyTGVmdCIsIl9ibCIsbixvLHMpLGEodCwiYm9yZGVyUmlnaHQiLCJfYnIiLG4sbyxzKX19KSl9fSwzMjU4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCksImxyIiE9PWUmJiJybCIhPT1lfHwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cyh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMscyksci5oYXMobiwieCIpJiZzKG4pfSkpfSh0KSxpKHQpKX19fSw3ODIyOnQ9PntmdW5jdGlvbiBlKCl7dmFyIHQ9e307dC5fbmV4dD10Ll9wcmV2PXQsdGhpcy5fc2VudGluZWw9dH1mdW5jdGlvbiBuKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gcih0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX10LmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VudGluZWwsZT10Ll9wcmV2O2lmKGUhPT10KXJldHVybiBuKGUpLGV9LGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmbih0KSx0Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj10LGUuX25leHQ9dCx0Ll9wcmV2PWV9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5fc2VudGluZWwsbj1lLl9wcmV2O24hPT1lOyl0LnB1c2goSlNPTi5zdHJpbmdpZnkobixyKSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifX0sNzU3MDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDU3NCkuR3JhcGg7dC5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPW5ldyBhKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtuLnNldE5vZGUoZSx7bGFiZWw6ZX0pLG4uc2V0UGFyZW50KGUsImxheWVyIit0Lm5vZGUoZSkucmFuayl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7bi5zZXRFZGdlKHQudix0Lncse30sdC5uYW1lKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXt2YXIgaT0ibGF5ZXIiK2U7bi5zZXROb2RlKGkse3Jhbms6InNhbWUifSksci5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19fSw1NzQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDQwNzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNiksaT1uKDU3NCkuR3JhcGgsYT1uKDc4MjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgaSxvPTAscz0wO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciByPW4uZWRnZSh0LnYsdC53KXx8MCxpPWUodCksYT1yK2k7bi5zZXRFZGdlKHQudix0LncsYSkscz1NYXRoLm1heChzLG4ubm9kZSh0LnYpLm91dCs9aSksbz1NYXRoLm1heChvLG4ubm9kZSh0LncpLmluKz1pKX0pKTt2YXIgbD1yLnJhbmdlKHMrbyszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhfSkpLHU9bysxO3JldHVybiByLmZvckVhY2gobi5ub2RlcygpLChmdW5jdGlvbih0KXtjKGwsdSxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6bCx6ZXJvSWR4OnV9fSh0LGV8fG8pLGw9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpPVtdLGE9ZVtlLmxlbmd0aC0xXSxvPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAobCwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSw4MTIzOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMjE4OCksYT1uKDU5OTUpLG89big4MDkzKSxzPW4oMTEzOCkubm9ybWFsaXplUmFua3MsYz1uKDQyMTkpLGw9bigxMTM4KS5yZW1vdmVFbXB0eVJhbmtzLHU9bigyOTgxKSxoPW4oMTEzMyksZj1uKDMyNTgpLGQ9bigzNDA4KSxwPW4oNzg3MyksZz1uKDExMzgpLHk9big1NzQpLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWUmJmUuZGVidWdUaW1pbmc/Zy50aW1lOmcubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bmV3IHkoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxuPUModC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChyLm1lcmdlKHt9LGIsRShuLG0pLHIucGljayhuLHYpKSksci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9Qyh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHIuZGVmYXVsdHMoRShpLF8pLHgpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sci5tZXJnZSh7fSx3LEUoaSxrKSxyLnBpY2soaSxUKSkpfSkpLGV9KHQpfSkpO24oIiAgcnVuTGF5b3V0IiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5lZGdlKG4pO3IubWlubGVuKj0yLCJjIiE9PXIubGFiZWxwb3MudG9Mb3dlckNhc2UoKSYmKCJUQiI9PT1lLnJhbmtkaXJ8fCJCVCI9PT1lLnJhbmtkaXI/ci53aWR0aCs9ci5sYWJlbG9mZnNldDpyLmhlaWdodCs9ci5sYWJlbG9mZnNldCl9KSl9KHQpfSkpLGUoIiAgICByZW1vdmVTZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciBuPXQubm9kZShlLnYpO24uc2VsZkVkZ2VzfHwobi5zZWxmRWRnZXM9W10pLG4uc2VsZkVkZ2VzLnB1c2goe2UsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pKX0odCl9KSksZSgiICAgIGFjeWNsaWMiLChmdW5jdGlvbigpe2kucnVuKHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXt1LnJ1bih0KX0pKSxlKCIgICAgcmFuayIsKGZ1bmN0aW9uKCl7byhnLmFzTm9uQ29tcG91bmRHcmFwaCh0KSl9KSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi53aWR0aCYmbi5oZWlnaHQpe3ZhciByPXQubm9kZShlLnYpLGk9e3Jhbms6KHQubm9kZShlLncpLnJhbmstci5yYW5rKS8yK3IucmFuayxlfTtnLmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXtsKHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7dS5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPWcuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXtnLmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gbCh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtsKHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmbChuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KGcuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKGcuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgbT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sYj17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSx2PVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sXz1bIndpZHRoIiwiaGVpZ2h0Il0seD17d2lkdGg6MCxoZWlnaHQ6MH0saz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSx3PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sVD1bImxhYmVscG9zIl07ZnVuY3Rpb24gRSh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSw4NDM2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmVEZWVwOm4oMzYxKSxjb25zdGFudDpuKDU3MDMpLGRlZmF1bHRzOm4oMTc0NyksZWFjaDpuKDYwNzMpLGZpbHRlcjpuKDMxMDUpLGZpbmQ6bigzMzExKSxmbGF0dGVuOm4oNTU2NCksZm9yRWFjaDpuKDQ0ODYpLGZvckluOm4oMjYyMCksaGFzOm4oODcyMSksaXNVbmRlZmluZWQ6bigyMzUzKSxsYXN0Om4oOTI4KSxtYXA6big1MTYxKSxtYXBWYWx1ZXM6big2NjA0KSxtYXg6big2MTYyKSxtZXJnZTpuKDM4NTcpLG1pbjpuKDM2MzIpLG1pbkJ5Om4oMjc2Miksbm93Om4oNzc3MSkscGljazpuKDk3MjIpLHJhbmdlOm4oNjAyNikscmVkdWNlOm4oNDA2MSksc29ydEJ5Om4oOTczNCksdW5pcXVlSWQ6bigzOTU1KSx2YWx1ZXM6bigyNjI4KSx6aXBPYmplY3Q6big3Mjg3KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sMjk4MToodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixvLHMsYyxsKXt2YXIgdT10LmNoaWxkcmVuKGwpO2lmKHUubGVuZ3RoKXt2YXIgaD1pLmFkZEJvcmRlck5vZGUodCwiX2J0IiksZj1pLmFkZEJvcmRlck5vZGUodCwiX2JiIiksZD10Lm5vZGUobCk7dC5zZXRQYXJlbnQoaCxsKSxkLmJvcmRlclRvcD1oLHQuc2V0UGFyZW50KGYsbCksZC5ib3JkZXJCb3R0b209ZixyLmZvckVhY2godSwoZnVuY3Rpb24ocil7YSh0LGUsbixvLHMsYyxyKTt2YXIgaT10Lm5vZGUociksdT1pLmJvcmRlclRvcD9pLmJvcmRlclRvcDpyLGQ9aS5ib3JkZXJCb3R0b20/aS5ib3JkZXJCb3R0b206cixwPWkuYm9yZGVyVG9wP286MipvLGc9dSE9PWQ/MTpzLWNbbF0rMTt0LnNldEVkZ2UoaCx1LHt3ZWlnaHQ6cCxtaW5sZW46ZyxuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShkLGYse3dlaWdodDpwLG1pbmxlbjpnLG5lc3RpbmdFZGdlOiEwfSl9KSksdC5wYXJlbnQobCl8fHQuc2V0RWRnZShlLGgse3dlaWdodDowLG1pbmxlbjpzK2NbbF19KX1lbHNlIGwhPT1lJiZ0LnNldEVkZ2UoZSxsLHt3ZWlnaHQ6MCxtaW5sZW46bn0pfXQuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKSxlW2ldPWF9cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKHQpe24odCwxKX0pKSxlfSh0KSxvPXIubWF4KHIudmFsdWVzKG4pKS0xLHM9MipvKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm1pbmxlbio9c30pKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gci5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0odCkrMTtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihyKXthKHQsZSxzLGMsbyxuLHIpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1zfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTt0LnJlbW92ZU5vZGUoZS5uZXN0aW5nUm9vdCksZGVsZXRlIGUubmVzdGluZ1Jvb3Qsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm5lc3RpbmdFZGdlJiZ0LnJlbW92ZUVkZ2UoZSl9KSl9fX0sNTk5NToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDExMzgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyxsPXQubm9kZShjKS5yYW5rLHU9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYobCE9PXMrMSl7Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8bDsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSx1KSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sdSl9fSh0LGUpfSkpfSx1bmRvOmZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKGUpe3ZhciBuLHI9dC5ub2RlKGUpLGk9ci5lZGdlTGFiZWw7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosaSk7ci5kdW1teTspbj10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLGkucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksImVkZ2UtbGFiZWwiPT09ci5kdW1teSYmKGkueD1yLngsaS55PXIueSxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpLGU9bixyPXQubm9kZShlKX0pKX19fSw1MDkzOih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYT17fTtyLmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciByLG8scz10LnBhcmVudChuKTtzOyl7aWYoKHI9dC5wYXJlbnQocykpPyhvPWFbcl0sYVtyXT1zKToobz1pLGk9cyksbyYmbyE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKG8scyk7cz1yfX0pKX19LDU0Mzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuaW5FZGdlcyhlKTtpZihuLmxlbmd0aCl7dmFyIGk9ci5yZWR1Y2UobiwoZnVuY3Rpb24oZSxuKXt2YXIgcj10LmVkZ2UobiksaT10Lm5vZGUobi52KTtyZXR1cm57c3VtOmUuc3VtK3Iud2VpZ2h0Kmkub3JkZXIsd2VpZ2h0OmUud2VpZ2h0K3Iud2VpZ2h0fX0pLHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmUsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fXJldHVybnt2OmV9fSkpfX0sMzEyODoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSw2NjMwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9ci56aXBPYmplY3QobixyLm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxhPXIuZmxhdHRlbihyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gci5zb3J0Qnkoci5tYXAodC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJue3BvczppW2Uud10sd2VpZ2h0OnQuZWRnZShlKS53ZWlnaHR9fSkpLCJwb3MiKX0pKSwhMCksbz0xO288bi5sZW5ndGg7KW88PD0xO3ZhciBzPTIqby0xO28tPTE7dmFyIGM9ci5tYXAobmV3IEFycmF5KHMpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLGw9MDtyZXR1cm4gci5mb3JFYWNoKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztjW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPWNbZSsxXSksY1tlPWUtMT4+MV0rPXQud2VpZ2h0O2wrPXQud2VpZ2h0Km59KSkpLGx9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj0xO3I8ZS5sZW5ndGg7KytyKW4rPWkodCxlW3ItMV0sZVtyXSk7cmV0dXJuIG59fSwzNDA4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMjU4OCksYT1uKDY2MzApLG89bigxMDI2KSxzPW4oMzEyOCksYz1uKDUwOTMpLGw9big1NzQpLkdyYXBoLHU9bigxMTM4KTtmdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHModCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1uZXcgbDtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGk9dC5ncmFwaCgpLnJvb3QsYT1vKHQsaSxuLGUpO3IuZm9yRWFjaChhLnZzLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpLGModCxuLGEudnMpfSkpfWZ1bmN0aW9uIGQodCxlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSl9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXUubWF4UmFuayh0KSxuPWgodCxyLnJhbmdlKDEsZSsxKSwiaW5FZGdlcyIpLG89aCh0LHIucmFuZ2UoZS0xLC0xLC0xKSwib3V0RWRnZXMiKSxzPWkodCk7ZCh0LHMpO2Zvcih2YXIgYyxsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAsZz0wO2c8NDsrK3AsKytnKXtmKHAlMj9uOm8scCU0Pj0yKSxzPXUuYnVpbGRMYXllck1hdHJpeCh0KTt2YXIgeT1hKHQscyk7eTxsJiYoZz0wLGM9ci5jbG9uZURlZXAocyksbD15KX1kKHQsYyl9fSwyNTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSksbz1yLnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIHIuZm9yRWFjaChvLChmdW5jdGlvbiBuKGkpe2lmKCFyLmhhcyhlLGkpKXtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfX0pKSxhfX0sOTU2NzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTtyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fChpLmJhcnljZW50ZXI9dC5iYXJ5Y2VudGVyLGkud2VpZ2h0PXQud2VpZ2h0KX0pKSxyLmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgZT1uW3Qudl0saT1uW3Qud107ci5pc1VuZGVmaW5lZChlKXx8ci5pc1VuZGVmaW5lZChpKXx8KGkuaW5kZWdyZWUrKyxlLm91dC5wdXNoKG5bdC53XSkpfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGksYSxvO2UubWVyZ2VkfHwoci5pc1VuZGVmaW5lZChlLmJhcnljZW50ZXIpfHxyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGk9ZSxhPTAsbz0wLChuPXQpLndlaWdodCYmKGErPW4uYmFyeWNlbnRlcipuLndlaWdodCxvKz1uLndlaWdodCksaS53ZWlnaHQmJihhKz1pLmJhcnljZW50ZXIqaS53ZWlnaHQsbys9aS53ZWlnaHQpLG4udnM9aS52cy5jb25jYXQobi52cyksbi5iYXJ5Y2VudGVyPWEvbyxuLndlaWdodD1vLG4uaT1NYXRoLm1pbihpLmksbi5pKSxpLm1lcmdlZD0hMCl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciBhPXQucG9wKCk7ZS5wdXNoKGEpLHIuZm9yRWFjaChhLmluLnJldmVyc2UoKSxuKGEpKSxyLmZvckVhY2goYS5vdXQsaShhKSl9cmV0dXJuIHIubWFwKHIuZmlsdGVyKGUsKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1lcmdlZH0pKSwoZnVuY3Rpb24odCl7cmV0dXJuIHIucGljayh0LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pKX0oci5maWx0ZXIobiwoZnVuY3Rpb24odCl7cmV0dXJuIXQuaW5kZWdyZWV9KSkpfX0sMTAyNjoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTQzOSksYT1uKDk1NjcpLG89big3MzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4scyxjKXt2YXIgbD1lLmNoaWxkcmVuKG4pLHU9ZS5ub2RlKG4pLGg9dT91LmJvcmRlckxlZnQ6dm9pZCAwLGY9dT91LmJvcmRlclJpZ2h0OnZvaWQgMCxkPXt9O2gmJihsPXIuZmlsdGVyKGwsKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aCYmdCE9PWZ9KSkpO3ZhciBwPWkoZSxsKTtyLmZvckVhY2gocCwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIGk9dChlLG4udixzLGMpO2Rbbi52XT1pLHIuaGFzKGksImJhcnljZW50ZXIiKSYmKGE9bixvPWksci5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpPyhhLmJhcnljZW50ZXI9by5iYXJ5Y2VudGVyLGEud2VpZ2h0PW8ud2VpZ2h0KTooYS5iYXJ5Y2VudGVyPShhLmJhcnljZW50ZXIqYS53ZWlnaHQrby5iYXJ5Y2VudGVyKm8ud2VpZ2h0KS8oYS53ZWlnaHQrby53ZWlnaHQpLGEud2VpZ2h0Kz1vLndlaWdodCkpfXZhciBhLG99KSk7dmFyIGc9YShwLHMpOyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt0LnZzPXIuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0oZyxkKTt2YXIgeT1vKGcsYyk7aWYoaCYmKHkudnM9ci5mbGF0dGVuKFtoLHkudnMsZl0sITApLGUucHJlZGVjZXNzb3JzKGgpLmxlbmd0aCkpe3ZhciBtPWUubm9kZShlLnByZWRlY2Vzc29ycyhoKVswXSksYj1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoZilbMF0pO3IuaGFzKHksImJhcnljZW50ZXIiKXx8KHkuYmFyeWNlbnRlcj0wLHkud2VpZ2h0PTApLHkuYmFyeWNlbnRlcj0oeS5iYXJ5Y2VudGVyKnkud2VpZ2h0K20ub3JkZXIrYi5vcmRlcikvKHkud2VpZ2h0KzIpLHkud2VpZ2h0Kz0yfXJldHVybiB5fX0sNzMwNDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpO2UubGVuZ3RoJiYoaT1yLmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSkscz1vLmxocyxjPXIuc29ydEJ5KG8ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLGw9W10sdT0wLGg9MCxmPTA7cy5zb3J0KChuPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpuP2UuaS10Lmk6dC5pLWUuaX0pKSxmPWEobCxjLGYpLHIuZm9yRWFjaChzLChmdW5jdGlvbih0KXtmKz10LnZzLmxlbmd0aCxsLnB1c2godC52cyksdSs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGgrPXQud2VpZ2h0LGY9YShsLGMsZil9KSk7dmFyIGQ9e3ZzOnIuZmxhdHRlbihsLCEwKX07cmV0dXJuIGgmJihkLmJhcnljZW50ZXI9dS9oLGQud2VpZ2h0PWgpLGR9fSw0MjE5Oih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGkoYSl7dmFyIG89bjtyLmZvckVhY2godC5jaGlsZHJlbihhKSxpKSxlW2FdPXtsb3c6byxsaW06bisrfX0pKSxlfSh0KTtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihuKXtmb3IodmFyIHI9dC5ub2RlKG4pLGk9ci5lZGdlT2JqLGE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVtdLHM9W10sYz1NYXRoLm1pbihlW25dLmxvdyxlW3JdLmxvdyksbD1NYXRoLm1heChlW25dLmxpbSxlW3JdLmxpbSk7aT1uO2Rve2k9dC5wYXJlbnQoaSksby5wdXNoKGkpfXdoaWxlKGkmJihlW2ldLmxvdz5jfHxsPmVbaV0ubGltKSk7Zm9yKGE9aSxpPXI7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCxsPW9bY10sdT0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksdSl7Zm9yKDsobD1vW2NdKSE9PXMmJnQubm9kZShsKS5tYXhSYW5rPHIucmFuazspYysrO2w9PT1zJiYodT0hMSl9aWYoIXUpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUobD1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO2w9b1tjXX10LnNldFBhcmVudChuLGwpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LDM1NzM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg0MzYpLGk9big1NzQpLkdyYXBoLGE9bigxMTM4KTtmdW5jdGlvbiBvKHQsZSl7dmFyIG49e307cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIGE9MCxvPTAscz1lLmxlbmd0aCxsPXIubGFzdChpKTtyZXR1cm4gci5mb3JFYWNoKGksKGZ1bmN0aW9uKGUsdSl7dmFyIGg9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIHIuZmluZCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5kdW1teX0pKX0odCxlKSxmPWg/dC5ub2RlKGgpLm9yZGVyOnM7KGh8fGU9PT1sKSYmKHIuZm9yRWFjaChpLnNsaWNlKG8sdSsxKSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUociksbz1pLm9yZGVyOyEobzxhfHxmPG8pfHxpLmR1bW15JiZ0Lm5vZGUoZSkuZHVtbXl8fGMobixyLGUpfSkpfSkpLG89dSsxLGE9Zil9KSksaX0pKSxufWZ1bmN0aW9uIHModCxlKXt2YXIgbj17fTtmdW5jdGlvbiBpKGUsaSxhLG8scyl7dmFyIGw7ci5mb3JFYWNoKHIucmFuZ2UoaSxhKSwoZnVuY3Rpb24oaSl7bD1lW2ldLHQubm9kZShsKS5kdW1teSYmci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKGwpLChmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSk7ci5kdW1teSYmKHIub3JkZXI8b3x8ci5vcmRlcj5zKSYmYyhuLGUsbCl9KSl9KSl9cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsbil7dmFyIGEsbz0tMSxzPTA7cmV0dXJuIHIuZm9yRWFjaChuLChmdW5jdGlvbihyLGMpe2lmKCJib3JkZXIiPT09dC5ub2RlKHIpLmR1bW15KXt2YXIgbD10LnByZWRlY2Vzc29ycyhyKTtsLmxlbmd0aCYmKGE9dC5ub2RlKGxbMF0pLm9yZGVyLGkobixzLGMsbyxhKSxzPWMsbz1hKX1pKG4scyxuLmxlbmd0aCxhLGUubGVuZ3RoKX0pKSxufSkpLG59ZnVuY3Rpb24gYyh0LGUsbil7aWYoZT5uKXt2YXIgcj1lO2U9bixuPXJ9dmFyIGk9dFtlXTtpfHwodFtlXT1pPXt9KSxpW25dPSEwfWZ1bmN0aW9uIGwodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXJldHVybiByLmhhcyh0W2VdLG4pfWZ1bmN0aW9uIHUodCxlLG4saSl7dmFyIGE9e30sbz17fSxzPXt9O3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7YVt0XT10LG9bdF09dCxzW3RdPWV9KSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3ZhciBlPS0xO3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgYz1pKHQpO2lmKGMubGVuZ3RoKXtjPXIuc29ydEJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdfSkpO2Zvcih2YXIgdT0oYy5sZW5ndGgtMSkvMixoPU1hdGguZmxvb3IodSksZj1NYXRoLmNlaWwodSk7aDw9ZjsrK2gpe3ZhciBkPWNbaF07b1t0XT09PXQmJmU8c1tkXSYmIWwobix0LGQpJiYob1tkXT10LG9bdF09YVt0XT1hW2RdLGU9c1tkXSl9fX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksbD1pLm5vZGUobyksdT0wO2lmKHUrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKHUrPW4/czotcykscz0wLHUrPShjLmR1bW15P2U6dCkvMix1Kz0obC5kdW1teT9lOnQpLzIsdSs9bC53aWR0aC8yLHIuaGFzKGwsImxhYmVscG9zIikpc3dpdGNoKGwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPWwud2lkdGgvMjticmVhaztjYXNlInIiOnM9LWwud2lkdGgvMn1yZXR1cm4gcyYmKHUrPW4/czotcykscz0wLHV9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksbD1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiB1KChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLHUoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT1sJiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyxsPXRbY107aWYobCE9PWUpe3ZhciB1PXIudmFsdWVzKGwpOyhzPSJsIj09PW8/aS1yLm1pbih1KTphLXIubWF4KHUpKSYmKHRbY109ci5tYXBWYWx1ZXMobCwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9dSgwLGUsaSxvKSxsPWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJihsPXIubWFwVmFsdWVzKGwsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09bH0pKX0pKTt2YXIgbD1mKHQsYyk7cmV0dXJuIGQoYyxsKSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDpsLHZlcnRpY2FsQWxpZ25tZW50OnUsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSw3ODczOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDM1NzMpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sMzAwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaCxhPW4oNjY4MSkuc2xhY2s7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbiBuKGkpe3IuZm9yRWFjaChlLm5vZGVFZGdlcyhpKSwoZnVuY3Rpb24ocil7dmFyIG89ci52LHM9aT09PW8/ci53Om87dC5oYXNOb2RlKHMpfHxhKGUscil8fCh0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKGkscyx7fSksbihzKSl9KSl9KSksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHIubWluQnkoZS5lZGdlcygpLChmdW5jdGlvbihuKXtpZih0Lmhhc05vZGUobi52KSE9PXQuaGFzTm9kZShuLncpKXJldHVybiBhKGUsbil9KSl9ZnVuY3Rpb24gYyh0LGUsbil7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5ub2RlKHQpLnJhbmsrPW59KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1uZXcgaSh7ZGlyZWN0ZWQ6ITF9KSxsPXQubm9kZXMoKVswXSx1PXQubm9kZUNvdW50KCk7Zm9yKHIuc2V0Tm9kZShsLHt9KTtvKHIsdCk8dTspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LDgwOTM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY2ODEpLmxvbmdlc3RQYXRoLGk9bigzMDApLGE9bigyNDcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpkZWZhdWx0OiFmdW5jdGlvbih0KXthKHQpfSh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiFmdW5jdGlvbih0KXtyKHQpLGkodCl9KHQpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpvKHQpfX07dmFyIG89cn0sMjQ3MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDMwMCksYT1uKDY2ODEpLnNsYWNrLG89big2NjgxKS5sb25nZXN0UGF0aCxzPW4oNTc0KS5hbGcucHJlb3JkZXIsYz1uKDU3NCkuYWxnLnBvc3RvcmRlcixsPW4oMTEzOCkuc2ltcGxpZnk7ZnVuY3Rpb24gdSh0KXt0PWwodCksbyh0KTt2YXIgZSxuPWkodCk7Zm9yKGQobiksaChuLHQpO2U9ZyhuKTspbShuLHQsZSx5KG4sdCxlKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuPWModCx0Lm5vZGVzKCkpO249bi5zbGljZSgwLG4ubGVuZ3RoLTEpLHIuZm9yRWFjaChuLChmdW5jdGlvbihuKXshZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQ7dC5lZGdlKG4scikuY3V0dmFsdWU9Zih0LGUsbil9KHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LGE9ITAsbz1lLmVkZ2UobixpKSxzPTA7cmV0dXJuIG98fChhPSExLG89ZS5lZGdlKGksbikpLHM9by53ZWlnaHQsci5mb3JFYWNoKGUubm9kZUVkZ2VzKG4pLChmdW5jdGlvbihyKXt2YXIgbyxjLGw9ci52PT09bix1PWw/ci53OnIudjtpZih1IT09aSl7dmFyIGg9bD09PWEsZj1lLmVkZ2Uocikud2VpZ2h0O2lmKHMrPWg/ZjotZixvPW4sYz11LHQuaGFzRWRnZShvLGMpKXt2YXIgZD10LmVkZ2Uobix1KS5jdXR2YWx1ZTtzKz1oPy1kOmR9fX0pKSxzfWZ1bmN0aW9uIGQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSkscCh0LHt9LDEsZSl9ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPW4scz10Lm5vZGUoaSk7cmV0dXJuIGVbaV09ITAsci5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihhKXtyLmhhcyhlLGEpfHwobj1wKHQsZSxuLGEsaSkpfSkpLHMubG93PW8scy5saW09bisrLGE/cy5wYXJlbnQ9YTpkZWxldGUgcy5wYXJlbnQsbn1mdW5jdGlvbiBnKHQpe3JldHVybiByLmZpbmQodC5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KSl9ZnVuY3Rpb24geSh0LGUsbil7dmFyIGk9bi52LG89bi53O2UuaGFzRWRnZShpLG8pfHwoaT1uLncsbz1uLnYpO3ZhciBzPXQubm9kZShpKSxjPXQubm9kZShvKSxsPXMsdT0hMTtzLmxpbT5jLmxpbSYmKGw9Yyx1PSEwKTt2YXIgaD1yLmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB1PT09YigwLHQubm9kZShlLnYpLGwpJiZ1IT09YigwLHQubm9kZShlLncpLGwpfSkpO3JldHVybiByLm1pbkJ5KGgsKGZ1bmN0aW9uKHQpe3JldHVybiBhKGUsdCl9KSl9ZnVuY3Rpb24gbSh0LGUsbixpKXt2YXIgYT1uLnYsbz1uLnc7dC5yZW1vdmVFZGdlKGEsbyksdC5zZXRFZGdlKGkudixpLncse30pLGQodCksaCh0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5maW5kKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIWUubm9kZSh0KS5wYXJlbnR9KSksaT1zKHQsbik7aT1pLnNsaWNlKDEpLHIuZm9yRWFjaChpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobikucGFyZW50LGk9ZS5lZGdlKG4sciksYT0hMTtpfHwoaT1lLmVkZ2UocixuKSxhPSEwKSxlLm5vZGUobikucmFuaz1lLm5vZGUocikucmFuaysoYT9pLm1pbmxlbjotaS5taW5sZW4pfSkpfSh0LGUpfWZ1bmN0aW9uIGIodCxlLG4pe3JldHVybiBuLmxvdzw9ZS5saW0mJmUubGltPD1uLmxpbX10LmV4cG9ydHM9dSx1LmluaXRMb3dMaW1WYWx1ZXM9ZCx1LmluaXRDdXRWYWx1ZXM9aCx1LmNhbGNDdXRWYWx1ZT1mLHUubGVhdmVFZGdlPWcsdS5lbnRlckVkZ2U9eSx1LmV4Y2hhbmdlRWRnZXM9bX0sNjY4MToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPXtsb25nZXN0UGF0aDpmdW5jdGlvbih0KXt2YXIgZT17fTtyLmZvckVhY2godC5zb3VyY2VzKCksKGZ1bmN0aW9uIG4oaSl7dmFyIGE9dC5ub2RlKGkpO2lmKHIuaGFzKGUsaSkpcmV0dXJuIGEucmFuaztlW2ldPSEwO3ZhciBvPXIubWluKHIubWFwKHQub3V0RWRnZXMoaSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKGUudyktdC5lZGdlKGUpLm1pbmxlbn0pKSk7cmV0dXJuIG8hPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJm51bGwhPW98fChvPTApLGEucmFuaz1vfSkpfSxzbGFjazpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZS53KS5yYW5rLXQubm9kZShlLnYpLnJhbmstdC5lZGdlKGUpLm1pbmxlbn19fSwxMTM4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSpsPyhzPDAmJihsPS1sKSxuPWwqby9zLHI9bCk6KG88MCYmKGM9LWMpLG49YyxyPWMqcy9vKSx7eDppK24seTphK3J9fSxidWlsZExheWVyTWF0cml4OmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHIucmFuZ2Uobyh0KSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLGE9aS5yYW5rO3IuaXNVbmRlZmluZWQoYSl8fChlW2FdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobik7ci5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbih0KXt2YXIgZT1yLm1pbihyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksbj1bXTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUocikucmFuay1lO25baV18fChuW2ldPVtdKSxuW2ldLnB1c2gocil9KSk7dmFyIGk9MCxhPXQuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtyLmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXtyLmlzVW5kZWZpbmVkKGUpJiZuJWEhPTA/LS1pOmkmJnIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkucmFuays9aX0pKX0pKX0sYWRkQm9yZGVyTm9kZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihpLnJhbms9bixpLm9yZGVyPXIpLGEodCwiYm9yZGVyIixpLGUpfSxtYXhSYW5rOm8scGFydGl0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49e2xoczpbXSxyaHM6W119O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbih0LGUpe3ZhciBuPXIubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoci5ub3coKS1uKSsibXMiKX19LG5vdGltZTpmdW5jdGlvbih0LGUpe3JldHVybiBlKCl9fX0sODE3Nzp0PT57dC5leHBvcnRzPSIwLjguNSJ9LDc4NTY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHQoZSl9ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxlKHQsbil9ZnVuY3Rpb24gbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19ZnVuY3Rpb24gcih0LGksYSl7cmV0dXJuIHI9bigpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKHQsbixyKXt2YXIgaT1bbnVsbF07aS5wdXNoLmFwcGx5KGksbik7dmFyIGE9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkodCxpKSk7cmV0dXJuIHImJmUoYSxyLnByb3RvdHlwZSksYX0sci5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBhKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/YSh0LGUpOnZvaWQgMH19KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgbz1PYmplY3QuaGFzT3duUHJvcGVydHkscz1PYmplY3Quc2V0UHJvdG90eXBlT2YsYz1PYmplY3QuaXNGcm96ZW4sbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9T2JqZWN0LmZyZWV6ZSxmPU9iamVjdC5zZWFsLGQ9T2JqZWN0LmNyZWF0ZSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdCxnPXAuYXBwbHkseT1wLmNvbnN0cnVjdDtnfHwoZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX0pLGh8fChoPWZ1bmN0aW9uKHQpe3JldHVybiB0fSksZnx8KGY9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSx5fHwoeT1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaShlKSl9KTt2YXIgbSxiPUEoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLHY9QShBcnJheS5wcm90b3R5cGUucG9wKSxfPUEoQXJyYXkucHJvdG90eXBlLnB1c2gpLHg9QShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxrPUEoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksdz1BKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksVD1BKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksRT1BKFN0cmluZy5wcm90b3R5cGUudHJpbSksQz1BKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksUz0obT1UeXBlRXJyb3IsZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4geShtLGUpfSk7ZnVuY3Rpb24gQSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxpPTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiBnKHQsZSxyKX19ZnVuY3Rpb24gTSh0LGUsbil7bj1ufHx4LHMmJnModCxudWxsKTtmb3IodmFyIHI9ZS5sZW5ndGg7ci0tOyl7dmFyIGk9ZVtyXTtpZigic3RyaW5nIj09dHlwZW9mIGkpe3ZhciBhPW4oaSk7YSE9PWkmJihjKGUpfHwoZVtyXT1hKSxpPWEpfXRbaV09ITB9cmV0dXJuIHR9ZnVuY3Rpb24gTih0KXt2YXIgZSxuPWQobnVsbCk7Zm9yKGUgaW4gdClnKG8sdCxbZV0pJiYobltlXT10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiBPKHQsZSl7Zm9yKDtudWxsIT09dDspe3ZhciBuPXUodCxlKTtpZihuKXtpZihuLmdldClyZXR1cm4gQShuLmdldCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4udmFsdWUpcmV0dXJuIEEobi52YWx1ZSl9dD1sKHQpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJmYWxsYmFjayB2YWx1ZSBmb3IiLHQpLG51bGx9fXZhciBEPWgoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLEI9aChbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksTD1oKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJnZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLEk9aChbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZlZHJvcHNoYWRvdyIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksRj1oKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiXSksUj1oKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxQPWgoWyIjdGV4dCJdKSxqPWgoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLHo9aChbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLFk9aChbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxVPWgoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSwkPWYoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSxXPWYoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLHE9ZigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxIPWYoL15hcmlhLVtcLVx3XSskLyksVj1mKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksRz1mKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxYPWYoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksWj1mKC9eaHRtbCQvaSksUT1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P251bGw6d2luZG93fSxLPWZ1bmN0aW9uKGUsbil7aWYoIm9iamVjdCIhPT10KGUpfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7dmFyIHI9bnVsbCxpPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO24uY3VycmVudFNjcmlwdCYmbi5jdXJyZW50U2NyaXB0Lmhhc0F0dHJpYnV0ZShpKSYmKHI9bi5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZShpKSk7dmFyIGE9ImRvbXB1cmlmeSIrKHI/IiMiK3I6IiIpO3RyeXtyZXR1cm4gZS5jcmVhdGVQb2xpY3koYSx7Y3JlYXRlSFRNTDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sY3JlYXRlU2NyaXB0VVJMOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pfWNhdGNoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIithKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O3JldHVybiBmdW5jdGlvbiBlKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlEoKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfTtpZihyLnZlcnNpb249IjIuNC4wIixyLnJlbW92ZWQ9W10sIW58fCFuLmRvY3VtZW50fHw5IT09bi5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gci5pc1N1cHBvcnRlZD0hMSxyO3ZhciBhPW4uZG9jdW1lbnQsbz1uLmRvY3VtZW50LHM9bi5Eb2N1bWVudEZyYWdtZW50LGM9bi5IVE1MVGVtcGxhdGVFbGVtZW50LGw9bi5Ob2RlLHU9bi5FbGVtZW50LGY9bi5Ob2RlRmlsdGVyLGQ9bi5OYW1lZE5vZGVNYXAscD12b2lkIDA9PT1kP24uTmFtZWROb2RlTWFwfHxuLk1vek5hbWVkQXR0ck1hcDpkLGc9bi5IVE1MRm9ybUVsZW1lbnQseT1uLkRPTVBhcnNlcixtPW4udHJ1c3RlZFR5cGVzLEE9dS5wcm90b3R5cGUsSj1PKEEsImNsb25lTm9kZSIpLHR0PU8oQSwibmV4dFNpYmxpbmciKSxldD1PKEEsImNoaWxkTm9kZXMiKSxudD1PKEEsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYyl7dmFyIHJ0PW8uY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtydC5jb250ZW50JiZydC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihvPXJ0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9dmFyIGl0PUsobSxhKSxhdD1pdD9pdC5jcmVhdGVIVE1MKCIiKToiIixvdD1vLHN0PW90LmltcGxlbWVudGF0aW9uLGN0PW90LmNyZWF0ZU5vZGVJdGVyYXRvcixsdD1vdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LHV0PW90LmdldEVsZW1lbnRzQnlUYWdOYW1lLGh0PWEuaW1wb3J0Tm9kZSxmdD17fTt0cnl7ZnQ9TihvKS5kb2N1bWVudE1vZGU/by5kb2N1bWVudE1vZGU6e319Y2F0Y2godCl7fXZhciBkdD17fTtyLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBudCYmc3QmJnZvaWQgMCE9PXN0LmNyZWF0ZUhUTUxEb2N1bWVudCYmOSE9PWZ0O3ZhciBwdCxndCx5dD0kLG10PVcsYnQ9cSx2dD1ILF90PUcseHQ9WCxrdD1WLHd0PW51bGwsVHQ9TSh7fSxbXS5jb25jYXQoaShEKSxpKEIpLGkoTCksaShGKSxpKFApKSksRXQ9bnVsbCxDdD1NKHt9LFtdLmNvbmNhdChpKGopLGkoeiksaShZKSxpKFUpKSksU3Q9T2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksQXQ9bnVsbCxNdD1udWxsLE50PSEwLE90PSEwLER0PSExLEJ0PSExLEx0PSExLEl0PSExLEZ0PSExLFJ0PSExLFB0PSExLGp0PSExLHp0PSEwLFl0PSExLFV0PSJ1c2VyLWNvbnRlbnQtIiwkdD0hMCxXdD0hMSxxdD17fSxIdD1udWxsLFZ0PU0oe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKSxHdD1udWxsLFh0PU0oe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKSxadD1udWxsLFF0PU0oe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxLdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsSnQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsZWU9dGUsbmU9ITEscmU9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSxpZT0idGV4dC9odG1sIixhZT1udWxsLG9lPW8uY3JlYXRlRWxlbWVudCgiZm9ybSIpLHNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfHx0IGluc3RhbmNlb2YgRnVuY3Rpb259LGNlPWZ1bmN0aW9uKGUpe2FlJiZhZT09PWV8fChlJiYib2JqZWN0Ij09PXQoZSl8fChlPXt9KSxlPU4oZSkscHQ9cHQ9LTE9PT1yZS5pbmRleE9mKGUuUEFSU0VSX01FRElBX1RZUEUpP2llOmUuUEFSU0VSX01FRElBX1RZUEUsZ3Q9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1wdD9mdW5jdGlvbih0KXtyZXR1cm4gdH06eCx3dD0iQUxMT1dFRF9UQUdTImluIGU/TSh7fSxlLkFMTE9XRURfVEFHUyxndCk6VHQsRXQ9IkFMTE9XRURfQVRUUiJpbiBlP00oe30sZS5BTExPV0VEX0FUVFIsZ3QpOkN0LFp0PSJBRERfVVJJX1NBRkVfQVRUUiJpbiBlP00oTihRdCksZS5BRERfVVJJX1NBRkVfQVRUUixndCk6UXQsR3Q9IkFERF9EQVRBX1VSSV9UQUdTImluIGU/TShOKFh0KSxlLkFERF9EQVRBX1VSSV9UQUdTLGd0KTpYdCxIdD0iRk9SQklEX0NPTlRFTlRTImluIGU/TSh7fSxlLkZPUkJJRF9DT05URU5UUyxndCk6VnQsQXQ9IkZPUkJJRF9UQUdTImluIGU/TSh7fSxlLkZPUkJJRF9UQUdTLGd0KTp7fSxNdD0iRk9SQklEX0FUVFIiaW4gZT9NKHt9LGUuRk9SQklEX0FUVFIsZ3QpOnt9LHF0PSJVU0VfUFJPRklMRVMiaW4gZSYmZS5VU0VfUFJPRklMRVMsTnQ9ITEhPT1lLkFMTE9XX0FSSUFfQVRUUixPdD0hMSE9PWUuQUxMT1dfREFUQV9BVFRSLER0PWUuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLEJ0PWUuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxMdD1lLldIT0xFX0RPQ1VNRU5UfHwhMSxSdD1lLlJFVFVSTl9ET018fCExLFB0PWUuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsanQ9ZS5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxGdD1lLkZPUkNFX0JPRFl8fCExLHp0PSExIT09ZS5TQU5JVElaRV9ET00sWXQ9ZS5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsJHQ9ITEhPT1lLktFRVBfQ09OVEVOVCxXdD1lLklOX1BMQUNFfHwhMSxrdD1lLkFMTE9XRURfVVJJX1JFR0VYUHx8a3QsZWU9ZS5OQU1FU1BBQ0V8fHRlLGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnNlKGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKFN0LnRhZ05hbWVDaGVjaz1lLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmc2UoZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoU3QuYXR0cmlidXRlTmFtZUNoZWNrPWUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiBlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKFN0LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1lLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksQnQmJihPdD0hMSksUHQmJihSdD0hMCkscXQmJih3dD1NKHt9LGkoUCkpLEV0PVtdLCEwPT09cXQuaHRtbCYmKE0od3QsRCksTShFdCxqKSksITA9PT1xdC5zdmcmJihNKHd0LEIpLE0oRXQseiksTShFdCxVKSksITA9PT1xdC5zdmdGaWx0ZXJzJiYoTSh3dCxMKSxNKEV0LHopLE0oRXQsVSkpLCEwPT09cXQubWF0aE1sJiYoTSh3dCxGKSxNKEV0LFkpLE0oRXQsVSkpKSxlLkFERF9UQUdTJiYod3Q9PT1UdCYmKHd0PU4od3QpKSxNKHd0LGUuQUREX1RBR1MsZ3QpKSxlLkFERF9BVFRSJiYoRXQ9PT1DdCYmKEV0PU4oRXQpKSxNKEV0LGUuQUREX0FUVFIsZ3QpKSxlLkFERF9VUklfU0FGRV9BVFRSJiZNKFp0LGUuQUREX1VSSV9TQUZFX0FUVFIsZ3QpLGUuRk9SQklEX0NPTlRFTlRTJiYoSHQ9PT1WdCYmKEh0PU4oSHQpKSxNKEh0LGUuRk9SQklEX0NPTlRFTlRTLGd0KSksJHQmJih3dFsiI3RleHQiXT0hMCksTHQmJk0od3QsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksd3QudGFibGUmJihNKHd0LFsidGJvZHkiXSksZGVsZXRlIEF0LnRib2R5KSxoJiZoKGUpLGFlPWUpfSxsZT1NKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSx1ZT1NKHt9LFsiZm9yZWlnbm9iamVjdCIsImRlc2MiLCJ0aXRsZSIsImFubm90YXRpb24teG1sIl0pLGhlPU0oe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksZmU9TSh7fSxCKTtNKGZlLEwpLE0oZmUsSSk7dmFyIGRlPU0oe30sRik7TShkZSxSKTt2YXIgcGU9ZnVuY3Rpb24odCl7dmFyIGU9bnQodCk7ZSYmZS50YWdOYW1lfHwoZT17bmFtZXNwYWNlVVJJOnRlLHRhZ05hbWU6InRlbXBsYXRlIn0pO3ZhciBuPXgodC50YWdOYW1lKSxyPXgoZS50YWdOYW1lKTtyZXR1cm4gdC5uYW1lc3BhY2VVUkk9PT1KdD9lLm5hbWVzcGFjZVVSST09PXRlPyJzdmciPT09bjplLm5hbWVzcGFjZVVSST09PUt0PyJzdmciPT09biYmKCJhbm5vdGF0aW9uLXhtbCI9PT1yfHxsZVtyXSk6Qm9vbGVhbihmZVtuXSk6dC5uYW1lc3BhY2VVUkk9PT1LdD9lLm5hbWVzcGFjZVVSST09PXRlPyJtYXRoIj09PW46ZS5uYW1lc3BhY2VVUkk9PT1KdD8ibWF0aCI9PT1uJiZ1ZVtyXTpCb29sZWFuKGRlW25dKTp0Lm5hbWVzcGFjZVVSST09PXRlJiYhKGUubmFtZXNwYWNlVVJJPT09SnQmJiF1ZVtyXSkmJiEoZS5uYW1lc3BhY2VVUkk9PT1LdCYmIWxlW3JdKSYmIWRlW25dJiYoaGVbbl18fCFmZVtuXSl9LGdlPWZ1bmN0aW9uKHQpe18oci5yZW1vdmVkLHtlbGVtZW50OnR9KTt0cnl7dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNhdGNoKGUpe3RyeXt0Lm91dGVySFRNTD1hdH1jYXRjaChlKXt0LnJlbW92ZSgpfX19LHllPWZ1bmN0aW9uKHQsZSl7dHJ5e18oci5yZW1vdmVkLHthdHRyaWJ1dGU6ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpLGZyb206ZX0pfWNhdGNoKHQpe18oci5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmV9KX1pZihlLnJlbW92ZUF0dHJpYnV0ZSh0KSwiaXMiPT09dCYmIUV0W3RdKWlmKFJ0fHxQdCl0cnl7Z2UoZSl9Y2F0Y2godCl7fWVsc2UgdHJ5e2Uuc2V0QXR0cmlidXRlKHQsIiIpfWNhdGNoKHQpe319LG1lPWZ1bmN0aW9uKHQpe3ZhciBlLG47aWYoRnQpdD0iPHJlbW92ZT48L3JlbW92ZT4iK3Q7ZWxzZXt2YXIgcj1rKHQsL15bXHJcblx0IF0rLyk7bj1yJiZyWzBdfSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09cHQmJih0PSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrdCsiPC9ib2R5PjwvaHRtbD4iKTt2YXIgaT1pdD9pdC5jcmVhdGVIVE1MKHQpOnQ7aWYoZWU9PT10ZSl0cnl7ZT0obmV3IHkpLnBhcnNlRnJvbVN0cmluZyhpLHB0KX1jYXRjaCh0KXt9aWYoIWV8fCFlLmRvY3VtZW50RWxlbWVudCl7ZT1zdC5jcmVhdGVEb2N1bWVudChlZSwidGVtcGxhdGUiLG51bGwpO3RyeXtlLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9bmU/IiI6aX1jYXRjaCh0KXt9fXZhciBhPWUuYm9keXx8ZS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQmJm4mJmEuaW5zZXJ0QmVmb3JlKG8uY3JlYXRlVGV4dE5vZGUobiksYS5jaGlsZE5vZGVzWzBdfHxudWxsKSxlZT09PXRlP3V0LmNhbGwoZSxMdD8iaHRtbCI6ImJvZHkiKVswXTpMdD9lLmRvY3VtZW50RWxlbWVudDphfSxiZT1mdW5jdGlvbih0KXtyZXR1cm4gY3QuY2FsbCh0Lm93bmVyRG9jdW1lbnR8fHQsdCxmLlNIT1dfRUxFTUVOVHxmLlNIT1dfQ09NTUVOVHxmLlNIT1dfVEVYVCxudWxsLCExKX0sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnJiYoInN0cmluZyIhPXR5cGVvZiB0Lm5vZGVOYW1lfHwic3RyaW5nIiE9dHlwZW9mIHQudGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LnJlbW92ZUNoaWxkfHwhKHQuYXR0cmlidXRlcyBpbnN0YW5jZW9mIHApfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LnNldEF0dHJpYnV0ZXx8InN0cmluZyIhPXR5cGVvZiB0Lm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuaW5zZXJ0QmVmb3JlKX0sX2U9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT10KGwpP2UgaW5zdGFuY2VvZiBsOmUmJiJvYmplY3QiPT09dChlKSYmIm51bWJlciI9PXR5cGVvZiBlLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIGUubm9kZU5hbWV9LHhlPWZ1bmN0aW9uKHQsZSxuKXtkdFt0XSYmYihkdFt0XSwoZnVuY3Rpb24odCl7dC5jYWxsKHIsZSxuLGFlKX0pKX0sa2U9ZnVuY3Rpb24odCl7dmFyIGU7aWYoeGUoImJlZm9yZVNhbml0aXplRWxlbWVudHMiLHQsbnVsbCksdmUodCkpcmV0dXJuIGdlKHQpLCEwO2lmKEMoL1tcdTAwODAtXHVGRkZGXS8sdC5ub2RlTmFtZSkpcmV0dXJuIGdlKHQpLCEwO3ZhciBuPWd0KHQubm9kZU5hbWUpO2lmKHhlKCJ1cG9uU2FuaXRpemVFbGVtZW50Iix0LHt0YWdOYW1lOm4sYWxsb3dlZFRhZ3M6d3R9KSx0Lmhhc0NoaWxkTm9kZXMoKSYmIV9lKHQuZmlyc3RFbGVtZW50Q2hpbGQpJiYoIV9lKHQuY29udGVudCl8fCFfZSh0LmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmQygvPFsvXHddL2csdC5pbm5lckhUTUwpJiZDKC88Wy9cd10vZyx0LnRleHRDb250ZW50KSlyZXR1cm4gZ2UodCksITA7aWYoInNlbGVjdCI9PT1uJiZDKC88dGVtcGxhdGUvaSx0LmlubmVySFRNTCkpcmV0dXJuIGdlKHQpLCEwO2lmKCF3dFtuXXx8QXRbbl0pe2lmKCFBdFtuXSYmVGUobikpe2lmKFN0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmQyhTdC50YWdOYW1lQ2hlY2ssbikpcmV0dXJuITE7aWYoU3QudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlN0LnRhZ05hbWVDaGVjayhuKSlyZXR1cm4hMX1pZigkdCYmIUh0W25dKXt2YXIgaT1udCh0KXx8dC5wYXJlbnROb2RlLGE9ZXQodCl8fHQuY2hpbGROb2RlcztpZihhJiZpKWZvcih2YXIgbz1hLmxlbmd0aC0xO28+PTA7LS1vKWkuaW5zZXJ0QmVmb3JlKEooYVtvXSwhMCksdHQodCkpfXJldHVybiBnZSh0KSwhMH1yZXR1cm4gdCBpbnN0YW5jZW9mIHUmJiFwZSh0KT8oZ2UodCksITApOiJub3NjcmlwdCIhPT1uJiYibm9lbWJlZCIhPT1ufHwhQygvPFwvbm8oc2NyaXB0fGVtYmVkKS9pLHQuaW5uZXJIVE1MKT8oQnQmJjM9PT10Lm5vZGVUeXBlJiYoZT10LnRleHRDb250ZW50LGU9dyhlLHl0LCIgIiksZT13KGUsbXQsIiAiKSx0LnRleHRDb250ZW50IT09ZSYmKF8oci5yZW1vdmVkLHtlbGVtZW50OnQuY2xvbmVOb2RlKCl9KSx0LnRleHRDb250ZW50PWUpKSx4ZSgiYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzIix0LG51bGwpLCExKTooZ2UodCksITApfSx3ZT1mdW5jdGlvbih0LGUsbil7aWYoenQmJigiaWQiPT09ZXx8Im5hbWUiPT09ZSkmJihuIGluIG98fG4gaW4gb2UpKXJldHVybiExO2lmKE90JiYhTXRbZV0mJkMoYnQsZSkpO2Vsc2UgaWYoTnQmJkModnQsZSkpO2Vsc2UgaWYoIUV0W2VdfHxNdFtlXSl7aWYoIShUZSh0KSYmKFN0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmQyhTdC50YWdOYW1lQ2hlY2ssdCl8fFN0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZTdC50YWdOYW1lQ2hlY2sodCkpJiYoU3QuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZDKFN0LmF0dHJpYnV0ZU5hbWVDaGVjayxlKXx8U3QuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlN0LmF0dHJpYnV0ZU5hbWVDaGVjayhlKSl8fCJpcyI9PT1lJiZTdC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihTdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkMoU3QudGFnTmFtZUNoZWNrLG4pfHxTdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmU3QudGFnTmFtZUNoZWNrKG4pKSkpcmV0dXJuITF9ZWxzZSBpZihadFtlXSk7ZWxzZSBpZihDKGt0LHcobix4dCwiIikpKTtlbHNlIGlmKCJzcmMiIT09ZSYmInhsaW5rOmhyZWYiIT09ZSYmImhyZWYiIT09ZXx8InNjcmlwdCI9PT10fHwwIT09VChuLCJkYXRhOiIpfHwhR3RbdF0paWYoRHQmJiFDKF90LHcobix4dCwiIikpKTtlbHNlIGlmKG4pcmV0dXJuITE7cmV0dXJuITB9LFRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmluZGV4T2YoIi0iKT4wfSxFZT1mdW5jdGlvbihlKXt2YXIgbixpLGEsbzt4ZSgiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIixlLG51bGwpO3ZhciBzPWUuYXR0cmlidXRlcztpZihzKXt2YXIgYz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkV0fTtmb3Iobz1zLmxlbmd0aDtvLS07KXt2YXIgbD1uPXNbb10sdT1sLm5hbWUsaD1sLm5hbWVzcGFjZVVSSTtpZihpPSJ2YWx1ZSI9PT11P24udmFsdWU6RShuLnZhbHVlKSxhPWd0KHUpLGMuYXR0ck5hbWU9YSxjLmF0dHJWYWx1ZT1pLGMua2VlcEF0dHI9ITAsYy5mb3JjZUtlZXBBdHRyPXZvaWQgMCx4ZSgidXBvblNhbml0aXplQXR0cmlidXRlIixlLGMpLGk9Yy5hdHRyVmFsdWUsIWMuZm9yY2VLZWVwQXR0ciYmKHllKHUsZSksYy5rZWVwQXR0cikpaWYoQygvXC8+L2ksaSkpeWUodSxlKTtlbHNle0J0JiYoaT13KGkseXQsIiAiKSxpPXcoaSxtdCwiICIpKTt2YXIgZj1ndChlLm5vZGVOYW1lKTtpZih3ZShmLGEsaSkpe2lmKCFZdHx8ImlkIiE9PWEmJiJuYW1lIiE9PWF8fCh5ZSh1LGUpLGk9VXQraSksaXQmJiJvYmplY3QiPT09dChtKSYmImZ1bmN0aW9uIj09dHlwZW9mIG0uZ2V0QXR0cmlidXRlVHlwZSlpZihoKTtlbHNlIHN3aXRjaChtLmdldEF0dHJpYnV0ZVR5cGUoZixhKSl7Y2FzZSJUcnVzdGVkSFRNTCI6aT1pdC5jcmVhdGVIVE1MKGkpO2JyZWFrO2Nhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6aT1pdC5jcmVhdGVTY3JpcHRVUkwoaSl9dHJ5e2g/ZS5zZXRBdHRyaWJ1dGVOUyhoLHUsaSk6ZS5zZXRBdHRyaWJ1dGUodSxpKSx2KHIucmVtb3ZlZCl9Y2F0Y2godCl7fX19fXhlKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsZSxudWxsKX19LENlPWZ1bmN0aW9uIHQoZSl7dmFyIG4scj1iZShlKTtmb3IoeGUoImJlZm9yZVNhbml0aXplU2hhZG93RE9NIixlLG51bGwpO249ci5uZXh0Tm9kZSgpOyl4ZSgidXBvblNhbml0aXplU2hhZG93Tm9kZSIsbixudWxsKSxrZShuKXx8KG4uY29udGVudCBpbnN0YW5jZW9mIHMmJnQobi5jb250ZW50KSxFZShuKSk7eGUoImFmdGVyU2FuaXRpemVTaGFkb3dET00iLGUsbnVsbCl9O3JldHVybiByLnNhbml0aXplPWZ1bmN0aW9uKGUpe3ZhciBpLG8sYyx1LGgsZj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoKG5lPSFlKSYmKGU9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiBlJiYhX2UoZSkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nKXRocm93IFMoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZihlPWUudG9TdHJpbmcoKSkpdGhyb3cgUygiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFyLmlzU3VwcG9ydGVkKXtpZigib2JqZWN0Ij09PXQobi50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbi50b1N0YXRpY0hUTUwpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbi50b1N0YXRpY0hUTUwoZSk7aWYoX2UoZSkpcmV0dXJuIG4udG9TdGF0aWNIVE1MKGUub3V0ZXJIVE1MKX1yZXR1cm4gZX1pZihJdHx8Y2UoZiksci5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgZSYmKFd0PSExKSxXdCl7aWYoZS5ub2RlTmFtZSl7dmFyIGQ9Z3QoZS5ub2RlTmFtZSk7aWYoIXd0W2RdfHxBdFtkXSl0aHJvdyBTKCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlIil9fWVsc2UgaWYoZSBpbnN0YW5jZW9mIGwpMT09PShvPShpPW1lKCJceDNjIS0tLS1ceDNlIikpLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShlLCEwKSkubm9kZVR5cGUmJiJCT0RZIj09PW8ubm9kZU5hbWV8fCJIVE1MIj09PW8ubm9kZU5hbWU/aT1vOmkuYXBwZW5kQ2hpbGQobyk7ZWxzZXtpZighUnQmJiFCdCYmIUx0JiYtMT09PWUuaW5kZXhPZigiPCIpKXJldHVybiBpdCYmanQ/aXQuY3JlYXRlSFRNTChlKTplO2lmKCEoaT1tZShlKSkpcmV0dXJuIFJ0P251bGw6anQ/YXQ6IiJ9aSYmRnQmJmdlKGkuZmlyc3RDaGlsZCk7Zm9yKHZhciBwPWJlKFd0P2U6aSk7Yz1wLm5leHROb2RlKCk7KTM9PT1jLm5vZGVUeXBlJiZjPT09dXx8a2UoYyl8fChjLmNvbnRlbnQgaW5zdGFuY2VvZiBzJiZDZShjLmNvbnRlbnQpLEVlKGMpLHU9Yyk7aWYodT1udWxsLFd0KXJldHVybiBlO2lmKFJ0KXtpZihQdClmb3IoaD1sdC5jYWxsKGkub3duZXJEb2N1bWVudCk7aS5maXJzdENoaWxkOyloLmFwcGVuZENoaWxkKGkuZmlyc3RDaGlsZCk7ZWxzZSBoPWk7cmV0dXJuIEV0LnNoYWRvd3Jvb3QmJihoPWh0LmNhbGwoYSxoLCEwKSksaH12YXIgZz1MdD9pLm91dGVySFRNTDppLmlubmVySFRNTDtyZXR1cm4gTHQmJnd0WyIhZG9jdHlwZSJdJiZpLm93bmVyRG9jdW1lbnQmJmkub3duZXJEb2N1bWVudC5kb2N0eXBlJiZpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZDKFosaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihnPSI8IURPQ1RZUEUgIitpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK2cpLEJ0JiYoZz13KGcseXQsIiAiKSxnPXcoZyxtdCwiICIpKSxpdCYmanQ/aXQuY3JlYXRlSFRNTChnKTpnfSxyLnNldENvbmZpZz1mdW5jdGlvbih0KXtjZSh0KSxJdD0hMH0sci5jbGVhckNvbmZpZz1mdW5jdGlvbigpe2FlPW51bGwsSXQ9ITF9LHIuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7YWV8fGNlKHt9KTt2YXIgcj1ndCh0KSxpPWd0KGUpO3JldHVybiB3ZShyLGksbil9LHIuYWRkSG9vaz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZHRbdF09ZHRbdF18fFtdLF8oZHRbdF0sZSkpfSxyLnJlbW92ZUhvb2s9ZnVuY3Rpb24odCl7aWYoZHRbdF0pcmV0dXJuIHYoZHRbdF0pfSxyLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKHQpe2R0W3RdJiYoZHRbdF09W10pfSxyLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7ZHQ9e319LHJ9KCl9KCl9LDgyODI6KHQsZSxuKT0+e3ZhciByPW4oMjM1NCk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246big4OTc0KSxhbGc6bigyNDQwKSx2ZXJzaW9uOnIudmVyc2lvbn19LDI4NDI6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSwzOTg0Oih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO2Z1bmN0aW9uIGkodCxlLG4sYSxvLHMpe3IuaGFzKGEsZSl8fChhW2VdPSEwLG58fHMucHVzaChlKSxyLmVhY2gobyhlKSwoZnVuY3Rpb24oZSl7aSh0LGUsbixhLG8scyl9KSksbiYmcy5wdXNoKGUpKX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3IuaXNBcnJheShlKXx8KGU9W2VdKTt2YXIgYT0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLG89W10scz17fTtyZXR1cm4gci5lYWNoKGUsKGZ1bmN0aW9uKGUpe2lmKCF0Lmhhc05vZGUoZSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrZSk7aSh0LGUsInBvc3QiPT09bixzLGEsbyl9KSksb319LDQ4NDc6KHQsZSxuKT0+e3ZhciByPW4oMzc2MyksaT1uKDkxMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGkudHJhbnNmb3JtKHQubm9kZXMoKSwoZnVuY3Rpb24oaSxhKXtpW2FdPXIodCxhLGUsbil9KSx7fSl9fSwzNzYzOih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpLGk9big5Njc1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBhLG8scz17fSxjPW5ldyBpLGw9ZnVuY3Rpb24odCl7dmFyIGU9dC52IT09YT90LnY6dC53LHI9c1tlXSxpPW4odCksbD1vLmRpc3RhbmNlK2k7aWYoaTwwKXRocm93IG5ldyBFcnJvcigiZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiBCYWQgZWRnZTogIit0KyIgV2VpZ2h0OiAiK2kpO2w8ci5kaXN0YW5jZSYmKHIuZGlzdGFuY2U9bCxyLnByZWRlY2Vzc29yPWEsYy5kZWNyZWFzZShlLGwpKX07Zm9yKHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Muc2l6ZSgpPjAmJihhPWMucmVtb3ZlTWluKCksKG89c1thXSkuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOylyKGEpLmZvckVhY2gobCk7cmV0dXJuIHN9KHQsU3RyaW5nKGUpLG58fGEscnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX07dmFyIGE9ci5jb25zdGFudCgxKX0sOTA5NjoodCxlLG4pPT57dmFyIHI9big5MTI2KSxpPW4oNTAyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmZpbHRlcihpKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+MXx8MT09PWUubGVuZ3RoJiZ0Lmhhc0VkZ2UoZVswXSxlWzBdKX0pKX19LDg5MjQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9LGk9dC5ub2RlcygpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09e30sclt0XVt0XT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKChmdW5jdGlvbihlKXt0IT09ZSYmKHJbdF1bZV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkpLG4odCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi52PT09dD9uLnc6bi52LGE9ZShuKTtyW3RdW2ldPXtkaXN0YW5jZTphLHByZWRlY2Vzc29yOnR9fSkpfSkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhPXJbbl07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1hW3RdLGk9ZVtuXSxvPWFbbl0scz1yLmRpc3RhbmNlK2kuZGlzdGFuY2U7czxvLmRpc3RhbmNlJiYoby5kaXN0YW5jZT1zLG8ucHJlZGVjZXNzb3I9aS5wcmVkZWNlc3Nvcil9KSl9KSl9KSkscn0odCxlfHxpLG58fGZ1bmN0aW9uKGUpe3JldHVybiB0Lm91dEVkZ2VzKGUpfSl9O3ZhciBpPXIuY29uc3RhbnQoMSl9LDI0NDA6KHQsZSxuKT0+e3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDI4NDIpLGRpamtzdHJhOm4oMzc2MyksZGlqa3N0cmFBbGw6big0ODQ3KSxmaW5kQ3ljbGVzOm4oOTA5NiksZmxveWRXYXJzaGFsbDpuKDg5MjQpLGlzQWN5Y2xpYzpuKDI3MDcpLHBvc3RvcmRlcjpuKDg4MjgpLHByZW9yZGVyOm4oMjY0OCkscHJpbTpuKDUxNCksdGFyamFuOm4oNTAyMyksdG9wc29ydDpuKDIxNjYpfX0sMjcwNzoodCxlLG4pPT57dmFyIHI9bigyMTY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3IodCl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIHIuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH19LDg4Mjg6KHQsZSxuKT0+e3ZhciByPW4oMzk4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwb3N0Iil9fSwyNjQ4Oih0LGUsbik9Pnt2YXIgcj1uKDM5ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwicHJlIil9fSw1MTQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDc3MSksYT1uKDk2NzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIGwodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO2Zvcih2YXIgdT0hMTtjLnNpemUoKT4wOyl7aWYobj1jLnJlbW92ZU1pbigpLHIuaGFzKHMsbikpby5zZXRFZGdlKG4sc1tuXSk7ZWxzZXtpZih1KXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIit0KTt1PSEwfXQubm9kZUVkZ2VzKG4pLmZvckVhY2gobCl9cmV0dXJuIG99fSw1MDIzOih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLG49W10saT17fSxhPVtdO2Z1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgbCx1PVtdO2Rve2w9bi5wb3AoKSxpW2xdLm9uU3RhY2s9ITEsdS5wdXNoKGwpfXdoaWxlKHMhPT1sKTthLnB1c2godSl9fXJldHVybiB0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5oYXMoaSx0KXx8byh0KX0pKSxhfX0sMjE2NjoodCxlLG4pPT57dmFyIHI9big5MTI2KTtmdW5jdGlvbiBpKHQpe3ZhciBlPXt9LG49e30saT1bXTtpZihyLmVhY2godC5zaW5rcygpLChmdW5jdGlvbiBvKHMpe2lmKHIuaGFzKG4scykpdGhyb3cgbmV3IGE7ci5oYXMoZSxzKXx8KG5bc109ITAsZVtzXT0hMCxyLmVhY2godC5wcmVkZWNlc3NvcnMocyksbyksZGVsZXRlIG5bc10saS5wdXNoKHMpKX0pKSxyLnNpemUoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBhO3JldHVybiBpfWZ1bmN0aW9uIGEoKXt9dC5leHBvcnRzPWksaS5DeWNsZUV4Y2VwdGlvbj1hLGEucHJvdG90eXBlPW5ldyBFcnJvcn0sOTY3NToodCxlLG4pPT57dmFyIHI9big5MTI2KTtmdW5jdGlvbiBpKCl7dGhpcy5fYXJyPVtdLHRoaXMuX2tleUluZGljZXM9e319dC5leHBvcnRzPWksaS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofSxpLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0saS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9rZXlJbmRpY2VzLHQpfSxpLnByb3RvdHlwZS5wcmlvcml0eT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKHZvaWQgMCE9PWUpcmV0dXJuIHRoaXMuX2FycltlXS5wcmlvcml0eX0saS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXM7aWYodD1TdHJpbmcodCksIXIuaGFzKG4sdCkpe3ZhciBpPXRoaXMuX2FycixhPWkubGVuZ3RoO3JldHVybiBuW3RdPWEsaS5wdXNoKHtrZXk6dCxwcmlvcml0eTplfSksdGhpcy5fZGVjcmVhc2UoYSksITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciB0PXRoaXMuX2Fyci5wb3AoKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2tleUluZGljZXNbdC5rZXldLHRoaXMuX2hlYXBpZnkoMCksdC5rZXl9LGkucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlc1t0XTtpZihlPnRoaXMuX2FycltuXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK3QrIiBPbGQ6ICIrdGhpcy5fYXJyW25dLnByaW9yaXR5KyIgTmV3OiAiK2UpO3RoaXMuX2FycltuXS5wcmlvcml0eT1lLHRoaXMuX2RlY3JlYXNlKG4pfSxpLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hcnIsbj0yKnQscj1uKzEsaT10O248ZS5sZW5ndGgmJihpPWVbbl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9uOmkscjxlLmxlbmd0aCYmKGk9ZVtyXS5wcmlvcml0eTxlW2ldLnByaW9yaXR5P3I6aSksaSE9PXQmJih0aGlzLl9zd2FwKHQsaSksdGhpcy5faGVhcGlmeShpKSkpfSxpLnByb3RvdHlwZS5fZGVjcmVhc2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5fYXJyLHI9blt0XS5wcmlvcml0eTswIT09dCYmIShuW2U9dD4+MV0ucHJpb3JpdHk8cik7KXRoaXMuX3N3YXAodCxlKSx0PWV9LGkucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fYXJyLHI9dGhpcy5fa2V5SW5kaWNlcyxpPW5bdF0sYT1uW2VdO25bdF09YSxuW2VdPWksclthLmtleV09dCxyW2kua2V5XT1lfX0sNzcxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big5MTI2KTt0LmV4cG9ydHM9YTt2YXIgaT0iXDAiO2Z1bmN0aW9uIGEodCl7dGhpcy5faXNEaXJlY3RlZD0hci5oYXModCwiZGlyZWN0ZWQiKXx8dC5kaXJlY3RlZCx0aGlzLl9pc011bHRpZ3JhcGg9ISFyLmhhcyh0LCJtdWx0aWdyYXBoIikmJnQubXVsdGlncmFwaCx0aGlzLl9pc0NvbXBvdW5kPSEhci5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX25vZGVzPXt9LHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnQ9e30sdGhpcy5fY2hpbGRyZW49e30sdGhpcy5fY2hpbGRyZW5bIlwwIl09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319ZnVuY3Rpb24gbyh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBzKHQsZSl7LS10W2VdfHxkZWxldGUgdFtlXX1mdW5jdGlvbiBjKHQsZSxuLGkpe3ZhciBhPSIiK2Usbz0iIituO2lmKCF0JiZhPm8pe3ZhciBzPWE7YT1vLG89c31yZXR1cm4gYSsiASIrbysiASIrKHIuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiBsKHQsZSxuLHIpe3ZhciBpPSIiK2UsYT0iIituO2lmKCF0JiZpPmEpe3ZhciBvPWk7aT1hLGE9b312YXIgcz17djppLHc6YX07cmV0dXJuIHImJihzLm5hbWU9ciksc31mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGModCxlLnYsZS53LGUubmFtZSl9YS5wcm90b3R5cGUuX25vZGVDb3VudD0wLGEucHJvdG90eXBlLl9lZGdlQ291bnQ9MCxhLnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LGEucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9LGEucHJvdG90eXBlLmlzQ29tcG91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wb3VuZH0sYS5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30sYS5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9LGEucHJvdG90eXBlLnNldERlZmF1bHROb2RlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXQsdGhpc30sYS5wcm90b3R5cGUubm9kZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH0sYS5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5rZXlzKHRoaXMuX25vZGVzKX0sYS5wcm90b3R5cGUuc291cmNlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9pbltlXSl9KSl9LGEucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX291dFtlXSl9KSl9LGEucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLGk9dGhpcztyZXR1cm4gci5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LGEucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3RdPWUpLHRoaXMpOih0aGlzLl9ub2Rlc1t0XT1hcmd1bWVudHMubGVuZ3RoPjE/ZTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4odCksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFt0XT1pLHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0sYS5wcm90b3R5cGUubm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbm9kZXNbdF19LGEucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpfSxhLnByb3RvdHlwZS5yZW1vdmVOb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoci5oYXModGhpcy5fbm9kZXMsdCkpe3ZhciBuPWZ1bmN0aW9uKHQpe2UucmVtb3ZlRWRnZShlLl9lZGdlT2Jqc1t0XSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1t0XSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksZGVsZXRlIHRoaXMuX3BhcmVudFt0XSxyLmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxyLmVhY2goci5rZXlzKHRoaXMuX2luW3RdKSxuKSxkZWxldGUgdGhpcy5faW5bdF0sZGVsZXRlIHRoaXMuX3ByZWRzW3RdLHIuZWFjaChyLmtleXModGhpcy5fb3V0W3RdKSxuKSxkZWxldGUgdGhpcy5fb3V0W3RdLGRlbGV0ZSB0aGlzLl9zdWNzW3RdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoci5pc1VuZGVmaW5lZChlKSllPWk7ZWxzZXtmb3IodmFyIG49ZSs9IiI7IXIuaXNVbmRlZmluZWQobik7bj10aGlzLnBhcmVudChuKSlpZihuPT09dCl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitlKyIgYXMgcGFyZW50IG9mICIrdCsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKGUpfXJldHVybiB0aGlzLnNldE5vZGUodCksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksdGhpcy5fcGFyZW50W3RdPWUsdGhpcy5fY2hpbGRyZW5bZV1bdF09ITAsdGhpc30sYS5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxhLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fcGFyZW50W3RdO2lmKGUhPT1pKXJldHVybiBlfX0sYS5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoci5pc1VuZGVmaW5lZCh0KSYmKHQ9aSksdGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fY2hpbGRyZW5bdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfWVsc2V7aWYodD09PWkpcmV0dXJuIHRoaXMubm9kZXMoKTtpZih0aGlzLmhhc05vZGUodCkpcmV0dXJuW119fSxhLnByb3RvdHlwZS5wcmVkZWNlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJlZHNbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxhLnByb3RvdHlwZS5zdWNjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1Y3NbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxhLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gci51bmlvbihlLHRoaXMuc3VjY2Vzc29ycyh0KSl9LGEucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PSh0aGlzLmlzRGlyZWN0ZWQoKT90aGlzLnN1Y2Nlc3NvcnModCk6dGhpcy5uZWlnaGJvcnModCkpLmxlbmd0aH0sYS5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO3IuZWFjaCh0aGlzLl9ub2RlcywoZnVuY3Rpb24obixyKXt0KHIpJiZlLnNldE5vZGUocixuKX0pKSxyLmVhY2godGhpcy5fZWRnZU9ianMsKGZ1bmN0aW9uKHQpe2UuaGFzTm9kZSh0LnYpJiZlLmhhc05vZGUodC53KSYmZS5zZXRFZGdlKHQsbi5lZGdlKHQpKX0pKTt2YXIgaT17fTtmdW5jdGlvbiBhKHQpe3ZhciByPW4ucGFyZW50KHQpO3JldHVybiB2b2lkIDA9PT1yfHxlLmhhc05vZGUocik/KGlbdF09cixyKTpyIGluIGk/aVtyXTphKHIpfXJldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZyLmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LGEodCkpfSkpLGV9LGEucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30sYS5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH0sYS5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxhLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cztyZXR1cm4gci5yZWR1Y2UodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UodCxyLGUpOm4uc2V0RWRnZSh0LHIpLHJ9KSksdGhpc30sYS5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLGE9ITEscz1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiBzJiZudWxsIT09cyYmInYiaW4gcz8odD1zLnYsZT1zLncsbj1zLm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxhPSEwKSk6KHQ9cyxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxhPSEwKSksdD0iIit0LGU9IiIrZSxyLmlzVW5kZWZpbmVkKG4pfHwobj0iIituKTt2YXIgdT1jKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO2lmKHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsdSkpcmV0dXJuIGEmJih0aGlzLl9lZGdlTGFiZWxzW3VdPWkpLHRoaXM7aWYoIXIuaXNVbmRlZmluZWQobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHQpLHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9lZGdlTGFiZWxzW3VdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odCxlLG4pO3ZhciBoPWwodGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHQ9aC52LGU9aC53LE9iamVjdC5mcmVlemUoaCksdGhpcy5fZWRnZU9ianNbdV09aCxvKHRoaXMuX3ByZWRzW2VdLHQpLG8odGhpcy5fc3Vjc1t0XSxlKSx0aGlzLl9pbltlXVt1XT1oLHRoaXMuX291dFt0XVt1XT1oLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9LGEucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbcl19LGEucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsaSl9LGEucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmModGhpcy5faXNEaXJlY3RlZCx0LGUsbiksaT10aGlzLl9lZGdlT2Jqc1tyXTtyZXR1cm4gaSYmKHQ9aS52LGU9aS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3JdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tyXSxzKHRoaXMuX3ByZWRzW2VdLHQpLHModGhpcy5fc3Vjc1t0XSxlKSxkZWxldGUgdGhpcy5faW5bZV1bcl0sZGVsZXRlIHRoaXMuX291dFt0XVtyXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc30sYS5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2luW3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY9PT1lfSkpOml9fSxhLnByb3RvdHlwZS5vdXRFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX291dFt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC53PT09ZX0pKTppfX0sYS5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5pbkVkZ2VzKHQsZSk7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyh0LGUpKX19LDIzNTQ6KHQsZSxuKT0+e3QuZXhwb3J0cz17R3JhcGg6big3NzEpLHZlcnNpb246big5NjMxKX19LDg5NzQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDc3MSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSksaT10LnBhcmVudChlKSxhPXt2OmV9O3JldHVybiByLmlzVW5kZWZpbmVkKG4pfHwoYS52YWx1ZT1uKSxyLmlzVW5kZWZpbmVkKGkpfHwoYS5wYXJlbnQ9aSksYX0pKX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1hcCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKSxpPXt2OmUudix3OmUud307cmV0dXJuIHIuaXNVbmRlZmluZWQoZS5uYW1lKXx8KGkubmFtZT1lLm5hbWUpLHIuaXNVbmRlZmluZWQobil8fChpLnZhbHVlPW4pLGl9KSl9dC5leHBvcnRzPXt3cml0ZTpmdW5jdGlvbih0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczphKHQpLGVkZ2VzOm8odCl9O3JldHVybiByLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSksZX0scmVhZDpmdW5jdGlvbih0KXt2YXIgZT1uZXcgaSh0Lm9wdGlvbnMpLnNldEdyYXBoKHQudmFsdWUpO3JldHVybiByLmVhY2godC5ub2RlcywoZnVuY3Rpb24odCl7ZS5zZXROb2RlKHQudix0LnZhbHVlKSx0LnBhcmVudCYmZS5zZXRQYXJlbnQodC52LHQucGFyZW50KX0pKSxyLmVhY2godC5lZGdlcywoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHt2OnQudix3OnQudyxuYW1lOnQubmFtZX0sdC52YWx1ZSl9KSksZX19fSw5MTI2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmU6big2Njc4KSxjb25zdGFudDpuKDU3MDMpLGVhY2g6big2MDczKSxmaWx0ZXI6bigzMTA1KSxoYXM6big4NzIxKSxpc0FycmF5Om4oMTQ2OSksaXNFbXB0eTpuKDE2MDkpLGlzRnVuY3Rpb246bigzNTYwKSxpc1VuZGVmaW5lZDpuKDIzNTMpLGtleXM6bigzNjc0KSxtYXA6big1MTYxKSxyZWR1Y2U6big0MDYxKSxzaXplOm4oNDIzOCksdHJhbnNmb3JtOm4oODcxOCksdW5pb246bigzMzg2KSx2YWx1ZXM6bigyNjI4KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sOTYzMTp0PT57dC5leHBvcnRzPSIyLjEuOCJ9LDg1NTI6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJEYXRhVmlldyIpO3QuZXhwb3J0cz1yfSwxOTg5Oih0LGUsbik9Pnt2YXIgcj1uKDE3ODkpLGk9big0MDEpLGE9big3NjY3KSxvPW4oMTMyNykscz1uKDE4NjYpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sODQwNzoodCxlLG4pPT57dmFyIHI9big3MDQwKSxpPW4oNDEyNSksYT1uKDIxMTcpLG89big3NTE4KSxzPW4oNDcwNSk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSw3MDcxOih0LGUsbik9Pnt2YXIgcj1uKDg1Mikobig1NjM5KSwiTWFwIik7dC5leHBvcnRzPXJ9LDMzNjk6KHQsZSxuKT0+e3ZhciByPW4oNDc4NSksaT1uKDEyODUpLGE9big2ZTMpLG89big5OTE2KSxzPW4oNTI2NSk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSwzODE4Oih0LGUsbik9Pnt2YXIgcj1uKDg1Mikobig1NjM5KSwiUHJvbWlzZSIpO3QuZXhwb3J0cz1yfSw4NTI1Oih0LGUsbik9Pnt2YXIgcj1uKDg1Mikobig1NjM5KSwiU2V0Iik7dC5leHBvcnRzPXJ9LDg2Njg6KHQsZSxuKT0+e3ZhciByPW4oMzM2OSksaT1uKDYxOSksYT1uKDIzODUpO2Z1bmN0aW9uIG8odCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IHI7KytlPG47KXRoaXMuYWRkKHRbZV0pfW8ucHJvdG90eXBlLmFkZD1vLnByb3RvdHlwZS5wdXNoPWksby5wcm90b3R5cGUuaGFzPWEsdC5leHBvcnRzPW99LDYzODQ6KHQsZSxuKT0+e3ZhciByPW4oODQwNyksaT1uKDc0NjUpLGE9bigzNzc5KSxvPW4oNzU5OSkscz1uKDQ3NTgpLGM9big0MzA5KTtmdW5jdGlvbiBsKHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IHIodCk7dGhpcy5zaXplPWUuc2l6ZX1sLnByb3RvdHlwZS5jbGVhcj1pLGwucHJvdG90eXBlLmRlbGV0ZT1hLGwucHJvdG90eXBlLmdldD1vLGwucHJvdG90eXBlLmhhcz1zLGwucHJvdG90eXBlLnNldD1jLHQuZXhwb3J0cz1sfSwyNzA1Oih0LGUsbik9Pnt2YXIgcj1uKDU2MzkpLlN5bWJvbDt0LmV4cG9ydHM9cn0sMTE0OToodCxlLG4pPT57dmFyIHI9big1NjM5KS5VaW50OEFycmF5O3QuZXhwb3J0cz1yfSw1Nzc6KHQsZSxuKT0+e3ZhciByPW4oODUyKShuKDU2MzkpLCJXZWFrTWFwIik7dC5leHBvcnRzPXJ9LDY4NzQ6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfX0sNzQxMjp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxyJiYhMSE9PWUodFtuXSxuLHQpOyk7cmV0dXJuIHR9fSw0OTYzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGgsaT0wLGE9W107KytuPHI7KXt2YXIgbz10W25dO2UobyxuLHQpJiYoYVtpKytdPW8pfXJldHVybiBhfX0sNzQ0MzoodCxlLG4pPT57dmFyIHI9bigyMTE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKG51bGw9PXR8fCF0Lmxlbmd0aCkmJnIodCxlLDApPi0xfX0sMTE5Njp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytyPGk7KWlmKG4oZSx0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX19LDQ2MzY6KHQsZSxuKT0+e3ZhciByPW4oMjU0NSksaT1uKDU2OTQpLGE9bigxNDY5KSxvPW4oNDE0NCkscz1uKDU3NzYpLGM9big2NzE5KSxsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YSh0KSx1PSFuJiZpKHQpLGg9IW4mJiF1JiZvKHQpLGY9IW4mJiF1JiYhaCYmYyh0KSxkPW58fHV8fGh8fGYscD1kP3IodC5sZW5ndGgsU3RyaW5nKTpbXSxnPXAubGVuZ3RoO2Zvcih2YXIgeSBpbiB0KSFlJiYhbC5jYWxsKHQseSl8fGQmJigibGVuZ3RoIj09eXx8aCYmKCJvZmZzZXQiPT15fHwicGFyZW50Ij09eSl8fGYmJigiYnVmZmVyIj09eXx8ImJ5dGVMZW5ndGgiPT15fHwiYnl0ZU9mZnNldCI9PXkpfHxzKHksZykpfHxwLnB1c2goeSk7cmV0dXJuIHB9fSw5OTMyOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGgsaT1BcnJheShyKTsrK248cjspaVtuXT1lKHRbbl0sbix0KTtyZXR1cm4gaX19LDI0ODg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGk9dC5sZW5ndGg7KytuPHI7KXRbaStuXT1lW25dO3JldHVybiB0fX0sMjY2Mzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPS0xLGE9bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihyJiZhJiYobj10WysraV0pOysraTxhOyluPWUobix0W2ldLGksdCk7cmV0dXJuIG59fSwyOTA4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHI7KWlmKGUodFtuXSxuLHQpKXJldHVybiEwO3JldHVybiExfX0sODk4MzoodCxlLG4pPT57dmFyIHI9bigzNzEpKCJsZW5ndGgiKTt0LmV4cG9ydHM9cn0sNjU1NjoodCxlLG4pPT57dmFyIHI9big5NDY1KSxpPW4oNzgxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXsodm9pZCAwIT09biYmIWkodFtlXSxuKXx8dm9pZCAwPT09biYmIShlIGluIHQpKSYmcih0LGUsbil9fSw0ODY1Oih0LGUsbik9Pnt2YXIgcj1uKDk0NjUpLGk9big3ODEzKSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz10W2VdO2EuY2FsbCh0LGUpJiZpKG8sbikmJih2b2lkIDAhPT1ufHxlIGluIHQpfHxyKHQsZSxuKX19LDg0NzA6KHQsZSxuKT0+e3ZhciByPW4oNzgxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspaWYocih0W25dWzBdLGUpKXJldHVybiBuO3JldHVybi0xfX0sNDAzNzoodCxlLG4pPT57dmFyIHI9big4MzYzKSxpPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIoZSxpKGUpLHQpfX0sMzg4NjoodCxlLG4pPT57dmFyIHI9big4MzYzKSxpPW4oMTcwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIoZSxpKGUpLHQpfX0sOTQ2NToodCxlLG4pPT57dmFyIHI9big4Nzc3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyJfX3Byb3RvX18iPT1lJiZyP3IodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufX0sNTk5MDoodCxlLG4pPT57dmFyIHI9big2Mzg0KSxpPW4oNzQxMiksYT1uKDQ4NjUpLG89big0MDM3KSxzPW4oMzg4NiksYz1uKDQ2MjYpLGw9bigyNzgpLHU9big4ODA1KSxoPW4oMTkxMSksZj1uKDgyMzQpLGQ9big2OTA0KSxwPW4oNDE2MCksZz1uKDM4MjQpLHk9big5MTQ4KSxtPW4oODUxNyksYj1uKDE0NjkpLHY9big0MTQ0KSxfPW4oNjY4OCkseD1uKDMyMTgpLGs9bigyOTI4KSx3PW4oMzY3NCksVD1uKDE3MDQpLEU9IltvYmplY3QgQXJndW1lbnRzXSIsQz0iW29iamVjdCBGdW5jdGlvbl0iLFM9IltvYmplY3QgT2JqZWN0XSIsQT17fTtBW0VdPUFbIltvYmplY3QgQXJyYXldIl09QVsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1BWyJbb2JqZWN0IERhdGFWaWV3XSJdPUFbIltvYmplY3QgQm9vbGVhbl0iXT1BWyJbb2JqZWN0IERhdGVdIl09QVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09QVsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09QVsiW29iamVjdCBJbnQ4QXJyYXldIl09QVsiW29iamVjdCBJbnQxNkFycmF5XSJdPUFbIltvYmplY3QgSW50MzJBcnJheV0iXT1BWyJbb2JqZWN0IE1hcF0iXT1BWyJbb2JqZWN0IE51bWJlcl0iXT1BW1NdPUFbIltvYmplY3QgUmVnRXhwXSJdPUFbIltvYmplY3QgU2V0XSJdPUFbIltvYmplY3QgU3RyaW5nXSJdPUFbIltvYmplY3QgU3ltYm9sXSJdPUFbIltvYmplY3QgVWludDhBcnJheV0iXT1BWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUFbIltvYmplY3QgVWludDE2QXJyYXldIl09QVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxBWyJbb2JqZWN0IEVycm9yXSJdPUFbQ109QVsiW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixNLE4sTyxEKXt2YXIgQixMPTEmbixJPTImbixGPTQmbjtpZihNJiYoQj1PP00oZSxOLE8sRCk6TShlKSksdm9pZCAwIT09QilyZXR1cm4gQjtpZigheChlKSlyZXR1cm4gZTt2YXIgUj1iKGUpO2lmKFIpe2lmKEI9ZyhlKSwhTClyZXR1cm4gbChlLEIpfWVsc2V7dmFyIFA9cChlKSxqPVA9PUN8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PVA7aWYodihlKSlyZXR1cm4gYyhlLEwpO2lmKFA9PVN8fFA9PUV8fGomJiFPKXtpZihCPUl8fGo/e306bShlKSwhTClyZXR1cm4gST9oKGUscyhCLGUpKTp1KGUsbyhCLGUpKX1lbHNle2lmKCFBW1BdKXJldHVybiBPP2U6e307Qj15KGUsUCxMKX19RHx8KEQ9bmV3IHIpO3ZhciB6PUQuZ2V0KGUpO2lmKHopcmV0dXJuIHo7RC5zZXQoZSxCKSxrKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7Qi5hZGQodChyLG4sTSxyLGUsRCkpfSkpOl8oZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtCLnNldChpLHQocixuLE0saSxlLEQpKX0pKTt2YXIgWT1SP3ZvaWQgMDooRj9JP2Q6ZjpJP1Q6dykoZSk7cmV0dXJuIGkoWXx8ZSwoZnVuY3Rpb24ocixpKXtZJiYocj1lW2k9cl0pLGEoQixpLHQocixuLE0saSxlLEQpKX0pKSxCfX0sMzExODoodCxlLG4pPT57dmFyIHI9bigzMjE4KSxpPU9iamVjdC5jcmVhdGUsYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybnt9O2lmKGkpcmV0dXJuIGkoZSk7dC5wcm90b3R5cGU9ZTt2YXIgbj1uZXcgdDtyZXR1cm4gdC5wcm90b3R5cGU9dm9pZCAwLG59fSgpO3QuZXhwb3J0cz1hfSw5ODgxOih0LGUsbik9Pnt2YXIgcj1uKDc4MTYpLGk9big5MjkxKShyKTt0LmV4cG9ydHM9aX0sNjAyOToodCxlLG4pPT57dmFyIHI9bigzNDQ4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQubGVuZ3RoOysraTxhOyl7dmFyIG89dFtpXSxzPWUobyk7aWYobnVsbCE9cyYmKHZvaWQgMD09PWM/cz09cyYmIXIocyk6bihzLGMpKSl2YXIgYz1zLGw9b31yZXR1cm4gbH19LDc2MDoodCxlLG4pPT57dmFyIHI9big5ODgxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7ZSh0LHIsaSkmJm4ucHVzaCh0KX0pKSxufX0sMTg0ODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfX0sMTA3ODoodCxlLG4pPT57dmFyIHI9bigyNDg4KSxpPW4oNzI4NSk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGEsbyxzKXt2YXIgYz0tMSxsPWUubGVuZ3RoO2ZvcihhfHwoYT1pKSxzfHwocz1bXSk7KytjPGw7KXt2YXIgdT1lW2NdO24+MCYmYSh1KT9uPjE/dCh1LG4tMSxhLG8scyk6cihzLHUpOm98fChzW3MubGVuZ3RoXT11KX1yZXR1cm4gc319LDg0ODM6KHQsZSxuKT0+e3ZhciByPW4oNTA2MykoKTt0LmV4cG9ydHM9cn0sNzgxNjoodCxlLG4pPT57dmFyIHI9big4NDgzKSxpPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIodCxlLGkpfX0sNzc4NjoodCxlLG4pPT57dmFyIHI9bigxODExKSxpPW4oMzI3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxhPShlPXIoZSx0KSkubGVuZ3RoO251bGwhPXQmJm48YTspdD10W2koZVtuKytdKV07cmV0dXJuIG4mJm49PWE/dDp2b2lkIDB9fSw4ODY2Oih0LGUsbik9Pnt2YXIgcj1uKDI0ODgpLGk9bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWUodCk7cmV0dXJuIGkodCk/YTpyKGEsbih0KSl9fSw0MjM5Oih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9big5NjA3KSxhPW4oMjMzMyksbz1yP3IudG9TdHJpbmdUYWc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10PyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpvJiZvIGluIE9iamVjdCh0KT9pKHQpOmEodCl9fSwzMzI1OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfX0sODU2NTp0PT57dmFyIGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbCE9dCYmZS5jYWxsKHQsbil9fSwxMzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpfX0sMjExODoodCxlLG4pPT57dmFyIHI9bigxODQ4KSxpPW4oMjcyMiksYT1uKDIzNTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGU9PWU/YSh0LGUsbik6cih0LGksbil9fSw5NDU0Oih0LGUsbik9Pnt2YXIgcj1uKDQyMzkpLGk9big3MDA1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1yKHQpfX0sOTM5Oih0LGUsbik9Pnt2YXIgcj1uKDI0OTIpLGk9big3MDA1KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3JldHVybiBlPT09bnx8KG51bGw9PWV8fG51bGw9PW58fCFpKGUpJiYhaShuKT9lIT1lJiZuIT1uOnIoZSxuLGEsbyx0LHMpKX19LDI0OTI6KHQsZSxuKT0+e3ZhciByPW4oNjM4NCksaT1uKDcxMTQpLGE9big4MzUxKSxvPW4oNjA5Nikscz1uKDQxNjApLGM9bigxNDY5KSxsPW4oNDE0NCksdT1uKDY3MTkpLGg9IltvYmplY3QgQXJndW1lbnRzXSIsZj0iW29iamVjdCBBcnJheV0iLGQ9IltvYmplY3QgT2JqZWN0XSIscD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixnLHksbSl7dmFyIGI9Yyh0KSx2PWMoZSksXz1iP2Y6cyh0KSx4PXY/ZjpzKGUpLGs9KF89Xz09aD9kOl8pPT1kLHc9KHg9eD09aD9kOngpPT1kLFQ9Xz09eDtpZihUJiZsKHQpKXtpZighbChlKSlyZXR1cm4hMTtiPSEwLGs9ITF9aWYoVCYmIWspcmV0dXJuIG18fChtPW5ldyByKSxifHx1KHQpP2kodCxlLG4sZyx5LG0pOmEodCxlLF8sbixnLHksbSk7aWYoISgxJm4pKXt2YXIgRT1rJiZwLmNhbGwodCwiX193cmFwcGVkX18iKSxDPXcmJnAuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKEV8fEMpe3ZhciBTPUU/dC52YWx1ZSgpOnQsQT1DP2UudmFsdWUoKTplO3JldHVybiBtfHwobT1uZXcgcikseShTLEEsbixnLG0pfX1yZXR1cm4hIVQmJihtfHwobT1uZXcgciksbyh0LGUsbixnLHksbSkpfX0sNTU4ODoodCxlLG4pPT57dmFyIHI9big0MTYwKSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBNYXBdIj09cih0KX19LDI5NTg6KHQsZSxuKT0+e3ZhciByPW4oNjM4NCksaT1uKDkzOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW4ubGVuZ3RoLHM9byxjPSFhO2lmKG51bGw9PXQpcmV0dXJuIXM7Zm9yKHQ9T2JqZWN0KHQpO28tLTspe3ZhciBsPW5bb107aWYoYyYmbFsyXT9sWzFdIT09dFtsWzBdXTohKGxbMF1pbiB0KSlyZXR1cm4hMX1mb3IoOysrbzxzOyl7dmFyIHU9KGw9bltvXSlbMF0saD10W3VdLGY9bFsxXTtpZihjJiZsWzJdKXtpZih2b2lkIDA9PT1oJiYhKHUgaW4gdCkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcgcjtpZihhKXZhciBwPWEoaCxmLHUsdCxlLGQpO2lmKCEodm9pZCAwPT09cD9pKGYsaCwzLGEsZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfX0sMjcyMjp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0sODQ1ODoodCxlLG4pPT57dmFyIHI9bigzNTYwKSxpPW4oNTM0NiksYT1uKDMyMTgpLG89bigzNDYpLHM9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sYz1GdW5jdGlvbi5wcm90b3R5cGUsbD1PYmplY3QucHJvdG90eXBlLHU9Yy50b1N0cmluZyxoPWwuaGFzT3duUHJvcGVydHksZj1SZWdFeHAoIl4iK3UuY2FsbChoKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISghYSh0KXx8aSh0KSkmJihyKHQpP2Y6cykudGVzdChvKHQpKX19LDkyMjE6KHQsZSxuKT0+e3ZhciByPW4oNDE2MCksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgU2V0XSI9PXIodCl9fSw4NzQ5Oih0LGUsbik9Pnt2YXIgcj1uKDQyMzkpLGk9bigxNzgwKSxhPW4oNzAwNSksbz17fTtvWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vWyJbb2JqZWN0IEludDhBcnJheV0iXT1vWyJbb2JqZWN0IEludDE2QXJyYXldIl09b1siW29iamVjdCBJbnQzMkFycmF5XSJdPW9bIltvYmplY3QgVWludDhBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPW9bIltvYmplY3QgVWludDE2QXJyYXldIl09b1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1vWyJbb2JqZWN0IEFycmF5XSJdPW9bIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b1siW29iamVjdCBCb29sZWFuXSJdPW9bIltvYmplY3QgRGF0YVZpZXddIl09b1siW29iamVjdCBEYXRlXSJdPW9bIltvYmplY3QgRXJyb3JdIl09b1siW29iamVjdCBGdW5jdGlvbl0iXT1vWyJbb2JqZWN0IE1hcF0iXT1vWyJbb2JqZWN0IE51bWJlcl0iXT1vWyJbb2JqZWN0IE9iamVjdF0iXT1vWyJbb2JqZWN0IFJlZ0V4cF0iXT1vWyJbb2JqZWN0IFNldF0iXT1vWyJbb2JqZWN0IFN0cmluZ10iXT1vWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZpKHQubGVuZ3RoKSYmISFvW3IodCldfX0sNzIwNjoodCxlLG4pPT57dmFyIHI9bigxNTczKSxpPW4oNjQzMiksYT1uKDY1NTcpLG89bigxNDY5KSxzPW4oOTYwMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9hOiJvYmplY3QiPT10eXBlb2YgdD9vKHQpP2kodFswXSx0WzFdKTpyKHQpOnModCl9fSwyODA6KHQsZSxuKT0+e3ZhciByPW4oNTcyNiksaT1uKDY5MTYpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJuIGkodCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE9iamVjdCh0KSlhLmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfX0sMzEzOih0LGUsbik9Pnt2YXIgcj1uKDMyMTgpLGk9big1NzI2KSxhPW4oMzQ5OCksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm4gYSh0KTt2YXIgZT1pKHQpLG49W107Zm9yKHZhciBzIGluIHQpKCJjb25zdHJ1Y3RvciIhPXN8fCFlJiZvLmNhbGwodCxzKSkmJm4ucHVzaChzKTtyZXR1cm4gbn19LDQzMzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX19LDkxOTk6KHQsZSxuKT0+e3ZhciByPW4oOTg4MSksaT1uKDg2MTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPS0xLGE9aSh0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLGkpe2FbKytuXT1lKHQscixpKX0pKSxhfX0sMTU3MzoodCxlLG4pPT57dmFyIHI9bigyOTU4KSxpPW4oMTQ5OSksYT1uKDI2MzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT9hKGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT10fHxyKG4sdCxlKX19fSw2NDMyOih0LGUsbik9Pnt2YXIgcj1uKDkzOSksaT1uKDczNjEpLGE9big5MDk1KSxvPW4oNTQwMykscz1uKDkxNjIpLGM9bigyNjM0KSxsPW4oMzI3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0KSYmcyhlKT9jKGwodCksZSk6ZnVuY3Rpb24obil7dmFyIG89aShuLHQpO3JldHVybiB2b2lkIDA9PT1vJiZvPT09ZT9hKG4sdCk6cihlLG8sMyl9fX0sMjk4MDoodCxlLG4pPT57dmFyIHI9big2Mzg0KSxpPW4oNjU1NiksYT1uKDg0ODMpLG89big5NzgzKSxzPW4oMzIxOCksYz1uKDE3MDQpLGw9big2MzkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sdSxoLGYpe2UhPT1uJiZhKG4sKGZ1bmN0aW9uKGEsYyl7aWYoZnx8KGY9bmV3IHIpLHMoYSkpbyhlLG4sYyx1LHQsaCxmKTtlbHNle3ZhciBkPWg/aChsKGUsYyksYSxjKyIiLGUsbixmKTp2b2lkIDA7dm9pZCAwPT09ZCYmKGQ9YSksaShlLGMsZCl9fSksYyl9fSw5NzgzOih0LGUsbik9Pnt2YXIgcj1uKDY1NTYpLGk9big0NjI2KSxhPW4oNzEzMyksbz1uKDI3OCkscz1uKDg1MTcpLGM9big1Njk0KSxsPW4oMTQ2OSksdT1uKDkyNDYpLGg9big0MTQ0KSxmPW4oMzU2MCksZD1uKDMyMTgpLHA9big4NjMwKSxnPW4oNjcxOSkseT1uKDYzOTApLG09bigzNjc4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYix2LF8seCl7dmFyIGs9eSh0LG4pLHc9eShlLG4pLFQ9eC5nZXQodyk7aWYoVClyKHQsbixUKTtlbHNle3ZhciBFPV8/XyhrLHcsbisiIix0LGUseCk6dm9pZCAwLEM9dm9pZCAwPT09RTtpZihDKXt2YXIgUz1sKHcpLEE9IVMmJmgodyksTT0hUyYmIUEmJmcodyk7RT13LFN8fEF8fE0/bChrKT9FPWs6dShrKT9FPW8oayk6QT8oQz0hMSxFPWkodywhMCkpOk0/KEM9ITEsRT1hKHcsITApKTpFPVtdOnAodyl8fGModyk/KEU9ayxjKGspP0U9bShrKTpkKGspJiYhZihrKXx8KEU9cyh3KSkpOkM9ITF9QyYmKHguc2V0KHcsRSksdihFLHcsYixfLHgpLHguZGVsZXRlKHcpKSxyKHQsbixFKX19fSw5NTU2Oih0LGUsbik9Pnt2YXIgcj1uKDk5MzIpLGk9big3Nzg2KSxhPW4oNzIwNiksbz1uKDkxOTkpLHM9bigxMTMxKSxjPW4oMTcxNyksbD1uKDUwMjIpLHU9big2NTU3KSxoPW4oMTQ2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtlPWUubGVuZ3RoP3IoZSwoZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSwxPT09dC5sZW5ndGg/dFswXTp0KX06dH0pKTpbdV07dmFyIGY9LTE7ZT1yKGUsYyhhKSk7dmFyIGQ9byh0LChmdW5jdGlvbih0LG4saSl7cmV0dXJue2NyaXRlcmlhOnIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSksaW5kZXg6KytmLHZhbHVlOnR9fSkpO3JldHVybiBzKGQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwodCxlLG4pfSkpfX0sNTk3MDoodCxlLG4pPT57dmFyIHI9bigzMDEyKSxpPW4oOTA5NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLChmdW5jdGlvbihlLG4pe3JldHVybiBpKHQsbil9KSl9fSwzMDEyOih0LGUsbik9Pnt2YXIgcj1uKDc3ODYpLGk9big2MTEpLGE9bigxODExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgbz0tMSxzPWUubGVuZ3RoLGM9e307KytvPHM7KXt2YXIgbD1lW29dLHU9cih0LGwpO24odSxsKSYmaShjLGEobCx0KSx1KX1yZXR1cm4gY319LDM3MTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX19fSw5MTUyOih0LGUsbik9Pnt2YXIgcj1uKDc3ODYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSx0KX19fSw5ODp0PT57dmFyIGU9TWF0aC5jZWlsLG49TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQscixpLGEpe2Zvcih2YXIgbz0tMSxzPW4oZSgoci10KS8oaXx8MSkpLDApLGM9QXJyYXkocyk7cy0tOyljW2E/czorK29dPXQsdCs9aTtyZXR1cm4gY319LDEwNzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxpLGEpe249cj8ocj0hMSx0KTplKG4sdCxpLGEpfSkpLG59fSw1OTc2Oih0LGUsbik9Pnt2YXIgcj1uKDY1NTcpLGk9big1MzU3KSxhPW4oNjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCxlLHIpLHQrIiIpfX0sNjExOih0LGUsbik9Pnt2YXIgcj1uKDQ4NjUpLGk9bigxODExKSxhPW4oNTc3Niksbz1uKDMyMTgpLHM9bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixjKXtpZighbyh0KSlyZXR1cm4gdDtmb3IodmFyIGw9LTEsdT0oZT1pKGUsdCkpLmxlbmd0aCxoPXUtMSxmPXQ7bnVsbCE9ZiYmKytsPHU7KXt2YXIgZD1zKGVbbF0pLHA9bjtpZigiX19wcm90b19fIj09PWR8fCJjb25zdHJ1Y3RvciI9PT1kfHwicHJvdG90eXBlIj09PWQpcmV0dXJuIHQ7aWYobCE9aCl7dmFyIGc9ZltkXTt2b2lkIDA9PT0ocD1jP2MoZyxkLGYpOnZvaWQgMCkmJihwPW8oZyk/ZzphKGVbbCsxXSk/W106e30pfXIoZixkLHApLGY9ZltkXX1yZXR1cm4gdH19LDY1NjA6KHQsZSxuKT0+e3ZhciByPW4oNTcwMyksaT1uKDg3NzcpLGE9big2NTU3KSxvPWk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnIoZSksd3JpdGFibGU6ITB9KX06YTt0LmV4cG9ydHM9b30sMTEzMTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH19LDI1NDU6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPUFycmF5KHQpOysrbjx0OylyW25dPWUobik7cmV0dXJuIHJ9fSw1MzE6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1uKDk5MzIpLGE9bigxNDY5KSxvPW4oMzQ0OCkscz1yP3IucHJvdG90eXBlOnZvaWQgMCxjPXM/cy50b1N0cmluZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGEoZSkpcmV0dXJuIGkoZSx0KSsiIjtpZihvKGUpKXJldHVybiBjP2MuY2FsbChlKToiIjt2YXIgbj1lKyIiO3JldHVybiIwIj09biYmMS9lPT0tMS8wPyItMCI6bn19LDc1NjE6KHQsZSxuKT0+e3ZhciByPW4oNzk5MCksaT0vXlxzKy87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0P3Quc2xpY2UoMCxyKHQpKzEpLnJlcGxhY2UoaSwiIik6dH19LDE3MTc6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9fX0sNTY1MjoodCxlLG4pPT57dmFyIHI9big4NjY4KSxpPW4oNzQ0MyksYT1uKDExOTYpLG89big0NzU3KSxzPW4oMzU5MyksYz1uKDE4MTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGw9LTEsdT1pLGg9dC5sZW5ndGgsZj0hMCxkPVtdLHA9ZDtpZihuKWY9ITEsdT1hO2Vsc2UgaWYoaD49MjAwKXt2YXIgZz1lP251bGw6cyh0KTtpZihnKXJldHVybiBjKGcpO2Y9ITEsdT1vLHA9bmV3IHJ9ZWxzZSBwPWU/W106ZDt0OmZvcig7KytsPGg7KXt2YXIgeT10W2xdLG09ZT9lKHkpOnk7aWYoeT1ufHwwIT09eT95OjAsZiYmbT09bSl7Zm9yKHZhciBiPXAubGVuZ3RoO2ItLTspaWYocFtiXT09PW0pY29udGludWUgdDtlJiZwLnB1c2gobSksZC5wdXNoKHkpfWVsc2UgdShwLG0sbil8fChwIT09ZCYmcC5wdXNoKG0pLGQucHVzaCh5KSl9cmV0dXJuIGR9fSw3NDE1Oih0LGUsbik9Pnt2YXIgcj1uKDk5MzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfX0sMTc1Nzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT10Lmxlbmd0aCxhPWUubGVuZ3RoLG89e307KytyPGk7KXt2YXIgcz1yPGE/ZVtyXTp2b2lkIDA7bihvLHRbcl0scyl9cmV0dXJuIG99fSw0NzU3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXMoZSl9fSw0MjkwOih0LGUsbik9Pnt2YXIgcj1uKDY1NTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJ9fSwxODExOih0LGUsbik9Pnt2YXIgcj1uKDE0NjkpLGk9big1NDAzKSxhPW4oNTUxNCksbz1uKDk4MzMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQpP3Q6aSh0LGUpP1t0XTphKG8odCkpfX0sNDMxODoodCxlLG4pPT57dmFyIHI9bigxMTQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHIoZSkuc2V0KG5ldyByKHQpKSxlfX0sNDYyNjoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1uKDU2MzkpLGk9ZSYmIWUubm9kZVR5cGUmJmUsYT1pJiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWk/ci5CdWZmZXI6dm9pZCAwLHM9bz9vLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIG49dC5sZW5ndGgscj1zP3Mobik6bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIHQuY29weShyKSxyfX0sNzE1NzoodCxlLG4pPT57dmFyIHI9big0MzE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfX0sMzE0Nzp0PT57dmFyIGU9L1x3KiQvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxlLmV4ZWModCkpO3JldHVybiBuLmxhc3RJbmRleD10Lmxhc3RJbmRleCxufX0sNDE5Oih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9cj9yLnByb3RvdHlwZTp2b2lkIDAsYT1pP2kudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhP09iamVjdChhLmNhbGwodCkpOnt9fX0sNzEzMzoodCxlLG4pPT57dmFyIHI9big0MzE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9fSw2MzkzOih0LGUsbik9Pnt2YXIgcj1uKDM0NDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQhPT1lKXt2YXIgbj12b2lkIDAhPT10LGk9bnVsbD09PXQsYT10PT10LG89cih0KSxzPXZvaWQgMCE9PWUsYz1udWxsPT09ZSxsPWU9PWUsdT1yKGUpO2lmKCFjJiYhdSYmIW8mJnQ+ZXx8byYmcyYmbCYmIWMmJiF1fHxpJiZzJiZsfHwhbiYmbHx8IWEpcmV0dXJuIDE7aWYoIWkmJiFvJiYhdSYmdDxlfHx1JiZuJiZhJiYhaSYmIW98fGMmJm4mJmF8fCFzJiZhfHwhbClyZXR1cm4tMX1yZXR1cm4gMH19LDUwMjI6KHQsZSxuKT0+e3ZhciByPW4oNjM5Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9LTEsYT10LmNyaXRlcmlhLG89ZS5jcml0ZXJpYSxzPWEubGVuZ3RoLGM9bi5sZW5ndGg7KytpPHM7KXt2YXIgbD1yKGFbaV0sb1tpXSk7aWYobClyZXR1cm4gaT49Yz9sOmwqKCJkZXNjIj09bltpXT8tMToxKX1yZXR1cm4gdC5pbmRleC1lLmluZGV4fX0sMjc4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0tMSxyPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShyKSk7KytuPHI7KWVbbl09dFtuXTtyZXR1cm4gZX19LDgzNjM6KHQsZSxuKT0+e3ZhciByPW4oNDg2NSksaT1uKDk0NjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz0hbjtufHwobj17fSk7Zm9yKHZhciBzPS0xLGM9ZS5sZW5ndGg7KytzPGM7KXt2YXIgbD1lW3NdLHU9YT9hKG5bbF0sdFtsXSxsLG4sdCk6dm9pZCAwO3ZvaWQgMD09PXUmJih1PXRbbF0pLG8/aShuLGwsdSk6cihuLGwsdSl9cmV0dXJuIG59fSw4ODA1Oih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9big5NTUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSwxOTExOih0LGUsbik9Pnt2YXIgcj1uKDgzNjMpLGk9bigxNDQyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSw0NDI5Oih0LGUsbik9Pnt2YXIgcj1uKDU2MzkpWyJfX2NvcmUtanNfc2hhcmVkX18iXTt0LmV4cG9ydHM9cn0sMTQ2MzoodCxlLG4pPT57dmFyIHI9big1OTc2KSxpPW4oNjYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbihlLG4pe3ZhciByPS0xLGE9bi5sZW5ndGgsbz1hPjE/blthLTFdOnZvaWQgMCxzPWE+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oYS0tLG8pOnZvaWQgMCxzJiZpKG5bMF0sblsxXSxzKSYmKG89YTwzP3ZvaWQgMDpvLGE9MSksZT1PYmplY3QoZSk7KytyPGE7KXt2YXIgYz1uW3JdO2MmJnQoZSxjLHIsbyl9cmV0dXJuIGV9KSl9fSw5MjkxOih0LGUsbik9Pnt2YXIgcj1uKDg2MTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIXIobikpcmV0dXJuIHQobixpKTtmb3IodmFyIGE9bi5sZW5ndGgsbz1lP2E6LTEscz1PYmplY3Qobik7KGU/by0tOisrbzxhKSYmITEhPT1pKHNbb10sbyxzKTspO3JldHVybiBufX19LDUwNjM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe2Zvcih2YXIgaT0tMSxhPU9iamVjdChlKSxvPXIoZSkscz1vLmxlbmd0aDtzLS07KXt2YXIgYz1vW3Q/czorK2ldO2lmKCExPT09bihhW2NdLGMsYSkpYnJlYWt9cmV0dXJuIGV9fX0sNzc0MDoodCxlLG4pPT57dmFyIHI9big3MjA2KSxpPW4oODYxMiksYT1uKDM2NzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3ZhciBzPU9iamVjdChlKTtpZighaShlKSl7dmFyIGM9cihuLDMpO2U9YShlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBjKHNbdF0sdCxzKX19dmFyIGw9dChlLG4sbyk7cmV0dXJuIGw+LTE/c1tjP2VbbF06bF06dm9pZCAwfX19LDc0NDU6KHQsZSxuKT0+e3ZhciByPW4oOTgpLGk9big2NjEyKSxhPW4oODYwMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sbyl7cmV0dXJuIG8mJiJudW1iZXIiIT10eXBlb2YgbyYmaShlLG4sbykmJihuPW89dm9pZCAwKSxlPWEoZSksdm9pZCAwPT09bj8obj1lLGU9MCk6bj1hKG4pLG89dm9pZCAwPT09bz9lPG4/MTotMTphKG8pLHIoZSxuLG8sdCl9fX0sMzU5MzoodCxlLG4pPT57dmFyIHI9big4NTI1KSxpPW4oMzA4KSxhPW4oMTgxNCksbz1yJiYxL2EobmV3IHIoWywtMF0pKVsxXT09MS8wP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgcih0KX06aTt0LmV4cG9ydHM9b30sODc3NzoodCxlLG4pPT57dmFyIHI9big4NTIpLGk9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9cihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2godCl7fX0oKTt0LmV4cG9ydHM9aX0sNzExNDoodCxlLG4pPT57dmFyIHI9big4NjY4KSxpPW4oMjkwOCksYT1uKDQ3NTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixvLHMsYyl7dmFyIGw9MSZuLHU9dC5sZW5ndGgsaD1lLmxlbmd0aDtpZih1IT1oJiYhKGwmJmg+dSkpcmV0dXJuITE7dmFyIGY9Yy5nZXQodCksZD1jLmdldChlKTtpZihmJiZkKXJldHVybiBmPT1lJiZkPT10O3ZhciBwPS0xLGc9ITAseT0yJm4/bmV3IHI6dm9pZCAwO2ZvcihjLnNldCh0LGUpLGMuc2V0KGUsdCk7KytwPHU7KXt2YXIgbT10W3BdLGI9ZVtwXTtpZihvKXZhciB2PWw/byhiLG0scCxlLHQsYyk6byhtLGIscCx0LGUsYyk7aWYodm9pZCAwIT09dil7aWYodiljb250aW51ZTtnPSExO2JyZWFrfWlmKHkpe2lmKCFpKGUsKGZ1bmN0aW9uKHQsZSl7aWYoIWEoeSxlKSYmKG09PT10fHxzKG0sdCxuLG8sYykpKXJldHVybiB5LnB1c2goZSl9KSkpe2c9ITE7YnJlYWt9fWVsc2UgaWYobSE9PWImJiFzKG0sYixuLG8sYykpe2c9ITE7YnJlYWt9fXJldHVybiBjLmRlbGV0ZSh0KSxjLmRlbGV0ZShlKSxnfX0sODM1MToodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPW4oMTE0OSksYT1uKDc4MTMpLG89big3MTE0KSxzPW4oODc3NiksYz1uKDE4MTQpLGw9cj9yLnByb3RvdHlwZTp2b2lkIDAsdT1sP2wudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsbCxoLGYpe3N3aXRjaChuKXtjYXNlIltvYmplY3QgRGF0YVZpZXddIjppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fCFoKG5ldyBpKHQpLG5ldyBpKGUpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gYSgrdCwrZSk7Y2FzZSJbb2JqZWN0IEVycm9yXSI6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiB0PT1lKyIiO2Nhc2UiW29iamVjdCBNYXBdIjp2YXIgZD1zO2Nhc2UiW29iamVjdCBTZXRdIjp2YXIgcD0xJnI7aWYoZHx8KGQ9YyksdC5zaXplIT1lLnNpemUmJiFwKXJldHVybiExO3ZhciBnPWYuZ2V0KHQpO2lmKGcpcmV0dXJuIGc9PWU7cnw9MixmLnNldCh0LGUpO3ZhciB5PW8oZCh0KSxkKGUpLHIsbCxoLGYpO3JldHVybiBmLmRlbGV0ZSh0KSx5O2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZih1KXJldHVybiB1LmNhbGwodCk9PXUuY2FsbChlKX1yZXR1cm4hMX19LDYwOTY6KHQsZSxuKT0+e3ZhciByPW4oODIzNCksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhLG8scyl7dmFyIGM9MSZuLGw9cih0KSx1PWwubGVuZ3RoO2lmKHUhPXIoZSkubGVuZ3RoJiYhYylyZXR1cm4hMTtmb3IodmFyIGg9dTtoLS07KXt2YXIgZj1sW2hdO2lmKCEoYz9mIGluIGU6aS5jYWxsKGUsZikpKXJldHVybiExfXZhciBkPXMuZ2V0KHQpLHA9cy5nZXQoZSk7aWYoZCYmcClyZXR1cm4gZD09ZSYmcD09dDt2YXIgZz0hMDtzLnNldCh0LGUpLHMuc2V0KGUsdCk7Zm9yKHZhciB5PWM7KytoPHU7KXt2YXIgbT10W2Y9bFtoXV0sYj1lW2ZdO2lmKGEpdmFyIHY9Yz9hKGIsbSxmLGUsdCxzKTphKG0sYixmLHQsZSxzKTtpZighKHZvaWQgMD09PXY/bT09PWJ8fG8obSxiLG4sYSxzKTp2KSl7Zz0hMTticmVha315fHwoeT0iY29uc3RydWN0b3IiPT1mKX1pZihnJiYheSl7dmFyIF89dC5jb25zdHJ1Y3Rvcix4PWUuY29uc3RydWN0b3I7Xz09eHx8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgXyYmXyBpbnN0YW5jZW9mIF8mJiJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4IGluc3RhbmNlb2YgeHx8KGc9ITEpfXJldHVybiBzLmRlbGV0ZSh0KSxzLmRlbGV0ZShlKSxnfX0sOTAyMToodCxlLG4pPT57dmFyIHI9big1NTY0KSxpPW4oNTM1NyksYT1uKDYxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0LHZvaWQgMCxyKSx0KyIiKX19LDE5NTc6KHQsZSxuKT0+e3ZhciByPSJvYmplY3QiPT10eXBlb2Ygbi5nJiZuLmcmJm4uZy5PYmplY3Q9PT1PYmplY3QmJm4uZzt0LmV4cG9ydHM9cn0sODIzNDoodCxlLG4pPT57dmFyIHI9big4ODY2KSxpPW4oOTU1MSksYT1uKDM2NzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGEsaSl9fSw2OTA0Oih0LGUsbik9Pnt2YXIgcj1uKDg4NjYpLGk9bigxNDQyKSxhPW4oMTcwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LDUwNTA6KHQsZSxuKT0+e3ZhciByPW4oNzAxOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4gcihlKT9uWyJzdHJpbmciPT10eXBlb2YgZT8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfX0sMTQ5OToodCxlLG4pPT57dmFyIHI9big5MTYyKSxpPW4oMzY3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHQpLG49ZS5sZW5ndGg7bi0tOyl7dmFyIGE9ZVtuXSxvPXRbYV07ZVtuXT1bYSxvLHIobyldfXJldHVybiBlfX0sODUyOih0LGUsbik9Pnt2YXIgcj1uKDg0NTgpLGk9big3ODAxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1pKHQsZSk7cmV0dXJuIHIobik/bjp2b2lkIDB9fSw1OTI0Oih0LGUsbik9Pnt2YXIgcj1uKDU1NjkpKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO3QuZXhwb3J0cz1yfSw5NjA3Oih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHksbz1pLnRvU3RyaW5nLHM9cj9yLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YS5jYWxsKHQscyksbj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaCh0KXt9dmFyIGk9by5jYWxsKHQpO3JldHVybiByJiYoZT90W3NdPW46ZGVsZXRlIHRbc10pLGl9fSw5NTUxOih0LGUsbik9Pnt2YXIgcj1uKDQ5NjMpLGk9big0NzkpLGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMscz1vP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOih0PU9iamVjdCh0KSxyKG8odCksKGZ1bmN0aW9uKGUpe3JldHVybiBhLmNhbGwodCxlKX0pKSl9Omk7dC5leHBvcnRzPXN9LDE0NDI6KHQsZSxuKT0+e3ZhciByPW4oMjQ4OCksaT1uKDU5MjQpLGE9big5NTUxKSxvPW4oNDc5KSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3Q7KXIoZSxhKHQpKSx0PWkodCk7cmV0dXJuIGV9Om87dC5leHBvcnRzPXN9LDQxNjA6KHQsZSxuKT0+e3ZhciByPW4oODU1MiksaT1uKDcwNzEpLGE9bigzODE4KSxvPW4oODUyNSkscz1uKDU3NyksYz1uKDQyMzkpLGw9bigzNDYpLHU9IltvYmplY3QgTWFwXSIsaD0iW29iamVjdCBQcm9taXNlXSIsZj0iW29iamVjdCBTZXRdIixkPSJbb2JqZWN0IFdlYWtNYXBdIixwPSJbb2JqZWN0IERhdGFWaWV3XSIsZz1sKHIpLHk9bChpKSxtPWwoYSksYj1sKG8pLHY9bChzKSxfPWM7KHImJl8obmV3IHIobmV3IEFycmF5QnVmZmVyKDEpKSkhPXB8fGkmJl8obmV3IGkpIT11fHxhJiZfKGEucmVzb2x2ZSgpKSE9aHx8byYmXyhuZXcgbykhPWZ8fHMmJl8obmV3IHMpIT1kKSYmKF89ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxuPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLHI9bj9sKG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgZzpyZXR1cm4gcDtjYXNlIHk6cmV0dXJuIHU7Y2FzZSBtOnJldHVybiBoO2Nhc2UgYjpyZXR1cm4gZjtjYXNlIHY6cmV0dXJuIGR9cmV0dXJuIGV9KSx0LmV4cG9ydHM9X30sNzgwMTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbZV19fSwyMjI6KHQsZSxuKT0+e3ZhciByPW4oMTgxMSksaT1uKDU2OTQpLGE9bigxNDY5KSxvPW4oNTc3Nikscz1uKDE3ODApLGM9bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBsPS0xLHU9KGU9cihlLHQpKS5sZW5ndGgsaD0hMTsrK2w8dTspe3ZhciBmPWMoZVtsXSk7aWYoIShoPW51bGwhPXQmJm4odCxmKSkpYnJlYWs7dD10W2ZdfXJldHVybiBofHwrK2whPXU/aDohISh1PW51bGw9PXQ/MDp0Lmxlbmd0aCkmJnModSkmJm8oZix1KSYmKGEodCl8fGkodCkpfX0sMjY4OTp0PT57dmFyIGU9UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS50ZXN0KHQpfX0sMTc4OToodCxlLG4pPT57dmFyIHI9big0NTM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXI/cihudWxsKTp7fSx0aGlzLnNpemU9MH19LDQwMTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfX0sNzY2NzoodCxlLG4pPT57dmFyIHI9big0NTM2KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYocil7dmFyIG49ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1uP3ZvaWQgMDpufXJldHVybiBpLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH19LDEzMjc6KHQsZSxuKT0+e3ZhciByPW4oNDUzNiksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiByP3ZvaWQgMCE9PWVbdF06aS5jYWxsKGUsdCl9fSwxODY2Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLG5bdF09ciYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfX0sMzgyNDp0PT57dmFyIGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGgscj1uZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gbiYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiZlLmNhbGwodCwiaW5kZXgiKSYmKHIuaW5kZXg9dC5pbmRleCxyLmlucHV0PXQuaW5wdXQpLHJ9fSw5MTQ4Oih0LGUsbik9Pnt2YXIgcj1uKDQzMTgpLGk9big3MTU3KSxhPW4oMzE0Nyksbz1uKDQxOSkscz1uKDcxMzMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5jb25zdHJ1Y3Rvcjtzd2l0Y2goZSl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIHIodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgYygrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGkodCxuKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gcyh0LG4pO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBjKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gYSh0KTtjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIG8odCl9fX0sODUxNzoodCxlLG4pPT57dmFyIHI9bigzMTE4KSxpPW4oNTkyNCksYT1uKDU3MjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdC5jb25zdHJ1Y3Rvcnx8YSh0KT97fTpyKGkodCkpfX0sNzI4NToodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPW4oNTY5NCksYT1uKDE0NjkpLG89cj9yLmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpfHxpKHQpfHwhIShvJiZ0JiZ0W29dKX19LDU3NzY6dD0+e3ZhciBlPS9eKD86MHxbMS05XVxkKikkLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShuPW51bGw9PW4/OTAwNzE5OTI1NDc0MDk5MTpuKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmZS50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PG59fSw2NjEyOih0LGUsbik9Pnt2YXIgcj1uKDc4MTMpLGk9big4NjEyKSxhPW4oNTc3Niksbz1uKDMyMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoIW8obikpcmV0dXJuITE7dmFyIHM9dHlwZW9mIGU7cmV0dXJuISEoIm51bWJlciI9PXM/aShuKSYmYShlLG4ubGVuZ3RoKToic3RyaW5nIj09cyYmZSBpbiBuKSYmcihuW2VdLHQpfX0sNTQwMzoodCxlLG4pPT57dmFyIHI9bigxNDY5KSxpPW4oMzQ0OCksYT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxvPS9eXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocih0KSlyZXR1cm4hMTt2YXIgbj10eXBlb2YgdDtyZXR1cm4hKCJudW1iZXIiIT1uJiYic3ltYm9sIiE9biYmImJvb2xlYW4iIT1uJiZudWxsIT10JiYhaSh0KSl8fG8udGVzdCh0KXx8IWEudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9fSw3MDE5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuInN0cmluZyI9PWV8fCJudW1iZXIiPT1lfHwic3ltYm9sIj09ZXx8ImJvb2xlYW4iPT1lPyJfX3Byb3RvX18iIT09dDpudWxsPT09dH19LDUzNDY6KHQsZSxuKT0+e3ZhciByLGk9big0NDI5KSxhPShyPS9bXi5dKyQvLmV4ZWMoaSYmaS5rZXlzJiZpLmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIityOiIiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWEmJmEgaW4gdH19LDU3MjY6dD0+e3ZhciBlPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPXQmJnQuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT0oImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4ucHJvdG90eXBlfHxlKX19LDkxNjI6KHQsZSxuKT0+e3ZhciByPW4oMzIxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT10JiYhcih0KX19LDcwNDA6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9fSw0MTI1Oih0LGUsbik9Pnt2YXIgcj1uKDg0NzApLGk9QXJyYXkucHJvdG90eXBlLnNwbGljZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4hKG48MHx8KG49PWUubGVuZ3RoLTE/ZS5wb3AoKTppLmNhbGwoZSxuLDEpLC0tdGhpcy5zaXplLDApKX19LDIxMTc6KHQsZSxuKT0+e3ZhciByPW4oODQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1yKGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX19LDc1MTg6KHQsZSxuKT0+e3ZhciByPW4oODQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMuX19kYXRhX18sdCk+LTF9fSw0NzA1Oih0LGUsbik9Pnt2YXIgcj1uKDg0NzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX18saT1yKG4sdCk7cmV0dXJuIGk8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFt0LGVdKSk6bltpXVsxXT1lLHRoaXN9fSw0Nzg1Oih0LGUsbik9Pnt2YXIgcj1uKDE5ODkpLGk9big4NDA3KSxhPW4oNzA3MSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcixtYXA6bmV3KGF8fGkpLHN0cmluZzpuZXcgcn19fSwxMjg1Oih0LGUsbik9Pnt2YXIgcj1uKDUwNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMsdCkuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSw2ZTM6KHQsZSxuKT0+e3ZhciByPW4oNTA1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCkuZ2V0KHQpfX0sOTkxNjoodCxlLG4pPT57dmFyIHI9big1MDUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0KS5oYXModCl9fSw1MjY1Oih0LGUsbik9Pnt2YXIgcj1uKDUwNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodGhpcyx0KSxpPW4uc2l6ZTtyZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemUrPW4uc2l6ZT09aT8wOjEsdGhpc319LDg3NzY6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtuWysrZV09W3IsdF19KSksbn19LDI2MzQ6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmblt0XT09PWUmJih2b2lkIDAhPT1lfHx0IGluIE9iamVjdChuKSl9fX0sNDUyMzoodCxlLG4pPT57dmFyIHI9big4MzA2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09bi5zaXplJiZuLmNsZWFyKCksdH0pKSxuPWUuY2FjaGU7cmV0dXJuIGV9fSw0NTM2Oih0LGUsbik9Pnt2YXIgcj1uKDg1MikoT2JqZWN0LCJjcmVhdGUiKTt0LmV4cG9ydHM9cn0sNjkxNjoodCxlLG4pPT57dmFyIHI9big1NTY5KShPYmplY3Qua2V5cyxPYmplY3QpO3QuZXhwb3J0cz1yfSwzNDk4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107aWYobnVsbCE9dClmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWUucHVzaChuKTtyZXR1cm4gZX19LDExNjc6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9bigxOTU3KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmdCYmIXQubm9kZVR5cGUmJnQsbz1hJiZhLmV4cG9ydHM9PT1pJiZyLnByb2Nlc3Mscz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gYSYmYS5yZXF1aXJlJiZhLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8byYmby5iaW5kaW5nJiZvLmJpbmRpbmcoInV0aWwiKX1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1zfSwyMzMzOnQ9Pnt2YXIgZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpfX0sNTU2OTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX19LDUzNTc6KHQsZSxuKT0+e3ZhciByPW4oNjg3NCksaT1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPWkodm9pZCAwPT09ZT90Lmxlbmd0aC0xOmUsMCksZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLG89LTEscz1pKGEubGVuZ3RoLWUsMCksYz1BcnJheShzKTsrK288czspY1tvXT1hW2Urb107bz0tMTtmb3IodmFyIGw9QXJyYXkoZSsxKTsrK288ZTspbFtvXT1hW29dO3JldHVybiBsW2VdPW4oYykscih0LHRoaXMsbCl9fX0sNTYzOToodCxlLG4pPT57dmFyIHI9bigxOTU3KSxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYT1yfHxpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0cz1hfSw2MzkwOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigoImNvbnN0cnVjdG9yIiE9PWV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W2VdKSYmIl9fcHJvdG9fXyIhPWUpcmV0dXJuIHRbZV19fSw2MTk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9fSwyMzg1OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfX0sMTgxNDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtuWysrZV09dH0pKSxufX0sNjE6KHQsZSxuKT0+e3ZhciByPW4oNjU2MCksaT1uKDEyNzUpKHIpO3QuZXhwb3J0cz1pfSwxMjc1OnQ9Pnt2YXIgZT1EYXRlLm5vdzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49MCxyPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZSgpLGE9MTYtKGktcik7aWYocj1pLGE+MCl7aWYoKytuPj04MDApcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIG49MDtyZXR1cm4gdC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19fSw3NDY1Oih0LGUsbik9Pnt2YXIgcj1uKDg0MDcpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IHIsdGhpcy5zaXplPTB9fSwzNzc5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLG59fSw3NTk5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfX0sNDc1ODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX19LDQzMDk6KHQsZSxuKT0+e3ZhciByPW4oODQwNyksaT1uKDcwNzEpLGE9bigzMzY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiByKXt2YXIgbz1uLl9fZGF0YV9fO2lmKCFpfHxvLmxlbmd0aDwxOTkpcmV0dXJuIG8ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBhKG8pfXJldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc319LDIzNTE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPW4tMSxpPXQubGVuZ3RoOysrcjxpOylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX19LDgwMTY6KHQsZSxuKT0+e3ZhciByPW4oODk4MyksaT1uKDI2ODkpLGE9bigxOTAzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/YSh0KTpyKHQpfX0sNTUxNDoodCxlLG4pPT57dmFyIHI9big0NTIzKSxpPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGE9L1xcKFxcKT8vZyxvPXIoKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoaSwoZnVuY3Rpb24odCxuLHIsaSl7ZS5wdXNoKHI/aS5yZXBsYWNlKGEsIiQxIik6bnx8dCl9KSksZX0pKTt0LmV4cG9ydHM9b30sMzI3Oih0LGUsbik9Pnt2YXIgcj1uKDM0NDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fHIodCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LTEvMD8iLTAiOmV9fSwzNDY6dD0+e3ZhciBlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiBlLmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifX0sNzk5MDp0PT57dmFyIGU9L1xzLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLSYmZS50ZXN0KHQuY2hhckF0KG4pKTspO3JldHVybiBufX0sMTkwMzp0PT57dmFyIGU9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixuPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHI9IlteXFx1ZDgwMC1cXHVkZmZmXSIsaT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsYT0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsbz0iKD86IitlKyJ8IituKyIpPyIscz0iW1xcdWZlMGVcXHVmZTBmXT8iLGM9cytvKyIoPzpcXHUyMDBkKD86IitbcixpLGFdLmpvaW4oInwiKSsiKSIrcytvKyIpKiIsbD0iKD86IitbcitlKyI/IixlLGksYSwiW1xcdWQ4MDAtXFx1ZGZmZl0iXS5qb2luKCJ8IikrIikiLHU9UmVnRXhwKG4rIig/PSIrbisiKXwiK2wrYywiZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dS5sYXN0SW5kZXg9MDt1LnRlc3QodCk7KSsrZTtyZXR1cm4gZX19LDY2Nzg6KHQsZSxuKT0+e3ZhciByPW4oNTk5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsNCl9fSwzNjE6KHQsZSxuKT0+e3ZhciByPW4oNTk5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsNSl9fSw1NzAzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fX0sMTc0NzoodCxlLG4pPT57dmFyIHI9big1OTc2KSxpPW4oNzgxMyksYT1uKDY2MTIpLG89bigxNzA0KSxzPU9iamVjdC5wcm90b3R5cGUsYz1zLmhhc093blByb3BlcnR5LGw9cigoZnVuY3Rpb24odCxlKXt0PU9iamVjdCh0KTt2YXIgbj0tMSxyPWUubGVuZ3RoLGw9cj4yP2VbMl06dm9pZCAwO2ZvcihsJiZhKGVbMF0sZVsxXSxsKSYmKHI9MSk7KytuPHI7KWZvcih2YXIgdT1lW25dLGg9byh1KSxmPS0xLGQ9aC5sZW5ndGg7KytmPGQ7KXt2YXIgcD1oW2ZdLGc9dFtwXTsodm9pZCAwPT09Z3x8aShnLHNbcF0pJiYhYy5jYWxsKHQscCkpJiYodFtwXT11W3BdKX1yZXR1cm4gdH0pKTt0LmV4cG9ydHM9bH0sNjA3MzoodCxlLG4pPT57dC5leHBvcnRzPW4oNDQ4Nil9LDc4MTM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LDMxMDU6KHQsZSxuKT0+e3ZhciByPW4oNDk2MyksaT1uKDc2MCksYT1uKDcyMDYpLG89bigxNDY5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmkpKHQsYShlLDMpKX19LDMzMTE6KHQsZSxuKT0+e3ZhciByPW4oNzc0MCkobig5OTgpKTt0LmV4cG9ydHM9cn0sOTk4Oih0LGUsbik9Pnt2YXIgcj1uKDE4NDgpLGk9big3MjA2KSxhPW4oNTU0KSxvPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHM9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFzKXJldHVybi0xO3ZhciBjPW51bGw9PW4/MDphKG4pO3JldHVybiBjPDAmJihjPW8ocytjLDApKSxyKHQsaShlLDMpLGMpfX0sNTU2NDoodCxlLG4pPT57dmFyIHI9bigxMDc4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQubGVuZ3RoP3IodCwxKTpbXX19LDQ0ODY6KHQsZSxuKT0+e3ZhciByPW4oNzQxMiksaT1uKDk4ODEpLGE9big0MjkwKSxvPW4oMTQ2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjppKSh0LGEoZSkpfX0sMjYyMDoodCxlLG4pPT57dmFyIHI9big4NDgzKSxpPW4oNDI5MCksYT1uKDE3MDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3Q6cih0LGkoZSksYSl9fSw3MzYxOih0LGUsbik9Pnt2YXIgcj1uKDc3ODYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9bnVsbD09dD92b2lkIDA6cih0LGUpO3JldHVybiB2b2lkIDA9PT1pP246aX19LDg3MjE6KHQsZSxuKT0+e3ZhciByPW4oODU2NSksaT1uKDIyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sOTA5NToodCxlLG4pPT57dmFyIHI9bigxMyksaT1uKDIyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sNjU1Nzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sNTY5NDoodCxlLG4pPT57dmFyIHI9big5NDU0KSxpPW4oNzAwNSksYT1PYmplY3QucHJvdG90eXBlLG89YS5oYXNPd25Qcm9wZXJ0eSxzPWEucHJvcGVydHlJc0VudW1lcmFibGUsYz1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/cjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmby5jYWxsKHQsImNhbGxlZSIpJiYhcy5jYWxsKHQsImNhbGxlZSIpfTt0LmV4cG9ydHM9Y30sMTQ2OTp0PT57dmFyIGU9QXJyYXkuaXNBcnJheTt0LmV4cG9ydHM9ZX0sODYxMjoodCxlLG4pPT57dmFyIHI9bigzNTYwKSxpPW4oMTc4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiZpKHQubGVuZ3RoKSYmIXIodCl9fSw5MjQ2Oih0LGUsbik9Pnt2YXIgcj1uKDg2MTIpLGk9big3MDA1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJnIodCl9fSw0MTQ0Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPW4oNTYzOSksaT1uKDUwNjIpLGE9ZSYmIWUubm9kZVR5cGUmJmUsbz1hJiZ0JiYhdC5ub2RlVHlwZSYmdCxzPW8mJm8uZXhwb3J0cz09PWE/ci5CdWZmZXI6dm9pZCAwLGM9KHM/cy5pc0J1ZmZlcjp2b2lkIDApfHxpO3QuZXhwb3J0cz1jfSwxNjA5Oih0LGUsbik9Pnt2YXIgcj1uKDI4MCksaT1uKDQxNjApLGE9big1Njk0KSxvPW4oMTQ2OSkscz1uKDg2MTIpLGM9big0MTQ0KSxsPW4oNTcyNiksdT1uKDY3MTkpLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4hMDtpZihzKHQpJiYobyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGModCl8fHUodCl8fGEodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1pKHQpO2lmKCJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZSlyZXR1cm4hdC5zaXplO2lmKGwodCkpcmV0dXJuIXIodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKGguY2FsbCh0LG4pKXJldHVybiExO3JldHVybiEwfX0sMzU2MDoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oMzIxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFpKHQpKXJldHVybiExO3ZhciBlPXIodCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBQcm94eV0iPT1lfX0sMTc4MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD05MDA3MTk5MjU0NzQwOTkxfX0sNjY4ODoodCxlLG4pPT57dmFyIHI9big1NTg4KSxpPW4oMTcxNyksYT1uKDExNjcpLG89YSYmYS5pc01hcCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSwzMjE4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9fSw3MDA1OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH19LDg2MzA6KHQsZSxuKT0+e3ZhciByPW4oNDIzOSksaT1uKDU5MjQpLGE9big3MDA1KSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLGw9cy5oYXNPd25Qcm9wZXJ0eSx1PWMuY2FsbChPYmplY3QpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighYSh0KXx8IltvYmplY3QgT2JqZWN0XSIhPXIodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj1sLmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09dX19LDI5Mjg6KHQsZSxuKT0+e3ZhciByPW4oOTIyMSksaT1uKDE3MTcpLGE9bigxMTY3KSxvPWEmJmEuaXNTZXQscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sNzAzNzoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oMTQ2OSksYT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fCFpKHQpJiZhKHQpJiYiW29iamVjdCBTdHJpbmddIj09cih0KX19LDM0NDg6KHQsZSxuKT0+e3ZhciByPW4oNDIzOSksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGkodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1yKHQpfX0sNjcxOToodCxlLG4pPT57dmFyIHI9big4NzQ5KSxpPW4oMTcxNyksYT1uKDExNjcpLG89YSYmYS5pc1R5cGVkQXJyYXkscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sMjM1Mzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sMzY3NDoodCxlLG4pPT57dmFyIHI9big0NjM2KSxpPW4oMjgwKSxhPW4oODYxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3IodCk6aSh0KX19LDE3MDQ6KHQsZSxuKT0+e3ZhciByPW4oNDYzNiksaT1uKDMxMyksYT1uKDg2MTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKHQsITApOmkodCl9fSw5Mjg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1udWxsPT10PzA6dC5sZW5ndGg7cmV0dXJuIGU/dFtlLTFdOnZvaWQgMH19LDUxNjE6KHQsZSxuKT0+e3ZhciByPW4oOTkzMiksaT1uKDcyMDYpLGE9big5MTk5KSxvPW4oMTQ2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjphKSh0LGkoZSwzKSl9fSw2NjA0Oih0LGUsbik9Pnt2YXIgcj1uKDk0NjUpLGk9big3ODE2KSxhPW4oNzIwNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGU9YShlLDMpLGkodCwoZnVuY3Rpb24odCxpLGEpe3IobixpLGUodCxpLGEpKX0pKSxufX0sNjE2MjoodCxlLG4pPT57dmFyIHI9big2MDI5KSxpPW4oMzMyNSksYT1uKDY1NTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sODMwNjoodCxlLG4pPT57dmFyIHI9bigzMzY5KTtmdW5jdGlvbiBpKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgbz10LmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQoaSxvKXx8YSxvfTtyZXR1cm4gbi5jYWNoZT1uZXcoaS5DYWNoZXx8ciksbn1pLkNhY2hlPXIsdC5leHBvcnRzPWl9LDM4NTc6KHQsZSxuKT0+e3ZhciByPW4oMjk4MCksaT1uKDE0NjMpKChmdW5jdGlvbih0LGUsbil7cih0LGUsbil9KSk7dC5leHBvcnRzPWl9LDM2MzI6KHQsZSxuKT0+e3ZhciByPW4oNjAyOSksaT1uKDQzMyksYT1uKDY1NTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sMjc2MjoodCxlLG4pPT57dmFyIHI9big2MDI5KSxpPW4oNzIwNiksYT1uKDQzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxpKGUsMiksYSk6dm9pZCAwfX0sMzA4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSw3NzcxOih0LGUsbik9Pnt2YXIgcj1uKDU2MzkpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiByLkRhdGUubm93KCl9fSw5NzIyOih0LGUsbik9Pnt2YXIgcj1uKDU5NzApLGk9big5MDIxKSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTpyKHQsZSl9KSk7dC5leHBvcnRzPWl9LDk2MDE6KHQsZSxuKT0+e3ZhciByPW4oMzcxKSxpPW4oOTE1MiksYT1uKDU0MDMpLG89bigzMjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKG8odCkpOmkodCl9fSw2MDI2Oih0LGUsbik9Pnt2YXIgcj1uKDc0NDUpKCk7dC5leHBvcnRzPXJ9LDQwNjE6KHQsZSxuKT0+e3ZhciByPW4oMjY2MyksaT1uKDk4ODEpLGE9big3MjA2KSxvPW4oMTA3KSxzPW4oMTQ2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz1zKHQpP3I6byxsPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gYyh0LGEoZSw0KSxuLGwsaSl9fSw0MjM4Oih0LGUsbik9Pnt2YXIgcj1uKDI4MCksaT1uKDQxNjApLGE9big4NjEyKSxvPW4oNzAzNykscz1uKDgwMTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGEodCkpcmV0dXJuIG8odCk/cyh0KTp0Lmxlbmd0aDt2YXIgZT1pKHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZT90LnNpemU6cih0KS5sZW5ndGh9fSw5NzM0Oih0LGUsbik9Pnt2YXIgcj1uKDEwNzgpLGk9big5NTU2KSxhPW4oNTk3Niksbz1uKDY2MTIpLHM9YSgoZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3ZhciBuPWUubGVuZ3RoO3JldHVybiBuPjEmJm8odCxlWzBdLGVbMV0pP2U9W106bj4yJiZvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxpKHQscihlLDEpLFtdKX0pKTt0LmV4cG9ydHM9c30sNDc5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm5bXX19LDUwNjI6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiExfX0sODYwMToodCxlLG4pPT57dmFyIHI9big0ODQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/SW5maW5pdHk9PT0odD1yKHQpKXx8dD09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKih0PDA/LTE6MSk6dD09dD90OjA6MD09PXQ/dDowfX0sNTU0Oih0LGUsbik9Pnt2YXIgcj1uKDg2MDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQpLG49ZSUxO3JldHVybiBlPT1lP24/ZS1uOmU6MH19LDQ4NDE6KHQsZSxuKT0+e3ZhciByPW4oNzU2MSksaT1uKDMyMTgpLGE9bigzNDQ4KSxvPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHM9L14wYlswMV0rJC9pLGM9L14wb1swLTddKyQvaSxsPXBhcnNlSW50O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoYSh0KSlyZXR1cm4gTmFOO2lmKGkodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PWkoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PXIodCk7dmFyIG49cy50ZXN0KHQpO3JldHVybiBufHxjLnRlc3QodCk/bCh0LnNsaWNlKDIpLG4/Mjo4KTpvLnRlc3QodCk/TmFOOit0fX0sMzY3ODoodCxlLG4pPT57dmFyIHI9big4MzYzKSxpPW4oMTcwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsaSh0KSl9fSw5ODMzOih0LGUsbik9Pnt2YXIgcj1uKDUzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10PyIiOnIodCl9fSw4NzE4Oih0LGUsbik9Pnt2YXIgcj1uKDc0MTIpLGk9bigzMTE4KSxhPW4oNzgxNiksbz1uKDcyMDYpLHM9big1OTI0KSxjPW4oMTQ2OSksbD1uKDQxNDQpLHU9bigzNTYwKSxoPW4oMzIxOCksZj1uKDY3MTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGQ9Yyh0KSxwPWR8fGwodCl8fGYodCk7aWYoZT1vKGUsNCksbnVsbD09bil7dmFyIGc9dCYmdC5jb25zdHJ1Y3RvcjtuPXA/ZD9uZXcgZzpbXTpoKHQpJiZ1KGcpP2kocyh0KSk6e319cmV0dXJuKHA/cjphKSh0LChmdW5jdGlvbih0LHIsaSl7cmV0dXJuIGUobix0LHIsaSl9KSksbn19LDMzODY6KHQsZSxuKT0+e3ZhciByPW4oMTA3OCksaT1uKDU5NzYpLGE9big1NjUyKSxvPW4oOTI0Nikscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQsMSxvLCEwKSl9KSk7dC5leHBvcnRzPXN9LDM5NTU6KHQsZSxuKT0+e3ZhciByPW4oOTgzMyksaT0wO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0rK2k7cmV0dXJuIHIodCkrZX19LDI2Mjg6KHQsZSxuKT0+e3ZhciByPW4oNzQxNSksaT1uKDM2NzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXTpyKHQsaSh0KSl9fSw3Mjg3Oih0LGUsbik9Pnt2YXIgcj1uKDQ4NjUpLGk9bigxNzU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0fHxbXSxlfHxbXSxyKX19LDkyMzQ6KCk9Pnt9LDE3NDg6KHQsZSxuKT0+e3ZhciByPXsiLi9sb2NhbGUiOjkyMzQsIi4vbG9jYWxlLmpzIjo5MjM0fTtmdW5jdGlvbiBpKHQpe3ZhciBlPWEodCk7cmV0dXJuIG4oZSl9ZnVuY3Rpb24gYSh0KXtpZighbi5vKHIsdCkpe3ZhciBlPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyBlLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGV9cmV0dXJuIHJbdF19aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLnJlc29sdmU9YSx0LmV4cG9ydHM9aSxpLmlkPTE3NDh9LDE5NDE6ZnVuY3Rpb24odCxlLG4peyh0PW4ubm1kKHQpKS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHI7ZnVuY3Rpb24gaSgpe3JldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQXJyYXl8fCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbCE9dCYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBjKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8IltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQsZSl7dmFyIG4scj1bXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXIucHVzaChlKHRbbl0sbikpO3JldHVybiByfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgbiBpbiBlKWgoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIGgoZSwidG9TdHJpbmciKSYmKHQudG9TdHJpbmc9ZS50b1N0cmluZyksaChlLCJ2YWx1ZU9mIikmJih0LnZhbHVlT2Y9ZS52YWx1ZU9mKSx0fWZ1bmN0aW9uIGQodCxlLG4scil7cmV0dXJuIHZlKHQsZSxuLHIsITApLnV0YygpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG51bGw9PXQuX3BmJiYodC5fcGY9e2VtcHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiExLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVkOiExLGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10sbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX0pLHQuX3BmfWZ1bmN0aW9uIGcodCl7aWYobnVsbD09dC5faXNWYWxpZCl7dmFyIGU9cCh0KSxuPXIuY2FsbChlLnBhcnNlZERhdGVQYXJ0cywoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9KSksaT0haXNOYU4odC5fZC5nZXRUaW1lKCkpJiZlLm92ZXJmbG93PDAmJiFlLmVtcHR5JiYhZS5pbnZhbGlkTW9udGgmJiFlLmludmFsaWRXZWVrZGF5JiYhZS53ZWVrZGF5TWlzbWF0Y2gmJiFlLm51bGxJbnB1dCYmIWUuaW52YWxpZEZvcm1hdCYmIWUudXNlckludmFsaWRhdGVkJiYoIWUubWVyaWRpZW18fGUubWVyaWRpZW0mJm4pO2lmKHQuX3N0cmljdCYmKGk9aSYmMD09PWUuY2hhcnNMZWZ0T3ZlciYmMD09PWUudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09ZS5iaWdIb3VyKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbih0KSlyZXR1cm4gaTt0Ll9pc1ZhbGlkPWl9cmV0dXJuIHQuX2lzVmFsaWR9ZnVuY3Rpb24geSh0KXt2YXIgZT1kKE5hTik7cmV0dXJuIG51bGwhPXQ/ZihwKGUpLHQpOnAoZSkudXNlckludmFsaWRhdGVkPSEwLGV9cj1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0KHRoaXMpLG49ZS5sZW5ndGg+Pj4wLHI9MDtyPG47cisrKWlmKHIgaW4gZSYmdC5jYWxsKHRoaXMsZVtyXSxyLGUpKXJldHVybiEwO3JldHVybiExfTt2YXIgbT1pLm1vbWVudFByb3BlcnRpZXM9W107ZnVuY3Rpb24gYih0LGUpe3ZhciBuLHIsaTtpZihzKGUuX2lzQU1vbWVudE9iamVjdCl8fCh0Ll9pc0FNb21lbnRPYmplY3Q9ZS5faXNBTW9tZW50T2JqZWN0KSxzKGUuX2kpfHwodC5faT1lLl9pKSxzKGUuX2YpfHwodC5fZj1lLl9mKSxzKGUuX2wpfHwodC5fbD1lLl9sKSxzKGUuX3N0cmljdCl8fCh0Ll9zdHJpY3Q9ZS5fc3RyaWN0KSxzKGUuX3R6bSl8fCh0Ll90em09ZS5fdHptKSxzKGUuX2lzVVRDKXx8KHQuX2lzVVRDPWUuX2lzVVRDKSxzKGUuX29mZnNldCl8fCh0Ll9vZmZzZXQ9ZS5fb2Zmc2V0KSxzKGUuX3BmKXx8KHQuX3BmPXAoZSkpLHMoZS5fbG9jYWxlKXx8KHQuX2xvY2FsZT1lLl9sb2NhbGUpLDA8bS5sZW5ndGgpZm9yKG49MDtuPG0ubGVuZ3RoO24rKylzKGk9ZVtyPW1bbl1dKXx8KHRbcl09aSk7cmV0dXJuIHR9dmFyIHY9ITE7ZnVuY3Rpb24gXyh0KXtiKHRoaXMsdCksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT10Ll9kP3QuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09diYmKHY9ITAsaS51cGRhdGVPZmZzZXQodGhpcyksdj0hMSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fG51bGwhPXQmJm51bGwhPXQuX2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiBrKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9ZnVuY3Rpb24gdyh0KXt2YXIgZT0rdCxuPTA7cmV0dXJuIDAhPT1lJiZpc0Zpbml0ZShlKSYmKG49ayhlKSksbn1mdW5jdGlvbiBUKHQsZSxuKXt2YXIgcixpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxhPU1hdGguYWJzKHQubGVuZ3RoLWUubGVuZ3RoKSxvPTA7Zm9yKHI9MDtyPGk7cisrKShuJiZ0W3JdIT09ZVtyXXx8IW4mJncodFtyXSkhPT13KGVbcl0pKSYmbysrO3JldHVybiBvK2F9ZnVuY3Rpb24gRSh0KXshMT09PWkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiYidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK3QpfWZ1bmN0aW9uIEModCxlKXt2YXIgbj0hMDtyZXR1cm4gZigoZnVuY3Rpb24oKXtpZihudWxsIT1pLmRlcHJlY2F0aW9uSGFuZGxlciYmaS5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCx0KSxuKXtmb3IodmFyIHIsYT1bXSxvPTA7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7aWYocj0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1tvXSl7Zm9yKHZhciBzIGluIHIrPSJcblsiK28rIl0gIixhcmd1bWVudHNbMF0pcis9cysiOiAiK2FyZ3VtZW50c1swXVtzXSsiLCAiO3I9ci5zbGljZSgwLC0yKX1lbHNlIHI9YXJndW1lbnRzW29dO2EucHVzaChyKX1FKHQrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpLmpvaW4oIiIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLG49ITF9cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZSl9dmFyIFMsQT17fTtmdW5jdGlvbiBNKHQsZSl7bnVsbCE9aS5kZXByZWNhdGlvbkhhbmRsZXImJmkuZGVwcmVjYXRpb25IYW5kbGVyKHQsZSksQVt0XXx8KEUoZSksQVt0XT0hMCl9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIE8odCxlKXt2YXIgbixyPWYoe30sdCk7Zm9yKG4gaW4gZSloKGUsbikmJihvKHRbbl0pJiZvKGVbbl0pPyhyW25dPXt9LGYocltuXSx0W25dKSxmKHJbbl0sZVtuXSkpOm51bGwhPWVbbl0/cltuXT1lW25dOmRlbGV0ZSByW25dKTtmb3IobiBpbiB0KWgodCxuKSYmIWgoZSxuKSYmbyh0W25dKSYmKHJbbl09Zih7fSxyW25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRCh0KXtudWxsIT10JiZ0aGlzLnNldCh0KX1pLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxpLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLFM9T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24odCl7dmFyIGUsbj1bXTtmb3IoZSBpbiB0KWgodCxlKSYmbi5wdXNoKGUpO3JldHVybiBufTt2YXIgQj17fTtmdW5jdGlvbiBMKHQsZSl7dmFyIG49dC50b0xvd2VyQ2FzZSgpO0Jbbl09QltuKyJzIl09QltlXT10fWZ1bmN0aW9uIEkodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0JbdF18fEJbdC50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gRih0KXt2YXIgZSxuLHI9e307Zm9yKG4gaW4gdCloKHQsbikmJihlPUkobikpJiYocltlXT10W25dKTtyZXR1cm4gcn12YXIgUj17fTtmdW5jdGlvbiBQKHQsZSl7Ult0XT1lfWZ1bmN0aW9uIGoodCxlLG4pe3ZhciByPSIiK01hdGguYWJzKHQpLGk9ZS1yLmxlbmd0aDtyZXR1cm4oMDw9dD9uPyIrIjoiIjoiLSIpK01hdGgucG93KDEwLE1hdGgubWF4KDAsaSkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK3J9dmFyIHo9LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98WVlZWVlZfFlZWVlZfFlZWVl8WVl8Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csWT0vKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxVPXt9LCQ9e307ZnVuY3Rpb24gVyh0LGUsbixyKXt2YXIgaT1yOyJzdHJpbmciPT10eXBlb2YgciYmKGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tyXSgpfSksdCYmKCRbdF09aSksZSYmKCRbZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gaihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlWzFdLGVbMl0pfSksbiYmKCRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0KX0pfWZ1bmN0aW9uIHEodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/KGU9SChlLHQubG9jYWxlRGF0YSgpKSxVW2VdPVVbZV18fGZ1bmN0aW9uKHQpe3ZhciBlLG4scixpPXQubWF0Y2goeik7Zm9yKGU9MCxuPWkubGVuZ3RoO2U8bjtlKyspJFtpW2VdXT9pW2VdPSRbaVtlXV06aVtlXT0ocj1pW2VdKS5tYXRjaCgvXFtbXHNcU10vKT9yLnJlcGxhY2UoL15cW3xcXSQvZywiIik6ci5yZXBsYWNlKC9cXC9nLCIiKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsYT0iIjtmb3Iocj0wO3I8bjtyKyspYSs9TihpW3JdKT9pW3JdLmNhbGwoZSx0KTppW3JdO3JldHVybiBhfX0oZSksVVtlXSh0KSk6dC5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBIKHQsZSl7dmFyIG49NTtmdW5jdGlvbiByKHQpe3JldHVybiBlLmxvbmdEYXRlRm9ybWF0KHQpfHx0fWZvcihZLmxhc3RJbmRleD0wOzA8PW4mJlkudGVzdCh0KTspdD10LnJlcGxhY2UoWSxyKSxZLmxhc3RJbmRleD0wLG4tPTE7cmV0dXJuIHR9dmFyIFY9L1xkLyxHPS9cZFxkLyxYPS9cZHszfS8sWj0vXGR7NH0vLFE9L1srLV0/XGR7Nn0vLEs9L1xkXGQ/LyxKPS9cZFxkXGRcZD8vLHR0PS9cZFxkXGRcZFxkXGQ/LyxldD0vXGR7MSwzfS8sbnQ9L1xkezEsNH0vLHJ0PS9bKy1dP1xkezEsNn0vLGl0PS9cZCsvLGF0PS9bKy1dP1xkKy8sb3Q9L1p8WystXVxkXGQ6P1xkXGQvZ2ksc3Q9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxjdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZdezEsMjU2fSl7MSwyfS9pLGx0PXt9O2Z1bmN0aW9uIHV0KHQsZSxuKXtsdFt0XT1OKGUpP2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gdCYmbj9uOmV9fWZ1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIGgobHQsdCk/bHRbdF0oZS5fc3RyaWN0LGUuX2xvY2FsZSk6bmV3IFJlZ0V4cChmdCh0LnJlcGxhY2UoIlxcIiwiIikucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLChmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBlfHxufHxyfHxpfSkpKSl9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX12YXIgZHQ9e307ZnVuY3Rpb24gcHQodCxlKXt2YXIgbixyPWU7Zm9yKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W3RdKSxjKGUpJiYocj1mdW5jdGlvbih0LG4pe25bZV09dyh0KX0pLG49MDtuPHQubGVuZ3RoO24rKylkdFt0W25dXT1yfWZ1bmN0aW9uIGd0KHQsZSl7cHQodCwoZnVuY3Rpb24odCxuLHIsaSl7ci5fdz1yLl93fHx7fSxlKHQsci5fdyxyLGkpfSkpfWZ1bmN0aW9uIHl0KHQpe3JldHVybiBtdCh0KT8zNjY6MzY1fWZ1bmN0aW9uIG10KHQpe3JldHVybiB0JTQ9PTAmJnQlMTAwIT0wfHx0JTQwMD09MH1XKCJZIiwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55ZWFyKCk7cmV0dXJuIHQ8PTk5OTk/IiIrdDoiKyIrdH0pKSxXKDAsWyJZWSIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSkpLFcoMCxbIllZWVkiLDRdLDAsInllYXIiKSxXKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLFcoMCxbIllZWVlZWSIsNiwhMF0sMCwieWVhciIpLEwoInllYXIiLCJ5IiksUCgieWVhciIsMSksdXQoIlkiLGF0KSx1dCgiWVkiLEssRyksdXQoIllZWVkiLG50LFopLHV0KCJZWVlZWSIscnQsUSksdXQoIllZWVlZWSIscnQsUSkscHQoWyJZWVlZWSIsIllZWVlZWSJdLDApLHB0KCJZWVlZIiwoZnVuY3Rpb24odCxlKXtlWzBdPTI9PT10Lmxlbmd0aD9pLnBhcnNlVHdvRGlnaXRZZWFyKHQpOncodCl9KSkscHQoIllZIiwoZnVuY3Rpb24odCxlKXtlWzBdPWkucGFyc2VUd29EaWdpdFllYXIodCl9KSkscHQoIlkiLChmdW5jdGlvbih0LGUpe2VbMF09cGFyc2VJbnQodCwxMCl9KSksaS5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KSsoNjg8dyh0KT8xOTAwOjJlMyl9O3ZhciBidCx2dD1fdCgiRnVsbFllYXIiLCEwKTtmdW5jdGlvbiBfdCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9bj8oa3QodGhpcyx0LG4pLGkudXBkYXRlT2Zmc2V0KHRoaXMsZSksdGhpcyk6eHQodGhpcyx0KX19ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/dC5fZFsiZ2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKCk6TmFOfWZ1bmN0aW9uIGt0KHQsZSxuKXt0LmlzVmFsaWQoKSYmIWlzTmFOKG4pJiYoIkZ1bGxZZWFyIj09PWUmJm10KHQueWVhcigpKSYmMT09PXQubW9udGgoKSYmMjk9PT10LmRhdGUoKT90Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0obix0Lm1vbnRoKCksd3Qobix0Lm1vbnRoKCkpKTp0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0obikpfWZ1bmN0aW9uIHd0KHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47dmFyIG49KGUlMTIrMTIpJTEyO3JldHVybiB0Kz0oZS1uKS8xMiwxPT09bj9tdCh0KT8yOToyODozMS1uJTclMn1idD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbih0KXt2YXIgZTtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7KytlKWlmKHRoaXNbZV09PT10KXJldHVybiBlO3JldHVybi0xfSxXKCJNIixbIk1NIiwyXSwiTW8iLChmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pKSxXKCJNTU0iLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsdCl9KSksVygiTU1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsdCl9KSksTCgibW9udGgiLCJNIiksUCgibW9udGgiLDgpLHV0KCJNIixLKSx1dCgiTU0iLEssRyksdXQoIk1NTSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubW9udGhzU2hvcnRSZWdleCh0KX0pKSx1dCgiTU1NTSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubW9udGhzUmVnZXgodCl9KSkscHQoWyJNIiwiTU0iXSwoZnVuY3Rpb24odCxlKXtlWzFdPXcodCktMX0pKSxwdChbIk1NTSIsIk1NTU0iXSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi5fbG9jYWxlLm1vbnRoc1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZVsxXT1pOnAobikuaW52YWxpZE1vbnRoPXR9KSk7dmFyIFR0PS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sRXQ9IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksQ3Q9Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIFN0KHQsZSl7dmFyIG47aWYoIXQuaXNWYWxpZCgpKXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgZSlpZigvXlxkKyQvLnRlc3QoZSkpZT13KGUpO2Vsc2UgaWYoIWMoZT10LmxvY2FsZURhdGEoKS5tb250aHNQYXJzZShlKSkpcmV0dXJuIHQ7cmV0dXJuIG49TWF0aC5taW4odC5kYXRlKCksd3QodC55ZWFyKCksZSkpLHQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKSsiTW9udGgiXShlLG4pLHR9ZnVuY3Rpb24gQXQodCl7cmV0dXJuIG51bGwhPXQ/KFN0KHRoaXMsdCksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcyk6eHQodGhpcywiTW9udGgiKX12YXIgTXQ9Y3QsTnQ9Y3Q7ZnVuY3Rpb24gT3QoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLG4scj1bXSxpPVtdLGE9W107Zm9yKGU9MDtlPDEyO2UrKyluPWQoWzJlMyxlXSksci5wdXNoKHRoaXMubW9udGhzU2hvcnQobiwiIikpLGkucHVzaCh0aGlzLm1vbnRocyhuLCIiKSksYS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSk7Zm9yKHIuc29ydCh0KSxpLnNvcnQodCksYS5zb3J0KHQpLGU9MDtlPDEyO2UrKylyW2VdPWZ0KHJbZV0pLGlbZV09ZnQoaVtlXSk7Zm9yKGU9MDtlPDI0O2UrKylhW2VdPWZ0KGFbZV0pO3RoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIithLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitpLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIityLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBEdCh0KXt2YXIgZTtpZih0PDEwMCYmMDw9dCl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtuWzBdPXQrNDAwLGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxuKSksaXNGaW5pdGUoZS5nZXRVVENGdWxsWWVhcigpKSYmZS5zZXRVVENGdWxsWWVhcih0KX1lbHNlIGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxhcmd1bWVudHMpKTtyZXR1cm4gZX1mdW5jdGlvbiBCdCh0LGUsbil7dmFyIHI9NytlLW47cmV0dXJuLSg3K0R0KHQsMCxyKS5nZXRVVENEYXkoKS1lKSU3K3ItMX1mdW5jdGlvbiBMdCh0LGUsbixyLGkpe3ZhciBhLG8scz0xKzcqKGUtMSkrKDcrbi1yKSU3K0J0KHQscixpKTtyZXR1cm4gbz1zPD0wP3l0KGE9dC0xKStzOnM+eXQodCk/KGE9dCsxLHMteXQodCkpOihhPXQscykse3llYXI6YSxkYXlPZlllYXI6b319ZnVuY3Rpb24gSXQodCxlLG4pe3ZhciByLGksYT1CdCh0LnllYXIoKSxlLG4pLG89TWF0aC5mbG9vcigodC5kYXlPZlllYXIoKS1hLTEpLzcpKzE7cmV0dXJuIG88MT9yPW8rRnQoaT10LnllYXIoKS0xLGUsbik6bz5GdCh0LnllYXIoKSxlLG4pPyhyPW8tRnQodC55ZWFyKCksZSxuKSxpPXQueWVhcigpKzEpOihpPXQueWVhcigpLHI9bykse3dlZWs6cix5ZWFyOml9fWZ1bmN0aW9uIEZ0KHQsZSxuKXt2YXIgcj1CdCh0LGUsbiksaT1CdCh0KzEsZSxuKTtyZXR1cm4oeXQodCktcitpKS83fWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHQuc2xpY2UoZSw3KS5jb25jYXQodC5zbGljZSgwLGUpKX1XKCJ3IixbInd3IiwyXSwid28iLCJ3ZWVrIiksVygiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLEwoIndlZWsiLCJ3IiksTCgiaXNvV2VlayIsIlciKSxQKCJ3ZWVrIiw1KSxQKCJpc29XZWVrIiw1KSx1dCgidyIsSyksdXQoInd3IixLLEcpLHV0KCJXIixLKSx1dCgiV1ciLEssRyksZ3QoWyJ3Iiwid3ciLCJXIiwiV1ciXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyLnN1YnN0cigwLDEpXT13KHQpfSkpLFcoImQiLDAsImRvIiwiZGF5IiksVygiZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsdCl9KSksVygiZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsdCl9KSksVygiZGRkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyx0KX0pKSxXKCJlIiwwLDAsIndlZWtkYXkiKSxXKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxMKCJkYXkiLCJkIiksTCgid2Vla2RheSIsImUiKSxMKCJpc29XZWVrZGF5IiwiRSIpLFAoImRheSIsMTEpLFAoIndlZWtkYXkiLDExKSxQKCJpc29XZWVrZGF5IiwxMSksdXQoImQiLEspLHV0KCJlIixLKSx1dCgiRSIsSyksdXQoImRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c01pblJlZ2V4KHQpfSkpLHV0KCJkZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzU2hvcnRSZWdleCh0KX0pKSx1dCgiZGRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNSZWdleCh0KX0pKSxndChbImRkIiwiZGRkIiwiZGRkZCJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUud2Vla2RheXNQYXJzZSh0LHIsbi5fc3RyaWN0KTtudWxsIT1pP2UuZD1pOnAobikuaW52YWxpZFdlZWtkYXk9dH0pKSxndChbImQiLCJlIiwiRSJdLChmdW5jdGlvbih0LGUsbixyKXtlW3JdPXcodCl9KSk7dmFyIFB0PSJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxqdD0iU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHp0PSJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxZdD1jdCxVdD1jdCwkdD1jdDtmdW5jdGlvbiBXdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyLGksYSxvPVtdLHM9W10sYz1bXSxsPVtdO2ZvcihlPTA7ZTw3O2UrKyluPWQoWzJlMywxXSkuZGF5KGUpLHI9dGhpcy53ZWVrZGF5c01pbihuLCIiKSxpPXRoaXMud2Vla2RheXNTaG9ydChuLCIiKSxhPXRoaXMud2Vla2RheXMobiwiIiksby5wdXNoKHIpLHMucHVzaChpKSxjLnB1c2goYSksbC5wdXNoKHIpLGwucHVzaChpKSxsLnB1c2goYSk7Zm9yKG8uc29ydCh0KSxzLnNvcnQodCksYy5zb3J0KHQpLGwuc29ydCh0KSxlPTA7ZTw3O2UrKylzW2VdPWZ0KHNbZV0pLGNbZV09ZnQoY1tlXSksbFtlXT1mdChsW2VdKTt0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitsLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrYy5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitzLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitvLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBxdCgpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfWZ1bmN0aW9uIEh0KHQsZSl7Vyh0LDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLGUpfSkpfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIGUuX21lcmlkaWVtUGFyc2V9VygiSCIsWyJISCIsMl0sMCwiaG91ciIpLFcoImgiLFsiaGgiLDJdLDAscXQpLFcoImsiLFsia2siLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG91cnMoKXx8MjR9KSksVygiaG1tIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrcXQuYXBwbHkodGhpcykraih0aGlzLm1pbnV0ZXMoKSwyKX0pKSxXKCJobW1zcyIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3F0LmFwcGx5KHRoaXMpK2oodGhpcy5taW51dGVzKCksMikraih0aGlzLnNlY29uZHMoKSwyKX0pKSxXKCJIbW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkraih0aGlzLm1pbnV0ZXMoKSwyKX0pKSxXKCJIbW1zcyIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStqKHRoaXMubWludXRlcygpLDIpK2oodGhpcy5zZWNvbmRzKCksMil9KSksSHQoImEiLCEwKSxIdCgiQSIsITEpLEwoImhvdXIiLCJoIiksUCgiaG91ciIsMTMpLHV0KCJhIixWdCksdXQoIkEiLFZ0KSx1dCgiSCIsSyksdXQoImgiLEspLHV0KCJrIixLKSx1dCgiSEgiLEssRyksdXQoImhoIixLLEcpLHV0KCJrayIsSyxHKSx1dCgiaG1tIixKKSx1dCgiaG1tc3MiLHR0KSx1dCgiSG1tIixKKSx1dCgiSG1tc3MiLHR0KSxwdChbIkgiLCJISCJdLDMpLHB0KFsiayIsImtrIl0sKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj13KHQpO2VbM109MjQ9PT1yPzA6cn0pKSxwdChbImEiLCJBIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9pc1BtPW4uX2xvY2FsZS5pc1BNKHQpLG4uX21lcmlkaWVtPXR9KSkscHQoWyJoIiwiaGgiXSwoZnVuY3Rpb24odCxlLG4pe2VbM109dyh0KSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoImhtbSIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIocikpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiaG1tc3MiLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtNCxpPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyLDIpKSxlWzVdPXcodC5zdWJzdHIoaSkpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiSG1tIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyKSl9KSkscHQoIkhtbXNzIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTQsaT10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIociwyKSksZVs1XT13KHQuc3Vic3RyKGkpKX0pKTt2YXIgR3QsWHQ9X3QoIkhvdXJzIiwhMCksWnQ9e2NhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxpbnZhbGlkRGF0ZToiSW52YWxpZCBkYXRlIixvcmRpbmFsOiIlZCIsZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LG1vbnRoczpFdCxtb250aHNTaG9ydDpDdCx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6UHQsd2Vla2RheXNNaW46enQsd2Vla2RheXNTaG9ydDpqdCxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9cLj8vaX0sUXQ9e30sS3Q9e307ZnVuY3Rpb24gSnQodCl7cmV0dXJuIHQ/dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIik6dH1mdW5jdGlvbiB0ZShlKXt2YXIgcj1udWxsO2lmKCFRdFtlXSYmdCYmdC5leHBvcnRzKXRyeXtyPUd0Ll9hYmJyLG4oMTc0OCkoIi4vIitlKSxlZShyKX1jYXRjaChlKXt9cmV0dXJuIFF0W2VdfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIG47cmV0dXJuIHQmJigobj1zKGUpP3JlKHQpOm5lKHQsZSkpP0d0PW46InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiTG9jYWxlICIrdCsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksR3QuX2FiYnJ9ZnVuY3Rpb24gbmUodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gZGVsZXRlIFF0W3RdLG51bGw7dmFyIG4scj1adDtpZihlLmFiYnI9dCxudWxsIT1RdFt0XSlNKCJkZWZpbmVMb2NhbGVPdmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpLHI9UXRbdF0uX2NvbmZpZztlbHNlIGlmKG51bGwhPWUucGFyZW50TG9jYWxlKWlmKG51bGwhPVF0W2UucGFyZW50TG9jYWxlXSlyPVF0W2UucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KG49dGUoZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gS3RbZS5wYXJlbnRMb2NhbGVdfHwoS3RbZS5wYXJlbnRMb2NhbGVdPVtdKSxLdFtlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTp0LGNvbmZpZzplfSksbnVsbDtyPW4uX2NvbmZpZ31yZXR1cm4gUXRbdF09bmV3IEQoTyhyLGUpKSxLdFt0XSYmS3RbdF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bmUodC5uYW1lLHQuY29uZmlnKX0pKSxlZSh0KSxRdFt0XX1mdW5jdGlvbiByZSh0KXt2YXIgZTtpZih0JiZ0Ll9sb2NhbGUmJnQuX2xvY2FsZS5fYWJiciYmKHQ9dC5fbG9jYWxlLl9hYmJyKSwhdClyZXR1cm4gR3Q7aWYoIWEodCkpe2lmKGU9dGUodCkpcmV0dXJuIGU7dD1bdF19cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhPTA7YTx0Lmxlbmd0aDspe2ZvcihlPShpPUp0KHRbYV0pLnNwbGl0KCItIikpLmxlbmd0aCxuPShuPUp0KHRbYSsxXSkpP24uc3BsaXQoIi0iKTpudWxsOzA8ZTspe2lmKHI9dGUoaS5zbGljZSgwLGUpLmpvaW4oIi0iKSkpcmV0dXJuIHI7aWYobiYmbi5sZW5ndGg+PWUmJlQoaSxuLCEwKT49ZS0xKWJyZWFrO2UtLX1hKyt9cmV0dXJuIEd0fSh0KX1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuPXQuX2E7cmV0dXJuIG4mJi0yPT09cCh0KS5vdmVyZmxvdyYmKGU9blsxXTwwfHwxMTxuWzFdPzE6blsyXTwxfHxuWzJdPnd0KG5bMF0sblsxXSk/MjpuWzNdPDB8fDI0PG5bM118fDI0PT09blszXSYmKDAhPT1uWzRdfHwwIT09bls1XXx8MCE9PW5bNl0pPzM6bls0XTwwfHw1OTxuWzRdPzQ6bls1XTwwfHw1OTxuWzVdPzU6bls2XTwwfHw5OTk8bls2XT82Oi0xLHAodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoZTwwfHwyPGUpJiYoZT0yKSxwKHQpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWUmJihlPTcpLHAodCkuX292ZXJmbG93V2Vla2RheSYmLTE9PT1lJiYoZT04KSxwKHQpLm92ZXJmbG93PWUpLHR9ZnVuY3Rpb24gYWUodCxlLG4pe3JldHVybiBudWxsIT10P3Q6bnVsbCE9ZT9lOm59ZnVuY3Rpb24gb2UodCl7dmFyIGUsbixyLGEsbyxzPVtdO2lmKCF0Ll9kKXt2YXIgYyxsO2ZvcihjPXQsbD1uZXcgRGF0ZShpLm5vdygpKSxyPWMuX3VzZVVUQz9bbC5nZXRVVENGdWxsWWVhcigpLGwuZ2V0VVRDTW9udGgoKSxsLmdldFVUQ0RhdGUoKV06W2wuZ2V0RnVsbFllYXIoKSxsLmdldE1vbnRoKCksbC5nZXREYXRlKCldLHQuX3cmJm51bGw9PXQuX2FbMl0mJm51bGw9PXQuX2FbMV0mJmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbyxzLGM7aWYobnVsbCE9KGU9dC5fdykuR0d8fG51bGwhPWUuV3x8bnVsbCE9ZS5FKWE9MSxvPTQsbj1hZShlLkdHLHQuX2FbMF0sSXQoX2UoKSwxLDQpLnllYXIpLHI9YWUoZS5XLDEpLCgoaT1hZShlLkUsMSkpPDF8fDc8aSkmJihjPSEwKTtlbHNle2E9dC5fbG9jYWxlLl93ZWVrLmRvdyxvPXQuX2xvY2FsZS5fd2Vlay5kb3k7dmFyIGw9SXQoX2UoKSxhLG8pO249YWUoZS5nZyx0Ll9hWzBdLGwueWVhcikscj1hZShlLncsbC53ZWVrKSxudWxsIT1lLmQ/KChpPWUuZCk8MHx8NjxpKSYmKGM9ITApOm51bGwhPWUuZT8oaT1lLmUrYSwoZS5lPDB8fDY8ZS5lKSYmKGM9ITApKTppPWF9cjwxfHxyPkZ0KG4sYSxvKT9wKHQpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWM/cCh0KS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihzPUx0KG4scixpLGEsbyksdC5fYVswXT1zLnllYXIsdC5fZGF5T2ZZZWFyPXMuZGF5T2ZZZWFyKX0odCksbnVsbCE9dC5fZGF5T2ZZZWFyJiYobz1hZSh0Ll9hWzBdLHJbMF0pLCh0Ll9kYXlPZlllYXI+eXQobyl8fDA9PT10Ll9kYXlPZlllYXIpJiYocCh0KS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLG49RHQobywwLHQuX2RheU9mWWVhciksdC5fYVsxXT1uLmdldFVUQ01vbnRoKCksdC5fYVsyXT1uLmdldFVUQ0RhdGUoKSksZT0wO2U8MyYmbnVsbD09dC5fYVtlXTsrK2UpdC5fYVtlXT1zW2VdPXJbZV07Zm9yKDtlPDc7ZSsrKXQuX2FbZV09c1tlXT1udWxsPT10Ll9hW2VdPzI9PT1lPzE6MDp0Ll9hW2VdOzI0PT09dC5fYVszXSYmMD09PXQuX2FbNF0mJjA9PT10Ll9hWzVdJiYwPT09dC5fYVs2XSYmKHQuX25leHREYXk9ITAsdC5fYVszXT0wKSx0Ll9kPSh0Ll91c2VVVEM/RHQ6ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM7cmV0dXJuIHQ8MTAwJiYwPD10PyhzPW5ldyBEYXRlKHQrNDAwLGUsbixyLGksYSxvKSxpc0Zpbml0ZShzLmdldEZ1bGxZZWFyKCkpJiZzLnNldEZ1bGxZZWFyKHQpKTpzPW5ldyBEYXRlKHQsZSxuLHIsaSxhLG8pLHN9KS5hcHBseShudWxsLHMpLGE9dC5fdXNlVVRDP3QuX2QuZ2V0VVRDRGF5KCk6dC5fZC5nZXREYXkoKSxudWxsIT10Ll90em0mJnQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHQuX25leHREYXkmJih0Ll9hWzNdPTI0KSx0Ll93JiZ2b2lkIDAhPT10Ll93LmQmJnQuX3cuZCE9PWEmJihwKHQpLndlZWtkYXlNaXNtYXRjaD0hMCl9fXZhciBzZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxjZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pKD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sbGU9L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sdWU9W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXV0saGU9W1siSEg6bW06c3MuU1NTUyIsL1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sZmU9L15cLz9EYXRlXCgoXC0/XGQrKS9pO2Z1bmN0aW9uIGRlKHQpe3ZhciBlLG4scixpLGEsbyxzPXQuX2ksYz1zZS5leGVjKHMpfHxjZS5leGVjKHMpO2lmKGMpe2ZvcihwKHQpLmlzbz0hMCxlPTAsbj11ZS5sZW5ndGg7ZTxuO2UrKylpZih1ZVtlXVsxXS5leGVjKGNbMV0pKXtpPXVlW2VdWzBdLHI9ITEhPT11ZVtlXVsyXTticmVha31pZihudWxsPT1pKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGNbM10pe2ZvcihlPTAsbj1oZS5sZW5ndGg7ZTxuO2UrKylpZihoZVtlXVsxXS5leGVjKGNbM10pKXthPShjWzJdfHwiICIpK2hlW2VdWzBdO2JyZWFrfWlmKG51bGw9PWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSl9aWYoIXImJm51bGwhPWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1s0XSl7aWYoIWxlLmV4ZWMoY1s0XSkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7bz0iWiJ9dC5fZj1pKyhhfHwiIikrKG98fCIiKSxtZSh0KX1lbHNlIHQuX2lzVmFsaWQ9ITF9dmFyIHBlPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvO3ZhciBnZT17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07ZnVuY3Rpb24geWUodCl7dmFyIGUsbixyLGk9cGUuZXhlYyh0Ll9pLnJlcGxhY2UoL1woW14pXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpKTtpZihpKXt2YXIgYT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89W2Z1bmN0aW9uKHQpe3ZhciBlPXBhcnNlSW50KHQsMTApO3JldHVybiBlPD00OT8yZTMrZTplPD05OTk/MTkwMCtlOmV9KHQpLEN0LmluZGV4T2YoZSkscGFyc2VJbnQobiwxMCkscGFyc2VJbnQociwxMCkscGFyc2VJbnQoaSwxMCldO3JldHVybiBhJiZvLnB1c2gocGFyc2VJbnQoYSwxMCkpLG99KGlbNF0saVszXSxpWzJdLGlbNV0saVs2XSxpWzddKTtpZihuPWEscj10LChlPWlbMV0pJiZqdC5pbmRleE9mKGUpIT09bmV3IERhdGUoblswXSxuWzFdLG5bMl0pLmdldERheSgpJiYocChyKS53ZWVrZGF5TWlzbWF0Y2g9ITAsIShyLl9pc1ZhbGlkPSExKSkpcmV0dXJuO3QuX2E9YSx0Ll90em09ZnVuY3Rpb24odCxlLG4pe2lmKHQpcmV0dXJuIGdlW3RdO2lmKGUpcmV0dXJuIDA7dmFyIHI9cGFyc2VJbnQobiwxMCksaT1yJTEwMDtyZXR1cm4oci1pKS8xMDAqNjAraX0oaVs4XSxpWzldLGlbMTBdKSx0Ll9kPUR0LmFwcGx5KG51bGwsdC5fYSksdC5fZC5zZXRVVENNaW51dGVzKHQuX2QuZ2V0VVRDTWludXRlcygpLXQuX3R6bSkscCh0KS5yZmMyODIyPSEwfWVsc2UgdC5faXNWYWxpZD0hMX1mdW5jdGlvbiBtZSh0KXtpZih0Ll9mIT09aS5JU09fODYwMSlpZih0Ll9mIT09aS5SRkNfMjgyMil7dC5fYT1bXSxwKHQpLmVtcHR5PSEwO3ZhciBlLG4scixhLG8scyxjLGwsdT0iIit0Ll9pLGY9dS5sZW5ndGgsZD0wO2ZvcihyPUgodC5fZix0Ll9sb2NhbGUpLm1hdGNoKHopfHxbXSxlPTA7ZTxyLmxlbmd0aDtlKyspYT1yW2VdLChuPSh1Lm1hdGNoKGh0KGEsdCkpfHxbXSlbMF0pJiYoMDwobz11LnN1YnN0cigwLHUuaW5kZXhPZihuKSkpLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKG8pLHU9dS5zbGljZSh1LmluZGV4T2Yobikrbi5sZW5ndGgpLGQrPW4ubGVuZ3RoKSwkW2FdPyhuP3AodCkuZW1wdHk9ITE6cCh0KS51bnVzZWRUb2tlbnMucHVzaChhKSxzPWEsbD10LG51bGwhPShjPW4pJiZoKGR0LHMpJiZkdFtzXShjLGwuX2EsbCxzKSk6dC5fc3RyaWN0JiYhbiYmcCh0KS51bnVzZWRUb2tlbnMucHVzaChhKTtwKHQpLmNoYXJzTGVmdE92ZXI9Zi1kLDA8dS5sZW5ndGgmJnAodCkudW51c2VkSW5wdXQucHVzaCh1KSx0Ll9hWzNdPD0xMiYmITA9PT1wKHQpLmJpZ0hvdXImJjA8dC5fYVszXSYmKHAodCkuYmlnSG91cj12b2lkIDApLHAodCkucGFyc2VkRGF0ZVBhcnRzPXQuX2Euc2xpY2UoMCkscCh0KS5tZXJpZGllbT10Ll9tZXJpZGllbSx0Ll9hWzNdPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gbnVsbD09bj9lOm51bGwhPXQubWVyaWRpZW1Ib3VyP3QubWVyaWRpZW1Ib3VyKGUsbik6KG51bGwhPXQuaXNQTSYmKChyPXQuaXNQTShuKSkmJmU8MTImJihlKz0xMikscnx8MTIhPT1lfHwoZT0wKSksZSl9KHQuX2xvY2FsZSx0Ll9hWzNdLHQuX21lcmlkaWVtKSxvZSh0KSxpZSh0KX1lbHNlIHllKHQpO2Vsc2UgZGUodCl9ZnVuY3Rpb24gYmUodCl7dmFyIGUsbixyLGgsZD10Ll9pLG09dC5fZjtyZXR1cm4gdC5fbG9jYWxlPXQuX2xvY2FsZXx8cmUodC5fbCksbnVsbD09PWR8fHZvaWQgMD09PW0mJiIiPT09ZD95KHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBkJiYodC5faT1kPXQuX2xvY2FsZS5wcmVwYXJzZShkKSkseChkKT9uZXcgXyhpZShkKSk6KGwoZCk/dC5fZD1kOmEobSk/ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYTtpZigwPT09dC5fZi5sZW5ndGgpcmV0dXJuIHAodCkuaW52YWxpZEZvcm1hdD0hMCx0Ll9kPW5ldyBEYXRlKE5hTik7Zm9yKGk9MDtpPHQuX2YubGVuZ3RoO2krKylhPTAsZT1iKHt9LHQpLG51bGwhPXQuX3VzZVVUQyYmKGUuX3VzZVVUQz10Ll91c2VVVEMpLGUuX2Y9dC5fZltpXSxtZShlKSxnKGUpJiYoYSs9cChlKS5jaGFyc0xlZnRPdmVyLGErPTEwKnAoZSkudW51c2VkVG9rZW5zLmxlbmd0aCxwKGUpLnNjb3JlPWEsKG51bGw9PXJ8fGE8cikmJihyPWEsbj1lKSk7Zih0LG58fGUpfSh0KTptP21lKHQpOnMobj0oZT10KS5faSk/ZS5fZD1uZXcgRGF0ZShpLm5vdygpKTpsKG4pP2UuX2Q9bmV3IERhdGUobi52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2Ygbj8ocj1lLG51bGw9PT0oaD1mZS5leGVjKHIuX2kpKT8oZGUociksITE9PT1yLl9pc1ZhbGlkJiYoZGVsZXRlIHIuX2lzVmFsaWQseWUociksITE9PT1yLl9pc1ZhbGlkJiYoZGVsZXRlIHIuX2lzVmFsaWQsaS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhyKSkpKTpyLl9kPW5ldyBEYXRlKCtoWzFdKSk6YShuKT8oZS5fYT11KG4uc2xpY2UoMCksKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEwKX0pKSxvZShlKSk6byhuKT9mdW5jdGlvbih0KXtpZighdC5fZCl7dmFyIGU9Rih0Ll9pKTt0Ll9hPXUoW2UueWVhcixlLm1vbnRoLGUuZGF5fHxlLmRhdGUsZS5ob3VyLGUubWludXRlLGUuc2Vjb25kLGUubWlsbGlzZWNvbmRdLChmdW5jdGlvbih0KXtyZXR1cm4gdCYmcGFyc2VJbnQodCwxMCl9KSksb2UodCl9fShlKTpjKG4pP2UuX2Q9bmV3IERhdGUobik6aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhlKSxnKHQpfHwodC5fZD1udWxsKSx0KSl9ZnVuY3Rpb24gdmUodCxlLG4scixpKXt2YXIgcyxjPXt9O3JldHVybiEwIT09biYmITEhPT1ufHwocj1uLG49dm9pZCAwKSwobyh0KSYmZnVuY3Rpb24odCl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5sZW5ndGg7dmFyIGU7Zm9yKGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiExO3JldHVybiEwfSh0KXx8YSh0KSYmMD09PXQubGVuZ3RoKSYmKHQ9dm9pZCAwKSxjLl9pc0FNb21lbnRPYmplY3Q9ITAsYy5fdXNlVVRDPWMuX2lzVVRDPWksYy5fbD1uLGMuX2k9dCxjLl9mPWUsYy5fc3RyaWN0PXIsKHM9bmV3IF8oaWUoYmUoYykpKSkuX25leHREYXkmJihzLmFkZCgxLCJkIikscy5fbmV4dERheT12b2lkIDApLHN9ZnVuY3Rpb24gX2UodCxlLG4scil7cmV0dXJuIHZlKHQsZSxuLHIsITEpfWkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9QygidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhbiB1cGNvbWluZyBtYWpvciByZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsKGZ1bmN0aW9uKHQpe3QuX2Q9bmV3IERhdGUodC5faSsodC5fdXNlVVRDPyIgVVRDIjoiIikpfSkpLGkuSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LGkuUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciB4ZT1DKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9X2UuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dDx0aGlzP3RoaXM6dDp5KCl9KSksa2U9QygibW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLChmdW5jdGlvbigpe3ZhciB0PV9lLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpP3RoaXM8dD90aGlzOnQ6eSgpfSkpO2Z1bmN0aW9uIHdlKHQsZSl7dmFyIG4scjtpZigxPT09ZS5sZW5ndGgmJmEoZVswXSkmJihlPWVbMF0pLCFlLmxlbmd0aClyZXR1cm4gX2UoKTtmb3Iobj1lWzBdLHI9MTtyPGUubGVuZ3RoOysrcillW3JdLmlzVmFsaWQoKSYmIWVbcl1bdF0obil8fChuPWVbcl0pO3JldHVybiBufXZhciBUZT1bInllYXIiLCJxdWFydGVyIiwibW9udGgiLCJ3ZWVrIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIl07ZnVuY3Rpb24gRWUodCl7dmFyIGU9Rih0KSxuPWUueWVhcnx8MCxyPWUucXVhcnRlcnx8MCxpPWUubW9udGh8fDAsYT1lLndlZWt8fGUuaXNvV2Vla3x8MCxvPWUuZGF5fHwwLHM9ZS5ob3VyfHwwLGM9ZS5taW51dGV8fDAsbD1lLnNlY29uZHx8MCx1PWUubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClpZigtMT09PWJ0LmNhbGwoVGUsZSl8fG51bGwhPXRbZV0mJmlzTmFOKHRbZV0pKXJldHVybiExO2Zvcih2YXIgbj0hMSxyPTA7cjxUZS5sZW5ndGg7KytyKWlmKHRbVGVbcl1dKXtpZihuKXJldHVybiExO3BhcnNlRmxvYXQodFtUZVtyXV0pIT09dyh0W1RlW3JdXSkmJihuPSEwKX1yZXR1cm4hMH0oZSksdGhpcy5fbWlsbGlzZWNvbmRzPSt1KzFlMypsKzZlNCpjKzFlMypzKjYwKjYwLHRoaXMuX2RheXM9K28rNyphLHRoaXMuX21vbnRocz0raSszKnIrMTIqbix0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1yZSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIENlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRWV9ZnVuY3Rpb24gU2UodCl7cmV0dXJuIHQ8MD8tMSpNYXRoLnJvdW5kKC0xKnQpOk1hdGgucm91bmQodCl9ZnVuY3Rpb24gQWUodCxlKXtXKHQsMCwwLChmdW5jdGlvbigpe3ZhciB0PXRoaXMudXRjT2Zmc2V0KCksbj0iKyI7cmV0dXJuIHQ8MCYmKHQ9LXQsbj0iLSIpLG4raih+fih0LzYwKSwyKStlK2oofn50JTYwLDIpfSkpfUFlKCJaIiwiOiIpLEFlKCJaWiIsIiIpLHV0KCJaIixzdCksdXQoIlpaIixzdCkscHQoWyJaIiwiWloiXSwoZnVuY3Rpb24odCxlLG4pe24uX3VzZVVUQz0hMCxuLl90em09TmUoc3QsdCl9KSk7dmFyIE1lPS8oW1wrXC1dfFxkXGQpL2dpO2Z1bmN0aW9uIE5lKHQsZSl7dmFyIG49KGV8fCIiKS5tYXRjaCh0KTtpZihudWxsPT09bilyZXR1cm4gbnVsbDt2YXIgcj0oKG5bbi5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2goTWUpfHxbIi0iLDAsMF0saT02MCpyWzFdK3coclsyXSk7cmV0dXJuIDA9PT1pPzA6IisiPT09clswXT9pOi1pfWZ1bmN0aW9uIE9lKHQsZSl7dmFyIG4scjtyZXR1cm4gZS5faXNVVEM/KG49ZS5jbG9uZSgpLHI9KHgodCl8fGwodCk/dC52YWx1ZU9mKCk6X2UodCkudmFsdWVPZigpKS1uLnZhbHVlT2YoKSxuLl9kLnNldFRpbWUobi5fZC52YWx1ZU9mKCkrciksaS51cGRhdGVPZmZzZXQobiwhMSksbik6X2UodCkubG9jYWwoKX1mdW5jdGlvbiBEZSh0KXtyZXR1cm4gMTUqLU1hdGgucm91bmQodC5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX1mdW5jdGlvbiBCZSgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fWkudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgTGU9L14oXC18XCspPyg/OihcZCopWy4gXSk/KFxkKylcOihcZCspKD86XDooXGQrKShcLlxkKik/KT8kLyxJZT0vXigtfFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gRmUodCxlKXt2YXIgbixyLGksYT10LG89bnVsbDtyZXR1cm4gQ2UodCk/YT17bXM6dC5fbWlsbGlzZWNvbmRzLGQ6dC5fZGF5cyxNOnQuX21vbnRoc306Yyh0KT8oYT17fSxlP2FbZV09dDphLm1pbGxpc2Vjb25kcz10KToobz1MZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTowLGQ6dyhvWzJdKSpuLGg6dyhvWzNdKSpuLG06dyhvWzRdKSpuLHM6dyhvWzVdKSpuLG1zOncoU2UoMWUzKm9bNl0pKSpufSk6KG89SWUuZXhlYyh0KSk/KG49Ii0iPT09b1sxXT8tMToxLGE9e3k6UmUob1syXSxuKSxNOlJlKG9bM10sbiksdzpSZShvWzRdLG4pLGQ6UmUob1s1XSxuKSxoOlJlKG9bNl0sbiksbTpSZShvWzddLG4pLHM6UmUob1s4XSxuKX0pOm51bGw9PWE/YT17fToib2JqZWN0Ij09dHlwZW9mIGEmJigiZnJvbSJpbiBhfHwidG8iaW4gYSkmJihpPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKT8oZT1PZShlLHQpLHQuaXNCZWZvcmUoZSk/bj1QZSh0LGUpOigobj1QZShlLHQpKS5taWxsaXNlY29uZHM9LW4ubWlsbGlzZWNvbmRzLG4ubW9udGhzPS1uLm1vbnRocyksbik6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX0oX2UoYS5mcm9tKSxfZShhLnRvKSksKGE9e30pLm1zPWkubWlsbGlzZWNvbmRzLGEuTT1pLm1vbnRocykscj1uZXcgRWUoYSksQ2UodCkmJmgodCwiX2xvY2FsZSIpJiYoci5fbG9jYWxlPXQuX2xvY2FsZSkscn1mdW5jdGlvbiBSZSh0LGUpe3ZhciBuPXQmJnBhcnNlRmxvYXQodC5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4obik/MDpuKSplfWZ1bmN0aW9uIFBlKHQsZSl7dmFyIG49e307cmV0dXJuIG4ubW9udGhzPWUubW9udGgoKS10Lm1vbnRoKCkrMTIqKGUueWVhcigpLXQueWVhcigpKSx0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIikuaXNBZnRlcihlKSYmLS1uLm1vbnRocyxuLm1pbGxpc2Vjb25kcz0rZS0rdC5jbG9uZSgpLmFkZChuLm1vbnRocywiTSIpLG59ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtyZXR1cm4gbnVsbD09PXJ8fGlzTmFOKCtyKXx8KE0oZSwibW9tZW50KCkuIitlKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuIitlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIiksaT1uLG49cixyPWkpLHplKHRoaXMsRmUobj0ic3RyaW5nIj09dHlwZW9mIG4/K246bixyKSx0KSx0aGlzfX1mdW5jdGlvbiB6ZSh0LGUsbixyKXt2YXIgYT1lLl9taWxsaXNlY29uZHMsbz1TZShlLl9kYXlzKSxzPVNlKGUuX21vbnRocyk7dC5pc1ZhbGlkKCkmJihyPW51bGw9PXJ8fHIscyYmU3QodCx4dCh0LCJNb250aCIpK3MqbiksbyYma3QodCwiRGF0ZSIseHQodCwiRGF0ZSIpK28qbiksYSYmdC5fZC5zZXRUaW1lKHQuX2QudmFsdWVPZigpK2EqbiksciYmaS51cGRhdGVPZmZzZXQodCxvfHxzKSl9RmUuZm49RWUucHJvdG90eXBlLEZlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmUoTmFOKX07dmFyIFllPWplKDEsImFkZCIpLFVlPWplKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uICRlKHQsZSl7dmFyIG49MTIqKGUueWVhcigpLXQueWVhcigpKSsoZS5tb250aCgpLXQubW9udGgoKSkscj10LmNsb25lKCkuYWRkKG4sIm1vbnRocyIpO3JldHVybi0obisoZS1yPDA/KGUtcikvKHItdC5jbG9uZSgpLmFkZChuLTEsIm1vbnRocyIpKTooZS1yKS8odC5jbG9uZSgpLmFkZChuKzEsIm1vbnRocyIpLXIpKSl8fDB9ZnVuY3Rpb24gV2UodCl7dmFyIGU7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0oZT1yZSh0KSkmJih0aGlzLl9sb2NhbGU9ZSksdGhpcyl9aS5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsaS5kZWZhdWx0Rm9ybWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgcWU9QygibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2FsZSh0KX0pKTtmdW5jdGlvbiBIZSgpe3JldHVybiB0aGlzLl9sb2NhbGV9dmFyIFZlPTEyNjIyNzgwOGU1O2Z1bmN0aW9uIEdlKHQsZSl7cmV0dXJuKHQlZStlKSVlfWZ1bmN0aW9uIFhlKHQsZSxuKXtyZXR1cm4gdDwxMDAmJjA8PXQ/bmV3IERhdGUodCs0MDAsZSxuKS1WZTpuZXcgRGF0ZSh0LGUsbikudmFsdWVPZigpfWZ1bmN0aW9uIFplKHQsZSxuKXtyZXR1cm4gdDwxMDAmJjA8PXQ/RGF0ZS5VVEModCs0MDAsZSxuKS1WZTpEYXRlLlVUQyh0LGUsbil9ZnVuY3Rpb24gUWUodCxlKXtXKDAsW3QsdC5sZW5ndGhdLDAsZSl9ZnVuY3Rpb24gS2UodCxlLG4scixpKXt2YXIgYTtyZXR1cm4gbnVsbD09dD9JdCh0aGlzLHIsaSkueWVhcjooKGE9RnQodCxyLGkpKTxlJiYoZT1hKSxmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhPUx0KHQsZSxuLHIsaSksbz1EdChhLnllYXIsMCxhLmRheU9mWWVhcik7cmV0dXJuIHRoaXMueWVhcihvLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoby5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoby5nZXRVVENEYXRlKCkpLHRoaXN9LmNhbGwodGhpcyx0LGUsbixyLGkpKX1XKDAsWyJnZyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pKSxXKDAsWyJHRyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pKSxRZSgiZ2dnZyIsIndlZWtZZWFyIiksUWUoImdnZ2dnIiwid2Vla1llYXIiKSxRZSgiR0dHRyIsImlzb1dlZWtZZWFyIiksUWUoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxMKCJ3ZWVrWWVhciIsImdnIiksTCgiaXNvV2Vla1llYXIiLCJHRyIpLFAoIndlZWtZZWFyIiwxKSxQKCJpc29XZWVrWWVhciIsMSksdXQoIkciLGF0KSx1dCgiZyIsYXQpLHV0KCJHRyIsSyxHKSx1dCgiZ2ciLEssRyksdXQoIkdHR0ciLG50LFopLHV0KCJnZ2dnIixudCxaKSx1dCgiR0dHR0ciLHJ0LFEpLHV0KCJnZ2dnZyIscnQsUSksZ3QoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyLnN1YnN0cigwLDIpXT13KHQpfSkpLGd0KFsiZ2ciLCJHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3JdPWkucGFyc2VUd29EaWdpdFllYXIodCl9KSksVygiUSIsMCwiUW8iLCJxdWFydGVyIiksTCgicXVhcnRlciIsIlEiKSxQKCJxdWFydGVyIiw3KSx1dCgiUSIsVikscHQoIlEiLChmdW5jdGlvbih0LGUpe2VbMV09Myoodyh0KS0xKX0pKSxXKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksTCgiZGF0ZSIsIkQiKSxQKCJkYXRlIiw5KSx1dCgiRCIsSyksdXQoIkREIixLLEcpLHV0KCJEbyIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8ZS5fb3JkaW5hbFBhcnNlOmUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSkpLHB0KFsiRCIsIkREIl0sMikscHQoIkRvIiwoZnVuY3Rpb24odCxlKXtlWzJdPXcodC5tYXRjaChLKVswXSl9KSk7dmFyIEplPV90KCJEYXRlIiwhMCk7VygiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksTCgiZGF5T2ZZZWFyIiwiREREIiksUCgiZGF5T2ZZZWFyIiw0KSx1dCgiREREIixldCksdXQoIkREREQiLFgpLHB0KFsiREREIiwiRERERCJdLChmdW5jdGlvbih0LGUsbil7bi5fZGF5T2ZZZWFyPXcodCl9KSksVygibSIsWyJtbSIsMl0sMCwibWludXRlIiksTCgibWludXRlIiwibSIpLFAoIm1pbnV0ZSIsMTQpLHV0KCJtIixLKSx1dCgibW0iLEssRykscHQoWyJtIiwibW0iXSw0KTt2YXIgdG49X3QoIk1pbnV0ZXMiLCExKTtXKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxMKCJzZWNvbmQiLCJzIiksUCgic2Vjb25kIiwxNSksdXQoInMiLEspLHV0KCJzcyIsSyxHKSxwdChbInMiLCJzcyJdLDUpO3ZhciBlbixubj1fdCgiU2Vjb25kcyIsITEpO2ZvcihXKCJTIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSksVygwLFsiU1MiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pKSxXKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksVygwLFsiU1NTUyIsNF0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMTAqdGhpcy5taWxsaXNlY29uZCgpfSkpLFcoMCxbIlNTU1NTIiw1XSwwLChmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSkpLFcoMCxbIlNTU1NTUyIsNl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxXKDAsWyJTU1NTU1NTIiw3XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTQqdGhpcy5taWxsaXNlY29uZCgpfSkpLFcoMCxbIlNTU1NTU1NTIiw4XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSkpLFcoMCxbIlNTU1NTU1NTUyIsOV0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxMKCJtaWxsaXNlY29uZCIsIm1zIiksUCgibWlsbGlzZWNvbmQiLDE2KSx1dCgiUyIsZXQsViksdXQoIlNTIixldCxHKSx1dCgiU1NTIixldCxYKSxlbj0iU1NTUyI7ZW4ubGVuZ3RoPD05O2VuKz0iUyIpdXQoZW4saXQpO2Z1bmN0aW9uIHJuKHQsZSl7ZVs2XT13KDFlMyooIjAuIit0KSl9Zm9yKGVuPSJTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilwdChlbixybik7dmFyIGFuPV90KCJNaWxsaXNlY29uZHMiLCExKTtXKCJ6IiwwLDAsInpvbmVBYmJyIiksVygienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgb249Xy5wcm90b3R5cGU7ZnVuY3Rpb24gc24odCl7cmV0dXJuIHR9b24uYWRkPVllLG9uLmNhbGVuZGFyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dHx8X2UoKSxyPU9lKG4sdGhpcykuc3RhcnRPZigiZGF5IiksYT1pLmNhbGVuZGFyRm9ybWF0KHRoaXMscil8fCJzYW1lRWxzZSIsbz1lJiYoTihlW2FdKT9lW2FdLmNhbGwodGhpcyxuKTplW2FdKTtyZXR1cm4gdGhpcy5mb3JtYXQob3x8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoYSx0aGlzLF9lKG4pKSl9LG9uLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfKHRoaXMpfSxvbi5kaWZmPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShyPU9lKHQsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChpPTZlNCooci51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxlPUkoZSkpe2Nhc2UieWVhciI6YT0kZSh0aGlzLHIpLzEyO2JyZWFrO2Nhc2UibW9udGgiOmE9JGUodGhpcyxyKTticmVhaztjYXNlInF1YXJ0ZXIiOmE9JGUodGhpcyxyKS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjphPSh0aGlzLXIpLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6YT0odGhpcy1yKS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjphPSh0aGlzLXIpLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOmE9KHRoaXMtci1pKS84NjRlNTticmVhaztjYXNlIndlZWsiOmE9KHRoaXMtci1pKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDphPXRoaXMtcn1yZXR1cm4gbj9hOmsoYSl9LG9uLmVuZE9mPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHZvaWQgMD09PSh0PUkodCkpfHwibWlsbGlzZWNvbmQiPT09dHx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX2lzVVRDP1plOlhlO3N3aXRjaCh0KXtjYXNlInllYXIiOmU9bih0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTM2ZTUtR2UoZSsodGhpcy5faXNVVEM/MDo2ZTQqdGhpcy51dGNPZmZzZXQoKSksMzZlNSktMTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz02ZTQtR2UoZSw2ZTQpLTE7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MWUzLUdlKGUsMWUzKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uZm9ybWF0PWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuaXNVdGMoKT9pLmRlZmF1bHRGb3JtYXRVdGM6aS5kZWZhdWx0Rm9ybWF0KTt2YXIgZT1xKHRoaXMsdCk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoZSl9LG9uLmZyb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJih4KHQpJiZ0LmlzVmFsaWQoKXx8X2UodCkuaXNWYWxpZCgpKT9GZSh7dG86dGhpcyxmcm9tOnR9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIWUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LG9uLmZyb21Ob3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbShfZSgpLHQpfSxvbi50bz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHgodCkmJnQuaXNWYWxpZCgpfHxfZSh0KS5pc1ZhbGlkKCkpP0ZlKHtmcm9tOnRoaXMsdG86dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24udG9Ob3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG8oX2UoKSx0KX0sb24uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBOKHRoaXNbdD1JKHQpXSk/dGhpc1t0XSgpOnRoaXN9LG9uLmludmFsaWRBdD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLm92ZXJmbG93fSxvbi5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49eCh0KT90Ol9lKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPm4udmFsdWVPZigpOm4udmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKGUpLnZhbHVlT2YoKSl9LG9uLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49eCh0KT90Ol9lKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPG4udmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZihlKS52YWx1ZU9mKCk8bi52YWx1ZU9mKCkpfSxvbi5pc0JldHdlZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9eCh0KT90Ol9lKHQpLGE9eChlKT9lOl9lKGUpO3JldHVybiEhKHRoaXMuaXNWYWxpZCgpJiZpLmlzVmFsaWQoKSYmYS5pc1ZhbGlkKCkpJiYoIigiPT09KHI9cnx8IigpIilbMF0/dGhpcy5pc0FmdGVyKGksbik6IXRoaXMuaXNCZWZvcmUoaSxuKSkmJigiKSI9PT1yWzFdP3RoaXMuaXNCZWZvcmUoYSxuKTohdGhpcy5pc0FmdGVyKGEsbikpfSxvbi5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXgodCk/dDpfZSh0KTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IXIuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oZT1JKGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PXIudmFsdWVPZigpOihuPXIudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKGUpLnZhbHVlT2YoKTw9biYmbjw9dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKSkpfSxvbi5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNBZnRlcih0LGUpfSxvbi5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzU2FtZSh0LGUpfHx0aGlzLmlzQmVmb3JlKHQsZSl9LG9uLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKX0sb24ubGFuZz1xZSxvbi5sb2NhbGU9V2Usb24ubG9jYWxlRGF0YT1IZSxvbi5tYXg9a2Usb24ubWluPXhlLG9uLnBhcnNpbmdGbGFncz1mdW5jdGlvbigpe3JldHVybiBmKHt9LHAodGhpcykpfSxvbi5zZXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpZm9yKHZhciBuPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7dW5pdDpuLHByaW9yaXR5OlJbbl19KTtyZXR1cm4gZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnByaW9yaXR5LWUucHJpb3JpdHl9KSksZX0odD1GKHQpKSxyPTA7cjxuLmxlbmd0aDtyKyspdGhpc1tuW3JdLnVuaXRdKHRbbltyXS51bml0XSk7ZWxzZSBpZihOKHRoaXNbdD1JKHQpXSkpcmV0dXJuIHRoaXNbdF0oZSk7cmV0dXJuIHRoaXN9LG9uLnN0YXJ0T2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzLDEpO2JyZWFrO2Nhc2UibW9udGgiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSsodGhpcy5faXNVVEM/MDo2ZTQqdGhpcy51dGNPZmZzZXQoKSksMzZlNSk7YnJlYWs7Y2FzZSJtaW51dGUiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSw2ZTQpO2JyZWFrO2Nhc2Uic2Vjb25kIjplPXRoaXMuX2QudmFsdWVPZigpLGUtPUdlKGUsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKGUpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LG9uLnN1YnRyYWN0PVVlLG9uLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVyblt0LnllYXIoKSx0Lm1vbnRoKCksdC5kYXRlKCksdC5ob3VyKCksdC5taW51dGUoKSx0LnNlY29uZCgpLHQubWlsbGlzZWNvbmQoKV19LG9uLnRvT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57eWVhcnM6dC55ZWFyKCksbW9udGhzOnQubW9udGgoKSxkYXRlOnQuZGF0ZSgpLGhvdXJzOnQuaG91cnMoKSxtaW51dGVzOnQubWludXRlcygpLHNlY29uZHM6dC5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOnQubWlsbGlzZWNvbmRzKCl9fSxvbi50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxvbi50b0lTT1N0cmluZz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIGU9ITAhPT10LG49ZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbi55ZWFyKCk8MHx8OTk5OTxuLnllYXIoKT9xKG4sZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOk4oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP2U/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLHEobiwiWiIpKTpxKG4sZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LG9uLmluc3BlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIHQ9Im1vbWVudCIsZT0iIjt0aGlzLmlzTG9jYWwoKXx8KHQ9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixlPSJaIik7dmFyIG49IlsiK3QrJygiXScscj0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLGk9ZSsnWyIpXSc7cmV0dXJuIHRoaXMuZm9ybWF0KG4rcisiLU1NLUREW1RdSEg6bW06c3MuU1NTIitpKX0sb24udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxvbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sb24udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG9uLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSxvbi5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSxvbi55ZWFyPXZ0LG9uLmlzTGVhcFllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gbXQodGhpcy55ZWFyKCkpfSxvbi53ZWVrWWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gS2UuY2FsbCh0aGlzLHQsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LG9uLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBLZS5jYWxsKHRoaXMsdCx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSxvbi5xdWFydGVyPW9uLnF1YXJ0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyoodC0xKSt0aGlzLm1vbnRoKCklMyl9LG9uLm1vbnRoPUF0LG9uLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHd0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LG9uLndlZWs9b24ud2Vla3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sb24uaXNvV2Vlaz1vbi5pc29XZWVrcz1mdW5jdGlvbih0KXt2YXIgZT1JdCh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sb24ud2Vla3NJblllYXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gRnQodGhpcy55ZWFyKCksdC5kb3csdC5kb3kpfSxvbi5pc29XZWVrc0luWWVhcj1mdW5jdGlvbigpe3JldHVybiBGdCh0aGlzLnllYXIoKSwxLDQpfSxvbi5kYXRlPUplLG9uLmRheT1vbi5kYXlzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZSxuLHI9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT10PyhlPXQsbj10aGlzLmxvY2FsZURhdGEoKSx0PSJzdHJpbmciIT10eXBlb2YgZT9lOmlzTmFOKGUpPyJudW1iZXIiPT10eXBlb2YoZT1uLndlZWtkYXlzUGFyc2UoZSkpP2U6bnVsbDpwYXJzZUludChlLDEwKSx0aGlzLmFkZCh0LXIsImQiKSk6cn0sb24ud2Vla2RheT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47dmFyIGU9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaXNvV2Vla2RheT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5kYXkoKXx8Nzt2YXIgZSxuLHI9KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLCJzdHJpbmciPT10eXBlb2YgZT9uLndlZWtkYXlzUGFyc2UoZSklN3x8Nzppc05hTihlKT9udWxsOmUpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/cjpyLTcpfSxvbi5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQodC1lLCJkIil9LG9uLmhvdXI9b24uaG91cnM9WHQsb24ubWludXRlPW9uLm1pbnV0ZXM9dG4sb24uc2Vjb25kPW9uLnNlY29uZHM9bm4sb24ubWlsbGlzZWNvbmQ9b24ubWlsbGlzZWNvbmRzPWFuLG9uLnV0Y09mZnNldD1mdW5jdGlvbih0LGUsbil7dmFyIHIsYT10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lzVVRDP2E6RGUodGhpcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihudWxsPT09KHQ9TmUoc3QsdCkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnModCk8MTYmJiFuJiYodCo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmZSYmKHI9RGUodGhpcykpLHRoaXMuX29mZnNldD10LHRoaXMuX2lzVVRDPSEwLG51bGwhPXImJnRoaXMuYWRkKHIsIm0iKSxhIT09dCYmKCFlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP3plKHRoaXMsRmUodC1hLCJtIiksMSwhMSk6dGhpcy5fY2hhbmdlSW5Qcm9ncmVzc3x8KHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9ITAsaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsKSksdGhpc30sb24udXRjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLHQpfSxvbi5sb2NhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLHQpLHRoaXMuX2lzVVRDPSExLHQmJnRoaXMuc3VidHJhY3QoRGUodGhpcyksIm0iKSksdGhpc30sb24ucGFyc2Vab25lPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kpe3ZhciB0PU5lKG90LHRoaXMuX2kpO251bGwhPXQ/dGhpcy51dGNPZmZzZXQodCk6dGhpcy51dGNPZmZzZXQoMCwhMCl9cmV0dXJuIHRoaXN9LG9uLmhhc0FsaWduZWRIb3VyT2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJih0PXQ/X2UodCkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS10KSU2MD09MCl9LG9uLmlzRFNUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX0sb24uaXNMb2NhbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30sb24uaXNVdGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30sb24uaXNVdGM9QmUsb24uaXNVVEM9QmUsb24uem9uZUFiYnI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LG9uLnpvbmVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LG9uLmRhdGVzPUMoImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuIixKZSksb24ubW9udGhzPUMoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsQXQpLG9uLnllYXJzPUMoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLHZ0KSxvbi56b25lPUMoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD8oInN0cmluZyIhPXR5cGVvZiB0JiYodD0tdCksdGhpcy51dGNPZmZzZXQodCxlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pKSxvbi5pc0RTVFNoaWZ0ZWQ9QygiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsKGZ1bmN0aW9uKCl7aWYoIXModGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciB0PXt9O2lmKGIodCx0aGlzKSwodD1iZSh0KSkuX2Epe3ZhciBlPXQuX2lzVVRDP2QodC5fYSk6X2UodC5fYSk7dGhpcy5faXNEU1RTaGlmdGVkPXRoaXMuaXNWYWxpZCgpJiYwPFQodC5fYSxlLnRvQXJyYXkoKSl9ZWxzZSB0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITE7cmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZH0pKTt2YXIgY249RC5wcm90b3R5cGU7ZnVuY3Rpb24gbG4odCxlLG4scil7dmFyIGk9cmUoKSxhPWQoKS5zZXQocixlKTtyZXR1cm4gaVtuXShhLHQpfWZ1bmN0aW9uIHVuKHQsZSxuKXtpZihjKHQpJiYoZT10LHQ9dm9pZCAwKSx0PXR8fCIiLG51bGwhPWUpcmV0dXJuIGxuKHQsZSxuLCJtb250aCIpO3ZhciByLGk9W107Zm9yKHI9MDtyPDEyO3IrKylpW3JdPWxuKHQscixuLCJtb250aCIpO3JldHVybiBpfWZ1bmN0aW9uIGhuKHQsZSxuLHIpeyJib29sZWFuIj09dHlwZW9mIHQ/YyhlKSYmKG49ZSxlPXZvaWQgMCk6KGU9dCx0PSExLGMobj1lKSYmKG49ZSxlPXZvaWQgMCkpLGU9ZXx8IiI7dmFyIGksYT1yZSgpLG89dD9hLl93ZWVrLmRvdzowO2lmKG51bGwhPW4pcmV0dXJuIGxuKGUsKG4rbyklNyxyLCJkYXkiKTt2YXIgcz1bXTtmb3IoaT0wO2k8NztpKyspc1tpXT1sbihlLChpK28pJTcsciwiZGF5Iik7cmV0dXJuIHN9Y24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX2NhbGVuZGFyW3RdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gTihyKT9yLmNhbGwoZSxuKTpyfSxjbi5sb25nRGF0ZUZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sb25nRGF0ZUZvcm1hdFt0XSxuPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3QudG9VcHBlckNhc2UoKV07cmV0dXJuIGV8fCFuP2U6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdPW4ucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDEpfSkpLHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdKX0sY24uaW52YWxpZERhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LGNuLm9yZGluYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLHQpfSxjbi5wcmVwYXJzZT1zbixjbi5wb3N0Zm9ybWF0PXNuLGNuLnJlbGF0aXZlVGltZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9yZWxhdGl2ZVRpbWVbbl07cmV0dXJuIE4oaSk/aSh0LGUsbixyKTppLnJlcGxhY2UoLyVkL2ksdCl9LGNuLnBhc3RGdXR1cmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9yZWxhdGl2ZVRpbWVbMDx0PyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIE4obik/bihlKTpuLnJlcGxhY2UoLyVzL2ksZSl9LGNuLnNldD1mdW5jdGlvbih0KXt2YXIgZSxuO2ZvcihuIGluIHQpTihlPXRbbl0pP3RoaXNbbl09ZTp0aGlzWyJfIituXT1lO3RoaXMuX2NvbmZpZz10LHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LGNuLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiB0P2EodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbdC5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8VHQpLnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LGNuLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbdC5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFtUdC50ZXN0KGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bdC5tb250aCgpXTphKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNTaG9ydC5zdGFuZGFsb25lfSxjbi5tb250aHNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz10LnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxyPTA7cjwxMjsrK3IpYT1kKFsyZTMscl0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl09dGhpcy5tb250aHNTaG9ydChhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT10aGlzLm1vbnRocyhhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBuPyJNTU0iPT09ZT8tMSE9PShpPWJ0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9YnQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDoiTU1NIj09PWU/LTEhPT0oaT1idC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpfHwtMSE9PShpPWJ0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1idC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSl8fC0xIT09KGk9YnQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGx9LmNhbGwodGhpcyx0LGUsbik7Zm9yKHRoaXMuX21vbnRoc1BhcnNlfHwodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10pLHI9MDtyPDEyO3IrKyl7aWYoaT1kKFsyZTMscl0pLG4mJiF0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0mJih0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHMoaSwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHNTaG9ydChpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIikpLG58fHRoaXMuX21vbnRoc1BhcnNlW3JdfHwoYT0iXiIrdGhpcy5tb250aHMoaSwiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLHRoaXMuX21vbnRoc1BhcnNlW3JdPW5ldyBSZWdFeHAoYS5yZXBsYWNlKCIuIiwiIiksImkiKSksbiYmIk1NTU0iPT09ZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmIk1NTSI9PT1lJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYoIW4mJnRoaXMuX21vbnRoc1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHJ9fSxjbi5tb250aHNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8T3QuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PU50KSx0aGlzLl9tb250aHNTdHJpY3RSZWdleCYmdD90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LGNuLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KGgodGhpcywiX21vbnRoc1JlZ2V4Iil8fE90LmNhbGwodGhpcyksdD90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpOihoKHRoaXMsIl9tb250aHNTaG9ydFJlZ2V4Iil8fCh0aGlzLl9tb250aHNTaG9ydFJlZ2V4PU10KSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LGNuLndlZWs9ZnVuY3Rpb24odCl7cmV0dXJuIEl0KHQsdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9LGNuLmZpcnN0RGF5T2ZZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG95fSxjbi5maXJzdERheU9mV2Vlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZWVrLmRvd30sY24ud2Vla2RheXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1t0JiYhMCE9PXQmJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXTtyZXR1cm4hMD09PXQ/UnQobix0aGlzLl93ZWVrLmRvdyk6dD9uW3QuZGF5KCldOm59LGNuLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9SdCh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6dD90aGlzLl93ZWVrZGF5c01pblt0LmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0sY24ud2Vla2RheXNTaG9ydD1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXQ/UnQodGhpcy5fd2Vla2RheXNTaG9ydCx0aGlzLl93ZWVrLmRvdyk6dD90aGlzLl93ZWVrZGF5c1Nob3J0W3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LGNuLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz10LnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10scj0wO3I8NzsrK3IpYT1kKFsyZTMsMV0pLmRheShyKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXNNaW4oYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fd2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/ImRkZGQiPT09ZT8tMSE9PShpPWJ0LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGQiPT09ZT8tMSE9PShpPWJ0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1idC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkZCI9PT1lPy0xIT09KGk9YnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT1idC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9YnQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9YnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPWJ0LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9YnQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1idC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPWJ0LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9YnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fd2Vla2RheXNQYXJzZXx8KHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2U9W10pLHI9MDtyPDc7cisrKXtpZihpPWQoWzJlMywxXSkuZGF5KHIpLG4mJiF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXSYmKHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIikpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl18fChhPSJeIit0aGlzLndlZWtkYXlzKGksIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c1Nob3J0KGksIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c01pbihpLCIiKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoYS5yZXBsYWNlKCIuIiwiIiksImkiKSksbiYmImRkZGQiPT09ZSYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiZGRkIj09PWUmJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZCI9PT1lJiZ0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYoIW4mJnRoaXMuX3dlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLndlZWtkYXlzUmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwodGhpcy5fd2Vla2RheXNSZWdleD1ZdCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSxjbi53ZWVrZGF5c1Nob3J0UmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KGgodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PVV0KSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCl9LGNuLndlZWtkYXlzTWluUmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxXdC5jYWxsKHRoaXMpLHQ/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD0kdCksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpfSxjbi5pc1BNPWZ1bmN0aW9uKHQpe3JldHVybiJwIj09PSh0KyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0sY24ubWVyaWRpZW09ZnVuY3Rpb24odCxlLG4pe3JldHVybiAxMTx0P24/InBtIjoiUE0iOm4/ImFtIjoiQU0ifSxlZSgiZW4iLHtkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT10JTEwO3JldHVybiB0KygxPT09dyh0JTEwMC8xMCk/InRoIjoxPT09ZT8ic3QiOjI9PT1lPyJuZCI6Mz09PWU/InJkIjoidGgiKX19KSxpLmxhbmc9QygibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4iLGVlKSxpLmxhbmdEYXRhPUMoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLHJlKTt2YXIgZm49TWF0aC5hYnM7ZnVuY3Rpb24gZG4odCxlLG4scil7dmFyIGk9RmUoZSxuKTtyZXR1cm4gdC5fbWlsbGlzZWNvbmRzKz1yKmkuX21pbGxpc2Vjb25kcyx0Ll9kYXlzKz1yKmkuX2RheXMsdC5fbW9udGhzKz1yKmkuX21vbnRocyx0Ll9idWJibGUoKX1mdW5jdGlvbiBwbih0KXtyZXR1cm4gdDwwP01hdGguZmxvb3IodCk6TWF0aC5jZWlsKHQpfWZ1bmN0aW9uIGduKHQpe3JldHVybiA0ODAwKnQvMTQ2MDk3fWZ1bmN0aW9uIHluKHQpe3JldHVybiAxNDYwOTcqdC80ODAwfWZ1bmN0aW9uIG1uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKHQpfX12YXIgYm49bW4oIm1zIiksdm49bW4oInMiKSxfbj1tbigibSIpLHhuPW1uKCJoIiksa249bW4oImQiKSx3bj1tbigidyIpLFRuPW1uKCJNIiksRW49bW4oIlEiKSxDbj1tbigieSIpO2Z1bmN0aW9uIFNuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9kYXRhW3RdOk5hTn19dmFyIEFuPVNuKCJtaWxsaXNlY29uZHMiKSxNbj1Tbigic2Vjb25kcyIpLE5uPVNuKCJtaW51dGVzIiksT249U24oImhvdXJzIiksRG49U24oImRheXMiKSxCbj1TbigibW9udGhzIiksTG49U24oInllYXJzIiksSW49TWF0aC5yb3VuZCxGbj17c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNixNOjExfSxSbj1NYXRoLmFicztmdW5jdGlvbiBQbih0KXtyZXR1cm4oMDx0KS0odDwwKXx8K3R9ZnVuY3Rpb24gam4oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIHQsZSxuPVJuKHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLHI9Um4odGhpcy5fZGF5cyksaT1Sbih0aGlzLl9tb250aHMpO2U9aygodD1rKG4vNjApKS82MCksbiU9NjAsdCU9NjA7dmFyIGE9ayhpLzEyKSxvPWklPTEyLHM9cixjPWUsbD10LHU9bj9uLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsaD10aGlzLmFzU2Vjb25kcygpO2lmKCFoKXJldHVybiJQMEQiO3ZhciBmPWg8MD8iLSI6IiIsZD1Qbih0aGlzLl9tb250aHMpIT09UG4oaCk/Ii0iOiIiLHA9UG4odGhpcy5fZGF5cykhPT1QbihoKT8iLSI6IiIsZz1Qbih0aGlzLl9taWxsaXNlY29uZHMpIT09UG4oaCk/Ii0iOiIiO3JldHVybiBmKyJQIisoYT9kK2ErIlkiOiIiKSsobz9kK28rIk0iOiIiKSsocz9wK3MrIkQiOiIiKSsoY3x8bHx8dT8iVCI6IiIpKyhjP2crYysiSCI6IiIpKyhsP2crbCsiTSI6IiIpKyh1P2crdSsiUyI6IiIpfXZhciB6bj1FZS5wcm90b3R5cGU7cmV0dXJuIHpuLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWYWxpZH0sem4uYWJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzPWZuKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1mbih0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9Zm4odGhpcy5fbW9udGhzKSx0Lm1pbGxpc2Vjb25kcz1mbih0Lm1pbGxpc2Vjb25kcyksdC5zZWNvbmRzPWZuKHQuc2Vjb25kcyksdC5taW51dGVzPWZuKHQubWludXRlcyksdC5ob3Vycz1mbih0LmhvdXJzKSx0Lm1vbnRocz1mbih0Lm1vbnRocyksdC55ZWFycz1mbih0LnllYXJzKSx0aGlzfSx6bi5hZGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsMSl9LHpuLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRuKHRoaXMsdCxlLC0xKX0sem4uYXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIGUsbixyPXRoaXMuX21pbGxpc2Vjb25kcztpZigibW9udGgiPT09KHQ9SSh0KSl8fCJxdWFydGVyIj09PXR8fCJ5ZWFyIj09PXQpc3dpdGNoKGU9dGhpcy5fZGF5cytyLzg2NGU1LG49dGhpcy5fbW9udGhzK2duKGUpLHQpe2Nhc2UibW9udGgiOnJldHVybiBuO2Nhc2UicXVhcnRlciI6cmV0dXJuIG4vMztjYXNlInllYXIiOnJldHVybiBuLzEyfWVsc2Ugc3dpdGNoKGU9dGhpcy5fZGF5cytNYXRoLnJvdW5kKHluKHRoaXMuX21vbnRocykpLHQpe2Nhc2Uid2VlayI6cmV0dXJuIGUvNytyLzYwNDhlNTtjYXNlImRheSI6cmV0dXJuIGUrci84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCplK3IvMzZlNTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqZStyLzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIDg2NDAwKmUrci8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IoODY0ZTUqZSkrcjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrdCl9fSx6bi5hc01pbGxpc2Vjb25kcz1ibix6bi5hc1NlY29uZHM9dm4sem4uYXNNaW51dGVzPV9uLHpuLmFzSG91cnM9eG4sem4uYXNEYXlzPWtuLHpuLmFzV2Vla3M9d24sem4uYXNNb250aHM9VG4sem4uYXNRdWFydGVycz1Fbix6bi5hc1llYXJzPUNuLHpuLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fbWlsbGlzZWNvbmRzKzg2NGU1KnRoaXMuX2RheXMrdGhpcy5fbW9udGhzJTEyKjI1OTJlNiszMTUzNmU2KncodGhpcy5fbW9udGhzLzEyKTpOYU59LHpuLl9idWJibGU9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLGE9dGhpcy5fbWlsbGlzZWNvbmRzLG89dGhpcy5fZGF5cyxzPXRoaXMuX21vbnRocyxjPXRoaXMuX2RhdGE7cmV0dXJuIDA8PWEmJjA8PW8mJjA8PXN8fGE8PTAmJm88PTAmJnM8PTB8fChhKz04NjRlNSpwbih5bihzKStvKSxzPW89MCksYy5taWxsaXNlY29uZHM9YSUxZTMsdD1rKGEvMWUzKSxjLnNlY29uZHM9dCU2MCxlPWsodC82MCksYy5taW51dGVzPWUlNjAsbj1rKGUvNjApLGMuaG91cnM9biUyNCxzKz1pPWsoZ24obys9ayhuLzI0KSkpLG8tPXBuKHluKGkpKSxyPWsocy8xMikscyU9MTIsYy5kYXlzPW8sYy5tb250aHM9cyxjLnllYXJzPXIsdGhpc30sem4uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gRmUodGhpcyl9LHpuLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdD1JKHQpLHRoaXMuaXNWYWxpZCgpP3RoaXNbdCsicyJdKCk6TmFOfSx6bi5taWxsaXNlY29uZHM9QW4sem4uc2Vjb25kcz1Nbix6bi5taW51dGVzPU5uLHpuLmhvdXJzPU9uLHpuLmRheXM9RG4sem4ud2Vla3M9ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLmRheXMoKS83KX0sem4ubW9udGhzPUJuLHpuLnllYXJzPUxuLHpuLmh1bWFuaXplPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgZSxuLHIsaSxhLG8scyxjLGwsdSxoPXRoaXMubG9jYWxlRGF0YSgpLGY9KGU9IXQsbj1oLHI9RmUodGhpcykuYWJzKCksaT1JbihyLmFzKCJzIikpLGE9SW4oci5hcygibSIpKSxvPUluKHIuYXMoImgiKSkscz1JbihyLmFzKCJkIikpLGM9SW4oci5hcygiTSIpKSxsPUluKHIuYXMoInkiKSksKHU9aTw9Rm4uc3MmJlsicyIsaV18fGk8Rm4ucyYmWyJzcyIsaV18fGE8PTEmJlsibSJdfHxhPEZuLm0mJlsibW0iLGFdfHxvPD0xJiZbImgiXXx8bzxGbi5oJiZbImhoIixvXXx8czw9MSYmWyJkIl18fHM8Rm4uZCYmWyJkZCIsc118fGM8PTEmJlsiTSJdfHxjPEZuLk0mJlsiTU0iLGNdfHxsPD0xJiZbInkiXXx8WyJ5eSIsbF0pWzJdPWUsdVszXT0wPCt0aGlzLHVbNF09bixmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBpLnJlbGF0aXZlVGltZShlfHwxLCEhbix0LHIpfS5hcHBseShudWxsLHUpKTtyZXR1cm4gdCYmKGY9aC5wYXN0RnV0dXJlKCt0aGlzLGYpKSxoLnBvc3Rmb3JtYXQoZil9LHpuLnRvSVNPU3RyaW5nPWpuLHpuLnRvU3RyaW5nPWpuLHpuLnRvSlNPTj1qbix6bi5sb2NhbGU9V2Usem4ubG9jYWxlRGF0YT1IZSx6bi50b0lzb1N0cmluZz1DKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsam4pLHpuLmxhbmc9cWUsVygiWCIsMCwwLCJ1bml4IiksVygieCIsMCwwLCJ2YWx1ZU9mIiksdXQoIngiLGF0KSx1dCgiWCIsL1srLV0/XGQrKFwuXGR7MSwzfSk/LykscHQoIlgiLChmdW5jdGlvbih0LGUsbil7bi5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdCh0LDEwKSl9KSkscHQoIngiLChmdW5jdGlvbih0LGUsbil7bi5fZD1uZXcgRGF0ZSh3KHQpKX0pKSxpLnZlcnNpb249IjIuMjQuMCIsZT1fZSxpLmZuPW9uLGkubWluPWZ1bmN0aW9uKCl7cmV0dXJuIHdlKCJpc0JlZm9yZSIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxpLm1heD1mdW5jdGlvbigpe3JldHVybiB3ZSgiaXNBZnRlciIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxpLm5vdz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZX0saS51dGM9ZCxpLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIF9lKDFlMyp0KX0saS5tb250aHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdW4odCxlLCJtb250aHMiKX0saS5pc0RhdGU9bCxpLmxvY2FsZT1lZSxpLmludmFsaWQ9eSxpLmR1cmF0aW9uPUZlLGkuaXNNb21lbnQ9eCxpLndlZWtkYXlzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzIil9LGkucGFyc2Vab25lPWZ1bmN0aW9uKCl7cmV0dXJuIF9lLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0saS5sb2NhbGVEYXRhPXJlLGkuaXNEdXJhdGlvbj1DZSxpLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHVuKHQsZSwibW9udGhzU2hvcnQiKX0saS53ZWVrZGF5c01pbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGhuKHQsZSxuLCJ3ZWVrZGF5c01pbiIpfSxpLmRlZmluZUxvY2FsZT1uZSxpLnVwZGF0ZUxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKG51bGwhPWUpe3ZhciBuLHIsaT1adDtudWxsIT0ocj10ZSh0KSkmJihpPXIuX2NvbmZpZyksKG49bmV3IEQoZT1PKGksZSkpKS5wYXJlbnRMb2NhbGU9UXRbdF0sUXRbdF09bixlZSh0KX1lbHNlIG51bGwhPVF0W3RdJiYobnVsbCE9UXRbdF0ucGFyZW50TG9jYWxlP1F0W3RdPVF0W3RdLnBhcmVudExvY2FsZTpudWxsIT1RdFt0XSYmZGVsZXRlIFF0W3RdKTtyZXR1cm4gUXRbdF19LGkubG9jYWxlcz1mdW5jdGlvbigpe3JldHVybiBTKFF0KX0saS53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzU2hvcnQiKX0saS5ub3JtYWxpemVVbml0cz1JLGkucmVsYXRpdmVUaW1lUm91bmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/SW46ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihJbj10LCEwKX0saS5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09Rm5bdF0mJih2b2lkIDA9PT1lP0ZuW3RdOihGblt0XT1lLCJzIj09PXQmJihGbi5zcz1lLTEpLCEwKSl9LGkuY2FsZW5kYXJGb3JtYXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmRpZmYoZSwiZGF5cyIsITApO3JldHVybiBuPC02PyJzYW1lRWxzZSI6bjwtMT8ibGFzdFdlZWsiOm48MD8ibGFzdERheSI6bjwxPyJzYW1lRGF5IjpuPDI/Im5leHREYXkiOm48Nz8ibmV4dFdlZWsiOiJzYW1lRWxzZSJ9LGkucHJvdG90eXBlPW9uLGkuSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDoiWVlZWS1NTS1ERFRISDptbSIsREFURVRJTUVfTE9DQUxfU0VDT05EUzoiWVlZWS1NTS1ERFRISDptbTpzcyIsREFURVRJTUVfTE9DQUxfTVM6IllZWVktTU0tRERUSEg6bW06c3MuU1NTIixEQVRFOiJZWVlZLU1NLUREIixUSU1FOiJISDptbSIsVElNRV9TRUNPTkRTOiJISDptbTpzcyIsVElNRV9NUzoiSEg6bW06c3MuU1NTIixXRUVLOiJHR0dHLVtXXVdXIixNT05USDoiWVlZWS1NTSJ9LGl9KCl9LDY0NzA6dD0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkpfWZ1bmN0aW9uIG4odCxlKXtmb3IodmFyIG4scj0iIixpPTAsYT0tMSxvPTAscz0wO3M8PXQubGVuZ3RoOysrcyl7aWYoczx0Lmxlbmd0aCluPXQuY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09bilicmVhaztuPTQ3fWlmKDQ3PT09bil7aWYoYT09PXMtMXx8MT09PW8pO2Vsc2UgaWYoYSE9PXMtMSYmMj09PW8pe2lmKHIubGVuZ3RoPDJ8fDIhPT1pfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMikpaWYoci5sZW5ndGg+Mil7dmFyIGM9ci5sYXN0SW5kZXhPZigiLyIpO2lmKGMhPT1yLmxlbmd0aC0xKXstMT09PWM/KHI9IiIsaT0wKTppPShyPXIuc2xpY2UoMCxjKSkubGVuZ3RoLTEtci5sYXN0SW5kZXhPZigiLyIpLGE9cyxvPTA7Y29udGludWV9fWVsc2UgaWYoMj09PXIubGVuZ3RofHwxPT09ci5sZW5ndGgpe3I9IiIsaT0wLGE9cyxvPTA7Y29udGludWV9ZSYmKHIubGVuZ3RoPjA/cis9Ii8uLiI6cj0iLi4iLGk9Mil9ZWxzZSByLmxlbmd0aD4wP3IrPSIvIit0LnNsaWNlKGErMSxzKTpyPXQuc2xpY2UoYSsxLHMpLGk9cy1hLTE7YT1zLG89MH1lbHNlIDQ2PT09biYmLTEhPT1vPysrbzpvPS0xfXJldHVybiByfXZhciByPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LHI9IiIsaT0hMSxhPWFyZ3VtZW50cy5sZW5ndGgtMTthPj0tMSYmIWk7YS0tKXt2YXIgbzthPj0wP289YXJndW1lbnRzW2FdOih2b2lkIDA9PT10JiYodD1wcm9jZXNzLmN3ZCgpKSxvPXQpLGUobyksMCE9PW8ubGVuZ3RoJiYocj1vKyIvIityLGk9NDc9PT1vLmNoYXJDb2RlQXQoMCkpfXJldHVybiByPW4ociwhaSksaT9yLmxlbmd0aD4wPyIvIityOiIvIjpyLmxlbmd0aD4wP3I6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24odCl7aWYoZSh0KSwwPT09dC5sZW5ndGgpcmV0dXJuIi4iO3ZhciByPTQ3PT09dC5jaGFyQ29kZUF0KDApLGk9NDc9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSk7cmV0dXJuIDAhPT0odD1uKHQsIXIpKS5sZW5ndGh8fHJ8fCh0PSIuIiksdC5sZW5ndGg+MCYmaSYmKHQrPSIvIikscj8iLyIrdDp0fSxpc0Fic29sdXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQpLHQubGVuZ3RoPjAmJjQ3PT09dC5jaGFyQ29kZUF0KDApfSxqb2luOmZ1bmN0aW9uKCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgdCxuPTA7bjxhcmd1bWVudHMubGVuZ3RoOysrbil7dmFyIGk9YXJndW1lbnRzW25dO2UoaSksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1pOnQrPSIvIitpKX1yZXR1cm4gdm9pZCAwPT09dD8iLiI6ci5ub3JtYWxpemUodCl9LHJlbGF0aXZlOmZ1bmN0aW9uKHQsbil7aWYoZSh0KSxlKG4pLHQ9PT1uKXJldHVybiIiO2lmKCh0PXIucmVzb2x2ZSh0KSk9PT0obj1yLnJlc29sdmUobikpKXJldHVybiIiO2Zvcih2YXIgaT0xO2k8dC5sZW5ndGgmJjQ3PT09dC5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKHZhciBhPXQubGVuZ3RoLG89YS1pLHM9MTtzPG4ubGVuZ3RoJiY0Nz09PW4uY2hhckNvZGVBdChzKTsrK3MpO2Zvcih2YXIgYz1uLmxlbmd0aC1zLGw9bzxjP286Yyx1PS0xLGg9MDtoPD1sOysraCl7aWYoaD09PWwpe2lmKGM+bCl7aWYoNDc9PT1uLmNoYXJDb2RlQXQocytoKSlyZXR1cm4gbi5zbGljZShzK2grMSk7aWYoMD09PWgpcmV0dXJuIG4uc2xpY2UocytoKX1lbHNlIG8+bCYmKDQ3PT09dC5jaGFyQ29kZUF0KGkraCk/dT1oOjA9PT1oJiYodT0wKSk7YnJlYWt9dmFyIGY9dC5jaGFyQ29kZUF0KGkraCk7aWYoZiE9PW4uY2hhckNvZGVBdChzK2gpKWJyZWFrOzQ3PT09ZiYmKHU9aCl9dmFyIGQ9IiI7Zm9yKGg9aSt1KzE7aDw9YTsrK2gpaCE9PWEmJjQ3IT09dC5jaGFyQ29kZUF0KGgpfHwoMD09PWQubGVuZ3RoP2QrPSIuLiI6ZCs9Ii8uLiIpO3JldHVybiBkLmxlbmd0aD4wP2Qrbi5zbGljZShzK3UpOihzKz11LDQ3PT09bi5jaGFyQ29kZUF0KHMpJiYrK3Msbi5zbGljZShzKSl9LF9tYWtlTG9uZzpmdW5jdGlvbih0KXtyZXR1cm4gdH0sZGlybmFtZTpmdW5jdGlvbih0KXtpZihlKHQpLDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBuPXQuY2hhckNvZGVBdCgwKSxyPTQ3PT09bixpPS0xLGE9ITAsbz10Lmxlbmd0aC0xO28+PTE7LS1vKWlmKDQ3PT09KG49dC5jaGFyQ29kZUF0KG8pKSl7aWYoIWEpe2k9bzticmVha319ZWxzZSBhPSExO3JldHVybi0xPT09aT9yPyIvIjoiLiI6ciYmMT09PWk/Ii8vIjp0LnNsaWNlKDAsaSl9LGJhc2VuYW1lOmZ1bmN0aW9uKHQsbil7aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtlKHQpO3ZhciByLGk9MCxhPS0xLG89ITA7aWYodm9pZCAwIT09biYmbi5sZW5ndGg+MCYmbi5sZW5ndGg8PXQubGVuZ3RoKXtpZihuLmxlbmd0aD09PXQubGVuZ3RoJiZuPT09dClyZXR1cm4iIjt2YXIgcz1uLmxlbmd0aC0xLGM9LTE7Zm9yKHI9dC5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIGw9dC5jaGFyQ29kZUF0KHIpO2lmKDQ3PT09bCl7aWYoIW8pe2k9cisxO2JyZWFrfX1lbHNlLTE9PT1jJiYobz0hMSxjPXIrMSkscz49MCYmKGw9PT1uLmNoYXJDb2RlQXQocyk/LTE9PS0tcyYmKGE9cik6KHM9LTEsYT1jKSl9cmV0dXJuIGk9PT1hP2E9YzotMT09PWEmJihhPXQubGVuZ3RoKSx0LnNsaWNlKGksYSl9Zm9yKHI9dC5sZW5ndGgtMTtyPj0wOy0tcilpZig0Nz09PXQuY2hhckNvZGVBdChyKSl7aWYoIW8pe2k9cisxO2JyZWFrfX1lbHNlLTE9PT1hJiYobz0hMSxhPXIrMSk7cmV0dXJuLTE9PT1hPyIiOnQuc2xpY2UoaSxhKX0sZXh0bmFtZTpmdW5jdGlvbih0KXtlKHQpO2Zvcih2YXIgbj0tMSxyPTAsaT0tMSxhPSEwLG89MCxzPXQubGVuZ3RoLTE7cz49MDstLXMpe3ZhciBjPXQuY2hhckNvZGVBdChzKTtpZig0NyE9PWMpLTE9PT1pJiYoYT0hMSxpPXMrMSksNDY9PT1jPy0xPT09bj9uPXM6MSE9PW8mJihvPTEpOi0xIT09biYmKG89LTEpO2Vsc2UgaWYoIWEpe3I9cysxO2JyZWFrfX1yZXR1cm4tMT09PW58fC0xPT09aXx8MD09PW98fDE9PT1vJiZuPT09aS0xJiZuPT09cisxPyIiOnQuc2xpY2UobixpKX0sZm9ybWF0OmZ1bmN0aW9uKHQpe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPWUuZGlyfHxlLnJvb3Qscj1lLmJhc2V8fChlLm5hbWV8fCIiKSsoZS5leHR8fCIiKTtyZXR1cm4gbj9uPT09ZS5yb290P24rcjpuKyIvIityOnJ9KDAsdCl9LHBhcnNlOmZ1bmN0aW9uKHQpe2UodCk7dmFyIG49e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbjt2YXIgcixpPXQuY2hhckNvZGVBdCgwKSxhPTQ3PT09aTthPyhuLnJvb3Q9Ii8iLHI9MSk6cj0wO2Zvcih2YXIgbz0tMSxzPTAsYz0tMSxsPSEwLHU9dC5sZW5ndGgtMSxoPTA7dT49cjstLXUpaWYoNDchPT0oaT10LmNoYXJDb2RlQXQodSkpKS0xPT09YyYmKGw9ITEsYz11KzEpLDQ2PT09aT8tMT09PW8/bz11OjEhPT1oJiYoaD0xKTotMSE9PW8mJihoPS0xKTtlbHNlIGlmKCFsKXtzPXUrMTticmVha31yZXR1cm4tMT09PW98fC0xPT09Y3x8MD09PWh8fDE9PT1oJiZvPT09Yy0xJiZvPT09cysxPy0xIT09YyYmKG4uYmFzZT1uLm5hbWU9MD09PXMmJmE/dC5zbGljZSgxLGMpOnQuc2xpY2UocyxjKSk6KDA9PT1zJiZhPyhuLm5hbWU9dC5zbGljZSgxLG8pLG4uYmFzZT10LnNsaWNlKDEsYykpOihuLm5hbWU9dC5zbGljZShzLG8pLG4uYmFzZT10LnNsaWNlKHMsYykpLG4uZXh0PXQuc2xpY2UobyxjKSkscz4wP24uZGlyPXQuc2xpY2UoMCxzLTEpOmEmJihuLmRpcj0iLyIpLG59LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O3IucG9zaXg9cix0LmV4cG9ydHM9cn0sNTU1OigpPT57fSw4MjE4OigpPT57fSw4MDA5OigpPT57fSw1MzU0OigpPT57fSw2ODc4OigpPT57fSw4MTgzOigpPT57fSwxNDI4OigpPT57fSw0NTUxOigpPT57fSw4ODAwOigpPT57fSwxOTkzOigpPT57fSwzMDY5OigpPT57fSw5MTQzOigpPT57fSw3NTQzOih0LGUsbik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBudWxsPT10fHxudWxsPT1lP05hTjp0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBpKHQpe2xldCBlPXQsbj10LGk9dDtmdW5jdGlvbiBhKHQsZSxyPTAsYT10Lmxlbmd0aCl7aWYocjxhKXtpZigwIT09bihlLGUpKXJldHVybiBhO2Rve2NvbnN0IG49cithPj4+MTtpKHRbbl0sZSk8MD9yPW4rMTphPW59d2hpbGUocjxhKX1yZXR1cm4gcn1yZXR1cm4gMiE9PXQubGVuZ3RoJiYoZT0oZSxuKT0+dChlKS1uLG49cixpPShlLG4pPT5yKHQoZSksbikpLHtsZWZ0OmEsY2VudGVyOmZ1bmN0aW9uKHQsbixyPTAsaT10Lmxlbmd0aCl7Y29uc3Qgbz1hKHQsbixyLGktMSk7cmV0dXJuIG8+ciYmZSh0W28tMV0sbik+LWUodFtvXSxuKT9vLTE6b30scmlnaHQ6ZnVuY3Rpb24odCxlLHI9MCxhPXQubGVuZ3RoKXtpZihyPGEpe2lmKDAhPT1uKGUsZSkpcmV0dXJuIGE7ZG97Y29uc3Qgbj1yK2E+Pj4xO2kodFtuXSxlKTw9MD9yPW4rMTphPW59d2hpbGUocjxhKX1yZXR1cm4gcn19fWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1uLnIoZSksbi5kKGUse0FkZGVyOigpPT54LERlbGF1bmF5OigpPT5CcyxGb3JtYXRTcGVjaWZpZXI6KCk9PkZsLEludGVybk1hcDooKT0+VCxJbnRlcm5TZXQ6KCk9PkUsTm9kZTooKT0+bmcsVm9yb25vaTooKT0+U3MsWm9vbVRyYW5zZm9ybTooKT0+c0UsYWN0aXZlOigpPT50YSxhcmM6KCk9PkprLGFyZWE6KCk9PnN3LGFyZWFSYWRpYWw6KCk9Pnl3LGFzY2VuZGluZzooKT0+cixhdXRvVHlwZTooKT0+bGMsYXhpc0JvdHRvbTooKT0+aWUsYXhpc0xlZnQ6KCk9PmFlLGF4aXNSaWdodDooKT0+cmUsYXhpc1RvcDooKT0+bmUsYmluOigpPT5pdCxiaXNlY3Q6KCk9PnUsYmlzZWN0Q2VudGVyOigpPT5sLGJpc2VjdExlZnQ6KCk9PmMsYmlzZWN0UmlnaHQ6KCk9PnMsYmlzZWN0b3I6KCk9PmksYmxvYjooKT0+JGMsYnJ1c2g6KCk9Pk9hLGJydXNoU2VsZWN0aW9uOigpPT5BYSxicnVzaFg6KCk9Pk1hLGJydXNoWTooKT0+TmEsYnVmZmVyOigpPT5xYyxjaG9yZDooKT0+JGEsY2hvcmREaXJlY3RlZDooKT0+cWEsY2hvcmRUcmFuc3Bvc2U6KCk9PldhLGNsdXN0ZXI6KCk9PlhwLGNvbG9yOigpPT50cixjb250b3VyRGVuc2l0eTooKT0+aXMsY29udG91cnM6KCk9PktvLGNvdW50OigpPT5oLGNyZWF0ZTooKT0+Q2ssY3JlYXRvcjooKT0+cG4sY3Jvc3M6KCk9PmcsY3N2OigpPT5aYyxjc3ZGb3JtYXQ6KCk9PlpzLGNzdkZvcm1hdEJvZHk6KCk9PlFzLGNzdkZvcm1hdFJvdzooKT0+SnMsY3N2Rm9ybWF0Um93czooKT0+S3MsY3N2Rm9ybWF0VmFsdWU6KCk9PnRjLGNzdlBhcnNlOigpPT5Hcyxjc3ZQYXJzZVJvd3M6KCk9PlhzLGN1YmVoZWxpeDooKT0+VW8sY3Vtc3VtOigpPT55LGN1cnZlQmFzaXM6KCk9Plh3LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlF3LGN1cnZlQmFzaXNPcGVuOigpPT5KdyxjdXJ2ZUJ1bXBYOigpPT5lVCxjdXJ2ZUJ1bXBZOigpPT5uVCxjdXJ2ZUJ1bmRsZTooKT0+aVQsY3VydmVDYXJkaW5hbDooKT0+c1QsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+bFQsY3VydmVDYXJkaW5hbE9wZW46KCk9PmhULGN1cnZlQ2F0bXVsbFJvbTooKT0+cFQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT55VCxjdXJ2ZUNhdG11bGxSb21PcGVuOigpPT5iVCxjdXJ2ZUxpbmVhcjooKT0+cncsY3VydmVMaW5lYXJDbG9zZWQ6KCk9Pl9ULGN1cnZlTW9ub3RvbmVYOigpPT5BVCxjdXJ2ZU1vbm90b25lWTooKT0+TVQsY3VydmVOYXR1cmFsOigpPT5EVCxjdXJ2ZVN0ZXA6KCk9PkxULGN1cnZlU3RlcEFmdGVyOigpPT5GVCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PklULGRlc2NlbmRpbmc6KCk9Pm0sZGV2aWF0aW9uOigpPT52LGRpZmZlcmVuY2U6KCk9Pnp0LGRpc2pvaW50OigpPT5ZdCxkaXNwYXRjaDooKT0+ZmUsZHJhZzooKT0+enMsZHJhZ0Rpc2FibGU6KCk9PkxuLGRyYWdFbmFibGU6KCk9PkluLGRzdjooKT0+WGMsZHN2Rm9ybWF0OigpPT5IcyxlYXNlQmFjazooKT0+UmMsZWFzZUJhY2tJbjooKT0+SWMsZWFzZUJhY2tJbk91dDooKT0+UmMsZWFzZUJhY2tPdXQ6KCk9PkZjLGVhc2VCb3VuY2U6KCk9PkRjLGVhc2VCb3VuY2VJbjooKT0+T2MsZWFzZUJvdW5jZUluT3V0OigpPT5CYyxlYXNlQm91bmNlT3V0OigpPT5EYyxlYXNlQ2lyY2xlOigpPT5NYyxlYXNlQ2lyY2xlSW46KCk9PlNjLGVhc2VDaXJjbGVJbk91dDooKT0+TWMsZWFzZUNpcmNsZU91dDooKT0+QWMsZWFzZUN1YmljOigpPT5aaSxlYXNlQ3ViaWNJbjooKT0+R2ksZWFzZUN1YmljSW5PdXQ6KCk9PlppLGVhc2VDdWJpY091dDooKT0+WGksZWFzZUVsYXN0aWM6KCk9PnpjLGVhc2VFbGFzdGljSW46KCk9PmpjLGVhc2VFbGFzdGljSW5PdXQ6KCk9PlljLGVhc2VFbGFzdGljT3V0OigpPT56YyxlYXNlRXhwOigpPT5DYyxlYXNlRXhwSW46KCk9PlRjLGVhc2VFeHBJbk91dDooKT0+Q2MsZWFzZUV4cE91dDooKT0+RWMsZWFzZUxpbmVhcjooKT0+aGMsZWFzZVBvbHk6KCk9Pm1jLGVhc2VQb2x5SW46KCk9PmdjLGVhc2VQb2x5SW5PdXQ6KCk9Pm1jLGVhc2VQb2x5T3V0OigpPT55YyxlYXNlUXVhZDooKT0+cGMsZWFzZVF1YWRJbjooKT0+ZmMsZWFzZVF1YWRJbk91dDooKT0+cGMsZWFzZVF1YWRPdXQ6KCk9PmRjLGVhc2VTaW46KCk9PmtjLGVhc2VTaW5JbjooKT0+X2MsZWFzZVNpbkluT3V0OigpPT5rYyxlYXNlU2luT3V0OigpPT54YyxldmVyeTooKT0+THQsZXh0ZW50OigpPT5fLGZjdW1zdW06KCk9PncsZmlsdGVyOigpPT5GdCxmbGF0R3JvdXA6KCk9PkwsZmxhdFJvbGx1cDooKT0+SSxmb3JjZUNlbnRlcjooKT0+YWwsZm9yY2VDb2xsaWRlOigpPT5ibCxmb3JjZUxpbms6KCk9PnhsLGZvcmNlTWFueUJvZHk6KCk9PlNsLGZvcmNlUmFkaWFsOigpPT5BbCxmb3JjZVNpbXVsYXRpb246KCk9PkNsLGZvcmNlWDooKT0+TWwsZm9yY2VZOigpPT5ObCxmb3JtYXQ6KCk9PllsLGZvcm1hdERlZmF1bHRMb2NhbGU6KCk9PkhsLGZvcm1hdExvY2FsZTooKT0+cWwsZm9ybWF0UHJlZml4OigpPT5VbCxmb3JtYXRTcGVjaWZpZXI6KCk9PklsLGZzdW06KCk9PmssZ2VvQWxiZXJzOigpPT51cCxnZW9BbGJlcnNVc2E6KCk9PmhwLGdlb0FyZWE6KCk9Plp1LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+Z3AsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT5wcCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+bXAsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PnlwLGdlb0JvdW5kczooKT0+T2gsZ2VvQ2VudHJvaWQ6KCk9PiRoLGdlb0NpcmNsZTooKT0+dGYsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZmYsZ2VvQ2xpcENpcmNsZTooKT0+ZGYsZ2VvQ2xpcEV4dGVudDooKT0+eGYsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+X2YsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PndwLGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5rcCxnZW9Db25pY0VxdWFsQXJlYTooKT0+bHAsZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNwLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PlNwLGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PkNwLGdlb0NvbnRhaW5zOigpPT5QZixnZW9EaXN0YW5jZTooKT0+TWYsZ2VvRXF1YWxFYXJ0aDooKT0+THAsZ2VvRXF1YWxFYXJ0aFJhdzooKT0+QnAsZ2VvRXF1aXJlY3Rhbmd1bGFyOigpPT5FcCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PlRwLGdlb0dub21vbmljOigpPT5GcCxnZW9Hbm9tb25pY1JhdzooKT0+SXAsZ2VvR3JhdGljdWxlOigpPT5ZZixnZW9HcmF0aWN1bGUxMDooKT0+VWYsZ2VvSWRlbnRpdHk6KCk9PlJwLGdlb0ludGVycG9sYXRlOigpPT4kZixnZW9MZW5ndGg6KCk9PkNmLGdlb01lcmNhdG9yOigpPT52cCxnZW9NZXJjYXRvclJhdzooKT0+YnAsZ2VvTmF0dXJhbEVhcnRoMTooKT0+anAsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+UHAsZ2VvT3J0aG9ncmFwaGljOigpPT5ZcCxnZW9PcnRob2dyYXBoaWNSYXc6KCk9PnpwLGdlb1BhdGg6KCk9PkhkLGdlb1Byb2plY3Rpb246KCk9PmFwLGdlb1Byb2plY3Rpb25NdXRhdG9yOigpPT5vcCxnZW9Sb3RhdGlvbjooKT0+UWgsZ2VvU3RlcmVvZ3JhcGhpYzooKT0+JHAsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+VXAsZ2VvU3RyZWFtOigpPT5DdSxnZW9UcmFuc2Zvcm06KCk9PlZkLGdlb1RyYW5zdmVyc2VNZXJjYXRvcjooKT0+cXAsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3OigpPT5XcCxncmF5OigpPT54byxncmVhdGVzdDooKT0+RXQsZ3JlYXRlc3RJbmRleDooKT0+Q3QsZ3JvdXA6KCk9Pk8sZ3JvdXBTb3J0OigpPT5ILGdyb3VwczooKT0+RCxoY2w6KCk9Pk5vLGhpZXJhcmNoeTooKT0+UXAsaGlzdG9ncmFtOigpPT5pdCxoc2w6KCk9PmhyLGh0bWw6KCk9PnJsLGltYWdlOigpPT5LYyxpbmRleDooKT0+UCxpbmRleGVzOigpPT5qLGludGVycG9sYXRlOigpPT5JcixpbnRlcnBvbGF0ZUFycmF5OigpPT5TcixpbnRlcnBvbGF0ZUJhc2lzOigpPT5ncixpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkOigpPT55cixpbnRlcnBvbGF0ZUJsdWVzOigpPT5KeCxpbnRlcnBvbGF0ZUJyQkc6KCk9Pmh4LGludGVycG9sYXRlQnVHbjooKT0+TXgsaW50ZXJwb2xhdGVCdVB1OigpPT5PeCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PnVrLGludGVycG9sYXRlQ29vbDooKT0+ZGssaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9Pmh5LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+aGssaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5meSxpbnRlcnBvbGF0ZURhdGU6KCk9Pk1yLGludGVycG9sYXRlRGlzY3JldGU6KCk9PktnLGludGVycG9sYXRlR25CdTooKT0+QngsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PmVrLGludGVycG9sYXRlR3JleXM6KCk9PnJrLGludGVycG9sYXRlSGNsOigpPT5jeSxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pmx5LGludGVycG9sYXRlSHNsOigpPT5peSxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PmF5LGludGVycG9sYXRlSHVlOigpPT5KZyxpbnRlcnBvbGF0ZUluZmVybm86KCk9PlRrLGludGVycG9sYXRlTGFiOigpPT5veSxpbnRlcnBvbGF0ZU1hZ21hOigpPT53ayxpbnRlcnBvbGF0ZU51bWJlcjooKT0+TnIsaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+RXIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9Pk9yLGludGVycG9sYXRlT3JSZDooKT0+SXgsaW50ZXJwb2xhdGVPcmFuZ2VzOigpPT5sayxpbnRlcnBvbGF0ZVBSR246KCk9PmR4LGludGVycG9sYXRlUGlZRzooKT0+Z3gsaW50ZXJwb2xhdGVQbGFzbWE6KCk9PkVrLGludGVycG9sYXRlUHVCdTooKT0+angsaW50ZXJwb2xhdGVQdUJ1R246KCk9PlJ4LGludGVycG9sYXRlUHVPcjooKT0+bXgsaW50ZXJwb2xhdGVQdVJkOigpPT5ZeCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PmFrLGludGVycG9sYXRlUmFpbmJvdzooKT0+Z2ssaW50ZXJwb2xhdGVSZEJ1OigpPT52eCxpbnRlcnBvbGF0ZVJkR3k6KCk9Pnh4LGludGVycG9sYXRlUmRQdTooKT0+JHgsaW50ZXJwb2xhdGVSZFlsQnU6KCk9Pnd4LGludGVycG9sYXRlUmRZbEduOigpPT5FeCxpbnRlcnBvbGF0ZVJlZHM6KCk9PnNrLGludGVycG9sYXRlUmdiOigpPT54cixpbnRlcnBvbGF0ZVJnYkJhc2lzOigpPT53cixpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkOigpPT5UcixpbnRlcnBvbGF0ZVJvdW5kOigpPT50eSxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PnZrLGludGVycG9sYXRlU3BlY3RyYWw6KCk9PlN4LGludGVycG9sYXRlU3RyaW5nOigpPT5McixpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczooKT0+Z2ksaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PnlpLGludGVycG9sYXRlVHVyYm86KCk9Pl9rLGludGVycG9sYXRlVmlyaWRpczooKT0+a2ssaW50ZXJwb2xhdGVXYXJtOigpPT5mayxpbnRlcnBvbGF0ZVlsR246KCk9PlZ4LGludGVycG9sYXRlWWxHbkJ1OigpPT5xeCxpbnRlcnBvbGF0ZVlsT3JCcjooKT0+WHgsaW50ZXJwb2xhdGVZbE9yUmQ6KCk9PlF4LGludGVycG9sYXRlWm9vbTooKT0+bnksaW50ZXJydXB0OigpPT5saSxpbnRlcnNlY3Rpb246KCk9PlV0LGludGVydmFsOigpPT5pRSxpc29Gb3JtYXQ6KCk9PmVFLGlzb1BhcnNlOigpPT5yRSxqc29uOigpPT50bCxsYWI6KCk9PmtvLGxjaDooKT0+TW8sbGVhc3Q6KCk9Pnd0LGxlYXN0SW5kZXg6KCk9PlR0LGxpbmU6KCk9Pm93LGxpbmVSYWRpYWw6KCk9Pmd3LGxpbmtIb3Jpem9udGFsOigpPT5UdyxsaW5rUmFkaWFsOigpPT5DdyxsaW5rVmVydGljYWw6KCk9PkV3LGxvY2FsOigpPT5BayxtYXA6KCk9PlJ0LG1hdGNoZXI6KCk9PmJlLG1heDooKT0+YXQsbWF4SW5kZXg6KCk9PmR0LG1lYW46KCk9PnB0LG1lZGlhbjooKT0+Z3QsbWVyZ2U6KCk9Pnl0LG1pbjooKT0+b3QsbWluSW5kZXg6KCk9Pm10LG1vZGU6KCk9PmJ0LG5hbWVzcGFjZTooKT0+TGUsbmFtZXNwYWNlczooKT0+QmUsbmljZTooKT0+bnQsbm93OigpPT5HcixwYWNrOigpPT5rZyxwYWNrRW5jbG9zZTooKT0+cmcscGFja1NpYmxpbmdzOigpPT55ZyxwYWlyczooKT0+dnQscGFydGl0aW9uOigpPT5BZyxwYXRoOigpPT5KYSxwZXJtdXRlOigpPT5VLHBpZTooKT0+dXcscGllY2V3aXNlOigpPT5keSxwb2ludFJhZGlhbDooKT0+bXcscG9pbnRlcjooKT0+UnIscG9pbnRlcnM6KCk9Pk5rLHBvbHlnb25BcmVhOigpPT5neSxwb2x5Z29uQ2VudHJvaWQ6KCk9Pnl5LHBvbHlnb25Db250YWluczooKT0+eHkscG9seWdvbkh1bGw6KCk9Pl95LHBvbHlnb25MZW5ndGg6KCk9Pmt5LHByZWNpc2lvbkZpeGVkOigpPT5WbCxwcmVjaXNpb25QcmVmaXg6KCk9PkdsLHByZWNpc2lvblJvdW5kOigpPT5YbCxxdWFkdHJlZTooKT0+dWwscXVhbnRpbGU6KCk9Pmx0LHF1YW50aWxlU29ydGVkOigpPT51dCxxdWFudGl6ZTooKT0+cHkscXVpY2tzZWxlY3Q6KCk9PnN0LHJhZGlhbEFyZWE6KCk9Pnl3LHJhZGlhbExpbmU6KCk9Pmd3LHJhbmRvbUJhdGVzOigpPT5NeSxyYW5kb21CZXJub3VsbGk6KCk9PkR5LHJhbmRvbUJldGE6KCk9Pkl5LHJhbmRvbUJpbm9taWFsOigpPT5GeSxyYW5kb21DYXVjaHk6KCk9PlB5LHJhbmRvbUV4cG9uZW50aWFsOigpPT5OeSxyYW5kb21HYW1tYTooKT0+THkscmFuZG9tR2VvbWV0cmljOigpPT5CeSxyYW5kb21JbnQ6KCk9PkV5LHJhbmRvbUlyd2luSGFsbDooKT0+QXkscmFuZG9tTGNnOigpPT5VeSxyYW5kb21Mb2dOb3JtYWw6KCk9PlN5LHJhbmRvbUxvZ2lzdGljOigpPT5qeSxyYW5kb21Ob3JtYWw6KCk9PkN5LHJhbmRvbVBhcmV0bzooKT0+T3kscmFuZG9tUG9pc3NvbjooKT0+enkscmFuZG9tVW5pZm9ybTooKT0+VHkscmFuZG9tV2VpYnVsbDooKT0+UnkscmFuZ2U6KCk9Pnh0LHJhbms6KCk9Pmt0LHJlZHVjZTooKT0+UHQscmV2ZXJzZTooKT0+anQscmdiOigpPT5pcixyaWJib246KCk9PnVvLHJpYmJvbkFycm93OigpPT5obyxyb2xsdXA6KCk9PkYscm9sbHVwczooKT0+UixzY2FsZUJhbmQ6KCk9PlZ5LHNjYWxlRGl2ZXJnaW5nOigpPT5WXyxzY2FsZURpdmVyZ2luZ0xvZzooKT0+R18sc2NhbGVEaXZlcmdpbmdQb3c6KCk9PlpfLHNjYWxlRGl2ZXJnaW5nU3FydDooKT0+UV8sc2NhbGVEaXZlcmdpbmdTeW1sb2c6KCk9PlhfLHNjYWxlSWRlbnRpdHk6KCk9PmNtLHNjYWxlSW1wbGljaXQ6KCk9PnF5LHNjYWxlTGluZWFyOigpPT5zbSxzY2FsZUxvZzooKT0+bW0sc2NhbGVPcmRpbmFsOigpPT5IeSxzY2FsZVBvaW50OigpPT5YeSxzY2FsZVBvdzooKT0+Q20sc2NhbGVRdWFudGlsZTooKT0+T20sc2NhbGVRdWFudGl6ZTooKT0+RG0sc2NhbGVSYWRpYWw6KCk9Pk5tLHNjYWxlU2VxdWVudGlhbDooKT0+el8sc2NhbGVTZXF1ZW50aWFsTG9nOigpPT5ZXyxzY2FsZVNlcXVlbnRpYWxQb3c6KCk9PiRfLHNjYWxlU2VxdWVudGlhbFF1YW50aWxlOigpPT5xXyxzY2FsZVNlcXVlbnRpYWxTcXJ0OigpPT5XXyxzY2FsZVNlcXVlbnRpYWxTeW1sb2c6KCk9PlVfLHNjYWxlU3FydDooKT0+U20sc2NhbGVTeW1sb2c6KCk9PnhtLHNjYWxlVGhyZXNob2xkOigpPT5CbSxzY2FsZVRpbWU6KCk9PkZfLHNjYWxlVXRjOigpPT5SXyxzY2FuOigpPT5TdCxzY2hlbWVBY2NlbnQ6KCk9PnR4LHNjaGVtZUJsdWVzOigpPT5LeCxzY2hlbWVCckJHOigpPT51eCxzY2hlbWVCdUduOigpPT5BeCxzY2hlbWVCdVB1OigpPT5OeCxzY2hlbWVDYXRlZ29yeTEwOigpPT5KXyxzY2hlbWVEYXJrMjooKT0+ZXgsc2NoZW1lR25CdTooKT0+RHgsc2NoZW1lR3JlZW5zOigpPT50ayxzY2hlbWVHcmV5czooKT0+bmssc2NoZW1lT3JSZDooKT0+THgsc2NoZW1lT3JhbmdlczooKT0+Y2ssc2NoZW1lUFJHbjooKT0+Zngsc2NoZW1lUGFpcmVkOigpPT5ueCxzY2hlbWVQYXN0ZWwxOigpPT5yeCxzY2hlbWVQYXN0ZWwyOigpPT5peCxzY2hlbWVQaVlHOigpPT5weCxzY2hlbWVQdUJ1OigpPT5QeCxzY2hlbWVQdUJ1R246KCk9PkZ4LHNjaGVtZVB1T3I6KCk9Pnl4LHNjaGVtZVB1UmQ6KCk9Pnp4LHNjaGVtZVB1cnBsZXM6KCk9PmlrLHNjaGVtZVJkQnU6KCk9PmJ4LHNjaGVtZVJkR3k6KCk9Pl94LHNjaGVtZVJkUHU6KCk9PlV4LHNjaGVtZVJkWWxCdTooKT0+a3gsc2NoZW1lUmRZbEduOigpPT5UeCxzY2hlbWVSZWRzOigpPT5vayxzY2hlbWVTZXQxOigpPT5heCxzY2hlbWVTZXQyOigpPT5veCxzY2hlbWVTZXQzOigpPT5zeCxzY2hlbWVTcGVjdHJhbDooKT0+Q3gsc2NoZW1lVGFibGVhdTEwOigpPT5jeCxzY2hlbWVZbEduOigpPT5IeCxzY2hlbWVZbEduQnU6KCk9Pld4LHNjaGVtZVlsT3JCcjooKT0+R3gsc2NoZW1lWWxPclJkOigpPT5aeCxzZWxlY3Q6KCk9Pk1uLHNlbGVjdEFsbDooKT0+T2ssc2VsZWN0aW9uOigpPT5BbixzZWxlY3RvcjooKT0+cGUsc2VsZWN0b3JBbGw6KCk9Pm1lLHNodWZmbGU6KCk9PkF0LHNodWZmbGVyOigpPT5NdCxzb21lOigpPT5JdCxzb3J0OigpPT4kLHN0YWNrOigpPT5ZVCxzdGFja09mZnNldERpdmVyZ2luZzooKT0+JFQsc3RhY2tPZmZzZXRFeHBhbmQ6KCk9PlVULHN0YWNrT2Zmc2V0Tm9uZTooKT0+UlQsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5XVCxzdGFja09mZnNldFdpZ2dsZTooKT0+cVQsc3RhY2tPcmRlckFwcGVhcmFuY2U6KCk9PkhULHN0YWNrT3JkZXJBc2NlbmRpbmc6KCk9PkdULHN0YWNrT3JkZXJEZXNjZW5kaW5nOigpPT5aVCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5RVCxzdGFja09yZGVyTm9uZTooKT0+UFQsc3RhY2tPcmRlclJldmVyc2U6KCk9PktULHN0cmF0aWZ5OigpPT5MZyxzdHlsZTooKT0+cWUsc3Vic2V0OigpPT5IdCxzdW06KCk9Pk50LHN1cGVyc2V0OigpPT5XdCxzdmc6KCk9PmlsLHN5bWJvbDooKT0+cXcsc3ltYm9sQ2lyY2xlOigpPT5TdyxzeW1ib2xDcm9zczooKT0+QXcsc3ltYm9sRGlhbW9uZDooKT0+T3csc3ltYm9sU3F1YXJlOigpPT5GdyxzeW1ib2xTdGFyOigpPT5JdyxzeW1ib2xUcmlhbmdsZTooKT0+UHcsc3ltYm9sV3llOigpPT4kdyxzeW1ib2xzOigpPT5Xdyx0ZXh0OigpPT5WYyx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOigpPT5odCx0aHJlc2hvbGRTY290dDooKT0+ZnQsdGhyZXNob2xkU3R1cmdlczooKT0+cnQsdGlja0Zvcm1hdDooKT0+YW0sdGlja0luY3JlbWVudDooKT0+dHQsdGlja1N0ZXA6KCk9PmV0LHRpY2tzOigpPT5KLHRpbWVEYXk6KCk9Pm5iLHRpbWVEYXlzOigpPT5yYix0aW1lRm9ybWF0OigpPT5odix0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+RF8sdGltZUZvcm1hdExvY2FsZTooKT0+bHYsdGltZUZyaWRheTooKT0+dWIsdGltZUZyaWRheXM6KCk9Pm1iLHRpbWVIb3VyOigpPT5KbSx0aW1lSG91cnM6KCk9PnRiLHRpbWVJbnRlcnZhbDooKT0+VW0sdGltZU1pbGxpc2Vjb25kOigpPT5XbSx0aW1lTWlsbGlzZWNvbmRzOigpPT5xbSx0aW1lTWludXRlOigpPT5abSx0aW1lTWludXRlczooKT0+UW0sdGltZU1vbmRheTooKT0+b2IsdGltZU1vbmRheXM6KCk9PmRiLHRpbWVNb250aDooKT0+X2IsdGltZU1vbnRoczooKT0+eGIsdGltZVBhcnNlOigpPT5mdix0aW1lU2F0dXJkYXk6KCk9PmhiLHRpbWVTYXR1cmRheXM6KCk9PmJiLHRpbWVTZWNvbmQ6KCk9PlZtLHRpbWVTZWNvbmRzOigpPT5HbSx0aW1lU3VuZGF5OigpPT5hYix0aW1lU3VuZGF5czooKT0+ZmIsdGltZVRodXJzZGF5OigpPT5sYix0aW1lVGh1cnNkYXlzOigpPT55Yix0aW1lVGlja0ludGVydmFsOigpPT5hdix0aW1lVGlja3M6KCk9Pml2LHRpbWVUdWVzZGF5OigpPT5zYix0aW1lVHVlc2RheXM6KCk9PnBiLHRpbWVXZWRuZXNkYXk6KCk9PmNiLHRpbWVXZWRuZXNkYXlzOigpPT5nYix0aW1lV2VlazooKT0+YWIsdGltZVdlZWtzOigpPT5mYix0aW1lWWVhcjooKT0+d2IsdGltZVllYXJzOigpPT5UYix0aW1lb3V0OigpPT5uaSx0aW1lcjooKT0+UXIsdGltZXJGbHVzaDooKT0+S3IsdHJhbnNpdGlvbjooKT0+cWksdHJhbnNwb3NlOigpPT5PdCx0cmVlOigpPT4kZyx0cmVlbWFwOigpPT5HZyx0cmVlbWFwQmluYXJ5OigpPT5YZyx0cmVlbWFwRGljZTooKT0+U2csdHJlZW1hcFJlc3F1YXJpZnk6KCk9PlFnLHRyZWVtYXBTbGljZTooKT0+V2csdHJlZW1hcFNsaWNlRGljZTooKT0+WmcsdHJlZW1hcFNxdWFyaWZ5OigpPT5WZyx0c3Y6KCk9PlFjLHRzdkZvcm1hdDooKT0+aWMsdHN2Rm9ybWF0Qm9keTooKT0+YWMsdHN2Rm9ybWF0Um93OigpPT5zYyx0c3ZGb3JtYXRSb3dzOigpPT5vYyx0c3ZGb3JtYXRWYWx1ZTooKT0+Y2MsdHN2UGFyc2U6KCk9Pm5jLHRzdlBhcnNlUm93czooKT0+cmMsdW5pb246KCk9PlZ0LHV0Y0RheTooKT0+RGIsdXRjRGF5czooKT0+QmIsdXRjRm9ybWF0OigpPT5kdix1dGNGcmlkYXk6KCk9PnpiLHV0Y0ZyaWRheXM6KCk9PlZiLHV0Y0hvdXI6KCk9Pk1iLHV0Y0hvdXJzOigpPT5OYix1dGNNaWxsaXNlY29uZDooKT0+V20sdXRjTWlsbGlzZWNvbmRzOigpPT5xbSx1dGNNaW51dGU6KCk9PkNiLHV0Y01pbnV0ZXM6KCk9PlNiLHV0Y01vbmRheTooKT0+RmIsdXRjTW9uZGF5czooKT0+JGIsdXRjTW9udGg6KCk9PlpiLHV0Y01vbnRoczooKT0+UWIsdXRjUGFyc2U6KCk9PnB2LHV0Y1NhdHVyZGF5OigpPT5ZYix1dGNTYXR1cmRheXM6KCk9PkdiLHV0Y1NlY29uZDooKT0+Vm0sdXRjU2Vjb25kczooKT0+R20sdXRjU3VuZGF5OigpPT5JYix1dGNTdW5kYXlzOigpPT5VYix1dGNUaHVyc2RheTooKT0+amIsdXRjVGh1cnNkYXlzOigpPT5IYix1dGNUaWNrSW50ZXJ2YWw6KCk9PnJ2LHV0Y1RpY2tzOigpPT5udix1dGNUdWVzZGF5OigpPT5SYix1dGNUdWVzZGF5czooKT0+V2IsdXRjV2VkbmVzZGF5OigpPT5QYix1dGNXZWRuZXNkYXlzOigpPT5xYix1dGNXZWVrOigpPT5JYix1dGNXZWVrczooKT0+VWIsdXRjWWVhcjooKT0+SmIsdXRjWWVhcnM6KCk9PnR2LHZhcmlhbmNlOigpPT5iLHdpbmRvdzooKT0+WWUseG1sOigpPT5ubCx6aXA6KCk9PkJ0LHpvb206KCk9PmJFLHpvb21JZGVudGl0eTooKT0+Y0Usem9vbVRyYW5zZm9ybTooKT0+bEV9KTtjb25zdCBvPWkocikscz1vLnJpZ2h0LGM9by5sZWZ0LGw9aShhKS5jZW50ZXIsdT1zO2Z1bmN0aW9uIGgodCxlKXtsZXQgbj0wO2lmKHZvaWQgMD09PWUpZm9yKGxldCBlIG9mIHQpbnVsbCE9ZSYmKGU9K2UpPj1lJiYrK247ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1lKGksKytyLHQpKSYmKGk9K2kpPj1pJiYrK259cmV0dXJuIG59ZnVuY3Rpb24gZih0KXtyZXR1cm4gMHx0Lmxlbmd0aH1mdW5jdGlvbiBkKHQpe3JldHVybiEodD4wKX1mdW5jdGlvbiBwKHQpe3JldHVybiJvYmplY3QiIT10eXBlb2YgdHx8Imxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBnKC4uLnQpe2NvbnN0IGU9ImZ1bmN0aW9uIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJmZ1bmN0aW9uKHQpe3JldHVybiBlPT50KC4uLmUpfSh0LnBvcCgpKSxuPSh0PXQubWFwKHApKS5tYXAoZikscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIrMSkuZmlsbCgwKSxhPVtdO2lmKHI8MHx8bi5zb21lKGQpKXJldHVybiBhO2Zvcig7Oyl7YS5wdXNoKGkubWFwKCgoZSxuKT0+dFtuXVtlXSkpKTtsZXQgbz1yO2Zvcig7KytpW29dPT09bltvXTspe2lmKDA9PT1vKXJldHVybiBlP2EubWFwKGUpOmE7aVtvLS1dPTB9fX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49MCxyPTA7cmV0dXJuIEZsb2F0NjRBcnJheS5mcm9tKHQsdm9pZCAwPT09ZT90PT5uKz0rdHx8MDppPT5uKz0rZShpLHIrKyx0KXx8MCl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBudWxsPT10fHxudWxsPT1lP05hTjplPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBiKHQsZSl7bGV0IG4scj0wLGk9MCxhPTA7aWYodm9pZCAwPT09ZSlmb3IobGV0IGUgb2YgdCludWxsIT1lJiYoZT0rZSk+PWUmJihuPWUtaSxpKz1uLysrcixhKz1uKihlLWkpKTtlbHNle2xldCBvPS0xO2ZvcihsZXQgcyBvZiB0KW51bGwhPShzPWUocywrK28sdCkpJiYocz0rcyk+PXMmJihuPXMtaSxpKz1uLysrcixhKz1uKihzLWkpKX1pZihyPjEpcmV0dXJuIGEvKHItMSl9ZnVuY3Rpb24gdih0LGUpe2NvbnN0IG49Yih0LGUpO3JldHVybiBuP01hdGguc3FydChuKTpufWZ1bmN0aW9uIF8odCxlKXtsZXQgbixyO2lmKHZvaWQgMD09PWUpZm9yKGNvbnN0IGUgb2YgdCludWxsIT1lJiYodm9pZCAwPT09bj9lPj1lJiYobj1yPWUpOihuPmUmJihuPWUpLHI8ZSYmKHI9ZSkpKTtlbHNle2xldCBpPS0xO2ZvcihsZXQgYSBvZiB0KW51bGwhPShhPWUoYSwrK2ksdCkpJiYodm9pZCAwPT09bj9hPj1hJiYobj1yPWEpOihuPmEmJihuPWEpLHI8YSYmKHI9YSkpKX1yZXR1cm5bbixyXX1jbGFzcyB4e2NvbnN0cnVjdG9yKCl7dGhpcy5fcGFydGlhbHM9bmV3IEZsb2F0NjRBcnJheSgzMiksdGhpcy5fbj0wfWFkZCh0KXtjb25zdCBlPXRoaXMuX3BhcnRpYWxzO2xldCBuPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9uJiZyPDMyO3IrKyl7Y29uc3QgaT1lW3JdLGE9dCtpLG89TWF0aC5hYnModCk8TWF0aC5hYnMoaSk/dC0oYS1pKTppLShhLXQpO28mJihlW24rK109byksdD1hfXJldHVybiBlW25dPXQsdGhpcy5fbj1uKzEsdGhpc312YWx1ZU9mKCl7Y29uc3QgdD10aGlzLl9wYXJ0aWFscztsZXQgZSxuLHIsaT10aGlzLl9uLGE9MDtpZihpPjApe2ZvcihhPXRbLS1pXTtpPjAmJihlPWEsbj10Wy0taV0sYT1lK24scj1uLShhLWUpLCFyKTspO2k+MCYmKHI8MCYmdFtpLTFdPDB8fHI+MCYmdFtpLTFdPjApJiYobj0yKnIsZT1hK24sbj09ZS1hJiYoYT1lKSl9cmV0dXJuIGF9fWZ1bmN0aW9uIGsodCxlKXtjb25zdCBuPW5ldyB4O2lmKHZvaWQgMD09PWUpZm9yKGxldCBlIG9mIHQpKGU9K2UpJiZuLmFkZChlKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KShpPStlKGksKytyLHQpKSYmbi5hZGQoaSl9cmV0dXJuK259ZnVuY3Rpb24gdyh0LGUpe2NvbnN0IG49bmV3IHg7bGV0IHI9LTE7cmV0dXJuIEZsb2F0NjRBcnJheS5mcm9tKHQsdm9pZCAwPT09ZT90PT5uLmFkZCgrdHx8MCk6aT0+bi5hZGQoK2UoaSwrK3IsdCl8fDApKX1jbGFzcyBUIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKHQsZT1NKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOmV9fSksbnVsbCE9dClmb3IoY29uc3RbZSxuXW9mIHQpdGhpcy5zZXQoZSxuKX1nZXQodCl7cmV0dXJuIHN1cGVyLmdldChDKHRoaXMsdCkpfWhhcyh0KXtyZXR1cm4gc3VwZXIuaGFzKEModGhpcyx0KSl9c2V0KHQsZSl7cmV0dXJuIHN1cGVyLnNldChTKHRoaXMsdCksZSl9ZGVsZXRlKHQpe3JldHVybiBzdXBlci5kZWxldGUoQSh0aGlzLHQpKX19Y2xhc3MgRSBleHRlbmRzIFNldHtjb25zdHJ1Y3Rvcih0LGU9TSl7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTplfX0pLG51bGwhPXQpZm9yKGNvbnN0IGUgb2YgdCl0aGlzLmFkZChlKX1oYXModCl7cmV0dXJuIHN1cGVyLmhhcyhDKHRoaXMsdCkpfWFkZCh0KXtyZXR1cm4gc3VwZXIuYWRkKFModGhpcyx0KSl9ZGVsZXRlKHQpe3JldHVybiBzdXBlci5kZWxldGUoQSh0aGlzLHQpKX19ZnVuY3Rpb24gQyh7X2ludGVybjp0LF9rZXk6ZX0sbil7Y29uc3Qgcj1lKG4pO3JldHVybiB0LmhhcyhyKT90LmdldChyKTpufWZ1bmN0aW9uIFMoe19pbnRlcm46dCxfa2V5OmV9LG4pe2NvbnN0IHI9ZShuKTtyZXR1cm4gdC5oYXMocik/dC5nZXQocik6KHQuc2V0KHIsbiksbil9ZnVuY3Rpb24gQSh7X2ludGVybjp0LF9rZXk6ZX0sbil7Y29uc3Qgcj1lKG4pO3JldHVybiB0LmhhcyhyKSYmKG49dC5nZXQociksdC5kZWxldGUocikpLG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdD90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LC4uLmUpe3JldHVybiBZKHQsTixOLGUpfWZ1bmN0aW9uIEQodCwuLi5lKXtyZXR1cm4gWSh0LEFycmF5LmZyb20sTixlKX1mdW5jdGlvbiBCKHQsZSl7Zm9yKGxldCBuPTEscj1lLmxlbmd0aDtuPHI7KytuKXQ9dC5mbGF0TWFwKCh0PT50LnBvcCgpLm1hcCgoKFtlLG5dKT0+Wy4uLnQsZSxuXSkpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0LC4uLmUpe3JldHVybiBCKEQodCwuLi5lKSxlKX1mdW5jdGlvbiBJKHQsZSwuLi5uKXtyZXR1cm4gQihSKHQsZSwuLi5uKSxuKX1mdW5jdGlvbiBGKHQsZSwuLi5uKXtyZXR1cm4gWSh0LE4sZSxuKX1mdW5jdGlvbiBSKHQsZSwuLi5uKXtyZXR1cm4gWSh0LEFycmF5LmZyb20sZSxuKX1mdW5jdGlvbiBQKHQsLi4uZSl7cmV0dXJuIFkodCxOLHosZSl9ZnVuY3Rpb24gaih0LC4uLmUpe3JldHVybiBZKHQsQXJyYXkuZnJvbSx6LGUpfWZ1bmN0aW9uIHoodCl7aWYoMSE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZHVwbGljYXRlIGtleSIpO3JldHVybiB0WzBdfWZ1bmN0aW9uIFkodCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uIHQoaSxhKXtpZihhPj1yLmxlbmd0aClyZXR1cm4gbihpKTtjb25zdCBvPW5ldyBULHM9clthKytdO2xldCBjPS0xO2Zvcihjb25zdCB0IG9mIGkpe2NvbnN0IGU9cyh0LCsrYyxpKSxuPW8uZ2V0KGUpO24/bi5wdXNoKHQpOm8uc2V0KGUsW3RdKX1mb3IoY29uc3RbZSxuXW9mIG8pby5zZXQoZSx0KG4sYSkpO3JldHVybiBlKG8pfSh0LDApfWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gQXJyYXkuZnJvbShlLChlPT50W2VdKSl9ZnVuY3Rpb24gJCh0LC4uLmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W1N5bWJvbC5pdGVyYXRvcl0pdGhyb3cgbmV3IFR5cGVFcnJvcigidmFsdWVzIGlzIG5vdCBpdGVyYWJsZSIpO3Q9QXJyYXkuZnJvbSh0KTtsZXRbbl09ZTtpZihuJiYyIT09bi5sZW5ndGh8fGUubGVuZ3RoPjEpe2NvbnN0IHI9VWludDMyQXJyYXkuZnJvbSh0LCgodCxlKT0+ZSkpO3JldHVybiBlLmxlbmd0aD4xPyhlPWUubWFwKChlPT50Lm1hcChlKSkpLHIuc29ydCgoKHQsbik9Pntmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPXEoclt0XSxyW25dKTtpZihlKXJldHVybiBlfX0pKSk6KG49dC5tYXAobiksci5zb3J0KCgodCxlKT0+cShuW3RdLG5bZV0pKSkpLFUodCxyKX1yZXR1cm4gdC5zb3J0KFcobikpfWZ1bmN0aW9uIFcodD1yKXtpZih0PT09cilyZXR1cm4gcTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjb21wYXJlIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuKGUsbik9Pntjb25zdCByPXQoZSxuKTtyZXR1cm4gcnx8MD09PXI/cjooMD09PXQobixuKSktKDA9PT10KGUsZSkpfX1mdW5jdGlvbiBxKHQsZSl7cmV0dXJuKG51bGw9PXR8fCEodD49dCkpLShudWxsPT1lfHwhKGU+PWUpKXx8KHQ8ZT8tMTp0PmU/MTowKX1mdW5jdGlvbiBIKHQsZSxuKXtyZXR1cm4oMiE9PWUubGVuZ3RoPyQoRih0LGUsbiksKChbdCxlXSxbbixpXSk9PnIoZSxpKXx8cih0LG4pKSk6JChPKHQsbiksKChbdCxuXSxbaSxhXSk9PmUobixhKXx8cih0LGkpKSkpLm1hcCgoKFt0XSk9PnQpKX12YXIgVj1BcnJheS5wcm90b3R5cGUsRz1WLnNsaWNlO2Z1bmN0aW9uIFgodCl7cmV0dXJuKCk9PnR9Vi5tYXA7dmFyIFo9TWF0aC5zcXJ0KDUwKSxRPU1hdGguc3FydCgxMCksSz1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gSih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChyPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPXR0KHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApe2xldCBuPU1hdGgucm91bmQodC9vKSxyPU1hdGgucm91bmQoZS9vKTtmb3IobipvPHQmJisrbixyKm8+ZSYmLS1yLGE9bmV3IEFycmF5KGk9ci1uKzEpOysrczxpOylhW3NdPShuK3MpKm99ZWxzZXtvPS1vO2xldCBuPU1hdGgucm91bmQodCpvKSxyPU1hdGgucm91bmQoZSpvKTtmb3Iobi9vPHQmJisrbixyL28+ZSYmLS1yLGE9bmV3IEFycmF5KGk9ci1uKzEpOysrczxpOylhW3NdPShuK3MpL299cmV0dXJuIHImJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gdHQodCxlLG4pe3ZhciByPShlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksYT1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1aPzEwOmE+PVE/NTphPj1LPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49Wj8xMDphPj1RPzU6YT49Sz8yOjEpfWZ1bmN0aW9uIGV0KHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1aP2kqPTEwOmE+PVE/aSo9NTphPj1LJiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gbnQodCxlLG4pe2xldCByO2Zvcig7Oyl7Y29uc3QgaT10dCh0LGUsbik7aWYoaT09PXJ8fDA9PT1pfHwhaXNGaW5pdGUoaSkpcmV0dXJuW3QsZV07aT4wPyh0PU1hdGguZmxvb3IodC9pKSppLGU9TWF0aC5jZWlsKGUvaSkqaSk6aTwwJiYodD1NYXRoLmNlaWwodCppKS9pLGU9TWF0aC5mbG9vcihlKmkpL2kpLHI9aX19ZnVuY3Rpb24gcnQodCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhoKHQpKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBpdCgpe3ZhciB0PU4sZT1fLG49cnQ7ZnVuY3Rpb24gcihyKXtBcnJheS5pc0FycmF5KHIpfHwocj1BcnJheS5mcm9tKHIpKTt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIGM9ZShzKSxsPWNbMF0saD1jWzFdLGY9bihzLGwsaCk7aWYoIUFycmF5LmlzQXJyYXkoZikpe2NvbnN0IHQ9aCxuPStmO2lmKGU9PT1fJiYoW2wsaF09bnQobCxoLG4pKSwoZj1KKGwsaCxuKSlbZi5sZW5ndGgtMV0+PWgpaWYodD49aCYmZT09PV8pe2NvbnN0IHQ9dHQobCxoLG4pO2lzRmluaXRlKHQpJiYodD4wP2g9KE1hdGguZmxvb3IoaC90KSsxKSp0OnQ8MCYmKGg9KE1hdGguY2VpbChoKi10KSsxKS8tdCkpfWVsc2UgZi5wb3AoKX1mb3IodmFyIGQ9Zi5sZW5ndGg7ZlswXTw9bDspZi5zaGlmdCgpLC0tZDtmb3IoO2ZbZC0xXT5oOylmLnBvcCgpLC0tZDt2YXIgcCxnPW5ldyBBcnJheShkKzEpO2ZvcihpPTA7aTw9ZDsrK2kpKHA9Z1tpXT1bXSkueDA9aT4wP2ZbaS0xXTpsLHAueDE9aTxkP2ZbaV06aDtmb3IoaT0wO2k8bzsrK2kpbnVsbCE9KGE9c1tpXSkmJmw8PWEmJmE8PWgmJmdbdShmLGEsMCxkKV0ucHVzaChyW2ldKTtyZXR1cm4gZ31yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlgoZSkscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpYKFt0WzBdLHRbMV1dKSxyKTplfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP1goRy5jYWxsKHQpKTpYKHQpLHIpOm59LHJ9ZnVuY3Rpb24gYXQodCxlKXtsZXQgbjtpZih2b2lkIDA9PT1lKWZvcihjb25zdCBlIG9mIHQpbnVsbCE9ZSYmKG48ZXx8dm9pZCAwPT09biYmZT49ZSkmJihuPWUpO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpbnVsbCE9KGk9ZShpLCsrcix0KSkmJihuPGl8fHZvaWQgMD09PW4mJmk+PWkpJiYobj1pKX1yZXR1cm4gbn1mdW5jdGlvbiBvdCh0LGUpe2xldCBuO2lmKHZvaWQgMD09PWUpZm9yKGNvbnN0IGUgb2YgdCludWxsIT1lJiYobj5lfHx2b2lkIDA9PT1uJiZlPj1lKSYmKG49ZSk7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1lKGksKytyLHQpKSYmKG4+aXx8dm9pZCAwPT09biYmaT49aSkmJihuPWkpfXJldHVybiBufWZ1bmN0aW9uIHN0KHQsZSxuPTAscj10Lmxlbmd0aC0xLGkpe2ZvcihpPXZvaWQgMD09PWk/cTpXKGkpO3I+bjspe2lmKHItbj42MDApe2NvbnN0IGE9ci1uKzEsbz1lLW4rMSxzPU1hdGgubG9nKGEpLGM9LjUqTWF0aC5leHAoMipzLzMpLGw9LjUqTWF0aC5zcXJ0KHMqYyooYS1jKS9hKSooby1hLzI8MD8tMToxKTtzdCh0LGUsTWF0aC5tYXgobixNYXRoLmZsb29yKGUtbypjL2ErbCkpLE1hdGgubWluKHIsTWF0aC5mbG9vcihlKyhhLW8pKmMvYStsKSksaSl9Y29uc3QgYT10W2VdO2xldCBvPW4scz1yO2ZvcihjdCh0LG4sZSksaSh0W3JdLGEpPjAmJmN0KHQsbixyKTtvPHM7KXtmb3IoY3QodCxvLHMpLCsrbywtLXM7aSh0W29dLGEpPDA7KSsrbztmb3IoO2kodFtzXSxhKT4wOyktLXN9MD09PWkodFtuXSxhKT9jdCh0LG4scyk6KCsrcyxjdCh0LHMscikpLHM8PWUmJihuPXMrMSksZTw9cyYmKHI9cy0xKX1yZXR1cm4gdH1mdW5jdGlvbiBjdCh0LGUsbil7Y29uc3Qgcj10W2VdO3RbZV09dFtuXSx0W25dPXJ9ZnVuY3Rpb24gbHQodCxlLG4pe2lmKHQ9RmxvYXQ2NEFycmF5LmZyb20oZnVuY3Rpb24qKHQsZSl7aWYodm9pZCAwPT09ZSlmb3IobGV0IGUgb2YgdCludWxsIT1lJiYoZT0rZSk+PWUmJih5aWVsZCBlKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgciBvZiB0KW51bGwhPShyPWUociwrK24sdCkpJiYocj0rcik+PXImJih5aWVsZCByKX19KHQsbikpLHI9dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8cjwyKXJldHVybiBvdCh0KTtpZihlPj0xKXJldHVybiBhdCh0KTt2YXIgcixpPShyLTEpKmUsYT1NYXRoLmZsb29yKGkpLG89YXQoc3QodCxhKS5zdWJhcnJheSgwLGErMSkpO3JldHVybiBvKyhvdCh0LnN1YmFycmF5KGErMSkpLW8pKihpLWEpfX1mdW5jdGlvbiB1dCh0LGUsbj1hKXtpZihyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxvPU1hdGguZmxvb3IoaSkscz0rbih0W29dLG8sdCk7cmV0dXJuIHMrKCtuKHRbbysxXSxvKzEsdCktcykqKGktbyl9fWZ1bmN0aW9uIGh0KHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygyKihsdCh0LC43NSktbHQodCwuMjUpKSpNYXRoLnBvdyhoKHQpLC0xLzMpKSl9ZnVuY3Rpb24gZnQodCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSp2KHQpKk1hdGgucG93KGgodCksLTEvMykpKX1mdW5jdGlvbiBkdCh0LGUpe2xldCBuLHI9LTEsaT0tMTtpZih2b2lkIDA9PT1lKWZvcihjb25zdCBlIG9mIHQpKytpLG51bGwhPWUmJihuPGV8fHZvaWQgMD09PW4mJmU+PWUpJiYobj1lLHI9aSk7ZWxzZSBmb3IobGV0IGEgb2YgdCludWxsIT0oYT1lKGEsKytpLHQpKSYmKG48YXx8dm9pZCAwPT09biYmYT49YSkmJihuPWEscj1pKTtyZXR1cm4gcn1mdW5jdGlvbiBwdCh0LGUpe2xldCBuPTAscj0wO2lmKHZvaWQgMD09PWUpZm9yKGxldCBlIG9mIHQpbnVsbCE9ZSYmKGU9K2UpPj1lJiYoKytuLHIrPWUpO2Vsc2V7bGV0IGk9LTE7Zm9yKGxldCBhIG9mIHQpbnVsbCE9KGE9ZShhLCsraSx0KSkmJihhPSthKT49YSYmKCsrbixyKz1hKX1pZihuKXJldHVybiByL259ZnVuY3Rpb24gZ3QodCxlKXtyZXR1cm4gbHQodCwuNSxlKX1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gQXJyYXkuZnJvbShmdW5jdGlvbioodCl7Zm9yKGNvbnN0IGUgb2YgdCl5aWVsZCplfSh0KSl9ZnVuY3Rpb24gbXQodCxlKXtsZXQgbixyPS0xLGk9LTE7aWYodm9pZCAwPT09ZSlmb3IoY29uc3QgZSBvZiB0KSsraSxudWxsIT1lJiYobj5lfHx2b2lkIDA9PT1uJiZlPj1lKSYmKG49ZSxyPWkpO2Vsc2UgZm9yKGxldCBhIG9mIHQpbnVsbCE9KGE9ZShhLCsraSx0KSkmJihuPmF8fHZvaWQgMD09PW4mJmE+PWEpJiYobj1hLHI9aSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYnQodCxlKXtjb25zdCBuPW5ldyBUO2lmKHZvaWQgMD09PWUpZm9yKGxldCBlIG9mIHQpbnVsbCE9ZSYmZT49ZSYmbi5zZXQoZSwobi5nZXQoZSl8fDApKzEpO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpbnVsbCE9KGk9ZShpLCsrcix0KSkmJmk+PWkmJm4uc2V0KGksKG4uZ2V0KGkpfHwwKSsxKX1sZXQgcixpPTA7Zm9yKGNvbnN0W3QsZV1vZiBuKWU+aSYmKGk9ZSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIHZ0KHQsZT1fdCl7Y29uc3Qgbj1bXTtsZXQgcixpPSExO2Zvcihjb25zdCBhIG9mIHQpaSYmbi5wdXNoKGUocixhKSkscj1hLGk9ITA7cmV0dXJuIG59ZnVuY3Rpb24gX3QodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiB4dCh0LGUsbil7dD0rdCxlPStlLG49KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorbjtmb3IodmFyIHI9LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxhPW5ldyBBcnJheShpKTsrK3I8aTspYVtyXT10K3IqbjtyZXR1cm4gYX1mdW5jdGlvbiBrdCh0LGU9cil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlIik7bGV0IG49QXJyYXkuZnJvbSh0KTtjb25zdCBpPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpOzIhPT1lLmxlbmd0aCYmKG49bi5tYXAoZSksZT1yKTtjb25zdCBhPSh0LHIpPT5lKG5bdF0sbltyXSk7bGV0IG8scztyZXR1cm4gVWludDMyQXJyYXkuZnJvbShuLCgodCxlKT0+ZSkpLnNvcnQoZT09PXI/KHQsZSk9PnEoblt0XSxuW2VdKTpXKGEpKS5mb3JFYWNoKCgodCxlKT0+e2NvbnN0IG49YSh0LHZvaWQgMD09PW8/dDpvKTtuPj0wPygodm9pZCAwPT09b3x8bj4wKSYmKG89dCxzPWUpLGlbdF09cyk6aVt0XT1OYU59KSksaX1mdW5jdGlvbiB3dCh0LGU9cil7bGV0IG4saT0hMTtpZigxPT09ZS5sZW5ndGgpe2xldCBhO2Zvcihjb25zdCBvIG9mIHQpe2NvbnN0IHQ9ZShvKTsoaT9yKHQsYSk8MDowPT09cih0LHQpKSYmKG49byxhPXQsaT0hMCl9fWVsc2UgZm9yKGNvbnN0IHIgb2YgdCkoaT9lKHIsbik8MDowPT09ZShyLHIpKSYmKG49cixpPSEwKTtyZXR1cm4gbn1mdW5jdGlvbiBUdCh0LGU9cil7aWYoMT09PWUubGVuZ3RoKXJldHVybiBtdCh0LGUpO2xldCBuLGk9LTEsYT0tMTtmb3IoY29uc3QgciBvZiB0KSsrYSwoaTwwPzA9PT1lKHIscik6ZShyLG4pPDApJiYobj1yLGk9YSk7cmV0dXJuIGl9ZnVuY3Rpb24gRXQodCxlPXIpe2xldCBuLGk9ITE7aWYoMT09PWUubGVuZ3RoKXtsZXQgYTtmb3IoY29uc3QgbyBvZiB0KXtjb25zdCB0PWUobyk7KGk/cih0LGEpPjA6MD09PXIodCx0KSkmJihuPW8sYT10LGk9ITApfX1lbHNlIGZvcihjb25zdCByIG9mIHQpKGk/ZShyLG4pPjA6MD09PWUocixyKSkmJihuPXIsaT0hMCk7cmV0dXJuIG59ZnVuY3Rpb24gQ3QodCxlPXIpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZHQodCxlKTtsZXQgbixpPS0xLGE9LTE7Zm9yKGNvbnN0IHIgb2YgdCkrK2EsKGk8MD8wPT09ZShyLHIpOmUocixuKT4wKSYmKG49cixpPWEpO3JldHVybiBpfWZ1bmN0aW9uIFN0KHQsZSl7Y29uc3Qgbj1UdCh0LGUpO3JldHVybiBuPDA/dm9pZCAwOm59Y29uc3QgQXQ9TXQoTWF0aC5yYW5kb20pO2Z1bmN0aW9uIE10KHQpe3JldHVybiBmdW5jdGlvbihlLG49MCxyPWUubGVuZ3RoKXtsZXQgaT1yLShuPStuKTtmb3IoO2k7KXtjb25zdCByPXQoKSppLS18MCxhPWVbaStuXTtlW2krbl09ZVtyK25dLGVbcituXT1hfXJldHVybiBlfX1mdW5jdGlvbiBOdCh0LGUpe2xldCBuPTA7aWYodm9pZCAwPT09ZSlmb3IobGV0IGUgb2YgdCkoZT0rZSkmJihuKz1lKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KShpPStlKGksKytyLHQpKSYmKG4rPWkpfXJldHVybiBufWZ1bmN0aW9uIE90KHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49b3QodCxEdCkscj1uZXcgQXJyYXkobik7KytlPG47KWZvcih2YXIgaSxhPS0xLG89cltlXT1uZXcgQXJyYXkoaSk7KythPGk7KW9bYV09dFthXVtlXTtyZXR1cm4gcn1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gQnQoKXtyZXR1cm4gT3QoYXJndW1lbnRzKX1mdW5jdGlvbiBMdCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInRlc3QgaXMgbm90IGEgZnVuY3Rpb24iKTtsZXQgbj0tMTtmb3IoY29uc3QgciBvZiB0KWlmKCFlKHIsKytuLHQpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEl0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigidGVzdCBpcyBub3QgYSBmdW5jdGlvbiIpO2xldCBuPS0xO2Zvcihjb25zdCByIG9mIHQpaWYoZShyLCsrbix0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBGdCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInRlc3QgaXMgbm90IGEgZnVuY3Rpb24iKTtjb25zdCBuPVtdO2xldCByPS0xO2Zvcihjb25zdCBpIG9mIHQpZShpLCsrcix0KSYmbi5wdXNoKGkpO3JldHVybiBufWZ1bmN0aW9uIFJ0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlIik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigibWFwcGVyIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIEFycmF5LmZyb20odCwoKG4scik9PmUobixyLHQpKSl9ZnVuY3Rpb24gUHQodCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZXIgaXMgbm90IGEgZnVuY3Rpb24iKTtjb25zdCByPXRbU3ltYm9sLml0ZXJhdG9yXSgpO2xldCBpLGEsbz0tMTtpZihhcmd1bWVudHMubGVuZ3RoPDMpe2lmKCh7ZG9uZTppLHZhbHVlOm59PXIubmV4dCgpKSxpKXJldHVybjsrK299Zm9yKDsoe2RvbmU6aSx2YWx1ZTphfT1yLm5leHQoKSksIWk7KW49ZShuLGEsKytvLHQpO3JldHVybiBufWZ1bmN0aW9uIGp0KHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W1N5bWJvbC5pdGVyYXRvcl0pdGhyb3cgbmV3IFR5cGVFcnJvcigidmFsdWVzIGlzIG5vdCBpdGVyYWJsZSIpO3JldHVybiBBcnJheS5mcm9tKHQpLnJldmVyc2UoKX1mdW5jdGlvbiB6dCh0LC4uLmUpe3Q9bmV3IEUodCk7Zm9yKGNvbnN0IG4gb2YgZSlmb3IoY29uc3QgZSBvZiBuKXQuZGVsZXRlKGUpO3JldHVybiB0fWZ1bmN0aW9uIFl0KHQsZSl7Y29uc3Qgbj1lW1N5bWJvbC5pdGVyYXRvcl0oKSxyPW5ldyBFO2Zvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO2xldCB0LGk7Zm9yKDsoe3ZhbHVlOnQsZG9uZTppfT1uLm5leHQoKSkmJiFpOyl7aWYoT2JqZWN0LmlzKGUsdCkpcmV0dXJuITE7ci5hZGQodCl9fXJldHVybiEwfWZ1bmN0aW9uIFV0KHQsLi4uZSl7dD1uZXcgRSh0KSxlPWUubWFwKCR0KTt0OmZvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHIgb2YgZSlpZighci5oYXMobikpe3QuZGVsZXRlKG4pO2NvbnRpbnVlIHR9cmV0dXJuIHR9ZnVuY3Rpb24gJHQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFP3Q6bmV3IEUodCl9ZnVuY3Rpb24gV3QodCxlKXtjb25zdCBuPXRbU3ltYm9sLml0ZXJhdG9yXSgpLHI9bmV3IFNldDtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXF0KHQpO2lmKHIuaGFzKGUpKWNvbnRpbnVlO2xldCBpLGE7Zm9yKDsoe3ZhbHVlOmksZG9uZTphfT1uLm5leHQoKSk7KXtpZihhKXJldHVybiExO2NvbnN0IHQ9cXQoaSk7aWYoci5hZGQodCksT2JqZWN0LmlzKGUsdCkpYnJlYWt9fXJldHVybiEwfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0P3QudmFsdWVPZigpOnR9ZnVuY3Rpb24gSHQodCxlKXtyZXR1cm4gV3QoZSx0KX1mdW5jdGlvbiBWdCguLi50KXtjb25zdCBlPW5ldyBFO2Zvcihjb25zdCBuIG9mIHQpZm9yKGNvbnN0IHQgb2YgbillLmFkZCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gdH12YXIgWHQ9MWUtNjtmdW5jdGlvbiBadCh0KXtyZXR1cm4idHJhbnNsYXRlKCIrdCsiLDApIn1mdW5jdGlvbiBRdCh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KyIpIn1mdW5jdGlvbiBLdCh0KXtyZXR1cm4gZT0+K3QoZSl9ZnVuY3Rpb24gSnQodCxlKXtyZXR1cm4gZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMiplKS8yLHQucm91bmQoKSYmKGU9TWF0aC5yb3VuZChlKSksbj0+K3QobikrZX1mdW5jdGlvbiB0ZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBlZSh0LGUpe3ZhciBuPVtdLHI9bnVsbCxpPW51bGwsYT02LG89NixzPTMsYz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LGw9MT09PXR8fDQ9PT10Py0xOjEsdT00PT09dHx8Mj09PXQ/IngiOiJ5IixoPTE9PT10fHwzPT09dD9adDpRdDtmdW5jdGlvbiBmKGYpe3ZhciBkPW51bGw9PXI/ZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUsbik6ZS5kb21haW4oKTpyLHA9bnVsbD09aT9lLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUsbik6R3Q6aSxnPU1hdGgubWF4KGEsMCkrcyx5PWUucmFuZ2UoKSxtPSt5WzBdK2MsYj0reVt5Lmxlbmd0aC0xXStjLHY9KGUuYmFuZHdpZHRoP0p0Okt0KShlLmNvcHkoKSxjKSxfPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6Zix4PV8uc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLGs9Xy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShkLGUpLm9yZGVyKCksdz1rLmV4aXQoKSxUPWsuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxFPWsuc2VsZWN0KCJsaW5lIiksQz1rLnNlbGVjdCgidGV4dCIpO3g9eC5tZXJnZSh4LmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxrPWsubWVyZ2UoVCksRT1FLm1lcmdlKFQuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cih1KyIyIixsKmEpKSxDPUMubWVyZ2UoVC5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cih1LGwqZykuYXR0cigiZHkiLDE9PT10PyIwZW0iOjM9PT10PyIwLjcxZW0iOiIwLjMyZW0iKSksZiE9PV8mJih4PXgudHJhbnNpdGlvbihmKSxrPWsudHJhbnNpdGlvbihmKSxFPUUudHJhbnNpdGlvbihmKSxDPUMudHJhbnNpdGlvbihmKSx3PXcudHJhbnNpdGlvbihmKS5hdHRyKCJvcGFjaXR5IixYdCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9dih0KSk/aCh0K2MpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pKSxULmF0dHIoIm9wYWNpdHkiLFh0KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBoKChlJiZpc0Zpbml0ZShlPWUodCkpP2U6dih0KSkrYyl9KSkpLHcucmVtb3ZlKCkseC5hdHRyKCJkIiw0PT09dHx8Mj09PXQ/bz8iTSIrbCpvKyIsIittKyJIIitjKyJWIitiKyJIIitsKm86Ik0iK2MrIiwiK20rIlYiK2I6bz8iTSIrbSsiLCIrbCpvKyJWIitjKyJIIitiKyJWIitsKm86Ik0iK20rIiwiK2MrIkgiK2IpLGsuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGgodih0KStjKX0pKSxFLmF0dHIodSsiMiIsbCphKSxDLmF0dHIodSxsKmcpLnRleHQocCksXy5maWx0ZXIodGUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLDI9PT10PyJzdGFydCI6ND09PXQ/ImVuZCI6Im1pZGRsZSIpLF8uZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz12fSkpfXJldHVybiBmLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsZik6ZX0sZi50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPUFycmF5LmZyb20oYXJndW1lbnRzKSxmfSxmLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpBcnJheS5mcm9tKHQpLGYpOm4uc2xpY2UoKX0sZi50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpBcnJheS5mcm9tKHQpLGYpOnImJnIuc2xpY2UoKX0sZi50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1vPSt0LGYpOmF9LGYudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxmKTphfSxmLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZik6b30sZi50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxmKTpzfSxmLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxmKTpjfSxmfWZ1bmN0aW9uIG5lKHQpe3JldHVybiBlZSgxLHQpfWZ1bmN0aW9uIHJlKHQpe3JldHVybiBlZSgyLHQpfWZ1bmN0aW9uIGllKHQpe3JldHVybiBlZSgzLHQpfWZ1bmN0aW9uIGFlKHQpe3JldHVybiBlZSg0LHQpfXZhciBvZT17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBzZSgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gcnx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBjZShyKX1mdW5jdGlvbiBjZSh0KXt0aGlzLl89dH1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gdWUodCxlKXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigobj10W3JdKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBoZSh0LGUsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PWUpe3Rbcl09b2UsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fWNlLnByb3RvdHlwZT1zZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmNlLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLl8saT1sZSh0KyIiLHIpLGE9LTEsbz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxvOylpZihuPSh0PWlbYV0pLnR5cGUpcltuXT1oZShyW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gcilyW25dPWhlKHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPG87KWlmKChuPSh0PWlbYV0pLnR5cGUpJiYobj11ZShyW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBjZSh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSlpW2FdPWFyZ3VtZW50c1thKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO2E8bjsrK2EpclthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07Y29uc3QgZmU9c2U7ZnVuY3Rpb24gZGUoKXt9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIG51bGw9PXQ/ZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gbnVsbD09dD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiB5ZSgpe3JldHVybltdfWZ1bmN0aW9uIG1lKHQpe3JldHVybiBudWxsPT10P3llOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gYmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gdmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXModCl9fXZhciBfZT1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiB4ZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBrZT1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIHdlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gVGUodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRWUodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFNlKHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsbD1hLmxlbmd0aDtzPGw7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBFZSh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24gQWUodCxlLG4scixpLGEsbyl7dmFyIHMsYyxsLHU9bmV3IE1hcCxoPWUubGVuZ3RoLGY9YS5sZW5ndGgsZD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiYoZFtzXT1sPW8uY2FsbChjLGMuX19kYXRhX18scyxlKSsiIix1LmhhcyhsKT9pW3NdPWM6dS5zZXQobCxjKSk7Zm9yKHM9MDtzPGY7KytzKWw9by5jYWxsKHQsYVtzXSxzLGEpKyIiLChjPXUuZ2V0KGwpKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSx1LmRlbGV0ZShsKSk6bltzXT1uZXcgRWUodCxhW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJnUuZ2V0KGRbc10pPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gTWUodCl7cmV0dXJuIHQuX19kYXRhX199ZnVuY3Rpb24gTmUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIE9lKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfUVlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RWUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIERlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBCZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6RGUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBMZSh0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxCZS5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6QmVbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBJZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gRmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBSZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIFBlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIGplKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiB6ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBZZSh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gVWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gJGUodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBXZSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBxZSh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fFllKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEhlKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBWZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gWGUodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFplKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFFlKHQpfWZ1bmN0aW9uIFFlKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1YZSh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIEtlKHQsZSl7Zm9yKHZhciBuPVplKHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gSmUodCxlKXtmb3IodmFyIG49WmUodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiB0bih0KXtyZXR1cm4gZnVuY3Rpb24oKXtLZSh0aGlzLHQpfX1mdW5jdGlvbiBlbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtKZSh0aGlzLHQpfX1mdW5jdGlvbiBubih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9LZTpKZSkodGhpcyx0KX19ZnVuY3Rpb24gcm4oKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGFuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHNuKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gY24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gbG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiB1bigpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBobigpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGZuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09RGUmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PURlP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBkbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBwbih0KXt2YXIgZT1MZSh0KTtyZXR1cm4oZS5sb2NhbD9kbjpmbikoZSl9ZnVuY3Rpb24gZ24oKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB5bigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIG1uKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBibigpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSl9ZnVuY3Rpb24gX24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixyPTAsaT0tMSxhPWUubGVuZ3RoO3I8YTsrK3Ipbj1lW3JdLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK2ldPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4ub3B0aW9ucyk7KytpP2UubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIHhuKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPXRoaXMuX19vbixhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlLHRoaXMuX19kYXRhX18pfX0oZSk7aWYoaSlmb3IodmFyIG89MCxzPWkubGVuZ3RoO288czsrK28paWYoKHI9aVtvXSkudHlwZT09PXQudHlwZSYmci5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoci50eXBlLHIubGlzdGVuZXIsci5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoci50eXBlLHIubGlzdGVuZXI9YSxyLm9wdGlvbnM9biksdm9pZChyLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYSxuKSxyPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmEsb3B0aW9uczpufSxpP2kucHVzaChyKTp0aGlzLl9fb249W3JdfX1mdW5jdGlvbiBrbih0LGUsbil7dmFyIHI9WWUodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gd24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4ga24odGhpcyx0LGUpfX1mdW5jdGlvbiBUbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBrbih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1RZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBFbj1bbnVsbF07ZnVuY3Rpb24gQ24odCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gU24oKXtyZXR1cm4gbmV3IENuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sRW4pfUNuLnByb3RvdHlwZT1Tbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkNuLHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cGUodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbyxzPWVbaV0sYz1zLmxlbmd0aCxsPXJbaV09bmV3IEFycmF5KGMpLHU9MDt1PGM7Kyt1KShhPXNbdV0pJiYobz10LmNhbGwoYSxhLl9fZGF0YV9fLHUscykpJiYoIl9fZGF0YV9fImluIGEmJihvLl9fZGF0YV9fPWEuX19kYXRhX18pLGxbdV09byk7cmV0dXJuIG5ldyBDbihyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dD0iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2UodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0odCk6bWUodCk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxhPTA7YTxuOysrYSlmb3IodmFyIG8scz1lW2FdLGM9cy5sZW5ndGgsbD0wO2w8YzsrK2wpKG89c1tsXSkmJihyLnB1c2godC5jYWxsKG8sby5fX2RhdGFfXyxsLHMpKSxpLnB1c2gobykpO3JldHVybiBuZXcgQ24ocixpKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PXQ/eGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcy5jaGlsZHJlbix0KX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dmUodCkpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PXQ/d2U6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGtlLmNhbGwodGhpcy5jaGlsZHJlbix0KX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dmUodCkpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1iZSh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sbD0wO2w8czsrK2wpKGE9b1tsXSkmJnQuY2FsbChhLGEuX19kYXRhX18sbCxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgQ24ocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsTWUpO3ZhciBuPWU/QWU6U2Uscj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1DZSh0KSk7Zm9yKHZhciBhPWkubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLGw9MDtsPGE7KytsKXt2YXIgdT1yW2xdLGg9aVtsXSxmPWgubGVuZ3RoLGQ9TmUodC5jYWxsKHUsdSYmdS5fX2RhdGFfXyxsLHIpKSxwPWQubGVuZ3RoLGc9c1tsXT1uZXcgQXJyYXkocCkseT1vW2xdPW5ldyBBcnJheShwKSxtPWNbbF09bmV3IEFycmF5KGYpO24odSxoLGcseSxtLGQsZSk7Zm9yKHZhciBiLHYsXz0wLHg9MDtfPHA7KytfKWlmKGI9Z1tfXSl7Zm9yKF8+PXgmJih4PV8rMSk7ISh2PXlbeF0pJiYrK3g8cDspO2IuX25leHQ9dnx8bnVsbH19cmV0dXJuKG89bmV3IENuKG8scikpLl9lbnRlcj1zLG8uX2V4aXQ9YyxvfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgQ24odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoVGUpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDbih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5lbnRlcigpLGk9dGhpcyxhPXRoaXMuZXhpdCgpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0PyhyPXQocikpJiYocj1yLnNlbGVjdGlvbigpKTpyPXIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpJiYoaT1pLnNlbGVjdGlvbigpKSxudWxsPT1uP2EucmVtb3ZlKCk6bihhKSxyJiZpP3IubWVyZ2UoaSkub3JkZXIoKTppfSxtZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0LG49dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1yLmxlbmd0aCxvPU1hdGgubWluKGksYSkscz1uZXcgQXJyYXkoaSksYz0wO2M8bzsrK2MpZm9yKHZhciBsLHU9bltjXSxoPXJbY10sZj11Lmxlbmd0aCxkPXNbY109bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKShsPXVbcF18fGhbcF0pJiYoZFtwXT1sKTtmb3IoO2M8aTsrK2Mpc1tjXT1uW2NdO3JldHVybiBuZXcgQ24ocyx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgcixpPXRbZV0sYT1pLmxlbmd0aC0xLG89aVthXTstLWE+PTA7KShyPWlbYV0pJiYobyYmNF5yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsbyksbz1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PU9lKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2Epe2Zvcih2YXIgbyxzPW5bYV0sYz1zLmxlbmd0aCxsPWlbYV09bmV3IEFycmF5KGMpLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYobFt1XT1vKTtsLnNvcnQoZSl9cmV0dXJuIG5ldyBDbihpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7bGV0IHQ9MDtmb3IoY29uc3QgZSBvZiB0aGlzKSsrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAscj1lLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgaSxhPWVbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbykoaT1hW29dKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxvLGEpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49TGUodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP0ZlOkllOiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/emU6amU6bi5sb2NhbD9QZTpSZSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9VZToiZnVuY3Rpb24iPT10eXBlb2YgZT9XZTokZSkodCxlLG51bGw9PW4/IiI6bikpOnFlKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0hlOiJmdW5jdGlvbiI9PXR5cGVvZiBlP0dlOlZlKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPVhlKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPVplKHRoaXMubm9kZSgpKSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KWlmKCFyLmNvbnRhaW5zKG5baV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP25uOmU/dG46ZW4pKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3JuOigiZnVuY3Rpb24iPT10eXBlb2YgdD9vbjphbikodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3NuOigiZnVuY3Rpb24iPT10eXBlb2YgdD9sbjpjbikodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHVuKX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGhuKX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cG4odCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwbih0KSxyPW51bGw9PWU/Z246ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpwZShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh5bil9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P2JuOm1uKX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPXZuKHQrIiIpLG89YS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP3huOl9uLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyxsPTAsdT1zLmxlbmd0aDtsPHU7KytsKWZvcihyPTAsYz1zW2xdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP1RuOnduKSh0LGUpKX0sW1N5bWJvbC5pdGVyYXRvcl06ZnVuY3Rpb24qKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcixpPXRbZV0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSkocj1pW2FdKSYmKHlpZWxkIHIpfX07Y29uc3QgQW49U247ZnVuY3Rpb24gTW4odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBDbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IENuKFtbdF1dLEVuKX1jb25zdCBObj17cGFzc2l2ZTohMX0sT249e2NhcHR1cmU6ITAscGFzc2l2ZTohMX07ZnVuY3Rpb24gRG4odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBCbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBMbih0KXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPU1uKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsQm4sT24pOyJvbnNlbGVjdHN0YXJ0ImluIGU/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsQm4sT24pOihlLl9fbm9zZWxlY3Q9ZS5zdHlsZS5Nb3pVc2VyU2VsZWN0LGUuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEluKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1Nbih0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihyLm9uKCJjbGljay5kcmFnIixCbixPbiksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIEZuKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBSbih0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBQbigpe312YXIgam49Ljcsem49MS9qbixZbj0iXFxzKihbKy1dP1xcZCspXFxzKiIsVW49IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsJG49IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFduPS9eIyhbMC05YS1mXXszLDh9KSQvLHFuPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tZbixZbixZbl0rIlxcKSQiKSxIbj1uZXcgUmVnRXhwKCJecmdiXFwoIitbJG4sJG4sJG5dKyJcXCkkIiksVm49bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tZbixZbixZbixVbl0rIlxcKSQiKSxHbj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrWyRuLCRuLCRuLFVuXSsiXFwpJCIpLFhuPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tVbiwkbiwkbl0rIlxcKSQiKSxabj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW1VuLCRuLCRuLFVuXSsiXFwpJCIpLFFuPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIEtuKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSm4oKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB0cih0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1Xbi5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP2VyKGUpOjM9PT1uP25ldyBhcihlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/bnIoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/bnIoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1xbi5leGVjKHQpKT9uZXcgYXIoZVsxXSxlWzJdLGVbM10sMSk6KGU9SG4uZXhlYyh0KSk/bmV3IGFyKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPVZuLmV4ZWModCkpP25yKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPUduLmV4ZWModCkpP25yKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPVhuLmV4ZWModCkpP2xyKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9Wm4uZXhlYyh0KSk/bHIoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpRbi5oYXNPd25Qcm9wZXJ0eSh0KT9lcihRblt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGFyKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZXIodCl7cmV0dXJuIG5ldyBhcih0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gbnIodCxlLG4scil7cmV0dXJuIHI8PTAmJih0PWU9bj1OYU4pLG5ldyBhcih0LGUsbixyKX1mdW5jdGlvbiBycih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFBufHwodD10cih0KSksdD9uZXcgYXIoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IGFyfWZ1bmN0aW9uIGlyKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ycih0KTpuZXcgYXIodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGFyKHQsZSxuLHIpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBvcigpe3JldHVybiIjIitjcih0aGlzLnIpK2NyKHRoaXMuZykrY3IodGhpcy5iKX1mdW5jdGlvbiBzcigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIGNyKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gbHIodCxlLG4scil7cmV0dXJuIHI8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBmcih0LGUsbixyKX1mdW5jdGlvbiB1cih0KXtpZih0IGluc3RhbmNlb2YgZnIpcmV0dXJuIG5ldyBmcih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBQbnx8KHQ9dHIodCkpLCF0KXJldHVybiBuZXcgZnI7aWYodCBpbnN0YW5jZW9mIGZyKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksYT1NYXRoLm1heChlLG4sciksbz1OYU4scz1hLWksYz0oYStpKS8yO3JldHVybiBzPyhvPWU9PT1hPyhuLXIpL3MrNioobjxyKTpuPT09YT8oci1lKS9zKzI6KGUtbikvcys0LHMvPWM8LjU/YStpOjItYS1pLG8qPTYwKTpzPWM+MCYmYzwxPzA6byxuZXcgZnIobyxzLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBocih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dXIodCk6bmV3IGZyKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBmcih0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gZHIodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfWZ1bmN0aW9uIHByKHQsZSxuLHIsaSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqbisoMSszKnQrMyphLTMqbykqcitvKmkpLzZ9ZnVuY3Rpb24gZ3IodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtyXSxhPXRbcisxXSxvPXI+MD90W3ItMV06MippLWEscz1yPGUtMT90W3IrMl06MiphLWk7cmV0dXJuIHByKChuLXIvZSkqZSxvLGksYSxzKX19ZnVuY3Rpb24geXIodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBwcigobi1yL2UpKmUsaSxhLG8scyl9fUZuKFBuLHRyLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OktuLGZvcm1hdEhleDpLbixmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gdXIodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpKbix0b1N0cmluZzpKbn0pLEZuKGFyLGlyLFJuKFBuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3puOk1hdGgucG93KHpuLHQpLG5ldyBhcih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9qbjpNYXRoLnBvdyhqbix0KSxuZXcgYXIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpvcixmb3JtYXRIZXg6b3IsZm9ybWF0UmdiOnNyLHRvU3RyaW5nOnNyfSkpLEZuKGZyLGhyLFJuKFBuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3puOk1hdGgucG93KHpuLHQpLG5ldyBmcih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P2puOk1hdGgucG93KGpuLHQpLG5ldyBmcih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IGFyKGRyKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLGRyKHQsaSxyKSxkcih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO2NvbnN0IG1yPXQ9PigpPT50O2Z1bmN0aW9uIGJyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gdnIodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/YnIodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOm1yKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gX3IodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/YnIodCxuKTptcihpc05hTih0KT9lOnQpfWNvbnN0IHhyPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9fcjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOm1yKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1pcih0KSkuciwoZT1pcihlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPV9yKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBrcih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPWlyKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciB3cj1rcihnciksVHI9a3IoeXIpO2Z1bmN0aW9uIEVyKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIENyKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBTcih0LGUpe3JldHVybihDcihlKT9FcjpBcikodCxlKX1mdW5jdGlvbiBBcih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPUlyKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gTXIodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiBuLnNldFRpbWUodCooMS1yKStlKnIpLG59fWZ1bmN0aW9uIE5yKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uIE9yKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Jcih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fXZhciBEcj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQnI9bmV3IFJlZ0V4cChEci5zb3VyY2UsImciKTtmdW5jdGlvbiBMcih0LGUpe3ZhciBuLHIsaSxhPURyLmxhc3RJbmRleD1Cci5sYXN0SW5kZXg9MCxvPS0xLHM9W10sYz1bXTtmb3IodCs9IiIsZSs9IiI7KG49RHIuZXhlYyh0KSkmJihyPUJyLmV4ZWMoZSkpOykoaT1yLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwobj1uWzBdKT09PShyPXJbMF0pP3Nbb10/c1tvXSs9cjpzWysrb109cjooc1srK29dPW51bGwsYy5wdXNoKHtpOm8seDpOcihuLHIpfSkpLGE9QnIubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9jWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KGNbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1jLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4scj0wO3I8ZTsrK3Ipc1sobj1jW3JdKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBJcih0LGUpe3ZhciBuLHI9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09PXI/bXIoZSk6KCJudW1iZXIiPT09cj9Ocjoic3RyaW5nIj09PXI/KG49dHIoZSkpPyhlPW4seHIpOkxyOmUgaW5zdGFuY2VvZiB0cj94cjplIGluc3RhbmNlb2YgRGF0ZT9NcjpDcihlKT9FcjpBcnJheS5pc0FycmF5KGUpP0FyOiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9PcjpOcikodCxlKX1mdW5jdGlvbiBGcih0KXtsZXQgZTtmb3IoO2U9dC5zb3VyY2VFdmVudDspdD1lO3JldHVybiB0fWZ1bmN0aW9uIFJyKHQsZSl7aWYodD1Gcih0KSx2b2lkIDA9PT1lJiYoZT10LmN1cnJlbnRUYXJnZXQpLGUpe3ZhciBuPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PXQuY2xpZW50WCxyLnk9dC5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX1pZihlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wXX19cmV0dXJuW3QucGFnZVgsdC5wYWdlWV19dmFyIFByLGpyLHpyPTAsWXI9MCxVcj0wLCRyPTAsV3I9MCxxcj0wLEhyPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFZyPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEdyKCl7cmV0dXJuIFdyfHwoVnIoWHIpLFdyPUhyLm5vdygpK3FyKX1mdW5jdGlvbiBYcigpe1dyPTB9ZnVuY3Rpb24gWnIoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFFyKHQsZSxuKXt2YXIgcj1uZXcgWnI7cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBLcigpe0dyKCksKyt6cjtmb3IodmFyIHQsZT1QcjtlOykodD1Xci1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKHZvaWQgMCx0KSxlPWUuX25leHQ7LS16cn1mdW5jdGlvbiBKcigpe1dyPSgkcj1Ici5ub3coKSkrcXIsenI9WXI9MDt0cnl7S3IoKX1maW5hbGx5e3pyPTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPVByLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpQcj1lKTtqcj10LGVpKHIpfSgpLFdyPTB9fWZ1bmN0aW9uIHRpKCl7dmFyIHQ9SHIubm93KCksZT10LSRyO2U+MWUzJiYocXItPWUsJHI9dCl9ZnVuY3Rpb24gZWkodCl7enJ8fChZciYmKFlyPWNsZWFyVGltZW91dChZcikpLHQtV3I+MjQ/KHQ8MS8wJiYoWXI9c2V0VGltZW91dChKcix0LUhyLm5vdygpLXFyKSksVXImJihVcj1jbGVhckludGVydmFsKFVyKSkpOihVcnx8KCRyPUhyLm5vdygpLFVyPXNldEludGVydmFsKHRpLDFlMykpLHpyPTEsVnIoSnIpKSl9ZnVuY3Rpb24gbmkodCxlLG4pe3ZhciByPW5ldyBacjtyZXR1cm4gZT1udWxsPT1lPzA6K2Usci5yZXN0YXJ0KChuPT57ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfVpyLnByb3RvdHlwZT1Rci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpyLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9HcigpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxqcj09PXRoaXN8fChqcj9qci5fbmV4dD10aGlzOlByPXRoaXMsanI9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixlaSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxlaSgpKX19O3ZhciByaT1mZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxpaT1bXTtmdW5jdGlvbiBhaSh0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciBsLHUsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKGwgaW4gaSlpZigoZj1pW2xdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gbmkoYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbbF0pOitsPGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW2xdKX1pZihuaSgoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLGw9MCx1PS0xO2w8aDsrK2wpKGY9bi50d2VlbltsXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKyt1XT1mKTtyLmxlbmd0aD11KzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1RcigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpyaSx0d2VlbjppaSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gb2kodCxlKXt2YXIgbj1jaSh0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHNpKHQsZSl7dmFyIG49Y2kodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gY2kodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBsaSh0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fXZhciB1aSxoaT0xODAvTWF0aC5QSSxmaT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBkaSh0LGUsbixyLGksYSl7dmFyIG8scyxjO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChjPXQqbitlKnIpJiYobi09dCpjLHItPWUqYyksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxjLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGM9LWMsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpoaSxza2V3WDpNYXRoLmF0YW4oYykqaGksc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIHBpKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6TnIodCxpKX0se2k6Yy0yLHg6TnIocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4Ok5yKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4Ok5yKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4Ok5yKHQsbil9LHtpOnMtMix4Ok5yKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGdpPXBpKChmdW5jdGlvbih0KXtjb25zdCBlPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKHQrIiIpO3JldHVybiBlLmlzSWRlbnRpdHk/Zmk6ZGkoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfSksInB4LCAiLCJweCkiLCJkZWcpIikseWk9cGkoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2ZpOih1aXx8KHVpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHVpLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD11aS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9kaSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpmaSl9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIG1pKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1zaSh0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIGJpKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1zaSh0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCxsPWkubGVuZ3RoO2M8bDsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT1sJiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiB2aSh0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zaSh0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBjaSh0LHIpLnZhbHVlW2VdfX1mdW5jdGlvbiBfaSh0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/TnI6ZSBpbnN0YW5jZW9mIHRyP3hyOihuPXRyKGUpKT8oZT1uLHhyKTpMcikodCxlKX1mdW5jdGlvbiB4aSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24ga2kodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiB3aSh0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBUaSh0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24gRWkodCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxzLGM9bih0aGlzKTtpZihudWxsIT1jKXJldHVybihvPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gQ2kodCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxzLGM9bih0aGlzKTtpZihudWxsIT1jKXJldHVybihvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBTaSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gQWkodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBNaSh0LGUpe3ZhciBuLHI7ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKG49KHI9aSkmJkFpKHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBOaSh0LGUpe3ZhciBuLHI7ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKG49KHI9aSkmJlNpKHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBPaSh0LGUpe3JldHVybiBmdW5jdGlvbigpe29pKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBEaSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7b2kodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBCaSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3NpKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBMaSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7c2kodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBJaSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtzaSh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gRmkodCxlLG4pe3ZhciByLGksYT1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KGUpP29pOnNpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWEodGhpcyx0KSxzPW8ub247cyE9PXImJihpPShyPXMpLmNvcHkoKSkub24oZSxuKSxvLm9uPWl9fXZhciBSaT1Bbi5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gUGkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gamkodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsciksbil9fWZ1bmN0aW9uIHppKHQsZSxuKXt2YXIgcixpO2Z1bmN0aW9uIGEoKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihyPShpPWEpJiZqaSh0LGEsbikpLHJ9cmV0dXJuIGEuX3ZhbHVlPWUsYX1mdW5jdGlvbiBZaSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gVWkodCl7dmFyIGUsbjtmdW5jdGlvbiByKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1uJiYoZT0obj1yKSYmWWkocikpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn12YXIgJGk9MDtmdW5jdGlvbiBXaSh0LGUsbixyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gcWkodCl7cmV0dXJuIEFuKCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiBIaSgpe3JldHVybisrJGl9dmFyIFZpPUFuLnByb3RvdHlwZTtmdW5jdGlvbiBHaSh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gWGkodCl7cmV0dXJuLS10KnQqdCsxfWZ1bmN0aW9uIFppKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfVdpLnByb3RvdHlwZT1xaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOldpLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXBlKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pZm9yKHZhciBzLGMsbD1yW29dLHU9bC5sZW5ndGgsaD1hW29dPW5ldyBBcnJheSh1KSxmPTA7Zjx1OysrZikocz1sW2ZdKSYmKGM9dC5jYWxsKHMscy5fX2RhdGFfXyxmLGwpKSYmKCJfX2RhdGFfXyJpbiBzJiYoYy5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2ZdPWMsYWkoaFtmXSxlLG4sZixoLGNpKHMsbikpKTtyZXR1cm4gbmV3IFdpKGEsdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tZSh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9W10sbz1bXSxzPTA7czxpOysrcylmb3IodmFyIGMsbD1yW3NdLHU9bC5sZW5ndGgsaD0wO2g8dTsrK2gpaWYoYz1sW2hdKXtmb3IodmFyIGYsZD10LmNhbGwoYyxjLl9fZGF0YV9fLGgsbCkscD1jaShjLG4pLGc9MCx5PWQubGVuZ3RoO2c8eTsrK2cpKGY9ZFtnXSkmJmFpKGYsZSxuLGcsZCxwKTthLnB1c2goZCksby5wdXNoKGMpfXJldHVybiBuZXcgV2koYSxvLGUsbil9LHNlbGVjdENoaWxkOlZpLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOlZpLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YmUodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLGw9MDtsPHM7KytsKShhPW9bbF0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLGwsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IFdpKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyLGkpLG89bmV3IEFycmF5KHIpLHM9MDtzPGE7KytzKWZvcih2YXIgYyxsPWVbc10sdT1uW3NdLGg9bC5sZW5ndGgsZj1vW3NdPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZCkoYz1sW2RdfHx1W2RdKSYmKGZbZF09Yyk7Zm9yKDtzPHI7KytzKW9bc109ZVtzXTtyZXR1cm4gbmV3IFdpKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSaSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49SGkoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCxsPTA7bDxjOysrbClpZihvPXNbbF0pe3ZhciB1PWNpKG8sZSk7YWkobyx0LG4sbCxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBXaShyLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpWaS5jYWxsLG5vZGVzOlZpLm5vZGVzLG5vZGU6Vmkubm9kZSxzaXplOlZpLnNpemUsZW1wdHk6VmkuZW1wdHksZWFjaDpWaS5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9jaSh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goRmkobix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPUxlKHQpLHI9InRyYW5zZm9ybSI9PT1uP3lpOl9pO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP0NpOkVpKShuLHIsdmkodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/a2k6eGkpKG4pOihuLmxvY2FsP1RpOndpKShuLHIsZSkpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPUxlKHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKHIubG9jYWw/TWk6TmkpKHIsZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/Z2k6X2k7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9cWUodGhpcyx0KSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHFlKHRoaXMsdCkpO3JldHVybiBhPT09bz9udWxsOmE9PT1uJiZvPT09cj9pOmk9ZShuPWEscj1vKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LFBpKHQpKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFlKHRoaXMsdCkscz1uKHRoaXMpLGM9cysiIjtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksYz1zPXFlKHRoaXMsdCkpLG89PT1jP251bGw6bz09PXImJmM9PT1pP2E6KGk9YyxhPWUocj1vLHMpKX19KHQscix2aSh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGEsbz0ic3R5bGUuIitlLHM9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9c2kodGhpcyx0KSxsPWMub24sdT1udWxsPT1jLnZhbHVlW29dP2F8fChhPVBpKGUpKTp2b2lkIDA7bD09PW4mJmk9PT11fHwocj0obj1sKS5jb3B5KCkpLm9uKHMsaT11KSxjLm9uPXJ9fSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFlKHRoaXMsdCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUpLG4pLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLHppKHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KHZpKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxVaSh0KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1jaSh0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bWk6YmkpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/T2k6RGkpKGUsdCkpOmNpKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P0JpOkxpKShlLHQpKTpjaSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goSWkoZSx0KSk6Y2kodGhpcy5ub2RlKCksZSkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7c2kodGhpcyx0KS5lYXNlPW59fSh0aGlzLl9pZCx0KSl9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49c2kodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpLDA9PT1pJiZhKCl9KSl9LFtTeW1ib2wuaXRlcmF0b3JdOlZpW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBRaT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6Wml9O2Z1bmN0aW9uIEtpKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7ZX0gbm90IGZvdW5kYCk7cmV0dXJuIG59QW4ucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2xpKHRoaXMsdCl9KSl9LEFuLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFdpPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9SGkoKSwobj1RaSkudGltZT1HcigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsbD0wO2w8YzsrK2wpKG89c1tsXSkmJmFpKG8sdCxlLGwscyxufHxLaShvLGUpKTtyZXR1cm4gbmV3IFdpKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgSmk9W251bGxdO2Z1bmN0aW9uIHRhKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBXaShbW3RdXSxKaSxlLCtyKTtyZXR1cm4gbnVsbH1jb25zdCBlYT10PT4oKT0+dDtmdW5jdGlvbiBuYSh0LHtzb3VyY2VFdmVudDplLHRhcmdldDpuLHNlbGVjdGlvbjpyLG1vZGU6aSxkaXNwYXRjaDphfSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2VsZWN0aW9uOnt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxtb2RlOnt2YWx1ZTppLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTphfX0pfWZ1bmN0aW9uIHJhKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaWEodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIGFhPXtuYW1lOiJkcmFnIn0sb2E9e25hbWU6InNwYWNlIn0sc2E9e25hbWU6ImhhbmRsZSJ9LGNhPXtuYW1lOiJjZW50ZXIifTtjb25zdHthYnM6bGEsbWF4OnVhLG1pbjpoYX09TWF0aDtmdW5jdGlvbiBmYSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIGRhKHQpe3JldHVybltmYSh0WzBdKSxmYSh0WzFdKV19dmFyIHBhPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoa2EpLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/bnVsbDpbWyt0WzBdLGVbMF1bMV1dLFsrdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSxnYT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKGthKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0seWE9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKGthKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9udWxsOmRhKHQpfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxtYT17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sYmE9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LHZhPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxfYT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSx4YT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBrYSh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiB3YSh0KXtyZXR1cm4hdC5jdHJsS2V5JiYhdC5idXR0b259ZnVuY3Rpb24gVGEoKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBFYSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBDYSh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIFNhKHQpe3JldHVybiB0WzBdWzBdPT09dFsxXVswXXx8dFswXVsxXT09PXRbMV1bMV19ZnVuY3Rpb24gQWEodCl7dmFyIGU9dC5fX2JydXNoO3JldHVybiBlP2UuZGltLm91dHB1dChlLnNlbGVjdGlvbik6bnVsbH1mdW5jdGlvbiBNYSgpe3JldHVybiBEYShwYSl9ZnVuY3Rpb24gTmEoKXtyZXR1cm4gRGEoZ2EpfWZ1bmN0aW9uIE9hKCl7cmV0dXJuIERhKHlhKX1mdW5jdGlvbiBEYSh0KXt2YXIgZSxuPVRhLHI9d2EsaT1FYSxhPSEwLG89ZmUoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxzPTY7ZnVuY3Rpb24gYyhlKXt2YXIgbj1lLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShba2EoIm92ZXJsYXkiKV0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsbWEub3ZlcmxheSkubWVyZ2UobikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1DYSh0aGlzKS5leHRlbnQ7TW4odGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLGUuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShba2EoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsbWEuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHI9ZS5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKHQuaGFuZGxlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIG1hW3QudHlwZV19KSksZS5lYWNoKGwpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixmKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuYnJ1c2giLGYpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGQpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIscCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGwoKXt2YXIgdD1Nbih0aGlzKSxlPUNhKHRoaXMpLnNlbGVjdGlvbjtlPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixlWzBdWzBdKS5hdHRyKCJ5IixlWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZVsxXVswXS1lWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGVbMV1bMV0tZVswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP2VbMV1bMF0tcy8yOmVbMF1bMF0tcy8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/ZVsxXVsxXS1zLzI6ZVswXVsxXS1zLzJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9lWzFdWzBdLWVbMF1bMF0rczpzfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP2VbMV1bMV0tZVswXVsxXStzOnN9KSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KHQsZSxuKXt2YXIgcj10Ll9fYnJ1c2guZW1pdHRlcjtyZXR1cm4hcnx8biYmci5jbGVhbj9uZXcgaCh0LGUsbik6cn1mdW5jdGlvbiBoKHQsZSxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wLHRoaXMuY2xlYW49bn1mdW5jdGlvbiBmKG4pe2lmKCghZXx8bi50b3VjaGVzKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBpLG8scyxjLGgsZixkLHAsZyx5LG0sYj10aGlzLHY9bi50YXJnZXQuX19kYXRhX18udHlwZSxfPSJzZWxlY3Rpb24iPT09KGEmJm4ubWV0YUtleT92PSJvdmVybGF5Ijp2KT9hYTphJiZuLmFsdEtleT9jYTpzYSx4PXQ9PT1nYT9udWxsOl9hW3ZdLGs9dD09PXBhP251bGw6eGFbdl0sdz1DYShiKSxUPXcuZXh0ZW50LEU9dy5zZWxlY3Rpb24sQz1UWzBdWzBdLFM9VFswXVsxXSxBPVRbMV1bMF0sTT1UWzFdWzFdLE49MCxPPTAsRD14JiZrJiZhJiZuLnNoaWZ0S2V5LEI9QXJyYXkuZnJvbShuLnRvdWNoZXN8fFtuXSwodD0+e2NvbnN0IGU9dC5pZGVudGlmaWVyO3JldHVybih0PVJyKHQsYikpLnBvaW50MD10LnNsaWNlKCksdC5pZGVudGlmaWVyPWUsdH0pKTtsaShiKTt2YXIgTD11KGIsYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpO2lmKCJvdmVybGF5Ij09PXYpe0UmJihnPSEwKTtjb25zdCBlPVtCWzBdLEJbMV18fEJbMF1dO3cuc2VsZWN0aW9uPUU9W1tpPXQ9PT1nYT9DOmhhKGVbMF1bMF0sZVsxXVswXSkscz10PT09cGE/UzpoYShlWzBdWzFdLGVbMV1bMV0pXSxbaD10PT09Z2E/QTp1YShlWzBdWzBdLGVbMV1bMF0pLGQ9dD09PXBhP006dWEoZVswXVsxXSxlWzFdWzFdKV1dLEIubGVuZ3RoPjEmJmoobil9ZWxzZSBpPUVbMF1bMF0scz1FWzBdWzFdLGg9RVsxXVswXSxkPUVbMV1bMV07bz1pLGM9cyxmPWgscD1kO3ZhciBJPU1uKGIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEY9SS5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixtYVt2XSk7aWYobi50b3VjaGVzKUwubW92ZWQ9UCxMLmVuZGVkPXo7ZWxzZXt2YXIgUj1NbihuLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLFAsITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZSLm9uKCJrZXlkb3duLmJydXNoIixZLCEwKS5vbigia2V5dXAuYnJ1c2giLFUsITApLExuKG4udmlldyl9bC5jYWxsKGIpLEwuc3RhcnQobixfLm5hbWUpfWZ1bmN0aW9uIFAodCl7Zm9yKGNvbnN0IGUgb2YgdC5jaGFuZ2VkVG91Y2hlc3x8W3RdKWZvcihjb25zdCB0IG9mIEIpdC5pZGVudGlmaWVyPT09ZS5pZGVudGlmaWVyJiYodC5jdXI9UnIoZSxiKSk7aWYoRCYmIXkmJiFtJiYxPT09Qi5sZW5ndGgpe2NvbnN0IHQ9QlswXTtsYSh0LmN1clswXS10WzBdKT5sYSh0LmN1clsxXS10WzFdKT9tPSEwOnk9ITB9Zm9yKGNvbnN0IHQgb2YgQil0LmN1ciYmKHRbMF09dC5jdXJbMF0sdFsxXT10LmN1clsxXSk7Zz0hMCxpYSh0KSxqKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1CWzBdLG49ZS5wb2ludDA7dmFyIHI7c3dpdGNoKE49ZVswXS1uWzBdLE89ZVsxXS1uWzFdLF8pe2Nhc2Ugb2E6Y2FzZSBhYTp4JiYoTj11YShDLWksaGEoQS1oLE4pKSxvPWkrTixmPWgrTiksayYmKE89dWEoUy1zLGhhKE0tZCxPKSksYz1zK08scD1kK08pO2JyZWFrO2Nhc2Ugc2E6QlsxXT8oeCYmKG89dWEoQyxoYShBLEJbMF1bMF0pKSxmPXVhKEMsaGEoQSxCWzFdWzBdKSkseD0xKSxrJiYoYz11YShTLGhhKE0sQlswXVsxXSkpLHA9dWEoUyxoYShNLEJbMV1bMV0pKSxrPTEpKTooeDwwPyhOPXVhKEMtaSxoYShBLWksTikpLG89aStOLGY9aCk6eD4wJiYoTj11YShDLWgsaGEoQS1oLE4pKSxvPWksZj1oK04pLGs8MD8oTz11YShTLXMsaGEoTS1zLE8pKSxjPXMrTyxwPWQpOms+MCYmKE89dWEoUy1kLGhhKE0tZCxPKSksYz1zLHA9ZCtPKSk7YnJlYWs7Y2FzZSBjYTp4JiYobz11YShDLGhhKEEsaS1OKngpKSxmPXVhKEMsaGEoQSxoK04qeCkpKSxrJiYoYz11YShTLGhhKE0scy1PKmspKSxwPXVhKFMsaGEoTSxkK08qaykpKX1mPG8mJih4Kj0tMSxyPWksaT1oLGg9cixyPW8sbz1mLGY9cix2IGluIGJhJiZGLmF0dHIoImN1cnNvciIsbWFbdj1iYVt2XV0pKSxwPGMmJihrKj0tMSxyPXMscz1kLGQ9cixyPWMsYz1wLHA9cix2IGluIHZhJiZGLmF0dHIoImN1cnNvciIsbWFbdj12YVt2XV0pKSx3LnNlbGVjdGlvbiYmKEU9dy5zZWxlY3Rpb24pLHkmJihvPUVbMF1bMF0sZj1FWzFdWzBdKSxtJiYoYz1FWzBdWzFdLHA9RVsxXVsxXSksRVswXVswXT09PW8mJkVbMF1bMV09PT1jJiZFWzFdWzBdPT09ZiYmRVsxXVsxXT09PXB8fCh3LnNlbGVjdGlvbj1bW28sY10sW2YscF1dLGwuY2FsbChiKSxMLmJydXNoKHQsXy5uYW1lKSl9ZnVuY3Rpb24geih0KXtpZihyYSh0KSx0LnRvdWNoZXMpe2lmKHQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO2UmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKX1lbHNlIEluKHQudmlldyxnKSxSLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtJLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRi5hdHRyKCJjdXJzb3IiLG1hLm92ZXJsYXkpLHcuc2VsZWN0aW9uJiYoRT13LnNlbGVjdGlvbiksU2EoRSkmJih3LnNlbGVjdGlvbj1udWxsLGwuY2FsbChiKSksTC5lbmQodCxfLm5hbWUpfWZ1bmN0aW9uIFkodCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSAxNjpEPXgmJms7YnJlYWs7Y2FzZSAxODpfPT09c2EmJih4JiYoaD1mLU4qeCxpPW8rTip4KSxrJiYoZD1wLU8qayxzPWMrTyprKSxfPWNhLGoodCkpO2JyZWFrO2Nhc2UgMzI6XyE9PXNhJiZfIT09Y2F8fCh4PDA/aD1mLU46eD4wJiYoaT1vLU4pLGs8MD9kPXAtTzprPjAmJihzPWMtTyksXz1vYSxGLmF0dHIoImN1cnNvciIsbWEuc2VsZWN0aW9uKSxqKHQpKTticmVhaztkZWZhdWx0OnJldHVybn1pYSh0KX1mdW5jdGlvbiBVKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMTY6RCYmKHk9bT1EPSExLGoodCkpO2JyZWFrO2Nhc2UgMTg6Xz09PWNhJiYoeDwwP2g9Zjp4PjAmJihpPW8pLGs8MD9kPXA6az4wJiYocz1jKSxfPXNhLGoodCkpO2JyZWFrO2Nhc2UgMzI6Xz09PW9hJiYodC5hbHRLZXk/KHgmJihoPWYtTip4LGk9bytOKngpLGsmJihkPXAtTyprLHM9YytPKmspLF89Y2EpOih4PDA/aD1mOng+MCYmKGk9byksazwwP2Q9cDprPjAmJihzPWMpLF89c2EpLEYuYXR0cigiY3Vyc29yIixtYVt2XSksaih0KSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59aWEodCl9fWZ1bmN0aW9uIGQodCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQodCl9ZnVuY3Rpb24gcCh0KXt1KHRoaXMsYXJndW1lbnRzKS5lbmRlZCh0KX1mdW5jdGlvbiBnKCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD1kYShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuLHIpe2UudHdlZW4/ZS5vbigic3RhcnQuYnJ1c2giLChmdW5jdGlvbih0KXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KHQpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24odCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kKHQpfSkpLnR3ZWVuKCJicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWUuX19icnVzaCxpPXUoZSxhcmd1bWVudHMpLGE9ci5zZWxlY3Rpb24sbz10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sci5leHRlbnQpLHM9SXIoYSxvKTtmdW5jdGlvbiBjKHQpe3Iuc2VsZWN0aW9uPTE9PT10JiZudWxsPT09bz9udWxsOnModCksbC5jYWxsKGUpLGkuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PWEmJm51bGwhPT1vP2M6YygxKX0pKTplLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPWFyZ3VtZW50cyxhPWUuX19icnVzaCxvPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLGkpOm4sYS5leHRlbnQpLHM9dShlLGkpLmJlZm9yZXN0YXJ0KCk7bGkoZSksYS5zZWxlY3Rpb249bnVsbD09PW8/bnVsbDpvLGwuY2FsbChlKSxzLnN0YXJ0KHIpLmJydXNoKHIpLmVuZChyKX0pKX0sYy5jbGVhcj1mdW5jdGlvbih0LGUpe2MubW92ZSh0LG51bGwsZSl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0Iix0LGUpKTp0aGlzLmVtaXQoImJydXNoIix0KSx0aGlzfSxicnVzaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIix0LGUpLHRoaXN9LGVuZDpmdW5jdGlvbih0LGUpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIsdCxlKSksdGhpc30sZW1pdDpmdW5jdGlvbihlLG4scil7dmFyIGk9TW4odGhpcy50aGF0KS5kYXR1bSgpO28uY2FsbChlLHRoaXMudGhhdCxuZXcgbmEoZSx7c291cmNlRXZlbnQ6bix0YXJnZXQ6YyxzZWxlY3Rpb246dC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pLG1vZGU6cixkaXNwYXRjaDpvfSksaSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVhKGRhKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVhKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplYSghIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIEJhPU1hdGguYWJzLExhPU1hdGguY29zLElhPU1hdGguc2luLEZhPU1hdGguUEksUmE9RmEvMixQYT0yKkZhLGphPU1hdGgubWF4LHphPTFlLTEyO2Z1bmN0aW9uIFlhKHQsZSl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDplLXR9LCgoZSxuKT0+dCtuKSl9ZnVuY3Rpb24gVWEodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUsbi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpfX1mdW5jdGlvbiAkYSgpe3JldHVybiBIYSghMSwhMSl9ZnVuY3Rpb24gV2EoKXtyZXR1cm4gSGEoITEsITApfWZ1bmN0aW9uIHFhKCl7cmV0dXJuIEhhKCEwLCExKX1mdW5jdGlvbiBIYSh0LGUpe3ZhciBuPTAscj1udWxsLGk9bnVsbCxhPW51bGw7ZnVuY3Rpb24gbyhvKXt2YXIgcyxjPW8ubGVuZ3RoLGw9bmV3IEFycmF5KGMpLHU9WWEoMCxjKSxoPW5ldyBBcnJheShjKmMpLGY9bmV3IEFycmF5KGMpLGQ9MDtvPUZsb2F0NjRBcnJheS5mcm9tKHtsZW5ndGg6YypjfSxlPyh0LGUpPT5vW2UlY11bZS9jfDBdOih0LGUpPT5vW2UvY3wwXVtlJWNdKTtmb3IobGV0IGU9MDtlPGM7KytlKXtsZXQgbj0wO2ZvcihsZXQgcj0wO3I8YzsrK3Ipbis9b1tlKmMrcl0rdCpvW3IqYytlXTtkKz1sW2VdPW59cz0oZD1qYSgwLFBhLW4qYykvZCk/bjpQYS9jO3tsZXQgZT0wO3ImJnUuc29ydCgoKHQsZSk9PnIobFt0XSxsW2VdKSkpO2Zvcihjb25zdCBuIG9mIHUpe2NvbnN0IHI9ZTtpZih0KXtjb25zdCB0PVlhKDErfmMsYykuZmlsdGVyKCh0PT50PDA/b1t+dCpjK25dOm9bbipjK3RdKSk7aSYmdC5zb3J0KCgodCxlKT0+aSh0PDA/LW9bfnQqYytuXTpvW24qYyt0XSxlPDA/LW9bfmUqYytuXTpvW24qYytlXSkpKTtmb3IoY29uc3QgciBvZiB0KXI8MD8oaFt+cipjK25dfHwoaFt+cipjK25dPXtzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbH0pKS50YXJnZXQ9e2luZGV4Om4sc3RhcnRBbmdsZTplLGVuZEFuZ2xlOmUrPW9bfnIqYytuXSpkLHZhbHVlOm9bfnIqYytuXX06KGhbbipjK3JdfHwoaFtuKmMrcl09e3NvdXJjZTpudWxsLHRhcmdldDpudWxsfSkpLnNvdXJjZT17aW5kZXg6bixzdGFydEFuZ2xlOmUsZW5kQW5nbGU6ZSs9b1tuKmMrcl0qZCx2YWx1ZTpvW24qYytyXX07ZltuXT17aW5kZXg6bixzdGFydEFuZ2xlOnIsZW5kQW5nbGU6ZSx2YWx1ZTpsW25dfX1lbHNle2NvbnN0IHQ9WWEoMCxjKS5maWx0ZXIoKHQ9Pm9bbipjK3RdfHxvW3QqYytuXSkpO2kmJnQuc29ydCgoKHQsZSk9Pmkob1tuKmMrdF0sb1tuKmMrZV0pKSk7Zm9yKGNvbnN0IHIgb2YgdCl7bGV0IHQ7aWYobjxyPyh0PWhbbipjK3JdfHwoaFtuKmMrcl09e3NvdXJjZTpudWxsLHRhcmdldDpudWxsfSksdC5zb3VyY2U9e2luZGV4Om4sc3RhcnRBbmdsZTplLGVuZEFuZ2xlOmUrPW9bbipjK3JdKmQsdmFsdWU6b1tuKmMrcl19KToodD1oW3IqYytuXXx8KGhbcipjK25dPXtzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbH0pLHQudGFyZ2V0PXtpbmRleDpuLHN0YXJ0QW5nbGU6ZSxlbmRBbmdsZTplKz1vW24qYytyXSpkLHZhbHVlOm9bbipjK3JdfSxuPT09ciYmKHQuc291cmNlPXQudGFyZ2V0KSksdC5zb3VyY2UmJnQudGFyZ2V0JiZ0LnNvdXJjZS52YWx1ZTx0LnRhcmdldC52YWx1ZSl7Y29uc3QgZT10LnNvdXJjZTt0LnNvdXJjZT10LnRhcmdldCx0LnRhcmdldD1lfX1mW25dPXtpbmRleDpuLHN0YXJ0QW5nbGU6cixlbmRBbmdsZTplLHZhbHVlOmxbbl19fWUrPXN9fXJldHVybihoPU9iamVjdC52YWx1ZXMoaCkpLmdyb3Vwcz1mLGE/aC5zb3J0KGEpOmh9cmV0dXJuIG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49amEoMCx0KSxvKTpufSxvLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxvKTpyfSxvLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1udWxsOihhPVVhKHQpKS5fPXQsbyk6YSYmYS5ffSxvfWNvbnN0IFZhPU1hdGguUEksR2E9MipWYSxYYT0xZS02LFphPUdhLVhhO2Z1bmN0aW9uIFFhKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gS2EoKXtyZXR1cm4gbmV3IFFhfVFhLnByb3RvdHlwZT1LYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFhLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSxhcmNUbzpmdW5jdGlvbih0LGUsbixyLGkpe3Q9K3QsZT0rZSxuPStuLHI9K3IsaT0raTt2YXIgYT10aGlzLl94MSxvPXRoaXMuX3kxLHM9bi10LGM9ci1lLGw9YS10LHU9by1lLGg9bCpsK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD5YYSlpZihNYXRoLmFicyh1KnMtYypsKT5YYSYmaSl7dmFyIGY9bi1hLGQ9ci1vLHA9cypzK2MqYyxnPWYqZitkKmQseT1NYXRoLnNxcnQocCksbT1NYXRoLnNxcnQoaCksYj1pKk1hdGgudGFuKChWYS1NYXRoLmFjb3MoKHAraC1nKS8oMip5Km0pKSkvMiksdj1iL20sXz1iL3k7TWF0aC5hYnModi0xKT5YYSYmKHRoaXMuXys9IkwiKyh0K3YqbCkrIiwiKyhlK3YqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+bCpkKSsiLCIrKHRoaXMuX3gxPXQrXypzKSsiLCIrKHRoaXMuX3kxPWUrXypjKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4scixpLGEpe3Q9K3QsZT0rZSxhPSEhYTt2YXIgbz0obj0rbikqTWF0aC5jb3Mocikscz1uKk1hdGguc2luKHIpLGM9dCtvLGw9ZStzLHU9MV5hLGg9YT9yLWk6aS1yO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrYysiLCIrbDooTWF0aC5hYnModGhpcy5feDEtYyk+WGF8fE1hdGguYWJzKHRoaXMuX3kxLWwpPlhhKSYmKHRoaXMuXys9IkwiK2MrIiwiK2wpLG4mJihoPDAmJihoPWglR2ErR2EpLGg+WmE/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0LW8pKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPWwpOmg+WGEmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PVZhKSsiLCIrdSsiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK3IrImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07Y29uc3QgSmE9S2E7dmFyIHRvPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBlbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbm8odCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIHJvKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBpbyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gYW8odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBvbyh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBzbygpe3JldHVybiAwfWZ1bmN0aW9uIGNvKCl7cmV0dXJuIDEwfWZ1bmN0aW9uIGxvKHQpe3ZhciBlPW5vLG49cm8scj1pbyxpPWlvLGE9YW8sbz1vbyxzPXNvLGM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGwsdT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9cy5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixkPXRvLmNhbGwoYXJndW1lbnRzKSxwPStyLmFwcGx5KHRoaXMsKGRbMF09dSxkKSksZz1hLmFwcGx5KHRoaXMsZCktUmEseT1vLmFwcGx5KHRoaXMsZCktUmEsbT0raS5hcHBseSh0aGlzLChkWzBdPWgsZCkpLGI9YS5hcHBseSh0aGlzLGQpLVJhLHY9by5hcHBseSh0aGlzLGQpLVJhO2lmKGN8fChjPWw9SmEoKSksZj56YSYmKEJhKHktZyk+MipmK3phP3k+Zz8oZys9Zix5LT1mKTooZy09Zix5Kz1mKTpnPXk9KGcreSkvMixCYSh2LWIpPjIqZit6YT92PmI/KGIrPWYsdi09Zik6KGItPWYsdis9Zik6Yj12PShiK3YpLzIpLGMubW92ZVRvKHAqTGEoZykscCpJYShnKSksYy5hcmMoMCwwLHAsZyx5KSxnIT09Ynx8eSE9PXYpaWYodCl7dmFyIF89K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHg9bS1fLGs9KGIrdikvMjtjLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHgqTGEoYikseCpJYShiKSksYy5saW5lVG8obSpMYShrKSxtKklhKGspKSxjLmxpbmVUbyh4KkxhKHYpLHgqSWEodikpfWVsc2UgYy5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxtKkxhKGIpLG0qSWEoYikpLGMuYXJjKDAsMCxtLGIsdik7aWYoYy5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwKkxhKGcpLHAqSWEoZykpLGMuY2xvc2VQYXRoKCksbClyZXR1cm4gYz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIHQmJihsLmhlYWRSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTplbygrZSksbCk6dH0pLGwucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplbygrdCksbCk6cn0sbC5zb3VyY2VSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplbygrdCksbCk6cn0sbC50YXJnZXRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplbygrdCksbCk6aX0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZW8oK3QpLGwpOmF9LGwuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplbygrdCksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVvKCt0KSxsKTpzfSxsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGwpOmV9LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbCk6bn0sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PXQ/bnVsbDp0LGwpOmN9LGx9ZnVuY3Rpb24gdW8oKXtyZXR1cm4gbG8oKX1mdW5jdGlvbiBobygpe3JldHVybiBsbyhjbyl9Y29uc3QgZm89TWF0aC5QSS8xODAscG89MTgwL01hdGguUEksZ289Ljk2NDIyLHlvPS44MjUyMSxtbz00LzI5LGJvPTYvMjksdm89MypibypibztmdW5jdGlvbiBfbyh0KXtpZih0IGluc3RhbmNlb2Ygd28pcmV0dXJuIG5ldyB3byh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBPbylyZXR1cm4gRG8odCk7dCBpbnN0YW5jZW9mIGFyfHwodD1ycih0KSk7dmFyIGUsbixyPVNvKHQuciksaT1Tbyh0LmcpLGE9U28odC5iKSxvPVRvKCguMjIyNTA0NSpyKy43MTY4Nzg2KmkrLjA2MDYxNjkqYSkvMSk7cmV0dXJuIHI9PT1pJiZpPT09YT9lPW49bzooZT1UbygoLjQzNjA3NDcqcisuMzg1MDY0OSppKy4xNDMwODA0KmEpL2dvKSxuPVRvKCguMDEzOTMyMipyKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkveW8pKSxuZXcgd28oMTE2Km8tMTYsNTAwKihlLW8pLDIwMCooby1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHhvKHQsZSl7cmV0dXJuIG5ldyB3byh0LDAsMCxudWxsPT1lPzE6ZSl9ZnVuY3Rpb24ga28odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP19vKHQpOm5ldyB3byh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gd28odCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFRvKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvdm8rbW99ZnVuY3Rpb24gRW8odCl7cmV0dXJuIHQ+Ym8/dCp0KnQ6dm8qKHQtbW8pfWZ1bmN0aW9uIENvKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gU28odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gQW8odCl7aWYodCBpbnN0YW5jZW9mIE9vKXJldHVybiBuZXcgT28odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygd298fCh0PV9vKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgT28oTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqcG87cmV0dXJuIG5ldyBPbyhlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBNbyh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/QW8odCk6bmV3IE9vKG4sZSx0LG51bGw9PXI/MTpyKX1mdW5jdGlvbiBObyh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/QW8odCk6bmV3IE9vKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBPbyh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gRG8odCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IHdvKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqZm87cmV0dXJuIG5ldyB3byh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfUZuKHdvLGtvLFJuKFBuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHdvKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd28odGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IGFyKENvKDMuMTMzODU2MSooZT1nbypFbyhlKSktMS42MTY4NjY3Kih0PTEqRW8odCkpLS40OTA2MTQ2KihuPXlvKkVvKG4pKSksQ28oLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxDbyguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLEZuKE9vLE5vLFJuKFBuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE9vKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgT28odGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gRG8odGhpcykucmdiKCl9fSkpO3ZhciBCbz0tLjE0ODYxLExvPTEuNzgyNzcsSW89LS4yOTIyNyxGbz0tLjkwNjQ5LFJvPTEuOTcyOTQsUG89Um8qRm8sam89Um8qTG8sem89TG8qSW8tRm8qQm87ZnVuY3Rpb24gWW8odCl7aWYodCBpbnN0YW5jZW9mICRvKXJldHVybiBuZXcgJG8odC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgYXJ8fCh0PXJyKHQpKTt2YXIgZT10LnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT0oem8qcitQbyplLWpvKm4pLyh6bytQby1qbyksYT1yLWksbz0oUm8qKG4taSktSW8qYSkvRm8scz1NYXRoLnNxcnQobypvK2EqYSkvKFJvKmkqKDEtaSkpLGM9cz9NYXRoLmF0YW4yKG8sYSkqcG8tMTIwOk5hTjtyZXR1cm4gbmV3ICRvKGM8MD9jKzM2MDpjLHMsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFVvKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Zbyh0KTpuZXcgJG8odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uICRvKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1GbigkbyxVbyxSbihQbix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD96bjpNYXRoLnBvdyh6bix0KSxuZXcgJG8odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9qbjpNYXRoLnBvdyhqbix0KSxuZXcgJG8odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKmZvLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBhcigyNTUqKGUrbiooQm8qcitMbyppKSksMjU1KihlK24qKElvKnIrRm8qaSkpLDI1NSooZStuKihSbypyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIFdvPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBxbyh0LGUpe3JldHVybiB0LWV9Y29uc3QgSG89dD0+KCk9PnQ7ZnVuY3Rpb24gVm8odCxlKXtmb3IodmFyIG4scj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihuPUdvKHQsZVtyXSkpcmV0dXJuIG47cmV0dXJuIDB9ZnVuY3Rpb24gR28odCxlKXtmb3IodmFyIG49ZVswXSxyPWVbMV0saT0tMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBjPXRbYV0sbD1jWzBdLHU9Y1sxXSxoPXRbc10sZj1oWzBdLGQ9aFsxXTtpZihYbyhjLGgsZSkpcmV0dXJuIDA7dT5yIT1kPnImJm48KGYtbCkqKHItdSkvKGQtdSkrbCYmKGk9LWkpfXJldHVybiBpfWZ1bmN0aW9uIFhvKHQsZSxuKXt2YXIgcixpLGEsbztyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPT0oblswXS10WzBdKSooZVsxXS10WzFdKX0odCxlLG4pJiYoaT10W3I9Kyh0WzBdPT09ZVswXSldLGE9bltyXSxvPWVbcl0saTw9YSYmYTw9b3x8bzw9YSYmYTw9aSl9ZnVuY3Rpb24gWm8oKXt9dmFyIFFvPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gS28oKXt2YXIgdD0xLGU9MSxuPXJ0LHI9cztmdW5jdGlvbiBpKHQpe3ZhciBlPW4odCk7aWYoQXJyYXkuaXNBcnJheShlKSllPWUuc2xpY2UoKS5zb3J0KHFvKTtlbHNle2NvbnN0IG49Xyh0KSxyPWV0KG5bMF0sblsxXSxlKTtlPUooTWF0aC5mbG9vcihuWzBdL3IpKnIsTWF0aC5mbG9vcihuWzFdL3ItMSkqcixlKX1yZXR1cm4gZS5tYXAoKGU9PmEodCxlKSkpfWZ1bmN0aW9uIGEobixpKXt2YXIgYT1bXSxzPVtdO3JldHVybiBmdW5jdGlvbihuLHIsaSl7dmFyIGEscyxjLGwsdSxoLGY9bmV3IEFycmF5LGQ9bmV3IEFycmF5O2ZvcihhPXM9LTEsbD1uWzBdPj1yLFFvW2w8PDFdLmZvckVhY2gocCk7KythPHQtMTspYz1sLGw9blthKzFdPj1yLFFvW2N8bDw8MV0uZm9yRWFjaChwKTtmb3IoUW9bbDw8MF0uZm9yRWFjaChwKTsrK3M8ZS0xOyl7Zm9yKGE9LTEsbD1uW3MqdCt0XT49cix1PW5bcyp0XT49cixRb1tsPDwxfHU8PDJdLmZvckVhY2gocCk7KythPHQtMTspYz1sLGw9bltzKnQrdCthKzFdPj1yLGg9dSx1PW5bcyp0K2ErMV0+PXIsUW9bY3xsPDwxfHU8PDJ8aDw8M10uZm9yRWFjaChwKTtRb1tsfHU8PDNdLmZvckVhY2gocCl9Zm9yKGE9LTEsdT1uW3MqdF0+PXIsUW9bdTw8Ml0uZm9yRWFjaChwKTsrK2E8dC0xOyloPXUsdT1uW3MqdCthKzFdPj1yLFFvW3U8PDJ8aDw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBlLG4scj1bdFswXVswXSthLHRbMF1bMV0rc10sYz1bdFsxXVswXSthLHRbMV1bMV0rc10sbD1vKHIpLHU9byhjKTsoZT1kW2xdKT8obj1mW3VdKT8oZGVsZXRlIGRbZS5lbmRdLGRlbGV0ZSBmW24uc3RhcnRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbZS5zdGFydF09ZFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBkW2UuZW5kXSxlLnJpbmcucHVzaChjKSxkW2UuZW5kPXVdPWUpOihlPWZbdV0pPyhuPWRbbF0pPyhkZWxldGUgZltlLnN0YXJ0XSxkZWxldGUgZFtuLmVuZF0sZT09PW4/KGUucmluZy5wdXNoKGMpLGkoZS5yaW5nKSk6ZltuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGZbZS5zdGFydF0sZS5yaW5nLnVuc2hpZnQociksZltlLnN0YXJ0PWxdPWUpOmZbbF09ZFt1XT17c3RhcnQ6bCxlbmQ6dSxyaW5nOltyLGNdfX1Rb1t1PDwzXS5mb3JFYWNoKHApfShuLGksKGZ1bmN0aW9uKHQpe3IodCxuLGkpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGgscj10W24tMV1bMV0qdFswXVswXS10W24tMV1bMF0qdFswXVsxXTsrK2U8bjspcis9dFtlLTFdWzFdKnRbZV1bMF0tdFtlLTFdWzBdKnRbZV1bMV07cmV0dXJuIHJ9KHQpPjA/YS5wdXNoKFt0XSk6cy5wdXNoKHQpfSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPWEubGVuZ3RoO248cjsrK24paWYoLTEhPT1WbygoZT1hW25dKVswXSx0KSlyZXR1cm4gdm9pZCBlLnB1c2godCl9KSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6aSxjb29yZGluYXRlczphfX1mdW5jdGlvbiBvKGUpe3JldHVybiAyKmVbMF0rZVsxXSoodCsxKSo0fWZ1bmN0aW9uIHMobixyLGkpe24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGEsbz1uWzBdLHM9blsxXSxjPTB8byxsPTB8cyx1PXJbbCp0K2NdO28+MCYmbzx0JiZjPT09byYmKGE9cltsKnQrYy0xXSxuWzBdPW8rKGktYSkvKHUtYSktLjUpLHM+MCYmczxlJiZsPT09cyYmKGE9clsobC0xKSp0K2NdLG5bMV09cysoaS1hKS8odS1hKS0uNSl9KSl9cmV0dXJuIGkuY29udG91cj1hLGkuc2l6ZT1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxlXTt2YXIgcj1NYXRoLmZsb29yKG5bMF0pLGE9TWF0aC5mbG9vcihuWzFdKTtpZighKHI+PTAmJmE+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9IbyhXby5jYWxsKHQpKTpIbyh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6Wm8saSk6cj09PXN9LGl9ZnVuY3Rpb24gSm8odCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxpOysrbylmb3IodmFyIHM9MCxjPTA7czxyK247KytzKXM8ciYmKGMrPXQuZGF0YVtzK28qcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW3MtYStvKnJdKSxlLmRhdGFbcy1uK28qcl09Yy9NYXRoLm1pbihzKzEsci0xK2EtcyxhKSl9ZnVuY3Rpb24gdHModCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxyOysrbylmb3IodmFyIHM9MCxjPTA7czxpK247KytzKXM8aSYmKGMrPXQuZGF0YVtvK3Mqcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW28rKHMtYSkqcl0pLGUuZGF0YVtvKyhzLW4pKnJdPWMvTWF0aC5taW4ocysxLGktMSthLXMsYSkpfWZ1bmN0aW9uIGVzKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHJzKCl7cmV0dXJuIDF9ZnVuY3Rpb24gaXMoKXt2YXIgdD1lcyxlPW5zLG49cnMscj05NjAsaT01MDAsYT0yMCxvPTIscz0zKmEsYz1yKzIqcz4+byxsPWkrMipzPj5vLHU9SG8oMjApO2Z1bmN0aW9uIGgocil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheShjKmwpLGg9bmV3IEZsb2F0MzJBcnJheShjKmwpLGQ9TWF0aC5wb3coMiwtbyk7ci5mb3JFYWNoKChmdW5jdGlvbihyLGEsbyl7dmFyIHU9KHQocixhLG8pK3MpKmQsaD0oZShyLGEsbykrcykqZCxmPStuKHIsYSxvKTtpZih1Pj0wJiZ1PGMmJmg+PTAmJmg8bCl7dmFyIHA9TWF0aC5mbG9vcih1KSxnPU1hdGguZmxvb3IoaCkseT11LXAtLjUsbT1oLWctLjU7aVtwK2cqY10rPSgxLXkpKigxLW0pKmYsaVtwKzErZypjXSs9eSooMS1tKSpmLGlbcCsxKyhnKzEpKmNdKz15Km0qZixpW3ArKGcrMSkqY10rPSgxLXkpKm0qZn19KSksSm8oe3dpZHRoOmMsaGVpZ2h0OmwsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6bCxkYXRhOmh9LGE+Pm8pLHRzKHt3aWR0aDpjLGhlaWdodDpsLGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OmwsZGF0YTppfSxhPj5vKSxKbyh7d2lkdGg6YyxoZWlnaHQ6bCxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDpsLGRhdGE6aH0sYT4+byksdHMoe3dpZHRoOmMsaGVpZ2h0OmwsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6bCxkYXRhOml9LGE+Pm8pLEpvKHt3aWR0aDpjLGhlaWdodDpsLGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OmwsZGF0YTpofSxhPj5vKSx0cyh7d2lkdGg6YyxoZWlnaHQ6bCxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDpsLGRhdGE6aX0sYT4+byk7dmFyIHA9dShpKTtpZighQXJyYXkuaXNBcnJheShwKSl7dmFyIGc9YXQoaSk7cD1ldCgwLGcscCksKHA9eHQoMCxNYXRoLmZsb29yKGcvcCkqcCxwKSkuc2hpZnQoKX1yZXR1cm4gS28oKS50aHJlc2hvbGRzKHApLnNpemUoW2MsbF0pKGkpLm1hcChmKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlKj1NYXRoLnBvdygyLC0yKm8pLHQuY29vcmRpbmF0ZXMuZm9yRWFjaChkKSx0fWZ1bmN0aW9uIGQodCl7dC5mb3JFYWNoKHApfWZ1bmN0aW9uIHAodCl7dC5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcodCl7dFswXT10WzBdKk1hdGgucG93KDIsbyktcyx0WzFdPXRbMV0qTWF0aC5wb3coMixvKS1zfWZ1bmN0aW9uIHkoKXtyZXR1cm4gYz1yKzIqKHM9MyphKT4+byxsPWkrMipzPj5vLGh9cmV0dXJuIGgueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkhvKCtlKSxoKTp0fSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIbygrdCksaCk6ZX0saC53ZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIbygrdCksaCk6bn0saC5zaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltyLGldO3ZhciBlPSt0WzBdLG49K3RbMV07aWYoIShlPj0wJiZuPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiByPWUsaT1uLHkoKX0saC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8bztpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHkoKX0saC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9IbyhXby5jYWxsKHQpKTpIbyh0KSxoKTp1fSxoLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KGEqKGErMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIGE9TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLHkoKX0saH1jb25zdCBhcz0xMzQyMTc3Mjk7ZnVuY3Rpb24gb3ModCxlLG4scixpKXtsZXQgYSxvLHMsYyxsPWVbMF0sdT1yWzBdLGg9MCxmPTA7dT5sPT11Pi1sPyhhPWwsbD1lWysraF0pOihhPXUsdT1yWysrZl0pO2xldCBkPTA7aWYoaDx0JiZmPG4pZm9yKHU+bD09dT4tbD8obz1sK2Escz1hLShvLWwpLGw9ZVsrK2hdKToobz11K2Escz1hLShvLXUpLHU9clsrK2ZdKSxhPW8sMCE9PXMmJihpW2QrK109cyk7aDx0JiZmPG47KXU+bD09dT4tbD8obz1hK2wsYz1vLWEscz1hLShvLWMpKyhsLWMpLGw9ZVsrK2hdKToobz1hK3UsYz1vLWEscz1hLShvLWMpKyh1LWMpLHU9clsrK2ZdKSxhPW8sMCE9PXMmJihpW2QrK109cyk7Zm9yKDtoPHQ7KW89YStsLGM9by1hLHM9YS0oby1jKSsobC1jKSxsPWVbKytoXSxhPW8sMCE9PXMmJihpW2QrK109cyk7Zm9yKDtmPG47KW89YSt1LGM9by1hLHM9YS0oby1jKSsodS1jKSx1PXJbKytmXSxhPW8sMCE9PXMmJihpW2QrK109cyk7cmV0dXJuIDA9PT1hJiYwIT09ZHx8KGlbZCsrXT1hKSxkfWZ1bmN0aW9uIHNzKHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KHQpfWNvbnN0IGNzPXNzKDQpLGxzPXNzKDgpLHVzPXNzKDEyKSxocz1zcygxNiksZnM9c3MoNCk7ZnVuY3Rpb24gZHModCxlLG4scixpLGEpe2NvbnN0IG89KGUtYSkqKG4taSkscz0odC1pKSooci1hKSxjPW8tcztpZigwPT09b3x8MD09PXN8fG8+MCE9cz4wKXJldHVybiBjO2NvbnN0IGw9TWF0aC5hYnMobytzKTtyZXR1cm4gTWF0aC5hYnMoYyk+PTMzMzA2NjkwNzM4NzU0NzE2ZS0zMipsP2M6LWZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe2xldCBzLGMsbCx1LGgsZixkLHAsZyx5LG0sYix2LF8seCxrLHcsVDtjb25zdCBFPXQtaSxDPW4taSxTPWUtYSxBPXItYTtfPUUqQSxmPWFzKkUsZD1mLShmLUUpLHA9RS1kLGY9YXMqQSxnPWYtKGYtQSkseT1BLWcseD1wKnktKF8tZCpnLXAqZy1kKnkpLGs9UypDLGY9YXMqUyxkPWYtKGYtUykscD1TLWQsZj1hcypDLGc9Zi0oZi1DKSx5PUMtZyx3PXAqeS0oay1kKmctcCpnLWQqeSksbT14LXcsaD14LW0sY3NbMF09eC0obStoKSsoaC13KSxiPV8rbSxoPWItXyx2PV8tKGItaCkrKG0taCksbT12LWssaD12LW0sY3NbMV09di0obStoKSsoaC1rKSxUPWIrbSxoPVQtYixjc1syXT1iLShULWgpKyhtLWgpLGNzWzNdPVQ7bGV0IE09ZnVuY3Rpb24odCxlKXtsZXQgbj1lWzBdO2ZvcihsZXQgdD0xO3Q8NDt0Kyspbis9ZVt0XTtyZXR1cm4gbn0oMCxjcyksTj0yMjIwNDQ2MDQ5MjUwMzE0NmUtMzIqbztpZihNPj1OfHwtTT49TilyZXR1cm4gTTtpZihoPXQtRSxzPXQtKEUraCkrKGgtaSksaD1uLUMsbD1uLShDK2gpKyhoLWkpLGg9ZS1TLGM9ZS0oUytoKSsoaC1hKSxoPXItQSx1PXItKEEraCkrKGgtYSksMD09PXMmJjA9PT1jJiYwPT09bCYmMD09PXUpcmV0dXJuIE07aWYoTj0xMTA5MzM1NjQ3OTY3MDQ4N2UtNDcqbyszMzMwNjY5MDczODc1NDcwNmUtMzIqTWF0aC5hYnMoTSksTSs9RSp1K0Eqcy0oUypsK0MqYyksTT49Tnx8LU0+PU4pcmV0dXJuIE07Xz1zKkEsZj1hcypzLGQ9Zi0oZi1zKSxwPXMtZCxmPWFzKkEsZz1mLShmLUEpLHk9QS1nLHg9cCp5LShfLWQqZy1wKmctZCp5KSxrPWMqQyxmPWFzKmMsZD1mLShmLWMpLHA9Yy1kLGY9YXMqQyxnPWYtKGYtQykseT1DLWcsdz1wKnktKGstZCpnLXAqZy1kKnkpLG09eC13LGg9eC1tLGZzWzBdPXgtKG0raCkrKGgtdyksYj1fK20saD1iLV8sdj1fLShiLWgpKyhtLWgpLG09di1rLGg9di1tLGZzWzFdPXYtKG0raCkrKGgtayksVD1iK20saD1ULWIsZnNbMl09Yi0oVC1oKSsobS1oKSxmc1szXT1UO2NvbnN0IE89b3MoNCxjcyw0LGZzLGxzKTtfPUUqdSxmPWFzKkUsZD1mLShmLUUpLHA9RS1kLGY9YXMqdSxnPWYtKGYtdSkseT11LWcseD1wKnktKF8tZCpnLXAqZy1kKnkpLGs9UypsLGY9YXMqUyxkPWYtKGYtUykscD1TLWQsZj1hcypsLGc9Zi0oZi1sKSx5PWwtZyx3PXAqeS0oay1kKmctcCpnLWQqeSksbT14LXcsaD14LW0sZnNbMF09eC0obStoKSsoaC13KSxiPV8rbSxoPWItXyx2PV8tKGItaCkrKG0taCksbT12LWssaD12LW0sZnNbMV09di0obStoKSsoaC1rKSxUPWIrbSxoPVQtYixmc1syXT1iLShULWgpKyhtLWgpLGZzWzNdPVQ7Y29uc3QgRD1vcyhPLGxzLDQsZnMsdXMpO189cyp1LGY9YXMqcyxkPWYtKGYtcykscD1zLWQsZj1hcyp1LGc9Zi0oZi11KSx5PXUtZyx4PXAqeS0oXy1kKmctcCpnLWQqeSksaz1jKmwsZj1hcypjLGQ9Zi0oZi1jKSxwPWMtZCxmPWFzKmwsZz1mLShmLWwpLHk9bC1nLHc9cCp5LShrLWQqZy1wKmctZCp5KSxtPXgtdyxoPXgtbSxmc1swXT14LShtK2gpKyhoLXcpLGI9XyttLGg9Yi1fLHY9Xy0oYi1oKSsobS1oKSxtPXYtayxoPXYtbSxmc1sxXT12LShtK2gpKyhoLWspLFQ9YittLGg9VC1iLGZzWzJdPWItKFQtaCkrKG0taCksZnNbM109VDtjb25zdCBCPW9zKEQsdXMsNCxmcyxocyk7cmV0dXJuIGhzW0ItMV19KHQsZSxuLHIsaSxhLGwpfXNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDgpLHNzKDgpLHNzKDgpLHNzKDQpLHNzKDgpLHNzKDgpLHNzKDgpLHNzKDEyKSxzcygxOTIpLHNzKDE5Miksc3MoNCksc3MoNCksc3MoNCksc3MoNCksc3MoNCksc3MoNCksc3MoNCksc3MoNCksc3MoOCksc3MoOCksc3MoOCksc3MoOCksc3MoOCksc3MoOCksc3MoOCksc3MoOCksc3MoOCksc3MoNCksc3MoNCksc3MoNCksc3MoOCksc3MoMTYpLHNzKDE2KSxzcygxNiksc3MoMzIpLHNzKDMyKSxzcyg0OCksc3MoNjQpLHNzKDExNTIpLHNzKDExNTIpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDQpLHNzKDI0KSxzcygyNCksc3MoMjQpLHNzKDI0KSxzcygyNCksc3MoMjQpLHNzKDI0KSxzcygyNCksc3MoMjQpLHNzKDI0KSxzcygxMTUyKSxzcygxMTUyKSxzcygxMTUyKSxzcygxMTUyKSxzcygxMTUyKSxzcygyMzA0KSxzcygyMzA0KSxzcygzNDU2KSxzcyg1NzYwKSxzcyg4KSxzcyg4KSxzcyg4KSxzcygxNiksc3MoMjQpLHNzKDQ4KSxzcyg0OCksc3MoOTYpLHNzKDE5Miksc3MoMzg0KSxzcygzODQpLHNzKDM4NCksc3MoNzY4KSxzcyg5Niksc3MoOTYpLHNzKDk2KSxzcygxMTUyKTtjb25zdCBwcz1NYXRoLnBvdygyLC01MiksZ3M9bmV3IFVpbnQzMkFycmF5KDUxMik7Y2xhc3MgeXN7c3RhdGljIGZyb20odCxlPWtzLG49d3Mpe2NvbnN0IHI9dC5sZW5ndGgsaT1uZXcgRmxvYXQ2NEFycmF5KDIqcik7Zm9yKGxldCBhPTA7YTxyO2ErKyl7Y29uc3Qgcj10W2FdO2lbMiphXT1lKHIpLGlbMiphKzFdPW4ocil9cmV0dXJuIG5ldyB5cyhpKX1jb25zdHJ1Y3Rvcih0KXtjb25zdCBlPXQubGVuZ3RoPj4xO2lmKGU+MCYmIm51bWJlciIhPXR5cGVvZiB0WzBdKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgY29vcmRzIHRvIGNvbnRhaW4gbnVtYmVycy4iKTt0aGlzLmNvb3Jkcz10O2NvbnN0IG49TWF0aC5tYXgoMiplLTUsMCk7dGhpcy5fdHJpYW5nbGVzPW5ldyBVaW50MzJBcnJheSgzKm4pLHRoaXMuX2hhbGZlZGdlcz1uZXcgSW50MzJBcnJheSgzKm4pLHRoaXMuX2hhc2hTaXplPU1hdGguY2VpbChNYXRoLnNxcnQoZSkpLHRoaXMuX2h1bGxQcmV2PW5ldyBVaW50MzJBcnJheShlKSx0aGlzLl9odWxsTmV4dD1uZXcgVWludDMyQXJyYXkoZSksdGhpcy5faHVsbFRyaT1uZXcgVWludDMyQXJyYXkoZSksdGhpcy5faHVsbEhhc2g9bmV3IEludDMyQXJyYXkodGhpcy5faGFzaFNpemUpLmZpbGwoLTEpLHRoaXMuX2lkcz1uZXcgVWludDMyQXJyYXkoZSksdGhpcy5fZGlzdHM9bmV3IEZsb2F0NjRBcnJheShlKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2NvbnN0e2Nvb3Jkczp0LF9odWxsUHJldjplLF9odWxsTmV4dDpuLF9odWxsVHJpOnIsX2h1bGxIYXNoOml9PXRoaXMsYT10Lmxlbmd0aD4+MTtsZXQgbz0xLzAscz0xLzAsYz0tMS8wLGw9LTEvMDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtjb25zdCBuPXRbMiplXSxyPXRbMiplKzFdO248byYmKG89bikscjxzJiYocz1yKSxuPmMmJihjPW4pLHI+bCYmKGw9ciksdGhpcy5faWRzW2VdPWV9Y29uc3QgdT0obytjKS8yLGg9KHMrbCkvMjtsZXQgZixkLHAsZz0xLzA7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3Qgbj1tcyh1LGgsdFsyKmVdLHRbMiplKzFdKTtuPGcmJihmPWUsZz1uKX1jb25zdCB5PXRbMipmXSxtPXRbMipmKzFdO2c9MS8wO2ZvcihsZXQgZT0wO2U8YTtlKyspe2lmKGU9PT1mKWNvbnRpbnVlO2NvbnN0IG49bXMoeSxtLHRbMiplXSx0WzIqZSsxXSk7bjxnJiZuPjAmJihkPWUsZz1uKX1sZXQgYj10WzIqZF0sdj10WzIqZCsxXSxfPTEvMDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtpZihlPT09Znx8ZT09PWQpY29udGludWU7Y29uc3Qgbj12cyh5LG0sYix2LHRbMiplXSx0WzIqZSsxXSk7bjxfJiYocD1lLF89bil9bGV0IHg9dFsyKnBdLGs9dFsyKnArMV07aWYoXz09PTEvMCl7Zm9yKGxldCBlPTA7ZTxhO2UrKyl0aGlzLl9kaXN0c1tlXT10WzIqZV0tdFswXXx8dFsyKmUrMV0tdFsxXTtfcyh0aGlzLl9pZHMsdGhpcy5fZGlzdHMsMCxhLTEpO2NvbnN0IGU9bmV3IFVpbnQzMkFycmF5KGEpO2xldCBuPTA7Zm9yKGxldCB0PTAscj0tMS8wO3Q8YTt0Kyspe2NvbnN0IGk9dGhpcy5faWRzW3RdO3RoaXMuX2Rpc3RzW2ldPnImJihlW24rK109aSxyPXRoaXMuX2Rpc3RzW2ldKX1yZXR1cm4gdGhpcy5odWxsPWUuc3ViYXJyYXkoMCxuKSx0aGlzLnRyaWFuZ2xlcz1uZXcgVWludDMyQXJyYXkoMCksdm9pZCh0aGlzLmhhbGZlZGdlcz1uZXcgVWludDMyQXJyYXkoMCkpfWlmKGRzKHksbSxiLHYseCxrKTwwKXtjb25zdCB0PWQsZT1iLG49djtkPXAsYj14LHY9ayxwPXQseD1lLGs9bn1jb25zdCB3PWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXtjb25zdCBvPW4tdCxzPXItZSxjPWktdCxsPWEtZSx1PW8qbytzKnMsaD1jKmMrbCpsLGY9LjUvKG8qbC1zKmMpO3JldHVybnt4OnQrKGwqdS1zKmgpKmYseTplKyhvKmgtYyp1KSpmfX0oeSxtLGIsdix4LGspO3RoaXMuX2N4PXcueCx0aGlzLl9jeT13Lnk7Zm9yKGxldCBlPTA7ZTxhO2UrKyl0aGlzLl9kaXN0c1tlXT1tcyh0WzIqZV0sdFsyKmUrMV0sdy54LHcueSk7X3ModGhpcy5faWRzLHRoaXMuX2Rpc3RzLDAsYS0xKSx0aGlzLl9odWxsU3RhcnQ9ZjtsZXQgVD0zO25bZl09ZVtwXT1kLG5bZF09ZVtmXT1wLG5bcF09ZVtkXT1mLHJbZl09MCxyW2RdPTEscltwXT0yLGkuZmlsbCgtMSksaVt0aGlzLl9oYXNoS2V5KHksbSldPWYsaVt0aGlzLl9oYXNoS2V5KGIsdildPWQsaVt0aGlzLl9oYXNoS2V5KHgsayldPXAsdGhpcy50cmlhbmdsZXNMZW49MCx0aGlzLl9hZGRUcmlhbmdsZShmLGQscCwtMSwtMSwtMSk7Zm9yKGxldCBhLG8scz0wO3M8dGhpcy5faWRzLmxlbmd0aDtzKyspe2NvbnN0IGM9dGhpcy5faWRzW3NdLGw9dFsyKmNdLHU9dFsyKmMrMV07aWYocz4wJiZNYXRoLmFicyhsLWEpPD1wcyYmTWF0aC5hYnModS1vKTw9cHMpY29udGludWU7aWYoYT1sLG89dSxjPT09Znx8Yz09PWR8fGM9PT1wKWNvbnRpbnVlO2xldCBoPTA7Zm9yKGxldCB0PTAsZT10aGlzLl9oYXNoS2V5KGwsdSk7dDx0aGlzLl9oYXNoU2l6ZSYmKGg9aVsoZSt0KSV0aGlzLl9oYXNoU2l6ZV0sLTE9PT1ofHxoPT09bltoXSk7dCsrKTtoPWVbaF07bGV0IGcseT1oO2Zvcig7Zz1uW3ldLGRzKGwsdSx0WzIqeV0sdFsyKnkrMV0sdFsyKmddLHRbMipnKzFdKT49MDspaWYoeT1nLHk9PT1oKXt5PS0xO2JyZWFrfWlmKC0xPT09eSljb250aW51ZTtsZXQgbT10aGlzLl9hZGRUcmlhbmdsZSh5LGMsblt5XSwtMSwtMSxyW3ldKTtyW2NdPXRoaXMuX2xlZ2FsaXplKG0rMiksclt5XT1tLFQrKztsZXQgYj1uW3ldO2Zvcig7Zz1uW2JdLGRzKGwsdSx0WzIqYl0sdFsyKmIrMV0sdFsyKmddLHRbMipnKzFdKTwwOyltPXRoaXMuX2FkZFRyaWFuZ2xlKGIsYyxnLHJbY10sLTEscltiXSkscltjXT10aGlzLl9sZWdhbGl6ZShtKzIpLG5bYl09YixULS0sYj1nO2lmKHk9PT1oKWZvcig7Zz1lW3ldLGRzKGwsdSx0WzIqZ10sdFsyKmcrMV0sdFsyKnldLHRbMip5KzFdKTwwOyltPXRoaXMuX2FkZFRyaWFuZ2xlKGcsYyx5LC0xLHJbeV0scltnXSksdGhpcy5fbGVnYWxpemUobSsyKSxyW2ddPW0sblt5XT15LFQtLSx5PWc7dGhpcy5faHVsbFN0YXJ0PWVbY109eSxuW3ldPWVbYl09YyxuW2NdPWIsaVt0aGlzLl9oYXNoS2V5KGwsdSldPWMsaVt0aGlzLl9oYXNoS2V5KHRbMip5XSx0WzIqeSsxXSldPXl9dGhpcy5odWxsPW5ldyBVaW50MzJBcnJheShUKTtmb3IobGV0IHQ9MCxlPXRoaXMuX2h1bGxTdGFydDt0PFQ7dCsrKXRoaXMuaHVsbFt0XT1lLGU9bltlXTt0aGlzLnRyaWFuZ2xlcz10aGlzLl90cmlhbmdsZXMuc3ViYXJyYXkoMCx0aGlzLnRyaWFuZ2xlc0xlbiksdGhpcy5oYWxmZWRnZXM9dGhpcy5faGFsZmVkZ2VzLnN1YmFycmF5KDAsdGhpcy50cmlhbmdsZXNMZW4pfV9oYXNoS2V5KHQsZSl7cmV0dXJuIE1hdGguZmxvb3IoZnVuY3Rpb24odCxlKXtjb25zdCBuPXQvKE1hdGguYWJzKHQpK01hdGguYWJzKGUpKTtyZXR1cm4oZT4wPzMtbjoxK24pLzR9KHQtdGhpcy5fY3gsZS10aGlzLl9jeSkqdGhpcy5faGFzaFNpemUpJXRoaXMuX2hhc2hTaXplfV9sZWdhbGl6ZSh0KXtjb25zdHtfdHJpYW5nbGVzOmUsX2hhbGZlZGdlczpuLGNvb3JkczpyfT10aGlzO2xldCBpPTAsYT0wO2Zvcig7Oyl7Y29uc3Qgbz1uW3RdLHM9dC10JTM7aWYoYT1zKyh0KzIpJTMsLTE9PT1vKXtpZigwPT09aSlicmVhazt0PWdzWy0taV07Y29udGludWV9Y29uc3QgYz1vLW8lMyxsPXMrKHQrMSklMyx1PWMrKG8rMiklMyxoPWVbYV0sZj1lW3RdLGQ9ZVtsXSxwPWVbdV07aWYoYnMoclsyKmhdLHJbMipoKzFdLHJbMipmXSxyWzIqZisxXSxyWzIqZF0sclsyKmQrMV0sclsyKnBdLHJbMipwKzFdKSl7ZVt0XT1wLGVbb109aDtjb25zdCByPW5bdV07aWYoLTE9PT1yKXtsZXQgZT10aGlzLl9odWxsU3RhcnQ7ZG97aWYodGhpcy5faHVsbFRyaVtlXT09PXUpe3RoaXMuX2h1bGxUcmlbZV09dDticmVha31lPXRoaXMuX2h1bGxQcmV2W2VdfXdoaWxlKGUhPT10aGlzLl9odWxsU3RhcnQpfXRoaXMuX2xpbmsodCxyKSx0aGlzLl9saW5rKG8sblthXSksdGhpcy5fbGluayhhLHUpO2NvbnN0IHM9YysobysxKSUzO2k8Z3MubGVuZ3RoJiYoZ3NbaSsrXT1zKX1lbHNle2lmKDA9PT1pKWJyZWFrO3Q9Z3NbLS1pXX19cmV0dXJuIGF9X2xpbmsodCxlKXt0aGlzLl9oYWxmZWRnZXNbdF09ZSwtMSE9PWUmJih0aGlzLl9oYWxmZWRnZXNbZV09dCl9X2FkZFRyaWFuZ2xlKHQsZSxuLHIsaSxhKXtjb25zdCBvPXRoaXMudHJpYW5nbGVzTGVuO3JldHVybiB0aGlzLl90cmlhbmdsZXNbb109dCx0aGlzLl90cmlhbmdsZXNbbysxXT1lLHRoaXMuX3RyaWFuZ2xlc1tvKzJdPW4sdGhpcy5fbGluayhvLHIpLHRoaXMuX2xpbmsobysxLGkpLHRoaXMuX2xpbmsobysyLGEpLHRoaXMudHJpYW5nbGVzTGVuKz0zLG99fWZ1bmN0aW9uIG1zKHQsZSxuLHIpe2NvbnN0IGk9dC1uLGE9ZS1yO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIGJzKHQsZSxuLHIsaSxhLG8scyl7Y29uc3QgYz10LW8sbD1lLXMsdT1uLW8saD1yLXMsZj1pLW8sZD1hLXMscD11KnUraCpoLGc9ZipmK2QqZDtyZXR1cm4gYyooaCpnLXAqZCktbCoodSpnLXAqZikrKGMqYytsKmwpKih1KmQtaCpmKTwwfWZ1bmN0aW9uIHZzKHQsZSxuLHIsaSxhKXtjb25zdCBvPW4tdCxzPXItZSxjPWktdCxsPWEtZSx1PW8qbytzKnMsaD1jKmMrbCpsLGY9LjUvKG8qbC1zKmMpLGQ9KGwqdS1zKmgpKmYscD0obypoLWMqdSkqZjtyZXR1cm4gZCpkK3AqcH1mdW5jdGlvbiBfcyh0LGUsbixyKXtpZihyLW48PTIwKWZvcihsZXQgaT1uKzE7aTw9cjtpKyspe2NvbnN0IHI9dFtpXSxhPWVbcl07bGV0IG89aS0xO2Zvcig7bz49biYmZVt0W29dXT5hOyl0W28rMV09dFtvLS1dO3RbbysxXT1yfWVsc2V7bGV0IGk9bisxLGE9cjt4cyh0LG4rcj4+MSxpKSxlW3Rbbl1dPmVbdFtyXV0mJnhzKHQsbixyKSxlW3RbaV1dPmVbdFtyXV0mJnhzKHQsaSxyKSxlW3Rbbl1dPmVbdFtpXV0mJnhzKHQsbixpKTtjb25zdCBvPXRbaV0scz1lW29dO2Zvcig7Oyl7ZG97aSsrfXdoaWxlKGVbdFtpXV08cyk7ZG97YS0tfXdoaWxlKGVbdFthXV0+cyk7aWYoYTxpKWJyZWFrO3hzKHQsaSxhKX10W24rMV09dFthXSx0W2FdPW8sci1pKzE+PWEtbj8oX3ModCxlLGksciksX3ModCxlLG4sYS0xKSk6KF9zKHQsZSxuLGEtMSksX3ModCxlLGkscikpfX1mdW5jdGlvbiB4cyh0LGUsbil7Y29uc3Qgcj10W2VdO3RbZV09dFtuXSx0W25dPXJ9ZnVuY3Rpb24ga3ModCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd3ModCl7cmV0dXJuIHRbMV19Y29uc3QgVHM9MWUtNjtjbGFzcyBFc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifW1vdmVUbyh0LGUpe3RoaXMuXys9YE0ke3RoaXMuX3gwPXRoaXMuX3gxPSt0fSwke3RoaXMuX3kwPXRoaXMuX3kxPStlfWB9Y2xvc2VQYXRoKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfWxpbmVUbyh0LGUpe3RoaXMuXys9YEwke3RoaXMuX3gxPSt0fSwke3RoaXMuX3kxPStlfWB9YXJjKHQsZSxuKXtjb25zdCByPSh0PSt0KSsobj0rbiksaT1lPStlO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1cyIpO251bGw9PT10aGlzLl94MT90aGlzLl8rPWBNJHtyfSwke2l9YDooTWF0aC5hYnModGhpcy5feDEtcik+VHN8fE1hdGguYWJzKHRoaXMuX3kxLWkpPlRzKSYmKHRoaXMuXys9IkwiK3IrIiwiK2kpLG4mJih0aGlzLl8rPWBBJHtufSwke259LDAsMSwxLCR7dC1ufSwke2V9QSR7bn0sJHtufSwwLDEsMSwke3RoaXMuX3gxPXJ9LCR7dGhpcy5feTE9aX1gKX1yZWN0KHQsZSxuLHIpe3RoaXMuXys9YE0ke3RoaXMuX3gwPXRoaXMuX3gxPSt0fSwke3RoaXMuX3kwPXRoaXMuX3kxPStlfWgkeytufXYkeytyfWgkey1ufVpgfXZhbHVlKCl7cmV0dXJuIHRoaXMuX3x8bnVsbH19Y2xhc3MgQ3N7Y29uc3RydWN0b3IoKXt0aGlzLl89W119bW92ZVRvKHQsZSl7dGhpcy5fLnB1c2goW3QsZV0pfWNsb3NlUGF0aCgpe3RoaXMuXy5wdXNoKHRoaXMuX1swXS5zbGljZSgpKX1saW5lVG8odCxlKXt0aGlzLl8ucHVzaChbdCxlXSl9dmFsdWUoKXtyZXR1cm4gdGhpcy5fLmxlbmd0aD90aGlzLl86bnVsbH19Y2xhc3MgU3N7Y29uc3RydWN0b3IodCxbZSxuLHIsaV09WzAsMCw5NjAsNTAwXSl7aWYoISgocj0rcik+PShlPStlKSYmKGk9K2kpPj0obj0rbikpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBib3VuZHMiKTt0aGlzLmRlbGF1bmF5PXQsdGhpcy5fY2lyY3VtY2VudGVycz1uZXcgRmxvYXQ2NEFycmF5KDIqdC5wb2ludHMubGVuZ3RoKSx0aGlzLnZlY3RvcnM9bmV3IEZsb2F0NjRBcnJheSgyKnQucG9pbnRzLmxlbmd0aCksdGhpcy54bWF4PXIsdGhpcy54bWluPWUsdGhpcy55bWF4PWksdGhpcy55bWluPW4sdGhpcy5faW5pdCgpfXVwZGF0ZSgpe3JldHVybiB0aGlzLmRlbGF1bmF5LnVwZGF0ZSgpLHRoaXMuX2luaXQoKSx0aGlzfV9pbml0KCl7Y29uc3R7ZGVsYXVuYXk6e3BvaW50czp0LGh1bGw6ZSx0cmlhbmdsZXM6bn0sdmVjdG9yczpyfT10aGlzLGk9dGhpcy5jaXJjdW1jZW50ZXJzPXRoaXMuX2NpcmN1bWNlbnRlcnMuc3ViYXJyYXkoMCxuLmxlbmd0aC8zKjIpO2ZvcihsZXQgZSxyLGE9MCxvPTAscz1uLmxlbmd0aDthPHM7YSs9MyxvKz0yKXtjb25zdCBzPTIqblthXSxjPTIqblthKzFdLGw9MipuW2ErMl0sdT10W3NdLGg9dFtzKzFdLGY9dFtjXSxkPXRbYysxXSxwPXRbbF0sZz10W2wrMV0seT1mLXUsbT1kLWgsYj1wLXUsdj1nLWgsXz0yKih5KnYtbSpiKTtpZihNYXRoLmFicyhfKTwxZS05KXtsZXQgaT0xZTk7Y29uc3QgYT0yKm5bMF07aSo9TWF0aC5zaWduKCh0W2FdLXUpKnYtKHRbYSsxXS1oKSpiKSxlPSh1K3ApLzItaSp2LHI9KGgrZykvMitpKmJ9ZWxzZXtjb25zdCB0PTEvXyxuPXkqeSttKm0saT1iKmIrdip2O2U9dSsodipuLW0qaSkqdCxyPWgrKHkqaS1iKm4pKnR9aVtvXT1lLGlbbysxXT1yfWxldCBhLG8scyxjPWVbZS5sZW5ndGgtMV0sbD00KmMsdT10WzIqY10saD10WzIqYysxXTtyLmZpbGwoMCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pYz1lW25dLGE9bCxvPXUscz1oLGw9NCpjLHU9dFsyKmNdLGg9dFsyKmMrMV0sclthKzJdPXJbbF09cy1oLHJbYSszXT1yW2wrMV09dS1vfXJlbmRlcih0KXtjb25zdCBlPW51bGw9PXQ/dD1uZXcgRXM6dm9pZCAwLHtkZWxhdW5heTp7aGFsZmVkZ2VzOm4saW5lZGdlczpyLGh1bGw6aX0sY2lyY3VtY2VudGVyczphLHZlY3RvcnM6b309dGhpcztpZihpLmxlbmd0aDw9MSlyZXR1cm4gbnVsbDtmb3IobGV0IGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2Upe2NvbnN0IHI9bltlXTtpZihyPGUpY29udGludWU7Y29uc3QgaT0yKk1hdGguZmxvb3IoZS8zKSxvPTIqTWF0aC5mbG9vcihyLzMpLHM9YVtpXSxjPWFbaSsxXSxsPWFbb10sdT1hW28rMV07dGhpcy5fcmVuZGVyU2VnbWVudChzLGMsbCx1LHQpfWxldCBzLGM9aVtpLmxlbmd0aC0xXTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoOysrZSl7cz1jLGM9aVtlXTtjb25zdCBuPTIqTWF0aC5mbG9vcihyW2NdLzMpLGw9YVtuXSx1PWFbbisxXSxoPTQqcyxmPXRoaXMuX3Byb2plY3QobCx1LG9baCsyXSxvW2grM10pO2YmJnRoaXMuX3JlbmRlclNlZ21lbnQobCx1LGZbMF0sZlsxXSx0KX1yZXR1cm4gZSYmZS52YWx1ZSgpfXJlbmRlckJvdW5kcyh0KXtjb25zdCBlPW51bGw9PXQ/dD1uZXcgRXM6dm9pZCAwO3JldHVybiB0LnJlY3QodGhpcy54bWluLHRoaXMueW1pbix0aGlzLnhtYXgtdGhpcy54bWluLHRoaXMueW1heC10aGlzLnltaW4pLGUmJmUudmFsdWUoKX1yZW5kZXJDZWxsKHQsZSl7Y29uc3Qgbj1udWxsPT1lP2U9bmV3IEVzOnZvaWQgMCxyPXRoaXMuX2NsaXAodCk7aWYobnVsbD09PXJ8fCFyLmxlbmd0aClyZXR1cm47ZS5tb3ZlVG8oclswXSxyWzFdKTtsZXQgaT1yLmxlbmd0aDtmb3IoO3JbMF09PT1yW2ktMl0mJnJbMV09PT1yW2ktMV0mJmk+MTspaS09Mjtmb3IobGV0IHQ9Mjt0PGk7dCs9MilyW3RdPT09clt0LTJdJiZyW3QrMV09PT1yW3QtMV18fGUubGluZVRvKHJbdF0sclt0KzFdKTtyZXR1cm4gZS5jbG9zZVBhdGgoKSxuJiZuLnZhbHVlKCl9KmNlbGxQb2x5Z29ucygpe2NvbnN0e2RlbGF1bmF5Ontwb2ludHM6dH19PXRoaXM7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aC8yO2U8bjsrK2Upe2NvbnN0IHQ9dGhpcy5jZWxsUG9seWdvbihlKTt0JiYodC5pbmRleD1lLHlpZWxkIHQpfX1jZWxsUG9seWdvbih0KXtjb25zdCBlPW5ldyBDcztyZXR1cm4gdGhpcy5yZW5kZXJDZWxsKHQsZSksZS52YWx1ZSgpfV9yZW5kZXJTZWdtZW50KHQsZSxuLHIsaSl7bGV0IGE7Y29uc3Qgbz10aGlzLl9yZWdpb25jb2RlKHQsZSkscz10aGlzLl9yZWdpb25jb2RlKG4scik7MD09PW8mJjA9PT1zPyhpLm1vdmVUbyh0LGUpLGkubGluZVRvKG4scikpOihhPXRoaXMuX2NsaXBTZWdtZW50KHQsZSxuLHIsbyxzKSkmJihpLm1vdmVUbyhhWzBdLGFbMV0pLGkubGluZVRvKGFbMl0sYVszXSkpfWNvbnRhaW5zKHQsZSxuKXtyZXR1cm4oZT0rZSk9PWUmJihuPStuKT09biYmdGhpcy5kZWxhdW5heS5fc3RlcCh0LGUsbik9PT10fSpuZWlnaGJvcnModCl7Y29uc3QgZT10aGlzLl9jbGlwKHQpO2lmKGUpZm9yKGNvbnN0IG4gb2YgdGhpcy5kZWxhdW5heS5uZWlnaGJvcnModCkpe2NvbnN0IHQ9dGhpcy5fY2xpcChuKTtpZih0KXQ6Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cis9Milmb3IobGV0IGE9MCxvPXQubGVuZ3RoO2E8bzthKz0yKWlmKGVbcl09PXRbYV0mJmVbcisxXT09dFthKzFdJiZlWyhyKzIpJWldPT10WyhhK28tMiklb10mJmVbKHIrMyklaV09PXRbKGErby0xKSVvXSl7eWllbGQgbjticmVhayB0fX19X2NlbGwodCl7Y29uc3R7Y2lyY3VtY2VudGVyczplLGRlbGF1bmF5OntpbmVkZ2VzOm4saGFsZmVkZ2VzOnIsdHJpYW5nbGVzOml9fT10aGlzLGE9blt0XTtpZigtMT09PWEpcmV0dXJuIG51bGw7Y29uc3Qgbz1bXTtsZXQgcz1hO2Rve2NvbnN0IG49TWF0aC5mbG9vcihzLzMpO2lmKG8ucHVzaChlWzIqbl0sZVsyKm4rMV0pLHM9cyUzPT0yP3MtMjpzKzEsaVtzXSE9PXQpYnJlYWs7cz1yW3NdfXdoaWxlKHMhPT1hJiYtMSE9PXMpO3JldHVybiBvfV9jbGlwKHQpe2lmKDA9PT10JiYxPT09dGhpcy5kZWxhdW5heS5odWxsLmxlbmd0aClyZXR1cm5bdGhpcy54bWF4LHRoaXMueW1pbix0aGlzLnhtYXgsdGhpcy55bWF4LHRoaXMueG1pbix0aGlzLnltYXgsdGhpcy54bWluLHRoaXMueW1pbl07Y29uc3QgZT10aGlzLl9jZWxsKHQpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2NvbnN0e3ZlY3RvcnM6bn09dGhpcyxyPTQqdDtyZXR1cm4gbltyXXx8bltyKzFdP3RoaXMuX2NsaXBJbmZpbml0ZSh0LGUsbltyXSxuW3IrMV0sbltyKzJdLG5bciszXSk6dGhpcy5fY2xpcEZpbml0ZSh0LGUpfV9jbGlwRmluaXRlKHQsZSl7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcixpLGEsbyxzPW51bGwsYz1lW24tMl0sbD1lW24tMV0sdT10aGlzLl9yZWdpb25jb2RlKGMsbCksaD0wO2ZvcihsZXQgZj0wO2Y8bjtmKz0yKWlmKHI9YyxpPWwsYz1lW2ZdLGw9ZVtmKzFdLGE9dSx1PXRoaXMuX3JlZ2lvbmNvZGUoYyxsKSwwPT09YSYmMD09PXUpbz1oLGg9MCxzP3MucHVzaChjLGwpOnM9W2MsbF07ZWxzZXtsZXQgZSxuLGYsZCxwO2lmKDA9PT1hKXtpZihudWxsPT09KGU9dGhpcy5fY2xpcFNlZ21lbnQocixpLGMsbCxhLHUpKSljb250aW51ZTtbbixmLGQscF09ZX1lbHNle2lmKG51bGw9PT0oZT10aGlzLl9jbGlwU2VnbWVudChjLGwscixpLHUsYSkpKWNvbnRpbnVlO1tkLHAsbixmXT1lLG89aCxoPXRoaXMuX2VkZ2Vjb2RlKG4sZiksbyYmaCYmdGhpcy5fZWRnZSh0LG8saCxzLHMubGVuZ3RoKSxzP3MucHVzaChuLGYpOnM9W24sZl19bz1oLGg9dGhpcy5fZWRnZWNvZGUoZCxwKSxvJiZoJiZ0aGlzLl9lZGdlKHQsbyxoLHMscy5sZW5ndGgpLHM/cy5wdXNoKGQscCk6cz1bZCxwXX1pZihzKW89aCxoPXRoaXMuX2VkZ2Vjb2RlKHNbMF0sc1sxXSksbyYmaCYmdGhpcy5fZWRnZSh0LG8saCxzLHMubGVuZ3RoKTtlbHNlIGlmKHRoaXMuY29udGFpbnModCwodGhpcy54bWluK3RoaXMueG1heCkvMiwodGhpcy55bWluK3RoaXMueW1heCkvMikpcmV0dXJuW3RoaXMueG1heCx0aGlzLnltaW4sdGhpcy54bWF4LHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWF4LHRoaXMueG1pbix0aGlzLnltaW5dO3JldHVybiBzfV9jbGlwU2VnbWVudCh0LGUsbixyLGksYSl7Zm9yKDs7KXtpZigwPT09aSYmMD09PWEpcmV0dXJuW3QsZSxuLHJdO2lmKGkmYSlyZXR1cm4gbnVsbDtsZXQgbyxzLGM9aXx8YTs4JmM/KG89dCsobi10KSoodGhpcy55bWF4LWUpLyhyLWUpLHM9dGhpcy55bWF4KTo0JmM/KG89dCsobi10KSoodGhpcy55bWluLWUpLyhyLWUpLHM9dGhpcy55bWluKToyJmM/KHM9ZSsoci1lKSoodGhpcy54bWF4LXQpLyhuLXQpLG89dGhpcy54bWF4KToocz1lKyhyLWUpKih0aGlzLnhtaW4tdCkvKG4tdCksbz10aGlzLnhtaW4pLGk/KHQ9byxlPXMsaT10aGlzLl9yZWdpb25jb2RlKHQsZSkpOihuPW8scj1zLGE9dGhpcy5fcmVnaW9uY29kZShuLHIpKX19X2NsaXBJbmZpbml0ZSh0LGUsbixyLGksYSl7bGV0IG8scz1BcnJheS5mcm9tKGUpO2lmKChvPXRoaXMuX3Byb2plY3Qoc1swXSxzWzFdLG4scikpJiZzLnVuc2hpZnQob1swXSxvWzFdKSwobz10aGlzLl9wcm9qZWN0KHNbcy5sZW5ndGgtMl0sc1tzLmxlbmd0aC0xXSxpLGEpKSYmcy5wdXNoKG9bMF0sb1sxXSkscz10aGlzLl9jbGlwRmluaXRlKHQscykpZm9yKGxldCBlLG49MCxyPXMubGVuZ3RoLGk9dGhpcy5fZWRnZWNvZGUoc1tyLTJdLHNbci0xXSk7bjxyO24rPTIpZT1pLGk9dGhpcy5fZWRnZWNvZGUoc1tuXSxzW24rMV0pLGUmJmkmJihuPXRoaXMuX2VkZ2UodCxlLGkscyxuKSxyPXMubGVuZ3RoKTtlbHNlIHRoaXMuY29udGFpbnModCwodGhpcy54bWluK3RoaXMueG1heCkvMiwodGhpcy55bWluK3RoaXMueW1heCkvMikmJihzPVt0aGlzLnhtaW4sdGhpcy55bWluLHRoaXMueG1heCx0aGlzLnltaW4sdGhpcy54bWF4LHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWF4XSk7cmV0dXJuIHN9X2VkZ2UodCxlLG4scixpKXtmb3IoO2UhPT1uOyl7bGV0IG4sYTtzd2l0Y2goZSl7Y2FzZSA1OmU9NDtjb250aW51ZTtjYXNlIDQ6ZT02LG49dGhpcy54bWF4LGE9dGhpcy55bWluO2JyZWFrO2Nhc2UgNjplPTI7Y29udGludWU7Y2FzZSAyOmU9MTAsbj10aGlzLnhtYXgsYT10aGlzLnltYXg7YnJlYWs7Y2FzZSAxMDplPTg7Y29udGludWU7Y2FzZSA4OmU9OSxuPXRoaXMueG1pbixhPXRoaXMueW1heDticmVhaztjYXNlIDk6ZT0xO2NvbnRpbnVlO2Nhc2UgMTplPTUsbj10aGlzLnhtaW4sYT10aGlzLnltaW59cltpXT09PW4mJnJbaSsxXT09PWF8fCF0aGlzLmNvbnRhaW5zKHQsbixhKXx8KHIuc3BsaWNlKGksMCxuLGEpLGkrPTIpfWlmKHIubGVuZ3RoPjQpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kz0yKXtjb25zdCBlPSh0KzIpJXIubGVuZ3RoLG49KHQrNCklci5sZW5ndGg7KHJbdF09PT1yW2VdJiZyW2VdPT09cltuXXx8clt0KzFdPT09cltlKzFdJiZyW2UrMV09PT1yW24rMV0pJiYoci5zcGxpY2UoZSwyKSx0LT0yKX1yZXR1cm4gaX1fcHJvamVjdCh0LGUsbixyKXtsZXQgaSxhLG8scz0xLzA7aWYocjwwKXtpZihlPD10aGlzLnltaW4pcmV0dXJuIG51bGw7KGk9KHRoaXMueW1pbi1lKS9yKTxzJiYobz10aGlzLnltaW4sYT10KyhzPWkpKm4pfWVsc2UgaWYocj4wKXtpZihlPj10aGlzLnltYXgpcmV0dXJuIG51bGw7KGk9KHRoaXMueW1heC1lKS9yKTxzJiYobz10aGlzLnltYXgsYT10KyhzPWkpKm4pfWlmKG4+MCl7aWYodD49dGhpcy54bWF4KXJldHVybiBudWxsOyhpPSh0aGlzLnhtYXgtdCkvbik8cyYmKGE9dGhpcy54bWF4LG89ZSsocz1pKSpyKX1lbHNlIGlmKG48MCl7aWYodDw9dGhpcy54bWluKXJldHVybiBudWxsOyhpPSh0aGlzLnhtaW4tdCkvbik8cyYmKGE9dGhpcy54bWluLG89ZSsocz1pKSpyKX1yZXR1cm5bYSxvXX1fZWRnZWNvZGUodCxlKXtyZXR1cm4odD09PXRoaXMueG1pbj8xOnQ9PT10aGlzLnhtYXg/MjowKXwoZT09PXRoaXMueW1pbj80OmU9PT10aGlzLnltYXg/ODowKX1fcmVnaW9uY29kZSh0LGUpe3JldHVybih0PHRoaXMueG1pbj8xOnQ+dGhpcy54bWF4PzI6MCl8KGU8dGhpcy55bWluPzQ6ZT50aGlzLnltYXg/ODowKX19Y29uc3QgQXM9MipNYXRoLlBJLE1zPU1hdGgucG93O2Z1bmN0aW9uIE5zKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIE9zKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIERzKHQsZSxuKXtyZXR1cm5bdCtNYXRoLnNpbih0K2UpKm4sZStNYXRoLmNvcyh0LWUpKm5dfWNsYXNzIEJze3N0YXRpYyBmcm9tKHQsZT1OcyxuPU9zLHIpe3JldHVybiBuZXcgQnMoImxlbmd0aCJpbiB0P2Z1bmN0aW9uKHQsZSxuLHIpe2NvbnN0IGk9dC5sZW5ndGgsYT1uZXcgRmxvYXQ2NEFycmF5KDIqaSk7Zm9yKGxldCBvPTA7bzxpOysrbyl7Y29uc3QgaT10W29dO2FbMipvXT1lLmNhbGwocixpLG8sdCksYVsyKm8rMV09bi5jYWxsKHIsaSxvLHQpfXJldHVybiBhfSh0LGUsbixyKTpGbG9hdDY0QXJyYXkuZnJvbShmdW5jdGlvbioodCxlLG4scil7bGV0IGk9MDtmb3IoY29uc3QgYSBvZiB0KXlpZWxkIGUuY2FsbChyLGEsaSx0KSx5aWVsZCBuLmNhbGwocixhLGksdCksKytpfSh0LGUsbixyKSkpfWNvbnN0cnVjdG9yKHQpe3RoaXMuX2RlbGF1bmF0b3I9bmV3IHlzKHQpLHRoaXMuaW5lZGdlcz1uZXcgSW50MzJBcnJheSh0Lmxlbmd0aC8yKSx0aGlzLl9odWxsSW5kZXg9bmV3IEludDMyQXJyYXkodC5sZW5ndGgvMiksdGhpcy5wb2ludHM9dGhpcy5fZGVsYXVuYXRvci5jb29yZHMsdGhpcy5faW5pdCgpfXVwZGF0ZSgpe3JldHVybiB0aGlzLl9kZWxhdW5hdG9yLnVwZGF0ZSgpLHRoaXMuX2luaXQoKSx0aGlzfV9pbml0KCl7Y29uc3QgdD10aGlzLl9kZWxhdW5hdG9yLGU9dGhpcy5wb2ludHM7aWYodC5odWxsJiZ0Lmh1bGwubGVuZ3RoPjImJmZ1bmN0aW9uKHQpe2NvbnN0e3RyaWFuZ2xlczplLGNvb3JkczpufT10O2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCs9Myl7Y29uc3Qgcj0yKmVbdF0saT0yKmVbdCsxXSxhPTIqZVt0KzJdO2lmKChuW2FdLW5bcl0pKihuW2krMV0tbltyKzFdKS0obltpXS1uW3JdKSooblthKzFdLW5bcisxXSk+MWUtMTApcmV0dXJuITF9cmV0dXJuITB9KHQpKXt0aGlzLmNvbGxpbmVhcj1JbnQzMkFycmF5LmZyb20oe2xlbmd0aDplLmxlbmd0aC8yfSwoKHQsZSk9PmUpKS5zb3J0KCgodCxuKT0+ZVsyKnRdLWVbMipuXXx8ZVsyKnQrMV0tZVsyKm4rMV0pKTtjb25zdCB0PXRoaXMuY29sbGluZWFyWzBdLG49dGhpcy5jb2xsaW5lYXJbdGhpcy5jb2xsaW5lYXIubGVuZ3RoLTFdLHI9W2VbMip0XSxlWzIqdCsxXSxlWzIqbl0sZVsyKm4rMV1dLGk9MWUtOCpNYXRoLmh5cG90KHJbM10tclsxXSxyWzJdLXJbMF0pO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGgvMjt0PG47Kyt0KXtjb25zdCBuPURzKGVbMip0XSxlWzIqdCsxXSxpKTtlWzIqdF09blswXSxlWzIqdCsxXT1uWzFdfXRoaXMuX2RlbGF1bmF0b3I9bmV3IHlzKGUpfWVsc2UgZGVsZXRlIHRoaXMuY29sbGluZWFyO2NvbnN0IG49dGhpcy5oYWxmZWRnZXM9dGhpcy5fZGVsYXVuYXRvci5oYWxmZWRnZXMscj10aGlzLmh1bGw9dGhpcy5fZGVsYXVuYXRvci5odWxsLGk9dGhpcy50cmlhbmdsZXM9dGhpcy5fZGVsYXVuYXRvci50cmlhbmdsZXMsYT10aGlzLmluZWRnZXMuZmlsbCgtMSksbz10aGlzLl9odWxsSW5kZXguZmlsbCgtMSk7Zm9yKGxldCB0PTAsZT1uLmxlbmd0aDt0PGU7Kyt0KXtjb25zdCBlPWlbdCUzPT0yP3QtMjp0KzFdOy0xIT09blt0XSYmLTEhPT1hW2VdfHwoYVtlXT10KX1mb3IobGV0IHQ9MCxlPXIubGVuZ3RoO3Q8ZTsrK3Qpb1tyW3RdXT10O3IubGVuZ3RoPD0yJiZyLmxlbmd0aD4wJiYodGhpcy50cmlhbmdsZXM9bmV3IEludDMyQXJyYXkoMykuZmlsbCgtMSksdGhpcy5oYWxmZWRnZXM9bmV3IEludDMyQXJyYXkoMykuZmlsbCgtMSksdGhpcy50cmlhbmdsZXNbMF09clswXSxhW3JbMF1dPTEsMj09PXIubGVuZ3RoJiYoYVtyWzFdXT0wLHRoaXMudHJpYW5nbGVzWzFdPXJbMV0sdGhpcy50cmlhbmdsZXNbMl09clsxXSkpfXZvcm9ub2kodCl7cmV0dXJuIG5ldyBTcyh0aGlzLHQpfSpuZWlnaGJvcnModCl7Y29uc3R7aW5lZGdlczplLGh1bGw6bixfaHVsbEluZGV4OnIsaGFsZmVkZ2VzOmksdHJpYW5nbGVzOmEsY29sbGluZWFyOm99PXRoaXM7aWYobyl7Y29uc3QgZT1vLmluZGV4T2YodCk7cmV0dXJuIGU+MCYmKHlpZWxkIG9bZS0xXSksdm9pZChlPG8ubGVuZ3RoLTEmJih5aWVsZCBvW2UrMV0pKX1jb25zdCBzPWVbdF07aWYoLTE9PT1zKXJldHVybjtsZXQgYz1zLGw9LTE7ZG97aWYoeWllbGQgbD1hW2NdLGM9YyUzPT0yP2MtMjpjKzEsYVtjXSE9PXQpcmV0dXJuO2lmKGM9aVtjXSwtMT09PWMpe2NvbnN0IGU9blsoclt0XSsxKSVuLmxlbmd0aF07cmV0dXJuIHZvaWQoZSE9PWwmJih5aWVsZCBlKSl9fXdoaWxlKGMhPT1zKX1maW5kKHQsZSxuPTApe2lmKCh0PSt0KSE9dHx8KGU9K2UpIT1lKXJldHVybi0xO2NvbnN0IHI9bjtsZXQgaTtmb3IoOyhpPXRoaXMuX3N0ZXAobix0LGUpKT49MCYmaSE9PW4mJmkhPT1yOyluPWk7cmV0dXJuIGl9X3N0ZXAodCxlLG4pe2NvbnN0e2luZWRnZXM6cixodWxsOmksX2h1bGxJbmRleDphLGhhbGZlZGdlczpvLHRyaWFuZ2xlczpzLHBvaW50czpjfT10aGlzO2lmKC0xPT09clt0XXx8IWMubGVuZ3RoKXJldHVybih0KzEpJShjLmxlbmd0aD4+MSk7bGV0IGw9dCx1PU1zKGUtY1syKnRdLDIpK01zKG4tY1syKnQrMV0sMik7Y29uc3QgaD1yW3RdO2xldCBmPWg7ZG97bGV0IHI9c1tmXTtjb25zdCBoPU1zKGUtY1syKnJdLDIpK01zKG4tY1syKnIrMV0sMik7aWYoaDx1JiYodT1oLGw9ciksZj1mJTM9PTI/Zi0yOmYrMSxzW2ZdIT09dClicmVhaztpZihmPW9bZl0sLTE9PT1mKXtpZihmPWlbKGFbdF0rMSklaS5sZW5ndGhdLGYhPT1yJiZNcyhlLWNbMipmXSwyKStNcyhuLWNbMipmKzFdLDIpPHUpcmV0dXJuIGY7YnJlYWt9fXdoaWxlKGYhPT1oKTtyZXR1cm4gbH1yZW5kZXIodCl7Y29uc3QgZT1udWxsPT10P3Q9bmV3IEVzOnZvaWQgMCx7cG9pbnRzOm4saGFsZmVkZ2VzOnIsdHJpYW5nbGVzOml9PXRoaXM7Zm9yKGxldCBlPTAsYT1yLmxlbmd0aDtlPGE7KytlKXtjb25zdCBhPXJbZV07aWYoYTxlKWNvbnRpbnVlO2NvbnN0IG89MippW2VdLHM9MippW2FdO3QubW92ZVRvKG5bb10sbltvKzFdKSx0LmxpbmVUbyhuW3NdLG5bcysxXSl9cmV0dXJuIHRoaXMucmVuZGVySHVsbCh0KSxlJiZlLnZhbHVlKCl9cmVuZGVyUG9pbnRzKHQsZSl7dm9pZCAwIT09ZXx8dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubW92ZVRvfHwoZT10LHQ9bnVsbCksZT1udWxsPT1lPzI6K2U7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IEVzOnZvaWQgMCx7cG9pbnRzOnJ9PXRoaXM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bis9Mil7Y29uc3QgaT1yW25dLGE9cltuKzFdO3QubW92ZVRvKGkrZSxhKSx0LmFyYyhpLGEsZSwwLEFzKX1yZXR1cm4gbiYmbi52YWx1ZSgpfXJlbmRlckh1bGwodCl7Y29uc3QgZT1udWxsPT10P3Q9bmV3IEVzOnZvaWQgMCx7aHVsbDpuLHBvaW50czpyfT10aGlzLGk9MipuWzBdLGE9bi5sZW5ndGg7dC5tb3ZlVG8ocltpXSxyW2krMV0pO2ZvcihsZXQgZT0xO2U8YTsrK2Upe2NvbnN0IGk9MipuW2VdO3QubGluZVRvKHJbaV0scltpKzFdKX1yZXR1cm4gdC5jbG9zZVBhdGgoKSxlJiZlLnZhbHVlKCl9aHVsbFBvbHlnb24oKXtjb25zdCB0PW5ldyBDcztyZXR1cm4gdGhpcy5yZW5kZXJIdWxsKHQpLHQudmFsdWUoKX1yZW5kZXJUcmlhbmdsZSh0LGUpe2NvbnN0IG49bnVsbD09ZT9lPW5ldyBFczp2b2lkIDAse3BvaW50czpyLHRyaWFuZ2xlczppfT10aGlzLGE9MippW3QqPTNdLG89MippW3QrMV0scz0yKmlbdCsyXTtyZXR1cm4gZS5tb3ZlVG8oclthXSxyW2ErMV0pLGUubGluZVRvKHJbb10scltvKzFdKSxlLmxpbmVUbyhyW3NdLHJbcysxXSksZS5jbG9zZVBhdGgoKSxuJiZuLnZhbHVlKCl9KnRyaWFuZ2xlUG9seWdvbnMoKXtjb25zdHt0cmlhbmdsZXM6dH09dGhpcztmb3IobGV0IGU9MCxuPXQubGVuZ3RoLzM7ZTxuOysrZSl5aWVsZCB0aGlzLnRyaWFuZ2xlUG9seWdvbihlKX10cmlhbmdsZVBvbHlnb24odCl7Y29uc3QgZT1uZXcgQ3M7cmV0dXJuIHRoaXMucmVuZGVyVHJpYW5nbGUodCxlKSxlLnZhbHVlKCl9fWNvbnN0IExzPXQ9PigpPT50O2Z1bmN0aW9uIElzKHQse3NvdXJjZUV2ZW50OmUsc3ViamVjdDpuLHRhcmdldDpyLGlkZW50aWZpZXI6aSxhY3RpdmU6YSx4Om8seTpzLGR4OmMsZHk6bCxkaXNwYXRjaDp1fSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHN1YmplY3Q6e3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saWRlbnRpZmllcjp7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sYWN0aXZlOnt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx4Ont2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx5Ont2YWx1ZTpzLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkeDp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sZHk6e3ZhbHVlOmwsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOnV9fSl9ZnVuY3Rpb24gRnModCl7cmV0dXJuIXQuY3RybEtleSYmIXQuYnV0dG9ufWZ1bmN0aW9uIFJzKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBQcyh0LGUpe3JldHVybiBudWxsPT1lP3t4OnQueCx5OnQueX06ZX1mdW5jdGlvbiBqcygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiB6cygpe3ZhciB0LGUsbixyLGk9RnMsYT1ScyxvPVBzLHM9anMsYz17fSxsPWZlKCJzdGFydCIsImRyYWciLCJlbmQiKSx1PTAsaD0wO2Z1bmN0aW9uIGYodCl7dC5vbigibW91c2Vkb3duLmRyYWciLGQpLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIix5KS5vbigidG91Y2htb3ZlLmRyYWciLG0sTm4pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGIpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkKG8scyl7aWYoIXImJmkuY2FsbCh0aGlzLG8scykpe3ZhciBjPXYodGhpcyxhLmNhbGwodGhpcyxvLHMpLG8scywibW91c2UiKTtjJiYoTW4oby52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHAsT24pLm9uKCJtb3VzZXVwLmRyYWciLGcsT24pLExuKG8udmlldyksRG4obyksbj0hMSx0PW8uY2xpZW50WCxlPW8uY2xpZW50WSxjKCJzdGFydCIsbykpfX1mdW5jdGlvbiBwKHIpe2lmKEJuKHIpLCFuKXt2YXIgaT1yLmNsaWVudFgtdCxhPXIuY2xpZW50WS1lO249aSppK2EqYT5ofWMubW91c2UoImRyYWciLHIpfWZ1bmN0aW9uIGcodCl7TW4odC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxJbih0LnZpZXcsbiksQm4odCksYy5tb3VzZSgiZW5kIix0KX1mdW5jdGlvbiB5KHQsZSl7aWYoaS5jYWxsKHRoaXMsdCxlKSl7dmFyIG4scixvPXQuY2hhbmdlZFRvdWNoZXMscz1hLmNhbGwodGhpcyx0LGUpLGM9by5sZW5ndGg7Zm9yKG49MDtuPGM7KytuKShyPXYodGhpcyxzLHQsZSxvW25dLmlkZW50aWZpZXIsb1tuXSkpJiYoRG4odCkscigic3RhcnQiLHQsb1tuXSkpfX1mdW5jdGlvbiBtKHQpe3ZhciBlLG4scj10LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKGU9MDtlPGk7KytlKShuPWNbcltlXS5pZGVudGlmaWVyXSkmJihCbih0KSxuKCJkcmFnIix0LHJbZV0pKX1mdW5jdGlvbiBiKHQpe3ZhciBlLG4saT10LmNoYW5nZWRUb3VjaGVzLGE9aS5sZW5ndGg7Zm9yKHImJmNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cj1udWxsfSksNTAwKSxlPTA7ZTxhOysrZSkobj1jW2lbZV0uaWRlbnRpZmllcl0pJiYoRG4odCksbigiZW5kIix0LGlbZV0pKX1mdW5jdGlvbiB2KHQsZSxuLHIsaSxhKXt2YXIgcyxoLGQscD1sLmNvcHkoKSxnPVJyKGF8fG4sZSk7aWYobnVsbCE9KGQ9by5jYWxsKHQsbmV3IElzKCJiZWZvcmVzdGFydCIse3NvdXJjZUV2ZW50Om4sdGFyZ2V0OmYsaWRlbnRpZmllcjppLGFjdGl2ZTp1LHg6Z1swXSx5OmdbMV0sZHg6MCxkeTowLGRpc3BhdGNoOnB9KSxyKSkpcmV0dXJuIHM9ZC54LWdbMF18fDAsaD1kLnktZ1sxXXx8MCxmdW5jdGlvbiBuKGEsbyxsKXt2YXIgeSxtPWc7c3dpdGNoKGEpe2Nhc2Uic3RhcnQiOmNbaV09bix5PXUrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGNbaV0sLS11O2Nhc2UiZHJhZyI6Zz1ScihsfHxvLGUpLHk9dX1wLmNhbGwoYSx0LG5ldyBJcyhhLHtzb3VyY2VFdmVudDpvLHN1YmplY3Q6ZCx0YXJnZXQ6ZixpZGVudGlmaWVyOmksYWN0aXZlOnkseDpnWzBdK3MseTpnWzFdK2gsZHg6Z1swXS1tWzBdLGR5OmdbMV0tbVsxXSxkaXNwYXRjaDpwfSkscil9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzKCEhdCksZik6aX0sZi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMcyh0KSxmKTphfSxmLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMcyh0KSxmKTpvfSxmLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxzKCEhdCksZik6c30sZi5vbj1mdW5jdGlvbigpe3ZhciB0PWwub24uYXBwbHkobCxhcmd1bWVudHMpO3JldHVybiB0PT09bD9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxmKTpNYXRoLnNxcnQoaCl9LGZ9SXMucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIFlzPXt9LFVzPXt9O2Z1bmN0aW9uICRzKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyddIHx8ICIiJ30pKS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBXcyh0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pKSxufWZ1bmN0aW9uIHFzKHQsZSl7dmFyIG49dCsiIixyPW4ubGVuZ3RoO3JldHVybiByPGU/bmV3IEFycmF5KGUtcisxKS5qb2luKDApK246bn1mdW5jdGlvbiBIcyh0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxhPXQubGVuZ3RoLG89MCxzPTAsYz1hPD0wLGw9ITE7ZnVuY3Rpb24gdSgpe2lmKGMpcmV0dXJuIFVzO2lmKGwpcmV0dXJuIGw9ITEsWXM7dmFyIGUscixpPW87aWYoMzQ9PT10LmNoYXJDb2RlQXQoaSkpe2Zvcig7bysrPGEmJjM0IT09dC5jaGFyQ29kZUF0KG8pfHwzND09PXQuY2hhckNvZGVBdCgrK28pOyk7cmV0dXJuKGU9byk+PWE/Yz0hMDoxMD09PShyPXQuY2hhckNvZGVBdChvKyspKT9sPSEwOjEzPT09ciYmKGw9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbyksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtvPGE7KXtpZigxMD09PShyPXQuY2hhckNvZGVBdChlPW8rKykpKWw9ITA7ZWxzZSBpZigxMz09PXIpbD0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gYz0hMCx0LnNsaWNlKGksYSl9Zm9yKDEwPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYSwxMz09PXQuY2hhckNvZGVBdChhLTEpJiYtLWE7KHI9dSgpKSE9PVVzOyl7Zm9yKHZhciBoPVtdO3IhPT1ZcyYmciE9PVVzOyloLnB1c2gocikscj11KCk7ZSYmbnVsbD09KGg9ZShoLHMrKykpfHxpLnB1c2goaCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjp0IGluc3RhbmNlb2YgRGF0ZT9mdW5jdGlvbih0KXt2YXIgZT10LmdldFVUQ0hvdXJzKCksbj10LmdldFVUQ01pbnV0ZXMoKSxyPXQuZ2V0VVRDU2Vjb25kcygpLGk9dC5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4odCk/IkludmFsaWQgRGF0ZSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8iLSIrcXMoLXQsNik6dD45OTk5PyIrIitxcyh0LDYpOnFzKHQsNCl9KHQuZ2V0VVRDRnVsbFllYXIoKSkrIi0iK3FzKHQuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitxcyh0LmdldFVUQ0RhdGUoKSwyKSsoaT8iVCIrcXMoZSwyKSsiOiIrcXMobiwyKSsiOiIrcXMociwyKSsiLiIrcXMoaSwzKSsiWiI6cj8iVCIrcXMoZSwyKSsiOiIrcXMobiwyKSsiOiIrcXMociwyKSsiWiI6bnx8ZT8iVCIrcXMoZSwyKSsiOiIrcXMobiwyKSsiWiI6IiIpfSh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLGE9cih0LChmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj0kcyh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOiRzKHQpfSkpO3JldHVybiBhLmNvbHVtbnM9aXx8W10sYX0scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPVdzKGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGkoZSxuKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lJiYoZT1Xcyh0KSksaSh0LGUpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGEpLmpvaW4oIlxuIil9LGZvcm1hdFJvdzphLGZvcm1hdFZhbHVlOm99fXZhciBWcz1IcygiLCIpLEdzPVZzLnBhcnNlLFhzPVZzLnBhcnNlUm93cyxacz1Wcy5mb3JtYXQsUXM9VnMuZm9ybWF0Qm9keSxLcz1Wcy5mb3JtYXRSb3dzLEpzPVZzLmZvcm1hdFJvdyx0Yz1Wcy5mb3JtYXRWYWx1ZSxlYz1IcygiXHQiKSxuYz1lYy5wYXJzZSxyYz1lYy5wYXJzZVJvd3MsaWM9ZWMuZm9ybWF0LGFjPWVjLmZvcm1hdEJvZHksb2M9ZWMuZm9ybWF0Um93cyxzYz1lYy5mb3JtYXRSb3csY2M9ZWMuZm9ybWF0VmFsdWU7ZnVuY3Rpb24gbGModCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuLHIsaT10W2VdLnRyaW0oKTtpZihpKWlmKCJ0cnVlIj09PWkpaT0hMDtlbHNlIGlmKCJmYWxzZSI9PT1pKWk9ITE7ZWxzZSBpZigiTmFOIj09PWkpaT1OYU47ZWxzZSBpZihpc05hTihuPStpKSl7aWYoIShyPWkubWF0Y2goL14oWy0rXVxkezJ9KT9cZHs0fSgtXGR7Mn0oLVxkezJ9KT8pPyhUXGR7Mn06XGR7Mn0oOlxkezJ9KFwuXGR7M30pPyk/KFp8Wy0rXVxkezJ9OlxkezJ9KT8pPyQvKSkpY29udGludWU7dWMmJnJbNF0mJiFyWzddJiYoaT1pLnJlcGxhY2UoLy0vZywiLyIpLnJlcGxhY2UoL1QvLCIgIikpLGk9bmV3IERhdGUoaSl9ZWxzZSBpPW47ZWxzZSBpPW51bGw7dFtlXT1pfXJldHVybiB0fWNvbnN0IHVjPW5ldyBEYXRlKCIyMDE5LTAxLTAxVDAwOjAwIikuZ2V0SG91cnMoKXx8bmV3IERhdGUoIjIwMTktMDctMDFUMDA6MDAiKS5nZXRIb3VycygpLGhjPXQ9Pit0O2Z1bmN0aW9uIGZjKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gZGModCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gcGModCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9dmFyIGdjPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMykseWM9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksbWM9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksYmM9TWF0aC5QSSx2Yz1iYy8yO2Z1bmN0aW9uIF9jKHQpe3JldHVybiAxPT0rdD8xOjEtTWF0aC5jb3ModCp2Yyl9ZnVuY3Rpb24geGModCl7cmV0dXJuIE1hdGguc2luKHQqdmMpfWZ1bmN0aW9uIGtjKHQpe3JldHVybigxLU1hdGguY29zKGJjKnQpKS8yfWZ1bmN0aW9uIHdjKHQpe3JldHVybiAxLjAwMDk3NzUxNzEwNjU0OTQqKE1hdGgucG93KDIsLTEwKnQpLS4wMDA5NzY1NjI1KX1mdW5jdGlvbiBUYyh0KXtyZXR1cm4gd2MoMS0rdCl9ZnVuY3Rpb24gRWModCl7cmV0dXJuIDEtd2ModCl9ZnVuY3Rpb24gQ2ModCl7cmV0dXJuKCh0Kj0yKTw9MT93YygxLXQpOjItd2ModC0xKSkvMn1mdW5jdGlvbiBTYyh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIEFjKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIE1jKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfXZhciBOYz03LjU2MjU7ZnVuY3Rpb24gT2ModCl7cmV0dXJuIDEtRGMoMS10KX1mdW5jdGlvbiBEYyh0KXtyZXR1cm4odD0rdCk8LjM2MzYzNjM2MzYzNjM2MzY1P05jKnQqdDp0PC43MjcyNzI3MjcyNzI3MjczP05jKih0LT0uNTQ1NDU0NTQ1NDU0NTQ1NCkqdCsuNzU6dDwuOTA5MDkwOTA5MDkwOTA5MT9OYyoodC09LjgxODE4MTgxODE4MTgxODIpKnQrLjkzNzU6TmMqKHQtPS45NTQ1NDU0NTQ1NDU0NTQ2KSp0Ky45ODQzNzV9ZnVuY3Rpb24gQmModCl7cmV0dXJuKCh0Kj0yKTw9MT8xLURjKDEtdCk6RGModC0xKSsxKS8yfXZhciBMYz0xLjcwMTU4LEljPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4odD0rdCkqdCooZSoodC0xKSt0KX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KExjKSxGYz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKCh0KzEpKmUrdCkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KExjKSxSYz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oTGMpLFBjPTIqTWF0aC5QSSxqYz1mdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1QYyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZSp3YygtIC0tdCkqTWF0aC5zaW4oKHItdCkvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipQYyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLHpjPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVBjKTtmdW5jdGlvbiBpKHQpe3JldHVybiAxLWUqd2ModD0rdCkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipQYyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLFljPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVBjKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKndjKC10KSpNYXRoLnNpbigoci10KS9uKToyLWUqd2ModCkqTWF0aC5zaW4oKHIrdCkvbikpLzJ9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipQYyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpO2Z1bmN0aW9uIFVjKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9ZnVuY3Rpb24gJGModCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKFVjKX1mdW5jdGlvbiBXYyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBxYyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oV2MpfWZ1bmN0aW9uIEhjKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9ZnVuY3Rpb24gVmModCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKEhjKX1mdW5jdGlvbiBHYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApLFZjKGUsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxyKX0pKX19ZnVuY3Rpb24gWGModCxlLG4scil7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKTt2YXIgaT1Icyh0KTtyZXR1cm4gVmMoZSxuKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJzZSh0LHIpfSkpfXZhciBaYz1HYyhHcyksUWM9R2MobmMpO2Z1bmN0aW9uIEtjKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe3ZhciBpPW5ldyBJbWFnZTtmb3IodmFyIGEgaW4gZSlpW2FdPWVbYV07aS5vbmVycm9yPXIsaS5vbmxvYWQ9ZnVuY3Rpb24oKXtuKGkpfSxpLnNyYz10fSkpfWZ1bmN0aW9uIEpjKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtpZigyMDQhPT10LnN0YXR1cyYmMjA1IT09dC5zdGF0dXMpcmV0dXJuIHQuanNvbigpfWZ1bmN0aW9uIHRsKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihKYyl9ZnVuY3Rpb24gZWwodCl7cmV0dXJuKGUsbik9PlZjKGUsbikudGhlbigoZT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpKSl9Y29uc3Qgbmw9ZWwoImFwcGxpY2F0aW9uL3htbCIpO3ZhciBybD1lbCgidGV4dC9odG1sIiksaWw9ZWwoImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBhbCh0LGUpe3ZhciBuLHI9MTtmdW5jdGlvbiBpKCl7dmFyIGksYSxvPW4ubGVuZ3RoLHM9MCxjPTA7Zm9yKGk9MDtpPG87KytpKXMrPShhPW5baV0pLngsYys9YS55O2ZvcihzPShzL28tdCkqcixjPShjL28tZSkqcixpPTA7aTxvOysraSkoYT1uW2ldKS54LT1zLGEueS09Y31yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09ZSYmKGU9MCksaS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dH0saS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLGkpOnR9LGkueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxpKTplfSxpLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGkpOnJ9LGl9ZnVuY3Rpb24gb2wodCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLGEsbyxzLGMsbCx1LGgsZixkPXQuX3Jvb3QscD17ZGF0YTpyfSxnPXQuX3gwLHk9dC5feTAsbT10Ll94MSxiPXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigobD1lPj0oYT0oZyttKS8yKSk/Zz1hOm09YSwodT1uPj0obz0oeStiKS8yKSk/eT1vOmI9byxpPWQsIShkPWRbaD11PDwxfGxdKSlyZXR1cm4gaVtoXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2hdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChsPWU+PShhPShnK20pLzIpKT9nPWE6bT1hLCh1PW4+PShvPSh5K2IpLzIpKT95PW86Yj1vfXdoaWxlKChoPXU8PDF8bCk9PShmPShjPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09ZCxpW2hdPXAsdH1mdW5jdGlvbiBzbCh0LGUsbixyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1yLHRoaXMueTE9aX1mdW5jdGlvbiBjbCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBsbCh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB1bCh0LGUsbil7dmFyIHI9bmV3IGhsKG51bGw9PWU/Y2w6ZSxudWxsPT1uP2xsOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIGhsKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gZmwodCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBkbD11bC5wcm90b3R5cGU9aGwucHJvdG90eXBlO2Z1bmN0aW9uIHBsKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBnbCh0KXtyZXR1cm4gMWUtNioodCgpLS41KX1mdW5jdGlvbiB5bCh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gbWwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGJsKHQpe3ZhciBlLG4scixpPTEsYT0xO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQsbyxjLGwsdSxoLGYsZD1lLmxlbmd0aCxwPTA7cDxhOysrcClmb3Iobz11bChlLHlsLG1sKS52aXNpdEFmdGVyKHMpLHQ9MDt0PGQ7Kyt0KWM9ZVt0XSxoPW5bYy5pbmRleF0sZj1oKmgsbD1jLngrYy52eCx1PWMueStjLnZ5LG8udmlzaXQoZyk7ZnVuY3Rpb24gZyh0LGUsbixhLG8pe3ZhciBzPXQuZGF0YSxkPXQucixwPWgrZDtpZighcylyZXR1cm4gZT5sK3B8fGE8bC1wfHxuPnUrcHx8bzx1LXA7aWYocy5pbmRleD5jLmluZGV4KXt2YXIgZz1sLXMueC1zLnZ4LHk9dS1zLnktcy52eSxtPWcqZyt5Knk7bTxwKnAmJigwPT09ZyYmKG0rPShnPWdsKHIpKSpnKSwwPT09eSYmKG0rPSh5PWdsKHIpKSp5KSxtPShwLShtPU1hdGguc3FydChtKSkpL20qaSxjLnZ4Kz0oZyo9bSkqKHA9KGQqPWQpLyhmK2QpKSxjLnZ5Kz0oeSo9bSkqcCxzLnZ4LT1nKihwPTEtcCkscy52eS09eSpwKX19fWZ1bmN0aW9uIHModCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBjKCl7aWYoZSl7dmFyIHIsaSxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxyPTA7cjxhOysrcilpPWVbcl0sbltpLmluZGV4XT0rdChpLHIsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wbChudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCxuKXtlPXQscj1uLGMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LG8pOmF9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpwbCgrZSksYygpLG8pOnR9LG99ZnVuY3Rpb24gdmwodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gX2wodCxlKXt2YXIgbj10LmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm5vZGUgbm90IGZvdW5kOiAiK2UpO3JldHVybiBufWZ1bmN0aW9uIHhsKHQpe3ZhciBlLG4scixpLGEsbyxzPXZsLGM9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oaVt0LnNvdXJjZS5pbmRleF0saVt0LnRhcmdldC5pbmRleF0pfSxsPXBsKDMwKSx1PTE7ZnVuY3Rpb24gaChyKXtmb3IodmFyIGk9MCxzPXQubGVuZ3RoO2k8dTsrK2kpZm9yKHZhciBjLGwsaCxmLGQscCxnLHk9MDt5PHM7Kyt5KWw9KGM9dFt5XSkuc291cmNlLGY9KGg9Yy50YXJnZXQpLngraC52eC1sLngtbC52eHx8Z2wobyksZD1oLnkraC52eS1sLnktbC52eXx8Z2wobyksZio9cD0oKHA9TWF0aC5zcXJ0KGYqZitkKmQpKS1uW3ldKS9wKnIqZVt5XSxkKj1wLGgudngtPWYqKGc9YVt5XSksaC52eS09ZCpnLGwudngrPWYqKGc9MS1nKSxsLnZ5Kz1kKmd9ZnVuY3Rpb24gZigpe2lmKHIpe3ZhciBvLGMsbD1yLmxlbmd0aCx1PXQubGVuZ3RoLGg9bmV3IE1hcChyLm1hcCgoKHQsZSk9PltzKHQsZSxyKSx0XSkpKTtmb3Iobz0wLGk9bmV3IEFycmF5KGwpO288dTsrK28pKGM9dFtvXSkuaW5kZXg9bywib2JqZWN0IiE9dHlwZW9mIGMuc291cmNlJiYoYy5zb3VyY2U9X2woaCxjLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgYy50YXJnZXQmJihjLnRhcmdldD1fbChoLGMudGFyZ2V0KSksaVtjLnNvdXJjZS5pbmRleF09KGlbYy5zb3VyY2UuaW5kZXhdfHwwKSsxLGlbYy50YXJnZXQuaW5kZXhdPShpW2MudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iobz0wLGE9bmV3IEFycmF5KHUpO288dTsrK28pYz10W29dLGFbb109aVtjLnNvdXJjZS5pbmRleF0vKGlbYy5zb3VyY2UuaW5kZXhdK2lbYy50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheSh1KSxkKCksbj1uZXcgQXJyYXkodSkscCgpfX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rYyh0W25dLG4sdCl9ZnVuY3Rpb24gcCgpe2lmKHIpZm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7KytlKW5bZV09K2wodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksaC5pbml0aWFsaXplPWZ1bmN0aW9uKHQsZSl7cj10LG89ZSxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxmKCksaCk6dH0saC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGgpOnN9LGguaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxoKTp1fSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGwoK3QpLGQoKSxoKTpjfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGwoK3QpLHAoKSxoKTpsfSxofWRsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IGhsKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBuO2lmKCFyLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1mbChyKSxuO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPXIuc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPWZsKGUpKTtyZXR1cm4gbn0sZGwuYWRkPWZ1bmN0aW9uKHQpe2NvbnN0IGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBvbCh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxkbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPTEvMCxsPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxhOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwob1tuXT1yLHNbbl09aSxyPGMmJihjPXIpLHI+dSYmKHU9ciksaTxsJiYobD1pKSxpPmgmJihoPWkpKTtpZihjPnV8fGw+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLGwpLmNvdmVyKHUsaCksbj0wO248YTsrK24pb2wodGhpcyxvW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGRsLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxhPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtmb3IodmFyIG8scyxjPWktbnx8MSxsPXRoaXMuX3Jvb3Q7bj50fHx0Pj1pfHxyPmV8fGU+PWE7KXN3aXRjaChzPShlPHIpPDwxfHQ8biwobz1uZXcgQXJyYXkoNCkpW3NdPWwsbD1vLGMqPTIscyl7Y2FzZSAwOmk9bitjLGE9citjO2JyZWFrO2Nhc2UgMTpuPWktYyxhPXIrYzticmVhaztjYXNlIDI6aT1uK2Mscj1hLWM7YnJlYWs7Y2FzZSAzOm49aS1jLHI9YS1jfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1sKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxkbC5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sZGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxkbC5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbyxzLGMsbCx1PXRoaXMuX3gwLGg9dGhpcy5feTAsZj10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sZz10aGlzLl9yb290O2ZvcihnJiZwLnB1c2gobmV3IHNsKGcsdSxoLGYsZCkpLG51bGw9PW4/bj0xLzA6KHU9dC1uLGg9ZS1uLGY9dCtuLGQ9ZStuLG4qPW4pO2M9cC5wb3AoKTspaWYoISghKGc9Yy5ub2RlKXx8KGk9Yy54MCk+Znx8KGE9Yy55MCk+ZHx8KG89Yy54MSk8dXx8KHM9Yy55MSk8aCkpaWYoZy5sZW5ndGgpe3ZhciB5PShpK28pLzIsbT0oYStzKS8yO3AucHVzaChuZXcgc2woZ1szXSx5LG0sbyxzKSxuZXcgc2woZ1syXSxpLG0seSxzKSxuZXcgc2woZ1sxXSx5LGEsbyxtKSxuZXcgc2woZ1swXSxpLGEseSxtKSksKGw9KGU+PW0pPDwxfHQ+PXkpJiYoYz1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLWxdLHBbcC5sZW5ndGgtMS1sXT1jKX1lbHNle3ZhciBiPXQtK3RoaXMuX3guY2FsbChudWxsLGcuZGF0YSksdj1lLSt0aGlzLl95LmNhbGwobnVsbCxnLmRhdGEpLF89YipiK3YqdjtpZihfPG4pe3ZhciB4PU1hdGguc3FydChuPV8pO3U9dC14LGg9ZS14LGY9dCt4LGQ9ZSt4LHI9Zy5kYXRhfX1yZXR1cm4gcn0sZGwucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLGEsbyxzLGMsbCx1LGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCxnPXRoaXMuX3kwLHk9dGhpcy5feDEsbT10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKChsPWE+PShzPShwK3kpLzIpKT9wPXM6eT1zLCh1PW8+PShjPShnK20pLzIpKT9nPWM6bT1jLGU9ZCwhKGQ9ZFtoPXU8PDF8bF0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYobj9uW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxkbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxkbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGRsLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxkbC52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scz1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJnMucHVzaChuZXcgc2woYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQoYz1lLm5vZGUscj1lLngwLGk9ZS55MCxhPWUueDEsbz1lLnkxKSYmYy5sZW5ndGgpe3ZhciBsPShyK2EpLzIsdT0oaStvKS8yOyhuPWNbM10pJiZzLnB1c2gobmV3IHNsKG4sbCx1LGEsbykpLChuPWNbMl0pJiZzLnB1c2gobmV3IHNsKG4scix1LGwsbykpLChuPWNbMV0pJiZzLnB1c2gobmV3IHNsKG4sbCxpLGEsdSkpLChuPWNbMF0pJiZzLnB1c2gobmV3IHNsKG4scixpLGwsdSkpfXJldHVybiB0aGlzfSxkbC52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBzbCh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGM9ZS54MSxsPWUueTEsdT0obytjKS8yLGg9KHMrbCkvMjsoYT1pWzBdKSYmbi5wdXNoKG5ldyBzbChhLG8scyx1LGgpKSwoYT1pWzFdKSYmbi5wdXNoKG5ldyBzbChhLHUscyxjLGgpKSwoYT1pWzJdKSYmbi5wdXNoKG5ldyBzbChhLG8saCx1LGwpKSwoYT1pWzNdKSYmbi5wdXNoKG5ldyBzbChhLHUsaCxjLGwpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxkbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sZGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O2NvbnN0IGtsPTQyOTQ5NjcyOTY7ZnVuY3Rpb24gd2wodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBUbCh0KXtyZXR1cm4gdC55fXZhciBFbD1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gQ2wodCl7dmFyIGUsbj0xLHI9LjAwMSxpPTEtTWF0aC5wb3cociwxLzMwMCksYT0wLG89LjYscz1uZXcgTWFwLGM9UXIoaCksbD1mZSgidGljayIsImVuZCIpLHU9ZnVuY3Rpb24oKXtsZXQgdD0xO3JldHVybigpPT4odD0oMTY2NDUyNSp0KzEwMTM5MDQyMjMpJWtsKS9rbH0oKTtmdW5jdGlvbiBoKCl7ZigpLGwuY2FsbCgidGljayIsZSksbjxyJiYoYy5zdG9wKCksbC5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBmKHIpe3ZhciBjLGwsdT10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGg9MDtoPHI7KytoKWZvcihuKz0oYS1uKSppLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxjPTA7Yzx1OysrYyludWxsPT0obD10W2NdKS5meD9sLngrPWwudngqPW86KGwueD1sLmZ4LGwudng9MCksbnVsbD09bC5meT9sLnkrPWwudnkqPW86KGwueT1sLmZ5LGwudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZSxuPTAscj10Lmxlbmd0aDtuPHI7KytuKXtpZigoZT10W25dKS5pbmRleD1uLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQoLjUrbiksYT1uKkVsO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiBwKGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0LHUpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxkKCksZT17dGljazpmLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5yZXN0YXJ0KGgpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gYy5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixkKCkscy5mb3JFYWNoKHApLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGUpOm59LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGUpOnJ9LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6K2l9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89MS10LGUpOjEtb30scmFuZG9tU291cmNlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQscy5mb3JFYWNoKHApLGUpOnV9LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9zLmRlbGV0ZSh0KTpzLnNldCh0LHAobikpLGUpOnMuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxhLG8scyxjLGw9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsbD0wO2w8dTsrK2wpKG89KGk9ZS0ocz10W2xdKS54KSppKyhhPW4tcy55KSphKTxyJiYoYz1zLHI9byk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obC5vbih0LG4pLGUpOmwub24odCl9fX1mdW5jdGlvbiBTbCgpe3ZhciB0LGUsbixyLGksYT1wbCgtMzApLG89MSxzPTEvMCxjPS44MTtmdW5jdGlvbiBsKG4pe3ZhciBpLGE9dC5sZW5ndGgsbz11bCh0LHdsLFRsKS52aXNpdEFmdGVyKGgpO2ZvcihyPW4saT0wO2k8YTsrK2kpZT10W2ldLG8udmlzaXQoZil9ZnVuY3Rpb24gdSgpe2lmKHQpe3ZhciBlLG4scj10Lmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkociksZT0wO2U8cjsrK2Upbj10W2VdLGlbbi5pbmRleF09K2EobixlLHQpfX1mdW5jdGlvbiBoKHQpe3ZhciBlLG4scixhLG8scz0wLGM9MDtpZih0Lmxlbmd0aCl7Zm9yKHI9YT1vPTA7bzw0OysrbykoZT10W29dKSYmKG49TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxjKz1uLHIrPW4qZS54LGErPW4qZS55KTt0Lng9ci9jLHQueT1hL2N9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1pW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiBmKHQsYSxsLHUpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBoPXQueC1lLngsZj10LnktZS55LGQ9dS1hLHA9aCpoK2YqZjtpZihkKmQvYzxwKXJldHVybiBwPHMmJigwPT09aCYmKHArPShoPWdsKG4pKSpoKSwwPT09ZiYmKHArPShmPWdsKG4pKSpmKSxwPG8mJihwPU1hdGguc3FydChvKnApKSxlLnZ4Kz1oKnQudmFsdWUqci9wLGUudnkrPWYqdC52YWx1ZSpyL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PXMpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT1oJiYocCs9KGg9Z2wobikpKmgpLDA9PT1mJiYocCs9KGY9Z2wobikpKmYpLHA8byYmKHA9TWF0aC5zcXJ0KG8qcCkpKTtkb3t0LmRhdGEhPT1lJiYoZD1pW3QuZGF0YS5pbmRleF0qci9wLGUudngrPWgqZCxlLnZ5Kz1mKmQpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGwuaW5pdGlhbGl6ZT1mdW5jdGlvbihlLHIpe3Q9ZSxuPXIsdSgpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGwoK3QpLHUoKSxsKTphfSxsLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxsKTpNYXRoLnNxcnQobyl9LGwuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGwpOk1hdGguc3FydChzKX0sbC50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQsbCk6TWF0aC5zcXJ0KGMpfSxsfWZ1bmN0aW9uIEFsKHQsZSxuKXt2YXIgcixpLGEsbz1wbCguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sbD1jLngtZXx8MWUtNix1PWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KGwqbCt1KnUpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9bCpmLGMudnkrPXUqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wbCgrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGwoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnBsKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfWZ1bmN0aW9uIE1sKHQpe3ZhciBlLG4scixpPXBsKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oclthXS1pLngpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wbChudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBsKCt0KSxvKCksYSk6aX0sYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cGwoK2UpLG8oKSxhKTp0fSxhfWZ1bmN0aW9uIE5sKHQpe3ZhciBlLG4scixpPXBsKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oclthXS1pLnkpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wbChudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBsKCt0KSxvKCksYSk6aX0sYS55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cGwoK2UpLG8oKSxhKTp0fSxhfWZ1bmN0aW9uIE9sKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfWZ1bmN0aW9uIERsKHQpe3JldHVybih0PU9sKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIEJsLExsPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIElsKHQpe2lmKCEoZT1MbC5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgRmwoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gRmwodCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gUmwodCxlKXt2YXIgbj1PbCh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfUlsLnByb3RvdHlwZT1GbC5wcm90b3R5cGUsRmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgUGw9eyIlIjoodCxlKT0+KDEwMCp0KS50b0ZpeGVkKGUpLGI6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygyKSxjOnQ9PnQrIiIsZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9LGU6KHQsZSk9PnQudG9FeHBvbmVudGlhbChlKSxmOih0LGUpPT50LnRvRml4ZWQoZSksZzoodCxlKT0+dC50b1ByZWNpc2lvbihlKSxvOnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoOCkscDoodCxlKT0+UmwoMTAwKnQsZSkscjpSbCxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49T2wodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXSxhPWktKEJsPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxvPXIubGVuZ3RoO3JldHVybiBhPT09bz9yOmE+bz9yK25ldyBBcnJheShhLW8rMSkuam9pbigiMCIpOmE+MD9yLnNsaWNlKDAsYSkrIi4iK3Iuc2xpY2UoYSk6IjAuIituZXcgQXJyYXkoMS1hKS5qb2luKCIwIikrT2wodCxNYXRoLm1heCgwLGUrYS0xKSlbMF19LFg6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBqbCh0KXtyZXR1cm4gdH12YXIgemwsWWwsVWwsJGw9QXJyYXkucHJvdG90eXBlLm1hcCxXbD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gcWwodCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2psOihlPSRsLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP2psOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSgkbC5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIixsPXZvaWQgMD09PXQubWludXM/IuKIkiI6dC5taW51cysiIix1PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgodCl7dmFyIGU9KHQ9SWwodCkpLmZpbGwsbj10LmFsaWduLGg9dC5zaWduLGY9dC5zeW1ib2wsZD10Lnplcm8scD10LndpZHRoLGc9dC5jb21tYSx5PXQucHJlY2lzaW9uLG09dC50cmltLGI9dC50eXBlOyJuIj09PWI/KGc9ITAsYj0iZyIpOlBsW2JdfHwodm9pZCAwPT09eSYmKHk9MTIpLG09ITAsYj0iZyIpLChkfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGQ9ITAsZT0iMCIsbj0iPSIpO3ZhciB2PSIkIj09PWY/aToiIyI9PT1mJiYvW2JveFhdLy50ZXN0KGIpPyIwIitiLnRvTG93ZXJDYXNlKCk6IiIsXz0iJCI9PT1mP2E6L1slcF0vLnRlc3QoYik/YzoiIix4PVBsW2JdLGs9L1tkZWZncHJzJV0vLnRlc3QoYik7ZnVuY3Rpb24gdyh0KXt2YXIgaSxhLGMsZj12LHc9XztpZigiYyI9PT1iKXc9eCh0KSt3LHQ9IiI7ZWxzZXt2YXIgVD0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT91OngoTWF0aC5hYnModCkseSksbSYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxUJiYwPT0rdCYmIisiIT09aCYmKFQ9ITEpLGY9KFQ/IigiPT09aD9oOmw6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PWI/V2xbOCtCbC8zXToiIikrdysoVCYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fWcmJiFkJiYodD1yKHQsMS8wKSk7dmFyIEU9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1FPHA/bmV3IEFycmF5KHAtRSsxKS5qb2luKGUpOiIiO3N3aXRjaChnJiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxFPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKEUpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiB5PXZvaWQgMD09PXk/NjovW2dwcnNdLy50ZXN0KGIpP01hdGgubWF4KDEsTWF0aC5taW4oMjEseSkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAseSkpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9SWwodCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKERsKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1XbFs4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX1mdW5jdGlvbiBIbCh0KXtyZXR1cm4gemw9cWwodCksWWw9emwuZm9ybWF0LFVsPXpsLmZvcm1hdFByZWZpeCx6bH1mdW5jdGlvbiBWbCh0KXtyZXR1cm4gTWF0aC5tYXgoMCwtRGwoTWF0aC5hYnModCkpKX1mdW5jdGlvbiBHbCh0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKERsKGUpLzMpKSktRGwoTWF0aC5hYnModCkpKX1mdW5jdGlvbiBYbCh0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLERsKGUpLURsKHQpKSsxfUhsKHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO3ZhciBabD0xZS02LFFsPTFlLTEyLEtsPU1hdGguUEksSmw9S2wvMix0dT1LbC80LGV1PTIqS2wsbnU9MTgwL0tsLHJ1PUtsLzE4MCxpdT1NYXRoLmFicyxhdT1NYXRoLmF0YW4sb3U9TWF0aC5hdGFuMixzdT1NYXRoLmNvcyxjdT1NYXRoLmNlaWwsbHU9TWF0aC5leHAsdXU9KE1hdGguZmxvb3IsTWF0aC5oeXBvdCksaHU9TWF0aC5sb2csZnU9TWF0aC5wb3csZHU9TWF0aC5zaW4scHU9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LGd1PU1hdGguc3FydCx5dT1NYXRoLnRhbjtmdW5jdGlvbiBtdSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9LbDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gYnUodCl7cmV0dXJuIHQ+MT9KbDp0PC0xPy1KbDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gdnUodCl7cmV0dXJuKHQ9ZHUodC8yKSkqdH1mdW5jdGlvbiBfdSgpe31mdW5jdGlvbiB4dSh0LGUpe3QmJnd1Lmhhc093blByb3BlcnR5KHQudHlwZSkmJnd1W3QudHlwZV0odCxlKX12YXIga3U9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXt4dSh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspeHUobltyXS5nZW9tZXRyeSxlKX19LHd1PXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7VHUodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVR1KG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe0V1KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspRXUobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KXh1KG5bcl0sZSl9fTtmdW5jdGlvbiBUdSh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBFdSh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KVR1KHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBDdSh0LGUpe3QmJmt1Lmhhc093blByb3BlcnR5KHQudHlwZSk/a3VbdC50eXBlXSh0LGUpOnh1KHQsZSl9dmFyIFN1LEF1LE11LE51LE91LER1LEJ1LEx1LEl1LEZ1LFJ1LFB1LGp1LHp1LFl1LFV1LCR1PW5ldyB4LFd1PW5ldyB4LHF1PXtwb2ludDpfdSxsaW5lU3RhcnQ6X3UsbGluZUVuZDpfdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXskdT1uZXcgeCxxdS5saW5lU3RhcnQ9SHUscXUubGluZUVuZD1WdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PSskdTtXdS5hZGQodDwwP2V1K3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9X3V9LHNwaGVyZTpmdW5jdGlvbigpe1d1LmFkZChldSl9fTtmdW5jdGlvbiBIdSgpe3F1LnBvaW50PUd1fWZ1bmN0aW9uIFZ1KCl7WHUoU3UsQXUpfWZ1bmN0aW9uIEd1KHQsZSl7cXUucG9pbnQ9WHUsU3U9dCxBdT1lLE11PXQqPXJ1LE51PXN1KGU9KGUqPXJ1KS8yK3R1KSxPdT1kdShlKX1mdW5jdGlvbiBYdSh0LGUpe3ZhciBuPSh0Kj1ydSktTXUscj1uPj0wPzE6LTEsaT1yKm4sYT1zdShlPShlKj1ydSkvMit0dSksbz1kdShlKSxzPU91Km8sYz1OdSphK3Mqc3UoaSksbD1zKnIqZHUoaSk7JHUuYWRkKG91KGwsYykpLE11PXQsTnU9YSxPdT1vfWZ1bmN0aW9uIFp1KHQpe3JldHVybiBXdT1uZXcgeCxDdSh0LHF1KSwyKld1fWZ1bmN0aW9uIFF1KHQpe3JldHVybltvdSh0WzFdLHRbMF0pLGJ1KHRbMl0pXX1mdW5jdGlvbiBLdSh0KXt2YXIgZT10WzBdLG49dFsxXSxyPXN1KG4pO3JldHVybltyKnN1KGUpLHIqZHUoZSksZHUobildfWZ1bmN0aW9uIEp1KHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIHRoKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBlaCh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIG5oKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiByaCh0KXt2YXIgZT1ndSh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9dmFyIGloLGFoLG9oLHNoLGNoLGxoLHVoLGhoLGZoLGRoLHBoLGdoLHloLG1oLGJoLHZoLF9oPXtwb2ludDp4aCxsaW5lU3RhcnQ6d2gsbGluZUVuZDpUaCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtfaC5wb2ludD1FaCxfaC5saW5lU3RhcnQ9Q2gsX2gubGluZUVuZD1TaCx6dT1uZXcgeCxxdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3F1LnBvbHlnb25FbmQoKSxfaC5wb2ludD14aCxfaC5saW5lU3RhcnQ9d2gsX2gubGluZUVuZD1UaCwkdTwwPyhEdT0tKEx1PTE4MCksQnU9LShJdT05MCkpOnp1PlpsP0l1PTkwOnp1PC0xZS02JiYoQnU9LTkwKSxVdVswXT1EdSxVdVsxXT1MdX0sc3BoZXJlOmZ1bmN0aW9uKCl7RHU9LShMdT0xODApLEJ1PS0oSXU9OTApfX07ZnVuY3Rpb24geGgodCxlKXtZdS5wdXNoKFV1PVtEdT10LEx1PXRdKSxlPEJ1JiYoQnU9ZSksZT5JdSYmKEl1PWUpfWZ1bmN0aW9uIGtoKHQsZSl7dmFyIG49S3UoW3QqcnUsZSpydV0pO2lmKGp1KXt2YXIgcj10aChqdSxuKSxpPXRoKFtyWzFdLC1yWzBdLDBdLHIpO3JoKGkpLGk9UXUoaSk7dmFyIGEsbz10LUZ1LHM9bz4wPzE6LTEsYz1pWzBdKm51KnMsbD1pdShvKT4xODA7bF4ocypGdTxjJiZjPHMqdCk/KGE9aVsxXSpudSk+SXUmJihJdT1hKTpsXihzKkZ1PChjPShjKzM2MCklMzYwLTE4MCkmJmM8cyp0KT8oYT0taVsxXSpudSk8QnUmJihCdT1hKTooZTxCdSYmKEJ1PWUpLGU+SXUmJihJdT1lKSksbD90PEZ1P0FoKER1LHQpPkFoKER1LEx1KSYmKEx1PXQpOkFoKHQsTHUpPkFoKER1LEx1KSYmKER1PXQpOkx1Pj1EdT8odDxEdSYmKER1PXQpLHQ+THUmJihMdT10KSk6dD5GdT9BaChEdSx0KT5BaChEdSxMdSkmJihMdT10KTpBaCh0LEx1KT5BaChEdSxMdSkmJihEdT10KX1lbHNlIFl1LnB1c2goVXU9W0R1PXQsTHU9dF0pO2U8QnUmJihCdT1lKSxlPkl1JiYoSXU9ZSksanU9bixGdT10fWZ1bmN0aW9uIHdoKCl7X2gucG9pbnQ9a2h9ZnVuY3Rpb24gVGgoKXtVdVswXT1EdSxVdVsxXT1MdSxfaC5wb2ludD14aCxqdT1udWxsfWZ1bmN0aW9uIEVoKHQsZSl7aWYoanUpe3ZhciBuPXQtRnU7enUuYWRkKGl1KG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgUnU9dCxQdT1lO3F1LnBvaW50KHQsZSksa2godCxlKX1mdW5jdGlvbiBDaCgpe3F1LmxpbmVTdGFydCgpfWZ1bmN0aW9uIFNoKCl7RWgoUnUsUHUpLHF1LmxpbmVFbmQoKSxpdSh6dSk+WmwmJihEdT0tKEx1PTE4MCkpLFV1WzBdPUR1LFV1WzFdPUx1LGp1PW51bGx9ZnVuY3Rpb24gQWgodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIE1oKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBOaCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9ZnVuY3Rpb24gT2godCl7dmFyIGUsbixyLGksYSxvLHM7aWYoSXU9THU9LShEdT1CdT0xLzApLFl1PVtdLEN1KHQsX2gpLG49WXUubGVuZ3RoKXtmb3IoWXUuc29ydChNaCksZT0xLGE9W3I9WXVbMF1dO2U8bjsrK2UpTmgociwoaT1ZdVtlXSlbMF0pfHxOaChyLGlbMV0pPyhBaChyWzBdLGlbMV0pPkFoKHJbMF0sclsxXSkmJihyWzFdPWlbMV0pLEFoKGlbMF0sclsxXSk+QWgoclswXSxyWzFdKSYmKHJbMF09aVswXSkpOmEucHVzaChyPWkpO2ZvcihvPS0xLzAsZT0wLHI9YVtuPWEubGVuZ3RoLTFdO2U8PW47cj1pLCsrZSlpPWFbZV0sKHM9QWgoclsxXSxpWzBdKSk+byYmKG89cyxEdT1pWzBdLEx1PXJbMV0pfXJldHVybiBZdT1VdT1udWxsLER1PT09MS8wfHxCdT09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tEdSxCdV0sW0x1LEl1XV19dmFyIERoPXtzcGhlcmU6X3UscG9pbnQ6QmgsbGluZVN0YXJ0OkloLGxpbmVFbmQ6UGgscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7RGgubGluZVN0YXJ0PWpoLERoLmxpbmVFbmQ9emh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtEaC5saW5lU3RhcnQ9SWgsRGgubGluZUVuZD1QaH19O2Z1bmN0aW9uIEJoKHQsZSl7dCo9cnU7dmFyIG49c3UoZSo9cnUpO0xoKG4qc3UodCksbipkdSh0KSxkdShlKSl9ZnVuY3Rpb24gTGgodCxlLG4peysraWgsb2grPSh0LW9oKS9paCxzaCs9KGUtc2gpL2loLGNoKz0obi1jaCkvaWh9ZnVuY3Rpb24gSWgoKXtEaC5wb2ludD1GaH1mdW5jdGlvbiBGaCh0LGUpe3QqPXJ1O3ZhciBuPXN1KGUqPXJ1KTttaD1uKnN1KHQpLGJoPW4qZHUodCksdmg9ZHUoZSksRGgucG9pbnQ9UmgsTGgobWgsYmgsdmgpfWZ1bmN0aW9uIFJoKHQsZSl7dCo9cnU7dmFyIG49c3UoZSo9cnUpLHI9bipzdSh0KSxpPW4qZHUodCksYT1kdShlKSxvPW91KGd1KChvPWJoKmEtdmgqaSkqbysobz12aCpyLW1oKmEpKm8rKG89bWgqaS1iaCpyKSpvKSxtaCpyK2JoKmkrdmgqYSk7YWgrPW8sbGgrPW8qKG1oKyhtaD1yKSksdWgrPW8qKGJoKyhiaD1pKSksaGgrPW8qKHZoKyh2aD1hKSksTGgobWgsYmgsdmgpfWZ1bmN0aW9uIFBoKCl7RGgucG9pbnQ9Qmh9ZnVuY3Rpb24gamgoKXtEaC5wb2ludD1ZaH1mdW5jdGlvbiB6aCgpe1VoKGdoLHloKSxEaC5wb2ludD1CaH1mdW5jdGlvbiBZaCh0LGUpe2doPXQseWg9ZSx0Kj1ydSxlKj1ydSxEaC5wb2ludD1VaDt2YXIgbj1zdShlKTttaD1uKnN1KHQpLGJoPW4qZHUodCksdmg9ZHUoZSksTGgobWgsYmgsdmgpfWZ1bmN0aW9uIFVoKHQsZSl7dCo9cnU7dmFyIG49c3UoZSo9cnUpLHI9bipzdSh0KSxpPW4qZHUodCksYT1kdShlKSxvPWJoKmEtdmgqaSxzPXZoKnItbWgqYSxjPW1oKmktYmgqcixsPXV1KG8scyxjKSx1PWJ1KGwpLGg9bCYmLXUvbDtmaC5hZGQoaCpvKSxkaC5hZGQoaCpzKSxwaC5hZGQoaCpjKSxhaCs9dSxsaCs9dSoobWgrKG1oPXIpKSx1aCs9dSooYmgrKGJoPWkpKSxoaCs9dSoodmgrKHZoPWEpKSxMaChtaCxiaCx2aCl9ZnVuY3Rpb24gJGgodCl7aWg9YWg9b2g9c2g9Y2g9bGg9dWg9aGg9MCxmaD1uZXcgeCxkaD1uZXcgeCxwaD1uZXcgeCxDdSh0LERoKTt2YXIgZT0rZmgsbj0rZGgscj0rcGgsaT11dShlLG4scik7cmV0dXJuIGk8UWwmJihlPWxoLG49dWgscj1oaCxhaDxabCYmKGU9b2gsbj1zaCxyPWNoKSwoaT11dShlLG4scikpPFFsKT9bTmFOLE5hTl06W291KG4sZSkqbnUsYnUoci9pKSpudV19ZnVuY3Rpb24gV2godCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHFoKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufWZ1bmN0aW9uIEhoKHQsZSl7cmV0dXJuW2l1KHQpPktsP3QrTWF0aC5yb3VuZCgtdC9ldSkqZXU6dCxlXX1mdW5jdGlvbiBWaCh0LGUsbil7cmV0dXJuKHQlPWV1KT9lfHxuP3FoKFhoKHQpLFpoKGUsbikpOlhoKHQpOmV8fG4/WmgoZSxuKTpIaH1mdW5jdGlvbiBHaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm5bKGUrPXQpPktsP2UtZXU6ZTwtS2w/ZStldTplLG5dfX1mdW5jdGlvbiBYaCh0KXt2YXIgZT1HaCh0KTtyZXR1cm4gZS5pbnZlcnQ9R2goLXQpLGV9ZnVuY3Rpb24gWmgodCxlKXt2YXIgbj1zdSh0KSxyPWR1KHQpLGk9c3UoZSksYT1kdShlKTtmdW5jdGlvbiBvKHQsZSl7dmFyIG89c3UoZSkscz1zdSh0KSpvLGM9ZHUodCkqbyxsPWR1KGUpLHU9bCpuK3MqcjtyZXR1cm5bb3UoYyppLXUqYSxzKm4tbCpyKSxidSh1KmkrYyphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89c3UoZSkscz1zdSh0KSpvLGM9ZHUodCkqbyxsPWR1KGUpLHU9bCppLWMqYTtyZXR1cm5bb3UoYyppK2wqYSxzKm4rdSpyKSxidSh1Km4tcypyKV19LG99ZnVuY3Rpb24gUWgodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qcnUsZVsxXSpydSkpWzBdKj1udSxlWzFdKj1udSxlfXJldHVybiB0PVZoKHRbMF0qcnUsdFsxXSpydSx0Lmxlbmd0aD4yP3RbMl0qcnU6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpydSxlWzFdKnJ1KSlbMF0qPW51LGVbMV0qPW51LGV9LGV9ZnVuY3Rpb24gS2godCxlLG4scixpLGEpe2lmKG4pe3ZhciBvPXN1KGUpLHM9ZHUoZSksYz1yKm47bnVsbD09aT8oaT1lK3IqZXUsYT1lLWMvMik6KGk9SmgobyxpKSxhPUpoKG8sYSksKHI+MD9pPGE6aT5hKSYmKGkrPXIqZXUpKTtmb3IodmFyIGwsdT1pO3I+MD91PmE6dTxhO3UtPWMpbD1RdShbbywtcypzdSh1KSwtcypkdSh1KV0pLHQucG9pbnQobFswXSxsWzFdKX19ZnVuY3Rpb24gSmgodCxlKXsoZT1LdShlKSlbMF0tPXQscmgoZSk7dmFyIG49bXUoLWVbMV0pO3JldHVybigoLWVbMl08MD8tbjpuKStldS1abCklZXV9ZnVuY3Rpb24gdGYoKXt2YXIgdCxlLG49V2goWzAsMF0pLHI9V2goOTApLGk9V2goNiksYT17cG9pbnQ6ZnVuY3Rpb24obixyKXt0LnB1c2gobj1lKG4scikpLG5bMF0qPW51LG5bMV0qPW51fX07ZnVuY3Rpb24gbygpe3ZhciBvPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykqcnUsYz1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpydTtyZXR1cm4gdD1bXSxlPVZoKC1vWzBdKnJ1LC1vWzFdKnJ1LDApLmludmVydCxLaChhLHMsYywxKSxvPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdF19LHQ9ZT1udWxsLG99cmV0dXJuIG8uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6V2goWyt0WzBdLCt0WzFdXSksbyk6bn0sby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXaCgrdCksbyk6cn0sby5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXaCgrdCksbyk6aX0sb31mdW5jdGlvbiBlZigpe3ZhciB0LGU9W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUsbixyKXt0LnB1c2goW2UsbixyXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpfdSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBuPWU7cmV0dXJuIGU9W10sdD1udWxsLG59fX1mdW5jdGlvbiBuZih0LGUpe3JldHVybiBpdSh0WzBdLWVbMF0pPFpsJiZpdSh0WzFdLWVbMV0pPFpsfWZ1bmN0aW9uIHJmKHQsZSxuLHIpe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1uLHRoaXMuZT1yLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gYWYodCxlLG4scixpKXt2YXIgYSxvLHM9W10sYz1bXTtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLHI9dFswXSxvPXRbZV07aWYobmYocixvKSl7aWYoIXJbMl0mJiFvWzJdKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfW9bMF0rPTJlLTZ9cy5wdXNoKG49bmV3IHJmKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgcmYocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgcmYobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyByZihvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSxvZihzKSxvZihjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgbCx1LGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO2w9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89bC5sZW5ndGg7YTxvOysrYSlpLnBvaW50KCh1PWxbYV0pWzBdLHVbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKGw9Zi5wLnosYT1sLmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKHU9bFthXSlbMF0sdVsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH1sPShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gb2YodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLG4scj0wLGk9dFswXTsrK3I8ZTspaS5uPW49dFtyXSxuLnA9aSxpPW47aS5uPW49dFswXSxuLnA9aX19ZnVuY3Rpb24gc2YodCl7cmV0dXJuIGl1KHRbMF0pPD1LbD90WzBdOnB1KHRbMF0pKigoaXUodFswXSkrS2wpJWV1LUtsKX1mdW5jdGlvbiBjZih0LGUpe3ZhciBuPXNmKGUpLHI9ZVsxXSxpPWR1KHIpLGE9W2R1KG4pLC1zdShuKSwwXSxvPTAscz0wLGM9bmV3IHg7MT09PWk/cj1KbCtabDotMT09PWkmJihyPS1KbC1abCk7Zm9yKHZhciBsPTAsdT10Lmxlbmd0aDtsPHU7KytsKWlmKGY9KGg9dFtsXSkubGVuZ3RoKWZvcih2YXIgaCxmLGQ9aFtmLTFdLHA9c2YoZCksZz1kWzFdLzIrdHUseT1kdShnKSxtPXN1KGcpLGI9MDtiPGY7KytiLHA9Xyx5PXcsbT1ULGQ9dil7dmFyIHY9aFtiXSxfPXNmKHYpLGs9dlsxXS8yK3R1LHc9ZHUoayksVD1zdShrKSxFPV8tcCxDPUU+PTA/MTotMSxTPUMqRSxBPVM+S2wsTT15Knc7aWYoYy5hZGQob3UoTSpDKmR1KFMpLG0qVCtNKnN1KFMpKSksbys9QT9FK0MqZXU6RSxBXnA+PW5eXz49bil7dmFyIE49dGgoS3UoZCksS3UodikpO3JoKE4pO3ZhciBPPXRoKGEsTik7cmgoTyk7dmFyIEQ9KEFeRT49MD8tMToxKSpidShPWzJdKTsocj5EfHxyPT09RCYmKE5bMF18fE5bMV0pKSYmKHMrPUFeRT49MD8xOi0xKX19cmV0dXJuKG88LTFlLTZ8fG88WmwmJmM8LTFlLTEyKV4xJnN9ZnVuY3Rpb24gbGYodCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhLG8scyxjPWUoaSksbD1lZigpLHU9ZShsKSxoPSExLGY9e3BvaW50OmQsbGluZVN0YXJ0OmcsbGluZUVuZDp5LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9bSxmLmxpbmVTdGFydD1iLGYubGluZUVuZD12LG89W10sYT1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9ZCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD15LG89eXQobyk7dmFyIHQ9Y2YoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksYWYobyxoZix0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiBnKCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24geSgpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiBtKHQsZSl7cy5wdXNoKFt0LGVdKSx1LnBvaW50KHQsZSl9ZnVuY3Rpb24gYigpe3UubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiB2KCl7bShzWzBdWzBdLHNbMF1bMV0pLHUubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9dS5jbGVhbigpLGY9bC5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIodWYpKX1yZXR1cm4gZn19ZnVuY3Rpb24gdWYodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gaGYodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tSmwtWmw6SmwtdFsxXSktKChlPWUueClbMF08MD9lWzFdLUpsLVpsOkpsLWVbMV0pfUhoLmludmVydD1IaDtjb25zdCBmZj1sZigoZnVuY3Rpb24oKXtyZXR1cm4hMH0pLChmdW5jdGlvbih0KXt2YXIgZSxuPU5hTixyPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKGEsbyl7dmFyIHM9YT4wP0tsOi1LbCxjPWl1KGEtbik7aXUoYy1LbCk8Wmw/KHQucG9pbnQobixyPShyK28pLzI+MD9KbDotSmwpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSx0LnBvaW50KGEsciksZT0wKTppIT09cyYmYz49S2wmJihpdShuLWkpPFpsJiYobi09aSpabCksaXUoYS1zKTxabCYmKGEtPXMqWmwpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPWR1KHQtbik7cmV0dXJuIGl1KG8pPlpsP2F1KChkdShlKSooYT1zdShyKSkqZHUobiktZHUocikqKGk9c3UoZSkpKmR1KHQpKS8oaSphKm8pKTooZStyKS8yfShuLHIsYSxvKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksZT0wKSx0LnBvaW50KG49YSxyPW8pLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLG49cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpO2lmKG51bGw9PXQpaT1uKkpsLHIucG9pbnQoLUtsLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KEtsLGkpLHIucG9pbnQoS2wsMCksci5wb2ludChLbCwtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1LbCwtaSksci5wb2ludCgtS2wsMCksci5wb2ludCgtS2wsaSk7ZWxzZSBpZihpdSh0WzBdLWVbMF0pPlpsKXt2YXIgYT10WzBdPGVbMF0/S2w6LUtsO2k9biphLzIsci5wb2ludCgtYSxpKSxyLnBvaW50KDAsaSksci5wb2ludChhLGkpfWVsc2Ugci5wb2ludChlWzBdLGVbMV0pfSksWy1LbCwtSmxdKTtmdW5jdGlvbiBkZih0KXt2YXIgZT1zdSh0KSxuPTYqcnUscj1lPjAsaT1pdShlKT5abDtmdW5jdGlvbiBhKHQsbil7cmV0dXJuIHN1KHQpKnN1KG4pPmV9ZnVuY3Rpb24gbyh0LG4scil7dmFyIGk9WzEsMCwwXSxhPXRoKEt1KHQpLEt1KG4pKSxvPUp1KGEsYSkscz1hWzBdLGM9by1zKnM7aWYoIWMpcmV0dXJuIXImJnQ7dmFyIGw9ZSpvL2MsdT0tZSpzL2MsaD10aChpLGEpLGY9bmgoaSxsKTtlaChmLG5oKGEsdSkpO3ZhciBkPWgscD1KdShmLGQpLGc9SnUoZCxkKSx5PXAqcC1nKihKdShmLGYpLTEpO2lmKCEoeTwwKSl7dmFyIG09Z3UoeSksYj1uaChkLCgtcC1tKS9nKTtpZihlaChiLGYpLGI9UXUoYiksIXIpcmV0dXJuIGI7dmFyIHYsXz10WzBdLHg9blswXSxrPXRbMV0sdz1uWzFdO3g8XyYmKHY9XyxfPXgseD12KTt2YXIgVD14LV8sRT1pdShULUtsKTxabDtpZighRSYmdzxrJiYodj1rLGs9dyx3PXYpLEV8fFQ8Wmw/RT9rK3c+MF5iWzFdPChpdShiWzBdLV8pPFpsP2s6dyk6azw9YlsxXSYmYlsxXTw9dzpUPktsXihfPD1iWzBdJiZiWzBdPD14KSl7dmFyIEM9bmgoZCwoLXArbSkvZyk7cmV0dXJuIGVoKEMsZiksW2IsUXUoQyldfX19ZnVuY3Rpb24gcyhlLG4pe3ZhciBpPXI/dDpLbC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfXJldHVybiBsZihhLChmdW5jdGlvbih0KXt2YXIgZSxuLGMsbCx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtsPWM9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBkLHA9W2gsZl0sZz1hKGgsZikseT1yP2c/MDpzKGgsZik6Zz9zKGgrKGg8MD9LbDotS2wpLGYpOjA7aWYoIWUmJihsPWM9ZykmJnQubGluZVN0YXJ0KCksZyE9PWMmJighKGQ9byhlLHApKXx8bmYoZSxkKXx8bmYocCxkKSkmJihwWzJdPTEpLGchPT1jKXU9MCxnPyh0LmxpbmVTdGFydCgpLGQ9byhwLGUpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9byhlLHApLHQucG9pbnQoZFswXSxkWzFdLDIpLHQubGluZUVuZCgpKSxlPWQ7ZWxzZSBpZihpJiZlJiZyXmcpe3ZhciBtO3kmbnx8IShtPW8ocCxlLCEwKSl8fCh1PTAscj8odC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSksdC5wb2ludChtWzFdWzBdLG1bMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludChtWzFdWzBdLG1bMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0sMykpKX0hZ3x8ZSYmbmYoZSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGU9cCxjPWcsbj15fSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChsJiZjKTw8MX19fSksKGZ1bmN0aW9uKGUscixpLGEpe0toKGEsdCxuLGksZSxyKX0pLHI/WzAsLXRdOlstS2wsdC1LbF0pfXZhciBwZixnZix5ZixtZixiZj0xZTksdmY9LWJmO2Z1bmN0aW9uIF9mKHQsZSxuLHIpe2Z1bmN0aW9uIGkoaSxhKXtyZXR1cm4gdDw9aSYmaTw9biYmZTw9YSYmYTw9cn1mdW5jdGlvbiBhKGksYSxzLGwpe3ZhciB1PTAsaD0wO2lmKG51bGw9PWl8fCh1PW8oaSxzKSkhPT0oaD1vKGEscykpfHxjKGksYSk8MF5zPjApZG97bC5wb2ludCgwPT09dXx8Mz09PXU/dDpuLHU+MT9yOmUpfXdoaWxlKCh1PSh1K3MrNCklNCkhPT1oKTtlbHNlIGwucG9pbnQoYVswXSxhWzFdKX1mdW5jdGlvbiBvKHIsaSl7cmV0dXJuIGl1KHJbMF0tdCk8Wmw/aT4wPzA6MzppdShyWzBdLW4pPFpsP2k+MD8yOjE6aXUoclsxXS1lKTxabD9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQueCxlLngpfWZ1bmN0aW9uIGModCxlKXt2YXIgbj1vKHQsMSkscj1vKGUsMSk7cmV0dXJuIG4hPT1yP24tcjowPT09bj9lWzFdLXRbMV06MT09PW4/dFswXS1lWzBdOjI9PT1uP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBjLGwsdSxoLGYsZCxwLGcseSxtLGIsdj1vLF89ZWYoKSx4PXtwb2ludDprLGxpbmVTdGFydDpmdW5jdGlvbigpe3gucG9pbnQ9dyxsJiZsLnB1c2godT1bXSksbT0hMCx5PSExLHA9Zz1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiYodyhoLGYpLGQmJnkmJl8ucmVqb2luKCksYy5wdXNoKF8ucmVzdWx0KCkpKSx4LnBvaW50PWsseSYmdi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3Y9XyxjPVtdLGw9W10sYj0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsbj0wLGk9bC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGEsbyxzPWxbbl0sYz0xLHU9cy5sZW5ndGgsaD1zWzBdLGY9aFswXSxkPWhbMV07Yzx1OysrYylhPWYsbz1kLGY9KGg9c1tjXSlbMF0sZD1oWzFdLG88PXI/ZD5yJiYoZi1hKSooci1vKT4oZC1vKSoodC1hKSYmKytlOmQ8PXImJihmLWEpKihyLW8pPChkLW8pKih0LWEpJiYtLWU7cmV0dXJuIGV9KCksbj1iJiZlLGk9KGM9eXQoYykpLmxlbmd0aDsobnx8aSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLGEobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGkmJmFmKGMscyxlLGEsbyksby5wb2x5Z29uRW5kKCkpLHY9byxjPWw9dT1udWxsfX07ZnVuY3Rpb24gayh0LGUpe2kodCxlKSYmdi5wb2ludCh0LGUpfWZ1bmN0aW9uIHcoYSxvKXt2YXIgcz1pKGEsbyk7aWYobCYmdS5wdXNoKFthLG9dKSxtKWg9YSxmPW8sZD1zLG09ITEscyYmKHYubGluZVN0YXJ0KCksdi5wb2ludChhLG8pKTtlbHNlIGlmKHMmJnkpdi5wb2ludChhLG8pO2Vsc2V7dmFyIGM9W3A9TWF0aC5tYXgodmYsTWF0aC5taW4oYmYscCkpLGc9TWF0aC5tYXgodmYsTWF0aC5taW4oYmYsZykpXSxfPVthPU1hdGgubWF4KHZmLE1hdGgubWluKGJmLGEpKSxvPU1hdGgubWF4KHZmLE1hdGgubWluKGJmLG8pKV07IWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXRbMF0sYz10WzFdLGw9MCx1PTEsaD1lWzBdLXMsZj1lWzFdLWM7aWYobz1uLXMsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxsKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPnUpcmV0dXJuO28+bCYmKGw9byl9aWYobz1pLXMsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz51KXJldHVybjtvPmwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPGwpcmV0dXJuO288dSYmKHU9byl9aWYobz1yLWMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzxsKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPnUpcmV0dXJuO28+bCYmKGw9byl9aWYobz1hLWMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz51KXJldHVybjtvPmwmJihsPW8pfWVsc2UgaWYoZj4wKXtpZihvPGwpcmV0dXJuO288dSYmKHU9byl9cmV0dXJuIGw+MCYmKHRbMF09cytsKmgsdFsxXT1jK2wqZiksdTwxJiYoZVswXT1zK3UqaCxlWzFdPWMrdSpmKSwhMH19fX19KGMsXyx0LGUsbixyKT9zJiYodi5saW5lU3RhcnQoKSx2LnBvaW50KGEsbyksYj0hMSk6KHl8fCh2LmxpbmVTdGFydCgpLHYucG9pbnQoY1swXSxjWzFdKSksdi5wb2ludChfWzBdLF9bMV0pLHN8fHYubGluZUVuZCgpLGI9ITEpfXA9YSxnPW8seT1zfXJldHVybiB4fX1mdW5jdGlvbiB4Zigpe3ZhciB0LGUsbixyPTAsaT0wLGE9OTYwLG89NTAwO3JldHVybiBuPXtzdHJlYW06ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6dD1fZihyLGksYSxvKShlPW4pfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3NbMF1bMF0saT0rc1swXVsxXSxhPStzWzFdWzBdLG89K3NbMV1bMV0sdD1lPW51bGwsbik6W1tyLGldLFthLG9dXX19fXZhciBrZj17c3BoZXJlOl91LHBvaW50Ol91LGxpbmVTdGFydDpmdW5jdGlvbigpe2tmLnBvaW50PVRmLGtmLmxpbmVFbmQ9d2Z9LGxpbmVFbmQ6X3UscG9seWdvblN0YXJ0Ol91LHBvbHlnb25FbmQ6X3V9O2Z1bmN0aW9uIHdmKCl7a2YucG9pbnQ9a2YubGluZUVuZD1fdX1mdW5jdGlvbiBUZih0LGUpe2dmPXQqPXJ1LHlmPWR1KGUqPXJ1KSxtZj1zdShlKSxrZi5wb2ludD1FZn1mdW5jdGlvbiBFZih0LGUpe3QqPXJ1O3ZhciBuPWR1KGUqPXJ1KSxyPXN1KGUpLGk9aXUodC1nZiksYT1zdShpKSxvPXIqZHUoaSkscz1tZipuLXlmKnIqYSxjPXlmKm4rbWYqciphO3BmLmFkZChvdShndShvKm8rcypzKSxjKSksZ2Y9dCx5Zj1uLG1mPXJ9ZnVuY3Rpb24gQ2YodCl7cmV0dXJuIHBmPW5ldyB4LEN1KHQsa2YpLCtwZn12YXIgU2Y9W251bGwsbnVsbF0sQWY9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOlNmfTtmdW5jdGlvbiBNZih0LGUpe3JldHVybiBTZlswXT10LFNmWzFdPWUsQ2YoQWYpfXZhciBOZj17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBEZih0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoRGYobltyXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LE9mPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gQmYodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoQmYobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBMZih0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKExmKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gSWYodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihJZihuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoRGYobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIERmKHQsZSl7cmV0dXJuISghdHx8IU9mLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZPZlt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gQmYodCxlKXtyZXR1cm4gMD09PU1mKHQsZSl9ZnVuY3Rpb24gTGYodCxlKXtmb3IodmFyIG4scixpLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe2lmKDA9PT0ocj1NZih0W2FdLGUpKSlyZXR1cm4hMDtpZihhPjAmJihpPU1mKHRbYV0sdFthLTFdKSk+MCYmbjw9aSYmcjw9aSYmKG4rci1pKSooMS1NYXRoLnBvdygobi1yKS9pLDIpKTxRbCppKXJldHVybiEwO249cn1yZXR1cm4hMX1mdW5jdGlvbiBJZih0LGUpe3JldHVybiEhY2YodC5tYXAoRmYpLFJmKGUpKX1mdW5jdGlvbiBGZih0KXtyZXR1cm4odD10Lm1hcChSZikpLnBvcCgpLHR9ZnVuY3Rpb24gUmYodCl7cmV0dXJuW3RbMF0qcnUsdFsxXSpydV19ZnVuY3Rpb24gUGYodCxlKXtyZXR1cm4odCYmTmYuaGFzT3duUHJvcGVydHkodC50eXBlKT9OZlt0LnR5cGVdOkRmKSh0LGUpfWZ1bmN0aW9uIGpmKHQsZSxuKXt2YXIgcj14dCh0LGUtWmwsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiB6Zih0LGUsbil7dmFyIHI9eHQodCxlLVpsLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gWWYoKXt2YXIgdCxlLG4scixpLGEsbyxzLGMsbCx1LGgsZj0xMCxkPWYscD05MCxnPTM2MCx5PTIuNTtmdW5jdGlvbiBtKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIHh0KGN1KHIvcCkqcCxuLHApLm1hcCh1KS5jb25jYXQoeHQoY3Uocy9nKSpnLG8sZykubWFwKGgpKS5jb25jYXQoeHQoY3UoZS9mKSpmLHQsZikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gaXUodCVwKT5abH0pKS5tYXAoYykpLmNvbmNhdCh4dChjdShhL2QpKmQsaSxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBpdSh0JWcpPlpsfSkpLm1hcChsKSl9cmV0dXJuIG0ubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSxtLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3UocikuY29uY2F0KGgobykuc2xpY2UoMSksdShuKS5yZXZlcnNlKCkuc2xpY2UoMSksaChzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LG0uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP20uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6bS5leHRlbnRNaW5vcigpfSxtLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLG49K3RbMV1bMF0scz0rdFswXVsxXSxvPSt0WzFdWzFdLHI+biYmKHQ9cixyPW4sbj10KSxzPm8mJih0PXMscz1vLG89dCksbS5wcmVjaXNpb24oeSkpOltbcixzXSxbbixvXV19LG0uZXh0ZW50TWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K25bMF1bMF0sdD0rblsxXVswXSxhPStuWzBdWzFdLGk9K25bMV1bMV0sZT50JiYobj1lLGU9dCx0PW4pLGE+aSYmKG49YSxhPWksaT1uKSxtLnByZWNpc2lvbih5KSk6W1tlLGFdLFt0LGldXX0sbS5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP20uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTptLnN0ZXBNaW5vcigpfSxtLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSxnPSt0WzFdLG0pOltwLGddfSxtLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdFswXSxkPSt0WzFdLG0pOltmLGRdfSxtLnByZWNpc2lvbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rZixjPWpmKGEsaSw5MCksbD16ZihlLHQseSksdT1qZihzLG8sOTApLGg9emYocixuLHkpLG0pOnl9LG0uZXh0ZW50TWFqb3IoW1stMTgwLC04OS45OTk5OTldLFsxODAsODkuOTk5OTk5XV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAuMDAwMDAxXSxbMTgwLDgwLjAwMDAwMV1dKX1mdW5jdGlvbiBVZigpe3JldHVybiBZZigpKCl9ZnVuY3Rpb24gJGYodCxlKXt2YXIgbj10WzBdKnJ1LHI9dFsxXSpydSxpPWVbMF0qcnUsYT1lWzFdKnJ1LG89c3Uocikscz1kdShyKSxjPXN1KGEpLGw9ZHUoYSksdT1vKnN1KG4pLGg9bypkdShuKSxmPWMqc3UoaSksZD1jKmR1KGkpLHA9MipidShndSh2dShhLXIpK28qYyp2dShpLW4pKSksZz1kdShwKSx5PXA/ZnVuY3Rpb24odCl7dmFyIGU9ZHUodCo9cCkvZyxuPWR1KHAtdCkvZyxyPW4qdStlKmYsaT1uKmgrZSpkLGE9bipzK2UqbDtyZXR1cm5bb3UoaSxyKSpudSxvdShhLGd1KHIqcitpKmkpKSpudV19OmZ1bmN0aW9uKCl7cmV0dXJuW24qbnUscipudV19O3JldHVybiB5LmRpc3RhbmNlPXAseX1jb25zdCBXZj10PT50O3ZhciBxZixIZixWZixHZixYZj1uZXcgeCxaZj1uZXcgeCxRZj17cG9pbnQ6X3UsbGluZVN0YXJ0Ol91LGxpbmVFbmQ6X3UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UWYubGluZVN0YXJ0PUtmLFFmLmxpbmVFbmQ9ZWR9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtRZi5saW5lU3RhcnQ9UWYubGluZUVuZD1RZi5wb2ludD1fdSxYZi5hZGQoaXUoWmYpKSxaZj1uZXcgeH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9WGYvMjtyZXR1cm4gWGY9bmV3IHgsdH19O2Z1bmN0aW9uIEtmKCl7UWYucG9pbnQ9SmZ9ZnVuY3Rpb24gSmYodCxlKXtRZi5wb2ludD10ZCxxZj1WZj10LEhmPUdmPWV9ZnVuY3Rpb24gdGQodCxlKXtaZi5hZGQoR2YqdC1WZiplKSxWZj10LEdmPWV9ZnVuY3Rpb24gZWQoKXt0ZChxZixIZil9Y29uc3QgbmQ9UWY7dmFyIHJkPTEvMCxpZD1yZCxhZD0tcmQsb2Q9YWQsc2Q9e3BvaW50OmZ1bmN0aW9uKHQsZSl7dDxyZCYmKHJkPXQpLHQ+YWQmJihhZD10KSxlPGlkJiYoaWQ9ZSksZT5vZCYmKG9kPWUpfSxsaW5lU3RhcnQ6X3UsbGluZUVuZDpfdSxwb2x5Z29uU3RhcnQ6X3UscG9seWdvbkVuZDpfdSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW3JkLGlkXSxbYWQsb2RdXTtyZXR1cm4gYWQ9b2Q9LShpZD1yZD0xLzApLHR9fTtjb25zdCBjZD1zZDt2YXIgbGQsdWQsaGQsZmQsZGQ9MCxwZD0wLGdkPTAseWQ9MCxtZD0wLGJkPTAsdmQ9MCxfZD0wLHhkPTAsa2Q9e3BvaW50OndkLGxpbmVTdGFydDpUZCxsaW5lRW5kOlNkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2tkLmxpbmVTdGFydD1BZCxrZC5saW5lRW5kPU1kfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7a2QucG9pbnQ9d2Qsa2QubGluZVN0YXJ0PVRkLGtkLmxpbmVFbmQ9U2R9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXhkP1t2ZC94ZCxfZC94ZF06YmQ/W3lkL2JkLG1kL2JkXTpnZD9bZGQvZ2QscGQvZ2RdOltOYU4sTmFOXTtyZXR1cm4gZGQ9cGQ9Z2Q9eWQ9bWQ9YmQ9dmQ9X2Q9eGQ9MCx0fX07ZnVuY3Rpb24gd2QodCxlKXtkZCs9dCxwZCs9ZSwrK2dkfWZ1bmN0aW9uIFRkKCl7a2QucG9pbnQ9RWR9ZnVuY3Rpb24gRWQodCxlKXtrZC5wb2ludD1DZCx3ZChoZD10LGZkPWUpfWZ1bmN0aW9uIENkKHQsZSl7dmFyIG49dC1oZCxyPWUtZmQsaT1ndShuKm4rcipyKTt5ZCs9aSooaGQrdCkvMixtZCs9aSooZmQrZSkvMixiZCs9aSx3ZChoZD10LGZkPWUpfWZ1bmN0aW9uIFNkKCl7a2QucG9pbnQ9d2R9ZnVuY3Rpb24gQWQoKXtrZC5wb2ludD1OZH1mdW5jdGlvbiBNZCgpe09kKGxkLHVkKX1mdW5jdGlvbiBOZCh0LGUpe2tkLnBvaW50PU9kLHdkKGxkPWhkPXQsdWQ9ZmQ9ZSl9ZnVuY3Rpb24gT2QodCxlKXt2YXIgbj10LWhkLHI9ZS1mZCxpPWd1KG4qbityKnIpO3lkKz1pKihoZCt0KS8yLG1kKz1pKihmZCtlKS8yLGJkKz1pLHZkKz0oaT1mZCp0LWhkKmUpKihoZCt0KSxfZCs9aSooZmQrZSkseGQrPTMqaSx3ZChoZD10LGZkPWUpfWNvbnN0IERkPWtkO2Z1bmN0aW9uIEJkKHQpe3RoaXMuX2NvbnRleHQ9dH1CZC5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxlKSx0aGlzLl9jb250ZXh0LmFyYyh0LGUsdGhpcy5fcmFkaXVzLDAsZXUpfX0scmVzdWx0Ol91fTt2YXIgTGQsSWQsRmQsUmQsUGQsamQ9bmV3IHgsemQ9e3BvaW50Ol91LGxpbmVTdGFydDpmdW5jdGlvbigpe3pkLnBvaW50PVlkfSxsaW5lRW5kOmZ1bmN0aW9uKCl7TGQmJlVkKElkLEZkKSx6ZC5wb2ludD1fdX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TGQ9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtMZD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0ramQ7cmV0dXJuIGpkPW5ldyB4LHR9fTtmdW5jdGlvbiBZZCh0LGUpe3pkLnBvaW50PVVkLElkPVJkPXQsRmQ9UGQ9ZX1mdW5jdGlvbiBVZCh0LGUpe1JkLT10LFBkLT1lLGpkLmFkZChndShSZCpSZCtQZCpQZCkpLFJkPXQsUGQ9ZX1jb25zdCAkZD16ZDtmdW5jdGlvbiBXZCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBxZCh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBIZCh0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQ3UodCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBDdSh0LG4obmQpKSxuZC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBDdSh0LG4oJGQpKSwkZC5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIEN1KHQsbihjZCkpLGNkLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBDdSh0LG4oRGQpKSxEZC5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxXZik6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IFdkKTpuZXcgQmQoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX1mdW5jdGlvbiBWZCh0KXtyZXR1cm57c3RyZWFtOkdkKHQpfX1mdW5jdGlvbiBHZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IFhkO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBYZCgpe31mdW5jdGlvbiBaZCh0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLEN1KG4sdC5zdHJlYW0oY2QpKSxlKGNkLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiBRZCh0LGUsbil7cmV0dXJuIFpkKHQsKGZ1bmN0aW9uKG4pe3ZhciByPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKHIvKG5bMV1bMF0tblswXVswXSksaS8oblsxXVsxXS1uWzBdWzFdKSksbz0rZVswXVswXSsoci1hKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSksbil9ZnVuY3Rpb24gS2QodCxlLG4pe3JldHVybiBRZCh0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBKZCh0LGUsbil7cmV0dXJuIFpkKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxhPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsbz0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1mdW5jdGlvbiB0cCh0LGUsbil7cmV0dXJuIFpkKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVsxXS1uWzBdWzFdKSxhPS1pKm5bMF1bMF0sbz0oci1pKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1XZC5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6cWQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1xZCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LFhkLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WGQscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGVwPXN1KDMwKnJ1KTtmdW5jdGlvbiBucCh0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyxsLHUsaCxmLGQscCxnLHkpe3ZhciBtPWwtcixiPXUtaSx2PW0qbStiKmI7aWYodj40KmUmJmctLSl7dmFyIF89bytmLHg9cytkLGs9YytwLHc9Z3UoXypfK3gqeCtrKmspLFQ9YnUoay89dyksRT1pdShpdShrKS0xKTxabHx8aXUoYS1oKTxabD8oYStoKS8yOm91KHgsXyksQz10KEUsVCksUz1DWzBdLEE9Q1sxXSxNPVMtcixOPUEtaSxPPWIqTS1tKk47KE8qTy92PmV8fGl1KChtKk0rYipOKS92LS41KT4uM3x8bypmK3MqZCtjKnA8ZXApJiYobihyLGksYSxvLHMsYyxTLEEsRSxfLz13LHgvPXcsayxnLHkpLHkucG9pbnQoUyxBKSxuKFMsQSxFLF8seCxrLGwsdSxoLGYsZCxwLGcseSkpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxhLG8scyxjLGwsdSxoLGYsZCxwLGc9e3BvaW50OnksbGluZVN0YXJ0Om0sbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksZy5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLGcubGluZVN0YXJ0PW19fTtmdW5jdGlvbiB5KG4scil7bj10KG4sciksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIG0oKXt1PU5hTixnLnBvaW50PWIsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiBiKHIsaSl7dmFyIGE9S3UoW3IsaV0pLG89dChyLGkpO24odSxoLGwsZixkLHAsdT1vWzBdLGg9b1sxXSxsPXIsZj1hWzBdLGQ9YVsxXSxwPWFbMl0sMTYsZSksZS5wb2ludCh1LGgpfWZ1bmN0aW9uIHYoKXtnLnBvaW50PXksZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe20oKSxnLnBvaW50PXgsZy5saW5lRW5kPWt9ZnVuY3Rpb24geCh0LGUpe2Iocj10LGUpLGk9dSxhPWgsbz1mLHM9ZCxjPXAsZy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtuKHUsaCxsLGYsZCxwLGksYSxyLG8scyxjLDE2LGUpLGcubGluZUVuZD12LHYoKX1yZXR1cm4gZ319KHQsZSk6ZnVuY3Rpb24odCl7cmV0dXJuIEdkKHtwb2ludDpmdW5jdGlvbihlLG4pe2U9dChlLG4pLHRoaXMuc3RyZWFtLnBvaW50KGVbMF0sZVsxXSl9fSl9KHQpfXZhciBycD1HZCh7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KnJ1LGUqcnUpfX0pO2Z1bmN0aW9uIGlwKHQsZSxuLHIsaSxhKXtpZighYSlyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpKXtmdW5jdGlvbiBhKGEsbyl7cmV0dXJuW2UrdCooYSo9ciksbi10KihvKj1pKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKGEsbyl7cmV0dXJuWyhhLWUpL3Qqciwobi1vKS90KmldfSxhfSh0LGUsbixyLGkpO3ZhciBvPXN1KGEpLHM9ZHUoYSksYz1vKnQsbD1zKnQsdT1vL3QsaD1zL3QsZj0ocypuLW8qZSkvdCxkPShzKmUrbypuKS90O2Z1bmN0aW9uIHAodCxhKXtyZXR1cm5bYyoodCo9ciktbCooYSo9aSkrZSxuLWwqdC1jKmFdfXJldHVybiBwLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybltyKih1KnQtaCplK2YpLGkqKGQtaCp0LXUqZSldfSxwfWZ1bmN0aW9uIGFwKHQpe3JldHVybiBvcCgoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIG9wKHQpe3ZhciBlLG4scixpLGEsbyxzLGMsbCx1LGg9MTUwLGY9NDgwLGQ9MjUwLHA9MCxnPTAseT0wLG09MCxiPTAsdj0wLF89MSx4PTEsaz1udWxsLHc9ZmYsVD1udWxsLEU9V2YsQz0uNTtmdW5jdGlvbiBTKHQpe3JldHVybiBjKHRbMF0qcnUsdFsxXSpydSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4odD1jLmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qbnUsdFsxXSpudV19ZnVuY3Rpb24gTSgpe3ZhciB0PWlwKGgsMCwwLF8seCx2KS5hcHBseShudWxsLGUocCxnKSkscj1pcChoLGYtdFswXSxkLXRbMV0sXyx4LHYpO3JldHVybiBuPVZoKHksbSxiKSxzPXFoKGUsciksYz1xaChuLHMpLG89bnAocyxDKSxOKCl9ZnVuY3Rpb24gTigpe3JldHVybiBsPXU9bnVsbCxTfXJldHVybiBTLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gbCYmdT09PXQ/bDpsPXJwKGZ1bmN0aW9uKHQpe3JldHVybiBHZCh7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKHcobyhFKHU9dCkpKSkpfSxTLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXZvaWQgMCxOKCkpOnd9LFMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxUPXI9aT1hPW51bGwsTigpKTpFfSxTLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0rdD9kZihrPXQqcnUpOihrPW51bGwsZmYpLE4oKSk6aypudX0sUy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFQ9cj1pPWE9bnVsbCxXZik6X2YoVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTigpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLGFdXX0sUy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxNKCkpOmh9LFMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sTSgpKTpbZixkXX0sUy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqcnUsZz10WzFdJTM2MCpydSxNKCkpOltwKm51LGcqbnVdfSxTLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10WzBdJTM2MCpydSxtPXRbMV0lMzYwKnJ1LGI9dC5sZW5ndGg+Mj90WzJdJTM2MCpydTowLE0oKSk6W3kqbnUsbSpudSxiKm51XX0sUy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10JTM2MCpydSxNKCkpOnYqbnV9LFMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dD8tMToxLE0oKSk6XzwwfSxTLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxNKCkpOng8MH0sUy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnAocyxDPXQqdCksTigpKTpndShDKX0sUy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUWQoUyx0LGUpfSxTLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gS2QoUyx0LGUpfSxTLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpkKFMsdCxlKX0sUy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHAoUyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFMuaW52ZXJ0PWUuaW52ZXJ0JiZBLE0oKX19ZnVuY3Rpb24gc3AodCl7dmFyIGU9MCxuPUtsLzMscj1vcCh0KSxpPXIoZSxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihlPXRbMF0qcnUsbj10WzFdKnJ1KTpbZSpudSxuKm51XX0saX1mdW5jdGlvbiBjcCh0LGUpe3ZhciBuPWR1KHQpLHI9KG4rZHUoZSkpLzI7aWYoaXUocik8WmwpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXN1KHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLGR1KG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsYnUobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9Z3UoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49Z3UoaS0yKnIqZHUoZSkpL3I7cmV0dXJuW24qZHUodCo9ciksYS1uKnN1KHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUsbz1vdSh0LGl1KG4pKSpwdShuKTtyZXR1cm4gbipyPDAmJihvLT1LbCpwdSh0KSpwdShuKSksW28vcixidSgoaS0odCp0K24qbikqcipyKS8oMipyKSldfSxvfWZ1bmN0aW9uIGxwKCl7cmV0dXJuIHNwKGNwKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIHVwKCl7cmV0dXJuIGxwKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gaHAoKXt2YXIgdCxlLG4scixpLGEsbz11cCgpLHM9bHAoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9bHAoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksbD17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gdSh0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLG4ucG9pbnQoZSxvKSxhfHwoci5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsdX1yZXR1cm4gdS5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5zY2FsZSgpLG49by50cmFuc2xhdGUoKSxyPSh0WzBdLW5bMF0pL2UsaT0odFsxXS1uWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2M6bykuaW52ZXJ0KHQpfSx1LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDoocj1bby5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxjLnN0cmVhbShuKV0saT1yLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248aTspcltuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIHIsaX0sdS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6by5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLHUudHJhbnNsYXRlKG8udHJhbnNsYXRlKCkpKTpvLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvLnRyYW5zbGF0ZSgpO3ZhciBlPW8uc2NhbGUoKSxhPSt0WzBdLHU9K3RbMV07cmV0dXJuIG49by50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLHUtLjIzOCplXSxbYSsuNDU1KmUsdSsuMjM4KmVdXSkuc3RyZWFtKGwpLHI9cy50cmFuc2xhdGUoW2EtLjMwNyplLHUrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplK1psLHUrLjEyKmUrWmxdLFthLS4yMTQqZS1abCx1Ky4yMzQqZS1abF1dKS5zdHJlYW0obCksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsdSsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrWmwsdSsuMTY2KmUrWmxdLFthLS4xMTUqZS1abCx1Ky4yMzQqZS1abF1dKS5zdHJlYW0obCksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBRZCh1LHQsZSl9LHUuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBLZCh1LHQsZSl9LHUuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSmQodSx0LGUpfSx1LmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiB0cCh1LHQsZSl9LHUuc2NhbGUoMTA3MCl9ZnVuY3Rpb24gZnAodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9c3UoZSksaT1zdShuKSxhPXQocippKTtyZXR1cm4gYT09PTEvMD9bMiwwXTpbYSppKmR1KGUpLGEqZHUobildfX1mdW5jdGlvbiBkcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1ndShlKmUrbipuKSxpPXQociksYT1kdShpKSxvPXN1KGkpO3JldHVybltvdShlKmEscipvKSxidShyJiZuKmEvcildfX12YXIgcHA9ZnAoKGZ1bmN0aW9uKHQpe3JldHVybiBndSgyLygxK3QpKX0pKTtmdW5jdGlvbiBncCgpe3JldHVybiBhcChwcCkuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9cHAuaW52ZXJ0PWRwKChmdW5jdGlvbih0KXtyZXR1cm4gMipidSh0LzIpfSkpO3ZhciB5cD1mcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQ9bXUodCkpJiZ0L2R1KHQpfSkpO2Z1bmN0aW9uIG1wKCl7cmV0dXJuIGFwKHlwKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9ZnVuY3Rpb24gYnAodCxlKXtyZXR1cm5bdCxodSh5dSgoSmwrZSkvMikpXX1mdW5jdGlvbiB2cCgpe3JldHVybiBfcChicCkuc2NhbGUoOTYxL2V1KX1mdW5jdGlvbiBfcCh0KXt2YXIgZSxuLHIsaT1hcCh0KSxhPWkuY2VudGVyLG89aS5zY2FsZSxzPWkudHJhbnNsYXRlLGM9aS5jbGlwRXh0ZW50LGw9bnVsbDtmdW5jdGlvbiB1KCl7dmFyIGE9S2wqbygpLHM9aShRaChpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT1sP1tbc1swXS1hLHNbMV0tYV0sW3NbMF0rYSxzWzFdK2FdXTp0PT09YnA/W1tNYXRoLm1heChzWzBdLWEsbCksZV0sW01hdGgubWluKHNbMF0rYSxuKSxyXV06W1tsLE1hdGgubWF4KHNbMV0tYSxlKV0sW24sTWF0aC5taW4oc1sxXSthLHIpXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLHUoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSx1KCkpOnMoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksdSgpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9sPWU9bj1yPW51bGw6KGw9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLHI9K3RbMV1bMV0pLHUoKSk6bnVsbD09bD9udWxsOltbbCxlXSxbbixyXV19LHUoKX1mdW5jdGlvbiB4cCh0KXtyZXR1cm4geXUoKEpsK3QpLzIpfWZ1bmN0aW9uIGtwKHQsZSl7dmFyIG49c3UodCkscj10PT09ZT9kdSh0KTpodShuL3N1KGUpKS9odSh4cChlKS94cCh0KSksaT1uKmZ1KHhwKHQpLHIpL3I7aWYoIXIpcmV0dXJuIGJwO2Z1bmN0aW9uIGEodCxlKXtpPjA/ZTwtSmwrWmwmJihlPS1KbCtabCk6ZT5KbC1abCYmKGU9SmwtWmwpO3ZhciBuPWkvZnUoeHAoZSkscik7cmV0dXJuW24qZHUocip0KSxpLW4qc3Uocip0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS1lLGE9cHUocikqZ3UodCp0K24qbiksbz1vdSh0LGl1KG4pKSpwdShuKTtyZXR1cm4gbipyPDAmJihvLT1LbCpwdSh0KSpwdShuKSksW28vciwyKmF1KGZ1KGkvYSwxL3IpKS1KbF19LGF9ZnVuY3Rpb24gd3AoKXtyZXR1cm4gc3Aoa3ApLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9ZnVuY3Rpb24gVHAodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBFcCgpe3JldHVybiBhcChUcCkuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBDcCh0LGUpe3ZhciBuPXN1KHQpLHI9dD09PWU/ZHUodCk6KG4tc3UoZSkpLyhlLXQpLGk9bi9yK3Q7aWYoaXUocik8WmwpcmV0dXJuIFRwO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qZHUoYSksaS1uKnN1KGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1vdSh0LGl1KG4pKSpwdShuKTtyZXR1cm4gbipyPDAmJihhLT1LbCpwdSh0KSpwdShuKSksW2EvcixpLXB1KHIpKmd1KHQqdCtuKm4pXX0sYX1mdW5jdGlvbiBTcCgpe3JldHVybiBzcChDcCkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX15cC5pbnZlcnQ9ZHAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLGJwLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqYXUobHUoZSkpLUpsXX0sVHAuaW52ZXJ0PVRwO3ZhciBBcD0xLjM0MDI2NCxNcD0tLjA4MTEwNixOcD04OTNlLTYsT3A9LjAwMzc5NixEcD1ndSgzKS8yO2Z1bmN0aW9uIEJwKHQsZSl7dmFyIG49YnUoRHAqZHUoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3Qqc3UobikvKERwKihBcCszKk1wKnIraSooNypOcCs5Kk9wKnIpKSksbiooQXArTXAqcitpKihOcCtPcCpyKSldfWZ1bmN0aW9uIExwKCl7cmV0dXJuIGFwKEJwKS5zY2FsZSgxNzcuMTU4KX1mdW5jdGlvbiBJcCh0LGUpe3ZhciBuPXN1KGUpLHI9c3UodCkqbjtyZXR1cm5bbipkdSh0KS9yLGR1KGUpL3JdfWZ1bmN0aW9uIEZwKCl7cmV0dXJuIGFwKElwKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfWZ1bmN0aW9uIFJwKCl7dmFyIHQsZSxuLHIsaSxhLG8scz0xLGM9MCxsPTAsdT0xLGg9MSxmPTAsZD1udWxsLHA9MSxnPTEseT1HZCh7cG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj12KFt0LGVdKTt0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pLG09V2Y7ZnVuY3Rpb24gYigpe3JldHVybiBwPXMqdSxnPXMqaCxhPW89bnVsbCx2fWZ1bmN0aW9uIHYobil7dmFyIHI9blswXSpwLGk9blsxXSpnO2lmKGYpe3ZhciBhPWkqdC1yKmU7cj1yKnQraSplLGk9YX1yZXR1cm5bcitjLGkrbF19cmV0dXJuIHYuaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByPW5bMF0tYyxpPW5bMV0tbDtpZihmKXt2YXIgYT1pKnQrciplO3I9cip0LWkqZSxpPWF9cmV0dXJuW3IvcCxpL2ddfSx2LnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYSYmbz09PXQ/YTphPXkobShvPXQpKX0sdi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10LGQ9bj1yPWk9bnVsbCxiKCkpOm19LHYuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhkPW49cj1pPW51bGwsV2YpOl9mKGQ9K3RbMF1bMF0sbj0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLGIoKSk6bnVsbD09ZD9udWxsOltbZCxuXSxbcixpXV19LHYuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsYigpKTpzfSx2LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSxsPSt0WzFdLGIoKSk6W2MsbF19LHYuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZHUoZj1uJTM2MCpydSksdD1zdShmKSxiKCkpOmYqbnV9LHYucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dD8tMToxLGIoKSk6dTwwfSx2LnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQ/LTE6MSxiKCkpOmg8MH0sdi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUWQodix0LGUpfSx2LmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gS2Qodix0LGUpfSx2LmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpkKHYsdCxlKX0sdi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHAodix0LGUpfSx2fWZ1bmN0aW9uIFBwKHQsZSl7dmFyIG49ZSplLHI9bipuO3JldHVyblt0KiguODcwNy0uMTMxOTc5Km4rcioociooLjAwMzk3MSpuLS4wMDE1MjkqciktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K24qKC4wMTUwODUrciooLjAyODg3NCpuLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBqcCgpe3JldHVybiBhcChQcCkuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24genAodCxlKXtyZXR1cm5bc3UoZSkqZHUodCksZHUoZSldfWZ1bmN0aW9uIFlwKCl7cmV0dXJuIGFwKHpwKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9ZnVuY3Rpb24gVXAodCxlKXt2YXIgbj1zdShlKSxyPTErc3UodCkqbjtyZXR1cm5bbipkdSh0KS9yLGR1KGUpL3JdfWZ1bmN0aW9uICRwKCl7cmV0dXJuIGFwKFVwKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFdwKHQsZSl7cmV0dXJuW2h1KHl1KChKbCtlKS8yKSksLXRdfWZ1bmN0aW9uIHFwKCl7dmFyIHQ9X3AoV3ApLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfWZ1bmN0aW9uIEhwKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIFZwKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIEdwKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBYcCgpe3ZhciB0PUhwLGU9MSxuPTEscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhLG89MDtpLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKFZwLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UoR3AsMCl9KG4pKTooZS54PWE/bys9dChlLGEpOjAsZS55PTAsYT1lKX0pKTt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KGkpLGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShpKSxsPXMueC10KHMsYykvMix1PWMueCt0KGMscykvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKmUsdC55PShpLnktdC55KSpufTpmdW5jdGlvbih0KXt0Lng9KHQueC1sKS8odS1sKSplLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKm59KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBacCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIFFwKHQsZSl7dCBpbnN0YW5jZW9mIE1hcD8odD1bdm9pZCAwLHRdLHZvaWQgMD09PWUmJihlPUpwKSk6dm9pZCAwPT09ZSYmKGU9S3ApO2Zvcih2YXIgbixyLGksYSxvLHM9bmV3IG5nKHQpLGM9W3NdO249Yy5wb3AoKTspaWYoKGk9ZShuLmRhdGEpKSYmKG89KGk9QXJyYXkuZnJvbShpKSkubGVuZ3RoKSlmb3Iobi5jaGlsZHJlbj1pLGE9by0xO2E+PTA7LS1hKWMucHVzaChyPWlbYV09bmV3IG5nKGlbYV0pKSxyLnBhcmVudD1uLHIuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoZWcpfWZ1bmN0aW9uIEtwKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIEpwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMV06bnVsbH1mdW5jdGlvbiB0Zyh0KXt2b2lkIDAhPT10LmRhdGEudmFsdWUmJih0LnZhbHVlPXQuZGF0YS52YWx1ZSksdC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGVnKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gbmcodCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gcmcodCl7Zm9yKHZhciBlLG4scj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10Lmxlbmd0aDtyOyluPU1hdGgucmFuZG9tKCkqci0tfDAsZT10W3JdLHRbcl09dFtuXSx0W25dPWU7cmV0dXJuIHR9KEFycmF5LmZyb20odCkpKS5sZW5ndGgsYT1bXTtyPGk7KWU9dFtyXSxuJiZvZyhuLGUpPysrcjoobj1jZyhhPWlnKGEsZSkpLHI9MCk7cmV0dXJuIG59ZnVuY3Rpb24gaWcodCxlKXt2YXIgbixyO2lmKHNnKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYoYWcoZSx0W25dKSYmc2cobGcodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8dC5sZW5ndGg7KytyKWlmKGFnKGxnKHRbbl0sdFtyXSksZSkmJmFnKGxnKHRbbl0sZSksdFtyXSkmJmFnKGxnKHRbcl0sZSksdFtuXSkmJnNnKHVnKHRbbl0sdFtyXSxlKSx0KSlyZXR1cm5bdFtuXSx0W3JdLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBhZyh0LGUpe3ZhciBuPXQuci1lLnIscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48cipyK2kqaX1mdW5jdGlvbiBvZyh0LGUpe3ZhciBuPXQuci1lLnIrMWUtOSpNYXRoLm1heCh0LnIsZS5yLDEpLHI9ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIG4+MCYmbipuPnIqcitpKml9ZnVuY3Rpb24gc2codCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbilpZighb2codCxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBjZyh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIGxnKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB1Zyh0WzBdLHRbMV0sdFsyXSl9dmFyIGV9ZnVuY3Rpb24gbGcodCxlKXt2YXIgbj10Lngscj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsYz1hLW4sbD1vLXIsdT1zLWksaD1NYXRoLnNxcnQoYypjK2wqbCk7cmV0dXJue3g6KG4rYStjL2gqdSkvMix5OihyK28rbC9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHVnKHQsZSxuKXt2YXIgcj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksYz1lLnIsbD1uLngsdT1uLnksaD1uLnIsZj1yLW8sZD1yLWwscD1pLXMsZz1pLXUseT1jLWEsbT1oLWEsYj1yKnIraSppLWEqYSx2PWItbypvLXMqcytjKmMsXz1iLWwqbC11KnUraCpoLHg9ZCpwLWYqZyxrPShwKl8tZyp2KS8oMip4KS1yLHc9KGcqeS1wKm0pL3gsVD0oZCp2LWYqXykvKDIqeCktaSxFPShmKm0tZCp5KS94LEM9dyp3K0UqRS0xLFM9MiooYStrKncrVCpFKSxBPWsqaytUKlQtYSphLE09LShDPyhTK01hdGguc3FydChTKlMtNCpDKkEpKS8oMipDKTpBL1MpO3JldHVybnt4OnIrayt3Kk0seTppK1QrRSpNLHI6TX19ZnVuY3Rpb24gaGcodCxlLG4pe3ZhciByLGksYSxvLHM9dC54LWUueCxjPXQueS1lLnksbD1zKnMrYypjO2w/KGk9ZS5yK24ucixpKj1pLG89dC5yK24ucixpPihvKj1vKT8ocj0obCtvLWkpLygyKmwpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsby9sLXIqcikpLG4ueD10LngtcipzLWEqYyxuLnk9dC55LXIqYythKnMpOihyPShsK2ktbykvKDIqbCksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL2wtcipyKSksbi54PWUueCtyKnMtYSpjLG4ueT1lLnkrcipjK2EqcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBmZyh0LGUpe3ZhciBuPXQucitlLnItMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIGRnKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLHI9ZS5yK24ucixpPShlLngqbi5yK24ueCplLnIpL3IsYT0oZS55Km4ucituLnkqZS5yKS9yO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIHBnKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBnZyh0KXtpZighKGE9KGU9dCx0PSJvYmplY3QiPT10eXBlb2YgZSYmImxlbmd0aCJpbiBlP2U6QXJyYXkuZnJvbShlKSkubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLGwsdSxoLGY7aWYoKG49dFswXSkueD0wLG4ueT0wLCEoYT4xKSlyZXR1cm4gbi5yO2lmKHI9dFsxXSxuLng9LXIucixyLng9bi5yLHIueT0wLCEoYT4yKSlyZXR1cm4gbi5yK3IucjtoZyhyLG4saT10WzJdKSxuPW5ldyBwZyhuKSxyPW5ldyBwZyhyKSxpPW5ldyBwZyhpKSxuLm5leHQ9aS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWksaS5uZXh0PXIucHJldmlvdXM9bjt0OmZvcihjPTM7YzxhOysrYyl7aGcobi5fLHIuXyxpPXRbY10pLGk9bmV3IHBnKGkpLGw9ci5uZXh0LHU9bi5wcmV2aW91cyxoPXIuXy5yLGY9bi5fLnI7ZG97aWYoaDw9Zil7aWYoZmcobC5fLGkuXykpe3I9bCxuLm5leHQ9cixyLnByZXZpb3VzPW4sLS1jO2NvbnRpbnVlIHR9aCs9bC5fLnIsbD1sLm5leHR9ZWxzZXtpZihmZyh1Ll8saS5fKSl7KG49dSkubmV4dD1yLHIucHJldmlvdXM9biwtLWM7Y29udGludWUgdH1mKz11Ll8ucix1PXUucHJldmlvdXN9fXdoaWxlKGwhPT11Lm5leHQpO2ZvcihpLnByZXZpb3VzPW4saS5uZXh0PXIsbi5uZXh0PXIucHJldmlvdXM9cj1pLG89ZGcobik7KGk9aS5uZXh0KSE9PXI7KShzPWRnKGkpKTxvJiYobj1pLG89cyk7cj1uLm5leHR9Zm9yKG49W3IuX10saT1yOyhpPWkubmV4dCkhPT1yOyluLnB1c2goaS5fKTtmb3IoaT1yZyhuKSxjPTA7YzxhOysrYykobj10W2NdKS54LT1pLngsbi55LT1pLnk7cmV0dXJuIGkucn1mdW5jdGlvbiB5Zyh0KXtyZXR1cm4gZ2codCksdH1mdW5jdGlvbiBtZyh0KXtyZXR1cm4gbnVsbD09dD9udWxsOmJnKHQpfWZ1bmN0aW9uIGJnKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiB2Zygpe3JldHVybiAwfWZ1bmN0aW9uIF9nKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiB4Zyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIGtnKCl7dmFyIHQ9bnVsbCxlPTEsbj0xLHI9dmc7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9bi8yLHQ/aS5lYWNoQmVmb3JlKHdnKHQpKS5lYWNoQWZ0ZXIoVGcociwuNSkpLmVhY2hCZWZvcmUoRWcoMSkpOmkuZWFjaEJlZm9yZSh3Zyh4ZykpLmVhY2hBZnRlcihUZyh2ZywxKSkuZWFjaEFmdGVyKFRnKHIsaS5yL01hdGgubWluKGUsbikpKS5lYWNoQmVmb3JlKEVnKE1hdGgubWluKGUsbikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW1nKGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLGkpOltlLG5dfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfZygrdCksaSk6cn0saX1mdW5jdGlvbiB3Zyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIFRnKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKHI9bi5jaGlsZHJlbil7dmFyIHIsaSxhLG89ci5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3IoaT0wO2k8bzsrK2kpcltpXS5yKz1zO2lmKGE9Z2cocikscylmb3IoaT0wO2k8bzsrK2kpcltpXS5yLT1zO24ucj1hK3N9fX1mdW5jdGlvbiBFZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX1mdW5jdGlvbiBDZyh0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gU2codCxlLG4scixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsYz1vLmxlbmd0aCxsPXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPGM7KShhPW9bc10pLnkwPW4sYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqbH1mdW5jdGlvbiBBZygpe3ZhciB0PTEsZT0xLG49MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPW4saS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZTZyhyLHIueDAsdCooci5kZXB0aCsxKS9lLHIueDEsdCooci5kZXB0aCsyKS9lKTt2YXIgaT1yLngwLGE9ci55MCxvPXIueDEtbixzPXIueTEtbjtvPGkmJihpPW89KGkrbykvMiksczxhJiYoYT1zPShhK3MpLzIpLHIueDA9aSxyLnkwPWEsci54MT1vLHIueTE9c319KGUsYSkpLHImJmkuZWFjaEJlZm9yZShDZyksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxpKTpufSxpfUJwLmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyPWUsaT1yKnIsYT1pKmkqaSxvPTA7bzwxMiYmKGE9KGk9KHItPW49KHIqKEFwK01wKmkrYSooTnArT3AqaSkpLWUpLyhBcCszKk1wKmkrYSooNypOcCs5Kk9wKmkpKSkqcikqaSppLCEoaXUobik8UWwpKTsrK28pO3JldHVybltEcCp0KihBcCszKk1wKmkrYSooNypOcCs5Kk9wKmkpKS9zdShyKSxidShkdShyKS9EcCldfSxJcC5pbnZlcnQ9ZHAoYXUpLFBwLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZSxpPTI1O2Rve3ZhciBhPXIqcixvPWEqYTtyLT1uPShyKigxLjAwNzIyNithKiguMDE1MDg1K28qKC4wMjg4NzQqYS0uMDQ0NDc1LS4wMDU5MTYqbykpKS1lKS8oMS4wMDcyMjYrYSooLjA0NTI1NStvKiguMjU5ODY2KmEtLjMxMTMyNS0uMDA1OTE2KjExKm8pKSl9d2hpbGUoaXUobik+WmwmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKGE9cipyKSooYSooYSphKmEqKC4wMDM5NzEtLjAwMTUyOSphKS0uMDEzNzkxKS0uMTMxOTc5KSkscl19LHpwLmludmVydD1kcChidSksVXAuaW52ZXJ0PWRwKChmdW5jdGlvbih0KXtyZXR1cm4gMiphdSh0KX0pKSxXcC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMiphdShsdSh0KSktSmxdfSxuZy5wcm90b3R5cGU9UXAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuZyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihacCl9LGVhY2g6ZnVuY3Rpb24odCxlKXtsZXQgbj0tMTtmb3IoY29uc3QgciBvZiB0aGlzKXQuY2FsbChlLHIsKytuLHRoaXMpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixpLGE9dGhpcyxvPVthXSxzPVtdLGM9LTE7YT1vLnBvcCgpOylpZihzLnB1c2goYSksbj1hLmNoaWxkcmVuKWZvcihyPTAsaT1uLmxlbmd0aDtyPGk7KytyKW8ucHVzaChuW3JdKTtmb3IoO2E9cy5wb3AoKTspdC5jYWxsKGUsYSwrK2MsdGhpcyk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixpPXRoaXMsYT1baV0sbz0tMTtpPWEucG9wKCk7KWlmKHQuY2FsbChlLGksKytvLHRoaXMpLG49aS5jaGlsZHJlbilmb3Iocj1uLmxlbmd0aC0xO3I+PTA7LS1yKWEucHVzaChuW3JdKTtyZXR1cm4gdGhpc30sZmluZDpmdW5jdGlvbih0LGUpe2xldCBuPS0xO2Zvcihjb25zdCByIG9mIHRoaXMpaWYodC5jYWxsKGUsciwrK24sdGhpcykpcmV0dXJuIHJ9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLHI9ZS5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspbis9cltpXS52YWx1ZTtlLnZhbHVlPW59KSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSkpfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLHI9ZS5hbmNlc3RvcnMoKSxpPW51bGw7Zm9yKHQ9bi5wb3AoKSxlPXIucG9wKCk7dD09PWU7KWk9dCx0PW4ucG9wKCksZT1yLnBvcCgpO3JldHVybiBpfShlLHQpLHI9W2VdO2UhPT1uOyllPWUucGFyZW50LHIucHVzaChlKTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pKSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIFFwKHRoaXMpLmVhY2hCZWZvcmUodGcpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXt2YXIgdCxlLG4scixpPXRoaXMsYT1baV07ZG97Zm9yKHQ9YS5yZXZlcnNlKCksYT1bXTtpPXQucG9wKCk7KWlmKHlpZWxkIGksZT1pLmNoaWxkcmVuKWZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKWEucHVzaChlW25dKX13aGlsZShhLmxlbmd0aCl9fTt2YXIgTWc9e2RlcHRoOi0xfSxOZz17fSxPZz17fTtmdW5jdGlvbiBEZyh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBCZyh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBMZygpe3ZhciB0LGU9RGcsbj1CZztmdW5jdGlvbiByKHIpe3ZhciBpLGEsbyxzLGMsbCx1LGgsZj1BcnJheS5mcm9tKHIpLGQ9ZSxwPW4sZz1uZXcgTWFwO2lmKG51bGwhPXQpe2NvbnN0IGU9Zi5tYXAoKChlLG4pPT5mdW5jdGlvbih0KXtsZXQgZT0odD1gJHt0fWApLmxlbmd0aDtyZXR1cm4gRmcodCxlLTEpJiYhRmcodCxlLTIpJiYodD10LnNsaWNlKDAsLTEpKSwiLyI9PT10WzBdP3Q6YC8ke3R9YH0odChlLG4scikpKSksbj1lLm1hcChJZyksaT1uZXcgU2V0KGUpLmFkZCgiIik7Zm9yKGNvbnN0IHQgb2YgbilpLmhhcyh0KXx8KGkuYWRkKHQpLGUucHVzaCh0KSxuLnB1c2goSWcodCkpLGYucHVzaChPZykpO2Q9KHQsbik9PmVbbl0scD0odCxlKT0+bltlXX1mb3Iobz0wLGk9Zi5sZW5ndGg7bzxpOysrbylhPWZbb10sbD1mW29dPW5ldyBuZyhhKSxudWxsIT0odT1kKGEsbyxyKSkmJih1Kz0iIikmJihoPWwuaWQ9dSxnLnNldChoLGcuaGFzKGgpP05nOmwpKSxudWxsIT0odT1wKGEsbyxyKSkmJih1Kz0iIikmJihsLnBhcmVudD11KTtmb3Iobz0wO288aTsrK28paWYodT0obD1mW29dKS5wYXJlbnQpe2lmKCEoYz1nLmdldCh1KSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3UpO2lmKGM9PT1OZyl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTtjLmNoaWxkcmVuP2MuY2hpbGRyZW4ucHVzaChsKTpjLmNoaWxkcmVuPVtsXSxsLnBhcmVudD1jfWVsc2V7aWYocyl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7cz1sfWlmKCFzKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKG51bGwhPXQpe2Zvcig7cy5kYXRhPT09T2cmJjE9PT1zLmNoaWxkcmVuLmxlbmd0aDspcz1zLmNoaWxkcmVuWzBdLC0taTtmb3IobGV0IHQ9Zi5sZW5ndGgtMTt0Pj0wJiYobD1mW3RdLGwuZGF0YT09PU9nKTstLXQpbC5kYXRhPW51bGx9aWYocy5wYXJlbnQ9TWcscy5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1pfSkpLmVhY2hCZWZvcmUoZWcpLHMucGFyZW50PW51bGwsaT4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gc31yZXR1cm4gci5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1tZyh0KSxyKTplfSxyLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW1nKHQpLHIpOm59LHIucGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1tZyhlKSxyKTp0fSxyfWZ1bmN0aW9uIElnKHQpe2xldCBlPXQubGVuZ3RoO2lmKGU8MilyZXR1cm4iIjtmb3IoOy0tZT4xJiYhRmcodCxlKTspO3JldHVybiB0LnNsaWNlKDAsZSl9ZnVuY3Rpb24gRmcodCxlKXtpZigiLyI9PT10W2VdKXtsZXQgbj0wO2Zvcig7ZT4wJiYiXFwiPT09dFstLWVdOykrK247aWYoMD09KDEmbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUmcodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gUGcodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqZyh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbZS5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIHpnKHQsZSxuKXt2YXIgcj1uLyhlLmktdC5pKTtlLmMtPXIsZS5zKz1uLHQuYys9cixlLnorPW4sZS5tKz1ufWZ1bmN0aW9uIFlnKHQsZSxuKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpufWZ1bmN0aW9uIFVnKHQsZSl7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPWV9ZnVuY3Rpb24gJGcoKXt2YXIgdD1SZyxlPTEsbj0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhLG89bmV3IFVnKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihyPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1yLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKG49ZS5jaGlsZHJlbltpXT1uZXcgVWcocltpXSxpKSksbi5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IFVnKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihjLmVhY2hBZnRlcihhKSxjLnBhcmVudC5tPS1jLnosYy5lYWNoQmVmb3JlKG8pLHIpaS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIGw9aSx1PWksaD1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PGwueCYmKGw9dCksdC54PnUueCYmKHU9dCksdC5kZXB0aD5oLmRlcHRoJiYoaD10KX0pKTt2YXIgZj1sPT09dT8xOnQobCx1KS8yLGQ9Zi1sLngscD1lLyh1LngrZitkKSxnPW4vKGguZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCpnfSkpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIG49ZS5jaGlsZHJlbixyPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP3JbZS5pLTFdOm51bGw7aWYobil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9bixlLm0rPW4sbis9ZS5zKyhyKz1lLmMpfShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxuLHIpe2lmKG4pe2Zvcih2YXIgaSxhPWUsbz1lLHM9bixjPWEucGFyZW50LmNoaWxkcmVuWzBdLGw9YS5tLHU9by5tLGg9cy5tLGY9Yy5tO3M9amcocyksYT1QZyhhKSxzJiZhOyljPVBnKGMpLChvPWpnKG8pKS5hPWUsKGk9cy56K2gtYS56LWwrdChzLl8sYS5fKSk+MCYmKHpnKFlnKHMsZSxyKSxlLGkpLGwrPWksdSs9aSksaCs9cy5tLGwrPWEubSxmKz1jLm0sdSs9by5tO3MmJiFqZyhvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhUGcoYykmJihjLnQ9YSxjLm0rPWwtZixyPWUpfXJldHVybiByfShlLGksZS5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBXZyh0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLGw9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSpsfVVnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG5nLnByb3RvdHlwZSk7dmFyIHFnPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBIZyh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHMsYyxsLHUsaCxmLGQscCxnLHksbT1bXSxiPWUuY2hpbGRyZW4sdj0wLF89MCx4PWIubGVuZ3RoLGs9ZS52YWx1ZTt2PHg7KXtjPWktbixsPWEtcjtkb3t1PWJbXysrXS52YWx1ZX13aGlsZSghdSYmXzx4KTtmb3IoaD1mPXUseT11KnUqKGc9TWF0aC5tYXgobC9jLGMvbCkvKGsqdCkpLHA9TWF0aC5tYXgoZi95LHkvaCk7Xzx4OysrXyl7aWYodSs9cz1iW19dLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSx5PXUqdSpnLChkPU1hdGgubWF4KGYveSx5L2gpKT5wKXt1LT1zO2JyZWFrfXA9ZH1tLnB1c2gobz17dmFsdWU6dSxkaWNlOmM8bCxjaGlsZHJlbjpiLnNsaWNlKHYsXyl9KSxvLmRpY2U/U2cobyxuLHIsaSxrP3IrPWwqdS9rOmEpOldnKG8sbixyLGs/bis9Yyp1L2s6aSxhKSxrLT11LHY9X31yZXR1cm4gbX1jb25zdCBWZz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtIZyhlLHQsbixyLGksYSl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0ocWcpO2Z1bmN0aW9uIEdnKCl7dmFyIHQ9VmcsZT0hMSxuPTEscj0xLGk9WzBdLGE9dmcsbz12ZyxzPXZnLGM9dmcsbD12ZztmdW5jdGlvbiB1KHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPW4sdC55MT1yLHQuZWFjaEJlZm9yZShoKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoQ2cpLHR9ZnVuY3Rpb24gaChlKXt2YXIgbj1pW2UuZGVwdGhdLHI9ZS54MCtuLHU9ZS55MCtuLGg9ZS54MS1uLGY9ZS55MS1uO2g8ciYmKHI9aD0ocitoKS8yKSxmPHUmJih1PWY9KHUrZikvMiksZS54MD1yLGUueTA9dSxlLngxPWgsZS55MT1mLGUuY2hpbGRyZW4mJihuPWlbZS5kZXB0aCsxXT1hKGUpLzIscis9bChlKS1uLHUrPW8oZSktbiwoaC09cyhlKS1uKTxyJiYocj1oPShyK2gpLzIpLChmLT1jKGUpLW4pPHUmJih1PWY9KHUrZikvMiksdChlLHIsdSxoLGYpKX1yZXR1cm4gdS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsdSk6ZX0sdS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLHI9K3RbMV0sdSk6W24scl19LHUudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1iZyhlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2coK3QpLHUpOmF9LHUucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTp1LnBhZGRpbmdUb3AoKX0sdS5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2coK3QpLHUpOm99LHUucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2coK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9nKCt0KSx1KTpjfSx1LnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2coK3QpLHUpOmx9LHV9ZnVuY3Rpb24gWGcodCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLGw9bmV3IEFycmF5KGMrMSk7Zm9yKGxbMF09bz1hPTA7YTxjOysrYSlsW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1jKX1mb3IodmFyIGg9bFtlXSxmPXIvMitoLGQ9ZSsxLHA9bi0xO2Q8cDspe3ZhciBnPWQrcD4+PjE7bFtnXTxmP2Q9ZysxOnA9Z31mLWxbZC0xXTxsW2RdLWYmJmUrMTxkJiYtLWQ7dmFyIHk9bFtkXS1oLG09ci15O2lmKG8taT5jLWEpe3ZhciBiPXI/KGkqbStvKnkpL3I6bzt0KGUsZCx5LGksYSxiLGMpLHQoZCxuLG0sYixhLG8sYyl9ZWxzZXt2YXIgdj1yPyhhKm0rYyp5KS9yOmM7dChlLGQseSxpLGEsbyx2KSx0KGQsbixtLGksdixvLGMpfX0oMCxjLHQudmFsdWUsZSxuLHIsaSl9ZnVuY3Rpb24gWmcodCxlLG4scixpKXsoMSZ0LmRlcHRoP1dnOlNnKSh0LGUsbixyLGkpfWNvbnN0IFFnPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsYyxsLHUsaD0tMSxmPW8ubGVuZ3RoLGQ9dC52YWx1ZTsrK2g8Zjspe2ZvcihjPShzPW9baF0pLmNoaWxkcmVuLGw9cy52YWx1ZT0wLHU9Yy5sZW5ndGg7bDx1OysrbClzLnZhbHVlKz1jW2xdLnZhbHVlO3MuZGljZT9TZyhzLG4scixpLGQ/cis9KGEtcikqcy52YWx1ZS9kOmEpOldnKHMsbixyLGQ/bis9KGktbikqcy52YWx1ZS9kOmksYSksZC09cy52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PW89SGcoZSx0LG4scixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufShxZyk7ZnVuY3Rpb24gS2codCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19ZnVuY3Rpb24gSmcodCxlKXt2YXIgbj12cigrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX1mdW5jdGlvbiB0eSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCooMS1uKStlKm4pfX1mdW5jdGlvbiBleSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1jb25zdCBueT1mdW5jdGlvbiB0KGUsbixyKXtmdW5jdGlvbiBpKHQsaSl7dmFyIGEsbyxzPXRbMF0sYz10WzFdLGw9dFsyXSx1PWlbMF0saD1pWzFdLGY9aVsyXSxkPXUtcyxwPWgtYyxnPWQqZCtwKnA7aWYoZzwxZS0xMilvPU1hdGgubG9nKGYvbCkvZSxhPWZ1bmN0aW9uKHQpe3JldHVybltzK3QqZCxjK3QqcCxsKk1hdGguZXhwKGUqdCpvKV19O2Vsc2V7dmFyIHk9TWF0aC5zcXJ0KGcpLG09KGYqZi1sKmwrcipnKS8oMipsKm4qeSksYj0oZipmLWwqbC1yKmcpLygyKmYqbip5KSx2PU1hdGgubG9nKE1hdGguc3FydChtKm0rMSktbSksXz1NYXRoLmxvZyhNYXRoLnNxcnQoYipiKzEpLWIpO289KF8tdikvZSxhPWZ1bmN0aW9uKHQpe3ZhciByLGk9dCpvLGE9ZXkodiksdT1sLyhuKnkpKihhKihyPWUqaSt2LCgocj1NYXRoLmV4cCgyKnIpKS0xKS8ocisxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KHYpKTtyZXR1cm5bcyt1KmQsYyt1KnAsbCphL2V5KGUqaSt2KV19fXJldHVybiBhLmR1cmF0aW9uPTFlMypvKmUvTWF0aC5TUVJUMixhfXJldHVybiBpLnJobz1mdW5jdGlvbihlKXt2YXIgbj1NYXRoLm1heCguMDAxLCtlKSxyPW4qbjtyZXR1cm4gdChuLHIscipyKX0saX0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIHJ5KHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9aHIoZSkpLmgsKG49aHIobikpLmgpLGk9X3IoZS5zLG4ucyksYT1fcihlLmwsbi5sKSxvPV9yKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fWNvbnN0IGl5PXJ5KHZyKTt2YXIgYXk9cnkoX3IpO2Z1bmN0aW9uIG95KHQsZSl7dmFyIG49X3IoKHQ9a28odCkpLmwsKGU9a28oZSkpLmwpLHI9X3IodC5hLGUuYSksaT1fcih0LmIsZS5iKSxhPV9yKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPXIoZSksdC5iPWkoZSksdC5vcGFjaXR5PWEoZSksdCsiIn19ZnVuY3Rpb24gc3kodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT1ObyhlKSkuaCwobj1ObyhuKSkuaCksaT1fcihlLmMsbi5jKSxhPV9yKGUubCxuLmwpLG89X3IoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLmM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9byh0KSxlKyIifX19Y29uc3QgY3k9c3kodnIpO3ZhciBseT1zeShfcik7ZnVuY3Rpb24gdXkodCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gcihlLHIpe3ZhciBpPXQoKGU9VW8oZSkpLmgsKHI9VW8ocikpLmgpLGE9X3IoZS5zLHIucyksbz1fcihlLmwsci5sKSxzPV9yKGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPWEodCksZS5sPW8oTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24sci5nYW1tYT1lLHJ9KDEpfWNvbnN0IGh5PXV5KHZyKTt2YXIgZnk9dXkoX3IpO2Z1bmN0aW9uIGR5KHQsZSl7dm9pZCAwPT09ZSYmKGU9dCx0PUlyKTtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KHI8MD8wOnIpO248cjspYVtuXT10KGksaT1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIGFbZV0odC1lKX19ZnVuY3Rpb24gcHkodCxlKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKW5bcl09dChyLyhlLTEpKTtyZXR1cm4gbn1mdW5jdGlvbiBneSh0KXtmb3IodmFyIGUsbj0tMSxyPXQubGVuZ3RoLGk9dFtyLTFdLGE9MDsrK248cjspZT1pLGk9dFtuXSxhKz1lWzFdKmlbMF0tZVswXSppWzFdO3JldHVybiBhLzJ9ZnVuY3Rpb24geXkodCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9MCxvPTAscz10W2ktMV0sYz0wOysrcjxpOyllPXMscz10W3JdLGMrPW49ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpuLG8rPShlWzFdK3NbMV0pKm47cmV0dXJuW2EvKGMqPTMpLG8vY119ZnVuY3Rpb24gbXkodCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIGJ5KHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHZ5KHQpe2NvbnN0IGU9dC5sZW5ndGgsbj1bMCwxXTtsZXQgcixpPTI7Zm9yKHI9MjtyPGU7KytyKXtmb3IoO2k+MSYmbXkodFtuW2ktMl1dLHRbbltpLTFdXSx0W3JdKTw9MDspLS1pO25baSsrXT1yfXJldHVybiBuLnNsaWNlKDAsaSl9ZnVuY3Rpb24gX3kodCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChieSksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9dnkociksbz12eShpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sbD1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKWwucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKWwucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gbH1mdW5jdGlvbiB4eSh0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1lWzBdLHM9ZVsxXSxjPWFbMF0sbD1hWzFdLHU9ITEsaD0wO2g8aTsrK2gpbj0oYT10W2hdKVswXSwocj1hWzFdKT5zIT1sPnMmJm88KGMtbikqKHMtcikvKGwtcikrbiYmKHU9IXUpLGM9bixsPXI7cmV0dXJuIHV9ZnVuY3Rpb24ga3kodCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9dFtpLTFdLG89YVswXSxzPWFbMV0sYz0wOysrcjxpOyllPW8sbj1zLGUtPW89KGE9dFtyXSlbMF0sbi09cz1hWzFdLGMrPU1hdGguaHlwb3QoZSxuKTtyZXR1cm4gY31jb25zdCB3eT1NYXRoLnJhbmRvbSxUeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0od3kpLEV5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihuPXQsdD0wKSx0PU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKG4pLXQsZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcihlKCkqbit0KX19cmV0dXJuIG4uc291cmNlPXQsbn0od3kpLEN5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9cilhPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLGE9MiplKCktMSxpPXIqcithKmF9d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbiphKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0od3kpLFN5PWZ1bmN0aW9uIHQoZSl7dmFyIG49Q3kuc291cmNlKGUpO2Z1bmN0aW9uIHIoKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIHIuc291cmNlPXQscn0od3kpLEF5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4odD0rdCk8PTA/KCk9PjA6ZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPXQ7cj4xOy0tciluKz1lKCk7cmV0dXJuIG4rciplKCl9fXJldHVybiBuLnNvdXJjZT10LG59KHd5KSxNeT1mdW5jdGlvbiB0KGUpe3ZhciBuPUF5LnNvdXJjZShlKTtmdW5jdGlvbiByKHQpe2lmKDA9PSh0PSt0KSlyZXR1cm4gZTt2YXIgcj1uKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvdH19cmV0dXJuIHIuc291cmNlPXQscn0od3kpLE55PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2cxcCgtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufSh3eSksT3k9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe2lmKCh0PSt0KTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbnZhbGlkIGFscGhhIik7cmV0dXJuIHQ9MS8tdCxmdW5jdGlvbigpe3JldHVybiBNYXRoLnBvdygxLWUoKSx0KX19cmV0dXJuIG4uc291cmNlPXQsbn0od3kpLER5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtpZigodD0rdCk8MHx8dD4xKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbnZhbGlkIHAiKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcihlKCkrdCl9fXJldHVybiBuLnNvdXJjZT10LG59KHd5KSxCeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7aWYoKHQ9K3QpPDB8fHQ+MSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBwIik7cmV0dXJuIDA9PT10PygpPT4xLzA6MT09PXQ/KCk9PjE6KHQ9TWF0aC5sb2cxcCgtdCksZnVuY3Rpb24oKXtyZXR1cm4gMStNYXRoLmZsb29yKE1hdGgubG9nMXAoLWUoKSkvdCl9KX1yZXR1cm4gbi5zb3VyY2U9dCxufSh3eSksTHk9ZnVuY3Rpb24gdChlKXt2YXIgbj1DeS5zb3VyY2UoZSkoKTtmdW5jdGlvbiByKHQscil7aWYoKHQ9K3QpPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgayIpO2lmKDA9PT10KXJldHVybigpPT4wO2lmKHI9bnVsbD09cj8xOityLDE9PT10KXJldHVybigpPT4tTWF0aC5sb2cxcCgtZSgpKSpyO3ZhciBpPSh0PDE/dCsxOnQpLTEvMyxhPTEvKDMqTWF0aC5zcXJ0KGkpKSxvPXQ8MT8oKT0+TWF0aC5wb3coZSgpLDEvdCk6KCk9PjE7cmV0dXJuIGZ1bmN0aW9uKCl7ZG97ZG97dmFyIHQ9bigpLHM9MSthKnR9d2hpbGUoczw9MCk7cyo9cypzO3ZhciBjPTEtZSgpfXdoaWxlKGM+PTEtLjAzMzEqdCp0KnQqdCYmTWF0aC5sb2coYyk+PS41KnQqdCtpKigxLXMrTWF0aC5sb2cocykpKTtyZXR1cm4gaSpzKm8oKSpyfX1yZXR1cm4gci5zb3VyY2U9dCxyfSh3eSksSXk9ZnVuY3Rpb24gdChlKXt2YXIgbj1MeS5zb3VyY2UoZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4odCksaT1uKGUpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXIoKTtyZXR1cm4gMD09PXQ/MDp0Lyh0K2koKSl9fXJldHVybiByLnNvdXJjZT10LHJ9KHd5KSxGeT1mdW5jdGlvbiB0KGUpe3ZhciBuPUJ5LnNvdXJjZShlKSxyPUl5LnNvdXJjZShlKTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ9K3QsKGU9K2UpPj0xPygpPT50OmU8PTA/KCk9PjA6ZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxhPXQsbz1lO2Eqbz4xNiYmYSooMS1vKT4xNjspe3ZhciBzPU1hdGguZmxvb3IoKGErMSkqbyksYz1yKHMsYS1zKzEpKCk7Yzw9bz8oaSs9cyxhLT1zLG89KG8tYykvKDEtYykpOihhPXMtMSxvLz1jKX1mb3IodmFyIGw9bzwuNSx1PW4obD9vOjEtbyksaD11KCksZj0wO2g8PWE7KytmKWgrPXUoKTtyZXR1cm4gaSsobD9mOmEtZil9fXJldHVybiBpLnNvdXJjZT10LGl9KHd5KSxSeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIpe3ZhciBpO3JldHVybiAwPT0odD0rdCk/aT10PT4tTWF0aC5sb2codCk6KHQ9MS90LGk9ZT0+TWF0aC5wb3coZSx0KSksbj1udWxsPT1uPzA6K24scj1udWxsPT1yPzE6K3IsZnVuY3Rpb24oKXtyZXR1cm4gbityKmkoLU1hdGgubG9nMXAoLWUoKSkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSh3eSksUHk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7cmV0dXJuIHQrbipNYXRoLnRhbihNYXRoLlBJKmUoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KHd5KSxqeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgcj1lKCk7cmV0dXJuIHQrbipNYXRoLmxvZyhyLygxLXIpKX19cmV0dXJuIG4uc291cmNlPXQsbn0od3kpLHp5PWZ1bmN0aW9uIHQoZSl7dmFyIG49THkuc291cmNlKGUpLHI9Rnkuc291cmNlKGUpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsYT10O2E+MTY7KXt2YXIgbz1NYXRoLmZsb29yKC44NzUqYSkscz1uKG8pKCk7aWYocz5hKXJldHVybiBpK3Ioby0xLGEvcykoKTtpKz1vLGEtPXN9Zm9yKHZhciBjPS1NYXRoLmxvZzFwKC1lKCkpLGw9MDtjPD1hOysrbCljLT1NYXRoLmxvZzFwKC1lKCkpO3JldHVybiBpK2x9fXJldHVybiBpLnNvdXJjZT10LGl9KHd5KSxZeT0xLzQyOTQ5NjcyOTY7ZnVuY3Rpb24gVXkodD1NYXRoLnJhbmRvbSgpKXtsZXQgZT0wfCgwPD10JiZ0PDE/dC9ZeTpNYXRoLmFicyh0KSk7cmV0dXJuKCk9PihlPTE2NjQ1MjUqZSsxMDEzOTA0MjIzfDAsWXkqKGU+Pj4wKSl9ZnVuY3Rpb24gJHkodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZShlKS5kb21haW4odCl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV3kodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMToiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLmludGVycG9sYXRvcih0KTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kb21haW4odCksImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5pbnRlcnBvbGF0b3IoZSk6dGhpcy5yYW5nZShlKX1yZXR1cm4gdGhpc31jb25zdCBxeT1TeW1ib2woImltcGxpY2l0Iik7ZnVuY3Rpb24gSHkoKXt2YXIgdD1uZXcgVCxlPVtdLG49W10scj1xeTtmdW5jdGlvbiBpKGkpe2xldCBhPXQuZ2V0KGkpO2lmKHZvaWQgMD09PWEpe2lmKHIhPT1xeSlyZXR1cm4gcjt0LnNldChpLGE9ZS5wdXNoKGkpLTEpfXJldHVybiBuW2Elbi5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1uZXcgVDtmb3IoY29uc3QgciBvZiBuKXQuaGFzKHIpfHx0LnNldChyLGUucHVzaChyKS0xKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1BcnJheS5mcm9tKHQpLGkpOm4uc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEh5KGUsbikudW5rbm93bihyKX0sJHkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gVnkoKXt2YXIgdCxlLG49SHkoKS51bmtub3duKHZvaWQgMCkscj1uLmRvbWFpbixpPW4ucmFuZ2UsYT0wLG89MSxzPSExLGM9MCxsPTAsdT0uNTtmdW5jdGlvbiBoKCl7dmFyIG49cigpLmxlbmd0aCxoPW88YSxmPWg/bzphLGQ9aD9hOm87dD0oZC1mKS9NYXRoLm1heCgxLG4tYysyKmwpLHMmJih0PU1hdGguZmxvb3IodCkpLGYrPShkLWYtdCoobi1jKSkqdSxlPXQqKDEtYykscyYmKGY9TWF0aC5yb3VuZChmKSxlPU1hdGgucm91bmQoZSkpO3ZhciBwPXh0KG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGYrdCplfSkpO3JldHVybiBpKGg/cC5yZXZlcnNlKCk6cCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksaCgpKTpyKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFthLG9dPXQsYT0rYSxvPStvLGgoKSk6W2Esb119LG4ucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm5bYSxvXT10LGE9K2Esbz0rbyxzPSEwLGgoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ISF0LGgoKSk6c30sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWluKDEsbD0rdCksaCgpKTpjfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1pbigxLHQpLGgoKSk6Y30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsaCgpKTpsfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksaCgpKTp1fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVnkocigpLFthLG9dKS5yb3VuZChzKS5wYWRkaW5nSW5uZXIoYykucGFkZGluZ091dGVyKGwpLmFsaWduKHUpfSwkeS5hcHBseShoKCksYXJndW1lbnRzKX1mdW5jdGlvbiBHeSh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBHeShlKCkpfSx0fWZ1bmN0aW9uIFh5KCl7cmV0dXJuIEd5KFZ5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIFp5KHQpe3JldHVybit0fXZhciBReT1bMCwxXTtmdW5jdGlvbiBLeSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBKeSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfToobj1pc05hTihlKT9OYU46LjUsZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBufWZ1bmN0aW9uIHRtKHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9SnkoaSxyKSxhPW4obyxhKSk6KHI9SnkocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIGVtKHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT1KeSh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dSh0LGUsMSxyKS0xO3JldHVybiBhW25dKGlbbl0oZSkpfX1mdW5jdGlvbiBubSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBybSgpe3ZhciB0LGUsbixyLGksYSxvPVF5LHM9UXksYz1JcixsPUt5O2Z1bmN0aW9uIHUoKXt2YXIgdCxlLG4sYz1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCk7cmV0dXJuIGwhPT1LeSYmKHQ9b1swXSxlPW9bYy0xXSx0PmUmJihuPXQsdD1lLGU9biksbD1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX0pLHI9Yz4yP2VtOnRtLGk9YT1udWxsLGh9ZnVuY3Rpb24gaChlKXtyZXR1cm4gbnVsbD09ZXx8aXNOYU4oZT0rZSk/bjooaXx8KGk9cihvLm1hcCh0KSxzLGMpKSkodChsKGUpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBsKGUoKGF8fChhPXIocyxvLm1hcCh0KSxOcikpKShuKSkpfSxoLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1BcnJheS5mcm9tKHQsWnkpLHUoKSk6by5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPUFycmF5LmZyb20odCksdSgpKTpzLnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gcz1BcnJheS5mcm9tKHQpLGM9dHksdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhdHx8S3ksdSgpKTpsIT09S3l9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx1KCkpOmN9LGgudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGgpOm59LGZ1bmN0aW9uKG4scil7cmV0dXJuIHQ9bixlPXIsdSgpfX1mdW5jdGlvbiBpbSgpe3JldHVybiBybSgpKEt5LEt5KX1mdW5jdGlvbiBhbSh0LGUsbixyKXt2YXIgaSxhPWV0KHQsZSxuKTtzd2l0Y2goKHI9SWwobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9R2woYSxvKSl8fChyLnByZWNpc2lvbj1pKSxVbChyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPVhsKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9VmwoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gWWwocil9ZnVuY3Rpb24gb20odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBKKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIGFtKHJbMF0scltyLmxlbmd0aC0xXSxudWxsPT10PzEwOnQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaSxhPWUoKSxvPTAscz1hLmxlbmd0aC0xLGM9YVtvXSxsPWFbc10sdT0xMDtmb3IobDxjJiYoaT1jLGM9bCxsPWksaT1vLG89cyxzPWkpO3UtLSA+MDspe2lmKChpPXR0KGMsbCxuKSk9PT1yKXJldHVybiBhW29dPWMsYVtzXT1sLGUoYSk7aWYoaT4wKWM9TWF0aC5mbG9vcihjL2kpKmksbD1NYXRoLmNlaWwobC9pKSppO2Vsc2V7aWYoIShpPDApKWJyZWFrO2M9TWF0aC5jZWlsKGMqaSkvaSxsPU1hdGguZmxvb3IobCppKS9pfXI9aX1yZXR1cm4gdH0sdH1mdW5jdGlvbiBzbSgpe3ZhciB0PWltKCk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBubSh0LHNtKCkpfSwkeS5hcHBseSh0LGFyZ3VtZW50cyksb20odCl9ZnVuY3Rpb24gY20odCl7dmFyIGU7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbnVsbD09dHx8aXNOYU4odD0rdCk/ZTp0fXJldHVybiBuLmludmVydD1uLG4uZG9tYWluPW4ucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QXJyYXkuZnJvbShlLFp5KSxuKTp0LnNsaWNlKCl9LG4udW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBjbSh0KS51bmtub3duKGUpfSx0PWFyZ3VtZW50cy5sZW5ndGg/QXJyYXkuZnJvbSh0LFp5KTpbMCwxXSxvbShuKX1mdW5jdGlvbiBsbSh0LGUpe3ZhciBuLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsYT10W3JdLG89dFtpXTtyZXR1cm4gbzxhJiYobj1yLHI9aSxpPW4sbj1hLGE9byxvPW4pLHRbcl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fWZ1bmN0aW9uIHVtKHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBobSh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gZm0odCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBkbSh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIHBtKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBnbSh0KXtyZXR1cm4oZSxuKT0+LXQoLWUsbil9ZnVuY3Rpb24geW0odCl7Y29uc3QgZT10KHVtLGhtKSxuPWUuZG9tYWluO2xldCByLGksYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxlPT5NYXRoLmxvZyhlKS90KX0oYSksaT1mdW5jdGlvbih0KXtyZXR1cm4gMTA9PT10P3BtOnQ9PT1NYXRoLkU/TWF0aC5leHA6ZT0+TWF0aC5wb3codCxlKX0oYSksbigpWzBdPDA/KHI9Z20ociksaT1nbShpKSx0KGZtLGRtKSk6dCh1bSxobSksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LG8oKSk6YX0sZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4odCksbygpKTpuKCl9LGUudGlja3M9dD0+e2NvbnN0IGU9bigpO2xldCBvPWVbMF0scz1lW2UubGVuZ3RoLTFdO2NvbnN0IGM9czxvO2MmJihbbyxzXT1bcyxvXSk7bGV0IGwsdSxoPXIobyksZj1yKHMpO2NvbnN0IGQ9bnVsbD09dD8xMDordDtsZXQgcD1bXTtpZighKGElMSkmJmYtaDxkKXtpZihoPU1hdGguZmxvb3IoaCksZj1NYXRoLmNlaWwoZiksbz4wKXtmb3IoO2g8PWY7KytoKWZvcihsPTE7bDxhOysrbClpZih1PWg8MD9sL2koLWgpOmwqaShoKSwhKHU8bykpe2lmKHU+cylicmVhaztwLnB1c2godSl9fWVsc2UgZm9yKDtoPD1mOysraClmb3IobD1hLTE7bD49MTstLWwpaWYodT1oPjA/bC9pKC1oKTpsKmkoaCksISh1PG8pKXtpZih1PnMpYnJlYWs7cC5wdXNoKHUpfTIqcC5sZW5ndGg8ZCYmKHA9SihvLHMsZCkpfWVsc2UgcD1KKGgsZixNYXRoLm1pbihmLWgsZCkpLm1hcChpKTtyZXR1cm4gYz9wLnJldmVyc2UoKTpwfSxlLnRpY2tGb3JtYXQ9KHQsbik9PntpZihudWxsPT10JiYodD0xMCksbnVsbD09biYmKG49MTA9PT1hPyJzIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiYoYSUxfHxudWxsIT0obj1JbChuKSkucHJlY2lzaW9ufHwobi50cmltPSEwKSxuPVlsKG4pKSx0PT09MS8wKXJldHVybiBuO2NvbnN0IG89TWF0aC5tYXgoMSxhKnQvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIHQ9PntsZXQgZT10L2koTWF0aC5yb3VuZChyKHQpKSk7cmV0dXJuIGUqYTxhLS41JiYoZSo9YSksZTw9bz9uKHQpOiIifX0sZS5uaWNlPSgpPT5uKGxtKG4oKSx7Zmxvb3I6dD0+aShNYXRoLmZsb29yKHIodCkpKSxjZWlsOnQ9PmkoTWF0aC5jZWlsKHIodCkpKX0pKSxlfWZ1bmN0aW9uIG1tKCl7Y29uc3QgdD15bShybSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gdC5jb3B5PSgpPT5ubSh0LG1tKCkpLmJhc2UodC5iYXNlKCkpLCR5LmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIGJtKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zaWduKGUpKk1hdGgubG9nMXAoTWF0aC5hYnMoZS90KSl9fWZ1bmN0aW9uIHZtKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zaWduKGUpKk1hdGguZXhwbTEoTWF0aC5hYnMoZSkpKnR9fWZ1bmN0aW9uIF9tKHQpe3ZhciBlPTEsbj10KGJtKGUpLHZtKGUpKTtyZXR1cm4gbi5jb25zdGFudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KGJtKGU9K24pLHZtKGUpKTplfSxvbShuKX1mdW5jdGlvbiB4bSgpe3ZhciB0PV9tKHJtKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm0odCx4bSgpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSwkeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24ga20odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHdtKHQpe3JldHVybiB0PDA/LU1hdGguc3FydCgtdCk6TWF0aC5zcXJ0KHQpfWZ1bmN0aW9uIFRtKHQpe3JldHVybiB0PDA/LXQqdDp0KnR9ZnVuY3Rpb24gRW0odCl7dmFyIGU9dChLeSxLeSksbj0xO2Z1bmN0aW9uIHIoKXtyZXR1cm4gMT09PW4/dChLeSxLeSk6LjU9PT1uP3Qod20sVG0pOnQoa20obiksa20oMS9uKSl9cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QscigpKTpufSxvbShlKX1mdW5jdGlvbiBDbSgpe3ZhciB0PUVtKHJtKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm0odCxDbSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSwkeS5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBTbSgpe3JldHVybiBDbS5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEFtKHQpe3JldHVybiBNYXRoLnNpZ24odCkqdCp0fWZ1bmN0aW9uIE1tKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5zcXJ0KE1hdGguYWJzKHQpKX1mdW5jdGlvbiBObSgpe3ZhciB0LGU9aW0oKSxuPVswLDFdLHI9ITE7ZnVuY3Rpb24gaShuKXt2YXIgaT1NbShlKG4pKTtyZXR1cm4gaXNOYU4oaSk/dDpyP01hdGgucm91bmQoaSk6aX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaW52ZXJ0KEFtKHQpKX0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKHQpLGkpOmUuZG9tYWluKCl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUucmFuZ2UoKG49QXJyYXkuZnJvbSh0LFp5KSkubWFwKEFtKSksaSk6bi5zbGljZSgpfSxpLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkucmFuZ2UodCkucm91bmQoITApfSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhdCxpKTpyfSxpLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmNsYW1wKHQpLGkpOmUuY2xhbXAoKX0saS51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE5tKGUuZG9tYWluKCksbikucm91bmQocikuY2xhbXAoZS5jbGFtcCgpKS51bmtub3duKHQpfSwkeS5hcHBseShpLGFyZ3VtZW50cyksb20oaSl9ZnVuY3Rpb24gT20oKXt2YXIgdCxlPVtdLG49W10saT1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxyPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihpPW5ldyBBcnJheShyLTEpOysrdDxyOylpW3QtMV09dXQoZSx0L3IpO3JldHVybiBvfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGw9PWV8fGlzTmFOKGU9K2UpP3Q6blt1KGksZSldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgcj1uLmluZGV4T2YodCk7cmV0dXJuIHI8MD9bTmFOLE5hTl06W3I+MD9pW3ItMV06ZVswXSxyPGkubGVuZ3RoP2lbcl06ZVtlLmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IobGV0IG4gb2YgdCludWxsPT1ufHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQociksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUFycmF5LmZyb20odCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE9tKCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LCR5LmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBEbSgpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGwhPWUmJmU8PWU/YVt1KGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbZSxuXT10LGU9K2Usbj0rbixzKCkpOltlLG5dfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShhPUFycmF5LmZyb20odCkpLmxlbmd0aC0xLHMoKSk6YS5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbz1hLmluZGV4T2YodCk7cmV0dXJuIG88MD9bTmFOLE5hTl06bzwxP1tlLGlbMF1dOm8+PXI/W2lbci0xXSxuXTpbaVtvLTFdLGlbb11dfSxvLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTpvfSxvLnRocmVzaG9sZHM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRG0oKS5kb21haW4oW2Usbl0pLnJhbmdlKGEpLnVua25vd24odCl9LCR5LmFwcGx5KG9tKG8pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQm0oKXt2YXIgdCxlPVsuNV0sbj1bMCwxXSxyPTE7ZnVuY3Rpb24gaShpKXtyZXR1cm4gbnVsbCE9aSYmaTw9aT9uW3UoZSxpLDAscildOnR9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUFycmF5LmZyb20odCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49QXJyYXkuZnJvbSh0KSxyPU1hdGgubWluKGUubGVuZ3RoLG4ubGVuZ3RoLTEpLGkpOm4uc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9bi5pbmRleE9mKHQpO3JldHVybltlW3ItMV0sZVtyXV19LGkudW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBCbSgpLmRvbWFpbihlKS5yYW5nZShuKS51bmtub3duKHQpfSwkeS5hcHBseShpLGFyZ3VtZW50cyl9Y29uc3QgTG09MWUzLEltPTZlNCxGbT0zNmU1LFJtPTg2NGU1LFBtPTYwNDhlNSxqbT0zMTUzNmU2O3ZhciB6bT1uZXcgRGF0ZSxZbT1uZXcgRGF0ZTtmdW5jdGlvbiBVbSh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBVbSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiB6bS5zZXRUaW1lKCtlKSxZbS5zZXRUaW1lKCtyKSx0KHptKSx0KFltKSxNYXRoLmZsb29yKG4oem0sWW0pKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgJG09VW0oKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTskbS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP1VtKChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9KSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSkpOiRtOm51bGx9O2NvbnN0IFdtPSRtO3ZhciBxbT0kbS5yYW5nZSxIbT1VbSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpMbSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9MbX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSk7Y29uc3QgVm09SG07dmFyIEdtPUhtLnJhbmdlLFhtPVVtKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKkxtKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKkltKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0ltfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKTtjb25zdCBabT1YbTt2YXIgUW09WG0ucmFuZ2UsS209VW0oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqTG0tdC5nZXRNaW51dGVzKCkqSW0pfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqRm0pfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvRm19KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKTtjb25zdCBKbT1LbTt2YXIgdGI9S20ucmFuZ2UsZWI9VW0oKHQ9PnQuc2V0SG91cnMoMCwwLDAsMCkpLCgodCxlKT0+dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpKSwoKHQsZSk9PihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKkltKS9SbSksKHQ9PnQuZ2V0RGF0ZSgpLTEpKTtjb25zdCBuYj1lYjt2YXIgcmI9ZWIucmFuZ2U7ZnVuY3Rpb24gaWIodCl7cmV0dXJuIFVtKChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpJbSkvUG19KSl9dmFyIGFiPWliKDApLG9iPWliKDEpLHNiPWliKDIpLGNiPWliKDMpLGxiPWliKDQpLHViPWliKDUpLGhiPWliKDYpLGZiPWFiLnJhbmdlLGRiPW9iLnJhbmdlLHBiPXNiLnJhbmdlLGdiPWNiLnJhbmdlLHliPWxiLnJhbmdlLG1iPXViLnJhbmdlLGJiPWhiLnJhbmdlLHZiPVVtKChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSk7Y29uc3QgX2I9dmI7dmFyIHhiPXZiLnJhbmdlLGtiPVVtKChmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pKTtrYi5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1VtKChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTtjb25zdCB3Yj1rYjt2YXIgVGI9a2IucmFuZ2UsRWI9VW0oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqSW0pfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvSW19KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpO2NvbnN0IENiPUViO3ZhciBTYj1FYi5yYW5nZSxBYj1VbSgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKkZtKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0ZtfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSk7Y29uc3QgTWI9QWI7dmFyIE5iPUFiLnJhbmdlLE9iPVVtKChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvUm19KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7Y29uc3QgRGI9T2I7dmFyIEJiPU9iLnJhbmdlO2Z1bmN0aW9uIExiKHQpe3JldHVybiBVbSgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvUG19KSl9dmFyIEliPUxiKDApLEZiPUxiKDEpLFJiPUxiKDIpLFBiPUxiKDMpLGpiPUxiKDQpLHpiPUxiKDUpLFliPUxiKDYpLFViPUliLnJhbmdlLCRiPUZiLnJhbmdlLFdiPVJiLnJhbmdlLHFiPVBiLnJhbmdlLEhiPWpiLnJhbmdlLFZiPXpiLnJhbmdlLEdiPVliLnJhbmdlLFhiPVVtKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSk7Y29uc3QgWmI9WGI7dmFyIFFiPVhiLnJhbmdlLEtiPVVtKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtLYi5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1VtKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTtjb25zdCBKYj1LYjt2YXIgdHY9S2IucmFuZ2U7ZnVuY3Rpb24gZXYodCxlLG4scixhLG8pe2NvbnN0IHM9W1tWbSwxLExtXSxbVm0sNSw1ZTNdLFtWbSwxNSwxNWUzXSxbVm0sMzAsM2U0XSxbbywxLEltXSxbbyw1LDNlNV0sW28sMTUsOWU1XSxbbywzMCwxOGU1XSxbYSwxLEZtXSxbYSwzLDEwOGU1XSxbYSw2LDIxNmU1XSxbYSwxMiw0MzJlNV0sW3IsMSxSbV0sW3IsMiwxNzI4ZTVdLFtuLDEsUG1dLFtlLDEsMjU5MmU2XSxbZSwzLDc3NzZlNl0sW3QsMSxqbV1dO2Z1bmN0aW9uIGMoZSxuLHIpe2NvbnN0IGE9TWF0aC5hYnMobi1lKS9yLG89aSgoKFssLHRdKT0+dCkpLnJpZ2h0KHMsYSk7aWYobz09PXMubGVuZ3RoKXJldHVybiB0LmV2ZXJ5KGV0KGUvam0sbi9qbSxyKSk7aWYoMD09PW8pcmV0dXJuIFdtLmV2ZXJ5KE1hdGgubWF4KGV0KGUsbixyKSwxKSk7Y29uc3RbYyxsXT1zW2Evc1tvLTFdWzJdPHNbb11bMl0vYT9vLTE6b107cmV0dXJuIGMuZXZlcnkobCl9cmV0dXJuW2Z1bmN0aW9uKHQsZSxuKXtjb25zdCByPWU8dDtyJiYoW3QsZV09W2UsdF0pO2NvbnN0IGk9biYmImZ1bmN0aW9uIj09dHlwZW9mIG4ucmFuZ2U/bjpjKHQsZSxuKSxhPWk/aS5yYW5nZSh0LCtlKzEpOltdO3JldHVybiByP2EucmV2ZXJzZSgpOmF9LGNdfWNvbnN0W252LHJ2XT1ldihKYixaYixJYixEYixNYixDYiksW2l2LGF2XT1ldih3YixfYixhYixuYixKbSxabSk7ZnVuY3Rpb24gb3YodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHN2KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGN2KHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBsdih0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsbD14dihpKSx1PWt2KGkpLGg9eHYoYSksZj1rdihhKSxkPXh2KG8pLHA9a3YobyksZz14dihzKSx5PWt2KHMpLG09eHYoYyksYj1rdihjKSx2PXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6JHYsZTokdixmOkd2LGc6YV8sRzpzXyxIOld2LEk6cXYsajpIdixMOlZ2LG06WHYsTTpadixwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTpOXyxzOk9fLFM6UXYsdTpLdixVOkp2LFY6ZV8sdzpuXyxXOnJfLHg6bnVsbCxYOm51bGwseTppXyxZOm9fLFo6Y18sIiUiOk1ffSxfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6bF8sZTpsXyxmOnBfLGc6RV8sRzpTXyxIOnVfLEk6aF8sajpmXyxMOmRfLG06Z18sTTp5XyxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTpOXyxzOk9fLFM6bV8sdTpiXyxVOnZfLFY6eF8sdzprXyxXOndfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6QV8sIiUiOk1ffSx4PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1kLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1wLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1iLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1nLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT15LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gVCh0LGUsbixyKX0sZDpCdixlOkJ2LGY6anYsZzpNdixHOkF2LEg6SXYsSTpJdixqOkx2LEw6UHYsbTpEdixNOkZ2LHA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWwuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5wPXUuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LHE6T3YsUTpZdixzOlV2LFM6UnYsdTpUdixVOkV2LFY6Q3Ysdzp3dixXOlN2LHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpNdixZOkF2LFo6TnYsIiUiOnp2fTtmdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLGw9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxsOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPWd2W3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT1jdigxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1zdihjdihhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9GYi5jZWlsKHIpOkZiKHIpLHI9RGIub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9b3YoY3YoYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/b2IuY2VpbChyKTpvYihyKSxyPW5iLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9zdihjdihhLnksMCwxKSkuZ2V0VVRDRGF5KCk6b3YoY3YoYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsc3YoYSkpOm92KGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT14W2kgaW4gZ3Y/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIHYueD1rKG4sdiksdi5YPWsocix2KSx2LmM9ayhlLHYpLF8ueD1rKG4sXyksXy5YPWsocixfKSxfLmM9ayhlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIix2KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIHV2LGh2LGZ2LGR2LHB2LGd2PXsiLSI6IiIsXzoiICIsMDoiMCJ9LHl2PS9eXHMqXGQrLyxtdj0vXiUvLGJ2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiB2dih0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBfdih0KXtyZXR1cm4gdC5yZXBsYWNlKGJ2LCJcXCQmIil9ZnVuY3Rpb24geHYodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKF92KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24ga3YodCl7cmV0dXJuIG5ldyBNYXAodC5tYXAoKCh0LGUpPT5bdC50b0xvd2VyQ2FzZSgpLGVdKSkpfWZ1bmN0aW9uIHd2KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR2KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV2KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEN2KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN2KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEF2KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE12KHQsZSxuKXt2YXIgcj15di5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTnYodCxlLG4pe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPdih0LGUsbil7dmFyIHI9eXYuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQucT0zKnJbMF0tMyxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEdih0LGUsbil7dmFyIHI9eXYuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTHYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSXYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lkg9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRnYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lk09K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUnYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUHYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lkw9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ganYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYodCxlLG4pe3ZhciByPW12LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByP24rclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gWXYodCxlLG4pe3ZhciByPXl2LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVdih0LGUsbil7dmFyIHI9eXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5zPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KHQsZSl7cmV0dXJuIHZ2KHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gV3YodCxlKXtyZXR1cm4gdnYodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gcXYodCxlKXtyZXR1cm4gdnYodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIEh2KHQsZSl7cmV0dXJuIHZ2KDErbmIuY291bnQod2IodCksdCksZSwzKX1mdW5jdGlvbiBWdih0LGUpe3JldHVybiB2dih0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gR3YodCxlKXtyZXR1cm4gVnYodCxlKSsiMDAwIn1mdW5jdGlvbiBYdih0LGUpe3JldHVybiB2dih0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIFp2KHQsZSl7cmV0dXJuIHZ2KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gUXYodCxlKXtyZXR1cm4gdnYodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBLdih0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gSnYodCxlKXtyZXR1cm4gdnYoYWIuY291bnQod2IodCktMSx0KSxlLDIpfWZ1bmN0aW9uIHRfKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP2xiKHQpOmxiLmNlaWwodCl9ZnVuY3Rpb24gZV8odCxlKXtyZXR1cm4gdD10Xyh0KSx2dihsYi5jb3VudCh3Yih0KSx0KSsoND09PXdiKHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIG5fKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIHJfKHQsZSl7cmV0dXJuIHZ2KG9iLmNvdW50KHdiKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBpXyh0LGUpe3JldHVybiB2dih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gYV8odCxlKXtyZXR1cm4gdnYoKHQ9dF8odCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gb18odCxlKXtyZXR1cm4gdnYodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIHNfKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdnYoKHQ9bj49NHx8MD09PW4/bGIodCk6bGIuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBjXyh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK3Z2KGUvNjB8MCwiMCIsMikrdnYoZSU2MCwiMCIsMil9ZnVuY3Rpb24gbF8odCxlKXtyZXR1cm4gdnYodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiB1Xyh0LGUpe3JldHVybiB2dih0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBoXyh0LGUpe3JldHVybiB2dih0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gZl8odCxlKXtyZXR1cm4gdnYoMStEYi5jb3VudChKYih0KSx0KSxlLDMpfWZ1bmN0aW9uIGRfKHQsZSl7cmV0dXJuIHZ2KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBwXyh0LGUpe3JldHVybiBkXyh0LGUpKyIwMDAifWZ1bmN0aW9uIGdfKHQsZSl7cmV0dXJuIHZ2KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24geV8odCxlKXtyZXR1cm4gdnYodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBtXyh0LGUpe3JldHVybiB2dih0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGJfKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiB2Xyh0LGUpe3JldHVybiB2dihJYi5jb3VudChKYih0KS0xLHQpLGUsMil9ZnVuY3Rpb24gX18odCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/amIodCk6amIuY2VpbCh0KX1mdW5jdGlvbiB4Xyh0LGUpe3JldHVybiB0PV9fKHQpLHZ2KGpiLmNvdW50KEpiKHQpLHQpKyg0PT09SmIodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24ga18odCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gd18odCxlKXtyZXR1cm4gdnYoRmIuY291bnQoSmIodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFRfKHQsZSl7cmV0dXJuIHZ2KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBFXyh0LGUpe3JldHVybiB2digodD1fXyh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBDXyh0LGUpe3JldHVybiB2dih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gU18odCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB2digodD1uPj00fHwwPT09bj9qYih0KTpqYi5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEFfKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBNXygpe3JldHVybiIlIn1mdW5jdGlvbiBOXyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBPXyh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIERfKHQpe3JldHVybiB1dj1sdih0KSxodj11di5mb3JtYXQsZnY9dXYucGFyc2UsZHY9dXYudXRjRm9ybWF0LHB2PXV2LnV0Y1BhcnNlLHV2fWZ1bmN0aW9uIEJfKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBMXyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBJXyh0LGUsbixyLGksYSxvLHMsYyxsKXt2YXIgdT1pbSgpLGg9dS5pbnZlcnQsZj11LmRvbWFpbixkPWwoIi4lTCIpLHA9bCgiOiVTIiksZz1sKCIlSTolTSIpLHk9bCgiJUkgJXAiKSxtPWwoIiVhICVkIiksYj1sKCIlYiAlZCIpLHY9bCgiJUIiKSxfPWwoIiVZIik7ZnVuY3Rpb24geCh0KXtyZXR1cm4oYyh0KTx0P2Q6cyh0KTx0P3A6byh0KTx0P2c6YSh0KTx0P3k6cih0KTx0P2kodCk8dD9tOmI6bih0KTx0P3Y6XykodCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShoKHQpKX0sdS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZihBcnJheS5mcm9tKHQsTF8pKTpmKCkubWFwKEJfKX0sdS50aWNrcz1mdW5jdGlvbihlKXt2YXIgbj1mKCk7cmV0dXJuIHQoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PWU/MTA6ZSl9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6bChlKX0sdS5uaWNlPWZ1bmN0aW9uKHQpe3ZhciBuPWYoKTtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmFuZ2V8fCh0PWUoblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCkpLHQ/ZihsbShuLHQpKTp1fSx1LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm0odSxJXyh0LGUsbixyLGksYSxvLHMsYyxsKSl9LHV9ZnVuY3Rpb24gRl8oKXtyZXR1cm4gJHkuYXBwbHkoSV8oaXYsYXYsd2IsX2IsYWIsbmIsSm0sWm0sVm0saHYpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIFJfKCl7cmV0dXJuICR5LmFwcGx5KElfKG52LHJ2LEpiLFpiLEliLERiLE1iLENiLFZtLGR2KS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBQXygpe3ZhciB0LGUsbixyLGksYT0wLG89MSxzPUt5LGM9ITE7ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbD09ZXx8aXNOYU4oZT0rZSk/aTpzKDA9PT1uPy41OihlPShyKGUpLXQpKm4sYz9NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpOmUpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbbixyXT1lLHM9dChuLHIpLGwpOltzKDApLHMoMSldfX1yZXR1cm4gbC5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFthLG9dPWksdD1yKGE9K2EpLGU9cihvPStvKSxuPXQ9PT1lPzA6MS8oZS10KSxsKTpbYSxvXX0sbC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hIXQsbCk6Y30sbC5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxsKTpzfSxsLnJhbmdlPXUoSXIpLGwucmFuZ2VSb3VuZD11KHR5KSxsLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxsKTppfSxmdW5jdGlvbihpKXtyZXR1cm4gcj1pLHQ9aShhKSxlPWkobyksbj10PT09ZT8wOjEvKGUtdCksbH19ZnVuY3Rpb24gal8odCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkuaW50ZXJwb2xhdG9yKHQuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gel8oKXt2YXIgdD1vbShQXygpKEt5KSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBqXyh0LHpfKCkpfSxXeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gWV8oKXt2YXIgdD15bShQXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGpfKHQsWV8oKSkuYmFzZSh0LmJhc2UoKSl9LFd5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBVXygpe3ZhciB0PV9tKFBfKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gal8odCxVXygpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSxXeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gJF8oKXt2YXIgdD1FbShQXygpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGpfKHQsJF8oKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sV3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIFdfKCl7cmV0dXJuICRfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gcV8oKXt2YXIgdD1bXSxlPUt5O2Z1bmN0aW9uIG4obil7aWYobnVsbCE9biYmIWlzTmFOKG49K24pKXJldHVybiBlKCh1KHQsbiwxKS0xKS8odC5sZW5ndGgtMSkpfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W107Zm9yKGxldCBuIG9mIGUpbnVsbD09bnx8aXNOYU4obj0rbil8fHQucHVzaChuKTtyZXR1cm4gdC5zb3J0KHIpLG59LG4uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5yYW5nZT1mdW5jdGlvbigpe3JldHVybiB0Lm1hcCgoKG4scik9PmUoci8odC5sZW5ndGgtMSkpKSl9LG4ucXVhbnRpbGVzPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6ZSsxfSwoKG4scik9Pmx0KHQsci9lKSkpfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcV8oZSkuZG9tYWluKHQpfSxXeS5hcHBseShuLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSF8oKXt2YXIgdCxlLG4scixpLGEsbyxzPTAsYz0uNSxsPTEsdT0xLGg9S3ksZj0hMTtmdW5jdGlvbiBkKHQpe3JldHVybiBpc05hTih0PSt0KT9vOih0PS41KygodD0rYSh0KSktZSkqKHUqdDx1KmU/cjppKSxoKGY/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKTp0KSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbbixyLGldPWUsaD1keSh0LFtuLHIsaV0pLGQpOltoKDApLGgoLjUpLGgoMSldfX1yZXR1cm4gZC5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtzLGMsbF09byx0PWEocz0rcyksZT1hKGM9K2MpLG49YShsPStsKSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLHU9ZTx0Py0xOjEsZCk6W3MsYyxsXX0sZC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0hIXQsZCk6Zn0sZC5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dCxkKTpofSxkLnJhbmdlPXAoSXIpLGQucmFuZ2VSb3VuZD1wKHR5KSxkLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxkKTpvfSxmdW5jdGlvbihvKXtyZXR1cm4gYT1vLHQ9byhzKSxlPW8oYyksbj1vKGwpLHI9dD09PWU/MDouNS8oZS10KSxpPWU9PT1uPzA6LjUvKG4tZSksdT1lPHQ/LTE6MSxkfX1mdW5jdGlvbiBWXygpe3ZhciB0PW9tKEhfKCkoS3kpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGpfKHQsVl8oKSl9LFd5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBHXygpe3ZhciB0PXltKEhfKCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gal8odCxHXygpKS5iYXNlKHQuYmFzZSgpKX0sV3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIFhfKCl7dmFyIHQ9X20oSF8oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBqXyh0LFhfKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFd5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBaXygpe3ZhciB0PUVtKEhfKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gal8odCxaXygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxXeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gUV8oKXtyZXR1cm4gWl8uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBLXyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gbn1EXyh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2NvbnN0IEpfPUtfKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSx0eD1LXygiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksZXg9S18oIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLG54PUtfKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxyeD1LXygiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksaXg9S18oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLGF4PUtfKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxveD1LXygiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksc3g9S18oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLGN4PUtfKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSxseD10PT53cih0W3QubGVuZ3RoLTFdKTt2YXIgdXg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZDhiMzY1ZjVmNWY1NWFiNGFjIiwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxIiwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxIiwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIikubWFwKEtfKTtjb25zdCBoeD1seCh1eCk7dmFyIGZ4PW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChLXyk7Y29uc3QgZHg9bHgoZngpO3ZhciBweD1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoS18pO2NvbnN0IGd4PWx4KHB4KTt2YXIgeXg9bmV3IEFycmF5KDMpLmNvbmNhdCgiOTk4ZWMzZjdmN2Y3ZjFhMzQwIiwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxIiwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxIiwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IikubWFwKEtfKTtjb25zdCBteD1seCh5eCk7dmFyIGJ4PW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChLXyk7Y29uc3Qgdng9bHgoYngpO3ZhciBfeD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoS18pO2NvbnN0IHh4PWx4KF94KTt2YXIga3g9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFiZmRiIiwiZDcxOTFjZmRhZTYxYWJkOWU5MmM3YmI2IiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZmZmZmJmZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IikubWFwKEtfKTtjb25zdCB3eD1seChreCk7dmFyIFR4PW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChLXyk7Y29uc3QgRXg9bHgoVHgpO3ZhciBDeD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoS18pO2NvbnN0IFN4PWx4KEN4KTt2YXIgQXg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWY5OTlkOGM5MmNhMjVmIiwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1IiwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKEtfKTtjb25zdCBNeD1seChBeCk7dmFyIE54PW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChLXyk7Y29uc3QgT3g9bHgoTngpO3ZhciBEeD1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoS18pO2NvbnN0IEJ4PWx4KER4KTt2YXIgTHg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlOGM4ZmRiYjg0ZTM0YTMzIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwIikubWFwKEtfKTtjb25zdCBJeD1seChMeCk7dmFyIEZ4PW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChLXyk7Y29uc3QgUng9bHgoRngpO3ZhciBQeD1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoS18pO2NvbnN0IGp4PWx4KFB4KTt2YXIgeng9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTdlMWVmYzk5NGM3ZGQxYzc3IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmIikubWFwKEtfKTtjb25zdCBZeD1seCh6eCk7dmFyIFV4PW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChLXyk7Y29uc3QgJHg9bHgoVXgpO3ZhciBXeD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoS18pO2NvbnN0IHF4PWx4KFd4KTt2YXIgSHg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjdmY2I5YWRkZDhlMzFhMzU0IiwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzIiwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5IikubWFwKEtfKTtjb25zdCBWeD1seChIeCk7dmFyIEd4PW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChLXyk7Y29uc3QgWHg9bHgoR3gpO3ZhciBaeD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoS18pO2NvbnN0IFF4PWx4KFp4KTt2YXIgS3g9bmV3IEFycmF5KDMpLmNvbmNhdCgiZGVlYmY3OWVjYWUxMzE4MmJkIiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1IiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiIikubWFwKEtfKTtjb25zdCBKeD1seChLeCk7dmFyIHRrPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChLXyk7Y29uc3QgZWs9bHgodGspO3ZhciBuaz1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoS18pO2NvbnN0IHJrPWx4KG5rKTt2YXIgaWs9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWZlZGY1YmNiZGRjNzU2YmIxIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkIikubWFwKEtfKTtjb25zdCBhaz1seChpayk7dmFyIG9rPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChLXyk7Y29uc3Qgc2s9bHgob2spO3ZhciBjaz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoS18pO2NvbnN0IGxrPWx4KGNrKTtmdW5jdGlvbiB1ayh0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LXQqKDM1LjM0LXQqKDIzODEuNzMtdCooNjQwMi43LXQqKDcwMjQuNzItMjcxMC41Nyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrdCooMTcwLjczK3QqKDUyLjgyLXQqKDEzMS40Ni10KigxNzYuNTgtNjcuMzcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K3QqKDQ0Mi4zNi10KigyNDgyLjQzLXQqKDYxNjcuMjQtdCooNjYxNC45NC0yNDc1LjY3KnQpKSkpKSkpKyIpIn1jb25zdCBoaz1meShVbygzMDAsLjUsMCksVW8oLTI0MCwuNSwxKSk7dmFyIGZrPWZ5KFVvKC0xMDAsLjc1LC4zNSksVW8oODAsMS41LC44KSksZGs9ZnkoVW8oMjYwLC43NSwuMzUpLFVvKDgwLDEuNSwuOCkpLHBrPVVvKCk7ZnVuY3Rpb24gZ2sodCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBlPU1hdGguYWJzKHQtLjUpO3JldHVybiBway5oPTM2MCp0LTEwMCxway5zPTEuNS0xLjUqZSxway5sPS44LS45KmUscGsrIiJ9dmFyIHlrPWlyKCksbWs9TWF0aC5QSS8zLGJrPTIqTWF0aC5QSS8zO2Z1bmN0aW9uIHZrKHQpe3ZhciBlO3JldHVybiB0PSguNS10KSpNYXRoLlBJLHlrLnI9MjU1KihlPU1hdGguc2luKHQpKSplLHlrLmc9MjU1KihlPU1hdGguc2luKHQrbWspKSplLHlrLmI9MjU1KihlPU1hdGguc2luKHQrYmspKSplLHlrKyIifWZ1bmN0aW9uIF9rKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzQuNjErdCooMTE3Mi4zMy10KigxMDc5My41Ni10KigzMzMwMC4xMi10KigzODM5NC40OS0xNDgyNS4wNSp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjMuMzErdCooNTU3LjMzK3QqKDEyMjUuMzMtdCooMzU3NC45Ni10KigxMDczLjc3KzcwNy41Nip0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjcuMit0KigzMjExLjEtdCooMTUzMjcuOTctdCooMjc4MTQtdCooMjI1NjkuMTgtNjgzOC42Nip0KSkpKSkpKSsiKSJ9ZnVuY3Rpb24geGsodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19Y29uc3Qga2s9eGsoS18oIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKTt2YXIgd2s9eGsoS18oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxUaz14ayhLXygiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLEVrPXhrKEtfKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gQ2sodCl7cmV0dXJuIE1uKHBuKHQpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSl9dmFyIFNrPTA7ZnVuY3Rpb24gQWsoKXtyZXR1cm4gbmV3IE1rfWZ1bmN0aW9uIE1rKCl7dGhpcy5fPSJAIisoKytTaykudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIE5rKHQsZSl7cmV0dXJuIHQudGFyZ2V0JiYodD1Gcih0KSx2b2lkIDA9PT1lJiYoZT10LmN1cnJlbnRUYXJnZXQpLHQ9dC50b3VjaGVzfHxbdF0pLEFycmF5LmZyb20odCwodD0+UnIodCxlKSkpfWZ1bmN0aW9uIE9rKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgQ24oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQ24oW2dlKHQpXSxFbil9ZnVuY3Rpb24gRGsodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fU1rLnByb3RvdHlwZT1Bay5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1rLGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBCaz1NYXRoLmFicyxMaz1NYXRoLmF0YW4yLElrPU1hdGguY29zLEZrPU1hdGgubWF4LFJrPU1hdGgubWluLFBrPU1hdGguc2luLGprPU1hdGguc3FydCx6az0xZS0xMixZaz1NYXRoLlBJLFVrPVlrLzIsJGs9MipZaztmdW5jdGlvbiBXayh0KXtyZXR1cm4gdD4xPzA6dDwtMT9ZazpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gcWsodCl7cmV0dXJuIHQ+PTE/VWs6dDw9LTE/LVVrOk1hdGguYXNpbih0KX1mdW5jdGlvbiBIayh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBWayh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBHayh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFhrKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIFprKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIFFrKHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LGw9ci1lLHU9by1pLGg9cy1hLGY9aCpjLXUqbDtpZighKGYqZjx6aykpcmV0dXJuW3QrKGY9KHUqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqbF19ZnVuY3Rpb24gS2sodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLGw9KG8/YTotYSkvamsocypzK2MqYyksdT1sKmMsaD0tbCpzLGY9dCt1LGQ9ZStoLHA9bit1LGc9citoLHk9KGYrcCkvMixtPShkK2cpLzIsYj1wLWYsdj1nLWQsXz1iKmIrdip2LHg9aS1hLGs9ZipnLXAqZCx3PSh2PDA/LTE6MSkqamsoRmsoMCx4KngqXy1rKmspKSxUPShrKnYtYip3KS9fLEU9KC1rKmItdip3KS9fLEM9KGsqditiKncpL18sUz0oLWsqYit2KncpL18sQT1ULXksTT1FLW0sTj1DLXksTz1TLW07cmV0dXJuIEEqQStNKk0+TipOK08qTyYmKFQ9QyxFPVMpLHtjeDpULGN5OkUseDAxOi11LHkwMTotaCx4MTE6VCooaS94LTEpLHkxMTpFKihpL3gtMSl9fWZ1bmN0aW9uIEprKCl7dmFyIHQ9SGssZT1WayxuPURrKDApLHI9bnVsbCxpPUdrLGE9WGssbz1aayxzPW51bGw7ZnVuY3Rpb24gYygpe3ZhciBjLGwsdT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1VayxkPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLVVrLHA9QmsoZC1mKSxnPWQ+ZjtpZihzfHwocz1jPUphKCkpLGg8dSYmKGw9aCxoPXUsdT1sKSxoPnprKWlmKHA+JGstemspcy5tb3ZlVG8oaCpJayhmKSxoKlBrKGYpKSxzLmFyYygwLDAsaCxmLGQsIWcpLHU+emsmJihzLm1vdmVUbyh1KklrKGQpLHUqUGsoZCkpLHMuYXJjKDAsMCx1LGQsZixnKSk7ZWxzZXt2YXIgeSxtLGI9Zix2PWQsXz1mLHg9ZCxrPXAsdz1wLFQ9by5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixFPVQ+emsmJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpqayh1KnUraCpoKSksQz1SayhCayhoLXUpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxTPUMsQT1DO2lmKEU+emspe3ZhciBNPXFrKEUvdSpQayhUKSksTj1xayhFL2gqUGsoVCkpOyhrLT0yKk0pPnprPyhfKz1NKj1nPzE6LTEseC09TSk6KGs9MCxfPXg9KGYrZCkvMiksKHctPTIqTik+ems/KGIrPU4qPWc/MTotMSx2LT1OKToodz0wLGI9dj0oZitkKS8yKX12YXIgTz1oKklrKGIpLEQ9aCpQayhiKSxCPXUqSWsoeCksTD11KlBrKHgpO2lmKEM+emspe3ZhciBJLEY9aCpJayh2KSxSPWgqUGsodiksUD11KklrKF8pLGo9dSpQayhfKTtpZihwPFlrJiYoST1RayhPLEQsUCxqLEYsUixCLEwpKSl7dmFyIHo9Ty1JWzBdLFk9RC1JWzFdLFU9Ri1JWzBdLCQ9Ui1JWzFdLFc9MS9QayhXaygoeipVK1kqJCkvKGprKHoqeitZKlkpKmprKFUqVSskKiQpKSkvMikscT1qayhJWzBdKklbMF0rSVsxXSpJWzFdKTtTPVJrKEMsKHUtcSkvKFctMSkpLEE9UmsoQywoaC1xKS8oVysxKSl9fXc+ems/QT56az8oeT1LayhQLGosTyxELGgsQSxnKSxtPUtrKEYsUixCLEwsaCxBLGcpLHMubW92ZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksQTxDP3MuYXJjKHkuY3gseS5jeSxBLExrKHkueTAxLHkueDAxKSxMayhtLnkwMSxtLngwMSksIWcpOihzLmFyYyh5LmN4LHkuY3ksQSxMayh5LnkwMSx5LngwMSksTGsoeS55MTEseS54MTEpLCFnKSxzLmFyYygwLDAsaCxMayh5LmN5K3kueTExLHkuY3greS54MTEpLExrKG0uY3krbS55MTEsbS5jeCttLngxMSksIWcpLHMuYXJjKG0uY3gsbS5jeSxBLExrKG0ueTExLG0ueDExKSxMayhtLnkwMSxtLngwMSksIWcpKSk6KHMubW92ZVRvKE8sRCkscy5hcmMoMCwwLGgsYix2LCFnKSk6cy5tb3ZlVG8oTyxEKSx1PnprJiZrPnprP1M+ems/KHk9S2soQixMLEYsUix1LC1TLGcpLG09S2soTyxELFAsaix1LC1TLGcpLHMubGluZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksUzxDP3MuYXJjKHkuY3gseS5jeSxTLExrKHkueTAxLHkueDAxKSxMayhtLnkwMSxtLngwMSksIWcpOihzLmFyYyh5LmN4LHkuY3ksUyxMayh5LnkwMSx5LngwMSksTGsoeS55MTEseS54MTEpLCFnKSxzLmFyYygwLDAsdSxMayh5LmN5K3kueTExLHkuY3greS54MTEpLExrKG0uY3krbS55MTEsbS5jeCttLngxMSksZykscy5hcmMobS5jeCxtLmN5LFMsTGsobS55MTEsbS54MTEpLExrKG0ueTAxLG0ueDAxKSwhZykpKTpzLmFyYygwLDAsdSx4LF8sZyk6cy5saW5lVG8oQixMKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSxjKXJldHVybiBzPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1Zay8yO3JldHVybltJayhyKSpuLFBrKHIpKm5dfSxjLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RGsoK2UpLGMpOnR9LGMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEaygrdCksYyk6ZX0sYy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEaygrdCksYyk6bn0sYy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoK3QpLGMpOnJ9LGMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKCt0KSxjKTppfSxjLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoK3QpLGMpOmF9LGMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEaygrdCksYyk6b30sYy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGMpOnN9LGN9dmFyIHR3PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBldyh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gbncodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHJ3KHQpe3JldHVybiBuZXcgbncodCl9ZnVuY3Rpb24gaXcodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gYXcodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gb3codCxlKXt2YXIgbj1EayghMCkscj1udWxsLGk9cncsYT1udWxsO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyxsLHU9KG89ZXcobykpLmxlbmd0aCxoPSExO2ZvcihudWxsPT1yJiYoYT1pKGw9SmEoKSkpLHM9MDtzPD11OysrcykhKHM8dSYmbihjPW9bc10scyxvKSk9PT1oJiYoKGg9IWgpP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLGgmJmEucG9pbnQoK3QoYyxzLG8pLCtlKGMscyxvKSk7aWYobClyZXR1cm4gYT1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDA9PT10P2l3OkRrKHQpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp2b2lkIDA9PT1lP2F3OkRrKGUpLG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkRrKCtlKSxvKTp0fSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEaygrdCksbyk6ZX0sby5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoISF0KSxvKTpufSxvLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKGE9aShyKSksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9YT1udWxsOmE9aShyPXQpLG8pOnJ9LG99ZnVuY3Rpb24gc3codCxlLG4pe3ZhciByPW51bGwsaT1EayghMCksYT1udWxsLG89cncscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIGwsdSxoLGYsZCxwPShjPWV3KGMpKS5sZW5ndGgsZz0hMSx5PW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShwKTtmb3IobnVsbD09YSYmKHM9byhkPUphKCkpKSxsPTA7bDw9cDsrK2wpe2lmKCEobDxwJiZpKGY9Y1tsXSxsLGMpKT09PWcpaWYoZz0hZyl1PWwscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCksaD1sLTE7aD49dTstLWgpcy5wb2ludCh5W2hdLG1baF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfWcmJih5W2xdPSt0KGYsbCxjKSxtW2xdPStlKGYsbCxjKSxzLnBvaW50KHI/K3IoZixsLGMpOnlbbF0sbj8rbihmLGwsYyk6bVtsXSkpfWlmKGQpcmV0dXJuIHM9bnVsbCxkKyIifHxudWxsfWZ1bmN0aW9uIGwoKXtyZXR1cm4gb3coKS5kZWZpbmVkKGkpLmN1cnZlKG8pLmNvbnRleHQoYSl9cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDA9PT10P2l3OkRrKCt0KSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RGsodm9pZCAwPT09ZT8wOitlKSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246dm9pZCAwPT09bj9hdzpEaygrbiksYy54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RGsoK2UpLHI9bnVsbCxjKTp0fSxjLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RGsoK2UpLGMpOnR9LGMueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoK3QpLGMpOnJ9LGMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKCt0KSxuPW51bGwsYyk6ZX0sYy55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKCt0KSxjKTplfSxjLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKCt0KSxjKTpufSxjLmxpbmVYMD1jLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KGUpfSxjLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KG4pfSxjLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBsKCkueChyKS55KGUpfSxjLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEayghIXQpLGMpOml9LGMuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxjKTpvfSxjLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksYyk6YX0sY31mdW5jdGlvbiBjdyh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBsdyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB1dygpe3ZhciB0PWx3LGU9Y3csbj1udWxsLHI9RGsoMCksaT1EaygkayksYT1EaygwKTtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsbCx1LGgsZj0obz1ldyhvKSkubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSxnPW5ldyBBcnJheShmKSx5PStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxtPU1hdGgubWluKCRrLE1hdGgubWF4KC0kayxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSksYj1NYXRoLm1pbihNYXRoLmFicyhtKS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2PWIqKG08MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9Z1twW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShnW3RdLGdbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCxsPWQ/KG0tZip2KS9kOjA7czxmOysrcyx5PXUpYz1wW3NdLHU9eSsoKGg9Z1tjXSk+MD9oKmw6MCkrdixnW2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTp1LHBhZEFuZ2xlOmJ9O3JldHVybiBnfXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RGsoK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEaygrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKCt0KSxvKTphfSxvfW53LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBodz1kdyhydyk7ZnVuY3Rpb24gZncodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBkdyh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgZncodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBwdyh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShkdyh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBndygpe3JldHVybiBwdyhvdygpLmN1cnZlKGh3KSl9ZnVuY3Rpb24geXcoKXt2YXIgdD1zdygpLmN1cnZlKGh3KSxlPXQuY3VydmUsbj10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsYT10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHB3KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBwdyhyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gcHcoaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHB3KGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoZHcodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gbXcodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19ZnVuY3Rpb24gYncodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIHZ3KHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBfdyh0KXt2YXIgZT1idyxuPXZ3LHI9aXcsaT1hdyxhPW51bGw7ZnVuY3Rpb24gbygpe3ZhciBvLHM9dHcuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLHMpLGw9bi5hcHBseSh0aGlzLHMpO2lmKGF8fChhPW89SmEoKSksdChhLCtyLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksK2kuYXBwbHkodGhpcyxzKSwrci5hcHBseSh0aGlzLChzWzBdPWwscykpLCtpLmFwcGx5KHRoaXMscykpLG8pcmV0dXJuIGE9bnVsbCxvKyIifHxudWxsfXJldHVybiBvLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoK3QpLG8pOnJ9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKCt0KSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9udWxsOnQsbyk6YX0sb31mdW5jdGlvbiB4dyh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrcikvMixuLGUsaSxyLGkpfWZ1bmN0aW9uIGt3KHQsZSxuLHIsaSl7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZSxuPShuK2kpLzIscixuLHIsaSl9ZnVuY3Rpb24gd3codCxlLG4scixpKXt2YXIgYT1tdyhlLG4pLG89bXcoZSxuPShuK2kpLzIpLHM9bXcocixuKSxjPW13KHIsaSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxjWzBdLGNbMV0pfWZ1bmN0aW9uIFR3KCl7cmV0dXJuIF93KHh3KX1mdW5jdGlvbiBFdygpe3JldHVybiBfdyhrdyl9ZnVuY3Rpb24gQ3coKXt2YXIgdD1fdyh3dyk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH1mdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O2NvbnN0IFN3PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvWWspO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCwkayl9fSxBdz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fTt2YXIgTXc9TWF0aC5zcXJ0KDEvMyksTnc9MipNdztjb25zdCBPdz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL053KSxyPW4qTXc7dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8ociwwKSx0LmxpbmVUbygwLG4pLHQubGluZVRvKC1yLDApLHQuY2xvc2VQYXRoKCl9fTt2YXIgRHc9TWF0aC5zaW4oWWsvMTApL01hdGguc2luKDcqWWsvMTApLEJ3PU1hdGguc2luKCRrLzEwKSpEdyxMdz0tTWF0aC5jb3MoJGsvMTApKkR3O2NvbnN0IEl3PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLHI9QncqbixpPUx3Km47dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8ocixpKTtmb3IodmFyIGE9MTthPDU7KythKXt2YXIgbz0kayphLzUscz1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3QubGluZVRvKGMqbiwtcypuKSx0LmxpbmVUbyhzKnItYyppLGMqcitzKmkpfXQuY2xvc2VQYXRoKCl9fSxGdz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlKSxyPS1uLzI7dC5yZWN0KHIscixuLG4pfX07dmFyIFJ3PU1hdGguc3FydCgzKTtjb25zdCBQdz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMypSdykpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtUncqbiwtbiksdC5saW5lVG8oUncqbiwtbiksdC5jbG9zZVBhdGgoKX19O3ZhciBqdz0tLjUsenc9TWF0aC5zcXJ0KDMpLzIsWXc9MS9NYXRoLnNxcnQoMTIpLFV3PTMqKFl3LzIrMSk7Y29uc3QgJHc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9Vdykscj1uLzIsaT1uKll3LGE9cixvPW4qWXcrbixzPS1hLGM9bzt0Lm1vdmVUbyhyLGkpLHQubGluZVRvKGEsbyksdC5saW5lVG8ocyxjKSx0LmxpbmVUbyhqdypyLXp3KmksencqcitqdyppKSx0LmxpbmVUbyhqdyphLXp3Km8sencqYStqdypvKSx0LmxpbmVUbyhqdypzLXp3KmMsencqcytqdypjKSx0LmxpbmVUbyhqdypyK3p3KmksancqaS16dypyKSx0LmxpbmVUbyhqdyphK3p3Km8sancqby16dyphKSx0LmxpbmVUbyhqdypzK3p3KmMsancqYy16dypzKSx0LmNsb3NlUGF0aCgpfX07dmFyIFd3PVtTdyxBdyxPdyxGdyxJdyxQdywkd107ZnVuY3Rpb24gcXcodCxlKXt2YXIgbj1udWxsO2Z1bmN0aW9uIHIoKXt2YXIgcjtpZihufHwobj1yPUphKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIG49bnVsbCxyKyIifHxudWxsfXJldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsodHx8U3cpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpEayh2b2lkIDA9PT1lPzY0OitlKSxyLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpEayhlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEaygrdCkscik6ZX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LHIpOm59LHJ9ZnVuY3Rpb24gSHcoKXt9ZnVuY3Rpb24gVncodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIEd3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBYdyh0KXtyZXR1cm4gbmV3IEd3KHQpfWZ1bmN0aW9uIFp3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBRdyh0KXtyZXR1cm4gbmV3IFp3KHQpfWZ1bmN0aW9uIEt3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBKdyh0KXtyZXR1cm4gbmV3IEt3KHQpfUd3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6VncodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6VncodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LFp3LnByb3RvdHlwZT17YXJlYVN0YXJ0Okh3LGFyZWFFbmQ6SHcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OlZ3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxLdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgbj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKG4scik6dGhpcy5fY29udGV4dC5tb3ZlVG8obixyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlZ3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTtjbGFzcyB0VHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl94PWV9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQodCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX3g/dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwPSh0aGlzLl94MCt0KS8yLHRoaXMuX3kwLHRoaXMuX3gwLGUsdCxlKTp0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsdGhpcy5feTA9KHRoaXMuX3kwK2UpLzIsdCx0aGlzLl95MCx0LGUpfXRoaXMuX3gwPXQsdGhpcy5feTA9ZX19ZnVuY3Rpb24gZVQodCl7cmV0dXJuIG5ldyB0VCh0LCEwKX1mdW5jdGlvbiBuVCh0KXtyZXR1cm4gbmV3IHRUKHQsITEpfWZ1bmN0aW9uIHJUKHQsZSl7dGhpcy5fYmFzaXM9bmV3IEd3KHQpLHRoaXMuX2JldGE9ZX1yVC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07Y29uc3QgaVQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgR3codCk6bmV3IHJUKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSk7ZnVuY3Rpb24gYVQodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBvVCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9b1QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmFUKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDphVCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3Qgc1Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgb1QodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gY1QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWNULnByb3RvdHlwZT17YXJlYVN0YXJ0Okh3LGFyZWFFbmQ6SHcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDphVCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3QgbFQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgY1QodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gdVQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXVULnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmFUKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBoVD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyB1VCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBmVCh0LGUsbil7dmFyIHI9dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+emspe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPnprKXt2YXIgbD0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmwrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS91LG89KG8qbCt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL3V9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxhLG8sdC5feDIsdC5feTIpfWZ1bmN0aW9uIGRUKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZFQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpmVCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O2NvbnN0IHBUPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgZFQodCxlKTpuZXcgb1QodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBnVCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWdULnByb3RvdHlwZT17YXJlYVN0YXJ0Okh3LGFyZWFFbmQ6SHcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6ZlQodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCB5VD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGdUKHQsZSk6bmV3IGNUKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gbVQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1tVC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6ZlQodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBiVD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IG1UKHQsZSk6bmV3IHVUKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gdlQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIF9UKHQpe3JldHVybiBuZXcgdlQodCl9ZnVuY3Rpb24geFQodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIGtUKHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKHhUKGEpK3hUKG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gd1QodCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIFRUKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBFVCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ1QodCl7dGhpcy5fY29udGV4dD1uZXcgU1QodCl9ZnVuY3Rpb24gU1QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEFUKHQpe3JldHVybiBuZXcgRVQodCl9ZnVuY3Rpb24gTVQodCl7cmV0dXJuIG5ldyBDVCh0KX1mdW5jdGlvbiBOVCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gT1QodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1mdW5jdGlvbiBEVCh0KXtyZXR1cm4gbmV3IE5UKHQpfWZ1bmN0aW9uIEJUKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBMVCh0KXtyZXR1cm4gbmV3IEJUKHQsLjUpfWZ1bmN0aW9uIElUKHQpe3JldHVybiBuZXcgQlQodCwwKX1mdW5jdGlvbiBGVCh0KXtyZXR1cm4gbmV3IEJUKHQsMSl9ZnVuY3Rpb24gUlQodCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihyPW8sbz10W2VbYV1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfWZ1bmN0aW9uIFBUKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBqVCh0LGUpe3JldHVybiB0W2VdfWZ1bmN0aW9uIHpUKHQpe2NvbnN0IGU9W107cmV0dXJuIGUua2V5PXQsZX1mdW5jdGlvbiBZVCgpe3ZhciB0PURrKFtdKSxlPVBULG49UlQscj1qVDtmdW5jdGlvbiBpKGkpe3ZhciBhLG8scz1BcnJheS5mcm9tKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHpUKSxjPXMubGVuZ3RoLGw9LTE7Zm9yKGNvbnN0IHQgb2YgaSlmb3IoYT0wLCsrbDthPGM7KythKShzW2FdW2xdPVswLCtyKHQsc1thXS5rZXksbCxpKV0pLmRhdGE9dDtmb3IoYT0wLG89ZXcoZShzKSk7YTxjOysrYSlzW29bYV1dLmluZGV4PWE7cmV0dXJuIG4ocyxvKSxzfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpEayhBcnJheS5mcm9tKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGsoK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9QVDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkRrKEFycmF5LmZyb20odCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/UlQ6dCxpKTpufSxpfWZ1bmN0aW9uIFVUKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfVJUKHQsZSl9fWZ1bmN0aW9uICRUKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLHIsaSxhLG8scyxjPTAsbD10W2VbMF1dLmxlbmd0aDtjPGw7KytjKWZvcihhPW89MCxuPTA7bjxzOysrbikoaT0ocj10W2Vbbl1dW2NdKVsxXS1yWzBdKT4wPyhyWzBdPWEsclsxXT1hKz1pKTppPDA/KHJbMV09byxyWzBdPW8rPWkpOihyWzBdPTAsclsxXT1pKX1mdW5jdGlvbiBXVCh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO3I8YTsrK3Ipe2Zvcih2YXIgbz0wLHM9MDtvPG47KytvKXMrPXRbb11bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tcy8yfVJUKHQsZSl9fWZ1bmN0aW9uIHFUKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCxsPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0saD11W29dWzFdfHwwLGY9KGgtKHVbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsbCs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPWwvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxSVCh0LGUpfX1mdW5jdGlvbiBIVCh0KXt2YXIgZT10Lm1hcChWVCk7cmV0dXJuIFBUKHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBWVCh0KXtmb3IodmFyIGUsbj0tMSxyPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytuPGk7KShlPSt0W25dWzFdKT5hJiYoYT1lLHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gR1QodCl7dmFyIGU9dC5tYXAoWFQpO3JldHVybiBQVCh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gWFQodCl7Zm9yKHZhciBlLG49MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShlPSt0W3JdWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIFpUKHQpe3JldHVybiBHVCh0KS5yZXZlcnNlKCl9ZnVuY3Rpb24gUVQodCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAoWFQpLGE9SFQodCksbz0wLHM9MCxjPVtdLGw9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSxsLnB1c2gobikpO3JldHVybiBsLnJldmVyc2UoKS5jb25jYXQoYyl9ZnVuY3Rpb24gS1QodCl7cmV0dXJuIFBUKHQpLnJldmVyc2UoKX12VC5wcm90b3R5cGU9e2FyZWFTdGFydDpIdyxhcmVhRW5kOkh3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LEVULnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpUVCh0aGlzLHRoaXMuX3QwLHdUKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxUVCh0aGlzLHdUKHRoaXMsbj1rVCh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6VFQodGhpcyx0aGlzLl90MCxuPWtUKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKENULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVULnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7RVQucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxTVC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxOVC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1PVCh0KSxpPU9UKGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxCVC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgSlQ9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsdEU9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06ZHYoSlQpO2NvbnN0IGVFPXRFO3ZhciBuRT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OnB2KEpUKTtjb25zdCByRT1uRTtmdW5jdGlvbiBpRSh0LGUsbil7dmFyIHI9bmV3IFpyLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooci5fcmVzdGFydD1yLnJlc3RhcnQsci5yZXN0YXJ0PWZ1bmN0aW9uKHQsZSxuKXtlPStlLG49bnVsbD09bj9HcigpOituLHIuX3Jlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxyLl9yZXN0YXJ0KGEsaSs9ZSxuKSx0KG8pfSksZSxuKX0sci5yZXN0YXJ0KHQsZSxuKSxyKX1jb25zdCBhRT10PT4oKT0+dDtmdW5jdGlvbiBvRSh0LHtzb3VyY2VFdmVudDplLHRhcmdldDpuLHRyYW5zZm9ybTpyLGRpc3BhdGNoOml9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOml9fSl9ZnVuY3Rpb24gc0UodCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufXNFLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c0Usc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHNFKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgc0UodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgY0U9bmV3IHNFKDEsMCwwKTtmdW5jdGlvbiBsRSh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIGNFO3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiB1RSh0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGhFKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGZFKHQpe3JldHVybiEodC5jdHJsS2V5JiYid2hlZWwiIT09dC50eXBlfHx0LmJ1dHRvbil9ZnVuY3Rpb24gZEUoKXt2YXIgdD10aGlzO3JldHVybiB0IGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD10Lm93bmVyU1ZHRWxlbWVudHx8dCkuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFt0LmNsaWVudFdpZHRoLHQuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gcEUoKXtyZXR1cm4gdGhpcy5fX3pvb218fGNFfWZ1bmN0aW9uIGdFKHQpe3JldHVybi10LmRlbHRhWSooMT09PXQuZGVsdGFNb2RlPy4wNTp0LmRlbHRhTW9kZT8xOi4wMDIpKih0LmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24geUUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gbUUodCxlLG4pe3ZhciByPXQuaW52ZXJ0WChlWzBdWzBdKS1uWzBdWzBdLGk9dC5pbnZlcnRYKGVbMV1bMF0pLW5bMV1bMF0sYT10LmludmVydFkoZVswXVsxXSktblswXVsxXSxvPXQuaW52ZXJ0WShlWzFdWzFdKS1uWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLG8+YT8oYStvKS8yOk1hdGgubWluKDAsYSl8fE1hdGgubWF4KDAsbykpfWZ1bmN0aW9uIGJFKCl7dmFyIHQsZSxuLHI9ZkUsaT1kRSxhPW1FLG89Z0Uscz15RSxjPVswLDEvMF0sbD1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx1PTI1MCxoPW55LGY9ZmUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGQ9NTAwLHA9MCxnPTEwO2Z1bmN0aW9uIHkodCl7dC5wcm9wZXJ0eSgiX196b29tIixwRSkub24oIndoZWVsLnpvb20iLHcse3Bhc3NpdmU6ITF9KS5vbigibW91c2Vkb3duLnpvb20iLFQpLm9uKCJkYmxjbGljay56b29tIixFKS5maWx0ZXIocykub24oInRvdWNoc3RhcnQuem9vbSIsQykub24oInRvdWNobW92ZS56b29tIixTKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixBKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4oZT1NYXRoLm1heChjWzBdLE1hdGgubWluKGNbMV0sZSkpKT09PXQuaz90Om5ldyBzRShlLHQueCx0LnkpfWZ1bmN0aW9uIGIodCxlLG4pe3ZhciByPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IHNFKHQuayxyLGkpfWZ1bmN0aW9uIHYodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gXyh0LGUsbixyKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXt4KHRoaXMsYXJndW1lbnRzKS5ldmVudChyKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7eCh0aGlzLGFyZ3VtZW50cykuZXZlbnQocikuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMsYT1hcmd1bWVudHMsbz14KHQsYSkuZXZlbnQocikscz1pLmFwcGx5KHQsYSksYz1udWxsPT1uP3Yocyk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LGEpOm4sbD1NYXRoLm1heChzWzFdWzBdLXNbMF1bMF0sc1sxXVsxXS1zWzBdWzFdKSx1PXQuX196b29tLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LGEpOmUsZD1oKHUuaW52ZXJ0KGMpLmNvbmNhdChsL3UuayksZi5pbnZlcnQoYykuY29uY2F0KGwvZi5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9ZjtlbHNle3ZhciBlPWQodCksbj1sL2VbMl07dD1uZXcgc0UobixjWzBdLWVbMF0qbixjWzFdLWVbMV0qbil9by56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIHgodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IGsodCxlKX1mdW5jdGlvbiBrKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLnNvdXJjZUV2ZW50PW51bGwsdGhpcy5leHRlbnQ9aS5hcHBseSh0LGUpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIHcodCwuLi5lKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG49eCh0aGlzLGUpLmV2ZW50KHQpLGk9dGhpcy5fX3pvb20scz1NYXRoLm1heChjWzBdLE1hdGgubWluKGNbMV0saS5rKk1hdGgucG93KDIsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksdT1Scih0KTtpZihuLndoZWVsKW4ubW91c2VbMF1bMF09PT11WzBdJiZuLm1vdXNlWzBdWzFdPT09dVsxXXx8KG4ubW91c2VbMV09aS5pbnZlcnQobi5tb3VzZVswXT11KSksY2xlYXJUaW1lb3V0KG4ud2hlZWwpO2Vsc2V7aWYoaS5rPT09cylyZXR1cm47bi5tb3VzZT1bdSxpLmludmVydCh1KV0sbGkodGhpcyksbi5zdGFydCgpfWhFKHQpLG4ud2hlZWw9c2V0VGltZW91dChoLDE1MCksbi56b29tKCJtb3VzZSIsYShiKG0oaSxzKSxuLm1vdXNlWzBdLG4ubW91c2VbMV0pLG4uZXh0ZW50LGwpKX1mdW5jdGlvbiBoKCl7bi53aGVlbD1udWxsLG4uZW5kKCl9fWZ1bmN0aW9uIFQodCwuLi5lKXtpZighbiYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBpPXQuY3VycmVudFRhcmdldCxvPXgodGhpcyxlLCEwKS5ldmVudCh0KSxzPU1uKHQudmlldykub24oIm1vdXNlbW92ZS56b29tIixmLCEwKS5vbigibW91c2V1cC56b29tIixkLCEwKSxjPVJyKHQsaSksdT10LmNsaWVudFgsaD10LmNsaWVudFk7TG4odC52aWV3KSx1RSh0KSxvLm1vdXNlPVtjLHRoaXMuX196b29tLmludmVydChjKV0sbGkodGhpcyksby5zdGFydCgpfWZ1bmN0aW9uIGYodCl7aWYoaEUodCksIW8ubW92ZWQpe3ZhciBlPXQuY2xpZW50WC11LG49dC5jbGllbnRZLWg7by5tb3ZlZD1lKmUrbipuPnB9by5ldmVudCh0KS56b29tKCJtb3VzZSIsYShiKG8udGhhdC5fX3pvb20sby5tb3VzZVswXT1Scih0LGkpLG8ubW91c2VbMV0pLG8uZXh0ZW50LGwpKX1mdW5jdGlvbiBkKHQpe3Mub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksSW4odC52aWV3LG8ubW92ZWQpLGhFKHQpLG8uZXZlbnQodCkuZW5kKCl9fWZ1bmN0aW9uIEUodCwuLi5lKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG49dGhpcy5fX3pvb20sbz1Scih0LmNoYW5nZWRUb3VjaGVzP3QuY2hhbmdlZFRvdWNoZXNbMF06dCx0aGlzKSxzPW4uaW52ZXJ0KG8pLGM9bi5rKih0LnNoaWZ0S2V5Py41OjIpLGg9YShiKG0obixjKSxvLHMpLGkuYXBwbHkodGhpcyxlKSxsKTtoRSh0KSx1PjA/TW4odGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHUpLmNhbGwoXyxoLG8sdCk6TW4odGhpcykuY2FsbCh5LnRyYW5zZm9ybSxoLG8sdCl9fWZ1bmN0aW9uIEMobiwuLi5pKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGEsbyxzLGMsbD1uLnRvdWNoZXMsdT1sLmxlbmd0aCxoPXgodGhpcyxpLG4uY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09dSkuZXZlbnQobik7Zm9yKHVFKG4pLG89MDtvPHU7KytvKWM9W2M9UnIocz1sW29dLHRoaXMpLHRoaXMuX196b29tLmludmVydChjKSxzLmlkZW50aWZpZXJdLGgudG91Y2gwP2gudG91Y2gxfHxoLnRvdWNoMFsyXT09PWNbMl18fChoLnRvdWNoMT1jLGgudGFwcz0wKTooaC50b3VjaDA9YyxhPSEwLGgudGFwcz0xKyEhdCk7dCYmKHQ9Y2xlYXJUaW1lb3V0KHQpKSxhJiYoaC50YXBzPDImJihlPWNbMF0sdD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGQpKSxsaSh0aGlzKSxoLnN0YXJ0KCkpfX1mdW5jdGlvbiBTKHQsLi4uZSl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBuLHIsaSxvLHM9eCh0aGlzLGUpLmV2ZW50KHQpLGM9dC5jaGFuZ2VkVG91Y2hlcyx1PWMubGVuZ3RoO2ZvcihoRSh0KSxuPTA7bjx1OysrbilpPVJyKHI9Y1tuXSx0aGlzKSxzLnRvdWNoMCYmcy50b3VjaDBbMl09PT1yLmlkZW50aWZpZXI/cy50b3VjaDBbMF09aTpzLnRvdWNoMSYmcy50b3VjaDFbMl09PT1yLmlkZW50aWZpZXImJihzLnRvdWNoMVswXT1pKTtpZihyPXMudGhhdC5fX3pvb20scy50b3VjaDEpe3ZhciBoPXMudG91Y2gwWzBdLGY9cy50b3VjaDBbMV0sZD1zLnRvdWNoMVswXSxwPXMudG91Y2gxWzFdLGc9KGc9ZFswXS1oWzBdKSpnKyhnPWRbMV0taFsxXSkqZyx5PSh5PXBbMF0tZlswXSkqeSsoeT1wWzFdLWZbMV0pKnk7cj1tKHIsTWF0aC5zcXJ0KGcveSkpLGk9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl0sbz1bKGZbMF0rcFswXSkvMiwoZlsxXStwWzFdKS8yXX1lbHNle2lmKCFzLnRvdWNoMClyZXR1cm47aT1zLnRvdWNoMFswXSxvPXMudG91Y2gwWzFdfXMuem9vbSgidG91Y2giLGEoYihyLGksbykscy5leHRlbnQsbCkpfX1mdW5jdGlvbiBBKHQsLi4ucil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBpLGEsbz14KHRoaXMscikuZXZlbnQodCkscz10LmNoYW5nZWRUb3VjaGVzLGM9cy5sZW5ndGg7Zm9yKHVFKHQpLG4mJmNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bj1udWxsfSksZCksaT0wO2k8YzsrK2kpYT1zW2ldLG8udG91Y2gwJiZvLnRvdWNoMFsyXT09PWEuaWRlbnRpZmllcj9kZWxldGUgby50b3VjaDA6by50b3VjaDEmJm8udG91Y2gxWzJdPT09YS5pZGVudGlmaWVyJiZkZWxldGUgby50b3VjaDE7aWYoby50b3VjaDEmJiFvLnRvdWNoMCYmKG8udG91Y2gwPW8udG91Y2gxLGRlbGV0ZSBvLnRvdWNoMSksby50b3VjaDApby50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KG8udG91Y2gwWzBdKTtlbHNlIGlmKG8uZW5kKCksMj09PW8udGFwcyYmKGE9UnIoYSx0aGlzKSxNYXRoLmh5cG90KGVbMF0tYVswXSxlWzFdLWFbMV0pPGcpKXt2YXIgbD1Nbih0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO2wmJmwuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIHkudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dDtpLnByb3BlcnR5KCJfX3pvb20iLHBFKSx0IT09aT9fKHQsZSxuLHIpOmkuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXt4KHRoaXMsYXJndW1lbnRzKS5ldmVudChyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0seS5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuLHIpe3kuc2NhbGVUbyh0LChmdW5jdGlvbigpe3ZhciB0PXRoaXMuX196b29tLmssbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiB0Km59KSxuLHIpfSx5LnNjYWxlVG89ZnVuY3Rpb24odCxlLG4scil7eS50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPXRoaXMuX196b29tLG89bnVsbD09bj92KHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1yLmludmVydChvKSxjPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIGEoYihtKHIsYyksbyxzKSx0LGwpfSksbixyKX0seS50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbixyKXt5LnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3JldHVybiBhKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGwpfSksbnVsbCxyKX0seS50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbixyLG8pe3kudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz10aGlzLl9fem9vbSxzPW51bGw9PXI/dih0KToiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyO3JldHVybiBhKGNFLnRyYW5zbGF0ZShzWzBdLHNbMV0pLnNjYWxlKG8uaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj8tbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LW4pLHQsbCl9KSxyLG8pfSxrLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJih0aGlzLnNvdXJjZUV2ZW50PXQpLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1lLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09ZS5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1lLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209ZSx0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9TW4odGhpcy50aGF0KS5kYXR1bSgpO2YuY2FsbCh0LHRoaXMudGhhdCxuZXcgb0UodCx7c291cmNlRXZlbnQ6dGhpcy5zb3VyY2VFdmVudCx0YXJnZXQ6eSx0eXBlOnQsdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6Zn0pLGUpfX0seS53aGVlbERlbHRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YUUoK3QpLHkpOm99LHkuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YUUoISF0KSx5KTpyfSx5LnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmFFKCEhdCkseSk6c30seS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphRShbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSkseSk6aX0seS5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oY1swXT0rdFswXSxjWzFdPSt0WzFdLHkpOltjWzBdLGNbMV1dfSx5LnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obFswXVswXT0rdFswXVswXSxsWzFdWzBdPSt0WzFdWzBdLGxbMF1bMV09K3RbMF1bMV0sbFsxXVsxXT0rdFsxXVsxXSx5KTpbW2xbMF1bMF0sbFswXVsxXV0sW2xbMV1bMF0sbFsxXVsxXV1dfSx5LmNvbnN0cmFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHkpOmF9LHkuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QseSk6dX0seS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10LHkpOmh9LHkub249ZnVuY3Rpb24oKXt2YXIgdD1mLm9uLmFwcGx5KGYsYXJndW1lbnRzKTtyZXR1cm4gdD09PWY/eTp0fSx5LmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9KHQ9K3QpKnQseSk6TWF0aC5zcXJ0KHApfSx5LnRhcERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LHkpOmd9LHl9bEUucHJvdG90eXBlPXNFLnByb3RvdHlwZX19LGU9e307ZnVuY3Rpb24gbihyKXt2YXIgaT1lW3JdO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkuZXhwb3J0czt2YXIgYT1lW3JdPXtpZDpyLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmxvYWRlZD0hMCxhLmV4cG9ydHN9bi5jPWUsbi5uPXQ9Pnt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/KCk9PnQuZGVmYXVsdDooKT0+dDtyZXR1cm4gbi5kKGUse2E6ZX0pLGV9LG4uZD0odCxlKT0+e2Zvcih2YXIgciBpbiBlKW4ubyhlLHIpJiYhbi5vKHQscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2VudW1lcmFibGU6ITAsZ2V0OmVbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPSh0LGUpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSxuLnI9dD0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4ubm1kPXQ9Pih0LnBhdGhzPVtdLHQuY2hpbGRyZW58fCh0LmNoaWxkcmVuPVtdKSx0KTt2YXIgcj1uKG4ucz02MTg3KTtyZXR1cm4gci5kZWZhdWx0fSkoKSkpOwovLyMgc291cmNlTWFwcGluZ1VSTD1tZXJtYWlkLm1pbi5qcy5tYXA=`; \ No newline at end of file diff --git a/packages/renderer/assets/mermaid/mermaid.min.js b/packages/renderer/assets/mermaid/mermaid.min.js index d861f27f0..bd0bfbfdc 100644 --- a/packages/renderer/assets/mermaid/mermaid.min.js +++ b/packages/renderer/assets/mermaid/mermaid.min.js @@ -1,3 +1,3 @@ /*! For license information please see mermaid.min.js.LICENSE.txt */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mermaid=e():t.mermaid=e()}("undefined"!=typeof self?self:this,(function(){return(()=>{var t={1362:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,6],n=[1,7],r=[1,8],i=[1,9],a=[1,12],o=[1,11],s=[1,15,24],c=[1,19],u=[1,31],l=[1,34],h=[1,32],f=[1,33],d=[1,35],p=[1,36],y=[1,37],g=[1,38],m=[1,41],v=[1,42],b=[1,43],_=[1,44],x=[15,24],w=[1,56],k=[1,57],T=[1,58],E=[1,59],C=[1,60],S=[1,61],A=[15,24,31,38,39,47,50,51,52,53,54,55,60,62],M=[15,24,29,31,38,39,43,47,50,51,52,53,54,55,60,62,77,78,79,80],N=[7,8,9,10,15,18,22,24],D=[47,77,78,79,80],O=[47,54,55,77,78,79,80],B=[47,50,51,52,53,77,78,79,80],L=[15,24,31],I=[1,93],R={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,CLASS_DIAGRAM:22,statements:23,EOF:24,statement:25,className:26,alphaNumToken:27,classLiteralName:28,GENERICTYPE:29,relationStatement:30,LABEL:31,classStatement:32,methodStatement:33,annotationStatement:34,clickStatement:35,cssClassStatement:36,CLASS:37,STYLE_SEPARATOR:38,STRUCT_START:39,members:40,STRUCT_STOP:41,ANNOTATION_START:42,ANNOTATION_END:43,MEMBER:44,SEPARATOR:45,relation:46,STR:47,relationType:48,lineType:49,AGGREGATION:50,EXTENSION:51,COMPOSITION:52,DEPENDENCY:53,LINE:54,DOTTED_LINE:55,CALLBACK:56,LINK:57,LINK_TARGET:58,CLICK:59,CALLBACK_NAME:60,CALLBACK_ARGS:61,HREF:62,CSSCLASS:63,commentToken:64,textToken:65,graphCodeTokens:66,textNoTagsToken:67,TAGSTART:68,TAGEND:69,"==":70,"--":71,PCT:72,DEFAULT:73,SPACE:74,MINUS:75,keywords:76,UNICODE_TEXT:77,NUM:78,ALPHA:79,BQUOTE_STR:80,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"CLASS_DIAGRAM",24:"EOF",29:"GENERICTYPE",31:"LABEL",37:"CLASS",38:"STYLE_SEPARATOR",39:"STRUCT_START",41:"STRUCT_STOP",42:"ANNOTATION_START",43:"ANNOTATION_END",44:"MEMBER",45:"SEPARATOR",47:"STR",50:"AGGREGATION",51:"EXTENSION",52:"COMPOSITION",53:"DEPENDENCY",54:"LINE",55:"DOTTED_LINE",56:"CALLBACK",57:"LINK",58:"LINK_TARGET",59:"CLICK",60:"CALLBACK_NAME",61:"CALLBACK_ARGS",62:"HREF",63:"CSSCLASS",66:"graphCodeTokens",68:"TAGSTART",69:"TAGEND",70:"==",71:"--",72:"PCT",73:"DEFAULT",74:"SPACE",75:"MINUS",76:"keywords",77:"UNICODE_TEXT",78:"NUM",79:"ALPHA",80:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[23,1],[23,2],[23,3],[26,1],[26,1],[26,2],[26,2],[26,2],[25,1],[25,2],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[32,2],[32,4],[32,5],[32,7],[34,4],[40,1],[40,2],[33,1],[33,2],[33,1],[33,1],[30,3],[30,4],[30,4],[30,5],[46,3],[46,2],[46,2],[46,1],[48,1],[48,1],[48,1],[48,1],[49,1],[49,1],[35,3],[35,4],[35,3],[35,4],[35,4],[35,5],[35,3],[35,4],[35,4],[35,5],[35,3],[35,4],[35,4],[35,5],[36,3],[64,1],[64,1],[65,1],[65,1],[65,1],[65,1],[65,1],[65,1],[65,1],[67,1],[67,1],[67,1],[67,1],[27,1],[27,1],[27,1],[28,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setDirection("TB");break;case 5:r.setDirection("BT");break;case 6:r.setDirection("RL");break;case 7:r.setDirection("LR");break;case 11:r.parseDirective("%%{","open_directive");break;case 12:r.parseDirective(a[s],"type_directive");break;case 13:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 14:r.parseDirective("}%%","close_directive","class");break;case 19:case 20:this.$=a[s];break;case 21:this.$=a[s-1]+a[s];break;case 22:case 23:this.$=a[s-1]+"~"+a[s];break;case 24:r.addRelation(a[s]);break;case 25:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 33:r.addClass(a[s]);break;case 34:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 35:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 36:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 37:r.addAnnotation(a[s],a[s-2]);break;case 38:this.$=[a[s]];break;case 39:a[s].push(a[s-1]),this.$=a[s];break;case 40:case 42:case 43:break;case 41:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 44:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 45:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 46:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 47:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 48:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 49:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 50:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 51:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 52:this.$=r.relationType.AGGREGATION;break;case 53:this.$=r.relationType.EXTENSION;break;case 54:this.$=r.relationType.COMPOSITION;break;case 55:this.$=r.relationType.DEPENDENCY;break;case 56:this.$=r.lineType.LINE;break;case 57:this.$=r.lineType.DOTTED_LINE;break;case 58:case 64:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 59:case 65:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 60:case 68:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 61:case 69:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 62:case 70:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 63:case 71:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 66:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 67:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 72:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o},{1:[3]},{1:[2,1]},{1:[2,2]},{3:13,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o},{1:[2,8]},t(s,[2,4]),t(s,[2,5]),t(s,[2,6]),t(s,[2,7]),{13:14,19:[1,15]},{15:[1,16]},{19:[2,11]},{1:[2,3]},{14:17,16:[1,18],21:c},t([16,21],[2,12]),{5:29,6:28,7:e,8:n,9:r,10:i,12:10,18:a,23:20,25:21,26:30,27:39,28:40,30:22,32:23,33:24,34:25,35:26,36:27,37:u,42:l,44:h,45:f,56:d,57:p,59:y,63:g,77:m,78:v,79:b,80:_},{15:[1,45]},{17:46,20:[1,47]},{15:[2,14]},{24:[1,48]},{15:[1,49],24:[2,16]},t(x,[2,24],{31:[1,50]}),t(x,[2,26]),t(x,[2,27]),t(x,[2,28]),t(x,[2,29]),t(x,[2,30]),t(x,[2,31]),t(x,[2,32]),t(x,[2,40],{46:51,48:54,49:55,31:[1,53],47:[1,52],50:w,51:k,52:T,53:E,54:C,55:S}),{26:62,27:39,28:40,77:m,78:v,79:b,80:_},t(x,[2,42]),t(x,[2,43]),{27:63,77:m,78:v,79:b},{26:64,27:39,28:40,77:m,78:v,79:b,80:_},{26:65,27:39,28:40,77:m,78:v,79:b,80:_},{26:66,27:39,28:40,77:m,78:v,79:b,80:_},{47:[1,67]},t(A,[2,19],{27:39,28:40,26:68,29:[1,69],77:m,78:v,79:b,80:_}),t(A,[2,20],{29:[1,70]}),t(M,[2,86]),t(M,[2,87]),t(M,[2,88]),t([15,24,29,31,38,39,47,50,51,52,53,54,55,60,62],[2,89]),t(N,[2,9]),{14:71,21:c},{21:[2,13]},{1:[2,15]},{5:29,6:28,7:e,8:n,9:r,10:i,12:10,18:a,23:72,24:[2,17],25:21,26:30,27:39,28:40,30:22,32:23,33:24,34:25,35:26,36:27,37:u,42:l,44:h,45:f,56:d,57:p,59:y,63:g,77:m,78:v,79:b,80:_},t(x,[2,25]),{26:73,27:39,28:40,47:[1,74],77:m,78:v,79:b,80:_},{46:75,48:54,49:55,50:w,51:k,52:T,53:E,54:C,55:S},t(x,[2,41]),{49:76,54:C,55:S},t(D,[2,51],{48:77,50:w,51:k,52:T,53:E}),t(O,[2,52]),t(O,[2,53]),t(O,[2,54]),t(O,[2,55]),t(B,[2,56]),t(B,[2,57]),t(x,[2,33],{38:[1,78],39:[1,79]}),{43:[1,80]},{47:[1,81]},{47:[1,82]},{60:[1,83],62:[1,84]},{27:85,77:m,78:v,79:b},t(A,[2,21]),t(A,[2,22]),t(A,[2,23]),{15:[1,86]},{24:[2,18]},t(L,[2,44]),{26:87,27:39,28:40,77:m,78:v,79:b,80:_},{26:88,27:39,28:40,47:[1,89],77:m,78:v,79:b,80:_},t(D,[2,50],{48:90,50:w,51:k,52:T,53:E}),t(D,[2,49]),{27:91,77:m,78:v,79:b},{40:92,44:I},{26:94,27:39,28:40,77:m,78:v,79:b,80:_},t(x,[2,58],{47:[1,95]}),t(x,[2,60],{47:[1,97],58:[1,96]}),t(x,[2,64],{47:[1,98],61:[1,99]}),t(x,[2,68],{47:[1,101],58:[1,100]}),t(x,[2,72]),t(N,[2,10]),t(L,[2,46]),t(L,[2,45]),{26:102,27:39,28:40,77:m,78:v,79:b,80:_},t(D,[2,48]),t(x,[2,34],{39:[1,103]}),{41:[1,104]},{40:105,41:[2,38],44:I},t(x,[2,37]),t(x,[2,59]),t(x,[2,61]),t(x,[2,62],{58:[1,106]}),t(x,[2,65]),t(x,[2,66],{47:[1,107]}),t(x,[2,69]),t(x,[2,70],{58:[1,108]}),t(L,[2,47]),{40:109,44:I},t(x,[2,35]),{41:[2,39]},t(x,[2,63]),t(x,[2,67]),t(x,[2,71]),{41:[1,110]},t(x,[2,36])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],12:[2,11],13:[2,3],19:[2,14],47:[2,13],48:[2,15],72:[2,18],105:[2,39]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},F={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:case 10:case 12:case 19:break;case 11:return 15;case 13:case 14:return 22;case 15:return this.begin("struct"),39;case 16:return"EOF_IN_STRUCT";case 17:return"OPEN_IN_STRUCT";case 18:return this.popState(),41;case 20:return"MEMBER";case 21:return 37;case 22:return 63;case 23:return 56;case 24:return 57;case 25:return 59;case 26:return 42;case 27:return 43;case 28:this.begin("generic");break;case 29:case 32:case 35:case 38:case 41:case 44:this.popState();break;case 30:return"GENERICTYPE";case 31:this.begin("string");break;case 33:return"STR";case 34:this.begin("bqstring");break;case 36:return"BQUOTE_STR";case 37:this.begin("href");break;case 39:return 62;case 40:this.begin("callback_name");break;case 42:this.popState(),this.begin("callback_args");break;case 43:return 60;case 45:return 61;case 46:case 47:case 48:case 49:return 58;case 50:case 51:return 51;case 52:case 53:return 53;case 54:return 52;case 55:return 50;case 56:return 54;case 57:return 55;case 58:return 31;case 59:return 38;case 60:return 75;case 61:return"DOT";case 62:return"PLUS";case 63:return 72;case 64:case 65:return"EQUALS";case 66:return 79;case 67:return"PUNCTUATION";case 68:return 78;case 69:return 77;case 70:return 74;case 71:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[44,45],inclusive:!1},callback_name:{rules:[41,42,43],inclusive:!1},href:{rules:[38,39],inclusive:!1},struct:{rules:[16,17,18,19,20],inclusive:!1},generic:{rules:[29,30],inclusive:!1},bqstring:{rules:[35,36],inclusive:!1},string:{rules:[32,33],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,13,14,15,21,22,23,24,25,26,27,28,31,34,37,40,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71],inclusive:!0}}};function P(){this.yy={}}return R.lexer=F,P.prototype=R,R.Parser=P,new P}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8218).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},5890:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,41],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,38,39],f=[4,6,9,11,23,41],d=[34,35,36,37],p=[22,29],y=[1,55],g={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,attributeKeyType:27,attributeComment:28,ATTRIBUTE_WORD:29,ATTRIBUTE_KEY:30,COMMENT:31,cardinality:32,relType:33,ZERO_OR_ONE:34,ZERO_OR_MORE:35,ONE_OR_MORE:36,ONLY_ONE:37,NON_IDENTIFYING:38,IDENTIFYING:39,WORD:40,open_directive:41,type_directive:42,arg_directive:43,close_directive:44,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",29:"ATTRIBUTE_WORD",30:"ATTRIBUTE_KEY",31:"COMMENT",34:"ZERO_OR_ONE",35:"ZERO_OR_MORE",36:"ONE_OR_MORE",37:"ONLY_ONE",38:"NON_IDENTIFYING",39:"IDENTIFYING",40:"WORD",41:"open_directive",42:"type_directive",43:"arg_directive",44:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[24,3],[24,3],[24,4],[25,1],[26,1],[27,1],[28,1],[18,3],[32,1],[32,1],[32,1],[32,1],[33,1],[33,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:case 16:case 23:case 24:case 25:case 35:this.$=a[s];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeKeyType:a[s]};break;case 21:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeComment:a[s]};break;case 22:this.$={attributeType:a[s-3],attributeName:a[s-2],attributeKeyType:a[s-1],attributeComment:a[s]};break;case 26:case 34:this.$=a[s].replace(/"/g,"");break;case 27:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 28:this.$=r.Cardinality.ZERO_OR_ONE;break;case 29:this.$=r.Cardinality.ZERO_OR_MORE;break;case 30:this.$=r.Cardinality.ONE_OR_MORE;break;case 31:this.$=r.Cardinality.ONLY_ONE;break;case 32:this.$=r.Identification.NON_IDENTIFYING;break;case 33:this.$=r.Identification.IDENTIFYING;break;case 36:r.parseDirective("%%{","open_directive");break;case 37:r.parseDirective(a[s],"type_directive");break;case 38:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 39:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,41:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,41:n},{13:8,42:[1,9]},{42:[2,36]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,41:n},{1:[2,2]},{14:18,15:[1,19],44:a},t([15,44],[2,37]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,41:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,32:24,20:[1,23],34:o,35:s,36:c,37:u}),t([6,9,11,15,20,23,34,35,36,37,41],[2,16]),{11:[1,29]},{16:30,43:[1,31]},{11:[2,39]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,29:l},{33:38,38:[1,39],39:[1,40]},t(h,[2,28]),t(h,[2,29]),t(h,[2,30]),t(h,[2,31]),t(f,[2,9]),{14:41,44:a},{44:[2,38]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,29:l},{26:45,29:[1,46]},{29:[2,23]},{32:47,34:o,35:s,36:c,37:u},t(d,[2,32]),t(d,[2,33]),{11:[1,48]},{19:49,23:[1,51],40:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19],{27:52,28:53,30:[1,54],31:y}),t([22,29,30,31],[2,24]),{23:[2,27]},t(f,[2,10]),t(r,[2,12]),t(r,[2,34]),t(r,[2,35]),t(p,[2,20],{28:56,31:y}),t(p,[2,21]),t([22,29,31],[2,25]),t(p,[2,26]),t(p,[2,22])],defaultActions:{5:[2,36],7:[2,2],20:[2,39],31:[2,38],37:[2,23],44:[2,18],47:[2,27]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),41;case 1:return this.begin("type_directive"),42;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),44;case 4:return 43;case 5:case 6:case 8:case 13:case 17:break;case 7:return 11;case 9:return 9;case 10:return 40;case 11:return 4;case 12:return this.begin("block"),20;case 14:return 30;case 15:return 29;case 16:return 31;case 18:return this.popState(),22;case 19:case 32:return e.yytext[0];case 20:case 24:return 34;case 21:case 25:return 35;case 22:case 26:return 36;case 23:return 37;case 27:case 29:case 30:return 38;case 28:return 39;case 31:return 23;case 33:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:(?:PK)|(?:FK))/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17,18,19],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,20,21,22,23,24,25,26,27,28,29,30,31,32,33],inclusive:!0}}};function v(){this.yy={}}return g.lexer=m,v.prototype=g,g.Parser=v,new v}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8009).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3602:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],o=[2,10],s=[1,20],c=[1,21],u=[1,22],l=[1,23],h=[1,30],f=[1,59],d=[1,45],p=[1,49],y=[1,33],g=[1,34],m=[1,35],v=[1,36],b=[1,37],_=[1,53],x=[1,60],w=[1,48],k=[1,50],T=[1,52],E=[1,56],C=[1,57],S=[1,38],A=[1,39],M=[1,40],N=[1,41],D=[1,58],O=[1,47],B=[1,51],L=[1,54],I=[1,55],R=[1,46],F=[1,63],P=[1,68],j=[1,20,21,22,23,38,42,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],Y=[1,72],z=[1,71],U=[1,73],q=[20,21,23,74,75],H=[1,94],$=[1,99],W=[1,102],V=[1,103],G=[1,96],X=[1,101],Z=[1,104],Q=[1,97],K=[1,109],J=[1,108],tt=[1,98],et=[1,100],nt=[1,105],rt=[1,106],it=[1,107],at=[1,110],ot=[20,21,22,23,74,75],st=[20,21,22,23,48,74,75],ct=[20,21,22,23,40,47,48,50,52,54,56,58,59,60,62,64,66,67,69,74,75,84,88,98,99,102,104,105,115,116,117,118,119,120],ut=[20,21,23],lt=[20,21,23,47,59,60,74,75,84,88,98,99,102,104,105,115,116,117,118,119,120],ht=[1,12,20,21,22,23,24,38,42,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],ft=[47,59,60,84,88,98,99,102,104,105,115,116,117,118,119,120],dt=[1,143],pt=[1,151],yt=[1,152],gt=[1,153],mt=[1,154],vt=[1,138],bt=[1,139],_t=[1,135],xt=[1,146],wt=[1,147],kt=[1,148],Tt=[1,149],Et=[1,150],Ct=[1,155],St=[1,156],At=[1,141],Mt=[1,144],Nt=[1,140],Dt=[1,137],Ot=[20,21,22,23,38,42,47,59,60,79,80,81,82,83,84,88,98,99,102,104,105,111,112,113,114,115,116,117,118,119,120],Bt=[1,159],Lt=[20,21,22,23,26,47,59,60,84,98,99,102,104,105,115,116,117,118,119,120],It=[20,21,22,23,24,26,38,40,41,42,47,51,53,55,57,59,60,61,63,65,66,68,70,74,75,79,80,81,82,83,84,85,88,98,99,102,104,105,106,107,115,116,117,118,119,120],Rt=[12,21,22,24],Ft=[22,99],Pt=[1,242],jt=[1,237],Yt=[1,238],zt=[1,246],Ut=[1,243],qt=[1,240],Ht=[1,239],$t=[1,241],Wt=[1,244],Vt=[1,245],Gt=[1,247],Xt=[1,265],Zt=[20,21,23,99],Qt=[20,21,22,23,59,60,79,95,98,99,102,103,104,105,106],Kt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,link:44,node:45,vertex:46,AMP:47,STYLE_SEPARATOR:48,idString:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,ALPHA:59,COLON:60,PIPE:61,CYLINDERSTART:62,CYLINDEREND:63,DIAMOND_START:64,DIAMOND_STOP:65,TAGEND:66,TRAPSTART:67,TRAPEND:68,INVTRAPSTART:69,INVTRAPEND:70,linkStatement:71,arrowText:72,TESTSTR:73,START_LINK:74,LINK:75,textToken:76,STR:77,keywords:78,STYLE:79,LINKSTYLE:80,CLASSDEF:81,CLASS:82,CLICK:83,DOWN:84,UP:85,textNoTags:86,textNoTagsToken:87,DEFAULT:88,stylesOpt:89,alphaNum:90,CALLBACKNAME:91,CALLBACKARGS:92,HREF:93,LINK_TARGET:94,HEX:95,numList:96,INTERPOLATE:97,NUM:98,COMMA:99,style:100,styleComponent:101,MINUS:102,UNIT:103,BRKT:104,DOT:105,PCT:106,TAGSTART:107,alphaNumToken:108,idStringToken:109,alphaNumStatement:110,direction_tb:111,direction_bt:112,direction_rl:113,direction_lr:114,PUNCTUATION:115,UNICODE_TEXT:116,PLUS:117,EQUALS:118,MULT:119,UNDERSCORE:120,graphCodeTokens:121,ARROW_CROSS:122,ARROW_POINT:123,ARROW_CIRCLE:124,ARROW_OPEN:125,QUOTE:126,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",47:"AMP",48:"STYLE_SEPARATOR",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"ALPHA",60:"COLON",61:"PIPE",62:"CYLINDERSTART",63:"CYLINDEREND",64:"DIAMOND_START",65:"DIAMOND_STOP",66:"TAGEND",67:"TRAPSTART",68:"TRAPEND",69:"INVTRAPSTART",70:"INVTRAPEND",73:"TESTSTR",74:"START_LINK",75:"LINK",77:"STR",79:"STYLE",80:"LINKSTYLE",81:"CLASSDEF",82:"CLASS",83:"CLICK",84:"DOWN",85:"UP",88:"DEFAULT",91:"CALLBACKNAME",92:"CALLBACKARGS",93:"HREF",94:"LINK_TARGET",95:"HEX",97:"INTERPOLATE",98:"NUM",99:"COMMA",102:"MINUS",103:"UNIT",104:"BRKT",105:"DOT",106:"PCT",107:"TAGSTART",111:"direction_tb",112:"direction_bt",113:"direction_rl",114:"direction_lr",115:"PUNCTUATION",116:"UNICODE_TEXT",117:"PLUS",118:"EQUALS",119:"MULT",120:"UNDERSCORE",122:"ARROW_CROSS",123:"ARROW_POINT",124:"ARROW_CIRCLE",125:"ARROW_OPEN",126:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[45,1],[45,5],[45,3],[46,4],[46,6],[46,4],[46,4],[46,4],[46,8],[46,4],[46,4],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,1],[44,2],[44,3],[44,3],[44,1],[44,3],[71,1],[72,3],[39,1],[39,2],[39,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[78,1],[86,1],[86,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[96,1],[96,3],[89,1],[89,3],[100,1],[100,2],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[101,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[87,1],[87,1],[87,1],[87,1],[49,1],[49,2],[90,1],[90,2],[110,1],[110,1],[110,1],[110,1],[43,1],[43,1],[43,1],[43,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 78:case 80:case 92:case 148:case 150:case 151:case 74:case 146:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 48:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 49:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 50:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 51:this.$={stmt:a[s],nodes:a[s]};break;case 52:case 119:case 121:this.$=[a[s]];break;case 53:this.$=a[s-4].concat(a[s]);break;case 54:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 55:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 56:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 57:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 60:this.$=a[s-7],r.addVertex(a[s-7],a[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[s-5],a[s-3]]]));break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 63:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 64:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 68:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 69:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 70:this.$=a[s],r.addVertex(a[s]);break;case 71:a[s-1].text=a[s],this.$=a[s-1];break;case 72:case 73:a[s-2].text=a[s-1],this.$=a[s-2];break;case 75:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 76:c=r.destructLink(a[s]),this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 77:this.$=a[s-1];break;case 79:case 93:case 149:case 147:this.$=a[s-1]+""+a[s];break;case 94:case 95:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 96:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 97:case 105:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 98:case 106:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 99:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 100:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 101:case 107:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 102:case 108:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 103:case 109:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 104:case 110:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 111:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 112:case 114:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 113:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 115:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 116:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 117:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 118:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 120:case 122:a[s-2].push(a[s]),this.$=a[s-2];break;case 124:this.$=a[s-1]+a[s];break;case 152:this.$="v";break;case 153:this.$="-";break;case 154:this.$={stmt:"dir",value:"TB"};break;case 155:this.$={stmt:"dir",value:"BT"};break;case 156:this.$={stmt:"dir",value:"RL"};break;case 157:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},{8:61,10:[1,62],15:F},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,65],21:[1,66],22:P,27:64,30:67},t(j,[2,11]),t(j,[2,12]),t(j,[2,13]),t(j,[2,14]),t(j,[2,15]),t(j,[2,16]),{9:69,20:Y,21:z,23:U,44:70,71:74,74:[1,75],75:[1,76]},{9:77,20:Y,21:z,23:U},{9:78,20:Y,21:z,23:U},{9:79,20:Y,21:z,23:U},{9:80,20:Y,21:z,23:U},{9:81,20:Y,21:z,23:U},{9:83,20:Y,21:z,22:[1,82],23:U},t(j,[2,44]),t(q,[2,51],{30:84,22:P}),{22:[1,85]},{22:[1,86]},{22:[1,87]},{22:[1,88]},{26:H,47:$,59:W,60:V,77:[1,92],84:G,90:91,91:[1,89],93:[1,90],98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(j,[2,154]),t(j,[2,155]),t(j,[2,156]),t(j,[2,157]),t(ot,[2,52],{48:[1,111]}),t(st,[2,70],{109:123,40:[1,112],47:f,50:[1,113],52:[1,114],54:[1,115],56:[1,116],58:[1,117],59:d,60:p,62:[1,118],64:[1,119],66:[1,120],67:[1,121],69:[1,122],84:_,88:x,98:w,99:k,102:T,104:E,105:C,115:D,116:O,117:B,118:L,119:I,120:R}),t(ct,[2,146]),t(ct,[2,171]),t(ct,[2,172]),t(ct,[2,173]),t(ct,[2,174]),t(ct,[2,175]),t(ct,[2,176]),t(ct,[2,177]),t(ct,[2,178]),t(ct,[2,179]),t(ct,[2,180]),t(ct,[2,181]),t(ct,[2,182]),t(ct,[2,183]),t(ct,[2,184]),t(ct,[2,185]),t(ct,[2,186]),{9:124,20:Y,21:z,23:U},{11:125,14:[1,126]},t(ut,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,127]},t(lt,[2,34],{30:128,22:P}),t(j,[2,35]),{45:129,46:42,47:f,49:43,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,115:D,116:O,117:B,118:L,119:I,120:R},t(ht,[2,45]),t(ht,[2,46]),t(ht,[2,47]),t(ft,[2,74],{72:130,61:[1,132],73:[1,131]}),{22:dt,24:pt,26:yt,38:gt,39:133,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t([47,59,60,61,73,84,88,98,99,102,104,105,115,116,117,118,119,120],[2,76]),t(j,[2,36]),t(j,[2,37]),t(j,[2,38]),t(j,[2,39]),t(j,[2,40]),{22:dt,24:pt,26:yt,38:gt,39:157,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(Ot,o,{17:158}),t(q,[2,50],{47:Bt}),{26:H,47:$,59:W,60:V,84:G,90:160,95:[1,161],98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},{88:[1,162],96:163,98:[1,164]},{26:H,47:$,59:W,60:V,84:G,88:[1,165],90:166,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},{26:H,47:$,59:W,60:V,84:G,90:167,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ut,[2,97],{22:[1,168],92:[1,169]}),t(ut,[2,101],{22:[1,170]}),t(ut,[2,105],{108:95,110:172,22:[1,171],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),t(ut,[2,107],{22:[1,173]}),t(Lt,[2,148]),t(Lt,[2,150]),t(Lt,[2,151]),t(Lt,[2,152]),t(Lt,[2,153]),t(It,[2,158]),t(It,[2,159]),t(It,[2,160]),t(It,[2,161]),t(It,[2,162]),t(It,[2,163]),t(It,[2,164]),t(It,[2,165]),t(It,[2,166]),t(It,[2,167]),t(It,[2,168]),t(It,[2,169]),t(It,[2,170]),{47:f,49:174,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,115:D,116:O,117:B,118:L,119:I,120:R},{22:dt,24:pt,26:yt,38:gt,39:175,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:177,42:mt,47:$,50:[1,176],59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:178,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:179,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:180,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{59:[1,181]},{22:dt,24:pt,26:yt,38:gt,39:182,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:183,42:mt,47:$,59:W,60:V,64:[1,184],66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:185,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:186,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:187,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ct,[2,147]),t(Rt,[2,3]),{8:188,15:F},{15:[2,7]},t(a,[2,28]),t(lt,[2,33]),t(q,[2,48],{30:189,22:P}),t(ft,[2,71],{22:[1,190]}),{22:[1,191]},{22:dt,24:pt,26:yt,38:gt,39:192,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,66:vt,74:bt,75:[1,193],76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(It,[2,78]),t(It,[2,80]),t(It,[2,136]),t(It,[2,137]),t(It,[2,138]),t(It,[2,139]),t(It,[2,140]),t(It,[2,141]),t(It,[2,142]),t(It,[2,143]),t(It,[2,144]),t(It,[2,145]),t(It,[2,81]),t(It,[2,82]),t(It,[2,83]),t(It,[2,84]),t(It,[2,85]),t(It,[2,86]),t(It,[2,87]),t(It,[2,88]),t(It,[2,89]),t(It,[2,90]),t(It,[2,91]),{9:196,20:Y,21:z,22:dt,23:U,24:pt,26:yt,38:gt,40:[1,195],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,197],43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},{22:P,30:198},{22:[1,199],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,108:95,110:172,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:[1,200]},{22:[1,201]},{22:[1,202],99:[1,203]},t(Ft,[2,119]),{22:[1,204]},{22:[1,205],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,108:95,110:172,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:[1,206],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,108:95,110:172,115:tt,116:et,117:nt,118:rt,119:it,120:at},{77:[1,207]},t(ut,[2,99],{22:[1,208]}),{77:[1,209],94:[1,210]},{77:[1,211]},t(Lt,[2,149]),{77:[1,212],94:[1,213]},t(ot,[2,54],{109:123,47:f,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,115:D,116:O,117:B,118:L,119:I,120:R}),{22:dt,24:pt,26:yt,38:gt,41:[1,214],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:215,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,51:[1,216],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,53:[1,217],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,55:[1,218],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,57:[1,219],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{60:[1,220]},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,63:[1,221],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,65:[1,222],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,39:223,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,41:[1,224],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,66:vt,68:[1,225],70:[1,226],74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,66:vt,68:[1,228],70:[1,227],74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{9:229,20:Y,21:z,23:U},t(q,[2,49],{47:Bt}),t(ft,[2,73]),t(ft,[2,72]),{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,61:[1,230],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ft,[2,75]),t(It,[2,79]),{22:dt,24:pt,26:yt,38:gt,39:231,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(Ot,o,{17:232}),t(j,[2,43]),{46:233,47:f,49:43,59:d,60:p,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,115:D,116:O,117:B,118:L,119:I,120:R},{22:Pt,59:jt,60:Yt,79:zt,89:234,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:248,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:249,95:Ut,97:[1,250],98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:251,95:Ut,97:[1,252],98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{98:[1,253]},{22:Pt,59:jt,60:Yt,79:zt,89:254,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:255,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{26:H,47:$,59:W,60:V,84:G,90:256,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ut,[2,98]),{77:[1,257]},t(ut,[2,102],{22:[1,258]}),t(ut,[2,103]),t(ut,[2,106]),t(ut,[2,108],{22:[1,259]}),t(ut,[2,109]),t(st,[2,55]),{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,51:[1,260],59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(st,[2,62]),t(st,[2,57]),t(st,[2,58]),t(st,[2,59]),{59:[1,261]},t(st,[2,61]),t(st,[2,63]),{22:dt,24:pt,26:yt,38:gt,42:mt,47:$,59:W,60:V,65:[1,262],66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(st,[2,65]),t(st,[2,66]),t(st,[2,68]),t(st,[2,67]),t(st,[2,69]),t(Rt,[2,4]),t([22,47,59,60,84,88,98,99,102,104,105,115,116,117,118,119,120],[2,77]),{22:dt,24:pt,26:yt,38:gt,41:[1,263],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,264],43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},t(ot,[2,53]),t(ut,[2,111],{99:Xt}),t(Zt,[2,121],{101:266,22:Pt,59:jt,60:Yt,79:zt,95:Ut,98:qt,102:Ht,103:$t,104:Wt,105:Vt,106:Gt}),t(Qt,[2,123]),t(Qt,[2,125]),t(Qt,[2,126]),t(Qt,[2,127]),t(Qt,[2,128]),t(Qt,[2,129]),t(Qt,[2,130]),t(Qt,[2,131]),t(Qt,[2,132]),t(Qt,[2,133]),t(Qt,[2,134]),t(Qt,[2,135]),t(ut,[2,112],{99:Xt}),t(ut,[2,113],{99:Xt}),{22:[1,267]},t(ut,[2,114],{99:Xt}),{22:[1,268]},t(Ft,[2,120]),t(ut,[2,94],{99:Xt}),t(ut,[2,95],{99:Xt}),t(ut,[2,96],{108:95,110:172,26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),t(ut,[2,100]),{94:[1,269]},{94:[1,270]},{51:[1,271]},{61:[1,272]},{65:[1,273]},{9:274,20:Y,21:z,23:U},t(j,[2,42]),{22:Pt,59:jt,60:Yt,79:zt,95:Ut,98:qt,100:275,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},t(Qt,[2,124]),{26:H,47:$,59:W,60:V,84:G,90:276,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},{26:H,47:$,59:W,60:V,84:G,90:277,98:X,99:Z,102:Q,104:K,105:J,108:95,110:93,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(ut,[2,104]),t(ut,[2,110]),t(st,[2,56]),{22:dt,24:pt,26:yt,38:gt,39:278,42:mt,47:$,59:W,60:V,66:vt,74:bt,76:134,77:_t,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},t(st,[2,64]),t(Ot,o,{17:279}),t(Zt,[2,122],{101:266,22:Pt,59:jt,60:Yt,79:zt,95:Ut,98:qt,102:Ht,103:$t,104:Wt,105:Vt,106:Gt}),t(ut,[2,117],{108:95,110:172,22:[1,280],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),t(ut,[2,118],{108:95,110:172,22:[1,281],26:H,47:$,59:W,60:V,84:G,98:X,99:Z,102:Q,104:K,105:J,115:tt,116:et,117:nt,118:rt,119:it,120:at}),{22:dt,24:pt,26:yt,38:gt,41:[1,282],42:mt,47:$,59:W,60:V,66:vt,74:bt,76:194,78:145,79:xt,80:wt,81:kt,82:Tt,83:Et,84:Ct,85:St,87:136,88:At,98:X,99:Z,102:Mt,104:K,105:J,106:Nt,107:Dt,108:142,115:tt,116:et,117:nt,118:rt,119:it,120:at},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,283],43:31,45:32,46:42,47:f,49:43,59:d,60:p,79:y,80:g,81:m,82:v,83:b,84:_,88:x,98:w,99:k,102:T,104:E,105:C,109:44,111:S,112:A,113:M,114:N,115:D,116:O,117:B,118:L,119:I,120:R},{22:Pt,59:jt,60:Yt,79:zt,89:284,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},{22:Pt,59:jt,60:Yt,79:zt,89:285,95:Ut,98:qt,100:235,101:236,102:Ht,103:$t,104:Wt,105:Vt,106:Gt},t(st,[2,60]),t(j,[2,41]),t(ut,[2,115],{99:Xt}),t(ut,[2,116],{99:Xt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],126:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Jt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:case 17:case 20:case 23:case 26:this.popState();break;case 9:return"STR";case 10:return 79;case 11:return 88;case 12:return 80;case 13:return 97;case 14:return 81;case 15:return 82;case 16:this.begin("href");break;case 18:return 93;case 19:this.begin("callbackname");break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 91;case 24:return 92;case 25:this.begin("click");break;case 27:return 83;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 94;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 111;case 48:return 112;case 49:return 113;case 50:return 114;case 51:return 98;case 52:return 104;case 53:return 48;case 54:return 60;case 55:return 47;case 56:return 20;case 57:return 99;case 58:return 119;case 59:case 60:case 61:return 75;case 62:case 63:case 64:return 74;case 65:return 52;case 66:return 53;case 67:return 54;case 68:return 55;case 69:return 56;case 70:return 57;case 71:return 58;case 72:return 62;case 73:return 63;case 74:return 102;case 75:return 105;case 76:return 120;case 77:return 117;case 78:return 106;case 79:case 80:return 118;case 81:return 107;case 82:return 66;case 83:return 85;case 84:return"SEP";case 85:return 84;case 86:return 59;case 87:return 68;case 88:return 67;case 89:return 70;case 90:return 69;case 91:return 115;case 92:return 116;case 93:return 61;case 94:return 50;case 95:return 51;case 96:return 40;case 97:return 41;case 98:return 64;case 99:return 65;case 100:return 126;case 101:return 21;case 102:return 22;case 103:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],inclusive:!0}}};function te(){this.yy={}}return Kt.lexer=Jt,te.prototype=Kt,Kt.Parser=te,new te}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(5354).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9959:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,20,22,29,34],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,23],d=[1,25],p=[1,27],y=[1,30],g=[5,7,9,11,12,13,14,15,16,17,18,19,20,22,29,34],m={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,excludes:16,includes:17,todayMarker:18,title:19,section:20,clickStatement:21,taskTxt:22,taskData:23,openDirective:24,typeDirective:25,closeDirective:26,":":27,argDirective:28,click:29,callbackname:30,callbackargs:31,href:32,clickStatementDebug:33,open_directive:34,type_directive:35,arg_directive:36,close_directive:37,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"excludes",17:"includes",18:"todayMarker",19:"title",20:"section",22:"taskTxt",23:"taskData",27:":",29:"click",30:"callbackname",31:"callbackargs",32:"href",34:"open_directive",35:"type_directive",36:"arg_directive",37:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[21,2],[21,3],[21,3],[21,4],[21,3],[21,4],[21,2],[33,2],[33,3],[33,3],[33,4],[33,3],[33,4],[33,2],[24,1],[25,1],[28,1],[26,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.TopAxis(),this.$=a[s].substr(8);break;case 12:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 13:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 14:r.setIncludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 15:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 16:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 17:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 19:r.addTask(a[s-1],a[s]),this.$="task";break;case 23:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 24:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 25:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 26:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 27:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 28:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 29:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 30:case 36:this.$=a[s-1]+" "+a[s];break;case 31:case 32:case 34:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 33:case 35:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 37:r.parseDirective("%%{","open_directive");break;case 38:r.parseDirective(a[s],"type_directive");break;case 39:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 40:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,24:4,34:n},{1:[3]},{3:6,4:2,5:e,24:4,34:n},t(r,[2,3],{6:7}),{25:8,35:[1,9]},{35:[2,37]},{1:[2,1]},{4:26,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:h,20:f,21:24,22:d,24:4,29:p,34:n},{26:28,27:[1,29],37:y},t([27,37],[2,38]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:26,10:31,12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:h,20:f,21:24,22:d,24:4,29:p,34:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),t(r,[2,17]),t(r,[2,18]),{23:[1,32]},t(r,[2,20]),{30:[1,33],32:[1,34]},{11:[1,35]},{28:36,36:[1,37]},{11:[2,40]},t(r,[2,5]),t(r,[2,19]),t(r,[2,23],{31:[1,38],32:[1,39]}),t(r,[2,29],{30:[1,40]}),t(g,[2,21]),{26:41,37:y},{37:[2,39]},t(r,[2,24],{32:[1,42]}),t(r,[2,25]),t(r,[2,27],{31:[1,43]}),{11:[1,44]},t(r,[2,26]),t(r,[2,28]),t(g,[2,22])],defaultActions:{5:[2,37],6:[2,1],30:[2,40],37:[2,39]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},v={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),34;case 1:return this.begin("type_directive"),35;case 2:return this.popState(),this.begin("arg_directive"),27;case 3:return this.popState(),this.popState(),37;case 4:return 36;case 5:case 6:case 7:case 9:case 10:case 11:break;case 8:return 11;case 12:this.begin("href");break;case 13:case 16:case 19:case 22:this.popState();break;case 14:return 32;case 15:this.begin("callbackname");break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 30;case 20:return 31;case 21:this.begin("click");break;case 23:return 29;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 17;case 30:return 16;case 31:return 18;case 32:return"date";case 33:return 19;case 34:return 20;case 35:return 22;case 36:return 23;case 37:return 27;case 38:return 7;case 39:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],inclusive:!0}}};function b(){this.yy={}}return m.lexer=v,b.prototype=m,m.Parser=b,new b}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(6878).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},2553:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:case 18:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8183).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6765:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1428).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},7062:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,20,21,22,23],s=[2,5],c=[1,6,11,13,20,21,22,23],u=[20,21,22],l=[2,8],h=[1,18],f=[1,19],d=[1,24],p=[6,20,21,22,23],y={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,openDirective:15,typeDirective:16,closeDirective:17,":":18,argDirective:19,NEWLINE:20,";":21,EOF:22,open_directive:23,type_directive:24,arg_directive:25,close_directive:26,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",18:":",20:"NEWLINE",21:";",22:"EOF",23:"open_directive",24:"type_directive",25:"arg_directive",26:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[15,1],[16,1],[19,1],[17,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setTitle(this.$);break;case 17:r.parseDirective("%%{","open_directive");break;case 18:r.parseDirective(a[s],"type_directive");break;case 19:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 20:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{1:[3]},{3:10,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{3:11,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,14]),t(c,[2,15]),t(c,[2,16]),{16:14,24:[1,15]},{24:[2,17]},{1:[2,1]},{1:[2,2]},t(u,l,{15:8,9:16,10:17,5:20,1:[2,3],11:h,13:f,23:a}),t(o,s,{7:21}),{17:22,18:[1,23],26:d},t([18,26],[2,18]),t(o,[2,6]),{4:25,20:n,21:r,22:i},{12:[1,26]},{14:[1,27]},t(u,[2,11]),t(u,l,{15:8,9:16,10:17,5:20,1:[2,4],11:h,13:f,23:a}),t(p,[2,12]),{19:28,25:[1,29]},t(p,[2,20]),t(o,[2,7]),t(u,[2,9]),t(u,[2,10]),{17:30,26:d},{26:[2,19]},t(p,[2,13])],defaultActions:{9:[2,17],10:[2,1],11:[2,2],29:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),23;case 1:return this.begin("type_directive"),24;case 2:return this.popState(),this.begin("arg_directive"),18;case 3:return this.popState(),this.popState(),26;case 4:return 25;case 5:case 6:case 8:case 9:break;case 7:return 20;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return 8;case 17:return"value";case 18:return 22}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17,18],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(4551).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3176:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,17],i=[2,10],a=[1,21],o=[1,22],s=[1,23],c=[1,24],u=[1,25],l=[1,26],h=[1,19],f=[1,27],d=[1,28],p=[1,31],y=[66,67],g=[5,8,14,35,36,37,38,39,40,48,55,57,66,67],m=[5,6,8,14,35,36,37,38,39,40,48,66,67],v=[1,51],b=[1,52],_=[1,53],x=[1,54],w=[1,55],k=[1,56],T=[1,57],E=[57,58],C=[1,69],S=[1,65],A=[1,66],M=[1,67],N=[1,68],D=[1,70],O=[1,74],B=[1,75],L=[1,72],I=[1,73],R=[5,8,14,35,36,37,38,39,40,48,66,67],F={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,open_directive:14,type_directive:15,arg_directive:16,close_directive:17,requirementDef:18,elementDef:19,relationshipDef:20,requirementType:21,requirementName:22,STRUCT_START:23,requirementBody:24,ID:25,COLONSEP:26,id:27,TEXT:28,text:29,RISK:30,riskLevel:31,VERIFYMTHD:32,verifyType:33,STRUCT_STOP:34,REQUIREMENT:35,FUNCTIONAL_REQUIREMENT:36,INTERFACE_REQUIREMENT:37,PERFORMANCE_REQUIREMENT:38,PHYSICAL_REQUIREMENT:39,DESIGN_CONSTRAINT:40,LOW_RISK:41,MED_RISK:42,HIGH_RISK:43,VERIFY_ANALYSIS:44,VERIFY_DEMONSTRATION:45,VERIFY_INSPECTION:46,VERIFY_TEST:47,ELEMENT:48,elementName:49,elementBody:50,TYPE:51,type:52,DOCREF:53,ref:54,END_ARROW_L:55,relationship:56,LINE:57,END_ARROW_R:58,CONTAINS:59,COPIES:60,DERIVES:61,SATISFIES:62,VERIFIES:63,REFINES:64,TRACES:65,unqString:66,qString:67,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"open_directive",15:"type_directive",16:"arg_directive",17:"close_directive",23:"STRUCT_START",25:"ID",26:"COLONSEP",28:"TEXT",30:"RISK",32:"VERIFYMTHD",34:"STRUCT_STOP",35:"REQUIREMENT",36:"FUNCTIONAL_REQUIREMENT",37:"INTERFACE_REQUIREMENT",38:"PERFORMANCE_REQUIREMENT",39:"PHYSICAL_REQUIREMENT",40:"DESIGN_CONSTRAINT",41:"LOW_RISK",42:"MED_RISK",43:"HIGH_RISK",44:"VERIFY_ANALYSIS",45:"VERIFY_DEMONSTRATION",46:"VERIFY_INSPECTION",47:"VERIFY_TEST",48:"ELEMENT",51:"TYPE",53:"DOCREF",55:"END_ARROW_L",57:"LINE",58:"END_ARROW_R",59:"CONTAINS",60:"COPIES",61:"DERIVES",62:"SATISFIES",63:"VERIFIES",64:"REFINES",65:"TRACES",66:"unqString",67:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[18,5],[24,5],[24,5],[24,5],[24,5],[24,2],[24,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,1],[31,1],[31,1],[31,1],[33,1],[33,1],[33,1],[33,1],[19,5],[50,5],[50,5],[50,2],[50,1],[20,5],[20,5],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[27,1],[27,1],[29,1],[29,1],[49,1],[49,1],[52,1],[52,1],[54,1],[54,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","pie");break;case 10:this.$=[];break;case 16:r.addRequirement(a[s-3],a[s-4]);break;case 17:r.setNewReqId(a[s-2]);break;case 18:r.setNewReqText(a[s-2]);break;case 19:r.setNewReqRisk(a[s-2]);break;case 20:r.setNewReqVerifyMethod(a[s-2]);break;case 23:this.$=r.RequirementType.REQUIREMENT;break;case 24:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 26:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 27:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 29:this.$=r.RiskLevel.LOW_RISK;break;case 30:this.$=r.RiskLevel.MED_RISK;break;case 31:this.$=r.RiskLevel.HIGH_RISK;break;case 32:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 33:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 34:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 35:this.$=r.VerifyType.VERIFY_TEST;break;case 36:r.addElement(a[s-3]);break;case 37:r.setNewElementType(a[s-2]);break;case 38:r.setNewElementDocRef(a[s-2]);break;case 41:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 42:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 43:this.$=r.Relationships.CONTAINS;break;case 44:this.$=r.Relationships.COPIES;break;case 45:this.$=r.Relationships.DERIVES;break;case 46:this.$=r.Relationships.SATISFIES;break;case 47:this.$=r.Relationships.VERIFIES;break;case 48:this.$=r.Relationships.REFINES;break;case 49:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n},{1:[3]},{3:7,4:2,5:[1,6],6:e,9:4,14:n},{5:[1,8]},{10:9,15:[1,10]},{15:[2,6]},{3:11,4:2,6:e,9:4,14:n},{1:[2,2]},{4:16,5:r,7:12,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{11:29,12:[1,30],17:p},t([12,17],[2,7]),{1:[2,1]},{8:[1,32]},{4:16,5:r,7:33,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:34,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:35,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:36,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:37,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{22:38,66:[1,39],67:[1,40]},{49:41,66:[1,42],67:[1,43]},{55:[1,44],57:[1,45]},t(y,[2,23]),t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(g,[2,52]),t(g,[2,53]),t(m,[2,4]),{13:46,16:[1,47]},t(m,[2,9]),{1:[2,3]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{23:[1,48]},{23:[2,50]},{23:[2,51]},{23:[1,49]},{23:[2,56]},{23:[2,57]},{56:50,59:v,60:b,61:_,62:x,63:w,64:k,65:T},{56:58,59:v,60:b,61:_,62:x,63:w,64:k,65:T},{11:59,17:p},{17:[2,8]},{5:[1,60]},{5:[1,61]},{57:[1,62]},t(E,[2,43]),t(E,[2,44]),t(E,[2,45]),t(E,[2,46]),t(E,[2,47]),t(E,[2,48]),t(E,[2,49]),{58:[1,63]},t(m,[2,5]),{5:C,24:64,25:S,28:A,30:M,32:N,34:D},{5:O,34:B,50:71,51:L,53:I},{27:76,66:f,67:d},{27:77,66:f,67:d},t(R,[2,16]),{26:[1,78]},{26:[1,79]},{26:[1,80]},{26:[1,81]},{5:C,24:82,25:S,28:A,30:M,32:N,34:D},t(R,[2,22]),t(R,[2,36]),{26:[1,83]},{26:[1,84]},{5:O,34:B,50:85,51:L,53:I},t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),{27:86,66:f,67:d},{29:87,66:[1,88],67:[1,89]},{31:90,41:[1,91],42:[1,92],43:[1,93]},{33:94,44:[1,95],45:[1,96],46:[1,97],47:[1,98]},t(R,[2,21]),{52:99,66:[1,100],67:[1,101]},{54:102,66:[1,103],67:[1,104]},t(R,[2,39]),{5:[1,105]},{5:[1,106]},{5:[2,54]},{5:[2,55]},{5:[1,107]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[1,108]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[1,109]},{5:[2,58]},{5:[2,59]},{5:[1,110]},{5:[2,60]},{5:[2,61]},{5:C,24:111,25:S,28:A,30:M,32:N,34:D},{5:C,24:112,25:S,28:A,30:M,32:N,34:D},{5:C,24:113,25:S,28:A,30:M,32:N,34:D},{5:C,24:114,25:S,28:A,30:M,32:N,34:D},{5:O,34:B,50:115,51:L,53:I},{5:O,34:B,50:116,51:L,53:I},t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,37]),t(R,[2,38])],defaultActions:{5:[2,6],7:[2,2],11:[2,1],32:[2,3],33:[2,11],34:[2,12],35:[2,13],36:[2,14],37:[2,15],39:[2,50],40:[2,51],42:[2,56],43:[2,57],47:[2,8],88:[2,54],89:[2,55],91:[2,29],92:[2,30],93:[2,31],95:[2,32],96:[2,33],97:[2,34],98:[2,35],100:[2,58],101:[2,59],103:[2,60],104:[2,61]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),14;case 1:return this.begin("type_directive"),15;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),17;case 4:return 16;case 5:return 5;case 6:case 7:case 8:break;case 9:return 8;case 10:return 6;case 11:return 23;case 12:return 34;case 13:return 26;case 14:return 25;case 15:return 28;case 16:return 30;case 17:return 32;case 18:return 35;case 19:return 36;case 20:return 37;case 21:return 38;case 22:return 39;case 23:return 40;case 24:return 41;case 25:return 42;case 26:return 43;case 27:return 44;case 28:return 45;case 29:return 46;case 30:return 47;case 31:return 48;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 62;case 36:return 63;case 37:return 64;case 38:return 65;case 39:return 51;case 40:return 53;case 41:return 55;case 42:return 58;case 43:return 57;case 44:this.begin("string");break;case 45:this.popState();break;case 46:return"qString";case 47:return e.yytext=e.yytext.trim(),66}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[45,46],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47],inclusive:!0}}};function j(){this.yy={}}return F.lexer=P,j.prototype=F,F.Parser=j,new j}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8800).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6876:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,18],u=[1,19],l=[1,21],h=[1,22],f=[1,23],d=[1,29],p=[1,30],y=[1,31],g=[1,32],m=[1,33],v=[1,34],b=[1,37],_=[1,38],x=[1,39],w=[1,40],k=[1,41],T=[1,42],E=[1,45],C=[1,4,5,16,20,22,23,24,30,32,33,34,35,36,38,40,41,42,46,47,48,49,57,67],S=[1,58],A=[4,5,16,20,22,23,24,30,32,33,34,35,36,38,42,46,47,48,49,57,67],M=[4,5,16,20,22,23,24,30,32,33,34,35,36,38,41,42,46,47,48,49,57,67],N=[4,5,16,20,22,23,24,30,32,33,34,35,36,38,40,42,46,47,48,49,57,67],D=[55,56,57],O=[1,4,5,7,16,20,22,23,24,30,32,33,34,35,36,38,40,41,42,46,47,48,49,57,67],B={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,participant_actor:20,signal:21,autonumber:22,activate:23,deactivate:24,note_statement:25,links_statement:26,link_statement:27,properties_statement:28,details_statement:29,title:30,text2:31,loop:32,end:33,rect:34,opt:35,alt:36,else_sections:37,par:38,par_sections:39,and:40,else:41,note:42,placement:43,over:44,actor_pair:45,links:46,link:47,properties:48,details:49,spaceList:50,",":51,left_of:52,right_of:53,signaltype:54,"+":55,"-":56,ACTOR:57,SOLID_OPEN_ARROW:58,DOTTED_OPEN_ARROW:59,SOLID_ARROW:60,DOTTED_ARROW:61,SOLID_CROSS:62,DOTTED_CROSS:63,SOLID_POINT:64,DOTTED_POINT:65,TXT:66,open_directive:67,type_directive:68,arg_directive:69,close_directive:70,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",20:"participant_actor",22:"autonumber",23:"activate",24:"deactivate",30:"title",32:"loop",33:"end",34:"rect",35:"opt",36:"alt",38:"par",40:"and",41:"else",42:"note",44:"over",46:"links",47:"link",48:"properties",49:"details",51:",",52:"left_of",53:"right_of",55:"+",56:"-",57:"ACTOR",58:"SOLID_OPEN_ARROW",59:"DOTTED_OPEN_ARROW",60:"SOLID_ARROW",61:"DOTTED_ARROW",62:"SOLID_CROSS",63:"DOTTED_CROSS",64:"SOLID_POINT",65:"DOTTED_POINT",66:"TXT",67:"open_directive",68:"type_directive",69:"arg_directive",70:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,5],[10,3],[10,2],[10,1],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,3],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[39,1],[39,4],[37,1],[37,4],[25,4],[25,4],[26,3],[27,3],[28,3],[29,3],[50,2],[50,1],[45,3],[45,1],[43,1],[43,1],[21,5],[21,5],[21,4],[17,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[54,1],[31,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.apply(a[s]),a[s];case 5:case 9:this.$=[];break;case 6:a[s-1].push(a[s]),this.$=a[s-1];break;case 7:case 8:case 45:this.$=a[s];break;case 12:a[s-3].type="addParticipant",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 13:a[s-1].type="addParticipant",this.$=a[s-1];break;case 14:a[s-3].type="addActor",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 15:a[s-1].type="addActor",this.$=a[s-1];break;case 17:r.enableSequenceNumbers();break;case 18:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]};break;case 19:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-1]};break;case 25:this.$=[{type:"setTitle",text:a[s-1]}];break;case 26:a[s-1].unshift({type:"loopStart",loopText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.LOOP_START}),a[s-1].push({type:"loopEnd",loopText:a[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[s-1];break;case 27:a[s-1].unshift({type:"rectStart",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_START}),a[s-1].push({type:"rectEnd",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[s-1];break;case 28:a[s-1].unshift({type:"optStart",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_START}),a[s-1].push({type:"optEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[s-1];break;case 29:a[s-1].unshift({type:"altStart",altText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.ALT_START}),a[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[s-1];break;case 30:a[s-1].unshift({type:"parStart",parText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.PAR_START}),a[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[s-1];break;case 33:this.$=a[s-3].concat([{type:"and",parText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.PAR_AND},a[s]]);break;case 35:this.$=a[s-3].concat([{type:"else",altText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.ALT_ELSE},a[s]]);break;case 36:this.$=[a[s-1],{type:"addNote",placement:a[s-2],actor:a[s-1].actor,text:a[s]}];break;case 37:a[s-2]=[].concat(a[s-1],a[s-1]).slice(0,2),a[s-2][0]=a[s-2][0].actor,a[s-2][1]=a[s-2][1].actor,this.$=[a[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[s-2].slice(0,2),text:a[s]}];break;case 38:this.$=[a[s-1],{type:"addLinks",actor:a[s-1].actor,text:a[s]}];break;case 39:this.$=[a[s-1],{type:"addALink",actor:a[s-1].actor,text:a[s]}];break;case 40:this.$=[a[s-1],{type:"addProperties",actor:a[s-1].actor,text:a[s]}];break;case 41:this.$=[a[s-1],{type:"addDetails",actor:a[s-1].actor,text:a[s]}];break;case 44:this.$=[a[s-2],a[s]];break;case 46:this.$=r.PLACEMENT.LEFTOF;break;case 47:this.$=r.PLACEMENT.RIGHTOF;break;case 48:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]}];break;case 49:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-4]}];break;case 50:this.$=[a[s-3],a[s-1],{type:"addMessage",from:a[s-3].actor,to:a[s-1].actor,signalType:a[s-2],msg:a[s]}];break;case 51:this.$={type:"addParticipant",actor:a[s]};break;case 52:this.$=r.LINETYPE.SOLID_OPEN;break;case 53:this.$=r.LINETYPE.DOTTED_OPEN;break;case 54:this.$=r.LINETYPE.SOLID;break;case 55:this.$=r.LINETYPE.DOTTED;break;case 56:this.$=r.LINETYPE.SOLID_CROSS;break;case 57:this.$=r.LINETYPE.DOTTED_CROSS;break;case 58:this.$=r.LINETYPE.SOLID_POINT;break;case 59:this.$=r.LINETYPE.DOTTED_POINT;break;case 60:this.$=r.parseMessage(a[s].trim().substring(1));break;case 61:r.parseDirective("%%{","open_directive");break;case 62:r.parseDirective(a[s],"type_directive");break;case 63:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 64:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:n,6:4,7:r,11:6,67:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,11:6,67:i},{3:9,4:e,5:n,6:4,7:r,11:6,67:i},{3:10,4:e,5:n,6:4,7:r,11:6,67:i},t([1,4,5,16,20,22,23,24,30,32,34,35,36,38,42,46,47,48,49,57,67],a,{8:11}),{12:12,68:[1,13]},{68:[2,61]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{13:43,14:[1,44],70:E},t([14,70],[2,62]),t(C,[2,6]),{6:35,10:46,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},t(C,[2,8]),t(C,[2,9]),{17:47,57:T},{17:48,57:T},{5:[1,49]},t(C,[2,17]),{17:50,57:T},{17:51,57:T},{5:[1,52]},{5:[1,53]},{5:[1,54]},{5:[1,55]},{5:[1,56]},{31:57,66:S},{19:[1,59]},{19:[1,60]},{19:[1,61]},{19:[1,62]},{19:[1,63]},t(C,[2,31]),{54:64,58:[1,65],59:[1,66],60:[1,67],61:[1,68],62:[1,69],63:[1,70],64:[1,71],65:[1,72]},{43:73,44:[1,74],52:[1,75],53:[1,76]},{17:77,57:T},{17:78,57:T},{17:79,57:T},{17:80,57:T},t([5,18,51,58,59,60,61,62,63,64,65,66],[2,51]),{5:[1,81]},{15:82,69:[1,83]},{5:[2,64]},t(C,[2,7]),{5:[1,85],18:[1,84]},{5:[1,87],18:[1,86]},t(C,[2,16]),{5:[1,88]},{5:[1,89]},t(C,[2,20]),t(C,[2,21]),t(C,[2,22]),t(C,[2,23]),t(C,[2,24]),{5:[1,90]},{5:[2,60]},t(A,a,{8:91}),t(A,a,{8:92}),t(A,a,{8:93}),t(M,a,{37:94,8:95}),t(N,a,{39:96,8:97}),{17:100,55:[1,98],56:[1,99],57:T},t(D,[2,52]),t(D,[2,53]),t(D,[2,54]),t(D,[2,55]),t(D,[2,56]),t(D,[2,57]),t(D,[2,58]),t(D,[2,59]),{17:101,57:T},{17:103,45:102,57:T},{57:[2,46]},{57:[2,47]},{31:104,66:S},{31:105,66:S},{31:106,66:S},{31:107,66:S},t(O,[2,10]),{13:108,70:E},{70:[2,63]},{19:[1,109]},t(C,[2,13]),{19:[1,110]},t(C,[2,15]),t(C,[2,18]),t(C,[2,19]),t(C,[2,25]),{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[1,111],34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[1,112],34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[1,113],34:y,35:g,36:m,38:v,42:b,46:_,47:x,48:w,49:k,57:T,67:i},{33:[1,114]},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[2,34],34:y,35:g,36:m,38:v,41:[1,115],42:b,46:_,47:x,48:w,49:k,57:T,67:i},{33:[1,116]},{4:o,5:s,6:35,9:14,10:16,11:6,16:c,17:36,20:u,21:20,22:l,23:h,24:f,25:24,26:25,27:26,28:27,29:28,30:d,32:p,33:[2,32],34:y,35:g,36:m,38:v,40:[1,117],42:b,46:_,47:x,48:w,49:k,57:T,67:i},{17:118,57:T},{17:119,57:T},{31:120,66:S},{31:121,66:S},{31:122,66:S},{51:[1,123],66:[2,45]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},{5:[1,124]},{5:[1,125]},{5:[1,126]},t(C,[2,26]),t(C,[2,27]),t(C,[2,28]),t(C,[2,29]),{19:[1,127]},t(C,[2,30]),{19:[1,128]},{31:129,66:S},{31:130,66:S},{5:[2,50]},{5:[2,36]},{5:[2,37]},{17:131,57:T},t(O,[2,11]),t(C,[2,12]),t(C,[2,14]),t(M,a,{8:95,37:132}),t(N,a,{8:97,39:133}),{5:[2,48]},{5:[2,49]},{66:[2,44]},{33:[2,35]},{33:[2,33]}],defaultActions:{7:[2,61],8:[2,1],9:[2,2],10:[2,3],45:[2,64],58:[2,60],75:[2,46],76:[2,47],83:[2,63],104:[2,38],105:[2,39],106:[2,40],107:[2,41],120:[2,50],121:[2,36],122:[2,37],129:[2,48],130:[2,49],131:[2,44],132:[2,35],133:[2,33]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},L={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),67;case 1:return this.begin("type_directive"),68;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),70;case 4:return 69;case 5:case 39:case 52:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return this.begin("ID"),20;case 13:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),57;case 14:return this.popState(),this.popState(),this.begin("LINE"),18;case 15:return this.popState(),this.popState(),5;case 16:return this.begin("LINE"),32;case 17:return this.begin("LINE"),34;case 18:return this.begin("LINE"),35;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),38;case 22:return this.begin("LINE"),40;case 23:return this.popState(),19;case 24:return 33;case 25:return 52;case 26:return 53;case 27:return 46;case 28:return 47;case 29:return 48;case 30:return 49;case 31:return 44;case 32:return 42;case 33:return this.begin("ID"),23;case 34:return this.begin("ID"),24;case 35:return 30;case 36:return 7;case 37:return 22;case 38:return 51;case 40:return e.yytext=e.yytext.trim(),57;case 41:return 60;case 42:return 61;case 43:return 58;case 44:return 59;case 45:return 62;case 46:return 63;case 47:return 64;case 48:return 65;case 49:return 66;case 50:return 55;case 51:return 56;case 53:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,13],inclusive:!1},ALIAS:{rules:[7,8,14,15],inclusive:!1},LINE:{rules:[7,8,23],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],inclusive:!0}}};function I(){this.yy={}}return B.lexer=L,I.prototype=B,B.Parser=I,new I}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1993).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3584:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,30],d=[1,23],p=[1,24],y=[1,25],g=[1,26],m=[1,27],v=[1,32],b=[1,33],_=[1,34],x=[1,35],w=[1,31],k=[1,38],T=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],E=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],C=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],S=[4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,openDirective:31,typeDirective:32,closeDirective:33,":":34,argDirective:35,direction_tb:36,direction_bt:37,direction_rl:38,direction_lr:39,eol:40,";":41,EDGE_STATE:42,left_of:43,right_of:44,open_directive:45,type_directive:46,arg_directive:47,close_directive:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",34:":",36:"direction_tb",37:"direction_bt",38:"direction_rl",39:"direction_lr",41:";",42:"EDGE_STATE",43:"left_of",44:"right_of",45:"open_directive",46:"type_directive",47:"arg_directive",48:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[40,1],[40,1],[11,1],[11,1],[28,1],[28,1],[31,1],[32,1],[35,1],[33,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:case 36:case 37:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 31:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 32:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 33:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,31:6,45:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,31:6,45:i},{3:9,4:e,5:n,6:4,7:r,31:6,45:i},{3:10,4:e,5:n,6:4,7:r,31:6,45:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,36,37,38,39,42,45],a,{8:11}),{32:12,46:[1,13]},{46:[2,40]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},{33:36,34:[1,37],48:k},t([34,48],[2,41]),t(T,[2,6]),{6:28,10:39,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},t(T,[2,8]),t(T,[2,9]),t(T,[2,10],{12:[1,40],13:[1,41]}),t(T,[2,14]),{16:[1,42]},t(T,[2,16],{18:[1,43]}),{21:[1,44]},t(T,[2,20]),t(T,[2,21]),t(T,[2,22]),t(T,[2,23]),{28:45,29:[1,46],43:[1,47],44:[1,48]},t(T,[2,26]),t(T,[2,27]),t(E,[2,36]),t(E,[2,37]),t(T,[2,30]),t(T,[2,31]),t(T,[2,32]),t(T,[2,33]),t(C,[2,28]),{35:49,47:[1,50]},t(C,[2,43]),t(T,[2,7]),t(T,[2,11]),{11:51,22:f,42:w},t(T,[2,15]),t(S,a,{8:52}),{22:[1,53]},{22:[1,54]},{21:[1,55]},{22:[2,38]},{22:[2,39]},{33:56,48:k},{48:[2,42]},t(T,[2,12],{12:[1,57]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,58],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},t(T,[2,18],{18:[1,59]}),{29:[1,60]},{22:[1,61]},t(C,[2,29]),t(T,[2,13]),t(T,[2,17]),t(S,a,{8:62}),t(T,[2,24]),t(T,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,63],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:_,39:x,42:w,45:i},t(T,[2,19])],defaultActions:{7:[2,40],8:[2,1],9:[2,2],10:[2,3],47:[2,38],48:[2,39],50:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:case 26:return 36;case 1:case 27:return 37;case 2:case 28:return 38;case 3:case 29:return 39;case 4:return this.begin("open_directive"),45;case 5:return this.begin("type_directive"),46;case 6:return this.popState(),this.begin("arg_directive"),34;case 7:return this.popState(),this.popState(),48;case 8:return 47;case 9:case 10:case 12:case 13:case 14:case 15:case 39:case 45:break;case 11:case 59:return 5;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:case 33:case 36:this.popState();break;case 19:this.pushState("STATE");break;case 20:case 23:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 21:case 24:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 22:case 25:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 30:this.begin("STATE_STRING");break;case 31:return this.popState(),this.pushState("STATE_ID"),"AS";case 32:case 47:return this.popState(),"ID";case 34:return"STATE_DESCR";case 35:return 17;case 37:return this.popState(),this.pushState("struct"),18;case 38:return this.popState(),19;case 40:return this.begin("NOTE"),27;case 41:return this.popState(),this.pushState("NOTE_ID"),43;case 42:return this.popState(),this.pushState("NOTE_ID"),44;case 43:this.popState(),this.pushState("FLOATING_NOTE");break;case 44:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 46:return"NOTE_TEXT";case 48:return this.popState(),this.pushState("NOTE_TEXT"),22;case 49:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 50:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 51:case 52:return 7;case 53:return 14;case 54:return 42;case 55:return 22;case 56:return e.yytext=e.yytext.trim(),12;case 57:return 13;case 58:return 26;case 60:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,19,26,27,28,29,38,39,40,54,55,56,57,58],inclusive:!1},FLOATING_NOTE_ID:{rules:[47],inclusive:!1},FLOATING_NOTE:{rules:[44,45,46],inclusive:!1},NOTE_TEXT:{rules:[49,50],inclusive:!1},NOTE_ID:{rules:[48],inclusive:!1},NOTE:{rules:[41,42,43],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[32],inclusive:!1},STATE_STRING:{rules:[33,34],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,20,21,22,23,24,25,30,31,35,36,37],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,37,40,51,52,53,54,55,56,57,59,60],inclusive:!0}}};function N(){this.yy={}}return A.lexer=M,N.prototype=A,A.Parser=N,new N}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(3069).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9763:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,x,w,k,T,E,C,S,A,M={};;){if(w=n[n.length-1],this.defaultActions[w]?k=this.defaultActions[w]:(null==_&&(_=b()),k=o[w]&&o[w][_]),void 0===k||!k.length||!k[0]){var N="";for(E in A=[],o[w])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");N=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(_==f?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:m,expected:A})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+_);switch(k[0]){case 1:n.push(_),i.push(p.yytext),a.push(p.yylloc),n.push(k[1]),_=null,x?(_=x,x=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[k[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,k[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(9143).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9609:t=>{"use strict";var e=/^(%20|\s)*(javascript|data)/im,n=/[^\x20-\x7E]/gim,r=/^([^:]+):/gm,i=[".","/"];t.exports={sanitizeUrl:function(t){if(!t)return"about:blank";var a,o,s=t.replace(n,"").trim();return function(t){return i.indexOf(t[0])>-1}(s)?s:(o=s.match(r))?(a=o[0],e.test(a)?"about:blank":s):"about:blank"}}},3841:t=>{t.exports=function(t,e){return t.intersect(e)}},7458:(t,e,n)=>{"use strict";n.d(e,{default:()=>lC});var r=n(1941),i=n.n(r),a={debug:1,info:2,warn:3,error:4,fatal:5},o={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==a[t]&&(t=a[t])),o.trace=function(){},o.debug=function(){},o.info=function(){},o.warn=function(){},o.error=function(){},o.fatal=function(){},t<=a.fatal&&(o.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"",c("FATAL"))),t<=a.error&&(o.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"",c("ERROR"))),t<=a.warn&&(o.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"",c("WARN"))),t<=a.info&&(o.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"",c("INFO"))),t<=a.debug&&(o.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"",c("DEBUG")))},c=function(t){var e=i()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")};function u(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function l(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function h(t){return t}var f=1e-6;function d(t){return"translate("+t+",0)"}function p(t){return"translate(0,"+t+")"}function y(t){return e=>+t(e)}function g(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function m(){return!this.__axis}function v(t,e){var n=[],r=null,i=null,a=6,o=6,s=3,c="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,u=1===t||4===t?-1:1,l=4===t||2===t?"x":"y",v=1===t||3===t?d:p;function b(d){var p=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,b=null==i?e.tickFormat?e.tickFormat.apply(e,n):h:i,_=Math.max(a,0)+s,x=e.range(),w=+x[0]+c,k=+x[x.length-1]+c,T=(e.bandwidth?g:y)(e.copy(),c),E=d.selection?d.selection():d,C=E.selectAll(".domain").data([null]),S=E.selectAll(".tick").data(p,e).order(),A=S.exit(),M=S.enter().append("g").attr("class","tick"),N=S.select("line"),D=S.select("text");C=C.merge(C.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),S=S.merge(M),N=N.merge(M.append("line").attr("stroke","currentColor").attr(l+"2",u*a)),D=D.merge(M.append("text").attr("fill","currentColor").attr(l,u*_).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),d!==E&&(C=C.transition(d),S=S.transition(d),N=N.transition(d),D=D.transition(d),A=A.transition(d).attr("opacity",f).attr("transform",(function(t){return isFinite(t=T(t))?v(t+c):this.getAttribute("transform")})),M.attr("opacity",f).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:T(t))+c)}))),A.remove(),C.attr("d",4===t||2===t?o?"M"+u*o+","+w+"H"+c+"V"+k+"H"+u*o:"M"+c+","+w+"V"+k:o?"M"+w+","+u*o+"V"+c+"H"+k+"V"+u*o:"M"+w+","+c+"H"+k),S.attr("opacity",1).attr("transform",(function(t){return v(T(t)+c)})),N.attr(l+"2",u*a),D.attr(l,u*_).text(b),E.filter(m).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===t?"end":"middle"),E.each((function(){this.__axis=T}))}return b.scale=function(t){return arguments.length?(e=t,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),b):n.slice()},b.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),b):r&&r.slice()},b.tickFormat=function(t){return arguments.length?(i=t,b):i},b.tickSize=function(t){return arguments.length?(a=o=+t,b):a},b.tickSizeInner=function(t){return arguments.length?(a=+t,b):a},b.tickSizeOuter=function(t){return arguments.length?(o=+t,b):o},b.tickPadding=function(t){return arguments.length?(s=+t,b):s},b.offset=function(t){return arguments.length?(c=+t,b):c},b}function b(){}function _(t){return null==t?b:function(){return this.querySelector(t)}}function x(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function w(){return[]}function k(t){return null==t?w:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function E(t){return function(e){return e.matches(t)}}var C=Array.prototype.find;function S(){return this.firstElementChild}var A=Array.prototype.filter;function M(){return Array.from(this.children)}function N(t){return new Array(t.length)}function D(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function O(t){return function(){return t}}function B(t,e,n,r,i,a){for(var o,s=0,c=e.length,u=a.length;se?1:t>=e?0:NaN}D.prototype={constructor:D,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var P="http://www.w3.org/1999/xhtml";const j={svg:"http://www.w3.org/2000/svg",xhtml:P,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Y(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),j.hasOwnProperty(e)?{space:j[e],local:t}:t}function z(t){return function(){this.removeAttribute(t)}}function U(t){return function(){this.removeAttributeNS(t.space,t.local)}}function q(t,e){return function(){this.setAttribute(t,e)}}function H(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function $(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function W(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function V(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function G(t){return function(){this.style.removeProperty(t)}}function X(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Z(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Q(t,e){return t.style.getPropertyValue(e)||V(t).getComputedStyle(t,null).getPropertyValue(e)}function K(t){return function(){delete this[t]}}function J(t,e){return function(){this[t]=e}}function tt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function et(t){return t.trim().split(/^|\s+/)}function nt(t){return t.classList||new rt(t)}function rt(t){this._node=t,this._names=et(t.getAttribute("class")||"")}function it(t,e){for(var n=nt(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Et(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Nt=[null];function Dt(t,e){this._groups=t,this._parents=e}function Ot(){return new Dt([[document.documentElement]],Nt)}Dt.prototype=Ot.prototype={constructor:Dt,select:function(t){"function"!=typeof t&&(t=_(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=x&&(x=_+1);!(b=g[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=F);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?G:"function"==typeof e?Z:X)(t,e,null==n?"":n)):Q(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?K:"function"==typeof e?tt:J)(t,e)):this.node()[t]},classed:function(t,e){var n=et(t+"");if(arguments.length<2){for(var r=nt(this.node()),i=-1,a=n.length;++i{}};function It(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Pt(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--qt}()}finally{qt=0,function(){for(var t,e,n=zt,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:zt=e);Ut=t,re(r)}(),Vt=0}}function ne(){var t=Xt.now(),e=t-Wt;e>1e3&&(Gt-=e,Wt=t)}function re(t){qt||(Ht&&(Ht=clearTimeout(Ht)),t-Vt>24?(t<1/0&&(Ht=setTimeout(ee,t-Xt.now()-Gt)),$t&&($t=clearInterval($t))):($t||(Wt=Xt.now(),$t=setInterval(ne,1e3)),qt=1,Zt(ee)))}function ie(t,e,n){var r=new Jt;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Jt.prototype=te.prototype={constructor:Jt,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Qt():+n)+(null==e?0:+e),this._next||Ut===this||(Ut?Ut._next=this:zt=this,Ut=this),this._call=t,this._time=n,re()},stop:function(){this._call&&(this._call=null,this._time=1/0,re())}};var ae=Yt("start","end","cancel","interrupt"),oe=[];function se(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return ie(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function ue(t,e){var n=le(t,e);if(n.state>3)throw new Error("too late; already running");return n}function le(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function he(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var fe,de=180/Math.PI,pe={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function ye(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:he(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:he(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:he(t,n)},{i:s-2,x:he(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Ue(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Ue(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=De.exec(t))?new $e(e[1],e[2],e[3],1):(e=Oe.exec(t))?new $e(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Be.exec(t))?Ue(e[1],e[2],e[3],e[4]):(e=Le.exec(t))?Ue(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Ie.exec(t))?Xe(e[1],e[2]/100,e[3]/100,1):(e=Re.exec(t))?Xe(e[1],e[2]/100,e[3]/100,e[4]):Fe.hasOwnProperty(t)?ze(Fe[t]):"transparent"===t?new $e(NaN,NaN,NaN,0):null}function ze(t){return new $e(t>>16&255,t>>8&255,255&t,1)}function Ue(t,e,n,r){return r<=0&&(t=e=n=NaN),new $e(t,e,n,r)}function qe(t){return t instanceof Te||(t=Ye(t)),t?new $e((t=t.rgb()).r,t.g,t.b,t.opacity):new $e}function He(t,e,n,r){return 1===arguments.length?qe(t):new $e(t,e,n,null==r?1:r)}function $e(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function We(){return"#"+Ge(this.r)+Ge(this.g)+Ge(this.b)}function Ve(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Ge(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Xe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Qe(t,e,n,r)}function Ze(t){if(t instanceof Qe)return new Qe(t.h,t.s,t.l,t.opacity);if(t instanceof Te||(t=Ye(t)),!t)return new Qe;if(t instanceof Qe)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new Qe(o,s,c,t.opacity)}function Qe(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Ke(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function Je(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}we(Te,Ye,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Pe,formatHex:Pe,formatHsl:function(){return Ze(this).formatHsl()},formatRgb:je,toString:je}),we($e,He,ke(Te,{brighter:function(t){return t=null==t?Ce:Math.pow(Ce,t),new $e(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Ee:Math.pow(Ee,t),new $e(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:We,formatHex:We,formatRgb:Ve,toString:Ve})),we(Qe,(function(t,e,n,r){return 1===arguments.length?Ze(t):new Qe(t,e,n,null==r?1:r)}),ke(Te,{brighter:function(t){return t=null==t?Ce:Math.pow(Ce,t),new Qe(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ee:Math.pow(Ee,t),new Qe(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new $e(Ke(t>=240?t-240:t+120,i,r),Ke(t,i,r),Ke(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const tn=t=>()=>t;function en(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):tn(isNaN(t)?e:t)}const nn=function t(e){var n=function(t){return 1==(t=+t)?en:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):tn(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=He(t)).r,(e=He(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=en(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function rn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:he(n,r)})),a=on.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?ce:ue;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var En=Bt.prototype.constructor;function Cn(t){return function(){this.style.removeProperty(t)}}function Sn(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function An(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Sn(t,a,n)),r}return a._value=e,a}function Mn(t){return function(e){this.textContent=t.call(this,e)}}function Nn(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Mn(r)),e}return r._value=t,r}var Dn=0;function On(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Bn(){return++Dn}var Ln=Bt.prototype;On.prototype=function(t){return Bt().transition(t)}.prototype={constructor:On,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=_(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},Bt.prototype.transition=function(t){var e,n;t instanceof On?(e=t._id,t=t._name):(e=Bn(),(n=In).time=Qt(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?sr(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?sr(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Zn.exec(t))?new lr(e[1],e[2],e[3],1):(e=Qn.exec(t))?new lr(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Kn.exec(t))?sr(e[1],e[2],e[3],e[4]):(e=Jn.exec(t))?sr(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=tr.exec(t))?pr(e[1],e[2]/100,e[3]/100,1):(e=er.exec(t))?pr(e[1],e[2]/100,e[3]/100,e[4]):nr.hasOwnProperty(t)?or(nr[t]):"transparent"===t?new lr(NaN,NaN,NaN,0):null}function or(t){return new lr(t>>16&255,t>>8&255,255&t,1)}function sr(t,e,n,r){return r<=0&&(t=e=n=NaN),new lr(t,e,n,r)}function cr(t){return t instanceof qn||(t=ar(t)),t?new lr((t=t.rgb()).r,t.g,t.b,t.opacity):new lr}function ur(t,e,n,r){return 1===arguments.length?cr(t):new lr(t,e,n,null==r?1:r)}function lr(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function hr(){return"#"+dr(this.r)+dr(this.g)+dr(this.b)}function fr(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function dr(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function pr(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new gr(t,e,n,r)}function yr(t){if(t instanceof gr)return new gr(t.h,t.s,t.l,t.opacity);if(t instanceof qn||(t=ar(t)),!t)return new gr;if(t instanceof gr)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new gr(o,s,c,t.opacity)}function gr(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function mr(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}zn(qn,ar,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:rr,formatHex:rr,formatHsl:function(){return yr(this).formatHsl()},formatRgb:ir,toString:ir}),zn(lr,ur,Un(qn,{brighter:function(t){return t=null==t?$n:Math.pow($n,t),new lr(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Hn:Math.pow(Hn,t),new lr(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:hr,formatHex:hr,formatRgb:fr,toString:fr})),zn(gr,(function(t,e,n,r){return 1===arguments.length?yr(t):new gr(t,e,n,null==r?1:r)}),Un(qn,{brighter:function(t){return t=null==t?$n:Math.pow($n,t),new gr(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Hn:Math.pow(Hn,t),new gr(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new lr(mr(t>=240?t-240:t+120,i,r),mr(t,i,r),mr(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const vr=Math.PI/180,br=180/Math.PI,_r=.96422,xr=.82521,wr=4/29,kr=6/29,Tr=3*kr*kr;function Er(t){if(t instanceof Cr)return new Cr(t.l,t.a,t.b,t.opacity);if(t instanceof Br)return Lr(t);t instanceof lr||(t=cr(t));var e,n,r=Nr(t.r),i=Nr(t.g),a=Nr(t.b),o=Sr((.2225045*r+.7168786*i+.0606169*a)/1);return r===i&&i===a?e=n=o:(e=Sr((.4360747*r+.3850649*i+.1430804*a)/_r),n=Sr((.0139322*r+.0971045*i+.7141733*a)/xr)),new Cr(116*o-16,500*(e-o),200*(o-n),t.opacity)}function Cr(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Sr(t){return t>.008856451679035631?Math.pow(t,1/3):t/Tr+wr}function Ar(t){return t>kr?t*t*t:Tr*(t-wr)}function Mr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Nr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Dr(t){if(t instanceof Br)return new Br(t.h,t.c,t.l,t.opacity);if(t instanceof Cr||(t=Er(t)),0===t.a&&0===t.b)return new Br(NaN,0()=>t;function Rr(t,e){return function(n){return t+n*e}}function Fr(t,e){var n=e-t;return n?Rr(t,n):Ir(isNaN(t)?e:t)}function Pr(t){return function(e,n){var r=t((e=Or(e)).h,(n=Or(n)).h),i=Fr(e.c,n.c),a=Fr(e.l,n.l),o=Fr(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}const jr=Pr((function(t,e){var n=e-t;return n?Rr(t,n>180||n<-180?n-360*Math.round(n/360):n):Ir(isNaN(t)?e:t)}));Pr(Fr);var Yr=Math.sqrt(50),zr=Math.sqrt(10),Ur=Math.sqrt(2);function qr(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),a=r/Math.pow(10,i);return i>=0?(a>=Yr?10:a>=zr?5:a>=Ur?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=Yr?10:a>=zr?5:a>=Ur?2:1)}function Hr(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=Yr?i*=10:a>=zr?i*=5:a>=Ur&&(i*=2),ee?1:t>=e?0:NaN}function Wr(t){let e=t,n=t,r=t;function i(t,e,i=0,a=t.length){if(i>>1;r(t[n],e)<0?i=n+1:a=n}while(it(e)-n,n=$r,r=(e,n)=>$r(t(e),n)),{left:i,center:function(t,n,r=0,a=t.length){const o=i(t,n,r,a-1);return o>r&&e(t[o-1],n)>-e(t[o],n)?o-1:o},right:function(t,e,i=0,a=t.length){if(i>>1;r(t[n],e)<=0?i=n+1:a=n}while(i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?gi(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?gi(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=ai.exec(t))?new bi(e[1],e[2],e[3],1):(e=oi.exec(t))?new bi(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=si.exec(t))?gi(e[1],e[2],e[3],e[4]):(e=ci.exec(t))?gi(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=ui.exec(t))?ki(e[1],e[2]/100,e[3]/100,1):(e=li.exec(t))?ki(e[1],e[2]/100,e[3]/100,e[4]):hi.hasOwnProperty(t)?yi(hi[t]):"transparent"===t?new bi(NaN,NaN,NaN,0):null}function yi(t){return new bi(t>>16&255,t>>8&255,255&t,1)}function gi(t,e,n,r){return r<=0&&(t=e=n=NaN),new bi(t,e,n,r)}function mi(t){return t instanceof Kr||(t=pi(t)),t?new bi((t=t.rgb()).r,t.g,t.b,t.opacity):new bi}function vi(t,e,n,r){return 1===arguments.length?mi(t):new bi(t,e,n,null==r?1:r)}function bi(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function _i(){return"#"+wi(this.r)+wi(this.g)+wi(this.b)}function xi(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function wi(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function ki(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ei(t,e,n,r)}function Ti(t){if(t instanceof Ei)return new Ei(t.h,t.s,t.l,t.opacity);if(t instanceof Kr||(t=pi(t)),!t)return new Ei;if(t instanceof Ei)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new Ei(o,s,c,t.opacity)}function Ei(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Ci(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function Si(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Zr(Kr,pi,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:fi,formatHex:fi,formatHsl:function(){return Ti(this).formatHsl()},formatRgb:di,toString:di}),Zr(bi,vi,Qr(Kr,{brighter:function(t){return t=null==t?ti:Math.pow(ti,t),new bi(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Jr:Math.pow(Jr,t),new bi(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:_i,formatHex:_i,formatRgb:xi,toString:xi})),Zr(Ei,(function(t,e,n,r){return 1===arguments.length?Ti(t):new Ei(t,e,n,null==r?1:r)}),Qr(Kr,{brighter:function(t){return t=null==t?ti:Math.pow(ti,t),new Ei(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Jr:Math.pow(Jr,t),new Ei(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new bi(Ci(t>=240?t-240:t+120,i,r),Ci(t,i,r),Ci(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const Ai=t=>()=>t;function Mi(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):Ai(isNaN(t)?e:t)}const Ni=function t(e){var n=function(t){return 1==(t=+t)?Mi:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Ai(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=vi(t)).r,(e=vi(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=Mi(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function Di(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:Li(n,r)})),a=Fi.lastIndex;return ae&&(n=t,t=e,e=n),u=function(n){return Math.max(t,Math.min(e,n))}),r=c>2?Vi:Wi,i=a=null,h}function h(e){return null==e||isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),Li)))(n)))},h.domain=function(t){return arguments.length?(o=Array.from(t,Ui),l()):o.slice()},h.range=function(t){return arguments.length?(s=Array.from(t),l()):s.slice()},h.rangeRound=function(t){return s=Array.from(t),c=zi,l()},h.clamp=function(t){return arguments.length?(u=!!t||Hi,l()):u!==Hi},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}()(Hi,Hi)}function Zi(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}var Qi,Ki=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ji(t){if(!(e=Ki.exec(t)))throw new Error("invalid format: "+t);var e;return new ta({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function ta(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function ea(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function na(t){return(t=ea(Math.abs(t)))?t[1]:NaN}function ra(t,e){var n=ea(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ji.prototype=ta.prototype,ta.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const ia={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>ra(100*t,e),r:ra,s:function(t,e){var n=ea(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Qi=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+ea(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function aa(t){return t}var oa,sa,ca,ua=Array.prototype.map,la=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function ha(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){var r,i,a,o,s=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e0){let n=Math.round(t/o),r=Math.round(e/o);for(n*oe&&--r,a=new Array(i=r-n+1);++se&&--r,a=new Array(i=r-n+1);++s0;){if((i=qr(c,u,n))===r)return a[o]=c,a[s]=u,e(a);if(i>0)c=Math.floor(c/i)*i,u=Math.ceil(u/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,u=Math.floor(u*i)/i}r=i}return t},t}function fa(){var t=Xi();return t.copy=function(){return Gi(t,fa())},Zi.apply(t,arguments),ha(t)}oa=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?aa:(e=ua.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?aa:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(ua.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"−":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Ji(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,m=t.trim,v=t.type;"n"===v?(y=!0,v="g"):ia[v]||(void 0===g&&(g=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",_="$"===f?a:/[%p]/.test(v)?c:"",x=ia[v],w=/[defgprs%]/.test(v);function k(t){var i,a,c,f=b,k=_;if("c"===v)k=x(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:x(Math.abs(t),g),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==h&&(T=!1),f=(T?"("===h?h:u:"-"===h||"("===h?"":h)+f,k=("s"===v?la[8+Qi/3]:"")+k+(T&&"("===h?")":""),w)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){k=(46===c?o+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var E=f.length+t.length+k.length,C=E>1)+f+t+k+C.slice(E);break;default:t=C+f+t+k}return s(t)}return g=void 0===g?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),k.toString=function(){return t+""},k}return{format:h,formatPrefix:function(t,e){var n=h(((t=Ji(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(na(e)/3))),i=Math.pow(10,-r),a=la[8+r/3];return function(t){return n(i*t)+a}}}}({thousands:",",grouping:[3],currency:["$",""]}),sa=oa.format,ca=oa.formatPrefix;class da extends Map{constructor(t,e=ya){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(pa(this,t))}has(t){return super.has(pa(this,t))}set(t,e){return super.set(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}(this,t),e)}delete(t){return super.delete(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}(this,t))}}function pa({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function ya(t){return null!==t&&"object"==typeof t?t.valueOf():t}Set;const ga=Symbol("implicit");function ma(){var t=new da,e=[],n=[],r=ga;function i(i){let a=t.get(i);if(void 0===a){if(r!==ga)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new da;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return ma(e,n).unknown(r)},Zi.apply(i,arguments),i}const va=1e3,ba=6e4,_a=36e5,xa=864e5,wa=6048e5,ka=31536e6;var Ta=new Date,Ea=new Date;function Ca(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return Ta.setTime(+e),Ea.setTime(+r),t(Ta),t(Ea),Math.floor(n(Ta,Ea))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Sa=Ca((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));Sa.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Ca((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):Sa:null};const Aa=Sa;Sa.range;var Ma=Ca((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*va)}),(function(t,e){return(e-t)/va}),(function(t){return t.getUTCSeconds()}));const Na=Ma;Ma.range;var Da=Ca((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*va)}),(function(t,e){t.setTime(+t+e*ba)}),(function(t,e){return(e-t)/ba}),(function(t){return t.getMinutes()}));const Oa=Da;Da.range;var Ba=Ca((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*va-t.getMinutes()*ba)}),(function(t,e){t.setTime(+t+e*_a)}),(function(t,e){return(e-t)/_a}),(function(t){return t.getHours()}));const La=Ba;Ba.range;var Ia=Ca((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ba)/xa),(t=>t.getDate()-1));const Ra=Ia;function Fa(t){return Ca((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ba)/wa}))}Ia.range;var Pa=Fa(0),ja=Fa(1),Ya=Fa(2),za=Fa(3),Ua=Fa(4),qa=Fa(5),Ha=Fa(6),$a=(Pa.range,ja.range,Ya.range,za.range,Ua.range,qa.range,Ha.range,Ca((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})));const Wa=$a;$a.range;var Va=Ca((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Va.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ca((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};const Ga=Va;Va.range;var Xa=Ca((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*ba)}),(function(t,e){return(e-t)/ba}),(function(t){return t.getUTCMinutes()}));const Za=Xa;Xa.range;var Qa=Ca((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*_a)}),(function(t,e){return(e-t)/_a}),(function(t){return t.getUTCHours()}));const Ka=Qa;Qa.range;var Ja=Ca((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/xa}),(function(t){return t.getUTCDate()-1}));const to=Ja;function eo(t){return Ca((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/wa}))}Ja.range;var no=eo(0),ro=eo(1),io=eo(2),ao=eo(3),oo=eo(4),so=eo(5),co=eo(6),uo=(no.range,ro.range,io.range,ao.range,oo.range,so.range,co.range,Ca((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})));const lo=uo;uo.range;var ho=Ca((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));ho.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ca((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const fo=ho;function po(t,e,n,r,i,a){const o=[[Na,1,va],[Na,5,5e3],[Na,15,15e3],[Na,30,3e4],[a,1,ba],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,_a],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,xa],[r,2,1728e5],[n,1,wa],[e,1,2592e6],[e,3,7776e6],[t,1,ka]];function s(e,n,r){const i=Math.abs(n-e)/r,a=Wr((([,,t])=>t)).right(o,i);if(a===o.length)return t.every(Hr(e/ka,n/ka,r));if(0===a)return Aa.every(Math.max(Hr(e,n,r),1));const[s,c]=o[i/o[a-1][2][t.toLowerCase(),e])))}function Oo(t,e,n){var r=Eo.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Bo(t,e,n){var r=Eo.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Lo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Io(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Ro(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Fo(t,e,n){var r=Eo.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Po(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function jo(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Yo(t,e,n){var r=Eo.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function zo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Uo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function qo(t,e,n){var r=Eo.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ho(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function $o(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Wo(t,e,n){var r=Eo.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Vo(t,e,n){var r=Eo.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Go(t,e,n){var r=Eo.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Xo(t,e,n){var r=Co.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Zo(t,e,n){var r=Eo.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Qo(t,e,n){var r=Eo.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ko(t,e){return Ao(t.getDate(),e,2)}function Jo(t,e){return Ao(t.getHours(),e,2)}function ts(t,e){return Ao(t.getHours()%12||12,e,2)}function es(t,e){return Ao(1+Ra.count(Ga(t),t),e,3)}function ns(t,e){return Ao(t.getMilliseconds(),e,3)}function rs(t,e){return ns(t,e)+"000"}function is(t,e){return Ao(t.getMonth()+1,e,2)}function as(t,e){return Ao(t.getMinutes(),e,2)}function os(t,e){return Ao(t.getSeconds(),e,2)}function ss(t){var e=t.getDay();return 0===e?7:e}function cs(t,e){return Ao(Pa.count(Ga(t)-1,t),e,2)}function us(t){var e=t.getDay();return e>=4||0===e?Ua(t):Ua.ceil(t)}function ls(t,e){return t=us(t),Ao(Ua.count(Ga(t),t)+(4===Ga(t).getDay()),e,2)}function hs(t){return t.getDay()}function fs(t,e){return Ao(ja.count(Ga(t)-1,t),e,2)}function ds(t,e){return Ao(t.getFullYear()%100,e,2)}function ps(t,e){return Ao((t=us(t)).getFullYear()%100,e,2)}function ys(t,e){return Ao(t.getFullYear()%1e4,e,4)}function gs(t,e){var n=t.getDay();return Ao((t=n>=4||0===n?Ua(t):Ua.ceil(t)).getFullYear()%1e4,e,4)}function ms(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Ao(e/60|0,"0",2)+Ao(e%60,"0",2)}function vs(t,e){return Ao(t.getUTCDate(),e,2)}function bs(t,e){return Ao(t.getUTCHours(),e,2)}function _s(t,e){return Ao(t.getUTCHours()%12||12,e,2)}function xs(t,e){return Ao(1+to.count(fo(t),t),e,3)}function ws(t,e){return Ao(t.getUTCMilliseconds(),e,3)}function ks(t,e){return ws(t,e)+"000"}function Ts(t,e){return Ao(t.getUTCMonth()+1,e,2)}function Es(t,e){return Ao(t.getUTCMinutes(),e,2)}function Cs(t,e){return Ao(t.getUTCSeconds(),e,2)}function Ss(t){var e=t.getUTCDay();return 0===e?7:e}function As(t,e){return Ao(no.count(fo(t)-1,t),e,2)}function Ms(t){var e=t.getUTCDay();return e>=4||0===e?oo(t):oo.ceil(t)}function Ns(t,e){return t=Ms(t),Ao(oo.count(fo(t),t)+(4===fo(t).getUTCDay()),e,2)}function Ds(t){return t.getUTCDay()}function Os(t,e){return Ao(ro.count(fo(t)-1,t),e,2)}function Bs(t,e){return Ao(t.getUTCFullYear()%100,e,2)}function Ls(t,e){return Ao((t=Ms(t)).getUTCFullYear()%100,e,2)}function Is(t,e){return Ao(t.getUTCFullYear()%1e4,e,4)}function Rs(t,e){var n=t.getUTCDay();return Ao((t=n>=4||0===n?oo(t):oo.ceil(t)).getUTCFullYear()%1e4,e,4)}function Fs(){return"+0000"}function Ps(){return"%"}function js(t){return+t}function Ys(t){return Math.floor(+t/1e3)}function zs(t){return new Date(t)}function Us(t){return t instanceof Date?+t:+new Date(+t)}function qs(t,e,n,r,i,a,o,s,c,u){var l=Xi(),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),m=u("%a %d"),v=u("%b %d"),b=u("%B"),_=u("%Y");function x(t){return(c(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:js,s:Ys,S:os,u:ss,U:cs,V:ls,w:hs,W:fs,x:null,X:null,y:ds,Y:ys,Z:ms,"%":Ps},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:vs,e:vs,f:ks,g:Ls,G:Rs,H:bs,I:_s,j:xs,L:ws,m:Ts,M:Es,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:js,s:Ys,S:Cs,u:Ss,U:As,V:Ns,w:Ds,W:Os,x:null,X:null,y:Bs,Y:Is,Z:Fs,"%":Ps},x={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:Uo,e:Uo,f:Go,g:Po,G:Fo,H:Ho,I:Ho,j:qo,L:Vo,m:zo,M:$o,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l.get(r[0].toLowerCase()),n+r[0].length):-1},q:Yo,Q:Zo,s:Qo,S:Wo,u:Bo,U:Lo,V:Io,w:Oo,W:Ro,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:Po,Y:Fo,Z:jo,"%":Xo};function w(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=_o(xo(a.y,0,1))).getUTCDay(),r=i>4||0===i?ro.ceil(r):ro(r),r=to.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=bo(xo(a.y,0,1))).getDay(),r=i>4||0===i?ja.ceil(r):ja(r),r=Ra.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?_o(xo(a.y,0,1)).getUTCDay():bo(xo(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,_o(a)):bo(a)}}function T(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=x[i in To?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=w(n,b),b.X=w(r,b),b.c=w(e,b),_.x=w(n,_),_.X=w(r,_),_.c=w(e,_),{format:function(t){var e=w(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),ko=wo.format,wo.parse,wo.utcFormat,wo.utcParse;var Qs=Array.prototype.find;function Ks(){return this.firstElementChild}var Js=Array.prototype.filter;function tc(){return Array.from(this.children)}function ec(t){return new Array(t.length)}function nc(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function rc(t){return function(){return t}}function ic(t,e,n,r,i,a){for(var o,s=0,c=e.length,u=a.length;se?1:t>=e?0:NaN}nc.prototype={constructor:nc,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var uc="http://www.w3.org/1999/xhtml";const lc={svg:"http://www.w3.org/2000/svg",xhtml:uc,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function hc(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),lc.hasOwnProperty(e)?{space:lc[e],local:t}:t}function fc(t){return function(){this.removeAttribute(t)}}function dc(t){return function(){this.removeAttributeNS(t.space,t.local)}}function pc(t,e){return function(){this.setAttribute(t,e)}}function yc(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function gc(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function mc(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function vc(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function bc(t){return function(){this.style.removeProperty(t)}}function _c(t,e,n){return function(){this.style.setProperty(t,e,n)}}function xc(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function wc(t,e){return t.style.getPropertyValue(e)||vc(t).getComputedStyle(t,null).getPropertyValue(e)}function kc(t){return function(){delete this[t]}}function Tc(t,e){return function(){this[t]=e}}function Ec(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Cc(t){return t.trim().split(/^|\s+/)}function Sc(t){return t.classList||new Ac(t)}function Ac(t){this._node=t,this._names=Cc(t.getAttribute("class")||"")}function Mc(t,e){for(var n=Sc(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Zc(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var eu=[null];function nu(t,e){this._groups=t,this._parents=e}function ru(){return new nu([[document.documentElement]],eu)}nu.prototype=ru.prototype={constructor:nu,select:function(t){"function"!=typeof t&&(t=$s(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=x&&(x=_+1);!(b=g[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=cc);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?bc:"function"==typeof e?xc:_c)(t,e,null==n?"":n)):wc(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?kc:"function"==typeof e?Ec:Tc)(t,e)):this.node()[t]},classed:function(t,e){var n=Cc(t+"");if(arguments.length<2){for(var r=Sc(this.node()),i=-1,a=n.length;++iuu)if(Math.abs(l*s-c*u)>uu&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),m=Math.sqrt(h),v=i*Math.tan((su-Math.acos((p+h-y)/(2*g*m)))/2),b=v/m,_=v/g;Math.abs(b-1)>uu&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+_*s)+","+(this._y1=e+_*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>uu||Math.abs(this._y1-u)>uu)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%cu+cu),h>lu?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>uu&&(this._+="A"+n+","+n+",0,"+ +(h>=su)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};const du=fu;function pu(t){return function(){return t}}var yu=Math.abs,gu=Math.atan2,mu=Math.cos,vu=Math.max,bu=Math.min,_u=Math.sin,xu=Math.sqrt,wu=1e-12,ku=Math.PI,Tu=ku/2,Eu=2*ku;function Cu(t){return t>1?0:t<-1?ku:Math.acos(t)}function Su(t){return t>=1?Tu:t<=-1?-Tu:Math.asin(t)}function Au(t){return t.innerRadius}function Mu(t){return t.outerRadius}function Nu(t){return t.startAngle}function Du(t){return t.endAngle}function Ou(t){return t&&t.padAngle}function Bu(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*fN*N+D*D&&(T=C,E=S),{cx:T,cy:E,x01:-l,y01:-h,x11:T*(i/x-1),y11:E*(i/x-1)}}function Iu(){var t=Au,e=Mu,n=pu(0),r=null,i=Nu,a=Du,o=Ou,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-Tu,d=a.apply(this,arguments)-Tu,p=yu(d-f),y=d>f;if(s||(s=c=du()),hwu)if(p>Eu-wu)s.moveTo(h*mu(f),h*_u(f)),s.arc(0,0,h,f,d,!y),l>wu&&(s.moveTo(l*mu(d),l*_u(d)),s.arc(0,0,l,d,f,y));else{var g,m,v=f,b=d,_=f,x=d,w=p,k=p,T=o.apply(this,arguments)/2,E=T>wu&&(r?+r.apply(this,arguments):xu(l*l+h*h)),C=bu(yu(h-l)/2,+n.apply(this,arguments)),S=C,A=C;if(E>wu){var M=Su(E/l*_u(T)),N=Su(E/h*_u(T));(w-=2*M)>wu?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(f+d)/2),(k-=2*N)>wu?(v+=N*=y?1:-1,b-=N):(k=0,v=b=(f+d)/2)}var D=h*mu(v),O=h*_u(v),B=l*mu(x),L=l*_u(x);if(C>wu){var I,R=h*mu(b),F=h*_u(b),P=l*mu(_),j=l*_u(_);if(pwu?A>wu?(g=Lu(P,j,D,O,h,A,y),m=Lu(R,F,B,L,h,A,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),Awu&&w>wu?S>wu?(g=Lu(B,L,R,F,l,-S,y),m=Lu(D,O,P,j,l,-S,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),St?1:e>=t?0:NaN}function qu(t){return t}function Hu(){}function $u(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function Wu(t){this._context=t}function Vu(t){return new Wu(t)}function Gu(t){this._context=t}function Xu(t){this._context=t}function Zu(t){this._context=t}function Qu(t){return t<0?-1:1}function Ku(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(Qu(a)+Qu(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Ju(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function tl(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function el(t){this._context=t}function nl(t){this._context=new rl(t)}function rl(t){this._context=t}function il(t){this._context=t}function al(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var sl=new Date,cl=new Date;function ul(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return sl.setTime(+e),cl.setTime(+r),t(sl),t(cl),Math.floor(n(sl,cl))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}const ll=864e5,hl=6048e5;function fl(t){return ul((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/hl}))}var dl=fl(0),pl=fl(1),yl=fl(2),gl=fl(3),ml=fl(4),vl=fl(5),bl=fl(6),_l=(dl.range,pl.range,yl.range,gl.range,ml.range,vl.range,bl.range,ul((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/ll}),(function(t){return t.getUTCDate()-1})));const xl=_l;function wl(t){return ul((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/hl}))}_l.range;var kl=wl(0),Tl=wl(1),El=wl(2),Cl=wl(3),Sl=wl(4),Al=wl(5),Ml=wl(6),Nl=(kl.range,Tl.range,El.range,Cl.range,Sl.range,Al.range,Ml.range,ul((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/ll),(t=>t.getDate()-1)));const Dl=Nl;Nl.range;var Ol=ul((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Ol.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ul((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};const Bl=Ol;Ol.range;var Ll=ul((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Ll.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ul((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const Il=Ll;function Rl(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Fl(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Pl(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}Ll.range;var jl,Yl,zl={"-":"",_:" ",0:"0"},Ul=/^\s*\d+/,ql=/^%/,Hl=/[\\^$*+?|[\]().{}]/g;function $l(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a[t.toLowerCase(),e])))}function Xl(t,e,n){var r=Ul.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Zl(t,e,n){var r=Ul.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Ql(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Kl(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Jl(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function th(t,e,n){var r=Ul.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function eh(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function nh(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function rh(t,e,n){var r=Ul.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function ih(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ah(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function oh(t,e,n){var r=Ul.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function sh(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function ch(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function uh(t,e,n){var r=Ul.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function lh(t,e,n){var r=Ul.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function hh(t,e,n){var r=Ul.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function fh(t,e,n){var r=ql.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function dh(t,e,n){var r=Ul.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function ph(t,e,n){var r=Ul.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function yh(t,e){return $l(t.getDate(),e,2)}function gh(t,e){return $l(t.getHours(),e,2)}function mh(t,e){return $l(t.getHours()%12||12,e,2)}function vh(t,e){return $l(1+Dl.count(Bl(t),t),e,3)}function bh(t,e){return $l(t.getMilliseconds(),e,3)}function _h(t,e){return bh(t,e)+"000"}function xh(t,e){return $l(t.getMonth()+1,e,2)}function wh(t,e){return $l(t.getMinutes(),e,2)}function kh(t,e){return $l(t.getSeconds(),e,2)}function Th(t){var e=t.getDay();return 0===e?7:e}function Eh(t,e){return $l(kl.count(Bl(t)-1,t),e,2)}function Ch(t){var e=t.getDay();return e>=4||0===e?Sl(t):Sl.ceil(t)}function Sh(t,e){return t=Ch(t),$l(Sl.count(Bl(t),t)+(4===Bl(t).getDay()),e,2)}function Ah(t){return t.getDay()}function Mh(t,e){return $l(Tl.count(Bl(t)-1,t),e,2)}function Nh(t,e){return $l(t.getFullYear()%100,e,2)}function Dh(t,e){return $l((t=Ch(t)).getFullYear()%100,e,2)}function Oh(t,e){return $l(t.getFullYear()%1e4,e,4)}function Bh(t,e){var n=t.getDay();return $l((t=n>=4||0===n?Sl(t):Sl.ceil(t)).getFullYear()%1e4,e,4)}function Lh(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+$l(e/60|0,"0",2)+$l(e%60,"0",2)}function Ih(t,e){return $l(t.getUTCDate(),e,2)}function Rh(t,e){return $l(t.getUTCHours(),e,2)}function Fh(t,e){return $l(t.getUTCHours()%12||12,e,2)}function Ph(t,e){return $l(1+xl.count(Il(t),t),e,3)}function jh(t,e){return $l(t.getUTCMilliseconds(),e,3)}function Yh(t,e){return jh(t,e)+"000"}function zh(t,e){return $l(t.getUTCMonth()+1,e,2)}function Uh(t,e){return $l(t.getUTCMinutes(),e,2)}function qh(t,e){return $l(t.getUTCSeconds(),e,2)}function Hh(t){var e=t.getUTCDay();return 0===e?7:e}function $h(t,e){return $l(dl.count(Il(t)-1,t),e,2)}function Wh(t){var e=t.getUTCDay();return e>=4||0===e?ml(t):ml.ceil(t)}function Vh(t,e){return t=Wh(t),$l(ml.count(Il(t),t)+(4===Il(t).getUTCDay()),e,2)}function Gh(t){return t.getUTCDay()}function Xh(t,e){return $l(pl.count(Il(t)-1,t),e,2)}function Zh(t,e){return $l(t.getUTCFullYear()%100,e,2)}function Qh(t,e){return $l((t=Wh(t)).getUTCFullYear()%100,e,2)}function Kh(t,e){return $l(t.getUTCFullYear()%1e4,e,4)}function Jh(t,e){var n=t.getUTCDay();return $l((t=n>=4||0===n?ml(t):ml.ceil(t)).getUTCFullYear()%1e4,e,4)}function tf(){return"+0000"}function ef(){return"%"}function nf(t){return+t}function rf(t){return Math.floor(+t/1e3)}jl=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Vl(i),l=Gl(i),h=Vl(a),f=Gl(a),d=Vl(o),p=Gl(o),y=Vl(s),g=Gl(s),m=Vl(c),v=Gl(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:yh,e:yh,f:_h,g:Dh,G:Bh,H:gh,I:mh,j:vh,L:bh,m:xh,M:wh,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:nf,s:rf,S:kh,u:Th,U:Eh,V:Sh,w:Ah,W:Mh,x:null,X:null,y:Nh,Y:Oh,Z:Lh,"%":ef},_={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Ih,e:Ih,f:Yh,g:Qh,G:Jh,H:Rh,I:Fh,j:Ph,L:jh,m:zh,M:Uh,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:nf,s:rf,S:qh,u:Hh,U:$h,V:Vh,w:Gh,W:Xh,x:null,X:null,y:Zh,Y:Kh,Z:tf,"%":ef},x={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:ah,e:ah,f:hh,g:eh,G:th,H:sh,I:sh,j:oh,L:lh,m:ih,M:ch,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l.get(r[0].toLowerCase()),n+r[0].length):-1},q:rh,Q:dh,s:ph,S:uh,u:Zl,U:Ql,V:Kl,w:Xl,W:Jl,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:eh,Y:th,Z:nh,"%":fh};function w(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Fl(Pl(a.y,0,1))).getUTCDay(),r=i>4||0===i?pl.ceil(r):pl(r),r=xl.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Rl(Pl(a.y,0,1))).getDay(),r=i>4||0===i?Tl.ceil(r):Tl(r),r=Dl.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Fl(Pl(a.y,0,1)).getUTCDay():Rl(Pl(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Fl(a)):Rl(a)}}function T(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=x[i in zl?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=w(n,b),b.X=w(r,b),b.c=w(e,b),_.x=w(n,_),_.X=w(r,_),_.c=w(e,_),{format:function(t){var e=w(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),Yl=jl.format,jl.parse,jl.utcFormat,jl.utcParse;var af={value:()=>{}};function of(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function uf(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--pf}()}finally{pf=0,function(){for(var t,e,n=ff,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:ff=e);df=t,Af(r)}(),vf=0}}function Sf(){var t=_f.now(),e=t-mf;e>1e3&&(bf-=e,mf=t)}function Af(t){pf||(yf&&(yf=clearTimeout(yf)),t-vf>24?(t<1/0&&(yf=setTimeout(Cf,t-_f.now()-bf)),gf&&(gf=clearInterval(gf))):(gf||(mf=_f.now(),gf=setInterval(Sf,1e3)),pf=1,xf(Cf)))}function Mf(t,e,n){var r=new Tf;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Tf.prototype=Ef.prototype={constructor:Tf,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?wf():+n)+(null==e?0:+e),this._next||df===this||(df?df._next=this:ff=this,df=this),this._call=t,this._time=n,Af()},stop:function(){this._call&&(this._call=null,this._time=1/0,Af())}};var Nf=hf("start","end","cancel","interrupt"),Df=[];function Of(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Mf(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function Lf(t,e){var n=If(t,e);if(n.state>3)throw new Error("too late; already running");return n}function If(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function Rf(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var Ff,Pf=180/Math.PI,jf={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Yf(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Rf(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Rf(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:Rf(t,n)},{i:s-2,x:Rf(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:Rf(n,r)})),a=Qf.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Bf:Lf;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var gd=iu.prototype.constructor;function md(t){return function(){this.style.removeProperty(t)}}function vd(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function bd(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&vd(t,a,n)),r}return a._value=e,a}function _d(t){return function(e){this.textContent=t.call(this,e)}}function xd(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&_d(r)),e}return r._value=t,r}var wd=0;function kd(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Td(){return++wd}var Ed=iu.prototype;kd.prototype=function(t){return iu().transition(t)}.prototype={constructor:kd,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=$s(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},iu.prototype.transition=function(t){var e,n;t instanceof kd?(e=t._id,t=t._name):(e=Td(),(n=Cd).time=wf(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;ae?1:t>=e?0:NaN}Yd.prototype={constructor:Yd,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var Vd="http://www.w3.org/1999/xhtml";const Gd={svg:"http://www.w3.org/2000/svg",xhtml:Vd,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Xd(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),Gd.hasOwnProperty(e)?{space:Gd[e],local:t}:t}function Zd(t){return function(){this.removeAttribute(t)}}function Qd(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Kd(t,e){return function(){this.setAttribute(t,e)}}function Jd(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function tp(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function ep(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function np(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function rp(t){return function(){this.style.removeProperty(t)}}function ip(t,e,n){return function(){this.style.setProperty(t,e,n)}}function ap(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function op(t,e){return t.style.getPropertyValue(e)||np(t).getComputedStyle(t,null).getPropertyValue(e)}function sp(t){return function(){delete this[t]}}function cp(t,e){return function(){this[t]=e}}function up(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function lp(t){return t.trim().split(/^|\s+/)}function hp(t){return t.classList||new fp(t)}function fp(t){this._node=t,this._names=lp(t.getAttribute("class")||"")}function dp(t,e){for(var n=hp(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function Lp(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var jp=[null];function Yp(t,e){this._groups=t,this._parents=e}function zp(){return new Yp([[document.documentElement]],jp)}Yp.prototype=zp.prototype={constructor:Yp,select:function(t){"function"!=typeof t&&(t=Md(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=x&&(x=_+1);!(b=g[x])&&++x=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=Wd);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?rp:"function"==typeof e?ap:ip)(t,e,null==n?"":n)):op(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?sp:"function"==typeof e?up:cp)(t,e)):this.node()[t]},classed:function(t,e){var n=lp(t+"");if(arguments.length<2){for(var r=hp(this.node()),i=-1,a=n.length;++i{}};function Hp(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Vp(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--Kp}()}finally{Kp=0,function(){for(var t,e,n=Zp,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Zp=e);Qp=t,fy(r)}(),ny=0}}function hy(){var t=iy.now(),e=t-ey;e>1e3&&(ry-=e,ey=t)}function fy(t){Kp||(Jp&&(Jp=clearTimeout(Jp)),t-ny>24?(t<1/0&&(Jp=setTimeout(ly,t-iy.now()-ry)),ty&&(ty=clearInterval(ty))):(ty||(ey=iy.now(),ty=setInterval(hy,1e3)),Kp=1,ay(ly)))}function dy(t,e,n){var r=new cy;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}cy.prototype=uy.prototype={constructor:cy,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?oy():+n)+(null==e?0:+e),this._next||Qp===this||(Qp?Qp._next=this:Zp=this,Qp=this),this._call=t,this._time=n,fy()},stop:function(){this._call&&(this._call=null,this._time=1/0,fy())}};var py=Xp("start","end","cancel","interrupt"),yy=[];function gy(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return dy(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function vy(t,e){var n=by(t,e);if(n.state>3)throw new Error("too late; already running");return n}function by(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function _y(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var xy,wy=180/Math.PI,ky={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Ty(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:_y(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:_y(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:_y(t,n)},{i:s-2,x:_y(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Qy(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Qy(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Yy.exec(t))?new tg(e[1],e[2],e[3],1):(e=zy.exec(t))?new tg(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Uy.exec(t))?Qy(e[1],e[2],e[3],e[4]):(e=qy.exec(t))?Qy(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Hy.exec(t))?ig(e[1],e[2]/100,e[3]/100,1):(e=$y.exec(t))?ig(e[1],e[2]/100,e[3]/100,e[4]):Wy.hasOwnProperty(t)?Zy(Wy[t]):"transparent"===t?new tg(NaN,NaN,NaN,0):null}function Zy(t){return new tg(t>>16&255,t>>8&255,255&t,1)}function Qy(t,e,n,r){return r<=0&&(t=e=n=NaN),new tg(t,e,n,r)}function Ky(t){return t instanceof By||(t=Xy(t)),t?new tg((t=t.rgb()).r,t.g,t.b,t.opacity):new tg}function Jy(t,e,n,r){return 1===arguments.length?Ky(t):new tg(t,e,n,null==r?1:r)}function tg(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function eg(){return"#"+rg(this.r)+rg(this.g)+rg(this.b)}function ng(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function rg(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function ig(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new og(t,e,n,r)}function ag(t){if(t instanceof og)return new og(t.h,t.s,t.l,t.opacity);if(t instanceof By||(t=Xy(t)),!t)return new og;if(t instanceof og)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new og(o,s,c,t.opacity)}function og(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function sg(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function cg(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Dy(By,Xy,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Vy,formatHex:Vy,formatHsl:function(){return ag(this).formatHsl()},formatRgb:Gy,toString:Gy}),Dy(tg,Jy,Oy(By,{brighter:function(t){return t=null==t?Iy:Math.pow(Iy,t),new tg(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Ly:Math.pow(Ly,t),new tg(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:eg,formatHex:eg,formatRgb:ng,toString:ng})),Dy(og,(function(t,e,n,r){return 1===arguments.length?ag(t):new og(t,e,n,null==r?1:r)}),Oy(By,{brighter:function(t){return t=null==t?Iy:Math.pow(Iy,t),new og(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ly:Math.pow(Ly,t),new og(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new tg(sg(t>=240?t-240:t+120,i,r),sg(t,i,r),sg(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const ug=t=>()=>t;function lg(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):ug(isNaN(t)?e:t)}const hg=function t(e){var n=function(t){return 1==(t=+t)?lg:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):ug(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=Jy(t)).r,(e=Jy(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=lg(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function fg(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=ra&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:_y(n,r)})),a=pg.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?my:vy;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Bg=Up.prototype.constructor;function Lg(t){return function(){this.style.removeProperty(t)}}function Ig(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Rg(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Ig(t,a,n)),r}return a._value=e,a}function Fg(t){return function(e){this.textContent=t.call(this,e)}}function Pg(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Fg(r)),e}return r._value=t,r}var jg=0;function Yg(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function zg(){return++jg}var Ug=Up.prototype;Yg.prototype=function(t){return Up().transition(t)}.prototype={constructor:Yg,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Md(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},Up.prototype.transition=function(t){var e,n;t instanceof Yg?(e=t._id,t=t._name):(e=zg(),(n=qg).time=oy(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a0?tm(fm,--lm):0,cm--,10===hm&&(cm=1,sm--),hm}function ym(){return hm=lm2||bm(hm)>3?"":" "}function wm(t,e){for(;--e&&ym()&&!(hm<48||hm>102||hm>57&&hm<65||hm>70&&hm<97););return vm(t,mm()+(e<6&&32==gm()&&32==ym()))}function km(t){for(;ym();)switch(hm){case t:return lm;case 34:case 39:34!==t&&39!==t&&km(hm);break;case 40:41===t&&km(t);break;case 92:ym()}return lm}function Tm(t,e){for(;ym()&&t+hm!==57&&(t+hm!==84||47!==gm()););return"/*"+vm(e,lm-1)+"*"+Zg(47===t?t:ym())}function Em(t){for(;!bm(gm());)ym();return vm(t,lm)}function Cm(t){return function(t){return fm="",t}(Sm("",null,null,null,[""],t=function(t){return sm=cm=1,um=nm(fm=t),lm=0,[]}(t),0,[0],t))}function Sm(t,e,n,r,i,a,o,s,c){for(var u=0,l=0,h=o,f=0,d=0,p=0,y=1,g=1,m=1,v=0,b="",_=i,x=a,w=r,k=b;g;)switch(p=v,v=ym()){case 40:if(108!=p&&58==k.charCodeAt(h-1)){-1!=Jg(k+=Kg(_m(v),"&","&\f"),"&\f")&&(m=-1);break}case 34:case 39:case 91:k+=_m(v);break;case 9:case 10:case 13:case 32:k+=xm(p);break;case 92:k+=wm(mm()-1,7);continue;case 47:switch(gm()){case 42:case 47:im(Mm(Tm(ym(),mm()),e,n),c);break;default:k+="/"}break;case 123*y:s[u++]=nm(k)*m;case 125*y:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+l:d>0&&nm(k)-h&&im(d>32?Nm(k+";",r,n,h-1):Nm(Kg(k," ","")+";",r,n,h-2),c);break;case 59:k+=";";default:if(im(w=Am(k,e,n,u,l,i,s,b,_=[],x=[],h),a),123===v)if(0===l)Sm(k,e,w,w,_,a,h,s,x);else switch(f){case 100:case 109:case 115:Sm(t,w,w,r&&im(Am(t,w,w,0,0,i,s,b,i,_=[],h),x),i,x,h,s,r?_:x);break;default:Sm(k,w,w,w,[""],x,0,s,x)}}u=l=d=0,y=m=1,b=k="",h=o;break;case 58:h=1+nm(k),d=p;default:if(y<1)if(123==v)--y;else if(125==v&&0==y++&&125==pm())continue;switch(k+=Zg(v),v*y){case 38:m=l>0?1:(k+="\f",-1);break;case 44:s[u++]=(nm(k)-1)*m,m=1;break;case 64:45===gm()&&(k+=_m(ym())),f=gm(),l=h=nm(b=k+=Em(mm())),v++;break;case 45:45===p&&2==nm(k)&&(y=0)}}return a}function Am(t,e,n,r,i,a,o,s,c,u,l){for(var h=i-1,f=0===i?a:[""],d=rm(f),p=0,y=0,g=0;p0?f[m]+" "+v:Kg(v,/&\f/g,f[m])))&&(c[g++]=b);return dm(t,e,n,0===i?Vg:s,c,u,l)}function Mm(t,e,n){return dm(t,e,n,Wg,Zg(hm),em(t,2,-2),0)}function Nm(t,e,n,r){return dm(t,e,n,Gg,em(t,0,r),em(t,r+1,-1),r)}const Dm="8.13.9";var Om=n(9609),Bm=n(7856),Lm=n.n(Bm),Im=function(t){var e=t.replace(/\\u[\dA-F]{4}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\u/g,""),16))}));return console.log(e),e=(e=(e=e.replace(/\\x([0-9a-f]{2})/gi,(function(t,e){return String.fromCharCode(parseInt(e,16))}))).replace(/\\[\d\d\d]{3}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))).replace(/\\[\d\d\d]{2}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))},Rm=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}var r=Im(e);return(r=(r=(r=r.replace(/script>/gi,"#")).replace(/javascript:/gi,"#")).replace(/onerror=/gi,"onerror:")).replace(/')}else"loose"!==s.securityLevel&&(M=te().sanitize(M,{ADD_TAGS:["foreignobject"],ADD_ATTR:["dominant-baseline"]}));if(void 0!==n)switch(b){case"flowchart":case"flowchart-v2":n(M,la.bindFunctions);break;case"gantt":n(M,go.bindFunctions);break;case"class":case"classDiagram":n(M,fr.bindFunctions);break;default:n(M)}else o.debug("CB = undefined!");vs.forEach((function(t){t()})),vs=[];var D="sandbox"===s.securityLevel?"#i"+t:"#d"+t,B=(0,l.select)(D).node();if(null!==B&&"function"==typeof B.remove&&(0,l.select)(D).node().remove(),u)throw u;return M},parse:function(t,e){ru||(Vl(),ru=!0);var n=!1;try{var r=e||new Ql(t);return r.db.clear(),r.parse(t)}catch(t){if(n=!0,!fu.parseError)throw t;null!=t.str?fu.parseError(t.str,t.hash):fu.parseError(t)}return!n},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":au={};break;case"type_directive":au.type=e.toLowerCase();break;case"arg_directive":au.args=JSON.parse(e);break;case"close_directive":(function(t,e,n){switch(o.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),o.debug("sanitize in handleDirective",e.args),Cn(e.args),o.debug("sanitize in handleDirective (done)",e.args),Qt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":o.warn("themeCss encountered");break;default:o.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}})(t,au,r),au=null}}catch(t){o.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),o.error(t.message)}},initialize:function(t){var e;null!=t&&t.fontFamily&&(null!==(e=t.themeVariables)&&void 0!==e&&e.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),function(t){Ut=Q({},t)}(t),null!=t&&t.theme&&Lt[t.theme]?t.themeVariables=Lt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Lt.default.getThemeVariables(t.themeVariables));var n="object"===nu(t)?function(t){return Wt=Q({},$t),Wt=Q(Wt,t),t.theme&&Lt[t.theme]&&(Wt.themeVariables=Lt[t.theme].getThemeVariables(t.themeVariables)),Ht=Vt(Wt,qt),Wt}(t):Gt();ou(n),s(n.logLevel),ru||(Vl(),ru=!0)},getConfig:Xt,setConfig:function(t){return Q(Ht,t),Xt()},getSiteConfig:Gt,updateSiteConfig:function(t){return Wt=Q(Wt,t),Vt(Wt,qt),Wt},reset:function(){Kt()},globalReset:function(){Kt(),ou(Xt())},defaultConfig:$t});s(Xt().logLevel),Kt(Xt());const cu=su;var lu=function(){var t,e,n=cu.getConfig();arguments.length>=2?(void 0!==arguments[0]&&(hu.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],o.debug("Callback function found")):void 0!==n.mermaid&&("function"==typeof n.mermaid.callback?(e=n.mermaid.callback,o.debug("Callback function found")):o.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,o.debug("Start On Load before: "+hu.startOnLoad),void 0!==hu.startOnLoad&&(o.debug("Start On Load inner: "+hu.startOnLoad),cu.updateSiteConfig({startOnLoad:hu.startOnLoad})),void 0!==hu.ganttConfig&&cu.updateSiteConfig({gantt:hu.ganttConfig});for(var r,i=new An.initIdGenerator(n.deterministicIds,n.deterministicIDSeed),a=[],s=function(n){o.info("Rendering diagram: "+t[n].id,n);var s=t[n];if(s.getAttribute("data-processed"))return"continue";s.setAttribute("data-processed",!0);var c="mermaid-".concat(i.next());r=s.innerHTML,r=An.entityDecode(r).trim().replace(//gi,"
");var l=An.detectInit(r);l&&o.debug("Detected early reinit: ",l);try{cu.render(c,r,(function(t,n){s.innerHTML=t,void 0!==e&&e(c),n&&n(s)}),s)}catch(t){o.warn("Catching Error (bootstrap)",t),"function"==typeof hu.parseError&&hu.parseError({error:t,str:t.str,hash:t.hash,message:t.str}),a.push({error:t,str:t.str,hash:t.hash,message:t.str})}},c=0;c0)throw a[0]},uu=function(){hu.startOnLoad?cu.getConfig().startOnLoad&&hu.init():void 0===hu.startOnLoad&&(o.debug("In start, no config"),cu.getConfig().startOnLoad&&hu.init())};"undefined"!=typeof document&&window.addEventListener("load",(function(){uu()}),!1);var hu={startOnLoad:!0,htmlLabels:!0,diagrams:{},mermaidAPI:cu,parse:null!=cu?cu.parse:null,render:null!=cu?cu.render:null,init:function(){try{lu.apply(void 0,arguments)}catch(t){o.warn("Syntax Error rendering"),o.warn(t.str)}},initThrowsErrors:lu,initialize:function(t){void 0!==t.mermaid&&(void 0!==t.mermaid.startOnLoad&&(hu.startOnLoad=t.mermaid.startOnLoad),void 0!==t.mermaid.htmlLabels&&(hu.htmlLabels="false"!==t.mermaid.htmlLabels&&!1!==t.mermaid.htmlLabels)),cu.initialize(t)},contentLoaded:uu,setParseErrorHandler:function(t){hu.parseError=t}};const fu=hu},4949:(t,e,n)=>{t.exports={graphlib:n(6614),dagre:n(6478),intersect:n(8114),render:n(5787),util:n(8355),version:n(5689)}},9144:(t,e,n)=>{var r=n(8355);function i(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}t.exports={default:i,normal:i,vee:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])},undirected:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}}},5632:(t,e,n)=>{var r=n(8355),i=n(4322),a=n(1322);t.exports=function(t,e){var n,o=e.nodes().filter((function(t){return r.isSubgraph(e,t)})),s=t.selectAll("g.cluster").data(o,(function(t){return t}));return s.selectAll("*").remove(),s.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0),s=t.selectAll("g.cluster"),r.applyTransition(s,e).style("opacity",1),s.each((function(t){var n=e.node(t),r=i.select(this);i.select(this).append("rect");var o=r.append("g").attr("class","label");a(o,n,n.clusterLabelPos)})),s.selectAll("rect").each((function(t){var n=e.node(t),a=i.select(this);r.applyStyle(a,n.style)})),n=s.exit?s.exit():s.selectAll(null),r.applyTransition(n,e).style("opacity",0).remove(),s}},6315:(t,e,n)=>{"use strict";var r=n(1034),i=n(1322),a=n(8355),o=n(4322);t.exports=function(t,e){var n,s=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0);return s.exit().remove(),s.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(s=t.selectAll("g.edgeLabel")).each((function(t){var n=o.select(this);n.select(".label").remove();var a=e.edge(t),s=i(n,e.edge(t),0,0).classed("label",!0),c=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),r.has(a,"width")||(a.width=c.width),r.has(a,"height")||(a.height=c.height)})),n=s.exit?s.exit():s.selectAll(null),a.applyTransition(n,e).style("opacity",0).remove(),s}},940:(t,e,n)=>{"use strict";var r=n(1034),i=n(3042),a=n(8355),o=n(4322);function s(t,e){var n=(o.line||o.svg.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}t.exports=function(t,e,n){var c=t.selectAll("g.edgePath").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0),l=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),i=e.node(t.v).elem;return s(n,r.range(n.points.length).map((function(){return e=(t=i).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(c,e);!function(t,e){var n=t.exit();a.applyTransition(n,e).style("opacity",0).remove()}(c,e);var u=void 0!==c.merge?c.merge(l):c;return a.applyTransition(u,e).style("opacity",1),u.each((function(t){var n=o.select(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),a.applyClass(n,r.class,(n.classed("update")?"update ":"")+"edgePath")})),u.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=r.uniqueId("arrowhead");var c=o.select(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");a.applyTransition(c,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),a=t.node(e.w),o=n.points.slice(1,n.points.length-1);return o.unshift(i(r,o[0])),o.push(i(a,o[o.length-1])),s(n,o)}(e,t)})),a.applyStyle(c,n.style)})),u.selectAll("defs *").remove(),u.selectAll("defs").each((function(t){var r=e.edge(t);(0,n[r.arrowhead])(o.select(this),r.arrowheadId,r,"arrowhead")})),u}},607:(t,e,n)=>{"use strict";var r=n(1034),i=n(1322),a=n(8355),o=n(4322);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),l=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);return l.exit().remove(),l.enter().append("g").attr("class","node").style("opacity",0),(l=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var l=c.append("g").attr("class","label"),u=i(l,s),h=n[s.shape],f=r.pick(u.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&l.attr("id",s.labelId),r.has(s,"width")&&(f.width=s.width),r.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,l.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var d=o.select(this);d.select(".label-container").remove();var p=h(d,f,s).classed("label-container",!0);a.applyStyle(p,s.style);var g=p.node().getBBox();s.width=g.width,s.height=g.height})),s=l.exit?l.exit():l.selectAll(null),a.applyTransition(s,e).style("opacity",0).remove(),l}},4322:(t,e,n)=>{var r;if(!r)try{r=n(7543)}catch(t){}r||(r=window.d3),t.exports=r},6478:(t,e,n)=>{var r;try{r=n(681)}catch(t){}r||(r=window.dagre),t.exports=r},6614:(t,e,n)=>{var r;try{r=n(8282)}catch(t){}r||(r=window.graphlib),t.exports=r},8114:(t,e,n)=>{t.exports={node:n(3042),circle:n(6587),ellipse:n(3260),polygon:n(5337),rect:n(8049)}},6587:(t,e,n)=>{var r=n(3260);t.exports=function(t,e,n){return r(t,e,e,n)}},3260:t=>{t.exports=function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,c=Math.sqrt(e*e*s*s+n*n*o*o),l=Math.abs(e*n*o/c);r.x{function e(t,e){return t*e>0}t.exports=function(t,n,r,i){var a,o,s,c,l,u,h,f,d,p,g,y,m;if(!(a=n.y-t.y,s=t.x-n.x,l=n.x*t.y-t.x*n.y,d=a*r.x+s*r.y+l,p=a*i.x+s*i.y+l,0!==d&&0!==p&&e(d,p)||(o=i.y-r.y,c=r.x-i.x,u=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+u,f=o*n.x+c*n.y+u,0!==h&&0!==f&&e(h,f)||0==(g=a*c-o*s))))return y=Math.abs(g/2),{x:(m=s*u-c*l)<0?(m-y)/g:(m+y)/g,y:(m=o*l-a*u)<0?(m-y)/g:(m+y)/g}}},3042:t=>{t.exports=function(t,e){return t.intersect(e)}},5337:(t,e,n)=>{var r=n(6808);t.exports=function(t,e,n){var i=t.x,a=t.y,o=[],s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;e.forEach((function(t){s=Math.min(s,t.x),c=Math.min(c,t.y)}));for(var l=i-t.width/2-s,u=a-t.height/2-c,h=0;h1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a{t.exports=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=0===s?0:l*o/s,r=l):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}}},8284:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert((function(){return a}));break;default:i.html(a)}r.applyStyle(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var o=i.node().getBoundingClientRect();return n.attr("width",o.width).attr("height",o.height),n}},1322:(t,e,n)=>{var r=n(7318),i=n(8284),a=n(8287);t.exports=function(t,e,n){var o=e.label,s=t.append("g");"svg"===e.labelType?a(s,e):"string"!=typeof o||"html"===e.labelType?i(s,e):r(s,e);var c,l=s.node().getBBox();switch(n){case"top":c=-e.height/2;break;case"bottom":c=e.height/2-l.height;break;default:c=-l.height/2}return s.attr("transform","translate("+-l.width/2+","+c+")"),s}},8287:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){var n=t;return n.node().appendChild(e.label),r.applyStyle(n,e.labelStyle),n}},7318:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i{var r;try{r={defaults:n(1747),each:n(6073),isFunction:n(3560),isPlainObject:n(8630),pick:n(9722),has:n(8721),range:n(6026),uniqueId:n(3955)}}catch(t){}r||(r=window._),t.exports=r},6381:(t,e,n)=>{"use strict";var r=n(8355),i=n(4322);t.exports=function(t,e){var n=t.filter((function(){return!i.select(this).classed("update")}));function a(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",a),r.applyTransition(t,e).style("opacity",1).attr("transform",a),r.applyTransition(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}},4577:(t,e,n)=>{"use strict";var r=n(8355),i=n(4322),a=n(1034);t.exports=function(t,e){function n(t){var n=e.edge(t);return a.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},4849:(t,e,n)=>{"use strict";var r=n(8355),i=n(4322);t.exports=function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},5787:(t,e,n)=>{var r=n(1034),i=n(4322),a=n(6478).layout;t.exports=function(){var t=n(607),e=n(5632),i=n(6315),l=n(940),u=n(4849),h=n(4577),f=n(6381),d=n(4418),p=n(9144),g=function(n,g){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(g);var y=c(n,"output"),m=c(y,"clusters"),b=c(y,"edgePaths"),v=i(c(y,"edgeLabels"),g),_=t(c(y,"nodes"),g,d);a(g),u(_,g),h(v,g),l(b,g,p);var x=e(m,g);f(x,g),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(g)};return g.createNodes=function(e){return arguments.length?(t=e,g):t},g.createClusters=function(t){return arguments.length?(e=t,g):e},g.createEdgeLabels=function(t){return arguments.length?(i=t,g):i},g.createEdgePaths=function(t){return arguments.length?(l=t,g):l},g.shapes=function(t){return arguments.length?(d=t,g):d},g.arrows=function(t){return arguments.length?(p=t,g):p},g};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},4418:(t,e,n)=>{"use strict";var r=n(8049),i=n(3260),a=n(6587),o=n(5337);t.exports={rect:function(t,e,n){var i=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return r(n,t)},i},ellipse:function(t,e,n){var r=e.width/2,a=e.height/2,o=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",a);return n.intersect=function(t){return i(n,r,a,t)},o},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return a(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return o(n,a,t)},s}}},8355:(t,e,n)=>{var r=n(1034);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},5689:t=>{t.exports="0.6.4"},681:(t,e,n)=>{t.exports={graphlib:n(574),layout:n(8123),debug:n(7570),util:{time:n(1138).time,notime:n(1138).notime},version:n(8177)}},2188:(t,e,n)=>{"use strict";var r=n(8436),i=n(4079);t.exports={run:function(t){var e="greedy"===t.graph().acyclicer?i(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},i={};return r.forEach(t.nodes(),(function a(o){r.has(i,o)||(i[o]=!0,n[o]=!0,r.forEach(t.outEdges(o),(function(t){r.has(n,t.w)?e.push(t):a(t.w)})),delete n[o])})),e}(t);r.forEach(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,r.uniqueId("rev"))}))},undo:function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}}))}}},1133:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n,r,a,o){var s={width:0,height:0,rank:o,borderType:e},c=a[e][o-1],l=i.addDummyNode(t,"border",s,n);a[e][o]=l,t.setParent(l,r),c&&t.setEdge(c,l,{weight:1})}t.exports=function(t){r.forEach(t.children(),(function e(n){var i=t.children(n),o=t.node(n);if(i.length&&r.forEach(i,e),r.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var s=o.minRank,c=o.maxRank+1;s{"use strict";var r=n(8436);function i(t){r.forEach(t.nodes(),(function(e){a(t.node(e))})),r.forEach(t.edges(),(function(e){a(t.edge(e))}))}function a(t){var e=t.width;t.width=t.height,t.height=e}function o(t){t.y=-t.y}function s(t){var e=t.x;t.x=t.y,t.y=e}t.exports={adjust:function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||i(t)},undo:function(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){r.forEach(t.nodes(),(function(e){o(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,o),r.has(n,"y")&&o(n)}))}(t),"lr"!==e&&"rl"!==e||(function(t){r.forEach(t.nodes(),(function(e){s(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(t),i(t))}}},7822:t=>{function e(){var t={};t._next=t._prev=t,this._sentinel=t}function n(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function r(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=e,e.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return n(e),e},e.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&n(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},e.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,r)),n=n._prev;return"["+t.join(", ")+"]"}},7570:(t,e,n)=>{var r=n(8436),i=n(1138),a=n(574).Graph;t.exports={debugOrdering:function(t){var e=i.buildLayerMatrix(t),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.forEach(t.nodes(),(function(e){n.setNode(e,{label:e}),n.setParent(e,"layer"+t.node(e).rank)})),r.forEach(t.edges(),(function(t){n.setEdge(t.v,t.w,{},t.name)})),r.forEach(e,(function(t,e){var i="layer"+e;n.setNode(i,{rank:"same"}),r.reduce(t,(function(t,e){return n.setEdge(t,e,{style:"invis"}),e}))})),n}}},574:(t,e,n)=>{var r;try{r=n(8282)}catch(t){}r||(r=window.graphlib),t.exports=r},4079:(t,e,n)=>{var r=n(8436),i=n(574).Graph,a=n(7822);t.exports=function(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new i,o=0,s=0;r.forEach(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),r.forEach(t.edges(),(function(t){var r=n.edge(t.v,t.w)||0,i=e(t),a=r+i;n.setEdge(t.v,t.w,a),s=Math.max(s,n.node(t.v).out+=i),o=Math.max(o,n.node(t.w).in+=i)}));var l=r.range(s+o+3).map((function(){return new a})),u=o+1;return r.forEach(n.nodes(),(function(t){c(l,u,n.node(t))})),{graph:n,buckets:l,zeroIdx:u}}(t,e||o),l=function(t,e,n){for(var r,i=[],a=e[e.length-1],o=e[0];t.nodeCount();){for(;r=o.dequeue();)s(t,e,n,r);for(;r=a.dequeue();)s(t,e,n,r);if(t.nodeCount())for(var c=e.length-2;c>0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(l,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},8123:(t,e,n)=>{"use strict";var r=n(8436),i=n(2188),a=n(5995),o=n(8093),s=n(1138).normalizeRanks,c=n(4219),l=n(1138).removeEmptyRanks,u=n(2981),h=n(1133),f=n(3258),d=n(3408),p=n(7873),g=n(1138),y=n(574).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?g.time:g.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new y({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},b,E(n,m),r.pick(n,v))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(E(i,_),x)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,E(i,k),r.pick(i,T)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){u.run(t)})),e(" rank",(function(){o(g.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e};g.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){l(t)})),e(" nestingGraph.cleanup",(function(){u.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){d(t)})),e(" insertSelfEdges",(function(){!function(t){var e=g.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){g.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){f.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){f.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function l(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){l(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&l(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(g.intersectRect(a,n)),i.points.push(g.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var m=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},v=["acyclicer","ranker","rankdir","align"],_=["width","height"],x={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},T=["labelpos"];function E(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},8436:(t,e,n)=>{var r;try{r={cloneDeep:n(361),constant:n(5703),defaults:n(1747),each:n(6073),filter:n(3105),find:n(3311),flatten:n(5564),forEach:n(4486),forIn:n(2620),has:n(8721),isUndefined:n(2353),last:n(928),map:n(5161),mapValues:n(6604),max:n(6162),merge:n(3857),min:n(3632),minBy:n(2762),now:n(7771),pick:n(9722),range:n(6026),reduce:n(4061),sortBy:n(9734),uniqueId:n(3955),values:n(2628),zipObject:n(7287)}}catch(t){}r||(r=window._),t.exports=r},2981:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n,o,s,c,l){var u=t.children(l);if(u.length){var h=i.addBorderNode(t,"_bt"),f=i.addBorderNode(t,"_bb"),d=t.node(l);t.setParent(h,l),d.borderTop=h,t.setParent(f,l),d.borderBottom=f,r.forEach(u,(function(r){a(t,e,n,o,s,c,r);var i=t.node(r),u=i.borderTop?i.borderTop:r,d=i.borderBottom?i.borderBottom:r,p=i.borderTop?o:2*o,g=u!==d?1:s-c[l]+1;t.setEdge(h,u,{weight:p,minlen:g,nestingEdge:!0}),t.setEdge(d,f,{weight:p,minlen:g,nestingEdge:!0})})),t.parent(l)||t.setEdge(e,h,{weight:0,minlen:s+c[l]})}else l!==e&&t.setEdge(e,l,{weight:0,minlen:n})}t.exports={run:function(t){var e=i.addDummyNode(t,"root",{},"_root"),n=function(t){var e={};function n(i,a){var o=t.children(i);o&&o.length&&r.forEach(o,(function(t){n(t,a+1)})),e[i]=a}return r.forEach(t.children(),(function(t){n(t,1)})),e}(t),o=r.max(r.values(n))-1,s=2*o+1;t.graph().nestingRoot=e,r.forEach(t.edges(),(function(e){t.edge(e).minlen*=s}));var c=function(t){return r.reduce(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;r.forEach(t.children(),(function(r){a(t,e,s,c,o,n,r)})),t.graph().nodeRankFactor=s},cleanup:function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,r.forEach(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}}},5995:(t,e,n)=>{"use strict";var r=n(8436),i=n(1138);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,l=t.node(c).rank,u=e.name,h=t.edge(e),f=h.labelRank;if(l!==s+1){for(t.removeEdge(e),a=0,++s;s{var r=n(8436);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},5439:(t,e,n)=>{var r=n(8436);t.exports=function(t,e){return r.map(e,(function(e){var n=t.inEdges(e);if(n.length){var i=r.reduce(n,(function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:i.sum/i.weight,weight:i.weight}}return{v:e}}))}},3128:(t,e,n)=>{var r=n(8436),i=n(574).Graph;t.exports=function(t,e,n){var a=function(t){for(var e;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},6630:(t,e,n)=>{"use strict";var r=n(8436);function i(t,e,n){for(var i=r.zipObject(n,r.map(n,(function(t,e){return e}))),a=r.flatten(r.map(e,(function(e){return r.sortBy(r.map(t.outEdges(e),(function(e){return{pos:i[e.w],weight:t.edge(e).weight}})),"pos")})),!0),o=1;o0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;l+=t.weight*n}))),l}t.exports=function(t,e){for(var n=0,r=1;r{"use strict";var r=n(8436),i=n(2588),a=n(6630),o=n(1026),s=n(3128),c=n(5093),l=n(574).Graph,u=n(1138);function h(t,e,n){return r.map(e,(function(e){return s(t,e,n)}))}function f(t,e){var n=new l;r.forEach(t,(function(t){var i=t.graph().root,a=o(t,i,n,e);r.forEach(a.vs,(function(e,n){t.node(e).order=n})),c(t,n,a.vs)}))}function d(t,e){r.forEach(e,(function(e){r.forEach(e,(function(e,n){t.node(e).order=n}))}))}t.exports=function(t){var e=u.maxRank(t),n=h(t,r.range(1,e+1),"inEdges"),o=h(t,r.range(e-1,-1,-1),"outEdges"),s=i(t);d(t,s);for(var c,l=Number.POSITIVE_INFINITY,p=0,g=0;g<4;++p,++g){f(p%2?n:o,p%4>=2),s=u.buildLayerMatrix(t);var y=a(t,s);y{"use strict";var r=n(8436);t.exports=function(t){var e={},n=r.filter(t.nodes(),(function(e){return!t.children(e).length})),i=r.max(r.map(n,(function(e){return t.node(e).rank}))),a=r.map(r.range(i+1),(function(){return[]})),o=r.sortBy(n,(function(e){return t.node(e).rank}));return r.forEach(o,(function n(i){if(!r.has(e,i)){e[i]=!0;var o=t.node(i);a[o.rank].push(i),r.forEach(t.successors(i),n)}})),a}},9567:(t,e,n)=>{"use strict";var r=n(8436);t.exports=function(t,e){var n={};return r.forEach(t,(function(t,e){var i=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};r.isUndefined(t.barycenter)||(i.barycenter=t.barycenter,i.weight=t.weight)})),r.forEach(e.edges(),(function(t){var e=n[t.v],i=n[t.w];r.isUndefined(e)||r.isUndefined(i)||(i.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){var n,i,a,o;e.merged||(r.isUndefined(e.barycenter)||r.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&(i=e,a=0,o=0,(n=t).weight&&(a+=n.barycenter*n.weight,o+=n.weight),i.weight&&(a+=i.barycenter*i.weight,o+=i.weight),n.vs=i.vs.concat(n.vs),n.barycenter=a/o,n.weight=o,n.i=Math.min(i.i,n.i),i.merged=!0)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},1026:(t,e,n)=>{var r=n(8436),i=n(5439),a=n(9567),o=n(7304);t.exports=function t(e,n,s,c){var l=e.children(n),u=e.node(n),h=u?u.borderLeft:void 0,f=u?u.borderRight:void 0,d={};h&&(l=r.filter(l,(function(t){return t!==h&&t!==f})));var p=i(e,l);r.forEach(p,(function(n){if(e.children(n.v).length){var i=t(e,n.v,s,c);d[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var g=a(p,s);!function(t,e){r.forEach(t,(function(t){t.vs=r.flatten(t.vs.map((function(t){return e[t]?e[t].vs:t})),!0)}))}(g,d);var y=o(g,c);if(h&&(y.vs=r.flatten([h,y.vs,f],!0),e.predecessors(h).length)){var m=e.node(e.predecessors(h)[0]),b=e.node(e.predecessors(f)[0]);r.has(y,"barycenter")||(y.barycenter=0,y.weight=0),y.barycenter=(y.barycenter*y.weight+m.order+b.order)/(y.weight+2),y.weight+=2}return y}},7304:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n,o=i.partition(t,(function(t){return r.has(t,"barycenter")})),s=o.lhs,c=r.sortBy(o.rhs,(function(t){return-t.i})),l=[],u=0,h=0,f=0;s.sort((n=!!e,function(t,e){return t.barycentere.barycenter?1:n?e.i-t.i:t.i-e.i})),f=a(l,c,f),r.forEach(s,(function(t){f+=t.vs.length,l.push(t.vs),u+=t.barycenter*t.weight,h+=t.weight,f=a(l,c,f)}));var d={vs:r.flatten(l,!0)};return h&&(d.barycenter=u/h,d.weight=h),d}},4219:(t,e,n)=>{var r=n(8436);t.exports=function(t){var e=function(t){var e={},n=0;return r.forEach(t.children(),(function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}})),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),l=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||l>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,l=o[c],u=!0;n!==i.w;){if(r=t.node(n),u){for(;(l=o[c])!==s&&t.node(l).maxRank{"use strict";var r=n(8436),i=n(574).Graph,a=n(1138);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,l=r.last(i);return r.forEach(i,(function(e,u){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),f=h?t.node(h).order:s;(h||e===l)&&(r.forEach(i.slice(o,u+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(os)&&c(n,e,l)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var l=t.predecessors(r);l.length&&(a=t.node(l[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function l(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function u(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length){c=r.sortBy(c,(function(t){return s[t]}));for(var u=(c.length-1)/2,h=Math.floor(u),f=Math.ceil(u);h<=f;++h){var d=c[h];o[t]===t&&e{"use strict";var r=n(8436),i=n(1138),a=n(3573).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},300:(t,e,n)=>{"use strict";var r=n(8436),i=n(574).Graph,a=n(6681).slack;function o(t,e){return r.forEach(t.nodes(),(function n(i){r.forEach(e.nodeEdges(i),(function(r){var o=r.v,s=i===o?r.w:o;t.hasNode(s)||a(e,r)||(t.setNode(s,{}),t.setEdge(i,s,{}),n(s))}))})),t.nodeCount()}function s(t,e){return r.minBy(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return a(e,n)}))}function c(t,e,n){r.forEach(t.nodes(),(function(t){e.node(t).rank+=n}))}t.exports=function(t){var e,n,r=new i({directed:!1}),l=t.nodes()[0],u=t.nodeCount();for(r.setNode(l,{});o(r,t){"use strict";var r=n(6681).longestPath,i=n(300),a=n(2472);t.exports=function(t){switch(t.graph().ranker){case"network-simplex":default:!function(t){a(t)}(t);break;case"tight-tree":!function(t){r(t),i(t)}(t);break;case"longest-path":o(t)}};var o=r},2472:(t,e,n)=>{"use strict";var r=n(8436),i=n(300),a=n(6681).slack,o=n(6681).longestPath,s=n(574).alg.preorder,c=n(574).alg.postorder,l=n(1138).simplify;function u(t){t=l(t),o(t);var e,n=i(t);for(d(n),h(n,t);e=g(n);)m(n,t,e,y(n,t,e))}function h(t,e){var n=c(t,t.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(t,e,n){var r=t.node(n).parent;t.edge(n,r).cutvalue=f(t,e,n)}(t,e,n)}))}function f(t,e,n){var i=t.node(n).parent,a=!0,o=e.edge(n,i),s=0;return o||(a=!1,o=e.edge(i,n)),s=o.weight,r.forEach(e.nodeEdges(n),(function(r){var o,c,l=r.v===n,u=l?r.w:r.v;if(u!==i){var h=l===a,f=e.edge(r).weight;if(s+=h?f:-f,o=n,c=u,t.hasEdge(o,c)){var d=t.edge(n,u).cutvalue;s+=h?-d:d}}})),s}function d(t,e){arguments.length<2&&(e=t.nodes()[0]),p(t,{},1,e)}function p(t,e,n,i,a){var o=n,s=t.node(i);return e[i]=!0,r.forEach(t.neighbors(i),(function(a){r.has(e,a)||(n=p(t,e,n,a,i))})),s.low=o,s.lim=n++,a?s.parent=a:delete s.parent,n}function g(t){return r.find(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function y(t,e,n){var i=n.v,o=n.w;e.hasEdge(i,o)||(i=n.w,o=n.v);var s=t.node(i),c=t.node(o),l=s,u=!1;s.lim>c.lim&&(l=c,u=!0);var h=r.filter(e.edges(),(function(e){return u===b(0,t.node(e.v),l)&&u!==b(0,t.node(e.w),l)}));return r.minBy(h,(function(t){return a(e,t)}))}function m(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),d(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function b(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=u,u.initLowLimValues=d,u.initCutValues=h,u.calcCutValue=f,u.leaveEdge=g,u.enterEdge=y,u.exchangeEdges=m},6681:(t,e,n)=>{"use strict";var r=n(8436);t.exports={longestPath:function(t){var e={};r.forEach(t.sources(),(function n(i){var a=t.node(i);if(r.has(e,i))return a.rank;e[i]=!0;var o=r.min(r.map(t.outEdges(i),(function(e){return n(e.w)-t.edge(e).minlen})));return o!==Number.POSITIVE_INFINITY&&null!=o||(o=0),a.rank=o}))},slack:function(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}}},1138:(t,e,n)=>{"use strict";var r=n(8436),i=n(574).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=l*o/s,r=l):(o<0&&(c=-c),n=c,r=c*s/o),{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},8177:t=>{t.exports="0.8.5"},7856:function(t){t.exports=function(){"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,n){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function r(t,i,a){return r=n()?Reflect.construct:function(t,n,r){var i=[null];i.push.apply(i,n);var a=new(Function.bind.apply(t,i));return r&&e(a,r.prototype),a},r.apply(null,arguments)}function i(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1?n-1:0),i=1;i/gm),q=f(/^data-[\-\w.\u00B7-\uFFFF]/),H=f(/^aria-[\-\w]+$/),V=f(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),G=f(/^(?:\w+script|data):/i),X=f(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Z=f(/^html$/i),Q=function(){return"undefined"==typeof window?null:window},K=function(e,n){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var r=null,i="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(i)&&(r=n.currentScript.getAttribute(i));var a="dompurify"+(r?"#"+r:"");try{return e.createPolicy(a,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(t){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};return function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q(),r=function(t){return e(t)};if(r.version="2.4.0",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var a=n.document,o=n.document,s=n.DocumentFragment,c=n.HTMLTemplateElement,l=n.Node,u=n.Element,f=n.NodeFilter,d=n.NamedNodeMap,p=void 0===d?n.NamedNodeMap||n.MozNamedAttrMap:d,g=n.HTMLFormElement,y=n.DOMParser,m=n.trustedTypes,A=u.prototype,J=O(A,"cloneNode"),tt=O(A,"nextSibling"),et=O(A,"childNodes"),nt=O(A,"parentNode");if("function"==typeof c){var rt=o.createElement("template");rt.content&&rt.content.ownerDocument&&(o=rt.content.ownerDocument)}var it=K(m,a),at=it?it.createHTML(""):"",ot=o,st=ot.implementation,ct=ot.createNodeIterator,lt=ot.createDocumentFragment,ut=ot.getElementsByTagName,ht=a.importNode,ft={};try{ft=N(o).documentMode?o.documentMode:{}}catch(t){}var dt={};r.isSupported="function"==typeof nt&&st&&void 0!==st.createHTMLDocument&&9!==ft;var pt,gt,yt=$,mt=W,bt=q,vt=H,_t=G,xt=X,kt=V,wt=null,Tt=M({},[].concat(i(D),i(B),i(L),i(F),i(P))),Et=null,Ct=M({},[].concat(i(j),i(z),i(Y),i(U))),St=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),At=null,Mt=null,Nt=!0,Ot=!0,Dt=!1,Bt=!1,Lt=!1,It=!1,Ft=!1,Rt=!1,Pt=!1,jt=!1,zt=!0,Yt=!1,Ut="user-content-",$t=!0,Wt=!1,qt={},Ht=null,Vt=M({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Gt=null,Xt=M({},["audio","video","img","source","image","track"]),Zt=null,Qt=M({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Kt="http://www.w3.org/1998/Math/MathML",Jt="http://www.w3.org/2000/svg",te="http://www.w3.org/1999/xhtml",ee=te,ne=!1,re=["application/xhtml+xml","text/html"],ie="text/html",ae=null,oe=o.createElement("form"),se=function(t){return t instanceof RegExp||t instanceof Function},ce=function(e){ae&&ae===e||(e&&"object"===t(e)||(e={}),e=N(e),pt=pt=-1===re.indexOf(e.PARSER_MEDIA_TYPE)?ie:e.PARSER_MEDIA_TYPE,gt="application/xhtml+xml"===pt?function(t){return t}:x,wt="ALLOWED_TAGS"in e?M({},e.ALLOWED_TAGS,gt):Tt,Et="ALLOWED_ATTR"in e?M({},e.ALLOWED_ATTR,gt):Ct,Zt="ADD_URI_SAFE_ATTR"in e?M(N(Qt),e.ADD_URI_SAFE_ATTR,gt):Qt,Gt="ADD_DATA_URI_TAGS"in e?M(N(Xt),e.ADD_DATA_URI_TAGS,gt):Xt,Ht="FORBID_CONTENTS"in e?M({},e.FORBID_CONTENTS,gt):Vt,At="FORBID_TAGS"in e?M({},e.FORBID_TAGS,gt):{},Mt="FORBID_ATTR"in e?M({},e.FORBID_ATTR,gt):{},qt="USE_PROFILES"in e&&e.USE_PROFILES,Nt=!1!==e.ALLOW_ARIA_ATTR,Ot=!1!==e.ALLOW_DATA_ATTR,Dt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Bt=e.SAFE_FOR_TEMPLATES||!1,Lt=e.WHOLE_DOCUMENT||!1,Rt=e.RETURN_DOM||!1,Pt=e.RETURN_DOM_FRAGMENT||!1,jt=e.RETURN_TRUSTED_TYPE||!1,Ft=e.FORCE_BODY||!1,zt=!1!==e.SANITIZE_DOM,Yt=e.SANITIZE_NAMED_PROPS||!1,$t=!1!==e.KEEP_CONTENT,Wt=e.IN_PLACE||!1,kt=e.ALLOWED_URI_REGEXP||kt,ee=e.NAMESPACE||te,e.CUSTOM_ELEMENT_HANDLING&&se(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(St.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&se(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(St.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(St.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Bt&&(Ot=!1),Pt&&(Rt=!0),qt&&(wt=M({},i(P)),Et=[],!0===qt.html&&(M(wt,D),M(Et,j)),!0===qt.svg&&(M(wt,B),M(Et,z),M(Et,U)),!0===qt.svgFilters&&(M(wt,L),M(Et,z),M(Et,U)),!0===qt.mathMl&&(M(wt,F),M(Et,Y),M(Et,U))),e.ADD_TAGS&&(wt===Tt&&(wt=N(wt)),M(wt,e.ADD_TAGS,gt)),e.ADD_ATTR&&(Et===Ct&&(Et=N(Et)),M(Et,e.ADD_ATTR,gt)),e.ADD_URI_SAFE_ATTR&&M(Zt,e.ADD_URI_SAFE_ATTR,gt),e.FORBID_CONTENTS&&(Ht===Vt&&(Ht=N(Ht)),M(Ht,e.FORBID_CONTENTS,gt)),$t&&(wt["#text"]=!0),Lt&&M(wt,["html","head","body"]),wt.table&&(M(wt,["tbody"]),delete At.tbody),h&&h(e),ae=e)},le=M({},["mi","mo","mn","ms","mtext"]),ue=M({},["foreignobject","desc","title","annotation-xml"]),he=M({},["title","style","font","a","script"]),fe=M({},B);M(fe,L),M(fe,I);var de=M({},F);M(de,R);var pe=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:te,tagName:"template"});var n=x(t.tagName),r=x(e.tagName);return t.namespaceURI===Jt?e.namespaceURI===te?"svg"===n:e.namespaceURI===Kt?"svg"===n&&("annotation-xml"===r||le[r]):Boolean(fe[n]):t.namespaceURI===Kt?e.namespaceURI===te?"math"===n:e.namespaceURI===Jt?"math"===n&&ue[r]:Boolean(de[n]):t.namespaceURI===te&&!(e.namespaceURI===Jt&&!ue[r])&&!(e.namespaceURI===Kt&&!le[r])&&!de[n]&&(he[n]||!fe[n])},ge=function(t){_(r.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTML=at}catch(e){t.remove()}}},ye=function(t,e){try{_(r.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){_(r.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Et[t])if(Rt||Pt)try{ge(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}},me=function(t){var e,n;if(Ft)t=""+t;else{var r=k(t,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===pt&&(t=''+t+"");var i=it?it.createHTML(t):t;if(ee===te)try{e=(new y).parseFromString(i,pt)}catch(t){}if(!e||!e.documentElement){e=st.createDocument(ee,"template",null);try{e.documentElement.innerHTML=ne?"":i}catch(t){}}var a=e.body||e.documentElement;return t&&n&&a.insertBefore(o.createTextNode(n),a.childNodes[0]||null),ee===te?ut.call(e,Lt?"html":"body")[0]:Lt?e.documentElement:a},be=function(t){return ct.call(t.ownerDocument||t,t,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT,null,!1)},ve=function(t){return t instanceof g&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof p)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore)},_e=function(e){return"object"===t(l)?e instanceof l:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},xe=function(t,e,n){dt[t]&&b(dt[t],(function(t){t.call(r,e,n,ae)}))},ke=function(t){var e;if(xe("beforeSanitizeElements",t,null),ve(t))return ge(t),!0;if(C(/[\u0080-\uFFFF]/,t.nodeName))return ge(t),!0;var n=gt(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:n,allowedTags:wt}),t.hasChildNodes()&&!_e(t.firstElementChild)&&(!_e(t.content)||!_e(t.content.firstElementChild))&&C(/<[/\w]/g,t.innerHTML)&&C(/<[/\w]/g,t.textContent))return ge(t),!0;if("select"===n&&C(/