mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-18 09:35:20 +02:00
1 line
1.4 MiB
1 line
1.4 MiB
module.exports = `LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgbWVybWFpZC5taW4uanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4oKCk9Pnt2YXIgdD17NTA1MToodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsNl0sbj1bMSw3XSxyPVsxLDhdLGk9WzEsOV0sYT1bMSwxMl0sbz1bMSwxMV0scz1bMSwxNSwyNF0sYz1bMSwxOV0sdT1bMSwzMV0sbD1bMSwzNF0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNV0scD1bMSwzNl0seT1bMSwzN10sZz1bMSwzOF0sbT1bMSw0MV0sdj1bMSw0Ml0sYj1bMSw0M10sXz1bMSw0NF0seD1bMTUsMjRdLHc9WzEsNTZdLGs9WzEsNTddLFQ9WzEsNThdLEU9WzEsNTldLEM9WzEsNjBdLFM9WzEsNjFdLEE9WzE1LDI0LDMxLDM4LDM5LDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyXSxNPVsxNSwyNCwyOSwzMSwzOCwzOSw0Myw0Nyw1MCw1MSw1Miw1Myw1NCw1NSw2MCw2Miw3Nyw3OCw3OSw4MF0sTj1bNyw4LDksMTAsMTUsMTgsMjIsMjRdLEQ9WzQ3LDc3LDc4LDc5LDgwXSxPPVs0Nyw1NCw1NSw3Nyw3OCw3OSw4MF0sQj1bNDcsNTAsNTEsNTIsNTMsNzcsNzgsNzksODBdLEw9WzE1LDI0LDMxXSxJPVsxLDkzXSxSPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aXZlOjYsZGlyZWN0aW9uX3RiOjcsZGlyZWN0aW9uX2J0OjgsZGlyZWN0aW9uX3JsOjksZGlyZWN0aW9uX2xyOjEwLGdyYXBoQ29uZmlnOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCxORVdMSU5FOjE1LCI6IjoxNixhcmdEaXJlY3RpdmU6MTcsb3Blbl9kaXJlY3RpdmU6MTgsdHlwZV9kaXJlY3RpdmU6MTksYXJnX2RpcmVjdGl2ZToyMCxjbG9zZV9kaXJlY3RpdmU6MjEsQ0xBU1NfRElBR1JBTToyMixzdGF0ZW1lbnRzOjIzLEVPRjoyNCxzdGF0ZW1lbnQ6MjUsY2xhc3NOYW1lOjI2LGFscGhhTnVtVG9rZW46MjcsY2xhc3NMaXRlcmFsTmFtZToyOCxHRU5FUklDVFlQRToyOSxyZWxhdGlvblN0YXRlbWVudDozMCxMQUJFTDozMSxjbGFzc1N0YXRlbWVudDozMixtZXRob2RTdGF0ZW1lbnQ6MzMsYW5ub3RhdGlvblN0YXRlbWVudDozNCxjbGlja1N0YXRlbWVudDozNSxjc3NDbGFzc1N0YXRlbWVudDozNixDTEFTUzozNyxTVFlMRV9TRVBBUkFUT1I6MzgsU1RSVUNUX1NUQVJUOjM5LG1lbWJlcnM6NDAsU1RSVUNUX1NUT1A6NDEsQU5OT1RBVElPTl9TVEFSVDo0MixBTk5PVEFUSU9OX0VORDo0MyxNRU1CRVI6NDQsU0VQQVJBVE9SOjQ1LHJlbGF0aW9uOjQ2LFNUUjo0NyxyZWxhdGlvblR5cGU6NDgsbGluZVR5cGU6NDksQUdHUkVHQVRJT046NTAsRVhURU5TSU9OOjUxLENPTVBPU0lUSU9OOjUyLERFUEVOREVOQ1k6NTMsTElORTo1NCxET1RURURfTElORTo1NSxDQUxMQkFDSzo1NixMSU5LOjU3LExJTktfVEFSR0VUOjU4LENMSUNLOjU5LENBTExCQUNLX05BTUU6NjAsQ0FMTEJBQ0tfQVJHUzo2MSxIUkVGOjYyLENTU0NMQVNTOjYzLGNvbW1lbnRUb2tlbjo2NCx0ZXh0VG9rZW46NjUsZ3JhcGhDb2RlVG9rZW5zOjY2LHRleHROb1RhZ3NUb2tlbjo2NyxUQUdTVEFSVDo2OCxUQUdFTkQ6NjksIj09Ijo3MCwiLS0iOjcxLFBDVDo3MixERUZBVUxUOjczLFNQQUNFOjc0LE1JTlVTOjc1LGtleXdvcmRzOjc2LFVOSUNPREVfVEVYVDo3NyxOVU06NzgsQUxQSEE6NzksQlFVT1RFX1NUUjo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiZGlyZWN0aW9uX3RiIiw4OiJkaXJlY3Rpb25fYnQiLDk6ImRpcmVjdGlvbl9ybCIsMTA6ImRpcmVjdGlvbl9sciIsMTU6Ik5FV0xJTkUiLDE2OiI6IiwxODoib3Blbl9kaXJlY3RpdmUiLDE5OiJ0eXBlX2RpcmVjdGl2ZSIsMjA6ImFyZ19kaXJlY3RpdmUiLDIxOiJjbG9zZV9kaXJlY3RpdmUiLDIyOiJDTEFTU19ESUFHUkFNIiwyNDoiRU9GIiwyOToiR0VORVJJQ1RZUEUiLDMxOiJMQUJFTCIsMzc6IkNMQVNTIiwzODoiU1RZTEVfU0VQQVJBVE9SIiwzOToiU1RSVUNUX1NUQVJUIiw0MToiU1RSVUNUX1NUT1AiLDQyOiJBTk5PVEFUSU9OX1NUQVJUIiw0MzoiQU5OT1RBVElPTl9FTkQiLDQ0OiJNRU1CRVIiLDQ1OiJTRVBBUkFUT1IiLDQ3OiJTVFIiLDUwOiJBR0dSRUdBVElPTiIsNTE6IkVYVEVOU0lPTiIsNTI6IkNPTVBPU0lUSU9OIiw1MzoiREVQRU5ERU5DWSIsNTQ6IkxJTkUiLDU1OiJET1RURURfTElORSIsNTY6IkNBTExCQUNLIiw1NzoiTElOSyIsNTg6IkxJTktfVEFSR0VUIiw1OToiQ0xJQ0siLDYwOiJDQUxMQkFDS19OQU1FIiw2MToiQ0FMTEJBQ0tfQVJHUyIsNjI6IkhSRUYiLDYzOiJDU1NDTEFTUyIsNjY6ImdyYXBoQ29kZVRva2VucyIsNjg6IlRBR1NUQVJUIiw2OToiVEFHRU5EIiw3MDoiPT0iLDcxOiItLSIsNzI6IlBDVCIsNzM6IkRFRkFVTFQiLDc0OiJTUEFDRSIsNzU6Ik1JTlVTIiw3Njoia2V5d29yZHMiLDc3OiJVTklDT0RFX1RFWFQiLDc4OiJOVU0iLDc5OiJBTFBIQSIsODA6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzMsMl0sWzUsMV0sWzUsMV0sWzUsMV0sWzUsMV0sWzQsMV0sWzYsNF0sWzYsNl0sWzEyLDFdLFsxMywxXSxbMTcsMV0sWzE0LDFdLFsxMSw0XSxbMjMsMV0sWzIzLDJdLFsyMywzXSxbMjYsMV0sWzI2LDFdLFsyNiwyXSxbMjYsMl0sWzI2LDJdLFsyNSwxXSxbMjUsMl0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFszMiwyXSxbMzIsNF0sWzMyLDVdLFszMiw3XSxbMzQsNF0sWzQwLDFdLFs0MCwyXSxbMzMsMV0sWzMzLDJdLFszMywxXSxbMzMsMV0sWzMwLDNdLFszMCw0XSxbMzAsNF0sWzMwLDVdLFs0NiwzXSxbNDYsMl0sWzQ2LDJdLFs0NiwxXSxbNDgsMV0sWzQ4LDFdLFs0OCwxXSxbNDgsMV0sWzQ5LDFdLFs0OSwxXSxbMzUsM10sWzM1LDRdLFszNSwzXSxbMzUsNF0sWzM1LDRdLFszNSw1XSxbMzUsM10sWzM1LDRdLFszNSw0XSxbMzUsNV0sWzM1LDNdLFszNSw0XSxbMzUsNF0sWzM1LDVdLFszNiwzXSxbNjQsMV0sWzY0LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzI4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDU6ci5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA2OnIuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNzpyLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDExOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxMzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTQ6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiY2xhc3MiKTticmVhaztjYXNlIDE5OmNhc2UgMjA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1hW3MtMV0rIn4iK2Fbc107YnJlYWs7Y2FzZSAyNDpyLmFkZFJlbGF0aW9uKGFbc10pO2JyZWFrO2Nhc2UgMjU6YVtzLTFdLnRpdGxlPXIuY2xlYW51cExhYmVsKGFbc10pLHIuYWRkUmVsYXRpb24oYVtzLTFdKTticmVhaztjYXNlIDMzOnIuYWRkQ2xhc3MoYVtzXSk7YnJlYWs7Y2FzZSAzNDpyLmFkZENsYXNzKGFbcy0yXSksci5zZXRDc3NDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAzNTpyLmFkZENsYXNzKGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzY6ci5hZGRDbGFzcyhhW3MtNV0pLHIuc2V0Q3NzQ2xhc3MoYVtzLTVdLGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy01XSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzc6ci5hZGRBbm5vdGF0aW9uKGFbc10sYVtzLTJdKTticmVhaztjYXNlIDM4OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAzOTphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDQwOmJyZWFrO2Nhc2UgNDE6ci5hZGRNZW1iZXIoYVtzLTFdLHIuY2xlYW51cExhYmVsKGFbc10pKTticmVhaztjYXNlIDQyOmNhc2UgNDM6YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9e2lkMTphW3MtMl0saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0xXSxyZWxhdGlvblRpdGxlMTphW3MtMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDQ2OnRoaXMuJD17aWQxOmFbcy0zXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9e2lkMTphW3MtNF0saWQyOmFbc10scmVsYXRpb246YVtzLTJdLHJlbGF0aW9uVGl0bGUxOmFbcy0zXSxyZWxhdGlvblRpdGxlMjphW3MtMV19O2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXt0eXBlMTphW3MtMl0sdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXt0eXBlMTphW3MtMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNTI6dGhpcy4kPXIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXIucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDU0OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDU1OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPXIubGluZVR5cGUuTElORTticmVhaztjYXNlIDU3OnRoaXMuJD1yLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNTg6Y2FzZSA2NDp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA1OTpjYXNlIDY1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA2MDpjYXNlIDY4OnRoaXMuJD1hW3MtMl0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYxOnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA2MjpjYXNlIDcwOnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA2MzpjYXNlIDcxOnRoaXMuJD1hW3MtNF0sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSksci5zZXRUb29sdGlwKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDY3OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDcyOnIuc2V0Q3NzQ2xhc3MoYVtzLTFdLGFbc10pfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzplLDg6biw5OnIsMTA6aSwxMTo1LDEyOjEwLDE4OmEsMjI6b30sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHszOjEzLDQ6Miw1OjMsNjo0LDc6ZSw4Om4sOTpyLDEwOmksMTE6NSwxMjoxMCwxODphLDIyOm99LHsxOlsyLDhdfSx0KHMsWzIsNF0pLHQocyxbMiw1XSksdChzLFsyLDZdKSx0KHMsWzIsN10pLHsxMzoxNCwxOTpbMSwxNV19LHsxNTpbMSwxNl19LHsxOTpbMiwxMV19LHsxOlsyLDNdfSx7MTQ6MTcsMTY6WzEsMThdLDIxOmN9LHQoWzE2LDIxXSxbMiwxMl0pLHs1OjI5LDY6MjgsNzplLDg6biw5OnIsMTA6aSwxMjoxMCwxODphLDIzOjIwLDI1OjIxLDI2OjMwLDI3OjM5LDI4OjQwLDMwOjIyLDMyOjIzLDMzOjI0LDM0OjI1LDM1OjI2LDM2OjI3LDM3OnUsNDI6bCw0NDpoLDQ1OmYsNTY6ZCw1NzpwLDU5OnksNjM6Zyw3NzptLDc4OnYsNzk6Yiw4MDpffSx7MTU6WzEsNDVdfSx7MTc6NDYsMjA6WzEsNDddfSx7MTU6WzIsMTRdfSx7MjQ6WzEsNDhdfSx7MTU6WzEsNDldLDI0OlsyLDE2XX0sdCh4LFsyLDI0XSx7MzE6WzEsNTBdfSksdCh4LFsyLDI2XSksdCh4LFsyLDI3XSksdCh4LFsyLDI4XSksdCh4LFsyLDI5XSksdCh4LFsyLDMwXSksdCh4LFsyLDMxXSksdCh4LFsyLDMyXSksdCh4LFsyLDQwXSx7NDY6NTEsNDg6NTQsNDk6NTUsMzE6WzEsNTNdLDQ3OlsxLDUyXSw1MDp3LDUxOmssNTI6VCw1MzpFLDU0OkMsNTU6U30pLHsyNjo2MiwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx0KHgsWzIsNDJdKSx0KHgsWzIsNDNdKSx7Mjc6NjMsNzc6bSw3ODp2LDc5OmJ9LHsyNjo2NCwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx7MjY6NjUsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sezI2OjY2LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOl99LHs0NzpbMSw2N119LHQoQSxbMiwxOV0sezI3OjM5LDI4OjQwLDI2OjY4LDI5OlsxLDY5XSw3NzptLDc4OnYsNzk6Yiw4MDpffSksdChBLFsyLDIwXSx7Mjk6WzEsNzBdfSksdChNLFsyLDg2XSksdChNLFsyLDg3XSksdChNLFsyLDg4XSksdChbMTUsMjQsMjksMzEsMzgsMzksNDcsNTAsNTEsNTIsNTMsNTQsNTUsNjAsNjJdLFsyLDg5XSksdChOLFsyLDldKSx7MTQ6NzEsMjE6Y30sezIxOlsyLDEzXX0sezE6WzIsMTVdfSx7NToyOSw2OjI4LDc6ZSw4Om4sOTpyLDEwOmksMTI6MTAsMTg6YSwyMzo3MiwyNDpbMiwxN10sMjU6MjEsMjY6MzAsMjc6MzksMjg6NDAsMzA6MjIsMzI6MjMsMzM6MjQsMzQ6MjUsMzU6MjYsMzY6MjcsMzc6dSw0MjpsLDQ0OmgsNDU6Ziw1NjpkLDU3OnAsNTk6eSw2MzpnLDc3Om0sNzg6diw3OTpiLDgwOl99LHQoeCxbMiwyNV0pLHsyNjo3MywyNzozOSwyODo0MCw0NzpbMSw3NF0sNzc6bSw3ODp2LDc5OmIsODA6X30sezQ2Ojc1LDQ4OjU0LDQ5OjU1LDUwOncsNTE6ayw1MjpULDUzOkUsNTQ6Qyw1NTpTfSx0KHgsWzIsNDFdKSx7NDk6NzYsNTQ6Qyw1NTpTfSx0KEQsWzIsNTFdLHs0ODo3Nyw1MDp3LDUxOmssNTI6VCw1MzpFfSksdChPLFsyLDUyXSksdChPLFsyLDUzXSksdChPLFsyLDU0XSksdChPLFsyLDU1XSksdChCLFsyLDU2XSksdChCLFsyLDU3XSksdCh4LFsyLDMzXSx7Mzg6WzEsNzhdLDM5OlsxLDc5XX0pLHs0MzpbMSw4MF19LHs0NzpbMSw4MV19LHs0NzpbMSw4Ml19LHs2MDpbMSw4M10sNjI6WzEsODRdfSx7Mjc6ODUsNzc6bSw3ODp2LDc5OmJ9LHQoQSxbMiwyMV0pLHQoQSxbMiwyMl0pLHQoQSxbMiwyM10pLHsxNTpbMSw4Nl19LHsyNDpbMiwxOF19LHQoTCxbMiw0NF0pLHsyNjo4NywyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDpffSx7MjY6ODgsMjc6MzksMjg6NDAsNDc6WzEsODldLDc3Om0sNzg6diw3OTpiLDgwOl99LHQoRCxbMiw1MF0sezQ4OjkwLDUwOncsNTE6ayw1MjpULDUzOkV9KSx0KEQsWzIsNDldKSx7Mjc6OTEsNzc6bSw3ODp2LDc5OmJ9LHs0MDo5Miw0NDpJfSx7MjY6OTQsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6X30sdCh4LFsyLDU4XSx7NDc6WzEsOTVdfSksdCh4LFsyLDYwXSx7NDc6WzEsOTddLDU4OlsxLDk2XX0pLHQoeCxbMiw2NF0sezQ3OlsxLDk4XSw2MTpbMSw5OV19KSx0KHgsWzIsNjhdLHs0NzpbMSwxMDFdLDU4OlsxLDEwMF19KSx0KHgsWzIsNzJdKSx0KE4sWzIsMTBdKSx0KEwsWzIsNDZdKSx0KEwsWzIsNDVdKSx7MjY6MTAyLDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOl99LHQoRCxbMiw0OF0pLHQoeCxbMiwzNF0sezM5OlsxLDEwM119KSx7NDE6WzEsMTA0XX0sezQwOjEwNSw0MTpbMiwzOF0sNDQ6SX0sdCh4LFsyLDM3XSksdCh4LFsyLDU5XSksdCh4LFsyLDYxXSksdCh4LFsyLDYyXSx7NTg6WzEsMTA2XX0pLHQoeCxbMiw2NV0pLHQoeCxbMiw2Nl0sezQ3OlsxLDEwN119KSx0KHgsWzIsNjldKSx0KHgsWzIsNzBdLHs1ODpbMSwxMDhdfSksdChMLFsyLDQ3XSksezQwOjEwOSw0NDpJfSx0KHgsWzIsMzVdKSx7NDE6WzIsMzldfSx0KHgsWzIsNjNdKSx0KHgsWzIsNjddKSx0KHgsWzIsNzFdKSx7NDE6WzEsMTEwXX0sdCh4LFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNTpbMiw4XSwxMjpbMiwxMV0sMTM6WzIsM10sMTk6WzIsMTRdLDQ3OlsyLDEzXSw0ODpbMiwxNV0sNzI6WzIsMThdLDEwNTpbMiwzOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxGPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDE4O2Nhc2UgMTpyZXR1cm4gNztjYXNlIDI6cmV0dXJuIDg7Y2FzZSAzOnJldHVybiA5O2Nhc2UgNDpyZXR1cm4gMTA7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDE5O2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNjtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjE7Y2FzZSA4OnJldHVybiAyMDtjYXNlIDk6Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxNTtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMjI7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigic3RydWN0IiksMzk7Y2FzZSAxNjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAxNzpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTtjYXNlIDE5OmJyZWFrO2Nhc2UgMjA6cmV0dXJuIk1FTUJFUiI7Y2FzZSAyMTpyZXR1cm4gMzc7Y2FzZSAyMjpyZXR1cm4gNjM7Y2FzZSAyMzpyZXR1cm4gNTY7Y2FzZSAyNDpyZXR1cm4gNTc7Y2FzZSAyNTpyZXR1cm4gNTk7Y2FzZSAyNjpyZXR1cm4gNDI7Y2FzZSAyNzpyZXR1cm4gNDM7Y2FzZSAyODp0aGlzLmJlZ2luKCJnZW5lcmljIik7YnJlYWs7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgMzE6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAzMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMzpyZXR1cm4iU1RSIjtjYXNlIDM0OnRoaXMuYmVnaW4oImJxc3RyaW5nIik7YnJlYWs7Y2FzZSAzNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNjpyZXR1cm4iQlFVT1RFX1NUUiI7Y2FzZSAzNzp0aGlzLmJlZ2luKCJocmVmIik7YnJlYWs7Y2FzZSAzODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gNjI7Y2FzZSA0MDp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSA0MTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0Mjp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgNDM6cmV0dXJuIDYwO2Nhc2UgNDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDU6cmV0dXJuIDYxO2Nhc2UgNDY6Y2FzZSA0NzpjYXNlIDQ4OmNhc2UgNDk6cmV0dXJuIDU4O2Nhc2UgNTA6Y2FzZSA1MTpyZXR1cm4gNTE7Y2FzZSA1MjpjYXNlIDUzOnJldHVybiA1MztjYXNlIDU0OnJldHVybiA1MjtjYXNlIDU1OnJldHVybiA1MDtjYXNlIDU2OnJldHVybiA1NDtjYXNlIDU3OnJldHVybiA1NTtjYXNlIDU4OnJldHVybiAzMTtjYXNlIDU5OnJldHVybiAzODtjYXNlIDYwOnJldHVybiA3NTtjYXNlIDYxOnJldHVybiJET1QiO2Nhc2UgNjI6cmV0dXJuIlBMVVMiO2Nhc2UgNjM6cmV0dXJuIDcyO2Nhc2UgNjQ6Y2FzZSA2NTpyZXR1cm4iRVFVQUxTIjtjYXNlIDY2OnJldHVybiA3OTtjYXNlIDY3OnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA2ODpyZXR1cm4gNzg7Y2FzZSA2OTpyZXR1cm4gNzc7Y2FzZSA3MDpyZXR1cm4gNzQ7Y2FzZSA3MTpyZXR1cm4gMjR9fSxydWxlczpbL14oPzolJVx7KS8sL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvLC9eKD86OikvLC9eKD86XH0lJSkvLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpjbGFzc0RpYWdyYW0tdjJcYikvLC9eKD86Y2xhc3NEaWFncmFtXGIpLywvXig/Olt7XSkvLC9eKD86JCkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/Oltcbl0pLywvXig/Oltee31cbl0qKS8sL14oPzpjbGFzc1xiKS8sL14oPzpjc3NDbGFzc1xiKS8sL14oPzpjYWxsYmFja1xiKS8sL14oPzpsaW5rXGIpLywvXig/OmNsaWNrXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86W35dKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OltgXSkvLC9eKD86W2BdKS8sL14oPzpbXmBdKykvLC9eKD86aHJlZltcc10rWyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7YXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzcsOF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzVdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzQ0LDQ1XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOls0MSw0Miw0M10saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMzgsMzldLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMTYsMTcsMTgsMTksMjBdLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI5LDMwXSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbMzUsMzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzIsMzNdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEyLDEzLDE0LDE1LDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMxLDM0LDM3LDQwLDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gUCgpe3RoaXMueXk9e319cmV0dXJuIFIubGV4ZXI9RixQLnByb3RvdHlwZT1SLFIuUGFyc2VyPVAsbmV3IFB9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big4MjE4KS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDQ3MDE6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDIzLDQwXSxpPVsxLDE3XSxhPVsxLDIwXSxvPVsxLDI1XSxzPVsxLDI2XSxjPVsxLDI3XSx1PVsxLDI4XSxsPVsxLDM3XSxoPVsyMywzNywzOF0sZj1bNCw2LDksMTEsMjMsNDBdLGQ9WzMzLDM0LDM1LDM2XSxwPVsyMiwyOV0seT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsRVJfRElBR1JBTTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsZW50aXR5TmFtZToxNyxyZWxTcGVjOjE4LHJvbGU6MTksQkxPQ0tfU1RBUlQ6MjAsYXR0cmlidXRlczoyMSxCTE9DS19TVE9QOjIyLEFMUEhBTlVNOjIzLGF0dHJpYnV0ZToyNCxhdHRyaWJ1dGVUeXBlOjI1LGF0dHJpYnV0ZU5hbWU6MjYsYXR0cmlidXRlS2V5VHlwZToyNyxDT01NRU5UOjI4LEFUVFJJQlVURV9XT1JEOjI5LEFUVFJJQlVURV9LRVk6MzAsY2FyZGluYWxpdHk6MzEscmVsVHlwZTozMixaRVJPX09SX09ORTozMyxaRVJPX09SX01PUkU6MzQsT05FX09SX01PUkU6MzUsT05MWV9PTkU6MzYsTk9OX0lERU5USUZZSU5HOjM3LElERU5USUZZSU5HOjM4LFdPUkQ6Mzksb3Blbl9kaXJlY3RpdmU6NDAsdHlwZV9kaXJlY3RpdmU6NDEsYXJnX2RpcmVjdGl2ZTo0MixjbG9zZV9kaXJlY3RpdmU6NDMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsOToiU1BBQ0UiLDExOiJORVdMSU5FIiwxNToiOiIsMjA6IkJMT0NLX1NUQVJUIiwyMjoiQkxPQ0tfU1RPUCIsMjM6IkFMUEhBTlVNIiwyODoiQ09NTUVOVCIsMjk6IkFUVFJJQlVURV9XT1JEIiwzMDoiQVRUUklCVVRFX0tFWSIsMzM6IlpFUk9fT1JfT05FIiwzNDoiWkVST19PUl9NT1JFIiwzNToiT05FX09SX01PUkUiLDM2OiJPTkxZX09ORSIsMzc6Ik5PTl9JREVOVElGWUlORyIsMzg6IklERU5USUZZSU5HIiwzOToiV09SRCIsNDA6Im9wZW5fZGlyZWN0aXZlIiw0MToidHlwZV9kaXJlY3RpdmUiLDQyOiJhcmdfZGlyZWN0aXZlIiw0MzoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsNV0sWzEwLDRdLFsxMCwzXSxbMTAsMV0sWzE3LDFdLFsyMSwxXSxbMjEsMl0sWzI0LDJdLFsyNCwzXSxbMjQsM10sWzI0LDRdLFsyNSwxXSxbMjYsMV0sWzI3LDFdLFsxOCwzXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzMyLDFdLFszMiwxXSxbMTksMV0sWzE5LDFdLFsxMiwxXSxbMTMsMV0sWzE2LDFdLFsxNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6YnJlYWs7Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTI6ci5hZGRFbnRpdHkoYVtzLTRdKSxyLmFkZEVudGl0eShhW3MtMl0pLHIuYWRkUmVsYXRpb25zaGlwKGFbcy00XSxhW3NdLGFbcy0yXSxhW3MtM10pO2JyZWFrO2Nhc2UgMTM6ci5hZGRFbnRpdHkoYVtzLTNdKSxyLmFkZEF0dHJpYnV0ZXMoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSAxNDpyLmFkZEVudGl0eShhW3MtMl0pO2JyZWFrO2Nhc2UgMTU6ci5hZGRFbnRpdHkoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE3OnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAxODphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE5OnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMV0sYXR0cmlidXRlTmFtZTphW3NdfTticmVhaztjYXNlIDIwOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMl0sYXR0cmlidXRlTmFtZTphW3MtMV0sYXR0cmlidXRlS2V5VHlwZTphW3NdfTticmVhaztjYXNlIDIxOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtMl0sYXR0cmlidXRlTmFtZTphW3MtMV0sYXR0cmlidXRlQ29tbWVudDphW3NdfTticmVhaztjYXNlIDIyOnRoaXMuJD17YXR0cmlidXRlVHlwZTphW3MtM10sYXR0cmlidXRlTmFtZTphW3MtMl0sYXR0cmlidXRlS2V5VHlwZTphW3MtMV0sYXR0cmlidXRlQ29tbWVudDphW3NdfTticmVhaztjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDI2OnRoaXMuJD17Y2FyZEE6YVtzXSxyZWxUeXBlOmFbcy0xXSxjYXJkQjphW3MtMl19O2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTticmVhaztjYXNlIDMwOnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9YVtzXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAzNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzY6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDM4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImVyIil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsNDA6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDQwOm59LHsxMzo4LDQxOlsxLDldfSx7NDE6WzIsMzVdfSx7NjpbMSwxMF0sNzoxNSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OjE2LDIzOmksNDA6bn0sezE6WzIsMl19LHsxNDoxOCwxNTpbMSwxOV0sNDM6YX0sdChbMTUsNDNdLFsyLDM2XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyMSwxMjo0LDE3OjE2LDIzOmksNDA6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxNV0sezE4OjIyLDMxOjI0LDIwOlsxLDIzXSwzMzpvLDM0OnMsMzU6YywzNjp1fSksdChbNiw5LDExLDE1LDIwLDIzLDMzLDM0LDM1LDM2LDQwXSxbMiwxNl0pLHsxMTpbMSwyOV19LHsxNjozMCw0MjpbMSwzMV19LHsxMTpbMiwzOF19LHQocixbMiw1XSksezE3OjMyLDIzOml9LHsyMTozMywyMjpbMSwzNF0sMjQ6MzUsMjU6MzYsMjk6bH0sezMyOjM4LDM3OlsxLDM5XSwzODpbMSw0MF19LHQoaCxbMiwyN10pLHQoaCxbMiwyOF0pLHQoaCxbMiwyOV0pLHQoaCxbMiwzMF0pLHQoZixbMiw5XSksezE0OjQxLDQzOmF9LHs0MzpbMiwzN119LHsxNTpbMSw0Ml19LHsyMjpbMSw0M119LHQocixbMiwxNF0pLHsyMTo0NCwyMjpbMiwxN10sMjQ6MzUsMjU6MzYsMjk6bH0sezI2OjQ1LDI5OlsxLDQ2XX0sezI5OlsyLDIzXX0sezMxOjQ3LDMzOm8sMzQ6cywzNTpjLDM2OnV9LHQoZCxbMiwzMV0pLHQoZCxbMiwzMl0pLHsxMTpbMSw0OF19LHsxOTo0OSwyMzpbMSw1MV0sMzk6WzEsNTBdfSx0KHIsWzIsMTNdKSx7MjI6WzIsMThdfSx0KHAsWzIsMTldLHsyNzo1MiwyODpbMSw1M10sMzA6WzEsNTRdfSksdChbMjIsMjgsMjksMzBdLFsyLDI0XSksezIzOlsyLDI2XX0sdChmLFsyLDEwXSksdChyLFsyLDEyXSksdChyLFsyLDMzXSksdChyLFsyLDM0XSksdChwLFsyLDIwXSx7Mjg6WzEsNTVdfSksdChwLFsyLDIxXSksdChbMjIsMjgsMjldLFsyLDI1XSksdChwLFsyLDIyXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDM1XSw3OlsyLDJdLDIwOlsyLDM4XSwzMTpbMiwzN10sMzc6WzIsMjNdLDQ0OlsyLDE4XSw0NzpbMiwyNl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxnPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDQwO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw0MTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQzO2Nhc2UgNDpyZXR1cm4gNDI7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpicmVhaztjYXNlIDk6cmV0dXJuIDk7Y2FzZSAxMDpyZXR1cm4gMzk7Y2FzZSAxMTpyZXR1cm4gNDtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDIwO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpyZXR1cm4gMzA7Y2FzZSAxNTpyZXR1cm4gMjk7Y2FzZSAxNjpyZXR1cm4gMjg7Y2FzZSAxNzpicmVhaztjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjI7Y2FzZSAxOTpyZXR1cm4gZS55eXRleHRbMF07Y2FzZSAyMDpyZXR1cm4gMzM7Y2FzZSAyMTpyZXR1cm4gMzQ7Y2FzZSAyMjpyZXR1cm4gMzU7Y2FzZSAyMzpyZXR1cm4gMzY7Y2FzZSAyNDpyZXR1cm4gMzM7Y2FzZSAyNTpyZXR1cm4gMzQ7Y2FzZSAyNjpyZXR1cm4gMzU7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpjYXNlIDMwOnJldHVybiAzNztjYXNlIDMxOnJldHVybiAyMztjYXNlIDMyOnJldHVybiBlLnl5dGV4dFswXTtjYXNlIDMzOnJldHVybiA2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/Oltcc10rKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmVyRGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpccyspL2ksL14oPzooPzpQSyl8KD86RkspKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcfG9cYikvaSwvXig/Olx9b1xiKS9pLC9eKD86XH1cfCkvaSwvXig/Olx8XHwpL2ksL14oPzpvXHwpL2ksL14oPzpvXHspL2ksL14oPzpcfFx7KS9pLC9eKD86XC5cLikvaSwvXig/Oi0tKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzouKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sYmxvY2s6e3J1bGVzOlsxMywxNCwxNSwxNiwxNywxOCwxOV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzNdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBtKCl7dGhpcy55eT17fX1yZXR1cm4geS5sZXhlcj1nLG0ucHJvdG90eXBlPXkseS5QYXJzZXI9bSxuZXcgbX0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDgwMDkpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sNzgwNToodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsOV0sbj1bMSw3XSxyPVsxLDZdLGk9WzEsOF0sYT1bMSwyMCwyMSwyMiwyMywzOCw0Nyw1OSw2MCw3OSw4MCw4MSw4Miw4Myw4NCw5OCw5OSwxMDIsMTA0LDEwNSwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLG89WzIsMTBdLHM9WzEsMjBdLGM9WzEsMjFdLHU9WzEsMjJdLGw9WzEsMjNdLGg9WzEsMzBdLGY9WzEsNTldLGQ9WzEsNDVdLHA9WzEsNDldLHk9WzEsMzNdLGc9WzEsMzRdLG09WzEsMzVdLHY9WzEsMzZdLGI9WzEsMzddLF89WzEsNTNdLHg9WzEsNDhdLHc9WzEsNTBdLGs9WzEsNTJdLFQ9WzEsNTZdLEU9WzEsNTddLEM9WzEsMzhdLFM9WzEsMzldLEE9WzEsNDBdLE09WzEsNDFdLE49WzEsNThdLEQ9WzEsNDddLE89WzEsNTFdLEI9WzEsNTRdLEw9WzEsNTVdLEk9WzEsNDZdLFI9WzEsNjJdLEY9WzEsNjddLFA9WzEsMjAsMjEsMjIsMjMsMzgsNDIsNDcsNTksNjAsNzksODAsODEsODIsODMsODQsOTgsOTksMTAyLDEwNCwxMDUsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxqPVsxLDcxXSxZPVsxLDcwXSx6PVsxLDcyXSxVPVsyMCwyMSwyMyw3NCw3NV0scT1bMSw5M10sJD1bMSw5OF0sSD1bMSwxMDFdLFc9WzEsMTAyXSxWPVsxLDk1XSxHPVsxLDEwMF0sWD1bMSwxMDNdLFo9WzEsOTZdLFE9WzEsMTA4XSxLPVsxLDEwN10sSj1bMSw5N10sdHQ9WzEsOTldLGV0PVsxLDEwNF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwOV0sYXQ9WzIwLDIxLDIyLDIzLDc0LDc1XSxvdD1bMjAsMjEsMjIsMjMsNDgsNzQsNzVdLHN0PVsyMCwyMSwyMiwyMyw0MCw0Nyw0OCw1MCw1Miw1NCw1Niw1OCw1OSw2MCw2Miw2NCw2Niw2Nyw2OSw3NCw3NSw4NCw5OCw5OSwxMDIsMTA0LDEwNSwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sY3Q9WzIwLDIxLDIzXSx1dD1bMjAsMjEsMjMsNDcsNTksNjAsNzQsNzUsODQsOTgsOTksMTAyLDEwNCwxMDUsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLGx0PVsxLDEyLDIwLDIxLDIyLDIzLDI0LDM4LDQyLDQ3LDU5LDYwLDc5LDgwLDgxLDgyLDgzLDg0LDk4LDk5LDEwMiwxMDQsMTA1LDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0saHQ9WzQ3LDU5LDYwLDg0LDk4LDk5LDEwMiwxMDQsMTA1LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxmdD1bMSwxNDJdLGR0PVsxLDE1MF0scHQ9WzEsMTUxXSx5dD1bMSwxNTJdLGd0PVsxLDE1M10sbXQ9WzEsMTM3XSx2dD1bMSwxMzhdLGJ0PVsxLDEzNF0sX3Q9WzEsMTQ1XSx4dD1bMSwxNDZdLHd0PVsxLDE0N10sa3Q9WzEsMTQ4XSxUdD1bMSwxNDldLEV0PVsxLDE1NF0sQ3Q9WzEsMTU1XSxTdD1bMSwxNDBdLEF0PVsxLDE0M10sTXQ9WzEsMTM5XSxOdD1bMSwxMzZdLER0PVsyMCwyMSwyMiwyMywzOCw0Miw0Nyw1OSw2MCw3OSw4MCw4MSw4Miw4Myw4NCw5OCw5OSwxMDIsMTA0LDEwNSwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLE90PVsxLDE1OF0sQnQ9WzIwLDIxLDIyLDIzLDI2LDQ3LDU5LDYwLDg0LDk4LDk5LDEwMiwxMDQsMTA1LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxMdD1bMjAsMjEsMjIsMjMsMjQsMjYsMzgsNDAsNDEsNDIsNDcsNTEsNTMsNTUsNTcsNTksNjAsNjEsNjMsNjUsNjYsNjgsNzAsNzQsNzUsNzksODAsODEsODIsODMsODQsODUsODgsOTgsOTksMTAyLDEwNCwxMDUsMTA2LDEwNywxMTUsMTE2LDExNywxMTgsMTE5LDEyMF0sSXQ9WzEyLDIxLDIyLDI0XSxSdD1bMjIsOTldLEZ0PVsxLDI0MV0sUHQ9WzEsMjM2XSxqdD1bMSwyMzddLFl0PVsxLDI0NV0senQ9WzEsMjQyXSxVdD1bMSwyMzldLHF0PVsxLDIzOF0sJHQ9WzEsMjQwXSxIdD1bMSwyNDNdLFd0PVsxLDI0NF0sVnQ9WzEsMjQ2XSxHdD1bMSwyNjRdLFh0PVsyMCwyMSwyMyw5OV0sWnQ9WzIwLDIxLDIyLDIzLDU5LDYwLDc5LDk1LDk4LDk5LDEwMiwxMDMsMTA0LDEwNSwxMDZdLFF0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aXZlOjUsb3BlbkRpcmVjdGl2ZTo2LHR5cGVEaXJlY3RpdmU6NyxjbG9zZURpcmVjdGl2ZTo4LHNlcGFyYXRvcjo5LCI6IjoxMCxhcmdEaXJlY3RpdmU6MTEsb3Blbl9kaXJlY3RpdmU6MTIsdHlwZV9kaXJlY3RpdmU6MTMsYXJnX2RpcmVjdGl2ZToxNCxjbG9zZV9kaXJlY3RpdmU6MTUsZ3JhcGhDb25maWc6MTYsZG9jdW1lbnQ6MTcsbGluZToxOCxzdGF0ZW1lbnQ6MTksU0VNSToyMCxORVdMSU5FOjIxLFNQQUNFOjIyLEVPRjoyMyxHUkFQSDoyNCxOT0RJUjoyNSxESVI6MjYsRmlyc3RTdG10U2VwZXJhdG9yOjI3LGVuZGluZzoyOCxlbmRUb2tlbjoyOSxzcGFjZUxpc3Q6MzAsc3BhY2VMaXN0TmV3bGluZTozMSx2ZXJ0aWNlU3RhdGVtZW50OjMyLHN0eWxlU3RhdGVtZW50OjMzLGxpbmtTdHlsZVN0YXRlbWVudDozNCxjbGFzc0RlZlN0YXRlbWVudDozNSxjbGFzc1N0YXRlbWVudDozNixjbGlja1N0YXRlbWVudDozNyxzdWJncmFwaDozOCx0ZXh0OjM5LFNRUzo0MCxTUUU6NDEsZW5kOjQyLGRpcmVjdGlvbjo0MyxsaW5rOjQ0LG5vZGU6NDUsdmVydGV4OjQ2LEFNUDo0NyxTVFlMRV9TRVBBUkFUT1I6NDgsaWRTdHJpbmc6NDksUFM6NTAsUEU6NTEsIigtIjo1MiwiLSkiOjUzLFNUQURJVU1TVEFSVDo1NCxTVEFESVVNRU5EOjU1LFNVQlJPVVRJTkVTVEFSVDo1NixTVUJST1VUSU5FRU5EOjU3LFZFUlRFWF9XSVRIX1BST1BTX1NUQVJUOjU4LEFMUEhBOjU5LENPTE9OOjYwLFBJUEU6NjEsQ1lMSU5ERVJTVEFSVDo2MixDWUxJTkRFUkVORDo2MyxESUFNT05EX1NUQVJUOjY0LERJQU1PTkRfU1RPUDo2NSxUQUdFTkQ6NjYsVFJBUFNUQVJUOjY3LFRSQVBFTkQ6NjgsSU5WVFJBUFNUQVJUOjY5LElOVlRSQVBFTkQ6NzAsbGlua1N0YXRlbWVudDo3MSxhcnJvd1RleHQ6NzIsVEVTVFNUUjo3MyxTVEFSVF9MSU5LOjc0LExJTks6NzUsdGV4dFRva2VuOjc2LFNUUjo3NyxrZXl3b3Jkczo3OCxTVFlMRTo3OSxMSU5LU1RZTEU6ODAsQ0xBU1NERUY6ODEsQ0xBU1M6ODIsQ0xJQ0s6ODMsRE9XTjo4NCxVUDo4NSx0ZXh0Tm9UYWdzOjg2LHRleHROb1RhZ3NUb2tlbjo4NyxERUZBVUxUOjg4LHN0eWxlc09wdDo4OSxhbHBoYU51bTo5MCxDQUxMQkFDS05BTUU6OTEsQ0FMTEJBQ0tBUkdTOjkyLEhSRUY6OTMsTElOS19UQVJHRVQ6OTQsSEVYOjk1LG51bUxpc3Q6OTYsSU5URVJQT0xBVEU6OTcsTlVNOjk4LENPTU1BOjk5LHN0eWxlOjEwMCxzdHlsZUNvbXBvbmVudDoxMDEsTUlOVVM6MTAyLFVOSVQ6MTAzLEJSS1Q6MTA0LERPVDoxMDUsUENUOjEwNixUQUdTVEFSVDoxMDcsYWxwaGFOdW1Ub2tlbjoxMDgsaWRTdHJpbmdUb2tlbjoxMDksYWxwaGFOdW1TdGF0ZW1lbnQ6MTEwLGRpcmVjdGlvbl90YjoxMTEsZGlyZWN0aW9uX2J0OjExMixkaXJlY3Rpb25fcmw6MTEzLGRpcmVjdGlvbl9scjoxMTQsUFVOQ1RVQVRJT046MTE1LFVOSUNPREVfVEVYVDoxMTYsUExVUzoxMTcsRVFVQUxTOjExOCxNVUxUOjExOSxVTkRFUlNDT1JFOjEyMCxncmFwaENvZGVUb2tlbnM6MTIxLEFSUk9XX0NST1NTOjEyMixBUlJPV19QT0lOVDoxMjMsQVJST1dfQ0lSQ0xFOjEyNCxBUlJPV19PUEVOOjEyNSxRVU9URToxMjYsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDEwOiI6IiwxMjoib3Blbl9kaXJlY3RpdmUiLDEzOiJ0eXBlX2RpcmVjdGl2ZSIsMTQ6ImFyZ19kaXJlY3RpdmUiLDE1OiJjbG9zZV9kaXJlY3RpdmUiLDIwOiJTRU1JIiwyMToiTkVXTElORSIsMjI6IlNQQUNFIiwyMzoiRU9GIiwyNDoiR1JBUEgiLDI1OiJOT0RJUiIsMjY6IkRJUiIsMzg6InN1YmdyYXBoIiw0MDoiU1FTIiw0MToiU1FFIiw0MjoiZW5kIiw0NzoiQU1QIiw0ODoiU1RZTEVfU0VQQVJBVE9SIiw1MDoiUFMiLDUxOiJQRSIsNTI6IigtIiw1MzoiLSkiLDU0OiJTVEFESVVNU1RBUlQiLDU1OiJTVEFESVVNRU5EIiw1NjoiU1VCUk9VVElORVNUQVJUIiw1NzoiU1VCUk9VVElORUVORCIsNTg6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1OToiQUxQSEEiLDYwOiJDT0xPTiIsNjE6IlBJUEUiLDYyOiJDWUxJTkRFUlNUQVJUIiw2MzoiQ1lMSU5ERVJFTkQiLDY0OiJESUFNT05EX1NUQVJUIiw2NToiRElBTU9ORF9TVE9QIiw2NjoiVEFHRU5EIiw2NzoiVFJBUFNUQVJUIiw2ODoiVFJBUEVORCIsNjk6IklOVlRSQVBTVEFSVCIsNzA6IklOVlRSQVBFTkQiLDczOiJURVNUU1RSIiw3NDoiU1RBUlRfTElOSyIsNzU6IkxJTksiLDc3OiJTVFIiLDc5OiJTVFlMRSIsODA6IkxJTktTVFlMRSIsODE6IkNMQVNTREVGIiw4MjoiQ0xBU1MiLDgzOiJDTElDSyIsODQ6IkRPV04iLDg1OiJVUCIsODg6IkRFRkFVTFQiLDkxOiJDQUxMQkFDS05BTUUiLDkyOiJDQUxMQkFDS0FSR1MiLDkzOiJIUkVGIiw5NDoiTElOS19UQVJHRVQiLDk1OiJIRVgiLDk3OiJJTlRFUlBPTEFURSIsOTg6Ik5VTSIsOTk6IkNPTU1BIiwxMDI6Ik1JTlVTIiwxMDM6IlVOSVQiLDEwNDoiQlJLVCIsMTA1OiJET1QiLDEwNjoiUENUIiwxMDc6IlRBR1NUQVJUIiwxMTE6ImRpcmVjdGlvbl90YiIsMTEyOiJkaXJlY3Rpb25fYnQiLDExMzoiZGlyZWN0aW9uX3JsIiwxMTQ6ImRpcmVjdGlvbl9sciIsMTE1OiJQVU5DVFVBVElPTiIsMTE2OiJVTklDT0RFX1RFWFQiLDExNzoiUExVUyIsMTE4OiJFUVVBTFMiLDExOToiTVVMVCIsMTIwOiJVTkRFUlNDT1JFIiwxMjI6IkFSUk9XX0NST1NTIiwxMjM6IkFSUk9XX1BPSU5UIiwxMjQ6IkFSUk9XX0NJUkNMRSIsMTI1OiJBUlJPV19PUEVOIiwxMjY6IlFVT1RFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDRdLFs1LDZdLFs2LDFdLFs3LDFdLFsxMSwxXSxbOCwxXSxbNCwyXSxbMTcsMF0sWzE3LDJdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMl0sWzE2LDNdLFsyOCwyXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI3LDFdLFsyNywxXSxbMjcsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMCwyXSxbMzAsMV0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDldLFsxOSw2XSxbMTksNF0sWzE5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFszMiwzXSxbMzIsNF0sWzMyLDJdLFszMiwxXSxbNDUsMV0sWzQ1LDVdLFs0NSwzXSxbNDYsNF0sWzQ2LDZdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw4XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNl0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsMV0sWzQ0LDJdLFs0NCwzXSxbNDQsM10sWzQ0LDFdLFs0NCwzXSxbNzEsMV0sWzcyLDNdLFszOSwxXSxbMzksMl0sWzM5LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzc4LDFdLFs3OCwxXSxbNzgsMV0sWzg2LDFdLFs4NiwyXSxbMzUsNV0sWzM1LDVdLFszNiw1XSxbMzcsMl0sWzM3LDRdLFszNywzXSxbMzcsNV0sWzM3LDJdLFszNyw0XSxbMzcsNF0sWzM3LDZdLFszNywyXSxbMzcsNF0sWzM3LDJdLFszNyw0XSxbMzcsNF0sWzM3LDZdLFszMyw1XSxbMzMsNV0sWzM0LDVdLFszNCw1XSxbMzQsOV0sWzM0LDldLFszNCw3XSxbMzQsN10sWzk2LDFdLFs5NiwzXSxbODksMV0sWzg5LDNdLFsxMDAsMV0sWzEwMCwyXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzEwMSwxXSxbMTAxLDFdLFsxMDEsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs0OSwxXSxbNDksMl0sWzkwLDFdLFs5MCwyXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFs0MywxXSxbNDMsMV0sWzQzLDFdLFs0MywxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbMTA5LDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXSxbMTIxLDFdLFsxMjEsMV0sWzEyMSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDU6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJmbG93Y2hhcnQiKTticmVhaztjYXNlIDEwOnRoaXMuJD1bXTticmVhaztjYXNlIDExOmFbc10hPT1bXSYmYVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDEyOmNhc2UgNzg6Y2FzZSA4MDpjYXNlIDkyOmNhc2UgMTQ4OmNhc2UgMTUwOmNhc2UgMTUxOnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTk6ci5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPSJUQiI7YnJlYWs7Y2FzZSAyMDpyLnNldERpcmVjdGlvbihhW3MtMV0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9YVtzLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9ci5hZGRTdWJHcmFwaChhW3MtNl0sYVtzLTFdLGFbcy00XSk7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9ci5hZGRTdWJHcmFwaChhW3MtM10sYVtzLTFdLGFbcy0zXSk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ci5hZGRTdWJHcmFwaCh2b2lkIDAsYVtzLTFdLHZvaWQgMCk7YnJlYWs7Y2FzZSA0ODpyLmFkZExpbmsoYVtzLTJdLnN0bXQsYVtzXSxhW3MtMV0pLHRoaXMuJD17c3RtdDphW3NdLG5vZGVzOmFbc10uY29uY2F0KGFbcy0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDk6ci5hZGRMaW5rKGFbcy0zXS5zdG10LGFbcy0xXSxhW3MtMl0pLHRoaXMuJD17c3RtdDphW3MtMV0sbm9kZXM6YVtzLTFdLmNvbmNhdChhW3MtM10ubm9kZXMpfTticmVhaztjYXNlIDUwOnRoaXMuJD17c3RtdDphW3MtMV0sbm9kZXM6YVtzLTFdfTticmVhaztjYXNlIDUxOnRoaXMuJD17c3RtdDphW3NdLG5vZGVzOmFbc119O2JyZWFrO2Nhc2UgNTI6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDUzOnRoaXMuJD1hW3MtNF0uY29uY2F0KGFbc10pO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPVthW3MtMl1dLHIuc2V0Q2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzcXVhcmUiKTticmVhaztjYXNlIDU2OnRoaXMuJD1hW3MtNV0sci5hZGRWZXJ0ZXgoYVtzLTVdLGFbcy0yXSwiY2lyY2xlIik7YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDU4OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwic3RhZGl1bSIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdWJyb3V0aW5lIik7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9YVtzLTddLHIuYWRkVmVydGV4KGFbcy03XSxhW3MtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW2Fbcy01XSxhW3MtM11dXSkpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJjeWxpbmRlciIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9YVtzLTVdLHIuYWRkVmVydGV4KGFbcy01XSxhW3MtMl0sImhleGFnb24iKTticmVhaztjYXNlIDY1OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwib2RkIik7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJpbnZfdHJhcGV6b2lkIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY5OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9YVtzXSxyLmFkZFZlcnRleChhW3NdKTticmVhaztjYXNlIDcxOmFbcy0xXS50ZXh0PWFbc10sdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDcyOmNhc2UgNzM6YVtzLTJdLnRleHQ9YVtzLTFdLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDc1OnZhciBjPXIuZGVzdHJ1Y3RMaW5rKGFbc10sYVtzLTJdKTt0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGgsdGV4dDphW3MtMV19O2JyZWFrO2Nhc2UgNzY6Yz1yLmRlc3RydWN0TGluayhhW3NdKSx0aGlzLiQ9e3R5cGU6Yy50eXBlLHN0cm9rZTpjLnN0cm9rZSxsZW5ndGg6Yy5sZW5ndGh9O2JyZWFrO2Nhc2UgNzc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc5OmNhc2UgOTM6Y2FzZSAxNDk6dGhpcy4kPWFbcy0xXSsiIithW3NdO2JyZWFrO2Nhc2UgOTQ6Y2FzZSA5NTp0aGlzLiQ9YVtzLTRdLHIuYWRkQ2xhc3MoYVtzLTJdLGFbc10pO2JyZWFrO2Nhc2UgOTY6dGhpcy4kPWFbcy00XSxyLnNldENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk3OmNhc2UgMTA1OnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk4OmNhc2UgMTA2OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA3OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMjpjYXNlIDEwODp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAzOmNhc2UgMTA5OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDQ6Y2FzZSAxMTA6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTE6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMjpjYXNlIDExNDp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTU6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNjp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExODp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDExOTpjYXNlIDEyMTp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTIwOmNhc2UgMTIyOmFbcy0yXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSAxMjQ6dGhpcy4kPWFbcy0xXSthW3NdO2JyZWFrO2Nhc2UgMTQ2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTQ3OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDE1Mjp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUzOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTQ6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU1OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1Njp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTc6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw1OTpkLDYwOnAsNzk6eSw4MDpnLDgxOm0sODI6diw4MzpiLDg0Ol8sOTg6eCw5OTp3LDEwMjprLDEwNDpULDEwNTpFLDEwOTo0NCwxMTE6QywxMTI6UywxMTM6QSwxMTQ6TSwxMTU6TiwxMTY6RCwxMTc6TywxMTg6QiwxMTk6TCwxMjA6SX0sezg6NjAsMTA6WzEsNjFdLDE1OlJ9LHQoWzEwLDE1XSxbMiw2XSksdChhLFsyLDE3XSksdChhLFsyLDE4XSksdChhLFsyLDE5XSksezIwOlsxLDY0XSwyMTpbMSw2NV0sMjI6RiwyNzo2MywzMDo2Nn0sdChQLFsyLDExXSksdChQLFsyLDEyXSksdChQLFsyLDEzXSksdChQLFsyLDE0XSksdChQLFsyLDE1XSksdChQLFsyLDE2XSksezk6NjgsMjA6aiwyMTpZLDIzOnosNDQ6NjksNzE6NzMsNzQ6WzEsNzRdLDc1OlsxLDc1XX0sezk6NzYsMjA6aiwyMTpZLDIzOnp9LHs5Ojc3LDIwOmosMjE6WSwyMzp6fSx7OTo3OCwyMDpqLDIxOlksMjM6en0sezk6NzksMjA6aiwyMTpZLDIzOnp9LHs5OjgwLDIwOmosMjE6WSwyMzp6fSx7OTo4MiwyMDpqLDIxOlksMjI6WzEsODFdLDIzOnp9LHQoUCxbMiw0NF0pLHQoVSxbMiw1MV0sezMwOjgzLDIyOkZ9KSx7MjI6WzEsODRdfSx7MjI6WzEsODVdfSx7MjI6WzEsODZdfSx7MjI6WzEsODddfSx7MjY6cSw0NzokLDU5OkgsNjA6Vyw3NzpbMSw5MV0sODQ6Viw5MDo5MCw5MTpbMSw4OF0sOTM6WzEsODldLDk4OkcsOTk6WCwxMDI6WiwxMDQ6USwxMDU6SywxMDg6OTQsMTEwOjkyLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHQoUCxbMiwxNTRdKSx0KFAsWzIsMTU1XSksdChQLFsyLDE1Nl0pLHQoUCxbMiwxNTddKSx0KGF0LFsyLDUyXSx7NDg6WzEsMTEwXX0pLHQob3QsWzIsNzBdLHsxMDk6MTIyLDQwOlsxLDExMV0sNDc6Ziw1MDpbMSwxMTJdLDUyOlsxLDExM10sNTQ6WzEsMTE0XSw1NjpbMSwxMTVdLDU4OlsxLDExNl0sNTk6ZCw2MDpwLDYyOlsxLDExN10sNjQ6WzEsMTE4XSw2NjpbMSwxMTldLDY3OlsxLDEyMF0sNjk6WzEsMTIxXSw4NDpfLDk4OngsOTk6dywxMDI6aywxMDQ6VCwxMDU6RSwxMTU6TiwxMTY6RCwxMTc6TywxMTg6QiwxMTk6TCwxMjA6SX0pLHQoc3QsWzIsMTQ2XSksdChzdCxbMiwxNzFdKSx0KHN0LFsyLDE3Ml0pLHQoc3QsWzIsMTczXSksdChzdCxbMiwxNzRdKSx0KHN0LFsyLDE3NV0pLHQoc3QsWzIsMTc2XSksdChzdCxbMiwxNzddKSx0KHN0LFsyLDE3OF0pLHQoc3QsWzIsMTc5XSksdChzdCxbMiwxODBdKSx0KHN0LFsyLDE4MV0pLHQoc3QsWzIsMTgyXSksdChzdCxbMiwxODNdKSx0KHN0LFsyLDE4NF0pLHQoc3QsWzIsMTg1XSksezk6MTIzLDIwOmosMjE6WSwyMzp6fSx7MTE6MTI0LDE0OlsxLDEyNV19LHQoY3QsWzIsOF0pLHQoYSxbMiwyMF0pLHQoYSxbMiwyNl0pLHQoYSxbMiwyN10pLHsyMTpbMSwxMjZdfSx0KHV0LFsyLDM0XSx7MzA6MTI3LDIyOkZ9KSx0KFAsWzIsMzVdKSx7NDU6MTI4LDQ2OjQyLDQ3OmYsNDk6NDMsNTk6ZCw2MDpwLDg0Ol8sOTg6eCw5OTp3LDEwMjprLDEwNDpULDEwNTpFLDEwOTo0NCwxMTU6TiwxMTY6RCwxMTc6TywxMTg6QiwxMTk6TCwxMjA6SX0sdChsdCxbMiw0NV0pLHQobHQsWzIsNDZdKSx0KGx0LFsyLDQ3XSksdChodCxbMiw3NF0sezcyOjEyOSw2MTpbMSwxMzFdLDczOlsxLDEzMF19KSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTMyLDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDY2Om10LDc0OnZ0LDc2OjEzMyw3NzpidCw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHQoWzQ3LDU5LDYwLDYxLDczLDg0LDk4LDk5LDEwMiwxMDQsMTA1LDExNSwxMTYsMTE3LDExOCwxMTksMTIwXSxbMiw3Nl0pLHQoUCxbMiwzNl0pLHQoUCxbMiwzN10pLHQoUCxbMiwzOF0pLHQoUCxbMiwzOV0pLHQoUCxbMiw0MF0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNTYsNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTMzLDc3OmJ0LDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sdChEdCxvLHsxNzoxNTd9KSx0KFUsWzIsNTBdLHs0NzpPdH0pLHsyNjpxLDQ3OiQsNTk6SCw2MDpXLDg0OlYsOTA6MTU5LDk1OlsxLDE2MF0sOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDEwODo5NCwxMTA6OTIsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezg4OlsxLDE2MV0sOTY6MTYyLDk4OlsxLDE2M119LHsyNjpxLDQ3OiQsNTk6SCw2MDpXLDg0OlYsODg6WzEsMTY0XSw5MDoxNjUsOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDEwODo5NCwxMTA6OTIsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezI2OnEsNDc6JCw1OTpILDYwOlcsODQ6Viw5MDoxNjYsOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDEwODo5NCwxMTA6OTIsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sdChjdCxbMiw5N10sezIyOlsxLDE2N10sOTI6WzEsMTY4XX0pLHQoY3QsWzIsMTAxXSx7MjI6WzEsMTY5XX0pLHQoY3QsWzIsMTA1XSx7MTA4Ojk0LDExMDoxNzEsMjI6WzEsMTcwXSwyNjpxLDQ3OiQsNTk6SCw2MDpXLDg0OlYsOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9KSx0KGN0LFsyLDEwN10sezIyOlsxLDE3Ml19KSx0KEJ0LFsyLDE0OF0pLHQoQnQsWzIsMTUwXSksdChCdCxbMiwxNTFdKSx0KEJ0LFsyLDE1Ml0pLHQoQnQsWzIsMTUzXSksdChMdCxbMiwxNThdKSx0KEx0LFsyLDE1OV0pLHQoTHQsWzIsMTYwXSksdChMdCxbMiwxNjFdKSx0KEx0LFsyLDE2Ml0pLHQoTHQsWzIsMTYzXSksdChMdCxbMiwxNjRdKSx0KEx0LFsyLDE2NV0pLHQoTHQsWzIsMTY2XSksdChMdCxbMiwxNjddKSx0KEx0LFsyLDE2OF0pLHQoTHQsWzIsMTY5XSksdChMdCxbMiwxNzBdKSx7NDc6Ziw0OToxNzMsNTk6ZCw2MDpwLDg0Ol8sOTg6eCw5OTp3LDEwMjprLDEwNDpULDEwNTpFLDEwOTo0NCwxMTU6TiwxMTY6RCwxMTc6TywxMTg6QiwxMTk6TCwxMjA6SX0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3NCw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxMzMsNzc6YnQsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTc2LDQyOmd0LDQ3OiQsNTA6WzEsMTc1XSw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTMzLDc3OmJ0LDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Nyw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxMzMsNzc6YnQsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTc4LDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDY2Om10LDc0OnZ0LDc2OjEzMyw3NzpidCw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzksNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTMzLDc3OmJ0LDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezU5OlsxLDE4MF19LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxODEsNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTMzLDc3OmJ0LDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE4Miw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NDpbMSwxODNdLDY2Om10LDc0OnZ0LDc2OjEzMyw3NzpidCw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxODQsNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTMzLDc3OmJ0LDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE4NSw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxMzMsNzc6YnQsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTg2LDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDY2Om10LDc0OnZ0LDc2OjEzMyw3NzpidCw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHQoc3QsWzIsMTQ3XSksdChJdCxbMiwzXSksezg6MTg3LDE1OlJ9LHsxNTpbMiw3XX0sdChhLFsyLDI4XSksdCh1dCxbMiwzM10pLHQoVSxbMiw0OF0sezMwOjE4OCwyMjpGfSksdChodCxbMiw3MV0sezIyOlsxLDE4OV19KSx7MjI6WzEsMTkwXX0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE5MSw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxMzMsNzc6YnQsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzU6WzEsMTkyXSw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx0KEx0LFsyLDc4XSksdChMdCxbMiw4MF0pLHQoTHQsWzIsMTM2XSksdChMdCxbMiwxMzddKSx0KEx0LFsyLDEzOF0pLHQoTHQsWzIsMTM5XSksdChMdCxbMiwxNDBdKSx0KEx0LFsyLDE0MV0pLHQoTHQsWzIsMTQyXSksdChMdCxbMiwxNDNdKSx0KEx0LFsyLDE0NF0pLHQoTHQsWzIsMTQ1XSksdChMdCxbMiw4MV0pLHQoTHQsWzIsODJdKSx0KEx0LFsyLDgzXSksdChMdCxbMiw4NF0pLHQoTHQsWzIsODVdKSx0KEx0LFsyLDg2XSksdChMdCxbMiw4N10pLHQoTHQsWzIsODhdKSx0KEx0LFsyLDg5XSksdChMdCxbMiw5MF0pLHQoTHQsWzIsOTFdKSx7OToxOTUsMjA6aiwyMTpZLDIyOmZ0LDIzOnosMjQ6ZHQsMjY6cHQsMzg6eXQsNDA6WzEsMTk0XSw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDE5Nl0sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw1OTpkLDYwOnAsNzk6eSw4MDpnLDgxOm0sODI6diw4MzpiLDg0Ol8sOTg6eCw5OTp3LDEwMjprLDEwNDpULDEwNTpFLDEwOTo0NCwxMTE6QywxMTI6UywxMTM6QSwxMTQ6TSwxMTU6TiwxMTY6RCwxMTc6TywxMTg6QiwxMTk6TCwxMjA6SX0sezIyOkYsMzA6MTk3fSx7MjI6WzEsMTk4XSwyNjpxLDQ3OiQsNTk6SCw2MDpXLDg0OlYsOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDEwODo5NCwxMTA6MTcxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHsyMjpbMSwxOTldfSx7MjI6WzEsMjAwXX0sezIyOlsxLDIwMV0sOTk6WzEsMjAyXX0sdChSdCxbMiwxMTldKSx7MjI6WzEsMjAzXX0sezIyOlsxLDIwNF0sMjY6cSw0NzokLDU5OkgsNjA6Vyw4NDpWLDk4OkcsOTk6WCwxMDI6WiwxMDQ6USwxMDU6SywxMDg6OTQsMTEwOjE3MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6WzEsMjA1XSwyNjpxLDQ3OiQsNTk6SCw2MDpXLDg0OlYsOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDEwODo5NCwxMTA6MTcxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHs3NzpbMSwyMDZdfSx0KGN0LFsyLDk5XSx7MjI6WzEsMjA3XX0pLHs3NzpbMSwyMDhdLDk0OlsxLDIwOV19LHs3NzpbMSwyMTBdfSx0KEJ0LFsyLDE0OV0pLHs3NzpbMSwyMTFdLDk0OlsxLDIxMl19LHQoYXQsWzIsNTRdLHsxMDk6MTIyLDQ3OmYsNTk6ZCw2MDpwLDg0Ol8sOTg6eCw5OTp3LDEwMjprLDEwNDpULDEwNTpFLDExNTpOLDExNjpELDExNzpPLDExODpCLDExOTpMLDEyMDpJfSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQxOlsxLDIxM10sNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjIxNCw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxMzMsNzc6YnQsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6JCw1MTpbMSwyMTVdLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6JCw1MzpbMSwyMTZdLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6JCw1NTpbMSwyMTddLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6JCw1NzpbMSwyMThdLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7NjA6WzEsMjE5XX0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDYzOlsxLDIyMF0sNjY6bXQsNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDY1OlsxLDIyMV0sNjY6bXQsNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjIyMiw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxMzMsNzc6YnQsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDE6WzEsMjIzXSw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw3NDp2dCw3NjoxOTMsNzg6MTQ0LDc5Ol90LDgwOnh0LDgxOnd0LDgyOmt0LDgzOlR0LDg0OkV0LDg1OkN0LDg3OjEzNSw4ODpTdCw5ODpHLDk5OlgsMTAyOkF0LDEwNDpRLDEwNTpLLDEwNjpNdCwxMDc6TnQsMTA4OjE0MSwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNjg6WzEsMjI0XSw3MDpbMSwyMjVdLDc0OnZ0LDc2OjE5Myw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NjptdCw2ODpbMSwyMjddLDcwOlsxLDIyNl0sNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezk6MjI4LDIwOmosMjE6WSwyMzp6fSx0KFUsWzIsNDldLHs0NzpPdH0pLHQoaHQsWzIsNzNdKSx0KGh0LFsyLDcyXSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDYxOlsxLDIyOV0sNjY6bXQsNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sdChodCxbMiw3NV0pLHQoTHQsWzIsNzldKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MjMwLDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDY2Om10LDc0OnZ0LDc2OjEzMyw3NzpidCw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHQoRHQsbyx7MTc6MjMxfSksdChQLFsyLDQzXSksezQ2OjIzMiw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw4NDpfLDk4OngsOTk6dywxMDI6aywxMDQ6VCwxMDU6RSwxMDk6NDQsMTE1Ok4sMTE2OkQsMTE3Ok8sMTE4OkIsMTE5OkwsMTIwOkl9LHsyMjpGdCw1OTpQdCw2MDpqdCw3OTpZdCw4OToyMzMsOTU6enQsOTg6VXQsMTAwOjIzNCwxMDE6MjM1LDEwMjpxdCwxMDM6JHQsMTA0Okh0LDEwNTpXdCwxMDY6VnR9LHsyMjpGdCw1OTpQdCw2MDpqdCw3OTpZdCw4OToyNDcsOTU6enQsOTg6VXQsMTAwOjIzNCwxMDE6MjM1LDEwMjpxdCwxMDM6JHQsMTA0Okh0LDEwNTpXdCwxMDY6VnR9LHsyMjpGdCw1OTpQdCw2MDpqdCw3OTpZdCw4OToyNDgsOTU6enQsOTc6WzEsMjQ5XSw5ODpVdCwxMDA6MjM0LDEwMToyMzUsMTAyOnF0LDEwMzokdCwxMDQ6SHQsMTA1Old0LDEwNjpWdH0sezIyOkZ0LDU5OlB0LDYwOmp0LDc5Oll0LDg5OjI1MCw5NTp6dCw5NzpbMSwyNTFdLDk4OlV0LDEwMDoyMzQsMTAxOjIzNSwxMDI6cXQsMTAzOiR0LDEwNDpIdCwxMDU6V3QsMTA2OlZ0fSx7OTg6WzEsMjUyXX0sezIyOkZ0LDU5OlB0LDYwOmp0LDc5Oll0LDg5OjI1Myw5NTp6dCw5ODpVdCwxMDA6MjM0LDEwMToyMzUsMTAyOnF0LDEwMzokdCwxMDQ6SHQsMTA1Old0LDEwNjpWdH0sezIyOkZ0LDU5OlB0LDYwOmp0LDc5Oll0LDg5OjI1NCw5NTp6dCw5ODpVdCwxMDA6MjM0LDEwMToyMzUsMTAyOnF0LDEwMzokdCwxMDQ6SHQsMTA1Old0LDEwNjpWdH0sezI2OnEsNDc6JCw1OTpILDYwOlcsODQ6Viw5MDoyNTUsOTg6Ryw5OTpYLDEwMjpaLDEwNDpRLDEwNTpLLDEwODo5NCwxMTA6OTIsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sdChjdCxbMiw5OF0pLHs3NzpbMSwyNTZdfSx0KGN0LFsyLDEwMl0sezIyOlsxLDI1N119KSx0KGN0LFsyLDEwM10pLHQoY3QsWzIsMTA2XSksdChjdCxbMiwxMDhdLHsyMjpbMSwyNThdfSksdChjdCxbMiwxMDldKSx0KG90LFsyLDU1XSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OiQsNTE6WzEsMjU5XSw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sdChvdCxbMiw2Ml0pLHQob3QsWzIsNTddKSx0KG90LFsyLDU4XSksdChvdCxbMiw1OV0pLHs1OTpbMSwyNjBdfSx0KG90LFsyLDYxXSksdChvdCxbMiw2M10pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzokLDU5OkgsNjA6Vyw2NTpbMSwyNjFdLDY2Om10LDc0OnZ0LDc2OjE5Myw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHQob3QsWzIsNjVdKSx0KG90LFsyLDY2XSksdChvdCxbMiw2OF0pLHQob3QsWzIsNjddKSx0KG90LFsyLDY5XSksdChJdCxbMiw0XSksdChbMjIsNDcsNTksNjAsODQsOTgsOTksMTAyLDEwNCwxMDUsMTE1LDExNiwxMTcsMTE4LDExOSwxMjBdLFsyLDc3XSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQxOlsxLDI2Ml0sNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTkzLDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNjNdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNTk6ZCw2MDpwLDc5OnksODA6Zyw4MTptLDgyOnYsODM6Yiw4NDpfLDk4OngsOTk6dywxMDI6aywxMDQ6VCwxMDU6RSwxMDk6NDQsMTExOkMsMTEyOlMsMTEzOkEsMTE0Ok0sMTE1Ok4sMTE2OkQsMTE3Ok8sMTE4OkIsMTE5OkwsMTIwOkl9LHQoYXQsWzIsNTNdKSx0KGN0LFsyLDExMV0sezk5Okd0fSksdChYdCxbMiwxMjFdLHsxMDE6MjY1LDIyOkZ0LDU5OlB0LDYwOmp0LDc5Oll0LDk1Onp0LDk4OlV0LDEwMjpxdCwxMDM6JHQsMTA0Okh0LDEwNTpXdCwxMDY6VnR9KSx0KFp0LFsyLDEyM10pLHQoWnQsWzIsMTI1XSksdChadCxbMiwxMjZdKSx0KFp0LFsyLDEyN10pLHQoWnQsWzIsMTI4XSksdChadCxbMiwxMjldKSx0KFp0LFsyLDEzMF0pLHQoWnQsWzIsMTMxXSksdChadCxbMiwxMzJdKSx0KFp0LFsyLDEzM10pLHQoWnQsWzIsMTM0XSksdChadCxbMiwxMzVdKSx0KGN0LFsyLDExMl0sezk5Okd0fSksdChjdCxbMiwxMTNdLHs5OTpHdH0pLHsyMjpbMSwyNjZdfSx0KGN0LFsyLDExNF0sezk5Okd0fSksezIyOlsxLDI2N119LHQoUnQsWzIsMTIwXSksdChjdCxbMiw5NF0sezk5Okd0fSksdChjdCxbMiw5NV0sezk5Okd0fSksdChjdCxbMiw5Nl0sezEwODo5NCwxMTA6MTcxLDI2OnEsNDc6JCw1OTpILDYwOlcsODQ6Viw5ODpHLDk5OlgsMTAyOlosMTA0OlEsMTA1OkssMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0pLHQoY3QsWzIsMTAwXSksezk0OlsxLDI2OF19LHs5NDpbMSwyNjldfSx7NTE6WzEsMjcwXX0sezYxOlsxLDI3MV19LHs2NTpbMSwyNzJdfSx7OToyNzMsMjA6aiwyMTpZLDIzOnp9LHQoUCxbMiw0Ml0pLHsyMjpGdCw1OTpQdCw2MDpqdCw3OTpZdCw5NTp6dCw5ODpVdCwxMDA6Mjc0LDEwMToyMzUsMTAyOnF0LDEwMzokdCwxMDQ6SHQsMTA1Old0LDEwNjpWdH0sdChadCxbMiwxMjRdKSx7MjY6cSw0NzokLDU5OkgsNjA6Vyw4NDpWLDkwOjI3NSw5ODpHLDk5OlgsMTAyOlosMTA0OlEsMTA1OkssMTA4Ojk0LDExMDo5MiwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx7MjY6cSw0NzokLDU5OkgsNjA6Vyw4NDpWLDkwOjI3Niw5ODpHLDk5OlgsMTAyOlosMTA0OlEsMTA1OkssMTA4Ojk0LDExMDo5MiwxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSx0KGN0LFsyLDEwNF0pLHQoY3QsWzIsMTEwXSksdChvdCxbMiw1Nl0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyNzcsNDI6Z3QsNDc6JCw1OTpILDYwOlcsNjY6bXQsNzQ6dnQsNzY6MTMzLDc3OmJ0LDc4OjE0NCw3OTpfdCw4MDp4dCw4MTp3dCw4MjprdCw4MzpUdCw4NDpFdCw4NTpDdCw4NzoxMzUsODg6U3QsOTg6Ryw5OTpYLDEwMjpBdCwxMDQ6USwxMDU6SywxMDY6TXQsMTA3Ok50LDEwODoxNDEsMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0sdChvdCxbMiw2NF0pLHQoRHQsbyx7MTc6Mjc4fSksdChYdCxbMiwxMjJdLHsxMDE6MjY1LDIyOkZ0LDU5OlB0LDYwOmp0LDc5Oll0LDk1Onp0LDk4OlV0LDEwMjpxdCwxMDM6JHQsMTA0Okh0LDEwNTpXdCwxMDY6VnR9KSx0KGN0LFsyLDExN10sezEwODo5NCwxMTA6MTcxLDIyOlsxLDI3OV0sMjY6cSw0NzokLDU5OkgsNjA6Vyw4NDpWLDk4OkcsOTk6WCwxMDI6WiwxMDQ6USwxMDU6SywxMTU6SiwxMTY6dHQsMTE3OmV0LDExODpudCwxMTk6cnQsMTIwOml0fSksdChjdCxbMiwxMThdLHsxMDg6OTQsMTEwOjE3MSwyMjpbMSwyODBdLDI2OnEsNDc6JCw1OTpILDYwOlcsODQ6Viw5ODpHLDk5OlgsMTAyOlosMTA0OlEsMTA1OkssMTE1OkosMTE2OnR0LDExNzpldCwxMTg6bnQsMTE5OnJ0LDEyMDppdH0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MTpbMSwyODFdLDQyOmd0LDQ3OiQsNTk6SCw2MDpXLDY2Om10LDc0OnZ0LDc2OjE5Myw3ODoxNDQsNzk6X3QsODA6eHQsODE6d3QsODI6a3QsODM6VHQsODQ6RXQsODU6Q3QsODc6MTM1LDg4OlN0LDk4OkcsOTk6WCwxMDI6QXQsMTA0OlEsMTA1OkssMTA2Ok10LDEwNzpOdCwxMDg6MTQxLDExNTpKLDExNjp0dCwxMTc6ZXQsMTE4Om50LDExOTpydCwxMjA6aXR9LHsxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDI6WzEsMjgyXSw0MzozMSw0NTozMiw0Njo0Miw0NzpmLDQ5OjQzLDU5OmQsNjA6cCw3OTp5LDgwOmcsODE6bSw4Mjp2LDgzOmIsODQ6Xyw5ODp4LDk5OncsMTAyOmssMTA0OlQsMTA1OkUsMTA5OjQ0LDExMTpDLDExMjpTLDExMzpBLDExNDpNLDExNTpOLDExNjpELDExNzpPLDExODpCLDExOTpMLDEyMDpJfSx7MjI6RnQsNTk6UHQsNjA6anQsNzk6WXQsODk6MjgzLDk1Onp0LDk4OlV0LDEwMDoyMzQsMTAxOjIzNSwxMDI6cXQsMTAzOiR0LDEwNDpIdCwxMDU6V3QsMTA2OlZ0fSx7MjI6RnQsNTk6UHQsNjA6anQsNzk6WXQsODk6Mjg0LDk1Onp0LDk4OlV0LDEwMDoyMzQsMTAxOjIzNSwxMDI6cXQsMTAzOiR0LDEwNDpIdCwxMDU6V3QsMTA2OlZ0fSx0KG90LFsyLDYwXSksdChQLFsyLDQxXSksdChjdCxbMiwxMTVdLHs5OTpHdH0pLHQoY3QsWzIsMTE2XSx7OTk6R3R9KV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sOTpbMiw1XSwxMDpbMiwyXSwxMjU6WzIsN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxLdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxMjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTM7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDEwO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwxNTtjYXNlIDQ6cmV0dXJuIDE0O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA5OnJldHVybiJTVFIiO2Nhc2UgMTA6cmV0dXJuIDc5O2Nhc2UgMTE6cmV0dXJuIDg4O2Nhc2UgMTI6cmV0dXJuIDgwO2Nhc2UgMTM6cmV0dXJuIDk3O2Nhc2UgMTQ6cmV0dXJuIDgxO2Nhc2UgMTU6cmV0dXJuIDgyO2Nhc2UgMTY6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIDkzO2Nhc2UgMTk6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gOTE7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gOTI7Y2FzZSAyNTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIDgzO2Nhc2UgMjg6Y2FzZSAyOTpyZXR1cm4gdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwyNDtjYXNlIDMwOnJldHVybiAzODtjYXNlIDMxOnJldHVybiA0MjtjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM1OnJldHVybiA5NDtjYXNlIDM2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjU7Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgNDc6cmV0dXJuIDExMTtjYXNlIDQ4OnJldHVybiAxMTI7Y2FzZSA0OTpyZXR1cm4gMTEzO2Nhc2UgNTA6cmV0dXJuIDExNDtjYXNlIDUxOnJldHVybiA5ODtjYXNlIDUyOnJldHVybiAxMDQ7Y2FzZSA1MzpyZXR1cm4gNDg7Y2FzZSA1NDpyZXR1cm4gNjA7Y2FzZSA1NTpyZXR1cm4gNDc7Y2FzZSA1NjpyZXR1cm4gMjA7Y2FzZSA1NzpyZXR1cm4gOTk7Y2FzZSA1ODpyZXR1cm4gMTE5O2Nhc2UgNTk6Y2FzZSA2MDpjYXNlIDYxOnJldHVybiA3NTtjYXNlIDYyOmNhc2UgNjM6Y2FzZSA2NDpyZXR1cm4gNzQ7Y2FzZSA2NTpyZXR1cm4gNTI7Y2FzZSA2NjpyZXR1cm4gNTM7Y2FzZSA2NzpyZXR1cm4gNTQ7Y2FzZSA2ODpyZXR1cm4gNTU7Y2FzZSA2OTpyZXR1cm4gNTY7Y2FzZSA3MDpyZXR1cm4gNTc7Y2FzZSA3MTpyZXR1cm4gNTg7Y2FzZSA3MjpyZXR1cm4gNjI7Y2FzZSA3MzpyZXR1cm4gNjM7Y2FzZSA3NDpyZXR1cm4gMTAyO2Nhc2UgNzU6cmV0dXJuIDEwNTtjYXNlIDc2OnJldHVybiAxMjA7Y2FzZSA3NzpyZXR1cm4gMTE3O2Nhc2UgNzg6cmV0dXJuIDEwNjtjYXNlIDc5OmNhc2UgODA6cmV0dXJuIDExODtjYXNlIDgxOnJldHVybiAxMDc7Y2FzZSA4MjpyZXR1cm4gNjY7Y2FzZSA4MzpyZXR1cm4gODU7Y2FzZSA4NDpyZXR1cm4iU0VQIjtjYXNlIDg1OnJldHVybiA4NDtjYXNlIDg2OnJldHVybiA1OTtjYXNlIDg3OnJldHVybiA2ODtjYXNlIDg4OnJldHVybiA2NztjYXNlIDg5OnJldHVybiA3MDtjYXNlIDkwOnJldHVybiA2OTtjYXNlIDkxOnJldHVybiAxMTU7Y2FzZSA5MjpyZXR1cm4gMTE2O2Nhc2UgOTM6cmV0dXJuIDYxO2Nhc2UgOTQ6cmV0dXJuIDUwO2Nhc2UgOTU6cmV0dXJuIDUxO2Nhc2UgOTY6cmV0dXJuIDQwO2Nhc2UgOTc6cmV0dXJuIDQxO2Nhc2UgOTg6cmV0dXJuIDY0O2Nhc2UgOTk6cmV0dXJuIDY1O2Nhc2UgMTAwOnJldHVybiAxMjY7Y2FzZSAxMDE6cmV0dXJuIDIxO2Nhc2UgMTAyOnJldHVybiAyMjtjYXNlIDEwMzpyZXR1cm4gMjN9fSxydWxlczpbL14oPzolJVx7KS8sL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvLC9eKD86OikvLC9eKD86XH0lJSkvLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvLC9eKD86JSUoPyFceylbXlxuXSopLywvXig/OlteXH1dJSVbXlxuXSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10rWyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmdyYXBoXGIpLywvXig/OmZsb3djaGFydFxiKS8sL14oPzpzdWJncmFwaFxiKS8sL14oPzplbmRcYlxzKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzooXHI/XG4pKlxzKlxuKS8sL14oPzpccypMUlxiKS8sL14oPzpccypSTFxiKS8sL14oPzpccypUQlxiKS8sL14oPzpccypCVFxiKS8sL14oPzpccypURFxiKS8sL14oPzpccypCUlxiKS8sL14oPzpccyo8KS8sL14oPzpccyo+KS8sL14oPzpccypcXikvLC9eKD86XHMqdlxiKS8sL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzpbMC05XSspLywvXig/OiMpLywvXig/Ojo6OikvLC9eKD86OikvLC9eKD86JikvLC9eKD86OykvLC9eKD86LCkvLC9eKD86XCopLywvXig/OlxzKlt4bzxdPy0tK1steG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT0rWz14bz5dXHMqKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpccypbeG88XT89PVxzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcWykvLC9eKD86XF1cKSkvLC9eKD86XFtcWykvLC9eKD86XF1cXSkvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcXSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OltcX10pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpbQS1aYS16XSspLywvXig/OlxcXF0pLywvXig/OlxbXC8pLywvXig/OlwvXF0pLywvXig/OlxbXFwpLywvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/Olx8KS8sL14oPzpcKCkvLC9eKD86XCkpLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86XHspLywvXig/Olx9KS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzIzLDI0XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzIwLDIxLDIyXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsxNywxOF0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzI2LDI3XSxpbmNsdXNpdmU6ITF9LHZlcnRleDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxkaXI6e3J1bGVzOlszNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Nl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls4LDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTksMjUsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gSnQoKXt0aGlzLnl5PXt9fXJldHVybiBRdC5sZXhlcj1LdCxKdC5wcm90b3R5cGU9UXQsUXQuUGFyc2VyPUp0LG5ldyBKdH0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDUzNTQpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sMjA1NToodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsM10sbj1bMSw1XSxyPVs3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjIsMjksMzRdLGk9WzEsMTVdLGE9WzEsMTZdLG89WzEsMTddLHM9WzEsMThdLGM9WzEsMTldLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjNdLGQ9WzEsMjVdLHA9WzEsMjddLHk9WzEsMzBdLGc9WzUsNyw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIyLDI5LDM0XSxtPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxnYW50dDo1LGRvY3VtZW50OjYsRU9GOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5MOjExLGRhdGVGb3JtYXQ6MTIsaW5jbHVzaXZlRW5kRGF0ZXM6MTMsdG9wQXhpczoxNCxheGlzRm9ybWF0OjE1LGV4Y2x1ZGVzOjE2LGluY2x1ZGVzOjE3LHRvZGF5TWFya2VyOjE4LHRpdGxlOjE5LHNlY3Rpb246MjAsY2xpY2tTdGF0ZW1lbnQ6MjEsdGFza1R4dDoyMix0YXNrRGF0YToyMyxvcGVuRGlyZWN0aXZlOjI0LHR5cGVEaXJlY3RpdmU6MjUsY2xvc2VEaXJlY3RpdmU6MjYsIjoiOjI3LGFyZ0RpcmVjdGl2ZToyOCxjbGljazoyOSxjYWxsYmFja25hbWU6MzAsY2FsbGJhY2thcmdzOjMxLGhyZWY6MzIsY2xpY2tTdGF0ZW1lbnREZWJ1ZzozMyxvcGVuX2RpcmVjdGl2ZTozNCx0eXBlX2RpcmVjdGl2ZTozNSxhcmdfZGlyZWN0aXZlOjM2LGNsb3NlX2RpcmVjdGl2ZTozNywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiZ2FudHQiLDc6IkVPRiIsOToiU1BBQ0UiLDExOiJOTCIsMTI6ImRhdGVGb3JtYXQiLDEzOiJpbmNsdXNpdmVFbmREYXRlcyIsMTQ6InRvcEF4aXMiLDE1OiJheGlzRm9ybWF0IiwxNjoiZXhjbHVkZXMiLDE3OiJpbmNsdWRlcyIsMTg6InRvZGF5TWFya2VyIiwxOToidGl0bGUiLDIwOiJzZWN0aW9uIiwyMjoidGFza1R4dCIsMjM6InRhc2tEYXRhIiwyNzoiOiIsMjk6ImNsaWNrIiwzMDoiY2FsbGJhY2tuYW1lIiwzMToiY2FsbGJhY2thcmdzIiwzMjoiaHJlZiIsMzQ6Im9wZW5fZGlyZWN0aXZlIiwzNToidHlwZV9kaXJlY3RpdmUiLDM2OiJhcmdfZGlyZWN0aXZlIiwzNzoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFs0LDRdLFs0LDZdLFsyMSwyXSxbMjEsM10sWzIxLDNdLFsyMSw0XSxbMjEsM10sWzIxLDRdLFsyMSwyXSxbMzMsMl0sWzMzLDNdLFszMywzXSxbMzMsNF0sWzMzLDNdLFszMyw0XSxbMzMsMl0sWzI0LDFdLFsyNSwxXSxbMjgsMV0sWzI2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMjpyZXR1cm4gYVtzLTFdO2Nhc2UgMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1bXTticmVhaztjYXNlIDk6ci5zZXREYXRlRm9ybWF0KGFbc10uc3Vic3RyKDExKSksdGhpcy4kPWFbc10uc3Vic3RyKDExKTticmVhaztjYXNlIDEwOnIuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTE6ci5Ub3BBeGlzKCksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTI6ci5zZXRBeGlzRm9ybWF0KGFbc10uc3Vic3RyKDExKSksdGhpcy4kPWFbc10uc3Vic3RyKDExKTticmVhaztjYXNlIDEzOnIuc2V0RXhjbHVkZXMoYVtzXS5zdWJzdHIoOSkpLHRoaXMuJD1hW3NdLnN1YnN0cig5KTticmVhaztjYXNlIDE0OnIuc2V0SW5jbHVkZXMoYVtzXS5zdWJzdHIoOSkpLHRoaXMuJD1hW3NdLnN1YnN0cig5KTticmVhaztjYXNlIDE1OnIuc2V0VG9kYXlNYXJrZXIoYVtzXS5zdWJzdHIoMTIpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMTY6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTc6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxOTpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSxudWxsKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9YVtzLTJdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdLGFbcy0xXSksci5zZXRMaW5rKGFbcy0zXSxhW3NdKTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3NdLG51bGwpLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdKTticmVhaztjYXNlIDI4OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMV0sYVtzXSksci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPWFbcy0xXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzNjp0aGlzLiQ9YVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjpjYXNlIDM0OnRoaXMuJD1hW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDMzOmNhc2UgMzU6dGhpcy4kPWFbcy0zXSsiICIrYVtzLTJdKyIgIithW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzg6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQwOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImdhbnR0Iil9fSx0YWJsZTpbezM6MSw0OjIsNTplLDI0OjQsMzQ6bn0sezE6WzNdfSx7Mzo2LDQ6Miw1OmUsMjQ6NCwzNDpufSx0KHIsWzIsM10sezY6N30pLHsyNTo4LDM1OlsxLDldfSx7MzU6WzIsMzddfSx7MTpbMiwxXX0sezQ6MjYsNzpbMSwxMF0sODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6aSwxMzphLDE0Om8sMTU6cywxNjpjLDE3OnUsMTg6bCwxOTpoLDIwOmYsMjE6MjQsMjI6ZCwyNDo0LDI5OnAsMzQ6bn0sezI2OjI4LDI3OlsxLDI5XSwzNzp5fSx0KFsyNywzN10sWzIsMzhdKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI2LDEwOjMxLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDpmLDIxOjI0LDIyOmQsMjQ6NCwyOTpwLDM0Om59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsOV0pLHQocixbMiwxMF0pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHQocixbMiwxM10pLHQocixbMiwxNF0pLHQocixbMiwxNV0pLHQocixbMiwxNl0pLHQocixbMiwxN10pLHQocixbMiwxOF0pLHsyMzpbMSwzMl19LHQocixbMiwyMF0pLHszMDpbMSwzM10sMzI6WzEsMzRdfSx7MTE6WzEsMzVdfSx7Mjg6MzYsMzY6WzEsMzddfSx7MTE6WzIsNDBdfSx0KHIsWzIsNV0pLHQocixbMiwxOV0pLHQocixbMiwyM10sezMxOlsxLDM4XSwzMjpbMSwzOV19KSx0KHIsWzIsMjldLHszMDpbMSw0MF19KSx0KGcsWzIsMjFdKSx7MjY6NDEsMzc6eX0sezM3OlsyLDM5XX0sdChyLFsyLDI0XSx7MzI6WzEsNDJdfSksdChyLFsyLDI1XSksdChyLFsyLDI3XSx7MzE6WzEsNDNdfSksezExOlsxLDQ0XX0sdChyLFsyLDI2XSksdChyLFsyLDI4XSksdChnLFsyLDIyXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDM3XSw2OlsyLDFdLDMwOlsyLDQwXSwzNzpbMiwzOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx2PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDM0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjc7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM3O2Nhc2UgNDpyZXR1cm4gMzY7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6YnJlYWs7Y2FzZSA4OnJldHVybiAxMTtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmJyZWFrO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMyO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMzA7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gMzE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI5O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTc7Y2FzZSAzMDpyZXR1cm4gMTY7Y2FzZSAzMTpyZXR1cm4gMTg7Y2FzZSAzMjpyZXR1cm4iZGF0ZSI7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjA7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjM7Y2FzZSAzNzpyZXR1cm4gMjc7Y2FzZSAzODpyZXR1cm4gNztjYXNlIDM5OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzldLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBiKCl7dGhpcy55eT17fX1yZXR1cm4gbS5sZXhlcj12LGIucHJvdG90eXBlPW0sbS5QYXJzZXI9YixuZXcgYn0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDY4NzgpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sODQ1NDoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzIsM10sbj1bMSw3XSxyPVs3LDEyLDE1LDE3LDE5LDIwLDIxXSxpPVs3LDExLDEyLDE1LDE3LDE5LDIwLDIxXSxhPVsyLDIwXSxvPVsxLDMyXSxzPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxHRzo0LCI6Ijo1LGRvY3VtZW50OjYsRU9GOjcsRElSOjgsb3B0aW9uczo5LGJvZHk6MTAsT1BUOjExLE5MOjEyLGxpbmU6MTMsc3RhdGVtZW50OjE0LENPTU1JVDoxNSxjb21taXRfYXJnOjE2LEJSQU5DSDoxNyxJRDoxOCxDSEVDS09VVDoxOSxNRVJHRToyMCxSRVNFVDoyMSxyZXNldF9hcmc6MjIsU1RSOjIzLEhFQUQ6MjQscmVzZXRfcGFyZW50czoyNSxDQVJFVDoyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiR0ciLDU6IjoiLDc6IkVPRiIsODoiRElSIiwxMToiT1BUIiwxMjoiTkwiLDE1OiJDT01NSVQiLDE3OiJCUkFOQ0giLDE4OiJJRCIsMTk6IkNIRUNLT1VUIiwyMDoiTUVSR0UiLDIxOiJSRVNFVCIsMjM6IlNUUiIsMjQ6IkhFQUQiLDI2OiJDQVJFVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbOSwyXSxbOSwxXSxbMTAsMF0sWzEwLDJdLFsxMywyXSxbMTMsMV0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTYsMF0sWzE2LDFdLFsyMiwyXSxbMjIsMl0sWzI1LDBdLFsyNSwyXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDI6cmV0dXJuIHIuc2V0RGlyZWN0aW9uKGFbcy0zXSksYVtzLTFdO2Nhc2UgNDpyLnNldE9wdGlvbnMoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU6YVtzLTFdKz1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDExOnIuY29tbWl0KGFbc10pO2JyZWFrO2Nhc2UgMTI6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAxMzpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMTQ6ci5tZXJnZShhW3NdKTticmVhaztjYXNlIDE1OnIucmVzZXQoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9IiI7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE4OnRoaXMuJD1hW3MtMV0rIjoiK2Fbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9YVtzLTFdKyI6IityLmNvdW50LHIuY291bnQ9MDticmVhaztjYXNlIDIwOnIuY291bnQ9MDticmVhaztjYXNlIDIxOnIuY291bnQrPTF9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdLDg6WzEsNF19LHs2OjUsNzplLDk6NiwxMjpufSx7NTpbMSw4XX0sezc6WzEsOV19LHQocixbMiw3XSx7MTA6MTAsMTE6WzEsMTFdfSksdChpLFsyLDZdKSx7NjoxMiw3OmUsOTo2LDEyOm59LHsxOlsyLDFdfSx7NzpbMiw0XSwxMjpbMSwxNV0sMTM6MTMsMTQ6MTQsMTU6WzEsMTZdLDE3OlsxLDE3XSwxOTpbMSwxOF0sMjA6WzEsMTldLDIxOlsxLDIwXX0sdChpLFsyLDVdKSx7NzpbMSwyMV19LHQocixbMiw4XSksezEyOlsxLDIyXX0sdChyLFsyLDEwXSksezEyOlsyLDE2XSwxNjoyMywyMzpbMSwyNF19LHsxODpbMSwyNV19LHsxODpbMSwyNl19LHsxODpbMSwyN119LHsxODpbMSwzMF0sMjI6MjgsMjQ6WzEsMjldfSx7MTpbMiwyXX0sdChyLFsyLDldKSx7MTI6WzIsMTFdfSx7MTI6WzIsMTddfSx7MTI6WzIsMTJdfSx7MTI6WzIsMTNdfSx7MTI6WzIsMTRdfSx7MTI6WzIsMTVdfSx7MTI6YSwyNTozMSwyNjpvfSx7MTI6YSwyNTozMywyNjpvfSx7MTI6WzIsMThdfSx7MTI6YSwyNTozNCwyNjpvfSx7MTI6WzIsMTldfSx7MTI6WzIsMjFdfV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMV0sMjE6WzIsMl0sMjM6WzIsMTFdLDI0OlsyLDE3XSwyNTpbMiwxMl0sMjY6WzIsMTNdLDI3OlsyLDE0XSwyODpbMiwxNV0sMzE6WzIsMThdLDMzOlsyLDE5XSwzNDpbMiwyMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxjPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiAxMjtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpicmVhaztjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA1OnJldHVybiAxNTtjYXNlIDY6cmV0dXJuIDE3O2Nhc2UgNzpyZXR1cm4gMjA7Y2FzZSA4OnJldHVybiAyMTtjYXNlIDk6cmV0dXJuIDE5O2Nhc2UgMTA6Y2FzZSAxMTpyZXR1cm4gODtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6dGhpcy5iZWdpbigib3B0aW9ucyIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDExO2Nhc2UgMTc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gMjM7Y2FzZSAyMDpyZXR1cm4gMTg7Y2FzZSAyMTpyZXR1cm4gN319LHJ1bGVzOlsvXig/Oihccj9cbikrKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpnaXRHcmFwaFxiKS9pLC9eKD86Y29tbWl0XGIpL2ksL14oPzpicmFuY2hcYikvaSwvXig/Om1lcmdlXGIpL2ksL14oPzpyZXNldFxiKS9pLC9eKD86Y2hlY2tvdXRcYikvaSwvXig/OkxSXGIpL2ksL14oPzpCVFxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86ZW5kXHI/XG4pL2ksL14oPzpbXlxuXStccj9cbikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W2EtekEtWl1bLV9cLmEtekEtWjAtOV0qWy1fYS16QS1aMC05XSkvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e29wdGlvbnM6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxOCwxOV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNywyMCwyMV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIHUoKXt0aGlzLnl5PXt9fXJldHVybiBzLmxleGVyPWMsdS5wcm90b3R5cGU9cyxzLlBhcnNlcj11LG5ldyB1fSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oODE4MykucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSw0NjQ1Oih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bNiw5LDEwXSxuPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3N3aXRjaChhLmxlbmd0aCxpKXtjYXNlIDE6cmV0dXJuIHI7Y2FzZSA0OmJyZWFrO2Nhc2UgNjpyLnNldEluZm8oITApfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx0KGUsWzIsMl0sezU6M30pLHs2OlsxLDRdLDc6NSw4OjYsOTpbMSw3XSwxMDpbMSw4XX0sezE6WzIsMV19LHQoZSxbMiwzXSksdChlLFsyLDRdKSx0KGUsWzIsNV0pLHQoZSxbMiw2XSldLGRlZmF1bHRBY3Rpb25zOns0OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIF8seCx3LGssVCxFLEMsUyxBLE09e307Oyl7aWYodz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbd10/az10aGlzLmRlZmF1bHRBY3Rpb25zW3ddOihudWxsPT1fJiYoXz1iKCkpLGs9b1t3XSYmb1t3XVtfXSksdm9pZCAwPT09a3x8IWsubGVuZ3RofHwha1swXSl7dmFyIE49IiI7Zm9yKEUgaW4gQT1bXSxvW3ddKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO049cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyhfPT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyIpLHRoaXMucGFyc2VFcnJvcihOLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW19dfHxfLGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYoa1swXWluc3RhbmNlb2YgQXJyYXkmJmsubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit3KyIsIHRva2VuOiAiK18pO3N3aXRjaChrWzBdKXtjYXNlIDE6bi5wdXNoKF8pLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2goa1sxXSksXz1udWxsLHg/KF89eCx4PW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LGtbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2tbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0scj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dCgpfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gNDtjYXNlIDE6cmV0dXJuIDk7Y2FzZSAyOnJldHVybiJzcGFjZSI7Y2FzZSAzOnJldHVybiAxMDtjYXNlIDQ6cmV0dXJuIDY7Y2FzZSA1OnJldHVybiJUWFQifX0scnVsZXM6Wy9eKD86aW5mb1xiKS9pLC9eKD86W1xzXG5ccl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzpzaG93SW5mb1xiKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0lOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGkoKXt0aGlzLnl5PXt9fXJldHVybiBuLmxleGVyPXIsaS5wcm90b3R5cGU9bixuLlBhcnNlcj1pLG5ldyBpfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oMTQyOCkucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSw1OTYzOih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw0XSxuPVsxLDVdLHI9WzEsNl0saT1bMSw3XSxhPVsxLDldLG89WzEsMTEsMTMsMjAsMjEsMjIsMjNdLHM9WzIsNV0sYz1bMSw2LDExLDEzLDIwLDIxLDIyLDIzXSx1PVsyMCwyMSwyMl0sbD1bMiw4XSxoPVsxLDE4XSxmPVsxLDE5XSxkPVsxLDI0XSxwPVs2LDIwLDIxLDIyLDIzXSx5PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxkaXJlY3RpdmU6NSxQSUU6Nixkb2N1bWVudDo3LHNob3dEYXRhOjgsbGluZTo5LHN0YXRlbWVudDoxMCx0eHQ6MTEsdmFsdWU6MTIsdGl0bGU6MTMsdGl0bGVfdmFsdWU6MTQsb3BlbkRpcmVjdGl2ZToxNSx0eXBlRGlyZWN0aXZlOjE2LGNsb3NlRGlyZWN0aXZlOjE3LCI6IjoxOCxhcmdEaXJlY3RpdmU6MTksTkVXTElORToyMCwiOyI6MjEsRU9GOjIyLG9wZW5fZGlyZWN0aXZlOjIzLHR5cGVfZGlyZWN0aXZlOjI0LGFyZ19kaXJlY3RpdmU6MjUsY2xvc2VfZGlyZWN0aXZlOjI2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJQSUUiLDg6InNob3dEYXRhIiwxMToidHh0IiwxMjoidmFsdWUiLDEzOiJ0aXRsZSIsMTQ6InRpdGxlX3ZhbHVlIiwxODoiOiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIiwyMzoib3Blbl9kaXJlY3RpdmUiLDI0OiJ0eXBlX2RpcmVjdGl2ZSIsMjU6ImFyZ19kaXJlY3RpdmUiLDI2OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsM10sWzcsMF0sWzcsMl0sWzksMl0sWzEwLDBdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFs1LDNdLFs1LDVdLFs0LDFdLFs0LDFdLFs0LDFdLFsxNSwxXSxbMTYsMV0sWzE5LDFdLFsxNywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6ci5zZXRTaG93RGF0YSghMCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA5OnIuYWRkU2VjdGlvbihhW3MtMV0sci5jbGVhbnVwVmFsdWUoYVtzXSkpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0VGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxODpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxOTphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjA6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIil9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHsxOlszXX0sezM6MTAsNDoyLDU6Myw2OmUsMTU6OCwyMDpuLDIxOnIsMjI6aSwyMzphfSx7MzoxMSw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHQobyxzLHs3OjEyLDg6WzEsMTNdfSksdChjLFsyLDE0XSksdChjLFsyLDE1XSksdChjLFsyLDE2XSksezE2OjE0LDI0OlsxLDE1XX0sezI0OlsyLDE3XX0sezE6WzIsMV19LHsxOlsyLDJdfSx0KHUsbCx7MTU6OCw5OjE2LDEwOjE3LDU6MjAsMTpbMiwzXSwxMTpoLDEzOmYsMjM6YX0pLHQobyxzLHs3OjIxfSksezE3OjIyLDE4OlsxLDIzXSwyNjpkfSx0KFsxOCwyNl0sWzIsMThdKSx0KG8sWzIsNl0pLHs0OjI1LDIwOm4sMjE6ciwyMjppfSx7MTI6WzEsMjZdfSx7MTQ6WzEsMjddfSx0KHUsWzIsMTFdKSx0KHUsbCx7MTU6OCw5OjE2LDEwOjE3LDU6MjAsMTpbMiw0XSwxMTpoLDEzOmYsMjM6YX0pLHQocCxbMiwxMl0pLHsxOToyOCwyNTpbMSwyOV19LHQocCxbMiwyMF0pLHQobyxbMiw3XSksdCh1LFsyLDldKSx0KHUsWzIsMTBdKSx7MTc6MzAsMjY6ZH0sezI2OlsyLDE5XX0sdChwLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOns5OlsyLDE3XSwxMDpbMiwxXSwxMTpbMiwyXSwyOTpbMiwxOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxnPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIzO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyNDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTg7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgNDpyZXR1cm4gMjU7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDIwO2Nhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDExOnJldHVybiB0aGlzLnBvcFN0YXRlKCksInRpdGxlX3ZhbHVlIjtjYXNlIDEyOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuInR4dCI7Y2FzZSAxNTpyZXR1cm4gNjtjYXNlIDE2OnJldHVybiA4O2Nhc2UgMTc6cmV0dXJuInZhbHVlIjtjYXNlIDE4OnJldHVybiAyMn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/Oltcc10rKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86cGllXGIpL2ksL14oPzpzaG93RGF0YVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOlsxMV0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTIsMTUsMTYsMTcsMThdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBtKCl7dGhpcy55eT17fX1yZXR1cm4geS5sZXhlcj1nLG0ucHJvdG90eXBlPXkseS5QYXJzZXI9bSxuZXcgbX0oKTtlLnBhcnNlcj1yLGUuUGFyc2VyPXIuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5wYXJzZS5hcHBseShyLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbih0KXt0WzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3RbMF0rIiBGSUxFIikscHJvY2Vzcy5leGl0KDEpKTt2YXIgcj1uKDQ1NTEpLnJlYWRGaWxlU3luYyhuKDY0NzApLm5vcm1hbGl6ZSh0WzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShyKX0sbi5jW24uc109PT10JiZlLm1haW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDEpKX0sNjQ2MzoodCxlLG4pPT57dD1uLm5tZCh0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsM10sbj1bMSw1XSxyPVsxLDE3XSxpPVsyLDEwXSxhPVsxLDIxXSxvPVsxLDIyXSxzPVsxLDIzXSxjPVsxLDI0XSx1PVsxLDI1XSxsPVsxLDI2XSxoPVsxLDE5XSxmPVsxLDI3XSxkPVsxLDI4XSxwPVsxLDMxXSx5PVs2Niw2N10sZz1bNSw4LDE0LDM1LDM2LDM3LDM4LDM5LDQwLDQ4LDU1LDU3LDY2LDY3XSxtPVs1LDYsOCwxNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw2Niw2N10sdj1bMSw1MV0sYj1bMSw1Ml0sXz1bMSw1M10seD1bMSw1NF0sdz1bMSw1NV0saz1bMSw1Nl0sVD1bMSw1N10sRT1bNTcsNThdLEM9WzEsNjldLFM9WzEsNjVdLEE9WzEsNjZdLE09WzEsNjddLE49WzEsNjhdLEQ9WzEsNzBdLE89WzEsNzRdLEI9WzEsNzVdLEw9WzEsNzJdLEk9WzEsNzNdLFI9WzUsOCwxNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw2Niw2N10sRj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsTkVXTElORTo1LFJEOjYsZGlhZ3JhbTo3LEVPRjo4LG9wZW5EaXJlY3RpdmU6OSx0eXBlRGlyZWN0aXZlOjEwLGNsb3NlRGlyZWN0aXZlOjExLCI6IjoxMixhcmdEaXJlY3RpdmU6MTMsb3Blbl9kaXJlY3RpdmU6MTQsdHlwZV9kaXJlY3RpdmU6MTUsYXJnX2RpcmVjdGl2ZToxNixjbG9zZV9kaXJlY3RpdmU6MTcscmVxdWlyZW1lbnREZWY6MTgsZWxlbWVudERlZjoxOSxyZWxhdGlvbnNoaXBEZWY6MjAscmVxdWlyZW1lbnRUeXBlOjIxLHJlcXVpcmVtZW50TmFtZToyMixTVFJVQ1RfU1RBUlQ6MjMscmVxdWlyZW1lbnRCb2R5OjI0LElEOjI1LENPTE9OU0VQOjI2LGlkOjI3LFRFWFQ6MjgsdGV4dDoyOSxSSVNLOjMwLHJpc2tMZXZlbDozMSxWRVJJRllNVEhEOjMyLHZlcmlmeVR5cGU6MzMsU1RSVUNUX1NUT1A6MzQsUkVRVUlSRU1FTlQ6MzUsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDozNixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6MzcsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6MzgsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6MzksREVTSUdOX0NPTlNUUkFJTlQ6NDAsTE9XX1JJU0s6NDEsTUVEX1JJU0s6NDIsSElHSF9SSVNLOjQzLFZFUklGWV9BTkFMWVNJUzo0NCxWRVJJRllfREVNT05TVFJBVElPTjo0NSxWRVJJRllfSU5TUEVDVElPTjo0NixWRVJJRllfVEVTVDo0NyxFTEVNRU5UOjQ4LGVsZW1lbnROYW1lOjQ5LGVsZW1lbnRCb2R5OjUwLFRZUEU6NTEsdHlwZTo1MixET0NSRUY6NTMscmVmOjU0LEVORF9BUlJPV19MOjU1LHJlbGF0aW9uc2hpcDo1NixMSU5FOjU3LEVORF9BUlJPV19SOjU4LENPTlRBSU5TOjU5LENPUElFUzo2MCxERVJJVkVTOjYxLFNBVElTRklFUzo2MixWRVJJRklFUzo2MyxSRUZJTkVTOjY0LFRSQUNFUzo2NSx1bnFTdHJpbmc6NjYscVN0cmluZzo2NywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiTkVXTElORSIsNjoiUkQiLDg6IkVPRiIsMTI6IjoiLDE0OiJvcGVuX2RpcmVjdGl2ZSIsMTU6InR5cGVfZGlyZWN0aXZlIiwxNjoiYXJnX2RpcmVjdGl2ZSIsMTc6ImNsb3NlX2RpcmVjdGl2ZSIsMjM6IlNUUlVDVF9TVEFSVCIsMjU6IklEIiwyNjoiQ09MT05TRVAiLDI4OiJURVhUIiwzMDoiUklTSyIsMzI6IlZFUklGWU1USEQiLDM0OiJTVFJVQ1RfU1RPUCIsMzU6IlJFUVVJUkVNRU5UIiwzNjoiRlVOQ1RJT05BTF9SRVFVSVJFTUVOVCIsMzc6IklOVEVSRkFDRV9SRVFVSVJFTUVOVCIsMzg6IlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UIiwzOToiUEhZU0lDQUxfUkVRVUlSRU1FTlQiLDQwOiJERVNJR05fQ09OU1RSQUlOVCIsNDE6IkxPV19SSVNLIiw0MjoiTUVEX1JJU0siLDQzOiJISUdIX1JJU0siLDQ0OiJWRVJJRllfQU5BTFlTSVMiLDQ1OiJWRVJJRllfREVNT05TVFJBVElPTiIsNDY6IlZFUklGWV9JTlNQRUNUSU9OIiw0NzoiVkVSSUZZX1RFU1QiLDQ4OiJFTEVNRU5UIiw1MToiVFlQRSIsNTM6IkRPQ1JFRiIsNTU6IkVORF9BUlJPV19MIiw1NzoiTElORSIsNTg6IkVORF9BUlJPV19SIiw1OToiQ09OVEFJTlMiLDYwOiJDT1BJRVMiLDYxOiJERVJJVkVTIiw2MjoiU0FUSVNGSUVTIiw2MzoiVkVSSUZJRVMiLDY0OiJSRUZJTkVTIiw2NToiVFJBQ0VTIiw2NjoidW5xU3RyaW5nIiw2NzoicVN0cmluZyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbMyw0XSxbNCwzXSxbNCw1XSxbOSwxXSxbMTAsMV0sWzEzLDFdLFsxMSwxXSxbNywwXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbMTgsNV0sWzI0LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDVdLFsyNCwyXSxbMjQsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdLFsxOSw1XSxbNTAsNV0sWzUwLDVdLFs1MCwyXSxbNTAsMV0sWzIwLDVdLFsyMCw1XSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzIyLDFdLFsyMiwxXSxbMjcsMV0sWzI3LDFdLFsyOSwxXSxbMjksMV0sWzQ5LDFdLFs0OSwxXSxbNTIsMV0sWzUyLDFdLFs1NCwxXSxbNTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA2OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA3OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDg6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDk6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIik7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNjpyLmFkZFJlcXVpcmVtZW50KGFbcy0zXSxhW3MtNF0pO2JyZWFrO2Nhc2UgMTc6ci5zZXROZXdSZXFJZChhW3MtMl0pO2JyZWFrO2Nhc2UgMTg6ci5zZXROZXdSZXFUZXh0KGFbcy0yXSk7YnJlYWs7Y2FzZSAxOTpyLnNldE5ld1JlcVJpc2soYVtzLTJdKTticmVhaztjYXNlIDIwOnIuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKGFbcy0yXSk7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI1OnRoaXMuJD1yLlJlcXVpcmVtZW50VHlwZS5JTlRFUkZBQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuREVTSUdOX0NPTlNUUkFJTlQ7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9ci5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9ci5SaXNrTGV2ZWwuTUVEX1JJU0s7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9ci5SaXNrTGV2ZWwuSElHSF9SSVNLO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfSU5TUEVDVElPTjticmVhaztjYXNlIDM1OnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSAzNjpyLmFkZEVsZW1lbnQoYVtzLTNdKTticmVhaztjYXNlIDM3OnIuc2V0TmV3RWxlbWVudFR5cGUoYVtzLTJdKTticmVhaztjYXNlIDM4OnIuc2V0TmV3RWxlbWVudERvY1JlZihhW3MtMl0pO2JyZWFrO2Nhc2UgNDE6ci5hZGRSZWxhdGlvbnNoaXAoYVtzLTJdLGFbc10sYVtzLTRdKTticmVhaztjYXNlIDQyOnIuYWRkUmVsYXRpb25zaGlwKGFbcy0yXSxhW3MtNF0sYVtzXSk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5DT1BJRVM7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLkRFUklWRVM7YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDQ3OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuVkVSSUZJRVM7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlJFRklORVM7YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlRSQUNFU319LHRhYmxlOlt7MzoxLDQ6Miw2OmUsOTo0LDE0Om59LHsxOlszXX0sezM6Nyw0OjIsNTpbMSw2XSw2OmUsOTo0LDE0Om59LHs1OlsxLDhdfSx7MTA6OSwxNTpbMSwxMF19LHsxNTpbMiw2XX0sezM6MTEsNDoyLDY6ZSw5OjQsMTQ6bn0sezE6WzIsMl19LHs0OjE2LDU6ciw3OjEyLDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezExOjI5LDEyOlsxLDMwXSwxNzpwfSx0KFsxMiwxN10sWzIsN10pLHsxOlsyLDFdfSx7ODpbMSwzMl19LHs0OjE2LDU6ciw3OjMzLDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzQsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNSw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM2LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzcsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7MjI6MzgsNjY6WzEsMzldLDY3OlsxLDQwXX0sezQ5OjQxLDY2OlsxLDQyXSw2NzpbMSw0M119LHs1NTpbMSw0NF0sNTc6WzEsNDVdfSx0KHksWzIsMjNdKSx0KHksWzIsMjRdKSx0KHksWzIsMjVdKSx0KHksWzIsMjZdKSx0KHksWzIsMjddKSx0KHksWzIsMjhdKSx0KGcsWzIsNTJdKSx0KGcsWzIsNTNdKSx0KG0sWzIsNF0pLHsxMzo0NiwxNjpbMSw0N119LHQobSxbMiw5XSksezE6WzIsM119LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7ODpbMiwxM119LHs4OlsyLDE0XX0sezg6WzIsMTVdfSx7MjM6WzEsNDhdfSx7MjM6WzIsNTBdfSx7MjM6WzIsNTFdfSx7MjM6WzEsNDldfSx7MjM6WzIsNTZdfSx7MjM6WzIsNTddfSx7NTY6NTAsNTk6diw2MDpiLDYxOl8sNjI6eCw2Mzp3LDY0OmssNjU6VH0sezU2OjU4LDU5OnYsNjA6Yiw2MTpfLDYyOngsNjM6dyw2NDprLDY1OlR9LHsxMTo1OSwxNzpwfSx7MTc6WzIsOF19LHs1OlsxLDYwXX0sezU6WzEsNjFdfSx7NTc6WzEsNjJdfSx0KEUsWzIsNDNdKSx0KEUsWzIsNDRdKSx0KEUsWzIsNDVdKSx0KEUsWzIsNDZdKSx0KEUsWzIsNDddKSx0KEUsWzIsNDhdKSx0KEUsWzIsNDldKSx7NTg6WzEsNjNdfSx0KG0sWzIsNV0pLHs1OkMsMjQ6NjQsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx7NTpPLDM0OkIsNTA6NzEsNTE6TCw1MzpJfSx7Mjc6NzYsNjY6Ziw2NzpkfSx7Mjc6NzcsNjY6Ziw2NzpkfSx0KFIsWzIsMTZdKSx7MjY6WzEsNzhdfSx7MjY6WzEsNzldfSx7MjY6WzEsODBdfSx7MjY6WzEsODFdfSx7NTpDLDI0OjgyLDI1OlMsMjg6QSwzMDpNLDMyOk4sMzQ6RH0sdChSLFsyLDIyXSksdChSLFsyLDM2XSksezI2OlsxLDgzXX0sezI2OlsxLDg0XX0sezU6TywzNDpCLDUwOjg1LDUxOkwsNTM6SX0sdChSLFsyLDQwXSksdChSLFsyLDQxXSksdChSLFsyLDQyXSksezI3Ojg2LDY2OmYsNjc6ZH0sezI5Ojg3LDY2OlsxLDg4XSw2NzpbMSw4OV19LHszMTo5MCw0MTpbMSw5MV0sNDI6WzEsOTJdLDQzOlsxLDkzXX0sezMzOjk0LDQ0OlsxLDk1XSw0NTpbMSw5Nl0sNDY6WzEsOTddLDQ3OlsxLDk4XX0sdChSLFsyLDIxXSksezUyOjk5LDY2OlsxLDEwMF0sNjc6WzEsMTAxXX0sezU0OjEwMiw2NjpbMSwxMDNdLDY3OlsxLDEwNF19LHQoUixbMiwzOV0pLHs1OlsxLDEwNV19LHs1OlsxLDEwNl19LHs1OlsyLDU0XX0sezU6WzIsNTVdfSx7NTpbMSwxMDddfSx7NTpbMiwyOV19LHs1OlsyLDMwXX0sezU6WzIsMzFdfSx7NTpbMSwxMDhdfSx7NTpbMiwzMl19LHs1OlsyLDMzXX0sezU6WzIsMzRdfSx7NTpbMiwzNV19LHs1OlsxLDEwOV19LHs1OlsyLDU4XX0sezU6WzIsNTldfSx7NTpbMSwxMTBdfSx7NTpbMiw2MF19LHs1OlsyLDYxXX0sezU6QywyNDoxMTEsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx7NTpDLDI0OjExMiwyNTpTLDI4OkEsMzA6TSwzMjpOLDM0OkR9LHs1OkMsMjQ6MTEzLDI1OlMsMjg6QSwzMDpNLDMyOk4sMzQ6RH0sezU6QywyNDoxMTQsMjU6UywyODpBLDMwOk0sMzI6TiwzNDpEfSx7NTpPLDM0OkIsNTA6MTE1LDUxOkwsNTM6SX0sezU6TywzNDpCLDUwOjExNiw1MTpMLDUzOkl9LHQoUixbMiwxN10pLHQoUixbMiwxOF0pLHQoUixbMiwxOV0pLHQoUixbMiwyMF0pLHQoUixbMiwzN10pLHQoUixbMiwzOF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiw2XSw3OlsyLDJdLDExOlsyLDFdLDMyOlsyLDNdLDMzOlsyLDExXSwzNDpbMiwxMl0sMzU6WzIsMTNdLDM2OlsyLDE0XSwzNzpbMiwxNV0sMzk6WzIsNTBdLDQwOlsyLDUxXSw0MjpbMiw1Nl0sNDM6WzIsNTddLDQ3OlsyLDhdLDg4OlsyLDU0XSw4OTpbMiw1NV0sOTE6WzIsMjldLDkyOlsyLDMwXSw5MzpbMiwzMV0sOTU6WzIsMzJdLDk2OlsyLDMzXSw5NzpbMiwzNF0sOTg6WzIsMzVdLDEwMDpbMiw1OF0sMTAxOlsyLDU5XSwxMDM6WzIsNjBdLDEwNDpbMiw2MV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxQPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTI7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgNDpyZXR1cm4gMTY7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gODtjYXNlIDEwOnJldHVybiA2O2Nhc2UgMTE6cmV0dXJuIDIzO2Nhc2UgMTI6cmV0dXJuIDM0O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6cmV0dXJuIDI1O2Nhc2UgMTU6cmV0dXJuIDI4O2Nhc2UgMTY6cmV0dXJuIDMwO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDM2O2Nhc2UgMjA6cmV0dXJuIDM3O2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6cmV0dXJuIDQwO2Nhc2UgMjQ6cmV0dXJuIDQxO2Nhc2UgMjU6cmV0dXJuIDQyO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQ0O2Nhc2UgMjg6cmV0dXJuIDQ1O2Nhc2UgMjk6cmV0dXJuIDQ2O2Nhc2UgMzA6cmV0dXJuIDQ3O2Nhc2UgMzE6cmV0dXJuIDQ4O2Nhc2UgMzI6cmV0dXJuIDU5O2Nhc2UgMzM6cmV0dXJuIDYwO2Nhc2UgMzQ6cmV0dXJuIDYxO2Nhc2UgMzU6cmV0dXJuIDYyO2Nhc2UgMzY6cmV0dXJuIDYzO2Nhc2UgMzc6cmV0dXJuIDY0O2Nhc2UgMzg6cmV0dXJuIDY1O2Nhc2UgMzk6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIDUzO2Nhc2UgNDE6cmV0dXJuIDU1O2Nhc2UgNDI6cmV0dXJuIDU4O2Nhc2UgNDM6cmV0dXJuIDU3O2Nhc2UgNDQ6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4icVN0cmluZyI7Y2FzZSA0NzpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDY2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGooKXt0aGlzLnl5PXt9fXJldHVybiBGLmxleGVyPVAsai5wcm90b3R5cGU9RixGLlBhcnNlcj1qLG5ldyBqfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oODgwMCkucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSw5OTIzOih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMTldLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjNdLGQ9WzEsMjldLHA9WzEsMzBdLHk9WzEsMzFdLGc9WzEsMzJdLG09WzEsMzNdLHY9WzEsMzRdLGI9WzEsMzddLF89WzEsMzhdLHg9WzEsMzldLHc9WzEsNDBdLGs9WzEsNDFdLFQ9WzEsNDJdLEU9WzEsNDVdLEM9WzEsNCw1LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDMzLDM0LDM1LDM2LDM4LDQwLDQxLDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxTPVsxLDU4XSxBPVs0LDUsMTYsMjAsMjIsMjMsMjQsMzAsMzIsMzMsMzQsMzUsMzYsMzgsNDIsNDYsNDcsNDgsNDksNTcsNjddLE09WzQsNSwxNiwyMCwyMiwyMywyNCwzMCwzMiwzMywzNCwzNSwzNiwzOCw0MSw0Miw0Niw0Nyw0OCw0OSw1Nyw2N10sTj1bNCw1LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDMzLDM0LDM1LDM2LDM4LDQwLDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxEPVs1NSw1Niw1N10sTz1bMSw0LDUsNywxNiwyMCwyMiwyMywyNCwzMCwzMiwzMywzNCwzNSwzNiwzOCw0MCw0MSw0Miw0Niw0Nyw0OCw0OSw1Nyw2N10sQj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxwYXJ0aWNpcGFudF9hY3RvcjoyMCxzaWduYWw6MjEsYXV0b251bWJlcjoyMixhY3RpdmF0ZToyMyxkZWFjdGl2YXRlOjI0LG5vdGVfc3RhdGVtZW50OjI1LGxpbmtzX3N0YXRlbWVudDoyNixsaW5rX3N0YXRlbWVudDoyNyxwcm9wZXJ0aWVzX3N0YXRlbWVudDoyOCxkZXRhaWxzX3N0YXRlbWVudDoyOSx0aXRsZTozMCx0ZXh0MjozMSxsb29wOjMyLGVuZDozMyxyZWN0OjM0LG9wdDozNSxhbHQ6MzYsZWxzZV9zZWN0aW9uczozNyxwYXI6MzgscGFyX3NlY3Rpb25zOjM5LGFuZDo0MCxlbHNlOjQxLG5vdGU6NDIscGxhY2VtZW50OjQzLG92ZXI6NDQsYWN0b3JfcGFpcjo0NSxsaW5rczo0NixsaW5rOjQ3LHByb3BlcnRpZXM6NDgsZGV0YWlsczo0OSxzcGFjZUxpc3Q6NTAsIiwiOjUxLGxlZnRfb2Y6NTIscmlnaHRfb2Y6NTMsc2lnbmFsdHlwZTo1NCwiKyI6NTUsIi0iOjU2LEFDVE9SOjU3LFNPTElEX09QRU5fQVJST1c6NTgsRE9UVEVEX09QRU5fQVJST1c6NTksU09MSURfQVJST1c6NjAsRE9UVEVEX0FSUk9XOjYxLFNPTElEX0NST1NTOjYyLERPVFRFRF9DUk9TUzo2MyxTT0xJRF9QT0lOVDo2NCxET1RURURfUE9JTlQ6NjUsVFhUOjY2LG9wZW5fZGlyZWN0aXZlOjY3LHR5cGVfZGlyZWN0aXZlOjY4LGFyZ19kaXJlY3RpdmU6NjksY2xvc2VfZGlyZWN0aXZlOjcwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkVXTElORSIsNzoiU0QiLDE0OiI6IiwxNjoicGFydGljaXBhbnQiLDE4OiJBUyIsMTk6InJlc3RPZkxpbmUiLDIwOiJwYXJ0aWNpcGFudF9hY3RvciIsMjI6ImF1dG9udW1iZXIiLDIzOiJhY3RpdmF0ZSIsMjQ6ImRlYWN0aXZhdGUiLDMwOiJ0aXRsZSIsMzI6Imxvb3AiLDMzOiJlbmQiLDM0OiJyZWN0IiwzNToib3B0IiwzNjoiYWx0IiwzODoicGFyIiw0MDoiYW5kIiw0MToiZWxzZSIsNDI6Im5vdGUiLDQ0OiJvdmVyIiw0NjoibGlua3MiLDQ3OiJsaW5rIiw0ODoicHJvcGVydGllcyIsNDk6ImRldGFpbHMiLDUxOiIsIiw1MjoibGVmdF9vZiIsNTM6InJpZ2h0X29mIiw1NToiKyIsNTY6Ii0iLDU3OiJBQ1RPUiIsNTg6IlNPTElEX09QRU5fQVJST1ciLDU5OiJET1RURURfT1BFTl9BUlJPVyIsNjA6IlNPTElEX0FSUk9XIiw2MToiRE9UVEVEX0FSUk9XIiw2MjoiU09MSURfQ1JPU1MiLDYzOiJET1RURURfQ1JPU1MiLDY0OiJTT0xJRF9QT0lOVCIsNjU6IkRPVFRFRF9QT0lOVCIsNjY6IlRYVCIsNjc6Im9wZW5fZGlyZWN0aXZlIiw2ODoidHlwZV9kaXJlY3RpdmUiLDY5OiJhcmdfZGlyZWN0aXZlIiw3MDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDJdLFs4LDBdLFs4LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs2LDRdLFs2LDZdLFsxMCw1XSxbMTAsM10sWzEwLDVdLFsxMCwzXSxbMTAsMl0sWzEwLDFdLFsxMCwzXSxbMTAsM10sWzEwLDJdLFsxMCwyXSxbMTAsMl0sWzEwLDJdLFsxMCwyXSxbMTAsM10sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsMV0sWzM5LDFdLFszOSw0XSxbMzcsMV0sWzM3LDRdLFsyNSw0XSxbMjUsNF0sWzI2LDNdLFsyNywzXSxbMjgsM10sWzI5LDNdLFs1MCwyXSxbNTAsMV0sWzQ1LDNdLFs0NSwxXSxbNDMsMV0sWzQzLDFdLFsyMSw1XSxbMjEsNV0sWzIxLDRdLFsxNywxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFszMSwxXSxbMTEsMV0sWzEyLDFdLFsxNSwxXSxbMTMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLmFwcGx5KGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjphW3MtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGFbcy0zXS5kZXNjcmlwdGlvbj1yLnBhcnNlTWVzc2FnZShhW3MtMV0pLHRoaXMuJD1hW3MtM107YnJlYWs7Y2FzZSAxMzphW3MtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNDphW3MtM10udHlwZT0iYWRkQWN0b3IiLGFbcy0zXS5kZXNjcmlwdGlvbj1yLnBhcnNlTWVzc2FnZShhW3MtMV0pLHRoaXMuJD1hW3MtM107YnJlYWs7Y2FzZSAxNTphW3MtMV0udHlwZT0iYWRkQWN0b3IiLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNzpyLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19O2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9W3t0eXBlOiJzZXRUaXRsZSIsdGV4dDphW3MtMV19XTticmVhaztjYXNlIDI2OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6YVtzLTJdLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyNzphW3MtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5SRUNUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI4OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5PUFRfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjk6YVtzLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDMwOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfQU5EfSxhW3NdXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX0VMU0V9LGFbc11dKTticmVhaztjYXNlIDM2OnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6YVtzLTJdLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDM3OmFbcy0yXT1bXS5jb25jYXQoYVtzLTFdLGFbcy0xXSkuc2xpY2UoMCwyKSxhW3MtMl1bMF09YVtzLTJdWzBdLmFjdG9yLGFbcy0yXVsxXT1hW3MtMl1bMV0uYWN0b3IsdGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpyLlBMQUNFTUVOVC5PVkVSLGFjdG9yOmFbcy0yXS5zbGljZSgwLDIpLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZExpbmtzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkQUxpbmsiLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGRQcm9wZXJ0aWVzIixhY3RvcjphW3MtMV0uYWN0b3IsdGV4dDphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkRGV0YWlscyIsYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPVthW3MtMl0sYVtzXV07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDQ2OnRoaXMuJD1yLlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5QTEFDRU1FTlQuUklHSFRPRjticmVhaztjYXNlIDQ4OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6YVtzLTFdfV07YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9W2Fbcy00XSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTRdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0zXSxtc2c6YVtzXX0se3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTRdfV07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9W2Fbcy0zXSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTNdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0yXSxtc2c6YVtzXX1dO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXt0eXBlOiJhZGRQYXJ0aWNpcGFudCIsYWN0b3I6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9PUEVOO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDU1OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRDticmVhaztjYXNlIDU2OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPXIuTElORVRZUEUuU09MSURfUE9JTlQ7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfUE9JTlQ7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9ci5wYXJzZU1lc3NhZ2UoYVtzXS50cmltKCkuc3Vic3RyaW5nKDEpKTticmVhaztjYXNlIDYxOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA2MjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA2MzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjQ6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwic2VxdWVuY2UiKX19LHRhYmxlOlt7MzoxLDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDY3Oml9LHsxOlszXX0sezM6OCw0OmUsNTpuLDY6NCw3OnIsMTE6Niw2NzppfSx7Mzo5LDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDY3Oml9LHszOjEwLDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDY3Oml9LHQoWzEsNCw1LDE2LDIwLDIyLDIzLDI0LDMwLDMyLDM0LDM1LDM2LDM4LDQyLDQ2LDQ3LDQ4LDQ5LDU3LDY3XSxhLHs4OjExfSksezEyOjEyLDY4OlsxLDEzXX0sezY4OlsyLDYxXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0sezE6WzIsNF0sNDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDM0OnksMzU6ZywzNjptLDM4OnYsNDI6Yiw0NjpfLDQ3OngsNDg6dyw0OTprLDU3OlQsNjc6aX0sezEzOjQzLDE0OlsxLDQ0XSw3MDpFfSx0KFsxNCw3MF0sWzIsNjJdKSx0KEMsWzIsNl0pLHs2OjM1LDEwOjQ2LDExOjYsMTY6YywxNzozNiwyMDp1LDIxOjIwLDIyOmwsMjM6aCwyNDpmLDI1OjI0LDI2OjI1LDI3OjI2LDI4OjI3LDI5OjI4LDMwOmQsMzI6cCwzNDp5LDM1OmcsMzY6bSwzODp2LDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHQoQyxbMiw4XSksdChDLFsyLDldKSx7MTc6NDcsNTc6VH0sezE3OjQ4LDU3OlR9LHs1OlsxLDQ5XX0sdChDLFsyLDE3XSksezE3OjUwLDU3OlR9LHsxNzo1MSw1NzpUfSx7NTpbMSw1Ml19LHs1OlsxLDUzXX0sezU6WzEsNTRdfSx7NTpbMSw1NV19LHs1OlsxLDU2XX0sezMxOjU3LDY2OlN9LHsxOTpbMSw1OV19LHsxOTpbMSw2MF19LHsxOTpbMSw2MV19LHsxOTpbMSw2Ml19LHsxOTpbMSw2M119LHQoQyxbMiwzMV0pLHs1NDo2NCw1ODpbMSw2NV0sNTk6WzEsNjZdLDYwOlsxLDY3XSw2MTpbMSw2OF0sNjI6WzEsNjldLDYzOlsxLDcwXSw2NDpbMSw3MV0sNjU6WzEsNzJdfSx7NDM6NzMsNDQ6WzEsNzRdLDUyOlsxLDc1XSw1MzpbMSw3Nl19LHsxNzo3Nyw1NzpUfSx7MTc6NzgsNTc6VH0sezE3Ojc5LDU3OlR9LHsxNzo4MCw1NzpUfSx0KFs1LDE4LDUxLDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2XSxbMiw1MV0pLHs1OlsxLDgxXX0sezE1OjgyLDY5OlsxLDgzXX0sezU6WzIsNjRdfSx0KEMsWzIsN10pLHs1OlsxLDg1XSwxODpbMSw4NF19LHs1OlsxLDg3XSwxODpbMSw4Nl19LHQoQyxbMiwxNl0pLHs1OlsxLDg4XX0sezU6WzEsODldfSx0KEMsWzIsMjBdKSx0KEMsWzIsMjFdKSx0KEMsWzIsMjJdKSx0KEMsWzIsMjNdKSx0KEMsWzIsMjRdKSx7NTpbMSw5MF19LHs1OlsyLDYwXX0sdChBLGEsezg6OTF9KSx0KEEsYSx7ODo5Mn0pLHQoQSxhLHs4OjkzfSksdChNLGEsezM3Ojk0LDg6OTV9KSx0KE4sYSx7Mzk6OTYsODo5N30pLHsxNzoxMDAsNTU6WzEsOThdLDU2OlsxLDk5XSw1NzpUfSx0KEQsWzIsNTJdKSx0KEQsWzIsNTNdKSx0KEQsWzIsNTRdKSx0KEQsWzIsNTVdKSx0KEQsWzIsNTZdKSx0KEQsWzIsNTddKSx0KEQsWzIsNThdKSx0KEQsWzIsNTldKSx7MTc6MTAxLDU3OlR9LHsxNzoxMDMsNDU6MTAyLDU3OlR9LHs1NzpbMiw0Nl19LHs1NzpbMiw0N119LHszMToxMDQsNjY6U30sezMxOjEwNSw2NjpTfSx7MzE6MTA2LDY2OlN9LHszMToxMDcsNjY6U30sdChPLFsyLDEwXSksezEzOjEwOCw3MDpFfSx7NzA6WzIsNjNdfSx7MTk6WzEsMTA5XX0sdChDLFsyLDEzXSksezE5OlsxLDExMF19LHQoQyxbMiwxNV0pLHQoQyxbMiwxOF0pLHQoQyxbMiwxOV0pLHQoQyxbMiwyNV0pLHs0Om8sNTpzLDY6MzUsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzYsMjA6dSwyMToyMCwyMjpsLDIzOmgsMjQ6ZiwyNToyNCwyNjoyNSwyNzoyNiwyODoyNywyOToyOCwzMDpkLDMyOnAsMzM6WzEsMTExXSwzNDp5LDM1OmcsMzY6bSwzODp2LDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHs0Om8sNTpzLDY6MzUsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzYsMjA6dSwyMToyMCwyMjpsLDIzOmgsMjQ6ZiwyNToyNCwyNjoyNSwyNzoyNiwyODoyNywyOToyOCwzMDpkLDMyOnAsMzM6WzEsMTEyXSwzNDp5LDM1OmcsMzY6bSwzODp2LDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHs0Om8sNTpzLDY6MzUsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzYsMjA6dSwyMToyMCwyMjpsLDIzOmgsMjQ6ZiwyNToyNCwyNjoyNSwyNzoyNiwyODoyNywyOToyOCwzMDpkLDMyOnAsMzM6WzEsMTEzXSwzNDp5LDM1OmcsMzY6bSwzODp2LDQyOmIsNDY6Xyw0Nzp4LDQ4OncsNDk6ayw1NzpULDY3Oml9LHszMzpbMSwxMTRdfSx7NDpvLDU6cyw2OjM1LDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjM2LDIwOnUsMjE6MjAsMjI6bCwyMzpoLDI0OmYsMjU6MjQsMjY6MjUsMjc6MjYsMjg6MjcsMjk6MjgsMzA6ZCwzMjpwLDMzOlsyLDM0XSwzNDp5LDM1OmcsMzY6bSwzODp2LDQxOlsxLDExNV0sNDI6Yiw0NjpfLDQ3OngsNDg6dyw0OTprLDU3OlQsNjc6aX0sezMzOlsxLDExNl19LHs0Om8sNTpzLDY6MzUsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzYsMjA6dSwyMToyMCwyMjpsLDIzOmgsMjQ6ZiwyNToyNCwyNjoyNSwyNzoyNiwyODoyNywyOToyOCwzMDpkLDMyOnAsMzM6WzIsMzJdLDM0OnksMzU6ZywzNjptLDM4OnYsNDA6WzEsMTE3XSw0MjpiLDQ2Ol8sNDc6eCw0ODp3LDQ5OmssNTc6VCw2NzppfSx7MTc6MTE4LDU3OlR9LHsxNzoxMTksNTc6VH0sezMxOjEyMCw2NjpTfSx7MzE6MTIxLDY2OlN9LHszMToxMjIsNjY6U30sezUxOlsxLDEyM10sNjY6WzIsNDVdfSx7NTpbMiwzOF19LHs1OlsyLDM5XX0sezU6WzIsNDBdfSx7NTpbMiw0MV19LHs1OlsxLDEyNF19LHs1OlsxLDEyNV19LHs1OlsxLDEyNl19LHQoQyxbMiwyNl0pLHQoQyxbMiwyN10pLHQoQyxbMiwyOF0pLHQoQyxbMiwyOV0pLHsxOTpbMSwxMjddfSx0KEMsWzIsMzBdKSx7MTk6WzEsMTI4XX0sezMxOjEyOSw2NjpTfSx7MzE6MTMwLDY2OlN9LHs1OlsyLDUwXX0sezU6WzIsMzZdfSx7NTpbMiwzN119LHsxNzoxMzEsNTc6VH0sdChPLFsyLDExXSksdChDLFsyLDEyXSksdChDLFsyLDE0XSksdChNLGEsezg6OTUsMzc6MTMyfSksdChOLGEsezg6OTcsMzk6MTMzfSksezU6WzIsNDhdfSx7NTpbMiw0OV19LHs2NjpbMiw0NF19LHszMzpbMiwzNV19LHszMzpbMiwzM119XSxkZWZhdWx0QWN0aW9uczp7NzpbMiw2MV0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDQ1OlsyLDY0XSw1ODpbMiw2MF0sNzU6WzIsNDZdLDc2OlsyLDQ3XSw4MzpbMiw2M10sMTA0OlsyLDM4XSwxMDU6WzIsMzldLDEwNjpbMiw0MF0sMTA3OlsyLDQxXSwxMjA6WzIsNTBdLDEyMTpbMiwzNl0sMTIyOlsyLDM3XSwxMjk6WzIsNDhdLDEzMDpbMiw0OV0sMTMxOlsyLDQ0XSwxMzI6WzIsMzVdLDEzMzpbMiwzM119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgXyx4LHcsayxULEUsQyxTLEEsTT17fTs7KXtpZih3PW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t3XT9rPXRoaXMuZGVmYXVsdEFjdGlvbnNbd106KG51bGw9PV8mJihfPWIoKSksaz1vW3ddJiZvW3ddW19dKSx2b2lkIDA9PT1rfHwhay5sZW5ndGh8fCFrWzBdKXt2YXIgTj0iIjtmb3IoRSBpbiBBPVtdLG9bd10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tj1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW19dfHxfKSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKF89PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIiksdGhpcy5wYXJzZUVycm9yKE4se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX118fF8sbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZihrWzBdaW5zdGFuY2VvZiBBcnJheSYmay5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3crIiwgdG9rZW46ICIrXyk7c3dpdGNoKGtbMF0pe2Nhc2UgMTpuLnB1c2goXyksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaChrWzFdKSxfPW51bGwseD8oXz14LHg9bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksa1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxMPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0KCl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDY3O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw2ODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDcwO2Nhc2UgNDpyZXR1cm4gNjk7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMTY7Y2FzZSAxMjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMDtjYXNlIDEzOnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw1NztjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSwxODtjYXNlIDE1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMyO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNDtjYXNlIDE4OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzU7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MTtjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQwO2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDI0OnJldHVybiAzMztjYXNlIDI1OnJldHVybiA1MjtjYXNlIDI2OnJldHVybiA1MztjYXNlIDI3OnJldHVybiA0NjtjYXNlIDI4OnJldHVybiA0NztjYXNlIDI5OnJldHVybiA0ODtjYXNlIDMwOnJldHVybiA0OTtjYXNlIDMxOnJldHVybiA0NDtjYXNlIDMyOnJldHVybiA0MjtjYXNlIDMzOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzQ6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjQ7Y2FzZSAzNTpyZXR1cm4gMzA7Y2FzZSAzNjpyZXR1cm4gNztjYXNlIDM3OnJldHVybiAyMjtjYXNlIDM4OnJldHVybiA1MTtjYXNlIDM5OnJldHVybiA1O2Nhc2UgNDA6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw1NztjYXNlIDQxOnJldHVybiA2MDtjYXNlIDQyOnJldHVybiA2MTtjYXNlIDQzOnJldHVybiA1ODtjYXNlIDQ0OnJldHVybiA1OTtjYXNlIDQ1OnJldHVybiA2MjtjYXNlIDQ2OnJldHVybiA2MztjYXNlIDQ3OnJldHVybiA2NDtjYXNlIDQ4OnJldHVybiA2NTtjYXNlIDQ5OnJldHVybiA2NjtjYXNlIDUwOnJldHVybiA1NTtjYXNlIDUxOnJldHVybiA1NjtjYXNlIDUyOnJldHVybiA1O2Nhc2UgNTM6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzphY3RvclxiKS9pLC9eKD86W15cLT46XG4sO10rPyg/PSgoPyFcbilccykrYXMoPyFcbilcc3xbI1xuO118JCkpL2ksL14oPzphc1xiKS9pLC9eKD86KD86KSkvaSwvXig/Omxvb3BcYikvaSwvXig/OnJlY3RcYikvaSwvXig/Om9wdFxiKS9pLC9eKD86YWx0XGIpL2ksL14oPzplbHNlXGIpL2ksL14oPzpwYXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OmxpbmtzXGIpL2ksL14oPzpsaW5rXGIpL2ksL14oPzpwcm9wZXJ0aWVzXGIpL2ksL14oPzpkZXRhaWxzXGIpL2ksL14oPzpvdmVyXGIpL2ksL14oPzpub3RlXGIpL2ksL14oPzphY3RpdmF0ZVxiKS9pLC9eKD86ZGVhY3RpdmF0ZVxiKS9pLC9eKD86dGl0bGVcYikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86LCkvaSwvXig/OjspL2ksL14oPzpbXlwrXC0+OlxuLDtdKygoPyEoLXh8LS14fC1cKXwtLVwpKSlbXC1dKlteXCtcLT46XG4sO10rKSopL2ksL14oPzotPj4pL2ksL14oPzotLT4+KS9pLC9eKD86LT4pL2ksL14oPzotLT4pL2ksL14oPzotW3hdKS9pLC9eKD86LS1beF0pL2ksL14oPzotW1wpXSkvaSwvXig/Oi0tW1wpXSkvaSwvXig/OjooPzooPzpubyk/d3JhcCk/W14jXG47XSspL2ksL14oPzpcKykvaSwvXig/Oi0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxLDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDMsOF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDhdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls3LDgsMTNdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOls3LDgsMTQsMTVdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzcsOCwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsOCw5LDEwLDExLDEyLDE2LDE3LDE4LDE5LDIwLDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gSSgpe3RoaXMueXk9e319cmV0dXJuIEIubGV4ZXI9TCxJLnByb3RvdHlwZT1CLEIuUGFyc2VyPUksbmV3IEl9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9bigxOTkzKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDU1Mzc6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsM10scj1bMSw1XSxpPVsxLDddLGE9WzIsNV0sbz1bMSwxNV0scz1bMSwxN10sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwzMF0sZD1bMSwyM10scD1bMSwyNF0seT1bMSwyNV0sZz1bMSwyNl0sbT1bMSwyN10sdj1bMSwzMl0sYj1bMSwzM10sXz1bMSwzNF0seD1bMSwzNV0sdz1bMSwzMV0saz1bMSwzOF0sVD1bMSw0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLEU9WzEsNCw1LDEyLDEzLDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxDPVsxLDQsNSw3LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxTPVs0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLEE9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxkaXJlY3RpdmU6NixTRDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxpZFN0YXRlbWVudDoxMSxERVNDUjoxMiwiLS1ceDNlIjoxMyxISURFX0VNUFRZOjE0LHNjYWxlOjE1LFdJRFRIOjE2LENPTVBPU0lUX1NUQVRFOjE3LFNUUlVDVF9TVEFSVDoxOCxTVFJVQ1RfU1RPUDoxOSxTVEFURV9ERVNDUjoyMCxBUzoyMSxJRDoyMixGT1JLOjIzLEpPSU46MjQsQ0hPSUNFOjI1LENPTkNVUlJFTlQ6MjYsbm90ZToyNyxub3RlUG9zaXRpb246MjgsTk9URV9URVhUOjI5LGRpcmVjdGlvbjozMCxvcGVuRGlyZWN0aXZlOjMxLHR5cGVEaXJlY3RpdmU6MzIsY2xvc2VEaXJlY3RpdmU6MzMsIjoiOjM0LGFyZ0RpcmVjdGl2ZTozNSxkaXJlY3Rpb25fdGI6MzYsZGlyZWN0aW9uX2J0OjM3LGRpcmVjdGlvbl9ybDozOCxkaXJlY3Rpb25fbHI6MzksZW9sOjQwLCI7Ijo0MSxFREdFX1NUQVRFOjQyLGxlZnRfb2Y6NDMscmlnaHRfb2Y6NDQsb3Blbl9kaXJlY3RpdmU6NDUsdHlwZV9kaXJlY3RpdmU6NDYsYXJnX2RpcmVjdGl2ZTo0NyxjbG9zZV9kaXJlY3RpdmU6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNzoiU0QiLDEyOiJERVNDUiIsMTM6Ii0tXHgzZSIsMTQ6IkhJREVfRU1QVFkiLDE1OiJzY2FsZSIsMTY6IldJRFRIIiwxNzoiQ09NUE9TSVRfU1RBVEUiLDE4OiJTVFJVQ1RfU1RBUlQiLDE5OiJTVFJVQ1RfU1RPUCIsMjA6IlNUQVRFX0RFU0NSIiwyMToiQVMiLDIyOiJJRCIsMjM6IkZPUksiLDI0OiJKT0lOIiwyNToiQ0hPSUNFIiwyNjoiQ09OQ1VSUkVOVCIsMjc6Im5vdGUiLDI5OiJOT1RFX1RFWFQiLDM0OiI6IiwzNjoiZGlyZWN0aW9uX3RiIiwzNzoiZGlyZWN0aW9uX2J0IiwzODoiZGlyZWN0aW9uX3JsIiwzOToiZGlyZWN0aW9uX2xyIiw0MToiOyIsNDI6IkVER0VfU1RBVEUiLDQzOiJsZWZ0X29mIiw0NDoicmlnaHRfb2YiLDQ1OiJvcGVuX2RpcmVjdGl2ZSIsNDY6InR5cGVfZGlyZWN0aXZlIiw0NzoiYXJnX2RpcmVjdGl2ZSIsNDg6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbMTAsMV0sWzEwLDJdLFsxMCwzXSxbMTAsNF0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDRdLFsxMCwzXSxbMTAsNl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFsxMCwxXSxbNiwzXSxbNiw1XSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzQwLDFdLFs0MCwxXSxbMTEsMV0sWzExLDFdLFsyOCwxXSxbMjgsMV0sWzMxLDFdLFszMiwxXSxbMzUsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4gci5zZXRSb290RG9jKGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6Im5sIiE9YVtzXSYmKGFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV0pO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA5OnRoaXMuJD0ibmwiO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtMV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246ci50cmltQ29sb24oYVtzXSl9O2JyZWFrO2Nhc2UgMTI6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTJdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxzdGF0ZTI6e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifX07YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sZGVzY3JpcHRpb246YVtzXS5zdWJzdHIoMSkudHJpbSgpfTticmVhaztjYXNlIDE3OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6YVtzLTFdfTticmVhaztjYXNlIDE4OnZhciBjPWFbc10sdT1hW3MtMl0udHJpbSgpO2lmKGFbc10ubWF0Y2goIjoiKSl7dmFyIGw9YVtzXS5zcGxpdCgiOiIpO2M9bFswXSx1PVt1LGxbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmMsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246dX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246YVtzLTVdLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpyLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXS50cmltKCksbm90ZTp7cG9zaXRpb246YVtzLTJdLnRyaW0oKSx0ZXh0OmFbc10udHJpbSgpfX07YnJlYWs7Y2FzZSAzMDpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzMTpyLnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzMjpyLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzMzpyLnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNDA6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQxOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQyOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MzpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzdGF0ZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sdChbMSw0LDUsMTQsMTUsMTcsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLGEsezg6MTF9KSx7MzI6MTIsNDY6WzEsMTNdfSx7NDY6WzIsNDBdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzptLDMwOjI5LDMxOjYsMzY6diwzNzpiLDM4Ol8sMzk6eCw0Mjp3LDQ1Oml9LHszMzozNiwzNDpbMSwzN10sNDg6a30sdChbMzQsNDhdLFsyLDQxXSksdChULFsyLDZdKSx7NjoyOCwxMDozOSwxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzptLDMwOjI5LDMxOjYsMzY6diwzNzpiLDM4Ol8sMzk6eCw0Mjp3LDQ1Oml9LHQoVCxbMiw4XSksdChULFsyLDldKSx0KFQsWzIsMTBdLHsxMjpbMSw0MF0sMTM6WzEsNDFdfSksdChULFsyLDE0XSksezE2OlsxLDQyXX0sdChULFsyLDE2XSx7MTg6WzEsNDNdfSksezIxOlsxLDQ0XX0sdChULFsyLDIwXSksdChULFsyLDIxXSksdChULFsyLDIyXSksdChULFsyLDIzXSksezI4OjQ1LDI5OlsxLDQ2XSw0MzpbMSw0N10sNDQ6WzEsNDhdfSx0KFQsWzIsMjZdKSx0KFQsWzIsMjddKSx0KEUsWzIsMzZdKSx0KEUsWzIsMzddKSx0KFQsWzIsMzBdKSx0KFQsWzIsMzFdKSx0KFQsWzIsMzJdKSx0KFQsWzIsMzNdKSx0KEMsWzIsMjhdKSx7MzU6NDksNDc6WzEsNTBdfSx0KEMsWzIsNDNdKSx0KFQsWzIsN10pLHQoVCxbMiwxMV0pLHsxMTo1MSwyMjpmLDQyOnd9LHQoVCxbMiwxNV0pLHQoUyxhLHs4OjUyfSksezIyOlsxLDUzXX0sezIyOlsxLDU0XX0sezIxOlsxLDU1XX0sezIyOlsyLDM4XX0sezIyOlsyLDM5XX0sezMzOjU2LDQ4Omt9LHs0ODpbMiw0Ml19LHQoVCxbMiwxMl0sezEyOlsxLDU3XX0pLHs0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwxOTpbMSw1OF0sMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6bSwzMDoyOSwzMTo2LDM2OnYsMzc6YiwzODpfLDM5OngsNDI6dyw0NTppfSx0KFQsWzIsMThdLHsxODpbMSw1OV19KSx7Mjk6WzEsNjBdfSx7MjI6WzEsNjFdfSx0KEMsWzIsMjldKSx0KFQsWzIsMTNdKSx0KFQsWzIsMTddKSx0KFMsYSx7ODo2Mn0pLHQoVCxbMiwyNF0pLHQoVCxbMiwyNV0pLHs0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwxOTpbMSw2M10sMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6bSwzMDoyOSwzMTo2LDM2OnYsMzc6YiwzODpfLDM5OngsNDI6dyw0NTppfSx0KFQsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsNDBdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0NzpbMiwzOF0sNDg6WzIsMzldLDUwOlsyLDQyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE09e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIDM2O2Nhc2UgMTpyZXR1cm4gMzc7Y2FzZSAyOnJldHVybiAzODtjYXNlIDM6cmV0dXJuIDM5O2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSw0NTtjYXNlIDU6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNDY7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDM0O2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0ODtjYXNlIDg6cmV0dXJuIDQ3O2Nhc2UgOTpjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIDU7Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU0NBTEUiKSwxNTtjYXNlIDE3OnJldHVybiAxNjtjYXNlIDE4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE5OnRoaXMucHVzaFN0YXRlKCJTVEFURSIpO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjM7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNTtjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDIzO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDp0aGlzLmJlZ2luKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUQVRFX0lEIiksIkFTIjtjYXNlIDMyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksIklEIjtjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiJTVEFURV9ERVNDUiI7Y2FzZSAzNTpyZXR1cm4gMTc7Y2FzZSAzNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJzdHJ1Y3QiKSwxODtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7Y2FzZSAzOTpicmVhaztjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJOT1RFIiksMjc7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNDM7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNDQ7Y2FzZSA0Mzp0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEUiKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEVfSUQiKSwiQVMiO2Nhc2UgNDU6YnJlYWs7Y2FzZSA0NjpyZXR1cm4iTk9URV9URVhUIjtjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksIklEIjtjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfVEVYVCIpLDIyO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDI5O2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjk7Y2FzZSA1MTpjYXNlIDUyOnJldHVybiA3O2Nhc2UgNTM6cmV0dXJuIDE0O2Nhc2UgNTQ6cmV0dXJuIDQyO2Nhc2UgNTU6cmV0dXJuIDIyO2Nhc2UgNTY6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSwxMjtjYXNlIDU3OnJldHVybiAxMztjYXNlIDU4OnJldHVybiAyNjtjYXNlIDU5OnJldHVybiA1O2Nhc2UgNjA6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86c3RhdGVccyspL2ksL14oPzouKjw8Zm9yaz4+KS9pLC9eKD86Lio8PGpvaW4+PikvaSwvXig/Oi4qPDxjaG9pY2U+PikvaSwvXig/Oi4qXFtcW2ZvcmtcXVxdKS9pLC9eKD86LipcW1xbam9pblxdXF0pL2ksL14oPzouKlxbXFtjaG9pY2VcXVxdKS9pLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OlsiXSkvaSwvXig/OlxzKmFzXHMrKS9pLC9eKD86W15cblx7XSopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5cc1x7XSspL2ksL14oPzpcbikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbNyw4LDEzLDE0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbNiw3LDEzLDE0XSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbNSwxMywxNF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsxMywxNCwxOSwyNiwyNywyOCwyOSwzOCwzOSw0MCw1NCw1NSw1Niw1Nyw1OF0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFX0lEOntydWxlczpbNDddLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URTp7cnVsZXM6WzQ0LDQ1LDQ2XSxpbmNsdXNpdmU6ITF9LE5PVEVfVEVYVDp7cnVsZXM6WzQ5LDUwXSxpbmNsdXNpdmU6ITF9LE5PVEVfSUQ6e3J1bGVzOls0OF0saW5jbHVzaXZlOiExfSxOT1RFOntydWxlczpbNDEsNDIsNDNdLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxNywxOF0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzMyXSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzMzLDM0XSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOlsxMywxNCwyMCwyMSwyMiwyMywyNCwyNSwzMCwzMSwzNSwzNiwzN10saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsOSwxMCwxMSwxMiwxNCwxNSwxNiwxOSwzNyw0MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OSw2MF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIE4oKXt0aGlzLnl5PXt9fXJldHVybiBBLmxleGVyPU0sTi5wcm90b3R5cGU9QSxBLlBhcnNlcj1OLG5ldyBOfSgpO2UucGFyc2VyPXIsZS5QYXJzZXI9ci5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiByLnBhcnNlLmFwcGx5KHIsYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHQpe3RbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrdFswXSsiIEZJTEUiKSxwcm9jZXNzLmV4aXQoMSkpO3ZhciByPW4oMzA2OSkucmVhZEZpbGVTeW5jKG4oNjQ3MCkubm9ybWFsaXplKHRbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHIpfSxuLmNbbi5zXT09PXQmJmUubWFpbihwcm9jZXNzLmFyZ3Yuc2xpY2UoMSkpfSw2NzQxOih0LGUsbik9Pnt0PW4ubm1kKHQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDVdLHI9WzYsOSwxMSwxNywxOCwxOSwyMV0saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwyMV0sYz1bNCw2LDksMTEsMTcsMTgsMTksMjFdLHU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGpvdXJuZXk6NCxkb2N1bWVudDo1LEVPRjo2LGRpcmVjdGl2ZTo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxORVdMSU5FOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCwiOiI6MTUsYXJnRGlyZWN0aXZlOjE2LHRpdGxlOjE3LHNlY3Rpb246MTgsdGFza05hbWU6MTksdGFza0RhdGE6MjAsb3Blbl9kaXJlY3RpdmU6MjEsdHlwZV9kaXJlY3RpdmU6MjIsYXJnX2RpcmVjdGl2ZToyMyxjbG9zZV9kaXJlY3RpdmU6MjQsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsOToiU1BBQ0UiLDExOiJORVdMSU5FIiwxNToiOiIsMTc6InRpdGxlIiwxODoic2VjdGlvbiIsMTk6InRhc2tOYW1lIiwyMDoidGFza0RhdGEiLDIxOiJvcGVuX2RpcmVjdGl2ZSIsMjI6InR5cGVfZGlyZWN0aXZlIiwyMzoiYXJnX2RpcmVjdGl2ZSIsMjQ6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbNSwwXSxbNSwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbNyw0XSxbNyw2XSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gYVtzLTFdO2Nhc2UgMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1bXTticmVhaztjYXNlIDExOnIuc2V0VGl0bGUoYVtzXS5zdWJzdHIoNikpLHRoaXMuJD1hW3NdLnN1YnN0cig2KTticmVhaztjYXNlIDEyOnIuYWRkU2VjdGlvbihhW3NdLnN1YnN0cig4KSksdGhpcy4kPWFbc10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTM6ci5hZGRUYXNrKGFbcy0xXSxhW3NdKSx0aGlzLiQ9InRhc2siO2JyZWFrO2Nhc2UgMTU6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE2OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxODpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJqb3VybmV5Iil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsMjE6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDIxOm59LHsxMzo4LDIyOlsxLDldfSx7MjI6WzIsMTVdfSx7NjpbMSwxMF0sNzoxOCw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OmksMTg6YSwxOTpvLDIxOm59LHsxOlsyLDJdfSx7MTQ6MTksMTU6WzEsMjBdLDI0OnN9LHQoWzE1LDI0XSxbMiwxNl0pLHQocixbMiw4XSx7MTpbMiwxXX0pLHQocixbMiw0XSksezc6MTgsMTA6MjIsMTI6NCwxNzppLDE4OmEsMTk6bywyMTpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDExXSksdChyLFsyLDEyXSksezIwOlsxLDIzXX0sdChyLFsyLDE0XSksezExOlsxLDI0XX0sezE2OjI1LDIzOlsxLDI2XX0sezExOlsyLDE4XX0sdChyLFsyLDVdKSx0KHIsWzIsMTNdKSx0KGMsWzIsOV0pLHsxNDoyNywyNDpzfSx7MjQ6WzIsMTddfSx7MTE6WzEsMjhdfSx0KGMsWzIsMTBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMTVdLDc6WzIsMl0sMjE6WzIsMThdLDI2OlsyLDE3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciBfLHgsdyxrLFQsRSxDLFMsQSxNPXt9Ozspe2lmKHc9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3ddP2s9dGhpcy5kZWZhdWx0QWN0aW9uc1t3XToobnVsbD09XyYmKF89YigpKSxrPW9bd10mJm9bd11bX10pLHZvaWQgMD09PWt8fCFrLmxlbmd0aHx8IWtbMF0pe3ZhciBOPSIiO2ZvcihFIGluIEE9W10sb1t3XSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtOPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bX118fF8pKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoXz09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfXXx8XykrIiciKSx0aGlzLnBhcnNlRXJyb3IoTix7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tfXXx8XyxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKGtbMF1pbnN0YW5jZW9mIEFycmF5JiZrLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdysiLCB0b2tlbjogIitfKTtzd2l0Y2goa1swXSl7Y2FzZSAxOm4ucHVzaChfKSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKGtbMV0pLF89bnVsbCx4PyhfPXgseD1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1trWzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSxrWzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trWzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGw9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHQoKXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjE7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDIyO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSA0OnJldHVybiAyMztjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSA4OmNhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiA0O2Nhc2UgMTE6cmV0dXJuIDE3O2Nhc2UgMTI6cmV0dXJuIDE4O2Nhc2UgMTM6cmV0dXJuIDE5O2Nhc2UgMTQ6cmV0dXJuIDIwO2Nhc2UgMTU6cmV0dXJuIDE1O2Nhc2UgMTY6cmV0dXJuIDY7Y2FzZSAxNzpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaCgpe3RoaXMueXk9e319cmV0dXJuIHUubGV4ZXI9bCxoLnByb3RvdHlwZT11LHUuUGFyc2VyPWgsbmV3IGh9KCk7ZS5wYXJzZXI9cixlLlBhcnNlcj1yLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyc2UuYXBwbHkocixhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24odCl7dFsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIit0WzBdKyIgRklMRSIpLHByb2Nlc3MuZXhpdCgxKSk7dmFyIHI9big5MTQzKS5yZWFkRmlsZVN5bmMobig2NDcwKS5ub3JtYWxpemUodFsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2Uocil9LG4uY1tuLnNdPT09dCYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSl9LDk2MDk6dD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZT0vXiglMjB8XHMpKihqYXZhc2NyaXB0fGRhdGEpL2ltLG49L1teXHgyMC1ceDdFXS9naW0scj0vXihbXjpdKyk6L2dtLGk9WyIuIiwiLyJdO3QuZXhwb3J0cz17c2FuaXRpemVVcmw6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuImFib3V0OmJsYW5rIjt2YXIgYSxvLHM9dC5yZXBsYWNlKG4sIiIpLnRyaW0oKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkuaW5kZXhPZih0WzBdKT4tMX0ocyk/czoobz1zLm1hdGNoKHIpKT8oYT1vWzBdLGUudGVzdChhKT8iYWJvdXQ6YmxhbmsiOnMpOiJhYm91dDpibGFuayJ9fX0sMzg0MTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sNzQ1ODoodCxlLG4pPT57InVzZSBzdHJpY3QiO24uZChlLHtkZWZhdWx0OigpPT5jQ30pO3ZhciByPW4oMTk0MSksaT1uLm4ociksYT17ZGVidWc6MSxpbmZvOjIsd2FybjozLGVycm9yOjQsZmF0YWw6NX0sbz17ZGVidWc6ZnVuY3Rpb24oKXt9LGluZm86ZnVuY3Rpb24oKXt9LHdhcm46ZnVuY3Rpb24oKXt9LGVycm9yOmZ1bmN0aW9uKCl7fSxmYXRhbDpmdW5jdGlvbigpe319LHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImZhdGFsIjtpc05hTih0KSYmKHQ9dC50b0xvd2VyQ2FzZSgpLHZvaWQgMCE9PWFbdF0mJih0PWFbdF0pKSxvLnRyYWNlPWZ1bmN0aW9uKCl7fSxvLmRlYnVnPWZ1bmN0aW9uKCl7fSxvLmluZm89ZnVuY3Rpb24oKXt9LG8ud2Fybj1mdW5jdGlvbigpe30sby5lcnJvcj1mdW5jdGlvbigpe30sby5mYXRhbD1mdW5jdGlvbigpe30sdDw9YS5mYXRhbCYmKG8uZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxjKCJGQVRBTCIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzM1bSIsYygiRkFUQUwiKSkpLHQ8PWEuZXJyb3ImJihvLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYygiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szMW0iLGMoIkVSUk9SIikpKSx0PD1hLndhcm4mJihvLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsYygiV0FSTiIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMzbSIsYygiV0FSTiIpKSksdDw9YS5pbmZvJiYoby5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLGMoIklORk8iKSwiY29sb3I6IGxpZ2h0Ymx1ZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNG0iLGMoIklORk8iKSkpLHQ8PWEuZGVidWcmJihvLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsYygiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzJtIixjKCJERUJVRyIpKSl9LGM9ZnVuY3Rpb24odCl7dmFyIGU9aSgpKCkuZm9ybWF0KCJzcy5TU1MiKTtyZXR1cm4iJWMiLmNvbmNhdChlLCIgOiAiKS5jb25jYXQodCwiIDogIil9O2Z1bmN0aW9uIHUodCxlKXtsZXQgbjtpZih2b2lkIDA9PT1lKWZvcihjb25zdCBlIG9mIHQpbnVsbCE9ZSYmKG48ZXx8dm9pZCAwPT09biYmZT49ZSkmJihuPWUpO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpbnVsbCE9KGk9ZShpLCsrcix0KSkmJihuPGl8fHZvaWQgMD09PW4mJmk+PWkpJiYobj1pKX1yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7bGV0IG47aWYodm9pZCAwPT09ZSlmb3IoY29uc3QgZSBvZiB0KW51bGwhPWUmJihuPmV8fHZvaWQgMD09PW4mJmU+PWUpJiYobj1lKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KW51bGwhPShpPWUoaSwrK3IsdCkpJiYobj5pfHx2b2lkIDA9PT1uJiZpPj1pKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdH12YXIgZj0xZS02O2Z1bmN0aW9uIGQodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwwKSJ9ZnVuY3Rpb24gcCh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KyIpIn1mdW5jdGlvbiB5KHQpe3JldHVybiBlPT4rdChlKX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLTIqZSkvMix0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLG49Pit0KG4pK2V9ZnVuY3Rpb24gbSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiB2KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxhPTYsbz02LHM9MyxjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsdT0xPT09dHx8ND09PXQ/LTE6MSxsPTQ9PT10fHwyPT09dD8ieCI6InkiLHY9MT09PXR8fDM9PT10P2Q6cDtmdW5jdGlvbiBiKGQpe3ZhciBwPW51bGw9PXI/ZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUsbik6ZS5kb21haW4oKTpyLGI9bnVsbD09aT9lLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUsbik6aDppLF89TWF0aC5tYXgoYSwwKStzLHg9ZS5yYW5nZSgpLHc9K3hbMF0rYyxrPSt4W3gubGVuZ3RoLTFdK2MsVD0oZS5iYW5kd2lkdGg/Zzp5KShlLmNvcHkoKSxjKSxFPWQuc2VsZWN0aW9uP2Quc2VsZWN0aW9uKCk6ZCxDPUUuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFM9RS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLGUpLm9yZGVyKCksQT1TLmV4aXQoKSxNPVMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxOPVMuc2VsZWN0KCJsaW5lIiksRD1TLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxTPVMubWVyZ2UoTSksTj1OLm1lcmdlKE0uYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihsKyIyIix1KmEpKSxEPUQubWVyZ2UoTS5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihsLHUqXykuYXR0cigiZHkiLDE9PT10PyIwZW0iOjM9PT10PyIwLjcxZW0iOiIwLjMyZW0iKSksZCE9PUUmJihDPUMudHJhbnNpdGlvbihkKSxTPVMudHJhbnNpdGlvbihkKSxOPU4udHJhbnNpdGlvbihkKSxEPUQudHJhbnNpdGlvbihkKSxBPUEudHJhbnNpdGlvbihkKS5hdHRyKCJvcGFjaXR5IixmKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1UKHQpKT92KHQrYyk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLE0uYXR0cigib3BhY2l0eSIsZikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdigoZSYmaXNGaW5pdGUoZT1lKHQpKT9lOlQodCkpK2MpfSkpKSxBLnJlbW92ZSgpLEMuYXR0cigiZCIsND09PXR8fDI9PT10P28/Ik0iK3UqbysiLCIrdysiSCIrYysiViIraysiSCIrdSpvOiJNIitjKyIsIit3KyJWIitrOm8/Ik0iK3crIiwiK3UqbysiViIrYysiSCIraysiViIrdSpvOiJNIit3KyIsIitjKyJIIitrKSxTLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB2KFQodCkrYyl9KSksTi5hdHRyKGwrIjIiLHUqYSksRC5hdHRyKGwsdSpfKS50ZXh0KGIpLEUuZmlsdGVyKG0pLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLDI9PT10PyJzdGFydCI6ND09PXQ/ImVuZCI6Im1pZGRsZSIpLEUuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1UfSkpfXJldHVybiBiLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYik6ZX0sYi50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPUFycmF5LmZyb20oYXJndW1lbnRzKSxifSxiLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpBcnJheS5mcm9tKHQpLGIpOm4uc2xpY2UoKX0sYi50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpBcnJheS5mcm9tKHQpLGIpOnImJnIuc2xpY2UoKX0sYi50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYik6aX0sYi50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1vPSt0LGIpOmF9LGIudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxiKTphfSxiLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsYik6b30sYi50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxiKTpzfSxiLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxiKTpjfSxifWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gbnVsbD09dD9iOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gbnVsbD09dD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiB3KCl7cmV0dXJuW119ZnVuY3Rpb24gayh0KXtyZXR1cm4gbnVsbD09dD93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gVCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKHQpfX12YXIgQz1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBTKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIEE9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBNKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gTih0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBEKHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIE8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEIodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzPTAsYz1lLmxlbmd0aCx1PWEubGVuZ3RoO3M8dTsrK3MpKG89ZVtzXSk/KG8uX19kYXRhX189YVtzXSxyW3NdPW8pOm5bc109bmV3IEQodCxhW3NdKTtmb3IoO3M8YzsrK3MpKG89ZVtzXSkmJihpW3NdPW8pfWZ1bmN0aW9uIEwodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9bmV3IE1hcCxoPWUubGVuZ3RoLGY9YS5sZW5ndGgsZD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiYoZFtzXT11PW8uY2FsbChjLGMuX19kYXRhX18scyxlKSsiIixsLmhhcyh1KT9pW3NdPWM6bC5zZXQodSxjKSk7Zm9yKHM9MDtzPGY7KytzKXU9by5jYWxsKHQsYVtzXSxzLGEpKyIiLChjPWwuZ2V0KHUpKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsLmRlbGV0ZSh1KSk6bltzXT1uZXcgRCh0LGFbc10pO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmbC5nZXQoZFtzXSk9PT1jJiYoaVtzXT1jKX1mdW5jdGlvbiBJKHQpe3JldHVybiB0Ll9fZGF0YV9ffWZ1bmN0aW9uIFIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59RC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIFA9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOlAseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBZKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGouaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOmpbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiB6KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBVKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gcSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBWKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBHKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFgodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBaKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxWKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEsodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEoodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIHR0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBudCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBydCh0KX1mdW5jdGlvbiBydCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9ZXQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBpdCh0LGUpe2Zvcih2YXIgbj1udCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4uYWRkKGVbcl0pfWZ1bmN0aW9uIGF0KHQsZSl7Zm9yKHZhciBuPW50KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5yZW1vdmUoZVtyXSl9ZnVuY3Rpb24gb3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7aXQodGhpcyx0KX19ZnVuY3Rpb24gc3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7YXQodGhpcyx0KX19ZnVuY3Rpb24gY3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/aXQ6YXQpKHRoaXMsdCl9fWZ1bmN0aW9uIHV0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIGh0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBmdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGR0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIHB0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24geXQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZ3QoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBtdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PVAmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVA/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIHZ0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJ0KHQpe3ZhciBlPVkodCk7cmV0dXJuKGUubG9jYWw/dnQ6bXQpKGUpfWZ1bmN0aW9uIF90KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24geHQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiB3dCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24ga3QoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIFR0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIEV0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLm9wdGlvbnMpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBDdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsaT10aGlzLl9fb24sYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSx0aGlzLl9fZGF0YV9fKX19KGUpO2lmKGkpZm9yKHZhciBvPTAscz1pLmxlbmd0aDtvPHM7KytvKWlmKChyPWlbb10pLnR5cGU9PT10LnR5cGUmJnIubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHIudHlwZSxyLmxpc3RlbmVyLHIub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHIudHlwZSxyLmxpc3RlbmVyPWEsci5vcHRpb25zPW4pLHZvaWQoci52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsbikscj17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjphLG9wdGlvbnM6bn0saT9pLnB1c2gocik6dGhpcy5fX29uPVtyXX19ZnVuY3Rpb24gU3QodCxlLG4pe3ZhciByPVYodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gQXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU3QodGhpcyx0LGUpfX1mdW5jdGlvbiBNdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1ydC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBOdD1bbnVsbF07ZnVuY3Rpb24gRHQodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gT3QoKXtyZXR1cm4gbmV3IER0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sTnQpfUR0LnByb3RvdHlwZT1PdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkR0LHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Xyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IER0KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB4KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KHQpOmsodCk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxhPTA7YTxuOysrYSlmb3IodmFyIG8scz1lW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJihyLnB1c2godC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSxpLnB1c2gobykpO3JldHVybiBuZXcgRHQocixpKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PXQ/UzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQy5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90OkUodCkpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PXQ/TTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90OkUodCkpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1UKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBEdChyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxJKTt2YXIgbj1lP0w6QixyPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU8odCkpO2Zvcih2YXIgYT1pLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSl7dmFyIGw9clt1XSxoPWlbdV0sZj1oLmxlbmd0aCxkPVIodC5jYWxsKGwsbCYmbC5fX2RhdGFfXyx1LHIpKSxwPWQubGVuZ3RoLHk9c1t1XT1uZXcgQXJyYXkocCksZz1vW3VdPW5ldyBBcnJheShwKSxtPWNbdV09bmV3IEFycmF5KGYpO24obCxoLHksZyxtLGQsZSk7Zm9yKHZhciB2LGIsXz0wLHg9MDtfPHA7KytfKWlmKHY9eVtfXSl7Zm9yKF8+PXgmJih4PV8rMSk7IShiPWdbeF0pJiYrK3g8cDspO3YuX25leHQ9Ynx8bnVsbH19cmV0dXJuKG89bmV3IER0KG8scikpLl9lbnRlcj1zLG8uX2V4aXQ9YyxvfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgRHQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoTiksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IER0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoTiksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8ocj10KHIpKSYmKHI9ci5zZWxlY3Rpb24oKSk6cj1yLmFwcGVuZCh0KyIiKSxudWxsIT1lJiYoaT1lKGkpKSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09bj9hLnJlbW92ZSgpOm4oYSksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxuPXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9ci5sZW5ndGgsbz1NYXRoLm1pbihpLGEpLHM9bmV3IEFycmF5KGkpLGM9MDtjPG87KytjKWZvcih2YXIgdSxsPW5bY10saD1yW2NdLGY9bC5sZW5ndGgsZD1zW2NdPW5ldyBBcnJheShmKSxwPTA7cDxmOysrcCkodT1sW3BdfHxoW3BdKSYmKGRbcF09dSk7Zm9yKDtjPGk7KytjKXNbY109bltjXTtyZXR1cm4gbmV3IER0KHMsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1GKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2Epe2Zvcih2YXIgbyxzPW5bYV0sYz1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShvPXNbbF0pJiYodVtsXT1vKTt1LnNvcnQoZSl9cmV0dXJuIG5ldyBEdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7bGV0IHQ9MDtmb3IoY29uc3QgZSBvZiB0aGlzKSsrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAscj1lLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgaSxhPWVbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbykoaT1hW29dKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxvLGEpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49WSh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VTp6OiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/VzpIOm4ubG9jYWw/JDpxKShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0c6ImZ1bmN0aW9uIj09dHlwZW9mIGU/WjpYKSh0LGUsbnVsbD09bj8iIjpuKSk6USh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9LOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3R0OkopKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZXQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9bnQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/Y3Q6ZT9vdDpzdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/dXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2h0Omx0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/ZnQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3B0OmR0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goeXQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZ3QpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpidCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ0KHQpLHI9bnVsbD09ZT9fdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOl8oZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goeHQpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9rdDp3dCl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1UdCh0KyIiKSxvPWEubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9DdDpFdCxyPTA7cjxvOysrcil0aGlzLmVhY2gocyhhW3JdLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGMsdT0wLGw9cy5sZW5ndGg7dTxsOysrdSlmb3Iocj0wLGM9c1t1XTtyPG87KytyKWlmKChpPWFbcl0pLnR5cGU9PT1jLnR5cGUmJmkubmFtZT09PWMubmFtZSlyZXR1cm4gYy52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9NdDpBdCkodCxlKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHIsaT10W2VdLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2EpKHI9aVthXSkmJih5aWVsZCByKX19O2NvbnN0IEJ0PU90O3ZhciBMdD17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBJdCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gcnx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBSdChyKX1mdW5jdGlvbiBSdCh0KXt0aGlzLl89dH1mdW5jdGlvbiBGdCh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gUHQodCxlKXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigobj10W3JdKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBqdCh0LGUsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PWUpe3Rbcl09THQsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fVJ0LnByb3RvdHlwZT1JdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJ0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLl8saT1GdCh0KyIiLHIpLGE9LTEsbz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxvOylpZihuPSh0PWlbYV0pLnR5cGUpcltuXT1qdChyW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gcilyW25dPWp0KHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPG87KWlmKChuPSh0PWlbYV0pLnR5cGUpJiYobj1QdChyW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBSdCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSlpW2FdPWFyZ3VtZW50c1thKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO2E8bjsrK2EpclthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07Y29uc3QgWXQ9SXQ7dmFyIHp0LFV0LHF0PTAsJHQ9MCxIdD0wLFd0PTAsVnQ9MCxHdD0wLFh0PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFp0PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIFF0KCl7cmV0dXJuIFZ0fHwoWnQoS3QpLFZ0PVh0Lm5vdygpK0d0KX1mdW5jdGlvbiBLdCgpe1Z0PTB9ZnVuY3Rpb24gSnQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIHRlKHQsZSxuKXt2YXIgcj1uZXcgSnQ7cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBlZSgpe1Z0PShXdD1YdC5ub3coKSkrR3QscXQ9JHQ9MDt0cnl7IWZ1bmN0aW9uKCl7UXQoKSwrK3F0O2Zvcih2YXIgdCxlPXp0O2U7KSh0PVZ0LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwodm9pZCAwLHQpLGU9ZS5fbmV4dDstLXF0fSgpfWZpbmFsbHl7cXQ9MCxmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG49enQscj0xLzA7bjspbi5fY2FsbD8ocj5uLl90aW1lJiYocj1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOnp0PWUpO1V0PXQscmUocil9KCksVnQ9MH19ZnVuY3Rpb24gbmUoKXt2YXIgdD1YdC5ub3coKSxlPXQtV3Q7ZT4xZTMmJihHdC09ZSxXdD10KX1mdW5jdGlvbiByZSh0KXtxdHx8KCR0JiYoJHQ9Y2xlYXJUaW1lb3V0KCR0KSksdC1WdD4yND8odDwxLzAmJigkdD1zZXRUaW1lb3V0KGVlLHQtWHQubm93KCktR3QpKSxIdCYmKEh0PWNsZWFySW50ZXJ2YWwoSHQpKSk6KEh0fHwoV3Q9WHQubm93KCksSHQ9c2V0SW50ZXJ2YWwobmUsMWUzKSkscXQ9MSxadChlZSkpKX1mdW5jdGlvbiBpZSh0LGUsbil7dmFyIHI9bmV3IEp0O3JldHVybiBlPW51bGw9PWU/MDorZSxyLnJlc3RhcnQoKG49PntyLnN0b3AoKSx0KG4rZSl9KSxlLG4pLHJ9SnQucHJvdG90eXBlPXRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SnQscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP1F0KCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fFV0PT09dGhpc3x8KFV0P1V0Ll9uZXh0PXRoaXM6enQ9dGhpcyxVdD10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHJlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHJlKCkpfX07dmFyIGFlPVl0KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLG9lPVtdO2Z1bmN0aW9uIHNlKHQsZSxuLHIsaSxhKXt2YXIgbz10Ll9fdHJhbnNpdGlvbjtpZihvKXtpZihuIGluIG8pcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIGEoYyl7dmFyIHUsbCxoLGY7aWYoMSE9PW4uc3RhdGUpcmV0dXJuIHMoKTtmb3IodSBpbiBpKWlmKChmPWlbdV0pLm5hbWU9PT1uLm5hbWUpe2lmKDM9PT1mLnN0YXRlKXJldHVybiBpZShhKTs0PT09Zi5zdGF0ZT8oZi5zdGF0ZT02LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8ZSYmKGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImNhbmNlbCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pfWlmKGllKChmdW5jdGlvbigpezM9PT1uLnN0YXRlJiYobi5zdGF0ZT00LG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxvKGMpKX0pKSxuLnN0YXRlPTIsbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksMj09PW4uc3RhdGUpe2ZvcihuLnN0YXRlPTMscj1uZXcgQXJyYXkoaD1uLnR3ZWVuLmxlbmd0aCksdT0wLGw9LTE7dTxoOysrdSkoZj1uLnR3ZWVuW3VdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoclsrK2xdPWYpO3IubGVuZ3RoPWwrMX19ZnVuY3Rpb24gbyhlKXtmb3IodmFyIGk9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9NSwxKSxhPS0xLG89ci5sZW5ndGg7KythPG87KXJbYV0uY2FsbCh0LGkpOzU9PT1uLnN0YXRlJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgciBpbiBuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksZGVsZXRlIGlbZV0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbZV09bixuLnRpbWVyPXRlKChmdW5jdGlvbih0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJmEodC1uLmRlbGF5KX0pLDAsbi50aW1lKX0odCxuLHtuYW1lOmUsaW5kZXg6cixncm91cDppLG9uOmFlLHR3ZWVuOm9lLHRpbWU6YS50aW1lLGRlbGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOjB9KX1mdW5jdGlvbiBjZSh0LGUpe3ZhciBuPWxlKHQsZSk7aWYobi5zdGF0ZT4wKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gdWUodCxlKXt2YXIgbj1sZSh0LGUpO2lmKG4uc3RhdGU+Myl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gbn1mdW5jdGlvbiBsZSh0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufWZ1bmN0aW9uIGhlKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fXZhciBmZSxkZT0xODAvTWF0aC5QSSxwZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiB5ZSh0LGUsbixyLGksYSl7dmFyIG8scyxjO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChjPXQqbitlKnIpJiYobi09dCpjLHItPWUqYyksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxjLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGM9LWMsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpkZSxza2V3WDpNYXRoLmF0YW4oYykqZGUsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIGdlKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6aGUodCxpKX0se2k6Yy0yLHg6aGUocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OmhlKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OmhlKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OmhlKHQsbil9LHtpOnMtMix4OmhlKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIG1lPWdlKChmdW5jdGlvbih0KXtjb25zdCBlPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKHQrIiIpO3JldHVybiBlLmlzSWRlbnRpdHk/cGU6eWUoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfSksInB4LCAiLCJweCkiLCJkZWcpIiksdmU9Z2UoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3BlOihmZXx8KGZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGZlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1mZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT95ZSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpwZSl9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGJlKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT11ZSh0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIF9lKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT11ZSh0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiB4ZSh0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD11ZSh0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBsZSh0LHIpLnZhbHVlW2VdfX1mdW5jdGlvbiB3ZSh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24ga2UodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gVGUoKXt9dmFyIEVlPS43LENlPTEvRWUsU2U9IlxccyooWystXT9cXGQrKVxccyoiLEFlPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLE1lPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxEZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbU2UsU2UsU2VdKyJcXCkkIiksT2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW01lLE1lLE1lXSsiXFwpJCIpLEJlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbU2UsU2UsU2UsQWVdKyJcXCkkIiksTGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tNZSxNZSxNZSxBZV0rIlxcKSQiKSxJZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQWUsTWUsTWVdKyJcXCkkIiksUmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tBZSxNZSxNZSxBZV0rIlxcKSQiKSxGZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBQZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGplKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gWWUodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9TmUuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj96ZShlKTozPT09bj9uZXcgSGUoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1VlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1VlKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9RGUuZXhlYyh0KSk/bmV3IEhlKGVbMV0sZVsyXSxlWzNdLDEpOihlPU9lLmV4ZWModCkpP25ldyBIZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1CZS5leGVjKHQpKT9VZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1MZS5leGVjKHQpKT9VZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1JZS5leGVjKHQpKT9YZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVJlLmV4ZWModCkpP1hlKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6RmUuaGFzT3duUHJvcGVydHkodCk/emUoRmVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBIZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHplKHQpe3JldHVybiBuZXcgSGUodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFVlKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgSGUodCxlLG4scil9ZnVuY3Rpb24gcWUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUZXx8KHQ9WWUodCkpLHQ/bmV3IEhlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBIZX1mdW5jdGlvbiAkZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cWUodCk6bmV3IEhlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBIZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gV2UoKXtyZXR1cm4iIyIrR2UodGhpcy5yKStHZSh0aGlzLmcpK0dlKHRoaXMuYil9ZnVuY3Rpb24gVmUoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBHZSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFhlKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgUWUodCxlLG4scil9ZnVuY3Rpb24gWmUodCl7aWYodCBpbnN0YW5jZW9mIFFlKXJldHVybiBuZXcgUWUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgVGV8fCh0PVllKHQpKSwhdClyZXR1cm4gbmV3IFFlO2lmKHQgaW5zdGFuY2VvZiBRZSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IFFlKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gUWUodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIEtlKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBKZSh0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fXdlKFRlLFllLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlBlLGZvcm1hdEhleDpQZSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gWmUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpqZSx0b1N0cmluZzpqZX0pLHdlKEhlLCRlLGtlKFRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0NlOk1hdGgucG93KENlLHQpLG5ldyBIZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9FZTpNYXRoLnBvdyhFZSx0KSxuZXcgSGUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpXZSxmb3JtYXRIZXg6V2UsZm9ybWF0UmdiOlZlLHRvU3RyaW5nOlZlfSkpLHdlKFFlLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/WmUodCk6bmV3IFFlKHQsZSxuLG51bGw9PXI/MTpyKX0pLGtlKFRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0NlOk1hdGgucG93KENlLHQpLG5ldyBRZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0VlOk1hdGgucG93KEVlLHQpLG5ldyBRZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IEhlKEtlKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLEtlKHQsaSxyKSxLZSh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO2NvbnN0IHRuPXQ9PigpPT50O2Z1bmN0aW9uIGVuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KHQsbik6dG4oaXNOYU4odCk/ZTp0KX1jb25zdCBubj1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/ZW46ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqZSxuKX19KGUsbix0KTp0bihpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4oKHQ9JGUodCkpLnIsKGU9JGUoZSkpLnIpLGk9bih0LmcsZS5nKSxhPW4odC5iLGUuYiksbz1lbih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1yKGUpLHQuZz1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gcm4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pcj0kZShlW25dKSxhW25dPXIucnx8MCxvW25dPXIuZ3x8MCxzW25dPXIuYnx8MDtyZXR1cm4gYT10KGEpLG89dChvKSxzPXQocyksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1hKHQpLHIuZz1vKHQpLHIuYj1zKHQpLHIrIiJ9fX1ybigoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtyXSxhPXRbcisxXSxvPXI+MD90W3ItMV06MippLWEscz1yPGUtMT90W3IrMl06MiphLWk7cmV0dXJuIEplKChuLXIvZSkqZSxvLGksYSxzKX19KSkscm4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhyK2UtMSklZV0sYT10W3IlZV0sbz10WyhyKzEpJWVdLHM9dFsocisyKSVlXTtyZXR1cm4gSmUoKG4tci9lKSplLGksYSxvLHMpfX0pKTt2YXIgYW49L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLG9uPW5ldyBSZWdFeHAoYW4uc291cmNlLCJnIik7ZnVuY3Rpb24gc24odCxlKXt2YXIgbixyLGksYT1hbi5sYXN0SW5kZXg9b24ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPWFuLmV4ZWModCkpJiYocj1vbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6aGUobixyKX0pKSxhPW9uLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gY24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP2hlOmUgaW5zdGFuY2VvZiBZZT9ubjoobj1ZZShlKSk/KGU9bixubik6c24pKHQsZSl9ZnVuY3Rpb24gdW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGxuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gaG4odCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24gZm4odCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIGRuKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHBuKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24geW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIGduKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gbW4odCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZnbih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gdm4odCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZ5bih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gYm4odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtjZSh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gX24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe2NlKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24geG4odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt1ZSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gd24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3VlKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24ga24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dWUodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIFRuKHQsZSxuKXt2YXIgcixpLGE9ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfShlKT9jZTp1ZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1hKHRoaXMsdCkscz1vLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksby5vbj1pfX12YXIgRW49QnQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIENuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFNuKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLHIpLG4pfX1mdW5jdGlvbiBBbih0LGUsbil7dmFyIHIsaTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYocj0oaT1hKSYmU24odCxhLG4pKSxyfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gTW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIE5uKHQpe3ZhciBlLG47ZnVuY3Rpb24gcigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09biYmKGU9KG49cikmJk1uKHIpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9dmFyIERuPTA7ZnVuY3Rpb24gT24odCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIEJuKCl7cmV0dXJuKytEbn12YXIgTG49QnQucHJvdG90eXBlO09uLnByb3RvdHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gQnQoKS50cmFuc2l0aW9uKHQpfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9uLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PV8odCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxzZShoW2ZdLGUsbixmLGgsbGUocyxuKSkpO3JldHVybiBuZXcgT24oYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWsodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9bGUoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZzZShmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IE9uKGEsbyxlLG4pfSxzZWxlY3RDaGlsZDpMbi5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpMbi5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IE9uKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyLGkpLG89bmV3IEFycmF5KHIpLHM9MDtzPGE7KytzKWZvcih2YXIgYyx1PWVbc10sbD1uW3NdLGg9dS5sZW5ndGgsZj1vW3NdPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZCkoYz11W2RdfHxsW2RdKSYmKGZbZF09Yyk7Zm9yKDtzPHI7KytzKW9bc109ZVtzXTtyZXR1cm4gbmV3IE9uKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFbih0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49Qm4oKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSlpZihvPXNbdV0pe3ZhciBsPWxlKG8sZSk7c2Uobyx0LG4sdSxzLHt0aW1lOmwudGltZStsLmRlbGF5K2wuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpsLmR1cmF0aW9uLGVhc2U6bC5lYXNlfSl9cmV0dXJuIG5ldyBPbihyLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpMbi5jYWxsLG5vZGVzOkxuLm5vZGVzLG5vZGU6TG4ubm9kZSxzaXplOkxuLnNpemUsZW1wdHk6TG4uZW1wdHksZWFjaDpMbi5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9sZSh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goVG4obix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVkodCkscj0idHJhbnNmb3JtIj09PW4/dmU6Y247cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/cG46ZG4pKG4scix4ZSh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9sbjp1bikobik6KG4ubG9jYWw/Zm46aG4pKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9WSh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP21uOnZuKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP21lOmNuO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVEodGhpcyx0KSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLFEodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsQ24odCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89USh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz1RKHRoaXMsdCkpLG89PT1jP251bGw6bz09PXImJmM9PT1pP2E6KGk9YyxhPWUocj1vLHMpKX19KHQscix4ZSh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGEsbz0ic3R5bGUuIitlLHM9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dWUodGhpcyx0KSx1PWMub24sbD1udWxsPT1jLnZhbHVlW29dP2F8fChhPUNuKGUpKTp2b2lkIDA7dT09PW4mJmk9PT1sfHwocj0obj11KS5jb3B5KCkpLm9uKHMsaT1sKSxjLm9uPXJ9fSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVEodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsQW4odCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oeGUodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLE5uKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPWxlKHRoaXMubm9kZSgpLG4pLnR3ZWVuLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2EpaWYoKHI9aVthXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9iZTpfZSkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9ibjpfbikoZSx0KSk6bGUodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/eG46d24pKGUsdCkpOmxlKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChrbihlLHQpKTpsZSh0aGlzLm5vZGUoKSxlKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjt1ZSh0aGlzLHQpLmVhc2U9bn19KHRoaXMuX2lkLHQpKX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj11ZSh0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSksMD09PWkmJmEoKX0pKX0sW1N5bWJvbC5pdGVyYXRvcl06TG5bU3ltYm9sLml0ZXJhdG9yXX07dmFyIEluPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn19O2Z1bmN0aW9uIFJuKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7ZX0gbm90IGZvdW5kYCk7cmV0dXJuIG59QnQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSkpfSxCdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBPbj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPUJuKCksKG49SW4pLnRpbWU9UXQoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZzZShvLHQsZSx1LHMsbnx8Um4obyxlKSk7cmV0dXJuIG5ldyBPbihyLHRoaXMuX3BhcmVudHMsdCxlKX07Y29uc3R7YWJzOkZuLG1heDpQbixtaW46am59PU1hdGg7ZnVuY3Rpb24gWW4odCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gem4odCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIFVuKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHFuKCl7fVsidyIsImUiXS5tYXAoWW4pLFsibiIsInMiXS5tYXAoWW4pLFsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKFluKTt2YXIgJG49LjcsSG49MS8kbixXbj0iXFxzKihbKy1dP1xcZCspXFxzKiIsVm49IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsR249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFhuPS9eIyhbMC05YS1mXXszLDh9KSQvLFpuPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tXbixXbixXbl0rIlxcKSQiKSxRbj1uZXcgUmVnRXhwKCJecmdiXFwoIitbR24sR24sR25dKyJcXCkkIiksS249bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tXbixXbixXbixWbl0rIlxcKSQiKSxKbj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW0duLEduLEduLFZuXSsiXFwpJCIpLHRyPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tWbixHbixHbl0rIlxcKSQiKSxlcj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW1ZuLEduLEduLFZuXSsiXFwpJCIpLG5yPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHJyKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gaXIoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBhcih0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1Ybi5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP29yKGUpOjM9PT1uP25ldyBscihlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/c3IoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PW4/c3IoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1abi5leGVjKHQpKT9uZXcgbHIoZVsxXSxlWzJdLGVbM10sMSk6KGU9UW4uZXhlYyh0KSk/bmV3IGxyKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPUtuLmV4ZWModCkpP3NyKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPUpuLmV4ZWModCkpP3NyKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPXRyLmV4ZWModCkpP3ByKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9ZXIuZXhlYyh0KSk/cHIoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpuci5oYXNPd25Qcm9wZXJ0eSh0KT9vcihuclt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGxyKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gb3IodCl7cmV0dXJuIG5ldyBscih0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gc3IodCxlLG4scil7cmV0dXJuIHI8PTAmJih0PWU9bj1OYU4pLG5ldyBscih0LGUsbixyKX1mdW5jdGlvbiBjcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHFufHwodD1hcih0KSksdD9uZXcgbHIoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IGxyfWZ1bmN0aW9uIHVyKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9jcih0KTpuZXcgbHIodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGxyKHQsZSxuLHIpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBocigpe3JldHVybiIjIitkcih0aGlzLnIpK2RyKHRoaXMuZykrZHIodGhpcy5iKX1mdW5jdGlvbiBmcigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIGRyKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gcHIodCxlLG4scil7cmV0dXJuIHI8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBncih0LGUsbixyKX1mdW5jdGlvbiB5cih0KXtpZih0IGluc3RhbmNlb2YgZ3IpcmV0dXJuIG5ldyBncih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBxbnx8KHQ9YXIodCkpLCF0KXJldHVybiBuZXcgZ3I7aWYodCBpbnN0YW5jZW9mIGdyKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksYT1NYXRoLm1heChlLG4sciksbz1OYU4scz1hLWksYz0oYStpKS8yO3JldHVybiBzPyhvPWU9PT1hPyhuLXIpL3MrNioobjxyKTpuPT09YT8oci1lKS9zKzI6KGUtbikvcys0LHMvPWM8LjU/YStpOjItYS1pLG8qPTYwKTpzPWM+MCYmYzwxPzA6byxuZXcgZ3IobyxzLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBncih0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gbXIodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfXpuKHFuLGFyLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnJyLGZvcm1hdEhleDpycixmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4geXIodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjppcix0b1N0cmluZzppcn0pLHpuKGxyLHVyLFVuKHFuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0huOk1hdGgucG93KEhuLHQpLG5ldyBscih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8kbjpNYXRoLnBvdygkbix0KSxuZXcgbHIodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpocixmb3JtYXRIZXg6aHIsZm9ybWF0UmdiOmZyLHRvU3RyaW5nOmZyfSkpLHpuKGdyLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eXIodCk6bmV3IGdyKHQsZSxuLG51bGw9PXI/MTpyKX0pLFVuKHFuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0huOk1hdGgucG93KEhuLHQpLG5ldyBncih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PyRuOk1hdGgucG93KCRuLHQpLG5ldyBncih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IGxyKG1yKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLG1yKHQsaSxyKSxtcih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO2NvbnN0IHZyPU1hdGguUEkvMTgwLGJyPTE4MC9NYXRoLlBJLF9yPS45NjQyMix4cj0uODI1MjEsd3I9NC8yOSxrcj02LzI5LFRyPTMqa3Iqa3I7ZnVuY3Rpb24gRXIodCl7aWYodCBpbnN0YW5jZW9mIENyKXJldHVybiBuZXcgQ3IodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgQnIpcmV0dXJuIExyKHQpO3QgaW5zdGFuY2VvZiBscnx8KHQ9Y3IodCkpO3ZhciBlLG4scj1Ocih0LnIpLGk9TnIodC5nKSxhPU5yKHQuYiksbz1TcigoLjIyMjUwNDUqcisuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiByPT09aSYmaT09PWE/ZT1uPW86KGU9U3IoKC40MzYwNzQ3KnIrLjM4NTA2NDkqaSsuMTQzMDgwNCphKS9fciksbj1TcigoLjAxMzkzMjIqcisuMDk3MTA0NSppKy43MTQxNzMzKmEpL3hyKSksbmV3IENyKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBDcih0LGUsbixyKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gU3IodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9Ucit3cn1mdW5jdGlvbiBBcih0KXtyZXR1cm4gdD5rcj90KnQqdDpUcioodC13cil9ZnVuY3Rpb24gTXIodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBOcih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBEcih0KXtpZih0IGluc3RhbmNlb2YgQnIpcmV0dXJuIG5ldyBCcih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBDcnx8KHQ9RXIodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBCcihOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpicjtyZXR1cm4gbmV3IEJyKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIE9yKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Ecih0KTpuZXcgQnIodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEJyKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBMcih0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgQ3IodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp2cjtyZXR1cm4gbmV3IENyKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9em4oQ3IsKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Fcih0KTpuZXcgQ3IodCxlLG4sbnVsbD09cj8xOnIpfSksVW4ocW4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3IodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBDcih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgbHIoTXIoMy4xMzM4NTYxKihlPV9yKkFyKGUpKS0xLjYxNjg2NjcqKHQ9MSpBcih0KSktLjQ5MDYxNDYqKG49eHIqQXIobikpKSxNcigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLE1yKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksem4oQnIsT3IsVW4ocW4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnIodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCcih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBMcih0aGlzKS5yZ2IoKX19KSk7Y29uc3QgSXI9dD0+KCk9PnQ7ZnVuY3Rpb24gUnIodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBGcih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9Scih0LG4pOklyKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gUHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT1PcihlKSkuaCwobj1PcihuKSkuaCksaT1GcihlLmMsbi5jKSxhPUZyKGUubCxuLmwpLG89RnIoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLmM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9byh0KSxlKyIifX19Y29uc3QganI9UHIoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1JyKHQsbj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKTpJcihpc05hTih0KT9lOnQpfSkpO1ByKEZyKTt2YXIgWXI9TWF0aC5zcXJ0KDUwKSx6cj1NYXRoLnNxcnQoMTApLFVyPU1hdGguc3FydCgyKTtmdW5jdGlvbiBxcih0LGUsbil7dmFyIHI9KGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSxhPXIvTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KGE+PVlyPzEwOmE+PXpyPzU6YT49VXI/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhhPj1Zcj8xMDphPj16cj81OmE+PVVyPzI6MSl9ZnVuY3Rpb24gJHIodCxlLG4pe3ZhciByPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSksYT1yL2k7cmV0dXJuIGE+PVlyP2kqPTEwOmE+PXpyP2kqPTU6YT49VXImJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiBIcih0LGUpe3JldHVybiBudWxsPT10fHxudWxsPT1lP05hTjp0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBXcih0KXtsZXQgZT10LG49dDtmdW5jdGlvbiByKHQsZSxyLGkpe2ZvcihudWxsPT1yJiYocj0wKSxudWxsPT1pJiYoaT10Lmxlbmd0aCk7cjxpOyl7Y29uc3QgYT1yK2k+Pj4xO24odFthXSxlKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn1yZXR1cm4gMT09PXQubGVuZ3RoJiYoZT0oZSxuKT0+dChlKS1uLG49ZnVuY3Rpb24odCl7cmV0dXJuKGUsbik9PkhyKHQoZSksbil9KHQpKSx7bGVmdDpyLGNlbnRlcjpmdW5jdGlvbih0LG4saSxhKXtudWxsPT1pJiYoaT0wKSxudWxsPT1hJiYoYT10Lmxlbmd0aCk7Y29uc3Qgbz1yKHQsbixpLGEtMSk7cmV0dXJuIG8+aSYmZSh0W28tMV0sbik+LWUodFtvXSxuKT9vLTE6b30scmlnaHQ6ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPXQubGVuZ3RoKTtyPGk7KXtjb25zdCBhPXIraT4+PjE7bih0W2FdLGUpPjA/aT1hOnI9YSsxfXJldHVybiByfX19Y29uc3QgVnI9V3IoSHIpLEdyPVZyLnJpZ2h0LFhyPShWci5sZWZ0LFdyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fSkpLmNlbnRlcixHcik7ZnVuY3Rpb24gWnIodCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIFFyKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIEtyKCl7fXZhciBKcj0uNyx0aT0xLjQyODU3MTQyODU3MTQyODYsZWk9IlxccyooWystXT9cXGQrKVxccyoiLG5pPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHJpPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixpaT0vXiMoWzAtOWEtZl17Myw4fSkkLyxhaT1uZXcgUmVnRXhwKCJecmdiXFwoIitbZWksZWksZWldKyJcXCkkIiksb2k9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3JpLHJpLHJpXSsiXFwpJCIpLHNpPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbZWksZWksZWksbmldKyJcXCkkIiksY2k9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tyaSxyaSxyaSxuaV0rIlxcKSQiKSx1aT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbbmkscmkscmldKyJcXCkkIiksbGk9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tuaSxyaSxyaSxuaV0rIlxcKSQiKSxoaT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBmaSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGRpKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gcGkodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9aWkuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj95aShlKTozPT09bj9uZXcgYmkoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP2dpKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP2dpKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9YWkuZXhlYyh0KSk/bmV3IGJpKGVbMV0sZVsyXSxlWzNdLDEpOihlPW9pLmV4ZWModCkpP25ldyBiaSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1zaS5leGVjKHQpKT9naShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1jaS5leGVjKHQpKT9naSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT11aS5leGVjKHQpKT9raShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWxpLmV4ZWModCkpP2tpKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6aGkuaGFzT3duUHJvcGVydHkodCk/eWkoaGlbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBiaShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHlpKHQpe3JldHVybiBuZXcgYmkodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIGdpKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgYmkodCxlLG4scil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBLcnx8KHQ9cGkodCkpLHQ/bmV3IGJpKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBiaX1mdW5jdGlvbiB2aSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/bWkodCk6bmV3IGJpKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBiaSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gX2koKXtyZXR1cm4iIyIrd2kodGhpcy5yKSt3aSh0aGlzLmcpK3dpKHRoaXMuYil9ZnVuY3Rpb24geGkoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiB3aSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGtpKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgRWkodCxlLG4scil9ZnVuY3Rpb24gVGkodCl7aWYodCBpbnN0YW5jZW9mIEVpKXJldHVybiBuZXcgRWkodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgS3J8fCh0PXBpKHQpKSwhdClyZXR1cm4gbmV3IEVpO2lmKHQgaW5zdGFuY2VvZiBFaSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IEVpKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gRWkodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIENpKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBTaSh0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fVpyKEtyLHBpLHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZpLGZvcm1hdEhleDpmaSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gVGkodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpkaSx0b1N0cmluZzpkaX0pLFpyKGJpLHZpLFFyKEtyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3RpOk1hdGgucG93KHRpLHQpLG5ldyBiaSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9KcjpNYXRoLnBvdyhKcix0KSxuZXcgYmkodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpfaSxmb3JtYXRIZXg6X2ksZm9ybWF0UmdiOnhpLHRvU3RyaW5nOnhpfSkpLFpyKEVpLChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/VGkodCk6bmV3IEVpKHQsZSxuLG51bGw9PXI/MTpyKX0pLFFyKEtyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P3RpOk1hdGgucG93KHRpLHQpLG5ldyBFaSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0pyOk1hdGgucG93KEpyLHQpLG5ldyBFaSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IGJpKENpKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLENpKHQsaSxyKSxDaSh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO2NvbnN0IEFpPXQ9PigpPT50O2Z1bmN0aW9uIE1pKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19KHQsbik6QWkoaXNOYU4odCk/ZTp0KX1jb25zdCBOaT1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/TWk6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqZSxuKX19KGUsbix0KTpBaShpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4oKHQ9dmkodCkpLnIsKGU9dmkoZSkpLnIpLGk9bih0LmcsZS5nKSxhPW4odC5iLGUuYiksbz1NaSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1yKGUpLHQuZz1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gRGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pcj12aShlW25dKSxhW25dPXIucnx8MCxvW25dPXIuZ3x8MCxzW25dPXIuYnx8MDtyZXR1cm4gYT10KGEpLG89dChvKSxzPXQocyksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1hKHQpLHIuZz1vKHQpLHIuYj1zKHQpLHIrIiJ9fX1mdW5jdGlvbiBPaSh0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPVlpKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gQmkodCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiBuLnNldFRpbWUodCooMS1yKStlKnIpLG59fWZ1bmN0aW9uIExpKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fWZ1bmN0aW9uIElpKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1ZaSh0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fURpKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gU2koKG4tci9lKSplLG8saSxhLHMpfX0pKSxEaSgoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBTaSgobi1yL2UpKmUsaSxhLG8scyl9fSkpO3ZhciBSaT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRmk9bmV3IFJlZ0V4cChSaS5zb3VyY2UsImciKTtmdW5jdGlvbiBQaSh0LGUpe3ZhciBuLHIsaSxhPVJpLmxhc3RJbmRleD1GaS5sYXN0SW5kZXg9MCxvPS0xLHM9W10sYz1bXTtmb3IodCs9IiIsZSs9IiI7KG49UmkuZXhlYyh0KSkmJihyPUZpLmV4ZWMoZSkpOykoaT1yLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwobj1uWzBdKT09PShyPXJbMF0pP3Nbb10/c1tvXSs9cjpzWysrb109cjooc1srK29dPW51bGwsYy5wdXNoKHtpOm8seDpMaShuLHIpfSkpLGE9RmkubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9jWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KGNbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1jLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4scj0wO3I8ZTsrK3Ipc1sobj1jW3JdKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBqaSh0LGUpe2V8fChlPVtdKTt2YXIgbixyPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAsaT1lLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihuPTA7bjxyOysrbilpW25dPXRbbl0qKDEtYSkrZVtuXSphO3JldHVybiBpfX1mdW5jdGlvbiBZaSh0LGUpe3ZhciBuLHIsaT10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09aT9BaShlKTooIm51bWJlciI9PT1pP0xpOiJzdHJpbmciPT09aT8obj1waShlKSk/KGU9bixOaSk6UGk6ZSBpbnN0YW5jZW9mIHBpP05pOmUgaW5zdGFuY2VvZiBEYXRlP0JpOihyPWUsIUFycmF5QnVmZmVyLmlzVmlldyhyKXx8ciBpbnN0YW5jZW9mIERhdGFWaWV3P0FycmF5LmlzQXJyYXkoZSk/T2k6ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0lpOkxpOmppKSkodCxlKX1mdW5jdGlvbiB6aSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCooMS1uKStlKm4pfX1mdW5jdGlvbiBVaSh0KXtyZXR1cm4rdH12YXIgcWk9WzAsMV07ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHR9ZnVuY3Rpb24gSGkodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KG49aXNOYU4oZSk/TmFOOi41LGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgbn1mdW5jdGlvbiBXaSh0LGUsbil7dmFyIHI9dFswXSxpPXRbMV0sYT1lWzBdLG89ZVsxXTtyZXR1cm4gaTxyPyhyPUhpKGksciksYT1uKG8sYSkpOihyPUhpKHIsaSksYT1uKGEsbykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCkpfX1mdW5jdGlvbiBWaSh0LGUsbil7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytvPHI7KWlbb109SGkodFtvXSx0W28rMV0pLGFbb109bihlW29dLGVbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPVhyKHQsZSwxLHIpLTE7cmV0dXJuIGFbbl0oaVtuXShlKSl9fWZ1bmN0aW9uIEdpKHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIFhpKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaSxhLG89cWkscz1xaSxjPVlpLHU9JGk7ZnVuY3Rpb24gbCgpe3ZhciB0LGUsbixjPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKTtyZXR1cm4gdSE9PSRpJiYodD1vWzBdLGU9b1tjLTFdLHQ+ZSYmKG49dCx0PWUsZT1uKSx1PWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfSkscj1jPjI/Vmk6V2ksaT1hPW51bGwsaH1mdW5jdGlvbiBoKGUpe3JldHVybiBudWxsPT1lfHxpc05hTihlPStlKT9uOihpfHwoaT1yKG8ubWFwKHQpLHMsYykpKSh0KHUoZSkpKX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIHUoZSgoYXx8KGE9cihzLG8ubWFwKHQpLExpKSkpKG4pKSl9LGguZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUFycmF5LmZyb20odCxVaSksbCgpKTpvLnNsaWNlKCl9LGgucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9QXJyYXkuZnJvbSh0KSxsKCkpOnMuc2xpY2UoKX0saC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPUFycmF5LmZyb20odCksYz16aSxsKCl9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISF0fHwkaSxsKCkpOnUhPT0kaX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGwoKSk6Y30saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixyKXtyZXR1cm4gdD1uLGU9cixsKCl9fSgpKCRpLCRpKX1mdW5jdGlvbiBaaSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc312YXIgUWksS2k9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gSmkodCl7aWYoIShlPUtpLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7cmV0dXJuIG5ldyB0YSh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiB0YSh0KXt0aGlzLmZpbGw9dm9pZCAwPT09dC5maWxsPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT10LmFsaWduPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT10LnNpZ24/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT10LnN5bWJvbD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT10LndpZHRoP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT10LnByZWNpc2lvbj92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09dC50eXBlPyIiOnQudHlwZSsiIn1mdW5jdGlvbiBlYSh0LGUpe2lmKChuPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixyPXQuc2xpY2UoMCxuKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShuKzEpXX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4odD1lYShNYXRoLmFicyh0KSkpP3RbMV06TmFOfWZ1bmN0aW9uIHJhKHQsZSl7dmFyIG49ZWEodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX1KaS5wcm90b3R5cGU9dGEucHJvdG90eXBlLHRhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IGlhPXsiJSI6KHQsZSk9PigxMDAqdCkudG9GaXhlZChlKSxiOnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMiksYzp0PT50KyIiLGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOih0LGUpPT50LnRvRXhwb25lbnRpYWwoZSksZjoodCxlKT0+dC50b0ZpeGVkKGUpLGc6KHQsZSk9PnQudG9QcmVjaXNpb24oZSksbzp0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpLHA6KHQsZSk9PnJhKDEwMCp0LGUpLHI6cmEsczpmdW5jdGlvbih0LGUpe3ZhciBuPWVhKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV0sYT1pLShRaT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsbz1yLmxlbmd0aDtyZXR1cm4gYT09PW8/cjphPm8/cituZXcgQXJyYXkoYS1vKzEpLmpvaW4oIjAiKTphPjA/ci5zbGljZSgwLGEpKyIuIityLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK2VhKHQsTWF0aC5tYXgoMCxlK2EtMSkpWzBdfSxYOnQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDp0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gYWEodCl7cmV0dXJuIHR9dmFyIG9hLHNhLGNhLHVhPUFycmF5LnByb3RvdHlwZS5tYXAsbGE9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGhhKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1xcih0LGUsbikpfHwhaXNGaW5pdGUobykpcmV0dXJuW107aWYobz4wKXtsZXQgbj1NYXRoLnJvdW5kKHQvbykscj1NYXRoLnJvdW5kKGUvbyk7Zm9yKG4qbzx0JiYrK24scipvPmUmJi0tcixhPW5ldyBBcnJheShpPXItbisxKTsrK3M8aTspYVtzXT0obitzKSpvfWVsc2V7bz0tbztsZXQgbj1NYXRoLnJvdW5kKHQqbykscj1NYXRoLnJvdW5kKGUqbyk7Zm9yKG4vbzx0JiYrK24sci9vPmUmJi0tcixhPW5ldyBBcnJheShpPXItbisxKTsrK3M8aTspYVtzXT0obitzKS9vfXJldHVybiByJiZhLnJldmVyc2UoKSxhfShuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSgpO3JldHVybiBmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhPSRyKHQsZSxuKTtzd2l0Y2goKHI9SmkobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihuYShlKS8zKSkpLW5hKE1hdGguYWJzKHQpKSl9KGEsbykpfHwoci5wcmVjaXNpb249aSksY2EocixvKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLG5hKGUpLW5hKHQpKSsxfShhLE1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKSkpfHwoci5wcmVjaXNpb249aS0oImUiPT09ci50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1uYShNYXRoLmFicyh0KSkpfShhKSl8fChyLnByZWNpc2lvbj1pLTIqKCIlIj09PXIudHlwZSkpfXJldHVybiBzYShyKX0oclswXSxyW3IubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgcixpLGE9ZSgpLG89MCxzPWEubGVuZ3RoLTEsYz1hW29dLHU9YVtzXSxsPTEwO2Zvcih1PGMmJihpPWMsYz11LHU9aSxpPW8sbz1zLHM9aSk7bC0tID4wOyl7aWYoKGk9cXIoYyx1LG4pKT09PXIpcmV0dXJuIGFbb109YyxhW3NdPXUsZShhKTtpZihpPjApYz1NYXRoLmZsb29yKGMvaSkqaSx1PU1hdGguY2VpbCh1L2kpKmk7ZWxzZXtpZighKGk8MCkpYnJlYWs7Yz1NYXRoLmNlaWwoYyppKS9pLHU9TWF0aC5mbG9vcih1KmkpL2l9cj1pfXJldHVybiB0fSx0fWZ1bmN0aW9uIGZhKCl7dmFyIHQ9WGkoKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKHQsZmEoKSl9LFppLmFwcGx5KHQsYXJndW1lbnRzKSxoYSh0KX1vYT1mdW5jdGlvbih0KXt2YXIgZSxuLHI9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/YWE6KGU9dWEuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksbj10LnRob3VzYW5kcysiIixmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPVtdLG89MCxzPWVbMF0sYz0wO2k+MCYmcz4wJiYoYytzKzE+ciYmKHM9TWF0aC5tYXgoMSxyLWMpKSxhLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChjKz1zKzEpPnIpKTspcz1lW289KG8rMSklZS5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKG4pfSksaT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMF0rIiIsYT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMV0rIiIsbz12b2lkIDA9PT10LmRlY2ltYWw/Ii4iOnQuZGVjaW1hbCsiIixzPXZvaWQgMD09PXQubnVtZXJhbHM/YWE6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KHVhLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxjPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLHU9dm9pZCAwPT09dC5taW51cz8i4oiSIjp0Lm1pbnVzKyIiLGw9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaCh0KXt2YXIgZT0odD1KaSh0KSkuZmlsbCxuPXQuYWxpZ24saD10LnNpZ24sZj10LnN5bWJvbCxkPXQuemVybyxwPXQud2lkdGgseT10LmNvbW1hLGc9dC5wcmVjaXNpb24sbT10LnRyaW0sdj10LnR5cGU7Im4iPT09dj8oeT0hMCx2PSJnIik6aWFbdl18fCh2b2lkIDA9PT1nJiYoZz0xMiksbT0hMCx2PSJnIiksKGR8fCIwIj09PWUmJiI9Ij09PW4pJiYoZD0hMCxlPSIwIixuPSI9Iik7dmFyIGI9IiQiPT09Zj9pOiIjIj09PWYmJi9bYm94WF0vLnRlc3Qodik/IjAiK3YudG9Mb3dlckNhc2UoKToiIixfPSIkIj09PWY/YTovWyVwXS8udGVzdCh2KT9jOiIiLHg9aWFbdl0sdz0vW2RlZmdwcnMlXS8udGVzdCh2KTtmdW5jdGlvbiBrKHQpe3ZhciBpLGEsYyxmPWIsaz1fO2lmKCJjIj09PXYpaz14KHQpK2ssdD0iIjtlbHNle3ZhciBUPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP2w6eChNYXRoLmFicyh0KSxnKSxtJiYodD1mdW5jdGlvbih0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLHI9MSxpPS0xO3I8bjsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6aT1lPXI7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ciksZT1yO2JyZWFrO2RlZmF1bHQ6aWYoISt0W3JdKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0odCkpLFQmJjA9PSt0JiYiKyIhPT1oJiYoVD0hMSksZj0oVD8iKCI9PT1oP2g6dToiLSI9PT1ofHwiKCI9PT1oPyIiOmgpK2Ysaz0oInMiPT09dj9sYVs4K1FpLzNdOiIiKStrKyhUJiYiKCI9PT1oPyIpIjoiIiksdylmb3IoaT0tMSxhPXQubGVuZ3RoOysraTxhOylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXtrPSg0Nj09PWM/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkrayx0PXQuc2xpY2UoMCxpKTticmVha319eSYmIWQmJih0PXIodCwxLzApKTt2YXIgRT1mLmxlbmd0aCt0Lmxlbmd0aCtrLmxlbmd0aCxDPUU8cD9uZXcgQXJyYXkocC1FKzEpLmpvaW4oZSk6IiI7c3dpdGNoKHkmJmQmJih0PXIoQyt0LEMubGVuZ3RoP3Atay5sZW5ndGg6MS8wKSxDPSIiKSxuKXtjYXNlIjwiOnQ9Zit0K2srQzticmVhaztjYXNlIj0iOnQ9ZitDK3QrazticmVhaztjYXNlIl4iOnQ9Qy5zbGljZSgwLEU9Qy5sZW5ndGg+PjEpK2YrdCtrK0Muc2xpY2UoRSk7YnJlYWs7ZGVmYXVsdDp0PUMrZit0K2t9cmV0dXJuIHModCl9cmV0dXJuIGc9dm9pZCAwPT09Zz82Oi9bZ3Byc10vLnRlc3Qodik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxnKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxnKSksay50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxrfXJldHVybntmb3JtYXQ6aCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxlKXt2YXIgbj1oKCgodD1KaSh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IobmEoZSkvMykpKSxpPU1hdGgucG93KDEwLC1yKSxhPWxhWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4oaSp0KSthfX19fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSxzYT1vYS5mb3JtYXQsY2E9b2EuZm9ybWF0UHJlZml4O2NsYXNzIGRhIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKHQsZT15YSl7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTplfX0pLG51bGwhPXQpZm9yKGNvbnN0W2Usbl1vZiB0KXRoaXMuc2V0KGUsbil9Z2V0KHQpe3JldHVybiBzdXBlci5nZXQocGEodGhpcyx0KSl9aGFzKHQpe3JldHVybiBzdXBlci5oYXMocGEodGhpcyx0KSl9c2V0KHQsZSl7cmV0dXJuIHN1cGVyLnNldChmdW5jdGlvbih7X2ludGVybjp0LF9rZXk6ZX0sbil7Y29uc3Qgcj1lKG4pO3JldHVybiB0LmhhcyhyKT90LmdldChyKToodC5zZXQocixuKSxuKX0odGhpcyx0KSxlKX1kZWxldGUodCl7cmV0dXJuIHN1cGVyLmRlbGV0ZShmdW5jdGlvbih7X2ludGVybjp0LF9rZXk6ZX0sbil7Y29uc3Qgcj1lKG4pO3JldHVybiB0LmhhcyhyKSYmKG49dC5nZXQobiksdC5kZWxldGUocikpLG59KHRoaXMsdCkpfX1mdW5jdGlvbiBwYSh7X2ludGVybjp0LF9rZXk6ZX0sbil7Y29uc3Qgcj1lKG4pO3JldHVybiB0LmhhcyhyKT90LmdldChyKTpufWZ1bmN0aW9uIHlhKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0P3QudmFsdWVPZigpOnR9U2V0O2NvbnN0IGdhPVN5bWJvbCgiaW1wbGljaXQiKTtmdW5jdGlvbiBtYSgpe3ZhciB0PW5ldyBkYSxlPVtdLG49W10scj1nYTtmdW5jdGlvbiBpKGkpe2xldCBhPXQuZ2V0KGkpO2lmKHZvaWQgMD09PWEpe2lmKHIhPT1nYSlyZXR1cm4gcjt0LnNldChpLGE9ZS5wdXNoKGkpLTEpfXJldHVybiBuW2Elbi5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1uZXcgZGE7Zm9yKGNvbnN0IHIgb2Ygbil0LmhhcyhyKXx8dC5zZXQocixlLnB1c2gociktMSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49QXJyYXkuZnJvbSh0KSxpKTpuLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBtYShlLG4pLnVua25vd24ocil9LFppLmFwcGx5KGksYXJndW1lbnRzKSxpfWNvbnN0IHZhPTFlMyxiYT02ZTQsX2E9MzZlNSx4YT04NjRlNSx3YT02MDQ4ZTUsa2E9MzE1MzZlNjt2YXIgVGE9bmV3IERhdGUsRWE9bmV3IERhdGU7ZnVuY3Rpb24gQ2EodCxlLG4scil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0saS5jZWlsPWZ1bmN0aW9uKG4pe3JldHVybiB0KG49bmV3IERhdGUobi0xKSksZShuLDEpLHQobiksbn0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1pKHQpLG49aS5jZWlsKHQpO3JldHVybiB0LWU8bi10P2U6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSxudWxsPT1uPzE6TWF0aC5mbG9vcihuKSksdH0saS5yYW5nZT1mdW5jdGlvbihuLHIsYSl7dmFyIG8scz1bXTtpZihuPWkuY2VpbChuKSxhPW51bGw9PWE/MTpNYXRoLmZsb29yKGEpLCEobjxyJiZhPjApKXJldHVybiBzO2Rve3MucHVzaChvPW5ldyBEYXRlKCtuKSksZShuLGEpLHQobil9d2hpbGUobzxuJiZuPHIpO3JldHVybiBzfSxpLmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gQ2EoKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0pLChmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO2UodCwtMSksIW4odCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO2UodCwxKSwhbih0KTspO30pKX0sbiYmKGkuY291bnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gVGEuc2V0VGltZSgrZSksRWEuc2V0VGltZSgrciksdChUYSksdChFYSksTWF0aC5mbG9vcihuKFRhLEVhKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKGUpe3JldHVybiByKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiBpLmNvdW50KDAsZSkldD09MH0pOmk6bnVsbH0pLGl9dmFyIFNhPUNhKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7U2EuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9DYSgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpTYTpudWxsfTtjb25zdCBBYT1TYTtTYS5yYW5nZTt2YXIgTWE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdmEpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdmF9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpO2NvbnN0IE5hPU1hO01hLnJhbmdlO3ZhciBEYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSp2YSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpiYSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9iYX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSk7Y29uc3QgT2E9RGE7RGEucmFuZ2U7dmFyIEJhPUNhKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKnZhLXQuZ2V0TWludXRlcygpKmJhKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKl9hKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL19hfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSk7Y29uc3QgTGE9QmE7QmEucmFuZ2U7dmFyIElhPUNhKCh0PT50LnNldEhvdXJzKDAsMCwwLDApKSwoKHQsZSk9PnQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSksKCh0LGUpPT4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpiYSkveGEpLCh0PT50LmdldERhdGUoKS0xKSk7Y29uc3QgUmE9SWE7ZnVuY3Rpb24gRmEodCl7cmV0dXJuIENhKChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpiYSkvd2F9KSl9SWEucmFuZ2U7dmFyIFBhPUZhKDApLGphPUZhKDEpLFlhPUZhKDIpLHphPUZhKDMpLFVhPUZhKDQpLHFhPUZhKDUpLCRhPUZhKDYpLEhhPShQYS5yYW5nZSxqYS5yYW5nZSxZYS5yYW5nZSx6YS5yYW5nZSxVYS5yYW5nZSxxYS5yYW5nZSwkYS5yYW5nZSxDYSgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpKTtjb25zdCBXYT1IYTtIYS5yYW5nZTt2YXIgVmE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO1ZhLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/Q2EoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IEdhPVZhO1ZhLnJhbmdlO3ZhciBYYT1DYSgoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpiYSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9iYX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSk7Y29uc3QgWmE9WGE7WGEucmFuZ2U7dmFyIFFhPUNhKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqX2EpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvX2F9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKTtjb25zdCBLYT1RYTtRYS5yYW5nZTt2YXIgSmE9Q2EoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS94YX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtjb25zdCB0bz1KYTtmdW5jdGlvbiBlbyh0KXtyZXR1cm4gQ2EoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3dhfSkpfUphLnJhbmdlO3ZhciBubz1lbygwKSxybz1lbygxKSxpbz1lbygyKSxhbz1lbygzKSxvbz1lbyg0KSxzbz1lbyg1KSxjbz1lbyg2KSx1bz0obm8ucmFuZ2Uscm8ucmFuZ2UsaW8ucmFuZ2UsYW8ucmFuZ2Usb28ucmFuZ2Usc28ucmFuZ2UsY28ucmFuZ2UsQ2EoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pKSk7Y29uc3QgbG89dW87dW8ucmFuZ2U7dmFyIGhvPUNhKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtoby5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0NhKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTtjb25zdCBmbz1obztmdW5jdGlvbiBwbyh0LGUsbixyLGksYSl7Y29uc3Qgbz1bW05hLDEsdmFdLFtOYSw1LDVlM10sW05hLDE1LDE1ZTNdLFtOYSwzMCwzZTRdLFthLDEsYmFdLFthLDUsM2U1XSxbYSwxNSw5ZTVdLFthLDMwLDE4ZTVdLFtpLDEsX2FdLFtpLDMsMTA4ZTVdLFtpLDYsMjE2ZTVdLFtpLDEyLDQzMmU1XSxbciwxLHhhXSxbciwyLDE3MjhlNV0sW24sMSx3YV0sW2UsMSwyNTkyZTZdLFtlLDMsNzc3NmU2XSxbdCwxLGthXV07ZnVuY3Rpb24gcyhlLG4scil7Y29uc3QgaT1NYXRoLmFicyhuLWUpL3IsYT1XcigoKFssLHRdKT0+dCkpLnJpZ2h0KG8saSk7aWYoYT09PW8ubGVuZ3RoKXJldHVybiB0LmV2ZXJ5KCRyKGUva2Esbi9rYSxyKSk7aWYoMD09PWEpcmV0dXJuIEFhLmV2ZXJ5KE1hdGgubWF4KCRyKGUsbixyKSwxKSk7Y29uc3RbcyxjXT1vW2kvb1thLTFdWzJdPG9bYV1bMl0vaT9hLTE6YV07cmV0dXJuIHMuZXZlcnkoYyl9cmV0dXJuW2Z1bmN0aW9uKHQsZSxuKXtjb25zdCByPWU8dDtyJiYoW3QsZV09W2UsdF0pO2NvbnN0IGk9biYmImZ1bmN0aW9uIj09dHlwZW9mIG4ucmFuZ2U/bjpzKHQsZSxuKSxhPWk/aS5yYW5nZSh0LCtlKzEpOltdO3JldHVybiByP2EucmV2ZXJzZSgpOmF9LHNdfWhvLnJhbmdlO2NvbnN0W3lvLGdvXT1wbyhmbyxsbyxubyx0byxLYSxaYSksW21vLHZvXT1wbyhHYSxXYSxQYSxSYSxMYSxPYSk7ZnVuY3Rpb24gYm8odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIF9vKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIHhvKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX12YXIgd28sa28sVG89eyItIjoiIixfOiIgIiwwOiIwIn0sRW89L15ccypcZCsvLENvPS9eJS8sU289L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIEFvKHQsZSxuKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gcisoYTxuP25ldyBBcnJheShuLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIE1vKHQpe3JldHVybiB0LnJlcGxhY2UoU28sIlxcJCYiKX1mdW5jdGlvbiBObyh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoTW8pLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBEbyh0KXtyZXR1cm4gbmV3IE1hcCh0Lm1hcCgoKHQsZSk9Plt0LnRvTG93ZXJDYXNlKCksZV0pKSl9ZnVuY3Rpb24gT28odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQm8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTG8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSW8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUm8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRm8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUG8odCxlLG4pe3ZhciByPUVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqbyh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFlvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHbyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYbyh0LGUsbil7dmFyIHI9Q28uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBabyh0LGUsbil7dmFyIHI9RW8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFvKHQsZSxuKXt2YXIgcj1Fby5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS28odCxlKXtyZXR1cm4gQW8odC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBKbyh0LGUpe3JldHVybiBBbyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiB0cyh0LGUpe3JldHVybiBBbyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gZXModCxlKXtyZXR1cm4gQW8oMStSYS5jb3VudChHYSh0KSx0KSxlLDMpfWZ1bmN0aW9uIG5zKHQsZSl7cmV0dXJuIEFvKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBycyh0LGUpe3JldHVybiBucyh0LGUpKyIwMDAifWZ1bmN0aW9uIGlzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gYXModCxlKXtyZXR1cm4gQW8odC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBvcyh0LGUpe3JldHVybiBBbyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIHNzKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBjcyh0LGUpe3JldHVybiBBbyhQYS5jb3VudChHYSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gdXModCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/VWEodCk6VWEuY2VpbCh0KX1mdW5jdGlvbiBscyh0LGUpe3JldHVybiB0PXVzKHQpLEFvKFVhLmNvdW50KEdhKHQpLHQpKyg0PT09R2EodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gaHModCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gZnModCxlKXtyZXR1cm4gQW8oamEuY291bnQoR2EodCktMSx0KSxlLDIpfWZ1bmN0aW9uIGRzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBwcyh0LGUpe3JldHVybiBBbygodD11cyh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiB5cyh0LGUpe3JldHVybiBBbyh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gZ3ModCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiBBbygodD1uPj00fHwwPT09bj9VYSh0KTpVYS5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIG1zKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrQW8oZS82MHwwLCIwIiwyKStBbyhlJTYwLCIwIiwyKX1mdW5jdGlvbiB2cyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGJzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIF9zKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB4cyh0LGUpe3JldHVybiBBbygxK3RvLmNvdW50KGZvKHQpLHQpLGUsMyl9ZnVuY3Rpb24gd3ModCxlKXtyZXR1cm4gQW8odC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGtzKHQsZSl7cmV0dXJuIHdzKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gVHModCxlKXtyZXR1cm4gQW8odC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBFcyh0LGUpe3JldHVybiBBbyh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIENzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gU3ModCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEFzKHQsZSl7cmV0dXJuIEFvKG5vLmNvdW50KGZvKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBNcyh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9vbyh0KTpvby5jZWlsKHQpfWZ1bmN0aW9uIE5zKHQsZSl7cmV0dXJuIHQ9TXModCksQW8ob28uY291bnQoZm8odCksdCkrKDQ9PT1mbyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBEcyh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBPcyh0LGUpe3JldHVybiBBbyhyby5jb3VudChmbyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQnModCxlKXtyZXR1cm4gQW8odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIExzKHQsZSl7cmV0dXJuIEFvKCh0PU1zKHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIElzKHQsZSl7cmV0dXJuIEFvKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBScyh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIEFvKCh0PW4+PTR8fDA9PT1uP29vKHQpOm9vLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gRnMoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFBzKCl7cmV0dXJuIiUifWZ1bmN0aW9uIGpzKHQpe3JldHVybit0fWZ1bmN0aW9uIFlzKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24genModCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIFVzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZT8rdDorbmV3IERhdGUoK3QpfWZ1bmN0aW9uIHFzKHQsZSxuLHIsaSxhLG8scyxjLHUpe3ZhciBsPVhpKCksaD1sLmludmVydCxmPWwuZG9tYWluLGQ9dSgiLiVMIikscD11KCI6JVMiKSx5PXUoIiVJOiVNIiksZz11KCIlSSAlcCIpLG09dSgiJWEgJWQiKSx2PXUoIiViICVkIiksYj11KCIlQiIpLF89dSgiJVkiKTtmdW5jdGlvbiB4KHQpe3JldHVybihjKHQpPHQ/ZDpzKHQpPHQ/cDpvKHQpPHQ/eTphKHQpPHQ/ZzpyKHQpPHQ/aSh0KTx0P206djpuKHQpPHQ/YjpfKSh0KX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGgodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mKEFycmF5LmZyb20odCxVcykpOmYoKS5tYXAoenMpfSxsLnRpY2tzPWZ1bmN0aW9uKGUpe3ZhciBuPWYoKTtyZXR1cm4gdChuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09ZT8xMDplKX0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/eDp1KGUpfSxsLm5pY2U9ZnVuY3Rpb24odCl7dmFyIG49ZigpO3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yYW5nZXx8KHQ9ZShuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KSksdD9mKGZ1bmN0aW9uKHQsZSl7dmFyIG4scj0wLGk9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxhPXRbcl0sbz10W2ldO3JldHVybiBvPGEmJihuPXIscj1pLGk9bixuPWEsYT1vLG89biksdFtyXT1lLmZsb29yKGEpLHRbaV09ZS5jZWlsKG8pLHR9KG4sdCkpOmx9LGwuY29weT1mdW5jdGlvbigpe3JldHVybiBHaShsLHFzKHQsZSxuLHIsaSxhLG8scyxjLHUpKX0sbH1mdW5jdGlvbiAkcygpe31mdW5jdGlvbiBIcyh0KXtyZXR1cm4gbnVsbD09dD8kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIFdzKHQpe3JldHVybiBudWxsPT10P1tdOkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIFZzKCl7cmV0dXJuW119ZnVuY3Rpb24gR3ModCl7cmV0dXJuIG51bGw9PXQ/VnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiBYcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBacyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19d289ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxyPXQudGltZSxpPXQucGVyaW9kcyxhPXQuZGF5cyxvPXQuc2hvcnREYXlzLHM9dC5tb250aHMsYz10LnNob3J0TW9udGhzLHU9Tm8oaSksbD1EbyhpKSxoPU5vKGEpLGY9RG8oYSksZD1ObyhvKSxwPURvKG8pLHk9Tm8ocyksZz1EbyhzKSxtPU5vKGMpLHY9RG8oYyksYj17YTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOktvLGU6S28sZjpycyxnOnBzLEc6Z3MsSDpKbyxJOnRzLGo6ZXMsTDpucyxtOmlzLE06YXMscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6anMsczpZcyxTOm9zLHU6c3MsVTpjcyxWOmxzLHc6aHMsVzpmcyx4Om51bGwsWDpudWxsLHk6ZHMsWTp5cyxaOm1zLCIlIjpQc30sXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOnZzLGU6dnMsZjprcyxnOkxzLEc6UnMsSDpicyxJOl9zLGo6eHMsTDp3cyxtOlRzLE06RXMscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6anMsczpZcyxTOkNzLHU6U3MsVTpBcyxWOk5zLHc6RHMsVzpPcyx4Om51bGwsWDpudWxsLHk6QnMsWTpJcyxaOkZzLCIlIjpQc30seD17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cC5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9Zi5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09di5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Zy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6VW8sZTpVbyxmOkdvLGc6UG8sRzpGbyxIOiRvLEk6JG8sajpxbyxMOlZvLG06em8sTTpIbyxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLG4rclswXS5sZW5ndGgpOi0xfSxxOllvLFE6Wm8sczpRbyxTOldvLHU6Qm8sVTpMbyxWOklvLHc6T28sVzpSbyx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVCh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFQodCxyLGUsbil9LHk6UG8sWTpGbyxaOmpvLCIlIjpYb307ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT1Ub1tyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9eG8oMTkwMCx2b2lkIDAsMSk7aWYoVChhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKGUmJiEoIloiaW4gYSkmJihhLlo9MCksInAiaW4gYSYmKGEuSD1hLkglMTIrMTIqYS5wKSx2b2lkIDA9PT1hLm0mJihhLm09InEiaW4gYT9hLnE6MCksIlYiaW4gYSl7aWYoYS5WPDF8fGEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBhfHwoYS53PTEpLCJaImluIGE/KGk9KHI9X28oeG8oYS55LDAsMSkpKS5nZXRVVENEYXkoKSxyPWk+NHx8MD09PWk/cm8uY2VpbChyKTpybyhyKSxyPXRvLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0VVRDRnVsbFllYXIoKSxhLm09ci5nZXRVVENNb250aCgpLGEuZD1yLmdldFVUQ0RhdGUoKSsoYS53KzYpJTcpOihpPShyPWJvKHhvKGEueSwwLDEpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pP2phLmNlaWwocik6amEocikscj1SYS5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldEZ1bGxZZWFyKCksYS5tPXIuZ2V0TW9udGgoKSxhLmQ9ci5nZXREYXRlKCkrKGEudys2KSU3KX1lbHNlKCJXImluIGF8fCJVImluIGEpJiYoInciaW4gYXx8KGEudz0idSJpbiBhP2EudSU3OiJXImluIGE/MTowKSxpPSJaImluIGE/X28oeG8oYS55LDAsMSkpLmdldFVUQ0RheSgpOmJvKHhvKGEueSwwLDEpKS5nZXREYXkoKSxhLm09MCxhLmQ9IlciaW4gYT8oYS53KzYpJTcrNyphLlctKGkrNSklNzphLncrNyphLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gYT8oYS5IKz1hLlovMTAwfDAsYS5NKz1hLlolMTAwLF9vKGEpKTpibyhhKX19ZnVuY3Rpb24gVCh0LGUsbixyKXtmb3IodmFyIGksYSxvPTAscz1lLmxlbmd0aCxjPW4ubGVuZ3RoO288czspe2lmKHI+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQobysrKSkpe2lmKGk9ZS5jaGFyQXQobysrKSwhKGE9eFtpIGluIFRvP2UuY2hhckF0KG8rKyk6aV0pfHwocj1hKHQsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfXJldHVybiBiLng9dyhuLGIpLGIuWD13KHIsYiksYi5jPXcoZSxiKSxfLng9dyhuLF8pLF8uWD13KHIsXyksXy5jPXcoZSxfKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsYik7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLGtvPXdvLmZvcm1hdCx3by5wYXJzZSx3by51dGNGb3JtYXQsd28udXRjUGFyc2U7dmFyIFFzPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIEtzKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIEpzPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gdGMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBlYyh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBuYyh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1mdW5jdGlvbiByYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaWModCxlLG4scixpLGEpe2Zvcih2YXIgbyxzPTAsYz1lLmxlbmd0aCx1PWEubGVuZ3RoO3M8dTsrK3MpKG89ZVtzXSk/KG8uX19kYXRhX189YVtzXSxyW3NdPW8pOm5bc109bmV3IG5jKHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiBhYyh0LGUsbixyLGksYSxvKXt2YXIgcyxjLHUsbD1uZXcgTWFwLGg9ZS5sZW5ndGgsZj1hLmxlbmd0aCxkPW5ldyBBcnJheShoKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJihkW3NdPXU9by5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpKyIiLGwuaGFzKHUpP2lbc109YzpsLnNldCh1LGMpKTtmb3Iocz0wO3M8ZjsrK3MpdT1vLmNhbGwodCxhW3NdLHMsYSkrIiIsKGM9bC5nZXQodSkpPyhyW3NdPWMsYy5fX2RhdGFfXz1hW3NdLGwuZGVsZXRlKHUpKTpuW3NdPW5ldyBuYyh0LGFbc10pO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmbC5nZXQoZFtzXSk9PT1jJiYoaVtzXT1jKX1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiBzYyh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gY2ModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59bmMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuYyxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgdWM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGxjPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp1Yyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIGhjKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGxjLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpsY1tlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIGZjKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBkYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHBjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24geWModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gZ2ModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIG1jKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIHZjKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBiYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBfYyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIHhjKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIHdjKHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8dmModCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24ga2ModCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIFRjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBFYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBDYyh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gU2ModCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgQWModCl9ZnVuY3Rpb24gQWModCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPUNjKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gTWModCxlKXtmb3IodmFyIG49U2ModCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBOYyh0LGUpe2Zvcih2YXIgbj1TYyh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIERjKHQpe3JldHVybiBmdW5jdGlvbigpe01jKHRoaXMsdCl9fWZ1bmN0aW9uIE9jKHQpe3JldHVybiBmdW5jdGlvbigpe05jKHRoaXMsdCl9fWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP01jOk5jKSh0aGlzLHQpfX1mdW5jdGlvbiBMYygpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gSWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBSYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gRmMoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBQYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBqYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIFljKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHpjKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gVWModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT11YyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dWM/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIHFjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uICRjKHQpe3ZhciBlPWhjKHQpO3JldHVybihlLmxvY2FsP3FjOlVjKShlKX1mdW5jdGlvbiBIYygpe3JldHVybiBudWxsfWZ1bmN0aW9uIFdjKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVmMoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIEdjKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBYYyh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBaYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5vcHRpb25zKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gUWModCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGk9dGhpcy5fX29uLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fShlKTtpZihpKWZvcih2YXIgbz0wLHM9aS5sZW5ndGg7bzxzOysrbylpZigocj1pW29dKS50eXBlPT09dC50eXBlJiZyLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcixyLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcj1hLHIub3B0aW9ucz1uKSx2b2lkKHIudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLG4pLHI9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOm59LGk/aS5wdXNoKHIpOnRoaXMuX19vbj1bcl19fWZ1bmN0aW9uIEtjKHQsZSxuKXt2YXIgcj12Yyh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShlLG4pOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oaS5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxpLmRldGFpbD1uLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBKYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBLYyh0aGlzLHQsZSl9fWZ1bmN0aW9uIHR1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtjKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fUFjLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIGV1PVtudWxsXTtmdW5jdGlvbiBudSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBydSgpe3JldHVybiBuZXcgbnUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxldSl9bnUucHJvdG90eXBlPXJ1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bnUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Icyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IG51KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXcyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0KTpHcyh0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1bXSxpPVtdLGE9MDthPG47KythKWZvcih2YXIgbyxzPWVbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSkobz1zW3VdKSYmKHIucHVzaCh0LmNhbGwobyxvLl9fZGF0YV9fLHUscykpLGkucHVzaChvKSk7cmV0dXJuIG5ldyBudShyLGkpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09dD9LczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUXMuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpacyh0KSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09dD90YzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSnMuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpacyh0KSkpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVhzKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBudShyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxvYyk7dmFyIG49ZT9hYzppYyxyPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJjKHQpKTtmb3IodmFyIGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3Upe3ZhciBsPXJbdV0saD1pW3VdLGY9aC5sZW5ndGgsZD1zYyh0LmNhbGwobCxsJiZsLl9fZGF0YV9fLHUscikpLHA9ZC5sZW5ndGgseT1zW3VdPW5ldyBBcnJheShwKSxnPW9bdV09bmV3IEFycmF5KHApLG09Y1t1XT1uZXcgQXJyYXkoZik7bihsLGgseSxnLG0sZCxlKTtmb3IodmFyIHYsYixfPTAseD0wO188cDsrK18paWYodj15W19dKXtmb3IoXz49eCYmKHg9XysxKTshKGI9Z1t4XSkmJisreDxwOyk7di5fbmV4dD1ifHxudWxsfX1yZXR1cm4obz1uZXcgbnUobyxyKSkuX2VudGVyPXMsby5fZXhpdD1jLG99LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBudSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChlYyksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG51KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoZWMpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHI9dChyKSkmJihyPXIuc2VsZWN0aW9uKCkpOnI9ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSkmJihpPWkuc2VsZWN0aW9uKCkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQsbj10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsaT1uLmxlbmd0aCxhPXIubGVuZ3RoLG89TWF0aC5taW4oaSxhKSxzPW5ldyBBcnJheShpKSxjPTA7YzxvOysrYylmb3IodmFyIHUsbD1uW2NdLGg9cltjXSxmPWwubGVuZ3RoLGQ9c1tjXT1uZXcgQXJyYXkoZikscD0wO3A8ZjsrK3ApKHU9bFtwXXx8aFtwXSkmJihkW3BdPXUpO2Zvcig7YzxpOysrYylzW2NdPW5bY107cmV0dXJuIG5ldyBudShzLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxhPWkubGVuZ3RoLTEsbz1pW2FdOy0tYT49MDspKHI9aVthXSkmJihvJiY0XnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixvKSxvPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9Y2MpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSl7Zm9yKHZhciBvLHM9blthXSxjPXMubGVuZ3RoLHU9aVthXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKG89c1tsXSkmJih1W2xdPW8pO3Uuc29ydChlKX1yZXR1cm4gbmV3IG51KGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1yW2ldO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXtsZXQgdD0wO2Zvcihjb25zdCBlIG9mIHRoaXMpKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1oYyh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/ZGM6ZmM6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9tYzpnYzpuLmxvY2FsP3ljOnBjKShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2JjOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3hjOl9jKSh0LGUsbnVsbD09bj8iIjpuKSk6d2ModGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/a2M6ImZ1bmN0aW9uIj09dHlwZW9mIGU/RWM6VGMpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49Q2ModCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9U2ModGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/QmM6ZT9EYzpPYykobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/TGM6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1JjOkljKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/RmM6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2pjOlBjKSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goWWMpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goemMpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokYyh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OiRjKHQpLHI9bnVsbD09ZT9IYzoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOkhzKGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFdjKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/R2M6VmMpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9WGModCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/UWM6WmMscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/dHU6SmMpKHQsZSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByLGk9dFtlXSxhPTAsbz1pLmxlbmd0aDthPG87KythKShyPWlbYV0pJiYoeWllbGQgcil9fTtjb25zdCBpdT1ydTtmdW5jdGlvbiBhdSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IG51KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgbnUoW1t0XV0sZXUpfWZ1bmN0aW9uIG91KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgbnUoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgbnUoW1dzKHQpXSxldSl9Y29uc3Qgc3U9TWF0aC5QSSxjdT0yKnN1LHV1PTFlLTYsbHU9Y3UtdXU7ZnVuY3Rpb24gaHUoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBmdSgpe3JldHVybiBuZXcgaHV9aHUucHJvdG90eXBlPWZ1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aHUsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dD0rdCxlPStlLG49K24scj0rcixpPStpO3ZhciBhPXRoaXMuX3gxLG89dGhpcy5feTEscz1uLXQsYz1yLWUsdT1hLXQsbD1vLWUsaD11KnUrbCpsO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihoPnV1KWlmKE1hdGguYWJzKGwqcy1jKnUpPnV1JiZpKXt2YXIgZj1uLWEsZD1yLW8scD1zKnMrYypjLHk9ZipmK2QqZCxnPU1hdGguc3FydChwKSxtPU1hdGguc3FydChoKSx2PWkqTWF0aC50YW4oKHN1LU1hdGguYWNvcygocCtoLXkpLygyKmcqbSkpKS8yKSxiPXYvbSxfPXYvZztNYXRoLmFicyhiLTEpPnV1JiYodGhpcy5fKz0iTCIrKHQrYip1KSsiLCIrKGUrYipsKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGwqZj51KmQpKyIsIisodGhpcy5feDE9dCtfKnMpKyIsIisodGhpcy5feTE9ZStfKmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSl9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksYSl7dD0rdCxlPStlLGE9ISFhO3ZhciBvPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksYz10K28sdT1lK3MsbD0xXmEsaD1hP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitjKyIsIit1OihNYXRoLmFicyh0aGlzLl94MS1jKT51dXx8TWF0aC5hYnModGhpcy5feTEtdSk+dXUpJiYodGhpcy5fKz0iTCIrYysiLCIrdSksbiYmKGg8MCYmKGg9aCVjdStjdSksaD5sdT90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHQtbykrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHRoaXMuX3gxPWMpKyIsIisodGhpcy5feTE9dSk6aD51dSYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoaD49c3UpKyIsIitsKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtjb25zdCBkdT1mdTtmdW5jdGlvbiBwdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIHl1PU1hdGguYWJzLGd1PU1hdGguYXRhbjIsbXU9TWF0aC5jb3MsdnU9TWF0aC5tYXgsYnU9TWF0aC5taW4sX3U9TWF0aC5zaW4seHU9TWF0aC5zcXJ0LHd1PTFlLTEyLGt1PU1hdGguUEksVHU9a3UvMixFdT0yKmt1O2Z1bmN0aW9uIEN1KHQpe3JldHVybiB0PjE/MDp0PC0xP2t1Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBTdSh0KXtyZXR1cm4gdD49MT9UdTp0PD0tMT8tVHU6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEF1KHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIE11KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIE51KHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gRHUodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gT3UodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gQnUodCxlLG4scixpLGEsbyxzKXt2YXIgYz1uLXQsdT1yLWUsbD1vLWksaD1zLWEsZj1oKmMtbCp1O2lmKCEoZipmPHd1KSlyZXR1cm5bdCsoZj0obCooZS1hKS1oKih0LWkpKS9mKSpjLGUrZip1XX1mdW5jdGlvbiBMdSh0LGUsbixyLGksYSxvKXt2YXIgcz10LW4sYz1lLXIsdT0obz9hOi1hKS94dShzKnMrYypjKSxsPXUqYyxoPS11KnMsZj10K2wsZD1lK2gscD1uK2wseT1yK2gsZz0oZitwKS8yLG09KGQreSkvMix2PXAtZixiPXktZCxfPXYqditiKmIseD1pLWEsdz1mKnktcCpkLGs9KGI8MD8tMToxKSp4dSh2dSgwLHgqeCpfLXcqdykpLFQ9KHcqYi12KmspL18sRT0oLXcqdi1iKmspL18sQz0odypiK3YqaykvXyxTPSgtdyp2K2IqaykvXyxBPVQtZyxNPUUtbSxOPUMtZyxEPVMtbTtyZXR1cm4gQSpBK00qTT5OKk4rRCpEJiYoVD1DLEU9Uykse2N4OlQsY3k6RSx4MDE6LWwseTAxOi1oLHgxMTpUKihpL3gtMSkseTExOkUqKGkveC0xKX19ZnVuY3Rpb24gSXUoKXt2YXIgdD1BdSxlPU11LG49cHUoMCkscj1udWxsLGk9TnUsYT1EdSxvPU91LHM9bnVsbDtmdW5jdGlvbiBjKCl7dmFyIGMsdSxsPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLVR1LGQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktVHUscD15dShkLWYpLHk9ZD5mO2lmKHN8fChzPWM9ZHUoKSksaDxsJiYodT1oLGg9bCxsPXUpLGg+d3UpaWYocD5FdS13dSlzLm1vdmVUbyhoKm11KGYpLGgqX3UoZikpLHMuYXJjKDAsMCxoLGYsZCwheSksbD53dSYmKHMubW92ZVRvKGwqbXUoZCksbCpfdShkKSkscy5hcmMoMCwwLGwsZCxmLHkpKTtlbHNle3ZhciBnLG0sdj1mLGI9ZCxfPWYseD1kLHc9cCxrPXAsVD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9VD53dSYmKHI/K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnh1KGwqbCtoKmgpKSxDPWJ1KHl1KGgtbCkvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFM9QyxBPUM7aWYoRT53dSl7dmFyIE09U3UoRS9sKl91KFQpKSxOPVN1KEUvaCpfdShUKSk7KHctPTIqTSk+d3U/KF8rPU0qPXk/MTotMSx4LT1NKToodz0wLF89eD0oZitkKS8yKSwoay09MipOKT53dT8odis9Tio9eT8xOi0xLGItPU4pOihrPTAsdj1iPShmK2QpLzIpfXZhciBEPWgqbXUodiksTz1oKl91KHYpLEI9bCptdSh4KSxMPWwqX3UoeCk7aWYoQz53dSl7dmFyIEksUj1oKm11KGIpLEY9aCpfdShiKSxQPWwqbXUoXyksaj1sKl91KF8pO2lmKHA8a3UmJihJPUJ1KEQsTyxQLGosUixGLEIsTCkpKXt2YXIgWT1ELUlbMF0sej1PLUlbMV0sVT1SLUlbMF0scT1GLUlbMV0sJD0xL191KEN1KChZKlUreipxKS8oeHUoWSpZK3oqeikqeHUoVSpVK3EqcSkpKS8yKSxIPXh1KElbMF0qSVswXStJWzFdKklbMV0pO1M9YnUoQywobC1IKS8oJC0xKSksQT1idShDLChoLUgpLygkKzEpKX19az53dT9BPnd1PyhnPUx1KFAsaixELE8saCxBLHkpLG09THUoUixGLEIsTCxoLEEseSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxBPEM/cy5hcmMoZy5jeCxnLmN5LEEsZ3UoZy55MDEsZy54MDEpLGd1KG0ueTAxLG0ueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxBLGd1KGcueTAxLGcueDAxKSxndShnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxoLGd1KGcuY3krZy55MTEsZy5jeCtnLngxMSksZ3UobS5jeSttLnkxMSxtLmN4K20ueDExKSwheSkscy5hcmMobS5jeCxtLmN5LEEsZ3UobS55MTEsbS54MTEpLGd1KG0ueTAxLG0ueDAxKSwheSkpKToocy5tb3ZlVG8oRCxPKSxzLmFyYygwLDAsaCx2LGIsIXkpKTpzLm1vdmVUbyhELE8pLGw+d3UmJnc+d3U/Uz53dT8oZz1MdShCLEwsUixGLGwsLVMseSksbT1MdShELE8sUCxqLGwsLVMseSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxTPEM/cy5hcmMoZy5jeCxnLmN5LFMsZ3UoZy55MDEsZy54MDEpLGd1KG0ueTAxLG0ueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxTLGd1KGcueTAxLGcueDAxKSxndShnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxsLGd1KGcuY3krZy55MTEsZy5jeCtnLngxMSksZ3UobS5jeSttLnkxMSxtLmN4K20ueDExKSx5KSxzLmFyYyhtLmN4LG0uY3ksUyxndShtLnkxMSxtLngxMSksZ3UobS55MDEsbS54MDEpLCF5KSkpOnMuYXJjKDAsMCxsLHgsXyx5KTpzLmxpbmVUbyhCLEwpfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBjLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW211KHIpKm4sX3Uocikqbl19LGMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpwdSgrZSksYyk6dH0sYy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTplfSxjLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTpufSxjLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksYyk6cn0sYy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLGMpOml9LGMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksYyk6YX0sYy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxjKTpvfSxjLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsYyk6c30sY31mdW5jdGlvbiBSdSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gRnUodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFB1KHQpe3JldHVybiBuZXcgRnUodCl9ZnVuY3Rpb24ganUodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gWXUodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24genUodCxlKXt2YXIgbj1wdSghMCkscj1udWxsLGk9UHUsYT1udWxsO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGw9KG89UnUobykpLmxlbmd0aCxoPSExO2ZvcihudWxsPT1yJiYoYT1pKHU9ZHUoKSkpLHM9MDtzPD1sOysrcykhKHM8bCYmbihjPW9bc10scyxvKSk9PT1oJiYoKGg9IWgpP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLGgmJmEucG9pbnQoK3QoYyxzLG8pLCtlKGMscyxvKSk7aWYodSlyZXR1cm4gYT1udWxsLHUrIiJ8fG51bGx9cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDA9PT10P2p1OnB1KHQpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp2b2lkIDA9PT1lP1l1OnB1KGUpLG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB1KCtlKSxvKTp0fSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksbyk6ZX0sby5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoISF0KSxvKTpufSxvLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKGE9aShyKSksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9YT1udWxsOmE9aShyPXQpLG8pOnJ9LG99ZnVuY3Rpb24gVXUodCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gcXUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gJHUoKXt9ZnVuY3Rpb24gSHUodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIFd1KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBWdSh0KXtyZXR1cm4gbmV3IFd1KHQpfWZ1bmN0aW9uIEd1KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBYdSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWnUodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFF1KHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBLdSh0LGUsbil7dmFyIHI9dC5feDEtdC5feDAsaT1lLXQuX3gxLGE9KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksbz0obi10Ll95MSkvKGl8fHI8MCYmLTApLHM9KGEqaStvKnIpLyhyK2kpO3JldHVybihRdShhKStRdShvKSkqTWF0aC5taW4oTWF0aC5hYnMoYSksTWF0aC5hYnMobyksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIEp1KHQsZSl7dmFyIG49dC5feDEtdC5feDA7cmV0dXJuIG4/KDMqKHQuX3kxLXQuX3kwKS9uLWUpLzI6ZX1mdW5jdGlvbiB0bCh0LGUsbil7dmFyIHI9dC5feDAsaT10Ll95MCxhPXQuX3gxLG89dC5feTEscz0oYS1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK3MsaStzKmUsYS1zLG8tcypuLGEsbyl9ZnVuY3Rpb24gZWwodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG5sKHQpe3RoaXMuX2NvbnRleHQ9bmV3IHJsKHQpfWZ1bmN0aW9uIHJsKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBpbCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gYWwodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1mdW5jdGlvbiBvbCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9QXJyYXkucHJvdG90eXBlLnNsaWNlLEZ1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19LFd1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SHUodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SHUodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LEd1LnByb3RvdHlwZT17YXJlYVN0YXJ0OiR1LGFyZWFFbmQ6JHUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Okh1KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxYdS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgbj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKG4scik6dGhpcy5fY29udGV4dC5tb3ZlVG8obixyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Okh1KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxadS5wcm90b3R5cGU9e2FyZWFTdGFydDokdSxhcmVhRW5kOiR1LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LGVsLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzp0bCh0aGlzLHRoaXMuX3QwLEp1KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0bCh0aGlzLEp1KHRoaXMsbj1LdSh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6dGwodGhpcyx0aGlzLl90MCxuPUt1KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKG5sLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGVsLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7ZWwucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxybC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxpbC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1hbCh0KSxpPWFsKGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxvbC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgc2w9bmV3IERhdGUsY2w9bmV3IERhdGU7ZnVuY3Rpb24gdWwodCxlLG4scil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0saS5jZWlsPWZ1bmN0aW9uKG4pe3JldHVybiB0KG49bmV3IERhdGUobi0xKSksZShuLDEpLHQobiksbn0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1pKHQpLG49aS5jZWlsKHQpO3JldHVybiB0LWU8bi10P2U6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSxudWxsPT1uPzE6TWF0aC5mbG9vcihuKSksdH0saS5yYW5nZT1mdW5jdGlvbihuLHIsYSl7dmFyIG8scz1bXTtpZihuPWkuY2VpbChuKSxhPW51bGw9PWE/MTpNYXRoLmZsb29yKGEpLCEobjxyJiZhPjApKXJldHVybiBzO2Rve3MucHVzaChvPW5ldyBEYXRlKCtuKSksZShuLGEpLHQobil9d2hpbGUobzxuJiZuPHIpO3JldHVybiBzfSxpLmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gdWwoKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0pLChmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO2UodCwtMSksIW4odCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO2UodCwxKSwhbih0KTspO30pKX0sbiYmKGkuY291bnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gc2wuc2V0VGltZSgrZSksY2wuc2V0VGltZSgrciksdChzbCksdChjbCksTWF0aC5mbG9vcihuKHNsLGNsKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKGUpe3JldHVybiByKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiBpLmNvdW50KDAsZSkldD09MH0pOmk6bnVsbH0pLGl9Y29uc3QgbGw9ODY0ZTUsaGw9NjA0OGU1O2Z1bmN0aW9uIGZsKHQpe3JldHVybiB1bCgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvaGx9KSl9dmFyIGRsPWZsKDApLHBsPWZsKDEpLHlsPWZsKDIpLGdsPWZsKDMpLG1sPWZsKDQpLHZsPWZsKDUpLGJsPWZsKDYpLF9sPShkbC5yYW5nZSxwbC5yYW5nZSx5bC5yYW5nZSxnbC5yYW5nZSxtbC5yYW5nZSx2bC5yYW5nZSxibC5yYW5nZSx1bCgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2xsfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpKTtjb25zdCB4bD1fbDtmdW5jdGlvbiB3bCh0KXtyZXR1cm4gdWwoKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvaGx9KSl9X2wucmFuZ2U7dmFyIGtsPXdsKDApLFRsPXdsKDEpLEVsPXdsKDIpLENsPXdsKDMpLFNsPXdsKDQpLEFsPXdsKDUpLE1sPXdsKDYpLE5sPShrbC5yYW5nZSxUbC5yYW5nZSxFbC5yYW5nZSxDbC5yYW5nZSxTbC5yYW5nZSxBbC5yYW5nZSxNbC5yYW5nZSx1bCgodD0+dC5zZXRIb3VycygwLDAsMCwwKSksKCh0LGUpPT50LnNldERhdGUodC5nZXREYXRlKCkrZSkpLCgodCxlKT0+KGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS9sbCksKHQ9PnQuZ2V0RGF0ZSgpLTEpKSk7Y29uc3QgRGw9Tmw7TmwucmFuZ2U7dmFyIE9sPXVsKChmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pKTtPbC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP3VsKChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pKTpudWxsfTtjb25zdCBCbD1PbDtPbC5yYW5nZTt2YXIgTGw9dWwoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO0xsLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dWwoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IElsPUxsO2Z1bmN0aW9uIFJsKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBGbCh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBQbCh0LGUsbil7cmV0dXJue3k6dCxtOmUsZDpuLEg6MCxNOjAsUzowLEw6MH19TGwucmFuZ2U7dmFyIGpsLFlsLHpsPXsiLSI6IiIsXzoiICIsMDoiMCJ9LFVsPS9eXHMqXGQrLyxxbD0vXiUvLCRsPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBIbCh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBXbCh0KXtyZXR1cm4gdC5yZXBsYWNlKCRsLCJcXCQmIil9ZnVuY3Rpb24gVmwodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFdsKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gR2wodCl7cmV0dXJuIG5ldyBNYXAodC5tYXAoKCh0LGUpPT5bdC50b0xvd2VyQ2FzZSgpLGVdKSkpfWZ1bmN0aW9uIFhsKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpsKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFsKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtsKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEpsKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRoKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVoKHQsZSxuKXt2YXIgcj1VbC5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmgodCxlLG4pe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiByaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQucT0zKnJbMF0tMyxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2godCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2godCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lkg9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2godCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lk09K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbGgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lkw9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaGgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZmgodCxlLG4pe3ZhciByPXFsLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByP24rclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gZGgodCxlLG4pe3ZhciByPVVsLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwaCh0LGUsbil7dmFyIHI9VWwuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5zPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHloKHQsZSl7cmV0dXJuIEhsKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gZ2godCxlKXtyZXR1cm4gSGwodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gbWgodCxlKXtyZXR1cm4gSGwodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHZoKHQsZSl7cmV0dXJuIEhsKDErRGwuY291bnQoQmwodCksdCksZSwzKX1mdW5jdGlvbiBiaCh0LGUpe3JldHVybiBIbCh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gX2godCxlKXtyZXR1cm4gYmgodCxlKSsiMDAwIn1mdW5jdGlvbiB4aCh0LGUpe3JldHVybiBIbCh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHdoKHQsZSl7cmV0dXJuIEhsKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24ga2godCxlKXtyZXR1cm4gSGwodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBUaCh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gRWgodCxlKXtyZXR1cm4gSGwoa2wuY291bnQoQmwodCktMSx0KSxlLDIpfWZ1bmN0aW9uIENoKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGU+PTR8fDA9PT1lP1NsKHQpOlNsLmNlaWwodCl9ZnVuY3Rpb24gU2godCxlKXtyZXR1cm4gdD1DaCh0KSxIbChTbC5jb3VudChCbCh0KSx0KSsoND09PUJsKHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIEFoKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIE1oKHQsZSl7cmV0dXJuIEhsKFRsLmNvdW50KEJsKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBOaCh0LGUpe3JldHVybiBIbCh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gRGgodCxlKXtyZXR1cm4gSGwoKHQ9Q2godCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gT2godCxlKXtyZXR1cm4gSGwodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEJoKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gSGwoKHQ9bj49NHx8MD09PW4/U2wodCk6U2wuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBMaCh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0hsKGUvNjB8MCwiMCIsMikrSGwoZSU2MCwiMCIsMil9ZnVuY3Rpb24gSWgodCxlKXtyZXR1cm4gSGwodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBSaCh0LGUpe3JldHVybiBIbCh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBGaCh0LGUpe3JldHVybiBIbCh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gUGgodCxlKXtyZXR1cm4gSGwoMSt4bC5jb3VudChJbCh0KSx0KSxlLDMpfWZ1bmN0aW9uIGpoKHQsZSl7cmV0dXJuIEhsKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBZaCh0LGUpe3JldHVybiBqaCh0LGUpKyIwMDAifWZ1bmN0aW9uIHpoKHQsZSl7cmV0dXJuIEhsKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gVWgodCxlKXtyZXR1cm4gSGwodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBxaCh0LGUpe3JldHVybiBIbCh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uICRoKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBIaCh0LGUpe3JldHVybiBIbChkbC5jb3VudChJbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gV2godCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/bWwodCk6bWwuY2VpbCh0KX1mdW5jdGlvbiBWaCh0LGUpe3JldHVybiB0PVdoKHQpLEhsKG1sLmNvdW50KElsKHQpLHQpKyg0PT09SWwodCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gR2godCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gWGgodCxlKXtyZXR1cm4gSGwocGwuY291bnQoSWwodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFpoKHQsZSl7cmV0dXJuIEhsKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBRaCh0LGUpe3JldHVybiBIbCgodD1XaCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBLaCh0LGUpe3JldHVybiBIbCh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gSmgodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiBIbCgodD1uPj00fHwwPT09bj9tbCh0KTptbC5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIHRmKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBlZigpe3JldHVybiIlIn1mdW5jdGlvbiBuZih0KXtyZXR1cm4rdH1mdW5jdGlvbiByZih0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWpsPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMsbz10LnNob3J0RGF5cyxzPXQubW9udGhzLGM9dC5zaG9ydE1vbnRocyx1PVZsKGkpLGw9R2woaSksaD1WbChhKSxmPUdsKGEpLGQ9VmwobykscD1HbChvKSx5PVZsKHMpLGc9R2wocyksbT1WbChjKSx2PUdsKGMpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDp5aCxlOnloLGY6X2gsZzpEaCxHOkJoLEg6Z2gsSTptaCxqOnZoLEw6YmgsbTp4aCxNOndoLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROm5mLHM6cmYsUzpraCx1OlRoLFU6RWgsVjpTaCx3OkFoLFc6TWgseDpudWxsLFg6bnVsbCx5Ok5oLFk6T2gsWjpMaCwiJSI6ZWZ9LF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpJaCxlOkloLGY6WWgsZzpRaCxHOkpoLEg6UmgsSTpGaCxqOlBoLEw6amgsbTp6aCxNOlVoLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROm5mLHM6cmYsUzpxaCx1OiRoLFU6SGgsVjpWaCx3OkdoLFc6WGgseDpudWxsLFg6bnVsbCx5OlpoLFk6S2gsWjp0ZiwiJSI6ZWZ9LHg9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PXAuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWguZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PWYuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPXYuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWcuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksbityWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBUKHQsZSxuLHIpfSxkOmFoLGU6YWgsZjpoaCxnOmVoLEc6dGgsSDpzaCxJOnNoLGo6b2gsTDpsaCxtOmloLE06Y2gscDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9bC5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxuK3JbMF0ubGVuZ3RoKTotMX0scTpyaCxROmRoLHM6cGgsUzp1aCx1OlpsLFU6UWwsVjpLbCx3OlhsLFc6SmwseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIFQodCxuLGUscil9LFg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBUKHQscixlLG4pfSx5OmVoLFk6dGgsWjpuaCwiJSI6Zmh9O2Z1bmN0aW9uIHcodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxhLG89W10scz0tMSxjPTAsdT10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPHU7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoby5wdXNoKHQuc2xpY2UoYyxzKSksbnVsbCE9KGk9emxbcj10LmNoYXJBdCgrK3MpXSk/cj10LmNoYXJBdCgrK3MpOmk9ImUiPT09cj8iICI6IjAiLChhPWVbcl0pJiYocj1hKG4saSkpLG8ucHVzaChyKSxjPXMrMSk7cmV0dXJuIG8ucHVzaCh0LnNsaWNlKGMscykpLG8uam9pbigiIil9fWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxhPVBsKDE5MDAsdm9pZCAwLDEpO2lmKFQoYSx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBhKXJldHVybiBuZXcgRGF0ZShhLlEpO2lmKCJzImluIGEpcmV0dXJuIG5ldyBEYXRlKDFlMyphLnMrKCJMImluIGE/YS5MOjApKTtpZihlJiYhKCJaImluIGEpJiYoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShyPUZsKFBsKGEueSwwLDEpKSkuZ2V0VVRDRGF5KCkscj1pPjR8fDA9PT1pP3BsLmNlaWwocik6cGwocikscj14bC5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldFVUQ0Z1bGxZZWFyKCksYS5tPXIuZ2V0VVRDTW9udGgoKSxhLmQ9ci5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0ocj1SbChQbChhLnksMCwxKSkpLmdldERheSgpLHI9aT40fHwwPT09aT9UbC5jZWlsKHIpOlRsKHIpLHI9RGwub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRGdWxsWWVhcigpLGEubT1yLmdldE1vbnRoKCksYS5kPXIuZ2V0RGF0ZSgpKyhhLncrNiklNyl9ZWxzZSgiVyJpbiBhfHwiVSJpbiBhKSYmKCJ3ImluIGF8fChhLnc9InUiaW4gYT9hLnUlNzoiVyJpbiBhPzE6MCksaT0iWiJpbiBhP0ZsKFBsKGEueSwwLDEpKS5nZXRVVENEYXkoKTpSbChQbChhLnksMCwxKSkuZ2V0RGF5KCksYS5tPTAsYS5kPSJXImluIGE/KGEudys2KSU3KzcqYS5XLShpKzUpJTc6YS53KzcqYS5VLShpKzYpJTcpO3JldHVybiJaImluIGE/KGEuSCs9YS5aLzEwMHwwLGEuTSs9YS5aJTEwMCxGbChhKSk6UmwoYSl9fWZ1bmN0aW9uIFQodCxlLG4scil7Zm9yKHZhciBpLGEsbz0wLHM9ZS5sZW5ndGgsYz1uLmxlbmd0aDtvPHM7KXtpZihyPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPXhbaSBpbiB6bD9lLmNoYXJBdChvKyspOmldKXx8KHI9YSh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4gYi54PXcobixiKSxiLlg9dyhyLGIpLGIuYz13KGUsYiksXy54PXcobixfKSxfLlg9dyhyLF8pLF8uYz13KGUsXykse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLGIpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWsodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLF8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPWsodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX0oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KSxZbD1qbC5mb3JtYXQsamwucGFyc2UsamwudXRjRm9ybWF0LGpsLnV0Y1BhcnNlO3ZhciBhZj17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBvZigpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gcnx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBzZihyKX1mdW5jdGlvbiBzZih0KXt0aGlzLl89dH1mdW5jdGlvbiBjZih0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gdWYodCxlKXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigobj10W3JdKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBsZih0LGUsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PWUpe3Rbcl09YWYsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fXNmLnByb3RvdHlwZT1vZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnNmLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLl8saT1jZih0KyIiLHIpLGE9LTEsbz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxvOylpZihuPSh0PWlbYV0pLnR5cGUpcltuXT1sZihyW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gcilyW25dPWxmKHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPG87KWlmKChuPSh0PWlbYV0pLnR5cGUpJiYobj11ZihyW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBzZih0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSlpW2FdPWFyZ3VtZW50c1thKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO2E8bjsrK2EpclthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07Y29uc3QgaGY9b2Y7dmFyIGZmLGRmLHBmPTAseWY9MCxnZj0wLG1mPTAsdmY9MCxiZj0wLF9mPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHhmPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIHdmKCl7cmV0dXJuIHZmfHwoeGYoa2YpLHZmPV9mLm5vdygpK2JmKX1mdW5jdGlvbiBrZigpe3ZmPTB9ZnVuY3Rpb24gVGYoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEVmKHQsZSxuKXt2YXIgcj1uZXcgVGY7cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBDZigpe3ZmPShtZj1fZi5ub3coKSkrYmYscGY9eWY9MDt0cnl7IWZ1bmN0aW9uKCl7d2YoKSwrK3BmO2Zvcih2YXIgdCxlPWZmO2U7KSh0PXZmLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwodm9pZCAwLHQpLGU9ZS5fbmV4dDstLXBmfSgpfWZpbmFsbHl7cGY9MCxmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG49ZmYscj0xLzA7bjspbi5fY2FsbD8ocj5uLl90aW1lJiYocj1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOmZmPWUpO2RmPXQsQWYocil9KCksdmY9MH19ZnVuY3Rpb24gU2YoKXt2YXIgdD1fZi5ub3coKSxlPXQtbWY7ZT4xZTMmJihiZi09ZSxtZj10KX1mdW5jdGlvbiBBZih0KXtwZnx8KHlmJiYoeWY9Y2xlYXJUaW1lb3V0KHlmKSksdC12Zj4yND8odDwxLzAmJih5Zj1zZXRUaW1lb3V0KENmLHQtX2Yubm93KCktYmYpKSxnZiYmKGdmPWNsZWFySW50ZXJ2YWwoZ2YpKSk6KGdmfHwobWY9X2Yubm93KCksZ2Y9c2V0SW50ZXJ2YWwoU2YsMWUzKSkscGY9MSx4ZihDZikpKX1mdW5jdGlvbiBNZih0LGUsbil7dmFyIHI9bmV3IFRmO3JldHVybiBlPW51bGw9PWU/MDorZSxyLnJlc3RhcnQoKG49PntyLnN0b3AoKSx0KG4rZSl9KSxlLG4pLHJ9VGYucHJvdG90eXBlPUVmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGYscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3dmKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGRmPT09dGhpc3x8KGRmP2RmLl9uZXh0PXRoaXM6ZmY9dGhpcyxkZj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLEFmKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEFmKCkpfX07dmFyIE5mPWhmKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLERmPVtdO2Z1bmN0aW9uIE9mKHQsZSxuLHIsaSxhKXt2YXIgbz10Ll9fdHJhbnNpdGlvbjtpZihvKXtpZihuIGluIG8pcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIGEoYyl7dmFyIHUsbCxoLGY7aWYoMSE9PW4uc3RhdGUpcmV0dXJuIHMoKTtmb3IodSBpbiBpKWlmKChmPWlbdV0pLm5hbWU9PT1uLm5hbWUpe2lmKDM9PT1mLnN0YXRlKXJldHVybiBNZihhKTs0PT09Zi5zdGF0ZT8oZi5zdGF0ZT02LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8ZSYmKGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImNhbmNlbCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pfWlmKE1mKChmdW5jdGlvbigpezM9PT1uLnN0YXRlJiYobi5zdGF0ZT00LG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxvKGMpKX0pKSxuLnN0YXRlPTIsbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksMj09PW4uc3RhdGUpe2ZvcihuLnN0YXRlPTMscj1uZXcgQXJyYXkoaD1uLnR3ZWVuLmxlbmd0aCksdT0wLGw9LTE7dTxoOysrdSkoZj1uLnR3ZWVuW3VdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoclsrK2xdPWYpO3IubGVuZ3RoPWwrMX19ZnVuY3Rpb24gbyhlKXtmb3IodmFyIGk9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9NSwxKSxhPS0xLG89ci5sZW5ndGg7KythPG87KXJbYV0uY2FsbCh0LGkpOzU9PT1uLnN0YXRlJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgciBpbiBuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksZGVsZXRlIGlbZV0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbZV09bixuLnRpbWVyPUVmKChmdW5jdGlvbih0KXtuLnN0YXRlPTEsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJmEodC1uLmRlbGF5KX0pLDAsbi50aW1lKX0odCxuLHtuYW1lOmUsaW5kZXg6cixncm91cDppLG9uOk5mLHR3ZWVuOkRmLHRpbWU6YS50aW1lLGRlbGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOjB9KX1mdW5jdGlvbiBCZih0LGUpe3ZhciBuPUlmKHQsZSk7aWYobi5zdGF0ZT4wKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gTGYodCxlKXt2YXIgbj1JZih0LGUpO2lmKG4uc3RhdGU+Myl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gbn1mdW5jdGlvbiBJZih0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufWZ1bmN0aW9uIFJmKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gdCooMS1uKStlKm59fXZhciBGZixQZj0xODAvTWF0aC5QSSxqZj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBZZih0LGUsbixyLGksYSl7dmFyIG8scyxjO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChjPXQqbitlKnIpJiYobi09dCpjLHItPWUqYyksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxjLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGM9LWMsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpQZixza2V3WDpNYXRoLmF0YW4oYykqUGYsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIHpmKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6UmYodCxpKX0se2k6Yy0yLHg6UmYocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OlJmKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OlJmKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OlJmKHQsbil9LHtpOnMtMix4OlJmKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIFVmPXpmKChmdW5jdGlvbih0KXtjb25zdCBlPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKHQrIiIpO3JldHVybiBlLmlzSWRlbnRpdHk/amY6WWYoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfSksInB4LCAiLCJweCkiLCJkZWcpIikscWY9emYoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2pmOihGZnx8KEZmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLEZmLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1GZi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9ZZigodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpqZil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uICRmKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1MZih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIEhmKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1MZih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBXZih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1MZih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBJZih0LHIpLnZhbHVlW2VdfX1mdW5jdGlvbiBWZih0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fWNvbnN0IEdmPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9GcjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOklyKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD11cih0KSkuciwoZT11cihlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPUZyKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBYZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPXVyKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fVhmKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gVmYoKG4tci9lKSplLG8saSxhLHMpfX0pKSxYZigoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBWZigobi1yL2UpKmUsaSxhLG8scyl9fSkpO3ZhciBaZj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csUWY9bmV3IFJlZ0V4cChaZi5zb3VyY2UsImciKTtmdW5jdGlvbiBLZih0LGUpe3ZhciBuLHIsaSxhPVpmLmxhc3RJbmRleD1RZi5sYXN0SW5kZXg9MCxvPS0xLHM9W10sYz1bXTtmb3IodCs9IiIsZSs9IiI7KG49WmYuZXhlYyh0KSkmJihyPVFmLmV4ZWMoZSkpOykoaT1yLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwobj1uWzBdKT09PShyPXJbMF0pP3Nbb10/c1tvXSs9cjpzWysrb109cjooc1srK29dPW51bGwsYy5wdXNoKHtpOm8seDpSZihuLHIpfSkpLGE9UWYubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9jWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KGNbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1jLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4scj0wO3I8ZTsrK3Ipc1sobj1jW3JdKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBKZih0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/UmY6ZSBpbnN0YW5jZW9mIGFyP0dmOihuPWFyKGUpKT8oZT1uLEdmKTpLZikodCxlKX1mdW5jdGlvbiB0ZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gZWQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBuZCh0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiByZCh0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24gaWQodCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxzLGM9bih0aGlzKTtpZihudWxsIT1jKXJldHVybihvPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gYWQodCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxzLGM9bih0aGlzKTtpZihudWxsIT1jKXJldHVybihvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBvZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gc2QodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBjZCh0LGUpe3ZhciBuLHI7ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKG49KHI9aSkmJnNkKHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiB1ZCh0LGUpe3ZhciBuLHI7ZnVuY3Rpb24gaSgpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKG49KHI9aSkmJm9kKHQsaSkpLG59cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBsZCh0LGUpe3JldHVybiBmdW5jdGlvbigpe0JmKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBoZCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7QmYodGhpcyx0KS5kZWxheT1lfX1mdW5jdGlvbiBmZCh0LGUpe3JldHVybiBmdW5jdGlvbigpe0xmKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBkZCh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7TGYodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBwZCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtMZih0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24geWQodCxlLG4pe3ZhciByLGksYT1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KSl9KGUpP0JmOkxmO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWEodGhpcyx0KSxzPW8ub247cyE9PXImJihpPShyPXMpLmNvcHkoKSkub24oZSxuKSxvLm9uPWl9fXZhciBnZD1pdS5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gbWQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gdmQodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsciksbil9fWZ1bmN0aW9uIGJkKHQsZSxuKXt2YXIgcixpO2Z1bmN0aW9uIGEoKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihyPShpPWEpJiZ2ZCh0LGEsbikpLHJ9cmV0dXJuIGEuX3ZhbHVlPWUsYX1mdW5jdGlvbiBfZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24geGQodCl7dmFyIGUsbjtmdW5jdGlvbiByKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1uJiYoZT0obj1yKSYmX2QocikpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn12YXIgd2Q9MDtmdW5jdGlvbiBrZCh0LGUsbixyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gVGQoKXtyZXR1cm4rK3dkfXZhciBFZD1pdS5wcm90b3R5cGU7a2QucHJvdG90eXBlPWZ1bmN0aW9uKHQpe3JldHVybiBpdSgpLnRyYW5zaXRpb24odCl9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6a2Qsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SHModCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxPZihoW2ZdLGUsbixmLGgsSWYocyxuKSkpO3JldHVybiBuZXcga2QoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUdzKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPUlmKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmT2YoZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBrZChhLG8sZSxuKX0sc2VsZWN0Q2hpbGQ6RWQuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46RWQuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Ycyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcga2Qocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcga2Qobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGdkKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1UZCgpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9SWYobyxlKTtPZihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IGtkKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOkVkLmNhbGwsbm9kZXM6RWQubm9kZXMsbm9kZTpFZC5ub2RlLHNpemU6RWQuc2l6ZSxlbXB0eTpFZC5lbXB0eSxlYWNoOkVkLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0lmKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaCh5ZChuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49aGModCkscj0idHJhbnNmb3JtIj09PW4/cWY6SmY7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/YWQ6aWQpKG4scixXZih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9lZDp0ZCkobik6KG4ubG9jYWw/cmQ6bmQpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9aGModCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9jZDp1ZCkocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9VZjpKZjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT13Yyh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksd2ModGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsbWQodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89d2ModGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9d2ModGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLFdmKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1MZih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9bWQoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89d2ModGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsYmQodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oV2YodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLHhkKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPUlmKHRoaXMubm9kZSgpLG4pLnR3ZWVuLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2EpaWYoKHI9aVthXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT8kZjpIZikobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9sZDpoZCkoZSx0KSk6SWYodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZmQ6ZGQpKGUsdCkpOklmKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChwZChlLHQpKTpJZih0aGlzLm5vZGUoKSxlKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtMZih0aGlzLHQpLmVhc2U9bn19KHRoaXMuX2lkLHQpKX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1MZih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSksMD09PWkmJmEoKX0pKX0sW1N5bWJvbC5pdGVyYXRvcl06RWRbU3ltYm9sLml0ZXJhdG9yXX07dmFyIENkPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn19O2Z1bmN0aW9uIFNkKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7ZX0gbm90IGZvdW5kYCk7cmV0dXJuIG59ZnVuY3Rpb24gQWQoKXt9ZnVuY3Rpb24gTWQodCl7cmV0dXJuIG51bGw9PXQ/QWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBOZCh0KXtyZXR1cm4gbnVsbD09dD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBEZCgpe3JldHVybltdfWZ1bmN0aW9uIE9kKHQpe3JldHVybiBudWxsPT10P0RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gQmQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gTGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXModCl9fWl1LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Ll9fdHJhbnNpdGlvbixvPSEwO2lmKGEpe2ZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsYSkobj1hW2ldKS5uYW1lPT09ZT8ocj1uLnN0YXRlPjImJm4uc3RhdGU8NSxuLnN0YXRlPTYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIGFbaV0pOm89ITE7byYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX0odGhpcyx0KX0pKX0saXUucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGUsbjt0IGluc3RhbmNlb2Yga2Q/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1UZCgpLChuPUNkKS50aW1lPXdmKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgbyxzPXJbYV0sYz1zLmxlbmd0aCx1PTA7dTxjOysrdSkobz1zW3VdKSYmT2Yobyx0LGUsdSxzLG58fFNkKG8sZSkpO3JldHVybiBuZXcga2Qocix0aGlzLl9wYXJlbnRzLHQsZSl9O3ZhciBJZD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBSZCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBGZD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIFBkKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gamQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gWWQodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9ZnVuY3Rpb24gemQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFVkKHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBZZCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24gcWQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9bmV3IE1hcCxoPWUubGVuZ3RoLGY9YS5sZW5ndGgsZD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiYoZFtzXT11PW8uY2FsbChjLGMuX19kYXRhX18scyxlKSsiIixsLmhhcyh1KT9pW3NdPWM6bC5zZXQodSxjKSk7Zm9yKHM9MDtzPGY7KytzKXU9by5jYWxsKHQsYVtzXSxzLGEpKyIiLChjPWwuZ2V0KHUpKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsLmRlbGV0ZSh1KSk6bltzXT1uZXcgWWQodCxhW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJmwuZ2V0KGRbc10pPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gJGQodCl7cmV0dXJuIHQuX19kYXRhX199ZnVuY3Rpb24gSGQodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIFdkKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfVlkLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIFZkPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBHZD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VmQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBYZCh0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxHZC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6R2RbZV0sbG9jYWw6dH06dH1mdW5jdGlvbiBaZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gUWQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBLZCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEpkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIHRwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBlcCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBucCh0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gcnAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gaXAodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBhcCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBvcCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fG5wKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIHNwKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBjcCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gdXAodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gbHAodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGhwKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IGZwKHQpfWZ1bmN0aW9uIGZwKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1scCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGRwKHQsZSl7Zm9yKHZhciBuPWhwKHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gcHAodCxlKXtmb3IodmFyIG49aHAodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiB5cCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkcCh0aGlzLHQpfX1mdW5jdGlvbiBncCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtwcCh0aGlzLHQpfX1mdW5jdGlvbiBtcCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9kcDpwcCkodGhpcyx0KX19ZnVuY3Rpb24gdnAoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGJwKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gX3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHhwKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gd3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24ga3AodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBUcCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBFcCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIENwKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09VmQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVZkP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX1mdW5jdGlvbiBTcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBBcCh0KXt2YXIgZT1YZCh0KTtyZXR1cm4oZS5sb2NhbD9TcDpDcCkoZSl9ZnVuY3Rpb24gTXAoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBOcCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIERwKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBPcCgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gQnAodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSl9ZnVuY3Rpb24gTHAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixyPTAsaT0tMSxhPWUubGVuZ3RoO3I8YTsrK3Ipbj1lW3JdLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK2ldPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4ub3B0aW9ucyk7KytpP2UubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIElwKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPXRoaXMuX19vbixhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlLHRoaXMuX19kYXRhX18pfX0oZSk7aWYoaSlmb3IodmFyIG89MCxzPWkubGVuZ3RoO288czsrK28paWYoKHI9aVtvXSkudHlwZT09PXQudHlwZSYmci5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoci50eXBlLHIubGlzdGVuZXIsci5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoci50eXBlLHIubGlzdGVuZXI9YSxyLm9wdGlvbnM9biksdm9pZChyLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYSxuKSxyPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmEsb3B0aW9uczpufSxpP2kucHVzaChyKTp0aGlzLl9fb249W3JdfX1mdW5jdGlvbiBScCh0LGUsbil7dmFyIHI9bnAodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gRnAodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUnAodGhpcyx0LGUpfX1mdW5jdGlvbiBQcCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBScCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mcC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBqcD1bbnVsbF07ZnVuY3Rpb24gWXAodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24genAoKXtyZXR1cm4gbmV3IFlwKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sanApfVlwLnByb3RvdHlwZT16cC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllwLHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9TWQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbyxzPWVbaV0sYz1zLmxlbmd0aCx1PXJbaV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShhPXNbbF0pJiYobz10LmNhbGwoYSxhLl9fZGF0YV9fLGwscykpJiYoIl9fZGF0YV9fImluIGEmJihvLl9fZGF0YV9fPWEuX19kYXRhX18pLHVbbF09byk7cmV0dXJuIG5ldyBZcChyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dD0iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTmQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0odCk6T2QodCk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxhPTA7YTxuOysrYSlmb3IodmFyIG8scz1lW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJihyLnB1c2godC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSxpLnB1c2gobykpO3JldHVybiBuZXcgWXAocixpKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PXQ/UmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIElkLmNhbGwodGhpcy5jaGlsZHJlbix0KX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TGQodCkpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PXQ/UGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZkLmNhbGwodGhpcy5jaGlsZHJlbix0KX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TGQodCkpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1CZCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgWXAocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsJGQpO3ZhciBuPWU/cWQ6VWQscj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD16ZCh0KSk7Zm9yKHZhciBhPWkubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KXt2YXIgbD1yW3VdLGg9aVt1XSxmPWgubGVuZ3RoLGQ9SGQodC5jYWxsKGwsbCYmbC5fX2RhdGFfXyx1LHIpKSxwPWQubGVuZ3RoLHk9c1t1XT1uZXcgQXJyYXkocCksZz1vW3VdPW5ldyBBcnJheShwKSxtPWNbdV09bmV3IEFycmF5KGYpO24obCxoLHksZyxtLGQsZSk7Zm9yKHZhciB2LGIsXz0wLHg9MDtfPHA7KytfKWlmKHY9eVtfXSl7Zm9yKF8+PXgmJih4PV8rMSk7IShiPWdbeF0pJiYrK3g8cDspO3YuX25leHQ9Ynx8bnVsbH19cmV0dXJuKG89bmV3IFlwKG8scikpLl9lbnRlcj1zLG8uX2V4aXQ9YyxvfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgWXAodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoamQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZcCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGpkKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5lbnRlcigpLGk9dGhpcyxhPXRoaXMuZXhpdCgpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0PyhyPXQocikpJiYocj1yLnNlbGVjdGlvbigpKTpyPXIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpJiYoaT1pLnNlbGVjdGlvbigpKSxudWxsPT1uP2EucmVtb3ZlKCk6bihhKSxyJiZpP3IubWVyZ2UoaSkub3JkZXIoKTppfSxtZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0LG49dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1yLmxlbmd0aCxvPU1hdGgubWluKGksYSkscz1uZXcgQXJyYXkoaSksYz0wO2M8bzsrK2MpZm9yKHZhciB1LGw9bltjXSxoPXJbY10sZj1sLmxlbmd0aCxkPXNbY109bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKSh1PWxbcF18fGhbcF0pJiYoZFtwXT11KTtmb3IoO2M8aTsrK2Mpc1tjXT1uW2NdO3JldHVybiBuZXcgWXAocyx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgcixpPXRbZV0sYT1pLmxlbmd0aC0xLG89aVthXTstLWE+PTA7KShyPWlbYV0pJiYobyYmNF5yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsbyksbz1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PVdkKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2Epe2Zvcih2YXIgbyxzPW5bYV0sYz1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShvPXNbbF0pJiYodVtsXT1vKTt1LnNvcnQoZSl9cmV0dXJuIG5ldyBZcChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7bGV0IHQ9MDtmb3IoY29uc3QgZSBvZiB0aGlzKSsrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAscj1lLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgaSxhPWVbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbykoaT1hW29dKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxvLGEpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49WGQodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP1FkOlpkOiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/ZXA6dHA6bi5sb2NhbD9KZDpLZCkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9ycDoiZnVuY3Rpb24iPT10eXBlb2YgZT9hcDppcCkodCxlLG51bGw9PW4/IiI6bikpOm9wKHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP3NwOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3VwOmNwKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPWxwKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPWhwKHRoaXMubm9kZSgpKSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KWlmKCFyLmNvbnRhaW5zKG5baV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP21wOmU/eXA6Z3ApKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3ZwOigiZnVuY3Rpb24iPT10eXBlb2YgdD9fcDpicCkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3hwOigiZnVuY3Rpb24iPT10eXBlb2YgdD9rcDp3cCkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFRwKX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEVwKX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXAodCk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcCh0KSxyPW51bGw9PWU/TXA6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpNZChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChOcCl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P09wOkRwKX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPUJwKHQrIiIpLG89YS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP0lwOkxwLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP1BwOkZwKSh0LGUpKX0sW1N5bWJvbC5pdGVyYXRvcl06ZnVuY3Rpb24qKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcixpPXRbZV0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSkocj1pW2FdKSYmKHlpZWxkIHIpfX07Y29uc3QgVXA9enA7dmFyIHFwPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uICRwKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiByfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IEhwKHIpfWZ1bmN0aW9uIEhwKHQpe3RoaXMuXz10fWZ1bmN0aW9uIFdwKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIscj10LmluZGV4T2YoIi4iKTtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKX1mdW5jdGlvbiBWcCh0LGUpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChuPXRbcl0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIEdwKHQsZSxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09ZSl7dFtyXT1xcCx0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9SHAucHJvdG90eXBlPSRwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SHAsb246ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMuXyxpPVdwKHQrIiIsciksYT0tMSxvPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPG87KWlmKG49KHQ9aVthXSkudHlwZSlyW25dPUdwKHJbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiByKXJbbl09R3AocltuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8bzspaWYoKG49KHQ9aVthXSkudHlwZSkmJihuPVZwKHJbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IEhwKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixyLGk9bmV3IEFycmF5KG4pLGE9MDthPG47KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLG49KHI9dGhpcy5fW3RdKS5sZW5ndGg7YTxuOysrYSlyW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLGE9ci5sZW5ndGg7aTxhOysraSlyW2ldLnZhbHVlLmFwcGx5KGUsbil9fTtjb25zdCBYcD0kcDt2YXIgWnAsUXAsS3A9MCxKcD0wLHR5PTAsZXk9MCxueT0wLHJ5PTAsaXk9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsYXk9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gb3koKXtyZXR1cm4gbnl8fChheShzeSksbnk9aXkubm93KCkrcnkpfWZ1bmN0aW9uIHN5KCl7bnk9MH1mdW5jdGlvbiBjeSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gdXkodCxlLG4pe3ZhciByPW5ldyBjeTtyZXR1cm4gci5yZXN0YXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIGx5KCl7bnk9KGV5PWl5Lm5vdygpKStyeSxLcD1KcD0wO3RyeXshZnVuY3Rpb24oKXtveSgpLCsrS3A7Zm9yKHZhciB0LGU9WnA7ZTspKHQ9bnktZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbCh2b2lkIDAsdCksZT1lLl9uZXh0Oy0tS3B9KCl9ZmluYWxseXtLcD0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1acCxyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6WnA9ZSk7UXA9dCxmeShyKX0oKSxueT0wfX1mdW5jdGlvbiBoeSgpe3ZhciB0PWl5Lm5vdygpLGU9dC1leTtlPjFlMyYmKHJ5LT1lLGV5PXQpfWZ1bmN0aW9uIGZ5KHQpe0twfHwoSnAmJihKcD1jbGVhclRpbWVvdXQoSnApKSx0LW55PjI0Pyh0PDEvMCYmKEpwPXNldFRpbWVvdXQobHksdC1peS5ub3coKS1yeSkpLHR5JiYodHk9Y2xlYXJJbnRlcnZhbCh0eSkpKToodHl8fChleT1peS5ub3coKSx0eT1zZXRJbnRlcnZhbChoeSwxZTMpKSxLcD0xLGF5KGx5KSkpfWZ1bmN0aW9uIGR5KHQsZSxuKXt2YXIgcj1uZXcgY3k7cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgobj0+e3Iuc3RvcCgpLHQobitlKX0pLGUsbikscn1jeS5wcm90b3R5cGU9dXkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjeSxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/b3koKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8UXA9PT10aGlzfHwoUXA/UXAuX25leHQ9dGhpczpacD10aGlzLFFwPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sZnkoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsZnkoKSl9fTt2YXIgcHk9WHAoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IikseXk9W107ZnVuY3Rpb24gZ3kodCxlLG4scixpLGEpe3ZhciBvPXQuX190cmFuc2l0aW9uO2lmKG8pe2lmKG4gaW4gbylyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gYShjKXt2YXIgdSxsLGgsZjtpZigxIT09bi5zdGF0ZSlyZXR1cm4gcygpO2Zvcih1IGluIGkpaWYoKGY9aVt1XSkubmFtZT09PW4ubmFtZSl7aWYoMz09PWYuc3RhdGUpcmV0dXJuIGR5KGEpOzQ9PT1mLnN0YXRlPyhmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKTordTxlJiYoZi5zdGF0ZT02LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVt1XSl9aWYoZHkoKGZ1bmN0aW9uKCl7Mz09PW4uc3RhdGUmJihuLnN0YXRlPTQsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG8oYykpfSkpLG4uc3RhdGU9MixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSwyPT09bi5zdGF0ZSl7Zm9yKG4uc3RhdGU9MyxyPW5ldyBBcnJheShoPW4udHdlZW4ubGVuZ3RoKSx1PTAsbD0tMTt1PGg7Kyt1KShmPW4udHdlZW5bdV0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihyWysrbF09Zik7ci5sZW5ndGg9bCsxfX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgaT1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT01LDEpLGE9LTEsbz1yLmxlbmd0aDsrK2E8bzspclthXS5jYWxsKHQsaSk7NT09PW4uc3RhdGUmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciByIGluIG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtlXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtlXT1uLG4udGltZXI9dXkoKGZ1bmN0aW9uKHQpe24uc3RhdGU9MSxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmYSh0LW4uZGVsYXkpfSksMCxuLnRpbWUpfSh0LG4se25hbWU6ZSxpbmRleDpyLGdyb3VwOmksb246cHksdHdlZW46eXksdGltZTphLnRpbWUsZGVsYXk6YS5kZWxheSxkdXJhdGlvbjphLmR1cmF0aW9uLGVhc2U6YS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIG15KHQsZSl7dmFyIG49YnkodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB2eSh0LGUpe3ZhciBuPWJ5KHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGJ5KHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gX3kodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19dmFyIHh5LHd5PTE4MC9NYXRoLlBJLGt5PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIFR5KHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnd5LHNrZXdYOk1hdGguYXRhbihjKSp3eSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gRXkodCxlLG4scil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sYz1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LHIsaSxhLG8scyl7aWYodCE9PWl8fHIhPT1hKXt2YXIgYz1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpjLTQseDpfeSh0LGkpfSx7aTpjLTIseDpfeShyLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStuKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpuLnB1c2goaShuKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6X3kodCxlKX0pKTplJiZuLnB1c2goaShuKSsicm90YXRlKCIrZStyKX0oYS5yb3RhdGUsby5yb3RhdGUscyxjKSxmdW5jdGlvbih0LGUsbixhKXt0IT09ZT9hLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxyKS0yLHg6X3kodCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urcil9KGEuc2tld1gsby5za2V3WCxzLGMpLGZ1bmN0aW9uKHQsZSxuLHIsYSxvKXtpZih0IT09bnx8ZSE9PXIpe3ZhciBzPWEucHVzaChpKGEpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtvLnB1c2goe2k6cy00LHg6X3kodCxuKX0se2k6cy0yLHg6X3koZSxyKX0pfWVsc2UgMT09PW4mJjE9PT1yfHxhLnB1c2goaShhKSsic2NhbGUoIituKyIsIityKyIpIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsYyksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj1jLmxlbmd0aDsrK248cjspc1soZT1jW25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgQ3k9RXkoKGZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkodCsiIik7cmV0dXJuIGUuaXNJZGVudGl0eT9reTpUeShlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZil9KSwicHgsICIsInB4KSIsImRlZykiKSxTeT1FeSgoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/a3k6KHh5fHwoeHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSkseHkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PXh5LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP1R5KCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOmt5KX0pLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gQXkodCxlKXt2YXIgbixyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXZ5KHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1uKWZvcih2YXIgbz0wLHM9KHI9bj1hKS5sZW5ndGg7bzxzOysrbylpZihyW29dLm5hbWU9PT1lKXsocj1yLnNsaWNlKCkpLnNwbGljZShvLDEpO2JyZWFrfWkudHdlZW49cn19ZnVuY3Rpb24gTXkodCxlLG4pe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXZ5KHRoaXMsdCksbz1hLnR3ZWVuO2lmKG8hPT1yKXtpPShyPW8pLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sYz0wLHU9aS5sZW5ndGg7Yzx1OysrYylpZihpW2NdLm5hbWU9PT1lKXtpW2NdPXM7YnJlYWt9Yz09PXUmJmkucHVzaChzKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIE55KHQsZSxuKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXZ5KHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksZnVuY3Rpb24odCl7cmV0dXJuIGJ5KHQscikudmFsdWVbZV19fWZ1bmN0aW9uIER5KHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH1mdW5jdGlvbiBPeSh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBCeSgpe312YXIgTHk9LjcsSXk9MS40Mjg1NzE0Mjg1NzE0Mjg2LFJ5PSJcXHMqKFsrLV0/XFxkKylcXHMqIixGeT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixQeT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsank9L14jKFswLTlhLWZdezMsOH0pJC8sWXk9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1J5LFJ5LFJ5XSsiXFwpJCIpLHp5PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tQeSxQeSxQeV0rIlxcKSQiKSxVeT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW1J5LFJ5LFJ5LEZ5XSsiXFwpJCIpLHF5PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbUHksUHksUHksRnldKyJcXCkkIiksJHk9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0Z5LFB5LFB5XSsiXFwpJCIpLEh5PW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbRnksUHksUHksRnldKyJcXCkkIiksV3k9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gVnkoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBHeSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFh5KHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPWp5LmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/WnkoZSk6Mz09PW4/bmV3IHRnKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9ReShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9ReShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPVl5LmV4ZWModCkpP25ldyB0ZyhlWzFdLGVbMl0sZVszXSwxKTooZT16eS5leGVjKHQpKT9uZXcgdGcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9VXkuZXhlYyh0KSk/UXkoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9cXkuZXhlYyh0KSk/UXkoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9JHkuZXhlYyh0KSk/aWcoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1IeS5leGVjKHQpKT9pZyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOld5Lmhhc093blByb3BlcnR5KHQpP1p5KFd5W3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgdGcoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBaeSh0KXtyZXR1cm4gbmV3IHRnKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBReSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IHRnKHQsZSxuLHIpfWZ1bmN0aW9uIEt5KHQpe3JldHVybiB0IGluc3RhbmNlb2YgQnl8fCh0PVh5KHQpKSx0P25ldyB0ZygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgdGd9ZnVuY3Rpb24gSnkodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0t5KHQpOm5ldyB0Zyh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gdGcodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIGVnKCl7cmV0dXJuIiMiK3JnKHRoaXMucikrcmcodGhpcy5nKStyZyh0aGlzLmIpfWZ1bmN0aW9uIG5nKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gcmcodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBpZyh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IG9nKHQsZSxuLHIpfWZ1bmN0aW9uIGFnKHQpe2lmKHQgaW5zdGFuY2VvZiBvZylyZXR1cm4gbmV3IG9nKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJ5fHwodD1YeSh0KSksIXQpcmV0dXJuIG5ldyBvZztpZih0IGluc3RhbmNlb2Ygb2cpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBvZyhvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIG9nKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBzZyh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gY2codCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1EeShCeSxYeSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpWeSxmb3JtYXRIZXg6VnksZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIGFnKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6R3ksdG9TdHJpbmc6R3l9KSxEeSh0ZyxKeSxPeShCeSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9JeTpNYXRoLnBvdyhJeSx0KSxuZXcgdGcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/THk6TWF0aC5wb3coTHksdCksbmV3IHRnKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZWcsZm9ybWF0SGV4OmVnLGZvcm1hdFJnYjpuZyx0b1N0cmluZzpuZ30pKSxEeShvZywoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2FnKHQpOm5ldyBvZyh0LGUsbixudWxsPT1yPzE6cil9KSxPeShCeSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9JeTpNYXRoLnBvdyhJeSx0KSxuZXcgb2codGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9MeTpNYXRoLnBvdyhMeSx0KSxuZXcgb2codGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyB0ZyhzZyh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxzZyh0LGksciksc2codDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTtjb25zdCB1Zz10PT4oKT0+dDtmdW5jdGlvbiBsZyh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fSh0LG4pOnVnKGlzTmFOKHQpP2U6dCl9Y29uc3QgaGc9ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP2xnOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6dWcoaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PUp5KHQpKS5yLChlPUp5KGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89bGcodC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIGZnKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9SnkoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19ZmcoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBjZygobi1yL2UpKmUsbyxpLGEscyl9fSkpLGZnKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGk9dFsocitlLTEpJWVdLGE9dFtyJWVdLG89dFsocisxKSVlXSxzPXRbKHIrMiklZV07cmV0dXJuIGNnKChuLXIvZSkqZSxpLGEsbyxzKX19KSk7dmFyIGRnPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxwZz1uZXcgUmVnRXhwKGRnLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHlnKHQsZSl7dmFyIG4scixpLGE9ZGcubGFzdEluZGV4PXBnLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1kZy5leGVjKHQpKSYmKHI9cGcuZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4Ol95KG4scil9KSksYT1wZy5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIGdnKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9feTplIGluc3RhbmNlb2YgWHk/aGc6KG49WHkoZSkpPyhlPW4saGcpOnlnKSh0LGUpfWZ1bmN0aW9uIG1nKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB2Zyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJnKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIF9nKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiB4Zyh0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB3Zyh0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGtnKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBUZyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIEVnKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmVGcodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIENnKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYma2codCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNnKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bXkodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEFnKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtteSh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE1nKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dnkodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE5nKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt2eSh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIERnKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3Z5KHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBPZyh0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/bXk6dnk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIEJnPVVwLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBMZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBJZyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gUmcodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJklnKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIEZnKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBQZyh0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZGZyhyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBqZz0wO2Z1bmN0aW9uIFlnKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiB6Zygpe3JldHVybisramd9dmFyIFVnPVVwLnByb3RvdHlwZTtZZy5wcm90b3R5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIFVwKCkudHJhbnNpdGlvbih0KX0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZZyxzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1NZCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgcyxjLHU9cltvXSxsPXUubGVuZ3RoLGg9YVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpKHM9dVtmXSkmJihjPXQuY2FsbChzLHMuX19kYXRhX18sZix1KSkmJigiX19kYXRhX18iaW4gcyYmKGMuX19kYXRhX189cy5fX2RhdGFfXyksaFtmXT1jLGd5KGhbZl0sZSxuLGYsaCxieShzLG4pKSk7cmV0dXJuIG5ldyBZZyhhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9T2QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9YnkoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZneShmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IFlnKGEsbyxlLG4pfSxzZWxlY3RDaGlsZDpVZy5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpVZy5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUJkKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBZZyhyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBZZyhvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgQmcodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPXpnKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1ieShvLGUpO2d5KG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgWWcocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6VWcuY2FsbCxub2RlczpVZy5ub2Rlcyxub2RlOlVnLm5vZGUsc2l6ZTpVZy5zaXplLGVtcHR5OlVnLmVtcHR5LGVhY2g6VWcuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/YnkodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKE9nKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1YZCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj9TeTpnZztyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD93Zzp4ZykobixyLE55KHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP3ZnOm1nKShuKToobi5sb2NhbD9fZzpiZykobixyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1YZCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP0VnOkNnKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP0N5OmdnO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW9wKHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxvcCh0aGlzLHQpKTtyZXR1cm4gYT09PW8/bnVsbDphPT09biYmbz09PXI/aTppPWUobj1hLHI9byl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxMZyh0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1vcCh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz1vcCh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIsTnkodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXZ5KHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1MZyhlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1vcCh0aGlzLHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixSZyh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fShOeSh0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsUGcodCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9YnkodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLG89aS5sZW5ndGg7YTxvOysrYSlpZigocj1pW2FdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP0F5Ok15KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P1NnOkFnKShlLHQpKTpieSh0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9NZzpOZykoZSx0KSk6YnkodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKERnKGUsdCkpOmJ5KHRoaXMubm9kZSgpLGUpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3Z5KHRoaXMsdCkuZWFzZT1ufX0odGhpcy5faWQsdCkpfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG49dGhpcyxyPW4uX2lkLGk9bi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLG8pe3ZhciBzPXt2YWx1ZTpvfSxjPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmYSgpfX07bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuPXZ5KHRoaXMsciksaT1uLm9uO2khPT10JiYoKGU9KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHMpLGUuXy5pbnRlcnJ1cHQucHVzaChzKSxlLl8uZW5kLnB1c2goYykpLG4ub249ZX0pKSwwPT09aSYmYSgpfSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpVZ1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgcWc9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfX07ZnVuY3Rpb24gJGcodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gbn1mdW5jdGlvbiBIZyh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59VXAucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSkpfSxVcC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBZZz8oZT10Ll9pZCx0PXQuX25hbWUpOihlPXpnKCksKG49cWcpLnRpbWU9b3koKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZneShvLHQsZSx1LHMsbnx8JGcobyxlKSk7cmV0dXJuIG5ldyBZZyhyLHRoaXMuX3BhcmVudHMsdCxlKX0sSGcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpIZyxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgSGcodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYwPT09ZT90aGlzOm5ldyBIZyh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19LG5ldyBIZygxLDAsMCksSGcucHJvdG90eXBlO3ZhciBXZz0iY29tbSIsVmc9InJ1bGUiLEdnPSJkZWNsIixYZz1NYXRoLmFicyxaZz1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFFnKHQpe3JldHVybiB0LnRyaW0oKX1mdW5jdGlvbiBLZyh0LGUsbil7cmV0dXJuIHQucmVwbGFjZShlLG4pfWZ1bmN0aW9uIEpnKHQsZSl7cmV0dXJuIDB8dC5jaGFyQ29kZUF0KGUpfWZ1bmN0aW9uIHRtKHQsZSxuKXtyZXR1cm4gdC5zbGljZShlLG4pfWZ1bmN0aW9uIGVtKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBubSh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gcm0odCxlKXtyZXR1cm4gZS5wdXNoKHQpLHR9ZnVuY3Rpb24gaW0odCxlKXtmb3IodmFyIG49IiIscj1ubSh0KSxpPTA7aTxyO2krKyluKz1lKHRbaV0saSx0LGUpfHwiIjtyZXR1cm4gbn1mdW5jdGlvbiBhbSh0LGUsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlIkBpbXBvcnQiOmNhc2UgR2c6cmV0dXJuIHQucmV0dXJuPXQucmV0dXJufHx0LnZhbHVlO2Nhc2UgV2c6cmV0dXJuIiI7Y2FzZSBWZzp0LnZhbHVlPXQucHJvcHMuam9pbigiLCIpfXJldHVybiBlbShuPWltKHQuY2hpbGRyZW4scikpP3QucmV0dXJuPXQudmFsdWUrInsiK24rIn0iOiIifXZhciBvbT0xLHNtPTEsY209MCx1bT0wLGxtPTAsaG09IiI7ZnVuY3Rpb24gZm0odCxlLG4scixpLGEsbyl7cmV0dXJue3ZhbHVlOnQscm9vdDplLHBhcmVudDpuLHR5cGU6cixwcm9wczppLGNoaWxkcmVuOmEsbGluZTpvbSxjb2x1bW46c20sbGVuZ3RoOm8scmV0dXJuOiIifX1mdW5jdGlvbiBkbSgpe3JldHVybiBsbT11bT4wP0pnKGhtLC0tdW0pOjAsc20tLSwxMD09PWxtJiYoc209MSxvbS0tKSxsbX1mdW5jdGlvbiBwbSgpe3JldHVybiBsbT11bTxjbT9KZyhobSx1bSsrKTowLHNtKyssMTA9PT1sbSYmKHNtPTEsb20rKyksbG19ZnVuY3Rpb24geW0oKXtyZXR1cm4gSmcoaG0sdW0pfWZ1bmN0aW9uIGdtKCl7cmV0dXJuIHVtfWZ1bmN0aW9uIG1tKHQsZSl7cmV0dXJuIHRtKGhtLHQsZSl9ZnVuY3Rpb24gdm0odCl7c3dpdGNoKHQpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIGJtKHQpe3JldHVybiBRZyhtbSh1bS0xLHdtKDkxPT09dD90KzI6NDA9PT10P3QrMTp0KSkpfWZ1bmN0aW9uIF9tKHQpe2Zvcig7KGxtPXltKCkpJiZsbTwzMzspcG0oKTtyZXR1cm4gdm0odCk+Mnx8dm0obG0pPjM/IiI6IiAifWZ1bmN0aW9uIHhtKHQsZSl7Zm9yKDstLWUmJnBtKCkmJiEobG08NDh8fGxtPjEwMnx8bG0+NTcmJmxtPDY1fHxsbT43MCYmbG08OTcpOyk7cmV0dXJuIG1tKHQsZ20oKSsoZTw2JiYzMj09eW0oKSYmMzI9PXBtKCkpKX1mdW5jdGlvbiB3bSh0KXtmb3IoO3BtKCk7KXN3aXRjaChsbSl7Y2FzZSB0OnJldHVybiB1bTtjYXNlIDM0OmNhc2UgMzk6cmV0dXJuIHdtKDM0PT09dHx8Mzk9PT10P3Q6bG0pO2Nhc2UgNDA6NDE9PT10JiZ3bSh0KTticmVhaztjYXNlIDkyOnBtKCl9cmV0dXJuIHVtfWZ1bmN0aW9uIGttKHQsZSl7Zm9yKDtwbSgpJiZ0K2xtIT09NTcmJih0K2xtIT09ODR8fDQ3IT09eW0oKSk7KTtyZXR1cm4iLyoiK21tKGUsdW0tMSkrIioiK1pnKDQ3PT09dD90OnBtKCkpfWZ1bmN0aW9uIFRtKHQpe2Zvcig7IXZtKHltKCkpOylwbSgpO3JldHVybiBtbSh0LHVtKX1mdW5jdGlvbiBFbSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGhtPSIiLHR9KENtKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1mdW5jdGlvbih0KXtyZXR1cm4gb209c209MSxjbT1lbShobT10KSx1bT0wLFtdfSh0KSwwLFswXSx0KSl9ZnVuY3Rpb24gQ20odCxlLG4scixpLGEsbyxzLGMpe2Zvcih2YXIgdT0wLGw9MCxoPW8sZj0wLGQ9MCxwPTAseT0xLGc9MSxtPTEsdj0wLGI9IiIsXz1pLHg9YSx3PXIsaz1iO2c7KXN3aXRjaChwPXYsdj1wbSgpKXtjYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpjYXNlIDQwOmsrPWJtKHYpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjprKz1fbShwKTticmVhaztjYXNlIDkyOmsrPXhtKGdtKCktMSw3KTtjb250aW51ZTtjYXNlIDQ3OnN3aXRjaCh5bSgpKXtjYXNlIDQyOmNhc2UgNDc6cm0oQW0oa20ocG0oKSxnbSgpKSxlLG4pLGMpO2JyZWFrO2RlZmF1bHQ6ays9Ii8ifWJyZWFrO2Nhc2UgMTIzKnk6c1t1KytdPWVtKGspKm07Y2FzZSAxMjUqeTpjYXNlIDU5OmNhc2UgMDpzd2l0Y2godil7Y2FzZSAwOmNhc2UgMTI1Omc9MDtjYXNlIDU5K2w6ZD4wJiZlbShrKS1oJiZybShkPjMyP01tKGsrIjsiLHIsbixoLTEpOk1tKEtnKGssIiAiLCIiKSsiOyIscixuLGgtMiksYyk7YnJlYWs7Y2FzZSA1OTprKz0iOyI7ZGVmYXVsdDppZihybSh3PVNtKGssZSxuLHUsbCxpLHMsYixfPVtdLHg9W10saCksYSksMTIzPT09dilpZigwPT09bClDbShrLGUsdyx3LF8sYSxoLHMseCk7ZWxzZSBzd2l0Y2goZil7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6Q20odCx3LHcsciYmcm0oU20odCx3LHcsMCwwLGkscyxiLGksXz1bXSxoKSx4KSxpLHgsaCxzLHI/Xzp4KTticmVhaztkZWZhdWx0OkNtKGssdyx3LHcsWyIiXSx4LGgscyx4KX19dT1sPWQ9MCx5PW09MSxiPWs9IiIsaD1vO2JyZWFrO2Nhc2UgNTg6aD0xK2VtKGspLGQ9cDtkZWZhdWx0OmlmKHk8MSlpZigxMjM9PXYpLS15O2Vsc2UgaWYoMTI1PT12JiYwPT15KysmJjEyNT09ZG0oKSljb250aW51ZTtzd2l0Y2goays9Wmcodiksdip5KXtjYXNlIDM4Om09bD4wPzE6KGsrPSJcZiIsLTEpO2JyZWFrO2Nhc2UgNDQ6c1t1KytdPShlbShrKS0xKSptLG09MTticmVhaztjYXNlIDY0OjQ1PT09eW0oKSYmKGsrPWJtKHBtKCkpKSxmPXltKCksbD1lbShiPWsrPVRtKGdtKCkpKSx2Kys7YnJlYWs7Y2FzZSA0NTo0NT09PXAmJjI9PWVtKGspJiYoeT0wKX19cmV0dXJuIGF9ZnVuY3Rpb24gU20odCxlLG4scixpLGEsbyxzLGMsdSxsKXtmb3IodmFyIGg9aS0xLGY9MD09PWk/YTpbIiJdLGQ9bm0oZikscD0wLHk9MCxnPTA7cDxyOysrcClmb3IodmFyIG09MCx2PXRtKHQsaCsxLGg9WGcoeT1vW3BdKSksYj10O208ZDsrK20pKGI9UWcoeT4wP2ZbbV0rIiAiK3Y6S2codiwvJlxmL2csZlttXSkpKSYmKGNbZysrXT1iKTtyZXR1cm4gZm0odCxlLG4sMD09PWk/Vmc6cyxjLHUsbCl9ZnVuY3Rpb24gQW0odCxlLG4pe3JldHVybiBmbSh0LGUsbixXZyxaZyhsbSksdG0odCwyLC0yKSwwKX1mdW5jdGlvbiBNbSh0LGUsbixyKXtyZXR1cm4gZm0odCxlLG4sR2csdG0odCwwLHIpLHRtKHQscisxLC0xKSxyKX1jb25zdCBObT0iOC4xMy41Ijt2YXIgRG09big5NjA5KSxPbT1uKDc4NTYpLEJtPW4ubihPbSksTG09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49MDtuPj0wOyl7aWYoISgobj10LmluZGV4T2YoIjxzY3JpcHQiKSk+PTApKXtlKz10LG49LTE7YnJlYWt9ZSs9dC5zdWJzdHIoMCxuKSwobj0odD10LnN1YnN0cihuKzEpKS5pbmRleE9mKCI8XC9zY3JpcHQ+IikpPj0wJiYobis9OSx0PXQuc3Vic3RyKG4pKX1yZXR1cm4oZT0oZT0oZT0oZT1lLnJlcGxhY2UoL3NjcmlwdD4vZ2ksIiMiKSkucmVwbGFjZSgvc2NyaXB0Pi9naSwiIyIpKS5yZXBsYWNlKC9qYXZhc2NyaXB0Oi9naSwiIyIpKS5yZXBsYWNlKC9vbmVycm9yPS9naSwib25lcnJvcjoiKSkucmVwbGFjZSgvPGlmcmFtZS9naSwiIil9LEltPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHQ7dmFyIG49Qm0oKS5zYW5pdGl6ZShmdW5jdGlvbih0LGUpe3ZhciBuPXQscj0hMDtpZighZS5mbG93Y2hhcnR8fCExIT09ZS5mbG93Y2hhcnQuaHRtbExhYmVscyYmImZhbHNlIiE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChyPSExKSxyKXt2YXIgaT1lLnNlY3VyaXR5TGV2ZWw7ImFudGlzY3JpcHQiPT09aT9uPUxtKG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1QbShuKSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpLnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSxuPUZtKG4pKX1yZXR1cm4gbn0odCxlKSk7cmV0dXJuIG59LFJtPS88YnJccypcLz8+L2dpLEZtPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKX0sUG09ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShSbSwiI2JyIyIpfSxqbT1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fTtjb25zdCBZbT17Z2V0Um93czpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMTt2YXIgZT1QbSh0KTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikpLnNwbGl0KCIjYnIjIil9LHNhbml0aXplVGV4dDpJbSxzYW5pdGl6ZVRleHRPckFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0ltKHQsZSk6dC5mbGF0KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gSW0odCxlKX0pKX0saGFzQnJlYWtzOmZ1bmN0aW9uKHQpe3JldHVybiBSbS50ZXN0KHQpfSxzcGxpdEJyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdChSbSl9LGxpbmVCcmVha1JlZ2V4OlJtLHJlbW92ZVNjcmlwdDpMbSxnZXRVcmw6ZnVuY3Rpb24odCl7dmFyIGU9IiI7cmV0dXJuIHQmJihlPShlPShlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGV9LGV2YWx1YXRlOmptfTt2YXIgem09big4NjEzKSxVbT1mdW5jdGlvbih0LGUpe3JldHVybiBlPygwLHptLmFkanVzdCkodCx7czotNDAsbDoxMH0pOigwLHptLmFkanVzdCkodCx7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gcW0odCl7cmV0dXJuIHFtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxxbSh0KX1mdW5jdGlvbiAkbSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBIbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMuZGFya01vZGU9ITEsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZGRkIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fFVtKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcnx8VW0odGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yfHxVbSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fFVtKHRoaXMubm90ZUJrZ0NvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMubm90ZUJrZ0NvbG9yfHwiI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMubm90ZVRleHRDb2xvcnx8IiMzMzMiLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yfHwoMCx6bS5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8KDAsem0uaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHwoMCx6bS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/KDAsem0uZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLm5vZGVUZXh0Q29sb3I9dGhpcy5ub2RlVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckJvcmRlcj10aGlzLmFjdG9yQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFjdG9yQmtnPXRoaXMuYWN0b3JCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JMaW5lQ29sb3J8fCJncmV5Iix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fCgwLHptLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8KDAsem0uaW52ZXJ0KSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj10aGlzLmV4Y2x1ZGVCa2dDb2xvcnx8IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHwoMCx6bS5saWdodGVuKSh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fCgwLHptLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fCgwLHptLmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHwoMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT8oMCx6bS5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09cW0odCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dLG4mJiRtKGUucHJvdG90eXBlLG4pLHR9KCk7ZnVuY3Rpb24gV20odCl7cmV0dXJuIFdtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxXbSh0KX1mdW5jdGlvbiBWbSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBHbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPSgwLHptLmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VW0odGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1VbSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1VbSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj0oMCx6bS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9KDAsem0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj0oMCx6bS5saWdodGVuKSgoMCx6bS5pbnZlcnQpKCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiM4MUIxREIiLHRoaXMuYm9yZGVyMj0oMCx6bS5yZ2JhKSgyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiNGOUZGRkUiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0iYmxhY2siLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSgwLHptLmRhcmtlbikoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLnRhc2tCb3JkZXJDb2xvcj0oMCx6bS5yZ2JhKSgyNTUsMjU1LDI1NSw3MCksdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9KDAsem0ucmdiYSkoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXZhciBlLG47cmV0dXJuIGU9dCxuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9KDAsem0ubGlnaHRlbikodGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0oMCx6bS5saWdodGVuKSh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj0oMCx6bS5saWdodGVuKSh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiM1NTUiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjZjRmNGY0Iix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPSgwLHptLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PSgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PSgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fCIjMGIwMDAwIix0aGlzLnBpZTI9dGhpcy5waWUyfHwiIzRkMTAzNyIsdGhpcy5waWUzPXRoaXMucGllM3x8IiMzZjUyNTgiLHRoaXMucGllND10aGlzLnBpZTR8fCIjNGYyZjFiIix0aGlzLnBpZTU9dGhpcy5waWU1fHwiIzZlMGEwYSIsdGhpcy5waWU2PXRoaXMucGllNnx8IiMzYjAwNDgiLHRoaXMucGllNz10aGlzLnBpZTd8fCIjOTk1YTAxIix0aGlzLnBpZTg9dGhpcy5waWU4fHwiIzE1NDcwNiIsdGhpcy5waWU5PXRoaXMucGllOXx8IiMxNjE3MjIiLHRoaXMucGllMTA9dGhpcy5waWUxMHx8IiMwMDI5NmYiLHRoaXMucGllMTE9dGhpcy5waWUxMXx8IiMwMTYyOWMiLHRoaXMucGllMTI9dGhpcy5waWUxMnx8IiMwMTAwMjkiLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPygwLHptLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3J9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1XbSh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0sbiYmVm0oZS5wcm90b3R5cGUsbiksdH0oKTtmdW5jdGlvbiBYbSh0KXtyZXR1cm4gWG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LFhtKHQpfWZ1bmN0aW9uIFptKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIFFtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VW0odGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1VbSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1VbSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj0oMCx6bS5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9KDAsem0uaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0oMCx6bS5yZ2JhKSgxMDIsMTAyLDI1NSwuNDkpLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjZmZmNDAwIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy50YXNrQmtnQ29sb3I9IiM4YTkwZGQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiNiZmM3ZmYiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiIsdGhpcy51cGRhdGVDb2xvcnMoKX12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPSgwLHptLmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj0oMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT0oMCx6bS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz0oMCx6bS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHwoMCx6bS5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHwoMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fCgwLHptLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHwoMCx6bS5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHwoMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHwoMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PVhtKHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSxuJiZabShlLnByb3RvdHlwZSxuKSx0fSgpO2Z1bmN0aW9uIEttKHQpe3JldHVybiBLbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sS20odCl9ZnVuY3Rpb24gSm0odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgdHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9KDAsem0ubGlnaHRlbikoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1VbSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVVtKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVVtKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9KDAsem0uaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9KDAsem0uaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPSgwLHptLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPSgwLHptLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj0oMCx6bS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5hY3RvckJvcmRlcj0oMCx6bS5kYXJrZW4pKHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPSgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz0oMCx6bS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND0oMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PSgwLHptLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj0oMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PSgwLHptLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHwoMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fCgwLHptLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHwoMCx6bS5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7aDo0MCxsOi00MH0pLHRoaXMucGllNz10aGlzLnBpZTd8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHwoMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNTB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTUwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3J9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1LbSh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0sbiYmSm0oZS5wcm90b3R5cGUsbiksdH0oKTtmdW5jdGlvbiBldih0KXtyZXR1cm4gZXY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGV2KHQpfWZ1bmN0aW9uIG52KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHJ2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPSgwLHptLmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPSgwLHptLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVVtKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9VW0odGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9VW0odGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj0oMCx6bS5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj0oMCx6bS5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9KDAsem0uaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPSgwLHptLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj0oMCx6bS5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn12YXIgZSxuO3JldHVybiBlPXQsbj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2Vjb25kQmtnPSgwLHptLmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYm9yZGVyMj10aGlzLmNvbnRyYXN0LHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yQm9yZGVyPSgwLHptLmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9KDAsem0ubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSgwLHptLmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPSgwLHptLmRhcmtlbikodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj0oMCx6bS5saWdodGVuKSh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9KDAsem0uZGFya2VuKSh0aGlzLmNyaXRCa2dDb2xvciwxMCksdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLmNyaXRCa2dDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8IiMwMDAiLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmNGY0ZjQiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5zdGF0ZUJvcmRlcj10aGlzLnN0YXRlQm9yZGVyfHwiIzAwMCIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iIzIyMiIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj0oMCx6bS5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9KDAsem0uYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT0oMCx6bS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9KDAsem0uYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz0oMCx6bS5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8IiNGNEY0RjQiLHRoaXMucGllMj10aGlzLnBpZTJ8fCIjNTU1Iix0aGlzLnBpZTM9dGhpcy5waWUzfHwiI0JCQiIsdGhpcy5waWU0PXRoaXMucGllNHx8IiM3NzciLHRoaXMucGllNT10aGlzLnBpZTV8fCIjOTk5Iix0aGlzLnBpZTY9dGhpcy5waWU2fHwiI0RERCIsdGhpcy5waWU3PXRoaXMucGllN3x8IiNGRkYiLHRoaXMucGllOD10aGlzLnBpZTh8fCIjREREIix0aGlzLnBpZTk9dGhpcy5waWU5fHwiI0JCQiIsdGhpcy5waWUxMD10aGlzLnBpZTEwfHwiIzk5OSIsdGhpcy5waWUxMT10aGlzLnBpZTExfHwiIzc3NyIsdGhpcy5waWUxMj10aGlzLnBpZTEyfHwiIzU1NSIsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3J9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1ldih0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0sbiYmbnYoZS5wcm90b3R5cGUsbiksdH0oKTtjb25zdCBpdj17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhtO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEdtO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFFtO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgdHY7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgcnY7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fX07ZnVuY3Rpb24gYXYodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG92KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG92KHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/b3YodCxlKTp2b2lkIDB9fSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBvdih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIHN2KHQpe3JldHVybiBzdj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sc3YodCl9dmFyIGN2PXt0aGVtZToiZGVmYXVsdCIsdGhlbWVWYXJpYWJsZXM6aXYuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcygpLHRoZW1lQ1NTOnZvaWQgMCxtYXhUZXh0U2l6ZTo1ZTQsZm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOycsbG9nTGV2ZWw6NSxzZWN1cml0eUxldmVsOiJzdHJpY3QiLHN0YXJ0T25Mb2FkOiEwLGFycm93TWFya2VyQWJzb2x1dGU6ITEsc2VjdXJlOlsic2VjdXJlIiwic2VjdXJpdHlMZXZlbCIsInN0YXJ0T25Mb2FkIiwibWF4VGV4dFNpemUiXSxkZXRlcm1pbmlzdGljSWRzOiExLGRldGVybWluaXN0aWNJRFNlZWQ6dm9pZCAwLGZsb3djaGFydDp7ZGlhZ3JhbVBhZGRpbmc6OCxodG1sTGFiZWxzOiEwLG5vZGVTcGFjaW5nOjUwLHJhbmtTcGFjaW5nOjUwLGN1cnZlOiJiYXNpcyIscGFkZGluZzoxNSx1c2VNYXhXaWR0aDohMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLWQzIn0sc2VxdWVuY2U6e2FjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwLG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSxub3RlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubm90ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ub3RlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm5vdGVGb250V2VpZ2h0fX0sYWN0b3JGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fX0sZ2FudHQ6e3RpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix1c2VNYXhXaWR0aDohMCx0b3BBeGlzOiExLHVzZVdpZHRoOnZvaWQgMH0sam91cm5leTp7ZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEsdXNlTWF4V2lkdGg6ITAscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxjbGFzczp7YXJyb3dNYXJrZXJBYnNvbHV0ZTohMSx1c2VNYXhXaWR0aDohMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxnaXQ6e2Fycm93TWFya2VyQWJzb2x1dGU6ITEsdXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxzdGF0ZTp7ZGl2aWRlck1hcmdpbjoxMCxzaXplVW5pdDo1LHBhZGRpbmc6OCx0ZXh0SGVpZ2h0OjEwLHRpdGxlU2hpZnQ6LTE1LG5vdGVNYXJnaW46MTAsZm9ya1dpZHRoOjcwLGZvcmtIZWlnaHQ6NyxtaW5pUGFkZGluZzoyLGZvbnRTaXplRmFjdG9yOjUuMDIsZm9udFNpemU6MjQsbGFiZWxIZWlnaHQ6MTYsZWRnZUxlbmd0aEZhY3RvcjoiMjAiLGNvbXBvc2l0VGl0bGVTaXplOjM1LHJhZGl1czo1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciJ9LGVyOntkaWFncmFtUGFkZGluZzoyMCxsYXlvdXREaXJlY3Rpb246IlRCIixtaW5FbnRpdHlXaWR0aDoxMDAsbWluRW50aXR5SGVpZ2h0Ojc1LGVudGl0eVBhZGRpbmc6MTUsc3Ryb2tlOiJncmF5IixmaWxsOiJob25leWRldyIsZm9udFNpemU6MTIsdXNlTWF4V2lkdGg6ITB9LHBpZTp7dXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxyZXF1aXJlbWVudDp7dXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwLHJlY3RfZmlsbDoiI2Y5ZjlmOSIsdGV4dF9jb2xvcjoiIzMzMyIscmVjdF9ib3JkZXJfc2l6ZToiMC41cHgiLHJlY3RfYm9yZGVyX2NvbG9yOiIjYmJiIixyZWN0X21pbl93aWR0aDoyMDAscmVjdF9taW5faGVpZ2h0OjIwMCxmb250U2l6ZToxNCxyZWN0X3BhZGRpbmc6MTAsbGluZV9oZWlnaHQ6MjB9fTtjdi5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPWN2LmFycm93TWFya2VyQWJzb2x1dGUsY3YuZ2l0LmFycm93TWFya2VyQWJzb2x1dGU9Y3YuYXJyb3dNYXJrZXJBYnNvbHV0ZTt2YXIgdXY9ZnVuY3Rpb24gdChlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoZnVuY3Rpb24ocixpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlW2ldKT9yOiJvYmplY3QiPT09c3YoZVtpXSkmJm51bGwhPT1lW2ldP1tdLmNvbmNhdChhdihyKSxbbitpXSxhdih0KGVbaV0sIiIpKSk6W10uY29uY2F0KGF2KHIpLFtuK2ldKX0pLFtdKX0oY3YsIiIpO2NvbnN0IGx2PWN2O3ZhciBodj12b2lkIDA7ZnVuY3Rpb24gZnYodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX1mdW5jdGlvbiBkdih0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49Z3YodCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIHB2KHQpe3JldHVybiBwdj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scHYodCl9ZnVuY3Rpb24geXYodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG12KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Z3YodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gZ3YodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG12KHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/bXYodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIG12KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIHZ2LGJ2PXtjdXJ2ZUJhc2lzOlZ1LGN1cnZlQmFzaXNDbG9zZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHdSh0KX0sY3VydmVCYXNpc09wZW46ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdSh0KX0sY3VydmVMaW5lYXI6UHUsY3VydmVMaW5lYXJDbG9zZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBadSh0KX0sY3VydmVNb25vdG9uZVg6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlbCh0KX0sY3VydmVNb25vdG9uZVk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBubCh0KX0sY3VydmVOYXR1cmFsOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaWwodCl9LGN1cnZlU3RlcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG9sKHQsLjUpfSxjdXJ2ZVN0ZXBBZnRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG9sKHQsMSl9LGN1cnZlU3RlcEJlZm9yZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG9sKHQsMCl9fSxfdj0vWyVdezJ9W3tdXHMqKD86KD86KFx3Kylccyo6fChcdyspKVxzKig/Oig/OihcdyspKXwoKD86KD8hW31dWyVdezJ9KS58XHI/XG4pKikpP1xzKikoPzpbfV1bJV17Mn0pPy9naSx4dj0vXHMqKD86KD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLHd2PS9ccyolJS4qXG4vZ20sa3Y9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dHJ5e3ZhciBuPW5ldyBSZWdFeHAoIlslXXsyfSg/IVt7XSIuY29uY2F0KHh2LnNvdXJjZSwiKSg/PVt9XVslXXsyfSkuKlxuIiksImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKG4sIiIpLnJlcGxhY2UoLycvZ20sJyInKSxvLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUiLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKTtmb3IodmFyIHIsaT1bXTtudWxsIT09KHI9X3YuZXhlYyh0KSk7KWlmKHIuaW5kZXg9PT1fdi5sYXN0SW5kZXgmJl92Lmxhc3RJbmRleCsrLHImJiFlfHxlJiZyWzFdJiZyWzFdLm1hdGNoKGUpfHxlJiZyWzJdJiZyWzJdLm1hdGNoKGUpKXt2YXIgYT1yWzFdP3JbMV06clsyXSxzPXJbM10/clszXS50cmltKCk6cls0XT9KU09OLnBhcnNlKHJbNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6c30pfXJldHVybiAwPT09aS5sZW5ndGgmJmkucHVzaCh7dHlwZTp0LGFyZ3M6bnVsbH0pLDE9PT1pLmxlbmd0aD9pWzBdOml9Y2F0Y2gobil7cmV0dXJuIG8uZXJyb3IoIkVSUk9SOiAiLmNvbmNhdChuLm1lc3NhZ2UsIiAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmVcbiAgICAgICIpLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKSx7dHlwZTpudWxsLGFyZ3M6bnVsbH19fSxUdj1mdW5jdGlvbih0LGUpe3JldHVybih0PXQucmVwbGFjZShfdiwiIikucmVwbGFjZSh3diwiXG4iKSkubWF0Y2goL15ccypzZXF1ZW5jZURpYWdyYW0vKT8ic2VxdWVuY2UiOnQubWF0Y2goL15ccypnYW50dC8pPyJnYW50dCI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS12Mi8pPyJjbGFzc0RpYWdyYW0iOnQubWF0Y2goL15ccypjbGFzc0RpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLmNsYXNzLmRlZmF1bHRSZW5kZXJlcj8iY2xhc3NEaWFncmFtIjoiY2xhc3MiOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0tdjIvKT8ic3RhdGVEaWFncmFtIjp0Lm1hdGNoKC9eXHMqc3RhdGVEaWFncmFtLyk/ZSYmZS5jbGFzcyYmImRhZ3JlLXdyYXBwZXIiPT09ZS5zdGF0ZS5kZWZhdWx0UmVuZGVyZXI/InN0YXRlRGlhZ3JhbSI6InN0YXRlIjp0Lm1hdGNoKC9eXHMqZ2l0R3JhcGgvKT8iZ2l0Ijp0Lm1hdGNoKC9eXHMqZmxvd2NoYXJ0Lyk/ImZsb3djaGFydC12MiI6dC5tYXRjaCgvXlxzKmluZm8vKT8iaW5mbyI6dC5tYXRjaCgvXlxzKnBpZS8pPyJwaWUiOnQubWF0Y2goL15ccyplckRpYWdyYW0vKT8iZXIiOnQubWF0Y2goL15ccypqb3VybmV5Lyk/ImpvdXJuZXkiOnQubWF0Y2goL15ccypyZXF1aXJlbWVudC8pfHx0Lm1hdGNoKC9eXHMqcmVxdWlyZW1lbnREaWFncmFtLyk/InJlcXVpcmVtZW50IjplJiZlLmZsb3djaGFydCYmImRhZ3JlLXdyYXBwZXIiPT09ZS5mbG93Y2hhcnQuZGVmYXVsdFJlbmRlcmVyPyJmbG93Y2hhcnQtdjIiOiJmbG93Y2hhcnQifSxFdj1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3ZhciBvPWU/ZS5hcHBseShodixpKTppWzBdO2lmKG8gaW4gbilyZXR1cm4gbltvXTt2YXIgcz10LmFwcGx5KHZvaWQgMCxpKTtyZXR1cm4gbltvXT1zLHN9fSxDdj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBlO3ZhciBuPSJjdXJ2ZSIuY29uY2F0KHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSk7cmV0dXJuIGJ2W25dfHxlfSxTdj1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZlP01hdGguc3FydChNYXRoLnBvdyhlLngtdC54LDIpK01hdGgucG93KGUueS10LnksMikpOjB9LEF2PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixuPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl2b2lkIDAhPT10W3JdJiYodFtyXS5zdGFydHNXaXRoKCJjb2xvcjoiKXx8dFtyXS5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP249bit0W3JdKyI7IjplPWUrdFtyXSsiOyIpO3JldHVybntzdHlsZTplLGxhYmVsU3R5bGU6bn19LE12PTAsTnY9ZnVuY3Rpb24oKXtyZXR1cm4gTXYrKywiaWQtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwxMikrIi0iK012fSxEdj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IjAxMjM0NTY3ODlhYmNkZWYiLHI9bi5sZW5ndGgsaT0wO2k8dDtpKyspZSs9bi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnIpKTtyZXR1cm4gZX0odC5sZW5ndGgpfSxPdj1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaT1PYmplY3QuYXNzaWduKHtkZXB0aDoyLGNsb2JiZXI6ITF9LHIpLGE9aS5kZXB0aCxvPWkuY2xvYmJlcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIUFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuLHIpfSkpLGUpOkFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX0pKSxlKTp2b2lkIDA9PT1lfHxhPD0wP251bGwhPWUmJiJvYmplY3QiPT09cHYoZSkmJiJvYmplY3QiPT09cHYobik/T2JqZWN0LmFzc2lnbihlLG4pOm46KHZvaWQgMCE9PW4mJiJvYmplY3QiPT09cHYoZSkmJiJvYmplY3QiPT09cHYobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHIpeyJvYmplY3QiIT09cHYobltyXSl8fHZvaWQgMCE9PWVbcl0mJiJvYmplY3QiIT09cHYoZVtyXSk/KG98fCJvYmplY3QiIT09cHYoZVtyXSkmJiJvYmplY3QiIT09cHYobltyXSkpJiYoZVtyXT1uW3JdKToodm9pZCAwPT09ZVtyXSYmKGVbcl09QXJyYXkuaXNBcnJheShuW3JdKT9bXTp7fSksZVtyXT10KGVbcl0sbltyXSx7ZGVwdGg6YS0xLGNsb2JiZXI6b30pKX0pKSxlKX0sQnY9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZShZbS5saW5lQnJlYWtSZWdleCwiICIpLHI9dC5hcHBlbmQoInRleHQiKTtyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksci5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksci5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSxyLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLmF0dHIoImZpbGwiLGUuZmlsbCksaS50ZXh0KG4pLHJ9LEx2PUV2KChmdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuIHQ7aWYobj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sbiksWW0ubGluZUJyZWFrUmVnZXgudGVzdCh0KSlyZXR1cm4gdDt2YXIgcj10LnNwbGl0KCIgIiksaT1bXSxhPSIiO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIHM9UnYoIiIuY29uY2F0KHQsIiAiKSxuKSxjPVJ2KGEsbik7aWYocz5lKXt2YXIgdT1Jdih0LGUsIi0iLG4pLGw9dS5oeXBoZW5hdGVkU3RyaW5ncyxoPXUucmVtYWluaW5nV29yZDtpLnB1c2guYXBwbHkoaSxbYV0uY29uY2F0KHl2KGwpKSksYT1ofWVsc2UgYytzPj1lPyhpLnB1c2goYSksYT10KTphPVthLHRdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7bysxPT09ci5sZW5ndGgmJmkucHVzaChhKX0pKSxpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIiIhPT10fSkpLmpvaW4obi5qb2luV2l0aCl9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobi5mb250U2l6ZSwiLSIpLmNvbmNhdChuLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQobi5mb250RmFtaWx5LCItIikuY29uY2F0KG4uam9pbldpdGgpfSkpLEl2PUV2KChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0scik7dmFyIGk9dC5zcGxpdCgiIiksYT1bXSxvPSIiO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQscyl7dmFyIGM9IiIuY29uY2F0KG8pLmNvbmNhdCh0KTtpZihSdihjLHIpPj1lKXt2YXIgdT1zKzEsbD1pLmxlbmd0aD09PXUsaD0iIi5jb25jYXQoYykuY29uY2F0KG4pO2EucHVzaChsP2M6aCksbz0iIn1lbHNlIG89Y30pKSx7aHlwaGVuYXRlZFN0cmluZ3M6YSxyZW1haW5pbmdXb3JkOm99fSksKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobiwiLSIpLmNvbmNhdChyLmZvbnRTaXplLCItIikuY29uY2F0KHIuZm9udFdlaWdodCwiLSIpLmNvbmNhdChyLmZvbnRGYW1pbHkpfSkpLFJ2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSxGdih0LGUpLndpZHRofSxGdj1FdigoZnVuY3Rpb24odCxlKXt2YXIgbj1lPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSkscj1uLmZvbnRTaXplLGk9bi5mb250RmFtaWx5LGE9bi5mb250V2VpZ2h0O2lmKCF0KXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgbz1bInNhbnMtc2VyaWYiLGldLHM9dC5zcGxpdChZbS5saW5lQnJlYWtSZWdleCksYz1bXSx1PWF1KCJib2R5Iik7aWYoIXUucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKHZhciBsPXUuYXBwZW5kKCJzdmciKSxoPTAsZj1vO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZCxwPWZbaF0seT0wLGc9e3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfSxtPWR2KHMpO3RyeXtmb3IobS5zKCk7IShkPW0ubigpKS5kb25lOyl7dmFyIHY9ZC52YWx1ZSxiPXt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjoic3RhcnQiLHN0eWxlOiIjNjY2Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHZhbGlnbjp2b2lkIDB9O2IudGV4dD12O3ZhciBfPUJ2KGwsYikuc3R5bGUoImZvbnQtc2l6ZSIscikuc3R5bGUoImZvbnQtd2VpZ2h0IixhKS5zdHlsZSgiZm9udC1mYW1pbHkiLHApLHg9KF8uX2dyb3Vwc3x8XylbMF1bMF0uZ2V0QkJveCgpO2cud2lkdGg9TWF0aC5yb3VuZChNYXRoLm1heChnLndpZHRoLHgud2lkdGgpKSx5PU1hdGgucm91bmQoeC5oZWlnaHQpLGcuaGVpZ2h0Kz15LGcubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KGcubGluZUhlaWdodCx5KSl9fWNhdGNoKHQpe20uZSh0KX1maW5hbGx5e20uZigpfWMucHVzaChnKX1yZXR1cm4gbC5yZW1vdmUoKSxjW2lzTmFOKGNbMV0uaGVpZ2h0KXx8aXNOYU4oY1sxXS53aWR0aCl8fGlzTmFOKGNbMV0ubGluZUhlaWdodCl8fGNbMF0uaGVpZ2h0PmNbMV0uaGVpZ2h0JiZjWzBdLndpZHRoPmNbMV0ud2lkdGgmJmNbMF0ubGluZUhlaWdodD5jWzFdLmxpbmVIZWlnaHQ/MDoxXX0pLChmdW5jdGlvbih0LGUpe3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUuZm9udFNpemUsIi0iKS5jb25jYXQoZS5mb250V2VpZ2h0LCItIikuY29uY2F0KGUuZm9udEZhbWlseSl9KSksUHY9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBNYXA7cmV0dXJuIHIuc2V0KCJoZWlnaHQiLHQpLG4/KHIuc2V0KCJ3aWR0aCIsIjEwMCUiKSxyLnNldCgic3R5bGUiLCJtYXgtd2lkdGg6ICIuY29uY2F0KGUsInB4OyIpKSk6ci5zZXQoIndpZHRoIixlKSxyfSxqdj1mdW5jdGlvbih0LGUsbixyKXshZnVuY3Rpb24odCxlKXt2YXIgbixyPWR2KGUpO3RyeXtmb3Ioci5zKCk7IShuPXIubigpKS5kb25lOyl7dmFyIGk9bi52YWx1ZTt0LmF0dHIoaVswXSxpWzFdKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fSh0LFB2KGUsbixyKSl9LFl2PWZ1bmN0aW9uIHQoZSl7by5kZWJ1ZygiZGlyZWN0aXZlU2FuaXRpemVyIGNhbGxlZCB3aXRoIixlKSwib2JqZWN0Ij09PXB2KGUpJiYoZS5sZW5ndGg/ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdChlKX0pKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtvLmRlYnVnKCJDaGVja2luZyBrZXkiLG4pLDA9PT1uLmluZGV4T2YoIl9fIikmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBfXyBvcHRpb24iLG4pLGRlbGV0ZSBlW25dKSxuLmluZGV4T2YoInByb3RvIik+PTAmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBwcm90byBvcHRpb24iLG4pLGRlbGV0ZSBlW25dKSxuLmluZGV4T2YoImNvbnN0ciIpPj0wJiYoby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgY29uc3RyIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLHV2LmluZGV4T2Yobik8MD8oby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgb3B0aW9uIixuKSxkZWxldGUgZVtuXSk6Im9iamVjdCI9PT1wdihlW25dKSYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIG9iamVjdCIsbiksdChlW25dKSl9KSkpfTtjb25zdCB6dj17YXNzaWduV2l0aERlcHRoOk92LHdyYXBMYWJlbDpMdixjYWxjdWxhdGVUZXh0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjoxNX0sZSksRnYodCxlKS5oZWlnaHR9LGNhbGN1bGF0ZVRleHRXaWR0aDpSdixjYWxjdWxhdGVUZXh0RGltZW5zaW9uczpGdixjYWxjdWxhdGVTdmdTaXplQXR0cnM6UHYsY29uZmlndXJlU3ZnU2l6ZTpqdixkZXRlY3RJbml0OmZ1bmN0aW9uKHQsZSl7dmFyIG49a3YodCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLykscj17fTtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXJnc30pKTtZdihpKSxyPU92KHIseXYoaSkpfWVsc2Ugcj1uLmFyZ3M7aWYocil7dmFyIGE9VHYodCxlKTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXJbdF0mJigiZmxvd2NoYXJ0LXYyIj09PWEmJihhPSJmbG93Y2hhcnQiKSxyW2FdPXJbdF0sZGVsZXRlIHJbdF0pfSkpfXJldHVybiByfSxkZXRlY3REaXJlY3RpdmU6a3YsZGV0ZWN0VHlwZTpUdixpc1N1YnN0cmluZ0luQXJyYXk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLm1hdGNoKHQpKXJldHVybiBuO3JldHVybi0xfSxpbnRlcnBvbGF0ZVRvQ3VydmU6Q3YsY2FsY0xhYmVsUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPVN2KHQsZSksZT10fSkpO3ZhciByPW4vMixpPXZvaWQgMDtyZXR1cm4gZT12b2lkIDAsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihlJiYhaSl7dmFyIG49U3YodCxlKTtpZihuPHIpci09bjtlbHNle3ZhciBhPXIvbjthPD0wJiYoaT1lKSxhPj0xJiYoaT17eDp0LngseTp0Lnl9KSxhPjAmJmE8MSYmKGk9e3g6KDEtYSkqZS54K2EqdC54LHk6KDEtYSkqZS55K2EqdC55fSl9fWU9dH0pKSxpfSh0KX0sY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByO28uaW5mbygib3VyIHBvaW50cyIsZSksZVswXSE9PW4mJihlPWUucmV2ZXJzZSgpKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe1N2KHQscikscj10fSkpO3ZhciBpLGE9MjU7cj12b2lkIDAsZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhaSl7dmFyIGU9U3YodCxyKTtpZihlPGEpYS09ZTtlbHNle3ZhciBuPWEvZTtuPD0wJiYoaT1yKSxuPj0xJiYoaT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGk9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgcz10PzEwOjUsYz1NYXRoLmF0YW4yKGVbMF0ueS1pLnksZVswXS54LWkueCksdT17eDowLHk6MH07cmV0dXJuIHUueD1NYXRoLnNpbihjKSpzKyhlWzBdLngraS54KS8yLHUueT0tTWF0aC5jb3MoYykqcysoZVswXS55K2kueSkvMix1fSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobikpO28uaW5mbygib3VyIHBvaW50cyIsaSksInN0YXJ0X2xlZnQiIT09ZSYmInN0YXJ0X3JpZ2h0IiE9PWUmJihpPWkucmV2ZXJzZSgpKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe1N2KHQscikscj10fSkpO3ZhciBhLHM9MjUrdDtyPXZvaWQgMCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHImJiFhKXt2YXIgZT1Tdih0LHIpO2lmKGU8cylzLT1lO2Vsc2V7dmFyIG49cy9lO248PTAmJihhPXIpLG4+PTEmJihhPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoYT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBjPTEwKy41KnQsdT1NYXRoLmF0YW4yKGlbMF0ueS1hLnksaVswXS54LWEueCksbD17eDowLHk6MH07cmV0dXJuIGwueD1NYXRoLnNpbih1KSpjKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModSkqYysoaVswXS55K2EueSkvMiwic3RhcnRfbGVmdCI9PT1lJiYobC54PU1hdGguc2luKHUrTWF0aC5QSSkqYysoaVswXS54K2EueCkvMixsLnk9LU1hdGguY29zKHUrTWF0aC5QSSkqYysoaVswXS55K2EueSkvMiksImVuZF9yaWdodCI9PT1lJiYobC54PU1hdGguc2luKHUtTWF0aC5QSSkqYysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModS1NYXRoLlBJKSpjKyhpWzBdLnkrYS55KS8yLTUpLCJlbmRfbGVmdCI9PT1lJiYobC54PU1hdGguc2luKHUpKmMrKGlbMF0ueCthLngpLzItNSxsLnk9LU1hdGguY29zKHUpKmMrKGlbMF0ueSthLnkpLzItNSksbH0sZm9ybWF0VXJsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC50cmltKCk7aWYobilyZXR1cm4ibG9vc2UiIT09ZS5zZWN1cml0eUxldmVsPygwLERtLnNhbml0aXplVXJsKShuKTpufSxnZXRTdHlsZXNGcm9tQXJyYXk6QXYsZ2VuZXJhdGVJZDpOdixyYW5kb206RHYsbWVtb2l6ZTpFdixydW5GdW5jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXQuc3BsaXQoIi4iKSxyPW4ubGVuZ3RoLTEsaT1uW3JdLGE9d2luZG93LG89MDtvPHI7bysrKWlmKCEoYT1hW25bb11dKSlyZXR1cm47Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkocz4xP3MtMTowKSx1PTE7dTxzO3UrKyljW3UtMV09YXJndW1lbnRzW3VdOyhlPWEpW2ldLmFwcGx5KGUsYyl9LGVudGl0eURlY29kZTpmdW5jdGlvbih0KXtyZXR1cm4gdnY9dnZ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLHZ2LmlubmVySFRNTD10LHVuZXNjYXBlKHZ2LnRleHRDb250ZW50KX0saW5pdElkR2VuZXJhdGlvcjpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmRldGVybWluaXN0aWM9ZSx0aGlzLnNlZWQ9bix0aGlzLmNvdW50PW4/bi5sZW5ndGg6MH12YXIgZSxuO3JldHVybiBlPXQsKG49W3trZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGV0ZXJtaW5pc3RpYz90aGlzLmNvdW50Kys6RGF0ZS5ub3coKX19XSkmJmZ2KGUucHJvdG90eXBlLG4pLHR9KCksZGlyZWN0aXZlU2FuaXRpemVyOll2fTtmdW5jdGlvbiBVdih0KXtyZXR1cm4gVXY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LFV2KHQpfXZhciBxdiwkdj1PYmplY3QuZnJlZXplKGx2KSxIdj1Pdih7fSwkdiksV3Y9W10sVnY9T3Yoe30sJHYpLEd2PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPU92KHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO1F2KGEpLHI9T3YocixhKX1pZihuPU92KG4sciksci50aGVtZSl7dmFyIG89T3Yoe30scXYpLHM9T3Yoby50aGVtZVZhcmlhYmxlc3x8e30sci50aGVtZVZhcmlhYmxlcyk7bi50aGVtZVZhcmlhYmxlcz1pdltuLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhzKX1yZXR1cm4gVnY9bixufSxYdj1mdW5jdGlvbigpe3JldHVybiBPdih7fSxIdil9LFp2PWZ1bmN0aW9uKCl7cmV0dXJuIE92KHt9LFZ2KX0sUXY9ZnVuY3Rpb24gdChlKXtPYmplY3Qua2V5cyhIdi5zZWN1cmUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWVbSHYuc2VjdXJlW3RdXSYmKG8uZGVidWcoIkRlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgIi5jb25jYXQoSHYuc2VjdXJlW3RdKSxlW0h2LnNlY3VyZVt0XV0pLGRlbGV0ZSBlW0h2LnNlY3VyZVt0XV0pfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoIl9fIikmJmRlbGV0ZSBlW3RdfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4peyJzdHJpbmciPT10eXBlb2YgZVtuXSYmKGVbbl0uaW5kZXhPZigiPCIpPi0xfHxlW25dLmluZGV4T2YoIj4iKT4tMXx8ZVtuXS5pbmRleE9mKCJ1cmwoZGF0YToiKT4tMSkmJmRlbGV0ZSBlW25dLCJvYmplY3QiPT09VXYoZVtuXSkmJnQoZVtuXSl9KSl9LEt2PWZ1bmN0aW9uKHQpe3QuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLFd2LnB1c2godCksR3YoSHYsV3YpfSxKdj1mdW5jdGlvbigpe0d2KEh2LFd2PVtdKX07ZnVuY3Rpb24gdGIodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgZWI9ImNsYXNzaWQtIixuYj1bXSxyYj17fSxpYj0wLGFiPVtdLG9iPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dDtpZih0LmluZGV4T2YoIn4iKT4wKXt2YXIgcj10LnNwbGl0KCJ+Iik7bj1yWzBdLGU9WW0uc2FuaXRpemVUZXh0KHJbMV0sWnYoKSl9cmV0dXJue2NsYXNzTmFtZTpuLHR5cGU6ZX19LHNiPWZ1bmN0aW9uKHQpe3ZhciBlPW9iKHQpO3ZvaWQgMD09PXJiW2UuY2xhc3NOYW1lXSYmKHJiW2UuY2xhc3NOYW1lXT17aWQ6ZS5jbGFzc05hbWUsdHlwZTplLnR5cGUsY3NzQ2xhc3NlczpbXSxtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sZG9tSWQ6ZWIrZS5jbGFzc05hbWUrIi0iK2lifSxpYisrKX0sY2I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHJiKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYocmJbZVtuXV0uaWQ9PT10KXJldHVybiByYltlW25dXS5kb21JZH0sdWI9ZnVuY3Rpb24odCxlKXt2YXIgbj1vYih0KS5jbGFzc05hbWUscj1yYltuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LGxiPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49ZWIrbiksdm9pZCAwIT09cmJbbl0mJnJiW25dLmNzc0NsYXNzZXMucHVzaChlKX0pKX0saGI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVp2KCksaT10LGE9Y2IoaSk7aWYoImxvb3NlIj09PXIuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSYmdm9pZCAwIT09cmJbaV0pe3ZhciBvPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bz1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKXt2YXIgYz1vW3NdLnRyaW0oKTsnIic9PT1jLmNoYXJBdCgwKSYmJyInPT09Yy5jaGFyQXQoYy5sZW5ndGgtMSkmJihjPWMuc3Vic3RyKDEsYy5sZW5ndGgtMikpLG9bc109Y319MD09PW8ubGVuZ3RoJiZvLnB1c2goYSksYWIucHVzaCgoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KGEsJyJdJykpO251bGwhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXt2YXIgdDt6di5ydW5GdW5jLmFwcGx5KHp2LFtlXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdGIodCl9KHQ9byl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0Yih0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP3RiKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpKX0pLCExKX0pKX19LGZiPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxkYj1mdW5jdGlvbih0KXt2YXIgZT1hdSgiLm1lcm1haWRUb29sdGlwIik7bnVsbD09PShlLl9ncm91cHN8fGUpWzBdWzBdJiYoZT1hdSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksYXUodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PWF1KHRoaXMpO2lmKG51bGwhPT10LmF0dHIoInRpdGxlIikpe3ZhciBuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS5odG1sKHQuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK24ubGVmdCsobi5yaWdodC1uLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrbi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksdC5jbGFzc2VkKCJob3ZlciIsITApfX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLGF1KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O2FiLnB1c2goZGIpO3ZhciBwYj0iVEIiO2NvbnN0IHliPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLmNsYXNzfSxhZGRDbGFzczpzYixiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe2FiLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGNsZWFyOmZ1bmN0aW9uKCl7bmI9W10scmI9e30sKGFiPVtdKS5wdXNoKGRiKX0sZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHJiW3RdfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHJifSxhZGRBbm5vdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49b2IodCkuY2xhc3NOYW1lO3JiW25dLmFubm90YXRpb25zLnB1c2goZSl9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiBuYn0sYWRkUmVsYXRpb246ZnVuY3Rpb24odCl7by5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxzYih0LmlkMSksc2IodC5pZDIpLHQuaWQxPW9iKHQuaWQxKS5jbGFzc05hbWUsdC5pZDI9b2IodC5pZDIpLmNsYXNzTmFtZSxuYi5wdXNoKHQpfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gcGJ9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXtwYj10fSxhZGRNZW1iZXI6dWIsYWRkTWVtYmVyczpmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB1Yih0LGUpfSkpKX0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/WW0uc2FuaXRpemVUZXh0KHQuc3Vic3RyKDEpLnRyaW0oKSxadigpKTp0LnRyaW0oKX0sbGluZVR5cGU6e0xJTkU6MCxET1RURURfTElORToxfSxyZWxhdGlvblR5cGU6ZmIsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2hiKHQsZSxuKSxyYlt0XS5oYXZlQ2FsbGJhY2s9ITB9KSksbGIodCwiY2xpY2thYmxlIil9LHNldENzc0NsYXNzOmxiLHNldExpbms6ZnVuY3Rpb24odCxlLG4pe3ZhciByPVp2KCk7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQ7dFswXS5tYXRjaCgvXGQvKSYmKGk9ZWIraSksdm9pZCAwIT09cmJbaV0mJihyYltpXS5saW5rPXp2LmZvcm1hdFVybChlLHIpLHJiW2ldLmxpbmtUYXJnZXQ9InN0cmluZyI9PXR5cGVvZiBuP246Il9ibGFuayIpfSkpLGxiKHQsImNsaWNrYWJsZSIpfSxzZXRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7dmFyIG49WnYoKTt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKHJiW3RdLnRvb2x0aXA9WW0uc2FuaXRpemVUZXh0KGUsbikpfSkpfSxsb29rVXBEb21JZDpjYn07dmFyIGdiPW4oNjgxKSxtYj1uLm4oZ2IpLHZiPW4oODI4MiksYmI9bi5uKHZiKSxfYj1uKDUwNTEpLHhiPW4ubihfYiksd2I9MCxrYj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9eKFwrfC18fnwjKT8oXHcrKSh+XHcrfnxcW1xdKT9ccysoXHcrKSAqKFwqfFwkKT8kLyksbj10Lm1hdGNoKC9eKFsrfFwtfH58I10pPyhcdyspICpcKCAqKC4qKVwpICooXCp8XCQpPyAqKFx3Klt+fFtcXV0qXHMqXHcqfj8pJC8pO3JldHVybiBlJiYhbj9UYihlKTpuP0ViKG4pOkNiKHQpfSxUYj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/QWIodFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIixzPXRbNV0/dFs1XS50cmltKCk6IiI7bj1yK2krYSsiICIrbyxlPU1iKHMpfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0sRWI9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIjt0cnl7dmFyIHI9dFsxXT90WzFdLnRyaW0oKToiIixpPXRbMl0/dFsyXS50cmltKCk6IiIsYT10WzNdP0FiKHRbM10udHJpbSgpKToiIixvPXRbNF0/dFs0XS50cmltKCk6IiI7bj1yK2krIigiK2ErIikiKyh0WzVdPyIgOiAiK0FiKHRbNV0pLnRyaW0oKToiIiksZT1NYihvKX1jYXRjaChlKXtuPXR9cmV0dXJue2Rpc3BsYXlUZXh0Om4sY3NzU3R5bGU6ZX19LENiPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiIscj0iIixpPXQuaW5kZXhPZigiKCIpLGE9dC5pbmRleE9mKCIpIik7aWYoaT4xJiZhPmkmJmE8PXQubGVuZ3RoKXt2YXIgbz0iIixzPSIiLGM9dC5zdWJzdHJpbmcoMCwxKTtjLm1hdGNoKC9cdy8pP3M9dC5zdWJzdHJpbmcoMCxpKS50cmltKCk6KGMubWF0Y2goL1wrfC18fnwjLykmJihvPWMpLHM9dC5zdWJzdHJpbmcoMSxpKS50cmltKCkpO3ZhciB1PXQuc3Vic3RyaW5nKGkrMSxhKSxsPXQuc3Vic3RyaW5nKGErMSwxKTtuPU1iKGwpLGU9bytzKyIoIitBYih1LnRyaW0oKSkrIikiLGE8IiIubGVuZ3RoJiYiIiE9PShyPXQuc3Vic3RyaW5nKGErMikudHJpbSgpKSYmKHI9IiA6ICIrQWIocikpfWVsc2UgZT1BYih0KTtyZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZTpufX0sU2I9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9a2IoZSksYT10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixyLnBhZGRpbmcpLnRleHQoaS5kaXNwbGF5VGV4dCk7IiIhPT1pLmNzc1N0eWxlJiZhLmF0dHIoInN0eWxlIixpLmNzc1N0eWxlKSxufHxhLmF0dHIoImR5IixyLnRleHRIZWlnaHQpfSxBYj1mdW5jdGlvbiB0KGUpe3ZhciBuPWU7cmV0dXJuLTEhPWUuaW5kZXhPZigifiIpP3Qobj0obj1uLnJlcGxhY2UoIn4iLCI8IikpLnJlcGxhY2UoIn4iLCI+IikpOm59LE1iPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX07Y29uc3QgTmI9ZnVuY3Rpb24odCxlLG4pe28uaW5mbygiUmVuZGVyaW5nIGNsYXNzICIrZSk7dmFyIHIsaT1lLmlkLGE9e2lkOmksbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxzPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGNiKGkpKS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtyPWUubGluaz9zLmFwcGVuZCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTpzLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLG4udGV4dEhlaWdodCtuLnBhZGRpbmcpLmF0dHIoIngiLDApO3ZhciBjPSEwO2UuYW5ub3RhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3QrIsK7Iik7Y3x8ZS5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KSxjPSExfSkpO3ZhciB1PWUuaWQ7dm9pZCAwIT09ZS50eXBlJiYiIiE9PWUudHlwZSYmKHUrPSI8IitlLnR5cGUrIj4iKTt2YXIgbD1yLmFwcGVuZCgidHNwYW4iKS50ZXh0KHUpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtjfHxsLmF0dHIoImR5IixuLnRleHRIZWlnaHQpO3ZhciBoPXIubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZj1zLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4vMiksZD1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsaCtuLmRpdmlkZXJNYXJnaW4rbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO2M9ITAsZS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe1NiKGQsdCxjLG4pLGM9ITF9KSk7dmFyIHA9ZC5ub2RlKCkuZ2V0QkJveCgpLHk9cy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCkuYXR0cigieTIiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCksZz1zLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsaCsyKm4uZGl2aWRlck1hcmdpbitwLmhlaWdodCtuLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Yz0hMCxlLm1ldGhvZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7U2IoZyx0LGMsbiksYz0hMX0pKTt2YXIgbT1zLm5vZGUoKS5nZXRCQm94KCksdj0iICI7ZS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYodis9ZS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7dmFyIGI9cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsyKm4ucGFkZGluZykuYXR0cigiaGVpZ2h0IixtLmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsdikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gci5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgieCIsKGItdC5nZXRCQm94KCkud2lkdGgpLzIpfSkpLGUudG9vbHRpcCYmci5pbnNlcnQoInRpdGxlIikudGV4dChlLnRvb2x0aXApLGYuYXR0cigieDIiLGIpLHkuYXR0cigieDIiLGIpLGEud2lkdGg9YixhLmhlaWdodD1tLmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luLGF9O19iLnBhcnNlci55eT15Yjt2YXIgRGI9e30sT2I9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LEJiPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5lbnRyaWVzKERiKS5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS5sYWJlbD09PXR9KSk7aWYoZSlyZXR1cm4gZVswXX07Y29uc3QgTGI9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JbZV09dFtlXX0pKX0sSWI9ZnVuY3Rpb24odCxlKXtEYj17fSxfYi5wYXJzZXIueXkuY2xlYXIoKSxfYi5wYXJzZXIucGFyc2UodCksby5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuLHI9YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSwobj1yKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpO3ZhciBpPW5ldyhiYigpLkdyYXBoKSh7bXVsdGlncmFwaDohMH0pO2kuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLGkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtmb3IodmFyIGE9eWIuZ2V0Q2xhc3NlcygpLHM9T2JqZWN0LmtleXMoYSksYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgdT1hW3NbY11dLGw9TmIocix1LE9iKTtEYltsLmlkXT1sLGkuc2V0Tm9kZShsLmlkLGwpLG8uaW5mbygiT3JnIGhlaWdodDogIitsLmhlaWdodCl9eWIuZ2V0UmVsYXRpb25zKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJ0am9obyIrQmIodC5pZDEpK0JiKHQuaWQyKStKU09OLnN0cmluZ2lmeSh0KSksaS5zZXRFZGdlKEJiKHQuaWQxKSxCYih0LmlkMikse3JlbGF0aW9uOnR9LHQudGl0bGV8fCJERUZBVUxUIil9KSksbWIoKS5sYXlvdXQoaSksaS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkubm9kZSh0KSYmKG8uZGVidWcoIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5ub2RlKHQpKSksYXUoIiMiK2NiKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKG8uZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIGZiLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBmYi5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBmYi5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgZmIuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTt2YXIgYSxzLGM9ZS5wb2ludHMsdT16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShWdSksbD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHUoYykpLmF0dHIoImlkIiwiZWRnZSIrd2IpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKSxoPSIiO3IuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKGg9KGg9KGg9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksMT09bi5yZWxhdGlvbi5saW5lVHlwZSYmbC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMSYmbC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitoKyIjIitpKG4ucmVsYXRpb24udHlwZTEpKyJTdGFydCkiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyJiZsLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitoKyIjIitpKG4ucmVsYXRpb24udHlwZTIpKyJFbmQpIik7dmFyIGYsZCxwLHksZz1lLnBvaW50cy5sZW5ndGgsbT16di5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyk7aWYoYT1tLngscz1tLnksZyUyIT0wJiZnPjEpe3ZhciB2PXp2LmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLGI9enYuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMixlLnBvaW50cyxlLnBvaW50c1tnLTFdKTtvLmRlYnVnKCJjYXJkaW5hbGl0eV8xX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkodikpLG8uZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShiKSksZj12LngsZD12LnkscD1iLngseT1iLnl9aWYodm9pZCAwIT09bi50aXRsZSl7dmFyIF89dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsYXNzTGFiZWwiKSx4PV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLGEpLmF0dHIoInkiLHMpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQobi50aXRsZSk7d2luZG93LmxhYmVsPXg7dmFyIHc9eC5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4Iix3Lngtci5wYWRkaW5nLzIpLmF0dHIoInkiLHcueS1yLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLHcud2lkdGgrci5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcuaGVpZ2h0K3IucGFkZGluZyl9by5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShuKSksdm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMSYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMSYmdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLGYpLmF0dHIoInkiLGQpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KG4ucmVsYXRpb25UaXRsZTEpLHZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTImJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTImJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUyKSx3YisrfShyLGkuZWRnZSh0KSxpLmVkZ2UodCkucmVsYXRpb24sT2IpKX0pKTt2YXIgaD1yLm5vZGUoKS5nZXRCQm94KCksZj1oLndpZHRoKzQwLGQ9aC5oZWlnaHQrNDA7anYocixkLGYsT2IudXNlTWF4V2lkdGgpO3ZhciBwPSIiLmNvbmNhdChoLngtMjAsIiAiKS5jb25jYXQoaC55LTIwLCIgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoZCk7by5kZWJ1Zygidmlld0JveCAiLmNvbmNhdChwKSksci5hdHRyKCJ2aWV3Qm94IixwKX07dmFyIFJiPXtleHRlbnNpb246ZnVuY3Rpb24odCxlLG4pe28udHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLG4pLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sYWdncmVnYXRpb246ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1hZ2dyZWdhdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNyb3NzOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fTtjb25zdCBGYj1mdW5jdGlvbih0LGUsbixyKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe1JiW2VdKHQsbixyKX0pKX07ZnVuY3Rpb24gUGIodCl7cmV0dXJuIFBiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxQYih0KX1jb25zdCBqYj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLHMsYyx1LGwsaD10fHwiIjtpZigib2JqZWN0Ij09PVBiKGgpJiYoaD1oWzBdKSxqbShadigpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaD1oLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxvLmluZm8oInZlcnRleFRleHQiK2gpLGk9e2lzTm9kZTpyLGxhYmVsOmgucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksbGFiZWxTdHlsZTplLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9LHM9YXUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksYz1zLmFwcGVuZCgieGh0bWw6ZGl2IiksdT1pLmxhYmVsLGw9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsYy5odG1sKCc8c3BhbiBjbGFzcz0iJytsKyciICcrKGkubGFiZWxTdHlsZT8nc3R5bGU9IicraS5sYWJlbFN0eWxlKyciJzoiIikrIj4iK3UrIjwvc3Bhbj4iKSwoYT1pLmxhYmVsU3R5bGUpJiZjLmF0dHIoInN0eWxlIixhKSxjLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksYy5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxjLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHMubm9kZSgpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7Zi5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBkPVtdO2Q9InN0cmluZyI9PXR5cGVvZiBoP2guc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGgpP2g6W107Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikseS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikseS5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj95LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp5LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx5LnRleHRDb250ZW50PWRbcF0udHJpbSgpLGYuYXBwZW5kQ2hpbGQoeSl9cmV0dXJuIGZ9O3ZhciBZYj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaTtpPW58fCJub2RlIGRlZmF1bHQiO3ZhciBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxvPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLHM9InN0cmluZyI9PXR5cGVvZiBlLmxhYmVsVGV4dD9lLmxhYmVsVGV4dDplLmxhYmVsVGV4dFswXSxjPW8ubm9kZSgpLmFwcGVuZENoaWxkKGpiKEltKGVDKHMpLFp2KCkpLGUubGFiZWxTdHlsZSwhMSxyKSksdT1jLmdldEJCb3goKTtpZihqbShadigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9Yy5jaGlsZHJlblswXSxoPWF1KGMpO3U9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIix1LndpZHRoKSxoLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfXZhciBmPWUucGFkZGluZy8yO3JldHVybiBvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwgIistdS5oZWlnaHQvMisiKSIpLHtzaGFwZVN2ZzphLGJib3g6dSxoYWxmUGFkZGluZzpmLGxhYmVsOm99fSx6Yj1mdW5jdGlvbih0LGUpe3ZhciBuPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHR9O2Z1bmN0aW9uIFViKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIHFiPXt9LCRiPXt9LEhiPXt9LFdiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8udHJhY2UoIkluIGlzRGVjZW5kYW50IixlLCIgIix0LCIgPSAiLCRiW2VdLmluZGV4T2YodCk+PTApLCRiW2VdLmluZGV4T2YodCk+PTB9LFZiPWZ1bmN0aW9uIHQoZSxuLHIsaSl7by53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpO3ZhciBhPW4uY2hpbGRyZW4oZSl8fFtdO2UhPT1pJiZhLnB1c2goZSksby53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIixlLCJub2RlcyIsYSksYS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihuLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXQoYSxuLHIsaSk7ZWxzZXt2YXIgcz1uLm5vZGUoYSk7by5pbmZvKCJjcCAiLGEsIiB0byAiLGksIiB3aXRoIHBhcmVudCAiLGUpLHIuc2V0Tm9kZShhLHMpLGkhPT1uLnBhcmVudChhKSYmKG8ud2FybigiU2V0dGluZyBwYXJlbnQiLGEsbi5wYXJlbnQoYSkpLHIuc2V0UGFyZW50KGEsbi5wYXJlbnQoYSkpKSxlIT09aSYmYSE9PWU/KG8uZGVidWcoIlNldHRpbmcgcGFyZW50IixhLGUpLHIuc2V0UGFyZW50KGEsZSkpOihvLmluZm8oIkluIGNvcHkgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSksby5kZWJ1ZygiTm90IFNldHRpbmcgcGFyZW50IGZvciBub2RlPSIsYSwiY2x1c3RlciE9PXJvb3RJZCIsZSE9PWksIm5vZGUhPT1jbHVzdGVySWQiLGEhPT1lKSk7dmFyIGM9bi5lZGdlcyhhKTtvLmRlYnVnKCJDb3B5aW5nIEVkZ2VzIixjKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygiRWRnZSIsdCk7dmFyIGE9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgZGF0YSIsYSxpKTt0cnl7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uaW5mbygiRGVjZW5kYW50cyBvZiAiLGUsIiBpcyAiLCRiW2VdKSxvLmluZm8oIkVkZ2UgaXMgIix0KSx0LnYhPT1lJiZ0LnchPT1lJiYoJGJbZV0/KG8uaW5mbygiSGVyZSAiKSwkYltlXS5pbmRleE9mKHQudik+PTB8fCEhV2IodC52LGUpfHwhIVdiKHQudyxlKXx8JGJbZV0uaW5kZXhPZih0LncpPj0wKTooby5kZWJ1ZygiVGlsdCwgIixlLCIsbm90IGluIGRlY2VuZGFudHMiKSwhMSkpfSh0LGkpP28uaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdC52LCItLVx4M2UiLHQudywiIHJvb3RJZDogIixpLCIgY2x1c3RlcklkOiIsZSk6KG8uaW5mbygiQ29weWluZyBhcyAiLHQudix0LncsYSx0Lm5hbWUpLHIuc2V0RWRnZSh0LnYsdC53LGEsdC5uYW1lKSxvLmluZm8oIm5ld0dyYXBoIGVkZ2VzICIsci5lZGdlcygpLHIuZWRnZShyLmVkZ2VzKClbMF0pKSl9Y2F0Y2godCl7by5lcnJvcih0KX19KSl9by5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksbi5yZW1vdmVOb2RlKGEpfSkpfSxHYj1mdW5jdGlvbiB0KGUsbil7Zm9yKHZhciByPW4uY2hpbGRyZW4oZSksaT1bXS5jb25jYXQociksYT0wO2E8ci5sZW5ndGg7YSsrKUhiW3JbYV1dPWUsaT1pLmNvbmNhdCh0KHJbYV0sbikpO3JldHVybiBpfSxYYj1mdW5jdGlvbiB0KGUsbil7by50cmFjZSgiU2VhcmNoaW5nIixlKTt2YXIgcj1uLmNoaWxkcmVuKGUpO2lmKG8udHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGUsciksci5sZW5ndGg8MSlyZXR1cm4gby50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGUpLGU7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXQocltpXSxuKTtpZihhKXJldHVybiBvLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGUsIiA9PiAiLGEpLGF9fSxaYj1mdW5jdGlvbih0KXtyZXR1cm4gcWJbdF0mJnFiW3RdLmV4dGVybmFsQ29ubmVjdGlvbnMmJnFiW3RdP3FiW3RdLmlkOnR9LFFiPWZ1bmN0aW9uKHQsZSl7IXR8fGU+MTA/by5kZWJ1ZygiT3B0aW5nIG91dCwgbm8gZ3JhcGggIik6KG8uZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIiksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuY2hpbGRyZW4oZSkubGVuZ3RoPjAmJihvLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLFhiKGUsdCkpLCRiW2VdPUdiKGUsdCkscWJbZV09e2lkOlhiKGUsdCksY2x1c3RlckRhdGE6dC5ub2RlKGUpfSl9KSksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW4oZSkscj10LmVkZ2VzKCk7bi5sZW5ndGg+MD8oby5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixlLCRiKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudiE9PWUmJnQudyE9PWUmJldiKHQudixlKV5XYih0LncsZSkmJihvLndhcm4oIkVkZ2U6ICIsdCwiIGxlYXZlcyBjbHVzdGVyICIsZSksby53YXJuKCJEZWNlbmRhbnRzIG9mIFhYWCAiLGUsIjogIiwkYltlXSkscWJbZV0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCl9KSkpOm8uZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixlLCRiKX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO28ud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSkpLG8ud2FybigiRWRnZSAiK2UudisiIC0+ICIrZS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKGUpKSk7dmFyIHI9ZS52LGk9ZS53O28ud2FybigiRml4IFhYWCIscWIsImlkczoiLGUudixlLncsIlRyYW5zbGF0ZWluZzogIixxYltlLnZdLCIgLS0tICIscWJbZS53XSksKHFiW2Uudl18fHFiW2Uud10pJiYoby53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLGUudixlLncsZS5uYW1lKSxyPVpiKGUudiksaT1aYihlLncpLHQucmVtb3ZlRWRnZShlLnYsZS53LGUubmFtZSksciE9PWUudiYmKG4uZnJvbUNsdXN0ZXI9ZS52KSxpIT09ZS53JiYobi50b0NsdXN0ZXI9ZS53KSxvLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHIsaSxlLm5hbWUpLHQuc2V0RWRnZShyLGksbixlLm5hbWUpKX0pKSxvLndhcm4oIkFkanVzdGVkIEdyYXBoIixiYigpLmpzb24ud3JpdGUodCkpLEtiKHQsMCksby50cmFjZShxYikpfSxLYj1mdW5jdGlvbiB0KGUsbil7aWYoby53YXJuKCJleHRyYWN0b3IgLSAiLG4sYmIoKS5qc29uLndyaXRlKGUpLGUuY2hpbGRyZW4oIkQiKSksbj4xMClvLmVycm9yKCJCYWlsaW5nIG91dCIpO2Vsc2V7Zm9yKHZhciByPWUubm9kZXMoKSxpPSExLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPWUuY2hpbGRyZW4ocyk7aT1pfHxjLmxlbmd0aD4wfWlmKGkpe28uZGVidWcoIk5vZGVzID0gIixyLG4pO2Zvcih2YXIgdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgbD1yW3VdO2lmKG8uZGVidWcoIkV4dHJhY3Rpbmcgbm9kZSIsbCxxYixxYltsXSYmIXFiW2xdLmV4dGVybmFsQ29ubmVjdGlvbnMsIWUucGFyZW50KGwpLGUubm9kZShsKSxlLmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLG4pLHFiW2xdKWlmKCFxYltsXS5leHRlcm5hbENvbm5lY3Rpb25zJiZlLmNoaWxkcmVuKGwpJiZlLmNoaWxkcmVuKGwpLmxlbmd0aD4wKXtvLndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsbCxuKTt2YXIgaD0iVEIiPT09ZS5ncmFwaCgpLnJhbmtkaXI/IkxSIjoiVEIiO3FiW2xdJiZxYltsXS5jbHVzdGVyRGF0YSYmcWJbbF0uY2x1c3RlckRhdGEuZGlyJiYoaD1xYltsXS5jbHVzdGVyRGF0YS5kaXIsby53YXJuKCJGaXhpbmcgZGlyIixxYltsXS5jbHVzdGVyRGF0YS5kaXIsaCkpO3ZhciBmPW5ldyhiYigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmgsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO28ud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5IixiYigpLmpzb24ud3JpdGUoZSkpLFZiKGwsZSxmLGwpLGUuc2V0Tm9kZShsLHtjbHVzdGVyTm9kZTohMCxpZDpsLGNsdXN0ZXJEYXRhOnFiW2xdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpxYltsXS5sYWJlbFRleHQsZ3JhcGg6Zn0pLG8ud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsbCwiKSIsYmIoKS5qc29uLndyaXRlKGYpKSxvLmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsYmIoKS5qc29uLndyaXRlKGUpKX1lbHNlIG8ud2FybigiQ2x1c3RlciAqKiAiLGwsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFxYltsXS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudChsKSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksby5kZWJ1ZyhxYik7ZWxzZSBvLmRlYnVnKCJOb3QgYSBjbHVzdGVyIixsLG4pfXI9ZS5ub2RlcygpLG8ud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLHk9ZS5ub2RlKHApO28ud2FybigiIE5vdyBuZXh0IGxldmVsIixwLHkpLHkuY2x1c3Rlck5vZGUmJnQoeS5ncmFwaCxuKzEpfX1lbHNlIG8uZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0sSmI9ZnVuY3Rpb24gdChlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm5bXTt2YXIgcj1PYmplY3QuYXNzaWduKG4pO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPWUuY2hpbGRyZW4obiksYT10KGUsaSk7cj1yLmNvbmNhdChhKX0pKSxyfSx0Xz1mdW5jdGlvbih0KXtyZXR1cm4gSmIodCx0LmNoaWxkcmVuKCkpfSxlXz1uKDM4NDEpO2NvbnN0IG5fPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX07ZnVuY3Rpb24gcl8odCxlKXtyZXR1cm4gdCplPjB9Y29uc3QgaV89ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZyXyhmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCx1PXIueCpuLnktbi54KnIueSxsPWEqdC54K3MqdC55K3UsaD1hKmUueCtzKmUueSt1LDAhPT1sJiYwIT09aCYmcl8obCxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4geT1NYXRoLmFicyhwLzIpLHt4OihnPW8qdS1zKmMpPDA/KGcteSkvcDooZyt5KS9wLHk6KGc9YSpjLWkqdSk8MD8oZy15KS9wOihnK3kpL3B9fSxhXz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sb189KG4ubihlXykoKSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIG5fKHQsZSxlLG4pfSksc189ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQueCxpPXQueSxhPVtdLG89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyJmdW5jdGlvbiI9PXR5cGVvZiBlLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtvPU1hdGgubWluKG8sdC54KSxzPU1hdGgubWluKHMsdC55KX0pKToobz1NYXRoLm1pbihvLGUueCkscz1NYXRoLm1pbihzLGUueSkpO2Zvcih2YXIgYz1yLXQud2lkdGgvMi1vLHU9aS10LmhlaWdodC8yLXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgaD1lW2xdLGY9ZVtsPGUubGVuZ3RoLTE/bCsxOjBdLGQ9aV8odCxuLHt4OmMraC54LHk6dStoLnl9LHt4OmMrZi54LHk6dStmLnl9KTtkJiZhLnB1c2goZCl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxhWzBdKTp0fSxjXz1hXztmdW5jdGlvbiB1Xyh0KXtyZXR1cm4gdV89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHVfKHQpfXZhciBsXz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7IkxSIj09PW4mJihpPTEwLGE9NzApO3ZhciBvPXIuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqaS8yKS5hdHRyKCJ5IiwtMSphLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIHpiKGUsbyksZS5oZWlnaHQ9ZS5oZWlnaHQrZS5wYWRkaW5nLzIsZS53aWR0aD1lLndpZHRoK2UucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjXyhlLHQpfSxyfSxoXz17cXVlc3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1ZYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZysoaS5oZWlnaHQrZS5wYWRkaW5nKSxzPVt7eDphLzIseTowfSx7eDphLHk6LWEvMn0se3g6YS8yLHk6LWF9LHt4OjAseTotYS8yfV07by5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7dmFyIGM9VWIocixhLGEscyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLHpiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLHNfKGUscyx0KX0scn0scmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuPVliKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztvLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYz1pLndpZHRoK2UucGFkZGluZyx1PWkuaGVpZ2h0K2UucGFkZGluZztpZihzLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsLWkud2lkdGgvMi1hKS5hdHRyKCJ5IiwtaS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsYykuYXR0cigiaGVpZ2h0Iix1KSxlLnByb3BzKXt2YXIgbD1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1bXSxhPWZ1bmN0aW9uKHQpe2kucHVzaCh0KSxpLnB1c2goMCl9LHM9ZnVuY3Rpb24odCl7aS5wdXNoKDApLGkucHVzaCh0KX07ZS5pbmNsdWRlcygidCIpPyhvLmRlYnVnKCJhZGQgdG9wIGJvcmRlciIpLGEobikpOnMobiksZS5pbmNsdWRlcygiciIpPyhvLmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJiIik/KG8uZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJsIik/KG8uZGVidWcoImFkZCBsZWZ0IGJvcmRlciIpLGEocikpOnMociksdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixpLmpvaW4oIiAiKSl9KHMsZS5wcm9wcy5ib3JkZXJzLGMsdSksbC5kZWxldGUoImJvcmRlcnMiKSksbC5mb3JFYWNoKChmdW5jdGlvbih0KXtvLndhcm4oIlVua25vd24gbm9kZSBwcm9wZXJ0eSAiLmNvbmNhdCh0KSl9KSl9cmV0dXJuIHpiKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGNfKGUsdCl9LHJ9LHJlY3RXaXRoVGl0bGU6ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWUuY2xhc3Nlcz8ibm9kZSAiK2UuY2xhc3Nlczoibm9kZSBkZWZhdWx0Ijt2YXIgcixpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxhPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscz1pLmluc2VydCgibGluZSIpLGM9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksdT1lLmxhYmVsVGV4dC5mbGF0P2UubGFiZWxUZXh0LmZsYXQoKTplLmxhYmVsVGV4dDtyPSJvYmplY3QiPT09dV8odSk/dVswXTp1LG8uaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIscix1LCJvYmplY3QiPT09dV8odSkpO3ZhciBsPWMubm9kZSgpLmFwcGVuZENoaWxkKGpiKHIsZS5sYWJlbFN0eWxlLCEwLCEwKSksaD17d2lkdGg6MCxoZWlnaHQ6MH07aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBmPWwuY2hpbGRyZW5bMF0sZD1hdShsKTtoPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZC5hdHRyKCJ3aWR0aCIsaC53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1vLmluZm8oIlRleHQgMiIsdSk7dmFyIHA9dS5zbGljZSgxLHUubGVuZ3RoKSx5PWwuZ2V0QkJveCgpLGc9Yy5ub2RlKCkuYXBwZW5kQ2hpbGQoamIocC5qb2luP3Auam9pbigiPGJyLz4iKTpwLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGptKFp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbT1nLmNoaWxkcmVuWzBdLHY9YXUoZyk7aD1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGgud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9dmFyIGI9ZS5wYWRkaW5nLzI7cmV0dXJuIGF1KGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aD55LndpZHRoPzA6KHkud2lkdGgtaC53aWR0aCkvMikrIiwgIisoeS5oZWlnaHQrYis1KSsiKSIpLGF1KGwpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aDx5LndpZHRoPzA6LSh5LndpZHRoLWgud2lkdGgpLzIpKyIsIDApIiksaD1jLm5vZGUoKS5nZXRCQm94KCksYy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrKC1oLmhlaWdodC8yLWIrMykrIikiKSxhLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtaC53aWR0aC8yLWIpLmF0dHIoInkiLC1oLmhlaWdodC8yLWIpLmF0dHIoIndpZHRoIixoLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixoLmhlaWdodCtlLnBhZGRpbmcpLHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1oLndpZHRoLzItYikuYXR0cigieDIiLGgud2lkdGgvMitiKS5hdHRyKCJ5MSIsLWguaGVpZ2h0LzItYit5LmhlaWdodCtiKS5hdHRyKCJ5MiIsLWguaGVpZ2h0LzItYit5LmhlaWdodCtiKSx6YihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjXyhlLHQpfSxpfSxjaG9pY2U6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpO3JldHVybiBuLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsW3t4OjAseToxNH0se3g6MTQseTowfSx7eDowLHk6LTE0fSx7eDotMTQseTowfV0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54KyIsIit0Lnl9KSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDI4KS5hdHRyKCJoZWlnaHQiLDI4KSxlLndpZHRoPTI4LGUuaGVpZ2h0PTI4LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvXyhlLDE0LHQpfSxufSxjaXJjbGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1ZYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nLHM9ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBzLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLGkud2lkdGgvMithKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSxvLmluZm8oIkNpcmNsZSBtYWluIiksemIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gby5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLGkud2lkdGgvMithLHQpLG9fKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1ZYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gemIoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gY18oZSx0KX0scn0saGV4YWdvbjpmdW5jdGlvbih0LGUpe3ZhciBuPVliKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkuaGVpZ2h0K2UucGFkZGluZyxvPWEvNCxzPWkud2lkdGgrMipvK2UucGFkZGluZyxjPVt7eDpvLHk6MH0se3g6cy1vLHk6MH0se3g6cyx5Oi1hLzJ9LHt4OnMtbyx5Oi1hfSx7eDpvLHk6LWF9LHt4OjAseTotYS8yfV0sdT1VYihyLHMsYSxjKTtyZXR1cm4gdS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksemIoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gc18oZSxjLHQpfSxyfSxyZWN0X2xlZnRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49WWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LW8vMix5OjB9LHt4OmEseTowfSx7eDphLHk6LW99LHt4Oi1vLzIseTotb30se3g6MCx5Oi1vLzJ9XTtyZXR1cm4gVWIocixhLG8scykuYXR0cigic3R5bGUiLGUuc3R5bGUpLGUud2lkdGg9YStvLGUuaGVpZ2h0PW8sZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHNfKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPVliKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9VWIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLHpiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHNfKGUscyx0KX0scn0sbGVhbl9sZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49WWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MipvLzYseTowfSx7eDphK28vNix5OjB9LHt4OmEtMipvLzYseTotb30se3g6LW8vNix5Oi1vfV0sYz1VYihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksemIoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gc18oZSxzLHQpfSxyfSx0cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1ZYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotMipvLzYseTowfSx7eDphKzIqby82LHk6MH0se3g6YS1vLzYseTotb30se3g6by82LHk6LW99XSxjPVViKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSx6YihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBzXyhlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1ZYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPVViKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSx6YihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBzXyhlLHMsdCl9LHJ9LHJlY3RfcmlnaHRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49WWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmErby8yLHk6MH0se3g6YSx5Oi1vLzJ9LHt4OmErby8yLHk6LW99LHt4OjAseTotb31dLGM9VWIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLHpiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHNfKGUscyx0KX0scn0sY3lsaW5kZXI6ZnVuY3Rpb24odCxlKXt2YXIgbj1ZYih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWEvMixzPW8vKDIuNSthLzUwKSxjPWkuaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrbysiLCIrcysiIDAsMCwwICIrYSsiIDAgYSAiK28rIiwiK3MrIiAwLDAsMCAiKy1hKyIgMCBsIDAsIitjKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGwgMCwiKy1jLGw9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImQiLHUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiKy0oYy8yK3MpKyIpIik7cmV0dXJuIHpiKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7dmFyIG49Y18oZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSx6YihlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvXyhlLDcsdCl9LG59LGVuZDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksci5hdHRyKCJjbGFzcyIsInN0YXRlLWVuZCIpLmF0dHIoInIiLDUpLmF0dHIoIndpZHRoIiwxMCkuYXR0cigiaGVpZ2h0IiwxMCksemIoZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gb18oZSw3LHQpfSxufSxub3RlOmZ1bmN0aW9uKHQsZSl7dmFyIG49WWIodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nO28uaW5mbygiQ2xhc3NlcyA9ICIsZS5jbGFzc2VzKTt2YXIgcz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBzLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsLWkud2lkdGgvMi1hKS5hdHRyKCJ5IiwtaS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSx6YihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjXyhlLHQpfSxyfSxzdWJyb3V0aW5lOmZ1bmN0aW9uKHQsZSl7dmFyIG49WWIodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmEseTowfSx7eDphLHk6LW99LHt4OjAseTotb30se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6YSs4LHk6MH0se3g6YSs4LHk6LW99LHt4Oi04LHk6LW99LHt4Oi04LHk6MH1dLGM9VWIocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLHpiKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHNfKGUscyx0KX0scn0sZm9yazpsXyxqb2luOmxfLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCx1PTQsbD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxoPTAsZj1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIscD1sLm5vZGUoKS5hcHBlbmRDaGlsZChqYihkLGUubGFiZWxTdHlsZSwhMCwhMCkpLHk9cC5nZXRCQm94KCk7aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBnPXAuY2hpbGRyZW5bMF0sbT1hdShwKTt5PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbS5hdHRyKCJ3aWR0aCIseS53aWR0aCksbS5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKHUrPXkuaGVpZ2h0KzQsYys9eS53aWR0aCk7dmFyIHY9ZS5jbGFzc0RhdGEuaWQ7dm9pZCAwIT09ZS5jbGFzc0RhdGEudHlwZSYmIiIhPT1lLmNsYXNzRGF0YS50eXBlJiYoWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscz92Kz0iJmx0OyIrZS5jbGFzc0RhdGEudHlwZSsiJmd0OyI6dis9IjwiK2UuY2xhc3NEYXRhLnR5cGUrIj4iKTt2YXIgYj1sLm5vZGUoKS5hcHBlbmRDaGlsZChqYih2LGUubGFiZWxTdHlsZSwhMCwhMCkpO2F1KGIpLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO3ZhciBfPWIuZ2V0QkJveCgpO2lmKGptKFp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgeD1iLmNoaWxkcmVuWzBdLHc9YXUoYik7Xz14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHcuYXR0cigid2lkdGgiLF8ud2lkdGgpLHcuYXR0cigiaGVpZ2h0IixfLmhlaWdodCl9dSs9Xy5oZWlnaHQrNCxfLndpZHRoPmMmJihjPV8ud2lkdGgpO3ZhciBrPVtdO2UuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49a2IodCkscj1uLmRpc3BsYXlUZXh0O1p2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJihyPXIucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO3ZhciBpPWwubm9kZSgpLmFwcGVuZENoaWxkKGpiKHIsbi5jc3NTdHlsZT9uLmNzc1N0eWxlOmUubGFiZWxTdHlsZSwhMCwhMCkpLGE9aS5nZXRCQm94KCk7aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBvPWkuY2hpbGRyZW5bMF0scz1hdShpKTthPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscy5hdHRyKCJ3aWR0aCIsYS53aWR0aCkscy5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KX1hLndpZHRoPmMmJihjPWEud2lkdGgpLHUrPWEuaGVpZ2h0KzQsay5wdXNoKGkpfSkpLHUrPTg7dmFyIFQ9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1rYih0KSxyPW4uZGlzcGxheVRleHQ7WnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoamIocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZihqbShadigpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPWF1KGkpO2E9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzLmF0dHIoIndpZHRoIixhLndpZHRoKSxzLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpfWEud2lkdGg+YyYmKGM9YS53aWR0aCksdSs9YS5oZWlnaHQrNCxULnB1c2goaSl9KSksdSs9OCxmKXt2YXIgRT0oYy15LndpZHRoKS8yO2F1KHApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0UpKyIsICIrLTEqdS8yKyIpIiksaD15LmhlaWdodCs0fXZhciBDPShjLV8ud2lkdGgpLzI7cmV0dXJuIGF1KGIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK0MpKyIsICIrKC0xKnUvMitoKSsiKSIpLGgrPV8uaGVpZ2h0KzQsby5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtdS8yLXIrOCtoKS5hdHRyKCJ5MiIsLXUvMi1yKzgraCksaCs9OCxrLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F1KHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitoKzQpKyIpIiksaCs9Xy5oZWlnaHQrNH0pKSxoKz04LHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgraCkuYXR0cigieTIiLC11LzItcis4K2gpLGgrPTgsVC5mb3JFYWNoKChmdW5jdGlvbih0KXthdSh0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWMvMisiLCAiKygtMSp1LzIraCkrIikiKSxoKz1fLmhlaWdodCs0fSkpLGEuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1jLzItcikuYXR0cigieSIsLXUvMi1yKS5hdHRyKCJ3aWR0aCIsYytlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdStlLnBhZGRpbmcpLHpiKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGNfKGUsdCl9LGl9fSxmXz17fSxkXz1mdW5jdGlvbih0KXt2YXIgZT1mX1t0LmlkXTtvLnRyYWNlKCJUcmFuc2Zvcm1pbmcgbm9kZSIsdC5kaWZmLHQsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTUpKyIsICIrdC53aWR0aC8yKyIpIik7dmFyIG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItOCkrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LHBfPXtyZWN0OmZ1bmN0aW9uKHQsZSl7by50cmFjZSgiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIisoZS5jbGFzcz8iICIrZS5jbGFzczoiIikpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9aS5ub2RlKCkuYXBwZW5kQ2hpbGQoamIoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9YS5nZXRCQm94KCk7aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPWEuY2hpbGRyZW5bMF0sdT1hdShhKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX12YXIgbD0wKmUucGFkZGluZyxoPWwvMixmPWUud2lkdGg8PXMud2lkdGgrbD9zLndpZHRoK2w6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2w/ZS5kaWZmPShzLndpZHRoLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixvLnRyYWNlKCJEYXRhICIsZSxKU09OLnN0cmluZ2lmeShlKSksci5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixlLngtZi8yKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1oKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMitlLnBhZGRpbmcvMykrIikiKTt2YXIgZD1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9ZC53aWR0aCxlLmhlaWdodD1kLmhlaWdodCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYV8oZSx0KX0sbn0scm91bmRlZFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPW4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksYT1uLmFwcGVuZCgicmVjdCIpLG89aS5ub2RlKCkuYXBwZW5kQ2hpbGQoamIoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9by5nZXRCQm94KCk7aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPW8uY2hpbGRyZW5bMF0sdT1hdShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBsPTAqZS5wYWRkaW5nLGg9bC8yLGY9ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/cy53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHMud2lkdGgrMCplLnBhZGRpbmctZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLHIuYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLGUueC1mLzItaCkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItaCkuYXR0cigid2lkdGgiLGYrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsKSxhLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixlLngtZi8yLWgpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWgrcy5oZWlnaHQtMSkuYXR0cigid2lkdGgiLGYrbCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtsLXMuaGVpZ2h0LTMpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yLWUucGFkZGluZy8zKyhqbShadigpLmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpKSsiKSIpO3ZhciBkPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9ZC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFfKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhXyhlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuZGlmZj0tZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFfKGUsdCl9LG59fSx5Xz17fSxnXz17fSxtXz17fSx2Xz1mdW5jdGlvbih0LGUpe3ZhciBuPWpiKGUubGFiZWwsZS5sYWJlbFN0eWxlKSxyPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpPXIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2kubm9kZSgpLmFwcGVuZENoaWxkKG4pO3ZhciBhLG89bi5nZXRCQm94KCk7aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBzPW4uY2hpbGRyZW5bMF0sYz1hdShuKTtvPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYy5hdHRyKCJ3aWR0aCIsby53aWR0aCksYy5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KX1pZihpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1vLndpZHRoLzIrIiwgIistby5oZWlnaHQvMisiKSIpLGdfW2UuaWRdPXIsZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuc3RhcnRMYWJlbExlZnQpe3ZhciB1PWpiKGUuc3RhcnRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksaD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPWgubm9kZSgpLmFwcGVuZENoaWxkKHUpO3ZhciBmPXUuZ2V0QkJveCgpO2guYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWYud2lkdGgvMisiLCAiKy1mLmhlaWdodC8yKyIpIiksbV9bZS5pZF18fChtX1tlLmlkXT17fSksbV9bZS5pZF0uc3RhcnRMZWZ0PWwsYl8oYSxlLnN0YXJ0TGFiZWxMZWZ0KX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7dmFyIGQ9amIoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxwPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseT1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPXAubm9kZSgpLmFwcGVuZENoaWxkKGQpLHkubm9kZSgpLmFwcGVuZENoaWxkKGQpO3ZhciBnPWQuZ2V0QkJveCgpO3kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWcud2lkdGgvMisiLCAiKy1nLmhlaWdodC8yKyIpIiksbV9bZS5pZF18fChtX1tlLmlkXT17fSksbV9bZS5pZF0uc3RhcnRSaWdodD1wLGJfKGEsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXt2YXIgbT1qYihlLmVuZExhYmVsTGVmdCxlLmxhYmVsU3R5bGUpLHY9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxiPXYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2E9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQobSk7dmFyIF89bS5nZXRCQm94KCk7Yi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistXy53aWR0aC8yKyIsICIrLV8uaGVpZ2h0LzIrIikiKSx2Lm5vZGUoKS5hcHBlbmRDaGlsZChtKSxtX1tlLmlkXXx8KG1fW2UuaWRdPXt9KSxtX1tlLmlkXS5lbmRMZWZ0PXYsYl8oYSxlLmVuZExhYmVsTGVmdCl9aWYoZS5lbmRMYWJlbFJpZ2h0KXt2YXIgeD1qYihlLmVuZExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSx3PXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksaz13Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPWsubm9kZSgpLmFwcGVuZENoaWxkKHgpO3ZhciBUPXguZ2V0QkJveCgpO2suYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVQud2lkdGgvMisiLCAiKy1ULmhlaWdodC8yKyIpIiksdy5ub2RlKCkuYXBwZW5kQ2hpbGQoeCksbV9bZS5pZF18fChtX1tlLmlkXT17fSksbV9bZS5pZF0uZW5kUmlnaHQ9dyxiXyhhLGUuZW5kTGFiZWxSaWdodCl9fTtmdW5jdGlvbiBiXyh0LGUpe1p2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPTkqZS5sZW5ndGgrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfXZhciBfXz1mdW5jdGlvbih0LGUpe28uaW5mbygiTW92aW5nIGxhYmVsIGFiYzc4ICIsdC5pZCx0LmxhYmVsLGdfW3QuaWRdKTt2YXIgbj1lLnVwZGF0ZWRQYXRoP2UudXBkYXRlZFBhdGg6ZS5vcmlnaW5hbFBhdGg7aWYodC5sYWJlbCl7dmFyIHI9Z19bdC5pZF0saT10LngsYT10Lnk7aWYobil7dmFyIHM9enYuY2FsY0xhYmVsUG9zaXRpb24obik7by5pbmZvKCJNb3ZpbmcgbGFiZWwgZnJvbSAoIixpLCIsIixhLCIpIHRvICgiLHMueCwiLCIscy55LCIpIGFiYzc4Iil9ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsICIrYSsiKSIpfWlmKHQuc3RhcnRMYWJlbExlZnQpe3ZhciBjPW1fW3QuaWRdLnN0YXJ0TGVmdCx1PXQueCxsPXQueTtpZihuKXt2YXIgaD16di5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIsbik7dT1oLngsbD1oLnl9Yy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsICIrbCsiKSIpfWlmKHQuc3RhcnRMYWJlbFJpZ2h0KXt2YXIgZj1tX1t0LmlkXS5zdGFydFJpZ2h0LGQ9dC54LHA9dC55O2lmKG4pe3ZhciB5PXp2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9yaWdodCIsbik7ZD15LngscD15Lnl9Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsICIrcCsiKSIpfWlmKHQuZW5kTGFiZWxMZWZ0KXt2YXIgZz1tX1t0LmlkXS5lbmRMZWZ0LG09dC54LHY9dC55O2lmKG4pe3ZhciBiPXp2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLG4pO209Yi54LHY9Yi55fWcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbSsiLCAiK3YrIikiKX1pZih0LmVuZExhYmVsUmlnaHQpe3ZhciBfPW1fW3QuaWRdLmVuZFJpZ2h0LHg9dC54LHc9dC55O2lmKG4pe3ZhciBrPXp2LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixuKTt4PWsueCx3PWsueX1fLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3grIiwgIit3KyIpIil9fSx4Xz1mdW5jdGlvbih0LGUpe28ud2FybigiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0Iix0LGUpO3ZhciBuPVtdLHI9dFswXSxpPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKG8uaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLHQsZSksZnVuY3Rpb24odCxlKXt2YXIgbj10Lngscj10LnksaT1NYXRoLmFicyhlLngtbiksYT1NYXRoLmFicyhlLnktciksbz10LndpZHRoLzIscz10LmhlaWdodC8yO3JldHVybiBpPj1vfHxhPj1zfShlLHQpfHxpKW8ud2FybigiYWJjODggb3V0c2lkZSIsdCxyKSxyPXQsaXx8bi5wdXNoKHQpO2Vsc2V7dmFyIGE9ZnVuY3Rpb24odCxlLG4pe28ud2FybigiaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6XG4gIG91dHNpZGVQb2ludDogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZSksIlxuICBpbnNpZGVQb2ludCA6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShuKSwiXG4gIG5vZGUgICAgICAgIDogeDoiKS5jb25jYXQodC54LCIgeToiKS5jb25jYXQodC55LCIgdzoiKS5jb25jYXQodC53aWR0aCwiIGg6IikuY29uY2F0KHQuaGVpZ2h0KSk7dmFyIHI9dC54LGk9dC55LGE9TWF0aC5hYnMoci1uLngpLHM9dC53aWR0aC8yLGM9bi54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixsPU1hdGguYWJzKGUueS1uLnkpLGg9TWF0aC5hYnMoZS54LW4ueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMoci1lLngpKnUpe3ZhciBmPW4ueTxlLnk/ZS55LXUtaTppLXUtZS55O2M9aCpmL2w7dmFyIGQ9e3g6bi54PGUueD9uLngrYzpuLngtaCtjLHk6bi55PGUueT9uLnkrbC1mOm4ueS1sK2Z9O3JldHVybiAwPT09YyYmKGQueD1lLngsZC55PWUueSksMD09PWgmJihkLng9ZS54KSwwPT09bCYmKGQueT1lLnkpLG8ud2FybigiYWJjODkgdG9wcC9ib3R0IGNhbGMsIFEgIi5jb25jYXQobCwiLCBxICIpLmNvbmNhdChmLCIsIFIgIikuY29uY2F0KGgsIiwgciAiKS5jb25jYXQoYyksZCksZH12YXIgcD1sKihjPW4ueDxlLng/ZS54LXMtcjpyLXMtZS54KS9oLHk9bi54PGUueD9uLngraC1jOm4ueC1oK2MsZz1uLnk8ZS55P24ueStwOm4ueS1wO3JldHVybiBvLndhcm4oInNpZGVzIGNhbGMgYWJjODksIFEgIi5jb25jYXQobCwiLCBxICIpLmNvbmNhdChwLCIsIFIgIikuY29uY2F0KGgsIiwgciAiKS5jb25jYXQoYykse194OnksX3k6Z30pLDA9PT1jJiYoeT1lLngsZz1lLnkpLDA9PT1oJiYoeT1lLngpLDA9PT1sJiYoZz1lLnkpLHt4OnkseTpnfX0oZSxyLHQpO28ud2FybigiYWJjODggaW5zaWRlIix0LHIsYSksby53YXJuKCJhYmM4OCBpbnRlcnNlY3Rpb24iLGEpO3ZhciBzPSExO24uZm9yRWFjaCgoZnVuY3Rpb24odCl7cz1zfHx0Lng9PT1hLngmJnQueT09PWEueX0pKSxuLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng9PT1hLngmJnQueT09PWEueX0pKT9vLndhcm4oImFiYzg4IG5vIGludGVyc2VjdCIsYSxuKTpuLnB1c2goYSksaT0hMH19KSksby53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixuKSxufSx3Xz1mdW5jdGlvbiB0KGUsbixyLGkpe28uaW5mbygiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYIixiYigpLmpzb24ud3JpdGUobiksaSk7dmFyIGE9bi5ncmFwaCgpLnJhbmtkaXI7by50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixhKTt2YXIgcz1lLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO24ubm9kZXMoKT9vLmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixuLm5vZGVzKCkpOm8uaW5mbygiTm8gbm9kZXMgZm91bmQgZm9yIixuKSxuLmVkZ2VzKCkubGVuZ3RoPjAmJm8udHJhY2UoIlJlY3Vyc2l2ZSBlZGdlcyIsbi5lZGdlKG4uZWRnZXMoKVswXSkpO3ZhciBjPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLHU9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLGw9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO24ubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcz1uLm5vZGUoZSk7aWYodm9pZCAwIT09aSl7dmFyIGM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpLmNsdXN0ZXJEYXRhKSk7by5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLGUsIikgIixjLGkpLG4uc2V0Tm9kZShpLmlkLGMpLG4ucGFyZW50KGUpfHwoby50cmFjZSgiU2V0dGluZyBwYXJlbnQiLGUsaS5pZCksbi5zZXRQYXJlbnQoZSxpLmlkLGMpKX1pZihvLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitlKyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKGUpKSkscyYmcy5jbHVzdGVyTm9kZSl7by5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUscy53aWR0aCxuLm5vZGUoZSkpO3ZhciB1PXQoaCxzLmdyYXBoLHIsbi5ub2RlKGUpKSxsPXUuZWxlbTt6YihzLGwpLHMuZGlmZj11LmRpZmZ8fDAsby5pbmZvKCJOb2RlIGJvdW5kcyAoYWJjMTIzKSIsZSxzLHMud2lkdGgscy54LHMueSksZnVuY3Rpb24odCxlKXtmX1tlLmlkXT10fShsLHMpLG8ud2FybigiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSAiLGwscyl9ZWxzZSBuLmNoaWxkcmVuKGUpLmxlbmd0aD4wPyhvLmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsZSxzLmlkLHMsbiksby5pbmZvKFhiKHMuaWQsbikpLHFiW3MuaWRdPXtpZDpYYihzLmlkLG4pLG5vZGU6c30pOihvLmluZm8oIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIixlLHMuaWQscyksZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7ZS5saW5rPyhyPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixlLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxpPWhfW2Uuc2hhcGVdKHIsZSxuKSk6cj1pPWhfW2Uuc2hhcGVdKHQsZSxuKSxlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCksZS5jbGFzcyYmaS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2UuY2xhc3MpLGZfW2UuaWRdPXIsZS5oYXZlQ2FsbGJhY2smJmZfW2UuaWRdLmF0dHIoImNsYXNzIixmX1tlLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIil9KGgsbi5ub2RlKGUpLGEpKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxvLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiLHQsIiAiLEpTT04uc3RyaW5naWZ5KG4uZWRnZSh0KSkpLG8uaW5mbygiRml4IixxYiwiaWRzOiIsdC52LHQudywiVHJhbnNsYXRlaW5nOiAiLHFiW3Qudl0scWJbdC53XSksdl8obCxlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSl9KSksby5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxvLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyIpLG8uaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksby5pbmZvKG4pLG1iKCkubGF5b3V0KG4pLG8uaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsYmIoKS5qc29uLndyaXRlKG4pKTt2YXIgZj0wO3JldHVybiB0XyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLm5vZGUodCk7by5pbmZvKCJQb3NpdGlvbiAiK3QrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUodCkpKSxvLmluZm8oIlBvc2l0aW9uICIrdCsiOiAoIitlLngsIiwiK2UueSwiKSB3aWR0aDogIixlLndpZHRoLCIgaGVpZ2h0OiAiLGUuaGVpZ2h0KSxlJiZlLmNsdXN0ZXJOb2RlP2RfKGUpOm4uY2hpbGRyZW4odCkubGVuZ3RoPjA/KGZ1bmN0aW9uKHQsZSl7by50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTt2YXIgbj1lLnNoYXBlfHwicmVjdCI7eV9bZS5pZF09cF9bbl0odCxlKX0oYyxlKSxxYltlLmlkXS5ub2RlPWUpOmRfKGUpfSkpLG4uZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLmVkZ2UodCk7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeShlKSxlKTt2YXIgaT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIHM9bi5wb2ludHMsYz0hMSx1PWEubm9kZShlLnYpLGw9YS5ub2RlKGUudyk7by5pbmZvKCJhYmM4OCBJbnNlcnRFZGdlOiAiLG4pLGwuaW50ZXJzZWN0JiZ1LmludGVyc2VjdCYmKChzPXMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSkpLnVuc2hpZnQodS5pbnRlcnNlY3Qoc1swXSkpLG8uaW5mbygiTGFzdCBwb2ludCIsc1tzLmxlbmd0aC0xXSxsLGwuaW50ZXJzZWN0KHNbcy5sZW5ndGgtMV0pKSxzLnB1c2gobC5pbnRlcnNlY3Qoc1tzLmxlbmd0aC0xXSkpKSxuLnRvQ2x1c3RlciYmKG8uaW5mbygidG8gY2x1c3RlciBhYmM4OCIscltuLnRvQ2x1c3Rlcl0pLHM9eF8obi5wb2ludHMscltuLnRvQ2x1c3Rlcl0ubm9kZSksYz0hMCksbi5mcm9tQ2x1c3RlciYmKG8uaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixyW24uZnJvbUNsdXN0ZXJdKSxzPXhfKHMucmV2ZXJzZSgpLHJbbi5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLGM9ITApO3ZhciBoLGY9cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTtoPSgiZ3JhcGgiPT09aXx8ImZsb3djaGFydCI9PT1pKSYmbi5jdXJ2ZXx8VnU7dmFyIGQscD16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShoKTtzd2l0Y2gobi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpkPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOmQ9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OmQ9IiJ9c3dpdGNoKG4ucGF0dGVybil7Y2FzZSJzb2xpZCI6ZCs9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpkKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpkKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQifXZhciB5PXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscChmKSkuYXR0cigiaWQiLG4uaWQpLmF0dHIoImNsYXNzIiwiICIrZCsobi5jbGFzc2VzPyIgIituLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsbi5zdHlsZSksZz0iIjtzd2l0Y2goWnYoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYoZz0oZz0oZz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxvLmluZm8oImFycm93VHlwZVN0YXJ0IixuLmFycm93VHlwZVN0YXJ0KSxvLmluZm8oImFycm93VHlwZUVuZCIsbi5hcnJvd1R5cGVFbmQpLG4uYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitnKyIjIitpKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZysiIyIraSsiLWRlcGVuZGVuY3lTdGFydCkiKX1zd2l0Y2gobi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2crIiMiK2krIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50Ijp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitnKyIjIitpKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2crIiMiK2krIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6eS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZysiIyIraSsiLWRlcGVuZGVuY3lFbmQpIil9dmFyIG09e307cmV0dXJuIGMmJihtLnVwZGF0ZWRQYXRoPXMpLG0ub3JpZ2luYWxQYXRoPW4ucG9pbnRzLG19KHUsdCxlLHFiLHIsbik7X18oZSxpKX0pKSxuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO28uaW5mbyh0LGUudHlwZSxlLmRpZmYpLCJncm91cCI9PT1lLnR5cGUmJihmPWUuZGlmZil9KSkse2VsZW06cyxkaWZmOmZ9fSxrXz1mdW5jdGlvbih0LGUsbixyLGkpe0ZiKHQsbixyLGkpLGZfPXt9LGdfPXt9LG1fPXt9LHlfPXt9LCRiPXt9LEhiPXt9LHFiPXt9LG8ud2FybigiR3JhcGggYXQgZmlyc3Q6IixiYigpLmpzb24ud3JpdGUoZSkpLFFiKGUpLG8ud2FybigiR3JhcGggYWZ0ZXI6IixiYigpLmpzb24ud3JpdGUoZSkpLHdfKHQsZSxyKX07X2IucGFyc2VyLnl5PXliO3ZhciBUXz17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH07ZnVuY3Rpb24gRV8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UgMDplPSJhZ2dyZWdhdGlvbiI7YnJlYWs7Y2FzZSAxOmU9ImV4dGVuc2lvbiI7YnJlYWs7Y2FzZSAyOmU9ImNvbXBvc2l0aW9uIjticmVhaztjYXNlIDM6ZT0iZGVwZW5kZW5jeSI7YnJlYWs7ZGVmYXVsdDplPSJub25lIn1yZXR1cm4gZX12YXIgQ189e30sU189W10sQV89IiIsTV89ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PUNfW3RdJiYoQ19bdF09e2F0dHJpYnV0ZXM6W119LG8uaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6Iix0KSksQ19bdF19O2NvbnN0IE5fPXtDYXJkaW5hbGl0eTp7WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUifSxJZGVudGlmaWNhdGlvbjp7Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXthQy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIFp2KCkuZXJ9LGFkZEVudGl0eTpNXyxhZGRBdHRyaWJ1dGVzOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1NXyh0KTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXIuYXR0cmlidXRlcy5wdXNoKGVbbl0pLG8uZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGVbbl0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIENffSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e2VudGl0eUE6dCxyb2xlQTplLGVudGl0eUI6bixyZWxTcGVjOnJ9O1NfLnB1c2goaSksby5kZWJ1ZygiQWRkZWQgbmV3IHJlbGF0aW9uc2hpcCA6IixpKX0sZ2V0UmVsYXRpb25zaGlwczpmdW5jdGlvbigpe3JldHVybiBTX30sY2xlYXI6ZnVuY3Rpb24oKXtDXz17fSxTXz1bXSxBXz0iIn0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7QV89dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gQV99fTt2YXIgRF89big0NzAxKSxPXz1uLm4oRF8pLEJfPXtPTkxZX09ORV9TVEFSVDoiT05MWV9PTkVfU1RBUlQiLE9OTFlfT05FX0VORDoiT05MWV9PTkVfRU5EIixaRVJPX09SX09ORV9TVEFSVDoiWkVST19PUl9PTkVfU1RBUlQiLFpFUk9fT1JfT05FX0VORDoiWkVST19PUl9PTkVfRU5EIixPTkVfT1JfTU9SRV9TVEFSVDoiT05FX09SX01PUkVfU1RBUlQiLE9ORV9PUl9NT1JFX0VORDoiT05FX09SX01PUkVfRU5EIixaRVJPX09SX01PUkVfU1RBUlQ6IlpFUk9fT1JfTU9SRV9TVEFSVCIsWkVST19PUl9NT1JFX0VORDoiWkVST19PUl9NT1JFX0VORCJ9O2NvbnN0IExfPUJfO3ZhciBJXz17fSxSXz1mdW5jdGlvbih0KXtyZXR1cm4odC5lbnRpdHlBK3Qucm9sZUErdC5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sRl89MDtjb25zdCBQXz1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKUlfW2Vbbl1dPXRbZVtuXV19LGpfPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKSxOXy5jbGVhcigpO3ZhciBuPU9fKCkucGFyc2VyO24ueXk9Tl87dHJ5e24ucGFyc2UodCl9Y2F0Y2godCl7by5kZWJ1ZygiUGFyc2luZyBmYWlsZWQiKX12YXIgcixpPWF1KCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyhmdW5jdGlvbih0LGUpe3ZhciBuO3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsQl8uT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixCXy5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEJfLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEJfLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEJfLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixCXy5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsQl8uWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixCXy5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSkoaSxJXykscj1uZXcoYmIoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpJXy5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTt2YXIgYT1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGkpO3I9dm9pZCAwPT09cj9pOnI7dmFyIG89ImVudGl0eS0iK2kscz1hLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrWnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitJXy5mb250U2l6ZSsicHgiKS50ZXh0KGkpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUlfLmVudGl0eVBhZGRpbmcvMyxpPUlfLmVudGl0eVBhZGRpbmcvMyxhPS44NSpJXy5mb250U2l6ZSxvPWUubm9kZSgpLmdldEJCb3goKSxzPVtdLGM9ITEsdT0hMSxsPTAsaD0wLGY9MCxkPTAscD0wLHk9by5oZWlnaHQrMipyLGc9MTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPSIiLmNvbmNhdChlLm5vZGUoKS5pZCwiLWF0dHItIikuY29uY2F0KGcpLG89MCxtPTAsdj10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitadigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZVR5cGUpLGI9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrWnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVOYW1lKSxfPXt9O18udG49dixfLm5uPWI7dmFyIHg9di5ub2RlKCkuZ2V0QkJveCgpLHc9Yi5ub2RlKCkuZ2V0QkJveCgpO2lmKGg9TWF0aC5tYXgoaCx4LndpZHRoKSxmPU1hdGgubWF4KGYsdy53aWR0aCksbys9eC53aWR0aCxvKz13LndpZHRoLG09TWF0aC5tYXgoeC5oZWlnaHQsdy5oZWlnaHQpLGN8fHZvaWQgMCE9PW4uYXR0cmlidXRlS2V5VHlwZSl7dmFyIGs9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrWnYoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVLZXlUeXBlfHwiIik7Xy5rbj1rO3ZhciBUPWsubm9kZSgpLmdldEJCb3goKTtvKz1ULndpZHRoLGQ9TWF0aC5tYXgoZCxvKSxtPU1hdGgubWF4KG0sVC5oZWlnaHQpLGM9ITB9aWYodXx8dm9pZCAwIT09bi5hdHRyaWJ1dGVDb21tZW50KXt2YXIgRT10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi1uYW1lIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitadigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZUNvbW1lbnR8fCIiKTtfLmNuPUU7dmFyIEM9RS5ub2RlKCkuZ2V0QkJveCgpO28rPUMud2lkdGgscD1NYXRoLm1heChvLHcud2lkdGgpLG09TWF0aC5tYXgobSxDLmhlaWdodCksdT0hMH1fLmhlaWdodD1tLHMucHVzaChfKSxsPU1hdGgubWF4KGwsbykseSs9bSsyKnIsZys9MX0pKTt2YXIgbT17d2lkdGg6TWF0aC5tYXgoSV8ubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoby53aWR0aCsyKklfLmVudGl0eVBhZGRpbmcsbCs0KmkpKSxoZWlnaHQ6bi5sZW5ndGg+MD95Ok1hdGgubWF4KElfLm1pbkVudGl0eUhlaWdodCxvLmhlaWdodCsyKklfLmVudGl0eVBhZGRpbmcpfSx2PU1hdGgubWF4KDAsbS53aWR0aC1sLTQqaSk7aWYobi5sZW5ndGg+MCl7ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIittLndpZHRoLzIrIiwiKyhyK28uaGVpZ2h0LzIpKyIpIik7dmFyIGI9by5oZWlnaHQrMipyLF89ImF0dHJpYnV0ZUJveE9kZCI7cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1iK3IrZS5oZWlnaHQvMjtlLnRuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2krIiwiK24rIikiKTt2YXIgYT10Lmluc2VydCgicmVjdCIsIiMiK2UudG4ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KF8pKS5hdHRyKCJmaWxsIixJXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixJXy5zdHJva2UpLmF0dHIoIngiLDApLmF0dHIoInkiLGIpLmF0dHIoIndpZHRoIiwyKmgrdi8yKS5hdHRyKCJoZWlnaHQiLGUudG4ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQrMipyKTtlLm5uLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwYXJzZUZsb2F0KGEuYXR0cigid2lkdGgiKSkraSkrIiwiK24rIikiKSx0Lmluc2VydCgicmVjdCIsIiMiK2Uubm4ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KF8pKS5hdHRyKCJmaWxsIixJXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixJXy5zdHJva2UpLmF0dHIoIngiLCIiLmNvbmNhdChhLmF0dHIoIngiKSthLmF0dHIoIndpZHRoIikpKS5hdHRyKCJ5IixiKS5hdHRyKCJ3aWR0aCIsZisyKmkrdi8yKS5hdHRyKCJoZWlnaHQiLGUubm4ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQrMipyKSxjJiYoZS5rbi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocGFyc2VGbG9hdChhLmF0dHIoIndpZHRoIikpK2kpKyIsIituKyIpIiksdC5pbnNlcnQoInJlY3QiLCIjIitlLmtuLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdChfKSkuYXR0cigiZmlsbCIsSV8uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsSV8uc3Ryb2tlKS5hdHRyKCJ4IiwiIi5jb25jYXQoYS5hdHRyKCJ4IikrYS5hdHRyKCJ3aWR0aCIpKSkuYXR0cigieSIsYikuYXR0cigid2lkdGgiLGQrMippK3YvMikuYXR0cigiaGVpZ2h0IixlLmtuLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcikpLHUmJihlLmNuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwYXJzZUZsb2F0KGEuYXR0cigid2lkdGgiKSkraSkrIiwiK24rIikiKSx0Lmluc2VydCgicmVjdCIsIiMiK2UuY24ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KF8pKS5hdHRyKCJmaWxsIixJXy5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixJXy5zdHJva2UpLmF0dHIoIngiLCIiLmNvbmNhdChhLmF0dHIoIngiKSthLmF0dHIoIndpZHRoIikpKS5hdHRyKCJ5IixiKS5hdHRyKCJ3aWR0aCIscCsyKmkrdi8yKS5hdHRyKCJoZWlnaHQiLGUuY24ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQrMipyKSksYis9ZS5oZWlnaHQrMipyLF89ImF0dHJpYnV0ZUJveE9kZCI9PV8/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSkpfWVsc2UgbS5oZWlnaHQ9TWF0aC5tYXgoSV8ubWluRW50aXR5SGVpZ2h0LHkpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbS53aWR0aC8yKyIsIittLmhlaWdodC8yKyIpIik7cmV0dXJuIG19KGEscyxlW2ldLmF0dHJpYnV0ZXMpLHU9Yy53aWR0aCxsPWMuaGVpZ2h0LGg9YS5pbnNlcnQoInJlY3QiLCIjIitvKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUJveCIpLmF0dHIoImZpbGwiLElfLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLElfLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsbCkubm9kZSgpLmdldEJCb3goKTtuLnNldE5vZGUoaSx7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOml9KX0pKSxyfShpLE5fLmdldEVudGl0aWVzKCkscikscz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh0LmVudGl0eUEsdC5lbnRpdHlCLHtyZWxhdGlvbnNoaXA6dH0sUl8odCkpfSkpLHR9KE5fLmdldFJlbGF0aW9uc2hpcHMoKSxyKTttYigpLmxheW91dChyKSxmdW5jdGlvbih0LGUpe2Uubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2b2lkIDAhPT1uJiZ2b2lkIDAhPT1lLm5vZGUobikmJnQuc2VsZWN0KCIjIituKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZS5ub2RlKG4pLngtZS5ub2RlKG4pLndpZHRoLzIpKyIsIisoZS5ub2RlKG4pLnktZS5ub2RlKG4pLmhlaWdodC8yKSsiICkiKX0pKX0oaSxyKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbixyKXtGXysrO3ZhciBpPW4uZWRnZShlLmVudGl0eUEsZS5lbnRpdHlCLFJfKGUpKSxhPXp1KCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKFZ1KSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoInN0cm9rZSIsSV8uc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpO2UucmVsU3BlYy5yZWxUeXBlPT09Tl8uSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HJiZvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI4LDgiKTt2YXIgcz0iIjtzd2l0Y2goSV8uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZS5yZWxTcGVjLmNhcmRBKXtjYXNlIE5fLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK0xfLlpFUk9fT1JfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgTl8uQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK0xfLlpFUk9fT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIE5fLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK0xfLk9ORV9PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgTl8uQ2FyZGluYWxpdHkuT05MWV9PTkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrTF8uT05MWV9PTkVfRU5EKyIpIil9c3dpdGNoKGUucmVsU3BlYy5jYXJkQil7Y2FzZSBOXy5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK0xfLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBOXy5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitMXy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIE5fLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrTF8uT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIE5fLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrTF8uT05MWV9PTkVfU1RBUlQrIikiKX12YXIgYz1vLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLHU9by5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCguNSpjKSxsPSJyZWwiK0ZfLGg9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGwpLmF0dHIoIngiLHUueCkuYXR0cigieSIsdS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitadigpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK0lfLmZvbnRTaXplKyJweCIpLnRleHQoZS5yb2xlQSkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK2wpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giKS5hdHRyKCJ4Iix1LngtaC53aWR0aC8yKS5hdHRyKCJ5Iix1LnktaC5oZWlnaHQvMikuYXR0cigid2lkdGgiLGgud2lkdGgpLmF0dHIoImhlaWdodCIsaC5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfShpLHQscixhKX0pKTt2YXIgYz1JXy5kaWFncmFtUGFkZGluZyx1PWkubm9kZSgpLmdldEJCb3goKSxsPXUud2lkdGgrMipjLGg9dS5oZWlnaHQrMipjO2p2KGksaCxsLElfLnVzZU1heFdpZHRoKSxpLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdCh1LngtYywiICIpLmNvbmNhdCh1LnktYywiICIpLmNvbmNhdChsLCIgIikuY29uY2F0KGgpKX07ZnVuY3Rpb24gWV8odCl7cmV0dXJuIFlfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxZXyh0KX1mdW5jdGlvbiB6Xyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBVXyxxXywkXz0iZmxvd2NoYXJ0LSIsSF89MCxXXz1adigpLFZfPXt9LEdfPVtdLFhfPVtdLFpfPVtdLFFfPXt9LEtfPXt9LEpfPTAsdHg9ITAsZXg9W10sbng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKFZfKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoVl9bZVtuXV0uaWQ9PT10KXJldHVybiBWX1tlW25dXS5kb21JZDtyZXR1cm4gdH0scng9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e3N0YXJ0OnQsZW5kOmUsdHlwZTp2b2lkIDAsdGV4dDoiIn07dm9pZCAwIT09KHI9bi50ZXh0KSYmKGkudGV4dD1ZbS5zYW5pdGl6ZVRleHQoci50cmltKCksV18pLCciJz09PWkudGV4dFswXSYmJyInPT09aS50ZXh0W2kudGV4dC5sZW5ndGgtMV0mJihpLnRleHQ9aS50ZXh0LnN1YnN0cmluZygxLGkudGV4dC5sZW5ndGgtMSkpKSx2b2lkIDAhPT1uJiYoaS50eXBlPW4udHlwZSxpLnN0cm9rZT1uLnN0cm9rZSxpLmxlbmd0aD1uLmxlbmd0aCksR18ucHVzaChpKX0saXg9ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dDt2b2lkIDAhPT1WX1tuXSYmVl9bbl0uY2xhc3Nlcy5wdXNoKGUpLHZvaWQgMCE9PVFfW25dJiZRX1tuXS5jbGFzc2VzLnB1c2goZSl9KSl9LGF4PWZ1bmN0aW9uKHQpe3ZhciBlPWF1KCIubWVybWFpZFRvb2x0aXAiKTtudWxsPT09KGUuX2dyb3Vwc3x8ZSlbMF1bMF0mJihlPWF1KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxhdSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9YXUodGhpcyk7aWYobnVsbCE9PXQuYXR0cigidGl0bGUiKSl7dmFyIG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLmh0bWwodC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrbi5sZWZ0KyhuLnJpZ2h0LW4ubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStuLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSx0LmNsYXNzZWQoImhvdmVyIiwhMCl9fSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksYXUodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pKX07ZXgucHVzaChheCk7dmFyIG94PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8Wl8ubGVuZ3RoO2UrKylpZihaX1tlXS5pZD09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LHN4PS0xLGN4PVtdLHV4PWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1aX1tuXS5ub2RlcztpZighKChzeCs9MSk+MmUzKSl7aWYoY3hbc3hdPW4sWl9bbl0uaWQ9PT1lKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07Zm9yKHZhciBpPTAsYT0xO2k8ci5sZW5ndGg7KXt2YXIgbz1veChyW2ldKTtpZihvPj0wKXt2YXIgcz10KGUsbyk7aWYocy5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDphK3MuY291bnR9O2ErPXMuY291bnR9aSs9MX1yZXR1cm57cmVzdWx0OiExLGNvdW50OmF9fX0sbHg9ZnVuY3Rpb24odCxlKXt2YXIgbj0hMTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt0Lm5vZGVzLmluZGV4T2YoZSk+PTAmJihuPSEwKX0pKSxufSxoeD1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO3JldHVybiB0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7bHgoZSxyKXx8bi5wdXNoKHQubm9kZXNbaV0pfSkpLHtub2RlczpufX07Y29uc3QgZng9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXthQy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZGVmYXVsdENvbmZpZzpmdW5jdGlvbigpe3JldHVybiAkdi5mbG93Y2hhcnR9LGFkZFZlcnRleDpmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG8scz1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06e30sYz10O3ZvaWQgMCE9PWMmJjAhPT1jLnRyaW0oKS5sZW5ndGgmJih2b2lkIDA9PT1WX1tjXSYmKFZfW2NdPXtpZDpjLGRvbUlkOiRfK2MrIi0iK0hfLHN0eWxlczpbXSxjbGFzc2VzOltdfSksSF8rKyx2b2lkIDAhPT1lPyhXXz1adigpLCciJz09PShvPVltLnNhbml0aXplVGV4dChlLnRyaW0oKSxXXykpWzBdJiYnIic9PT1vW28ubGVuZ3RoLTFdJiYobz1vLnN1YnN0cmluZygxLG8ubGVuZ3RoLTEpKSxWX1tjXS50ZXh0PW8pOnZvaWQgMD09PVZfW2NdLnRleHQmJihWX1tjXS50ZXh0PXQpLHZvaWQgMCE9PW4mJihWX1tjXS50eXBlPW4pLG51bGwhPXImJnIuZm9yRWFjaCgoZnVuY3Rpb24odCl7Vl9bY10uc3R5bGVzLnB1c2godCl9KSksbnVsbCE9aSYmaS5mb3JFYWNoKChmdW5jdGlvbih0KXtWX1tjXS5jbGFzc2VzLnB1c2godCl9KSksdm9pZCAwIT09YSYmKFZfW2NdLmRpcj1hKSxWX1tjXS5wcm9wcz1zKX0sbG9va1VwRG9tSWQ6bngsYWRkTGluazpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGUubGVuZ3RoO2ErKylyeCh0W2ldLGVbYV0sbixyKX0sdXBkYXRlTGlua0ludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P0dfLmRlZmF1bHRJbnRlcnBvbGF0ZT1lOkdfW3RdLmludGVycG9sYXRlPWV9KSl9LHVwZGF0ZUxpbms6ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJkZWZhdWx0Ij09PXQ/R18uZGVmYXVsdFN0eWxlPWU6KC0xPT09enYuaXNTdWJzdHJpbmdJbkFycmF5KCJmaWxsIixlKSYmZS5wdXNoKCJmaWxsOm5vbmUiKSxHX1t0XS5zdHlsZT1lKX0pKX0sYWRkQ2xhc3M6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1YX1t0XSYmKFhfW3RdPXtpZDp0LHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSksbnVsbCE9ZSYmZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLm1hdGNoKCJjb2xvciIpKXt2YXIgbj1lLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtYX1t0XS50ZXh0U3R5bGVzLnB1c2gobil9WF9bdF0uc3R5bGVzLnB1c2goZSl9KSl9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXsoVV89dCkubWF0Y2goLy4qPC8pJiYoVV89IlJMIiksVV8ubWF0Y2goLy4qXF4vKSYmKFVfPSJCVCIpLFVfLm1hdGNoKC8uKj4vKSYmKFVfPSJMUiIpLFVfLm1hdGNoKC8uKnYvKSYmKFVfPSJUQiIpfSxzZXRDbGFzczppeCxzZXRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWUmJihLX1siZ2VuLTEiPT09cV8/bngodCk6dF09WW0uc2FuaXRpemVUZXh0KGUsV18pKX0pKX0sZ2V0VG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gS19bdF19LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe3ZhciByPW54KHQpO2lmKCJsb29zZSI9PT1adigpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciBpPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aT1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLnRyaW0oKTsnIic9PT1vLmNoYXJBdCgwKSYmJyInPT09by5jaGFyQXQoby5sZW5ndGgtMSkmJihvPW8uc3Vic3RyKDEsby5sZW5ndGgtMikpLGlbYV09b319MD09PWkubGVuZ3RoJiZpLnB1c2godCksdm9pZCAwIT09Vl9bdF0mJihWX1t0XS5oYXZlQ2FsbGJhY2s9ITAsZXgucHVzaCgoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KHIsJyJdJykpO251bGwhPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXt2YXIgdDt6di5ydW5GdW5jLmFwcGx5KHp2LFtlXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gel8odCl9KHQ9aSl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB6Xyh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP3pfKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpKX0pLCExKX0pKSl9fSh0LGUsbil9KSksaXgodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1WX1t0XSYmKFZfW3RdLmxpbms9enYuZm9ybWF0VXJsKGUsV18pLFZfW3RdLmxpbmtUYXJnZXQ9bil9KSksaXgodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7ZXguZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFVfLnRyaW0oKX0sZ2V0VmVydGljZXM6ZnVuY3Rpb24oKXtyZXR1cm4gVl99LGdldEVkZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIEdffSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIFhffSxjbGVhcjpmdW5jdGlvbih0KXtWXz17fSxYXz17fSxHXz1bXSwoZXg9W10pLnB1c2goYXgpLFpfPVtdLFFfPXt9LEpfPTAsS189W10sdHg9ITAscV89dHx8Imdlbi0xIn0sc2V0R2VuOmZ1bmN0aW9uKHQpe3FfPXR8fCJnZW4tMSJ9LGRlZmF1bHRTdHlsZTpmdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LGFkZFN1YkdyYXBoOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnRyaW0oKSxpPW47dD09PW4mJm4ubWF0Y2goL1xzLykmJihyPXZvaWQgMCk7dmFyIGE9W10scz1mdW5jdGlvbih0KXt2YXIgZSxuPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LHI9W10saT10LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGk9WV8odCk7cmV0dXJuIHQuc3RtdCYmImRpciI9PT10LnN0bXQ/KGU9dC52YWx1ZSwhMSk6IiIhPT10LnRyaW0oKSYmKGkgaW4gbj8hbltpXS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5baV1bdF09ITApOiEoci5pbmRleE9mKHQpPj0wKSYmci5wdXNoKHQpKX0pKTtyZXR1cm57bm9kZUxpc3Q6aSxkaXI6ZX19KGEuY29uY2F0LmFwcGx5KGEsZSkpLGM9cy5ub2RlTGlzdCx1PXMuZGlyO2lmKGE9YywiZ2VuLTEiPT09cV8pe28ud2FybigiTE9PS0lORyBVUCIpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF09bngoYVtsXSl9cj1yfHwic3ViR3JhcGgiK0pfLGk9aXx8IiIsaT1ZbS5zYW5pdGl6ZVRleHQoaSxXXyksSl8rPTE7dmFyIGg9e2lkOnIsbm9kZXM6YSx0aXRsZTppLnRyaW0oKSxjbGFzc2VzOltdLGRpcjp1fTtyZXR1cm4gby5pbmZvKCJBZGRpbmciLGguaWQsaC5ub2RlcyxoLmRpciksaC5ub2Rlcz1oeChoLFpfKS5ub2RlcyxaXy5wdXNoKGgpLFFfW3JdPWgscn0sZ2V0RGVwdGhGaXJzdFBvczpmdW5jdGlvbih0KXtyZXR1cm4gY3hbdF19LGluZGV4Tm9kZXM6ZnVuY3Rpb24oKXtzeD0tMSxaXy5sZW5ndGg+MCYmdXgoIm5vbmUiLFpfLmxlbmd0aC0xKX0sZ2V0U3ViR3JhcGhzOmZ1bmN0aW9uKCl7cmV0dXJuIFpffSxkZXN0cnVjdExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbixyPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49ZS5zbGljZSgwLC0xKSxyPSJhcnJvd19vcGVuIjtzd2l0Y2goZS5zbGljZSgtMSkpe2Nhc2UieCI6cj0iYXJyb3dfY3Jvc3MiLCJ4Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjpyPSJhcnJvd19wb2ludCIsIjwiPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIm8iOnI9ImFycm93X2NpcmNsZSIsIm8iPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKX12YXIgaT0ibm9ybWFsIixhPW4ubGVuZ3RoLTE7Ij0iPT09blswXSYmKGk9InRoaWNrIik7dmFyIG89ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgscj0wLGk9MDtpPG47KytpKSIuIj09PWVbaV0mJisrcjtyZXR1cm4gcn0oMCxuKTtyZXR1cm4gbyYmKGk9ImRvdHRlZCIsYT1vKSx7dHlwZTpyLHN0cm9rZTppLGxlbmd0aDphfX0odCk7aWYoZSl7aWYobj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPSJhcnJvd19vcGVuIjtzd2l0Y2goZVswXSl7Y2FzZSI8IjpuPSJhcnJvd19wb2ludCIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UieCI6bj0iYXJyb3dfY3Jvc3MiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIm8iOm49ImFycm93X2NpcmNsZSIsZT1lLnNsaWNlKDEpfXZhciByPSJub3JtYWwiO3JldHVybi0xIT09ZS5pbmRleE9mKCI9IikmJihyPSJ0aGljayIpLC0xIT09ZS5pbmRleE9mKCIuIikmJihyPSJkb3R0ZWQiKSx7dHlwZTpuLHN0cm9rZTpyfX0oZSksbi5zdHJva2UhPT1yLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYoImFycm93X29wZW4iPT09bi50eXBlKW4udHlwZT1yLnR5cGU7ZWxzZXtpZihuLnR5cGUhPT1yLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O24udHlwZT0iZG91YmxlXyIrbi50eXBlfXJldHVybiJkb3VibGVfYXJyb3ciPT09bi50eXBlJiYobi50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxuLmxlbmd0aD1yLmxlbmd0aCxufXJldHVybiByfSxsZXg6e2ZpcnN0R3JhcGg6ZnVuY3Rpb24oKXtyZXR1cm4hIXR4JiYodHg9ITEsITApfX0sZXhpc3RzOmx4LG1ha2VVbmlxOmh4fTt2YXIgZHg9big3ODA1KSxweD1uLm4oZHgpLHl4PW4oNDk0OSksZ3g9bi5uKHl4KSxteD1uKDgyODQpLHZ4PW4ubihteCk7ZnVuY3Rpb24gYngodCxlLG4pe3ZhciByPS45KihlLndpZHRoK2UuaGVpZ2h0KSxpPVt7eDpyLzIseTowfSx7eDpyLHk6LXIvMn0se3g6ci8yLHk6LXJ9LHt4OjAseTotci8yfV0sYT1OeCh0LHIscixpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGd4KCkuaW50ZXJzZWN0LnBvbHlnb24obixpLHQpfSxhfWZ1bmN0aW9uIF94KHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPXIvNCxhPWUud2lkdGgrMippLG89W3t4OmkseTowfSx7eDphLWkseTowfSx7eDphLHk6LXIvMn0se3g6YS1pLHk6LXJ9LHt4OmkseTotcn0se3g6MCx5Oi1yLzJ9XSxzPU54KHQsYSxyLG8pO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gZ3goKS5pbnRlcnNlY3QucG9seWdvbihuLG8sdCl9LHN9ZnVuY3Rpb24geHgodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotaS8yLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6LWkvMix5Oi1pfSx7eDowLHk6LWkvMn1dLG89TngodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBneCgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiB3eCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89TngodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBneCgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBreCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjIqaS82LHk6MH0se3g6citpLzYseTowfSx7eDpyLTIqaS82LHk6LWl9LHt4Oi1pLzYseTotaX1dLG89TngodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBneCgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBUeCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnIrMippLzYseTowfSx7eDpyLWkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89TngodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBneCgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBFeCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDotMippLzYseTotaX1dLG89TngodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBneCgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBDeCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyK2kvMix5OjB9LHt4OnIseTotaS8yfSx7eDpyK2kvMix5Oi1pfSx7eDowLHk6LWl9XSxvPU54KHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gZ3goKS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gU3godCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ZS53aWR0aCtyLzQsYT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixyLzIpLmF0dHIoInJ5IixyLzIpLmF0dHIoIngiLC1pLzIpLmF0dHIoInkiLC1yLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gZ3goKS5pbnRlcnNlY3QucmVjdChuLHQpfSxhfWZ1bmN0aW9uIEF4KHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4OjAseTotaX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6cis4LHk6MH0se3g6cis4LHk6LWl9LHt4Oi04LHk6LWl9LHt4Oi04LHk6MH1dLG89TngodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBneCgpLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBNeCh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPXIvMixhPWkvKDIuNStyLzUwKSxvPWUuaGVpZ2h0K2Escz0iTSAwLCIrYSsiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBhICIraSsiLCIrYSsiIDAsMCwwICIrLXIrIiAwIGwgMCwiK28rIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgbCAwLCIrLW8sYz10LmF0dHIoImxhYmVsLW9mZnNldC15IixhKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistci8yKyIsIistKG8vMithKSsiKSIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgZT1neCgpLmludGVyc2VjdC5yZWN0KG4sdCkscj1lLngtbi54O2lmKDAhPWkmJihNYXRoLmFicyhyKTxuLndpZHRoLzJ8fE1hdGguYWJzKHIpPT1uLndpZHRoLzImJk1hdGguYWJzKGUueS1uLnkpPm4uaGVpZ2h0LzItYSkpe3ZhciBvPWEqYSooMS1yKnIvKGkqaSkpOzAhPW8mJihvPU1hdGguc3FydChvKSksbz1hLW8sdC55LW4ueT4wJiYobz0tbyksZS55Kz1vfXJldHVybiBlfSxjfWZ1bmN0aW9uIE54KHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK24vMisiKSIpfWNvbnN0IER4PWZ1bmN0aW9uKHQpe3Quc2hhcGVzKCkucXVlc3Rpb249YngsdC5zaGFwZXMoKS5oZXhhZ29uPV94LHQuc2hhcGVzKCkuc3RhZGl1bT1TeCx0LnNoYXBlcygpLnN1YnJvdXRpbmU9QXgsdC5zaGFwZXMoKS5jeWxpbmRlcj1NeCx0LnNoYXBlcygpLnJlY3RfbGVmdF9pbnZfYXJyb3c9eHgsdC5zaGFwZXMoKS5sZWFuX3JpZ2h0PXd4LHQuc2hhcGVzKCkubGVhbl9sZWZ0PWt4LHQuc2hhcGVzKCkudHJhcGV6b2lkPVR4LHQuc2hhcGVzKCkuaW52X3RyYXBlem9pZD1FeCx0LnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PUN4fTt2YXIgT3g9e307Y29uc3QgQng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylPeFtlW25dXT10W2Vbbl1dfSxMeD1mdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBmbG93Y2hhcnQiKSxmeC5jbGVhcigpLGZ4LnNldEdlbigiZ2VuLTEiKTt2YXIgbj1weCgpLnBhcnNlcjtuLnl5PWZ4LG4ucGFyc2UodCk7dmFyIHI9ZnguZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09ciYmKHI9IlREIik7Zm9yKHZhciBpLGE9WnYoKS5mbG93Y2hhcnQscz1hLm5vZGVTcGFjaW5nfHw1MCxjPWEucmFua1NwYWNpbmd8fDUwLHU9bmV3KGJiKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOnMscmFua3NlcDpjLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGw9ZnguZ2V0U3ViR3JhcGhzKCksaD1sLmxlbmd0aC0xO2g+PTA7aC0tKWk9bFtoXSxmeC5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3Nlcyk7dmFyIGY9ZnguZ2V0VmVydGljZXMoKTtvLndhcm4oIkdldCB2ZXJ0aWNlcyIsZik7dmFyIGQ9ZnguZ2V0RWRnZXMoKSxwPTA7Zm9yKHA9bC5sZW5ndGgtMTtwPj0wO3AtLSl7aT1sW3BdLG91KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKHZhciB5PTA7eTxpLm5vZGVzLmxlbmd0aDt5Kyspby53YXJuKCJTZXR0aW5nIHN1YmdyYXBoIixpLm5vZGVzW3ldLGZ4Lmxvb2tVcERvbUlkKGkubm9kZXNbeV0pLGZ4Lmxvb2tVcERvbUlkKGkuaWQpKSx1LnNldFBhcmVudChmeC5sb29rVXBEb21JZChpLm5vZGVzW3ldKSxmeC5sb29rVXBEb21JZChpLmlkKSl9KGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1hdSgnW2lkPSInLmNvbmNhdChuLCciXScpKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT10W25dLGE9ImRlZmF1bHQiO2kuY2xhc3Nlcy5sZW5ndGg+MCYmKGE9aS5jbGFzc2VzLmpvaW4oIiAiKSk7dmFyIHMsYz1BdihpLnN0eWxlcyksdT12b2lkIDAhPT1pLnRleHQ/aS50ZXh0OmkuaWQ7aWYoam0oWnYoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXtsYWJlbDp1LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsocz12eCgpKHIsbCkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHMpfWVsc2V7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtoLnNldEF0dHJpYnV0ZSgic3R5bGUiLGMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGY9dS5zcGxpdChZbS5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtwLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHAuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHAuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLHAudGV4dENvbnRlbnQ9ZltkXSxoLmFwcGVuZENoaWxkKHApfXM9aH12YXIgeT0wLGc9IiI7c3dpdGNoKGkudHlwZSl7Y2FzZSJyb3VuZCI6eT01LGc9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpnPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpnPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmc9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpnPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpnPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Zz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpnPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Zz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpnPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmc9ImN5bGluZGVyIjticmVhaztkZWZhdWx0Omc9InJlY3QifW8ud2FybigiQWRkaW5nIG5vZGUiLGkuaWQsaS5kb21JZCksZS5zZXROb2RlKGZ4Lmxvb2tVcERvbUlkKGkuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpjLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbDpzLHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOmMuc3R5bGUsaWQ6ZngubG9va1VwRG9tSWQoaS5pZCl9KX0pKX0pKGYsdSxlKSxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT0wO2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgYT1Bdih0LmRlZmF1bHRTdHlsZSk7bj1hLnN0eWxlLHI9YS5sYWJlbFN0eWxlfXQuZm9yRWFjaCgoZnVuY3Rpb24oYSl7aSsrO3ZhciBvPSJMLSIrYS5zdGFydCsiLSIrYS5lbmQscz0iTFMtIithLnN0YXJ0LGM9IkxFLSIrYS5lbmQsdT17fTsiYXJyb3dfb3BlbiI9PT1hLnR5cGU/dS5hcnJvd2hlYWQ9Im5vbmUiOnUuYXJyb3doZWFkPSJub3JtYWwiO3ZhciBsPSIiLGg9IiI7aWYodm9pZCAwIT09YS5zdHlsZSl7dmFyIGY9QXYoYS5zdHlsZSk7bD1mLnN0eWxlLGg9Zi5sYWJlbFN0eWxlfWVsc2Ugc3dpdGNoKGEuc3Ryb2tlKXtjYXNlIm5vcm1hbCI6bD0iZmlsbDpub25lIix2b2lkIDAhPT1uJiYobD1uKSx2b2lkIDAhPT1yJiYoaD1yKTticmVhaztjYXNlImRvdHRlZCI6bD0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6bD0iIHN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lIn11LnN0eWxlPWwsdS5sYWJlbFN0eWxlPWgsdm9pZCAwIT09YS5pbnRlcnBvbGF0ZT91LmN1cnZlPUN2KGEuaW50ZXJwb2xhdGUsUHUpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP3UuY3VydmU9Q3YodC5kZWZhdWx0SW50ZXJwb2xhdGUsUHUpOnUuY3VydmU9Q3YoT3guY3VydmUsUHUpLHZvaWQgMD09PWEudGV4dD92b2lkIDAhPT1hLnN0eWxlJiYodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih1LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix1LmxhYmVscG9zPSJjIixqbShadigpLmZsb3djaGFydC5odG1sTGFiZWxzKT8odS5sYWJlbFR5cGU9Imh0bWwiLHUubGFiZWw9JzxzcGFuIGlkPSJMLScuY29uY2F0KG8sJyIgY2xhc3M9ImVkZ2VMYWJlbCBMLScpLmNvbmNhdChzLCInIEwtIikuY29uY2F0KGMsJyI+JykuY29uY2F0KGEudGV4dC5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSwiPC9zcGFuPiIpKToodS5sYWJlbFR5cGU9InRleHQiLHUubGFiZWw9YS50ZXh0LnJlcGxhY2UoWW0ubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09YS5zdHlsZSYmKHUuc3R5bGU9dS5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiKSx1LmxhYmVsU3R5bGU9dS5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpKSx1LmlkPW8sdS5jbGFzcz1zKyIgIitjLHUubWlubGVuPWEubGVuZ3RofHwxLGUuc2V0RWRnZShmeC5sb29rVXBEb21JZChhLnN0YXJ0KSxmeC5sb29rVXBEb21JZChhLmVuZCksdSxpKX0pKX0oZCx1KTt2YXIgZz1uZXcoMCxneCgpLnJlbmRlcik7RHgoZyksZy5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTtneCgpLnV0aWwuYXBwbHlTdHlsZShpLG5bcisiU3R5bGUiXSl9LGcuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07dmFyIG09YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7bS5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSxvLndhcm4odSk7dmFyIHY9YXUoIiMiK2UrIiBnIik7Zyh2LHUpLHYuc2VsZWN0QWxsKCJnLm5vZGUiKS5hdHRyKCJ0aXRsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ4LmdldFRvb2x0aXAodGhpcy5pZCl9KSk7dmFyIGI9YS5kaWFncmFtUGFkZGluZyxfPW0ubm9kZSgpLmdldEJCb3goKSx4PV8ud2lkdGgrMipiLHc9Xy5oZWlnaHQrMipiO2p2KG0sdyx4LGEudXNlTWF4V2lkdGgpO3ZhciBrPSIiLmNvbmNhdChfLngtYiwiICIpLmNvbmNhdChfLnktYiwiICIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHcpO2ZvcihvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KGspKSxtLmF0dHIoInZpZXdCb3giLGspLGZ4LmluZGV4Tm9kZXMoInN1YkdyYXBoIitwKSxwPTA7cDxsLmxlbmd0aDtwKyspaWYoInVuZGVmaW5lZCIhPT0oaT1sW3BdKS50aXRsZSl7dmFyIFQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytmeC5sb29rVXBEb21JZChpLmlkKSsnIl0gcmVjdCcpLEU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytmeC5sb29rVXBEb21JZChpLmlkKSsnIl0nKSxDPVRbMF0ueC5iYXNlVmFsLnZhbHVlLFM9VFswXS55LmJhc2VWYWwudmFsdWUsQT1UWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsTT1hdShFWzBdKS5zZWxlY3QoIi5sYWJlbCIpO00uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIuY29uY2F0KEMrQS8yLCIsICIpLmNvbmNhdChTKzE0LCIpIikpLE0uYXR0cigiaWQiLGUrIlRleHQiKTtmb3IodmFyIE49MDtOPGkuY2xhc3Nlcy5sZW5ndGg7TisrKUVbMF0uY2xhc3NMaXN0LmFkZChpLmNsYXNzZXNbTl0pfWptKGEuaHRtbExhYmVscyk7Zm9yKHZhciBEPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyIEI9RFtPXSxMPUIuZ2V0QkJveCgpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtJLnNldEF0dHJpYnV0ZSgicngiLDApLEkuc2V0QXR0cmlidXRlKCJyeSIsMCksSS5zZXRBdHRyaWJ1dGUoIndpZHRoIixMLndpZHRoKSxJLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixMLmhlaWdodCksQi5pbnNlcnRCZWZvcmUoSSxCLmZpcnN0Q2hpbGQpfU9iamVjdC5rZXlzKGYpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWZbdF07aWYobi5saW5rKXt2YXIgcj1hdSgiIyIrZSsnIFtpZD0iJytmeC5sb29rVXBEb21JZCh0KSsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX07dmFyIEl4PXt9O2NvbnN0IFJ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspSXhbZVtuXV09dFtlW25dXX0sRng9ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IiksZnguY2xlYXIoKSxmeC5zZXRHZW4oImdlbi0yIik7dmFyIG49cHgoKS5wYXJzZXI7bi55eT1meCxuLnBhcnNlKHQpO3ZhciByPWZ4LmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO3ZhciBpLGE9WnYoKS5mbG93Y2hhcnQscz1hLm5vZGVTcGFjaW5nfHw1MCxjPWEucmFua1NwYWNpbmd8fDUwLHU9bmV3KGJiKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOnMscmFua3NlcDpjLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGw9ZnguZ2V0U3ViR3JhcGhzKCk7by5pbmZvKCJTdWJncmFwaHMgLSAiLGwpO2Zvcih2YXIgaD1sLmxlbmd0aC0xO2g+PTA7aC0tKWk9bFtoXSxvLmluZm8oIlN1YmdyYXBoIC0gIixpKSxmeC5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3NlcyxpLmRpcik7dmFyIGY9ZnguZ2V0VmVydGljZXMoKSxkPWZ4LmdldEVkZ2VzKCk7by5pbmZvKGQpO3ZhciBwPTA7Zm9yKHA9bC5sZW5ndGgtMTtwPj0wO3AtLSl7aT1sW3BdLG91KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKHZhciB5PTA7eTxpLm5vZGVzLmxlbmd0aDt5Kyspby5pbmZvKCJTZXR0aW5nIHVwIHN1YmdyYXBocyIsaS5ub2Rlc1t5XSxpLmlkKSx1LnNldFBhcmVudChpLm5vZGVzW3ldLGkuaWQpfShmdW5jdGlvbih0LGUsbil7dmFyIHI9YXUoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXSxhPSJkZWZhdWx0IjtpLmNsYXNzZXMubGVuZ3RoPjAmJihhPWkuY2xhc3Nlcy5qb2luKCIgIikpO3ZhciBzLGM9QXYoaS5zdHlsZXMpLHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKGptKFp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbD17bGFiZWw6dS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKX07KHM9dngoKShyLGwpLm5vZGUoKSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKX1lbHNle3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aC5zZXRBdHRyaWJ1dGUoInN0eWxlIixjLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7Zm9yKHZhciBmPXUuc3BsaXQoWW0ubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7cC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxwLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxwLnNldEF0dHJpYnV0ZSgieCIsIjEiKSxwLnRleHRDb250ZW50PWZbZF0saC5hcHBlbmRDaGlsZChwKX1zPWh9dmFyIHk9MCxnPSIiO3N3aXRjaChpLnR5cGUpe2Nhc2Uicm91bmQiOnk9NSxnPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6Zz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpnPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpnPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpnPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6Zz0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6Zz0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmc9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpnPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6Zz0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmc9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Zz0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpnPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpnPSJjeWxpbmRlciI7YnJlYWs7ZGVmYXVsdDpnPSJyZWN0In1lLnNldE5vZGUoaS5pZCx7bGFiZWxTdHlsZTpjLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbFRleHQ6dSxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpjLnN0eWxlLGlkOmkuaWQsbGluazppLmxpbmssbGlua1RhcmdldDppLmxpbmtUYXJnZXQsdG9vbHRpcDpmeC5nZXRUb29sdGlwKGkuaWQpfHwiIixkb21JZDpmeC5sb29rVXBEb21JZChpLmlkKSxoYXZlQ2FsbGJhY2s6aS5oYXZlQ2FsbGJhY2ssd2lkdGg6Imdyb3VwIj09PWkudHlwZT81MDA6dm9pZCAwLGRpcjppLmRpcix0eXBlOmkudHlwZSxwcm9wczppLnByb3BzLHBhZGRpbmc6WnYoKS5mbG93Y2hhcnQucGFkZGluZ30pLG8uaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWxUZXh0OnUscng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6Yy5zdHlsZSxpZDppLmlkLGRvbUlkOmZ4Lmxvb2tVcERvbUlkKGkuaWQpLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCx0eXBlOmkudHlwZSxkaXI6aS5kaXIscHJvcHM6aS5wcm9wcyxwYWRkaW5nOlp2KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0pKGYsdSxlKSxmdW5jdGlvbih0LGUpe28uaW5mbygiYWJjNzggZWRnZXMgPSAiLHQpO3ZhciBuLHIsaT0wLGE9e307aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBzPUF2KHQuZGVmYXVsdFN0eWxlKTtuPXMuc3R5bGUscj1zLmxhYmVsU3R5bGV9dC5mb3JFYWNoKChmdW5jdGlvbihzKXtpKys7dmFyIGM9IkwtIitzLnN0YXJ0KyItIitzLmVuZDt2b2lkIDA9PT1hW2NdPyhhW2NdPTAsby5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLGMsYVtjXSkpOihhW2NdKyssby5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLGMsYVtjXSkpO3ZhciB1PWMrIi0iK2FbY107by5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixjLHUsYVtjXSk7dmFyIGw9IkxTLSIrcy5zdGFydCxoPSJMRS0iK3MuZW5kLGY9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaChmLm1pbmxlbj1zLmxlbmd0aHx8MSwiYXJyb3dfb3BlbiI9PT1zLnR5cGU/Zi5hcnJvd2hlYWQ9Im5vbmUiOmYuYXJyb3doZWFkPSJub3JtYWwiLGYuYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLGYuYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIixzLnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjpmLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6Zi5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6Zi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOmYuYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpmLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjpmLmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIn12YXIgZD0iIixwPSIiO3N3aXRjaChzLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmQ9ImZpbGw6bm9uZTsiLHZvaWQgMCE9PW4mJihkPW4pLHZvaWQgMCE9PXImJihwPXIpLGYudGhpY2tuZXNzPSJub3JtYWwiLGYucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpmLnRoaWNrbmVzcz0ibm9ybWFsIixmLnBhdHRlcm49ImRvdHRlZCIsZi5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6Zi50aGlja25lc3M9InRoaWNrIixmLnBhdHRlcm49InNvbGlkIixmLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsifWlmKHZvaWQgMCE9PXMuc3R5bGUpe3ZhciB5PUF2KHMuc3R5bGUpO2Q9eS5zdHlsZSxwPXkubGFiZWxTdHlsZX1mLnN0eWxlPWYuc3R5bGUrPWQsZi5sYWJlbFN0eWxlPWYubGFiZWxTdHlsZSs9cCx2b2lkIDAhPT1zLmludGVycG9sYXRlP2YuY3VydmU9Q3Yocy5pbnRlcnBvbGF0ZSxQdSk6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/Zi5jdXJ2ZT1Ddih0LmRlZmF1bHRJbnRlcnBvbGF0ZSxQdSk6Zi5jdXJ2ZT1DdihJeC5jdXJ2ZSxQdSksdm9pZCAwPT09cy50ZXh0P3ZvaWQgMCE9PXMuc3R5bGUmJihmLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGYuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGYubGFiZWxwb3M9ImMiKSxmLmxhYmVsVHlwZT0idGV4dCIsZi5sYWJlbD1zLnRleHQucmVwbGFjZShZbS5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1zLnN0eWxlJiYoZi5zdHlsZT1mLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxmLmxhYmVsU3R5bGU9Zi5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksZi5pZD11LGYuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitsKyIgIitoLGUuc2V0RWRnZShzLnN0YXJ0LHMuZW5kLGYsaSl9KSl9KGQsdSk7dmFyIGc9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7Zy5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTt2YXIgbT1hdSgiIyIrZSsiIGciKTtrXyhtLHUsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sImZsb3djaGFydCIsZSk7dmFyIHY9YS5kaWFncmFtUGFkZGluZyxiPWcubm9kZSgpLmdldEJCb3goKSxfPWIud2lkdGgrMip2LHg9Yi5oZWlnaHQrMip2O2lmKG8uZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KHgpLCJ0cmFuc2xhdGUoIi5jb25jYXQodi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCh2LXUuX2xhYmVsLm1hcmdpbnksIikiKSksanYoZyx4LF8sYS51c2VNYXhXaWR0aCksZy5hdHRyKCJ2aWV3Qm94IiwiMCAwICIuY29uY2F0KF8sIiAiKS5jb25jYXQoeCkpLGcuc2VsZWN0KCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIuY29uY2F0KHYtdS5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQodi1iLnksIikiKSksZnguaW5kZXhOb2Rlcygic3ViR3JhcGgiK3ApLCFhLmh0bWxMYWJlbHMpZm9yKHZhciB3PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLGs9MDtrPHcubGVuZ3RoO2srKyl7dmFyIFQ9d1trXSxFPVQuZ2V0QkJveCgpLEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgicngiLDApLEMuc2V0QXR0cmlidXRlKCJyeSIsMCksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixFLndpZHRoKSxDLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixFLmhlaWdodCksVC5pbnNlcnRCZWZvcmUoQyxULmZpcnN0Q2hpbGQpfU9iamVjdC5rZXlzKGYpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWZbdF07aWYobi5saW5rKXt2YXIgcj1hdSgiIyIrZSsnIFtpZD0iJyt0KyciXScpO2lmKHIpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsbi5jbGFzc2VzLmpvaW4oIiAiKSksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJocmVmIixuLmxpbmspLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxuLmxpbmtUYXJnZXQmJmkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixuLmxpbmtUYXJnZXQpO3ZhciBhPXIuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBpfSksIjpmaXJzdC1jaGlsZCIpLG89ci5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtvJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gby5ub2RlKCl9KSk7dmFyIHM9ci5zZWxlY3QoIi5sYWJlbCIpO3MmJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBzLm5vZGUoKX0pKX19fSkpfTtmdW5jdGlvbiBQeCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBqeCxZeCx6eD0iIixVeD0iIixxeD0iIiwkeD1bXSxIeD1bXSxXeD0iIixWeD1bXSxHeD1bXSxYeD0iIixaeD1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl0sUXg9W10sS3g9ITEsSng9ITEsdHc9MCxldz1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4hKHIuaW5kZXhPZih0LmZvcm1hdChlLnRyaW0oKSkpPj0wKSYmKHQuaXNvV2Vla2RheSgpPj02JiZuLmluZGV4T2YoIndlZWtlbmRzIik+PTB8fG4uaW5kZXhPZih0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPj0wfHxuLmluZGV4T2YodC5mb3JtYXQoZS50cmltKCkpKT49MCl9LG53PWZ1bmN0aW9uKHQsZSxuLHIpe2lmKG4ubGVuZ3RoJiYhdC5tYW51YWxFbmRUaW1lKXt2YXIgYT1pKCkodC5zdGFydFRpbWUsZSwhMCk7YS5hZGQoMSwiZCIpO3ZhciBvPWkoKSh0LmVuZFRpbWUsZSwhMCkscz1ydyhhLG8sZSxuLHIpO3QuZW5kVGltZT1vLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1zfX0scnc9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIGE9ITEsbz1udWxsO3Q8PWU7KWF8fChvPWUudG9EYXRlKCkpLChhPWV3KHQsbixyLGkpKSYmZS5hZGQoMSwiZCIpLHQuYWRkKDEsImQiKTtyZXR1cm4gb30saXc9ZnVuY3Rpb24odCxlLG4pe249bi50cmltKCk7dmFyIHI9L15hZnRlclxzKyhbXGRcdy0gXSspLy5leGVjKG4udHJpbSgpKTtpZihudWxsIT09cil7dmFyIGE9bnVsbDtpZihyWzFdLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aHcodCk7dm9pZCAwIT09ZSYmKGE/ZS5lbmRUaW1lPmEuZW5kVGltZSYmKGE9ZSk6YT1lKX0pKSxhKXJldHVybiBhLmVuZFRpbWU7dmFyIHM9bmV3IERhdGU7cmV0dXJuIHMuc2V0SG91cnMoMCwwLDAsMCksc312YXIgYz1pKCkobixlLnRyaW0oKSwhMCk7cmV0dXJuIGMuaXNWYWxpZCgpP2MudG9EYXRlKCk6KG8uZGVidWcoIkludmFsaWQgZGF0ZToiK24pLG8uZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IitlLnRyaW0oKSksbmV3IERhdGUpfSxhdz1mdW5jdGlvbih0LGUpe2lmKG51bGwhPT10KXN3aXRjaCh0WzJdKXtjYXNlInMiOmUuYWRkKHRbMV0sInNlY29uZHMiKTticmVhaztjYXNlIm0iOmUuYWRkKHRbMV0sIm1pbnV0ZXMiKTticmVhaztjYXNlImgiOmUuYWRkKHRbMV0sImhvdXJzIik7YnJlYWs7Y2FzZSJkIjplLmFkZCh0WzFdLCJkYXlzIik7YnJlYWs7Y2FzZSJ3IjplLmFkZCh0WzFdLCJ3ZWVrcyIpfXJldHVybiBlLnRvRGF0ZSgpfSxvdz1mdW5jdGlvbih0LGUsbixyKXtyPXJ8fCExLG49bi50cmltKCk7dmFyIGE9aSgpKG4sZS50cmltKCksITApO3JldHVybiBhLmlzVmFsaWQoKT8ociYmYS5hZGQoMSwiZCIpLGEudG9EYXRlKCkpOmF3KC9eKFtcZF0rKShbd2RobXNdKS8uZXhlYyhuLnRyaW0oKSksaSgpKHQpKX0sc3c9MCxjdz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD8idGFzayIrKHN3Kz0xKTp0fSx1dz1bXSxsdz17fSxodz1mdW5jdGlvbih0KXt2YXIgZT1sd1t0XTtyZXR1cm4gdXdbZV19LGZ3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciBlPXV3W3RdLG49IiI7c3dpdGNoKHV3W3RdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6dmFyIHI9aHcoZS5wcmV2VGFza0lkKTtlLnN0YXJ0VGltZT1yLmVuZFRpbWU7YnJlYWs7Y2FzZSJnZXRTdGFydERhdGUiOihuPWl3KDAsengsdXdbdF0ucmF3LnN0YXJ0VGltZS5zdGFydERhdGEpKSYmKHV3W3RdLnN0YXJ0VGltZT1uKX1yZXR1cm4gdXdbdF0uc3RhcnRUaW1lJiYodXdbdF0uZW5kVGltZT1vdyh1d1t0XS5zdGFydFRpbWUsengsdXdbdF0ucmF3LmVuZFRpbWUuZGF0YSxLeCksdXdbdF0uZW5kVGltZSYmKHV3W3RdLnByb2Nlc3NlZD0hMCx1d1t0XS5tYW51YWxFbmRUaW1lPWkoKSh1d1t0XS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLG53KHV3W3RdLHp4LEh4LCR4KSkpLHV3W3RdLnByb2Nlc3NlZH0sZT0hMCxuPTA7bjx1dy5sZW5ndGg7bisrKXQobiksZT1lJiZ1d1tuXS5wcm9jZXNzZWQ7cmV0dXJuIGV9LGR3PWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWh3KHQpO3ZvaWQgMCE9PW4mJm4uY2xhc3Nlcy5wdXNoKGUpfSkpfSxwdz1mdW5jdGlvbih0LGUpe1F4LnB1c2goKGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdCh0LCciXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpLFF4LnB1c2goKGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdCh0LCctdGV4dCJdJykpO251bGwhPT1uJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtlKCl9KSl9KSl9O2NvbnN0IHl3PXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLmdhbnR0fSxjbGVhcjpmdW5jdGlvbigpe1Z4PVtdLEd4PVtdLFh4PSIiLFF4PVtdLFd4PSIiLHN3PTAsang9dm9pZCAwLFl4PXZvaWQgMCx1dz1bXSx6eD0iIixVeD0iIixxeD0iIiwkeD1bXSxIeD1bXSxLeD0hMSxKeD0hMSx0dz0wfSxzZXREYXRlRm9ybWF0OmZ1bmN0aW9uKHQpe3p4PXR9LGdldERhdGVGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4genh9LGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmZ1bmN0aW9uKCl7S3g9ITB9LGVuZERhdGVzQXJlSW5jbHVzaXZlOmZ1bmN0aW9uKCl7cmV0dXJuIEt4fSxlbmFibGVUb3BBeGlzOmZ1bmN0aW9uKCl7Sng9ITB9LHRvcEF4aXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIEp4fSxzZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKHQpe1V4PXR9LGdldEF4aXNGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVXh9LHNldFRvZGF5TWFya2VyOmZ1bmN0aW9uKHQpe3F4PXR9LGdldFRvZGF5TWFya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHF4fSxzZXRUaXRsZTpmdW5jdGlvbih0KXtXeD10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBXeH0sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtYeD10LFZ4LnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFZ4fSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1mdygpLGU9MDshdCYmZTwxMDspdD1mdygpLGUrKztyZXR1cm4gR3g9dXd9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpYeCx0eXBlOlh4LHByb2Nlc3NlZDohMSxtYW51YWxFbmRUaW1lOiExLHJlbmRlckVuZFRpbWU6bnVsbCxyYXc6e2RhdGE6ZX0sdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307Z3cobixyLFp4KTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9Y3coKSxyLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LHIuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6ci5pZD1jdygpLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxyLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOnIuaWQ9Y3coblswXSksci5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LHIuZW5kVGltZT17ZGF0YTpuWzJdfX1yZXR1cm4gcn0oWXgsZSk7bi5yYXcuc3RhcnRUaW1lPXIuc3RhcnRUaW1lLG4ucmF3LmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLnByZXZUYXNrSWQ9WXgsbi5hY3RpdmU9ci5hY3RpdmUsbi5kb25lPXIuZG9uZSxuLmNyaXQ9ci5jcml0LG4ubWlsZXN0b25lPXIubWlsZXN0b25lLG4ub3JkZXI9dHcsdHcrKzt2YXIgaT11dy5wdXNoKG4pO1l4PW4uaWQsbHdbbi5pZF09aS0xfSxmaW5kVGFza0J5SWQ6aHcsYWRkVGFza09yZzpmdW5jdGlvbih0LGUpe3ZhciBuPXtzZWN0aW9uOlh4LHR5cGU6WHgsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX0scj1mdW5jdGlvbih0LGUpe3ZhciBuPSgiOiI9PT1lLnN1YnN0cigwLDEpP2Uuc3Vic3RyKDEsZS5sZW5ndGgpOmUpLnNwbGl0KCIsIikscj17fTtndyhuLHIsWngpO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKW5bYV09blthXS50cmltKCk7dmFyIG89IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6ci5pZD1jdygpLHIuc3RhcnRUaW1lPXQuZW5kVGltZSxvPW5bMF07YnJlYWs7Y2FzZSAyOnIuaWQ9Y3coKSxyLnN0YXJ0VGltZT1pdygwLHp4LG5bMF0pLG89blsxXTticmVhaztjYXNlIDM6ci5pZD1jdyhuWzBdKSxyLnN0YXJ0VGltZT1pdygwLHp4LG5bMV0pLG89blsyXX1yZXR1cm4gbyYmKHIuZW5kVGltZT1vdyhyLnN0YXJ0VGltZSx6eCxvLEt4KSxyLm1hbnVhbEVuZFRpbWU9aSgpKG8sIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksbncocix6eCxIeCwkeCkpLHJ9KGp4LGUpO24uc3RhcnRUaW1lPXIuc3RhcnRUaW1lLG4uZW5kVGltZT1yLmVuZFRpbWUsbi5pZD1yLmlkLG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxqeD1uLEd4LnB1c2gobil9LHNldEluY2x1ZGVzOmZ1bmN0aW9uKHQpeyR4PXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LGdldEluY2x1ZGVzOmZ1bmN0aW9uKCl7cmV0dXJuICR4fSxzZXRFeGNsdWRlczpmdW5jdGlvbih0KXtIeD10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxnZXRFeGNsdWRlczpmdW5jdGlvbigpe3JldHVybiBIeH0sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbil7aWYoImxvb3NlIj09PVp2KCkuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSl7dmFyIHI9W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtyPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0udHJpbSgpOyciJz09PWEuY2hhckF0KDApJiYnIic9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmKGE9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKSkscltpXT1hfX0wPT09ci5sZW5ndGgmJnIucHVzaCh0KSx2b2lkIDAhPT1odyh0KSYmcHcodCwoZnVuY3Rpb24oKXt2YXIgdDt6di5ydW5GdW5jLmFwcGx5KHp2LFtlXS5jb25jYXQoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gUHgodCl9KHQ9cil8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBQeCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP1B4KHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpKX0pKX19KHQsZSxuKX0pKSxkdyh0LCJjbGlja2FibGUiKX0sc2V0TGluazpmdW5jdGlvbih0LGUpe3ZhciBuPWU7Imxvb3NlIiE9PVp2KCkuc2VjdXJpdHlMZXZlbCYmKG49KDAsRG0uc2FuaXRpemVVcmwpKGUpKSx0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09aHcodCkmJnB3KHQsKGZ1bmN0aW9uKCl7d2luZG93Lm9wZW4obiwiX3NlbGYiKX0pKX0pKSxkdyh0LCJjbGlja2FibGUiKX0sYmluZEZ1bmN0aW9uczpmdW5jdGlvbih0KXtReC5mb3JFYWNoKChmdW5jdGlvbihlKXtlKHQpfSkpfSxkdXJhdGlvblRvRGF0ZTphdyxpc0ludmFsaWREYXRlOmV3fTtmdW5jdGlvbiBndyh0LGUsbil7Zm9yKHZhciByPSEwO3I7KXI9ITEsbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uZXcgUmVnRXhwKCJeXFxzKiIrbisiXFxzKiQiKTt0WzBdLm1hdGNoKGkpJiYoZVtuXT0hMCx0LnNoaWZ0KDEpLHI9ITApfSkpfXZhciBtdyx2dz1uKDIwNTUpLGJ3PW4ubih2dyk7dncucGFyc2VyLnl5PXl3O2NvbnN0IF93PWZ1bmN0aW9uKHQsZSl7dmFyIG49WnYoKS5nYW50dDt2dy5wYXJzZXIueXkuY2xlYXIoKSx2dy5wYXJzZXIucGFyc2UodCk7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7dm9pZCAwPT09KG13PXIucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCkmJihtdz0xMjAwKSx2b2lkIDAhPT1uLnVzZVdpZHRoJiYobXc9bi51c2VXaWR0aCk7dmFyIGE9dncucGFyc2VyLnl5LmdldFRhc2tzKCksbz1hLmxlbmd0aCoobi5iYXJIZWlnaHQrbi5iYXJHYXApKzIqbi50b3BQYWRkaW5nO3Iuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrbXcrIiAiK28pO2Zvcih2YXIgcz1hdSgnW2lkPSInLmNvbmNhdChlLCciXScpKSxjPWZ1bmN0aW9uKCl7cmV0dXJuIFppLmFwcGx5KHFzKG1vLHZvLEdhLFdhLFBhLFJhLExhLE9hLE5hLGtvKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX0oKS5kb21haW4oW2woYSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RhcnRUaW1lfSkpLHUoYSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5kVGltZX0pKV0pLnJhbmdlUm91bmQoWzAsbXctbi5sZWZ0UGFkZGluZy1uLnJpZ2h0UGFkZGluZ10pLGg9W10sZj0wO2Y8YS5sZW5ndGg7ZisrKWgucHVzaChhW2ZdLnR5cGUpO3ZhciBkPWg7aD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30sbj1bXSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShoKSxhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUscil7dmFyIGE9bi5iYXJIZWlnaHQsbz1hK24uYmFyR2FwLHU9bi50b3BQYWRkaW5nLGw9bi5sZWZ0UGFkZGluZztmYSgpLmRvbWFpbihbMCxoLmxlbmd0aF0pLnJhbmdlKFsiIzAwQjlGQSIsIiNGOTUwMDIiXSkuaW50ZXJwb2xhdGUoanIpLGZ1bmN0aW9uKHQsZSxyLGEsbyx1LGwsaCl7dmFyIGY9dS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdGFydFRpbWU7cmV0dXJuIHQ/TWF0aC5taW4odCxuKTpufSksMCksZD11LnJlZHVjZSgoZnVuY3Rpb24odCxlKXt2YXIgbj1lLmVuZFRpbWU7cmV0dXJuIHQ/TWF0aC5tYXgodCxuKTpufSksMCkscD12dy5wYXJzZXIueXkuZ2V0RGF0ZUZvcm1hdCgpO2lmKGYmJmQpe2Zvcih2YXIgeT1bXSxnPW51bGwsbT1pKCkoZik7bS52YWx1ZU9mKCk8PWQ7KXZ3LnBhcnNlci55eS5pc0ludmFsaWREYXRlKG0scCxsLGgpP2c/Zy5lbmQ9bS5jbG9uZSgpOmc9e3N0YXJ0Om0uY2xvbmUoKSxlbmQ6bS5jbG9uZSgpfTpnJiYoeS5wdXNoKGcpLGc9bnVsbCksbS5hZGQoMSwiZCIpO3MuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh5KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuImV4Y2x1ZGUtIit0LnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LnN0YXJ0KStyfSkpLmF0dHIoInkiLG4uZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5lbmQuY2xvbmUoKS5hZGQoMSwiZGF5Iik7cmV0dXJuIGMoZSktYyh0LnN0YXJ0KX0pKS5hdHRyKCJoZWlnaHQiLG8tZS1uLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIiwoZnVuY3Rpb24oZSxuKXtyZXR1cm4oYyhlLnN0YXJ0KStyKy41KihjKGUuZW5kKS1jKGUuc3RhcnQpKSkudG9TdHJpbmcoKSsicHggIisobip0Ky41Km8pLnRvU3RyaW5nKCkrInB4In0pKS5hdHRyKCJjbGFzcyIsImV4Y2x1ZGUtcmFuZ2UiKX19KG8sdSxsLDAscix0LHZ3LnBhcnNlci55eS5nZXRFeGNsdWRlcygpLHZ3LnBhcnNlci55eS5nZXRJbmNsdWRlcygpKSxmdW5jdGlvbih0LGUscixpKXt2YXIgYSxvPShhPWMsdigzLGEpKS50aWNrU2l6ZSgtaStlK24uZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoWWwodncucGFyc2VyLnl5LmdldEF4aXNGb3JtYXQoKXx8bi5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYocy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKGktNTApKyIpIikuY2FsbChvKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHl3LnRvcEF4aXNFbmFibGVkKCl8fG4udG9wQXhpcyl7dmFyIHU9ZnVuY3Rpb24odCl7cmV0dXJuIHYoMSx0KX0oYykudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KFlsKHZ3LnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO3MuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiK2UrIikiKS5jYWxsKHUpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX0obCx1LDAsciksZnVuY3Rpb24odCxlLHIsaSxhLG8sdSl7cy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHQpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQub3JkZXIqZStyLTJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbigpe3JldHVybiB1LW4ucmlnaHRQYWRkaW5nLzJ9KSkuYXR0cigiaGVpZ2h0IixlKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aC5sZW5ndGg7ZSsrKWlmKHQudHlwZT09PWhbZV0pcmV0dXJuInNlY3Rpb24gc2VjdGlvbiIrZSVuLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSkpO3ZhciBsPXMuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpO2wuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKS5hdHRyKCJyeCIsMykuYXR0cigicnkiLDMpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5taWxlc3RvbmU/Yyh0LnN0YXJ0VGltZSkraSsuNSooYyh0LmVuZFRpbWUpLWModC5zdGFydFRpbWUpKS0uNSphOmModC5zdGFydFRpbWUpK2l9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQub3JkZXIqZStyfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP2E6Yyh0LnJlbmRlckVuZFRpbWV8fHQuZW5kVGltZSktYyh0LnN0YXJ0VGltZSl9KSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIiwoZnVuY3Rpb24odCxuKXtyZXR1cm4gbj10Lm9yZGVyLChjKHQuc3RhcnRUaW1lKStpKy41KihjKHQuZW5kVGltZSktYyh0LnN0YXJ0VGltZSkpKS50b1N0cmluZygpKyJweCAiKyhuKmUrcisuNSphKS50b1N0cmluZygpKyJweCJ9KSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXt2YXIgZT0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihlPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgcj0wLGk9MDtpPGgubGVuZ3RoO2krKyl0LnR5cGU9PT1oW2ldJiYocj1pJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGE9IiI7cmV0dXJuIHQuYWN0aXZlP3QuY3JpdD9hKz0iIGFjdGl2ZUNyaXQiOmE9IiBhY3RpdmUiOnQuZG9uZT9hPXQuY3JpdD8iIGRvbmVDcml0IjoiIGRvbmUiOnQuY3JpdCYmKGErPSIgY3JpdCIpLDA9PT1hLmxlbmd0aCYmKGE9IiB0YXNrIiksdC5taWxlc3RvbmUmJihhPSIgbWlsZXN0b25lICIrYSksInRhc2siKyhhKz1yKSsiICIrZX0pKSxsLmFwcGVuZCgidGV4dCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQrIi10ZXh0In0pKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXNrfSkpLmF0dHIoImZvbnQtc2l6ZSIsbi5mb250U2l6ZSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWModC5zdGFydFRpbWUpLHI9Yyh0LnJlbmRlckVuZFRpbWV8fHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihlKz0uNSooYyh0LmVuZFRpbWUpLWModC5zdGFydFRpbWUpKS0uNSphKSx0Lm1pbGVzdG9uZSYmKHI9ZSthKTt2YXIgbz10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gbz5yLWU/citvKzEuNSpuLmxlZnRQYWRkaW5nPnU/ZStpLTU6citpKzU6KHItZSkvMitlK2l9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQub3JkZXIqZStuLmJhckhlaWdodC8yKyhuLmZvbnRTaXplLzItMikrcn0pKS5hdHRyKCJ0ZXh0LWhlaWdodCIsYSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXt2YXIgZT1jKHQuc3RhcnRUaW1lKSxyPWModC5lbmRUaW1lKTt0Lm1pbGVzdG9uZSYmKHI9ZSthKTt2YXIgaT10aGlzLmdldEJCb3goKS53aWR0aCxvPSIiO3QuY2xhc3Nlcy5sZW5ndGg+MCYmKG89dC5jbGFzc2VzLmpvaW4oIiAiKSk7Zm9yKHZhciBzPTAsbD0wO2w8aC5sZW5ndGg7bCsrKXQudHlwZT09PWhbbF0mJihzPWwlbi5udW1iZXJTZWN0aW9uU3R5bGVzKTt2YXIgZj0iIjtyZXR1cm4gdC5hY3RpdmUmJihmPXQuY3JpdD8iYWN0aXZlQ3JpdFRleHQiK3M6ImFjdGl2ZVRleHQiK3MpLHQuZG9uZT9mPXQuY3JpdD9mKyIgZG9uZUNyaXRUZXh0IitzOmYrIiBkb25lVGV4dCIrczp0LmNyaXQmJihmPWYrIiBjcml0VGV4dCIrcyksdC5taWxlc3RvbmUmJihmKz0iIG1pbGVzdG9uZVRleHQiKSxpPnItZT9yK2krMS41Km4ubGVmdFBhZGRpbmc+dT9vKyIgdGFza1RleHRPdXRzaWRlTGVmdCB0YXNrVGV4dE91dHNpZGUiK3MrIiAiK2Y6bysiIHRhc2tUZXh0T3V0c2lkZVJpZ2h0IHRhc2tUZXh0T3V0c2lkZSIrcysiICIrZisiIHdpZHRoLSIraTpvKyIgdGFza1RleHQgdGFza1RleHQiK3MrIiAiK2YrIiB3aWR0aC0iK2l9KSl9KHQsbyx1LGwsYSwwLGUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MCxhPTA7YTxoLmxlbmd0aDthKyspclthXT1baFthXSwobz1oW2FdLGM9ZCxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj17fTtlOyluW3RbLS1lXV09KG5bdFtlXV18fDApKzE7cmV0dXJuIG59KGMpW29dfHwwKV07dmFyIG8sYztzLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEocikuZW50ZXIoKS5hcHBlbmQoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uc3BsaXQoWW0ubGluZUJyZWFrUmVnZXgpLG49LShlLmxlbmd0aC0xKS8yLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyLnNldEF0dHJpYnV0ZSgiZHkiLG4rImVtIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2Euc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksYS5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLGk+MCYmYS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYS50ZXh0Q29udGVudD1lW2ldLHIuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIHJ9KSkuYXR0cigieCIsMTApLmF0dHIoInkiLChmdW5jdGlvbihuLGEpe2lmKCEoYT4wKSlyZXR1cm4gblsxXSp0LzIrZTtmb3IodmFyIG89MDtvPGE7bysrKXJldHVybiBpKz1yW2EtMV1bMV0sblsxXSp0LzIraSp0K2V9KSkuYXR0cigiZm9udC1zaXplIixuLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiZm9udC1zaXplIixuLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGgubGVuZ3RoO2UrKylpZih0WzBdPT09aFtlXSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrZSVuLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KSl9KG8sdSksZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9eXcuZ2V0VG9kYXlNYXJrZXIoKTtpZigib2ZmIiE9PWEpe3ZhciBvPXMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLHU9bmV3IERhdGUsbD1vLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLGModSkrdCkuYXR0cigieDIiLGModSkrdCkuYXR0cigieTEiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoInkyIixpLW4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSwiIiE9PWEmJmwuYXR0cigic3R5bGUiLGEucmVwbGFjZSgvLC9nLCI7IikpfX0obCwwLDAscil9KGEsbXcsbyksanYocyxvLG13LG4udXNlTWF4V2lkdGgpLHMuYXBwZW5kKCJ0ZXh0IikudGV4dCh2dy5wYXJzZXIueXkuZ2V0VGl0bGUoKSkuYXR0cigieCIsbXcvMikuYXR0cigieSIsbi50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKX07dmFyIHh3PXt9LHd3PW51bGwsa3c9e21hc3Rlcjp3d30sVHc9Im1hc3RlciIsRXc9IkxSIixDdz0wO2Z1bmN0aW9uIFN3KCl7cmV0dXJuIER2KHtsZW5ndGg6N30pfWZ1bmN0aW9uIEF3KHQsZSl7Zm9yKG8uZGVidWcoIkVudGVyaW5nIGlzZmFzdGZvcndhcmRhYmxlOiIsdC5pZCxlLmlkKTt0LnNlcTw9ZS5zZXEmJnQhPT1lJiZudWxsIT1lLnBhcmVudDspe2lmKEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXJldHVybiBvLmRlYnVnKCJJbiBtZXJnZSBjb21taXQ6IixlLnBhcmVudCksQXcodCx4d1tlLnBhcmVudFswXV0pfHxBdyh0LHh3W2UucGFyZW50WzFdXSk7ZT14d1tlLnBhcmVudF19cmV0dXJuIG8uZGVidWcodC5pZCxlLmlkKSx0LmlkPT09ZS5pZH12YXIgTXc9e307ZnVuY3Rpb24gTncodCxlLG4pe3ZhciByPXQuaW5kZXhPZihlKTstMT09PXI/dC5wdXNoKG4pOnQuc3BsaWNlKHIsMSxuKX1mdW5jdGlvbiBEdyh0KXt2YXIgZT10LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zZXE+ZS5zZXE/dDplfSksdFswXSksbj0iIjt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPXQ9PT1lPyJcdCoiOiJcdHwifSkpO3ZhciByLGksYSxzPVtuLGUuaWQsZS5zZXFdO2Zvcih2YXIgYyBpbiBrdylrd1tjXT09PWUuaWQmJnMucHVzaChjKTtpZihvLmRlYnVnKHMuam9pbigiICIpKSxBcnJheS5pc0FycmF5KGUucGFyZW50KSl7dmFyIHU9eHdbZS5wYXJlbnRbMF1dO053KHQsZSx1KSx0LnB1c2goeHdbZS5wYXJlbnRbMV1dKX1lbHNle2lmKG51bGw9PWUucGFyZW50KXJldHVybjt2YXIgbD14d1tlLnBhcmVudF07TncodCxlLGwpfXI9dCxpPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSxhPU9iamVjdC5jcmVhdGUobnVsbCksRHcodD1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXt2YXIgbj1pKGUpO3JldHVybiBhW25dfHwoYVtuXT0hMCx0LnB1c2goZSkpLHR9KSxbXSkpfXZhciBPdz1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5rZXlzKHh3KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB4d1t0XX0pKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtvLmRlYnVnKHQuaWQpfSkpLHQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zZXEtdC5zZXF9KSksdH07Y29uc3QgQnc9e3NldERpcmVjdGlvbjpmdW5jdGlvbih0KXtFdz10fSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQpe28uZGVidWcoIm9wdGlvbnMgc3RyIix0KSx0PSh0PXQmJnQudHJpbSgpKXx8Int9Ijt0cnl7TXc9SlNPTi5wYXJzZSh0KX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGdpdEdyYXBoIG9wdGlvbnMiLHQubWVzc2FnZSl9fSxnZXRPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIE13fSxjb21taXQ6ZnVuY3Rpb24odCl7dmFyIGU9e2lkOlN3KCksbWVzc2FnZTp0LHNlcTpDdysrLHBhcmVudDpudWxsPT13dz9udWxsOnd3LmlkfTt3dz1lLHh3W2UuaWRdPWUsa3dbVHddPWUuaWQsby5kZWJ1ZygiaW4gcHVzaENvbW1pdCAiK2UuaWQpfSxicmFuY2g6ZnVuY3Rpb24odCl7a3dbdF09bnVsbCE9d3c/d3cuaWQ6bnVsbCxvLmRlYnVnKCJpbiBjcmVhdGVCcmFuY2giKX0sbWVyZ2U6ZnVuY3Rpb24odCl7dmFyIGU9eHdba3dbVHddXSxuPXh3W2t3W3RdXTtpZihmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcSYmQXcoZSx0KX0oZSxuKSlvLmRlYnVnKCJBbHJlYWR5IG1lcmdlZCIpO2Vsc2V7aWYoQXcoZSxuKSlrd1tUd109a3dbdF0sd3c9eHdba3dbVHddXTtlbHNle3ZhciByPXtpZDpTdygpLG1lc3NhZ2U6Im1lcmdlZCBicmFuY2ggIit0KyIgaW50byAiK1R3LHNlcTpDdysrLHBhcmVudDpbbnVsbD09d3c/bnVsbDp3dy5pZCxrd1t0XV19O3d3PXIseHdbci5pZF09cixrd1tUd109ci5pZH1vLmRlYnVnKGt3KSxvLmRlYnVnKCJpbiBtZXJnZUJyYW5jaCIpfX0sY2hlY2tvdXQ6ZnVuY3Rpb24odCl7by5kZWJ1ZygiaW4gY2hlY2tvdXQiKTt2YXIgZT1rd1tUdz10XTt3dz14d1tlXX0scmVzZXQ6ZnVuY3Rpb24odCl7by5kZWJ1ZygiaW4gcmVzZXQiLHQpO3ZhciBlPXQuc3BsaXQoIjoiKVswXSxuPXBhcnNlSW50KHQuc3BsaXQoIjoiKVsxXSkscj0iSEVBRCI9PT1lP3d3Onh3W2t3W2VdXTtmb3Ioby5kZWJ1ZyhyLG4pO24+MDspaWYobi0tLCEocj14d1tyLnBhcmVudF0pKXt2YXIgaT0iQ3JpdGljYWwgZXJyb3IgLSB1bmlxdWUgcGFyZW50IGNvbW1pdCBub3QgZm91bmQgZHVyaW5nIHJlc2V0Ijt0aHJvdyBvLmVycm9yKGkpLGl9d3c9cixrd1tUd109ci5pZH0scHJldHR5UHJpbnQ6ZnVuY3Rpb24oKXtvLmRlYnVnKHh3KSxEdyhbT3coKVswXV0pfSxjbGVhcjpmdW5jdGlvbigpe3h3PXt9LGt3PXttYXN0ZXI6d3c9bnVsbH0sVHc9Im1hc3RlciIsQ3c9MH0sZ2V0QnJhbmNoZXNBc09iakFycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIGt3KXQucHVzaCh7bmFtZTplLGNvbW1pdDp4d1trd1tlXV19KTtyZXR1cm4gdH0sZ2V0QnJhbmNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4ga3d9LGdldENvbW1pdHM6ZnVuY3Rpb24oKXtyZXR1cm4geHd9LGdldENvbW1pdHNBcnJheTpPdyxnZXRDdXJyZW50QnJhbmNoOmZ1bmN0aW9uKCl7cmV0dXJuIFR3fSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gRXd9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gd3d9fTt2YXIgTHcsSXc9big4NDU0KSxSdz1uLm4oSXcpLEZ3PXt9LFB3PXtub2RlU3BhY2luZzoxNTAsbm9kZUZpbGxDb2xvcjoieWVsbG93Iixub2RlU3Ryb2tlV2lkdGg6Mixub2RlU3Ryb2tlQ29sb3I6ImdyZXkiLGxpbmVTdHJva2VXaWR0aDo0LGJyYW5jaE9mZnNldDo1MCxsaW5lQ29sb3I6ImdyZXkiLGxlZnRNYXJnaW46NTAsYnJhbmNoQ29sb3JzOlsiIzQ0MmY3NCIsIiM5ODMzNTEiLCIjNjA5NzMyIiwiI0FBOUEzOSJdLG5vZGVSYWRpdXM6MTAsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH19LGp3PXt9O2Z1bmN0aW9uIFl3KHQsZSxuLHIpe3ZhciBpPUN2KHIsVnUpLGE9UHcuYnJhbmNoQ29sb3JzW24lUHcuYnJhbmNoQ29sb3JzLmxlbmd0aF0sbz16dSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQueCl9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC55KX0pKS5jdXJ2ZShpKTt0LmFwcGVuZCgic3ZnOnBhdGgiKS5hdHRyKCJkIixvKGUpKS5zdHlsZSgic3Ryb2tlIixhKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixQdy5saW5lU3Ryb2tlV2lkdGgpLnN0eWxlKCJmaWxsIiwibm9uZSIpfWZ1bmN0aW9uIHp3KHQsZSl7ZT1lfHx0Lm5vZGUoKS5nZXRCQm94KCk7dmFyIG49dC5ub2RlKCkuZ2V0Q1RNKCk7cmV0dXJue2xlZnQ6bi5lK2UueCpuLmEsdG9wOm4uZitlLnkqbi5kLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fX1mdW5jdGlvbiBVdyh0LGUsbixyLGkpe28uZGVidWcoInN2Z0RyYXdMaW5lRm9yQ29tbWl0czogIixlLG4pO3ZhciBhPXp3KHQuc2VsZWN0KCIjbm9kZS0iK2UrIiBjaXJjbGUiKSkscz16dyh0LnNlbGVjdCgiI25vZGUtIituKyIgY2lyY2xlIikpO3N3aXRjaChyKXtjYXNlIkxSIjppZihhLmxlZnQtcy5sZWZ0PlB3Lm5vZGVTcGFjaW5nKXt2YXIgYz17eDphLmxlZnQtUHcubm9kZVNwYWNpbmcseTpzLnRvcCtzLmhlaWdodC8yfTtZdyh0LFtjLHt4OnMubGVmdCtzLndpZHRoLHk6cy50b3Arcy5oZWlnaHQvMn1dLGksImxpbmVhciIpLFl3KHQsW3t4OmEubGVmdCx5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC1Qdy5ub2RlU3BhY2luZy8yLHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LVB3Lm5vZGVTcGFjaW5nLzIseTpjLnl9LGNdLGkpfWVsc2UgWXcodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LVB3Lm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtUHcubm9kZVNwYWNpbmcvMix5OnMudG9wK3MuaGVpZ2h0LzJ9LHt4OnMubGVmdCtzLndpZHRoLHk6cy50b3Arcy5oZWlnaHQvMn1dLGkpO2JyZWFrO2Nhc2UiQlQiOmlmKHMudG9wLWEudG9wPlB3Lm5vZGVTcGFjaW5nKXt2YXIgdT17eDpzLmxlZnQrcy53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHQrUHcubm9kZVNwYWNpbmd9O1l3KHQsW3Use3g6cy5sZWZ0K3Mud2lkdGgvMix5OnMudG9wfV0saSwibGluZWFyIiksWXcodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHQrUHcubm9kZVNwYWNpbmcvMn0se3g6cy5sZWZ0K3Mud2lkdGgvMix5OnUueS1Qdy5ub2RlU3BhY2luZy8yfSx1XSxpKX1lbHNlIFl3KHQsW3t4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodH0se3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK1B3Lm5vZGVTcGFjaW5nLzJ9LHt4OnMubGVmdCtzLndpZHRoLzIseTpzLnRvcC1Qdy5ub2RlU3BhY2luZy8yfSx7eDpzLmxlZnQrcy53aWR0aC8yLHk6cy50b3B9XSxpKX19ZnVuY3Rpb24gcXcodCxlKXtyZXR1cm4gdC5zZWxlY3QoZSkubm9kZSgpLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gJHcodCxlLG4scil7dmFyIGksYT1PYmplY3Qua2V5cyhGdykubGVuZ3RoO2lmKCJzdHJpbmciPT10eXBlb2YgZSlkb3tpZihpPUZ3W2VdLG8uZGVidWcoImluIHJlbmRlckNvbW1pdEhpc3RvcnkiLGkuaWQsaS5zZXEpLHQuc2VsZWN0KCIjbm9kZS0iK2UpLnNpemUoKT4wKXJldHVybjt0LmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcXcodCwiI2RlZi1jb21taXQiKX0pKS5hdHRyKCJjbGFzcyIsImNvbW1pdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24oKXtyZXR1cm4ibm9kZS0iK2kuaWR9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZSJMUiI6cmV0dXJuInRyYW5zbGF0ZSgiKyhpLnNlcSpQdy5ub2RlU3BhY2luZytQdy5sZWZ0TWFyZ2luKSsiLCAiK0x3KlB3LmJyYW5jaE9mZnNldCsiKSI7Y2FzZSJCVCI6cmV0dXJuInRyYW5zbGF0ZSgiKyhMdypQdy5icmFuY2hPZmZzZXQrUHcubGVmdE1hcmdpbikrIiwgIisoYS1pLnNlcSkqUHcubm9kZVNwYWNpbmcrIikifX0pKS5hdHRyKCJmaWxsIixQdy5ub2RlRmlsbENvbG9yKS5hdHRyKCJzdHJva2UiLFB3Lm5vZGVTdHJva2VDb2xvcikuYXR0cigic3Ryb2tlLXdpZHRoIixQdy5ub2RlU3Ryb2tlV2lkdGgpO3ZhciBzPXZvaWQgMDtmb3IodmFyIGMgaW4gbilpZihuW2NdLmNvbW1pdD09PWkpe3M9bltjXTticmVha31zJiYoby5kZWJ1ZygiZm91bmQgYnJhbmNoICIscy5uYW1lKSx0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiYnJhbmNoLWxhYmVsIikudGV4dChzLm5hbWUrIiwgIikpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJjb21taXQtaWQiKS50ZXh0KGkuaWQpLCIiIT09aS5tZXNzYWdlJiYiQlQiPT09ciYmdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1tc2ciKS50ZXh0KCIsICIraS5tZXNzYWdlKSxlPWkucGFyZW50fXdoaWxlKGUmJkZ3W2VdKTtBcnJheS5pc0FycmF5KGUpJiYoby5kZWJ1ZygiZm91bmQgbWVyZ2UgY29tbW1pdCIsZSksJHcodCxlWzBdLG4sciksTHcrKywkdyh0LGVbMV0sbixyKSxMdy0tKX1mdW5jdGlvbiBIdyh0LGUsbixyKXtmb3Iocj1yfHwwO2Uuc2VxPjAmJiFlLmxpbmVEcmF3bjspInN0cmluZyI9PXR5cGVvZiBlLnBhcmVudD8oVXcodCxlLmlkLGUucGFyZW50LG4sciksZS5saW5lRHJhd249ITAsZT1Gd1tlLnBhcmVudF0pOkFycmF5LmlzQXJyYXkoZS5wYXJlbnQpJiYoVXcodCxlLmlkLGUucGFyZW50WzBdLG4sciksVXcodCxlLmlkLGUucGFyZW50WzFdLG4scisxKSxIdyh0LEZ3W2UucGFyZW50WzFdXSxuLHIrMSksZS5saW5lRHJhd249ITAsZT1Gd1tlLnBhcmVudFswXV0pfWNvbnN0IFd3PWZ1bmN0aW9uKHQpe2p3PXR9O3ZhciBWdz0iIixHdz0hMTtjb25zdCBYdz17c2V0TWVzc2FnZTpmdW5jdGlvbih0KXtvLmRlYnVnKCJTZXR0aW5nIG1lc3NhZ2UgdG86ICIrdCksVnc9dH0sZ2V0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiBWd30sc2V0SW5mbzpmdW5jdGlvbih0KXtHdz10fSxnZXRJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIEd3fX07dmFyIFp3PW4oNDY0NSksUXc9bi5uKFp3KSxLdz17fTtjb25zdCBKdz1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtLd1tlXT10W2VdfSkpfTt2YXIgdGs9big1OTYzKSxlaz1uLm4odGspLG5rPXt9LHJrPSIiLGlrPSExO2NvbnN0IGFrPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLnBpZX0sYWRkU2VjdGlvbjpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PW5rW3RdJiYobmtbdF09ZSxvLmRlYnVnKCJBZGRlZCBuZXcgc2VjdGlvbiA6Iix0KSl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIG5rfSxjbGVhbnVwVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT8odD10LnN1YnN0cmluZygxKS50cmltKCksTnVtYmVyKHQudHJpbSgpKSk6TnVtYmVyKHQudHJpbSgpKX0sY2xlYXI6ZnVuY3Rpb24oKXtuaz17fSxyaz0iIixpaz0hMX0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7cms9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gcmt9LHNldFNob3dEYXRhOmZ1bmN0aW9uKHQpe2lrPXR9LGdldFNob3dEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIGlrfX07dmFyIG9rLHNrPVp2KCk7Y29uc3QgY2s9ZnVuY3Rpb24odCxlKXt0cnl7c2s9WnYoKTt2YXIgbj1laygpLnBhcnNlcjtuLnl5PWFrLG8uZGVidWcoIlJlbmRlcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksbi55eS5jbGVhcigpLG4ucGFyc2UodCksby5kZWJ1ZygiUGFyc2VkIGluZm8gZGlhZ3JhbSIpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PShvaz1yLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYob2s9MTIwMCksdm9pZCAwIT09c2sudXNlV2lkdGgmJihvaz1zay51c2VXaWR0aCksdm9pZCAwIT09c2sucGllLnVzZVdpZHRoJiYob2s9c2sucGllLnVzZVdpZHRoKTt2YXIgaT1hdSgiIyIrZSk7anYoaSw0NTAsb2ssc2sucGllLnVzZU1heFdpZHRoKSxyLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK29rKyIgNDUwIik7dmFyIGE9TWF0aC5taW4ob2ssNDUwKS8yLTQwLHM9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvay8yKyIsMjI1KSIpLGM9YWsuZ2V0U2VjdGlvbnMoKSx1PTA7T2JqZWN0LmtleXMoYykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dSs9Y1t0XX0pKTt2YXIgbD1zay50aGVtZVZhcmlhYmxlcyxoPVtsLnBpZTEsbC5waWUyLGwucGllMyxsLnBpZTQsbC5waWU1LGwucGllNixsLnBpZTcsbC5waWU4LGwucGllOSxsLnBpZTEwLGwucGllMTEsbC5waWUxMl0sZj1tYSgpLnJhbmdlKGgpLGQ9ZnVuY3Rpb24oKXt2YXIgdD1xdSxlPVV1LG49bnVsbCxyPXB1KDApLGk9cHUoRXUpLGE9cHUoMCk7ZnVuY3Rpb24gbyhvKXt2YXIgcyxjLHUsbCxoLGY9KG89UnUobykpLmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoZikseT1uZXcgQXJyYXkoZiksZz0rci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbT1NYXRoLm1pbihFdSxNYXRoLm1heCgtRXUsaS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLHY9TWF0aC5taW4oTWF0aC5hYnMobSkvZixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj12KihtPDA/LTE6MSk7Zm9yKHM9MDtzPGY7KytzKShoPXlbcFtzXT1zXT0rdChvW3NdLHMsbykpPjAmJihkKz1oKTtmb3IobnVsbCE9ZT9wLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoeVt0XSx5W25dKX0pKTpudWxsIT1uJiZwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4ob1t0XSxvW2VdKX0pKSxzPTAsdT1kPyhtLWYqYikvZDowO3M8ZjsrK3MsZz1sKWM9cFtzXSxsPWcrKChoPXlbY10pPjA/aCp1OjApK2IseVtjXT17ZGF0YTpvW2NdLGluZGV4OnMsdmFsdWU6aCxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6bCxwYWRBbmdsZTp2fTtyZXR1cm4geX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB1KCtlKSxvKTp0fSxvLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLG8pOm59LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB1KCt0KSxvKTpyfSxvLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHUoK3QpLG8pOml9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdSgrdCksbyk6YX0sb30oKS52YWx1ZSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19KSkscD1kKE9iamVjdC5lbnRyaWVzKGMpKSx5PUl1KCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoYSk7cy5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkpLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gZih0LmRhdGFbMF0pfSkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIikscy5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybih0LmRhdGFbMV0vdSoxMDApLnRvRml4ZWQoMCkrIiUifSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit5LmNlbnRyb2lkKHQpKyIpIn0pKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNsaWNlIikscy5hcHBlbmQoInRleHQiKS50ZXh0KG4ueXkuZ2V0VGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLTIwMCkuYXR0cigiY2xhc3MiLCJwaWVUaXRsZVRleHQiKTt2YXIgZz1zLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoZi5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgyMTYsIisoMjIqZS0yMipmLmRvbWFpbigpLmxlbmd0aC8yKSsiKSJ9KSk7Zy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsMTgpLmF0dHIoImhlaWdodCIsMTgpLnN0eWxlKCJmaWxsIixmKS5zdHlsZSgic3Ryb2tlIixmKSxnLmRhdGEocCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMjIpLmF0dHIoInkiLDE0KS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gbi55eS5nZXRTaG93RGF0YSgpfHxzay5zaG93RGF0YXx8c2sucGllLnNob3dEYXRhP3QuZGF0YVswXSsiIFsiK3QuZGF0YVsxXSsiXSI6dC5kYXRhWzBdfSkpfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQpfX07dmFyIHVrPW4oNjQ2MyksbGs9bi5uKHVrKSxoaz1bXSxmaz17fSxkaz17fSxwaz17fSx5az17fTtjb25zdCBnaz17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLnJlcX0sYWRkUmVxdWlyZW1lbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZGtbdF0mJihka1t0XT17bmFtZTp0LHR5cGU6ZSxpZDpmay5pZCx0ZXh0OmZrLnRleHQscmlzazpmay5yaXNrLHZlcmlmeU1ldGhvZDpmay52ZXJpZnlNZXRob2R9KSxmaz17fSxka1t0XX0sZ2V0UmVxdWlyZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGRrfSxzZXROZXdSZXFJZDpmdW5jdGlvbih0KXt2b2lkIDAhPT1mayYmKGZrLmlkPXQpfSxzZXROZXdSZXFUZXh0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWZrJiYoZmsudGV4dD10KX0sc2V0TmV3UmVxUmlzazpmdW5jdGlvbih0KXt2b2lkIDAhPT1mayYmKGZrLnJpc2s9dCl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDpmdW5jdGlvbih0KXt2b2lkIDAhPT1mayYmKGZrLnZlcmlmeU1ldGhvZD10KX0sYWRkRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09eWtbdF0mJih5a1t0XT17bmFtZTp0LHR5cGU6cGsudHlwZSxkb2NSZWY6cGsuZG9jUmVmfSxvLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KSkscGs9e30seWtbdF19LGdldEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHlrfSxzZXROZXdFbGVtZW50VHlwZTpmdW5jdGlvbih0KXt2b2lkIDAhPT1wayYmKHBrLnR5cGU9dCl9LHNldE5ld0VsZW1lbnREb2NSZWY6ZnVuY3Rpb24odCl7dm9pZCAwIT09cGsmJihway5kb2NSZWY9dCl9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbil7aGsucHVzaCh7dHlwZTp0LHNyYzplLGRzdDpufSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gaGt9LGNsZWFyOmZ1bmN0aW9uKCl7aGs9W10sZms9e30sZGs9e30scGs9e30seWs9e319fTt2YXIgbWs9e0NPTlRBSU5TOiJjb250YWlucyIsQVJST1c6ImFycm93In07Y29uc3Qgdms9bWs7dmFyIGJrPXt9LF9rPTAseGs9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCIjIitlKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsYmsucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0Iixiay5yZWN0X21pbl9oZWlnaHQrInB4Iil9LHdrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1iay5yZWN0X21pbl93aWR0aC8yLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixyKS5hdHRyKCJ5Iixiay5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PWE/aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4Iixiay5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dCh0KTppLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLGJrLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IiwuNzUqYmsubGluZV9oZWlnaHQpLnRleHQodCksYSsrfSkpO3ZhciBvPTEuNSpiay5yZWN0X3BhZGRpbmcrYSpiay5saW5lX2hlaWdodCouNzU7cmV0dXJuIHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJyZXEtdGl0bGUtbGluZSIpLmF0dHIoIngxIiwiMCIpLmF0dHIoIngyIixiay5yZWN0X21pbl93aWR0aCkuYXR0cigieTEiLG8pLmF0dHIoInkyIixvKSx7dGl0bGVOb2RlOmkseTpvfX0sa2s9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4Iixiay5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxvPVtdO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjMwJiZhPDM7KXt2YXIgbj10LnN1YnN0cmluZygwLDMwKTtlPSh0PXQuc3Vic3RyaW5nKDMwLHQubGVuZ3RoKSkubGVuZ3RoLG9bby5sZW5ndGhdPW4sYSsrfWlmKDM9PWEpe3ZhciByPW9bby5sZW5ndGgtMV07b1tvLmxlbmd0aC0xXT1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTQpKyIuLi4ifWVsc2Ugb1tvLmxlbmd0aF09dDthPTB9KSksby5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4Iixiay5yZWN0X3BhZGRpbmcpLmF0dHIoImR5Iixiay5saW5lX2hlaWdodCkudGV4dCh0KX0pKSxpfSxUaz1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCIiKS5yZXBsYWNlKC9cLi9nLCJfIil9O2NvbnN0IEVrPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpZm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylia1tlW25dXT10W2Vbbl1dfSxDaz1mdW5jdGlvbih0LGUpe3VrLnBhcnNlci55eT1nayx1ay5wYXJzZXIueXkuY2xlYXIoKSx1ay5wYXJzZXIucGFyc2UodCk7dmFyIG49YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixtay5DT05UQUlOUysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJtYXJrZXJXaWR0aCIsZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJnIik7bi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImN5IixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInIiLGUubGluZV9oZWlnaHQvMikuYXR0cigiZmlsbCIsIm5vbmUiKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsZS5saW5lX2hlaWdodCkuYXR0cigieTEiLGUubGluZV9oZWlnaHQvMikuYXR0cigieTIiLGUubGluZV9oZWlnaHQvMikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsZS5saW5lX2hlaWdodCkuYXR0cigieDEiLGUubGluZV9oZWlnaHQvMikuYXR0cigieDIiLGUubGluZV9oZWlnaHQvMikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLG1rLkFSUk9XKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJyZWZZIiwuNSplLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJXaWR0aCIsZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBcbiAgICAgIEwiLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBNIikuY29uY2F0KGUubGluZV9oZWlnaHQsIiwiKS5jb25jYXQoZS5saW5lX2hlaWdodC8yLCJcbiAgICAgIEwwLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0KSkuYXR0cigic3Ryb2tlLXdpZHRoIiwxKX0obixiayk7dmFyIHI9bmV3KGJiKCkuR3JhcGgpKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6YmsubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksaT1nay5nZXRSZXF1aXJlbWVudHMoKSxhPWdrLmdldEVsZW1lbnRzKCkscz1nay5nZXRSZWxhdGlvbnNoaXBzKCk7IWZ1bmN0aW9uKHQsZSxuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT10W3JdO3I9VGsociksby5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIscik7dmFyIGE9bi5hcHBlbmQoImciKS5hdHRyKCJpZCIscikscz14ayhhLCJyZXEtIityKSxjPVtdLHU9d2soYSxyKyJfdGl0bGUiLFsiPDwiLmNvbmNhdChpLnR5cGUsIj4+IiksIiIuY29uY2F0KGkubmFtZSldKTtjLnB1c2godS50aXRsZU5vZGUpO3ZhciBsPWtrKGEscisiX2JvZHkiLFsiSWQ6ICIuY29uY2F0KGkuaWQpLCJUZXh0OiAiLmNvbmNhdChpLnRleHQpLCJSaXNrOiAiLmNvbmNhdChpLnJpc2spLCJWZXJpZmljYXRpb246ICIuY29uY2F0KGkudmVyaWZ5TWV0aG9kKV0sdS55KTtjLnB1c2gobCk7dmFyIGg9cy5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShyLHt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6cn0pfSkpfShpLHIsbiksZnVuY3Rpb24odCxlLG4pe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXRbcl0sYT1UayhyKSxvPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLGEpLHM9ImVsZW1lbnQtIithLGM9eGsobyxzKSx1PVtdLGw9d2sobyxzKyJfdGl0bGUiLFsiPDxFbGVtZW50Pj4iLCIiLmNvbmNhdChyKV0pO3UucHVzaChsLnRpdGxlTm9kZSk7dmFyIGg9a2sobyxzKyJfYm9keSIsWyJUeXBlOiAiLmNvbmNhdChpLnR5cGV8fCJOb3QgU3BlY2lmaWVkIiksIkRvYyBSZWY6ICIuY29uY2F0KGkuZG9jUmVmfHwiTm9uZSIpXSxsLnkpO3UucHVzaChoKTt2YXIgZj1jLm5vZGUoKS5nZXRCQm94KCk7ZS5zZXROb2RlKGEse3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDphfSl9KSl9KGEscixuKSxmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49VGsodC5zcmMpLHI9VGsodC5kc3QpO2Uuc2V0RWRnZShuLHIse3JlbGF0aW9uc2hpcDp0fSl9KSl9KHMsciksbWIoKS5sYXlvdXQociksZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dm9pZCAwIT09biYmdm9pZCAwIT09ZS5ub2RlKG4pJiYodC5zZWxlY3QoIiMiK24pLHQuc2VsZWN0KCIjIituKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZS5ub2RlKG4pLngtZS5ub2RlKG4pLndpZHRoLzIpKyIsIisoZS5ub2RlKG4pLnktZS5ub2RlKG4pLmhlaWdodC8yKSsiICkiKSl9KSl9KG4scikscy5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi5lZGdlKFRrKGUuc3JjKSxUayhlLmRzdCkpLGE9enUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSksbz10Lmluc2VydCgicGF0aCIsIiMiK3IpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGEoaS5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2UudHlwZT09Z2suUmVsYXRpb25zaGlwcy5DT05UQUlOUz9vLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1ltLmdldFVybChiay5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrZS50eXBlKyJfbGluZV9lbmRpbmcpIik6KG8uYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjEwLDciKSxvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitZbS5nZXRVcmwoYmsuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK3ZrLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWUubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksYT1lLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKC41KmkpLG89InJlbCIrX2s7X2srKzt2YXIgcz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLG8pLmF0dHIoIngiLGEueCkuYXR0cigieSIsYS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChyKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIrbykuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixhLngtcy53aWR0aC8yKS5hdHRyKCJ5IixhLnktcy5oZWlnaHQvMikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSh0LG8sMCwiPDwiLmNvbmNhdChlLnR5cGUsIj4+IikpfShuLHQscixlKX0pKTt2YXIgYz1iay5yZWN0X3BhZGRpbmcsdT1uLm5vZGUoKS5nZXRCQm94KCksbD11LndpZHRoKzIqYyxoPXUuaGVpZ2h0KzIqYztqdihuLGgsbCxiay51c2VNYXhXaWR0aCksbi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQodS54LWMsIiAiKS5jb25jYXQodS55LWMsIiAiKS5jb25jYXQobCwiICIpLmNvbmNhdChoKSl9O3ZhciBTaz1uKDk5MjMpLEFrPW4ubihTayksTWs9dm9pZCAwLE5rPXt9LERrPVtdLE9rPVtdLEJrPSIiLExrPSExLElrPSExLFJrPSExLEZrPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU5rW3RdO2kmJmU9PT1pLm5hbWUmJm51bGw9PW58fChudWxsIT1uJiZudWxsIT1uLnRleHR8fChuPXt0ZXh0OmUsd3JhcDpudWxsLHR5cGU6cn0pLG51bGwhPXImJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGwsdHlwZTpyfSksTmtbdF09e25hbWU6ZSxkZXNjcmlwdGlvbjpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJnprKCl8fCEhbi53cmFwLHByZXZBY3RvcjpNayxsaW5rczp7fSxwcm9wZXJ0aWVzOnt9LGFjdG9yQ250Om51bGwscmVjdERhdGE6bnVsbCx0eXBlOnJ8fCJwYXJ0aWNpcGFudCJ9LE1rJiZOa1tNa10mJihOa1tNa10ubmV4dEFjdG9yPXQpLE1rPXQpfSxQaz1mdW5jdGlvbih0KXt2YXIgZSxuPTA7Zm9yKGU9MDtlPERrLmxlbmd0aDtlKyspRGtbZV0udHlwZT09PVVrLkFDVElWRV9TVEFSVCYmRGtbZV0uZnJvbS5hY3Rvcj09PXQmJm4rKyxEa1tlXS50eXBlPT09VWsuQUNUSVZFX0VORCYmRGtbZV0uZnJvbS5hY3Rvcj09PXQmJm4tLTtyZXR1cm4gbn0sams9ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e3RleHQ6dm9pZCAwLHdyYXA6dm9pZCAwfSxyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2lmKHI9PT1Vay5BQ1RJVkVfRU5EKXt2YXIgaT1Qayh0LmFjdG9yKTtpZihpPDEpe3ZhciBhPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIrdC5hY3RvcisiKSIpO3Rocm93IGEuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sYX19cmV0dXJuIERrLnB1c2goe2Zyb206dCx0bzplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZ6aygpfHwhIW4ud3JhcCx0eXBlOnJ9KSwhMH0sWWs9ZnVuY3Rpb24odCl7cmV0dXJuIE5rW3RdfSx6az1mdW5jdGlvbigpe3JldHVybiBSa30sVWs9e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxxaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9e2FjdG9yOnQscGxhY2VtZW50OmUsbWVzc2FnZTpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJnprKCl8fCEhbi53cmFwfSxpPVtdLmNvbmNhdCh0LHQpO09rLnB1c2gociksRGsucHVzaCh7ZnJvbTppWzBdLHRvOmlbMV0sbWVzc2FnZTpuLnRleHQsd3JhcDp2b2lkIDA9PT1uLndyYXAmJnprKCl8fCEhbi53cmFwLHR5cGU6VWsuTk9URSxwbGFjZW1lbnQ6ZX0pfSwkaz1mdW5jdGlvbih0LGUpe3ZhciBuPVlrKHQpO3RyeXt2YXIgcj1JbShlLnRleHQsWnYoKSk7cj0ocj1yLnJlcGxhY2UoLyZhbXA7L2csIiYiKSkucmVwbGFjZSgvJmVxdWFsczsvZywiPSIpLEhrKG4sSlNPTi5wYXJzZShyKSl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLHQpfX07ZnVuY3Rpb24gSGsodCxlKXtpZihudWxsPT10LmxpbmtzKXQubGlua3M9ZTtlbHNlIGZvcih2YXIgbiBpbiBlKXQubGlua3Nbbl09ZVtuXX12YXIgV2s9ZnVuY3Rpb24odCxlKXt2YXIgbj1Zayh0KTt0cnl7dmFyIHI9SW0oZS50ZXh0LFp2KCkpO1ZrKG4sSlNPTi5wYXJzZShyKSl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLHQpfX07ZnVuY3Rpb24gVmsodCxlKXtpZihudWxsPT10LnByb3BlcnRpZXMpdC5wcm9wZXJ0aWVzPWU7ZWxzZSBmb3IodmFyIG4gaW4gZSl0LnByb3BlcnRpZXNbbl09ZVtuXX12YXIgR2s9ZnVuY3Rpb24odCxlKXt2YXIgbj1Zayh0KSxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUudGV4dCk7dHJ5e3ZhciBpPXIuaW5uZXJIVE1MLGE9SlNPTi5wYXJzZShpKTthLnByb3BlcnRpZXMmJlZrKG4sYS5wcm9wZXJ0aWVzKSxhLmxpbmtzJiZIayhuLGEubGlua3MpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0Iix0KX19LFhrPWZ1bmN0aW9uKHQpe0JrPXQudGV4dCxMaz12b2lkIDA9PT10LndyYXAmJnprKCl8fCEhdC53cmFwfTtjb25zdCBaaz17YWRkQWN0b3I6RmssYWRkTWVzc2FnZTpmdW5jdGlvbih0LGUsbixyKXtEay5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmemsoKXx8ISFuLndyYXAsYW5zd2VyOnJ9KX0sYWRkU2lnbmFsOmprLGFkZExpbmtzOiRrLGFkZERldGFpbHM6R2ssYWRkUHJvcGVydGllczpXayxhdXRvV3JhcDp6ayxzZXRXcmFwOmZ1bmN0aW9uKHQpe1JrPXR9LGVuYWJsZVNlcXVlbmNlTnVtYmVyczpmdW5jdGlvbigpe0lrPSEwfSxzaG93U2VxdWVuY2VOdW1iZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIElrfSxnZXRNZXNzYWdlczpmdW5jdGlvbigpe3JldHVybiBEa30sZ2V0QWN0b3JzOmZ1bmN0aW9uKCl7cmV0dXJuIE5rfSxnZXRBY3RvcjpZayxnZXRBY3RvcktleXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoTmspfSxnZXRBY3RvclByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09dCYmdm9pZCAwIT09dC5wcm9wZXJ0aWVzKXJldHVybiB0LnByb3BlcnRpZXNbZV19LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIEJrfSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLnNlcXVlbmNlfSxnZXRUaXRsZVdyYXBwZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gTGt9LGNsZWFyOmZ1bmN0aW9uKCl7Tms9e30sRGs9W119LHBhcnNlTWVzc2FnZTpmdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPXt0ZXh0OmUucmVwbGFjZSgvXls6XT8oPzpubyk/d3JhcDovLCIiKS50cmltKCksd3JhcDpudWxsIT09ZS5tYXRjaCgvXls6XT93cmFwOi8pfHxudWxsPT09ZS5tYXRjaCgvXls6XT9ub3dyYXA6LykmJnZvaWQgMH07cmV0dXJuIG8uZGVidWcoInBhcnNlTWVzc2FnZToiLG4pLG59LExJTkVUWVBFOlVrLEFSUk9XVFlQRTp7RklMTEVEOjAsT1BFTjoxfSxQTEFDRU1FTlQ6e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LGFkZE5vdGU6cWssc2V0VGl0bGU6WGssYXBwbHk6ZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgQXJyYXkpZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0KGUpfSkpO2Vsc2Ugc3dpdGNoKGUudHlwZSl7Y2FzZSJhZGRQYXJ0aWNpcGFudCI6RmsoZS5hY3RvcixlLmFjdG9yLGUuZGVzY3JpcHRpb24sInBhcnRpY2lwYW50Iik7YnJlYWs7Y2FzZSJhZGRBY3RvciI6RmsoZS5hY3RvcixlLmFjdG9yLGUuZGVzY3JpcHRpb24sImFjdG9yIik7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6Y2FzZSJhY3RpdmVFbmQiOmprKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6cWsoZS5hY3RvcixlLnBsYWNlbWVudCxlLnRleHQpO2JyZWFrO2Nhc2UiYWRkTGlua3MiOiRrKGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZEFMaW5rIjohZnVuY3Rpb24odCxlKXt2YXIgbj1Zayh0KTt0cnl7dmFyIHI9e30saT1JbShlLnRleHQsWnYoKSksYT1pLmluZGV4T2YoIkAiKSxzPShpPShpPWkucmVwbGFjZSgvJmFtcDsvZywiJiIpKS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9IikpLnNsaWNlKDAsYS0xKS50cmltKCksYz1pLnNsaWNlKGErMSkudHJpbSgpO3Jbc109YyxIayhuLHIpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0Iix0KX19KGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZFByb3BlcnRpZXMiOldrKGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZERldGFpbHMiOkdrKGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmprKGUuZnJvbSxlLnRvLGUubXNnLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wU3RhcnQiOmprKHZvaWQgMCx2b2lkIDAsZS5sb29wVGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcEVuZCI6amsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6amsodm9pZCAwLHZvaWQgMCxlLmNvbG9yLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0RW5kIjpqayh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0U3RhcnQiOmprKHZvaWQgMCx2b2lkIDAsZS5vcHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRFbmQiOmprKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRTdGFydCI6Y2FzZSJlbHNlIjpqayh2b2lkIDAsdm9pZCAwLGUuYWx0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjpqayh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0VGl0bGUiOlhrKGUudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6Y2FzZSJhbmQiOmprKHZvaWQgMCx2b2lkIDAsZS5wYXJUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOmprKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSl9fX07dmFyIFFrPVtdLEtrPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInJlY3QiKTtyZXR1cm4gbi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoIndpZHRoIixlLndpZHRoKSxuLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLG4uYXR0cigicngiLGUucngpLG4uYXR0cigicnkiLGUucnkpLHZvaWQgMCE9PWUuY2xhc3MmJm4uYXR0cigiY2xhc3MiLGUuY2xhc3MpLG59LEprPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC9qYXZhc2NyaXB0Oi9nLCIiKX0sdFQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtuPWZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTtuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7clQoImFjdG9yIitlKyJfcG9wdXAiKX0pKSxuWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtpVCgiYWN0b3IiK2UrIl9wb3B1cCIpfSkpfSxRay5wdXNoKG4pfSxlVD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LmFwcGVuZCgiaW1hZ2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIsbik7dmFyIGE9Smsocik7aS5hdHRyKCJ4bGluazpocmVmIixhKX0sblQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoInVzZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixuKTt2YXIgYT1KayhyKTtpLmF0dHIoInhsaW5rOmhyZWYiLCIjIithKX0sclQ9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7bnVsbCE9ZSYmKGUuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0saVQ9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7bnVsbCE9ZSYmKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxhVD1mdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wLGk9ZS50ZXh0LnNwbGl0KFltLmxpbmVCcmVha1JlZ2V4KSxhPVtdLG89MCxzPWZ1bmN0aW9uKCl7cmV0dXJuIGUueX07aWYodm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjApc3dpdGNoKGUudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueStlLnRleHRNYXJnaW4pfTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrKG4rcitlLnRleHRNYXJnaW4pLzIpfTticmVhaztjYXNlImJvdHRvbSI6Y2FzZSJlbmQiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrKG4rcisyKmUudGV4dE1hcmdpbiktZS50ZXh0TWFyZ2luKX19aWYodm9pZCAwIT09ZS5hbmNob3ImJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS53aWR0aClzd2l0Y2goZS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6ZS54PU1hdGgucm91bmQoZS54K2UudGV4dE1hcmdpbiksZS5hbmNob3I9InN0YXJ0IixlLmRvbWluYW50QmFzZWxpbmU9InRleHQtYWZ0ZXItZWRnZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLzIpLGUuYW5jaG9yPSJtaWRkbGUiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC1lLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJlbmQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1iZWZvcmUtZWRnZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIn1mb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXTt2b2lkIDAhPT1lLnRleHRNYXJnaW4mJjA9PT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUuZm9udFNpemUmJihvPWMqZS5mb250U2l6ZSk7dmFyIGw9dC5hcHBlbmQoInRleHQiKTtpZihsLmF0dHIoIngiLGUueCksbC5hdHRyKCJ5IixzKCkpLHZvaWQgMCE9PWUuYW5jaG9yJiZsLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSx2b2lkIDAhPT1lLmZvbnRGYW1pbHkmJmwuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHZvaWQgMCE9PWUuZm9udFNpemUmJmwuc3R5bGUoImZvbnQtc2l6ZSIsZS5mb250U2l6ZSksdm9pZCAwIT09ZS5mb250V2VpZ2h0JiZsLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSx2b2lkIDAhPT1lLmZpbGwmJmwuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZsLmF0dHIoImNsYXNzIixlLmNsYXNzKSx2b2lkIDAhPT1lLmR5P2wuYXR0cigiZHkiLGUuZHkpOjAhPT1vJiZsLmF0dHIoImR5IixvKSxlLnRzcGFuKXt2YXIgaD1sLmFwcGVuZCgidHNwYW4iKTtoLmF0dHIoIngiLGUueCksdm9pZCAwIT09ZS5maWxsJiZoLmF0dHIoImZpbGwiLGUuZmlsbCksaC50ZXh0KHUpfWVsc2UgbC50ZXh0KHUpO3ZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wJiYocis9KGwuX2dyb3Vwc3x8bClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxuPXIpLGEucHVzaChsKX1yZXR1cm4gYX0sb1Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBuLmF0dHIoInBvaW50cyIsZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gdCsiLCIrZSsiICIrKHQrbikrIiwiK2UrIiAiKyh0K24pKyIsIisoZStyLTcpKyIgIisodCtuLTguNCkrIiwiKyhlK3IpKyIgIit0KyIsIisoZStyKX0oZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLGFUKHQsZSksbn0sc1Q9LTEsY1Q9ZnVuY3Rpb24odCxlKXt0LnNlbGVjdEFsbCYmdC5zZWxlY3RBbGwoIi5hY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJ5MiIsZS01NSl9LHVUPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sbFQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LGhUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLGEsbyxzKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMpe2Zvcih2YXIgdT1jLmFjdG9yRm9udFNpemUsbD1jLmFjdG9yRm9udEZhbWlseSxoPWMuYWN0b3JGb250V2VpZ2h0LGY9dC5zcGxpdChZbS5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKnUtdSooZi5sZW5ndGgtMSkvMix5PWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHUpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5IixsKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsbCxpLGEsbyxzLGMsdSkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCksZlQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMpe2Zvcih2YXIgdT1jLmFjdG9yRm9udFNpemUsbD1jLmFjdG9yRm9udEZhbWlseSxoPWMuYWN0b3JGb250V2VpZ2h0LGY9dC5zcGxpdChZbS5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKnUtdSooZi5sZW5ndGgtMSkvMix5PWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS5zdHlsZSgiZm9udC1zaXplIix1KS5zdHlsZSgiZm9udC13ZWlnaHQiLGgpLnN0eWxlKCJmb250LWZhbWlseSIsbCk7eS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsbikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsbCxpLGEsMCxzLGMsdSkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCk7Y29uc3QgZFQ9S2sscFQ9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMjswPT09ZS55JiYoc1QrKyx0LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK3NUKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLDgwKS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikpO3ZhciBpPXQuYXBwZW5kKCJnIik7aS5hdHRyKCJjbGFzcyIsImFjdG9yLW1hbiIpO3ZhciBhPXt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTthLng9ZS54LGEueT1lLnksYS5maWxsPSIjZWFlYWVhIixhLndpZHRoPWUud2lkdGgsYS5oZWlnaHQ9ZS5oZWlnaHQsYS5jbGFzcz0iYWN0b3IiLGEucng9MyxhLnJ5PTMsaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrc1QpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsZS55KzI1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLGUueSs0NSksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi1hcm1zIitzVCkuYXR0cigieDEiLHItMTgpLmF0dHIoInkxIixlLnkrMzMpLmF0dHIoIngyIixyKzE4KS5hdHRyKCJ5MiIsZS55KzMzKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixyLTE4KS5hdHRyKCJ5MSIsZS55KzYwKS5hdHRyKCJ4MiIscikuYXR0cigieTIiLGUueSs0NSksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLGUueSs0NSkuYXR0cigieDIiLHIrMTYpLmF0dHIoInkyIixlLnkrNjApO3ZhciBvPWkuYXBwZW5kKCJjaXJjbGUiKTtvLmF0dHIoImN4IixlLngrZS53aWR0aC8yKSxvLmF0dHIoImN5IixlLnkrMTApLG8uYXR0cigiciIsMTUpLG8uYXR0cigid2lkdGgiLGUud2lkdGgpLG8uYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7dmFyIHM9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1zLmhlaWdodCxoVChuKShlLmRlc2NyaXB0aW9uLGksYS54LGEueSszNSxhLndpZHRoLGEuaGVpZ2h0LHtjbGFzczoiYWN0b3IifSxuKSxlLmhlaWdodH0odCxlLG4pO2Nhc2UicGFydGljaXBhbnQiOnJldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMixpPXQuYXBwZW5kKCJnIiksYT1pOzA9PT1lLnkmJihzVCsrLGEuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrc1QpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsNSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNXB4IikuYXR0cigic3Ryb2tlIiwiIzk5OSIpLGE9aS5hcHBlbmQoImciKSxlLmFjdG9yQ250PXNULG51bGwhPWUubGlua3MmJihhLmF0dHIoImlkIiwicm9vdC0iK3NUKSx0VCgiI3Jvb3QtIitzVCxzVCkpKTt2YXIgbz17eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH0scz0iYWN0b3IiO251bGwhPWUucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmNsYXNzP3M9ZS5wcm9wZXJ0aWVzLmNsYXNzOm8uZmlsbD0iI2VhZWFlYSIsby54PWUueCxvLnk9ZS55LG8ud2lkdGg9ZS53aWR0aCxvLmhlaWdodD1lLmhlaWdodCxvLmNsYXNzPXMsby5yeD0zLG8ucnk9Mzt2YXIgYz1LayhhLG8pO2lmKGUucmVjdERhdGE9byxudWxsIT1lLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5pY29uKXt2YXIgdT1lLnByb3BlcnRpZXMuaWNvbi50cmltKCk7IkAiPT09dS5jaGFyQXQoMCk/blQoYSxvLngrby53aWR0aC0yMCxvLnkrMTAsdS5zdWJzdHIoMSkpOmVUKGEsby54K28ud2lkdGgtMjAsby55KzEwLHUpfWhUKG4pKGUuZGVzY3JpcHRpb24sYSxvLngsby55LG8ud2lkdGgsby5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LG4pO3ZhciBsPWUuaGVpZ2h0O2lmKGMubm9kZSl7dmFyIGg9Yy5ub2RlKCkuZ2V0QkJveCgpO2UuaGVpZ2h0PWguaGVpZ2h0LGw9aC5oZWlnaHR9cmV0dXJuIGx9KHQsZSxuKX19LHlUPWZ1bmN0aW9uKHQsZSxuLHIsaSl7aWYodm9pZCAwPT09ZS5saW5rc3x8bnVsbD09PWUubGlua3N8fDA9PT1PYmplY3Qua2V5cyhlLmxpbmtzKS5sZW5ndGgpcmV0dXJue2hlaWdodDowLHdpZHRoOjB9O3ZhciBhPWUubGlua3Msbz1lLmFjdG9yQ250LHM9ZS5yZWN0RGF0YSxjPSJub25lIjtpJiYoYz0iYmxvY2sgIWltcG9ydGFudCIpO3ZhciB1PXQuYXBwZW5kKCJnIik7dS5hdHRyKCJpZCIsImFjdG9yIitvKyJfcG9wdXAiKSx1LmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSx1LmF0dHIoImRpc3BsYXkiLGMpLHRUKCIjYWN0b3IiK28rIl9wb3B1cCIsbyk7dmFyIGw9IiI7dm9pZCAwIT09cy5jbGFzcyYmKGw9IiAiK3MuY2xhc3MpO3ZhciBoPXMud2lkdGg+bj9zLndpZHRoOm4sZj11LmFwcGVuZCgicmVjdCIpO2lmKGYuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitsKSxmLmF0dHIoIngiLHMueCksZi5hdHRyKCJ5IixzLmhlaWdodCksZi5hdHRyKCJmaWxsIixzLmZpbGwpLGYuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksZi5hdHRyKCJ3aWR0aCIsaCksZi5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KSxmLmF0dHIoInJ4IixzLnJ4KSxmLmF0dHIoInJ5IixzLnJ5KSxudWxsIT1hKXt2YXIgZD0yMDtmb3IodmFyIHAgaW4gYSl7dmFyIHk9dS5hcHBlbmQoImEiKSxnPUprKGFbcF0pO3kuYXR0cigieGxpbms6aHJlZiIsZykseS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSxmVChyKShwLHkscy54KzEwLHMuaGVpZ2h0K2QsaCwyMCx7Y2xhc3M6ImFjdG9yIn0sciksZCs9MzB9fXJldHVybiBmLmF0dHIoImhlaWdodCIsZCkse2hlaWdodDpzLmhlaWdodCtkLHdpZHRoOmh9fSxnVD1mdW5jdGlvbih0KXtyZXR1cm4gdC5hcHBlbmQoImciKX0sbVQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYT17eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH0sbz1lLmFuY2hvcmVkO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS5jbGFzcz0iYWN0aXZhdGlvbiIraSUzLGEud2lkdGg9ZS5zdG9weC1lLnN0YXJ0eCxhLmhlaWdodD1uLWUuc3RhcnR5LEtrKG8sYSl9LHZUPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXIuYm94TWFyZ2luLGE9ci5ib3hUZXh0TWFyZ2luLG89ci5sYWJlbEJveEhlaWdodCxzPXIubGFiZWxCb3hXaWR0aCxjPXIubWVzc2FnZUZvbnRGYW1pbHksdT1yLm1lc3NhZ2VGb250U2l6ZSxsPXIubWVzc2FnZUZvbnRXZWlnaHQsaD10LmFwcGVuZCgiZyIpLGY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGguYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHQpLmF0dHIoInkxIixlKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLHIpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07ZihlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxmKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLHZvaWQgMCE9PWUuc2VjdGlvbnMmJmUuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZihlLnN0YXJ0eCx0LnksZS5zdG9weCx0LnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSkpO3ZhciBkPXt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH07ZC50ZXh0PW4sZC54PWUuc3RhcnR4LGQueT1lLnN0YXJ0eSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLndpZHRoPXN8fDUwLGQuaGVpZ2h0PW98fDIwLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9ImxhYmVsVGV4dCIsb1QoaCxkKSwoZD17eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9KS50ZXh0PWUudGl0bGUsZC54PWUuc3RhcnR4K3MvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zdGFydHkraSthLGQuYW5jaG9yPSJtaWRkbGUiLGQudmFsaWduPSJtaWRkbGUiLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9Imxvb3BUZXh0IixkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPSEwO3ZhciBwPWFUKGgsZCk7cmV0dXJuIHZvaWQgMCE9PWUuc2VjdGlvblRpdGxlcyYmZS5zZWN0aW9uVGl0bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7aWYodC5tZXNzYWdlKXtkLnRleHQ9dC5tZXNzYWdlLGQueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zZWN0aW9uc1tuXS55K2krYSxkLmNsYXNzPSJsb29wVGV4dCIsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPWUud3JhcCxwPWFUKGgsZCk7dmFyIHI9TWF0aC5yb3VuZChwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7ZS5zZWN0aW9uc1tuXS5oZWlnaHQrPXItKGkrYSl9fSkpLGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksaH0sYlQ9ZnVuY3Rpb24odCxlKXtLayh0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxfVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSx4VD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSx3VD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LGtUPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LFRUPWZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxFVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxDVD1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSxTVD11VCxBVD1sVDtTay5wYXJzZXIueXk9Wms7dmFyIE1UPXt9LE5UPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsMD09PXRoaXMuYWN0b3JzLmxlbmd0aD9bMF06dGhpcy5hY3RvcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkpKygwPT09dGhpcy5sb29wcy5sZW5ndGg/MDp0aGlzLmxvb3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKSsoMD09PXRoaXMubWVzc2FnZXMubGVuZ3RoPzA6dGhpcy5tZXNzYWdlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm5vdGVzLmxlbmd0aD8wOnRoaXMubm90ZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSxhZGRBY3RvcjpmdW5jdGlvbih0KXt0aGlzLmFjdG9ycy5wdXNoKHQpfSxhZGRMb29wOmZ1bmN0aW9uKHQpe3RoaXMubG9vcHMucHVzaCh0KX0sYWRkTWVzc2FnZTpmdW5jdGlvbih0KXt0aGlzLm1lc3NhZ2VzLnB1c2godCl9LGFkZE5vdGU6ZnVuY3Rpb24odCl7dGhpcy5ub3Rlcy5wdXNoKHQpfSxsYXN0QWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSxsYXN0TG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSxsYXN0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSxsYXN0Tm90ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoLTFdfSxhY3RvcnM6W10sbG9vcHM6W10sbWVzc2FnZXM6W10sbm90ZXM6W119LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxSVChTay5wYXJzZXIueXkuZ2V0Q29uZmlnKCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLGE9MDtmdW5jdGlvbiBvKG8pe3JldHVybiBmdW5jdGlvbihzKXthKys7dmFyIGM9aS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1hKzE7aS51cGRhdGVWYWwocywic3RhcnR5IixlLWMqTVQuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKk1ULmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwoTlQuZGF0YSwic3RhcnR4Iix0LWMqTVQuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChOVC5kYXRhLCJzdG9weCIsbitjKk1ULmJveE1hcmdpbixNYXRoLm1heCksImFjdGl2YXRpb24iIT09byYmKGkudXBkYXRlVmFsKHMsInN0YXJ0eCIsdC1jKk1ULmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHgiLG4rYypNVC5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKE5ULmRhdGEsInN0YXJ0eSIsZS1jKk1ULmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoTlQuZGF0YSwic3RvcHkiLHIrYypNVC5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gobygpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2gobygiYWN0aXZhdGlvbiIpKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoTlQuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChOVC5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKE5ULmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChOVC5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LG5ld0FjdGl2YXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5bdC5mcm9tLmFjdG9yXSxpPUZUKHQuZnJvbS5hY3RvcikubGVuZ3RofHwwLGE9ci54K3Iud2lkdGgvMisoaS0xKSpNVC5hY3RpdmF0aW9uV2lkdGgvMjt0aGlzLmFjdGl2YXRpb25zLnB1c2goe3N0YXJ0eDphLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zKzIsc3RvcHg6YStNVC5hY3RpdmF0aW9uV2lkdGgsc3RvcHk6dm9pZCAwLGFjdG9yOnQuZnJvbS5hY3RvcixhbmNob3JlZDpnVChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5Ok5ULmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sRFQ9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxPVD1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LEJUPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sTFQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBjPWVbbltzXV07Yy53aWR0aD1jLndpZHRofHxNVC53aWR0aCxjLmhlaWdodD1NYXRoLm1heChjLmhlaWdodHx8TVQuaGVpZ2h0LE1ULmhlaWdodCksYy5tYXJnaW49Yy5tYXJnaW58fE1ULmFjdG9yTWFyZ2luLGMueD1pK2EsYy55PXI7dmFyIHU9cFQodCxjLE1UKTtvPU1hdGgubWF4KG8sdSksTlQuaW5zZXJ0KGMueCxyLGMueCtjLndpZHRoLGMuaGVpZ2h0KSxpKz1jLndpZHRoLGErPWMubWFyZ2luLE5ULm1vZGVscy5hZGRBY3RvcihjKX1OVC5idW1wVmVydGljYWxQb3Mobyl9LElUPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MCxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLHM9WVQobyksYz15VCh0LG8scyxNVCxNVC5mb3JjZU1lbnVzKTtjLmhlaWdodD5yJiYocj1jLmhlaWdodCksYy53aWR0aCtvLng+aSYmKGk9Yy53aWR0aCtvLngpfXJldHVybnttYXhIZWlnaHQ6cixtYXhXaWR0aDppfX0sUlQ9ZnVuY3Rpb24odCl7T3YoTVQsdCksdC5mb250RmFtaWx5JiYoTVQuYWN0b3JGb250RmFtaWx5PU1ULm5vdGVGb250RmFtaWx5PU1ULm1lc3NhZ2VGb250RmFtaWx5PXQuZm9udEZhbWlseSksdC5mb250U2l6ZSYmKE1ULmFjdG9yRm9udFNpemU9TVQubm90ZUZvbnRTaXplPU1ULm1lc3NhZ2VGb250U2l6ZT10LmZvbnRTaXplKSx0LmZvbnRXZWlnaHQmJihNVC5hY3RvckZvbnRXZWlnaHQ9TVQubm90ZUZvbnRXZWlnaHQ9TVQubWVzc2FnZUZvbnRXZWlnaHQ9dC5mb250V2VpZ2h0KX0sRlQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5ULmFjdGl2YXRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWN0b3I9PT10fSkpfSxQVD1mdW5jdGlvbih0LGUpe3ZhciBuPWVbdF0scj1GVCh0KTtyZXR1cm5bci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsZS5zdGFydHgpfSksbi54K24ud2lkdGgvMiksci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS5zdG9weCl9KSxuLngrbi53aWR0aC8yKV19O2Z1bmN0aW9uIGpUKHQsZSxuLHIsaSl7TlQuYnVtcFZlcnRpY2FsUG9zKG4pO3ZhciBhPXI7aWYoZS5pZCYmZS5tZXNzYWdlJiZ0W2UuaWRdKXt2YXIgcz10W2UuaWRdLndpZHRoLGM9RFQoTVQpO2UubWVzc2FnZT16di53cmFwTGFiZWwoIlsiLmNvbmNhdChlLm1lc3NhZ2UsIl0iKSxzLTIqTVQud3JhcFBhZGRpbmcsYyksZS53aWR0aD1zLGUud3JhcD0hMDt2YXIgdT16di5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhlLm1lc3NhZ2UsYyksbD1NYXRoLm1heCh1LmhlaWdodCxNVC5sYWJlbEJveEhlaWdodCk7YT1yK2wsby5kZWJ1ZygiIi5jb25jYXQobCwiIC0gIikuY29uY2F0KGUubWVzc2FnZSkpfWkoZSksTlQuYnVtcFZlcnRpY2FsUG9zKGEpfXZhciBZVD1mdW5jdGlvbih0KXt2YXIgZT0wLG49QlQoTVQpO2Zvcih2YXIgciBpbiB0LmxpbmtzKXt2YXIgaT16di5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhyLG4pLndpZHRoKzIqTVQud3JhcFBhZGRpbmcrMipNVC5ib3hNYXJnaW47ZTxpJiYoZT1pKX1yZXR1cm4gZX07Y29uc3QgelQ9e2JvdW5kczpOVCxkcmF3QWN0b3JzOkxULGRyYXdBY3RvcnNQb3B1cDpJVCxzZXRDb25mOlJULGRyYXc6ZnVuY3Rpb24odCxlKXtNVD1adigpLnNlcXVlbmNlLFNrLnBhcnNlci55eS5jbGVhcigpLFNrLnBhcnNlci55eS5zZXRXcmFwKE1ULndyYXApLFNrLnBhcnNlci5wYXJzZSh0KyJcbiIpLE5ULmluaXQoKSxvLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KE1ULG51bGwsMikpKTt2YXIgbj1hdSgnW2lkPSInLmNvbmNhdChlLCciXScpKSxyPVNrLnBhcnNlci55eS5nZXRBY3RvcnMoKSxpPVNrLnBhcnNlci55eS5nZXRBY3RvcktleXMoKSxhPVNrLnBhcnNlci55eS5nZXRNZXNzYWdlcygpLHM9U2sucGFyc2VyLnl5LmdldFRpdGxlKCksYz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHRbZS50b10mJnRbZS5mcm9tXSl7dmFyIHI9dFtlLnRvXTtpZihlLnBsYWNlbWVudD09PVNrLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GJiYhci5wcmV2QWN0b3IpcmV0dXJuO2lmKGUucGxhY2VtZW50PT09U2sucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GJiYhci5uZXh0QWN0b3IpcmV0dXJuO3ZhciBpPXZvaWQgMCE9PWUucGxhY2VtZW50LGE9IWksbz1pP09UKE1UKTpEVChNVCkscz1lLndyYXA/enYud3JhcExhYmVsKGUubWVzc2FnZSxNVC53aWR0aC0yKk1ULndyYXBQYWRkaW5nLG8pOmUubWVzc2FnZSxjPXp2LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHMsbykud2lkdGgrMipNVC53cmFwUGFkZGluZzthJiZlLmZyb209PT1yLm5leHRBY3Rvcj9uW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYyk6YSYmZS5mcm9tPT09ci5wcmV2QWN0b3I/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTphJiZlLmZyb209PT1lLnRvPyhuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMiksbltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMvMikpOmUucGxhY2VtZW50PT09U2sucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6ZS5wbGFjZW1lbnQ9PT1Tay5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj9uW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjKTplLnBsYWNlbWVudD09PVNrLnBhcnNlci55eS5QTEFDRU1FTlQuT1ZFUiYmKHIucHJldkFjdG9yJiYobltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYy8yKSksci5uZXh0QWN0b3ImJihuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMikpKX19KSksby5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixuKSxufShyLGEpO01ULmhlaWdodD1mdW5jdGlvbih0LGUpe3ZhciBuPTA7Zm9yKHZhciByIGluIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZV07ci53cmFwJiYoci5kZXNjcmlwdGlvbj16di53cmFwTGFiZWwoci5kZXNjcmlwdGlvbixNVC53aWR0aC0yKk1ULndyYXBQYWRkaW5nLEJUKE1UKSkpO3ZhciBpPXp2LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHIuZGVzY3JpcHRpb24sQlQoTVQpKTtyLndpZHRoPXIud3JhcD9NVC53aWR0aDpNYXRoLm1heChNVC53aWR0aCxpLndpZHRoKzIqTVQud3JhcFBhZGRpbmcpLHIuaGVpZ2h0PXIud3JhcD9NYXRoLm1heChpLmhlaWdodCxNVC5oZWlnaHQpOk1ULmhlaWdodCxuPU1hdGgubWF4KG4sci5oZWlnaHQpfSkpLGUpe3ZhciBpPXRbcl07aWYoaSl7dmFyIGE9dFtpLm5leHRBY3Rvcl07aWYoYSl7dmFyIG89ZVtyXStNVC5hY3Rvck1hcmdpbi1pLndpZHRoLzItYS53aWR0aC8yO2kubWFyZ2luPU1hdGgubWF4KG8sTVQuYWN0b3JNYXJnaW4pfX19cmV0dXJuIE1hdGgubWF4KG4sTVQuaGVpZ2h0KX0ocixjKSxFVChuKSxUVChuKSxDVChuKSxMVChuLHIsaSwwKTt2YXIgdT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LHM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9enYucmFuZG9tKHtsZW5ndGg6MTB9KSx0LnR5cGUpe2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmNhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6cy5wdXNoKHtpZDp0LmlkLG1zZzp0Lm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDp0Lm1lc3NhZ2UmJihuPXMucG9wKCksYVtuLmlkXT1uLGFbdC5pZF09bixzLnB1c2gobikpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuT1BUX0VORDpjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOm49cy5wb3AoKSxhW24uaWRdPW47YnJlYWs7Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOnZhciBjPWVbdC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yXSx1PUZUKHQuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3RvcikubGVuZ3RoLGw9Yy54K2Mud2lkdGgvMisodS0xKSpNVC5hY3RpdmF0aW9uV2lkdGgvMixoPXtzdGFydHg6bCxzdG9weDpsK01ULmFjdGl2YXRpb25XaWR0aCxhY3Rvcjp0LmZyb20uYWN0b3IsZW5hYmxlZDohMH07TlQuYWN0aXZhdGlvbnMucHVzaChoKTticmVhaztjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfRU5EOnZhciBmPU5ULmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtkZWxldGUgTlQuYWN0aXZhdGlvbnMuc3BsaWNlKGYsMSlbMF19dm9pZCAwIT09dC5wbGFjZW1lbnQ/KHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3QuZnJvbV0ueCxyPWVbdC50b10ueCxpPXQud3JhcCYmdC5tZXNzYWdlLGE9enYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT96di53cmFwTGFiZWwodC5tZXNzYWdlLE1ULndpZHRoLE9UKE1UKSk6dC5tZXNzYWdlLE9UKE1UKSkscz17d2lkdGg6aT9NVC53aWR0aDpNYXRoLm1heChNVC53aWR0aCxhLndpZHRoKzIqTVQubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09U2sucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhzLndpZHRoPWk/TWF0aC5tYXgoTVQud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipNVC5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrTVQuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09U2sucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KHMud2lkdGg9aT9NYXRoLm1heChNVC53aWR0aCxhLndpZHRoKzIqTVQubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipNVC5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uLXMud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1NVC5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT16di5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpP3p2LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoTVQud2lkdGgsZVt0LmZyb21dLndpZHRoKSxPVChNVCkpOnQubWVzc2FnZSxPVChNVCkpLHMud2lkdGg9aT9NYXRoLm1heChNVC53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxNVC53aWR0aCxhLndpZHRoKzIqTVQubm90ZU1hcmdpbikscy5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLXMud2lkdGgpLzIpOihzLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkrTVQuYWN0b3JNYXJnaW4scy5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItTVQuYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1NVC5hY3Rvck1hcmdpbi8yKSxpJiYocy5tZXNzYWdlPXp2LndyYXBMYWJlbCh0Lm1lc3NhZ2Uscy53aWR0aC0yKk1ULndyYXBQYWRkaW5nLE9UKE1UKSkpLG8uZGVidWcoIk5NOlsiLmNvbmNhdChzLnN0YXJ0eCwiLCIpLmNvbmNhdChzLnN0b3B4LCIsIikuY29uY2F0KHMuc3RhcnR5LCIsIikuY29uY2F0KHMuc3RvcHksIjoiKS5jb25jYXQocy53aWR0aCwiLCIpLmNvbmNhdChzLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksc30odCxlKSx0Lm5vdGVNb2RlbD1yLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1NVC5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtTay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixTay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4sU2sucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELFNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsU2sucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLFNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsU2sucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULFNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1QVCh0LmZyb20sZSksaT1QVCh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPXp2LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKk1ULndyYXBQYWRkaW5nLE1ULndpZHRoKSxEVChNVCkpKTt2YXIgdT16di5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsRFQoTVQpKTtyZXR1cm57d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKk1ULndyYXBQYWRkaW5nLGMrMipNVC53cmFwUGFkZGluZyxNVC53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJnMubGVuZ3RoPjAmJnMuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktTVQubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktTVQubGFiZWxCb3hXaWR0aH0pKSl9KSksTlQuYWN0aXZhdGlvbnM9W10sby5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9KGEscik7X1Qobiksa1QobikseFQobiksd1Qobik7dmFyIGw9MTthLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLGksYTtzd2l0Y2godC50eXBlKXtjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5OT1RFOmk9dC5ub3RlTW9kZWwsZnVuY3Rpb24odCxlKXtOVC5idW1wVmVydGljYWxQb3MoTVQuYm94TWFyZ2luKSxlLmhlaWdodD1NVC5ib3hNYXJnaW4sZS5zdGFydHk9TlQuZ2V0VmVydGljYWxQb3MoKTt2YXIgbj1BVCgpO24ueD1lLnN0YXJ0eCxuLnk9ZS5zdGFydHksbi53aWR0aD1lLndpZHRofHxNVC53aWR0aCxuLmNsYXNzPSJub3RlIjt2YXIgcj10LmFwcGVuZCgiZyIpLGk9ZFQocixuKSxhPVNUKCk7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLndpZHRoPW4ud2lkdGgsYS5keT0iMWVtIixhLnRleHQ9ZS5tZXNzYWdlLGEuY2xhc3M9Im5vdGVUZXh0IixhLmZvbnRGYW1pbHk9TVQubm90ZUZvbnRGYW1pbHksYS5mb250U2l6ZT1NVC5ub3RlRm9udFNpemUsYS5mb250V2VpZ2h0PU1ULm5vdGVGb250V2VpZ2h0LGEuYW5jaG9yPU1ULm5vdGVBbGlnbixhLnRleHRNYXJnaW49TVQubm90ZU1hcmdpbixhLnZhbGlnbj1NVC5ub3RlQWxpZ247dmFyIG89YVQocixhKSxzPU1hdGgucm91bmQoby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0Ll9ncm91cHN8fHQpWzBdWzBdLmdldEJCb3goKS5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpO2kuYXR0cigiaGVpZ2h0IixzKzIqTVQubm90ZU1hcmdpbiksZS5oZWlnaHQrPXMrMipNVC5ub3RlTWFyZ2luLE5ULmJ1bXBWZXJ0aWNhbFBvcyhzKzIqTVQubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStzKzIqTVQubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K24ud2lkdGgsTlQuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksTlQubW9kZWxzLmFkZE5vdGUoZSl9KG4saSk7YnJlYWs7Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOk5ULm5ld0FjdGl2YXRpb24odCxuLHIpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9TlQuZW5kQWN0aXZhdGlvbih0KTtyLnN0YXJ0eSsxOD5lJiYoci5zdGFydHk9ZS02LGUrPTEyKSxtVChuLHIsZSxNVCxGVCh0LmZyb20uYWN0b3IpLmxlbmd0aCksTlQuaW5zZXJ0KHIuc3RhcnR4LGUtMTAsci5zdG9weCxlKX0odCxOVC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOmpUKHUsdCxNVC5ib3hNYXJnaW4sTVQuYm94TWFyZ2luK01ULmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBOVC5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmU9TlQuZW5kTG9vcCgpLHZUKG4sZSwibG9vcCIsTVQpLE5ULmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LU5ULmdldFZlcnRpY2FsUG9zKCkpLE5ULm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQ6alQodSx0LE1ULmJveE1hcmdpbixNVC5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBOVC5uZXdMb29wKHZvaWQgMCx0Lm1lc3NhZ2UpfSkpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfRU5EOmU9TlQuZW5kTG9vcCgpLGJUKG4sZSksTlQubW9kZWxzLmFkZExvb3AoZSksTlQuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktTlQuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOmpUKHUsdCxNVC5ib3hNYXJnaW4sTVQuYm94TWFyZ2luK01ULmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBOVC5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1OVC5lbmRMb29wKCksdlQobixlLCJvcHQiLE1UKSxOVC5idW1wVmVydGljYWxQb3MoZS5zdG9weS1OVC5nZXRWZXJ0aWNhbFBvcygpKSxOVC5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6alQodSx0LE1ULmJveE1hcmdpbixNVC5ib3hNYXJnaW4rTVQuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIE5ULm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6alQodSx0LE1ULmJveE1hcmdpbitNVC5ib3hUZXh0TWFyZ2luLE1ULmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIE5ULmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBTay5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPU5ULmVuZExvb3AoKSx2VChuLGUsImFsdCIsTVQpLE5ULmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LU5ULmdldFZlcnRpY2FsUG9zKCkpLE5ULm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDpqVCh1LHQsTVQuYm94TWFyZ2luLE1ULmJveE1hcmdpbitNVC5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gTlQubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIFNrLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOmpUKHUsdCxNVC5ib3hNYXJnaW4rTVQuYm94VGV4dE1hcmdpbixNVC5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBOVC5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgU2sucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1OVC5lbmRMb29wKCksdlQobixlLCJwYXIiLE1UKSxOVC5idW1wVmVydGljYWxQb3MoZS5zdG9weS1OVC5nZXRWZXJ0aWNhbFBvcygpKSxOVC5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9TlQuZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9bCxmdW5jdGlvbih0LGUpe05ULmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1ZbS5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT16di5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLERUKE1UKSksbD11LmhlaWdodC9jO2UuaGVpZ2h0Kz1sLE5ULmJ1bXBWZXJ0aWNhbFBvcyhsKTt2YXIgaD1TVCgpO2gueD1uLGgueT1pKzEwLGgud2lkdGg9ci1uLGguY2xhc3M9Im1lc3NhZ2VUZXh0IixoLmR5PSIxZW0iLGgudGV4dD1hLGguZm9udEZhbWlseT1NVC5tZXNzYWdlRm9udEZhbWlseSxoLmZvbnRTaXplPU1ULm1lc3NhZ2VGb250U2l6ZSxoLmZvbnRXZWlnaHQ9TVQubWVzc2FnZUZvbnRXZWlnaHQsaC5hbmNob3I9TVQubWVzc2FnZUFsaWduLGgudmFsaWduPU1ULm1lc3NhZ2VBbGlnbixoLnRleHRNYXJnaW49TVQud3JhcFBhZGRpbmcsaC50c3Bhbj0hMSxhVCh0LGgpO3ZhciBmLGQscD11LmhlaWdodC0xMCx5PXUud2lkdGg7aWYobj09PXIpe2Q9TlQuZ2V0VmVydGljYWxQb3MoKStwLE1ULnJpZ2h0QW5nbGVzP2Y9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAgIi5jb25jYXQobiwiLCIpLmNvbmNhdChkLCIgSCAiKS5jb25jYXQobitNYXRoLm1heChNVC53aWR0aC8yLHkvMiksIiBWICIpLmNvbmNhdChkKzI1LCIgSCAiKS5jb25jYXQobikpOihwKz1NVC5ib3hNYXJnaW4sZD1OVC5nZXRWZXJ0aWNhbFBvcygpK3AsZj10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrbisiLCIrZCsiIEMgIisobis2MCkrIiwiKyhkLTEwKSsiICIrKG4rNjApKyIsIisoZCszMCkrIiAiK24rIiwiKyhkKzIwKSkpLHArPTMwO3ZhciBnPU1hdGgubWF4KHkvMixNVC53aWR0aC8yKTtOVC5pbnNlcnQobi1nLE5ULmdldFZlcnRpY2FsUG9zKCktMTArcCxyK2csTlQuZ2V0VmVydGljYWxQb3MoKSszMCtwKX1lbHNlIHArPU1ULmJveE1hcmdpbixkPU5ULmdldFZlcnRpY2FsUG9zKCkrcCwoZj10LmFwcGVuZCgibGluZSIpKS5hdHRyKCJ4MSIsbiksZi5hdHRyKCJ5MSIsZCksZi5hdHRyKCJ4MiIsciksZi5hdHRyKCJ5MiIsZCksTlQuaW5zZXJ0KG4sZC0xMCxyLGQpO289PT1Tay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxvPT09U2sucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8bz09PVNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlR8fG89PT1Tay5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4/KGYuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIiksZi5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMSIpKTpmLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUwIik7dmFyIG09IiI7TVQuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKG09KG09KG09d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZi5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLGYuYXR0cigic3Ryb2tlIiwibm9uZSIpLGYuc3R5bGUoImZpbGwiLCJub25lIiksbyE9PVNrLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRCYmbyE9PVNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUR8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiNhcnJvd2hlYWQpIiksbyE9PVNrLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9QT0lOVCYmbyE9PVNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlR8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiNmaWxsZWQtaGVhZCkiKSxvIT09U2sucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTJiZvIT09U2sucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Nyb3NzaGVhZCkiKSwoWmsuc2hvd1NlcXVlbmNlTnVtYmVycygpfHxNVC5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGYuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIsZCs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0TGVuZ3RoIiwiMTZweCIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KHMpKSxOVC5idW1wVmVydGljYWxQb3MocCksZS5oZWlnaHQrPXAsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxOVC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSl9KG4sYSksTlQubW9kZWxzLmFkZE1lc3NhZ2UoYSl9Y2F0Y2godCl7by5lcnJvcigiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlIix0KX19W1NrLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLFNrLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTixTay5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsU2sucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCxTay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsU2sucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxTay5wYXJzZXIueXkuTElORVRZUEUuU09MSURfUE9JTlQsU2sucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXModC50eXBlKSYmbCsrfSkpLE1ULm1pcnJvckFjdG9ycyYmKE5ULmJ1bXBWZXJ0aWNhbFBvcygyKk1ULmJveE1hcmdpbiksTFQobixyLGksTlQuZ2V0VmVydGljYWxQb3MoKSksTlQuYnVtcFZlcnRpY2FsUG9zKE1ULmJveE1hcmdpbiksY1QobixOVC5nZXRWZXJ0aWNhbFBvcygpKSk7dmFyIGg9SVQobixyLGkpLGY9TlQuZ2V0Qm91bmRzKCkuYm91bmRzO28uZGVidWcoIkZvciBsaW5lIGhlaWdodCBmaXggUXVlcnlpbmc6ICMiK2UrIiAuYWN0b3ItbGluZSIpLG91KCIjIitlKyIgLmFjdG9yLWxpbmUiKS5hdHRyKCJ5MiIsZi5zdG9weSk7dmFyIGQ9Zi5zdG9weS1mLnN0YXJ0eTtkPGgubWF4SGVpZ2h0JiYoZD1oLm1heEhlaWdodCk7dmFyIHA9ZCsyKk1ULmRpYWdyYW1NYXJnaW5ZO01ULm1pcnJvckFjdG9ycyYmKHA9cC1NVC5ib3hNYXJnaW4rTVQuYm90dG9tTWFyZ2luQWRqKTt2YXIgeT1mLnN0b3B4LWYuc3RhcnR4O3k8aC5tYXhXaWR0aCYmKHk9aC5tYXhXaWR0aCk7dmFyIGc9eSsyKk1ULmRpYWdyYW1NYXJnaW5YO3MmJm4uYXBwZW5kKCJ0ZXh0IikudGV4dChzKS5hdHRyKCJ4IiwoZi5zdG9weC1mLnN0YXJ0eCkvMi0yKk1ULmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLGp2KG4scCxnLE1ULnVzZU1heFdpZHRoKTt2YXIgbT1zPzQwOjA7bi5hdHRyKCJ2aWV3Qm94IixmLnN0YXJ0eC1NVC5kaWFncmFtTWFyZ2luWCsiIC0iKyhNVC5kaWFncmFtTWFyZ2luWSttKSsiICIrZysiICIrKHArbSkpLG8uZGVidWcoIm1vZGVsczoiLE5ULm1vZGVscyl9fTt2YXIgVVQ9big1NTM3KSxxVD1uLm4oVVQpO2Z1bmN0aW9uICRUKHQpe3JldHVybiAkVD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sJFQodCl9dmFyIEhUPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sV1Q9W10sVlQ9ZnVuY3Rpb24gdChlLG4scil7aWYoInJlbGF0aW9uIj09PW4uc3RtdCl0KGUsbi5zdGF0ZTEsITApLHQoZSxuLnN0YXRlMiwhMSk7ZWxzZSBpZigic3RhdGUiPT09bi5zdG10JiYiWypdIj09PW4uaWQmJihuLmlkPXI/ZS5pZCsiX3N0YXJ0IjplLmlkKyJfZW5kIixuLnN0YXJ0PXIpLG4uZG9jKXt2YXIgaT1bXSxhPTAsbz1bXTtmb3IoYT0wO2E8bi5kb2MubGVuZ3RoO2ErKylpZigiZGl2aWRlciI9PT1uLmRvY1thXS50eXBlKXt2YXIgcz1IVChuLmRvY1thXSk7cy5kb2M9SFQobyksaS5wdXNoKHMpLG89W119ZWxzZSBvLnB1c2gobi5kb2NbYV0pO2lmKGkubGVuZ3RoPjAmJm8ubGVuZ3RoPjApe3ZhciBjPXtzdG10OiJzdGF0ZSIsaWQ6TnYoKSx0eXBlOiJkaXZpZGVyIixkb2M6SFQobyl9O2kucHVzaChIVChjKSksbi5kb2M9aX1uLmRvYy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdChuLGUsITApfSkpfX0sR1Q9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0sWFQ9R1Qucm9vdCxaVD0wLFFUPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09WFQuc3RhdGVzW3RdP1hULnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KFhULnN0YXRlc1t0XS5kb2N8fChYVC5zdGF0ZXNbdF0uZG9jPW4pLFhULnN0YXRlc1t0XS50eXBlfHwoWFQuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihvLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZ0RSh0LHIudHJpbSgpKSwib2JqZWN0Ij09PSRUKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0RSh0LGUudHJpbSgpKX0pKSksaSYmKFhULnN0YXRlc1t0XS5ub3RlPWksWFQuc3RhdGVzW3RdLm5vdGUudGV4dD1ZbS5zYW5pdGl6ZVRleHQoWFQuc3RhdGVzW3RdLm5vdGUudGV4dCxadigpKSl9LEtUPWZ1bmN0aW9uKCl7WFQ9KEdUPXtyb290OntyZWxhdGlvbnM6W10sc3RhdGVzOnt9LGRvY3VtZW50czp7fX19KS5yb290LFhUPUdULnJvb3QsWlQ9MCxuRT1bXX0sSlQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKytaVCxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrWlQsbz0iZW5kIiksUVQocixhKSxRVChpLG8pLFhULnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpZbS5zYW5pdGl6ZVRleHQobixadigpKX0pfSx0RT1mdW5jdGlvbih0LGUpe3ZhciBuPVhULnN0YXRlc1t0XSxyPWU7IjoiPT09clswXSYmKHI9ci5zdWJzdHIoMSkudHJpbSgpKSxuLmRlc2NyaXB0aW9ucy5wdXNoKFltLnNhbml0aXplVGV4dChyLFp2KCkpKX0sZUU9MCxuRT1bXSxyRT0iVEIiO2NvbnN0IGlFPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLnN0YXRlfSxhZGRTdGF0ZTpRVCxjbGVhcjpLVCxnZXRTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gWFQuc3RhdGVzW3RdfSxnZXRTdGF0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gWFQuc3RhdGVzfSxnZXRSZWxhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gWFQucmVsYXRpb25zfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIG5FfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gckV9LGFkZFJlbGF0aW9uOkpULGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrZUV9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXtyRT10fSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigyKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOntBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxsb2dEb2N1bWVudHM6ZnVuY3Rpb24oKXtvLmluZm8oIkRvY3VtZW50cyA9ICIsR1QpfSxnZXRSb290RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIFdUfSxzZXRSb290RG9jOmZ1bmN0aW9uKHQpe28uaW5mbygiU2V0dGluZyByb290IGRvYyIsdCksV1Q9dH0sZ2V0Um9vdERvY1YyOmZ1bmN0aW9uKCl7cmV0dXJuIFZUKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOldUfSwhMCkse2lkOiJyb290Iixkb2M6V1R9fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxvLmluZm8oZSksS1QoKSxvLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmUVQodC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJkpUKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX07dmFyIGFFPXt9O2Z1bmN0aW9uIG9FKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIHNFLGNFPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPVp2KCkuc3RhdGUucGFkZGluZyxhPTIqWnYoKS5zdGF0ZS5wYWRkaW5nLG89dC5ub2RlKCkuZ2V0QkJveCgpLHM9by53aWR0aCxjPW8ueCx1PXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsWnYoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLFp2KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLGw9dS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK2EsaD1NYXRoLm1heChsLHMpO2g9PT1zJiYoaCs9YSk7dmFyIGY9dC5ub2RlKCkuZ2V0QkJveCgpO2UuZG9jLHI9Yy1pLGw+cyYmKHI9KHMtaCkvMitpKSxNYXRoLmFicyhjLWYueCk8aSYmbD5zJiYocj1jLShsLXMpLzIpO3ZhciBkPTEtWnYoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLGQpLmF0dHIoImNsYXNzIixuPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K1p2KCkuc3RhdGUudGV4dEhlaWdodCtadigpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksdS5hdHRyKCJ4IixyK2kpLGw8PXMmJnUuYXR0cigieCIsYysoaC1hKS8yLWwvMitpKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLFp2KCkuc3RhdGUudGl0bGVTaGlmdC1adigpLnN0YXRlLnRleHRIZWlnaHQtWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IiwzKlp2KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLFp2KCkuc3RhdGUucmFkaXVzKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHIpLmF0dHIoInkiLFp2KCkuc3RhdGUudGl0bGVTaGlmdC1adigpLnN0YXRlLnRleHRIZWlnaHQtWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCszKzIqWnYoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsWnYoKS5zdGF0ZS5yYWRpdXMpLHR9LHVFPWZ1bmN0aW9uKHQsZSl7ZS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTt2YXIgbj1lLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLFp2KCkuc3RhdGUucGFkZGluZykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0wLGE9ci5hcHBlbmQoInRleHQiKTthLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksYS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7dmFyIG8scz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxjPShzPXMucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoWW0ubGluZUJyZWFrUmVnZXgpLHU9MS4yNSpadigpLnN0YXRlLm5vdGVNYXJnaW4sbD1mdW5jdGlvbih0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG9FKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/b0UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KGMpO3RyeXtmb3IobC5zKCk7IShvPWwubigpKS5kb25lOyl7dmFyIGg9by52YWx1ZS50cmltKCk7aWYoaC5sZW5ndGg+MCl7dmFyIGY9YS5hcHBlbmQoInRzcGFuIik7Zi50ZXh0KGgpLDA9PT11JiYodSs9Zi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCksaSs9dSxmLmF0dHIoIngiLDArWnYoKS5zdGF0ZS5ub3RlTWFyZ2luKSxmLmF0dHIoInkiLDAraSsxLjI1Klp2KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm57dGV4dFdpZHRoOmEubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0Oml9fSh0LDAsMCxlLmFwcGVuZCgiZyIpKSxpPXIudGV4dFdpZHRoLGE9ci50ZXh0SGVpZ2h0O3JldHVybiBuLmF0dHIoImhlaWdodCIsYSsyKlp2KCkuc3RhdGUubm90ZU1hcmdpbiksbi5hdHRyKCJ3aWR0aCIsaSsyKlp2KCkuc3RhdGUubm90ZU1hcmdpbiksbn0sbEU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmlkLHI9e2lkOm4sbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxpPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLG4pLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpOyJzdGFydCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIsWnYoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLFp2KCkuc3RhdGUucGFkZGluZytadigpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIsWnYoKS5zdGF0ZS5wYWRkaW5nK1p2KCkuc3RhdGUuc2l6ZVVuaXQpfShpKSwiZW5kIj09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsWnYoKS5zdGF0ZS5zaXplVW5pdCtadigpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsWnYoKS5zdGF0ZS5wYWRkaW5nK1p2KCkuc3RhdGUuc2l6ZVVuaXQrWnYoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLFp2KCkuc3RhdGUucGFkZGluZytadigpLnN0YXRlLnNpemVVbml0K1p2KCkuc3RhdGUubWluaVBhZGRpbmcpLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLFp2KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixadigpLnN0YXRlLnBhZGRpbmcrWnYoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsWnYoKS5zdGF0ZS5wYWRkaW5nK1p2KCkuc3RhdGUuc2l6ZVVuaXQrMil9KGkpLCJmb3JrIiE9PWUudHlwZSYmImpvaW4iIT09ZS50eXBlfHxmdW5jdGlvbih0LGUpe3ZhciBuPVp2KCkuc3RhdGUuZm9ya1dpZHRoLHI9WnYoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGUucGFyZW50SWQpe3ZhciBpPW47bj1yLHI9aX10LmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIsbikuYXR0cigiaGVpZ2h0IixyKS5hdHRyKCJ4IixadigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLFp2KCkuc3RhdGUucGFkZGluZyl9KGksZSksIm5vdGUiPT09ZS50eXBlJiZ1RShlLm5vdGUudGV4dCxpKSwiZGl2aWRlciI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIsWnYoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIsMipadigpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCl9KGkpLCJkZWZhdWx0Ij09PWUudHlwZSYmMD09PWUuZGVzY3JpcHRpb25zLmxlbmd0aCYmZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixadigpLnN0YXRlLnRleHRIZWlnaHQrMipadigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsWnYoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCsyKlp2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCsyKlp2KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLFp2KCkuc3RhdGUucmFkaXVzKX0oaSxlKSwiZGVmYXVsdCI9PT1lLnR5cGUmJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipadigpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLFp2KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLFp2KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLFp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpadigpLnN0YXRlLnBhZGRpbmcrWnYoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK1p2KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqWnYoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KGUpO258fHIuYXR0cigiZHkiLFp2KCkuc3RhdGUudGV4dEhlaWdodCl9KGksdCxvKSxvPSExKSxhPSExfSkpO3ZhciBzPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLFp2KCkuc3RhdGUucGFkZGluZytyK1p2KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsWnYoKS5zdGF0ZS5wYWRkaW5nK3IrWnYoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGM9aS5ub2RlKCkuZ2V0QkJveCgpLHU9TWF0aC5tYXgoYy53aWR0aCxuLndpZHRoKTtzLmF0dHIoIngyIix1KzMqWnYoKS5zdGF0ZS5wYWRkaW5nKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFp2KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsdSsyKlp2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixjLmhlaWdodCtyKzIqWnYoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsWnYoKS5zdGF0ZS5yYWRpdXMpfShpLGUpO3ZhciBhLG89aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPW8ud2lkdGgrMipadigpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9by5oZWlnaHQrMipadigpLnN0YXRlLnBhZGRpbmcsYT1yLGFFW25dPWEscn0saEU9MDtVVC5wYXJzZXIueXk9aUU7dmFyIGZFPXt9LGRFPWZ1bmN0aW9uIHQoZSxuLHIsaSl7dmFyIGEscz1uZXcoYmIoKS5HcmFwaCkoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KSxjPSEwO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoInJlbGF0aW9uIj09PWVbYV0uc3RtdCl7Yz0hMTticmVha31yP3Muc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpjPzE6c0UuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmM/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpzLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmM/MTpzRS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Yz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSkscy5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGlFLmV4dHJhY3QoZSk7Zm9yKHZhciB1PWlFLmdldFN0YXRlcygpLGw9aUUuZ2V0UmVsYXRpb25zKCksaD1PYmplY3Qua2V5cyh1KSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPXVbaFtmXV07ciYmKGQucGFyZW50SWQ9cik7dmFyIHA9dm9pZCAwO2lmKGQuZG9jKXt2YXIgeT1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixkLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtwPXQoZC5kb2MseSxkLmlkLCFpKTt2YXIgZz0oeT1jRSh5LGQsaSkpLm5vZGUoKS5nZXRCQm94KCk7cC53aWR0aD1nLndpZHRoLHAuaGVpZ2h0PWcuaGVpZ2h0K3NFLnBhZGRpbmcvMixmRVtkLmlkXT17eTpzRS5jb21wb3NpdFRpdGxlU2l6ZX19ZWxzZSBwPWxFKG4sZCk7aWYoZC5ub3RlKXt2YXIgbT17ZGVzY3JpcHRpb25zOltdLGlkOmQuaWQrIi1ub3RlIixub3RlOmQubm90ZSx0eXBlOiJub3RlIn0sdj1sRShuLG0pOyJsZWZ0IG9mIj09PWQubm90ZS5wb3NpdGlvbj8ocy5zZXROb2RlKHAuaWQrIi1ub3RlIix2KSxzLnNldE5vZGUocC5pZCxwKSk6KHMuc2V0Tm9kZShwLmlkLHApLHMuc2V0Tm9kZShwLmlkKyItbm90ZSIsdikpLHMuc2V0UGFyZW50KHAuaWQscC5pZCsiLWdyb3VwIikscy5zZXRQYXJlbnQocC5pZCsiLW5vdGUiLHAuaWQrIi1ncm91cCIpfWVsc2Ugcy5zZXROb2RlKHAuaWQscCl9by5kZWJ1ZygiQ291bnQ9IixzLm5vZGVDb3VudCgpLHMpO3ZhciBiPTA7bC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZTtiKyssby5kZWJ1ZygiU2V0dGluZyBlZGdlIix0KSxzLnNldEVkZ2UodC5pZDEsdC5pZDIse3JlbGF0aW9uOnQsd2lkdGg6KGU9dC50aXRsZSxlP2UubGVuZ3RoKnNFLmZvbnRTaXplRmFjdG9yOjEpLGhlaWdodDpzRS5sYWJlbEhlaWdodCpZbS5nZXRSb3dzKHQudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrYil9KSksbWIoKS5sYXlvdXQocyksby5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixzLm5vZGVzKCkpO3ZhciBfPW4ubm9kZSgpO3Mubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1zLm5vZGUodCk/KG8ud2FybigiTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKSxhdSgiIyIrXy5pZCsiICMiK3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMikrIiwiKyhzLm5vZGUodCkueSsoZkVbdF0/ZkVbdF0ueTowKS1zLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpLGF1KCIjIitfLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrXy5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6by5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKX0pKTt2YXIgeD1fLmdldEJCb3goKTtzLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09cy5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkocy5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9enUoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoVnUpLGE9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixpKHIpKS5hdHRyKCJpZCIsImVkZ2UiK2hFKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKSxzPSIiO2lmKFp2KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgaUUucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBpRS5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgaUUucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBpRS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fShpRS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSkrIkVuZCkiKSx2b2lkIDAhPT1uLnRpdGxlKXtmb3IodmFyIGM9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx1PXp2LmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxsPXUueCxoPXUueSxmPVltLmdldFJvd3Mobi50aXRsZSksZD0wLHA9W10seT0wLGc9MCxtPTA7bTw9Zi5sZW5ndGg7bSsrKXt2YXIgdj1jLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChmW21dKS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixoK2QpLGI9di5ub2RlKCkuZ2V0QkJveCgpO2lmKHk9TWF0aC5tYXgoeSxiLndpZHRoKSxnPU1hdGgubWluKGcsYi54KSxvLmluZm8oYi54LGwsaCtkKSwwPT09ZCl7dmFyIF89di5ub2RlKCkuZ2V0QkJveCgpO2Q9Xy5oZWlnaHQsby5pbmZvKCJUaXRsZSBoZWlnaHQiLGQsaCl9cC5wdXNoKHYpfXZhciB4PWQqZi5sZW5ndGg7aWYoZi5sZW5ndGg+MSl7dmFyIHc9KGYubGVuZ3RoLTEpKmQqLjU7cC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmF0dHIoInkiLGgrZSpkLXcpfSkpLHg9ZCpmLmxlbmd0aH12YXIgaz1jLm5vZGUoKS5nZXRCQm94KCk7Yy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGwteS8yLVp2KCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixoLXgvMi1adigpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIix5K1p2KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix4K1p2KCkuc3RhdGUucGFkZGluZyksby5pbmZvKGspfWhFKyt9KG4scy5lZGdlKHQpLHMuZWRnZSh0KS5yZWxhdGlvbikpfSkpLHg9Xy5nZXRCQm94KCk7dmFyIHc9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHcud2lkdGg9eC53aWR0aCsyKnNFLnBhZGRpbmcsdy5oZWlnaHQ9eC5oZWlnaHQrMipzRS5wYWRkaW5nLG8uZGVidWcoIkRvYyByZW5kZXJlZCIsdyxzKSx3fTtjb25zdCBwRT1mdW5jdGlvbih0LGUpe3NFPVp2KCkuc3RhdGUsVVQucGFyc2VyLnl5LmNsZWFyKCksVVQucGFyc2VyLnBhcnNlKHQpLG8uZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG49YXUoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpLG5ldyhiYigpLkdyYXBoKSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPWlFLmdldFJvb3REb2MoKTtkRShyLG4sdm9pZCAwLCExKTt2YXIgaT1zRS5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCsyKmksYz1hLmhlaWdodCsyKmk7anYobixjLDEuNzUqcyxzRS51c2VNYXhXaWR0aCksbi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYS54LXNFLnBhZGRpbmcsIiAgIikuY29uY2F0KGEueS1zRS5wYWRkaW5nLCIgIikrcysiICIrYyl9O3ZhciB5RT17fSxnRT17fSxtRT1mdW5jdGlvbih0LGUsbixyKXtpZigicm9vdCIhPT1uLmlkKXt2YXIgaT0icmVjdCI7ITA9PT1uLnN0YXJ0JiYoaT0ic3RhcnQiKSwhMT09PW4uc3RhcnQmJihpPSJlbmQiKSwiZGVmYXVsdCIhPT1uLnR5cGUmJihpPW4udHlwZSksZ0Vbbi5pZF18fChnRVtuLmlkXT17aWQ6bi5pZCxzaGFwZTppLGRlc2NyaXB0aW9uOlltLnNhbml0aXplVGV4dChuLmlkLFp2KCkpLGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1zdGF0ZSJ9KSxuLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShnRVtuLmlkXS5kZXNjcmlwdGlvbik/KGdFW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIixnRVtuLmlkXS5kZXNjcmlwdGlvbi5wdXNoKG4uZGVzY3JpcHRpb24pKTpnRVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oZ0Vbbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLGdFW24uaWRdLmRlc2NyaXB0aW9uPT09bi5pZD9nRVtuLmlkXS5kZXNjcmlwdGlvbj1bbi5kZXNjcmlwdGlvbl06Z0Vbbi5pZF0uZGVzY3JpcHRpb249W2dFW24uaWRdLmRlc2NyaXB0aW9uLG4uZGVzY3JpcHRpb25dKTooZ0Vbbi5pZF0uc2hhcGU9InJlY3QiLGdFW24uaWRdLmRlc2NyaXB0aW9uPW4uZGVzY3JpcHRpb24pLGdFW24uaWRdLmRlc2NyaXB0aW9uPVltLnNhbml0aXplVGV4dE9yQXJyYXkoZ0Vbbi5pZF0uZGVzY3JpcHRpb24sWnYoKSkpLDE9PT1nRVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGgmJiJyZWN0V2l0aFRpdGxlIj09PWdFW24uaWRdLnNoYXBlJiYoZ0Vbbi5pZF0uc2hhcGU9InJlY3QiKSwhZ0Vbbi5pZF0udHlwZSYmbi5kb2MmJihvLmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgIixuLmlkLF9FKG4pKSxnRVtuLmlkXS50eXBlPSJncm91cCIsZ0Vbbi5pZF0uZGlyPV9FKG4pLGdFW24uaWRdLnNoYXBlPSJkaXZpZGVyIj09PW4udHlwZT8iZGl2aWRlciI6InJvdW5kZWRXaXRoVGl0bGUiLGdFW24uaWRdLmNsYXNzZXM9Z0Vbbi5pZF0uY2xhc3NlcysiICIrKHI/InN0YXRlZGlhZ3JhbS1jbHVzdGVyIHN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCI6InN0YXRlZGlhZ3JhbS1jbHVzdGVyIikpO3ZhciBhPXtsYWJlbFN0eWxlOiIiLHNoYXBlOmdFW24uaWRdLnNoYXBlLGxhYmVsVGV4dDpnRVtuLmlkXS5kZXNjcmlwdGlvbixjbGFzc2VzOmdFW24uaWRdLmNsYXNzZXMsc3R5bGU6IiIsaWQ6bi5pZCxkaXI6Z0Vbbi5pZF0uZGlyLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0iK3ZFLHR5cGU6Z0Vbbi5pZF0udHlwZSxwYWRkaW5nOjE1fTtpZihuLm5vdGUpe3ZhciBzPXtsYWJlbFN0eWxlOiIiLHNoYXBlOiJub3RlIixsYWJlbFRleHQ6bi5ub3RlLnRleHQsY2xhc3Nlczoic3RhdGVkaWFncmFtLW5vdGUiLHN0eWxlOiIiLGlkOm4uaWQrIi0tLS1ub3RlLSIrdkUsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLS0tLW5vdGUtIit2RSx0eXBlOmdFW24uaWRdLnR5cGUscGFkZGluZzoxNX0sYz17bGFiZWxTdHlsZToiIixzaGFwZToibm90ZUdyb3VwIixsYWJlbFRleHQ6bi5ub3RlLnRleHQsY2xhc3NlczpnRVtuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQrIi0tLS1wYXJlbnQiLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1wYXJlbnQtIit2RSx0eXBlOiJncm91cCIscGFkZGluZzowfTt2RSsrLHQuc2V0Tm9kZShuLmlkKyItLS0tcGFyZW50IixjKSx0LnNldE5vZGUocy5pZCxzKSx0LnNldE5vZGUobi5pZCxhKSx0LnNldFBhcmVudChuLmlkLG4uaWQrIi0tLS1wYXJlbnQiKSx0LnNldFBhcmVudChzLmlkLG4uaWQrIi0tLS1wYXJlbnQiKTt2YXIgdT1uLmlkLGw9cy5pZDsibGVmdCBvZiI9PT1uLm5vdGUucG9zaXRpb24mJih1PXMuaWQsbD1uLmlkKSx0LnNldEVkZ2UodSxsLHthcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZToiIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGNsYXNzZXM6InRyYW5zaXRpb24gbm90ZS1lZGdlIixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwifSl9ZWxzZSB0LnNldE5vZGUobi5pZCxhKX1lJiYicm9vdCIhPT1lLmlkJiYoby50cmFjZSgiU2V0dGluZyBub2RlICIsbi5pZCwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixlLmlkKSx0LnNldFBhcmVudChuLmlkLGUuaWQpKSxuLmRvYyYmKG8udHJhY2UoIkFkZGluZyBub2RlcyBjaGlsZHJlbiAiKSxiRSh0LG4sbi5kb2MsIXIpKX0sdkU9MCxiRT1mdW5jdGlvbih0LGUsbixyKXtvLnRyYWNlKCJpdGVtcyIsbiksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtpZigic3RhdGUiPT09bi5zdG10fHwiZGVmYXVsdCI9PT1uLnN0bXQpbUUodCxlLG4scik7ZWxzZSBpZigicmVsYXRpb24iPT09bi5zdG10KXttRSh0LGUsbi5zdGF0ZTEsciksbUUodCxlLG4uc3RhdGUyLHIpO3ZhciBpPXtpZDoiZWRnZSIrdkUsYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixsYWJlbDpZbS5zYW5pdGl6ZVRleHQobi5kZXNjcmlwdGlvbixadigpKSxhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLHZFKSx2RSsrfX0pKX0sX0U9ZnVuY3Rpb24odCxlKXt2YXIgbj1lfHwiVEIiO2lmKHQuZG9jKWZvcih2YXIgcj0wO3I8dC5kb2MubGVuZ3RoO3IrKyl7dmFyIGk9dC5kb2Nbcl07ImRpciI9PT1pLnN0bXQmJihuPWkudmFsdWUpfXJldHVybiBufTtjb25zdCB4RT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXlFW2Vbbl1dPXRbZVtuXV19O2Z1bmN0aW9uIHdFKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBrRSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBrRSh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1ufHwiU2V0Ij09PW4/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP2tFKHQsZSk6dm9pZCAwfX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24ga0UodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgVEU9IiIsRUU9IiIsQ0U9W10sU0U9W10sQUU9W10sTUU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ITAsZT0wO2U8QUUubGVuZ3RoO2UrKylBRVtlXS5wcm9jZXNzZWQsdD10JiZBRVtlXS5wcm9jZXNzZWQ7cmV0dXJuIHR9O2NvbnN0IE5FPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7YUMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBadigpLmpvdXJuZXl9LGNsZWFyOmZ1bmN0aW9uKCl7Q0UubGVuZ3RoPTAsU0UubGVuZ3RoPTAsRUU9IiIsVEU9IiIsQUUubGVuZ3RoPTB9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe1RFPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIFRFfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe0VFPXQsQ0UucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gQ0V9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PU1FKCksZT0wOyF0JiZlPDEwMDspdD1NRSgpLGUrKztyZXR1cm4gU0UucHVzaC5hcHBseShTRSxBRSksU0V9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLHI9MCxpPVtdOzE9PT1uLmxlbmd0aD8ocj1OdW1iZXIoblswXSksaT1bXSk6KHI9TnVtYmVyKG5bMF0pLGk9blsxXS5zcGxpdCgiLCIpKTt2YXIgYT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkpLG89e3NlY3Rpb246RUUsdHlwZTpFRSxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6cn07QUUucHVzaChvKX0sYWRkVGFza09yZzpmdW5jdGlvbih0KXt2YXIgZT17c2VjdGlvbjpFRSx0eXBlOkVFLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O1NFLnB1c2goZSl9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiB0PVtdLFNFLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGVvcGxlJiZ0LnB1c2guYXBwbHkodCx3RShlLnBlb3BsZSkpfSkpLHdFKG5ldyBTZXQodCkpLnNvcnQoKTt2YXIgdH19O3ZhciBERT1uKDY3NDEpLE9FPW4ubihERSksQkU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sTEU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIG4uYXR0cigiY3giLGUuY3gpLG4uYXR0cigiY3kiLGUuY3kpLG4uYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxJRT0tMSxSRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpO2NvbnN0IEZFPUxFLFBFPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9e3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsQkUocixpKSxSRShuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSxqRT1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sWUU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPWUueCtuLndpZHRoLzIscz10LmFwcGVuZCgiZyIpO0lFKysscy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK0lFKS5hdHRyKCJ4MSIsbykuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG8pLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxyPXMsaT17Y3g6byxjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4KS5hdHRyKCJjeSIsaS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKGE9ci5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaS5jeC01KS5hdHRyKCJjeSIsaS5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixpLmN4KzUpLmF0dHIoImN5IixpLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9SXUoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjMpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLmN4KyIsIisoaS5jeSsyKSsiKSIpfShhKTppLnNjb3JlPDM/ZnVuY3Rpb24odCl7dmFyIGU9SXUoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqNSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kuY3grIiwiKyhpLmN5KzcpKyIpIil9KGEpOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGkuY3gtNSkuYXR0cigieTEiLGkuY3krNykuYXR0cigieDIiLGkuY3grNSkuYXR0cigieTIiLGkuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX0oYSk7dmFyIGM9e3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfTtjLng9ZS54LGMueT1lLnksYy5maWxsPWUuZmlsbCxjLndpZHRoPW4ud2lkdGgsYy5oZWlnaHQ9bi5oZWlnaHQsYy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxjLnJ4PTMsYy5yeT0zLEJFKHMsYyk7dmFyIHU9ZS54KzE0O2UucGVvcGxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuYWN0b3JzW3RdLmNvbG9yLHI9e2N4OnUsY3k6ZS55LHI6NyxmaWxsOm4sc3Ryb2tlOiIjMDAwIix0aXRsZTp0LHBvczplLmFjdG9yc1t0XS5wb3NpdGlvbn07TEUocyxyKSx1Kz0xMH0pKSxSRShuKShlLnRhc2sscyxjLngsYy55LGMud2lkdGgsYy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sbixlLmNvbG91cil9O0RFLnBhcnNlci55eT1ORTt2YXIgekU9e30sVUU9WnYoKS5qb3VybmV5LHFFPVp2KCkuam91cm5leS5sZWZ0TWFyZ2luLCRFPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1adigpLmpvdXJuZXksYT10aGlzLG89MDt0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bysrO3ZhciBjPWEuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbysxO2EudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChzLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KSxhLnVwZGF0ZVZhbCgkRS5kYXRhLCJzdGFydHgiLHQtYyppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoJEUuZGF0YSwic3RvcHgiLG4rYyppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKCRFLmRhdGEsInN0YXJ0eSIsZS1jKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbCgkRS5kYXRhLCJzdG9weSIscitjKmkuYm94TWFyZ2luLE1hdGgubWF4KX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoJEUuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCgkRS5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKCRFLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCgkRS5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEhFPVVFLnNlY3Rpb25GaWxscyxXRT1VRS5zZWN0aW9uQ29sb3Vycztjb25zdCBWRT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtVRVtlXT10W2VdfSkpfSxHRT1mdW5jdGlvbih0LGUpe3ZhciBuPVp2KCkuam91cm5leTtERS5wYXJzZXIueXkuY2xlYXIoKSxERS5wYXJzZXIucGFyc2UodCsiXG4iKSwkRS5pbml0KCk7dmFyIHI9YXUoIiMiK2UpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksci5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIik7dmFyIGk9REUucGFyc2VyLnl5LmdldFRhc2tzKCksYT1ERS5wYXJzZXIueXkuZ2V0VGl0bGUoKSxvPURFLnBhcnNlci55eS5nZXRBY3RvcnMoKTtmb3IodmFyIHMgaW4gekUpZGVsZXRlIHpFW3NdO3ZhciBjPTA7by5mb3JFYWNoKChmdW5jdGlvbih0KXt6RVt0XT17Y29sb3I6bi5hY3RvckNvbG91cnNbYyVuLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOmN9LGMrK30pKSxmdW5jdGlvbih0KXt2YXIgZT1adigpLmpvdXJuZXksbj02MDtPYmplY3Qua2V5cyh6RSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9ekVbcl0uY29sb3IsYT17Y3g6MjAsY3k6bixyOjcsZmlsbDppLHN0cm9rZToiIzAwMCIscG9zOnpFW3JdLnBvc2l0aW9ufTtGRSh0LGEpO3ZhciBvPXt4OjQwLHk6bis3LGZpbGw6IiM2NjYiLHRleHQ6cix0ZXh0TWFyZ2luOjV8ZS5ib3hUZXh0TWFyZ2lufTtqRSh0LG8pLG4rPTIwfSkpfShyKSwkRS5pbnNlcnQoMCwwLHFFLDUwKk9iamVjdC5rZXlzKHpFKS5sZW5ndGgpLGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9WnYoKS5qb3VybmV5LGk9IiIsYT1uKygyKnIuaGVpZ2h0K3IuZGlhZ3JhbU1hcmdpblkpLG89MCxzPSIjQ0NDIixjPSJibGFjayIsdT0wLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGg9ZVtsXTtpZihpIT09aC5zZWN0aW9uKXtzPUhFW28lSEUubGVuZ3RoXSx1PW8lSEUubGVuZ3RoLGM9V0VbbyVXRS5sZW5ndGhdO3ZhciBmPXt4Omwqci50YXNrTWFyZ2luK2wqci53aWR0aCtxRSx5OjUwLHRleHQ6aC5zZWN0aW9uLGZpbGw6cyxudW06dSxjb2xvdXI6Y307UEUodCxmLHIpLGk9aC5zZWN0aW9uLG8rK312YXIgZD1oLnBlb3BsZS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpFW2VdJiYodFtlXT16RVtlXSksdH0pLHt9KTtoLng9bCpyLnRhc2tNYXJnaW4rbCpyLndpZHRoK3FFLGgueT1hLGgud2lkdGg9ci5kaWFncmFtTWFyZ2luWCxoLmhlaWdodD1yLmRpYWdyYW1NYXJnaW5ZLGguY29sb3VyPWMsaC5maWxsPXMsaC5udW09dSxoLmFjdG9ycz1kLFlFKHQsaCxyKSwkRS5pbnNlcnQoaC54LGgueSxoLngraC53aWR0aCtyLnRhc2tNYXJnaW4sNDUwKX19KHIsaSwwKTt2YXIgdT0kRS5nZXRCb3VuZHMoKTthJiZyLmFwcGVuZCgidGV4dCIpLnRleHQoYSkuYXR0cigieCIscUUpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTt2YXIgbD11LnN0b3B5LXUuc3RhcnR5KzIqbi5kaWFncmFtTWFyZ2luWSxoPXFFK3Uuc3RvcHgrMipuLmRpYWdyYW1NYXJnaW5YO2p2KHIsbCxoLG4udXNlTWF4V2lkdGgpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHFFKS5hdHRyKCJ5MSIsNCpuLmhlaWdodCkuYXR0cigieDIiLGgtcUUtNCkuYXR0cigieTIiLDQqbi5oZWlnaHQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7dmFyIGY9YT83MDowO3IuYXR0cigidmlld0JveCIsIiIuY29uY2F0KHUuc3RhcnR4LCIgLTI1ICIpLmNvbmNhdChoLCIgIikuY29uY2F0KGwrZikpLHIuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxyLmF0dHIoImhlaWdodCIsbCtmKzI1KX07dmFyIFhFPXt9O2NvbnN0IFpFPWZ1bmN0aW9uKHQpe3JldHVybiJnLmNsYXNzR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICBmb250LXNpemU6IDEwcHg7XG5cbiAgLnRpdGxlIHtcbiAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICB9XG5cbn1cblxuLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG59XG4ubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7XG4gIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbn1cblxuLmNsYXNzVGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuXG4uZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2U6IDE7XG59XG5cbmcuY2xpY2thYmxlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5nLmNsYXNzR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuY2xhc3NHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmNsYXNzTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmNsYXNzTGFiZWwgLmxhYmVsIHtcbiAgZmlsbDogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbi5yZWxhdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLmRhc2hlZC1saW5le1xuICBzdHJva2UtZGFzaGFycmF5OiAzO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuIil9LFFFPWZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBjb2xvcjogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jbHVzdGVyQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jbHVzdGVyQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSxLRT1mdW5jdGlvbih0KXtyZXR1cm4iXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogIi5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICB9XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuc3RhdGVHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4udHJhbnNpdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7XG4gIGZpbGw6ICNlMGUwZTA7XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGUtbm90ZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuXG4gIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJhY2tncm91bmRDb2xvciwiO1xuICBvcGFjaXR5OiAwLjU7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVMYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgLmZvcmstam9pbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmlubmVyRW5kQmFja2dyb3VuZCwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmQsIjtcbiAgLy8gc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUJrZ3x8dC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cbi5ub2RlIHBvbHlnb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiOztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgcng6MDtcbiAgcnk6MDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4ubm90ZS1lZGdlIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogNTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHJ4OiAwO1xuICByeTogMDtcbn1cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG4uc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwge1xuICBjb2xvcjogcmVkOyAvLyAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cbiIpfTt2YXIgSkU9e2Zsb3djaGFydDpRRSwiZmxvd2NoYXJ0LXYyIjpRRSxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdG9yUG9wdXBNZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnVQYW5lbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gICAgYm94LXNoYWRvdzogMHB4IDhweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMik7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTtcbn1cbiAgLmFjdG9yLW1hbiBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yQm9yZGVyLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0b3JCa2csIjtcbiAgfVxuICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5hY3RvckJvcmRlciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cbiIpfSxnYW50dDpmdW5jdGlvbih0KXtyZXR1cm4nXG4gIC5tZXJtYWlkLW1haW4tZm9udCB7XG4gICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiAgLmV4Y2x1ZGUtcmFuZ2Uge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuZXhjbHVkZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ncmlkQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICAgIHRleHQge1xuICAgICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRvZGF5TGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAvLyAudGFza1RleHQ6bm90KFtmb250LXNpemVdKSB7XG4gIC8vICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIC8vIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICB9XG5cbiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqL1xuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuICAudGFza1RleHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovXG5cbiAgLnRhc2tUZXh0MCxcbiAgLnRhc2tUZXh0MSxcbiAgLnRhc2tUZXh0MixcbiAgLnRhc2tUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDb2xvciwiO1xuICB9XG5cbiAgLnRhc2swLFxuICAudGFzazEsXG4gIC50YXNrMixcbiAgLnRhc2szIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTAsXG4gIC50YXNrVGV4dE91dHNpZGUyXG4gIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTEsXG4gIC50YXNrVGV4dE91dHNpZGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cblxuICAvKiBBY3RpdmUgdGFzayAqL1xuXG4gIC5hY3RpdmUwLFxuICAuYWN0aXZlMSxcbiAgLmFjdGl2ZTIsXG4gIC5hY3RpdmUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2ZVRleHQwLFxuICAuYWN0aXZlVGV4dDEsXG4gIC5hY3RpdmVUZXh0MixcbiAgLmFjdGl2ZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIENvbXBsZXRlZCB0YXNrICovXG5cbiAgLmRvbmUwLFxuICAuZG9uZTEsXG4gIC5kb25lMixcbiAgLmRvbmUzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVUZXh0MCxcbiAgLmRvbmVUZXh0MSxcbiAgLmRvbmVUZXh0MixcbiAgLmRvbmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqL1xuXG4gIC5jcml0MCxcbiAgLmNyaXQxLFxuICAuY3JpdDIsXG4gIC5jcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jcml0QmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuYWN0aXZlQ3JpdDAsXG4gIC5hY3RpdmVDcml0MSxcbiAgLmFjdGl2ZUNyaXQyLFxuICAuYWN0aXZlQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVDcml0MCxcbiAgLmRvbmVDcml0MSxcbiAgLmRvbmVDcml0MixcbiAgLmRvbmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gIH1cblxuICAubWlsZXN0b25lIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7XG4gIH1cblxuICAubWlsZXN0b25lVGV4dCB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gIC5kb25lQ3JpdFRleHQwLFxuICAuZG9uZUNyaXRUZXh0MSxcbiAgLmRvbmVDcml0VGV4dDIsXG4gIC5kb25lQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuYWN0aXZlQ3JpdFRleHQwLFxuICAuYWN0aXZlQ3JpdFRleHQxLFxuICAuYWN0aXZlQ3JpdFRleHQyLFxuICAuYWN0aXZlQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAudGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIiAgICA7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiIpfSxjbGFzc0RpYWdyYW06WkUsImNsYXNzRGlhZ3JhbS12MiI6WkUsY2xhc3M6WkUsc3RhdGVEaWFncmFtOktFLHN0YXRlOktFLGdpdDpmdW5jdGlvbigpe3JldHVybiJcbiAgLmNvbW1pdC1pZCxcbiAgLmNvbW1pdC1tc2csXG4gIC5icmFuY2gtbGFiZWwge1xuICAgIGZpbGw6IGxpZ2h0Z3JleTtcbiAgICBjb2xvcjogbGlnaHRncmV5O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4ifSxpbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LHBpZTpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5waWVDaXJjbGV7XG4gICAgc3Ryb2tlOiAiLmNvbmNhdCh0LnBpZVN0cm9rZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoIDogIikuY29uY2F0KHQucGllU3Ryb2tlV2lkdGgsIjtcbiAgICBvcGFjaXR5IDogIikuY29uY2F0KHQucGllT3BhY2l0eSwiO1xuICB9XG4gIC5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRTaXplLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllVGl0bGVUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVTZWN0aW9uVGV4dENvbG9yLCI7XG4gICAgZm9udC1zaXplOiIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0U2l6ZSwiO1xuICAgIC8vIGZpbGw6IHdoaXRlO1xuICB9XG4gIC5sZWdlbmQgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dENvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZUxlZ2VuZFRleHRTaXplLCI7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveE9kZCB7XG4gICAgZmlsbDogI2ZmZmZmZjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAjZjJmMmYyO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgIikuY29uY2F0KHQuZmFjZUNvbG9yPyJmaWxsOiAiLmNvbmNhdCh0LmZhY2VDb2xvcik6ImZpbGw6ICNGRkY4REMiLCI7XG4gICAgc3Ryb2tlOiAjOTk5O1xuICB9XG5cbiAgLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hcnJvd2hlYWRDb2xvciwiO1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAiKS5jb25jYXQodC5ib3JkZXIyLCI7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgfVxuXG4gIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTEpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUyKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMyk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTQpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU1KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNik6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTcpOiIiLCI7XG4gIH1cblxuICAuYWN0b3ItMCB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IwPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMCk6IiIsIjtcbiAgfVxuICAuYWN0b3ItMSB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IxPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMSk6IiIsIjtcbiAgfVxuICAuYWN0b3ItMiB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IyPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMik6IiIsIjtcbiAgfVxuICAuYWN0b3ItMyB7XG4gICAgIikuY29uY2F0KHQuYWN0b3IzPyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yMyk6IiIsIjtcbiAgfVxuICAuYWN0b3ItNCB7XG4gICAgIikuY29uY2F0KHQuYWN0b3I0PyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yNCk6IiIsIjtcbiAgfVxuICAuYWN0b3ItNSB7XG4gICAgIikuY29uY2F0KHQuYWN0b3I1PyJmaWxsOiAiLmNvbmNhdCh0LmFjdG9yNSk6IiIsIjtcbiAgfVxuXG4gIH1cbiIpfSxyZXF1aXJlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4iXG5cbiAgbWFya2VyIHtcbiAgICBmaWxsOiAiLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgfVxuXG4gIG1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LmZvbnRTaXplLCI7XG4gIH1cblxuICAucmVxQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJhY2tncm91bmQsIjtcbiAgICBmaWxsLW9wYWNpdHk6IDEwMCU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlckNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlclNpemUsIjtcbiAgfVxuICBcbiAgLnJlcVRpdGxlLCAucmVxTGFiZWx7XG4gICAgZmlsbDogICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50VGV4dENvbG9yLCI7XG4gIH1cbiAgLnJlcUxhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgfVxuXG4gIC5yZXEtdGl0bGUtbGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlckNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAiKS5jb25jYXQodC5yZXF1aXJlbWVudEJvcmRlclNpemUsIjtcbiAgfVxuICAucmVsYXRpb25zaGlwTGluZSB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5yZWxhdGlvbkNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMYWJlbCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucmVsYXRpb25MYWJlbENvbG9yLCI7XG4gIH1cblxuIil9fTtmdW5jdGlvbiB0Qyh0KXtyZXR1cm4gdEM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHRDKHQpfXZhciBlQz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybihlPShlPWUucmVwbGFjZSgv76yCwrDCsC9nLChmdW5jdGlvbigpe3JldHVybiImIyJ9KSkpLnJlcGxhY2UoL++sgsKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYifSkpKS5yZXBsYWNlKC/CtsOfL2csKGZ1bmN0aW9uKCl7cmV0dXJuIjsifSkpfSxuQz17fTtmdW5jdGlvbiByQyh0KXt2YXIgZTtXdyh0LmdpdCksQngodC5mbG93Y2hhcnQpLFJ4KHQuZmxvd2NoYXJ0KSx2b2lkIDAhPT10LnNlcXVlbmNlRGlhZ3JhbSYmelQuc2V0Q29uZihPdih0LnNlcXVlbmNlLHQuc2VxdWVuY2VEaWFncmFtKSkselQuc2V0Q29uZih0LnNlcXVlbmNlKSx0LmdhbnR0LExiKHQuY2xhc3MpLHQuc3RhdGUseEUodC5zdGF0ZSksSncodC5jbGFzcyksUF8odC5lciksVkUodC5qb3VybmV5KSxFayh0LnJlcXVpcmVtZW50KSxlPXQuY2xhc3MsT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7WEVbdF09ZVt0XX0pKX12YXIgaUM9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe0p2KCk7dmFyIGk9ZSxhPXp2LmRldGVjdEluaXQoaSk7YSYmS3YoYSk7dmFyIHM9WnYoKTtpZihlLmxlbmd0aD5zLm1heFRleHRTaXplJiYoaT0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIpLHZvaWQgMCE9PXIpci5pbm5lckhUTUw9IiIsYXUocikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrcy5mb250RmFtaWx5KS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIix0KS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikuYXBwZW5kKCJnIik7ZWxzZXt2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtjJiZjLnJlbW92ZSgpO3ZhciB1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkIit0KTt1JiZ1LnJlbW92ZSgpLGF1KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKX13aW5kb3cudHh0PWksaT1pLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKS5yZXBsYWNlKC9jbGFzc0RlZi4qOlxTKiMuKjsvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSl9KSkucmVwbGFjZSgvI1x3KzsvZywoZnVuY3Rpb24odCl7dmFyIGU9dC5zdWJzdHJpbmcoMSx0Lmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3QoZSk/Iu+sgsKwwrAiK2UrIsK2w58iOiLvrILCsCIrZSsiwrbDnyJ9KSk7dmFyIGw9YXUoIiNkIit0KS5ub2RlKCksaD16di5kZXRlY3RUeXBlKGkscyksZj1sLmZpcnN0Q2hpbGQsZD1mLmZpcnN0Q2hpbGQscD0iIjtpZih2b2lkIDAhPT1zLnRoZW1lQ1NTJiYocCs9IlxuIi5jb25jYXQocy50aGVtZUNTUykpLHZvaWQgMCE9PXMuZm9udEZhbWlseSYmKHArPSJcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAiLmNvbmNhdChzLmZvbnRGYW1pbHksIn0iKSksdm9pZCAwIT09cy5hbHRGb250RmFtaWx5JiYocCs9IlxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAiLmNvbmNhdChzLmFsdEZvbnRGYW1pbHksIn0iKSksImZsb3djaGFydCI9PT1ofHwiZmxvd2NoYXJ0LXYyIj09PWh8fCJncmFwaCI9PT1oKXt2YXIgeT1mdW5jdGlvbih0KXtvLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLGZ4LmNsZWFyKCk7dHJ5e3ZhciBlPXB4KCkucGFyc2VyO3JldHVybiBlLnl5PWZ4LGUucGFyc2UodCksZnguZ2V0Q2xhc3NlcygpfWNhdGNoKHQpe3JldHVybn19KGkpLGc9cy5odG1sTGFiZWxzfHxzLmZsb3djaGFydC5odG1sTGFiZWxzO2Zvcih2YXIgbSBpbiB5KWc/KHArPSJcbi4iLmNvbmNhdChtLCIgPiAqIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSxwKz0iXG4uIi5jb25jYXQobSwiIHNwYW4geyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKToocCs9IlxuLiIuY29uY2F0KG0sIiBwYXRoIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSxwKz0iXG4uIi5jb25jYXQobSwiIHJlY3QgeyAiKS5jb25jYXQoeVttXS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHArPSJcbi4iLmNvbmNhdChtLCIgcG9seWdvbiB7ICIpLmNvbmNhdCh5W21dLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikscCs9IlxuLiIuY29uY2F0KG0sIiBlbGxpcHNlIHsgIikuY29uY2F0KHlbbV0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSxwKz0iXG4uIi5jb25jYXQobSwiIGNpcmNsZSB7ICIpLmNvbmNhdCh5W21dLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikseVttXS50ZXh0U3R5bGVzJiYocCs9IlxuLiIuY29uY2F0KG0sIiB0c3BhbiB7ICIpLmNvbmNhdCh5W21dLnRleHRTdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKSl9dmFyIHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaW0oRW0oIiIuY29uY2F0KHQsInsiKS5jb25jYXQoZSwifSIpKSxhbSl9KCIjIi5jb25jYXQodCksZnVuY3Rpb24odCxlLG4pe3JldHVybiIge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdChuLmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdChuLmZvbnRTaXplLCI7XG4gICAgZmlsbDogIikuY29uY2F0KG4udGV4dENvbG9yLCJcbiAgfVxuXG4gIC8qIENsYXNzZXMgY29tbW9uIGZvciBtdWx0aXBsZSBkaWFncmFtcyAqL1xuXG4gIC5lcnJvci1pY29uIHtcbiAgICBmaWxsOiAiKS5jb25jYXQobi5lcnJvckJrZ0NvbG9yLCI7XG4gIH1cbiAgLmVycm9yLXRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmVycm9yVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5lcnJvclRleHRDb2xvciwiO1xuICB9XG5cbiAgLmVkZ2UtdGhpY2tuZXNzLW5vcm1hbCB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cbiAgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDMuNXB4XG4gIH1cbiAgLmVkZ2UtcGF0dGVybi1zb2xpZCB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMDtcbiAgfVxuXG4gIC5lZGdlLXBhdHRlcm4tZGFzaGVke1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDM7XG4gIH1cbiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7XG4gIH1cblxuICAubWFya2VyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG4gIC5tYXJrZXIuY3Jvc3Mge1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gIH1cblxuICBzdmcge1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICB9XG5cbiAgIikuY29uY2F0KEpFW3RdKG4pLCJcblxuICAiKS5jb25jYXQoZSwiXG4iKX0oaCxwLHMudGhlbWVWYXJpYWJsZXMpKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Yi5pbm5lckhUTUw9IiMiLmNvbmNhdCh0LCIgIikrdixmLmluc2VydEJlZm9yZShiLGQpO3RyeXtzd2l0Y2goaCl7Y2FzZSJnaXQiOnMuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLFd3KHMuZ2l0KSxmdW5jdGlvbih0LGUsbil7dHJ5e3ZhciByPVJ3KCkucGFyc2VyO3IueXk9Qncsci55eS5jbGVhcigpLG8uZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0KyJcbiIsImlkOiIsZSxuKSxyLnBhcnNlKHQrIlxuIiksUHc9T2JqZWN0LmFzc2lnbihQdyxqdyxCdy5nZXRPcHRpb25zKCkpLG8uZGVidWcoImVmZmVjdGl2ZSBvcHRpb25zIixQdyk7dmFyIGk9QncuZ2V0RGlyZWN0aW9uKCk7Rnc9QncuZ2V0Q29tbWl0cygpO3ZhciBhPUJ3LmdldEJyYW5jaGVzQXNPYmpBcnJheSgpOyJCVCI9PT1pJiYoUHcubm9kZUxhYmVsLng9YS5sZW5ndGgqUHcuYnJhbmNoT2Zmc2V0LFB3Lm5vZGVMYWJlbC53aWR0aD0iMTAwJSIsUHcubm9kZUxhYmVsLnk9LTIqUHcubm9kZVJhZGl1cyk7dmFyIHM9YXUoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7Zm9yKHZhciBjIGluIGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJnIikuYXR0cigiaWQiLCJkZWYtY29tbWl0IikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIixQdy5ub2RlUmFkaXVzKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLHQuc2VsZWN0KCIjZGVmLWNvbW1pdCIpLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIixQdy5ub2RlTGFiZWwud2lkdGgpLmF0dHIoImhlaWdodCIsUHcubm9kZUxhYmVsLmhlaWdodCkuYXR0cigieCIsUHcubm9kZUxhYmVsLngpLmF0dHIoInkiLFB3Lm5vZGVMYWJlbC55KS5hdHRyKCJjbGFzcyIsIm5vZGUtbGFiZWwiKS5hdHRyKCJyZXF1aXJlZEZlYXR1cmVzIiwiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5IikuYXBwZW5kKCJwIikuaHRtbCgiIil9KHMpLEx3PTEsYSl7dmFyIHU9YVtjXTskdyhzLHUuY29tbWl0LmlkLGEsaSksSHcocyx1LmNvbW1pdCxpKSxMdysrfXMuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24oKXtyZXR1cm4iQlQiPT09aT9PYmplY3Qua2V5cyhGdykubGVuZ3RoKlB3Lm5vZGVTcGFjaW5nOihhLmxlbmd0aCsxKSpQdy5icmFuY2hPZmZzZXR9KSl9Y2F0Y2godCl7by5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGdpdGdyYXBoIiksby5lcnJvcih0Lm1lc3NhZ2UpfX0oaSx0LCExKTticmVhaztjYXNlImZsb3djaGFydCI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsQngocy5mbG93Y2hhcnQpLEx4KGksdCk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQtdjIiOnMuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLFJ4KHMuZmxvd2NoYXJ0KSxGeChpLHQpO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOnMuc2VxdWVuY2UuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUscy5zZXF1ZW5jZURpYWdyYW0/KHpULnNldENvbmYoT2JqZWN0LmFzc2lnbihzLnNlcXVlbmNlLHMuc2VxdWVuY2VEaWFncmFtKSksY29uc29sZS5lcnJvcigiYG1lcm1haWQgY29uZmlnLnNlcXVlbmNlRGlhZ3JhbWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29uZmlnLnNlcXVlbmNlYC4gUGxlYXNlIHVwZGF0ZSB5b3VyIG1lcm1haWQgY29uZmlnLiIpKTp6VC5zZXRDb25mKHMuc2VxdWVuY2UpLHpULmRyYXcoaSx0KTticmVhaztjYXNlImdhbnR0IjpzLmdhbnR0LmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLHMuZ2FudHQsX3coaSx0KTticmVhaztjYXNlImNsYXNzIjpzLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLExiKHMuY2xhc3MpLEliKGksdCk7YnJlYWs7Y2FzZSJjbGFzc0RpYWdyYW0iOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7VF9bZV09dFtlXX0pKX0ocy5jbGFzcyksZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgY2xhc3MiKSx5Yi5jbGVhcigpLF9iLnBhcnNlci5wYXJzZSh0KTt2YXIgbj1adigpLmZsb3djaGFydDtvLmluZm8oImNvbmZpZzoiLG4pO3ZhciByPW4ubm9kZVNwYWNpbmd8fDUwLGk9bi5yYW5rU3BhY2luZ3x8NTAsYT1uZXcoYmIoKS5HcmFwaCkoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp5Yi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOnIscmFua3NlcDppLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLHM9eWIuZ2V0Q2xhc3NlcygpLGM9eWIuZ2V0UmVsYXRpb25zKCk7by5pbmZvKGMpLGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7by5pbmZvKCJrZXlzOiIsbiksby5pbmZvKHQpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9dFtuXSxpPSIiO3IuY3NzQ2xhc3Nlcy5sZW5ndGg+MCYmKGk9aSsiICIrci5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7dmFyIGEscz17bGFiZWxTdHlsZToiIn0sYz12b2lkIDAhPT1yLnRleHQ/ci50ZXh0OnIuaWQ7ci50eXBlLGE9ImNsYXNzX2JveCIsZS5zZXROb2RlKHIuaWQse2xhYmVsU3R5bGU6cy5sYWJlbFN0eWxlLHNoYXBlOmEsbGFiZWxUZXh0OmMsY2xhc3NEYXRhOnIscng6MCxyeTowLGNsYXNzOmksc3R5bGU6cy5zdHlsZSxpZDpyLmlkLGRvbUlkOnIuZG9tSWQsaGF2ZUNhbGxiYWNrOnIuaGF2ZUNhbGxiYWNrLGxpbms6ci5saW5rLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOlp2KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxvLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTphLGxhYmVsVGV4dDpjLHJ4OjAscnk6MCxjbGFzczppLHN0eWxlOnMuc3R5bGUsaWQ6ci5pZCx3aWR0aDoiZ3JvdXAiPT09ci50eXBlPzUwMDp2b2lkIDAsdHlwZTpyLnR5cGUscGFkZGluZzpadigpLmZsb3djaGFydC5wYWRkaW5nfSl9KSl9KHMsYSksZnVuY3Rpb24odCxlKXt2YXIgbj0wO3QuZm9yRWFjaCgoZnVuY3Rpb24ocil7bisrO3ZhciBpPXtjbGFzc2VzOiJyZWxhdGlvbiJ9O2kucGF0dGVybj0xPT1yLnJlbGF0aW9uLmxpbmVUeXBlPyJkYXNoZWQiOiJzb2xpZCIsaS5pZD0iaWQiK24sImFycm93X29wZW4iPT09ci50eXBlP2kuYXJyb3doZWFkPSJub25lIjppLmFycm93aGVhZD0ibm9ybWFsIixvLmluZm8oaSxyKSxpLnN0YXJ0TGFiZWxSaWdodD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUxPyIiOnIucmVsYXRpb25UaXRsZTEsaS5lbmRMYWJlbExlZnQ9Im5vbmUiPT09ci5yZWxhdGlvblRpdGxlMj8iIjpyLnJlbGF0aW9uVGl0bGUyLGkuYXJyb3dUeXBlU3RhcnQ9RV8oci5yZWxhdGlvbi50eXBlMSksaS5hcnJvd1R5cGVFbmQ9RV8oci5yZWxhdGlvbi50eXBlMik7dmFyIGE9IiIscz0iIjtpZih2b2lkIDAhPT1yLnN0eWxlKXt2YXIgYz1BdihyLnN0eWxlKTthPWMuc3R5bGUscz1jLmxhYmVsU3R5bGV9ZWxzZSBhPSJmaWxsOm5vbmUiO2kuc3R5bGU9YSxpLmxhYmVsU3R5bGU9cyx2b2lkIDAhPT1yLmludGVycG9sYXRlP2kuY3VydmU9Q3Yoci5pbnRlcnBvbGF0ZSxQdSk6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/aS5jdXJ2ZT1Ddih0LmRlZmF1bHRJbnRlcnBvbGF0ZSxQdSk6aS5jdXJ2ZT1DdihUXy5jdXJ2ZSxQdSksci50ZXh0PXIudGl0bGUsdm9pZCAwPT09ci50ZXh0P3ZvaWQgMCE9PXIuc3R5bGUmJihpLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGkubGFiZWxwb3M9ImMiLFp2KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/KGkubGFiZWxUeXBlPSJodG1sIixpLmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3IudGV4dCsiPC9zcGFuPiIpOihpLmxhYmVsVHlwZT0idGV4dCIsaS5sYWJlbD1yLnRleHQucmVwbGFjZShZbS5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1yLnN0eWxlJiYoaS5zdHlsZT1pLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLGkubGFiZWxTdHlsZT1pLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLGUuc2V0RWRnZShyLmlkMSxyLmlkMixpLG4pfSkpfShjLGEpO3ZhciB1PWF1KCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3UuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIGw9YXUoIiMiK2UrIiBnIik7a18obCxhLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiXSwiY2xhc3NEaWFncmFtIixlKTt2YXIgaD11Lm5vZGUoKS5nZXRCQm94KCksZj1oLndpZHRoKzE2LGQ9aC5oZWlnaHQrMTY7aWYoby5kZWJ1ZygibmV3IFZpZXdCb3ggMCAwICIuY29uY2F0KGYsIiAiKS5jb25jYXQoZCksInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueSwiKSIpKSxqdih1LGQsZixuLnVzZU1heFdpZHRoKSx1LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoZiwiICIpLmNvbmNhdChkKSksdS5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWgueSwiKSIpKSwhbi5odG1sTGFiZWxzKWZvcih2YXIgcD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSx5PTA7eTxwLmxlbmd0aDt5Kyspe3ZhciBnPXBbeV0sbT1nLmdldEJCb3goKSx2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7di5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx2LnNldEF0dHJpYnV0ZSgicnkiLDApLHYuc2V0QXR0cmlidXRlKCJ3aWR0aCIsbS53aWR0aCksdi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbS5oZWlnaHQpLGcuaW5zZXJ0QmVmb3JlKHYsZy5maXJzdENoaWxkKX19KGksdCk7YnJlYWs7Y2FzZSJzdGF0ZSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxzLnN0YXRlLHBFKGksdCk7YnJlYWs7Y2FzZSJzdGF0ZURpYWdyYW0iOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUseEUocy5zdGF0ZSksZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpIixlKSxpRS5jbGVhcigpLGdFPXt9O3ZhciBuPXFUKCkucGFyc2VyO24ueXk9aUUsbi5wYXJzZSh0KTt2YXIgcj1pRS5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iTFIiKTt2YXIgaT1adigpLnN0YXRlLGE9aS5ub2RlU3BhY2luZ3x8NTAscz1pLnJhbmtTcGFjaW5nfHw1MDtvLmluZm8oaUUuZ2V0Um9vdERvY1YyKCkpLGlFLmV4dHJhY3QoaUUuZ2V0Um9vdERvY1YyKCkpLG8uaW5mbyhpRS5nZXRSb290RG9jVjIoKSk7dmFyIGM9bmV3KGJiKCkuR3JhcGgpKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6X0UoaUUuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YSxyYW5rc2VwOnMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7bUUoYyx2b2lkIDAsaUUuZ2V0Um9vdERvY1YyKCksITApO3ZhciB1PWF1KCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLGw9YXUoIiMiK2UrIiBnIik7a18obCxjLFsiYmFyYiJdLCJzdGF0ZWRpYWdyYW0iLGUpO3ZhciBoPXUubm9kZSgpLmdldEJCb3goKSxmPWgud2lkdGgrMTYsZD1oLmhlaWdodCsxNjt1LmF0dHIoImNsYXNzIiwic3RhdGVkaWFncmFtIik7dmFyIHA9dS5ub2RlKCkuZ2V0QkJveCgpO2p2KHUsZCwxLjc1KmYsaS51c2VNYXhXaWR0aCk7dmFyIHk9IiIuY29uY2F0KHAueC04LCIgIikuY29uY2F0KHAueS04LCIgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoZCk7by5kZWJ1Zygidmlld0JveCAiLmNvbmNhdCh5KSksdS5hdHRyKCJ2aWV3Qm94Iix5KTtmb3IodmFyIGc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgdj1nW21dLGI9di5nZXRCQm94KCksXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO18uc2V0QXR0cmlidXRlKCJyeCIsMCksXy5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxfLnNldEF0dHJpYnV0ZSgid2lkdGgiLGIud2lkdGgpLF8uc2V0QXR0cmlidXRlKCJoZWlnaHQiLGIuaGVpZ2h0KSx2Lmluc2VydEJlZm9yZShfLHYuZmlyc3RDaGlsZCl9fShpLHQpO2JyZWFrO2Nhc2UiaW5mbyI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxKdyhzLmNsYXNzKSxmdW5jdGlvbih0LGUsbil7dHJ5e3ZhciByPVF3KCkucGFyc2VyO3IueXk9WHcsby5kZWJ1ZygiUmVuZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLHIucGFyc2UodCksby5kZWJ1ZygiUGFyc2VkIGluZm8gZGlhZ3JhbSIpO3ZhciBpPWF1KCIjIitlKTtpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDEwMCkuYXR0cigieSIsNDApLmF0dHIoImNsYXNzIiwidmVyc2lvbiIpLmF0dHIoImZvbnQtc2l6ZSIsIjMycHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KCJ2ICIrbiksaS5hdHRyKCJoZWlnaHQiLDEwMCksaS5hdHRyKCJ3aWR0aCIsNDAwKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksby5lcnJvcih0Lm1lc3NhZ2UpfX0oaSx0LE5tKTticmVhaztjYXNlInBpZSI6Y2soaSx0KTticmVhaztjYXNlImVyIjpQXyhzLmVyKSxqXyhpLHQpO2JyZWFrO2Nhc2Uiam91cm5leSI6VkUocy5qb3VybmV5KSxHRShpLHQpO2JyZWFrO2Nhc2UicmVxdWlyZW1lbnQiOkVrKHMucmVxdWlyZW1lbnQpLENrKGksdCl9fWNhdGNoKGUpe3Rocm93IGZ1bmN0aW9uKHQsZSl7dHJ5e28uZGVidWcoIlJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yXG4iKTt2YXIgbj1hdSgiIyIrdCkscj1uLmFwcGVuZCgiZyIpO3IuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MTEuMzEzLDEyMy4zMTNjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzItOS4zNzUsOS4zNzUtMjAuNjg4LTIwLjY4OGMtMTIuNDg0LTEyLjUtMzIuNzY2LTEyLjUtNDUuMjUsMGwtMTYsMTZjLTEuMjYxLDEuMjYxLTIuMzA0LDIuNjQ4LTMuMzEsNC4wNTEtMjEuNzM5LTguNTYxLTQ1LjMyNC0xMy40MjYtNzAuMDY1LTEzLjQyNi0xMDUuODY3LDAtMTkyLDg2LjEzMy0xOTIsMTkyczg2LjEzMywxOTIgMTkyLDE5MiAxOTItODYuMTMzIDE5Mi0xOTJjMC0yNC43NDEtNC44NjQtNDguMzI3LTEzLjQyNi03MC4wNjUgMS40MDItMS4wMDcgMi43OS0yLjA0OSA0LjA1MS0zLjMxbDE2LTE2YzEyLjUtMTIuNDkyIDEyLjUtMzIuNzU4IDAtNDUuMjVsLTIwLjY4OC0yMC42ODggOS4zNzUtOS4zNzUgMzIuMDAxLTMxLjk5OXptLTIxOS4zMTMsMTAwLjY4N2MtNTIuOTM4LDAtOTYsNDMuMDYzLTk2LDk2IDAsOC44MzYtNy4xNjQsMTYtMTYsMTZzLTE2LTcuMTY0LTE2LTE2YzAtNzAuNTc4IDU3LjQyMi0xMjggMTI4LTEyOCA4LjgzNiwwIDE2LDcuMTY0IDE2LDE2cy03LjE2NCwxNi0xNiwxNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDU5LjAyLDE0OC45OGMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNiwxNmMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi4wMDEtMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTM0MC4zOTUsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LTE2Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE1Ljk5OSwxNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDAwLDY0YzguODQ0LDAgMTYtNy4xNjQgMTYtMTZ2LTMyYzAtOC44MzYtNy4xNTYtMTYtMTYtMTYtOC44NDQsMC0xNiw3LjE2NC0xNiwxNnYzMmMwLDguODM2IDcuMTU2LDE2IDE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00OTYsOTYuNTg2aC0zMmMtOC44NDQsMC0xNiw3LjE2NC0xNiwxNiAwLDguODM2IDcuMTU2LDE2IDE2LDE2aDMyYzguODQ0LDAgMTYtNy4xNjQgMTYtMTYgMC04LjgzNi03LjE1Ni0xNi0xNi0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDM2Ljk4LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODhsMzItMzJjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzJjLTYuMjUxLDYuMjUtNi4yNTEsMTYuMzc1LTAuMDAxLDIyLjYyNXoiKSxyLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNDApLmF0dHIoInkiLDI1MCkuYXR0cigiZm9udC1zaXplIiwiMTUwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KCJTeW50YXggZXJyb3IgaW4gZ3JhcGgiKSxyLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEwNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KCJtZXJtYWlkIHZlcnNpb24gIitlKSxuLmF0dHIoImhlaWdodCIsMTAwKSxuLmF0dHIoIndpZHRoIiw0MDApLG4uYXR0cigidmlld0JveCIsIjc2OCAwIDUxMiA1MTIiKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksby5lcnJvcih0Lm1lc3NhZ2UpfX0odCxObSksZX1hdSgnW2lkPSInLmNvbmNhdCh0LCciXScpKS5zZWxlY3RBbGwoImZvcmVpZ25vYmplY3QgPiAqIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIF89YXUoIiNkIit0KS5ub2RlKCkuaW5uZXJIVE1MO2lmKG8uZGVidWcoImNuZi5hcnJvd01hcmtlckFic29sdXRlIixzLmFycm93TWFya2VyQWJzb2x1dGUpLHMuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmImZhbHNlIiE9PXMuYXJyb3dNYXJrZXJBYnNvbHV0ZXx8KF89Xy5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKC4qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnLCJnIikpLF89KF89ZUMoXykpLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSx2b2lkIDAhPT1uKXN3aXRjaChoKXtjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOm4oXyxmeC5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImdhbnR0IjpuKF8seXcuYmluZEZ1bmN0aW9ucyk7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOm4oXyx5Yi5iaW5kRnVuY3Rpb25zKTticmVhaztkZWZhdWx0Om4oXyl9ZWxzZSBvLmRlYnVnKCJDQiA9IHVuZGVmaW5lZCEiKTtRay5mb3JFYWNoKChmdW5jdGlvbih0KXt0KCl9KSksUWs9W107dmFyIHg9YXUoIiNkIit0KS5ub2RlKCk7cmV0dXJuIG51bGwhPT14JiYiZnVuY3Rpb24iPT10eXBlb2YgeC5yZW1vdmUmJmF1KCIjZCIrdCkubm9kZSgpLnJlbW92ZSgpLF99LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVp2KCksbj16di5kZXRlY3RJbml0KHQsZSk7biYmby5kZWJ1ZygicmVpbml0ICIsbik7dmFyIHIsaT16di5kZXRlY3RUeXBlKHQsZSk7c3dpdGNoKG8uZGVidWcoIlR5cGUgIitpKSxpKXtjYXNlImdpdCI6KHI9UncoKSkucGFyc2VyLnl5PUJ3O2JyZWFrO2Nhc2UiZmxvd2NoYXJ0IjpjYXNlImZsb3djaGFydC12MiI6ZnguY2xlYXIoKSwocj1weCgpKS5wYXJzZXIueXk9Zng7YnJlYWs7Y2FzZSJzZXF1ZW5jZSI6KHI9QWsoKSkucGFyc2VyLnl5PVprO2JyZWFrO2Nhc2UiZ2FudHQiOihyPWJ3KCkpLnBhcnNlci55eT15dzticmVhaztjYXNlImNsYXNzIjpjYXNlImNsYXNzRGlhZ3JhbSI6KHI9eGIoKSkucGFyc2VyLnl5PXliO2JyZWFrO2Nhc2Uic3RhdGUiOmNhc2Uic3RhdGVEaWFncmFtIjoocj1xVCgpKS5wYXJzZXIueXk9aUU7YnJlYWs7Y2FzZSJpbmZvIjpvLmRlYnVnKCJpbmZvIGluZm8gaW5mbyIpLChyPVF3KCkpLnBhcnNlci55eT1YdzticmVhaztjYXNlInBpZSI6by5kZWJ1ZygicGllIiksKHI9ZWsoKSkucGFyc2VyLnl5PWFrO2JyZWFrO2Nhc2UiZXIiOm8uZGVidWcoImVyIiksKHI9T18oKSkucGFyc2VyLnl5PU5fO2JyZWFrO2Nhc2Uiam91cm5leSI6by5kZWJ1ZygiSm91cm5leSIpLChyPU9FKCkpLnBhcnNlci55eT1ORTticmVhaztjYXNlInJlcXVpcmVtZW50IjpjYXNlInJlcXVpcmVtZW50RGlhZ3JhbSI6by5kZWJ1ZygiUmVxdWlyZW1lbnREaWFncmFtIiksKHI9bGsoKSkucGFyc2VyLnl5PWdrfXJldHVybiByLnBhcnNlci55eS5ncmFwaFR5cGU9aSxyLnBhcnNlci55eS5wYXJzZUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhyb3d7c3RyOnQsaGFzaDplfX0sci5wYXJzZSh0KSxyfSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbixyKXt0cnl7aWYodm9pZCAwIT09ZSlzd2l0Y2goZT1lLnRyaW0oKSxuKXtjYXNlIm9wZW5fZGlyZWN0aXZlIjpuQz17fTticmVhaztjYXNlInR5cGVfZGlyZWN0aXZlIjpuQy50eXBlPWUudG9Mb3dlckNhc2UoKTticmVhaztjYXNlImFyZ19kaXJlY3RpdmUiOm5DLmFyZ3M9SlNPTi5wYXJzZShlKTticmVhaztjYXNlImNsb3NlX2RpcmVjdGl2ZSI6KGZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goby5kZWJ1ZygiRGlyZWN0aXZlIHR5cGU9Ii5jb25jYXQoZS50eXBlLCIgd2l0aCBhcmdzOiIpLGUuYXJncyksZS50eXBlKXtjYXNlImluaXQiOmNhc2UiaW5pdGlhbGl6ZSI6WyJjb25maWciXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lLmFyZ3NbdF0mJigiZmxvd2NoYXJ0LXYyIj09PW4mJihuPSJmbG93Y2hhcnQiKSxlLmFyZ3Nbbl09ZS5hcmdzW3RdLGRlbGV0ZSBlLmFyZ3NbdF0pfSkpLG8uZGVidWcoInNhbml0aXplIGluIGhhbmRsZURpcmVjdGl2ZSIsZS5hcmdzKSxZdihlLmFyZ3MpLG8uZGVidWcoInNhbml0aXplIGluIGhhbmRsZURpcmVjdGl2ZSAoZG9uZSkiLGUuYXJncyksZS5hcmdzLEt2KGUuYXJncyk7YnJlYWs7Y2FzZSJ3cmFwIjpjYXNlIm5vd3JhcCI6dCYmdC5zZXRXcmFwJiZ0LnNldFdyYXAoIndyYXAiPT09ZS50eXBlKTticmVhaztkZWZhdWx0Om8ud2FybigiVW5oYW5kbGVkIGRpcmVjdGl2ZTogc291cmNlOiAnJSV7Ii5jb25jYXQoZS50eXBlLCI6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShlLmFyZ3M/ZS5hcmdzOnt9KSwifSUlIiksZSl9fSkodCxuQyxyKSxuQz1udWxsfX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgc2VxdWVuY2VEaWFncmFtIGRpcmVjdGl2ZTogIi5jb25jYXQoZSwiIGppc29uIGNvbnRleHQ6ICIpLmNvbmNhdChuKSksby5lcnJvcih0Lm1lc3NhZ2UpfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0JiZ0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSxmdW5jdGlvbih0KXtxdj1Pdih7fSx0KX0odCksdCYmdC50aGVtZSYmaXZbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz1pdlt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz1pdi5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PXRDKHQpP2Z1bmN0aW9uKHQpe3JldHVybiBIdj1Pdih7fSwkdiksSHY9T3YoSHYsdCksdC50aGVtZSYmKEh2LnRoZW1lVmFyaWFibGVzPWl2W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxWdj1HdihIdixXdiksSHZ9KHQpOlh2KCk7ckMoZSkscyhlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxnZXRDb25maWc6WnYsc2V0Q29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBPdihWdix0KSxadigpfSxnZXRTaXRlQ29uZmlnOlh2LHVwZGF0ZVNpdGVDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIEh2PU92KEh2LHQpLEd2KEh2LFd2KSxIdn0scmVzZXQ6ZnVuY3Rpb24oKXtKdigpfSxnbG9iYWxSZXNldDpmdW5jdGlvbigpe0p2KCksckMoWnYoKSl9LGRlZmF1bHRDb25maWc6JHZ9KTtzKFp2KCkubG9nTGV2ZWwpLEp2KFp2KCkpO2NvbnN0IGFDPWlDO3ZhciBvQz1mdW5jdGlvbigpe3NDLnN0YXJ0T25Mb2FkP2FDLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZzQy5pbml0KCk6dm9pZCAwPT09c0Muc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJJbiBzdGFydCwgbm8gY29uZmlnIiksYUMuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJnNDLmluaXQoKSl9OyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtvQygpfSksITEpO3ZhciBzQz17c3RhcnRPbkxvYWQ6ITAsaHRtbExhYmVsczohMCxtZXJtYWlkQVBJOmFDLHBhcnNlOmFDLnBhcnNlLHJlbmRlcjphQy5yZW5kZXIsaW5pdDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9YUMuZ2V0Q29uZmlnKCk7YXJndW1lbnRzLmxlbmd0aD49Mj8odm9pZCAwIT09YXJndW1lbnRzWzBdJiYoc0Muc2VxdWVuY2VDb25maWc9YXJndW1lbnRzWzBdKSx0PWFyZ3VtZW50c1sxXSk6dD1hcmd1bWVudHNbMF0sImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdPyhlPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOnZvaWQgMCE9PXIubWVybWFpZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLm1lcm1haWQuY2FsbGJhY2s/KGU9ci5tZXJtYWlkLmNhbGxiYWNrLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOm8uZGVidWcoIk5vIENhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpLHQ9dm9pZCAwPT09dD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWVybWFpZCIpOiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpOnQgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZT9bdF06dCxvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGJlZm9yZTogIitzQy5zdGFydE9uTG9hZCksdm9pZCAwIT09c0Muc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGlubmVyOiAiK3NDLnN0YXJ0T25Mb2FkKSxhQy51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpzQy5zdGFydE9uTG9hZH0pKSx2b2lkIDAhPT1zQy5nYW50dENvbmZpZyYmYUMudXBkYXRlU2l0ZUNvbmZpZyh7Z2FudHQ6c0MuZ2FudHRDb25maWd9KTtmb3IodmFyIGksYT1uZXcgenYuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07aWYocy5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIikpcmV0dXJuImNvbnRpbnVlIjtzLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCEwKTt2YXIgYz0ibWVybWFpZC0iLmNvbmNhdChhLm5leHQoKSk7aT1zLmlubmVySFRNTCxpPXp2LmVudGl0eURlY29kZShpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTt2YXIgdT16di5kZXRlY3RJbml0KGkpO3UmJm8uZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIix1KTt0cnl7YUMucmVuZGVyKGMsaSwoZnVuY3Rpb24odCxuKXtzLmlubmVySFRNTD10LHZvaWQgMCE9PWUmJmUoYyksbiYmbihzKX0pLHMpfWNhdGNoKHQpe28ud2FybigiU3ludGF4IEVycm9yIHJlbmRlcmluZyIpLG8ud2Fybih0KSxuLnBhcnNlRXJyb3ImJm4ucGFyc2VFcnJvcih0KX19LGM9MDtjPHQubGVuZ3RoO2MrKylzKGMpfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQubWVybWFpZCYmKHZvaWQgMCE9PXQubWVybWFpZC5zdGFydE9uTG9hZCYmKHNDLnN0YXJ0T25Mb2FkPXQubWVybWFpZC5zdGFydE9uTG9hZCksdm9pZCAwIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMmJihzQy5odG1sTGFiZWxzPSJmYWxzZSIhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmITEhPT10Lm1lcm1haWQuaHRtbExhYmVscykpLGFDLmluaXRpYWxpemUodCl9LGNvbnRlbnRMb2FkZWQ6b0N9O2NvbnN0IGNDPXNDfSw0OTQ5Oih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNjYxNCksZGFncmU6bigxNDYzKSxpbnRlcnNlY3Q6big4MTE0KSxyZW5kZXI6big1Nzg3KSx1dGlsOm4oODM1NSksdmVyc2lvbjpuKDU2ODkpfX0sOTE0NDoodCxlLG4pPT57dmFyIHI9big4MzU1KTtmdW5jdGlvbiBpKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9dC5leHBvcnRzPXtkZWZhdWx0Omksbm9ybWFsOmksdmVlOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgTCA0IDUgeiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9LHVuZGlyZWN0ZWQ6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX19fSw1NjMyOih0LGUsbik9Pnt2YXIgcj1uKDgzNTUpLGk9big0MzIyKSxhPW4oMTMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gci5pc1N1YmdyYXBoKGUsdCl9KSkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShvLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTtyZXR1cm4gcy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLmlkfSkpLnN0eWxlKCJvcGFjaXR5IiwwKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKSxyLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxyPWkuc2VsZWN0KHRoaXMpO2kuc2VsZWN0KHRoaXMpLmFwcGVuZCgicmVjdCIpO3ZhciBvPXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2EobyxuLG4uY2x1c3RlckxhYmVsUG9zKX0pKSxzLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxhPWkuc2VsZWN0KHRoaXMpO3IuYXBwbHlTdHlsZShhLG4uc3R5bGUpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpLHIuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHN9fSw2MzE1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9bigxMDM0KSxpPW4oMTMyMiksYT1uKDgzNTUpLG89big0MzIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtyZXR1cm4gcy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVkZ2VMYWJlbCIsITApLnN0eWxlKCJvcGFjaXR5IiwwKSwocz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBhPWUuZWRnZSh0KSxzPWkobixlLmVkZ2UodCksMCwwKS5jbGFzc2VkKCJsYWJlbCIsITApLGM9cy5ub2RlKCkuZ2V0QkJveCgpO2EubGFiZWxJZCYmcy5hdHRyKCJpZCIsYS5sYWJlbElkKSxyLmhhcyhhLCJ3aWR0aCIpfHwoYS53aWR0aD1jLndpZHRoKSxyLmhhcyhhLCJoZWlnaHQiKXx8KGEuaGVpZ2h0PWMuaGVpZ2h0KX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKSxhLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sOTQwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9bigxMDM0KSxpPW4oNzU4NCksYT1uKDgzNTUpLG89big0MzIyKTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49KG8ubGluZXx8by5zdmcubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSk7cmV0dXJuKG4uY3VydmV8fG4uaW50ZXJwb2xhdGUpKHQuY3VydmUpLG4oZSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LnNlbGVjdEFsbCgiZy5lZGdlUGF0aCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGgiKS5zdHlsZSgib3BhY2l0eSIsMCk7cmV0dXJuIG4uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJwYXRoIikuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KSxpPWUubm9kZSh0LnYpLmVsZW07cmV0dXJuIHMobixyLnJhbmdlKG4ucG9pbnRzLmxlbmd0aCkubWFwKChmdW5jdGlvbigpe3JldHVybiBlPSh0PWkpLmdldEJCb3goKSx7eDoobj10Lm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkodC5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKGUud2lkdGgvMixlLmhlaWdodC8yKSkuZSx5Om4uZn07dmFyIHQsZSxufSkpKX0pKSxuLmFwcGVuZCgiZGVmcyIpLG59KGMsZSk7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGl0KCk7YS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9KGMsZSk7dmFyIGw9dm9pZCAwIT09Yy5tZXJnZT9jLm1lcmdlKHUpOmM7cmV0dXJuIGEuYXBwbHlUcmFuc2l0aW9uKGwsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLGwuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcykscj1lLmVkZ2UodCk7ci5lbGVtPXRoaXMsci5pZCYmbi5hdHRyKCJpZCIsci5pZCksYS5hcHBseUNsYXNzKG4sci5jbGFzcywobi5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJlZGdlUGF0aCIpfSkpLGwuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCk7bi5hcnJvd2hlYWRJZD1yLnVuaXF1ZUlkKCJhcnJvd2hlYWQiKTt2YXIgYz1vLnNlbGVjdCh0aGlzKS5hdHRyKCJtYXJrZXItZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrKHQ9bG9jYXRpb24uaHJlZixlPW4uYXJyb3doZWFkSWQsdC5zcGxpdCgiIyIpWzBdKyIjIitlKyIpIik7dmFyIHQsZX0pKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTthLmFwcGx5VHJhbnNpdGlvbihjLGUpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj10LmVkZ2UoZSkscj10Lm5vZGUoZS52KSxhPXQubm9kZShlLncpLG89bi5wb2ludHMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG8udW5zaGlmdChpKHIsb1swXSkpLG8ucHVzaChpKGEsb1tvLmxlbmd0aC0xXSkpLHMobixvKX0oZSx0KX0pKSxhLmFwcGx5U3R5bGUoYyxuLnN0eWxlKX0pKSxsLnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksbC5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7KDAsbltyLmFycm93aGVhZF0pKG8uc2VsZWN0KHRoaXMpLHIuYXJyb3doZWFkSWQsciwiYXJyb3doZWFkIil9KSksbH19LDYwNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oMTAzNCksaT1uKDEzMjIpLGE9big4MzU1KSxvPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcyxjPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFhLmlzU3ViZ3JhcGgoZSx0KX0pKSx1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGMsKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmNsYXNzZWQoInVwZGF0ZSIsITApO3JldHVybiB1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLCh1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHM9ZS5ub2RlKHQpLGM9by5zZWxlY3QodGhpcyk7YS5hcHBseUNsYXNzKGMscy5jbGFzcywoYy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksYy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgdT1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWkodSxzKSxoPW5bcy5zaGFwZV0sZj1yLnBpY2sobC5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3MuZWxlbT10aGlzLHMuaWQmJmMuYXR0cigiaWQiLHMuaWQpLHMubGFiZWxJZCYmdS5hdHRyKCJpZCIscy5sYWJlbElkKSxyLmhhcyhzLCJ3aWR0aCIpJiYoZi53aWR0aD1zLndpZHRoKSxyLmhhcyhzLCJoZWlnaHQiKSYmKGYuaGVpZ2h0PXMuaGVpZ2h0KSxmLndpZHRoKz1zLnBhZGRpbmdMZWZ0K3MucGFkZGluZ1JpZ2h0LGYuaGVpZ2h0Kz1zLnBhZGRpbmdUb3Arcy5wYWRkaW5nQm90dG9tLHUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMucGFkZGluZ0xlZnQtcy5wYWRkaW5nUmlnaHQpLzIrIiwiKyhzLnBhZGRpbmdUb3Atcy5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIGQ9by5zZWxlY3QodGhpcyk7ZC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgcD1oKGQsZixzKS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTthLmFwcGx5U3R5bGUocCxzLnN0eWxlKTt2YXIgeT1wLm5vZGUoKS5nZXRCQm94KCk7cy53aWR0aD15LndpZHRoLHMuaGVpZ2h0PXkuaGVpZ2h0fSkpLHM9dS5leGl0P3UuZXhpdCgpOnUuc2VsZWN0QWxsKG51bGwpLGEuYXBwbHlUcmFuc2l0aW9uKHMsZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9fSw0MzIyOih0LGUsbik9Pnt2YXIgcjtpZighcil0cnl7cj1uKDcxODgpfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZDMpLHQuZXhwb3J0cz1yfSwxNDYzOih0LGUsbik9Pnt2YXIgcjt0cnl7cj1uKDY4MSl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kYWdyZSksdC5leHBvcnRzPXJ9LDY2MTQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDgxMTQ6KHQsZSxuKT0+e3QuZXhwb3J0cz17bm9kZTpuKDc1ODQpLGNpcmNsZTpuKDY1ODcpLGVsbGlwc2U6bigzMjYwKSxwb2x5Z29uOm4oNTMzNykscmVjdDpuKDgwNDkpfX0sNjU4NzoodCxlLG4pPT57dmFyIHI9bigzMjYwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByKHQsZSxlLG4pfX0sMzI2MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX19LDY4MDg6dD0+e2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdCplPjB9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBhLG8scyxjLHUsbCxoLGYsZCxwLHksZyxtO2lmKCEoYT1uLnktdC55LHM9dC54LW4ueCx1PW4ueCp0LnktdC54Km4ueSxkPWEqci54K3Mqci55K3UscD1hKmkueCtzKmkueSt1LDAhPT1kJiYwIT09cCYmZShkLHApfHwobz1pLnktci55LGM9ci54LWkueCxsPWkueCpyLnktci54KmkueSxoPW8qdC54K2MqdC55K2wsZj1vKm4ueCtjKm4ueStsLDAhPT1oJiYwIT09ZiYmZShoLGYpfHwwPT0oeT1hKmMtbypzKSkpKXJldHVybiBnPU1hdGguYWJzKHkvMikse3g6KG09cypsLWMqdSk8MD8obS1nKS95OihtK2cpL3kseToobT1vKnUtYSpsKTwwPyhtLWcpL3k6KG0rZykveX19fSw3NTg0OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSw1MzM3Oih0LGUsbik9Pnt2YXIgcj1uKDY4MDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9cmV0dXJuIG8ubGVuZ3RoPyhvLmxlbmd0aD4xJiZvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKSxvWzBdKTooY29uc29sZS5sb2coIk5PIElOVEVSU0VDVElPTiBGT1VORCwgUkVUVVJOIE5PREUgQ0VOVEVSIix0KSx0KX19LDgwNDk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX19LDgyODQ6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGk9bi5hcHBlbmQoInhodG1sOmRpdiIpO2kuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIGE9ZS5sYWJlbDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UiZnVuY3Rpb24iOmkuaW5zZXJ0KGEpO2JyZWFrO2Nhc2Uib2JqZWN0IjppLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTticmVhaztkZWZhdWx0OmkuaHRtbChhKX1yLmFwcGx5U3R5bGUoaSxlLmxhYmVsU3R5bGUpLGkuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciBvPWkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmF0dHIoIndpZHRoIixvLndpZHRoKS5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KSxufX0sMTMyMjoodCxlLG4pPT57dmFyIHI9big3MzE4KSxpPW4oODI4NCksYT1uKDgyODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89ZS5sYWJlbCxzPXQuYXBwZW5kKCJnIik7InN2ZyI9PT1lLmxhYmVsVHlwZT9hKHMsZSk6InN0cmluZyIhPXR5cGVvZiBvfHwiaHRtbCI9PT1lLmxhYmVsVHlwZT9pKHMsZSk6cihzLGUpO3ZhciBjLHU9cy5ub2RlKCkuZ2V0QkJveCgpO3N3aXRjaChuKXtjYXNlInRvcCI6Yz0tZS5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yz1lLmhlaWdodC8yLXUuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yz0tdS5oZWlnaHQvMn1yZXR1cm4gcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdS53aWR0aC8yKyIsIitjKyIpIiksc319LDgyODc6KHQsZSxuKT0+e3ZhciByPW4oODM1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5ub2RlKCkuYXBwZW5kQ2hpbGQoZS5sYWJlbCksci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sNzMxODoodCxlLG4pPT57dmFyIHI9big4MzU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5hcHBlbmQoInRleHQiKSxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPSIiLHI9ITEsaT0wO2k8dC5sZW5ndGg7KytpKWU9dFtpXSxyPyhuKz0ibiI9PT1lPyJcbiI6ZSxyPSExKToiXFwiPT09ZT9yPSEwOm4rPWU7cmV0dXJuIG59KGUubGFiZWwpLnNwbGl0KCJcbiIpLGE9MDthPGkubGVuZ3RoO2ErKyluLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KGlbYV0pO3JldHVybiByLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSwxMDM0Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17ZGVmYXVsdHM6bigxNzQ3KSxlYWNoOm4oNjA3MyksaXNGdW5jdGlvbjpuKDM1NjApLGlzUGxhaW5PYmplY3Q6big4NjMwKSxwaWNrOm4oOTcyMiksaGFzOm4oODcyMSkscmFuZ2U6big2MDI2KSx1bmlxdWVJZDpuKDM5NTUpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSw2MzgxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpO2Z1bmN0aW9uIGEodCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9bi5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsYSksci5hcHBseVRyYW5zaXRpb24obi5zZWxlY3RBbGwoInJlY3QiKSxlKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5oZWlnaHR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkud2lkdGgvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLWUubm9kZSh0KS5oZWlnaHQvMn0pKX19LDQ1Nzc6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgzNTUpLGk9big0MzIyKSxhPW4oMTAzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLmVkZ2UodCk7cmV0dXJuIGEuaGFzKG4sIngiKT8idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikiOiIifXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSw0ODQ5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4MzU1KSxpPW4oNDMyMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLm5vZGUodCk7cmV0dXJuInRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sNTc4NzoodCxlLG4pPT57dmFyIHI9bigxMDM0KSxpPW4oNDMyMiksYT1uKDE0NjMpLmxheW91dDt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKDYwNyksZT1uKDU2MzIpLGk9big2MzE1KSx1PW4oOTQwKSxsPW4oNDg0OSksaD1uKDQ1NzcpLGY9big2MzgxKSxkPW4oNDQxOCkscD1uKDkxNDQpLHk9ZnVuY3Rpb24obix5KXshZnVuY3Rpb24odCl7dC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJsYWJlbCIpfHx0LmNoaWxkcmVuKGUpLmxlbmd0aHx8KG4ubGFiZWw9ZSksci5oYXMobiwicGFkZGluZ1giKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmdYLHBhZGRpbmdSaWdodDpuLnBhZGRpbmdYfSksci5oYXMobiwicGFkZGluZ1kiKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nVG9wOm4ucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmdZfSksci5oYXMobiwicGFkZGluZyIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZyxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nLHBhZGRpbmdUb3A6bi5wYWRkaW5nLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nfSksci5kZWZhdWx0cyhuLG8pLHIuZWFjaChbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSwoZnVuY3Rpb24odCl7blt0XT1OdW1iZXIoblt0XSl9KSksci5oYXMobiwid2lkdGgiKSYmKG4uX3ByZXZXaWR0aD1uLndpZHRoKSxyLmhhcyhuLCJoZWlnaHQiKSYmKG4uX3ByZXZIZWlnaHQ9bi5oZWlnaHQpfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5oYXMobiwibGFiZWwiKXx8KG4ubGFiZWw9IiIpLHIuZGVmYXVsdHMobixzKX0pKX0oeSk7dmFyIGc9YyhuLCJvdXRwdXQiKSxtPWMoZywiY2x1c3RlcnMiKSx2PWMoZywiZWRnZVBhdGhzIiksYj1pKGMoZywiZWRnZUxhYmVscyIpLHkpLF89dChjKGcsIm5vZGVzIikseSxkKTthKHkpLGwoXyx5KSxoKGIseSksdSh2LHkscCk7dmFyIHg9ZShtLHkpO2YoeCx5KSxmdW5jdGlvbih0KXtyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwiX3ByZXZXaWR0aCIpP24ud2lkdGg9bi5fcHJldldpZHRoOmRlbGV0ZSBuLndpZHRoLHIuaGFzKG4sIl9wcmV2SGVpZ2h0Iik/bi5oZWlnaHQ9bi5fcHJldkhlaWdodDpkZWxldGUgbi5oZWlnaHQsZGVsZXRlIG4uX3ByZXZXaWR0aCxkZWxldGUgbi5fcHJldkhlaWdodH0pKX0oeSl9O3JldHVybiB5LmNyZWF0ZU5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUseSk6dH0seS5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHkpOmV9LHkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHkpOml9LHkuY3JlYXRlRWRnZVBhdGhzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQseSk6dX0seS5zaGFwZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCx5KTpkfSx5LmFycm93cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10LHkpOnB9LHl9O3ZhciBvPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LHM9e2Fycm93aGVhZDoibm9ybWFsIixjdXJ2ZTppLmN1cnZlTGluZWFyfTtmdW5jdGlvbiBjKHQsZSl7dmFyIG49dC5zZWxlY3QoImcuIitlKTtyZXR1cm4gbi5lbXB0eSgpJiYobj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSksbn19LDQ0MTg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgwNDkpLGk9bigzMjYwKSxhPW4oNjU4Nyksbz1uKDUzMzcpO3QuZXhwb3J0cz17cmVjdDpmdW5jdGlvbih0LGUsbil7dmFyIGk9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsbi5yeCkuYXR0cigicnkiLG4ucnkpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiByKG4sdCl9LGl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lmluc2VydCgiZWxsaXBzZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyeCIscikuYXR0cigicnkiLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLHIsYSx0KX0sb30sY2lyY2xlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KS8yLGk9dC5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyIixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGEobixyLHQpfSxpfSxkaWFtb25kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoKk1hdGguU1FSVDIvMixpPWUuaGVpZ2h0Kk1hdGguU1FSVDIvMixhPVt7eDowLHk6LWl9LHt4Oi1yLHk6MH0se3g6MCx5Oml9LHt4OnIseTowfV0scz10Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbyhuLGEsdCl9LHN9fX0sODM1NToodCxlLG4pPT57dmFyIHI9bigxMDM0KTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LDU2ODk6dD0+e3QuZXhwb3J0cz0iMC42LjQifSw3MTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7bi5yKGUpLG4uZChlLHtGb3JtYXRTcGVjaWZpZXI6KCk9PnVjLGFjdGl2ZTooKT0+SnIsYXJjOigpPT5meCxhcmVhOigpPT52eCxhcmVhUmFkaWFsOigpPT5TeCxhc2NlbmRpbmc6KCk9PmksYXV0b1R5cGU6KCk9PkZvLGF4aXNCb3R0b206KCk9Pml0LGF4aXNMZWZ0OigpPT5hdCxheGlzUmlnaHQ6KCk9PnJ0LGF4aXNUb3A6KCk9Pm50LGJpc2VjdDooKT0+dSxiaXNlY3RMZWZ0OigpPT5jLGJpc2VjdFJpZ2h0OigpPT5zLGJpc2VjdG9yOigpPT5hLGJsb2I6KCk9Pm1zLGJydXNoOigpPT5BaSxicnVzaFNlbGVjdGlvbjooKT0+RWksYnJ1c2hYOigpPT5DaSxicnVzaFk6KCk9PlNpLGJ1ZmZlcjooKT0+YnMsY2hvcmQ6KCk9PkZpLGNsaWVudFBvaW50OigpPT5EbixjbHVzdGVyOigpPT5TZCxjb2xvcjooKT0+VmUsY29udG91ckRlbnNpdHk6KCk9Pm9vLGNvbnRvdXJzOigpPT50byxjcmVhdGU6KCk9PmpfLGNyZWF0b3I6KCk9PmllLGNyb3NzOigpPT5mLGNzdjooKT0+VHMsY3N2Rm9ybWF0OigpPT5Ubyxjc3ZGb3JtYXRCb2R5OigpPT5Fbyxjc3ZGb3JtYXRSb3c6KCk9PlNvLGNzdkZvcm1hdFJvd3M6KCk9PkNvLGNzdkZvcm1hdFZhbHVlOigpPT5Bbyxjc3ZQYXJzZTooKT0+d28sY3N2UGFyc2VSb3dzOigpPT5rbyxjdWJlaGVsaXg6KCk9PiRhLGN1cnZlQmFzaXM6KCk9PnN3LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PnV3LGN1cnZlQmFzaXNPcGVuOigpPT5odyxjdXJ2ZUJ1bmRsZTooKT0+ZHcsY3VydmVDYXJkaW5hbDooKT0+Z3csY3VydmVDYXJkaW5hbENsb3NlZDooKT0+dncsY3VydmVDYXJkaW5hbE9wZW46KCk9Pl93LGN1cnZlQ2F0bXVsbFJvbTooKT0+a3csY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5FdyxjdXJ2ZUNhdG11bGxSb21PcGVuOigpPT5TdyxjdXJ2ZUxpbmVhcjooKT0+cHgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9Pk13LGN1cnZlTW9ub3RvbmVYOigpPT5GdyxjdXJ2ZU1vbm90b25lWTooKT0+UHcsY3VydmVOYXR1cmFsOigpPT56dyxjdXJ2ZVN0ZXA6KCk9PnF3LGN1cnZlU3RlcEFmdGVyOigpPT5IdyxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PiR3LGN1c3RvbUV2ZW50OigpPT5nZSxkZXNjZW5kaW5nOigpPT5kLGRldmlhdGlvbjooKT0+ZyxkaXNwYXRjaDooKT0+ZnQsZHJhZzooKT0+cG8sZHJhZ0Rpc2FibGU6KCk9PlNlLGRyYWdFbmFibGU6KCk9PkFlLGRzdjooKT0+a3MsZHN2Rm9ybWF0OigpPT5fbyxlYXNlQmFjazooKT0+aHMsZWFzZUJhY2tJbjooKT0+dXMsZWFzZUJhY2tJbk91dDooKT0+aHMsZWFzZUJhY2tPdXQ6KCk9PmxzLGVhc2VCb3VuY2U6KCk9Pm9zLGVhc2VCb3VuY2VJbjooKT0+YXMsZWFzZUJvdW5jZUluT3V0OigpPT5zcyxlYXNlQm91bmNlT3V0OigpPT5vcyxlYXNlQ2lyY2xlOigpPT5ycyxlYXNlQ2lyY2xlSW46KCk9PmVzLGVhc2VDaXJjbGVJbk91dDooKT0+cnMsZWFzZUNpcmNsZU91dDooKT0+bnMsZWFzZUN1YmljOigpPT5YcixlYXNlQ3ViaWNJbjooKT0+VnIsZWFzZUN1YmljSW5PdXQ6KCk9PlhyLGVhc2VDdWJpY091dDooKT0+R3IsZWFzZUVsYXN0aWM6KCk9PnBzLGVhc2VFbGFzdGljSW46KCk9PmRzLGVhc2VFbGFzdGljSW5PdXQ6KCk9PnlzLGVhc2VFbGFzdGljT3V0OigpPT5wcyxlYXNlRXhwOigpPT50cyxlYXNlRXhwSW46KCk9PktvLGVhc2VFeHBJbk91dDooKT0+dHMsZWFzZUV4cE91dDooKT0+Sm8sZWFzZUxpbmVhcjooKT0+am8sZWFzZVBvbHk6KCk9PkhvLGVhc2VQb2x5SW46KCk9PnFvLGVhc2VQb2x5SW5PdXQ6KCk9PkhvLGVhc2VQb2x5T3V0OigpPT4kbyxlYXNlUXVhZDooKT0+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+VWIsaW50ZXJwb2xhdGVCdVB1OigpPT4kYixpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PmtfLGludGVycG9sYXRlQ29vbDooKT0+Q18saW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnpwLGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+VF8saW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5VcCxpbnRlcnBvbGF0ZURhdGU6KCk9PmtuLGludGVycG9sYXRlRGlzY3JldGU6KCk9PlNwLGludGVycG9sYXRlR25CdTooKT0+V2IsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PnBfLGludGVycG9sYXRlR3JleXM6KCk9PmdfLGludGVycG9sYXRlSGNsOigpPT5QcCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9PmpwLGludGVycG9sYXRlSHNsOigpPT5McCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PklwLGludGVycG9sYXRlSHVlOigpPT5BcCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PkZfLGludGVycG9sYXRlTGFiOigpPT5ScCxpbnRlcnBvbGF0ZU1hZ21hOigpPT5SXyxpbnRlcnBvbGF0ZU51bWJlcjooKT0+VG4saW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+Ym4saW50ZXJwb2xhdGVPYmplY3Q6KCk9PkVuLGludGVycG9sYXRlT3JSZDooKT0+R2IsaW50ZXJwb2xhdGVPcmFuZ2VzOigpPT53XyxpbnRlcnBvbGF0ZVBSR246KCk9PkNiLGludGVycG9sYXRlUGlZRzooKT0+QWIsaW50ZXJwb2xhdGVQbGFzbWE6KCk9PlBfLGludGVycG9sYXRlUHVCdTooKT0+S2IsaW50ZXJwb2xhdGVQdUJ1R246KCk9PlpiLGludGVycG9sYXRlUHVPcjooKT0+TmIsaW50ZXJwb2xhdGVQdVJkOigpPT50XyxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZfLGludGVycG9sYXRlUmFpbmJvdzooKT0+QV8saW50ZXJwb2xhdGVSZEJ1OigpPT5PYixpbnRlcnBvbGF0ZVJkR3k6KCk9PkxiLGludGVycG9sYXRlUmRQdTooKT0+bl8saW50ZXJwb2xhdGVSZFlsQnU6KCk9PlJiLGludGVycG9sYXRlUmRZbEduOigpPT5QYixpbnRlcnBvbGF0ZVJlZHM6KCk9Pl9fLGludGVycG9sYXRlUmdiOigpPT55bixpbnRlcnBvbGF0ZVJnYkJhc2lzOigpPT5tbixpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkOigpPT52bixpbnRlcnBvbGF0ZVJvdW5kOigpPT5NcCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9Pk9fLGludGVycG9sYXRlU3BlY3RyYWw6KCk9PlliLGludGVycG9sYXRlU3RyaW5nOigpPT5BbixpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczooKT0+cHIsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PnlyLGludGVycG9sYXRlVHVyYm86KCk9PkJfLGludGVycG9sYXRlVmlyaWRpczooKT0+SV8saW50ZXJwb2xhdGVXYXJtOigpPT5FXyxpbnRlcnBvbGF0ZVlsR246KCk9Pm9fLGludGVycG9sYXRlWWxHbkJ1OigpPT5pXyxpbnRlcnBvbGF0ZVlsT3JCcjooKT0+Y18saW50ZXJwb2xhdGVZbE9yUmQ6KCk9PmxfLGludGVycG9sYXRlWm9vbTooKT0+T3AsaW50ZXJydXB0OigpPT5hcixpbnRlcnZhbDooKT0+ZmssaXNvRm9ybWF0OigpPT51ayxpc29QYXJzZTooKT0+aGssanNvbjooKT0+QXMsa2V5czooKT0+ZmEsbGFiOigpPT5UYSxsY2g6KCk9PkRhLGxpbmU6KCk9Pm14LGxpbmVSYWRpYWw6KCk9PkN4LGxpbmtIb3Jpem9udGFsOigpPT5SeCxsaW5rUmFkaWFsOigpPT5QeCxsaW5rVmVydGljYWw6KCk9PkZ4LGxvY2FsOigpPT56XyxtYXA6KCk9Pm5hLG1hdGNoZXI6KCk9Pm10LG1heDooKT0+SSxtZWFuOigpPT5SLG1lZGlhbjooKT0+RixtZXJnZTooKT0+UCxtaW46KCk9PmosbW91c2U6KCk9PkJuLG5hbWVzcGFjZTooKT0+RXQsbmFtZXNwYWNlczooKT0+VHQsbmVzdDooKT0+cmEsbm93OigpPT4kbixwYWNrOigpPT50cCxwYWNrRW5jbG9zZTooKT0+SWQscGFja1NpYmxpbmdzOigpPT5HZCxwYWlyczooKT0+bCxwYXJ0aXRpb246KCk9Pm9wLHBhdGg6KCk9PldpLHBlcm11dGU6KCk9PlkscGllOigpPT54eCxwaWVjZXdpc2U6KCk9PnFwLHBvaW50UmFkaWFsOigpPT5BeCxwb2x5Z29uQXJlYTooKT0+SHAscG9seWdvbkNlbnRyb2lkOigpPT5XcCxwb2x5Z29uQ29udGFpbnM6KCk9PlFwLHBvbHlnb25IdWxsOigpPT5acCxwb2x5Z29uTGVuZ3RoOigpPT5LcCxwcmVjaXNpb25GaXhlZDooKT0+X2MscHJlY2lzaW9uUHJlZml4OigpPT54YyxwcmVjaXNpb25Sb3VuZDooKT0+d2MscXVhZHRyZWU6KCk9PllzLHF1YW50aWxlOigpPT5PLHF1YW50aXplOigpPT4kcCxyYWRpYWxBcmVhOigpPT5TeCxyYWRpYWxMaW5lOigpPT5DeCxyYW5kb21CYXRlczooKT0+aXkscmFuZG9tRXhwb25lbnRpYWw6KCk9PmF5LHJhbmRvbUlyd2luSGFsbDooKT0+cnkscmFuZG9tTG9nTm9ybWFsOigpPT5ueSxyYW5kb21Ob3JtYWw6KCk9PmV5LHJhbmRvbVVuaWZvcm06KCk9PnR5LHJhbmdlOigpPT5rLHJnYjooKT0+UWUscmliYm9uOigpPT5LaSxzY2FsZUJhbmQ6KCk9PmR5LHNjYWxlRGl2ZXJnaW5nOigpPT5vYixzY2FsZURpdmVyZ2luZ0xvZzooKT0+c2Isc2NhbGVEaXZlcmdpbmdQb3c6KCk9PnViLHNjYWxlRGl2ZXJnaW5nU3FydDooKT0+bGIsc2NhbGVEaXZlcmdpbmdTeW1sb2c6KCk9PmNiLHNjYWxlSWRlbnRpdHk6KCk9Pk15LHNjYWxlSW1wbGljaXQ6KCk9Pmh5LHNjYWxlTGluZWFyOigpPT5BeSxzY2FsZUxvZzooKT0+UHksc2NhbGVPcmRpbmFsOigpPT5meSxzY2FsZVBvaW50OigpPT55eSxzY2FsZVBvdzooKT0+Vnksc2NhbGVRdWFudGlsZTooKT0+WHksc2NhbGVRdWFudGl6ZTooKT0+Wnksc2NhbGVTZXF1ZW50aWFsOigpPT5KdixzY2FsZVNlcXVlbnRpYWxMb2c6KCk9PnRiLHNjYWxlU2VxdWVudGlhbFBvdzooKT0+bmIsc2NhbGVTZXF1ZW50aWFsUXVhbnRpbGU6KCk9PmliLHNjYWxlU2VxdWVudGlhbFNxcnQ6KCk9PnJiLHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+ZWIsc2NhbGVTcXJ0OigpPT5HeSxzY2FsZVN5bWxvZzooKT0+VXksc2NhbGVUaHJlc2hvbGQ6KCk9PlF5LHNjYWxlVGltZTooKT0+WXYsc2NhbGVVdGM6KCk9Plp2LHNjYW46KCk9Pnosc2NoZW1lQWNjZW50OigpPT5kYixzY2hlbWVCbHVlczooKT0+aF8sc2NoZW1lQnJCRzooKT0+a2Isc2NoZW1lQnVHbjooKT0+emIsc2NoZW1lQnVQdTooKT0+cWIsc2NoZW1lQ2F0ZWdvcnkxMDooKT0+ZmIsc2NoZW1lRGFyazI6KCk9PnBiLHNjaGVtZUduQnU6KCk9PkhiLHNjaGVtZUdyZWVuczooKT0+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+R24sdG91Y2g6KCk9Pk9uLHRvdWNoZXM6KCk9PiRfLHRyYW5zaXRpb246KCk9PiRyLHRyYW5zcG9zZTooKT0+JCx0cmVlOigpPT52cCx0cmVlbWFwOigpPT5rcCx0cmVlbWFwQmluYXJ5OigpPT5UcCx0cmVlbWFwRGljZTooKT0+YXAsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PkNwLHRyZWVtYXBTbGljZTooKT0+YnAsdHJlZW1hcFNsaWNlRGljZTooKT0+RXAsdHJlZW1hcFNxdWFyaWZ5OigpPT53cCx0c3Y6KCk9PkVzLHRzdkZvcm1hdDooKT0+T28sdHN2Rm9ybWF0Qm9keTooKT0+Qm8sdHN2Rm9ybWF0Um93OigpPT5Jbyx0c3ZGb3JtYXRSb3dzOigpPT5Mbyx0c3ZGb3JtYXRWYWx1ZTooKT0+Um8sdHN2UGFyc2U6KCk9Pk5vLHRzdlBhcnNlUm93czooKT0+RG8sdXRjRGF5OigpPT5pbSx1dGNEYXlzOigpPT5hbSx1dGNGb3JtYXQ6KCk9PmdtLHV0Y0ZyaWRheTooKT0+R2csdXRjRnJpZGF5czooKT0+ZW0sdXRjSG91cjooKT0+SHYsdXRjSG91cnM6KCk9Pld2LHV0Y01pbGxpc2Vjb25kOigpPT5ZZyx1dGNNaWxsaXNlY29uZHM6KCk9PnpnLHV0Y01pbnV0ZTooKT0+R3YsdXRjTWludXRlczooKT0+WHYsdXRjTW9uZGF5OigpPT4kZyx1dGNNb25kYXlzOigpPT5RZyx1dGNNb250aDooKT0+VXYsdXRjTW9udGhzOigpPT5xdix1dGNQYXJzZTooKT0+bW0sdXRjU2F0dXJkYXk6KCk9PlhnLHV0Y1NhdHVyZGF5czooKT0+bm0sdXRjU2Vjb25kOigpPT5GZyx1dGNTZWNvbmRzOigpPT5QZyx1dGNTdW5kYXk6KCk9PnFnLHV0Y1N1bmRheXM6KCk9PlpnLHV0Y1RodXJzZGF5OigpPT5WZyx1dGNUaHVyc2RheXM6KCk9PnRtLHV0Y1R1ZXNkYXk6KCk9PkhnLHV0Y1R1ZXNkYXlzOigpPT5LZyx1dGNXZWRuZXNkYXk6KCk9PldnLHV0Y1dlZG5lc2RheXM6KCk9PkpnLHV0Y1dlZWs6KCk9PnFnLHV0Y1dlZWtzOigpPT5aZyx1dGNZZWFyOigpPT5zbSx1dGNZZWFyczooKT0+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/MDorZSk7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLHI9dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPXI7cmV0dXJuIHR9ZnVuY3Rpb24gcSh0LGUpe3ZhciBuLHI9dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxyOykobj0rdFtpXSkmJihhKz1uKTtlbHNlIGZvcig7KytpPHI7KShuPStlKHRbaV0saSx0KSkmJihhKz1uKTtyZXR1cm4gYX1mdW5jdGlvbiAkKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LEgpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9ZnVuY3Rpb24gSCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gVygpe3JldHVybiAkKGFyZ3VtZW50cyl9dmFyIFY9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEcodCl7cmV0dXJuIHR9dmFyIFg9MWUtNjtmdW5jdGlvbiBaKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gUSh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIEsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybit0KGUpfX1mdW5jdGlvbiBKKHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fWZ1bmN0aW9uIHR0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxhPTYsbz02LHM9MyxjPTE9PT10fHw0PT09dD8tMToxLHU9ND09PXR8fDI9PT10PyJ4IjoieSIsbD0xPT09dHx8Mz09PXQ/WjpRO2Z1bmN0aW9uIGgoaCl7dmFyIGY9bnVsbD09cj9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOnIsZD1udWxsPT1pP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpHOmkscD1NYXRoLm1heChhLDApK3MseT1lLnJhbmdlKCksZz0reVswXSsuNSxtPSt5W3kubGVuZ3RoLTFdKy41LHY9KGUuYmFuZHdpZHRoP0o6SykoZS5jb3B5KCkpLGI9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLF89Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGYsZSkub3JkZXIoKSx3PXguZXhpdCgpLGs9eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFQ9eC5zZWxlY3QoImxpbmUiKSxFPXguc2VsZWN0KCJ0ZXh0Iik7Xz1fLm1lcmdlKF8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHg9eC5tZXJnZShrKSxUPVQubWVyZ2Uoay5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUrIjIiLGMqYSkpLEU9RS5tZXJnZShrLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUsYypwKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09YiYmKF89Xy50cmFuc2l0aW9uKGgpLHg9eC50cmFuc2l0aW9uKGgpLFQ9VC50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLFgpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXYodCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLGsuYXR0cigib3BhY2l0eSIsWCkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gbChlJiZpc0Zpbml0ZShlPWUodCkpP2U6dih0KSl9KSkpLHcucmVtb3ZlKCksXy5hdHRyKCJkIiw0PT09dHx8Mj09dD9vPyJNIitjKm8rIiwiK2crIkgwLjVWIittKyJIIitjKm86Ik0wLjUsIitnKyJWIittOm8/Ik0iK2crIiwiK2MqbysiVjAuNUgiK20rIlYiK2MqbzoiTSIrZysiLDAuNUgiK20pLHguYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodih0KSl9KSksVC5hdHRyKHUrIjIiLGMqYSksRS5hdHRyKHUsYypwKS50ZXh0KGQpLGIuZmlsdGVyKHR0KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIiwyPT09dD8ic3RhcnQiOjQ9PT10PyJlbmQiOiJtaWRkbGUiKSxiLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9dn0pKX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1WLmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpWLmNhbGwodCksaCk6bi5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOlYuY2FsbCh0KSxoKTpyJiZyLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bz0rdCxoKTphfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsaCk6YX0saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGgpOm99LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsaCk6c30saH1mdW5jdGlvbiBudCh0KXtyZXR1cm4gZXQoMSx0KX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gZXQoMix0KX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gZXQoMyx0KX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gZXQoNCx0KX12YXIgb3Q9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gc3QoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgY3Qocil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gdXQodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGx0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gaHQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPW90LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1jdC5wcm90b3R5cGU9c3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9dXQodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09aHQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1odChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49bHQocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgY3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O2NvbnN0IGZ0PXN0O2Z1bmN0aW9uIGR0KCl7fWZ1bmN0aW9uIHB0KHQpe3JldHVybiBudWxsPT10P2R0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24geXQoKXtyZXR1cm5bXX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gbnVsbD09dD95dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fWZ1bmN0aW9uIG10KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIHZ0KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfWZ1bmN0aW9uIGJ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIF90KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyBidCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24geHQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IGJ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24gd3QodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59YnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpidCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIga3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IFR0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDprdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEV0KHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLFR0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpUdFtlXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEN0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fWZ1bmN0aW9uIER0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIE90KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBCdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBMdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEl0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8T3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gRnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIFB0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBqdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24genQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgVXQodCl9ZnVuY3Rpb24gVXQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVl0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gcXQodCxlKXtmb3IodmFyIG49enQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj16dCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIEh0KHQpe3JldHVybiBmdW5jdGlvbigpe3F0KHRoaXMsdCl9fWZ1bmN0aW9uIFd0KHQpe3JldHVybiBmdW5jdGlvbigpeyR0KHRoaXMsdCl9fWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP3F0OiR0KSh0aGlzLHQpfX1mdW5jdGlvbiBHdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gUXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBKdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIHRlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGVlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1rdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09a3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIHJlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGllKHQpe3ZhciBlPUV0KHQpO3JldHVybihlLmxvY2FsP3JlOm5lKShlKX1mdW5jdGlvbiBhZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG9lKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gc2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGNlKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1VdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciB1ZT17fSxsZT1udWxsO2Z1bmN0aW9uIGhlKHQsZSxuKXtyZXR1cm4gdD1mZSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGZlKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9bGU7bGU9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7bGU9aX19fWZ1bmN0aW9uIGRlKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIHBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiB5ZSh0LGUsbil7dmFyIHI9dWUuaGFzT3duUHJvcGVydHkodC50eXBlKT9oZTpmZTtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzLGM9dGhpcy5fX29uLHU9cihlLGEsbyk7aWYoYylmb3IodmFyIGw9MCxoPWMubGVuZ3RoO2w8aDsrK2wpaWYoKHM9Y1tsXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9dSxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsdSxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOnUsY2FwdHVyZTpufSxjP2MucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBnZSh0LGUsbixyKXt2YXIgaT1sZTt0LnNvdXJjZUV2ZW50PWxlLGxlPXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4scil9ZmluYWxseXtsZT1pfX1mdW5jdGlvbiBtZSh0LGUsbil7dmFyIHI9T3QodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbWUodGhpcyx0LGUpfX1mdW5jdGlvbiBiZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBtZSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh1ZT17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIF9lPVtudWxsXTtmdW5jdGlvbiB4ZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB3ZSgpe3JldHVybiBuZXcgeGUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxfZSl9eGUucHJvdG90eXBlPXdlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6eGUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IHhlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IHhlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IHhlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT94dDpfdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLHk9cC5sZW5ndGgsZz1jW2xdPW5ldyBBcnJheSh5KSxtPXNbbF09bmV3IEFycmF5KHkpO3IoaCxmLGcsbSx1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgdixiLF89MCx4PTA7Xzx5OysrXylpZih2PWdbX10pe2ZvcihfPj14JiYoeD1fKzEpOyEoYj1tW3hdKSYmKyt4PHk7KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyB4ZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHhlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHZ0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeGUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh2dCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyB4ZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD13dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgeGUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1FdCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/U3Q6Q3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9EdDpOdDpuLmxvY2FsP010OkF0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0J0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0l0Okx0KSh0LGUsbnVsbD09bj8iIjpuKSk6UnQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/RnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/anQ6UHQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49WXQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9enQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/VnQ6ZT9IdDpXdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/R3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1p0Olh0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/UXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0p0Okt0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2godGUpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZWUpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmllKHQpLHI9bnVsbD09ZT9hZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOnB0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG9lKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/Y2U6c2UpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9ZGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/eWU6cGUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2JlOnZlKSh0LGUpKX19O2NvbnN0IGtlPXdlO2Z1bmN0aW9uIFRlKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB4ZShbW3RdXSxfZSl9ZnVuY3Rpb24gRWUoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBDZSgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gU2UodCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1UZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLENlLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLENlLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBBZSh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9VGUodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoci5vbigiY2xpY2suZHJhZyIsQ2UsITApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX1mdW5jdGlvbiBNZSh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gRGUoKXt9dmFyIE9lPS43LEJlPTEvT2UsTGU9IlxccyooWystXT9cXGQrKVxccyoiLEllPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLFJlPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixGZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxQZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTGUsTGUsTGVdKyJcXCkkIiksamU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1JlLFJlLFJlXSsiXFwpJCIpLFllPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTGUsTGUsTGUsSWVdKyJcXCkkIiksemU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tSZSxSZSxSZSxJZV0rIlxcKSQiKSxVZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbSWUsUmUsUmVdKyJcXCkkIikscWU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJZSxSZSxSZSxJZV0rIlxcKSQiKSwkZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBIZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmUodCl7dmFyIGUsbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9RmUuZXhlYyh0KSk/KG49ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09bj9HZShlKTozPT09bj9uZXcgS2UoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1uP1hlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP1hlKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9UGUuZXhlYyh0KSk/bmV3IEtlKGVbMV0sZVsyXSxlWzNdLDEpOihlPWplLmV4ZWModCkpP25ldyBLZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1ZZS5leGVjKHQpKT9YZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT16ZS5leGVjKHQpKT9YZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1VZS5leGVjKHQpKT9ubihlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPXFlLmV4ZWModCkpP25uKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6JGUuaGFzT3duUHJvcGVydHkodCk/R2UoJGVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBLZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEdlKHQpe3JldHVybiBuZXcgS2UodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFhlKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgS2UodCxlLG4scil9ZnVuY3Rpb24gWmUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEZXx8KHQ9VmUodCkpLHQ/bmV3IEtlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBLZX1mdW5jdGlvbiBRZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/WmUodCk6bmV3IEtlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBLZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gSmUoKXtyZXR1cm4iIyIrZW4odGhpcy5yKStlbih0aGlzLmcpK2VuKHRoaXMuYil9ZnVuY3Rpb24gdG4oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBlbih0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG5uKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgb24odCxlLG4scil9ZnVuY3Rpb24gcm4odCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiBuZXcgb24odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRGV8fCh0PVZlKHQpKSwhdClyZXR1cm4gbmV3IG9uO2lmKHQgaW5zdGFuY2VvZiBvbilyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLGE9TWF0aC5tYXgoZSxuLHIpLG89TmFOLHM9YS1pLGM9KGEraSkvMjtyZXR1cm4gcz8obz1lPT09YT8obi1yKS9zKzYqKG48cik6bj09PWE/KHItZSkvcysyOihlLW4pL3MrNCxzLz1jPC41P2EraToyLWEtaSxvKj02MCk6cz1jPjAmJmM8MT8wOm8sbmV3IG9uKG8scyxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gYW4odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3JuKHQpOm5ldyBvbih0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gb24odCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHNuKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBjbih0LGUsbixyLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKm4rKDErMyp0KzMqYS0zKm8pKnIrbyppKS82fWZ1bmN0aW9uIHVuKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sYT10W3IrMV0sbz1yPjA/dFtyLTFdOjIqaS1hLHM9cjxlLTE/dFtyKzJdOjIqYS1pO3JldHVybiBjbigobi1yL2UpKmUsbyxpLGEscyl9fWZ1bmN0aW9uIGxuKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhyK2UtMSklZV0sYT10W3IlZV0sbz10WyhyKzEpJWVdLHM9dFsocisyKSVlXTtyZXR1cm4gY24oKG4tci9lKSplLGksYSxvLHMpfX1mdW5jdGlvbiBobih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZm4odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBkbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mbih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6aG4oaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBwbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9mbih0LG4pOmhuKGlzTmFOKHQpP2U6dCl9TWUoRGUsVmUse2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6SGUsZm9ybWF0SGV4OkhlLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBybih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOldlLHRvU3RyaW5nOldlfSksTWUoS2UsUWUsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/QmU6TWF0aC5wb3coQmUsdCksbmV3IEtlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P09lOk1hdGgucG93KE9lLHQpLG5ldyBLZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkplLGZvcm1hdEhleDpKZSxmb3JtYXRSZ2I6dG4sdG9TdHJpbmc6dG59KSksTWUob24sYW4sTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/QmU6TWF0aC5wb3coQmUsdCksbmV3IG9uKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/T2U6TWF0aC5wb3coT2UsdCksbmV3IG9uKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgS2Uoc24odD49MjQwP3QtMjQwOnQrMTIwLGksciksc24odCxpLHIpLHNuKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7Y29uc3QgeW49ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP3BuOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6aG4oaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PVFlKHQpKS5yLChlPVFlKGUpKS5yKSxpPW4odC5nLGUuZyksYT1uKHQuYixlLmIpLG89cG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIGduKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9UWUoZVtuXSksYVtuXT1yLnJ8fDAsb1tuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIGE9dChhKSxvPXQobykscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9YSh0KSxyLmc9byh0KSxyLmI9cyh0KSxyKyIifX19dmFyIG1uPWduKHVuKSx2bj1nbihsbik7ZnVuY3Rpb24gYm4odCxlKXtlfHwoZT1bXSk7dmFyIG4scj10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLGk9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihhKXtmb3Iobj0wO248cjsrK24paVtuXT10W25dKigxLWEpK2Vbbl0qYTtyZXR1cm4gaX19ZnVuY3Rpb24gX24odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIHhuKHQsZSl7cmV0dXJuKF9uKGUpP2JuOnduKSh0LGUpfWZ1bmN0aW9uIHduKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKWFbbl09TW4odFtuXSxlW25dKTtmb3IoO248cjsrK24pb1tuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pb1tuXT1hW25dKHQpO3JldHVybiBvfX1mdW5jdGlvbiBrbih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0KigxLXIpK2Uqciksbn19ZnVuY3Rpb24gVG4odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19ZnVuY3Rpb24gRW4odCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPU1uKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19dmFyIENuPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxTbj1uZXcgUmVnRXhwKENuLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEFuKHQsZSl7dmFyIG4scixpLGE9Q24ubGFzdEluZGV4PVNuLmxhc3RJbmRleD0wLG89LTEscz1bXSxjPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1Dbi5leGVjKHQpKSYmKHI9U24uZXhlYyhlKSk7KShpPXIuaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1tvXT9zW29dKz1yOnNbKytvXT1yOihzWysrb109bnVsbCxjLnB1c2goe2k6byx4OlRuKG4scil9KSksYT1Tbi5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2NbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0oY1swXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWNbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIE1uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9obihlKTooIm51bWJlciI9PT1yP1RuOiJzdHJpbmciPT09cj8obj1WZShlKSk/KGU9bix5bik6QW46ZSBpbnN0YW5jZW9mIFZlP3luOmUgaW5zdGFuY2VvZiBEYXRlP2tuOl9uKGUpP2JuOkFycmF5LmlzQXJyYXkoZSk/d246ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP0VuOlRuKSh0LGUpfWZ1bmN0aW9uIE5uKCl7Zm9yKHZhciB0LGU9bGU7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gRG4odCxlKXt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1uLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD1lLmNsaWVudFgsci55PWUuY2xpZW50WSxbKHI9ci5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LHIueV19dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBPbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9Tm4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBEbih0LHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEJuKHQpe3ZhciBlPU5uKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLERuKHQsZSl9dmFyIExuLEluLFJuPTAsRm49MCxQbj0wLGpuPTAsWW49MCx6bj0wLFVuPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHFuPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uICRuKCl7cmV0dXJuIFlufHwocW4oSG4pLFluPVVuLm5vdygpK3puKX1mdW5jdGlvbiBIbigpe1luPTB9ZnVuY3Rpb24gV24oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFZuKHQsZSxuKXt2YXIgcj1uZXcgV247cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBHbigpeyRuKCksKytSbjtmb3IodmFyIHQsZT1MbjtlOykodD1Zbi1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tUm59ZnVuY3Rpb24gWG4oKXtZbj0oam49VW4ubm93KCkpK3puLFJuPUZuPTA7dHJ5e0duKCl9ZmluYWxseXtSbj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1MbixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6TG49ZSk7SW49dCxRbihyKX0oKSxZbj0wfX1mdW5jdGlvbiBabigpe3ZhciB0PVVuLm5vdygpLGU9dC1qbjtlPjFlMyYmKHpuLT1lLGpuPXQpfWZ1bmN0aW9uIFFuKHQpe1JufHwoRm4mJihGbj1jbGVhclRpbWVvdXQoRm4pKSx0LVluPjI0Pyh0PDEvMCYmKEZuPXNldFRpbWVvdXQoWG4sdC1Vbi5ub3coKS16bikpLFBuJiYoUG49Y2xlYXJJbnRlcnZhbChQbikpKTooUG58fChqbj1Vbi5ub3coKSxQbj1zZXRJbnRlcnZhbChabiwxZTMpKSxSbj0xLHFuKFhuKSkpfWZ1bmN0aW9uIEtuKHQsZSxuKXt2YXIgcj1uZXcgV247cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfVduLnByb3RvdHlwZT1Wbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlduLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj8kbigpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxJbj09PXRoaXN8fChJbj9Jbi5fbmV4dD10aGlzOkxuPXRoaXMsSW49dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixRbigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxRbigpKX19O3ZhciBKbj1mdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx0cj1bXTtmdW5jdGlvbiBlcih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gS24oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihLbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1WbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpKbix0d2Vlbjp0cix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gbnIodCxlKXt2YXIgbj1pcih0LGUpO2lmKG4uc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHJyKHQsZSl7dmFyIG49aXIodCxlKTtpZihuLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIG59ZnVuY3Rpb24gaXIodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBhcih0LGUpe3ZhciBuLHIsaSxhPXQuX190cmFuc2l0aW9uLG89ITA7aWYoYSl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixhKShuPWFbaV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+MiYmbi5zdGF0ZTw1LG4uc3RhdGU9NixuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgYVtpXSk6bz0hMTtvJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fXZhciBvcixzcixjcix1cixscj0xODAvTWF0aC5QSSxocj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBmcih0LGUsbixyLGksYSl7dmFyIG8scyxjO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChjPXQqbitlKnIpJiYobi09dCpjLHItPWUqYyksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxjLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGM9LWMsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpscixza2V3WDpNYXRoLmF0YW4oYykqbHIsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIGRyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6VG4odCxpKX0se2k6Yy0yLHg6VG4ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OlRuKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OlRuKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OlRuKHQsbil9LHtpOnMtMix4OlRuKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIHByPWRyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2hyOihvcnx8KG9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHNyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjcj1kb2N1bWVudC5kZWZhdWx0Vmlldyksb3Iuc3R5bGUudHJhbnNmb3JtPXQsdD1jci5nZXRDb21wdXRlZFN0eWxlKHNyLmFwcGVuZENoaWxkKG9yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxzci5yZW1vdmVDaGlsZChvciksZnIoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLHlyPWRyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9ocjoodXJ8fCh1cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx1ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9dXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/ZnIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6aHIpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBncih0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9cnIodGhpcyx0KSxhPWkudHdlZW47aWYoYSE9PW4pZm9yKHZhciBvPTAscz0ocj1uPWEpLmxlbmd0aDtvPHM7KytvKWlmKHJbb10ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKG8sMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBtcih0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9cnIodGhpcyx0KSxvPWEudHdlZW47aWYobyE9PXIpe2k9KHI9bykuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxjPTAsdT1pLmxlbmd0aDtjPHU7KytjKWlmKGlbY10ubmFtZT09PWUpe2lbY109czticmVha31jPT09dSYmaS5wdXNoKHMpfWEudHdlZW49aX19ZnVuY3Rpb24gdnIodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9cnIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gaXIodCxyKS52YWx1ZVtlXX19ZnVuY3Rpb24gYnIodCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP1RuOmUgaW5zdGFuY2VvZiBWZT95bjoobj1WZShlKSk/KGU9bix5bik6QW4pKHQsZSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHhyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gd3IodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19ZnVuY3Rpb24ga3IodCxlLG4pe3ZhciByLGksYT1uKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIFRyKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0ocz1jKyIiKT9udWxsOm89PT1yJiZzPT09aT9hOihpPXMsYT1lKHI9byxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEVyKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8scyxjPW4odGhpcyk7aWYobnVsbCE9YylyZXR1cm4obz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3IodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLG4pKX19ZnVuY3Rpb24gQXIodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZTcih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTXIodCxlKXt2YXIgbixyO2Z1bmN0aW9uIGkoKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihuPShyPWkpJiZDcih0LGkpKSxufXJldHVybiBpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTnIodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtucih0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe25yKHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtycih0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3JyKHRoaXMsdCkuZHVyYXRpb249ZX19ZnVuY3Rpb24gTHIodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7cnIodGhpcyx0KS5lYXNlPWV9fWZ1bmN0aW9uIElyKHQsZSxuKXt2YXIgcixpLGE9ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeSgoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSkpfShlKT9ucjpycjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1hKHRoaXMsdCkscz1vLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksby5vbj1pfX12YXIgUnI9a2UucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIFByKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLHIpLG4pfX1mdW5jdGlvbiBqcih0LGUsbil7dmFyIHIsaTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYocj0oaT1hKSYmUHIodCxhLG4pKSxyfXJldHVybiBhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gWXIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlLG47ZnVuY3Rpb24gcigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09biYmKGU9KG49cikmJllyKHIpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9dmFyIFVyPTA7ZnVuY3Rpb24gcXIodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uICRyKHQpe3JldHVybiBrZSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gSHIoKXtyZXR1cm4rK1VyfXZhciBXcj1rZS5wcm90b3R5cGU7ZnVuY3Rpb24gVnIodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIEdyKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBYcih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1xci5wcm90b3R5cGU9JHIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxcixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1wdCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKWZvcih2YXIgcyxjLHU9cltvXSxsPXUubGVuZ3RoLGg9YVtvXT1uZXcgQXJyYXkobCksZj0wO2Y8bDsrK2YpKHM9dVtmXSkmJihjPXQuY2FsbChzLHMuX19kYXRhX18sZix1KSkmJigiX19kYXRhX18iaW4gcyYmKGMuX19kYXRhX189cy5fX2RhdGFfXyksaFtmXT1jLGVyKGhbZl0sZSxuLGYsaCxpcihzLG4pKSk7cmV0dXJuIG5ldyBxcihhLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPVtdLG89W10scz0wO3M8aTsrK3MpZm9yKHZhciBjLHU9cltzXSxsPXUubGVuZ3RoLGg9MDtoPGw7KytoKWlmKGM9dVtoXSl7Zm9yKHZhciBmLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxoLHUpLHA9aXIoYyxuKSx5PTAsZz1kLmxlbmd0aDt5PGc7Kyt5KShmPWRbeV0pJiZlcihmLGUsbix5LGQscCk7YS5wdXNoKGQpLG8ucHVzaChjKX1yZXR1cm4gbmV3IHFyKGEsbyxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW10KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG89ZVtpXSxzPW8ubGVuZ3RoLGM9cltpXT1bXSx1PTA7dTxzOysrdSkoYT1vW3VdKSYmdC5jYWxsKGEsYS5fX2RhdGFfXyx1LG8pJiZjLnB1c2goYSk7cmV0dXJuIG5ldyBxcihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBxcihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgUnIodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPUhyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpaWYobz1zW3VdKXt2YXIgbD1pcihvLGUpO2VyKG8sdCxuLHUscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgcXIocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6V3IuY2FsbCxub2RlczpXci5ub2Rlcyxub2RlOldyLm5vZGUsc2l6ZTpXci5zaXplLGVtcHR5OldyLmVtcHR5LGVhY2g6V3IuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aXIodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKElyKG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1FdCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj95cjpicjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9FcjpUcikobixyLHZyKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP3hyOl9yKShuKToobi5sb2NhbD9rcjp3cikobixyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1FdCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP0FyOk1yKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP3ByOmJyO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVJ0KHRoaXMsdCksbz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxSdCh0aGlzLHQpKTtyZXR1cm4gYT09PW8/bnVsbDphPT09biYmbz09PXI/aTppPWUobj1hLHI9byl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxGcih0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpLHM9bih0aGlzKSxjPXMrIiI7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9cz1SdCh0aGlzLHQpKSxvPT09Yz9udWxsOm89PT1yJiZjPT09aT9hOihpPWMsYT1lKHI9byxzKSl9fSh0LHIsdnIodGhpcywic3R5bGUuIit0LGUpKSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG89InN0eWxlLiIrZSxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXJyKHRoaXMsdCksdT1jLm9uLGw9bnVsbD09Yy52YWx1ZVtvXT9hfHwoYT1GcihlKSk6dm9pZCAwO3U9PT1uJiZpPT09bHx8KHI9KG49dSkuY29weSgpKS5vbihzLGk9bCksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpO3JldHVybiBvPT09YT9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKSxuKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixqcih0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSh2cih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsenIodCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9aXIodGhpcy5ub2RlKCksbikudHdlZW4sYT0wLG89aS5sZW5ndGg7YTxvOysrYSlpZigocj1pW2FdKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2dyOm1yKShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P05yOkRyKShlLHQpKTppcih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9PcjpCcikoZSx0KSk6aXIodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKExyKGUsdCkpOmlyKHRoaXMubm9kZSgpLGUpLmVhc2V9LGVuZDpmdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzLHI9bi5faWQsaT1uLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9e3ZhbHVlOm99LGM9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1pJiZhKCl9fTtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49cnIodGhpcyxyKSxpPW4ub247aSE9PXQmJigoZT0odD1pKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2gocyksZS5fLmludGVycnVwdC5wdXNoKHMpLGUuXy5lbmQucHVzaChjKSksbi5vbj1lfSkpfSkpfX07dmFyIFpyPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpYcn07ZnVuY3Rpb24gUXIodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gWnIudGltZT0kbigpLFpyO3JldHVybiBufWtlLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXthcih0aGlzLHQpfSkpfSxrZS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBxcj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPUhyKCksKG49WnIpLnRpbWU9JG4oKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiZlcihvLHQsZSx1LHMsbnx8UXIobyxlKSk7cmV0dXJuIG5ldyBxcihyLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIEtyPVtudWxsXTtmdW5jdGlvbiBKcih0LGUpe3ZhciBuLHIsaT10Ll9fdHJhbnNpdGlvbjtpZihpKWZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsaSlpZigobj1pW3JdKS5zdGF0ZT4xJiZuLm5hbWU9PT1lKXJldHVybiBuZXcgcXIoW1t0XV0sS3IsZSwrcik7cmV0dXJuIG51bGx9ZnVuY3Rpb24gdGkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGVpKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59ZnVuY3Rpb24gbmkoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByaSgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIGlpPXtuYW1lOiJkcmFnIn0sYWk9e25hbWU6InNwYWNlIn0sb2k9e25hbWU6ImhhbmRsZSJ9LHNpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBjaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHVpKHQpe3JldHVybltjaSh0WzBdKSxjaSh0WzFdKV19ZnVuY3Rpb24gbGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBPbihlLGxlLnRvdWNoZXMsdCl9fXZhciBoaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGJpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sZmk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChiaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGRpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChiaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp1aSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0scGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LHlpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxnaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sbWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sdmk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gYmkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gX2koKXtyZXR1cm4hbGUuY3RybEtleSYmIWxlLmJ1dHRvbn1mdW5jdGlvbiB4aSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGtpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBFaSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIENpKCl7cmV0dXJuIE1pKGhpKX1mdW5jdGlvbiBTaSgpe3JldHVybiBNaShmaSl9ZnVuY3Rpb24gQWkoKXtyZXR1cm4gTWkoZGkpfWZ1bmN0aW9uIE1pKHQpe3ZhciBlLG49eGkscj1faSxpPXdpLGE9ITAsbz1mdCgic3RhcnQiLCJicnVzaCIsImVuZCIpLHM9NjtmdW5jdGlvbiBjKGUpe3ZhciBuPWUucHJvcGVydHkoIl9fYnJ1c2giLHkpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtiaSgib3ZlcmxheSIpXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixwaS5vdmVybGF5KS5tZXJnZShuKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWtpKHRoaXMpLmV4dGVudDtUZSh0aGlzKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSl9KSksZS5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFtiaSgic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixwaS5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgcj1lLnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEodC5oYW5kbGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpO3IuZXhpdCgpLnJlbW92ZSgpLHIuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gcGlbdC50eXBlXX0pKSxlLmVhY2godSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLGYpLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC5icnVzaCIsZikub24oInRvdWNobW92ZS5icnVzaCIsZCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixwKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gdSgpe3ZhciB0PVRlKHRoaXMpLGU9a2kodGhpcykuc2VsZWN0aW9uO2U/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGVbMF1bMF0pLmF0dHIoInkiLGVbMF1bMV0pLmF0dHIoIndpZHRoIixlWzFdWzBdLWVbMF1bMF0pLmF0dHIoImhlaWdodCIsZVsxXVsxXS1lWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlW3QudHlwZS5sZW5ndGgtMV0/ZVsxXVswXS1zLzI6ZVswXVswXS1zLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9lWzFdWzFdLXMvMjplWzBdWzFdLXMvMn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP2VbMV1bMF0tZVswXVswXStzOnN9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlfHwidyI9PT10LnR5cGU/ZVsxXVsxXS1lWzBdWzFdK3M6c30pKSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwodCxlLG4pe3ZhciByPXQuX19icnVzaC5lbWl0dGVyO3JldHVybiFyfHxuJiZyLmNsZWFuP25ldyBoKHQsZSxuKTpyfWZ1bmN0aW9uIGgodCxlLG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTAsdGhpcy5jbGVhbj1ufWZ1bmN0aW9uIGYoKXtpZigoIWV8fGxlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLHksZyxtPXRoaXMsdj1sZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmxlLm1ldGFLZXk/dj0ib3ZlcmxheSI6dik/aWk6YSYmbGUuYWx0S2V5P3NpOm9pLF89dD09PWZpP251bGw6bWlbdl0seD10PT09aGk/bnVsbDp2aVt2XSx3PWtpKG0pLGs9dy5leHRlbnQsVD13LnNlbGVjdGlvbixFPWtbMF1bMF0sQz1rWzBdWzFdLFM9a1sxXVswXSxBPWtbMV1bMV0sTT0wLE49MCxEPV8mJngmJmEmJmxlLnNoaWZ0S2V5LE89bGUudG91Y2hlcz9saShsZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpCbixCPU8obSksTD1CLEk9bChtLGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT12PyhUJiYocD0hMCksdy5zZWxlY3Rpb249VD1bW249dD09PWZpP0U6QlswXSxvPXQ9PT1oaT9DOkJbMV1dLFtjPXQ9PT1maT9TOm4sZj10PT09aGk/QTpvXV0pOihuPVRbMF1bMF0sbz1UWzBdWzFdLGM9VFsxXVswXSxmPVRbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgUj1UZShtKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxGPVIuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIscGlbdl0pO2lmKGxlLnRvdWNoZXMpSS5tb3ZlZD1qLEkuZW5kZWQ9ejtlbHNle3ZhciBQPVRlKGxlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGosITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZQLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLHEsITApLFNlKGxlLnZpZXcpfW5pKCksYXIobSksdS5jYWxsKG0pLEkuc3RhcnQoKX1mdW5jdGlvbiBqKCl7dmFyIHQ9TyhtKTshRHx8eXx8Z3x8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT9nPSEwOnk9ITApLEw9dCxwPSEwLHJpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLUJbMF0sTj1MWzFdLUJbMV0sYil7Y2FzZSBhaTpjYXNlIGlpOl8mJihNPU1hdGgubWF4KEUtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSx4JiYoTj1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE4pKSxzPW8rTixkPWYrTik7YnJlYWs7Y2FzZSBvaTpfPDA/KE09TWF0aC5tYXgoRS1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTpfPjAmJihNPU1hdGgubWF4KEUtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSkseDwwPyhOPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTikpLHM9bytOLGQ9Zik6eD4wJiYoTj1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE4pKSxzPW8sZD1mK04pO2JyZWFrO2Nhc2Ugc2k6XyYmKGk9TWF0aC5tYXgoRSxNYXRoLm1pbihTLG4tTSpfKSksaD1NYXRoLm1heChFLE1hdGgubWluKFMsYytNKl8pKSkseCYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTip4KSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitOKngpKSl9aDxpJiYoXyo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsdiBpbiB5aSYmRi5hdHRyKCJjdXJzb3IiLHBpW3Y9eWlbdl1dKSksZDxzJiYoeCo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsdiBpbiBnaSYmRi5hdHRyKCJjdXJzb3IiLHBpW3Y9Z2lbdl1dKSksdy5zZWxlY3Rpb24mJihUPXcuc2VsZWN0aW9uKSx5JiYoaT1UWzBdWzBdLGg9VFsxXVswXSksZyYmKHM9VFswXVsxXSxkPVRbMV1bMV0pLFRbMF1bMF09PT1pJiZUWzBdWzFdPT09cyYmVFsxXVswXT09PWgmJlRbMV1bMV09PT1kfHwody5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwobSksSS5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYobmkoKSxsZS50b3VjaGVzKXtpZihsZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQWUobGUudmlldyxwKSxQLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtSLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRi5hdHRyKCJjdXJzb3IiLHBpLm92ZXJsYXkpLHcuc2VsZWN0aW9uJiYoVD13LnNlbGVjdGlvbiksVGkoVCkmJih3LnNlbGVjdGlvbj1udWxsLHUuY2FsbChtKSksSS5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGxlLmtleUNvZGUpe2Nhc2UgMTY6RD1fJiZ4O2JyZWFrO2Nhc2UgMTg6Yj09PW9pJiYoXyYmKGM9aC1NKl8sbj1pK00qXykseCYmKGY9ZC1OKngsbz1zK04qeCksYj1zaSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PW9pJiZiIT09c2l8fChfPDA/Yz1oLU06Xz4wJiYobj1pLU0pLHg8MD9mPWQtTjp4PjAmJihvPXMtTiksYj1haSxGLmF0dHIoImN1cnNvciIscGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJpKCl9ZnVuY3Rpb24gcSgpe3N3aXRjaChsZS5rZXlDb2RlKXtjYXNlIDE2OkQmJih5PWc9RD0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PXNpJiYoXzwwP2M9aDpfPjAmJihuPWkpLHg8MD9mPWQ6eD4wJiYobz1zKSxiPW9pLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09YWkmJihsZS5hbHRLZXk/KF8mJihjPWgtTSpfLG49aStNKl8pLHgmJihmPWQtTip4LG89cytOKngpLGI9c2kpOihfPDA/Yz1oOl8+MCYmKG49aSkseDwwP2Y9ZDp4PjAmJihvPXMpLGI9b2kpLEYuYXR0cigiY3Vyc29yIixwaVt2XSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn1yaSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiB5KCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD11aShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPU1uKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO2FyKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7Z2UobmV3IGVpKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnRpKHVpKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnRpKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp0aSghIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIE5pPU1hdGguY29zLERpPU1hdGguc2luLE9pPU1hdGguUEksQmk9T2kvMixMaT0yKk9pLElpPU1hdGgubWF4O2Z1bmN0aW9uIFJpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRmkoKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzLGMsdSxsLGg9aS5sZW5ndGgsZj1bXSxkPWsoaCkscD1bXSx5PVtdLGc9eS5ncm91cHM9bmV3IEFycmF5KGgpLG09bmV3IEFycmF5KGgqaCk7Zm9yKGE9MCx1PS0xOysrdTxoOyl7Zm9yKG89MCxsPS0xOysrbDxoOylvKz1pW3VdW2xdO2YucHVzaChvKSxwLnB1c2goayhoKSksYSs9b31mb3IoZSYmZC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKGZbdF0sZltuXSl9KSksbiYmcC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihpW2VdW3RdLGlbZV1bcl0pfSkpfSkpLGM9KGE9SWkoMCxMaS10KmgpL2EpP3Q6TGkvaCxvPTAsdT0tMTsrK3U8aDspe2ZvcihzPW8sbD0tMTsrK2w8aDspe3ZhciB2PWRbdV0sYj1wW3ZdW2xdLF89aVt2XVtiXSx4PW8sdz1vKz1fKmE7bVtiKmgrdl09e2luZGV4OnYsc3ViaW5kZXg6YixzdGFydEFuZ2xlOngsZW5kQW5nbGU6dyx2YWx1ZTpffX1nW3ZdPXtpbmRleDp2LHN0YXJ0QW5nbGU6cyxlbmRBbmdsZTpvLHZhbHVlOmZbdl19LG8rPWN9Zm9yKHU9LTE7Kyt1PGg7KWZvcihsPXUtMTsrK2w8aDspe3ZhciBUPW1bbCpoK3VdLEU9bVt1KmgrbF07KFQudmFsdWV8fEUudmFsdWUpJiZ5LnB1c2goVC52YWx1ZTxFLnZhbHVlP3tzb3VyY2U6RSx0YXJnZXQ6VH06e3NvdXJjZTpULHRhcmdldDpFfSl9cmV0dXJuIHI/eS5zb3J0KHIpOnl9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9SWkoMCxlKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihyPVJpKHQpKS5fPXQsaSk6ciYmci5ffSxpfXZhciBQaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gamkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBZaT1NYXRoLlBJLHppPTIqWWksVWk9MWUtNixxaT16aS1VaTtmdW5jdGlvbiAkaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEhpKCl7cmV0dXJuIG5ldyAkaX0kaS5wcm90b3R5cGU9SGkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokaSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+VWkpaWYoTWF0aC5hYnMobCpzLWMqdSk+VWkmJmkpe3ZhciBmPW4tYSxkPXItbyxwPXMqcytjKmMseT1mKmYrZCpkLGc9TWF0aC5zcXJ0KHApLG09TWF0aC5zcXJ0KGgpLHY9aSpNYXRoLnRhbigoWWktTWF0aC5hY29zKChwK2gteSkvKDIqZyptKSkpLzIpLGI9di9tLF89di9nO01hdGguYWJzKGItMSk+VWkmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPlVpfHxNYXRoLmFicyh0aGlzLl95MS11KT5VaSkmJih0aGlzLl8rPSJMIitjKyIsIit1KSxuJiYoaDwwJiYoaD1oJXppK3ppKSxoPnFpP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodC1vKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitsKyIsIisodGhpcy5feDE9YykrIiwiKyh0aGlzLl95MT11KTpoPlVpJiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1ZaSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2NvbnN0IFdpPUhpO2Z1bmN0aW9uIFZpKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBHaSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gWGkodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIFppKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gUWkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gS2koKXt2YXIgdD1WaSxlPUdpLG49WGkscj1aaSxpPVFpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1QaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLUJpLGY9aS5hcHBseSh0aGlzLHMpLUJpLGQ9bCpOaShoKSxwPWwqRGkoaCkseT0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLGc9ci5hcHBseSh0aGlzLHMpLUJpLG09aS5hcHBseSh0aGlzLHMpLUJpO2lmKGF8fChhPW89V2koKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT1nJiZmPT09bXx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAseSpOaShnKSx5KkRpKGcpKSxhLmFyYygwLDAseSxnLG0pKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6amkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfXZhciBKaT0iJCI7ZnVuY3Rpb24gdGEoKXt9ZnVuY3Rpb24gZWEodCxlKXt2YXIgbj1uZXcgdGE7aWYodCBpbnN0YW5jZW9mIHRhKXQuZWFjaCgoZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxhPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8YTspbi5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPGE7KW4uc2V0KGUocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgbyBpbiB0KW4uc2V0KG8sdFtvXSk7cmV0dXJuIG59dGEucHJvdG90eXBlPWVhLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dGEsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiBKaSt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tKaSt0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbSmkrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9SmkrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09SmkmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1KaSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PUppJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PUppKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1KaSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTtjb25zdCBuYT1lYTtmdW5jdGlvbiByYSgpe3ZhciB0LGUsbixyPVtdLGk9W107ZnVuY3Rpb24gYShuLGksbyxzKXtpZihpPj1yLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgYyx1LGwsaD0tMSxmPW4ubGVuZ3RoLGQ9cltpKytdLHA9bmEoKSx5PW8oKTsrK2g8ZjspKGw9cC5nZXQoYz1kKHU9bltoXSkrIiIpKT9sLnB1c2godSk6cC5zZXQoYyxbdV0pO3JldHVybiBwLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyh5LGUsYSh0LGksbyxzKSl9KSkseX1mdW5jdGlvbiBvKHQsbil7aWYoKytuPnIubGVuZ3RoKXJldHVybiB0O3ZhciBhLHM9aVtuLTFdO3JldHVybiBudWxsIT1lJiZuPj1yLmxlbmd0aD9hPXQuZW50cmllcygpOihhPVtdLHQuZWFjaCgoZnVuY3Rpb24odCxlKXthLnB1c2goe2tleTplLHZhbHVlczpvKHQsbil9KX0pKSksbnVsbCE9cz9hLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOmF9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsaWEsYWEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLG9hLHNhKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyhhKHQsMCxvYSxzYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX1mdW5jdGlvbiBpYSgpe3JldHVybnt9fWZ1bmN0aW9uIGFhKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gb2EoKXtyZXR1cm4gbmEoKX1mdW5jdGlvbiBzYSh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBjYSgpe312YXIgdWE9bmEucHJvdG90eXBlO2Z1bmN0aW9uIGxhKHQsZSl7dmFyIG49bmV3IGNhO2lmKHQgaW5zdGFuY2VvZiBjYSl0LmVhY2goKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufWNhLnByb3RvdHlwZT1sYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmNhLGhhczp1YS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW0ppKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOnVhLnJlbW92ZSxjbGVhcjp1YS5jbGVhcix2YWx1ZXM6dWEua2V5cyxzaXplOnVhLnNpemUsZW1wdHk6dWEuZW1wdHksZWFjaDp1YS5lYWNofTtjb25zdCBoYT1sYTtmdW5jdGlvbiBmYSh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9ZnVuY3Rpb24gZGEodCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHBhKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7a2V5Om4sdmFsdWU6dFtuXX0pO3JldHVybiBlfXZhciB5YT1NYXRoLlBJLzE4MCxnYT0xODAvTWF0aC5QSSxtYT0uOTY0MjIsdmE9LjgyNTIxLGJhPTQvMjksX2E9Ni8yOSx4YT0zKl9hKl9hO2Z1bmN0aW9uIHdhKHQpe2lmKHQgaW5zdGFuY2VvZiBFYSlyZXR1cm4gbmV3IEVhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJhKXJldHVybiBMYSh0KTt0IGluc3RhbmNlb2YgS2V8fCh0PVplKHQpKTt2YXIgZSxuLHI9TWEodC5yKSxpPU1hKHQuZyksYT1NYSh0LmIpLG89Q2EoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPUNhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvbWEpLG49Q2EoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS92YSkpLG5ldyBFYSgxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24ga2EodCxlKXtyZXR1cm4gbmV3IEVhKHQsMCwwLG51bGw9PWU/MTplKX1mdW5jdGlvbiBUYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/d2EodCk6bmV3IEVhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBFYSh0LGUsbixyKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQ2EodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC94YStiYX1mdW5jdGlvbiBTYSh0KXtyZXR1cm4gdD5fYT90KnQqdDp4YSoodC1iYSl9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBNYSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBOYSh0KXtpZih0IGluc3RhbmNlb2YgQmEpcmV0dXJuIG5ldyBCYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBFYXx8KHQ9d2EodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBCYShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpnYTtyZXR1cm4gbmV3IEJhKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIERhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OYSh0KTpuZXcgQmEobixlLHQsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIE9hKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OYSh0KTpuZXcgQmEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEJhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBMYSh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgRWEodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp5YTtyZXR1cm4gbmV3IEVhKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9TWUoRWEsVGEsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRWEodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFYSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgS2UoQWEoMy4xMzM4NTYxKihlPW1hKlNhKGUpKS0xLjYxNjg2NjcqKHQ9MSpTYSh0KSktLjQ5MDYxNDYqKG49dmEqU2EobikpKSxBYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLEFhKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksTWUoQmEsT2EsTmUoRGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQmEodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCYSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBMYSh0aGlzKS5yZ2IoKX19KSk7dmFyIElhPS0uMTQ4NjEsUmE9MS43ODI3NyxGYT0tLjI5MjI3LFBhPS0uOTA2NDksamE9MS45NzI5NCxZYT1qYSpQYSx6YT1qYSpSYSxVYT1SYSpGYS1QYSpJYTtmdW5jdGlvbiBxYSh0KXtpZih0IGluc3RhbmNlb2YgSGEpcmV0dXJuIG5ldyBIYSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBLZXx8KHQ9WmUodCkpO3ZhciBlPXQuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPShVYSpyK1lhKmUtemEqbikvKFVhK1lhLXphKSxhPXItaSxvPShqYSoobi1pKS1GYSphKS9QYSxzPU1hdGguc3FydChvKm8rYSphKS8oamEqaSooMS1pKSksYz1zP01hdGguYXRhbjIobyxhKSpnYS0xMjA6TmFOO3JldHVybiBuZXcgSGEoYzwwP2MrMzYwOmMscyxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gJGEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3FhKHQpOm5ldyBIYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gSGEodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfU1lKEhhLCRhLE5lKERlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0JlOk1hdGgucG93KEJlLHQpLG5ldyBIYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P09lOk1hdGgucG93KE9lLHQpLG5ldyBIYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/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/KT8kLykpKWNvbnRpbnVlO1BvJiZyWzRdJiYhcls3XSYmKGk9aS5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxpPW5ldyBEYXRlKGkpfWVsc2UgaT1uO2Vsc2UgaT1udWxsO3RbZV09aX1yZXR1cm4gdH12YXIgUG89bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCk7ZnVuY3Rpb24gam8odCl7cmV0dXJuK3R9ZnVuY3Rpb24gWW8odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiB6byh0KXtyZXR1cm4gdCooMi10KX1mdW5jdGlvbiBVbyh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn12YXIgcW89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSwkbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxIbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxXbz1NYXRoLlBJLFZvPVdvLzI7ZnVuY3Rpb24gR28odCl7cmV0dXJuIDE9PSt0PzE6MS1NYXRoLmNvcyh0KlZvKX1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpWbyl9ZnVuY3Rpb24gWm8odCl7cmV0dXJuKDEtTWF0aC5jb3MoV28qdCkpLzJ9ZnVuY3Rpb24gUW8odCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIEtvKHQpe3JldHVybiBRbygxLSt0KX1mdW5jdGlvbiBKbyh0KXtyZXR1cm4gMS1Rbyh0KX1mdW5jdGlvbiB0cyh0KXtyZXR1cm4oKHQqPTIpPD0xP1FvKDEtdCk6Mi1Rbyh0LTEpKS8yfWZ1bmN0aW9uIGVzKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gbnModCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9ZnVuY3Rpb24gcnModCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGlzPTcuNTYyNTtmdW5jdGlvbiBhcyh0KXtyZXR1cm4gMS1vcygxLXQpfWZ1bmN0aW9uIG9zKHQpe3JldHVybih0PSt0KTwuMzYzNjM2MzYzNjM2MzYzNjU/aXMqdCp0OnQ8LjcyNzI3MjcyNzI3MjcyNzM/aXMqKHQtPS41NDU0NTQ1NDU0NTQ1NDU0KSp0Ky43NTp0PC45MDkwOTA5MDkwOTA5MDkxP2lzKih0LT0uODE4MTgxODE4MTgxODE4MikqdCsuOTM3NTppcyoodC09Ljk1NDU0NTQ1NDU0NTQ1NDYpKnQrLjk4NDM3NX1mdW5jdGlvbiBzcyh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtb3MoMS10KTpvcyh0LTEpKzEpLzJ9dmFyIGNzPTEuNzAxNTgsdXM9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybih0PSt0KSp0KihlKih0LTEpK3QpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oY3MpLGxzPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKHQrMSkqZSt0KSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oY3MpLGhzPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufShjcyksZnM9MipNYXRoLlBJLGRzPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWZzKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKlFvKC0gLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykscHM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZnMpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpRbyh0PSt0KSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykseXM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89ZnMpO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqUW8oLXQpKk1hdGguc2luKChyLXQpL24pOjItZSpRbyh0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmZzKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyk7ZnVuY3Rpb24gZ3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBtcyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZ3MpfWZ1bmN0aW9uIHZzKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5hcnJheUJ1ZmZlcigpfWZ1bmN0aW9uIGJzKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbih2cyl9ZnVuY3Rpb24gX3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiB4cyh0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oX3MpfWZ1bmN0aW9uIHdzKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCkseHMoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSkpfX1mdW5jdGlvbiBrcyh0LGUsbixyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3ZhciBpPV9vKHQpO3JldHVybiB4cyhlLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnNlKHQscil9KSl9dmFyIFRzPXdzKHdvKSxFcz13cyhObyk7ZnVuY3Rpb24gQ3ModCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgYSBpbiBlKWlbYV09ZVthXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe24oaSl9LGkuc3JjPXR9KSl9ZnVuY3Rpb24gU3ModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO2lmKDIwNCE9PXQuc3RhdHVzJiYyMDUhPT10LnN0YXR1cylyZXR1cm4gdC5qc29uKCl9ZnVuY3Rpb24gQXModCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKFNzKX1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4geHMoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KSl9fWNvbnN0IE5zPU1zKCJhcHBsaWNhdGlvbi94bWwiKTt2YXIgRHM9TXMoInRleHQvaHRtbCIpLE9zPU1zKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gQnModCxlKXt2YXIgbjtmdW5jdGlvbiByKCl7dmFyIHIsaSxhPW4ubGVuZ3RoLG89MCxzPTA7Zm9yKHI9MDtyPGE7KytyKW8rPShpPW5bcl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUscj0wO3I8YTsrK3IpKGk9bltyXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLHIuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscik6ZX0scn1mdW5jdGlvbiBMcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSXMoKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gUnModCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkPXQuX3Jvb3QscD17ZGF0YTpyfSx5PXQuX3gwLGc9dC5feTAsbT10Ll94MSx2PXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigodT1lPj0oYT0oeSttKS8yKSk/eT1hOm09YSwobD1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9byxpPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gaVtoXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2hdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShhPSh5K20pLzIpKT95PWE6bT1hLChsPW4+PShvPShnK3YpLzIpKT9nPW86dj1vfXdoaWxlKChoPWw8PDF8dSk9PShmPShjPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09ZCxpW2hdPXAsdH1mdW5jdGlvbiBGcyh0LGUsbixyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1yLHRoaXMueTE9aX1mdW5jdGlvbiBQcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBqcyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBZcyh0LGUsbil7dmFyIHI9bmV3IHpzKG51bGw9PWU/UHM6ZSxudWxsPT1uP2pzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIHpzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVXModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBxcz1Zcy5wcm90b3R5cGU9enMucHJvdG90eXBlO2Z1bmN0aW9uICRzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBIcyh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gV3ModCl7dmFyIGUsbixyPTEsaT0xO2Z1bmN0aW9uIGEoKXtmb3IodmFyIHQsYSxzLGMsdSxsLGgsZj1lLmxlbmd0aCxkPTA7ZDxpOysrZClmb3IoYT1ZcyhlLCRzLEhzKS52aXNpdEFmdGVyKG8pLHQ9MDt0PGY7Kyt0KXM9ZVt0XSxsPW5bcy5pbmRleF0saD1sKmwsYz1zLngrcy52eCx1PXMueStzLnZ5LGEudmlzaXQocCk7ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPXQuZGF0YSxmPXQucixkPWwrZjtpZighbylyZXR1cm4gZT5jK2R8fGk8Yy1kfHxuPnUrZHx8YTx1LWQ7aWYoby5pbmRleD5zLmluZGV4KXt2YXIgcD1jLW8ueC1vLnZ4LHk9dS1vLnktby52eSxnPXAqcCt5Knk7ZzxkKmQmJigwPT09cCYmKGcrPShwPUlzKCkpKnApLDA9PT15JiYoZys9KHk9SXMoKSkqeSksZz0oZC0oZz1NYXRoLnNxcnQoZykpKS9nKnIscy52eCs9KHAqPWcpKihkPShmKj1mKS8oaCtmKSkscy52eSs9KHkqPWcpKmQsby52eC09cCooZD0xLWQpLG8udnktPXkqZCl9fX1mdW5jdGlvbiBvKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+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+MSkrZit0K2srQy5zbGljZShFKTticmVhaztkZWZhdWx0OnQ9QytmK3Qra31yZXR1cm4gcyh0KX1yZXR1cm4gZz12b2lkIDA9PT1nPzY6L1tncHJzXS8udGVzdCh2KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGcpKSxrLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LGt9cmV0dXJue2Zvcm1hdDpoLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPWgoKCh0PWNjKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihhYyhlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLGE9bWNbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK2F9fX19ZnVuY3Rpb24gYmModCl7cmV0dXJuIGRjPXZjKHQpLHBjPWRjLmZvcm1hdCx5Yz1kYy5mb3JtYXRQcmVmaXgsZGN9ZnVuY3Rpb24gX2ModCl7cmV0dXJuIE1hdGgubWF4KDAsLWFjKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24geGModCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihhYyhlKS8zKSkpLWFjKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24gd2ModCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxhYyhlKS1hYyh0KSkrMX1mdW5jdGlvbiBrYygpe3JldHVybiBuZXcgVGN9ZnVuY3Rpb24gVGMoKXt0aGlzLnJlc2V0KCl9YmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLFRjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGMscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtDYyhFYyx0LHRoaXMudCksQ2ModGhpcyxFYy5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9RWMudDp0aGlzLnM9RWMudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgRWM9bmV3IFRjO2Z1bmN0aW9uIENjKHQsZSxuKXt2YXIgcj10LnM9ZStuLGk9ci1lLGE9ci1pO3QudD1lLWErKG4taSl9dmFyIFNjPTFlLTYsQWM9MWUtMTIsTWM9TWF0aC5QSSxOYz1NYy8yLERjPU1jLzQsT2M9MipNYyxCYz0xODAvTWMsTGM9TWMvMTgwLEljPU1hdGguYWJzLFJjPU1hdGguYXRhbixGYz1NYXRoLmF0YW4yLFBjPU1hdGguY29zLGpjPU1hdGguY2VpbCxZYz1NYXRoLmV4cCx6Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksVWM9TWF0aC5wb3cscWM9TWF0aC5zaW4sJGM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LEhjPU1hdGguc3FydCxXYz1NYXRoLnRhbjtmdW5jdGlvbiBWYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9NYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gR2ModCl7cmV0dXJuIHQ+MT9OYzp0PC0xPy1OYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gWGModCl7cmV0dXJuKHQ9cWModC8yKSkqdH1mdW5jdGlvbiBaYygpe31mdW5jdGlvbiBRYyh0LGUpe3QmJkpjLmhhc093blByb3BlcnR5KHQudHlwZSkmJkpjW3QudHlwZV0odCxlKX12YXIgS2M9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtRYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspUWMobltyXS5nZW9tZXRyeSxlKX19LEpjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7dHUodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KXR1KG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2V1KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZXUobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVFjKG5bcl0sZSl9fTtmdW5jdGlvbiB0dSh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBldSh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KXR1KHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBudSh0LGUpe3QmJktjLmhhc093blByb3BlcnR5KHQudHlwZSk/S2NbdC50eXBlXSh0LGUpOlFjKHQsZSl9dmFyIHJ1LGl1LGF1LG91LHN1LGN1PWtjKCksdXU9a2MoKSxsdT17cG9pbnQ6WmMsbGluZVN0YXJ0OlpjLGxpbmVFbmQ6WmMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Y3UucmVzZXQoKSxsdS5saW5lU3RhcnQ9aHUsbHUubGluZUVuZD1mdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStjdTt1dS5hZGQodDwwP09jK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9WmN9LHNwaGVyZTpmdW5jdGlvbigpe3V1LmFkZChPYyl9fTtmdW5jdGlvbiBodSgpe2x1LnBvaW50PWR1fWZ1bmN0aW9uIGZ1KCl7cHUocnUsaXUpfWZ1bmN0aW9uIGR1KHQsZSl7bHUucG9pbnQ9cHUscnU9dCxpdT1lLGF1PXQqPUxjLG91PVBjKGU9KGUqPUxjKS8yK0RjKSxzdT1xYyhlKX1mdW5jdGlvbiBwdSh0LGUpe3ZhciBuPSh0Kj1MYyktYXUscj1uPj0wPzE6LTEsaT1yKm4sYT1QYyhlPShlKj1MYykvMitEYyksbz1xYyhlKSxzPXN1Km8sYz1vdSphK3MqUGMoaSksdT1zKnIqcWMoaSk7Y3UuYWRkKEZjKHUsYykpLGF1PXQsb3U9YSxzdT1vfWZ1bmN0aW9uIHl1KHQpe3JldHVybiB1dS5yZXNldCgpLG51KHQsbHUpLDIqdXV9ZnVuY3Rpb24gZ3UodCl7cmV0dXJuW0ZjKHRbMV0sdFswXSksR2ModFsyXSldfWZ1bmN0aW9uIG11KHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9UGMobik7cmV0dXJuW3IqUGMoZSkscipxYyhlKSxxYyhuKV19ZnVuY3Rpb24gdnUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gYnUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIF91KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24geHUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIHd1KHQpe3ZhciBlPUhjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIga3UsVHUsRXUsQ3UsU3UsQXUsTXUsTnUsRHUsT3UsQnUsTHUsSXUsUnUsRnUsUHUsanUsWXUsenUsVXUscXUsJHUsSHUsV3UsVnUsR3UsWHU9a2MoKSxadT17cG9pbnQ6UXUsbGluZVN0YXJ0Okp1LGxpbmVFbmQ6dGwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WnUucG9pbnQ9ZWwsWnUubGluZVN0YXJ0PW5sLFp1LmxpbmVFbmQ9cmwsWHUucmVzZXQoKSxsdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2x1LnBvbHlnb25FbmQoKSxadS5wb2ludD1RdSxadS5saW5lU3RhcnQ9SnUsWnUubGluZUVuZD10bCxjdTwwPyhrdT0tKEV1PTE4MCksVHU9LShDdT05MCkpOlh1PlNjP0N1PTkwOlh1PC0xZS02JiYoVHU9LTkwKSxPdVswXT1rdSxPdVsxXT1FdX0sc3BoZXJlOmZ1bmN0aW9uKCl7a3U9LShFdT0xODApLFR1PS0oQ3U9OTApfX07ZnVuY3Rpb24gUXUodCxlKXtEdS5wdXNoKE91PVtrdT10LEV1PXRdKSxlPFR1JiYoVHU9ZSksZT5DdSYmKEN1PWUpfWZ1bmN0aW9uIEt1KHQsZSl7dmFyIG49bXUoW3QqTGMsZSpMY10pO2lmKE51KXt2YXIgcj1idShOdSxuKSxpPWJ1KFtyWzFdLC1yWzBdLDBdLHIpO3d1KGkpLGk9Z3UoaSk7dmFyIGEsbz10LVN1LHM9bz4wPzE6LTEsYz1pWzBdKkJjKnMsdT1JYyhvKT4xODA7dV4ocypTdTxjJiZjPHMqdCk/KGE9aVsxXSpCYyk+Q3UmJihDdT1hKTp1XihzKlN1PChjPShjKzM2MCklMzYwLTE4MCkmJmM8cyp0KT8oYT0taVsxXSpCYyk8VHUmJihUdT1hKTooZTxUdSYmKFR1PWUpLGU+Q3UmJihDdT1lKSksdT90PFN1P2lsKGt1LHQpPmlsKGt1LEV1KSYmKEV1PXQpOmlsKHQsRXUpPmlsKGt1LEV1KSYmKGt1PXQpOkV1Pj1rdT8odDxrdSYmKGt1PXQpLHQ+RXUmJihFdT10KSk6dD5TdT9pbChrdSx0KT5pbChrdSxFdSkmJihFdT10KTppbCh0LEV1KT5pbChrdSxFdSkmJihrdT10KX1lbHNlIER1LnB1c2goT3U9W2t1PXQsRXU9dF0pO2U8VHUmJihUdT1lKSxlPkN1JiYoQ3U9ZSksTnU9bixTdT10fWZ1bmN0aW9uIEp1KCl7WnUucG9pbnQ9S3V9ZnVuY3Rpb24gdGwoKXtPdVswXT1rdSxPdVsxXT1FdSxadS5wb2ludD1RdSxOdT1udWxsfWZ1bmN0aW9uIGVsKHQsZSl7aWYoTnUpe3ZhciBuPXQtU3U7WHUuYWRkKEljKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgQXU9dCxNdT1lO2x1LnBvaW50KHQsZSksS3UodCxlKX1mdW5jdGlvbiBubCgpe2x1LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHJsKCl7ZWwoQXUsTXUpLGx1LmxpbmVFbmQoKSxJYyhYdSk+U2MmJihrdT0tKEV1PTE4MCkpLE91WzBdPWt1LE91WzFdPUV1LE51PW51bGx9ZnVuY3Rpb24gaWwodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGFsKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBvbCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9ZnVuY3Rpb24gc2wodCl7dmFyIGUsbixyLGksYSxvLHM7aWYoQ3U9RXU9LShrdT1UdT0xLzApLER1PVtdLG51KHQsWnUpLG49RHUubGVuZ3RoKXtmb3IoRHUuc29ydChhbCksZT0xLGE9W3I9RHVbMF1dO2U8bjsrK2Upb2wociwoaT1EdVtlXSlbMF0pfHxvbChyLGlbMV0pPyhpbChyWzBdLGlbMV0pPmlsKHJbMF0sclsxXSkmJihyWzFdPWlbMV0pLGlsKGlbMF0sclsxXSk+aWwoclswXSxyWzFdKSYmKHJbMF09aVswXSkpOmEucHVzaChyPWkpO2ZvcihvPS0xLzAsZT0wLHI9YVtuPWEubGVuZ3RoLTFdO2U8PW47cj1pLCsrZSlpPWFbZV0sKHM9aWwoclsxXSxpWzBdKSk+byYmKG89cyxrdT1pWzBdLEV1PXJbMV0pfXJldHVybiBEdT1PdT1udWxsLGt1PT09MS8wfHxUdT09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1trdSxUdV0sW0V1LEN1XV19dmFyIGNsPXtzcGhlcmU6WmMscG9pbnQ6dWwsbGluZVN0YXJ0OmhsLGxpbmVFbmQ6cGwscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Y2wubGluZVN0YXJ0PXlsLGNsLmxpbmVFbmQ9Z2x9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtjbC5saW5lU3RhcnQ9aGwsY2wubGluZUVuZD1wbH19O2Z1bmN0aW9uIHVsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpO2xsKG4qUGModCksbipxYyh0KSxxYyhlKSl9ZnVuY3Rpb24gbGwodCxlLG4peysrQnUsSXUrPSh0LUl1KS9CdSxSdSs9KGUtUnUpL0J1LEZ1Kz0obi1GdSkvQnV9ZnVuY3Rpb24gaGwoKXtjbC5wb2ludD1mbH1mdW5jdGlvbiBmbCh0LGUpe3QqPUxjO3ZhciBuPVBjKGUqPUxjKTtXdT1uKlBjKHQpLFZ1PW4qcWModCksR3U9cWMoZSksY2wucG9pbnQ9ZGwsbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIGRsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpLHI9bipQYyh0KSxpPW4qcWModCksYT1xYyhlKSxvPUZjKEhjKChvPVZ1KmEtR3UqaSkqbysobz1HdSpyLVd1KmEpKm8rKG89V3UqaS1WdSpyKSpvKSxXdSpyK1Z1KmkrR3UqYSk7THUrPW8sUHUrPW8qKFd1KyhXdT1yKSksanUrPW8qKFZ1KyhWdT1pKSksWXUrPW8qKEd1KyhHdT1hKSksbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIHBsKCl7Y2wucG9pbnQ9dWx9ZnVuY3Rpb24geWwoKXtjbC5wb2ludD1tbH1mdW5jdGlvbiBnbCgpe3ZsKCR1LEh1KSxjbC5wb2ludD11bH1mdW5jdGlvbiBtbCh0LGUpeyR1PXQsSHU9ZSx0Kj1MYyxlKj1MYyxjbC5wb2ludD12bDt2YXIgbj1QYyhlKTtXdT1uKlBjKHQpLFZ1PW4qcWModCksR3U9cWMoZSksbGwoV3UsVnUsR3UpfWZ1bmN0aW9uIHZsKHQsZSl7dCo9TGM7dmFyIG49UGMoZSo9TGMpLHI9bipQYyh0KSxpPW4qcWModCksYT1xYyhlKSxvPVZ1KmEtR3UqaSxzPUd1KnItV3UqYSxjPVd1KmktVnUqcix1PUhjKG8qbytzKnMrYypjKSxsPUdjKHUpLGg9dSYmLWwvdTt6dSs9aCpvLFV1Kz1oKnMscXUrPWgqYyxMdSs9bCxQdSs9bCooV3UrKFd1PXIpKSxqdSs9bCooVnUrKFZ1PWkpKSxZdSs9bCooR3UrKEd1PWEpKSxsbChXdSxWdSxHdSl9ZnVuY3Rpb24gYmwodCl7QnU9THU9SXU9UnU9RnU9UHU9anU9WXU9enU9VXU9cXU9MCxudSh0LGNsKTt2YXIgZT16dSxuPVV1LHI9cXUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTxBYyYmKGU9UHUsbj1qdSxyPVl1LEx1PFNjJiYoZT1JdSxuPVJ1LHI9RnUpLChpPWUqZStuKm4rcipyKTxBYyk/W05hTixOYU5dOltGYyhuLGUpKkJjLEdjKHIvSGMoaSkpKkJjXX1mdW5jdGlvbiBfbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geGwodCxlKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIG49dChuLHIpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4obj1lLmludmVydChuLHIpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59ZnVuY3Rpb24gd2wodCxlKXtyZXR1cm5bSWModCk+TWM/dCtNYXRoLnJvdW5kKC10L09jKSpPYzp0LGVdfWZ1bmN0aW9uIGtsKHQsZSxuKXtyZXR1cm4odCU9T2MpP2V8fG4/eGwoRWwodCksQ2woZSxuKSk6RWwodCk6ZXx8bj9DbChlLG4pOndsfWZ1bmN0aW9uIFRsKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVyblsoZSs9dCk+TWM/ZS1PYzplPC1NYz9lK09jOmUsbl19fWZ1bmN0aW9uIEVsKHQpe3ZhciBlPVRsKHQpO3JldHVybiBlLmludmVydD1UbCgtdCksZX1mdW5jdGlvbiBDbCh0LGUpe3ZhciBuPVBjKHQpLHI9cWModCksaT1QYyhlKSxhPXFjKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1QYyhlKSxzPVBjKHQpKm8sYz1xYyh0KSpvLHU9cWMoZSksbD11Km4rcypyO3JldHVybltGYyhjKmktbCphLHMqbi11KnIpLEdjKGwqaStjKmEpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1QYyhlKSxzPVBjKHQpKm8sYz1xYyh0KSpvLHU9cWMoZSksbD11KmktYyphO3JldHVybltGYyhjKmkrdSphLHMqbitsKnIpLEdjKGwqbi1zKnIpXX0sb31mdW5jdGlvbiBTbCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpMYyxlWzFdKkxjKSlbMF0qPUJjLGVbMV0qPUJjLGV9cmV0dXJuIHQ9a2wodFswXSpMYyx0WzFdKkxjLHQubGVuZ3RoPjI/dFsyXSpMYzowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKkxjLGVbMV0qTGMpKVswXSo9QmMsZVsxXSo9QmMsZX0sZX1mdW5jdGlvbiBBbCh0LGUsbixyLGksYSl7aWYobil7dmFyIG89UGMoZSkscz1xYyhlKSxjPXIqbjtudWxsPT1pPyhpPWUrcipPYyxhPWUtYy8yKTooaT1NbChvLGkpLGE9TWwobyxhKSwocj4wP2k8YTppPmEpJiYoaSs9cipPYykpO2Zvcih2YXIgdSxsPWk7cj4wP2w+YTpsPGE7bC09Yyl1PWd1KFtvLC1zKlBjKGwpLC1zKnFjKGwpXSksdC5wb2ludCh1WzBdLHVbMV0pfX1mdW5jdGlvbiBNbCh0LGUpeyhlPW11KGUpKVswXS09dCx3dShlKTt2YXIgbj1WYygtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1uOm4pK09jLVNjKSVPY31mdW5jdGlvbiBObCgpe3ZhciB0LGUsbj1fbChbMCwwXSkscj1fbCg5MCksaT1fbCg2KSxhPXtwb2ludDpmdW5jdGlvbihuLHIpe3QucHVzaChuPWUobixyKSksblswXSo9QmMsblsxXSo9QmN9fTtmdW5jdGlvbiBvKCl7dmFyIG89bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpMYyxjPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKkxjO3JldHVybiB0PVtdLGU9a2woLW9bMF0qTGMsLW9bMV0qTGMsMCkuaW52ZXJ0LEFsKGEscyxjLDEpLG89e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1lPW51bGwsb31yZXR1cm4gby5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfbChbK3RbMF0sK3RbMV1dKSxvKTpufSxvLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9sKCt0KSxvKTpyfSxvLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol9sKCt0KSxvKTppfSxvfWZ1bmN0aW9uIERsKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaChbZSxuLHJdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOlpjLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49ZTtyZXR1cm4gZT1bXSx0PW51bGwsbn19fWZ1bmN0aW9uIE9sKHQsZSl7cmV0dXJuIEljKHRbMF0tZVswXSk8U2MmJkljKHRbMV0tZVsxXSk8U2N9ZnVuY3Rpb24gQmwodCxlLG4scil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPW4sdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBMbCh0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihPbChyLG8pKXtpZighclsyXSYmIW9bMl0pe2ZvcihpLmxpbmVTdGFydCgpLGE9MDthPGU7KythKWkucG9pbnQoKHI9dFthXSlbMF0sclsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9b1swXSs9MmUtNn1zLnB1c2gobj1uZXcgQmwocix0LG51bGwsITApKSxjLnB1c2gobi5vPW5ldyBCbChyLG51bGwsbiwhMSkpLHMucHVzaChuPW5ldyBCbChvLHQsbnVsbCwhMSkpLGMucHVzaChuLm89bmV3IEJsKG8sbnVsbCxuLCEwKSl9fSkpLHMubGVuZ3RoKXtmb3IoYy5zb3J0KGUpLElsKHMpLElsKGMpLGE9MCxvPWMubGVuZ3RoO2E8bzsrK2EpY1thXS5lPW49IW47Zm9yKHZhciB1LGwsaD1zWzBdOzspe2Zvcih2YXIgZj1oLGQ9ITA7Zi52OylpZigoZj1mLm4pPT09aClyZXR1cm47dT1mLnosaS5saW5lU3RhcnQoKTtkb3tpZihmLnY9Zi5vLnY9ITAsZi5lKXtpZihkKWZvcihhPTAsbz11Lmxlbmd0aDthPG87KythKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLm4ueCwxLGkpO2Y9Zi5ufWVsc2V7aWYoZClmb3IodT1mLnAueixhPXUubGVuZ3RoLTE7YT49MDstLWEpaS5wb2ludCgobD11W2FdKVswXSxsWzFdKTtlbHNlIHIoZi54LGYucC54LC0xLGkpO2Y9Zi5wfXU9KGY9Zi5vKS56LGQ9IWR9d2hpbGUoIWYudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBJbCh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUsbixyPTAsaT10WzBdOysrcjxlOylpLm49bj10W3JdLG4ucD1pLGk9bjtpLm49bj10WzBdLG4ucD1pfX13bC5pbnZlcnQ9d2w7dmFyIFJsPWtjKCk7ZnVuY3Rpb24gRmwodCl7cmV0dXJuIEljKHRbMF0pPD1NYz90WzBdOiRjKHRbMF0pKigoSWModFswXSkrTWMpJU9jLU1jKX1mdW5jdGlvbiBQbCh0LGUpe3ZhciBuPUZsKGUpLHI9ZVsxXSxpPXFjKHIpLGE9W3FjKG4pLC1QYyhuKSwwXSxvPTAscz0wO1JsLnJlc2V0KCksMT09PWk/cj1OYytTYzotMT09PWkmJihyPS1OYy1TYyk7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9RmwoZikscD1mWzFdLzIrRGMseT1xYyhwKSxnPVBjKHApLG09MDttPGg7KyttLGQ9Yix5PXgsZz13LGY9dil7dmFyIHY9bFttXSxiPUZsKHYpLF89dlsxXS8yK0RjLHg9cWMoXyksdz1QYyhfKSxrPWItZCxUPWs+PTA/MTotMSxFPVQqayxDPUU+TWMsUz15Kng7aWYoUmwuYWRkKEZjKFMqVCpxYyhFKSxnKncrUypQYyhFKSkpLG8rPUM/aytUKk9jOmssQ15kPj1uXmI+PW4pe3ZhciBBPWJ1KG11KGYpLG11KHYpKTt3dShBKTt2YXIgTT1idShhLEEpO3d1KE0pO3ZhciBOPShDXms+PTA/LTE6MSkqR2MoTVsyXSk7KHI+Tnx8cj09PU4mJihBWzBdfHxBWzFdKSkmJihzKz1DXms+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPFNjJiZSbDwtMWUtNileMSZzfWZ1bmN0aW9uIGpsKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9RGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PW0sZi5saW5lU3RhcnQ9dixmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPVAobyk7dmFyIHQ9UGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksTGwobyx6bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiBtKHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gdigpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7bShzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoWWwpKX1yZXR1cm4gZn19ZnVuY3Rpb24gWWwodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gemwodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tTmMtU2M6TmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLU5jLVNjOk5jLWVbMV0pfWNvbnN0IFVsPWpsKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/TWM6LU1jLGM9SWMoYS1uKTtJYyhjLU1jKTxTYz8odC5wb2ludChuLHI9KHIrbykvMj4wP05jOi1OYyksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLHIpLHQucG9pbnQoYSxyKSxlPTApOmkhPT1zJiZjPj1NYyYmKEljKG4taSk8U2MmJihuLT1pKlNjKSxJYyhhLXMpPFNjJiYoYS09cypTYykscj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89cWModC1uKTtyZXR1cm4gSWMobyk+U2M/UmMoKHFjKGUpKihhPVBjKHIpKSpxYyhuKS1xYyhyKSooaT1QYyhlKSkqcWModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qTmMsci5wb2ludCgtTWMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoTWMsaSksci5wb2ludChNYywwKSxyLnBvaW50KE1jLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLU1jLC1pKSxyLnBvaW50KC1NYywwKSxyLnBvaW50KC1NYyxpKTtlbHNlIGlmKEljKHRbMF0tZVswXSk+U2Mpe3ZhciBhPXRbMF08ZVswXT9NYzotTWM7aT1uKmEvMixyLnBvaW50KC1hLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KGEsaSl9ZWxzZSByLnBvaW50KGVbMF0sZVsxXSl9KSxbLU1jLC1OY10pO2Z1bmN0aW9uIHFsKHQpe3ZhciBlPVBjKHQpLG49NipMYyxyPWU+MCxpPUljKGUpPlNjO2Z1bmN0aW9uIGEodCxuKXtyZXR1cm4gUGModCkqUGMobik+ZX1mdW5jdGlvbiBvKHQsbixyKXt2YXIgaT1bMSwwLDBdLGE9YnUobXUodCksbXUobikpLG89dnUoYSxhKSxzPWFbMF0sYz1vLXMqcztpZighYylyZXR1cm4hciYmdDt2YXIgdT1lKm8vYyxsPS1lKnMvYyxoPWJ1KGksYSksZj14dShpLHUpO191KGYseHUoYSxsKSk7dmFyIGQ9aCxwPXZ1KGYsZCkseT12dShkLGQpLGc9cCpwLXkqKHZ1KGYsZiktMSk7aWYoIShnPDApKXt2YXIgbT1IYyhnKSx2PXh1KGQsKC1wLW0pL3kpO2lmKF91KHYsZiksdj1ndSh2KSwhcilyZXR1cm4gdjt2YXIgYixfPXRbMF0seD1uWzBdLHc9dFsxXSxrPW5bMV07eDxfJiYoYj1fLF89eCx4PWIpO3ZhciBUPXgtXyxFPUljKFQtTWMpPFNjO2lmKCFFJiZrPHcmJihiPXcsdz1rLGs9YiksRXx8VDxTYz9FP3craz4wXnZbMV08KEljKHZbMF0tXyk8U2M/dzprKTp3PD12WzFdJiZ2WzFdPD1rOlQ+TWNeKF88PXZbMF0mJnZbMF08PXgpKXt2YXIgQz14dShkLCgtcCttKS95KTtyZXR1cm4gX3UoQyxmKSxbdixndShDKV19fX1mdW5jdGlvbiBzKGUsbil7dmFyIGk9cj90Ok1jLXQsYT0wO3JldHVybiBlPC1pP2F8PTE6ZT5pJiYoYXw9MiksbjwtaT9hfD00Om4+aSYmKGF8PTgpLGF9cmV0dXJuIGpsKGEsKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYyx1LGw7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9Yz0hMSxsPTF9LHBvaW50OmZ1bmN0aW9uKGgsZil7dmFyIGQscD1baCxmXSx5PWEoaCxmKSxnPXI/eT8wOnMoaCxmKTp5P3MoaCsoaDwwP01jOi1NYyksZik6MDtpZighZSYmKHU9Yz15KSYmdC5saW5lU3RhcnQoKSx5IT09YyYmKCEoZD1vKGUscCkpfHxPbChlLGQpfHxPbChwLGQpKSYmKHBbMl09MSkseSE9PWMpbD0wLHk/KHQubGluZVN0YXJ0KCksZD1vKHAsZSksdC5wb2ludChkWzBdLGRbMV0pKTooZD1vKGUscCksdC5wb2ludChkWzBdLGRbMV0sMiksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeeSl7dmFyIG07ZyZufHwhKG09byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSx0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSwzKSkpfSF5fHxlJiZPbChlLHApfHx0LnBvaW50KHBbMF0scFsxXSksZT1wLGM9eSxuPWd9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGx8KHUmJmMpPDwxfX19KSwoZnVuY3Rpb24oZSxyLGksYSl7QWwoYSx0LG4saSxlLHIpfSkscj9bMCwtdF06Wy1NYyx0LU1jXSl9dmFyICRsPTFlOSxIbD0tJGw7ZnVuY3Rpb24gV2wodCxlLG4scil7ZnVuY3Rpb24gaShpLGEpe3JldHVybiB0PD1pJiZpPD1uJiZlPD1hJiZhPD1yfWZ1bmN0aW9uIGEoaSxhLHMsdSl7dmFyIGw9MCxoPTA7aWYobnVsbD09aXx8KGw9byhpLHMpKSE9PShoPW8oYSxzKSl8fGMoaSxhKTwwXnM+MClkb3t1LnBvaW50KDA9PT1sfHwzPT09bD90Om4sbD4xP3I6ZSl9d2hpbGUoKGw9KGwrcys0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIG8ocixpKXtyZXR1cm4gSWMoclswXS10KTxTYz9pPjA/MDozOkljKHJbMF0tbik8U2M/aT4wPzI6MTpJYyhyWzFdLWUpPFNjP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGModC54LGUueCl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPW8odCwxKSxyPW8oZSwxKTtyZXR1cm4gbiE9PXI/bi1yOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24obyl7dmFyIGMsdSxsLGgsZixkLHAseSxnLG0sdixiPW8sXz1EbCgpLHg9e3BvaW50OncsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7eC5wb2ludD1rLHUmJnUucHVzaChsPVtdKSxtPSEwLGc9ITEscD15PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihrKGgsZiksZCYmZyYmXy5yZWpvaW4oKSxjLnB1c2goXy5yZXN1bHQoKSkpLHgucG9pbnQ9dyxnJiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj1fLGM9W10sdT1bXSx2PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPTAsaT11Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYSxvLHM9dVtuXSxjPTEsbD1zLmxlbmd0aCxoPXNbMF0sZj1oWzBdLGQ9aFsxXTtjPGw7KytjKWE9ZixvPWQsZj0oaD1zW2NdKVswXSxkPWhbMV0sbzw9cj9kPnImJihmLWEpKihyLW8pPihkLW8pKih0LWEpJiYrK2U6ZDw9ciYmKGYtYSkqKHItbyk8KGQtbykqKHQtYSkmJi0tZTtyZXR1cm4gZX0oKSxuPXYmJmUsaT0oYz1QKGMpKS5sZW5ndGg7KG58fGkpJiYoby5wb2x5Z29uU3RhcnQoKSxuJiYoby5saW5lU3RhcnQoKSxhKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSxpJiZMbChjLHMsZSxhLG8pLG8ucG9seWdvbkVuZCgpKSxiPW8sYz11PWw9bnVsbH19O2Z1bmN0aW9uIHcodCxlKXtpKHQsZSkmJmIucG9pbnQodCxlKX1mdW5jdGlvbiBrKGEsbyl7dmFyIHM9aShhLG8pO2lmKHUmJmwucHVzaChbYSxvXSksbSloPWEsZj1vLGQ9cyxtPSExLHMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQoYSxvKSk7ZWxzZSBpZihzJiZnKWIucG9pbnQoYSxvKTtlbHNle3ZhciBjPVtwPU1hdGgubWF4KEhsLE1hdGgubWluKCRsLHApKSx5PU1hdGgubWF4KEhsLE1hdGgubWluKCRsLHkpKV0sXz1bYT1NYXRoLm1heChIbCxNYXRoLm1pbigkbCxhKSksbz1NYXRoLm1heChIbCxNYXRoLm1pbigkbCxvKSldOyFmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG8scz10WzBdLGM9dFsxXSx1PTAsbD0xLGg9ZVswXS1zLGY9ZVsxXS1jO2lmKG89bi1zLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGg+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89aS1zLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGg+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWlmKG89ci1jLGZ8fCEobz4wKSl7aWYoby89ZixmPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGY+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89YS1jLGZ8fCEobzwwKSl7aWYoby89ZixmPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGY+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfXJldHVybiB1PjAmJih0WzBdPXMrdSpoLHRbMV09Yyt1KmYpLGw8MSYmKGVbMF09cytsKmgsZVsxXT1jK2wqZiksITB9fX19fShjLF8sdCxlLG4scik/cyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pLHY9ITEpOihnfHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KGNbMF0sY1sxXSkpLGIucG9pbnQoX1swXSxfWzFdKSxzfHxiLmxpbmVFbmQoKSx2PSExKX1wPWEseT1vLGc9c31yZXR1cm4geH19ZnVuY3Rpb24gVmwoKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9V2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX12YXIgR2wsWGwsWmwsUWw9a2MoKSxLbD17c3BoZXJlOlpjLHBvaW50OlpjLGxpbmVTdGFydDpmdW5jdGlvbigpe0tsLnBvaW50PXRoLEtsLmxpbmVFbmQ9Smx9LGxpbmVFbmQ6WmMscG9seWdvblN0YXJ0OlpjLHBvbHlnb25FbmQ6WmN9O2Z1bmN0aW9uIEpsKCl7S2wucG9pbnQ9S2wubGluZUVuZD1aY31mdW5jdGlvbiB0aCh0LGUpe0dsPXQqPUxjLFhsPXFjKGUqPUxjKSxabD1QYyhlKSxLbC5wb2ludD1laH1mdW5jdGlvbiBlaCh0LGUpe3QqPUxjO3ZhciBuPXFjKGUqPUxjKSxyPVBjKGUpLGk9SWModC1HbCksYT1QYyhpKSxvPXIqcWMoaSkscz1abCpuLVhsKnIqYSxjPVhsKm4rWmwqciphO1FsLmFkZChGYyhIYyhvKm8rcypzKSxjKSksR2w9dCxYbD1uLFpsPXJ9ZnVuY3Rpb24gbmgodCl7cmV0dXJuIFFsLnJlc2V0KCksbnUodCxLbCksK1FsfXZhciByaD1bbnVsbCxudWxsXSxpaD17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6cmh9O2Z1bmN0aW9uIGFoKHQsZSl7cmV0dXJuIHJoWzBdPXQscmhbMV09ZSxuaChpaCl9dmFyIG9oPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNoKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihjaChuW3JdLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sc2g9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiB1aCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZih1aChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxoKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYobGgobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoaCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKGhoKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihjaChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gY2godCxlKXtyZXR1cm4hKCF0fHwhc2guaGFzT3duUHJvcGVydHkodC50eXBlKSkmJnNoW3QudHlwZV0odCxlKX1mdW5jdGlvbiB1aCh0LGUpe3JldHVybiAwPT09YWgodCxlKX1mdW5jdGlvbiBsaCh0LGUpe2Zvcih2YXIgbixyLGksYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl7aWYoMD09PShyPWFoKHRbYV0sZSkpKXJldHVybiEwO2lmKGE+MCYmKGk9YWgodFthXSx0W2EtMV0pKT4wJiZuPD1pJiZyPD1pJiYobityLWkpKigxLU1hdGgucG93KChuLXIpL2ksMikpPEFjKmkpcmV0dXJuITA7bj1yfXJldHVybiExfWZ1bmN0aW9uIGhoKHQsZSl7cmV0dXJuISFQbCh0Lm1hcChmaCksZGgoZSkpfWZ1bmN0aW9uIGZoKHQpe3JldHVybih0PXQubWFwKGRoKSkucG9wKCksdH1mdW5jdGlvbiBkaCh0KXtyZXR1cm5bdFswXSpMYyx0WzFdKkxjXX1mdW5jdGlvbiBwaCh0LGUpe3JldHVybih0JiZvaC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP29oW3QudHlwZV06Y2gpKHQsZSl9ZnVuY3Rpb24geWgodCxlLG4pe3ZhciByPWsodCxlLVNjLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pKX19ZnVuY3Rpb24gZ2godCxlLG4pe3ZhciByPWsodCxlLVNjLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gbWgoKXt2YXIgdCxlLG4scixpLGEsbyxzLGMsdSxsLGgsZj0xMCxkPWYscD05MCx5PTM2MCxnPTIuNTtmdW5jdGlvbiBtKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6digpfX1mdW5jdGlvbiB2KCl7cmV0dXJuIGsoamMoci9wKSpwLG4scCkubWFwKGwpLmNvbmNhdChrKGpjKHMveSkqeSxvLHkpLm1hcChoKSkuY29uY2F0KGsoamMoZS9mKSpmLHQsZikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gSWModCVwKT5TY30pKS5tYXAoYykpLmNvbmNhdChrKGpjKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIEljKHQleSk+U2N9KSkubWFwKHUpKX1yZXR1cm4gbS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB2KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LG0ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbChyKS5jb25jYXQoaChvKS5zbGljZSgxKSxsKG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTptLmV4dGVudE1pbm9yKCl9LG0uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sbj0rdFsxXVswXSxzPSt0WzBdWzFdLG89K3RbMV1bMV0scj5uJiYodD1yLHI9bixuPXQpLHM+byYmKHQ9cyxzPW8sbz10KSxtLnByZWNpc2lvbihnKSk6W1tyLHNdLFtuLG9dXX0sbS5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXVswXSx0PStuWzFdWzBdLGE9K25bMF1bMV0saT0rblsxXVsxXSxlPnQmJihuPWUsZT10LHQ9biksYT5pJiYobj1hLGE9aSxpPW4pLG0ucHJlY2lzaW9uKGcpKTpbW2UsYV0sW3QsaV1dfSxtLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOm0uc3RlcE1pbm9yKCl9LG0uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHk9K3RbMV0sbSk6W3AseV19LG0uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sbSk6W2YsZF19LG0ucHJlY2lzaW9uPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStmLGM9eWgoYSxpLDkwKSx1PWdoKGUsdCxnKSxsPXloKHMsbyw5MCksaD1naChyLG4sZyksbSk6Z30sbS5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIHZoKCl7cmV0dXJuIG1oKCkoKX1mdW5jdGlvbiBiaCh0LGUpe3ZhciBuPXRbMF0qTGMscj10WzFdKkxjLGk9ZVswXSpMYyxhPWVbMV0qTGMsbz1QYyhyKSxzPXFjKHIpLGM9UGMoYSksdT1xYyhhKSxsPW8qUGMobiksaD1vKnFjKG4pLGY9YypQYyhpKSxkPWMqcWMoaSkscD0yKkdjKEhjKFhjKGEtcikrbypjKlhjKGktbikpKSx5PXFjKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgZT1xYyh0Kj1wKS95LG49cWMocC10KS95LHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltGYyhpLHIpKkJjLEZjKGEsSGMocipyK2kqaSkpKkJjXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipCYyxyKkJjXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfWZ1bmN0aW9uIF9oKHQpe3JldHVybiB0fXZhciB4aCx3aCxraCxUaCxFaD1rYygpLENoPWtjKCksU2g9e3BvaW50OlpjLGxpbmVTdGFydDpaYyxsaW5lRW5kOlpjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NoLmxpbmVTdGFydD1BaCxTaC5saW5lRW5kPURofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7U2gubGluZVN0YXJ0PVNoLmxpbmVFbmQ9U2gucG9pbnQ9WmMsRWguYWRkKEljKENoKSksQ2gucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9RWgvMjtyZXR1cm4gRWgucmVzZXQoKSx0fX07ZnVuY3Rpb24gQWgoKXtTaC5wb2ludD1NaH1mdW5jdGlvbiBNaCh0LGUpe1NoLnBvaW50PU5oLHhoPWtoPXQsd2g9VGg9ZX1mdW5jdGlvbiBOaCh0LGUpe0NoLmFkZChUaCp0LWtoKmUpLGtoPXQsVGg9ZX1mdW5jdGlvbiBEaCgpe05oKHhoLHdoKX1jb25zdCBPaD1TaDt2YXIgQmg9MS8wLExoPUJoLEloPS1CaCxSaD1JaCxGaD17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PEJoJiYoQmg9dCksdD5JaCYmKEloPXQpLGU8TGgmJihMaD1lKSxlPlJoJiYoUmg9ZSl9LGxpbmVTdGFydDpaYyxsaW5lRW5kOlpjLHBvbHlnb25TdGFydDpaYyxwb2x5Z29uRW5kOlpjLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbQmgsTGhdLFtJaCxSaF1dO3JldHVybiBJaD1SaD0tKExoPUJoPTEvMCksdH19O2NvbnN0IFBoPUZoO3ZhciBqaCxZaCx6aCxVaCxxaD0wLCRoPTAsSGg9MCxXaD0wLFZoPTAsR2g9MCxYaD0wLFpoPTAsUWg9MCxLaD17cG9pbnQ6SmgsbGluZVN0YXJ0OnRmLGxpbmVFbmQ6cmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S2gubGluZVN0YXJ0PWFmLEtoLmxpbmVFbmQ9b2Z9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtLaC5wb2ludD1KaCxLaC5saW5lU3RhcnQ9dGYsS2gubGluZUVuZD1yZn0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9UWg/W1hoL1FoLFpoL1FoXTpHaD9bV2gvR2gsVmgvR2hdOkhoP1txaC9IaCwkaC9IaF06W05hTixOYU5dO3JldHVybiBxaD0kaD1IaD1XaD1WaD1HaD1YaD1aaD1RaD0wLHR9fTtmdW5jdGlvbiBKaCh0LGUpe3FoKz10LCRoKz1lLCsrSGh9ZnVuY3Rpb24gdGYoKXtLaC5wb2ludD1lZn1mdW5jdGlvbiBlZih0LGUpe0toLnBvaW50PW5mLEpoKHpoPXQsVWg9ZSl9ZnVuY3Rpb24gbmYodCxlKXt2YXIgbj10LXpoLHI9ZS1VaCxpPUhjKG4qbityKnIpO1doKz1pKih6aCt0KS8yLFZoKz1pKihVaCtlKS8yLEdoKz1pLEpoKHpoPXQsVWg9ZSl9ZnVuY3Rpb24gcmYoKXtLaC5wb2ludD1KaH1mdW5jdGlvbiBhZigpe0toLnBvaW50PXNmfWZ1bmN0aW9uIG9mKCl7Y2YoamgsWWgpfWZ1bmN0aW9uIHNmKHQsZSl7S2gucG9pbnQ9Y2YsSmgoamg9emg9dCxZaD1VaD1lKX1mdW5jdGlvbiBjZih0LGUpe3ZhciBuPXQtemgscj1lLVVoLGk9SGMobipuK3Iqcik7V2grPWkqKHpoK3QpLzIsVmgrPWkqKFVoK2UpLzIsR2grPWksWGgrPShpPVVoKnQtemgqZSkqKHpoK3QpLFpoKz1pKihVaCtlKSxRaCs9MyppLEpoKHpoPXQsVWg9ZSl9Y29uc3QgdWY9S2g7ZnVuY3Rpb24gbGYodCl7dGhpcy5fY29udGV4dD10fWxmLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxPYyl9fSxyZXN1bHQ6WmN9O3ZhciBoZixmZixkZixwZix5ZixnZj1rYygpLG1mPXtwb2ludDpaYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXttZi5wb2ludD12Zn0sbGluZUVuZDpmdW5jdGlvbigpe2hmJiZiZihmZixkZiksbWYucG9pbnQ9WmN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2hmPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aGY9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2dmO3JldHVybiBnZi5yZXNldCgpLHR9fTtmdW5jdGlvbiB2Zih0LGUpe21mLnBvaW50PWJmLGZmPXBmPXQsZGY9eWY9ZX1mdW5jdGlvbiBiZih0LGUpe3BmLT10LHlmLT1lLGdmLmFkZChIYyhwZipwZit5Zip5ZikpLHBmPXQseWY9ZX1jb25zdCBfZj1tZjtmdW5jdGlvbiB4Zigpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB3Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBrZih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbnUodCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4oT2gpKSxPaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4oX2YpKSxfZi5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51KHQsbihQaCkpLFBoLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBudSh0LG4odWYpKSx1Zi5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxfaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IHhmKTpuZXcgbGYoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX1mdW5jdGlvbiBUZih0KXtyZXR1cm57c3RyZWFtOkVmKHQpfX1mdW5jdGlvbiBFZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IENmO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBDZigpe31mdW5jdGlvbiBTZih0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLG51KG4sdC5zdHJlYW0oUGgpKSxlKFBoLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiBBZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKHIvKG5bMV1bMF0tblswXVswXSksaS8oblsxXVsxXS1uWzBdWzFdKSksbz0rZVswXVswXSsoci1hKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSksbil9ZnVuY3Rpb24gTWYodCxlLG4pe3JldHVybiBBZih0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBOZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxhPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsbz0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1mdW5jdGlvbiBEZih0LGUsbil7cmV0dXJuIFNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVsxXS1uWzBdWzFdKSxhPS1pKm5bMF1bMF0sbz0oci1pKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX14Zi5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6d2YoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT13Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LENmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q2YscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIE9mPVBjKDMwKkxjKTtmdW5jdGlvbiBCZih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcpe3ZhciBtPXUtcix2PWwtaSxiPW0qbSt2KnY7aWYoYj40KmUmJnktLSl7dmFyIF89bytmLHg9cytkLHc9YytwLGs9SGMoXypfK3gqeCt3KncpLFQ9R2Mody89ayksRT1JYyhJYyh3KS0xKTxTY3x8SWMoYS1oKTxTYz8oYStoKS8yOkZjKHgsXyksQz10KEUsVCksUz1DWzBdLEE9Q1sxXSxNPVMtcixOPUEtaSxEPXYqTS1tKk47KEQqRC9iPmV8fEljKChtKk0rdipOKS9iLS41KT4uM3x8bypmK3MqZCtjKnA8T2YpJiYobihyLGksYSxvLHMsYyxTLEEsRSxfLz1rLHgvPWssdyx5LGcpLGcucG9pbnQoUyxBKSxuKFMsQSxFLF8seCx3LHUsbCxoLGYsZCxwLHksZykpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxhLG8scyxjLHUsbCxoLGYsZCxwLHk9e3BvaW50OmcsbGluZVN0YXJ0Om0sbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCkseS5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHkubGluZVN0YXJ0PW19fTtmdW5jdGlvbiBnKG4scil7bj10KG4sciksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIG0oKXtsPU5hTix5LnBvaW50PXYsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB2KHIsaSl7dmFyIGE9bXUoW3IsaV0pLG89dChyLGkpO24obCxoLHUsZixkLHAsbD1vWzBdLGg9b1sxXSx1PXIsZj1hWzBdLGQ9YVsxXSxwPWFbMl0sMTYsZSksZS5wb2ludChsLGgpfWZ1bmN0aW9uIGIoKXt5LnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe20oKSx5LnBvaW50PXgseS5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LGUpe3Yocj10LGUpLGk9bCxhPWgsbz1mLHM9ZCxjPXAseS5wb2ludD12fWZ1bmN0aW9uIHcoKXtuKGwsaCx1LGYsZCxwLGksYSxyLG8scyxjLDE2LGUpLHkubGluZUVuZD1iLGIoKX1yZXR1cm4geX19KHQsZSk6ZnVuY3Rpb24odCl7cmV0dXJuIEVmKHtwb2ludDpmdW5jdGlvbihlLG4pe2U9dChlLG4pLHRoaXMuc3RyZWFtLnBvaW50KGVbMF0sZVsxXSl9fSl9KHQpfXZhciBMZj1FZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KkxjLGUqTGMpfX0pO2Z1bmN0aW9uIElmKHQsZSxuLHIsaSl7ZnVuY3Rpb24gYShhLG8pe3JldHVybltlK3QqKGEqPXIpLG4tdCoobyo9aSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihhLG8pe3JldHVyblsoYS1lKS90KnIsKG4tbykvdCppXX0sYX1mdW5jdGlvbiBSZih0LGUsbixyLGksYSl7dmFyIG89UGMoYSkscz1xYyhhKSxjPW8qdCx1PXMqdCxsPW8vdCxoPXMvdCxmPShzKm4tbyplKS90LGQ9KHMqZStvKm4pL3Q7ZnVuY3Rpb24gcCh0LGEpe3JldHVybltjKih0Kj1yKS11KihhKj1pKStlLG4tdSp0LWMqYV19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IqKGwqdC1oKmUrZiksaSooZC1oKnQtbCplKV19LHB9ZnVuY3Rpb24gRmYodCl7cmV0dXJuIFBmKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gUGYodCl7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaD0xNTAsZj00ODAsZD0yNTAscD0wLHk9MCxnPTAsbT0wLHY9MCxiPTAsXz0xLHg9MSx3PW51bGwsaz1VbCxUPW51bGwsRT1faCxDPS41O2Z1bmN0aW9uIFModCl7cmV0dXJuIGModFswXSpMYyx0WzFdKkxjKX1mdW5jdGlvbiBBKHQpe3JldHVybih0PWMuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpCYyx0WzFdKkJjXX1mdW5jdGlvbiBNKCl7dmFyIHQ9UmYoaCwwLDAsXyx4LGIpLmFwcGx5KG51bGwsZShwLHkpKSxyPShiP1JmOklmKShoLGYtdFswXSxkLXRbMV0sXyx4LGIpO3JldHVybiBuPWtsKGcsbSx2KSxzPXhsKGUsciksYz14bChuLHMpLG89QmYocyxDKSxOKCl9ZnVuY3Rpb24gTigpe3JldHVybiB1PWw9bnVsbCxTfXJldHVybiBTLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PUxmKGZ1bmN0aW9uKHQpe3JldHVybiBFZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKGsobyhFKGw9dCkpKSkpfSxTLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dCx3PXZvaWQgMCxOKCkpOmt9LFMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxUPXI9aT1hPW51bGwsTigpKTpFfSxTLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0rdD9xbCh3PXQqTGMpOih3PW51bGwsVWwpLE4oKSk6dypCY30sUy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFQ9cj1pPWE9bnVsbCxfaCk6V2woVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTigpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLGFdXX0sUy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxNKCkpOmh9LFMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sTSgpKTpbZixkXX0sUy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqTGMseT10WzFdJTM2MCpMYyxNKCkpOltwKkJjLHkqQmNdfSxTLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpMYyxtPXRbMV0lMzYwKkxjLHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpMYzowLE0oKSk6W2cqQmMsbSpCYyx2KkJjXX0sUy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpMYyxNKCkpOmIqQmN9LFMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dD8tMToxLE0oKSk6XzwwfSxTLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxNKCkpOng8MH0sUy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89QmYocyxDPXQqdCksTigpKTpIYyhDKX0sUy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQWYoUyx0LGUpfSxTLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWYoUyx0LGUpfSxTLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5mKFMsdCxlKX0sUy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGYoUyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFMuaW52ZXJ0PWUuaW52ZXJ0JiZBLE0oKX19ZnVuY3Rpb24gamYodCl7dmFyIGU9MCxuPU1jLzMscj1QZih0KSxpPXIoZSxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihlPXRbMF0qTGMsbj10WzFdKkxjKTpbZSpCYyxuKkJjXX0saX1mdW5jdGlvbiBZZih0LGUpe3ZhciBuPXFjKHQpLHI9KG4rcWMoZSkpLzI7aWYoSWMocik8U2MpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPVBjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLHFjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsR2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9SGMoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49SGMoaS0yKnIqcWMoZSkpL3I7cmV0dXJuW24qcWModCo9ciksYS1uKlBjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWUsbz1GYyh0LEljKG4pKSokYyhuKTtyZXR1cm4gbipyPDAmJihvLT1NYyokYyh0KSokYyhuKSksW28vcixHYygoaS0odCp0K24qbikqcipyKS8oMipyKSldfSxvfWZ1bmN0aW9uIHpmKCl7cmV0dXJuIGpmKFlmKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVmKCl7cmV0dXJuIHpmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcWYoKXt2YXIgdCxlLG4scixpLGEsbz1VZigpLHM9emYoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9emYoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksdT17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gbCh0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLG4ucG9pbnQoZSxvKSxhfHwoci5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsbH1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5zY2FsZSgpLG49by50cmFuc2xhdGUoKSxyPSh0WzBdLW5bMF0pL2UsaT0odFsxXS1uWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2M6bykuaW52ZXJ0KHQpfSxsLnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDoocj1bby5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxjLnN0cmVhbShuKV0saT1yLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248aTspcltuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIHIsaX0sbC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6by5wcmVjaXNpb24oKX0sbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLGwudHJhbnNsYXRlKG8udHJhbnNsYXRlKCkpKTpvLnNjYWxlKCl9LGwudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvLnRyYW5zbGF0ZSgpO3ZhciBlPW8uc2NhbGUoKSxhPSt0WzBdLGw9K3RbMV07cmV0dXJuIG49by50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLGwtLjIzOCplXSxbYSsuNDU1KmUsbCsuMjM4KmVdXSkuc3RyZWFtKHUpLHI9cy50cmFuc2xhdGUoW2EtLjMwNyplLGwrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplK1NjLGwrLjEyKmUrU2NdLFthLS4yMTQqZS1TYyxsKy4yMzQqZS1TY11dKS5zdHJlYW0odSksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsbCsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrU2MsbCsuMTY2KmUrU2NdLFthLS4xMTUqZS1TYyxsKy4yMzQqZS1TY11dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBBZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBNZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTmYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBEZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9ZnVuY3Rpb24gJGYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9UGMoZSksaT1QYyhuKSxhPXQocippKTtyZXR1cm5bYSppKnFjKGUpLGEqcWMobildfX1mdW5jdGlvbiBIZih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1IYyhlKmUrbipuKSxpPXQociksYT1xYyhpKSxvPVBjKGkpO3JldHVybltGYyhlKmEscipvKSxHYyhyJiZuKmEvcildfX12YXIgV2Y9JGYoKGZ1bmN0aW9uKHQpe3JldHVybiBIYygyLygxK3QpKX0pKTtmdW5jdGlvbiBWZigpe3JldHVybiBGZihXZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9V2YuaW52ZXJ0PUhmKChmdW5jdGlvbih0KXtyZXR1cm4gMipHYyh0LzIpfSkpO3ZhciBHZj0kZigoZnVuY3Rpb24odCl7cmV0dXJuKHQ9VmModCkpJiZ0L3FjKHQpfSkpO2Z1bmN0aW9uIFhmKCl7cmV0dXJuIEZmKEdmKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9ZnVuY3Rpb24gWmYodCxlKXtyZXR1cm5bdCx6YyhXYygoTmMrZSkvMikpXX1mdW5jdGlvbiBRZigpe3JldHVybiBLZihaZikuc2NhbGUoOTYxL09jKX1mdW5jdGlvbiBLZih0KXt2YXIgZSxuLHIsaT1GZih0KSxhPWkuY2VudGVyLG89aS5zY2FsZSxzPWkudHJhbnNsYXRlLGM9aS5jbGlwRXh0ZW50LHU9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGE9TWMqbygpLHM9aShTbChpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT11P1tbc1swXS1hLHNbMV0tYV0sW3NbMF0rYSxzWzFdK2FdXTp0PT09WmY/W1tNYXRoLm1heChzWzBdLWEsdSksZV0sW01hdGgubWluKHNbMF0rYSxuKSxyXV06W1t1LE1hdGgubWF4KHNbMV0tYSxlKV0sW24sTWF0aC5taW4oc1sxXSthLHIpXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGwoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSxsKCkpOnMoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksbCgpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD91PWU9bj1yPW51bGw6KHU9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLHI9K3RbMV1bMV0pLGwoKSk6bnVsbD09dT9udWxsOltbdSxlXSxbbixyXV19LGwoKX1mdW5jdGlvbiBKZih0KXtyZXR1cm4gV2MoKE5jK3QpLzIpfWZ1bmN0aW9uIHRkKHQsZSl7dmFyIG49UGModCkscj10PT09ZT9xYyh0KTp6YyhuL1BjKGUpKS96YyhKZihlKS9KZih0KSksaT1uKlVjKEpmKHQpLHIpL3I7aWYoIXIpcmV0dXJuIFpmO2Z1bmN0aW9uIGEodCxlKXtpPjA/ZTwtTmMrU2MmJihlPS1OYytTYyk6ZT5OYy1TYyYmKGU9TmMtU2MpO3ZhciBuPWkvVWMoSmYoZSkscik7cmV0dXJuW24qcWMocip0KSxpLW4qUGMocip0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS1lLGE9JGMocikqSGModCp0K24qbiksbz1GYyh0LEljKG4pKSokYyhuKTtyZXR1cm4gbipyPDAmJihvLT1NYyokYyh0KSokYyhuKSksW28vciwyKlJjKFVjKGkvYSwxL3IpKS1OY119LGF9ZnVuY3Rpb24gZWQoKXtyZXR1cm4gamYodGQpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiByZCgpe3JldHVybiBGZihuZCkuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBpZCh0LGUpe3ZhciBuPVBjKHQpLHI9dD09PWU/cWModCk6KG4tUGMoZSkpLyhlLXQpLGk9bi9yK3Q7aWYoSWMocik8U2MpcmV0dXJuIG5kO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qcWMoYSksaS1uKlBjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1GYyh0LEljKG4pKSokYyhuKTtyZXR1cm4gbipyPDAmJihhLT1NYyokYyh0KSokYyhuKSksW2EvcixpLSRjKHIpKkhjKHQqdCtuKm4pXX0sYX1mdW5jdGlvbiBhZCgpe3JldHVybiBqZihpZCkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX1HZi5pbnZlcnQ9SGYoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLFpmLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqUmMoWWMoZSkpLU5jXX0sbmQuaW52ZXJ0PW5kO3ZhciBvZD0xLjM0MDI2NCxzZD0tLjA4MTEwNixjZD04OTNlLTYsdWQ9LjAwMzc5NixsZD1IYygzKS8yO2Z1bmN0aW9uIGhkKHQsZSl7dmFyIG49R2MobGQqcWMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqUGMobikvKGxkKihvZCszKnNkKnIraSooNypjZCs5KnVkKnIpKSksbioob2Qrc2QqcitpKihjZCt1ZCpyKSldfWZ1bmN0aW9uIGZkKCl7cmV0dXJuIEZmKGhkKS5zY2FsZSgxNzcuMTU4KX1mdW5jdGlvbiBkZCh0LGUpe3ZhciBuPVBjKGUpLHI9UGModCkqbjtyZXR1cm5bbipxYyh0KS9yLHFjKGUpL3JdfWZ1bmN0aW9uIHBkKCl7cmV0dXJuIEZmKGRkKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfWZ1bmN0aW9uIHlkKCl7dmFyIHQsZSxuLHIsaSxhLG8scz0xLGM9MCx1PTAsbD0xLGg9MSxmPTAsZD1udWxsLHA9MSx5PTEsZz1FZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKFt0LGVdKTt0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pLG09X2g7ZnVuY3Rpb24gdigpe3JldHVybiBwPXMqbCx5PXMqaCxhPW89bnVsbCxifWZ1bmN0aW9uIGIobil7dmFyIHI9blswXSpwLGk9blsxXSp5O2lmKGYpe3ZhciBhPWkqdC1yKmU7cj1yKnQraSplLGk9YX1yZXR1cm5bcitjLGkrdV19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByPW5bMF0tYyxpPW5bMV0tdTtpZihmKXt2YXIgYT1pKnQrciplO3I9cip0LWkqZSxpPWF9cmV0dXJuW3IvcCxpL3ldfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYSYmbz09PXQ/YTphPWcobShvPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10LGQ9bj1yPWk9bnVsbCx2KCkpOm19LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhkPW49cj1pPW51bGwsX2gpOldsKGQ9K3RbMF1bMF0sbj0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHYoKSk6bnVsbD09ZD9udWxsOltbZCxuXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdigpKTpzfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSx1PSt0WzFdLHYoKSk6W2MsdV19LGIuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cWMoZj1uJTM2MCpMYyksdD1QYyhmKSx2KCkpOmYqQmN9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dD8tMToxLHYoKSk6bDwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQ/LTE6MSx2KCkpOmg8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQWYoYix0LGUpfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWYoYix0LGUpfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5mKGIsdCxlKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGYoYix0LGUpfSxifWZ1bmN0aW9uIGdkKHQsZSl7dmFyIG49ZSplLHI9bipuO3JldHVyblt0KiguODcwNy0uMTMxOTc5Km4rcioociooLjAwMzk3MSpuLS4wMDE1MjkqciktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K24qKC4wMTUwODUrciooLjAyODg3NCpuLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBtZCgpe3JldHVybiBGZihnZCkuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gdmQodCxlKXtyZXR1cm5bUGMoZSkqcWModCkscWMoZSldfWZ1bmN0aW9uIGJkKCl7cmV0dXJuIEZmKHZkKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9ZnVuY3Rpb24gX2QodCxlKXt2YXIgbj1QYyhlKSxyPTErUGModCkqbjtyZXR1cm5bbipxYyh0KS9yLHFjKGUpL3JdfWZ1bmN0aW9uIHhkKCl7cmV0dXJuIEZmKF9kKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIHdkKHQsZSl7cmV0dXJuW3pjKFdjKChOYytlKS8yKSksLXRdfWZ1bmN0aW9uIGtkKCl7dmFyIHQ9S2Yod2QpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfWZ1bmN0aW9uIFRkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIEVkKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIENkKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBTZCgpe3ZhciB0PVRkLGU9MSxuPTEscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhLG89MDtpLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKEVkLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UoQ2QsMCl9KG4pKTooZS54PWE/bys9dChlLGEpOjAsZS55PTAsYT1lKX0pKTt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KGkpLGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShpKSx1PXMueC10KHMsYykvMixsPWMueCt0KGMscykvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKmUsdC55PShpLnktdC55KSpufTpmdW5jdGlvbih0KXt0Lng9KHQueC11KS8obC11KSplLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKm59KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBBZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIE1kKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBCZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9TmQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBCZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKE9kKX1mdW5jdGlvbiBOZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBEZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gT2QodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBCZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1oZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scj1lLGk9cipyLGE9aSppKmksbz0wO288MTImJihhPShpPShyLT1uPShyKihvZCtzZCppK2EqKGNkK3VkKmkpKS1lKS8ob2QrMypzZCppK2EqKDcqY2QrOSp1ZCppKSkpKnIpKmkqaSwhKEljKG4pPEFjKSk7KytvKTtyZXR1cm5bbGQqdCoob2QrMypzZCppK2EqKDcqY2QrOSp1ZCppKSkvUGMociksR2MocWMocikvbGQpXX0sZGQuaW52ZXJ0PUhmKFJjKSxnZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWUsaT0yNTtkb3t2YXIgYT1yKnIsbz1hKmE7ci09bj0ociooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKEljKG4pPlNjJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSx2ZC5pbnZlcnQ9SGYoR2MpLF9kLmludmVydD1IZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqUmModCl9KSksd2QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqUmMoWWModCkpLU5jXX0sQmQucHJvdG90eXBlPU1kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QmQsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoQWQpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxuPWEuY2hpbGRyZW4pZm9yKHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3Ipby5wdXNoKG5bcl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKWEucHVzaChlW25dKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMsaT1bcl07cj1pLnBvcCgpOylpZih0KHIpLGU9ci5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWkucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAscj1lLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyluKz1yW2ldLnZhbHVlO2UudmFsdWU9bn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCkscj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1uLnBvcCgpLGU9ci5wb3AoKTt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gTWQodGhpcykuZWFjaEJlZm9yZShEZCl9fTt2YXIgTGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIElkKHQpe2Zvcih2YXIgZSxuLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dC5sZW5ndGg7cjspbj1NYXRoLnJhbmRvbSgpKnItLXwwLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fShMZC5jYWxsKHQpKSkubGVuZ3RoLGE9W107cjxpOyllPXRbcl0sbiYmUGQobixlKT8rK3I6KG49WWQoYT1SZChhLGUpKSxyPTApO3JldHVybiBufWZ1bmN0aW9uIFJkKHQsZSl7dmFyIG4scjtpZihqZChlLHQpKXJldHVybltlXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKEZkKGUsdFtuXSkmJmpkKHpkKHRbbl0sZSksdCkpcmV0dXJuW3Rbbl0sZV07Zm9yKG49MDtuPHQubGVuZ3RoLTE7KytuKWZvcihyPW4rMTtyPHQubGVuZ3RoOysrcilpZihGZCh6ZCh0W25dLHRbcl0pLGUpJiZGZCh6ZCh0W25dLGUpLHRbcl0pJiZGZCh6ZCh0W3JdLGUpLHRbbl0pJiZqZChVZCh0W25dLHRbcl0sZSksdCkpcmV0dXJuW3Rbbl0sdFtyXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gRmQodCxlKXt2YXIgbj10LnItZS5yLHI9ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIG48MHx8bipuPHIqcitpKml9ZnVuY3Rpb24gUGQodCxlKXt2YXIgbj10LnItZS5yKzFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBqZCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWlmKCFQZCh0LGVbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFlkKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57eDp0LngseTp0Lnkscjp0LnJ9fSh0WzBdKTtjYXNlIDI6cmV0dXJuIHpkKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBVZCh0WzBdLHRbMV0sdFsyXSl9fWZ1bmN0aW9uIHpkKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBVZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLHk9aS1sLGc9Yy1hLG09aC1hLHY9cipyK2kqaS1hKmEsYj12LW8qby1zKnMrYypjLF89di11KnUtbCpsK2gqaCx4PWQqcC1mKnksdz0ocCpfLXkqYikvKDIqeCktcixrPSh5KmctcCptKS94LFQ9KGQqYi1mKl8pLygyKngpLWksRT0oZiptLWQqZykveCxDPWsqaytFKkUtMSxTPTIqKGErdyprK1QqRSksQT13KncrVCpULWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK3craypNLHk6aStUK0UqTSxyOk19fWZ1bmN0aW9uIHFkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gJGQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBIZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBXZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gVmQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7cWQobixlLHI9dFsyXSksZT1uZXcgV2QoZSksbj1uZXcgV2Qobikscj1uZXcgV2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3FkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBXZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKCRkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoJGQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPUhkKGUpOyhyPXIubmV4dCkhPT1uOykobz1IZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9SWQoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIFZkKHQpLHR9ZnVuY3Rpb24gWGQodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpaZCh0KX1mdW5jdGlvbiBaZCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gUWQoKXtyZXR1cm4gMH1mdW5jdGlvbiBLZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gSmQodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiB0cCgpe3ZhciB0PW51bGwsZT0xLG49MSxyPVFkO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGkueD1lLzIsaS55PW4vMix0P2kuZWFjaEJlZm9yZShlcCh0KSkuZWFjaEFmdGVyKG5wKHIsLjUpKS5lYWNoQmVmb3JlKHJwKDEpKTppLmVhY2hCZWZvcmUoZXAoSmQpKS5lYWNoQWZ0ZXIobnAoUWQsMSkpLmVhY2hBZnRlcihucChyLGkuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShycChNYXRoLm1pbihlLG4pLygyKmkucikpKSxpfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1YZChlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxpKTpbZSxuXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGkpOnJ9LGl9ZnVuY3Rpb24gZXAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBucCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVZkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gcnAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19ZnVuY3Rpb24gaXAodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIGFwKHQsZSxuLHIsaSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGM9by5sZW5ndGgsdT10LnZhbHVlJiYoci1lKS90LnZhbHVlOysrczxjOykoYT1vW3NdKS55MD1uLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKnV9ZnVuY3Rpb24gb3AoKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmYXAocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoaXApLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX12YXIgc3A9e2RlcHRoOi0xfSxjcD17fTtmdW5jdGlvbiB1cCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBscCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBocCgpe3ZhciB0PXVwLGU9bHA7ZnVuY3Rpb24gbihuKXt2YXIgcixpLGEsbyxzLGMsdSxsPW4ubGVuZ3RoLGg9bmV3IEFycmF5KGwpLGY9e307Zm9yKGk9MDtpPGw7KytpKXI9bltpXSxzPWhbaV09bmV3IEJkKHIpLG51bGwhPShjPXQocixpLG4pKSYmKGMrPSIiKSYmKGZbdT0iJCIrKHMuaWQ9YyldPXUgaW4gZj9jcDpzKTtmb3IoaT0wO2k8bDsrK2kpaWYocz1oW2ldLG51bGwhPShjPWUobltpXSxpLG4pKSYmKGMrPSIiKSl7aWYoIShvPWZbIiQiK2NdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYobz09PWNwKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9c3AsYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1sfSkpLmVhY2hCZWZvcmUoT2QpLGEucGFyZW50PW51bGwsbD4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gYX1yZXR1cm4gbi5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1aZChlKSxuKTp0fSxuLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpkKHQpLG4pOmV9LG59ZnVuY3Rpb24gZnAodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gZHAodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBwcCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbZS5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIHlwKHQsZSxuKXt2YXIgcj1uLyhlLmktdC5pKTtlLmMtPXIsZS5zKz1uLHQuYys9cixlLnorPW4sZS5tKz1ufWZ1bmN0aW9uIGdwKHQsZSxuKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpufWZ1bmN0aW9uIG1wKHQsZSl7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPWV9ZnVuY3Rpb24gdnAoKXt2YXIgdD1mcCxlPTEsbj0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhLG89bmV3IG1wKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihyPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1yLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKG49ZS5jaGlsZHJlbltpXT1uZXcgbXAocltpXSxpKSksbi5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IG1wKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihjLmVhY2hBZnRlcihhKSxjLnBhcmVudC5tPS1jLnosYy5lYWNoQmVmb3JlKG8pLHIpaS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIHU9aSxsPWksaD1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PHUueCYmKHU9dCksdC54PmwueCYmKGw9dCksdC5kZXB0aD5oLmRlcHRoJiYoaD10KX0pKTt2YXIgZj11PT09bD8xOnQodSxsKS8yLGQ9Zi11LngscD1lLyhsLngrZitkKSx5PW4vKGguZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCp5fSkpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIG49ZS5jaGlsZHJlbixyPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP3JbZS5pLTFdOm51bGw7aWYobil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9bixlLm0rPW4sbis9ZS5zKyhyKz1lLmMpfShlKTt2YXIgYT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxuLHIpe2lmKG4pe2Zvcih2YXIgaSxhPWUsbz1lLHM9bixjPWEucGFyZW50LmNoaWxkcmVuWzBdLHU9YS5tLGw9by5tLGg9cy5tLGY9Yy5tO3M9cHAocyksYT1kcChhKSxzJiZhOyljPWRwKGMpLChvPXBwKG8pKS5hPWUsKGk9cy56K2gtYS56LXUrdChzLl8sYS5fKSk+MCYmKHlwKGdwKHMsZSxyKSxlLGkpLHUrPWksbCs9aSksaCs9cy5tLHUrPWEubSxmKz1jLm0sbCs9by5tO3MmJiFwcChvKSYmKG8udD1zLG8ubSs9aC1sKSxhJiYhZHAoYykmJihjLnQ9YSxjLm0rPXUtZixyPWUpfXJldHVybiByfShlLGksZS5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX1mdW5jdGlvbiBicCh0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fW1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEJkLnByb3RvdHlwZSk7dmFyIF9wPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiB4cCh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHMsYyx1LGwsaCxmLGQscCx5LGcsbT1bXSx2PWUuY2hpbGRyZW4sYj0wLF89MCx4PXYubGVuZ3RoLHc9ZS52YWx1ZTtiPHg7KXtjPWktbix1PWEtcjtkb3tsPXZbXysrXS52YWx1ZX13aGlsZSghbCYmXzx4KTtmb3IoaD1mPWwsZz1sKmwqKHk9TWF0aC5tYXgodS9jLGMvdSkvKHcqdCkpLHA9TWF0aC5tYXgoZi9nLGcvaCk7Xzx4OysrXyl7aWYobCs9cz12W19dLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSxnPWwqbCp5LChkPU1hdGgubWF4KGYvZyxnL2gpKT5wKXtsLT1zO2JyZWFrfXA9ZH1tLnB1c2gobz17dmFsdWU6bCxkaWNlOmM8dSxjaGlsZHJlbjp2LnNsaWNlKGIsXyl9KSxvLmRpY2U/YXAobyxuLHIsaSx3P3IrPXUqbC93OmEpOmJwKG8sbixyLHc/bis9YypsL3c6aSxhKSx3LT1sLGI9X31yZXR1cm4gbX1jb25zdCB3cD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXt4cChlLHQsbixyLGksYSl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oX3ApO2Z1bmN0aW9uIGtwKCl7dmFyIHQ9d3AsZT0hMSxuPTEscj0xLGk9WzBdLGE9UWQsbz1RZCxzPVFkLGM9UWQsdT1RZDtmdW5jdGlvbiBsKHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPW4sdC55MT1yLHQuZWFjaEJlZm9yZShoKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoaXApLHR9ZnVuY3Rpb24gaChlKXt2YXIgbj1pW2UuZGVwdGhdLHI9ZS54MCtuLGw9ZS55MCtuLGg9ZS54MS1uLGY9ZS55MS1uO2g8ciYmKHI9aD0ocitoKS8yKSxmPGwmJihsPWY9KGwrZikvMiksZS54MD1yLGUueTA9bCxlLngxPWgsZS55MT1mLGUuY2hpbGRyZW4mJihuPWlbZS5kZXB0aCsxXT1hKGUpLzIscis9dShlKS1uLGwrPW8oZSktbiwoaC09cyhlKS1uKTxyJiYocj1oPShyK2gpLzIpLChmLT1jKGUpLW4pPGwmJihsPWY9KGwrZikvMiksdChlLHIsbCxoLGYpKX1yZXR1cm4gbC5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsbCk6ZX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLHI9K3RbMV0sbCk6W24scl19LGwudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1aZChlKSxsKTp0fSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOmwucGFkZGluZ0lubmVyKCl9LGwucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOmF9LGwucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTpsLnBhZGRpbmdUb3AoKX0sbC5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOm99LGwucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOnN9LGwucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OktkKCt0KSxsKTpjfSxsLnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S2QoK3QpLGwpOnV9LGx9ZnVuY3Rpb24gVHAodCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX1mb3IodmFyIGg9dVtlXSxmPXIvMitoLGQ9ZSsxLHA9bi0xO2Q8cDspe3ZhciB5PWQrcD4+PjE7dVt5XTxmP2Q9eSsxOnA9eX1mLXVbZC0xXTx1W2RdLWYmJmUrMTxkJiYtLWQ7dmFyIGc9dVtkXS1oLG09ci1nO2lmKG8taT5jLWEpe3ZhciB2PShpKm0rbypnKS9yO3QoZSxkLGcsaSxhLHYsYyksdChkLG4sbSx2LGEsbyxjKX1lbHNle3ZhciBiPShhKm0rYypnKS9yO3QoZSxkLGcsaSxhLG8sYiksdChkLG4sbSxpLGIsbyxjKX19KDAsYyx0LnZhbHVlLGUsbixyLGkpfWZ1bmN0aW9uIEVwKHQsZSxuLHIsaSl7KDEmdC5kZXB0aD9icDphcCkodCxlLG4scixpKX1jb25zdCBDcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/YXAocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOmJwKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz14cChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KF9wKTtmdW5jdGlvbiBTcCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX1mdW5jdGlvbiBBcCh0LGUpe3ZhciBuPWRuKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fWZ1bmN0aW9uIE1wKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLW4pK2Uqbil9fXZhciBOcD1NYXRoLlNRUlQyO2Z1bmN0aW9uIERwKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIE9wKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvTnAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChOcCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGc9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxtPU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7cj0obS1nKS9OcCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9RHAoZyksYz1vLygyKmQpKihzKihlPU5wKm4rZywoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9EcChOcCpuK2cpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn1mdW5jdGlvbiBCcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWFuKGUpKS5oLChuPWFuKG4pKS5oKSxpPXBuKGUucyxuLnMpLGE9cG4oZS5sLG4ubCksbz1wbihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX1jb25zdCBMcD1CcChkbik7dmFyIElwPUJwKHBuKTtmdW5jdGlvbiBScCh0LGUpe3ZhciBuPXBuKCh0PVRhKHQpKS5sLChlPVRhKGUpKS5sKSxyPXBuKHQuYSxlLmEpLGk9cG4odC5iLGUuYiksYT1wbih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1yKGUpLHQuYj1pKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fWZ1bmN0aW9uIEZwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9T2EoZSkpLmgsKG49T2EobikpLmgpLGk9cG4oZS5jLG4uYyksYT1wbihlLmwsbi5sKSxvPXBuKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fWNvbnN0IFBwPUZwKGRuKTt2YXIganA9RnAocG4pO2Z1bmN0aW9uIFlwKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPSRhKGUpKS5oLChyPSRhKHIpKS5oKSxhPXBuKGUucyxyLnMpLG89cG4oZS5sLHIubCkscz1wbihlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1hKHQpLGUubD1vKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX1jb25zdCB6cD1ZcChkbik7dmFyIFVwPVlwKHBuKTtmdW5jdGlvbiBxcCh0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPXQoaSxpPWVbKytuXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gYVtlXSh0LWUpfX1mdW5jdGlvbiAkcCh0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpbltyXT10KHIvKGUtMSkpO3JldHVybiBufWZ1bmN0aW9uIEhwKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn1mdW5jdGlvbiBXcCh0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT0wLG89MCxzPXRbaS0xXSxjPTA7KytyPGk7KWU9cyxzPXRbcl0sYys9bj1lWzBdKnNbMV0tc1swXSplWzFdLGErPShlWzBdK3NbMF0pKm4sbys9KGVbMV0rc1sxXSkqbjtyZXR1cm5bYS8oYyo9Myksby9jXX1mdW5jdGlvbiBWcCh0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSktKGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9ZnVuY3Rpb24gR3AodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gWHAodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49WzAsMV0scj0yLGk9MjtpPGU7KytpKXtmb3IoO3I+MSYmVnAodFtuW3ItMl1dLHRbbltyLTFdXSx0W2ldKTw9MDspLS1yO25bcisrXT1pfXJldHVybiBuLnNsaWNlKDAscil9ZnVuY3Rpb24gWnAodCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChHcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9WHAociksbz1YcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX1mdW5jdGlvbiBRcCh0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1lWzBdLHM9ZVsxXSxjPWFbMF0sdT1hWzFdLGw9ITEsaD0wO2g8aTsrK2gpbj0oYT10W2hdKVswXSwocj1hWzFdKT5zIT11PnMmJm88KGMtbikqKHMtcikvKHUtcikrbiYmKGw9IWwpLGM9bix1PXI7cmV0dXJuIGx9ZnVuY3Rpb24gS3AodCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9dFtpLTFdLG89YVswXSxzPWFbMV0sYz0wOysrcjxpOyllPW8sbj1zLGUtPW89KGE9dFtyXSlbMF0sbi09cz1hWzFdLGMrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gY31mdW5jdGlvbiBKcCgpe3JldHVybiBNYXRoLnJhbmRvbSgpfWNvbnN0IHR5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShKcCksZXk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1yKWE9cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsYT0yKmUoKS0xLGk9cipyK2EqYX13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShKcCksbnk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ZXkuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oSnApLHJ5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KEpwKSxpeT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49cnkuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oSnApLGF5PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KEpwKTtmdW5jdGlvbiBveSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiBzeSh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBjeT1BcnJheS5wcm90b3R5cGUsdXk9Y3kubWFwLGx5PWN5LnNsaWNlLGh5PXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGZ5KCl7dmFyIHQ9bmEoKSxlPVtdLG49W10scj1oeTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkrIiIsbz10LmdldChhKTtpZighbyl7aWYociE9PWh5KXJldHVybiByO3Quc2V0KGEsbz1lLnB1c2goaSkpfXJldHVybiBuWyhvLTEpJW4ubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9bmEoKTtmb3IodmFyIHIsYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KXQuaGFzKGE9KHI9bltvXSkrIiIpfHx0LnNldChhLGUucHVzaChyKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bHkuY2FsbCh0KSxpKTpuLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBmeShlLG4pLnVua25vd24ocil9LG95LmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIGR5KCl7dmFyIHQsZSxuPWZ5KCkudW5rbm93bih2b2lkIDApLHI9bi5kb21haW4saT1uLnJhbmdlLGE9WzAsMV0sbz0hMSxzPTAsYz0wLHU9LjU7ZnVuY3Rpb24gbCgpe3ZhciBuPXIoKS5sZW5ndGgsbD1hWzFdPGFbMF0saD1hW2wtMF0sZj1hWzEtbF07dD0oZi1oKS9NYXRoLm1heCgxLG4tcysyKmMpLG8mJih0PU1hdGguZmxvb3IodCkpLGgrPShmLWgtdCoobi1zKSkqdSxlPXQqKDEtcyksbyYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBkPWsobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIGkobD9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGwoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxvPSEwLGwoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwoKSk6b30sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsYz0rdCksbCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGwoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCgpKTpjfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTp1fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZHkocigpLGEpLnJvdW5kKG8pLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIoYykuYWxpZ24odSl9LG95LmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIHB5KHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHB5KGUoKSl9LHR9ZnVuY3Rpb24geXkoKXtyZXR1cm4gcHkoZHkuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9ZnVuY3Rpb24gZ3kodCl7cmV0dXJuK3R9dmFyIG15PVswLDFdO2Z1bmN0aW9uIHZ5KHQpe3JldHVybiB0fWZ1bmN0aW9uIGJ5KHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OihuPWlzTmFOKGUpP05hTjouNSxmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIG59ZnVuY3Rpb24gX3kodCl7dmFyIGUsbj10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj5yJiYoZT1uLG49cixyPWUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChuLE1hdGgubWluKHIsdCkpfX1mdW5jdGlvbiB4eSh0LGUsbil7dmFyIHI9dFswXSxpPXRbMV0sYT1lWzBdLG89ZVsxXTtyZXR1cm4gaTxyPyhyPWJ5KGksciksYT1uKG8sYSkpOihyPWJ5KHIsaSksYT1uKGEsbykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCkpfX1mdW5jdGlvbiB3eSh0LGUsbil7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytvPHI7KWlbb109YnkodFtvXSx0W28rMV0pLGFbb109bihlW29dLGVbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXUodCxlLDEsciktMTtyZXR1cm4gYVtuXShpW25dKGUpKX19ZnVuY3Rpb24ga3kodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gVHkoKXt2YXIgdCxlLG4scixpLGEsbz1teSxzPW15LGM9TW4sdT12eTtmdW5jdGlvbiBsKCl7cmV0dXJuIHI9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpPjI/d3k6eHksaT1hPW51bGwsaH1mdW5jdGlvbiBoKGUpe3JldHVybiBpc05hTihlPStlKT9uOihpfHwoaT1yKG8ubWFwKHQpLHMsYykpKSh0KHUoZSkpKX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIHUoZSgoYXx8KGE9cihzLG8ubWFwKHQpLFRuKSkpKG4pKSl9LGguZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXV5LmNhbGwodCxneSksdT09PXZ5fHwodT1feShvKSksbCgpKTpvLnNsaWNlKCl9LGgucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bHkuY2FsbCh0KSxsKCkpOnMuc2xpY2UoKX0saC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBzPWx5LmNhbGwodCksYz1NcCxsKCl9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dD9feShvKTp2eSxoKTp1IT09dnl9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsKCkpOmN9LGgudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGgpOm59LGZ1bmN0aW9uKG4scil7cmV0dXJuIHQ9bixlPXIsbCgpfX1mdW5jdGlvbiBFeSh0LGUpe3JldHVybiBUeSgpKHQsZSl9ZnVuY3Rpb24gQ3kodCxlLG4scil7dmFyIGksYT1NKHQsZSxuKTtzd2l0Y2goKHI9Y2MobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9eGMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSx5YyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPXdjKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9X2MoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gcGMocil9ZnVuY3Rpb24gU3kodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBTKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIEN5KHJbMF0scltyLmxlbmd0aC0xXSxudWxsPT10PzEwOnQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksYT0wLG89aS5sZW5ndGgtMSxzPWlbYV0sYz1pW29dO3JldHVybiBjPHMmJihyPXMscz1jLGM9cixyPWEsYT1vLG89ciksKHI9QShzLGMsbikpPjA/cj1BKHM9TWF0aC5mbG9vcihzL3IpKnIsYz1NYXRoLmNlaWwoYy9yKSpyLG4pOnI8MCYmKHI9QShzPU1hdGguY2VpbChzKnIpL3IsYz1NYXRoLmZsb29yKGMqcikvcixuKSkscj4wPyhpW2FdPU1hdGguZmxvb3Iocy9yKSpyLGlbb109TWF0aC5jZWlsKGMvcikqcixlKGkpKTpyPDAmJihpW2FdPU1hdGguY2VpbChzKnIpL3IsaVtvXT1NYXRoLmZsb29yKGMqcikvcixlKGkpKSx0fSx0fWZ1bmN0aW9uIEF5KCl7dmFyIHQ9RXkodnksdnkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4ga3kodCxBeSgpKX0sb3kuYXBwbHkodCxhcmd1bWVudHMpLFN5KHQpfWZ1bmN0aW9uIE15KHQpe3ZhciBlO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2U6dH1yZXR1cm4gbi5pbnZlcnQ9bixuLmRvbWFpbj1uLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXV5LmNhbGwoZSxneSksbik6dC5zbGljZSgpfSxuLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXkodCkudW5rbm93bihlKX0sdD1hcmd1bWVudHMubGVuZ3RoP3V5LmNhbGwodCxneSk6WzAsMV0sU3kobil9ZnVuY3Rpb24gTnkodCxlKXt2YXIgbixyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLGE9dFtyXSxvPXRbaV07cmV0dXJuIG88YSYmKG49cixyPWksaT1uLG49YSxhPW8sbz1uKSx0W3JdPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBEeSh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gT3kodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIEJ5KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gTHkodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBJeSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gUnkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gRnkodCl7dmFyIGUsbixyPXQoRHksT3kpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/SXk6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPVJ5KGUpLG49UnkobiksdChCeSxMeSkpOnQoRHksT3kpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QseT1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhazt5LnB1c2goaCl9fWVsc2UgeT1TKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj95LnJldmVyc2UoKTp5fSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9cGMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkoTnkoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiBQeSgpe3ZhciB0PUZ5KFR5KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4ga3kodCxQeSgpKS5iYXNlKHQuYmFzZSgpKX0sb3kuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gankodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gWXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24genkodCl7dmFyIGU9MSxuPXQoankoZSksWXkoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoankoZT0rbiksWXkoZSkpOmV9LFN5KG4pfWZ1bmN0aW9uIFV5KCl7dmFyIHQ9enkoVHkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBreSh0LFV5KCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LG95LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBxeSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gJHkodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gSHkodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBXeSh0KXt2YXIgZT10KHZ5LHZ5KSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KHZ5LHZ5KTouNT09PW4/dCgkeSxIeSk6dChxeShuKSxxeSgxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LFN5KGUpfWZ1bmN0aW9uIFZ5KCl7dmFyIHQ9V3koVHkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBreSh0LFZ5KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LG95LmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIEd5KCl7cmV0dXJuIFZ5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gWHkoKXt2YXIgdCxlPVtdLG49W10scj1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxpPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShpLTEpOysrdDxpOylyW3QtMV09TyhlLHQvaSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW3UocixlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBpPW4uaW5kZXhPZih0KTtyZXR1cm4gaTwwP1tOYU4sTmFOXTpbaT4wP3JbaS0xXTplWzBdLGk8ci5sZW5ndGg/cltpXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixyPTAsbz10Lmxlbmd0aDtyPG87KytyKW51bGw9PShuPXRbcl0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQoaSksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWx5LmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFh5KCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LG95LmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBaeSgpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVt1KGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT1seS5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFp5KCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxveS5hcHBseShTeShvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIFF5KCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/blt1KGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1seS5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWx5LmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUXkoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sb3kuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBLeT1uZXcgRGF0ZSxKeT1uZXcgRGF0ZTtmdW5jdGlvbiB0Zyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiB0ZygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBLeS5zZXRUaW1lKCtlKSxKeS5zZXRUaW1lKCtyKSx0KEt5KSx0KEp5KSxNYXRoLmZsb29yKG4oS3ksSnkpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgZWc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO2VnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dGcoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IG5nPWVnO3ZhciByZz1lZy5yYW5nZSxpZz10ZygoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpO2NvbnN0IGFnPWlnO3ZhciBvZz1pZy5yYW5nZSxzZz0xZTMsY2c9NmU0LHVnPTM2ZTUsbGc9ODY0ZTUsaGc9NjA0OGU1O2Z1bmN0aW9uIGZnKHQpe3JldHVybiB0ZygoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqY2cpL2hnfSkpfXZhciBkZz1mZygwKSxwZz1mZygxKSx5Zz1mZygyKSxnZz1mZygzKSxtZz1mZyg0KSx2Zz1mZyg1KSxiZz1mZyg2KSxfZz1kZy5yYW5nZSx4Zz1wZy5yYW5nZSx3Zz15Zy5yYW5nZSxrZz1nZy5yYW5nZSxUZz1tZy5yYW5nZSxFZz12Zy5yYW5nZSxDZz1iZy5yYW5nZSxTZz10ZygoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmNnKS9sZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKTtjb25zdCBBZz1TZzt2YXIgTWc9U2cucmFuZ2UsTmc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqc2ctdC5nZXRNaW51dGVzKCkqY2cpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdWcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdWd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKTtjb25zdCBEZz1OZzt2YXIgT2c9TmcucmFuZ2UsQmc9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqc2cpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqY2cpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvY2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpO2NvbnN0IExnPUJnO3ZhciBJZz1CZy5yYW5nZSxSZz10ZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpzZyl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9zZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSk7Y29uc3QgRmc9Umc7dmFyIFBnPVJnLnJhbmdlLGpnPXRnKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7amcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT90ZygoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpqZzpudWxsfTtjb25zdCBZZz1qZzt2YXIgemc9amcucmFuZ2U7ZnVuY3Rpb24gVWcodCl7cmV0dXJuIHRnKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9oZ30pKX12YXIgcWc9VWcoMCksJGc9VWcoMSksSGc9VWcoMiksV2c9VWcoMyksVmc9VWcoNCksR2c9VWcoNSksWGc9VWcoNiksWmc9cWcucmFuZ2UsUWc9JGcucmFuZ2UsS2c9SGcucmFuZ2UsSmc9V2cucmFuZ2UsdG09VmcucmFuZ2UsZW09R2cucmFuZ2Usbm09WGcucmFuZ2Uscm09dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9sZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtjb25zdCBpbT1ybTt2YXIgYW09cm0ucmFuZ2Usb209dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO29tLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/dGcoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O2NvbnN0IHNtPW9tO3ZhciBjbT1vbS5yYW5nZTtmdW5jdGlvbiB1bSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gbG0odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaG0odCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGZtKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMsbz10LnNob3J0RGF5cyxzPXQubW9udGhzLGM9dC5zaG9ydE1vbnRocyx1PVRtKGkpLGw9RW0oaSksaD1UbShhKSxmPUVtKGEpLGQ9VG0obykscD1FbShvKSx5PVRtKHMpLGc9RW0ocyksbT1UbShjKSx2PUVtKGMpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpXbSxlOldtLGY6UW0sZzpjdixHOmx2LEg6Vm0sSTpHbSxqOlhtLEw6Wm0sbTpLbSxNOkptLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROkJ2LHM6THYsUzp0dix1OmV2LFU6bnYsVjppdix3OmF2LFc6b3YseDpudWxsLFg6bnVsbCx5OnN2LFk6dXYsWjpodiwiJSI6T3Z9LF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmdixlOmZ2LGY6bXYsZzpBdixHOk52LEg6ZHYsSTpwdixqOnl2LEw6Z3YsbTp2dixNOmJ2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROkJ2LHM6THYsUzpfdix1Onh2LFU6d3YsVjpUdix3OkV2LFc6Q3YseDpudWxsLFg6bnVsbCx5OlN2LFk6TXYsWjpEdiwiJSI6T3Z9LHg9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PXBbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9ZltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12W3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6Um0sZTpSbSxmOlVtLGc6T20sRzpEbSxIOlBtLEk6UG0sajpGbSxMOnptLG06SW0sTTpqbSxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LHE6TG0sUTokbSxzOkhtLFM6WW0sdTpTbSxVOkFtLFY6TW0sdzpDbSxXOk5tLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpPbSxZOkRtLFo6Qm0sIiUiOnFtfTtmdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPXZtW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT1obSgxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1sbShobShhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT8kZy5jZWlsKHIpOiRnKHIpLHI9aW0ub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9dW0oaG0oYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/cGcuY2VpbChyKTpwZyhyKSxyPUFnLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9sbShobShhLnksMCwxKSkuZ2V0VVRDRGF5KCk6dW0oaG0oYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsbG0oYSkpOnVtKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT14W2kgaW4gdm0/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KG4sYiksYi5YPXcocixiKSxiLmM9dyhlLGIpLF8ueD13KG4sXyksXy5YPXcocixfKSxfLmM9dyhlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dyh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIGRtLHBtLHltLGdtLG1tLHZtPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGJtPS9eXHMqXGQrLyxfbT0vXiUvLHhtPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiB3bSh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBrbSh0KXtyZXR1cm4gdC5yZXBsYWNlKHhtLCJcXCQmIil9ZnVuY3Rpb24gVG0odCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGttKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gRW0odCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gQ20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQW0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTW0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTm0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRG0odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT20odCxlLG4pe3ZhciByPWJtLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCbSh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExtKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEltKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6bSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxbSh0LGUsbil7dmFyIHI9X20uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiAkbSh0LGUsbil7dmFyIHI9Ym0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhtKHQsZSxuKXt2YXIgcj1ibS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV20odCxlKXtyZXR1cm4gd20odC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBWbSh0LGUpe3JldHVybiB3bSh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBHbSh0LGUpe3JldHVybiB3bSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWG0odCxlKXtyZXR1cm4gd20oMStBZy5jb3VudChuZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIFptKHQsZSl7cmV0dXJuIHdtKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBRbSh0LGUpe3JldHVybiBabSh0LGUpKyIwMDAifWZ1bmN0aW9uIEttKHQsZSl7cmV0dXJuIHdtKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gSm0odCxlKXtyZXR1cm4gd20odC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiB0dih0LGUpe3JldHVybiB3bSh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGV2KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBudih0LGUpe3JldHVybiB3bShkZy5jb3VudChuZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gcnYodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/bWcodCk6bWcuY2VpbCh0KX1mdW5jdGlvbiBpdih0LGUpe3JldHVybiB0PXJ2KHQpLHdtKG1nLmNvdW50KG5nKHQpLHQpKyg0PT09bmcodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gYXYodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gb3YodCxlKXtyZXR1cm4gd20ocGcuY291bnQobmcodCktMSx0KSxlLDIpfWZ1bmN0aW9uIHN2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBjdih0LGUpe3JldHVybiB3bSgodD1ydih0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiB1dih0LGUpe3JldHVybiB3bSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gbHYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB3bSgodD1uPj00fHwwPT09bj9tZyh0KTptZy5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGh2KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrd20oZS82MHwwLCIwIiwyKSt3bShlJTYwLCIwIiwyKX1mdW5jdGlvbiBmdih0LGUpe3JldHVybiB3bSh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGR2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIHB2KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB5dih0LGUpe3JldHVybiB3bSgxK2ltLmNvdW50KHNtKHQpLHQpLGUsMyl9ZnVuY3Rpb24gZ3YodCxlKXtyZXR1cm4gd20odC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG12KHQsZSl7cmV0dXJuIGd2KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdnYodCxlKXtyZXR1cm4gd20odC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBidih0LGUpe3JldHVybiB3bSh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIF92KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24geHYodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIHd2KHQsZSl7cmV0dXJuIHdtKHFnLmNvdW50KHNtKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBrdih0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9WZyh0KTpWZy5jZWlsKHQpfWZ1bmN0aW9uIFR2KHQsZSl7cmV0dXJuIHQ9a3YodCksd20oVmcuY291bnQoc20odCksdCkrKDQ9PT1zbSh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBFdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBDdih0LGUpe3JldHVybiB3bSgkZy5jb3VudChzbSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gd20odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEF2KHQsZSl7cmV0dXJuIHdtKCh0PWt2KHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIE12KHQsZSl7cmV0dXJuIHdtKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBOdih0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHdtKCh0PW4+PTR8fDA9PT1uP1ZnKHQpOlZnLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gRHYoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIE92KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEJ2KHQpe3JldHVybit0fWZ1bmN0aW9uIEx2KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gSXYodCl7cmV0dXJuIGRtPWZtKHQpLHBtPWRtLmZvcm1hdCx5bT1kbS5wYXJzZSxnbT1kbS51dGNGb3JtYXQsbW09ZG0udXRjUGFyc2UsZG19SXYoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgUnY9MzE1MzZlNjtmdW5jdGlvbiBGdih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gUHYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24ganYodCxlLG4scixpLG8scyxjLHUpe3ZhciBsPUV5KHZ5LHZ5KSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIiksXz11KCIlWSIpLHg9W1tzLDEsMWUzXSxbcyw1LDVlM10sW3MsMTUsMTVlM10sW3MsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW3IsMSw4NjRlNV0sW3IsMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsUnZdXTtmdW5jdGlvbiB3KGEpe3JldHVybihzKGEpPGE/ZDpvKGEpPGE/cDppKGEpPGE/eTpyKGEpPGE/ZzplKGEpPGE/bihhKTxhP206djp0KGEpPGE/YjpfKShhKX1mdW5jdGlvbiBrKGUsbixyLGkpe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBvPU1hdGguYWJzKHItbikvZSxzPWEoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkpLnJpZ2h0KHgsbyk7cz09PXgubGVuZ3RoPyhpPU0obi9SdixyL1J2LGUpLGU9dCk6cz8oaT0ocz14W28veFtzLTFdWzJdPHhbc11bMl0vbz9zLTE6c10pWzFdLGU9c1swXSk6KGk9TWF0aC5tYXgoTShuLHIsZSksMSksZT1jKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShoKHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zih1eS5jYWxsKHQsUHYpKTpmKCkubWFwKEZ2KX0sbC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZigpLGk9clswXSxhPXJbci5sZW5ndGgtMV0sbz1hPGk7cmV0dXJuIG8mJihuPWksaT1hLGE9biksbj0obj1rKHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxvP24ucmV2ZXJzZSgpOm59LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3c6dShlKX0sbC5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZigpO3JldHVybih0PWsodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2YoTnkobix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGt5KGwsanYodCxlLG4scixpLG8scyxjLHUpKX0sbH1mdW5jdGlvbiBZdigpe3JldHVybiBveS5hcHBseShqdihuZyxhZyxkZyxBZyxEZyxMZyxGZyxZZyxwbSkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9dmFyIHp2PXRnKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSk7Y29uc3QgVXY9enY7dmFyIHF2PXp2LnJhbmdlLCR2PXRnKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqdWcpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvdWd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKTtjb25zdCBIdj0kdjt2YXIgV3Y9JHYucmFuZ2UsVnY9dGcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqY2cpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvY2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpO2NvbnN0IEd2PVZ2O3ZhciBYdj1Wdi5yYW5nZTtmdW5jdGlvbiBadigpe3JldHVybiBveS5hcHBseShqdihzbSxVdixxZyxpbSxIdixHdixGZyxZZyxnbSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUXYoKXt2YXIgdCxlLG4scixpLGE9MCxvPTEscz12eSxjPSExO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP2k6cygwPT09bj8uNTooZT0ocihlKS10KSpuLGM/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKSl9cmV0dXJuIHUuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIoYT0raVswXSksZT1yKG89K2lbMV0pLG49dD09PWU/MDoxLyhlLXQpLHUpOlthLG9dfSx1LmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSEhdCx1KTpjfSx1LmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHUpOnN9LHUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHUpOml9LGZ1bmN0aW9uKGkpe3JldHVybiByPWksdD1pKGEpLGU9aShvKSxuPXQ9PT1lPzA6MS8oZS10KSx1fX1mdW5jdGlvbiBLdih0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBKdigpe3ZhciB0PVN5KFF2KCkodnkpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEt2KHQsSnYoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiB0Yigpe3ZhciB0PUZ5KFF2KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCx0YigpKS5iYXNlKHQuYmFzZSgpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIGViKCl7dmFyIHQ9enkoUXYoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LGViKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBuYigpe3ZhciB0PVd5KFF2KCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCxuYigpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxzeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcmIoKXtyZXR1cm4gbmIuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBpYigpe3ZhciB0PVtdLGU9dnk7ZnVuY3Rpb24gbihuKXtpZighaXNOYU4obj0rbikpcmV0dXJuIGUoKHUodCxuKS0xKS8odC5sZW5ndGgtMSkpfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W107Zm9yKHZhciByLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpbnVsbD09KHI9ZVthXSl8fGlzTmFOKHI9K3IpfHx0LnB1c2gocik7cmV0dXJuIHQuc29ydChpKSxufSxuLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBpYihlKS5kb21haW4odCl9LHN5LmFwcGx5KG4sYXJndW1lbnRzKX1mdW5jdGlvbiBhYigpe3ZhciB0LGUsbixyLGksYSxvLHM9MCxjPS41LHU9MSxsPXZ5LGg9ITE7ZnVuY3Rpb24gZih0KXtyZXR1cm4gaXNOYU4odD0rdCk/bzoodD0uNSsoKHQ9K2EodCkpLWUpKih0PGU/cjppKSxsKGg/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKTp0KSl9cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWEocz0rb1swXSksZT1hKGM9K29bMV0pLG49YSh1PStvWzJdKSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLGYpOltzLGMsdV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ISF0LGYpOmh9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZik6bH0sZi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZik6b30sZnVuY3Rpb24obyl7cmV0dXJuIGE9byx0PW8ocyksZT1vKGMpLG49byh1KSxyPXQ9PT1lPzA6LjUvKGUtdCksaT1lPT09bj8wOi41LyhuLWUpLGZ9fWZ1bmN0aW9uIG9iKCl7dmFyIHQ9U3koYWIoKSh2eSkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS3YodCxvYigpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHNiKCl7dmFyIHQ9RnkoYWIoKSkuZG9tYWluKFsuMSwxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LHNiKCkpLmJhc2UodC5iYXNlKCkpfSxzeS5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gY2IoKXt2YXIgdD16eShhYigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEt2KHQsY2IoKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0sc3kuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHViKCl7dmFyIHQ9V3koYWIoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLdih0LHViKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LHN5LmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBsYigpe3JldHVybiB1Yi5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIGhiKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufWNvbnN0IGZiPWhiKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxkYj1oYigiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IikscGI9aGIoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLHliPWhiKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxnYj1oYigiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksbWI9aGIoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLHZiPWhiKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxiYj1oYigiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksX2I9aGIoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLHhiPWhiKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiB3Yih0KXtyZXR1cm4gbW4odFt0Lmxlbmd0aC0xXSl9dmFyIGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChoYik7Y29uc3QgVGI9d2Ioa2IpO3ZhciBFYj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoaGIpO2NvbnN0IENiPXdiKEViKTt2YXIgU2I9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKGhiKTtjb25zdCBBYj13YihTYik7dmFyIE1iPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChoYik7Y29uc3QgTmI9d2IoTWIpO3ZhciBEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoaGIpO2NvbnN0IE9iPXdiKERiKTt2YXIgQmI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKGhiKTtjb25zdCBMYj13YihCYik7dmFyIEliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChoYik7Y29uc3QgUmI9d2IoSWIpO3ZhciBGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoaGIpO2NvbnN0IFBiPXdiKEZiKTt2YXIgamI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKGhiKTtjb25zdCBZYj13YihqYik7dmFyIHpiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChoYik7Y29uc3QgVWI9d2IoemIpO3ZhciBxYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoaGIpO2NvbnN0ICRiPXdiKHFiKTt2YXIgSGI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKGhiKTtjb25zdCBXYj13YihIYik7dmFyIFZiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChoYik7Y29uc3QgR2I9d2IoVmIpO3ZhciBYYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoaGIpO2NvbnN0IFpiPXdiKFhiKTt2YXIgUWI9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKGhiKTtjb25zdCBLYj13YihRYik7dmFyIEpiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChoYik7Y29uc3QgdF89d2IoSmIpO3ZhciBlXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoaGIpO2NvbnN0IG5fPXdiKGVfKTt2YXIgcl89bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKGhiKTtjb25zdCBpXz13YihyXyk7dmFyIGFfPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChoYik7Y29uc3Qgb189d2IoYV8pO3ZhciBzXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoaGIpO2NvbnN0IGNfPXdiKHNfKTt2YXIgdV89bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKGhiKTtjb25zdCBsXz13Yih1Xyk7dmFyIGhfPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChoYik7Y29uc3QgZl89d2IoaF8pO3ZhciBkXz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoaGIpO2NvbnN0IHBfPXdiKGRfKTt2YXIgeV89bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKGhiKTtjb25zdCBnXz13Yih5Xyk7dmFyIG1fPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChoYik7Y29uc3Qgdl89d2IobV8pO3ZhciBiXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoaGIpO2NvbnN0IF9fPXdiKGJfKTt2YXIgeF89bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKGhiKTtjb25zdCB3Xz13Yih4Xyk7ZnVuY3Rpb24ga18odCl7cmV0dXJuIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgtNC41NC10KigzNS4zNC10KigyMzgxLjczLXQqKDY0MDIuNy10Kig3MDI0LjcyLTI3MTAuNTcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDMyLjQ5K3QqKDE3MC43Myt0Kig1Mi44Mi10KigxMzEuNDYtdCooMTc2LjU4LTY3LjM3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCg4MS4yNCt0Kig0NDIuMzYtdCooMjQ4Mi40My10Kig2MTY3LjI0LXQqKDY2MTQuOTQtMjQ3NS42Nyp0KSkpKSkpKSsiKSJ9Y29uc3QgVF89VXAoJGEoMzAwLC41LDApLCRhKC0yNDAsLjUsMSkpO3ZhciBFXz1VcCgkYSgtMTAwLC43NSwuMzUpLCRhKDgwLDEuNSwuOCkpLENfPVVwKCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxTXz0kYSgpO2Z1bmN0aW9uIEFfKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gU18uaD0zNjAqdC0xMDAsU18ucz0xLjUtMS41KmUsU18ubD0uOC0uOSplLFNfKyIifXZhciBNXz1RZSgpLE5fPU1hdGguUEkvMyxEXz0yKk1hdGguUEkvMztmdW5jdGlvbiBPXyh0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxNXy5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxNXy5nPTI1NSooZT1NYXRoLnNpbih0K05fKSkqZSxNXy5iPTI1NSooZT1NYXRoLnNpbih0K0RfKSkqZSxNXysiIn1mdW5jdGlvbiBCXyh0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifWZ1bmN0aW9uIExfKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fWNvbnN0IElfPUxfKGhiKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSk7dmFyIFJfPUxfKGhiKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRl89TF8oaGIoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxQXz1MXyhoYigiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIGpfKHQpe3JldHVybiBUZShpZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBZXz0wO2Z1bmN0aW9uIHpfKCl7cmV0dXJuIG5ldyBVX31mdW5jdGlvbiBVXygpe3RoaXMuXz0iQCIrKCsrWV8pLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBxXyh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IHhlKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhlKFtudWxsPT10P1tdOnRdLF9lKX1mdW5jdGlvbiAkXyh0LGUpe251bGw9PWUmJihlPU5uKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAscj1lP2UubGVuZ3RoOjAsaT1uZXcgQXJyYXkocik7bjxyOysrbilpW25dPURuKHQsZVtuXSk7cmV0dXJuIGl9ZnVuY3Rpb24gSF8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fVVfLnByb3RvdHlwZT16Xy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVfLGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBXXz1NYXRoLmFicyxWXz1NYXRoLmF0YW4yLEdfPU1hdGguY29zLFhfPU1hdGgubWF4LFpfPU1hdGgubWluLFFfPU1hdGguc2luLEtfPU1hdGguc3FydCxKXz0xZS0xMix0eD1NYXRoLlBJLGV4PXR4LzIsbng9Mip0eDtmdW5jdGlvbiByeCh0KXtyZXR1cm4gdD4xPzA6dDwtMT90eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gaXgodCl7cmV0dXJuIHQ+PTE/ZXg6dDw9LTE/LWV4Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBheCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBveCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBzeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGN4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHV4KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGx4KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjxKXykpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gaHgodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvS18ocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLHk9citoLGc9KGYrcCkvMixtPShkK3kpLzIsdj1wLWYsYj15LWQsXz12KnYrYipiLHg9aS1hLHc9Zip5LXAqZCxrPShiPDA/LTE6MSkqS18oWF8oMCx4KngqXy13KncpKSxUPSh3KmItdiprKS9fLEU9KC13KnYtYiprKS9fLEM9KHcqYit2KmspL18sUz0oLXcqditiKmspL18sQT1ULWcsTT1FLW0sTj1DLWcsRD1TLW07cmV0dXJuIEEqQStNKk0+TipOK0QqRCYmKFQ9QyxFPVMpLHtjeDpULGN5OkUseDAxOi1sLHkwMTotaCx4MTE6VCooaS94LTEpLHkxMTpFKihpL3gtMSl9fWZ1bmN0aW9uIGZ4KCl7dmFyIHQ9YXgsZT1veCxuPUhfKDApLHI9bnVsbCxpPXN4LGE9Y3gsbz11eCxzPW51bGw7ZnVuY3Rpb24gYygpe3ZhciBjLHUsbD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1leCxkPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWV4LHA9V18oZC1mKSx5PWQ+ZjtpZihzfHwocz1jPVdpKCkpLGg8bCYmKHU9aCxoPWwsbD11KSxoPkpfKWlmKHA+bngtSl8pcy5tb3ZlVG8oaCpHXyhmKSxoKlFfKGYpKSxzLmFyYygwLDAsaCxmLGQsIXkpLGw+Sl8mJihzLm1vdmVUbyhsKkdfKGQpLGwqUV8oZCkpLHMuYXJjKDAsMCxsLGQsZix5KSk7ZWxzZXt2YXIgZyxtLHY9ZixiPWQsXz1mLHg9ZCx3PXAsaz1wLFQ9by5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixFPVQ+Sl8mJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpLXyhsKmwraCpoKSksQz1aXyhXXyhoLWwpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxTPUMsQT1DO2lmKEU+Sl8pe3ZhciBNPWl4KEUvbCpRXyhUKSksTj1peChFL2gqUV8oVCkpOyh3LT0yKk0pPkpfPyhfKz1NKj15PzE6LTEseC09TSk6KHc9MCxfPXg9KGYrZCkvMiksKGstPTIqTik+Sl8/KHYrPU4qPXk/MTotMSxiLT1OKTooaz0wLHY9Yj0oZitkKS8yKX12YXIgRD1oKkdfKHYpLE89aCpRXyh2KSxCPWwqR18oeCksTD1sKlFfKHgpO2lmKEM+Sl8pe3ZhciBJLFI9aCpHXyhiKSxGPWgqUV8oYiksUD1sKkdfKF8pLGo9bCpRXyhfKTtpZihwPHR4JiYoST1seChELE8sUCxqLFIsRixCLEwpKSl7dmFyIFk9RC1JWzBdLHo9Ty1JWzFdLFU9Ui1JWzBdLHE9Ri1JWzFdLCQ9MS9RXyhyeCgoWSpVK3oqcSkvKEtfKFkqWSt6KnopKktfKFUqVStxKnEpKSkvMiksSD1LXyhJWzBdKklbMF0rSVsxXSpJWzFdKTtTPVpfKEMsKGwtSCkvKCQtMSkpLEE9Wl8oQywoaC1IKS8oJCsxKSl9fWs+Sl8/QT5KXz8oZz1oeChQLGosRCxPLGgsQSx5KSxtPWh4KFIsRixCLEwsaCxBLHkpLHMubW92ZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksQTxDP3MuYXJjKGcuY3gsZy5jeSxBLFZfKGcueTAxLGcueDAxKSxWXyhtLnkwMSxtLngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksQSxWXyhnLnkwMSxnLngwMSksVl8oZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsaCxWXyhnLmN5K2cueTExLGcuY3grZy54MTEpLFZfKG0uY3krbS55MTEsbS5jeCttLngxMSksIXkpLHMuYXJjKG0uY3gsbS5jeSxBLFZfKG0ueTExLG0ueDExKSxWXyhtLnkwMSxtLngwMSksIXkpKSk6KHMubW92ZVRvKEQsTykscy5hcmMoMCwwLGgsdixiLCF5KSk6cy5tb3ZlVG8oRCxPKSxsPkpfJiZ3PkpfP1M+Sl8/KGc9aHgoQixMLFIsRixsLC1TLHkpLG09aHgoRCxPLFAsaixsLC1TLHkpLHMubGluZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksUzxDP3MuYXJjKGcuY3gsZy5jeSxTLFZfKGcueTAxLGcueDAxKSxWXyhtLnkwMSxtLngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksUyxWXyhnLnkwMSxnLngwMSksVl8oZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsbCxWXyhnLmN5K2cueTExLGcuY3grZy54MTEpLFZfKG0uY3krbS55MTEsbS5jeCttLngxMSkseSkscy5hcmMobS5jeCxtLmN5LFMsVl8obS55MTEsbS54MTEpLFZfKG0ueTAxLG0ueDAxKSwheSkpKTpzLmFyYygwLDAsbCx4LF8seSk6cy5saW5lVG8oQixMKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSxjKXJldHVybiBzPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi10eC8yO3JldHVybltHXyhyKSpuLFFfKHIpKm5dfSxjLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SF8oK2UpLGMpOnR9LGMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXygrdCksYyk6ZX0sYy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXygrdCksYyk6bn0sYy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLGMpOnJ9LGMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKCt0KSxjKTppfSxjLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLGMpOmF9LGMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXygrdCksYyk6b30sYy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGMpOnN9LGN9ZnVuY3Rpb24gZHgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHB4KHQpe3JldHVybiBuZXcgZHgodCl9ZnVuY3Rpb24geXgodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gZ3godCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbXgoKXt2YXIgdD15eCxlPWd4LG49SF8oITApLHI9bnVsbCxpPXB4LGE9bnVsbDtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsPW8ubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT1XaSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SF8oK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXyghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb31mdW5jdGlvbiB2eCgpe3ZhciB0PXl4LGU9bnVsbCxuPUhfKDApLHI9Z3gsaT1IXyghMCksYT1udWxsLG89cHgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLHk9ITEsZz1uZXcgQXJyYXkocCksbT1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1XaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT15KWlmKHk9IXkpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoZ1toXSxtW2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX15JiYoZ1t1XT0rdChmLHUsYyksbVt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTpnW3VdLHI/K3IoZix1LGMpOm1bdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIG14KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpIXygrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpIXygrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXygrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfWZ1bmN0aW9uIGJ4KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIF94KHQpe3JldHVybiB0fWZ1bmN0aW9uIHh4KCl7dmFyIHQ9X3gsZT1ieCxuPW51bGwscj1IXygwKSxpPUhfKG54KSxhPUhfKDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSx5PW5ldyBBcnJheShmKSxnPStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxtPU1hdGgubWluKG54LE1hdGgubWF4KC1ueCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSksdj1NYXRoLm1pbihNYXRoLmFicyhtKS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXYqKG08MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9eVtwW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh5W3RdLHlbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KG0tZipiKS9kOjA7czxmOysrcyxnPWwpYz1wW3NdLGw9ZysoKGg9eVtjXSk+MD9oKnU6MCkrYix5W2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpsLHBhZEFuZ2xlOnZ9O3JldHVybiB5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SF8oK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXygrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKCt0KSxvKTphfSxvfWR4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciB3eD1UeChweCk7ZnVuY3Rpb24ga3godCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBUeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcga3godChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBFeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShUeCh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBDeCgpe3JldHVybiBFeChteCgpLmN1cnZlKHd4KSl9ZnVuY3Rpb24gU3goKXt2YXIgdD12eCgpLmN1cnZlKHd4KSxlPXQuY3VydmUsbj10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsYT10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIEV4KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBFeChyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRXgoaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEV4KGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoVHgodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gQXgodCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19a3gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgTXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIE54KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBEeCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gT3godCl7dmFyIGU9Tngsbj1EeCxyPXl4LGk9Z3gsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPU14LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVdpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIXygrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gQngodCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiBMeCh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIEl4KHQsZSxuLHIsaSl7dmFyIGE9QXgoZSxuKSxvPUF4KGUsbj0obitpKS8yKSxzPUF4KHIsbiksYz1BeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBSeCgpe3JldHVybiBPeChCeCl9ZnVuY3Rpb24gRngoKXtyZXR1cm4gT3goTHgpfWZ1bmN0aW9uIFB4KCl7dmFyIHQ9T3goSXgpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9Y29uc3Qgang9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS90eCk7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLG54KX19LFl4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19O3ZhciB6eD1NYXRoLnNxcnQoMS8zKSxVeD0yKnp4O2NvbnN0IHF4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvVXgpLHI9bip6eDt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19O3ZhciAkeD1NYXRoLnNpbih0eC8xMCkvTWF0aC5zaW4oNyp0eC8xMCksSHg9TWF0aC5zaW4obngvMTApKiR4LFd4PS1NYXRoLmNvcyhueC8xMCkqJHg7Y29uc3QgVng9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSkscj1IeCpuLGk9V3gqbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgYT0xO2E8NTsrK2Epe3ZhciBvPW54KmEvNSxzPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7dC5saW5lVG8oYypuLC1zKm4pLHQubGluZVRvKHMqci1jKmksYypyK3MqaSl9dC5jbG9zZVBhdGgoKX19LEd4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUpLHI9LW4vMjt0LnJlY3QocixyLG4sbil9fTt2YXIgWHg9TWF0aC5zcXJ0KDMpO2NvbnN0IFp4PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKlh4KSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC1YeCpuLC1uKSx0LmxpbmVUbyhYeCpuLC1uKSx0LmNsb3NlUGF0aCgpfX07dmFyIFF4PS0uNSxLeD1NYXRoLnNxcnQoMykvMixKeD0xL01hdGguc3FydCgxMiksdHc9MyooSngvMisxKTtjb25zdCBldz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3R3KSxyPW4vMixpPW4qSngsYT1yLG89bipKeCtuLHM9LWEsYz1vO3QubW92ZVRvKHIsaSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGMpLHQubGluZVRvKFF4KnItS3gqaSxLeCpyK1F4KmkpLHQubGluZVRvKFF4KmEtS3gqbyxLeCphK1F4Km8pLHQubGluZVRvKFF4KnMtS3gqYyxLeCpzK1F4KmMpLHQubGluZVRvKFF4KnIrS3gqaSxReCppLUt4KnIpLHQubGluZVRvKFF4KmErS3gqbyxReCpvLUt4KmEpLHQubGluZVRvKFF4KnMrS3gqYyxReCpjLUt4KnMpLHQuY2xvc2VQYXRoKCl9fTt2YXIgbnc9W2p4LFl4LHF4LEd4LFZ4LFp4LGV3XTtmdW5jdGlvbiBydygpe3ZhciB0PUhfKGp4KSxlPUhfKDY0KSxuPW51bGw7ZnVuY3Rpb24gcigpe3ZhciByO2lmKG58fChuPXI9V2koKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhuLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gbj1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkhfKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKCt0KSxyKTplfSxyLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOnQscik6bn0scn1mdW5jdGlvbiBpdygpe31mdW5jdGlvbiBhdyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gb3codCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHN3KHQpe3JldHVybiBuZXcgb3codCl9ZnVuY3Rpb24gY3codCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV3KHQpe3JldHVybiBuZXcgY3codCl9ZnVuY3Rpb24gbHcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh3KHQpe3JldHVybiBuZXcgbHcodCl9ZnVuY3Rpb24gZncodCxlKXt0aGlzLl9iYXNpcz1uZXcgb3codCksdGhpcy5fYmV0YT1lfW93LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6YXcodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6YXcodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGN3LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OmF3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxsdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgbj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKG4scik6dGhpcy5fY29udGV4dC5tb3ZlVG8obixyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmF3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07Y29uc3QgZHc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgb3codCk6bmV3IGZ3KHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSk7ZnVuY3Rpb24gcHcodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB5dyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnB3KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpwdyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3QgZ3c9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgeXcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gbXcodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fW13LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpwdyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07Y29uc3Qgdnc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgbXcodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gYncodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWJ3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OnB3KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBfdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBidyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiB4dyh0LGUsbil7dmFyIHI9dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+Sl8pe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPkpfKXt2YXIgdT0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKnUrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9sLG89KG8qdSt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2x9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxhLG8sdC5feDIsdC5feTIpfWZ1bmN0aW9uIHd3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9d3cucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp4dyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O2NvbnN0IGt3PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgd3codCxlKTpuZXcgeXcodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBUdyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR3LnByb3RvdHlwZT17YXJlYVN0YXJ0Oml3LGFyZWFFbmQ6aXcsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6eHcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBFdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFR3KHQsZSk6bmV3IG13KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gQ3codCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1Ddy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6eHcodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTtjb25zdCBTdz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IEN3KHQsZSk6bmV3IGJ3KHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gQXcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE13KHQpe3JldHVybiBuZXcgQXcodCl9ZnVuY3Rpb24gTncodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIER3KHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKE53KGEpK053KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gT3codCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIEJ3KHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBMdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSXcodCl7dGhpcy5fY29udGV4dD1uZXcgUncodCl9ZnVuY3Rpb24gUncodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ3KHQpe3JldHVybiBuZXcgTHcodCl9ZnVuY3Rpb24gUHcodCl7cmV0dXJuIG5ldyBJdyh0KX1mdW5jdGlvbiBqdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWXcodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1mdW5jdGlvbiB6dyh0KXtyZXR1cm4gbmV3IGp3KHQpfWZ1bmN0aW9uIFV3KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBxdyh0KXtyZXR1cm4gbmV3IFV3KHQsLjUpfWZ1bmN0aW9uICR3KHQpe3JldHVybiBuZXcgVXcodCwwKX1mdW5jdGlvbiBIdyh0KXtyZXR1cm4gbmV3IFV3KHQsMSl9ZnVuY3Rpb24gV3codCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihyPW8sbz10W2VbYV1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfWZ1bmN0aW9uIFZ3KHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBHdyh0LGUpe3JldHVybiB0W2VdfWZ1bmN0aW9uIFh3KCl7dmFyIHQ9SF8oW10pLGU9Vncsbj1XdyxyPUd3O2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9aS5sZW5ndGgsdT1zLmxlbmd0aCxsPW5ldyBBcnJheSh1KTtmb3IoYT0wO2E8dTsrK2Epe2Zvcih2YXIgaCxmPXNbYV0sZD1sW2FdPW5ldyBBcnJheShjKSxwPTA7cDxjOysrcClkW3BdPWg9WzAsK3IoaVtwXSxmLHAsaSldLGguZGF0YT1pW3BdO2Qua2V5PWZ9Zm9yKGE9MCxvPWUobCk7YTx1OysrYSlsW29bYV1dLmluZGV4PWE7cmV0dXJuIG4obCxvKSxsfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpIXyhNeC5jYWxsKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SF8oK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9WdzoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkhfKE14LmNhbGwodCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/V3c6dCxpKTpufSxpfWZ1bmN0aW9uIFp3KHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfVd3KHQsZSl9fWZ1bmN0aW9uIFF3KHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciBuLHIsaSxhLG8scyxjPTAsdT10W2VbMF1dLmxlbmd0aDtjPHU7KytjKWZvcihhPW89MCxuPTA7bjxzOysrbikoaT0ocj10W2Vbbl1dW2NdKVsxXS1yWzBdKT4wPyhyWzBdPWEsclsxXT1hKz1pKTppPDA/KHJbMV09byxyWzBdPW8rPWkpOihyWzBdPTAsclsxXT1pKX1mdW5jdGlvbiBLdyh0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO3I8YTsrK3Ipe2Zvcih2YXIgbz0wLHM9MDtvPG47KytvKXMrPXRbb11bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tcy8yfVd3KHQsZSl9fWZ1bmN0aW9uIEp3KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxXdyh0LGUpfX1mdW5jdGlvbiB0ayh0KXt2YXIgZT10Lm1hcChlayk7cmV0dXJuIFZ3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pKX1mdW5jdGlvbiBlayh0KXtmb3IodmFyIGUsbj0tMSxyPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytuPGk7KShlPSt0W25dWzFdKT5hJiYoYT1lLHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gbmsodCl7dmFyIGU9dC5tYXAocmspO3JldHVybiBWdyh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9ZnVuY3Rpb24gcmsodCl7Zm9yKHZhciBlLG49MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShlPSt0W3JdWzFdKSYmKG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIGlrKHQpe3JldHVybiBuayh0KS5yZXZlcnNlKCl9ZnVuY3Rpb24gYWsodCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAocmspLGE9dGsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9ZnVuY3Rpb24gb2sodCl7cmV0dXJuIFZ3KHQpLnJldmVyc2UoKX1Bdy5wcm90b3R5cGU9e2FyZWFTdGFydDppdyxhcmVhRW5kOml3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LEx3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpCdyh0aGlzLHRoaXMuX3QwLE93KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxCdyh0aGlzLE93KHRoaXMsbj1Edyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6QncodGhpcyx0aGlzLl90MCxuPUR3KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKEl3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEx3LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7THcucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxSdy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxqdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1Zdyh0KSxpPVl3KGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxVdy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgc2s9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsY2s9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06Z20oc2spO2NvbnN0IHVrPWNrO3ZhciBsaz0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9Om1tKHNrKTtjb25zdCBoaz1saztmdW5jdGlvbiBmayh0LGUsbil7dmFyIHI9bmV3IFduLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooZT0rZSxuPW51bGw9PW4/JG4oKTorbixyLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxyLnJlc3RhcnQoYSxpKz1lLG4pLHQobyl9KSxlLG4pLHIpfWZ1bmN0aW9uIGRrKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5ayh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBnaygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIG1rKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gdmsodCxlKXt2YXIgbj1lLHI9ZS5SLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLlI9ci5MLG4uUiYmKG4uUi5VPW4pLHIuTD1ufWZ1bmN0aW9uIGJrKHQsZSl7dmFyIG49ZSxyPWUuTCxpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5MPXIuUixuLkwmJihuLkwuVT1uKSxyLlI9bn1mdW5jdGlvbiBfayh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9Z2sucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpnayxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PV9rKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLG49dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxuPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPW4sZS5DPSEwLHQ9ZTtuJiZuLkM7KW49PT0ocj1uLlUpLkw/KGk9ci5SKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5SJiYodmsodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsYmsodGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5MJiYoYmsodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsdmsodGhpcyxyKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4scixpPXQuVSxhPXQuTCxvPXQuUjtpZihuPWE/bz9fayhvKTphOm8saT9pLkw9PT10P2kuTD1uOmkuUj1uOnRoaXMuXz1uLGEmJm8/KHI9bi5DLG4uQz10LkMsbi5MPWEsYS5VPW4sbiE9PW8/KGk9bi5VLG4uVT10LlUsdD1uLlIsaS5MPXQsbi5SPW8sby5VPW4pOihuLlU9aSxpPW4sdD1uLlIpKToocj10LkMsdD1uKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsdmsodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxiayh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSx2ayh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsYmsodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCx2ayh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxiayh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07Y29uc3QgeGs9Z2s7ZnVuY3Rpb24gd2sodCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sYT1Xay5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZUayhpLHQsZSxuKSxyJiZUayhpLGUsdCxyKSwka1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSwka1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxpfWZ1bmN0aW9uIGtrKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBUayh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gRWsodCxlLG4scixpKXt2YXIgYSxvPXRbMF0scz10WzFdLGM9b1swXSx1PW9bMV0sbD0wLGg9MSxmPXNbMF0tYyxkPXNbMV0tdTtpZihhPWUtYyxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPXItYyxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihmPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1pZihhPW4tdSxkfHwhKGE+MCkpe2lmKGEvPWQsZDwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihkPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPWktdSxkfHwhKGE8MCkpe2lmKGEvPWQsZDwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihkPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4hKGw+MHx8aDwxKXx8KGw+MCYmKHRbMF09W2MrbCpmLHUrbCpkXSksaDwxJiYodFsxXT1bYytoKmYsdStoKmRdKSwhMCl9fX19fWZ1bmN0aW9uIENrKHQsZSxuLHIsaSl7dmFyIGE9dFsxXTtpZihhKXJldHVybiEwO3ZhciBvLHMsYz10WzBdLHU9dC5sZWZ0LGw9dC5yaWdodCxoPXVbMF0sZj11WzFdLGQ9bFswXSxwPWxbMV0seT0oaCtkKS8yLGc9KGYrcCkvMjtpZihwPT09Zil7aWYoeTxlfHx5Pj1yKXJldHVybjtpZihoPmQpe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1beSxuXTthPVt5LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxuKXJldHVybn1lbHNlIGM9W3ksaV07YT1beSxuXX19ZWxzZSBpZihzPWctKG89KGgtZCkvKHAtZikpKnksbzwtMXx8bz4xKWlmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsobi1zKS9vLG5dO2E9WyhpLXMpL28saV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bKGktcykvbyxpXTthPVsobi1zKS9vLG5dfWVsc2UgaWYoZjxwKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W2UsbyplK3NdO2E9W3IsbypyK3NdfWVsc2V7aWYoYyl7aWYoY1swXTxlKXJldHVybn1lbHNlIGM9W3IsbypyK3NdO2E9W2UsbyplK3NdfXJldHVybiB0WzBdPWMsdFsxXT1hLCEwfWZ1bmN0aW9uIFNrKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gQWsodCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIE1rKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgTmssRGs9W107ZnVuY3Rpb24gT2soKXttayh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gQmsodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxhPW4uc2l0ZTtpZihyIT09YSl7dmFyIG89aVswXSxzPWlbMV0sYz1yWzBdLW8sdT1yWzFdLXMsbD1hWzBdLW8saD1hWzFdLXMsZj0yKihjKmgtdSpsKTtpZighKGY+PS1Haykpe3ZhciBkPWMqYyt1KnUscD1sKmwraCpoLHk9KGgqZC11KnApL2YsZz0oYypwLWwqZCkvZixtPURrLnBvcCgpfHxuZXcgT2s7bS5hcmM9dCxtLnNpdGU9aSxtLng9eStvLG0ueT0obS5jeT1nK3MpK01hdGguc3FydCh5KnkrZypnKSx0LmNpcmNsZT1tO2Zvcih2YXIgdj1udWxsLGI9SGsuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn1Iay5pbnNlcnQodixtKSx2fHwoTms9bSl9fX19ZnVuY3Rpb24gTGsodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KE5rPWUuTiksSGsucmVtb3ZlKGUpLERrLnB1c2goZSksbWsoZSksdC5jaXJjbGU9bnVsbCl9dmFyIElrPVtdO2Z1bmN0aW9uIFJrKCl7bWsodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEZrKHQpe3ZhciBlPUlrLnBvcCgpfHxuZXcgUms7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gUGsodCl7TGsodCkscWsucmVtb3ZlKHQpLElrLnB1c2godCksbWsodCl9ZnVuY3Rpb24gamsodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sYT10LlAsbz10Lk4scz1bdF07UGsodCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKG4tYy5jaXJjbGUueCk8VmsmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPFZrOylhPWMuUCxzLnVuc2hpZnQoYyksUGsoYyksYz1hO3MudW5zaGlmdChjKSxMayhjKTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxWayYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8Vms7KW89dS5OLHMucHVzaCh1KSxQayh1KSx1PW87cy5wdXNoKHUpLExrKHUpO3ZhciBsLGg9cy5sZW5ndGg7Zm9yKGw9MTtsPGg7KytsKXU9c1tsXSxjPXNbbC0xXSxUayh1LmVkZ2UsYy5zaXRlLHUuc2l0ZSxpKTtjPXNbMF0sKHU9c1toLTFdKS5lZGdlPXdrKGMuc2l0ZSx1LnNpdGUsbnVsbCxpKSxCayhjKSxCayh1KX1mdW5jdGlvbiBZayh0KXtmb3IodmFyIGUsbixyLGksYT10WzBdLG89dFsxXSxzPXFrLl87czspaWYoKHI9emsocyxvKS1hKT5WaylzPXMuTDtlbHNle2lmKCEoKGk9YS1VayhzLG8pKT5Waykpe3I+LVZrPyhlPXMuUCxuPXMpOmk+LVZrPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7JGtbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgYz1Gayh0KTtpZihxay5pbnNlcnQoZSxjKSxlfHxuKXtpZihlPT09bilyZXR1cm4gTGsoZSksbj1GayhlLnNpdGUpLHFrLmluc2VydChjLG4pLGMuZWRnZT1uLmVkZ2U9d2soZS5zaXRlLGMuc2l0ZSksQmsoZSksdm9pZCBCayhuKTtpZihuKXtMayhlKSxMayhuKTt2YXIgdT1lLnNpdGUsbD11WzBdLGg9dVsxXSxmPXRbMF0tbCxkPXRbMV0taCxwPW4uc2l0ZSx5PXBbMF0tbCxnPXBbMV0taCxtPTIqKGYqZy1kKnkpLHY9ZipmK2QqZCxiPXkqeStnKmcsXz1bKGcqdi1kKmIpL20rbCwoZipiLXkqdikvbStoXTtUayhuLmVkZ2UsdSxwLF8pLGMuZWRnZT13ayh1LHQsbnVsbCxfKSxuLmVkZ2U9d2sodCxwLG51bGwsXyksQmsoZSksQmsobil9ZWxzZSBjLmVkZ2U9d2soZS5zaXRlLGMuc2l0ZSl9fWZ1bmN0aW9uIHprKHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sYT1pLWU7aWYoIWEpcmV0dXJuIHI7dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7dmFyIHM9KG49by5zaXRlKVswXSxjPW5bMV0sdT1jLWU7aWYoIXUpcmV0dXJuIHM7dmFyIGw9cy1yLGg9MS9hLTEvdSxmPWwvdTtyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKGwqbC8oLTIqdSktYyt1LzIraS1hLzIpKSkvaCtyOihyK3MpLzJ9ZnVuY3Rpb24gVWsodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gemsobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBxaywkayxIayxXayxWaz0xZS02LEdrPTFlLTEyO2Z1bmN0aW9uIFhrKHQsZSxuKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS10WzFdKS0odFswXS1lWzBdKSooblsxXS10WzFdKX1mdW5jdGlvbiBaayh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiBRayh0LGUpe3ZhciBuLHIsaSxhPXQuc29ydChaaykucG9wKCk7Zm9yKFdrPVtdLCRrPW5ldyBBcnJheSh0Lmxlbmd0aCkscWs9bmV3IHhrLEhrPW5ldyB4azs7KWlmKGk9TmssYSYmKCFpfHxhWzFdPGkueXx8YVsxXT09PWkueSYmYVswXTxpLngpKWFbMF09PT1uJiZhWzFdPT09cnx8KFlrKGEpLG49YVswXSxyPWFbMV0pLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2prKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scixpPTAsYT0kay5sZW5ndGg7aTxhOysraSlpZigodD0ka1tpXSkmJihyPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgbz1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKW9bbl09bixzW25dPVNrKHQsV2tbZVtuXV0pO2ZvcihvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pKSxuPTA7bjxyOysrbilzW25dPWVbb1tuXV07Zm9yKG49MDtuPHI7KytuKWVbbl09c1tuXX19KCksZSl7dmFyIG89K2VbMF1bMF0scz0rZVswXVsxXSxjPStlWzFdWzBdLHU9K2VbMV1bMV07IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaSxhPVdrLmxlbmd0aDthLS07KUNrKGk9V2tbYV0sdCxlLG4scikmJkVrKGksdCxlLG4scikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPlZrfHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPlZrKXx8ZGVsZXRlIFdrW2FdfShvLHMsYyx1KSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZCxwLHksZz0kay5sZW5ndGgsbT0hMDtmb3IoaT0wO2k8ZzsrK2kpaWYoYT0ka1tpXSl7Zm9yKG89YS5zaXRlLHM9KGM9YS5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KVdrW2Nbc11dfHxjLnNwbGljZShzLDEpO2ZvcihzPTAsdT1jLmxlbmd0aDtzPHU7KXA9KGQ9TWsoYSxXa1tjW3NdXSkpWzBdLHk9ZFsxXSxoPShsPUFrKGEsV2tbY1srK3MldV1dKSlbMF0sZj1sWzFdLChNYXRoLmFicyhwLWgpPlZrfHxNYXRoLmFicyh5LWYpPlZrKSYmKGMuc3BsaWNlKHMsMCxXay5wdXNoKGtrKG8sZCxNYXRoLmFicyhwLXQpPFZrJiZyLXk+Vms/W3QsTWF0aC5hYnMoaC10KTxWaz9mOnJdOk1hdGguYWJzKHktcik8VmsmJm4tcD5Waz9bTWF0aC5hYnMoZi1yKTxWaz9oOm4scl06TWF0aC5hYnMocC1uKTxWayYmeS1lPlZrP1tuLE1hdGguYWJzKGgtbik8Vms/ZjplXTpNYXRoLmFicyh5LWUpPFZrJiZwLXQ+Vms/W01hdGguYWJzKGYtZSk8Vms/aDp0LGVdOm51bGwpKS0xKSwrK3UpO3UmJihtPSExKX1pZihtKXt2YXIgdixiLF8seD0xLzA7Zm9yKGk9MCxtPW51bGw7aTxnOysraSkoYT0ka1tpXSkmJihfPSh2PShvPWEuc2l0ZSlbMF0tdCkqdisoYj1vWzFdLWUpKmIpPHgmJih4PV8sbT1hKTtpZihtKXt2YXIgdz1bdCxlXSxrPVt0LHJdLFQ9W24scl0sRT1bbixlXTttLmhhbGZlZGdlcy5wdXNoKFdrLnB1c2goa2sobz1tLnNpdGUsdyxrKSktMSxXay5wdXNoKGtrKG8sayxUKSktMSxXay5wdXNoKGtrKG8sVCxFKSktMSxXay5wdXNoKGtrKG8sRSx3KSktMSl9fWZvcihpPTA7aTxnOysraSkoYT0ka1tpXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSAka1tpXSl9KG8scyxjLHUpfXRoaXMuZWRnZXM9V2ssdGhpcy5jZWxscz0kayxxaz1Iaz1Xaz0kaz1udWxsfWZ1bmN0aW9uIEtrKCl7dmFyIHQ9cGssZT15ayxuPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IFFrKHIubWFwKChmdW5jdGlvbihuLGkpe3ZhciBhPVtNYXRoLnJvdW5kKHQobixpLHIpL1ZrKSpWayxNYXRoLnJvdW5kKGUobixpLHIpL1ZrKSpWa107cmV0dXJuIGEuaW5kZXg9aSxhLmRhdGE9bixhfSkpLG4pfXJldHVybiByLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnBvbHlnb25zKCl9LHIubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkubGlua3MoKX0sci50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkudHJpYW5nbGVzKCl9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmRrKCtlKSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkaygrdCkscik6ZX0sci5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLHIpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLHIpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0scn1mdW5jdGlvbiBKayh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdFQodCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiBlVCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59UWsucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRayxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBBayhlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4scil7aWYoYT0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxhLG8scz1uLnNpdGUsYz0tMSx1PWVbaVthLTFdXSxsPXUubGVmdD09PXM/dS5yaWdodDp1LmxlZnQ7KytjPGE7KW89bCxsPSh1PWVbaVtjXV0pLmxlZnQ9PT1zP3UucmlnaHQ6dS5sZWZ0LG8mJmwmJnI8by5pbmRleCYmcjxsLmluZGV4JiZYayhzLG8sbCk8MCYmdC5wdXNoKFtzLmRhdGEsby5kYXRhLGwuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fSxlVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVULHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBlVCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IGVUKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIG5UPW5ldyBlVCgxLDAsMCk7ZnVuY3Rpb24gclQodCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBuVDtyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gaVQoKXtsZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhVCgpe2xlLnByZXZlbnREZWZhdWx0KCksbGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gb1QoKXtyZXR1cm4hbGUuY3RybEtleSYmIWxlLmJ1dHRvbn1mdW5jdGlvbiBzVCgpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBjVCgpe3JldHVybiB0aGlzLl9fem9vbXx8blR9ZnVuY3Rpb24gdVQoKXtyZXR1cm4tbGUuZGVsdGFZKigxPT09bGUuZGVsdGFNb2RlPy4wNTpsZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBsVCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBoVCh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9ZnVuY3Rpb24gZlQoKXt2YXIgdCxlLG49b1Qscj1zVCxpPWhULGE9dVQsbz1sVCxzPVswLDEvMF0sYz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx1PTI1MCxsPU9wLGg9ZnQoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGY9NTAwLGQ9MDtmdW5jdGlvbiBwKHQpe3QucHJvcGVydHkoIl9fem9vbSIsY1QpLm9uKCJ3aGVlbC56b29tIix4KS5vbigibW91c2Vkb3duLnpvb20iLHcpLm9uKCJkYmxjbGljay56b29tIixrKS5maWx0ZXIobykub24oInRvdWNoc3RhcnQuem9vbSIsVCkub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixDKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24geSh0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IGVUKGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIHI9ZVswXS1uWzBdKnQuayxpPWVbMV0tblsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgZVQodC5rLHIsaSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB2KHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsKGZ1bmN0aW9uKCl7Yih0aGlzLGFyZ3VtZW50cykuZW5kKCl9KSkudHdlZW4oInpvb20iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1hcmd1bWVudHMsYT1iKHQsaSksbz1yLmFwcGx5KHQsaSkscz1udWxsPT1uP20obyk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LGkpOm4sYz1NYXRoLm1heChvWzFdWzBdLW9bMF1bMF0sb1sxXVsxXS1vWzBdWzFdKSx1PXQuX196b29tLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LGkpOmUsZj1sKHUuaW52ZXJ0KHMpLmNvbmNhdChjL3UuayksaC5pbnZlcnQocykuY29uY2F0KGMvaC5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9aDtlbHNle3ZhciBlPWYodCksbj1jL2VbMl07dD1uZXcgZVQobixzWzBdLWVbMF0qbixzWzFdLWVbMV0qbil9YS56b29tKG51bGwsdCl9fSkpfWZ1bmN0aW9uIGIodCxlLG4pe3JldHVybiFuJiZ0Ll9fem9vbWluZ3x8bmV3IF8odCxlKX1mdW5jdGlvbiBfKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1yLmFwcGx5KHQsZSksdGhpcy50YXBzPTB9ZnVuY3Rpb24geCgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1iKHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLHI9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLG89Qm4odGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09b1swXSYmdC5tb3VzZVswXVsxXT09PW9bMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09bykpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PXIpcmV0dXJuO3QubW91c2U9W28sZS5pbnZlcnQobyldLGFyKHRoaXMpLHQuc3RhcnQoKX1hVCgpLHQud2hlZWw9c2V0VGltZW91dCh1LDE1MCksdC56b29tKCJtb3VzZSIsaShnKHkoZSxyKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LGMpKX1mdW5jdGlvbiB1KCl7dC53aGVlbD1udWxsLHQuZW5kKCl9fWZ1bmN0aW9uIHcoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PWIodGhpcyxhcmd1bWVudHMsITApLHI9VGUobGUudmlldykub24oIm1vdXNlbW92ZS56b29tIix1LCEwKS5vbigibW91c2V1cC56b29tIixsLCEwKSxhPUJuKHRoaXMpLG89bGUuY2xpZW50WCxzPWxlLmNsaWVudFk7U2UobGUudmlldyksaVQoKSx0Lm1vdXNlPVthLHRoaXMuX196b29tLmludmVydChhKV0sYXIodGhpcyksdC5zdGFydCgpfWZ1bmN0aW9uIHUoKXtpZihhVCgpLCF0Lm1vdmVkKXt2YXIgZT1sZS5jbGllbnRYLW8sbj1sZS5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPmR9dC56b29tKCJtb3VzZSIsaShnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1Cbih0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LGMpKX1mdW5jdGlvbiBsKCl7ci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxBZShsZS52aWV3LHQubW92ZWQpLGFUKCksdC5lbmQoKX19ZnVuY3Rpb24gaygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPUJuKHRoaXMpLGE9dC5pbnZlcnQoZSksbz10LmsqKGxlLnNoaWZ0S2V5Py41OjIpLHM9aShnKHkodCxvKSxlLGEpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGMpO2FUKCksdT4wP1RlKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih1KS5jYWxsKHYscyxlKTpUZSh0aGlzKS5jYWxsKHAudHJhbnNmb3JtLHMpfX1mdW5jdGlvbiBUKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLHIsaSxhLG89bGUudG91Y2hlcyxzPW8ubGVuZ3RoLGM9Yih0aGlzLGFyZ3VtZW50cyxsZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKTtmb3IoaVQoKSxyPTA7cjxzOysrcilhPVthPU9uKHRoaXMsbywoaT1vW3JdKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoYSksaS5pZGVudGlmaWVyXSxjLnRvdWNoMD9jLnRvdWNoMXx8Yy50b3VjaDBbMl09PT1hWzJdfHwoYy50b3VjaDE9YSxjLnRhcHM9MCk6KGMudG91Y2gwPWEsZT0hMCxjLnRhcHM9MSshIXQpO3QmJih0PWNsZWFyVGltZW91dCh0KSksZSYmKGMudGFwczwyJiYodD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Q9bnVsbH0pLGYpKSxhcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89Yih0aGlzLGFyZ3VtZW50cykscz1sZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2ZvcihhVCgpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upcj1Pbih0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSxwPShwPWZbMF0tbFswXSkqcCsocD1mWzFdLWxbMV0pKnAsbT0obT1kWzBdLWhbMF0pKm0rKG09ZFsxXS1oWzFdKSptO249eShuLE1hdGguc3FydChwL20pKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKGcobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gQygpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9Yih0aGlzLGFyZ3VtZW50cyksaT1sZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihpVCgpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksZiksdD0wO3Q8YTsrK3Qpbj1pW3RdLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7aWYoci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDApci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTtlbHNlIGlmKHIuZW5kKCksMj09PXIudGFwcyl7dmFyIG89VGUodGhpcykub24oImRibGNsaWNrLnpvb20iKTtvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O3IucHJvcGVydHkoIl9fem9vbSIsY1QpLHQhPT1yP3YodCxlLG4pOnIuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXtiKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0scC5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtwLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LHAuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7cC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLG89bnVsbD09bj9tKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1hLmludmVydChvKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIGkoZyh5KGEsdSksbyxzKSx0LGMpfSksbil9LHAudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe3AudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyl9KSl9LHAudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sYSl7cC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLHM9bnVsbD09YT9tKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE7cmV0dXJuIGkoblQudHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxjKX0pLGEpfSxfLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtnZShuZXcgdFQocCx0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxwLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKaygrdCkscCk6YX0scC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKayghIXQpLHApOm59LHAudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmsoISF0KSxwKTpvfSxwLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkprKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxwKTpyfSxwLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0scCk6W3NbMF0sc1sxXV19LHAudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjWzBdWzBdPSt0WzBdWzBdLGNbMV1bMF09K3RbMV1bMF0sY1swXVsxXT0rdFswXVsxXSxjWzFdWzFdPSt0WzFdWzFdLHApOltbY1swXVswXSxjWzBdWzFdXSxbY1sxXVswXSxjWzFdWzFdXV19LHAuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscCk6aX0scC5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxwKTp1fSxwLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQscCk6bH0scC5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9wOnR9LHAuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0odD0rdCkqdCxwKTpNYXRoLnNxcnQoZCl9LHB9clQucHJvdG90eXBlPWVULnByb3RvdHlwZX0sNjgxOih0LGUsbik9Pnt0LmV4cG9ydHM9e2dyYXBobGliOm4oNTc0KSxsYXlvdXQ6big4MTIzKSxkZWJ1ZzpuKDc1NzApLHV0aWw6e3RpbWU6bigxMTM4KS50aW1lLG5vdGltZTpuKDExMzgpLm5vdGltZX0sdmVyc2lvbjpuKDgxNzcpfX0sMjE4ODoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDQwNzkpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPSJncmVlZHkiPT09dC5ncmFwaCgpLmFjeWNsaWNlcj9pKHQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkud2VpZ2h0fX0odCkpOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49e30saT17fTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gYShvKXtyLmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKG8pLChmdW5jdGlvbih0KXtyLmhhcyhuLHQudyk/ZS5wdXNoKHQpOmEodC53KX0pKSxkZWxldGUgbltvXSl9KSksZX0odCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTt0LnJlbW92ZUVkZ2UoZSksbi5mb3J3YXJkTmFtZT1lLm5hbWUsbi5yZXZlcnNlZD0hMCx0LnNldEVkZ2UoZS53LGUudixuLHIudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciByPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixyKX19KSl9fX0sMTEzMzoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixyLGEsbyl7dmFyIHM9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6ZX0sYz1hW2VdW28tMV0sdT1pLmFkZER1bW15Tm9kZSh0LCJib3JkZXIiLHMsbik7YVtlXVtvXT11LHQuc2V0UGFyZW50KHUsciksYyYmdC5zZXRFZGdlKGMsdSx7d2VpZ2h0OjF9KX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24gZShuKXt2YXIgaT10LmNoaWxkcmVuKG4pLG89dC5ub2RlKG4pO2lmKGkubGVuZ3RoJiZyLmZvckVhY2goaSxlKSxyLmhhcyhvLCJtaW5SYW5rIikpe28uYm9yZGVyTGVmdD1bXSxvLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgcz1vLm1pblJhbmssYz1vLm1heFJhbmsrMTtzPGM7KytzKWEodCwiYm9yZGVyTGVmdCIsIl9ibCIsbixvLHMpLGEodCwiYm9yZGVyUmlnaHQiLCJfYnIiLG4sbyxzKX19KSl9fSwzMjU4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCksImxyIiE9PWUmJiJybCIhPT1lfHwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cyh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMscyksci5oYXMobiwieCIpJiZzKG4pfSkpfSh0KSxpKHQpKX19fSw3ODIyOnQ9PntmdW5jdGlvbiBlKCl7dmFyIHQ9e307dC5fbmV4dD10Ll9wcmV2PXQsdGhpcy5fc2VudGluZWw9dH1mdW5jdGlvbiBuKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gcih0LGUpe2lmKCJfbmV4dCIhPT10JiYiX3ByZXYiIT09dClyZXR1cm4gZX10LmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VudGluZWwsZT10Ll9wcmV2O2lmKGUhPT10KXJldHVybiBuKGUpLGV9LGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2VudGluZWw7dC5fcHJldiYmdC5fbmV4dCYmbih0KSx0Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj10LGUuX25leHQ9dCx0Ll9wcmV2PWV9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5fc2VudGluZWwsbj1lLl9wcmV2O24hPT1lOyl0LnB1c2goSlNPTi5zdHJpbmdpZnkobixyKSksbj1uLl9wcmV2O3JldHVybiJbIit0LmpvaW4oIiwgIikrIl0ifX0sNzU3MDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDU3NCkuR3JhcGg7dC5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPW5ldyBhKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkuc2V0R3JhcGgoe30pO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtuLnNldE5vZGUoZSx7bGFiZWw6ZX0pLG4uc2V0UGFyZW50KGUsImxheWVyIit0Lm5vZGUoZSkucmFuayl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7bi5zZXRFZGdlKHQudix0Lncse30sdC5uYW1lKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCxlKXt2YXIgaT0ibGF5ZXIiK2U7bi5zZXROb2RlKGkse3Jhbms6InNhbWUifSksci5yZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXRFZGdlKHQsZSx7c3R5bGU6ImludmlzIn0pLGV9KSl9KSksbn19fSw1NzQ6KHQsZSxuKT0+e3ZhciByO3RyeXtyPW4oODI4Mil9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LDQwNzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNiksaT1uKDU3NCkuR3JhcGgsYT1uKDc4MjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgaSxvPTAscz0wO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe24uc2V0Tm9kZSh0LHt2OnQsaW46MCxvdXQ6MH0pfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciByPW4uZWRnZSh0LnYsdC53KXx8MCxpPWUodCksYT1yK2k7bi5zZXRFZGdlKHQudix0LncsYSkscz1NYXRoLm1heChzLG4ubm9kZSh0LnYpLm91dCs9aSksbz1NYXRoLm1heChvLG4ubm9kZSh0LncpLmluKz1pKX0pKTt2YXIgdT1yLnJhbmdlKHMrbyszKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhfSkpLGw9bysxO3JldHVybiByLmZvckVhY2gobi5ub2RlcygpLChmdW5jdGlvbih0KXtjKHUsbCxuLm5vZGUodCkpfSkpLHtncmFwaDpuLGJ1Y2tldHM6dSx6ZXJvSWR4Omx9fSh0LGV8fG8pLHU9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpPVtdLGE9ZVtlLmxlbmd0aC0xXSxvPWVbMF07dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSw4MTIzOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMjE4OCksYT1uKDU5OTUpLG89big4MDkzKSxzPW4oMTEzOCkubm9ybWFsaXplUmFua3MsYz1uKDQyMTkpLHU9bigxMTM4KS5yZW1vdmVFbXB0eVJhbmtzLGw9bigyOTgxKSxoPW4oMTEzMyksZj1uKDMyNTgpLGQ9bigzNDA4KSxwPW4oNzg3MykseT1uKDExMzgpLGc9big1NzQpLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWUmJmUuZGVidWdUaW1pbmc/eS50aW1lOnkubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bmV3IGcoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxuPUModC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChyLm1lcmdlKHt9LHYsRShuLG0pLHIucGljayhuLGIpKSksci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9Qyh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHIuZGVmYXVsdHMoRShpLF8pLHgpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sci5tZXJnZSh7fSxrLEUoaSx3KSxyLnBpY2soaSxUKSkpfSkpLGV9KHQpfSkpO24oIiAgcnVuTGF5b3V0IiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5lZGdlKG4pO3IubWlubGVuKj0yLCJjIiE9PXIubGFiZWxwb3MudG9Mb3dlckNhc2UoKSYmKCJUQiI9PT1lLnJhbmtkaXJ8fCJCVCI9PT1lLnJhbmtkaXI/ci53aWR0aCs9ci5sYWJlbG9mZnNldDpyLmhlaWdodCs9ci5sYWJlbG9mZnNldCl9KSl9KHQpfSkpLGUoIiAgICByZW1vdmVTZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciBuPXQubm9kZShlLnYpO24uc2VsZkVkZ2VzfHwobi5zZWxmRWRnZXM9W10pLG4uc2VsZkVkZ2VzLnB1c2goe2UsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pKX0odCl9KSksZSgiICAgIGFjeWNsaWMiLChmdW5jdGlvbigpe2kucnVuKHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoZnVuY3Rpb24oKXtsLnJ1bih0KX0pKSxlKCIgICAgcmFuayIsKGZ1bmN0aW9uKCl7byh5LmFzTm9uQ29tcG91bmRHcmFwaCh0KSl9KSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi53aWR0aCYmbi5oZWlnaHQpe3ZhciByPXQubm9kZShlLnYpLGk9e3Jhbms6KHQubm9kZShlLncpLnJhbmstci5yYW5rKS8yK3IucmFuayxlfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgbT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdj17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sXz1bIndpZHRoIiwiaGVpZ2h0Il0seD17d2lkdGg6MCxoZWlnaHQ6MH0sdz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sVD1bImxhYmVscG9zIl07ZnVuY3Rpb24gRSh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSw4NDM2Oih0LGUsbik9Pnt2YXIgcjt0cnl7cj17Y2xvbmVEZWVwOm4oMzYxKSxjb25zdGFudDpuKDU3MDMpLGRlZmF1bHRzOm4oMTc0NyksZWFjaDpuKDYwNzMpLGZpbHRlcjpuKDMxMDUpLGZpbmQ6bigzMzExKSxmbGF0dGVuOm4oNTU2NCksZm9yRWFjaDpuKDQ0ODYpLGZvckluOm4oMjYyMCksaGFzOm4oODcyMSksaXNVbmRlZmluZWQ6bigyMzUzKSxsYXN0Om4oOTI4KSxtYXA6big1MTYxKSxtYXBWYWx1ZXM6big2NjA0KSxtYXg6big2MTYyKSxtZXJnZTpuKDM4NTcpLG1pbjpuKDM2MzIpLG1pbkJ5Om4oMjc2Miksbm93Om4oNzc3MSkscGljazpuKDk3MjIpLHJhbmdlOm4oNjAyNikscmVkdWNlOm4oNDA2MSksc29ydEJ5Om4oOTczNCksdW5pcXVlSWQ6bigzOTU1KSx2YWx1ZXM6bigyNjI4KSx6aXBPYmplY3Q6big3Mjg3KX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sMjk4MToodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbixvLHMsYyx1KXt2YXIgbD10LmNoaWxkcmVuKHUpO2lmKGwubGVuZ3RoKXt2YXIgaD1pLmFkZEJvcmRlck5vZGUodCwiX2J0IiksZj1pLmFkZEJvcmRlck5vZGUodCwiX2JiIiksZD10Lm5vZGUodSk7dC5zZXRQYXJlbnQoaCx1KSxkLmJvcmRlclRvcD1oLHQuc2V0UGFyZW50KGYsdSksZC5ib3JkZXJCb3R0b209ZixyLmZvckVhY2gobCwoZnVuY3Rpb24ocil7YSh0LGUsbixvLHMsYyxyKTt2YXIgaT10Lm5vZGUociksbD1pLmJvcmRlclRvcD9pLmJvcmRlclRvcDpyLGQ9aS5ib3JkZXJCb3R0b20/aS5ib3JkZXJCb3R0b206cixwPWkuYm9yZGVyVG9wP286MipvLHk9bCE9PWQ/MTpzLWNbdV0rMTt0LnNldEVkZ2UoaCxsLHt3ZWlnaHQ6cCxtaW5sZW46eSxuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShkLGYse3dlaWdodDpwLG1pbmxlbjp5LG5lc3RpbmdFZGdlOiEwfSl9KSksdC5wYXJlbnQodSl8fHQuc2V0RWRnZShlLGgse3dlaWdodDowLG1pbmxlbjpzK2NbdV19KX1lbHNlIHUhPT1lJiZ0LnNldEVkZ2UoZSx1LHt3ZWlnaHQ6MCxtaW5sZW46bn0pfXQuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKSxlW2ldPWF9cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKHQpe24odCwxKX0pKSxlfSh0KSxvPXIubWF4KHIudmFsdWVzKG4pKS0xLHM9MipvKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm1pbmxlbio9c30pKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gci5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0odCkrMTtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihyKXthKHQsZSxzLGMsbyxuLHIpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1zfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTt0LnJlbW92ZU5vZGUoZS5uZXN0aW5nUm9vdCksZGVsZXRlIGUubmVzdGluZ1Jvb3Qsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm5lc3RpbmdFZGdlJiZ0LnJlbW92ZUVkZ2UoZSl9KSl9fX0sNTk5NToodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNiksaT1uKDExMzgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyx1PXQubm9kZShjKS5yYW5rLGw9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYodSE9PXMrMSl7Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8dTsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSxsKSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sbCl9fSh0LGUpfSkpfSx1bmRvOmZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKGUpe3ZhciBuLHI9dC5ub2RlKGUpLGk9ci5lZGdlTGFiZWw7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosaSk7ci5kdW1teTspbj10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLGkucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksImVkZ2UtbGFiZWwiPT09ci5kdW1teSYmKGkueD1yLngsaS55PXIueSxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQpLGU9bixyPXQubm9kZShlKX0pKX19fSw1MDkzOih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYT17fTtyLmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciByLG8scz10LnBhcmVudChuKTtzOyl7aWYoKHI9dC5wYXJlbnQocykpPyhvPWFbcl0sYVtyXT1zKToobz1pLGk9cyksbyYmbyE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKG8scyk7cz1yfX0pKX19LDU0Mzk6KHQsZSxuKT0+e3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuaW5FZGdlcyhlKTtpZihuLmxlbmd0aCl7dmFyIGk9ci5yZWR1Y2UobiwoZnVuY3Rpb24oZSxuKXt2YXIgcj10LmVkZ2UobiksaT10Lm5vZGUobi52KTtyZXR1cm57c3VtOmUuc3VtK3Iud2VpZ2h0Kmkub3JkZXIsd2VpZ2h0OmUud2VpZ2h0K3Iud2VpZ2h0fX0pLHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmUsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fXJldHVybnt2OmV9fSkpfX0sMzEyODoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSw2NjMwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTtmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9ci56aXBPYmplY3QobixyLm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxhPXIuZmxhdHRlbihyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gci5zb3J0Qnkoci5tYXAodC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJue3BvczppW2Uud10sd2VpZ2h0OnQuZWRnZShlKS53ZWlnaHR9fSkpLCJwb3MiKX0pKSwhMCksbz0xO288bi5sZW5ndGg7KW88PD0xO3ZhciBzPTIqby0xO28tPTE7dmFyIGM9ci5tYXAobmV3IEFycmF5KHMpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLHU9MDtyZXR1cm4gci5mb3JFYWNoKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztjW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPWNbZSsxXSksY1tlPWUtMT4+MV0rPXQud2VpZ2h0O3UrPXQud2VpZ2h0Km59KSkpLHV9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj0xO3I8ZS5sZW5ndGg7KytyKW4rPWkodCxlW3ItMV0sZVtyXSk7cmV0dXJuIG59fSwzNDA4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMjU4OCksYT1uKDY2MzApLG89bigxMDI2KSxzPW4oMzEyOCksYz1uKDUwOTMpLHU9big1NzQpLkdyYXBoLGw9bigxMTM4KTtmdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHModCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1uZXcgdTtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGk9dC5ncmFwaCgpLnJvb3QsYT1vKHQsaSxuLGUpO3IuZm9yRWFjaChhLnZzLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpLGModCxuLGEudnMpfSkpfWZ1bmN0aW9uIGQodCxlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSl9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWwubWF4UmFuayh0KSxuPWgodCxyLnJhbmdlKDEsZSsxKSwiaW5FZGdlcyIpLG89aCh0LHIucmFuZ2UoZS0xLC0xLC0xKSwib3V0RWRnZXMiKSxzPWkodCk7ZCh0LHMpO2Zvcih2YXIgYyx1PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAseT0wO3k8NDsrK3AsKyt5KXtmKHAlMj9uOm8scCU0Pj0yKSxzPWwuYnVpbGRMYXllck1hdHJpeCh0KTt2YXIgZz1hKHQscyk7Zzx1JiYoeT0wLGM9ci5jbG9uZURlZXAocyksdT1nKX1kKHQsYyl9fSwyNTg4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSksbz1yLnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIHIuZm9yRWFjaChvLChmdW5jdGlvbiBuKGkpe2lmKCFyLmhhcyhlLGkpKXtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfX0pKSxhfX0sOTU2NzoodCxlLG4pPT57InVzZSBzdHJpY3QiO3ZhciByPW4oODQzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe3ZhciBpPW5bdC52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W3Qudl0saTplfTtyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fChpLmJhcnljZW50ZXI9dC5iYXJ5Y2VudGVyLGkud2VpZ2h0PXQud2VpZ2h0KX0pKSxyLmZvckVhY2goZS5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgZT1uW3Qudl0saT1uW3Qud107ci5pc1VuZGVmaW5lZChlKXx8ci5pc1VuZGVmaW5lZChpKXx8KGkuaW5kZWdyZWUrKyxlLm91dC5wdXNoKG5bdC53XSkpfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGksYSxvO2UubWVyZ2VkfHwoci5pc1VuZGVmaW5lZChlLmJhcnljZW50ZXIpfHxyLmlzVW5kZWZpbmVkKHQuYmFyeWNlbnRlcil8fGUuYmFyeWNlbnRlcj49dC5iYXJ5Y2VudGVyKSYmKGk9ZSxhPTAsbz0wLChuPXQpLndlaWdodCYmKGErPW4uYmFyeWNlbnRlcipuLndlaWdodCxvKz1uLndlaWdodCksaS53ZWlnaHQmJihhKz1pLmJhcnljZW50ZXIqaS53ZWlnaHQsbys9aS53ZWlnaHQpLG4udnM9aS52cy5jb25jYXQobi52cyksbi5iYXJ5Y2VudGVyPWEvbyxuLndlaWdodD1vLG4uaT1NYXRoLm1pbihpLmksbi5pKSxpLm1lcmdlZD0hMCl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciBhPXQucG9wKCk7ZS5wdXNoKGEpLHIuZm9yRWFjaChhLmluLnJldmVyc2UoKSxuKGEpKSxyLmZvckVhY2goYS5vdXQsaShhKSl9cmV0dXJuIHIubWFwKHIuZmlsdGVyKGUsKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1lcmdlZH0pKSwoZnVuY3Rpb24odCl7cmV0dXJuIHIucGljayh0LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pKX0oci5maWx0ZXIobiwoZnVuY3Rpb24odCl7cmV0dXJuIXQuaW5kZWdyZWV9KSkpfX0sMTAyNjoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oNTQzOSksYT1uKDk1NjcpLG89big3MzA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4scyxjKXt2YXIgdT1lLmNoaWxkcmVuKG4pLGw9ZS5ub2RlKG4pLGg9bD9sLmJvcmRlckxlZnQ6dm9pZCAwLGY9bD9sLmJvcmRlclJpZ2h0OnZvaWQgMCxkPXt9O2gmJih1PXIuZmlsdGVyKHUsKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aCYmdCE9PWZ9KSkpO3ZhciBwPWkoZSx1KTtyLmZvckVhY2gocCwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIGk9dChlLG4udixzLGMpO2Rbbi52XT1pLHIuaGFzKGksImJhcnljZW50ZXIiKSYmKGE9bixvPWksci5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpPyhhLmJhcnljZW50ZXI9by5iYXJ5Y2VudGVyLGEud2VpZ2h0PW8ud2VpZ2h0KTooYS5iYXJ5Y2VudGVyPShhLmJhcnljZW50ZXIqYS53ZWlnaHQrby5iYXJ5Y2VudGVyKm8ud2VpZ2h0KS8oYS53ZWlnaHQrby53ZWlnaHQpLGEud2VpZ2h0Kz1vLndlaWdodCkpfXZhciBhLG99KSk7dmFyIHk9YShwLHMpOyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt0LnZzPXIuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0oeSxkKTt2YXIgZz1vKHksYyk7aWYoaCYmKGcudnM9ci5mbGF0dGVuKFtoLGcudnMsZl0sITApLGUucHJlZGVjZXNzb3JzKGgpLmxlbmd0aCkpe3ZhciBtPWUubm9kZShlLnByZWRlY2Vzc29ycyhoKVswXSksdj1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoZilbMF0pO3IuaGFzKGcsImJhcnljZW50ZXIiKXx8KGcuYmFyeWNlbnRlcj0wLGcud2VpZ2h0PTApLGcuYmFyeWNlbnRlcj0oZy5iYXJ5Y2VudGVyKmcud2VpZ2h0K20ub3JkZXIrdi5vcmRlcikvKGcud2VpZ2h0KzIpLGcud2VpZ2h0Kz0yfXJldHVybiBnfX0sNzMwNDoodCxlLG4pPT57dmFyIHI9big4NDM2KSxpPW4oMTEzOCk7ZnVuY3Rpb24gYSh0LGUsbil7Zm9yKHZhciBpO2UubGVuZ3RoJiYoaT1yLmxhc3QoZSkpLmk8PW47KWUucG9wKCksdC5wdXNoKGkudnMpLG4rKztyZXR1cm4gbn10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSkscz1vLmxocyxjPXIuc29ydEJ5KG8ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLHU9W10sbD0wLGg9MCxmPTA7cy5zb3J0KChuPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpuP2UuaS10Lmk6dC5pLWUuaX0pKSxmPWEodSxjLGYpLHIuZm9yRWFjaChzLChmdW5jdGlvbih0KXtmKz10LnZzLmxlbmd0aCx1LnB1c2godC52cyksbCs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGgrPXQud2VpZ2h0LGY9YSh1LGMsZil9KSk7dmFyIGQ9e3ZzOnIuZmxhdHRlbih1LCEwKX07cmV0dXJuIGgmJihkLmJhcnljZW50ZXI9bC9oLGQud2VpZ2h0PWgpLGR9fSw0MjE5Oih0LGUsbik9Pnt2YXIgcj1uKDg0MzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGkoYSl7dmFyIG89bjtyLmZvckVhY2godC5jaGlsZHJlbihhKSxpKSxlW2FdPXtsb3c6byxsaW06bisrfX0pKSxlfSh0KTtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihuKXtmb3IodmFyIHI9dC5ub2RlKG4pLGk9ci5lZGdlT2JqLGE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVtdLHM9W10sYz1NYXRoLm1pbihlW25dLmxvdyxlW3JdLmxvdyksdT1NYXRoLm1heChlW25dLmxpbSxlW3JdLmxpbSk7aT1uO2Rve2k9dC5wYXJlbnQoaSksby5wdXNoKGkpfXdoaWxlKGkmJihlW2ldLmxvdz5jfHx1PmVbaV0ubGltKSk7Zm9yKGE9aSxpPXI7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCx1PW9bY10sbD0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksbCl7Zm9yKDsodT1vW2NdKSE9PXMmJnQubm9kZSh1KS5tYXhSYW5rPHIucmFuazspYysrO3U9PT1zJiYobD0hMSl9aWYoIWwpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUodT1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO3U9b1tjXX10LnNldFBhcmVudChuLHUpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LDM1NzM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg0MzYpLGk9big1NzQpLkdyYXBoLGE9bigxMTM4KTtmdW5jdGlvbiBvKHQsZSl7dmFyIG49e307cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIGE9MCxvPTAscz1lLmxlbmd0aCx1PXIubGFzdChpKTtyZXR1cm4gci5mb3JFYWNoKGksKGZ1bmN0aW9uKGUsbCl7dmFyIGg9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIHIuZmluZCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5kdW1teX0pKX0odCxlKSxmPWg/dC5ub2RlKGgpLm9yZGVyOnM7KGh8fGU9PT11KSYmKHIuZm9yRWFjaChpLnNsaWNlKG8sbCsxKSwoZnVuY3Rpb24oZSl7ci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUociksbz1pLm9yZGVyOyEobzxhfHxmPG8pfHxpLmR1bW15JiZ0Lm5vZGUoZSkuZHVtbXl8fGMobixyLGUpfSkpfSkpLG89bCsxLGE9Zil9KSksaX0pKSxufWZ1bmN0aW9uIHModCxlKXt2YXIgbj17fTtmdW5jdGlvbiBpKGUsaSxhLG8scyl7dmFyIHU7ci5mb3JFYWNoKHIucmFuZ2UoaSxhKSwoZnVuY3Rpb24oaSl7dT1lW2ldLHQubm9kZSh1KS5kdW1teSYmci5mb3JFYWNoKHQucHJlZGVjZXNzb3JzKHUpLChmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSk7ci5kdW1teSYmKHIub3JkZXI8b3x8ci5vcmRlcj5zKSYmYyhuLGUsdSl9KSl9KSl9cmV0dXJuIHIucmVkdWNlKGUsKGZ1bmN0aW9uKGUsbil7dmFyIGEsbz0tMSxzPTA7cmV0dXJuIHIuZm9yRWFjaChuLChmdW5jdGlvbihyLGMpe2lmKCJib3JkZXIiPT09dC5ub2RlKHIpLmR1bW15KXt2YXIgdT10LnByZWRlY2Vzc29ycyhyKTt1Lmxlbmd0aCYmKGE9dC5ub2RlKHVbMF0pLm9yZGVyLGkobixzLGMsbyxhKSxzPWMsbz1hKX1pKG4scyxuLmxlbmd0aCxhLGUubGVuZ3RoKX0pKSxufSkpLG59ZnVuY3Rpb24gYyh0LGUsbil7aWYoZT5uKXt2YXIgcj1lO2U9bixuPXJ9dmFyIGk9dFtlXTtpfHwodFtlXT1pPXt9KSxpW25dPSEwfWZ1bmN0aW9uIHUodCxlLG4pe2lmKGU+bil7dmFyIGk9ZTtlPW4sbj1pfXJldHVybiByLmhhcyh0W2VdLG4pfWZ1bmN0aW9uIGwodCxlLG4saSl7dmFyIGE9e30sbz17fSxzPXt9O3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7YVt0XT10LG9bdF09dCxzW3RdPWV9KSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3ZhciBlPS0xO3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgYz1pKHQpO2lmKGMubGVuZ3RoKXtjPXIuc29ydEJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdfSkpO2Zvcih2YXIgbD0oYy5sZW5ndGgtMSkvMixoPU1hdGguZmxvb3IobCksZj1NYXRoLmNlaWwobCk7aDw9ZjsrK2gpe3ZhciBkPWNbaF07b1t0XT09PXQmJmU8c1tkXSYmIXUobix0LGQpJiYob1tkXT10LG9bdF09YVt0XT1hW2RdLGU9c1tkXSl9fX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksdT1pLm5vZGUobyksbD0wO2lmKGwrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKGwrPW4/czotcykscz0wLGwrPShjLmR1bW15P2U6dCkvMixsKz0odS5kdW1teT9lOnQpLzIsbCs9dS53aWR0aC8yLHIuaGFzKHUsImxhYmVscG9zIikpc3dpdGNoKHUubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPXUud2lkdGgvMjticmVhaztjYXNlInIiOnM9LXUud2lkdGgvMn1yZXR1cm4gcyYmKGwrPW4/czotcykscz0wLGx9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksdT1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiBsKChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLGwoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT11JiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyx1PXRbY107aWYodSE9PWUpe3ZhciBsPXIudmFsdWVzKHUpOyhzPSJsIj09PW8/aS1yLm1pbihsKTphLXIubWF4KGwpKSYmKHRbY109ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9bCgwLGUsaSxvKSx1PWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJih1PXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09dX0pKX0pKTt2YXIgdT1mKHQsYyk7cmV0dXJuIGQoYyx1KSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDp1LHZlcnRpY2FsQWxpZ25tZW50OmwsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSw3ODczOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMTEzOCksYT1uKDM1NzMpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sMzAwOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oNTc0KS5HcmFwaCxhPW4oNjY4MSkuc2xhY2s7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbiBuKGkpe3IuZm9yRWFjaChlLm5vZGVFZGdlcyhpKSwoZnVuY3Rpb24ocil7dmFyIG89ci52LHM9aT09PW8/ci53Om87dC5oYXNOb2RlKHMpfHxhKGUscil8fCh0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKGkscyx7fSksbihzKSl9KSl9KSksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHIubWluQnkoZS5lZGdlcygpLChmdW5jdGlvbihuKXtpZih0Lmhhc05vZGUobi52KSE9PXQuaGFzTm9kZShuLncpKXJldHVybiBhKGUsbil9KSl9ZnVuY3Rpb24gYyh0LGUsbil7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5ub2RlKHQpLnJhbmsrPW59KSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1uZXcgaSh7ZGlyZWN0ZWQ6ITF9KSx1PXQubm9kZXMoKVswXSxsPXQubm9kZUNvdW50KCk7Zm9yKHIuc2V0Tm9kZSh1LHt9KTtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LDgwOTM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY2ODEpLmxvbmdlc3RQYXRoLGk9bigzMDApLGE9bigyNDcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpzKHQpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6IWZ1bmN0aW9uKHQpe3IodCksaSh0KX0odCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOm8odCk7YnJlYWs7ZGVmYXVsdDpzKHQpfX07dmFyIG89cjtmdW5jdGlvbiBzKHQpe2EodCl9fSwyNDcyOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KSxpPW4oMzAwKSxhPW4oNjY4MSkuc2xhY2ssbz1uKDY2ODEpLmxvbmdlc3RQYXRoLHM9big1NzQpLmFsZy5wcmVvcmRlcixjPW4oNTc0KS5hbGcucG9zdG9yZGVyLHU9bigxMTM4KS5zaW1wbGlmeTtmdW5jdGlvbiBsKHQpe3Q9dSh0KSxvKHQpO3ZhciBlLG49aSh0KTtmb3IoZChuKSxoKG4sdCk7ZT15KG4pOyltKG4sdCxlLGcobix0LGUpKX1mdW5jdGlvbiBoKHQsZSl7dmFyIG49Yyh0LHQubm9kZXMoKSk7bj1uLnNsaWNlKDAsbi5sZW5ndGgtMSksci5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4peyFmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5ub2RlKG4pLnBhcmVudDt0LmVkZ2UobixyKS5jdXR2YWx1ZT1mKHQsZSxuKX0odCxlLG4pfSkpfWZ1bmN0aW9uIGYodCxlLG4pe3ZhciBpPXQubm9kZShuKS5wYXJlbnQsYT0hMCxvPWUuZWRnZShuLGkpLHM9MDtyZXR1cm4gb3x8KGE9ITEsbz1lLmVkZ2UoaSxuKSkscz1vLndlaWdodCxyLmZvckVhY2goZS5ub2RlRWRnZXMobiksKGZ1bmN0aW9uKHIpe3ZhciBvLGMsdT1yLnY9PT1uLGw9dT9yLnc6ci52O2lmKGwhPT1pKXt2YXIgaD11PT09YSxmPWUuZWRnZShyKS53ZWlnaHQ7aWYocys9aD9mOi1mLG89bixjPWwsdC5oYXNFZGdlKG8sYykpe3ZhciBkPXQuZWRnZShuLGwpLmN1dHZhbHVlO3MrPWg/LWQ6ZH19fSkpLHN9ZnVuY3Rpb24gZCh0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dC5ub2RlcygpWzBdKSxwKHQse30sMSxlKX1mdW5jdGlvbiBwKHQsZSxuLGksYSl7dmFyIG89bixzPXQubm9kZShpKTtyZXR1cm4gZVtpXT0hMCxyLmZvckVhY2godC5uZWlnaGJvcnMoaSksKGZ1bmN0aW9uKGEpe3IuaGFzKGUsYSl8fChuPXAodCxlLG4sYSxpKSl9KSkscy5sb3c9byxzLmxpbT1uKyssYT9zLnBhcmVudD1hOmRlbGV0ZSBzLnBhcmVudCxufWZ1bmN0aW9uIHkodCl7cmV0dXJuIHIuZmluZCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0LmVkZ2UoZSkuY3V0dmFsdWU8MH0pKX1mdW5jdGlvbiBnKHQsZSxuKXt2YXIgaT1uLnYsbz1uLnc7ZS5oYXNFZGdlKGksbyl8fChpPW4udyxvPW4udik7dmFyIHM9dC5ub2RlKGkpLGM9dC5ub2RlKG8pLHU9cyxsPSExO3MubGltPmMubGltJiYodT1jLGw9ITApO3ZhciBoPXIuZmlsdGVyKGUuZWRnZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIGw9PT12KDAsdC5ub2RlKGUudiksdSkmJmwhPT12KDAsdC5ub2RlKGUudyksdSl9KSk7cmV0dXJuIHIubWluQnkoaCwoZnVuY3Rpb24odCl7cmV0dXJuIGEoZSx0KX0pKX1mdW5jdGlvbiBtKHQsZSxuLGkpe3ZhciBhPW4udixvPW4udzt0LnJlbW92ZUVkZ2UoYSxvKSx0LnNldEVkZ2UoaS52LGkudyx7fSksZCh0KSxoKHQsZSksZnVuY3Rpb24odCxlKXt2YXIgbj1yLmZpbmQodC5ub2RlcygpLChmdW5jdGlvbih0KXtyZXR1cm4hZS5ub2RlKHQpLnBhcmVudH0pKSxpPXModCxuKTtpPWkuc2xpY2UoMSksci5mb3JFYWNoKGksKGZ1bmN0aW9uKG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQsaT1lLmVkZ2UobixyKSxhPSExO2l8fChpPWUuZWRnZShyLG4pLGE9ITApLGUubm9kZShuKS5yYW5rPWUubm9kZShyKS5yYW5rKyhhP2kubWlubGVuOi1pLm1pbmxlbil9KSl9KHQsZSl9ZnVuY3Rpb24gdih0LGUsbil7cmV0dXJuIG4ubG93PD1lLmxpbSYmZS5saW08PW4ubGltfXQuZXhwb3J0cz1sLGwuaW5pdExvd0xpbVZhbHVlcz1kLGwuaW5pdEN1dFZhbHVlcz1oLGwuY2FsY0N1dFZhbHVlPWYsbC5sZWF2ZUVkZ2U9eSxsLmVudGVyRWRnZT1nLGwuZXhjaGFuZ2VFZGdlcz1tfSw2NjgxOih0LGUsbik9PnsidXNlIHN0cmljdCI7dmFyIHI9big4NDM2KTt0LmV4cG9ydHM9e2xvbmdlc3RQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3IuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgYT10Lm5vZGUoaSk7aWYoci5oYXMoZSxpKSlyZXR1cm4gYS5yYW5rO2VbaV09ITA7dmFyIG89ci5taW4oci5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksYS5yYW5rPW99KSl9LHNsYWNrOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9kZShlLncpLnJhbmstdC5ub2RlKGUudikucmFuay10LmVkZ2UoZSkubWlubGVufX19LDExMzg6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg0MzYpLGk9big1NzQpLkdyYXBoO2Z1bmN0aW9uIGEodCxlLG4saSl7dmFyIGE7ZG97YT1yLnVuaXF1ZUlkKGkpfXdoaWxlKHQuaGFzTm9kZShhKSk7cmV0dXJuIG4uZHVtbXk9ZSx0LnNldE5vZGUoYSxuKSxhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHIubWF4KHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLnJhbms7aWYoIXIuaXNVbmRlZmluZWQobikpcmV0dXJuIG59KSkpfXQuZXhwb3J0cz17YWRkRHVtbXlOb2RlOmEsc2ltcGxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9KG5ldyBpKS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXtlLnNldE5vZGUobix0Lm5vZGUobikpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciByPWUuZWRnZShuLnYsbi53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPXQuZWRnZShuKTtlLnNldEVkZ2Uobi52LG4udyx7d2VpZ2h0OnIud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChyLm1pbmxlbixpLm1pbmxlbil9KX0pKSxlfSxhc05vbkNvbXBvdW5kR3JhcGg6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkoe211bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3QuY2hpbGRyZW4obikubGVuZ3RofHxlLnNldE5vZGUobix0Lm5vZGUobikpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2Uuc2V0RWRnZShuLHQuZWRnZShuKSl9KSksZX0sc3VjY2Vzc29yV2VpZ2h0czpmdW5jdGlvbih0KXt2YXIgZT1yLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXt9O3JldHVybiByLmZvckVhY2godC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7bltlLnddPShuW2Uud118fDApK3QuZWRnZShlKS53ZWlnaHR9KSksbn0pKTtyZXR1cm4gci56aXBPYmplY3QodC5ub2RlcygpLGUpfSxwcmVkZWNlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhlKSwoZnVuY3Rpb24oZSl7bltlLnZdPShuW2Uudl18fDApK3QuZWRnZShlKS53ZWlnaHR9KSksbn0pKTtyZXR1cm4gci56aXBPYmplY3QodC5ub2RlcygpLGUpfSxpbnRlcnNlY3RSZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQueCxhPXQueSxvPWUueC1pLHM9ZS55LWEsYz10LndpZHRoLzIsdT10LmhlaWdodC8yO2lmKCFvJiYhcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3JldHVybiBNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9YypzL28pLHt4Omkrbix5OmErcn19LGJ1aWxkTGF5ZXJNYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAoci5yYW5nZShvKHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobiksYT1pLnJhbms7ci5pc1VuZGVmaW5lZChhKXx8KGVbYV1baS5vcmRlcl09bil9KSksZX0sbm9ybWFsaXplUmFua3M6ZnVuY3Rpb24odCl7dmFyIGU9ci5taW4oci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtyLmhhcyhpLCJyYW5rIikmJihpLnJhbmstPWUpfSkpfSxyZW1vdmVFbXB0eVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKS5yYW5rLWU7bltpXXx8KG5baV09W10pLG5baV0ucHVzaChyKX0pKTt2YXIgaT0wLGE9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO3IuZm9yRWFjaChuLChmdW5jdGlvbihlLG4pe3IuaXNVbmRlZmluZWQoZSkmJm4lYSE9MD8tLWk6aSYmci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS5yYW5rKz1pfSkpfSkpfSxhZGRCb3JkZXJOb2RlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49NCYmKGkucmFuaz1uLGkub3JkZXI9ciksYSh0LCJib3JkZXIiLGksZSl9LG1heFJhbms6byxwYXJ0aXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj17bGhzOltdLHJoczpbXX07cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtlKHQpP24ubGhzLnB1c2godCk6bi5yaHMucHVzaCh0KX0pKSxufSx0aW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49ci5ub3coKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2NvbnNvbGUubG9nKHQrIiB0aW1lOiAiKyhyLm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKX19fSw4MTc3OnQ9Pnt0LmV4cG9ydHM9IjAuOC41In0sNzg1NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9T2JqZWN0Lmhhc093blByb3BlcnR5LGU9T2JqZWN0LnNldFByb3RvdHlwZU9mLG49T2JqZWN0LmlzRnJvemVuLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPU9iamVjdC5mcmVlemUsbz1PYmplY3Quc2VhbCxzPU9iamVjdC5jcmVhdGUsYz0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QsdT1jLmFwcGx5LGw9Yy5jb25zdHJ1Y3Q7dXx8KHU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFwcGx5KGUsbil9KSxhfHwoYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLG98fChvPWZ1bmN0aW9uKHQpe3JldHVybiB0fSksbHx8KGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KHQsW251bGxdLmNvbmNhdChmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPUFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20odCl9KGUpKSkpfSk7dmFyIGgsZj13KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxkPXcoQXJyYXkucHJvdG90eXBlLnBvcCkscD13KEFycmF5LnByb3RvdHlwZS5wdXNoKSx5PXcoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksZz13KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLG09dyhTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHY9dyhTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGI9dyhTdHJpbmcucHJvdG90eXBlLnRyaW0pLF89dyhSZWdFeHAucHJvdG90eXBlLnRlc3QpLHg9KGg9VHlwZUVycm9yLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1BcnJheSh0KSxuPTA7bjx0O24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gbChoLGUpfSk7ZnVuY3Rpb24gdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIHUodCxlLHIpfX1mdW5jdGlvbiBrKHQscil7ZSYmZSh0LG51bGwpO2Zvcih2YXIgaT1yLmxlbmd0aDtpLS07KXt2YXIgYT1yW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7dmFyIG89eShhKTtvIT09YSYmKG4ocil8fChyW2ldPW8pLGE9byl9dFthXT0hMH1yZXR1cm4gdH1mdW5jdGlvbiBUKGUpe3ZhciBuPXMobnVsbCkscj12b2lkIDA7Zm9yKHIgaW4gZSl1KHQsZSxbcl0pJiYobltyXT1lW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSl7Zm9yKDtudWxsIT09dDspe3ZhciBuPWkodCxlKTtpZihuKXtpZihuLmdldClyZXR1cm4gdyhuLmdldCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4udmFsdWUpcmV0dXJuIHcobi52YWx1ZSl9dD1yKHQpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS53YXJuKCJmYWxsYmFjayB2YWx1ZSBmb3IiLHQpLG51bGx9fXZhciBDPWEoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLFM9YShbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksQT1hKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksTT1hKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZmVkcm9wc2hhZG93IiwiZmVpbWFnZSIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksTj1hKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiXSksRD1hKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxPPWEoWyIjdGV4dCJdKSxCPWEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxMPWEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEk9YShbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxSPWEoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxGPW8oL1x7XHtbXHNcU10qfFtcc1xTXSpcfVx9L2dtKSxQPW8oLzwlW1xzXFNdKnxbXHNcU10qJT4vZ20pLGo9bygvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxZPW8oL15hcmlhLVtcLVx3XSskLyksej1vKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksVT1vKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxxPW8oL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksJD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH07ZnVuY3Rpb24gSCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPUFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20odCl9dmFyIFc9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9udWxsOndpbmRvd30sVj1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6JCh0KSl8fCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNyZWF0ZVBvbGljeSlyZXR1cm4gbnVsbDt2YXIgbj1udWxsLHI9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7ZS5jdXJyZW50U2NyaXB0JiZlLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKHIpJiYobj1lLmN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKHIpKTt2YXIgaT0iZG9tcHVyaWZ5Iisobj8iIyIrbjoiIik7dHJ5e3JldHVybiB0LmNyZWF0ZVBvbGljeShpLHtjcmVhdGVIVE1MOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pfWNhdGNoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitpKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O3JldHVybiBmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlcoKSxuPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfTtpZihuLnZlcnNpb249IjIuMy4zIixuLnJlbW92ZWQ9W10sIWV8fCFlLmRvY3VtZW50fHw5IT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbi5pc1N1cHBvcnRlZD0hMSxuO3ZhciByPWUuZG9jdW1lbnQsaT1lLmRvY3VtZW50LG89ZS5Eb2N1bWVudEZyYWdtZW50LHM9ZS5IVE1MVGVtcGxhdGVFbGVtZW50LGM9ZS5Ob2RlLHU9ZS5FbGVtZW50LGw9ZS5Ob2RlRmlsdGVyLGg9ZS5OYW1lZE5vZGVNYXAsdz12b2lkIDA9PT1oP2UuTmFtZWROb2RlTWFwfHxlLk1vek5hbWVkQXR0ck1hcDpoLEc9ZS5UZXh0LFg9ZS5Db21tZW50LFo9ZS5ET01QYXJzZXIsUT1lLnRydXN0ZWRUeXBlcyxLPXUucHJvdG90eXBlLEo9RShLLCJjbG9uZU5vZGUiKSx0dD1FKEssIm5leHRTaWJsaW5nIiksZXQ9RShLLCJjaGlsZE5vZGVzIiksbnQ9RShLLCJwYXJlbnROb2RlIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHMpe3ZhciBydD1pLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cnQuY29udGVudCYmcnQuY29udGVudC5vd25lckRvY3VtZW50JiYoaT1ydC5jb250ZW50Lm93bmVyRG9jdW1lbnQpfXZhciBpdD1WKFEsciksYXQ9aXQmJkZ0P2l0LmNyZWF0ZUhUTUwoIiIpOiIiLG90PWksc3Q9b3QuaW1wbGVtZW50YXRpb24sY3Q9b3QuY3JlYXRlTm9kZUl0ZXJhdG9yLHV0PW90LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQsbHQ9b3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUsaHQ9ci5pbXBvcnROb2RlLGZ0PXt9O3RyeXtmdD1UKGkpLmRvY3VtZW50TW9kZT9pLmRvY3VtZW50TW9kZTp7fX1jYXRjaCh0KXt9dmFyIGR0PXt9O24uaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIG50JiZzdCYmdm9pZCAwIT09c3QuY3JlYXRlSFRNTERvY3VtZW50JiY5IT09ZnQ7dmFyIHB0PUYseXQ9UCxndD1qLG10PVksdnQ9VSxidD1xLF90PXoseHQ9bnVsbCx3dD1rKHt9LFtdLmNvbmNhdChIKEMpLEgoUyksSChBKSxIKE4pLEgoTykpKSxrdD1udWxsLFR0PWsoe30sW10uY29uY2F0KEgoQiksSChMKSxIKEkpLEgoUikpKSxFdD1udWxsLEN0PW51bGwsU3Q9ITAsQXQ9ITAsTXQ9ITEsTnQ9ITEsRHQ9ITEsT3Q9ITEsQnQ9ITEsTHQ9ITEsSXQ9ITEsUnQ9ITAsRnQ9ITEsUHQ9ITAsanQ9ITAsWXQ9ITEsenQ9e30sVXQ9bnVsbCxxdD1rKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSksJHQ9bnVsbCxIdD1rKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSksV3Q9bnVsbCxWdD1rKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksR3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLFh0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsWnQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFF0PVp0LEt0PSExLEp0PXZvaWQgMCx0ZT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLGVlPSJ0ZXh0L2h0bWwiLG5lPXZvaWQgMCxyZT1udWxsLGllPWkuY3JlYXRlRWxlbWVudCgiZm9ybSIpLGFlPWZ1bmN0aW9uKHQpe3JlJiZyZT09PXR8fCh0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOiQodCkpfHwodD17fSksdD1UKHQpLHh0PSJBTExPV0VEX1RBR1MiaW4gdD9rKHt9LHQuQUxMT1dFRF9UQUdTKTp3dCxrdD0iQUxMT1dFRF9BVFRSImluIHQ/ayh7fSx0LkFMTE9XRURfQVRUUik6VHQsV3Q9IkFERF9VUklfU0FGRV9BVFRSImluIHQ/ayhUKFZ0KSx0LkFERF9VUklfU0FGRV9BVFRSKTpWdCwkdD0iQUREX0RBVEFfVVJJX1RBR1MiaW4gdD9rKFQoSHQpLHQuQUREX0RBVEFfVVJJX1RBR1MpOkh0LFV0PSJGT1JCSURfQ09OVEVOVFMiaW4gdD9rKHt9LHQuRk9SQklEX0NPTlRFTlRTKTpxdCxFdD0iRk9SQklEX1RBR1MiaW4gdD9rKHt9LHQuRk9SQklEX1RBR1MpOnt9LEN0PSJGT1JCSURfQVRUUiJpbiB0P2soe30sdC5GT1JCSURfQVRUUik6e30senQ9IlVTRV9QUk9GSUxFUyJpbiB0JiZ0LlVTRV9QUk9GSUxFUyxTdD0hMSE9PXQuQUxMT1dfQVJJQV9BVFRSLEF0PSExIT09dC5BTExPV19EQVRBX0FUVFIsTXQ9dC5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsTnQ9dC5TQUZFX0ZPUl9URU1QTEFURVN8fCExLER0PXQuV0hPTEVfRE9DVU1FTlR8fCExLEx0PXQuUkVUVVJOX0RPTXx8ITEsSXQ9dC5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxSdD0hMSE9PXQuUkVUVVJOX0RPTV9JTVBPUlQsRnQ9dC5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxCdD10LkZPUkNFX0JPRFl8fCExLFB0PSExIT09dC5TQU5JVElaRV9ET00sanQ9ITEhPT10LktFRVBfQ09OVEVOVCxZdD10LklOX1BMQUNFfHwhMSxfdD10LkFMTE9XRURfVVJJX1JFR0VYUHx8X3QsUXQ9dC5OQU1FU1BBQ0V8fFp0LEp0PUp0PS0xPT09dGUuaW5kZXhPZih0LlBBUlNFUl9NRURJQV9UWVBFKT9lZTp0LlBBUlNFUl9NRURJQV9UWVBFLG5lPSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09SnQ/ZnVuY3Rpb24odCl7cmV0dXJuIHR9OnksTnQmJihBdD0hMSksSXQmJihMdD0hMCksenQmJih4dD1rKHt9LFtdLmNvbmNhdChIKE8pKSksa3Q9W10sITA9PT16dC5odG1sJiYoayh4dCxDKSxrKGt0LEIpKSwhMD09PXp0LnN2ZyYmKGsoeHQsUyksayhrdCxMKSxrKGt0LFIpKSwhMD09PXp0LnN2Z0ZpbHRlcnMmJihrKHh0LEEpLGsoa3QsTCksayhrdCxSKSksITA9PT16dC5tYXRoTWwmJihrKHh0LE4pLGsoa3QsSSksayhrdCxSKSkpLHQuQUREX1RBR1MmJih4dD09PXd0JiYoeHQ9VCh4dCkpLGsoeHQsdC5BRERfVEFHUykpLHQuQUREX0FUVFImJihrdD09PVR0JiYoa3Q9VChrdCkpLGsoa3QsdC5BRERfQVRUUikpLHQuQUREX1VSSV9TQUZFX0FUVFImJmsoV3QsdC5BRERfVVJJX1NBRkVfQVRUUiksdC5GT1JCSURfQ09OVEVOVFMmJihVdD09PXF0JiYoVXQ9VChVdCkpLGsoVXQsdC5GT1JCSURfQ09OVEVOVFMpKSxqdCYmKHh0WyIjdGV4dCJdPSEwKSxEdCYmayh4dCxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSx4dC50YWJsZSYmKGsoeHQsWyJ0Ym9keSJdKSxkZWxldGUgRXQudGJvZHkpLGEmJmEodCkscmU9dCl9LG9lPWsoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLHNlPWsoe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSksY2U9ayh7fSxTKTtrKGNlLEEpLGsoY2UsTSk7dmFyIHVlPWsoe30sTik7ayh1ZSxEKTt2YXIgbGU9ZnVuY3Rpb24odCl7dmFyIGU9bnQodCk7ZSYmZS50YWdOYW1lfHwoZT17bmFtZXNwYWNlVVJJOlp0LHRhZ05hbWU6InRlbXBsYXRlIn0pO3ZhciBuPXkodC50YWdOYW1lKSxyPXkoZS50YWdOYW1lKTtpZih0Lm5hbWVzcGFjZVVSST09PVh0KXJldHVybiBlLm5hbWVzcGFjZVVSST09PVp0PyJzdmciPT09bjplLm5hbWVzcGFjZVVSST09PUd0PyJzdmciPT09biYmKCJhbm5vdGF0aW9uLXhtbCI9PT1yfHxvZVtyXSk6Qm9vbGVhbihjZVtuXSk7aWYodC5uYW1lc3BhY2VVUkk9PT1HdClyZXR1cm4gZS5uYW1lc3BhY2VVUkk9PT1adD8ibWF0aCI9PT1uOmUubmFtZXNwYWNlVVJJPT09WHQ/Im1hdGgiPT09biYmc2Vbcl06Qm9vbGVhbih1ZVtuXSk7aWYodC5uYW1lc3BhY2VVUkk9PT1adCl7aWYoZS5uYW1lc3BhY2VVUkk9PT1YdCYmIXNlW3JdKXJldHVybiExO2lmKGUubmFtZXNwYWNlVVJJPT09R3QmJiFvZVtyXSlyZXR1cm4hMTt2YXIgaT1rKHt9LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pO3JldHVybiF1ZVtuXSYmKGlbbl18fCFjZVtuXSl9cmV0dXJuITF9LGhlPWZ1bmN0aW9uKHQpe3Aobi5yZW1vdmVkLHtlbGVtZW50OnR9KTt0cnl7dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNhdGNoKGUpe3RyeXt0Lm91dGVySFRNTD1hdH1jYXRjaChlKXt0LnJlbW92ZSgpfX19LGZlPWZ1bmN0aW9uKHQsZSl7dHJ5e3Aobi5yZW1vdmVkLHthdHRyaWJ1dGU6ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpLGZyb206ZX0pfWNhdGNoKHQpe3Aobi5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmV9KX1pZihlLnJlbW92ZUF0dHJpYnV0ZSh0KSwiaXMiPT09dCYmIWt0W3RdKWlmKEx0fHxJdCl0cnl7aGUoZSl9Y2F0Y2godCl7fWVsc2UgdHJ5e2Uuc2V0QXR0cmlidXRlKHQsIiIpfWNhdGNoKHQpe319LGRlPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCxuPXZvaWQgMDtpZihCdCl0PSI8cmVtb3ZlPjwvcmVtb3ZlPiIrdDtlbHNle3ZhciByPWcodCwvXltcclxuXHQgXSsvKTtuPXImJnJbMF19ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1KdCYmKHQ9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+Jyt0KyI8L2JvZHk+PC9odG1sPiIpO3ZhciBhPWl0P2l0LmNyZWF0ZUhUTUwodCk6dDtpZihRdD09PVp0KXRyeXtlPShuZXcgWikucGFyc2VGcm9tU3RyaW5nKGEsSnQpfWNhdGNoKHQpe31pZighZXx8IWUuZG9jdW1lbnRFbGVtZW50KXtlPXN0LmNyZWF0ZURvY3VtZW50KFF0LCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e2UuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1LdD8iIjphfWNhdGNoKHQpe319dmFyIG89ZS5ib2R5fHxlLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdCYmbiYmby5pbnNlcnRCZWZvcmUoaS5jcmVhdGVUZXh0Tm9kZShuKSxvLmNoaWxkTm9kZXNbMF18fG51bGwpLFF0PT09WnQ/bHQuY2FsbChlLER0PyJodG1sIjoiYm9keSIpWzBdOkR0P2UuZG9jdW1lbnRFbGVtZW50Om99LHBlPWZ1bmN0aW9uKHQpe3JldHVybiBjdC5jYWxsKHQub3duZXJEb2N1bWVudHx8dCx0LGwuU0hPV19FTEVNRU5UfGwuU0hPV19DT01NRU5UfGwuU0hPV19URVhULG51bGwsITEpfSx5ZT1mdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiBHfHx0IGluc3RhbmNlb2YgWHx8InN0cmluZyI9PXR5cGVvZiB0Lm5vZGVOYW1lJiYic3RyaW5nIj09dHlwZW9mIHQudGV4dENvbnRlbnQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUNoaWxkJiZ0LmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiB3JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVBdHRyaWJ1dGUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNldEF0dHJpYnV0ZSYmInN0cmluZyI9PXR5cGVvZiB0Lm5hbWVzcGFjZVVSSSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuaW5zZXJ0QmVmb3JlKX0sZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09Yz8idW5kZWZpbmVkIjokKGMpKT90IGluc3RhbmNlb2YgYzp0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOiQodCkpJiYibnVtYmVyIj09dHlwZW9mIHQubm9kZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgdC5ub2RlTmFtZX0sbWU9ZnVuY3Rpb24odCxlLHIpe2R0W3RdJiZmKGR0W3RdLChmdW5jdGlvbih0KXt0LmNhbGwobixlLHIscmUpfSkpfSx2ZT1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDA7aWYobWUoImJlZm9yZVNhbml0aXplRWxlbWVudHMiLHQsbnVsbCkseWUodCkpcmV0dXJuIGhlKHQpLCEwO2lmKGcodC5ub2RlTmFtZSwvW1x1MDA4MC1cdUZGRkZdLykpcmV0dXJuIGhlKHQpLCEwO3ZhciByPW5lKHQubm9kZU5hbWUpO2lmKG1lKCJ1cG9uU2FuaXRpemVFbGVtZW50Iix0LHt0YWdOYW1lOnIsYWxsb3dlZFRhZ3M6eHR9KSwhZ2UodC5maXJzdEVsZW1lbnRDaGlsZCkmJighZ2UodC5jb250ZW50KXx8IWdlKHQuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpJiZfKC88Wy9cd10vZyx0LmlubmVySFRNTCkmJl8oLzxbL1x3XS9nLHQudGV4dENvbnRlbnQpKXJldHVybiBoZSh0KSwhMDtpZigic2VsZWN0Ij09PXImJl8oLzx0ZW1wbGF0ZS9pLHQuaW5uZXJIVE1MKSlyZXR1cm4gaGUodCksITA7aWYoIXh0W3JdfHxFdFtyXSl7aWYoanQmJiFVdFtyXSl7dmFyIGk9bnQodCl8fHQucGFyZW50Tm9kZSxhPWV0KHQpfHx0LmNoaWxkTm9kZXM7aWYoYSYmaSlmb3IodmFyIG89YS5sZW5ndGgtMTtvPj0wOy0tbylpLmluc2VydEJlZm9yZShKKGFbb10sITApLHR0KHQpKX1yZXR1cm4gaGUodCksITB9cmV0dXJuIHQgaW5zdGFuY2VvZiB1JiYhbGUodCk/KGhlKHQpLCEwKToibm9zY3JpcHQiIT09ciYmIm5vZW1iZWQiIT09cnx8IV8oLzxcL25vKHNjcmlwdHxlbWJlZCkvaSx0LmlubmVySFRNTCk/KE50JiYzPT09dC5ub2RlVHlwZSYmKGU9dC50ZXh0Q29udGVudCxlPW0oZSxwdCwiICIpLGU9bShlLHl0LCIgIiksdC50ZXh0Q29udGVudCE9PWUmJihwKG4ucmVtb3ZlZCx7ZWxlbWVudDp0LmNsb25lTm9kZSgpfSksdC50ZXh0Q29udGVudD1lKSksbWUoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsdCxudWxsKSwhMSk6KGhlKHQpLCEwKX0sYmU9ZnVuY3Rpb24odCxlLG4pe2lmKFB0JiYoImlkIj09PWV8fCJuYW1lIj09PWUpJiYobiBpbiBpfHxuIGluIGllKSlyZXR1cm4hMTtpZihBdCYmIUN0W2VdJiZfKGd0LGUpKTtlbHNlIGlmKFN0JiZfKG10LGUpKTtlbHNle2lmKCFrdFtlXXx8Q3RbZV0pcmV0dXJuITE7aWYoV3RbZV0pO2Vsc2UgaWYoXyhfdCxtKG4sYnQsIiIpKSk7ZWxzZSBpZigic3JjIiE9PWUmJiJ4bGluazpocmVmIiE9PWUmJiJocmVmIiE9PWV8fCJzY3JpcHQiPT09dHx8MCE9PXYobiwiZGF0YToiKXx8ISR0W3RdKWlmKE10JiYhXyh2dCxtKG4sYnQsIiIpKSk7ZWxzZSBpZihuKXJldHVybiExfXJldHVybiEwfSxfZT1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDAscj12b2lkIDAsaT12b2lkIDAsYT12b2lkIDA7bWUoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsdCxudWxsKTt2YXIgbz10LmF0dHJpYnV0ZXM7aWYobyl7dmFyIHM9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczprdH07Zm9yKGE9by5sZW5ndGg7YS0tOyl7dmFyIGM9ZT1vW2FdLHU9Yy5uYW1lLGw9Yy5uYW1lc3BhY2VVUkk7aWYocj1iKGUudmFsdWUpLGk9bmUodSkscy5hdHRyTmFtZT1pLHMuYXR0clZhbHVlPXIscy5rZWVwQXR0cj0hMCxzLmZvcmNlS2VlcEF0dHI9dm9pZCAwLG1lKCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLHQscykscj1zLmF0dHJWYWx1ZSwhcy5mb3JjZUtlZXBBdHRyJiYoZmUodSx0KSxzLmtlZXBBdHRyKSlpZihfKC9cLz4vaSxyKSlmZSh1LHQpO2Vsc2V7TnQmJihyPW0ocixwdCwiICIpLHI9bShyLHl0LCIgIikpO3ZhciBoPW5lKHQubm9kZU5hbWUpO2lmKGJlKGgsaSxyKSl0cnl7bD90LnNldEF0dHJpYnV0ZU5TKGwsdSxyKTp0LnNldEF0dHJpYnV0ZSh1LHIpLGQobi5yZW1vdmVkKX1jYXRjaCh0KXt9fX1tZSgiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLHQsbnVsbCl9fSx4ZT1mdW5jdGlvbiB0KGUpe3ZhciBuPXZvaWQgMCxyPXBlKGUpO2ZvcihtZSgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLGUsbnVsbCk7bj1yLm5leHROb2RlKCk7KW1lKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixuLG51bGwpLHZlKG4pfHwobi5jb250ZW50IGluc3RhbmNlb2YgbyYmdChuLmNvbnRlbnQpLF9lKG4pKTttZSgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsZSxudWxsKX07cmV0dXJuIG4uc2FuaXRpemU9ZnVuY3Rpb24odCxpKXt2YXIgYT12b2lkIDAscz12b2lkIDAsdT12b2lkIDAsbD12b2lkIDAsaD12b2lkIDA7aWYoKEt0PSF0KSYmKHQ9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiB0JiYhZ2UodCkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LnRvU3RyaW5nKXRocm93IHgoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZih0PXQudG9TdHJpbmcoKSkpdGhyb3cgeCgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFuLmlzU3VwcG9ydGVkKXtpZigib2JqZWN0Ij09PSQoZS50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0YXRpY0hUTUwpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZS50b1N0YXRpY0hUTUwodCk7aWYoZ2UodCkpcmV0dXJuIGUudG9TdGF0aWNIVE1MKHQub3V0ZXJIVE1MKX1yZXR1cm4gdH1pZihPdHx8YWUoaSksbi5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgdCYmKFl0PSExKSxZdCk7ZWxzZSBpZih0IGluc3RhbmNlb2YgYykxPT09KHM9KGE9ZGUoIlx4M2MhLS0tLVx4M2UiKSkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHQsITApKS5ub2RlVHlwZSYmIkJPRFkiPT09cy5ub2RlTmFtZXx8IkhUTUwiPT09cy5ub2RlTmFtZT9hPXM6YS5hcHBlbmRDaGlsZChzKTtlbHNle2lmKCFMdCYmIU50JiYhRHQmJi0xPT09dC5pbmRleE9mKCI8IikpcmV0dXJuIGl0JiZGdD9pdC5jcmVhdGVIVE1MKHQpOnQ7aWYoIShhPWRlKHQpKSlyZXR1cm4gTHQ/bnVsbDphdH1hJiZCdCYmaGUoYS5maXJzdENoaWxkKTtmb3IodmFyIGY9cGUoWXQ/dDphKTt1PWYubmV4dE5vZGUoKTspMz09PXUubm9kZVR5cGUmJnU9PT1sfHx2ZSh1KXx8KHUuY29udGVudCBpbnN0YW5jZW9mIG8mJnhlKHUuY29udGVudCksX2UodSksbD11KTtpZihsPW51bGwsWXQpcmV0dXJuIHQ7aWYoTHQpe2lmKEl0KWZvcihoPXV0LmNhbGwoYS5vd25lckRvY3VtZW50KTthLmZpcnN0Q2hpbGQ7KWguYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxkKTtlbHNlIGg9YTtyZXR1cm4gUnQmJihoPWh0LmNhbGwocixoLCEwKSksaH12YXIgZD1EdD9hLm91dGVySFRNTDphLmlubmVySFRNTDtyZXR1cm4gTnQmJihkPW0oZCxwdCwiICIpLGQ9bShkLHl0LCIgIikpLGl0JiZGdD9pdC5jcmVhdGVIVE1MKGQpOmR9LG4uc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2FlKHQpLE90PSEwfSxuLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7cmU9bnVsbCxPdD0hMX0sbi5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtyZXx8YWUoe30pO3ZhciByPW5lKHQpLGk9bmUoZSk7cmV0dXJuIGJlKHIsaSxuKX0sbi5hZGRIb29rPWZ1bmN0aW9uKHQsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihkdFt0XT1kdFt0XXx8W10scChkdFt0XSxlKSl9LG4ucmVtb3ZlSG9vaz1mdW5jdGlvbih0KXtkdFt0XSYmZChkdFt0XSl9LG4ucmVtb3ZlSG9va3M9ZnVuY3Rpb24odCl7ZHRbdF0mJihkdFt0XT1bXSl9LG4ucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtkdD17fX0sbn0oKX0oKX0sODI4MjoodCxlLG4pPT57dmFyIHI9bigyMzU0KTt0LmV4cG9ydHM9e0dyYXBoOnIuR3JhcGgsanNvbjpuKDg5NzQpLGFsZzpuKDI0NDApLHZlcnNpb246ci52ZXJzaW9ufX0sMjg0MjoodCxlLG4pPT57dmFyIHI9big5MTI2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbj17fSxpPVtdO2Z1bmN0aW9uIGEoaSl7ci5oYXMobixpKXx8KG5baV09ITAsZS5wdXNoKGkpLHIuZWFjaCh0LnN1Y2Nlc3NvcnMoaSksYSksci5lYWNoKHQucHJlZGVjZXNzb3JzKGkpLGEpKX1yZXR1cm4gci5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7ZT1bXSxhKHQpLGUubGVuZ3RoJiZpLnB1c2goZSl9KSksaX19LDM5ODQ6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7ZnVuY3Rpb24gaSh0LGUsbixhLG8scyl7ci5oYXMoYSxlKXx8KGFbZV09ITAsbnx8cy5wdXNoKGUpLHIuZWFjaChvKGUpLChmdW5jdGlvbihlKXtpKHQsZSxuLGEsbyxzKX0pKSxuJiZzLnB1c2goZSkpfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ci5pc0FycmF5KGUpfHwoZT1bZV0pO3ZhciBhPSh0LmlzRGlyZWN0ZWQoKT90LnN1Y2Nlc3NvcnM6dC5uZWlnaGJvcnMpLmJpbmQodCksbz1bXSxzPXt9O3JldHVybiByLmVhY2goZSwoZnVuY3Rpb24oZSl7aWYoIXQuaGFzTm9kZShlKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIitlKTtpKHQsZSwicG9zdCI9PT1uLHMsYSxvKX0pKSxvfX0sNDg0NzoodCxlLG4pPT57dmFyIHI9bigzNzYzKSxpPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLGEpe2lbYV09cih0LGEsZSxuKX0pLHt9KX19LDM3NjM6KHQsZSxuKT0+e3ZhciByPW4oOTEyNiksaT1uKDk2NzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4scil7dmFyIGEsbyxzPXt9LGM9bmV3IGksdT1mdW5jdGlvbih0KXt2YXIgZT10LnYhPT1hP3Qudjp0Lncscj1zW2VdLGk9bih0KSx1PW8uZGlzdGFuY2UraTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJkaWprc3RyYSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBlZGdlIHdlaWdodHMuIEJhZCBlZGdlOiAiK3QrIiBXZWlnaHQ6ICIraSk7dTxyLmRpc3RhbmNlJiYoci5kaXN0YW5jZT11LHIucHJlZGVjZXNzb3I9YSxjLmRlY3JlYXNlKGUsdSkpfTtmb3IodC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ9PT1lPzA6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3NbdF09e2Rpc3RhbmNlOm59LGMuYWRkKHQsbil9KSk7Yy5zaXplKCk+MCYmKGE9Yy5yZW1vdmVNaW4oKSwobz1zW2FdKS5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KXIoYSkuZm9yRWFjaCh1KTtyZXR1cm4gc30odCxTdHJpbmcoZSksbnx8YSxyfHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgYT1yLmNvbnN0YW50KDEpfSw5MDk2Oih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpLGk9big1MDIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZmlsdGVyKGkodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfX0sODkyNDoodCxlLG4pPT57dmFyIHI9big5MTI2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI9e30saT10Lm5vZGVzKCk7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0XT17fSxyW3RdW3RdPXtkaXN0YW5jZTowfSxpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QhPT1lJiYoclt0XVtlXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSksbih0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLnY9PT10P24udzpuLnYsYT1lKG4pO3JbdF1baV09e2Rpc3RhbmNlOmEscHJlZGVjZXNzb3I6dH19KSl9KSksaS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGE9cltuXTtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWFbdF0saT1lW25dLG89YVtuXSxzPXIuZGlzdGFuY2UraS5kaXN0YW5jZTtzPG8uZGlzdGFuY2UmJihvLmRpc3RhbmNlPXMsby5wcmVkZWNlc3Nvcj1pLnByZWRlY2Vzc29yKX0pKX0pKX0pKSxyfSh0LGV8fGksbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX07dmFyIGk9ci5jb25zdGFudCgxKX0sMjQ0MDoodCxlLG4pPT57dC5leHBvcnRzPXtjb21wb25lbnRzOm4oMjg0MiksZGlqa3N0cmE6bigzNzYzKSxkaWprc3RyYUFsbDpuKDQ4NDcpLGZpbmRDeWNsZXM6big5MDk2KSxmbG95ZFdhcnNoYWxsOm4oODkyNCksaXNBY3ljbGljOm4oMjcwNykscG9zdG9yZGVyOm4oODgyOCkscHJlb3JkZXI6bigyNjQ4KSxwcmltOm4oNTE0KSx0YXJqYW46big1MDIzKSx0b3Bzb3J0Om4oMjE2Nil9fSwyNzA3Oih0LGUsbik9Pnt2YXIgcj1uKDIxNjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cih0KX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2Ygci5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0sODgyODoodCxlLG4pPT57dmFyIHI9bigzOTg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsInBvc3QiKX19LDI2NDg6KHQsZSxuKT0+e3ZhciByPW4oMzk4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwcmUiKX19LDUxNDoodCxlLG4pPT57dmFyIHI9big5MTI2KSxpPW4oNzcxKSxhPW4oOTY3NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1uZXcgaSxzPXt9LGM9bmV3IGE7ZnVuY3Rpb24gdSh0KXt2YXIgcj10LnY9PT1uP3Qudzp0LnYsaT1jLnByaW9yaXR5KHIpO2lmKHZvaWQgMCE9PWkpe3ZhciBhPWUodCk7YTxpJiYoc1tyXT1uLGMuZGVjcmVhc2UocixhKSl9fWlmKDA9PT10Lm5vZGVDb3VudCgpKXJldHVybiBvO3IuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2MuYWRkKHQsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxvLnNldE5vZGUodCl9KSksYy5kZWNyZWFzZSh0Lm5vZGVzKClbMF0sMCk7Zm9yKHZhciBsPSExO2Muc2l6ZSgpPjA7KXtpZihuPWMucmVtb3ZlTWluKCksci5oYXMocyxuKSlvLnNldEVkZ2UobixzW25dKTtlbHNle2lmKGwpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBncmFwaCBpcyBub3QgY29ubmVjdGVkOiAiK3QpO2w9ITB9dC5ub2RlRWRnZXMobikuZm9yRWFjaCh1KX1yZXR1cm4gb319LDUwMjM6KHQsZSxuKT0+e3ZhciByPW4oOTEyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAsbj1bXSxpPXt9LGE9W107ZnVuY3Rpb24gbyhzKXt2YXIgYz1pW3NdPXtvblN0YWNrOiEwLGxvd2xpbms6ZSxpbmRleDplKyt9O2lmKG4ucHVzaChzKSx0LnN1Y2Nlc3NvcnMocykuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5oYXMoaSx0KT9pW3RdLm9uU3RhY2smJihjLmxvd2xpbms9TWF0aC5taW4oYy5sb3dsaW5rLGlbdF0uaW5kZXgpKToobyh0KSxjLmxvd2xpbms9TWF0aC5taW4oYy5sb3dsaW5rLGlbdF0ubG93bGluaykpfSkpLGMubG93bGluaz09PWMuaW5kZXgpe3ZhciB1LGw9W107ZG97dT1uLnBvcCgpLGlbdV0ub25TdGFjaz0hMSxsLnB1c2godSl9d2hpbGUocyE9PXUpO2EucHVzaChsKX19cmV0dXJuIHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyLmhhcyhpLHQpfHxvKHQpfSkpLGF9fSwyMTY2Oih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO2Z1bmN0aW9uIGkodCl7dmFyIGU9e30sbj17fSxpPVtdO2lmKHIuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIG8ocyl7aWYoci5oYXMobixzKSl0aHJvdyBuZXcgYTtyLmhhcyhlLHMpfHwobltzXT0hMCxlW3NdPSEwLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhzKSxvKSxkZWxldGUgbltzXSxpLnB1c2gocykpfSkpLHIuc2l6ZShlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IGE7cmV0dXJuIGl9ZnVuY3Rpb24gYSgpe310LmV4cG9ydHM9aSxpLkN5Y2xlRXhjZXB0aW9uPWEsYS5wcm90b3R5cGU9bmV3IEVycm9yfSw5Njc1Oih0LGUsbik9Pnt2YXIgcj1uKDkxMjYpO2Z1bmN0aW9uIGkoKXt0aGlzLl9hcnI9W10sdGhpcy5fa2V5SW5kaWNlcz17fX10LmV4cG9ydHM9aSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9LGkucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHRoaXMuX2tleUluZGljZXMsdCl9LGkucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2tleUluZGljZXNbdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gdGhpcy5fYXJyW2VdLnByaW9yaXR5fSxpLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5zaXplKCkpdGhyb3cgbmV3IEVycm9yKCJRdWV1ZSB1bmRlcmZsb3ciKTtyZXR1cm4gdGhpcy5fYXJyWzBdLmtleX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlcztpZih0PVN0cmluZyh0KSwhci5oYXMobix0KSl7dmFyIGk9dGhpcy5fYXJyLGE9aS5sZW5ndGg7cmV0dXJuIG5bdF09YSxpLnB1c2goe2tleTp0LHByaW9yaXR5OmV9KSx0aGlzLl9kZWNyZWFzZShhKSwhMH1yZXR1cm4hMX0saS5wcm90b3R5cGUucmVtb3ZlTWluPWZ1bmN0aW9uKCl7dGhpcy5fc3dhcCgwLHRoaXMuX2Fyci5sZW5ndGgtMSk7dmFyIHQ9dGhpcy5fYXJyLnBvcCgpO3JldHVybiBkZWxldGUgdGhpcy5fa2V5SW5kaWNlc1t0LmtleV0sdGhpcy5faGVhcGlmeSgwKSx0LmtleX0saS5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKGU+dGhpcy5fYXJyW25dLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrdCsiIE9sZDogIit0aGlzLl9hcnJbbl0ucHJpb3JpdHkrIiBOZXc6ICIrZSk7dGhpcy5fYXJyW25dLnByaW9yaXR5PWUsdGhpcy5fZGVjcmVhc2Uobil9LGkucHJvdG90eXBlLl9oZWFwaWZ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FycixuPTIqdCxyPW4rMSxpPXQ7bjxlLmxlbmd0aCYmKGk9ZVtuXS5wcmlvcml0eTxlW2ldLnByaW9yaXR5P246aSxyPGUubGVuZ3RoJiYoaT1lW3JdLnByaW9yaXR5PGVbaV0ucHJpb3JpdHk/cjppKSxpIT09dCYmKHRoaXMuX3N3YXAodCxpKSx0aGlzLl9oZWFwaWZ5KGkpKSl9LGkucHJvdG90eXBlLl9kZWNyZWFzZT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbj10aGlzLl9hcnIscj1uW3RdLnByaW9yaXR5OzAhPT10JiYhKG5bZT10Pj4xXS5wcmlvcml0eTxyKTspdGhpcy5fc3dhcCh0LGUpLHQ9ZX0saS5wcm90b3R5cGUuX3N3YXA9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9hcnIscj10aGlzLl9rZXlJbmRpY2VzLGk9blt0XSxhPW5bZV07blt0XT1hLG5bZV09aSxyW2Eua2V5XT10LHJbaS5rZXldPWV9fSw3NzE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDkxMjYpO3QuZXhwb3J0cz1hO3ZhciBpPSJcMCI7ZnVuY3Rpb24gYSh0KXt0aGlzLl9pc0RpcmVjdGVkPSFyLmhhcyh0LCJkaXJlY3RlZCIpfHx0LmRpcmVjdGVkLHRoaXMuX2lzTXVsdGlncmFwaD0hIXIuaGFzKHQsIm11bHRpZ3JhcGgiKSYmdC5tdWx0aWdyYXBoLHRoaXMuX2lzQ29tcG91bmQ9ISFyLmhhcyh0LCJjb21wb3VuZCIpJiZ0LmNvbXBvdW5kLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1yLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlblsiXDAiXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1mdW5jdGlvbiBvKHQsZSl7dFtlXT90W2VdKys6dFtlXT0xfWZ1bmN0aW9uIHModCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIGModCxlLG4saSl7dmFyIGE9IiIrZSxvPSIiK247aWYoIXQmJmE+byl7dmFyIHM9YTthPW8sbz1zfXJldHVybiBhKyIBIitvKyIBIisoci5pc1VuZGVmaW5lZChpKT8iXDAiOmkpfWZ1bmN0aW9uIHUodCxlLG4scil7dmFyIGk9IiIrZSxhPSIiK247aWYoIXQmJmk+YSl7dmFyIG89aTtpPWEsYT1vfXZhciBzPXt2OmksdzphfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LGUudixlLncsZS5uYW1lKX1hLnByb3RvdHlwZS5fbm9kZUNvdW50PTAsYS5wcm90b3R5cGUuX2VkZ2VDb3VudD0wLGEucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH0sYS5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH0sYS5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfSxhLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGFiZWw9dCx0aGlzfSxhLnByb3RvdHlwZS5ncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYWJlbH0sYS5wcm90b3R5cGUuc2V0RGVmYXVsdE5vZGVMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gci5pc0Z1bmN0aW9uKHQpfHwodD1yLmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49dCx0aGlzfSxhLnByb3RvdHlwZS5ub2RlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZUNvdW50fSxhLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiByLmtleXModGhpcy5fbm9kZXMpfSxhLnByb3RvdHlwZS5zb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX2luW2VdKX0pKX0sYS5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiByLmZpbHRlcih0aGlzLm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiByLmlzRW1wdHkodC5fb3V0W2VdKX0pKX0sYS5wcm90b3R5cGUuc2V0Tm9kZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiByLmVhY2godCwoZnVuY3Rpb24odCl7bi5sZW5ndGg+MT9pLnNldE5vZGUodCxlKTppLnNldE5vZGUodCl9KSksdGhpc30sYS5wcm90b3R5cGUuc2V0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmhhcyh0aGlzLl9ub2Rlcyx0KT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbdF09ZSksdGhpcyk6KHRoaXMuX25vZGVzW3RdPWFyZ3VtZW50cy5sZW5ndGg+MT9lOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbih0KSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W3RdPWksdGhpcy5fY2hpbGRyZW5bdF09e30sdGhpcy5fY2hpbGRyZW5bIlwwIl1bdF09ITApLHRoaXMuX2luW3RdPXt9LHRoaXMuX3ByZWRzW3RdPXt9LHRoaXMuX291dFt0XT17fSx0aGlzLl9zdWNzW3RdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfSxhLnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ub2Rlc1t0XX0sYS5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCl9LGEucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihyLmhhcyh0aGlzLl9ub2Rlcyx0KSl7dmFyIG49ZnVuY3Rpb24odCl7ZS5yZW1vdmVFZGdlKGUuX2VkZ2VPYmpzW3RdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3RdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdCh0KSxkZWxldGUgdGhpcy5fcGFyZW50W3RdLHIuZWFjaCh0aGlzLmNoaWxkcmVuKHQpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0KX0pKSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bdF0pLHIuZWFjaChyLmtleXModGhpcy5faW5bdF0pLG4pLGRlbGV0ZSB0aGlzLl9pblt0XSxkZWxldGUgdGhpcy5fcHJlZHNbdF0sci5lYWNoKHIua2V5cyh0aGlzLl9vdXRbdF0pLG4pLGRlbGV0ZSB0aGlzLl9vdXRbdF0sZGVsZXRlIHRoaXMuX3N1Y3NbdF0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLl9pc0NvbXBvdW5kKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBwYXJlbnQgaW4gYSBub24tY29tcG91bmQgZ3JhcGgiKTtpZihyLmlzVW5kZWZpbmVkKGUpKWU9aTtlbHNle2Zvcih2YXIgbj1lKz0iIjshci5pc1VuZGVmaW5lZChuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT10KXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK2UrIiBhcyBwYXJlbnQgb2YgIit0KyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUoZSl9cmV0dXJuIHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdCh0KSx0aGlzLl9wYXJlbnRbdF09ZSx0aGlzLl9jaGlsZHJlbltlXVt0XT0hMCx0aGlzfSxhLnByb3RvdHlwZS5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Q9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RoaXMuX3BhcmVudFt0XV1bdF19LGEucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9wYXJlbnRbdF07aWYoZSE9PWkpcmV0dXJuIGV9fSxhLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZihyLmlzVW5kZWZpbmVkKHQpJiYodD1pKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9jaGlsZHJlblt0XTtpZihlKXJldHVybiByLmtleXMoZSl9ZWxzZXtpZih0PT09aSlyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZSh0KSlyZXR1cm5bXX19LGEucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcmVkc1t0XTtpZihlKXJldHVybiByLmtleXMoZSl9LGEucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vjc1t0XTtpZihlKXJldHVybiByLmtleXMoZSl9LGEucHJvdG90eXBlLm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnByZWRlY2Vzc29ycyh0KTtpZihlKXJldHVybiByLnVuaW9uKGUsdGhpcy5zdWNjZXNzb3JzKHQpKX0sYS5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09KHRoaXMuaXNEaXJlY3RlZCgpP3RoaXMuc3VjY2Vzc29ycyh0KTp0aGlzLm5laWdoYm9ycyh0KSkubGVuZ3RofSxhLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7ZS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBuPXRoaXM7ci5lYWNoKHRoaXMuX25vZGVzLChmdW5jdGlvbihuLHIpe3QocikmJmUuc2V0Tm9kZShyLG4pfSkpLHIuZWFjaCh0aGlzLl9lZGdlT2JqcywoZnVuY3Rpb24odCl7ZS5oYXNOb2RlKHQudikmJmUuaGFzTm9kZSh0LncpJiZlLnNldEVkZ2UodCxuLmVkZ2UodCkpfSkpO3ZhciBpPXt9O2Z1bmN0aW9uIGEodCl7dmFyIHI9bi5wYXJlbnQodCk7cmV0dXJuIHZvaWQgMD09PXJ8fGUuaGFzTm9kZShyKT8oaVt0XT1yLHIpOnIgaW4gaT9pW3JdOmEocil9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJnIuZWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQsYSh0KSl9KSksZX0sYS5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gci5pc0Z1bmN0aW9uKHQpfHwodD1yLmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49dCx0aGlzfSxhLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fSxhLnByb3RvdHlwZS5lZGdlcz1mdW5jdGlvbigpe3JldHVybiByLnZhbHVlcyh0aGlzLl9lZGdlT2Jqcyl9LGEucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiByLnJlZHVjZSh0LChmdW5jdGlvbih0LHIpe3JldHVybiBpLmxlbmd0aD4xP24uc2V0RWRnZSh0LHIsZSk6bi5zZXRFZGdlKHQscikscn0pKSx0aGlzfSxhLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGksYT0hMSxzPWFyZ3VtZW50c1swXTsib2JqZWN0Ij09dHlwZW9mIHMmJm51bGwhPT1zJiYidiJpbiBzPyh0PXMudixlPXMudyxuPXMubmFtZSwyPT09YXJndW1lbnRzLmxlbmd0aCYmKGk9YXJndW1lbnRzWzFdLGE9ITApKToodD1zLGU9YXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKGk9YXJndW1lbnRzWzJdLGE9ITApKSx0PSIiK3QsZT0iIitlLHIuaXNVbmRlZmluZWQobil8fChuPSIiK24pO3ZhciBsPWModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7aWYoci5oYXModGhpcy5fZWRnZUxhYmVscyxsKSlyZXR1cm4gYSYmKHRoaXMuX2VkZ2VMYWJlbHNbbF09aSksdGhpcztpZighci5pc1VuZGVmaW5lZChuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUodCksdGhpcy5zZXROb2RlKGUpLHRoaXMuX2VkZ2VMYWJlbHNbbF09YT9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih0LGUsbik7dmFyIGg9dSh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdD1oLnYsZT1oLncsT2JqZWN0LmZyZWV6ZShoKSx0aGlzLl9lZGdlT2Jqc1tsXT1oLG8odGhpcy5fcHJlZHNbZV0sdCksbyh0aGlzLl9zdWNzW3RdLGUpLHRoaXMuX2luW2VdW2xdPWgsdGhpcy5fb3V0W3RdW2xdPWgsdGhpcy5fZWRnZUNvdW50KyssdGhpc30sYS5wcm90b3R5cGUuZWRnZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9MT09PWFyZ3VtZW50cy5sZW5ndGg/bCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6Yyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tyXX0sYS5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9MT09PWFyZ3VtZW50cy5sZW5ndGg/bCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6Yyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gci5oYXModGhpcy5fZWRnZUxhYmVscyxpKX0sYS5wcm90b3R5cGUucmVtb3ZlRWRnZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9MT09PWFyZ3VtZW50cy5sZW5ndGg/bCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6Yyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKSxpPXRoaXMuX2VkZ2VPYmpzW3JdO3JldHVybiBpJiYodD1pLnYsZT1pLncsZGVsZXRlIHRoaXMuX2VkZ2VMYWJlbHNbcl0sZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW3JdLHModGhpcy5fcHJlZHNbZV0sdCkscyh0aGlzLl9zdWNzW3RdLGUpLGRlbGV0ZSB0aGlzLl9pbltlXVtyXSxkZWxldGUgdGhpcy5fb3V0W3RdW3JdLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfSxhLnByb3RvdHlwZS5pbkVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faW5bdF07aWYobil7dmFyIGk9ci52YWx1ZXMobik7cmV0dXJuIGU/ci5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudj09PWV9KSk6aX19LGEucHJvdG90eXBlLm91dEVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fb3V0W3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnc9PT1lfSkpOml9fSxhLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmluRWRnZXModCxlKTtpZihuKXJldHVybiBuLmNvbmNhdCh0aGlzLm91dEVkZ2VzKHQsZSkpfX0sMjM1NDoodCxlLG4pPT57dC5leHBvcnRzPXtHcmFwaDpuKDc3MSksdmVyc2lvbjpuKDk2MzEpfX0sODk3NDoodCxlLG4pPT57dmFyIHI9big5MTI2KSxpPW4oNzcxKTtmdW5jdGlvbiBhKHQpe3JldHVybiByLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKSxpPXQucGFyZW50KGUpLGE9e3Y6ZX07cmV0dXJuIHIuaXNVbmRlZmluZWQobil8fChhLnZhbHVlPW4pLHIuaXNVbmRlZmluZWQoaSl8fChhLnBhcmVudD1pKSxhfSkpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHIubWFwKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpLGk9e3Y6ZS52LHc6ZS53fTtyZXR1cm4gci5pc1VuZGVmaW5lZChlLm5hbWUpfHwoaS5uYW1lPWUubmFtZSksci5pc1VuZGVmaW5lZChuKXx8KGkudmFsdWU9biksaX0pKX10LmV4cG9ydHM9e3dyaXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXtvcHRpb25zOntkaXJlY3RlZDp0LmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6dC5pc0NvbXBvdW5kKCl9LG5vZGVzOmEodCksZWRnZXM6byh0KX07cmV0dXJuIHIuaXNVbmRlZmluZWQodC5ncmFwaCgpKXx8KGUudmFsdWU9ci5jbG9uZSh0LmdyYXBoKCkpKSxlfSxyZWFkOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHQub3B0aW9ucykuc2V0R3JhcGgodC52YWx1ZSk7cmV0dXJuIHIuZWFjaCh0Lm5vZGVzLChmdW5jdGlvbih0KXtlLnNldE5vZGUodC52LHQudmFsdWUpLHQucGFyZW50JiZlLnNldFBhcmVudCh0LnYsdC5wYXJlbnQpfSkpLHIuZWFjaCh0LmVkZ2VzLChmdW5jdGlvbih0KXtlLnNldEVkZ2Uoe3Y6dC52LHc6dC53LG5hbWU6dC5uYW1lfSx0LnZhbHVlKX0pKSxlfX19LDkxMjY6KHQsZSxuKT0+e3ZhciByO3RyeXtyPXtjbG9uZTpuKDY2NzgpLGNvbnN0YW50Om4oNTcwMyksZWFjaDpuKDYwNzMpLGZpbHRlcjpuKDMxMDUpLGhhczpuKDg3MjEpLGlzQXJyYXk6bigxNDY5KSxpc0VtcHR5Om4oMTYwOSksaXNGdW5jdGlvbjpuKDM1NjApLGlzVW5kZWZpbmVkOm4oMjM1Myksa2V5czpuKDM2NzQpLG1hcDpuKDUxNjEpLHJlZHVjZTpuKDQwNjEpLHNpemU6big0MjM4KSx0cmFuc2Zvcm06big4NzE4KSx1bmlvbjpuKDMzODYpLHZhbHVlczpuKDI2MjgpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSw5NjMxOnQ9Pnt0LmV4cG9ydHM9IjIuMS44In0sMTc3MzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big3NjI4KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuY29sb3I9ZSx0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPXQsdGhpcy50eXBlPW5ldyBpLmRlZmF1bHR9cmV0dXJuIHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZS50eXBlPTAsdGhpc30sdC5wcm90b3R5cGUuX2Vuc3VyZUhTTD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuaCxuPXQucyxpPXQubDt2b2lkIDA9PT1lJiYodC5oPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwiaCIpKSx2b2lkIDA9PT1uJiYodC5zPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwicyIpKSx2b2lkIDA9PT1pJiYodC5sPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwibCIpKX0sdC5wcm90b3R5cGUuX2Vuc3VyZVJHQj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQucixuPXQuZyxpPXQuYjt2b2lkIDA9PT1lJiYodC5yPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiciIpKSx2b2lkIDA9PT1uJiYodC5nPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiZyIpKSx2b2lkIDA9PT1pJiYodC5iPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiYiIpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5yO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiciIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgxKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImciLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmc7cmV0dXJuIHRoaXMudHlwZS5pcygyKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0LCJnIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDEpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuYjtyZXR1cm4gdGhpcy50eXBlLmlzKDIpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImIiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMSksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5iPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5oO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwiaCIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgyKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmg9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LnM7cmV0dXJuIHRoaXMudHlwZS5pcygxKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0LCJzIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQubDtyZXR1cm4gdGhpcy50eXBlLmlzKDEpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5sPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5hPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtlLmRlZmF1bHQ9YX0sODE2NzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uZXcobigxNzczKS5kZWZhdWx0KSh7cjowLGc6MCxiOjAsYTowfSwidHJhbnNwYXJlbnQiKTtlLmRlZmF1bHQ9cn0sNzYyODoodCxlKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy50eXBlPTB9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGV9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT10fSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMudHlwZT0wfSx0LnByb3RvdHlwZS5pcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50eXBlPT09dH0sdH0oKTtlLmRlZmF1bHQ9bn0sMTY1NToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDgxNjcpLGk9big2MDYxKSxhPXtyZTovXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLHBhcnNlOmZ1bmN0aW9uKHQpe2lmKDM1PT09dC5jaGFyQ29kZUF0KDApKXt2YXIgZT10Lm1hdGNoKGEucmUpO2lmKGUpe3ZhciBuPWVbMV0saT1wYXJzZUludChuLDE2KSxvPW4ubGVuZ3RoLHM9byU0PT0wLGM9bz40LHU9Yz8xOjE3LGw9Yz84OjQsaD1zPzA6LTEsZj1jPzI1NToxNTtyZXR1cm4gci5kZWZhdWx0LnNldCh7cjooaT4+bCooaCszKSZmKSp1LGc6KGk+PmwqKGgrMikmZikqdSxiOihpPj5sKihoKzEpJmYpKnUsYTpzPyhpJmYpKnUvMjU1OjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT10LnIsbj10Lmcscj10LmIsYT10LmE7cmV0dXJuIGE8MT8iIyIraS5ERUMySEVYW01hdGgucm91bmQoZSldK2kuREVDMkhFWFtNYXRoLnJvdW5kKG4pXStpLkRFQzJIRVhbTWF0aC5yb3VuZChyKV0raS5ERUMySEVYW01hdGgucm91bmQoMjU1KmEpXToiIyIraS5ERUMySEVYW01hdGgucm91bmQoZSldK2kuREVDMkhFWFtNYXRoLnJvdW5kKG4pXStpLkRFQzJIRVhbTWF0aC5yb3VuZChyKV19fTtlLmRlZmF1bHQ9YX0sODU4OToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MTY3KSxhPXtyZTovXmhzbGE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oJSk/KSk/XHMqP1wpJC9pLGh1ZVJlOi9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLF9odWUyZGVnOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYS5odWVSZSk7aWYoZSl7dmFyIG49ZVsxXTtzd2l0Y2goZVsyXSl7Y2FzZSJncmFkIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCguOSpwYXJzZUZsb2F0KG4pKTtjYXNlInJhZCI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoMTgwKnBhcnNlRmxvYXQobikvTWF0aC5QSSk7Y2FzZSJ0dXJuIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCgzNjAqcGFyc2VGbG9hdChuKSl9fXJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodCkpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTA0PT09ZXx8NzI9PT1lKXt2YXIgbj10Lm1hdGNoKGEucmUpO2lmKG4pe3ZhciBvPW5bMV0scz1uWzJdLGM9blszXSx1PW5bNF0sbD1uWzVdO3JldHVybiBpLmRlZmF1bHQuc2V0KHtoOmEuX2h1ZTJkZWcobyksczpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5zKHBhcnNlRmxvYXQocykpLGw6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KGMpKSxhOnU/ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShsP3BhcnNlRmxvYXQodSkvMTAwOnBhcnNlRmxvYXQodSkpOjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT10Lmgsbj10LnMsaT10LmwsYT10LmE7cmV0dXJuIGE8MT8iaHNsYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGUpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQobikrIiUsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoaSkrIiUsICIrYSsiKSI6ImhzbCgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGUpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQobikrIiUsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoaSkrIiUpIn19O2UuZGVmYXVsdD1hfSwyMTkxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTY1NSksaT1uKDc1MzgpLGE9big2NzYyKSxvPW4oODU4OSkscz17Zm9ybWF0OntrZXl3b3JkOmkuZGVmYXVsdCxoZXg6ci5kZWZhdWx0LHJnYjphLmRlZmF1bHQscmdiYTphLmRlZmF1bHQsaHNsOm8uZGVmYXVsdCxoc2xhOm8uZGVmYXVsdH0scGFyc2U6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXIuZGVmYXVsdC5wYXJzZSh0KXx8YS5kZWZhdWx0LnBhcnNlKHQpfHxvLmRlZmF1bHQucGFyc2UodCl8fGkuZGVmYXVsdC5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJyt0KyciJyl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKDIpfHx2b2lkIDA9PT10LmRhdGEucj9vLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnQuYTwxfHwhTnVtYmVyLmlzSW50ZWdlcih0LnIpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmcpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmIpP2EuZGVmYXVsdC5zdHJpbmdpZnkodCk6ci5kZWZhdWx0LnN0cmluZ2lmeSh0KX19O2UuZGVmYXVsdD1zfSw3NTM4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTY1NSksaT17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOmZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO3ZhciBlPWkuY29sb3JzW3RdO2lmKGUpcmV0dXJuIHIuZGVmYXVsdC5wYXJzZShlKX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXIuZGVmYXVsdC5zdHJpbmdpZnkodCk7Zm9yKHZhciBuIGluIGkuY29sb3JzKWlmKGkuY29sb3JzW25dPT09ZSlyZXR1cm4gbn19O2UuZGVmYXVsdD1pfSw2NzYyOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT1uKDgxNjcpLGE9e3JlOi9ecmdiYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSk/XHMqP1wpJC9pLHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMTQ9PT1lfHw4Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV0saD1uWzZdLGY9bls3XSxkPW5bOF07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe3I6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucihzPzIuNTUqcGFyc2VGbG9hdChvKTpwYXJzZUZsb2F0KG8pKSxnOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmcodT8yLjU1KnBhcnNlRmxvYXQoYyk6cGFyc2VGbG9hdChjKSksYjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5iKGg/Mi41NSpwYXJzZUZsb2F0KGwpOnBhcnNlRmxvYXQobCkpLGE6Zj9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGQ/cGFyc2VGbG9hdChmKS8xMDA6cGFyc2VGbG9hdChmKSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQucixuPXQuZyxpPXQuYixhPXQuYTtyZXR1cm4gYTwxPyJyZ2JhKCIrci5kZWZhdWx0Lmxhbmcucm91bmQoZSkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChuKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoYSkrIikiOiJyZ2IoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoaSkrIikifX07ZS5kZWZhdWx0PWF9LDYwNjE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPXt9O2UuREVDMkhFWD1pO2Zvcih2YXIgYT0wO2E8PTI1NTthKyspaVthXT1yLmRlZmF1bHQudW5pdC5kZWMyaGV4KGEpfSw4NjEzOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KWUuaGFzT3duUHJvcGVydHkobil8fChlW25dPXRbbl0pfShuKDEyMDMpKX0sNTM3MToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpLGk9big0MTgpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuZGVmYXVsdC5wYXJzZSh0KSxhPXt9O2Zvcih2YXIgbyBpbiBlKWVbb10mJihhW29dPW5bb10rZVtvXSk7cmV0dXJuIGkuZGVmYXVsdCh0LGEpfX0sMTQxNjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWkuZGVmYXVsdC5wYXJzZSh0KSxvPWFbZV0scz1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFtlXShvK24pO3JldHVybiBvIT09cyYmKGFbZV09cyksaS5kZWZhdWx0LnN0cmluZ2lmeShhKX19LDkzNTM6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2MTk3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJhIil9fSwzMzk0Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYiIpfX0sNDE4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZhciBuPWkuZGVmYXVsdC5wYXJzZSh0KTtmb3IodmFyIGEgaW4gZSluW2FdPXIuZGVmYXVsdC5jaGFubmVsLmNsYW1wW2FdKGVbYV0pO3JldHVybiBpLmRlZmF1bHQuc3RyaW5naWZ5KG4pfX0sNjE5NzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0Lmxhbmcucm91bmQoaS5kZWZhdWx0LnBhcnNlKHQpW2VdKX19LDczNjE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJoIiwxODApfX0sMzA0MjoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MzQ2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQodCksYT1pLmRlZmF1bHQoZSksbz1NYXRoLm1heChuLGEpLHM9TWF0aC5taW4obixhKSxjPShvK051bWJlci5FUFNJTE9OKS8ocytOdW1iZXIuRVBTSUxPTik7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHIuZGVmYXVsdC5sYW5nLmNsYW1wKGMsMSwxMCkpfX0sMTM2NDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0MTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwibCIsLWUpfX0sOTYxMDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0MTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwicyIsLWUpfX0sNTcyOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNDE4KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LHtzOjB9KX19LDIyOTk6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2MTk3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJnIil9fSwzMTE2Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTA4MyksaT1uKDgxNjcpLGE9bigyMTkxKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4sbyl7dm9pZCAwPT09byYmKG89MSk7dmFyIHM9aS5kZWZhdWx0LnNldCh7aDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKHQpLHM6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucyhlKSxsOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmwobiksYTpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKG8pfSk7cmV0dXJuIGEuZGVmYXVsdC5zdHJpbmdpZnkocyl9fSwzMDA4Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIpfX0sMTIwMzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDY1MzgpO2UuaGV4PXIuZGVmYXVsdDt2YXIgaT1uKDY1MzgpO2UucmdiPWkuZGVmYXVsdDt2YXIgYT1uKDY1MzgpO2UucmdiYT1hLmRlZmF1bHQ7dmFyIG89bigzMTE2KTtlLmhzbD1vLmRlZmF1bHQ7dmFyIHM9bigzMTE2KTtlLmhzbGE9cy5kZWZhdWx0O3ZhciBjPW4oMjYxOSk7ZS50b0tleXdvcmQ9Yy5kZWZhdWx0O3ZhciB1PW4oNDMwNyk7ZS50b0hleD11LmRlZmF1bHQ7dmFyIGw9big0MTI1KTtlLnRvUmdiYT1sLmRlZmF1bHQ7dmFyIGg9big3MzI5KTtlLnRvSHNsYT1oLmRlZmF1bHQ7dmFyIGY9big2MTk3KTtlLmNoYW5uZWw9Zi5kZWZhdWx0O3ZhciBkPW4oOTY0MCk7ZS5yZWQ9ZC5kZWZhdWx0O3ZhciBwPW4oMjI5OSk7ZS5ncmVlbj1wLmRlZmF1bHQ7dmFyIHk9bigzMzk0KTtlLmJsdWU9eS5kZWZhdWx0O3ZhciBnPW4oMzAwOCk7ZS5odWU9Zy5kZWZhdWx0O3ZhciBtPW4oNjQ1MSk7ZS5zYXR1cmF0aW9uPW0uZGVmYXVsdDt2YXIgdj1uKDkyMzUpO2UubGlnaHRuZXNzPXYuZGVmYXVsdDt2YXIgYj1uKDkzNTMpO2UuYWxwaGE9Yi5kZWZhdWx0O3ZhciBfPW4oOTM1Myk7ZS5vcGFjaXR5PV8uZGVmYXVsdDt2YXIgeD1uKDMwNDIpO2UuY29udHJhc3Q9eC5kZWZhdWx0O3ZhciB3PW4oODM0Nik7ZS5sdW1pbmFuY2U9dy5kZWZhdWx0O3ZhciBrPW4oNDExNyk7ZS5pc0Rhcms9ay5kZWZhdWx0O3ZhciBUPW4oMjIyNCk7ZS5pc0xpZ2h0PVQuZGVmYXVsdDt2YXIgRT1uKDU4NSk7ZS5pc1ZhbGlkPUUuZGVmYXVsdDt2YXIgQz1uKDEwODApO2Uuc2F0dXJhdGU9Qy5kZWZhdWx0O3ZhciBTPW4oOTYxMCk7ZS5kZXNhdHVyYXRlPVMuZGVmYXVsdDt2YXIgQT1uKDMyMzUpO2UubGlnaHRlbj1BLmRlZmF1bHQ7dmFyIE09bigxMzY0KTtlLmRhcmtlbj1NLmRlZmF1bHQ7dmFyIE49big3MTg5KTtlLm9wYWNpZnk9Ti5kZWZhdWx0O3ZhciBEPW4oNzE4OSk7ZS5mYWRlSW49RC5kZWZhdWx0O3ZhciBPPW4oNDk4OSk7ZS50cmFuc3BhcmVudGl6ZT1PLmRlZmF1bHQ7dmFyIEI9big0OTg5KTtlLmZhZGVPdXQ9Qi5kZWZhdWx0O3ZhciBMPW4oNzM2MSk7ZS5jb21wbGVtZW50PUwuZGVmYXVsdDt2YXIgST1uKDU3Mik7ZS5ncmF5c2NhbGU9SS5kZWZhdWx0O3ZhciBSPW4oNTM3MSk7ZS5hZGp1c3Q9Ui5kZWZhdWx0O3ZhciBGPW4oNDE4KTtlLmNoYW5nZT1GLmRlZmF1bHQ7dmFyIFA9big1NjYpO2UuaW52ZXJ0PVAuZGVmYXVsdDt2YXIgaj1uKDE4NjEpO2UubWl4PWouZGVmYXVsdDt2YXIgWT1uKDcwODEpO2Uuc2NhbGU9WS5kZWZhdWx0fSw1NjY6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMTkxKSxpPW4oMTg2MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MTAwKTt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCk7cmV0dXJuIG4ucj0yNTUtbi5yLG4uZz0yNTUtbi5nLG4uYj0yNTUtbi5iLGkuZGVmYXVsdChuLHQsZSl9fSw0MTE3Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjIyNCk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiFyLmRlZmF1bHQodCl9fSwyMjI0Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oODM0Nik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCk+PS41fX0sNTg1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gci5kZWZhdWx0LnBhcnNlKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19LDMyMzU6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImwiLGUpfX0sOTIzNToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYxOTcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImwiKX19LDgzNDY6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDgzKSxpPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPWkuZGVmYXVsdC5wYXJzZSh0KSxuPWUucixhPWUuZyxvPWUuYixzPS4yMTI2KnIuZGVmYXVsdC5jaGFubmVsLnRvTGluZWFyKG4pKy43MTUyKnIuZGVmYXVsdC5jaGFubmVsLnRvTGluZWFyKGEpKy4wNzIyKnIuZGVmYXVsdC5jaGFubmVsLnRvTGluZWFyKG8pO3JldHVybiByLmRlZmF1bHQubGFuZy5yb3VuZChzKX19LDE4NjE6KHQsZSxuKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyMTkxKSxpPW4oNjUzOCk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj01MCk7dmFyIGE9ci5kZWZhdWx0LnBhcnNlKHQpLG89YS5yLHM9YS5nLGM9YS5iLHU9YS5hLGw9ci5kZWZhdWx0LnBhcnNlKGUpLGg9bC5yLGY9bC5nLGQ9bC5iLHA9bC5hLHk9bi8xMDAsZz0yKnktMSxtPXUtcCx2PSgoZyptPT0tMT9nOihnK20pLygxK2cqbSkpKzEpLzIsYj0xLXYsXz1vKnYraCpiLHg9cyp2K2YqYix3PWMqditkKmIsaz11KnkrcCooMS15KTtyZXR1cm4gaS5kZWZhdWx0KF8seCx3LGspfX0sNzE4OToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0MTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsZSl9fSw5NjQwOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiciIpfX0sNjUzODoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9big4MTY3KSxhPW4oMjE5MSksbz1uKDQxOCk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuLHMpe2lmKHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PXMmJihzPTEpLCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gby5kZWZhdWx0KHQse2E6ZX0pO3ZhciBjPWkuZGVmYXVsdC5zZXQoe3I6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucih0KSxnOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmcoZSksYjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5iKG4pLGE6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShzKX0pO3JldHVybiBhLmRlZmF1bHQuc3RyaW5naWZ5KGMpfX0sMTA4MDoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE0MTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwicyIsZSl9fSw2NDUxOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNjE5Nyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwicyIpfX0sNzA4MToodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwODMpLGk9bigyMTkxKSxhPW4oNTM3MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxzLGM9aS5kZWZhdWx0LnBhcnNlKHQpLHU9e307Zm9yKHZhciBsIGluIGUpdVtsXT0obj1jW2xdLG89ZVtsXSxzPXIuZGVmYXVsdC5jaGFubmVsLm1heFtsXSxvPjA/KHMtbikqby8xMDA6bipvLzEwMCk7cmV0dXJuIGEuZGVmYXVsdCh0LHUpfX0sNDMwNzoodCxlLG4pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIxOTEpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5oZXguc3RyaW5naWZ5KHIuZGVmYXVsdC5wYXJzZSh0KSl9fSw3MzI5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LmhzbGEuc3RyaW5naWZ5KHIuZGVmYXVsdC5wYXJzZSh0KSl9fSwyNjE5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LmtleXdvcmQuc3RyaW5naWZ5KHIuZGVmYXVsdC5wYXJzZSh0KSl9fSw0MTI1Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjE5MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LnJnYmEuc3RyaW5naWZ5KHIuZGVmYXVsdC5wYXJzZSh0KSl9fSw0OTg5Oih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTQxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJhIiwtZSl9fSw3OTk0Oih0LGUpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGc6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxoOmZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MH0sczpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxsOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMDA/MTAwOnQ8MD8wOnR9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE/MTp0PDA/MDp0fX0sdG9MaW5lYXI6ZnVuY3Rpb24odCl7dmFyIGU9dC8yNTU7cmV0dXJuIHQ+LjAzOTI4P01hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCk6ZS8xMi45Mn0saHVlMnJnYjpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P3QrNiooZS10KSpuOm48LjU/ZTpuPDIvMz90KyhlLXQpKigyLzMtbikqNjp0fSxoc2wycmdiOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5oLGk9dC5zLGE9dC5sO2lmKCFpKXJldHVybiAyLjU1KmE7ci89MzYwLGkvPTEwMDt2YXIgbz0oYS89MTAwKTwuNT9hKigxK2kpOmEraS1hKmkscz0yKmEtbztzd2l0Y2goZSl7Y2FzZSJyIjpyZXR1cm4gMjU1Km4uaHVlMnJnYihzLG8scisxLzMpO2Nhc2UiZyI6cmV0dXJuIDI1NSpuLmh1ZTJyZ2IocyxvLHIpO2Nhc2UiYiI6cmV0dXJuIDI1NSpuLmh1ZTJyZ2IocyxvLHItMS8zKX19LHJnYjJoc2w6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnIscj10LmcsaT10LmI7bi89MjU1LHIvPTI1NSxpLz0yNTU7dmFyIGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpLHM9KGErbykvMjtpZigibCI9PT1lKXJldHVybiAxMDAqcztpZihhPT09bylyZXR1cm4gMDt2YXIgYz1hLW87aWYoInMiPT09ZSlyZXR1cm4gMTAwKihzPi41P2MvKDItYS1vKTpjLyhhK28pKTtzd2l0Y2goYSl7Y2FzZSBuOnJldHVybiA2MCooKHItaSkvYysocjxpPzY6MCkpO2Nhc2UgcjpyZXR1cm4gNjAqKChpLW4pL2MrMik7Y2FzZSBpOnJldHVybiA2MCooKG4tcikvYys0KTtkZWZhdWx0OnJldHVybi0xfX19O2UuZGVmYXVsdD1ufSwxMDgzOih0LGUsbik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNzk5NCksaT1uKDQwMjcpLGE9bigzMTgpLG89e2NoYW5uZWw6ci5kZWZhdWx0LGxhbmc6aS5kZWZhdWx0LHVuaXQ6YS5kZWZhdWx0fTtlLmRlZmF1bHQ9b30sNDAyNzoodCxlKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e2NsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT5uP01hdGgubWluKGUsTWF0aC5tYXgobix0KSk6TWF0aC5taW4obixNYXRoLm1heChlLHQpKX0scm91bmQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMWUxMCp0KS8xZTEwfX07ZS5kZWZhdWx0PW59LDMxODoodCxlKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e2RlYzJoZXg6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZToiMCIrZX19O2UuZGVmYXVsdD1ufSw4NTUyOih0LGUsbik9Pnt2YXIgcj1uKDg1Mikobig1NjM5KSwiRGF0YVZpZXciKTt0LmV4cG9ydHM9cn0sMTk4OToodCxlLG4pPT57dmFyIHI9bigxNzg5KSxpPW4oNDAxKSxhPW4oNzY2Nyksbz1uKDEzMjcpLHM9bigxODY2KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LDg0MDc6KHQsZSxuKT0+e3ZhciByPW4oNzA0MCksaT1uKDEzNjIpLGE9bigyMTE3KSxvPW4oNzUxOCkscz1uKDQ3MDUpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sNzA3MToodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIk1hcCIpO3QuZXhwb3J0cz1yfSwzMzY5Oih0LGUsbik9Pnt2YXIgcj1uKDQ3ODUpLGk9bigxMjg1KSxhPW4oNmUzKSxvPW4oOTkxNikscz1uKDUyNjUpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sMzgxODoodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIlByb21pc2UiKTt0LmV4cG9ydHM9cn0sODUyNToodCxlLG4pPT57dmFyIHI9big4NTIpKG4oNTYzOSksIlNldCIpO3QuZXhwb3J0cz1yfSw4NjY4Oih0LGUsbik9Pnt2YXIgcj1uKDMzNjkpLGk9big2MTkpLGE9bigyMzg1KTtmdW5jdGlvbiBvKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyByOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1vLnByb3RvdHlwZS5hZGQ9by5wcm90b3R5cGUucHVzaD1pLG8ucHJvdG90eXBlLmhhcz1hLHQuZXhwb3J0cz1vfSw2Mzg0Oih0LGUsbik9Pnt2YXIgcj1uKDg0MDcpLGk9big3NDY1KSxhPW4oMzc3OSksbz1uKDc1OTkpLHM9big0NzU4KSxjPW4oNDMwOSk7ZnVuY3Rpb24gdSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyByKHQpO3RoaXMuc2l6ZT1lLnNpemV9dS5wcm90b3R5cGUuY2xlYXI9aSx1LnByb3RvdHlwZS5kZWxldGU9YSx1LnByb3RvdHlwZS5nZXQ9byx1LnByb3RvdHlwZS5oYXM9cyx1LnByb3RvdHlwZS5zZXQ9Yyx0LmV4cG9ydHM9dX0sMjcwNToodCxlLG4pPT57dmFyIHI9big1NjM5KS5TeW1ib2w7dC5leHBvcnRzPXJ9LDExNDk6KHQsZSxuKT0+e3ZhciByPW4oNTYzOSkuVWludDhBcnJheTt0LmV4cG9ydHM9cn0sNTc3Oih0LGUsbik9Pnt2YXIgcj1uKDg1Mikobig1NjM5KSwiV2Vha01hcCIpO3QuZXhwb3J0cz1yfSw2ODc0OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxuWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX19LDc0MTI6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248ciYmITEhPT1lKHRbbl0sbix0KTspO3JldHVybiB0fX0sNDk2Mzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoLGk9MCxhPVtdOysrbjxyOyl7dmFyIG89dFtuXTtlKG8sbix0KSYmKGFbaSsrXT1vKX1yZXR1cm4gYX19LDc0NDM6KHQsZSxuKT0+e3ZhciByPW4oMjExOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIShudWxsPT10fHwhdC5sZW5ndGgpJiZyKHQsZSwwKT4tMX19LDExOTY6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrcjxpOylpZihuKGUsdFtyXSkpcmV0dXJuITA7cmV0dXJuITF9fSw0NjM2Oih0LGUsbik9Pnt2YXIgcj1uKDI1NDUpLGk9big1Njk0KSxhPW4oMTQ2OSksbz1uKDQxNDQpLHM9big1Nzc2KSxjPW4oNjcxOSksdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodCksbD0hbiYmaSh0KSxoPSFuJiYhbCYmbyh0KSxmPSFuJiYhbCYmIWgmJmModCksZD1ufHxsfHxofHxmLHA9ZD9yKHQubGVuZ3RoLFN0cmluZyk6W10seT1wLmxlbmd0aDtmb3IodmFyIGcgaW4gdCkhZSYmIXUuY2FsbCh0LGcpfHxkJiYoImxlbmd0aCI9PWd8fGgmJigib2Zmc2V0Ij09Z3x8InBhcmVudCI9PWcpfHxmJiYoImJ1ZmZlciI9PWd8fCJieXRlTGVuZ3RoIj09Z3x8ImJ5dGVPZmZzZXQiPT1nKXx8cyhnLHkpKXx8cC5wdXNoKGcpO3JldHVybiBwfX0sOTkzMjp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoLGk9QXJyYXkocik7KytuPHI7KWlbbl09ZSh0W25dLG4sdCk7cmV0dXJuIGl9fSwyNDg4OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxpPXQubGVuZ3RoOysrbjxyOyl0W2krbl09ZVtuXTtyZXR1cm4gdH19LDI2NjM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0tMSxhPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IociYmYSYmKG49dFsrK2ldKTsrK2k8YTspbj1lKG4sdFtpXSxpLHQpO3JldHVybiBufX0sMjkwODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxyOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX19LDg5ODM6KHQsZSxuKT0+e3ZhciByPW4oMzcxKSgibGVuZ3RoIik7dC5leHBvcnRzPXJ9LDY1NTY6KHQsZSxuKT0+e3ZhciByPW4oOTQ2NSksaT1uKDc4MTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7KHZvaWQgMCE9PW4mJiFpKHRbZV0sbil8fHZvaWQgMD09PW4mJiEoZSBpbiB0KSkmJnIodCxlLG4pfX0sNDg2NToodCxlLG4pPT57dmFyIHI9big5NDY1KSxpPW4oNzgxMyksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89dFtlXTthLmNhbGwodCxlKSYmaShvLG4pJiYodm9pZCAwIT09bnx8ZSBpbiB0KXx8cih0LGUsbil9fSw4NDcwOih0LGUsbik9Pnt2YXIgcj1uKDc4MTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKHIodFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX19LDQwMzc6KHQsZSxuKT0+e3ZhciByPW4oODM2MyksaT1uKDM2NzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKGUsaShlKSx0KX19LDM4ODY6KHQsZSxuKT0+e3ZhciByPW4oODM2MyksaT1uKDE3MDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKGUsaShlKSx0KX19LDk0NjU6KHQsZSxuKT0+e3ZhciByPW4oODc3Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXsiX19wcm90b19fIj09ZSYmcj9yKHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOnRbZV09bn19LDU5OTA6KHQsZSxuKT0+e3ZhciByPW4oNjM4NCksaT1uKDc0MTIpLGE9big0ODY1KSxvPW4oNDAzNykscz1uKDM4ODYpLGM9big0NjI2KSx1PW4oMjc4KSxsPW4oODgwNSksaD1uKDE5MTEpLGY9big4MjM0KSxkPW4oNjkwNCkscD1uKDQxNjApLHk9bigzODI0KSxnPW4oOTE0OCksbT1uKDg1MTcpLHY9bigxNDY5KSxiPW4oNDE0NCksXz1uKDY2ODgpLHg9bigzMjE4KSx3PW4oMjkyOCksaz1uKDM2NzQpLFQ9bigxNzA0KSxFPSJbb2JqZWN0IEFyZ3VtZW50c10iLEM9IltvYmplY3QgRnVuY3Rpb25dIixTPSJbb2JqZWN0IE9iamVjdF0iLEE9e307QVtFXT1BWyJbb2JqZWN0IEFycmF5XSJdPUFbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09QVsiW29iamVjdCBEYXRhVmlld10iXT1BWyJbb2JqZWN0IEJvb2xlYW5dIl09QVsiW29iamVjdCBEYXRlXSJdPUFbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUFbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUFbIltvYmplY3QgSW50OEFycmF5XSJdPUFbIltvYmplY3QgSW50MTZBcnJheV0iXT1BWyJbb2JqZWN0IEludDMyQXJyYXldIl09QVsiW29iamVjdCBNYXBdIl09QVsiW29iamVjdCBOdW1iZXJdIl09QVtTXT1BWyJbb2JqZWN0IFJlZ0V4cF0iXT1BWyJbb2JqZWN0IFNldF0iXT1BWyJbb2JqZWN0IFN0cmluZ10iXT1BWyJbb2JqZWN0IFN5bWJvbF0iXT1BWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09QVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1BWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUFbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsQVsiW29iamVjdCBFcnJvcl0iXT1BW0NdPUFbIltvYmplY3QgV2Vha01hcF0iXT0hMSx0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sTSxOLEQsTyl7dmFyIEIsTD0xJm4sST0yJm4sUj00Jm47aWYoTSYmKEI9RD9NKGUsTixELE8pOk0oZSkpLHZvaWQgMCE9PUIpcmV0dXJuIEI7aWYoIXgoZSkpcmV0dXJuIGU7dmFyIEY9dihlKTtpZihGKXtpZihCPXkoZSksIUwpcmV0dXJuIHUoZSxCKX1lbHNle3ZhciBQPXAoZSksaj1QPT1DfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1QO2lmKGIoZSkpcmV0dXJuIGMoZSxMKTtpZihQPT1TfHxQPT1FfHxqJiYhRCl7aWYoQj1JfHxqP3t9Om0oZSksIUwpcmV0dXJuIEk/aChlLHMoQixlKSk6bChlLG8oQixlKSl9ZWxzZXtpZighQVtQXSlyZXR1cm4gRD9lOnt9O0I9ZyhlLFAsTCl9fU98fChPPW5ldyByKTt2YXIgWT1PLmdldChlKTtpZihZKXJldHVybiBZO08uc2V0KGUsQiksdyhlKT9lLmZvckVhY2goKGZ1bmN0aW9uKHIpe0IuYWRkKHQocixuLE0scixlLE8pKX0pKTpfKGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7Qi5zZXQoaSx0KHIsbixNLGksZSxPKSl9KSk7dmFyIHo9Rj92b2lkIDA6KFI/ST9kOmY6ST9UOmspKGUpO3JldHVybiBpKHp8fGUsKGZ1bmN0aW9uKHIsaSl7eiYmKHI9ZVtpPXJdKSxhKEIsaSx0KHIsbixNLGksZSxPKSl9KSksQn19LDMxMTg6KHQsZSxuKT0+e3ZhciByPW4oMzIxOCksaT1PYmplY3QuY3JlYXRlLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiBmdW5jdGlvbihlKXtpZighcihlKSlyZXR1cm57fTtpZihpKXJldHVybiBpKGUpO3QucHJvdG90eXBlPWU7dmFyIG49bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxufX0oKTt0LmV4cG9ydHM9YX0sOTg4MToodCxlLG4pPT57dmFyIHI9big3ODE2KSxpPW4oOTI5MSkocik7dC5leHBvcnRzPWl9LDYwMjk6KHQsZSxuKT0+e3ZhciByPW4oMzQ0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspe3ZhciBvPXRbaV0scz1lKG8pO2lmKG51bGwhPXMmJih2b2lkIDA9PT1jP3M9PXMmJiFyKHMpOm4ocyxjKSkpdmFyIGM9cyx1PW99cmV0dXJuIHV9fSw3NjA6KHQsZSxuKT0+e3ZhciByPW4oOTg4MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLGkpe2UodCxyLGkpJiZuLnB1c2godCl9KSksbn19LDE4NDg6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1uKyhyPzE6LTEpO3I/YS0tOisrYTxpOylpZihlKHRbYV0sYSx0KSlyZXR1cm4gYTtyZXR1cm4tMX19LDEwNzg6KHQsZSxuKT0+e3ZhciByPW4oMjQ4OCksaT1uKDcyODUpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7dmFyIGM9LTEsdT1lLmxlbmd0aDtmb3IoYXx8KGE9aSksc3x8KHM9W10pOysrYzx1Oyl7dmFyIGw9ZVtjXTtuPjAmJmEobCk/bj4xP3QobCxuLTEsYSxvLHMpOnIocyxsKTpvfHwoc1tzLmxlbmd0aF09bCl9cmV0dXJuIHN9fSw4NDgzOih0LGUsbik9Pnt2YXIgcj1uKDUwNjMpKCk7dC5leHBvcnRzPXJ9LDc4MTY6KHQsZSxuKT0+e3ZhciByPW4oODQ4MyksaT1uKDM2NzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKHQsZSxpKX19LDc3ODY6KHQsZSxuKT0+e3ZhciByPW4oMTgxMSksaT1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAsYT0oZT1yKGUsdCkpLmxlbmd0aDtudWxsIT10JiZuPGE7KXQ9dFtpKGVbbisrXSldO3JldHVybiBuJiZuPT1hP3Q6dm9pZCAwfX0sODg2NjoodCxlLG4pPT57dmFyIHI9bigyNDg4KSxpPW4oMTQ2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1lKHQpO3JldHVybiBpKHQpP2E6cihhLG4odCkpfX0sNDIzOToodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPW4oOTYwNyksYT1uKDIzMzMpLG89cj9yLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6byYmbyBpbiBPYmplY3QodCk/aSh0KTphKHQpfX0sMzMyNTp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX19LDg1NjU6dD0+e3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGwhPXQmJmUuY2FsbCh0LG4pfX0sMTM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE9iamVjdCh0KX19LDIxMTg6KHQsZSxuKT0+e3ZhciByPW4oMTg0OCksaT1uKDI3MjIpLGE9bigyMzUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPT1lP2EodCxlLG4pOnIodCxpLG4pfX0sOTQ1NDoodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBBcmd1bWVudHNdIj09cih0KX19LDkzOToodCxlLG4pPT57dmFyIHI9bigyNDkyKSxpPW4oNzAwNSk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGEsbyxzKXtyZXR1cm4gZT09PW58fChudWxsPT1lfHxudWxsPT1ufHwhaShlKSYmIWkobik/ZSE9ZSYmbiE9bjpyKGUsbixhLG8sdCxzKSl9fSwyNDkyOih0LGUsbik9Pnt2YXIgcj1uKDYzODQpLGk9big3MTE0KSxhPW4oODM1MSksbz1uKDYwOTYpLHM9big0MTYwKSxjPW4oMTQ2OSksdT1uKDQxNDQpLGw9big2NzE5KSxoPSJbb2JqZWN0IEFyZ3VtZW50c10iLGY9IltvYmplY3QgQXJyYXldIixkPSJbb2JqZWN0IE9iamVjdF0iLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4seSxnLG0pe3ZhciB2PWModCksYj1jKGUpLF89dj9mOnModCkseD1iP2Y6cyhlKSx3PShfPV89PWg/ZDpfKT09ZCxrPSh4PXg9PWg/ZDp4KT09ZCxUPV89PXg7aWYoVCYmdSh0KSl7aWYoIXUoZSkpcmV0dXJuITE7dj0hMCx3PSExfWlmKFQmJiF3KXJldHVybiBtfHwobT1uZXcgciksdnx8bCh0KT9pKHQsZSxuLHksZyxtKTphKHQsZSxfLG4seSxnLG0pO2lmKCEoMSZuKSl7dmFyIEU9dyYmcC5jYWxsKHQsIl9fd3JhcHBlZF9fIiksQz1rJiZwLmNhbGwoZSwiX193cmFwcGVkX18iKTtpZihFfHxDKXt2YXIgUz1FP3QudmFsdWUoKTp0LEE9Qz9lLnZhbHVlKCk6ZTtyZXR1cm4gbXx8KG09bmV3IHIpLGcoUyxBLG4seSxtKX19cmV0dXJuISFUJiYobXx8KG09bmV3IHIpLG8odCxlLG4seSxnLG0pKX19LDU1ODg6KHQsZSxuKT0+e3ZhciByPW4oNDE2MCksaT1uKDcwMDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgTWFwXSI9PXIodCl9fSwyOTU4Oih0LGUsbik9Pnt2YXIgcj1uKDYzODQpLGk9big5MzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz1uLmxlbmd0aCxzPW8sYz0hYTtpZihudWxsPT10KXJldHVybiFzO2Zvcih0PU9iamVjdCh0KTtvLS07KXt2YXIgdT1uW29dO2lmKGMmJnVbMl0/dVsxXSE9PXRbdVswXV06ISh1WzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK288czspe3ZhciBsPSh1PW5bb10pWzBdLGg9dFtsXSxmPXVbMV07aWYoYyYmdVsyXSl7aWYodm9pZCAwPT09aCYmIShsIGluIHQpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IHI7aWYoYSl2YXIgcD1hKGgsZixsLHQsZSxkKTtpZighKHZvaWQgMD09PXA/aShmLGgsMyxhLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH19LDI3MjI6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19LDg0NTg6KHQsZSxuKT0+e3ZhciByPW4oMzU2MCksaT1uKDUzNDYpLGE9bigzMjE4KSxvPW4oMzQ2KSxzPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGM9RnVuY3Rpb24ucHJvdG90eXBlLHU9T2JqZWN0LnByb3RvdHlwZSxsPWMudG9TdHJpbmcsaD11Lmhhc093blByb3BlcnR5LGY9UmVnRXhwKCJeIitsLmNhbGwoaCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEoIWEodCl8fGkodCkpJiYocih0KT9mOnMpLnRlc3Qobyh0KSl9fSw5MjIxOih0LGUsbik9Pnt2YXIgcj1uKDQxNjApLGk9big3MDA1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IFNldF0iPT1yKHQpfX0sODc0OToodCxlLG4pPT57dmFyIHI9big0MjM5KSxpPW4oMTc4MCksYT1uKDcwMDUpLG89e307b1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09b1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09b1siW29iamVjdCBJbnQ4QXJyYXldIl09b1siW29iamVjdCBJbnQxNkFycmF5XSJdPW9bIltvYmplY3QgSW50MzJBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPW9bIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsb1siW29iamVjdCBBcmd1bWVudHNdIl09b1siW29iamVjdCBBcnJheV0iXT1vWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPW9bIltvYmplY3QgQm9vbGVhbl0iXT1vWyJbb2JqZWN0IERhdGFWaWV3XSJdPW9bIltvYmplY3QgRGF0ZV0iXT1vWyJbb2JqZWN0IEVycm9yXSJdPW9bIltvYmplY3QgRnVuY3Rpb25dIl09b1siW29iamVjdCBNYXBdIl09b1siW29iamVjdCBOdW1iZXJdIl09b1siW29iamVjdCBPYmplY3RdIl09b1siW29iamVjdCBSZWdFeHBdIl09b1siW29iamVjdCBTZXRdIl09b1siW29iamVjdCBTdHJpbmddIl09b1siW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmaSh0Lmxlbmd0aCkmJiEhb1tyKHQpXX19LDcyMDY6KHQsZSxuKT0+e3ZhciByPW4oMTU3MyksaT1uKDY0MzIpLGE9big2NTU3KSxvPW4oMTQ2OSkscz1uKDk2MDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/YToib2JqZWN0Ij09dHlwZW9mIHQ/byh0KT9pKHRbMF0sdFsxXSk6cih0KTpzKHQpfX0sMjgwOih0LGUsbik9Pnt2YXIgcj1uKDU3MjYpLGk9big2OTE2KSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBpKHQpO3ZhciBlPVtdO2Zvcih2YXIgbiBpbiBPYmplY3QodCkpYS5jYWxsKHQsbikmJiJjb25zdHJ1Y3RvciIhPW4mJmUucHVzaChuKTtyZXR1cm4gZX19LDMxMzoodCxlLG4pPT57dmFyIHI9bigzMjE4KSxpPW4oNTcyNiksYT1uKDM0OTgpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJuIGEodCk7dmFyIGU9aSh0KSxuPVtdO2Zvcih2YXIgcyBpbiB0KSgiY29uc3RydWN0b3IiIT1zfHwhZSYmby5jYWxsKHQscykpJiZuLnB1c2gocyk7cmV0dXJuIG59fSw0MzM6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PGV9fSw5MTk5Oih0LGUsbik9Pnt2YXIgcj1uKDk4ODEpLGk9big4NjEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0tMSxhPWkodCk/QXJyYXkodC5sZW5ndGgpOltdO3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixpKXthWysrbl09ZSh0LHIsaSl9KSksYX19LDE1NzM6KHQsZSxuKT0+e3ZhciByPW4oMjk1OCksaT1uKDE0OTkpLGE9bigyNjM0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KTtyZXR1cm4gMT09ZS5sZW5ndGgmJmVbMF1bMl0/YShlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09dHx8cihuLHQsZSl9fX0sNjQzMjoodCxlLG4pPT57dmFyIHI9big5MzkpLGk9bigxOTE3KSxhPW4oOTA5NSksbz1uKDU0MDMpLHM9big5MTYyKSxjPW4oMjYzNCksdT1uKDMyNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCkmJnMoZSk/Yyh1KHQpLGUpOmZ1bmN0aW9uKG4pe3ZhciBvPWkobix0KTtyZXR1cm4gdm9pZCAwPT09byYmbz09PWU/YShuLHQpOnIoZSxvLDMpfX19LDI5ODA6KHQsZSxuKT0+e3ZhciByPW4oNjM4NCksaT1uKDY1NTYpLGE9big4NDgzKSxvPW4oOTc4Mykscz1uKDMyMTgpLGM9bigxNzA0KSx1PW4oNjM5MCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGwsaCxmKXtlIT09biYmYShuLChmdW5jdGlvbihhLGMpe2lmKGZ8fChmPW5ldyByKSxzKGEpKW8oZSxuLGMsbCx0LGgsZik7ZWxzZXt2YXIgZD1oP2godShlLGMpLGEsYysiIixlLG4sZik6dm9pZCAwO3ZvaWQgMD09PWQmJihkPWEpLGkoZSxjLGQpfX0pLGMpfX0sOTc4MzoodCxlLG4pPT57dmFyIHI9big2NTU2KSxpPW4oNDYyNiksYT1uKDcxMzMpLG89bigyNzgpLHM9big4NTE3KSxjPW4oNTY5NCksdT1uKDE0NjkpLGw9big5MjQ2KSxoPW4oNDE0NCksZj1uKDM1NjApLGQ9bigzMjE4KSxwPW4oODYzMCkseT1uKDY3MTkpLGc9big2MzkwKSxtPW4oMzY3OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHYsYixfLHgpe3ZhciB3PWcodCxuKSxrPWcoZSxuKSxUPXguZ2V0KGspO2lmKFQpcih0LG4sVCk7ZWxzZXt2YXIgRT1fP18odyxrLG4rIiIsdCxlLHgpOnZvaWQgMCxDPXZvaWQgMD09PUU7aWYoQyl7dmFyIFM9dShrKSxBPSFTJiZoKGspLE09IVMmJiFBJiZ5KGspO0U9ayxTfHxBfHxNP3Uodyk/RT13Omwodyk/RT1vKHcpOkE/KEM9ITEsRT1pKGssITApKTpNPyhDPSExLEU9YShrLCEwKSk6RT1bXTpwKGspfHxjKGspPyhFPXcsYyh3KT9FPW0odyk6ZCh3KSYmIWYodyl8fChFPXMoaykpKTpDPSExfUMmJih4LnNldChrLEUpLGIoRSxrLHYsXyx4KSx4LmRlbGV0ZShrKSkscih0LG4sRSl9fX0sOTU1NjoodCxlLG4pPT57dmFyIHI9big5OTMyKSxpPW4oNzc4NiksYT1uKDcyMDYpLG89big5MTk5KSxzPW4oMTEzMSksYz1uKDE3MTcpLHU9big1MDIyKSxsPW4oNjU1NyksaD1uKDE0NjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ZT1lLmxlbmd0aD9yKGUsKGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W2xdO3ZhciBmPS0xO2U9cihlLGMoYSkpO3ZhciBkPW8odCwoZnVuY3Rpb24odCxuLGkpe3JldHVybntjcml0ZXJpYTpyKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpLGluZGV4OisrZix2YWx1ZTp0fX0pKTtyZXR1cm4gcyhkLChmdW5jdGlvbih0LGUpe3JldHVybiB1KHQsZSxuKX0pKX19LDU5NzA6KHQsZSxuKT0+e3ZhciByPW4oMzAxMiksaT1uKDkwOTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gaSh0LG4pfSkpfX0sMzAxMjoodCxlLG4pPT57dmFyIHI9big3Nzg2KSxpPW4oNjExKSxhPW4oMTgxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIG89LTEscz1lLmxlbmd0aCxjPXt9OysrbzxzOyl7dmFyIHU9ZVtvXSxsPXIodCx1KTtuKGwsdSkmJmkoYyxhKHUsdCksbCl9cmV0dXJuIGN9fSwzNzE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19fX0sOTE1MjoodCxlLG4pPT57dmFyIHI9big3Nzg2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiByKGUsdCl9fX0sOTg6dD0+e3ZhciBlPU1hdGguY2VpbCxuPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LHIsaSxhKXtmb3IodmFyIG89LTEscz1uKGUoKHItdCkvKGl8fDEpKSwwKSxjPUFycmF5KHMpO3MtLTspY1thP3M6KytvXT10LHQrPWk7cmV0dXJuIGN9fSwxMDc6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBpKHQsKGZ1bmN0aW9uKHQsaSxhKXtuPXI/KHI9ITEsdCk6ZShuLHQsaSxhKX0pKSxufX0sNTk3NjoodCxlLG4pPT57dmFyIHI9big2NTU3KSxpPW4oNTM1NyksYT1uKDYxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShpKHQsZSxyKSx0KyIiKX19LDYxMToodCxlLG4pPT57dmFyIHI9big0ODY1KSxpPW4oMTgxMSksYT1uKDU3NzYpLG89bigzMjE4KSxzPW4oMzI3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYyl7aWYoIW8odCkpcmV0dXJuIHQ7Zm9yKHZhciB1PS0xLGw9KGU9aShlLHQpKS5sZW5ndGgsaD1sLTEsZj10O251bGwhPWYmJisrdTxsOyl7dmFyIGQ9cyhlW3VdKSxwPW47aWYoIl9fcHJvdG9fXyI9PT1kfHwiY29uc3RydWN0b3IiPT09ZHx8InByb3RvdHlwZSI9PT1kKXJldHVybiB0O2lmKHUhPWgpe3ZhciB5PWZbZF07dm9pZCAwPT09KHA9Yz9jKHksZCxmKTp2b2lkIDApJiYocD1vKHkpP3k6YShlW3UrMV0pP1tdOnt9KX1yKGYsZCxwKSxmPWZbZF19cmV0dXJuIHR9fSw2NTYwOih0LGUsbik9Pnt2YXIgcj1uKDU3MDMpLGk9big4Nzc3KSxhPW4oNjU1Nyksbz1pP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpyKGUpLHdyaXRhYmxlOiEwfSl9OmE7dC5leHBvcnRzPW99LDExMzE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7bi0tOyl0W25dPXRbbl0udmFsdWU7cmV0dXJuIHR9fSwyNTQ1OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1BcnJheSh0KTsrK248dDspcltuXT1lKG4pO3JldHVybiByfX0sNTMxOih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9big5OTMyKSxhPW4oMTQ2OSksbz1uKDM0NDgpLHM9cj9yLnByb3RvdHlwZTp2b2lkIDAsYz1zP3MudG9TdHJpbmc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihhKGUpKXJldHVybiBpKGUsdCkrIiI7aWYobyhlKSlyZXR1cm4gYz9jLmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59fSw3NTYxOih0LGUsbik9Pnt2YXIgcj1uKDc5OTApLGk9L15ccysvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD90LnNsaWNlKDAscih0KSsxKS5yZXBsYWNlKGksIiIpOnR9fSwxNzE3OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX19LDU2NTI6KHQsZSxuKT0+e3ZhciByPW4oODY2OCksaT1uKDc0NDMpLGE9bigxMTk2KSxvPW4oNDc1Nykscz1uKDM1OTMpLGM9bigxODE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB1PS0xLGw9aSxoPXQubGVuZ3RoLGY9ITAsZD1bXSxwPWQ7aWYobilmPSExLGw9YTtlbHNlIGlmKGg+PTIwMCl7dmFyIHk9ZT9udWxsOnModCk7aWYoeSlyZXR1cm4gYyh5KTtmPSExLGw9byxwPW5ldyByfWVsc2UgcD1lP1tdOmQ7dDpmb3IoOysrdTxoOyl7dmFyIGc9dFt1XSxtPWU/ZShnKTpnO2lmKGc9bnx8MCE9PWc/ZzowLGYmJm09PW0pe2Zvcih2YXIgdj1wLmxlbmd0aDt2LS07KWlmKHBbdl09PT1tKWNvbnRpbnVlIHQ7ZSYmcC5wdXNoKG0pLGQucHVzaChnKX1lbHNlIGwocCxtLG4pfHwocCE9PWQmJnAucHVzaChtKSxkLnB1c2goZykpfXJldHVybiBkfX0sNzQxNToodCxlLG4pPT57dmFyIHI9big5OTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihlLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LDE3NTc6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPS0xLGk9dC5sZW5ndGgsYT1lLmxlbmd0aCxvPXt9OysrcjxpOyl7dmFyIHM9cjxhP2Vbcl06dm9pZCAwO24obyx0W3JdLHMpfXJldHVybiBvfX0sNDc1Nzp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaGFzKGUpfX0sNDI5MDoodCxlLG4pPT57dmFyIHI9big2NTU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyfX0sMTgxMToodCxlLG4pPT57dmFyIHI9bigxNDY5KSxpPW4oNTQwMyksYT1uKDU1MTQpLG89big5ODMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KT90OmkodCxlKT9bdF06YShvKHQpKX19LDQzMTg6KHQsZSxuKT0+e3ZhciByPW4oMTE0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyByKGUpLnNldChuZXcgcih0KSksZX19LDQ2MjY6KHQsZSxuKT0+e3Q9bi5ubWQodCk7dmFyIHI9big1NjM5KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmdCYmIXQubm9kZVR5cGUmJnQsbz1hJiZhLmV4cG9ydHM9PT1pP3IuQnVmZmVyOnZvaWQgMCxzPW8/by5hbGxvY1Vuc2FmZTp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciBuPXQubGVuZ3RoLHI9cz9zKG4pOm5ldyB0LmNvbnN0cnVjdG9yKG4pO3JldHVybiB0LmNvcHkocikscn19LDcxNTc6KHQsZSxuKT0+e3ZhciByPW4oNDMxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT9yKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX19LDMxNDc6dD0+e3ZhciBlPS9cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2UsZS5leGVjKHQpKTtyZXR1cm4gbi5sYXN0SW5kZXg9dC5sYXN0SW5kZXgsbn19LDQxOToodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPXI/ci5wcm90b3R5cGU6dm9pZCAwLGE9aT9pLnZhbHVlT2Y6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYT9PYmplY3QoYS5jYWxsKHQpKTp7fX19LDcxMzM6KHQsZSxuKT0+e3ZhciByPW4oNDMxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT9yKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfX0sNjM5MzoodCxlLG4pPT57dmFyIHI9bigzNDQ4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0IT09ZSl7dmFyIG49dm9pZCAwIT09dCxpPW51bGw9PT10LGE9dD09dCxvPXIodCkscz12b2lkIDAhPT1lLGM9bnVsbD09PWUsdT1lPT1lLGw9cihlKTtpZighYyYmIWwmJiFvJiZ0PmV8fG8mJnMmJnUmJiFjJiYhbHx8aSYmcyYmdXx8IW4mJnV8fCFhKXJldHVybiAxO2lmKCFpJiYhbyYmIWwmJnQ8ZXx8bCYmbiYmYSYmIWkmJiFvfHxjJiZuJiZhfHwhcyYmYXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9fSw1MDIyOih0LGUsbik9Pnt2YXIgcj1uKDYzOTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5jcml0ZXJpYSxvPWUuY3JpdGVyaWEscz1hLmxlbmd0aCxjPW4ubGVuZ3RoOysraTxzOyl7dmFyIHU9cihhW2ldLG9baV0pO2lmKHUpcmV0dXJuIGk+PWM/dTp1KigiZGVzYyI9PW5baV0/LTE6MSl9cmV0dXJuIHQuaW5kZXgtZS5pbmRleH19LDI3ODp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEscj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkocikpOysrbjxyOyllW25dPXRbbl07cmV0dXJuIGV9fSw4MzYzOih0LGUsbik9Pnt2YXIgcj1uKDQ4NjUpLGk9big5NDY1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89IW47bnx8KG49e30pO2Zvcih2YXIgcz0tMSxjPWUubGVuZ3RoOysrczxjOyl7dmFyIHU9ZVtzXSxsPWE/YShuW3VdLHRbdV0sdSxuLHQpOnZvaWQgMDt2b2lkIDA9PT1sJiYobD10W3VdKSxvP2kobix1LGwpOnIobix1LGwpfXJldHVybiBufX0sODgwNToodCxlLG4pPT57dmFyIHI9big4MzYzKSxpPW4oOTU1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxpKHQpLGUpfX0sMTkxMToodCxlLG4pPT57dmFyIHI9big4MzYzKSxpPW4oMTQ0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxpKHQpLGUpfX0sNDQyOToodCxlLG4pPT57dmFyIHI9big1NjM5KVsiX19jb3JlLWpzX3NoYXJlZF9fIl07dC5leHBvcnRzPXJ9LDE3NTA6KHQsZSxuKT0+e3ZhciByPW4oNTk3NiksaT1uKDY2MTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oZSxuKXt2YXIgcj0tMSxhPW4ubGVuZ3RoLG89YT4xP25bYS0xXTp2b2lkIDAscz1hPjI/blsyXTp2b2lkIDA7Zm9yKG89dC5sZW5ndGg+MyYmImZ1bmN0aW9uIj09dHlwZW9mIG8/KGEtLSxvKTp2b2lkIDAscyYmaShuWzBdLG5bMV0scykmJihvPWE8Mz92b2lkIDA6byxhPTEpLGU9T2JqZWN0KGUpOysrcjxhOyl7dmFyIGM9bltyXTtjJiZ0KGUsYyxyLG8pfXJldHVybiBlfSkpfX0sOTI5MToodCxlLG4pPT57dmFyIHI9big4NjEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFyKG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciBhPW4ubGVuZ3RoLG89ZT9hOi0xLHM9T2JqZWN0KG4pOyhlP28tLTorK288YSkmJiExIT09aShzW29dLG8scyk7KTtyZXR1cm4gbn19fSw1MDYzOnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtmb3IodmFyIGk9LTEsYT1PYmplY3QoZSksbz1yKGUpLHM9by5sZW5ndGg7cy0tOyl7dmFyIGM9b1t0P3M6KytpXTtpZighMT09PW4oYVtjXSxjLGEpKWJyZWFrfXJldHVybiBlfX19LDc3NDA6KHQsZSxuKT0+e3ZhciByPW4oNzIwNiksaT1uKDg2MTIpLGE9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXt2YXIgcz1PYmplY3QoZSk7aWYoIWkoZSkpe3ZhciBjPXIobiwzKTtlPWEoZSksbj1mdW5jdGlvbih0KXtyZXR1cm4gYyhzW3RdLHQscyl9fXZhciB1PXQoZSxuLG8pO3JldHVybiB1Pi0xP3NbYz9lW3VdOnVdOnZvaWQgMH19fSw3NDQ1Oih0LGUsbik9Pnt2YXIgcj1uKDk4KSxpPW4oNjYxMiksYT1uKDg2MDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3JldHVybiBvJiYibnVtYmVyIiE9dHlwZW9mIG8mJmkoZSxuLG8pJiYobj1vPXZvaWQgMCksZT1hKGUpLHZvaWQgMD09PW4/KG49ZSxlPTApOm49YShuKSxvPXZvaWQgMD09PW8/ZTxuPzE6LTE6YShvKSxyKGUsbixvLHQpfX19LDM1OTM6KHQsZSxuKT0+e3ZhciByPW4oODUyNSksaT1uKDMwOCksYT1uKDE4MTQpLG89ciYmMS9hKG5ldyByKFssLTBdKSlbMV09PTEvMD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHIodCl9Omk7dC5leHBvcnRzPW99LDg3Nzc6KHQsZSxuKT0+e3ZhciByPW4oODUyKSxpPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXIoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KCk7dC5leHBvcnRzPWl9LDcxMTQ6KHQsZSxuKT0+e3ZhciByPW4oODY2OCksaT1uKDI5MDgpLGE9big0NzU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbyxzLGMpe3ZhciB1PTEmbixsPXQubGVuZ3RoLGg9ZS5sZW5ndGg7aWYobCE9aCYmISh1JiZoPmwpKXJldHVybiExO3ZhciBmPWMuZ2V0KHQpLGQ9Yy5nZXQoZSk7aWYoZiYmZClyZXR1cm4gZj09ZSYmZD09dDt2YXIgcD0tMSx5PSEwLGc9MiZuP25ldyByOnZvaWQgMDtmb3IoYy5zZXQodCxlKSxjLnNldChlLHQpOysrcDxsOyl7dmFyIG09dFtwXSx2PWVbcF07aWYobyl2YXIgYj11P28odixtLHAsZSx0LGMpOm8obSx2LHAsdCxlLGMpO2lmKHZvaWQgMCE9PWIpe2lmKGIpY29udGludWU7eT0hMTticmVha31pZihnKXtpZighaShlLChmdW5jdGlvbih0LGUpe2lmKCFhKGcsZSkmJihtPT09dHx8cyhtLHQsbixvLGMpKSlyZXR1cm4gZy5wdXNoKGUpfSkpKXt5PSExO2JyZWFrfX1lbHNlIGlmKG0hPT12JiYhcyhtLHYsbixvLGMpKXt5PSExO2JyZWFrfX1yZXR1cm4gYy5kZWxldGUodCksYy5kZWxldGUoZSkseX19LDgzNTE6KHQsZSxuKT0+e3ZhciByPW4oMjcwNSksaT1uKDExNDkpLGE9big3ODEzKSxvPW4oNzExNCkscz1uKDg3NzYpLGM9bigxODE0KSx1PXI/ci5wcm90b3R5cGU6dm9pZCAwLGw9dT91LnZhbHVlT2Y6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyLHUsaCxmKXtzd2l0Y2gobil7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhaChuZXcgaSh0KSxuZXcgaShlKSkpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuIGEoK3QsK2UpO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gdD09ZSsiIjtjYXNlIltvYmplY3QgTWFwXSI6dmFyIGQ9cztjYXNlIltvYmplY3QgU2V0XSI6dmFyIHA9MSZyO2lmKGR8fChkPWMpLHQuc2l6ZSE9ZS5zaXplJiYhcClyZXR1cm4hMTt2YXIgeT1mLmdldCh0KTtpZih5KXJldHVybiB5PT1lO3J8PTIsZi5zZXQodCxlKTt2YXIgZz1vKGQodCksZChlKSxyLHUsaCxmKTtyZXR1cm4gZi5kZWxldGUodCksZztjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYobClyZXR1cm4gbC5jYWxsKHQpPT1sLmNhbGwoZSl9cmV0dXJuITF9fSw2MDk2Oih0LGUsbik9Pnt2YXIgcj1uKDgyMzQpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSxvLHMpe3ZhciBjPTEmbix1PXIodCksbD11Lmxlbmd0aDtpZihsIT1yKGUpLmxlbmd0aCYmIWMpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9dVtoXTtpZighKGM/ZiBpbiBlOmkuY2FsbChlLGYpKSlyZXR1cm4hMX12YXIgZD1zLmdldCh0KSxwPXMuZ2V0KGUpO2lmKGQmJnApcmV0dXJuIGQ9PWUmJnA9PXQ7dmFyIHk9ITA7cy5zZXQodCxlKSxzLnNldChlLHQpO2Zvcih2YXIgZz1jOysraDxsOyl7dmFyIG09dFtmPXVbaF1dLHY9ZVtmXTtpZihhKXZhciBiPWM/YSh2LG0sZixlLHQscyk6YShtLHYsZix0LGUscyk7aWYoISh2b2lkIDA9PT1iP209PT12fHxvKG0sdixuLGEscyk6Yikpe3k9ITE7YnJlYWt9Z3x8KGc9ImNvbnN0cnVjdG9yIj09Zil9aWYoeSYmIWcpe3ZhciBfPXQuY29uc3RydWN0b3IseD1lLmNvbnN0cnVjdG9yO189PXh8fCEoImNvbnN0cnVjdG9yImluIHQpfHwhKCJjb25zdHJ1Y3RvciJpbiBlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIF8mJl8gaW5zdGFuY2VvZiBfJiYiZnVuY3Rpb24iPT10eXBlb2YgeCYmeCBpbnN0YW5jZW9mIHh8fCh5PSExKX1yZXR1cm4gcy5kZWxldGUodCkscy5kZWxldGUoZSkseX19LDkwMjE6KHQsZSxuKT0+e3ZhciByPW4oNTU2NCksaT1uKDUzNTcpLGE9big2MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCx2b2lkIDAsciksdCsiIil9fSwxOTU3Oih0LGUsbik9Pnt2YXIgcj0ib2JqZWN0Ij09dHlwZW9mIG4uZyYmbi5nJiZuLmcuT2JqZWN0PT09T2JqZWN0JiZuLmc7dC5leHBvcnRzPXJ9LDgyMzQ6KHQsZSxuKT0+e3ZhciByPW4oODg2NiksaT1uKDk1NTEpLGE9bigzNjc0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxhLGkpfX0sNjkwNDoodCxlLG4pPT57dmFyIHI9big4ODY2KSxpPW4oMTQ0MiksYT1uKDE3MDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGEsaSl9fSw1MDUwOih0LGUsbik9Pnt2YXIgcj1uKDcwMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuX19kYXRhX187cmV0dXJuIHIoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH19LDE0OTk6KHQsZSxuKT0+e3ZhciByPW4oOTE2MiksaT1uKDM2NzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0KSxuPWUubGVuZ3RoO24tLTspe3ZhciBhPWVbbl0sbz10W2FdO2Vbbl09W2EsbyxyKG8pXX1yZXR1cm4gZX19LDg1MjoodCxlLG4pPT57dmFyIHI9big4NDU4KSxpPW4oNzgwMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49aSh0LGUpO3JldHVybiByKG4pP246dm9pZCAwfX0sNTkyNDoodCxlLG4pPT57dmFyIHI9big1NTY5KShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmV4cG9ydHM9cn0sOTYwNzoodCxlLG4pPT57dmFyIHI9bigyNzA1KSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5LG89aS50b1N0cmluZyxzPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEuY2FsbCh0LHMpLG49dFtzXTt0cnl7dFtzXT12b2lkIDA7dmFyIHI9ITB9Y2F0Y2godCl7fXZhciBpPW8uY2FsbCh0KTtyZXR1cm4gciYmKGU/dFtzXT1uOmRlbGV0ZSB0W3NdKSxpfX0sOTU1MToodCxlLG4pPT57dmFyIHI9big0OTYzKSxpPW4oNDc5KSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHM9bz9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCkscihvKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKHQsZSl9KSkpfTppO3QuZXhwb3J0cz1zfSwxNDQyOih0LGUsbik9Pnt2YXIgcj1uKDI0ODgpLGk9big1OTI0KSxhPW4oOTU1MSksbz1uKDQ3OSkscz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylyKGUsYSh0KSksdD1pKHQpO3JldHVybiBlfTpvO3QuZXhwb3J0cz1zfSw0MTYwOih0LGUsbik9Pnt2YXIgcj1uKDg1NTIpLGk9big3MDcxKSxhPW4oMzgxOCksbz1uKDg1MjUpLHM9big1NzcpLGM9big0MjM5KSx1PW4oMzQ2KSxsPSJbb2JqZWN0IE1hcF0iLGg9IltvYmplY3QgUHJvbWlzZV0iLGY9IltvYmplY3QgU2V0XSIsZD0iW29iamVjdCBXZWFrTWFwXSIscD0iW29iamVjdCBEYXRhVmlld10iLHk9dShyKSxnPXUoaSksbT11KGEpLHY9dShvKSxiPXUocyksXz1jOyhyJiZfKG5ldyByKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1wfHxpJiZfKG5ldyBpKSE9bHx8YSYmXyhhLnJlc29sdmUoKSkhPWh8fG8mJl8obmV3IG8pIT1mfHxzJiZfKG5ldyBzKSE9ZCkmJihfPWZ1bmN0aW9uKHQpe3ZhciBlPWModCksbj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxyPW4/dShuKToiIjtpZihyKXN3aXRjaChyKXtjYXNlIHk6cmV0dXJuIHA7Y2FzZSBnOnJldHVybiBsO2Nhc2UgbTpyZXR1cm4gaDtjYXNlIHY6cmV0dXJuIGY7Y2FzZSBiOnJldHVybiBkfXJldHVybiBlfSksdC5leHBvcnRzPV99LDc4MDE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX0sMjIyOih0LGUsbik9Pnt2YXIgcj1uKDE4MTEpLGk9big1Njk0KSxhPW4oMTQ2OSksbz1uKDU3NzYpLHM9bigxNzgwKSxjPW4oMzI3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgdT0tMSxsPShlPXIoZSx0KSkubGVuZ3RoLGg9ITE7Kyt1PGw7KXt2YXIgZj1jKGVbdV0pO2lmKCEoaD1udWxsIT10JiZuKHQsZikpKWJyZWFrO3Q9dFtmXX1yZXR1cm4gaHx8Kyt1IT1sP2g6ISEobD1udWxsPT10PzA6dC5sZW5ndGgpJiZzKGwpJiZvKGYsbCkmJihhKHQpfHxpKHQpKX19LDI2ODk6dD0+e3ZhciBlPVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGUudGVzdCh0KX19LDE3ODk6KHQsZSxuKT0+e3ZhciByPW4oNDUzNik7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1yP3IobnVsbCk6e30sdGhpcy5zaXplPTB9fSw0MDE6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LDc2Njc6KHQsZSxuKT0+e3ZhciByPW4oNDUzNiksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKHIpe3ZhciBuPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09bj92b2lkIDA6bn1yZXR1cm4gaS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9fSwxMzI3Oih0LGUsbik9Pnt2YXIgcj1uKDQ1MzYpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gcj92b2lkIDAhPT1lW3RdOmkuY2FsbChlLHQpfX0sMTg2NjoodCxlLG4pPT57dmFyIHI9big0NTM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxuW3RdPXImJnZvaWQgMD09PWU/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmUsdGhpc319LDM4MjQ6dD0+e3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLHI9bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIG4mJiJzdHJpbmciPT10eXBlb2YgdFswXSYmZS5jYWxsKHQsImluZGV4IikmJihyLmluZGV4PXQuaW5kZXgsci5pbnB1dD10LmlucHV0KSxyfX0sOTE0ODoodCxlLG4pPT57dmFyIHI9big0MzE4KSxpPW4oNzE1NyksYT1uKDMxNDcpLG89big0MTkpLHM9big3MTMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiByKHQpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGMoK3QpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBpKHQsbik7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOmNhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpjYXNlIltvYmplY3QgSW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuIHModCxuKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBjKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gYSh0KTtjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gbyh0KX19fSw4NTE3Oih0LGUsbik9Pnt2YXIgcj1uKDMxMTgpLGk9big1OTI0KSxhPW4oNTcyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxhKHQpP3t9OnIoaSh0KSl9fSw3Mjg1Oih0LGUsbik9Pnt2YXIgcj1uKDI3MDUpLGk9big1Njk0KSxhPW4oMTQ2OSksbz1yP3IuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCl8fGkodCl8fCEhKG8mJnQmJnRbb10pfX0sNTc3Njp0PT57dmFyIGU9L14oPzowfFsxLTldXGQqKSQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPXR5cGVvZiB0O3JldHVybiEhKG49bnVsbD09bj85MDA3MTk5MjU0NzQwOTkxOm4pJiYoIm51bWJlciI9PXJ8fCJzeW1ib2wiIT1yJiZlLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8bn19LDY2MTI6KHQsZSxuKT0+e3ZhciByPW4oNzgxMyksaT1uKDg2MTIpLGE9big1Nzc2KSxvPW4oMzIxOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighbyhuKSlyZXR1cm4hMTt2YXIgcz10eXBlb2YgZTtyZXR1cm4hISgibnVtYmVyIj09cz9pKG4pJiZhKGUsbi5sZW5ndGgpOiJzdHJpbmciPT1zJiZlIGluIG4pJiZyKG5bZV0sdCl9fSw1NDAzOih0LGUsbik9Pnt2YXIgcj1uKDE0NjkpLGk9bigzNDQ4KSxhPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLG89L15cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFpKHQpKXx8by50ZXN0KHQpfHwhYS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX19LDcwMTk6dD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fX0sNTM0NjoodCxlLG4pPT57dmFyIHIsaT1uKDQ0MjkpLGE9KHI9L1teLl0rJC8uZXhlYyhpJiZpLmtleXMmJmkua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3I6IiI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhYSYmYSBpbiB0fX0sNTcyNjp0PT57dmFyIGU9T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5wcm90b3R5cGV8fGUpfX0sOTE2MjoodCxlLG4pPT57dmFyIHI9bigzMjE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sNzA0MDp0PT57dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH19LDEzNjI6KHQsZSxuKT0+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/TD98bHsxLDR9KS9nLFU9e30scT17fTtmdW5jdGlvbiAkKHQsZSxuLHIpe3ZhciBpPXI7InN0cmluZyI9PXR5cGVvZiByJiYoaT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKCl9KSx0JiYocVt0XT1pKSxlJiYocVtlWzBdXT1mdW5jdGlvbigpe3JldHVybiBqKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVbMV0sZVsyXSl9KSxuJiYocVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQpfSl9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT8oZT1XKGUsdC5sb2NhbGVEYXRhKCkpLFVbZV09VVtlXXx8ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9dC5tYXRjaChZKTtmb3IoZT0wLG49aS5sZW5ndGg7ZTxuO2UrKylxW2lbZV1dP2lbZV09cVtpW2VdXTppW2VdPShyPWlbZV0pLm1hdGNoKC9cW1tcc1xTXS8pP3IucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpyLnJlcGxhY2UoL1xcL2csIiIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixhPSIiO2ZvcihyPTA7cjxuO3IrKylhKz1OKGlbcl0pP2lbcl0uY2FsbChlLHQpOmlbcl07cmV0dXJuIGF9fShlKSxVW2VdKHQpKTp0LmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFcodCxlKXt2YXIgbj01O2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUubG9uZ0RhdGVGb3JtYXQodCl8fHR9Zm9yKHoubGFzdEluZGV4PTA7MDw9biYmei50ZXN0KHQpOyl0PXQucmVwbGFjZSh6LHIpLHoubGFzdEluZGV4PTAsbi09MTtyZXR1cm4gdH12YXIgVj0vXGQvLEc9L1xkXGQvLFg9L1xkezN9LyxaPS9cZHs0fS8sUT0vWystXT9cZHs2fS8sSz0vXGRcZD8vLEo9L1xkXGRcZFxkPy8sdHQ9L1xkXGRcZFxkXGRcZD8vLGV0PS9cZHsxLDN9LyxudD0vXGR7MSw0fS8scnQ9L1srLV0/XGR7MSw2fS8saXQ9L1xkKy8sYXQ9L1srLV0/XGQrLyxvdD0vWnxbKy1dXGRcZDo/XGRcZC9naSxzdD0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLGN0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksdXQ9e307ZnVuY3Rpb24gbHQodCxlLG4pe3V0W3RdPU4oZSk/ZTpmdW5jdGlvbih0LHIpe3JldHVybiB0JiZuP246ZX19ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gaCh1dCx0KT91dFt0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ0KHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csKGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGV8fG58fHJ8fGl9KSkpKX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfXZhciBkdD17fTtmdW5jdGlvbiBwdCh0LGUpe3ZhciBuLHI9ZTtmb3IoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLGMoZSkmJihyPWZ1bmN0aW9uKHQsbil7bltlXT1rKHQpfSksbj0wO248dC5sZW5ndGg7bisrKWR0W3Rbbl1dPXJ9ZnVuY3Rpb24geXQodCxlKXtwdCh0LChmdW5jdGlvbih0LG4scixpKXtyLl93PXIuX3d8fHt9LGUodCxyLl93LHIsaSl9KSl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIG10KHQpPzM2NjozNjV9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIHQlND09MCYmdCUxMDAhPTB8fHQlNDAwPT0wfSQoIlkiLDAsMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnllYXIoKTtyZXR1cm4gdDw9OTk5OT8iIit0OiIrIit0fSkpLCQoMCxbIllZIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSksJCgwLFsiWVlZWSIsNF0sMCwieWVhciIpLCQoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIiksJCgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksTCgieWVhciIsInkiKSxQKCJ5ZWFyIiwxKSxsdCgiWSIsYXQpLGx0KCJZWSIsSyxHKSxsdCgiWVlZWSIsbnQsWiksbHQoIllZWVlZIixydCxRKSxsdCgiWVlZWVlZIixydCxRKSxwdChbIllZWVlZIiwiWVlZWVlZIl0sMCkscHQoIllZWVkiLChmdW5jdGlvbih0LGUpe2VbMF09Mj09PXQubGVuZ3RoP2kucGFyc2VUd29EaWdpdFllYXIodCk6ayh0KX0pKSxwdCgiWVkiLChmdW5jdGlvbih0LGUpe2VbMF09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxwdCgiWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1wYXJzZUludCh0LDEwKX0pKSxpLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBrKHQpKyg2ODxrKHQpPzE5MDA6MmUzKX07dmFyIHZ0LGJ0PV90KCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIF90KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uPyh3dCh0aGlzLHQsbiksaS51cGRhdGVPZmZzZXQodGhpcyxlKSx0aGlzKTp4dCh0aGlzLHQpfX1mdW5jdGlvbiB4dCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT90Ll9kWyJnZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oKTpOYU59ZnVuY3Rpb24gd3QodCxlLG4pe3QuaXNWYWxpZCgpJiYhaXNOYU4obikmJigiRnVsbFllYXIiPT09ZSYmbXQodC55ZWFyKCkpJiYxPT09dC5tb250aCgpJiYyOT09PXQuZGF0ZSgpP3QuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuLHQubW9udGgoKSxrdChuLHQubW9udGgoKSkpOnQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuKSl9ZnVuY3Rpb24ga3QodCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjt2YXIgbj0oZSUxMisxMiklMTI7cmV0dXJuIHQrPShlLW4pLzEyLDE9PT1uP210KHQpPzI5OjI4OjMxLW4lNyUyfXZ0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDsrK2UpaWYodGhpc1tlXT09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LCQoIk0iLFsiTU0iLDJdLCJNbyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSkpLCQoIk1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyx0KX0pKSwkKCJNTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyx0KX0pKSxMKCJtb250aCIsIk0iKSxQKCJtb250aCIsOCksbHQoIk0iLEspLGx0KCJNTSIsSyxHKSxsdCgiTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJNTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pKSxwdChbIk0iLCJNTSJdLChmdW5jdGlvbih0LGUpe2VbMV09ayh0KS0xfSkpLHB0KFsiTU1NIiwiTU1NTSJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUubW9udGhzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lWzFdPWk6cChuKS5pbnZhbGlkTW9udGg9dH0pKTt2YXIgVHQ9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxFdD0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxDdD0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gU3QodCxlKXt2YXIgbjtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPWsoZSk7ZWxzZSBpZighYyhlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpKSlyZXR1cm4gdDtyZXR1cm4gbj1NYXRoLm1pbih0LmRhdGUoKSxrdCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsbiksdH1mdW5jdGlvbiBBdCh0KXtyZXR1cm4gbnVsbCE9dD8oU3QodGhpcyx0KSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTp4dCh0aGlzLCJNb250aCIpfXZhciBNdD1jdCxOdD1jdDtmdW5jdGlvbiBEdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyPVtdLGk9W10sYT1bXTtmb3IoZT0wO2U8MTI7ZSsrKW49ZChbMmUzLGVdKSxyLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSksaS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKTtmb3Ioci5zb3J0KHQpLGkuc29ydCh0KSxhLnNvcnQodCksZT0wO2U8MTI7ZSsrKXJbZV09ZnQocltlXSksaVtlXT1mdChpW2VdKTtmb3IoZT0wO2U8MjQ7ZSsrKWFbZV09ZnQoYVtlXSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE90KHQpe3ZhciBlO2lmKHQ8MTAwJiYwPD10KXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO25bMF09dCs0MDAsZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLG4pKSxpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpfWVsc2UgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlfWZ1bmN0aW9uIEJ0KHQsZSxuKXt2YXIgcj03K2UtbjtyZXR1cm4tKDcrT3QodCwwLHIpLmdldFVUQ0RheSgpLWUpJTcrci0xfWZ1bmN0aW9uIEx0KHQsZSxuLHIsaSl7dmFyIGEsbyxzPTErNyooZS0xKSsoNytuLXIpJTcrQnQodCxyLGkpO3JldHVybiBvPXM8PTA/Z3QoYT10LTEpK3M6cz5ndCh0KT8oYT10KzEscy1ndCh0KSk6KGE9dCxzKSx7eWVhcjphLGRheU9mWWVhcjpvfX1mdW5jdGlvbiBJdCh0LGUsbil7dmFyIHIsaSxhPUJ0KHQueWVhcigpLGUsbiksbz1NYXRoLmZsb29yKCh0LmRheU9mWWVhcigpLWEtMSkvNykrMTtyZXR1cm4gbzwxP3I9bytSdChpPXQueWVhcigpLTEsZSxuKTpvPlJ0KHQueWVhcigpLGUsbik/KHI9by1SdCh0LnllYXIoKSxlLG4pLGk9dC55ZWFyKCkrMSk6KGk9dC55ZWFyKCkscj1vKSx7d2VlazpyLHllYXI6aX19ZnVuY3Rpb24gUnQodCxlLG4pe3ZhciByPUJ0KHQsZSxuKSxpPUJ0KHQrMSxlLG4pO3JldHVybihndCh0KS1yK2kpLzd9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC5zbGljZShlLDcpLmNvbmNhdCh0LnNsaWNlKDAsZSkpfSQoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSwkKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksTCgid2VlayIsInciKSxMKCJpc29XZWVrIiwiVyIpLFAoIndlZWsiLDUpLFAoImlzb1dlZWsiLDUpLGx0KCJ3IixLKSxsdCgid3ciLEssRyksbHQoIlciLEspLGx0KCJXVyIsSyxHKSx5dChbInciLCJ3dyIsIlciLCJXVyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMSldPWsodCl9KSksJCgiZCIsMCwiZG8iLCJkYXkiKSwkKCJkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pKSwkKCJkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyx0KX0pKSwkKCJkZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLHQpfSkpLCQoImUiLDAsMCwid2Vla2RheSIpLCQoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEwoImRheSIsImQiKSxMKCJ3ZWVrZGF5IiwiZSIpLEwoImlzb1dlZWtkYXkiLCJFIiksUCgiZGF5IiwxMSksUCgid2Vla2RheSIsMTEpLFAoImlzb1dlZWtkYXkiLDExKSxsdCgiZCIsSyksbHQoImUiLEspLGx0KCJFIixLKSxsdCgiZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzTWluUmVnZXgodCl9KSksbHQoImRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJkZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1JlZ2V4KHQpfSkpLHl0KFsiZGQiLCJkZGQiLCJkZGRkIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZS5kPWk6cChuKS5pbnZhbGlkV2Vla2RheT10fSkpLHl0KFsiZCIsImUiLCJFIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09ayh0KX0pKTt2YXIgUHQ9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLGp0PSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksWXQ9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHp0PWN0LFV0PWN0LHF0PWN0O2Z1bmN0aW9uICR0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHIsaSxhLG89W10scz1bXSxjPVtdLHU9W107Zm9yKGU9MDtlPDc7ZSsrKW49ZChbMmUzLDFdKS5kYXkoZSkscj10aGlzLndlZWtkYXlzTWluKG4sIiIpLGk9dGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLGE9dGhpcy53ZWVrZGF5cyhuLCIiKSxvLnB1c2gocikscy5wdXNoKGkpLGMucHVzaChhKSx1LnB1c2gociksdS5wdXNoKGkpLHUucHVzaChhKTtmb3Ioby5zb3J0KHQpLHMuc29ydCh0KSxjLnNvcnQodCksdS5zb3J0KHQpLGU9MDtlPDc7ZSsrKXNbZV09ZnQoc1tlXSksY1tlXT1mdChjW2VdKSx1W2VdPWZ0KHVbZV0pO3RoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitjLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK28uam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEh0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gV3QodCxlKXskKHQsMCwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZSl9KSl9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gZS5fbWVyaWRpZW1QYXJzZX0kKCJIIixbIkhIIiwyXSwwLCJob3VyIiksJCgiaCIsWyJoaCIsMl0sMCxIdCksJCgiayIsWyJrayIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pKSwkKCJobW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIitIdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpfSkpLCQoImhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrSHQuYXBwbHkodGhpcykraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLCQoIkhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStqKHRoaXMubWludXRlcygpLDIpfSkpLCQoIkhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMikraih0aGlzLnNlY29uZHMoKSwyKX0pKSxXdCgiYSIsITApLFd0KCJBIiwhMSksTCgiaG91ciIsImgiKSxQKCJob3VyIiwxMyksbHQoImEiLFZ0KSxsdCgiQSIsVnQpLGx0KCJIIixLKSxsdCgiaCIsSyksbHQoImsiLEspLGx0KCJISCIsSyxHKSxsdCgiaGgiLEssRyksbHQoImtrIixLLEcpLGx0KCJobW0iLEopLGx0KCJobW1zcyIsdHQpLGx0KCJIbW0iLEopLGx0KCJIbW1zcyIsdHQpLHB0KFsiSCIsIkhIIl0sMykscHQoWyJrIiwia2siXSwoZnVuY3Rpb24odCxlLG4pe3ZhciByPWsodCk7ZVszXT0yND09PXI/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/dGhpczx0P3RoaXM6dDpnKCl9KSk7ZnVuY3Rpb24ga2UodCxlKXt2YXIgbixyO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiBfZSgpO2ZvcihuPWVbMF0scj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0uaXNWYWxpZCgpJiYhZVtyXVt0XShuKXx8KG49ZVtyXSk7cmV0dXJuIG59dmFyIFRlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBFZSh0KXt2YXIgZT1SKHQpLG49ZS55ZWFyfHwwLHI9ZS5xdWFydGVyfHwwLGk9ZS5tb250aHx8MCxhPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsYz1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGw9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09dnQuY2FsbChUZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPFRlLmxlbmd0aDsrK3IpaWYodFtUZVtyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdCh0W1RlW3JdXSkhPT1rKHRbVGVbcl1dKSYmKG49ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2wrMWUzKnUrNmU0KmMrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KmEsdGhpcy5fbW9udGhzPStpKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiBBZSh0LGUpeyQodCwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxuPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxuPSItIiksbitqKH5+KHQvNjApLDIpK2Uraih+fnQlNjAsMil9KSl9QWUoIloiLCI6IiksQWUoIlpaIiwiIiksbHQoIloiLHN0KSxsdCgiWloiLHN0KSxwdChbIloiLCJaWiJdLChmdW5jdGlvbih0LGUsbil7bi5fdXNlVVRDPSEwLG4uX3R6bT1OZShzdCx0KX0pKTt2YXIgTWU9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj0oZXx8IiIpLm1hdGNoKHQpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO3ZhciByPSgobltuLmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaChNZSl8fFsiLSIsMCwwXSxpPTYwKnJbMV0rayhyWzJdKTtyZXR1cm4gMD09PWk/MDoiKyI9PT1yWzBdP2k6LWl9ZnVuY3Rpb24gRGUodCxlKXt2YXIgbixyO3JldHVybiBlLl9pc1VUQz8obj1lLmNsb25lKCkscj0oeCh0KXx8dSh0KT90LnZhbHVlT2YoKTpfZSh0KS52YWx1ZU9mKCkpLW4udmFsdWVPZigpLG4uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStyKSxpLnVwZGF0ZU9mZnNldChuLCExKSxuKTpfZSh0KS5sb2NhbCgpfWZ1bmN0aW9uIE9lKHQpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0Ll9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9aS51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBMZT0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLEllPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBSZSh0LGUpe3ZhciBuLHIsaSxhPXQsbz1udWxsO3JldHVybiBDZSh0KT9hPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfTpjKHQpPyhhPXt9LGU/YVtlXT10OmEubWlsbGlzZWNvbmRzPXQpOihvPUxlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OjAsZDprKG9bMl0pKm4saDprKG9bM10pKm4sbTprKG9bNF0pKm4sczprKG9bNV0pKm4sbXM6ayhTZSgxZTMqb1s2XSkpKm59KToobz1JZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTpGZShvWzJdLG4pLE06RmUob1szXSxuKSx3OkZlKG9bNF0sbiksZDpGZShvWzVdLG4pLGg6RmUob1s2XSxuKSxtOkZlKG9bN10sbiksczpGZShvWzhdLG4pfSk6bnVsbD09YT9hPXt9OiJvYmplY3QiPT10eXBlb2YgYSYmKCJmcm9tImluIGF8fCJ0byJpbiBhKSYmKGk9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpPyhlPURlKGUsdCksdC5pc0JlZm9yZShlKT9uPVBlKHQsZSk6KChuPVBlKGUsdCkpLm1pbGxpc2Vjb25kcz0tbi5taWxsaXNlY29uZHMsbi5tb250aHM9LW4ubW9udGhzKSxuKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fShfZShhLmZyb20pLF9lKGEudG8pKSwoYT17fSkubXM9aS5taWxsaXNlY29uZHMsYS5NPWkubW9udGhzKSxyPW5ldyBFZShhKSxDZSh0KSYmaCh0LCJfbG9jYWxlIikmJihyLl9sb2NhbGU9dC5fbG9jYWxlKSxyfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIG49dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKmV9ZnVuY3Rpb24gUGUodCxlKXt2YXIgbj17fTtyZXR1cm4gbi5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLW4ubW9udGhzLG4ubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIiksbn1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO3JldHVybiBudWxsPT09cnx8aXNOYU4oK3IpfHwoTShlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxpPW4sbj1yLHI9aSksWWUodGhpcyxSZShuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLHIpLHQpLHRoaXN9fWZ1bmN0aW9uIFllKHQsZSxuLHIpe3ZhciBhPWUuX21pbGxpc2Vjb25kcyxvPVNlKGUuX2RheXMpLHM9U2UoZS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKHI9bnVsbD09cnx8cixzJiZTdCh0LHh0KHQsIk1vbnRoIikrcypuKSxvJiZ3dCh0LCJEYXRlIix4dCh0LCJEYXRlIikrbypuKSxhJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrYSpuKSxyJiZpLnVwZGF0ZU9mZnNldCh0LG98fHMpKX1SZS5mbj1FZS5wcm90b3R5cGUsUmUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBSZShOYU4pfTt2YXIgemU9amUoMSwiYWRkIiksVWU9amUoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gcWUodCxlKXt2YXIgbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuLShuKyhlLXI8MD8oZS1yKS8oci10LmNsb25lKCkuYWRkKG4tMSwibW9udGhzIikpOihlLXIpLyh0LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiktcikpKXx8MH1mdW5jdGlvbiAkZSh0KXt2YXIgZTtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShlPXJlKHQpKSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1pLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixpLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBIZT1DKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSkpO2Z1bmN0aW9uIFdlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgVmU9MTI2MjI3ODA4ZTU7ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9uZXcgRGF0ZSh0KzQwMCxlLG4pLVZlOm5ldyBEYXRlKHQsZSxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9EYXRlLlVUQyh0KzQwMCxlLG4pLVZlOkRhdGUuVVRDKHQsZSxuKX1mdW5jdGlvbiBRZSh0LGUpeyQoMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBLZSh0LGUsbixyLGkpe3ZhciBhO3JldHVybiBudWxsPT10P0l0KHRoaXMscixpKS55ZWFyOigoYT1SdCh0LHIsaSkpPGUmJihlPWEpLGZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9THQodCxlLG4scixpKSxvPU90KGEueWVhciwwLGEuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxuLHIsaSkpfSQoMCxbImdnIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSkpLCQoMCxbIkdHIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSkpLFFlKCJnZ2dnIiwid2Vla1llYXIiKSxRZSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLFFlKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxRZSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksUCgid2Vla1llYXIiLDEpLFAoImlzb1dlZWtZZWFyIiwxKSxsdCgiRyIsYXQpLGx0KCJnIixhdCksbHQoIkdHIixLLEcpLGx0KCJnZyIsSyxHKSxsdCgiR0dHRyIsbnQsWiksbHQoImdnZ2ciLG50LFopLGx0KCJHR0dHRyIscnQsUSksbHQoImdnZ2dnIixydCxRKSx5dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMildPWsodCl9KSkseXQoWyJnZyIsIkdHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSwkKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxMKCJxdWFydGVyIiwiUSIpLFAoInF1YXJ0ZXIiLDcpLGx0KCJRIixWKSxwdCgiUSIsKGZ1bmN0aW9uKHQsZSl7ZVsxXT0zKihrKHQpLTEpfSkpLCQoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMKCJkYXRlIiwiRCIpLFAoImRhdGUiLDkpLGx0KCJEIixLKSxsdCgiREQiLEssRyksbHQoIkRvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxlLl9vcmRpbmFsUGFyc2U6ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSkscHQoWyJEIiwiREQiXSwyKSxwdCgiRG8iLChmdW5jdGlvbih0LGUpe2VbMl09ayh0Lm1hdGNoKEspWzBdKX0pKTt2YXIgSmU9X3QoIkRhdGUiLCEwKTskKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMKCJkYXlPZlllYXIiLCJEREQiKSxQKCJkYXlPZlllYXIiLDQpLGx0KCJEREQiLGV0KSxsdCgiRERERCIsWCkscHQoWyJEREQiLCJEREREIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9kYXlPZlllYXI9ayh0KX0pKSwkKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxMKCJtaW51dGUiLCJtIiksUCgibWludXRlIiwxNCksbHQoIm0iLEspLGx0KCJtbSIsSyxHKSxwdChbIm0iLCJtbSJdLDQpO3ZhciB0bj1fdCgiTWludXRlcyIsITEpOyQoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEwoInNlY29uZCIsInMiKSxQKCJzZWNvbmQiLDE1KSxsdCgicyIsSyksbHQoInNzIixLLEcpLHB0KFsicyIsInNzIl0sNSk7dmFyIGVuLG5uPV90KCJTZWNvbmRzIiwhMSk7Zm9yKCQoIlMiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSwkKDAsWyJTUyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLCQoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSwkKDAsWyJTU1NTIiw0XSwwLChmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksJCgwLFsiU1NTU1MiLDVdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksJCgwLFsiU1NTU1NTIiw2XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSkpLCQoMCxbIlNTU1NTU1MiLDddLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksJCgwLFsiU1NTU1NTU1MiLDhdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSksJCgwLFsiU1NTU1NTU1NTIiw5XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkpLEwoIm1pbGxpc2Vjb25kIiwibXMiKSxQKCJtaWxsaXNlY29uZCIsMTYpLGx0KCJTIixldCxWKSxsdCgiU1MiLGV0LEcpLGx0KCJTU1MiLGV0LFgpLGVuPSJTU1NTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilsdChlbixpdCk7ZnVuY3Rpb24gcm4odCxlKXtlWzZdPWsoMWUzKigiMC4iK3QpKX1mb3IoZW49IlMiO2VuLmxlbmd0aDw9OTtlbis9IlMiKXB0KGVuLHJuKTt2YXIgYW49X3QoIk1pbGxpc2Vjb25kcyIsITEpOyQoInoiLDAsMCwiem9uZUFiYnIiKSwkKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciBvbj1fLnByb3RvdHlwZTtmdW5jdGlvbiBzbih0KXtyZXR1cm4gdH1vbi5hZGQ9emUsb24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10fHxfZSgpLHI9RGUobix0aGlzKS5zdGFydE9mKCJkYXkiKSxhPWkuY2FsZW5kYXJGb3JtYXQodGhpcyxyKXx8InNhbWVFbHNlIixvPWUmJihOKGVbYV0pP2VbYV0uY2FsbCh0aGlzLG4pOmVbYV0pO3JldHVybiB0aGlzLmZvcm1hdChvfHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihhLHRoaXMsX2UobikpKX0sb24uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF8odGhpcyl9LG9uLmRpZmY9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKHI9RGUodCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGk9NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGU9SShlKSl7Y2FzZSJ5ZWFyIjphPXFlKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6YT1xZSh0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6YT1xZSh0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOmE9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjphPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOmE9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6YT0odGhpcy1yLWkpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6YT0odGhpcy1yLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OmE9dGhpcy1yfXJldHVybiBuP2E6dyhhKX0sb24uZW5kT2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MzZlNS1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KS0xO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTZlNC1HZShlLDZlNCktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0xZTMtR2UoZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2kuZGVmYXVsdEZvcm1hdFV0YzppLmRlZmF1bHRGb3JtYXQpO3ZhciBlPUgodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sb24uZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHgodCkmJnQuaXNWYWxpZCgpfHxfZSh0KS5pc1ZhbGlkKCkpP1JlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24uZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKF9lKCksdCl9LG9uLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoeCh0KSYmdC5pc1ZhbGlkKCl8fF9lKHQpLmlzVmFsaWQoKSk/UmUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byhfZSgpLHQpfSxvbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE4odGhpc1t0PUkodCldKT90aGlzW3RdKCk6dGhpc30sb24uaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykub3ZlcmZsb3d9LG9uLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj14KHQpP3Q6X2UodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk6bi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sb24uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj14KHQpP3Q6X2UodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LG9uLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT14KHQpP3Q6X2UodCksYT14KGUpP2U6X2UoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmkuaXNWYWxpZCgpJiZhLmlzVmFsaWQoKSkmJigiKCI9PT0ocj1yfHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoaSxuKTohdGhpcy5pc0JlZm9yZShpLG4pKSYmKCIpIj09PXJbMV0/dGhpcy5pc0JlZm9yZShhLG4pOiF0aGlzLmlzQWZ0ZXIoYSxuKSl9LG9uLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9eCh0KT90Ol9lKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhci5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09ci52YWx1ZU9mKCk6KG49ci52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1uJiZuPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9LG9uLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9LG9uLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNCZWZvcmUodCxlKX0sb24uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSxvbi5sYW5nPUhlLG9uLmxvY2FsZT0kZSxvbi5sb2NhbGVEYXRhPVdlLG9uLm1heD13ZSxvbi5taW49eGUsb24ucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGYoe30scCh0aGlzKSl9LG9uLnNldD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHt1bml0Om4scHJpb3JpdHk6RltuXX0pO3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pKSxlfSh0PVIodCkpLHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzW25bcl0udW5pdF0odFtuW3JdLnVuaXRdKTtlbHNlIGlmKE4odGhpc1t0PUkodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sb24uc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1JKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlLDZlNCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uc3VidHJhY3Q9VWUsb24udG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX0sb24udG9PYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybnt5ZWFyczp0LnllYXIoKSxtb250aHM6dC5tb250aCgpLGRhdGU6dC5kYXRlKCksaG91cnM6dC5ob3VycygpLG1pbnV0ZXM6dC5taW51dGVzKCksc2Vjb25kczp0LnNlY29uZHMoKSxtaWxsaXNlY29uZHM6dC5taWxsaXNlY29uZHMoKX19LG9uLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG9uLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgZT0hMCE9PXQsbj1lP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHw5OTk5PG4ueWVhcigpP0gobixlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6TihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/ZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsSChuLCJaIikpOkgobixlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sb24uaW5zcGVjdD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgdD0ibW9tZW50IixlPSIiO3RoaXMuaXNMb2NhbCgpfHwodD0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLGU9IloiKTt2YXIgbj0iWyIrdCsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsaT1lKydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2kpfSxvbi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG9uLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxvbi51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sb24udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LG9uLmNyZWF0aW9uRGF0YT1mdW5jdGlvbigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LG9uLnllYXI9YnQsb24uaXNMZWFwWWVhcj1mdW5jdGlvbigpe3JldHVybiBtdCh0aGlzLnllYXIoKSl9LG9uLndlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBLZS5jYWxsKHRoaXMsdCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sb24uaXNvV2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIEtlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LG9uLnF1YXJ0ZXI9b24ucXVhcnRlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih0LTEpK3RoaXMubW9udGgoKSUzKX0sb24ubW9udGg9QXQsb24uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4ga3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sb24ud2Vlaz1vbi53ZWVrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi5pc29XZWVrPW9uLmlzb1dlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPUl0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi53ZWVrc0luWWVhcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBSdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9LG9uLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KHRoaXMueWVhcigpLDEsNCl9LG9uLmRhdGU9SmUsb24uZGF5PW9uLmRheXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlLG4scj10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLHQ9InN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/Im51bWJlciI9PXR5cGVvZihlPW4ud2Vla2RheXNQYXJzZShlKSk/ZTpudWxsOnBhcnNlSW50KGUsMTApLHRoaXMuYWRkKHQtciwiZCIpKTpyfSxvbi53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLmRheSgpfHw3O3ZhciBlLG4scj0oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksInN0cmluZyI9PXR5cGVvZiBlP24ud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9yOnItNyl9LG9uLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaG91cj1vbi5ob3Vycz1YdCxvbi5taW51dGU9b24ubWludXRlcz10bixvbi5zZWNvbmQ9b24uc2Vjb25kcz1ubixvbi5taWxsaXNlY29uZD1vbi5taWxsaXNlY29uZHM9YW4sb24udXRjT2Zmc2V0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5faXNVVEM/YTpPZSh0aGlzKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0odD1OZShzdCx0KSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyh0KTwxNiYmIW4mJih0Kj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZlJiYocj1PZSh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9ciYmdGhpcy5hZGQociwibSIpLGEhPT10JiYoIWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/WWUodGhpcyxSZSh0LWEsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfSxvbi51dGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsdCl9LG9uLmxvY2FsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChPZSh0aGlzKSwibSIpKSx0aGlzfSxvbi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIHQ9TmUob3QsdGhpcy5faSk7bnVsbCE9dD90aGlzLnV0Y09mZnNldCh0KTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sb24uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKHQ9dD9fZSh0KS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLXQpJTYwPT0wKX0sb24uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxvbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxvbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxvbi5pc1V0Yz1CZSxvbi5pc1VUQz1CZSxvbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0sb24uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sb24uZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEplKSxvbi5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixBdCksb24ueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsYnQpLG9uLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSkpLG9uLmlzRFNUU2hpZnRlZD1DKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIiwoZnVuY3Rpb24oKXtpZighcyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYodih0LHRoaXMpLCh0PXZlKHQpKS5fYSl7dmFyIGU9dC5faXNVVEM/ZCh0Ll9hKTpfZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJjA8VCh0Ll9hLGUudG9BcnJheSgpKX1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfSkpO3ZhciBjbj1PLnByb3RvdHlwZTtmdW5jdGlvbiB1bih0LGUsbixyKXt2YXIgaT1yZSgpLGE9ZCgpLnNldChyLGUpO3JldHVybiBpW25dKGEsdCl9ZnVuY3Rpb24gbG4odCxlLG4pe2lmKGModCkmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gdW4odCxlLG4sIm1vbnRoIik7dmFyIHIsaT1bXTtmb3Iocj0wO3I8MTI7cisrKWlbcl09dW4odCxyLG4sIm1vbnRoIik7cmV0dXJuIGl9ZnVuY3Rpb24gaG4odCxlLG4scil7ImJvb2xlYW4iPT10eXBlb2YgdD9jKGUpJiYobj1lLGU9dm9pZCAwKTooZT10LHQ9ITEsYyhuPWUpJiYobj1lLGU9dm9pZCAwKSksZT1lfHwiIjt2YXIgaSxhPXJlKCksbz10P2EuX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gdW4oZSwobitvKSU3LHIsImRheSIpO3ZhciBzPVtdO2ZvcihpPTA7aTw3O2krKylzW2ldPXVuKGUsKGkrbyklNyxyLCJkYXkiKTtyZXR1cm4gc31jbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fY2FsZW5kYXJbdF18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBOKHIpP3IuY2FsbChlLG4pOnJ9LGNuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IW4/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMSl9KSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxjbi5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sY24ub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LGNuLnByZXBhcnNlPXNuLGNuLnBvc3Rmb3JtYXQ9c24sY24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gTihpKT9pKHQsZSxuLHIpOmkucmVwbGFjZSgvJWQvaSx0KX0sY24ucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVswPHQ/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gTihuKT9uKGUpOm4ucmVwbGFjZSgvJXMvaSxlKX0sY24uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKG4gaW4gdClOKGU9dFtuXSk/dGhpc1tuXT1lOnRoaXNbIl8iK25dPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sY24ubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxUdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sY24ubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W1R0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LGNuLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLHI9MDtyPDEyOysrcilhPWQoWzJlMyxyXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT10aGlzLm1vbnRoc1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/Ik1NTSI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT12dC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOiJNTU0iPT09ZT8tMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxEdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9TnQpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8RHQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCR0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCR0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCR0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXF0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT1rKHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gbW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciB2bj1tbigibXMiKSxibj1tbigicyIpLF9uPW1uKCJtIikseG49bW4oImgiKSx3bj1tbigiZCIpLGtuPW1uKCJ3IiksVG49bW4oIk0iKSxFbj1tbigiUSIpLENuPW1uKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksTm49U24oIm1pbnV0ZXMiKSxEbj1TbigiaG91cnMiKSxPbj1TbigiZGF5cyIpLEJuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT13KCh0PXcobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT13KGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPUVlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPXZuLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9X24sWW4uYXNIb3Vycz14bixZbi5hc0RheXM9d24sWW4uYXNXZWVrcz1rbixZbi5hc01vbnRocz1UbixZbi5hc1F1YXJ0ZXJzPUVuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqayh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PXcoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9dyh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPXcoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9dyh5bihvKz13KG4vMjQpKSksby09cG4oZ24oaSkpLHI9dyhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9Tm4sWW4uaG91cnM9RG4sWW4uZGF5cz1PbixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiB3KHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9Qm4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT0kZSxZbi5sb2NhbGVEYXRhPVdlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz1IZSwkKCJYIiwwLDAsInVuaXgiKSwkKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKGsodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPV9lLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4ga2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGtlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4gX2UoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD14LGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gX2UuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgTyhlPUQoaSxlKSkpLnBhcmVudExvY2FsZT1RdFt0XSxRdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9UXRbdF0mJihudWxsIT1RdFt0XS5wYXJlbnRMb2NhbGU/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=`; |