Our Logo
WebAsOne
Home
Design
Design Block
Design Patterns
Themes
Design-Marketing
Hero
About
BIO
Contact
CTA
FAQ
Footer
Portfolio
Price
Service
Team
Testimonials
JS Frameworks
ReactJS
SvelteJS
VueJS
Web Apps
OpenSource
Mini-Apps
Page,idxx-xx,v3_price,
v3_price/navholderA,Click to clipboard
ezc6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29udGVudCc6IGInPCFkb2N0eXBlIGh0bWw+XG48aHRtbCBsYW5nPSJlbiI+XG4gIDxoZWFkPlxuICAgIDxtJwogICAgICAgICAgICAgICAgICAgICAgIGInZXRhIGNoYXJzZXQ9IlVURi04IiAvPlxuICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW0nCiAgICAgICAgICAgICAgICAgICAgICAgYidhZ2Uvc3ZnK3htbCIgaHJlZj0iL3ZpdGUuc3ZnIiAvPlxuICAgIDxtZXRhIG5hbWU9InZpZScKICAgICAgICAgICAgICAgICAgICAgICBiJ3dwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4nCiAgICAgICAgICAgICAgICAgICAgICAgYicwIiAvPlxuICAgIDx0aXRsZT5WaXRlICsgVnVlPC90aXRsZT5cbiAgICA8c2NyaXB0IHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgYic9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYXNzZXRzL2luZGV4LWkyRHpjU0M3LmpzJwogICAgICAgICAgICAgICAgICAgICAgIGInIj48L3NjcmlwdD5cbiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luIGgnCiAgICAgICAgICAgICAgICAgICAgICAgYidyZWY9Ii9hc3NldHMvaW5kZXgtQ2JKRV80dDIuY3NzIj5cbiAgPC9oZWFkPlxuICA8Ym9keT4nCiAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICA8ZGl2IGlkPSJhcHAiPjwvZGl2PlxuICA8L2JvZHk+XG48L2h0bWw+XG4nLAogICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC9pbmRleC5odG1sJywKICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29udGVudCc6IGInPCFkb2N0eXBlIGh0bWw+XG48aHRtbCBsYW5nPSJlbiI+XG4gIDxoZWFkPlxuICAgIDxtJwogICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRhIGNoYXJzZXQ9IlVURi04IiAvPlxuICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL3ZpdGUuc3ZnIiAvPlxuICAgIDxtZXRhIG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYWwtc2NhbGU9MS4wIiAvPlxuICAgIDx0aXRsZT5WaXRlICsgVnVlPC90aXRsZT5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzL2luZGV4LWkyRHpjU0M3LmpzIj48L3NjcmlwdD5cbiAgICA8bGluayByZWw9InMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luIGhyZWY9Ii9hc3NldHMvaW5kZXgtQ2JKRV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgYic0dDIuY3NzIj5cbiAgPC9oZWFkPlxuICA8Ym9keT5cbiAgICA8ZGl2IGlkPSJhcHAiPjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgYicvZGl2PlxuICA8L2JvZHk+XG48L2h0bWw+XG4nLAogICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC9pbmRleC5odG1sJywKICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiA4OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ1BITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2knCiAgICAgICAgICAgICAgICAgICAgICAgYidJSGh0Ykc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hzJwogICAgICAgICAgICAgICAgICAgICAgIGInYVc1cklpQmhjbWxoTFdocFpHUmxiajBpZEhKMVpTSWdjbTlzWlQwaWFXMW5JaUJqYkdGeicKICAgICAgICAgICAgICAgICAgICAgICBiJ2N6MGlhV052Ym1sbWVTQnBZMjl1YVdaNUxTMXNiMmR2Y3lJZ2QybGtkR2c5SWpNeExqZzQnCiAgICAgICAgICAgICAgICAgICAgICAgYidJaUJvWldsbmFIUTlJak15SWlCd2NtVnpaWEoyWlVGemNHVmpkRkpoZEdsdlBTSjRUV2xrJwogICAgICAgICAgICAgICAgICAgICAgIGInV1UxcFpDQnRaV1YwSWlCMmFXVjNRbTk0UFNJd0lEQWdNalUySURJMU55SStQR1JsWm5NKycKICAgICAgICAgICAgICAgICAgICAgICBiJ1BHeHBibVZoY2tkeVlXUnBaVzUwSUdsa1BTSkpZMjl1YVdaNVNXUXhPREV6TURnNFptVXgnCiAgICAgICAgICAgICAgICAgICAgICAgYidabUpqTURGbVlqUTJOaUlnZURFOUlpMHVPREk0SlNJZ2VESTlJalUzTGpZek5pVWlJSGt4JwogICAgICAgICAgICAgICAgICAgICAgIGInUFNJM0xqWTFNaVVpSUhreVBTSTNPQzQwTVRFbElqNDhjM1J2Y0NCdlptWnpaWFE5SWpBbCcKICAgICAgICAgICAgICAgICAgICAgICBiJ0lpQnpkRzl3TFdOdmJHOXlQU0lqTkRGRU1VWkdJajQ4TDNOMGIzQStQSE4wYjNBZ2IyWm0nCiAgICAgICAgICAgICAgICAgICAgICAgYidjMlYwUFNJeE1EQWxJaUJ6ZEc5d0xXTnZiRzl5UFNJalFrUXpORVpGSWo0OEwzTjBiM0ErJwogICAgICAgICAgICAgICAgICAgICAgIGInUEM5c2FXNWxZWEpIY21Ga2FXVnVkRDQ4YkdsdVpXRnlSM0poWkdsbGJuUWdhV1E5SWtsaicKICAgICAgICAgICAgICAgICAgICAgICBiJ2IyNXBabmxKWkRFNE1UTXdPRGhtWlRGbVltTXdNV1ppTkRZM0lpQjRNVDBpTkRNdU16YzInCiAgICAgICAgICAgICAgICAgICAgICAgYidKU0lnZURJOUlqVXdMak14TmlVaUlIa3hQU0l5TGpJME1pVWlJSGt5UFNJNE9TNHdNeVVpJwogICAgICAgICAgICAgICAgICAgICAgIGInUGp4emRHOXdJRzltWm5ObGREMGlNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTkdSa1ZCT0RNaScKICAgICAgICAgICAgICAgICAgICAgICBiJ1Bqd3ZjM1J2Y0Q0OGMzUnZjQ0J2Wm1aelpYUTlJamd1TXpNekpTSWdjM1J2Y0MxamIyeHYnCiAgICAgICAgICAgICAgICAgICAgICAgYidjajBpSTBaR1JFUXpOU0krUEM5emRHOXdQanh6ZEc5d0lHOW1abk5sZEQwaU1UQXdKU0lnJwogICAgICAgICAgICAgICAgICAgICAgIGInYzNSdmNDMWpiMnh2Y2owaUkwWkdRVGd3TUNJK1BDOXpkRzl3UGp3dmJHbHVaV0Z5UjNKaCcKICAgICAgICAgICAgICAgICAgICAgICBiJ1pHbGxiblErUEM5a1pXWnpQanh3WVhSb0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbWVVbGsnCiAgICAgICAgICAgICAgICAgICAgICAgYidNVGd4TXpBNE9HWmxNV1ppWXpBeFptSTBOallwSWlCa1BTSk5NalUxTGpFMU15QXpOeTQ1JwogICAgICAgICAgICAgICAgICAgICAgIGInTXpoTU1UTTBMamc1TnlBeU5USXVPVGMyWXkweUxqUTRNeUEwTGpRMExUZ3VPRFl5SURRdScKICAgICAgICAgICAgICAgICAgICAgICBiJ05EWTJMVEV4TGpNNE1pNHdORGhNTGpnM05TQXpOeTQ1TlRoakxUSXVOelEyTFRRdU9ERTAnCiAgICAgICAgICAgICAgICAgICAgICAgYidJREV1TXpjeExURXdMalkwTmlBMkxqZ3lOeTA1TGpZM2JERXlNQzR6T0RVZ01qRXVOVEUzJwogICAgICAgICAgICAgICAgICAgICAgIGInWVRZdU5UTTNJRFl1TlRNM0lEQWdNQ0F3SURJdU16SXlMUzR3TURSc01URTNMamcyTnkweScKICAgICAgICAgICAgICAgICAgICAgICBiJ01TNDBPRE5qTlM0ME16Z3RMams1TVNBNUxqVTNOQ0EwTGpjNU5pQTJMamczTnlBNUxqWXknCiAgICAgICAgICAgICAgICAgICAgICAgYidXaUkrUEM5d1lYUm9Qanh3WVhSb0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbWVVbGtNVGd4JwogICAgICAgICAgICAgICAgICAgICAgIGInTXpBNE9HWmxNV1ppWXpBeFptSTBOamNwSWlCa1BTSk5NVGcxTGpRek1pNHdOak5NT1RZdScKICAgICAgICAgICAgICAgICAgICAgICBiJ05EUWdNVGN1TlRBeFlUTXVNalk0SURNdU1qWTRJREFnTUNBd0xUSXVOak0wSURNdU1ERTAnCiAgICAgICAgICAgICAgICAgICAgICAgYidiQzAxTGpRM05DQTVNaTQwTlRaaE15NHlOamdnTXk0eU5qZ2dNQ0F3SURBZ015NDVPVGNnJwogICAgICAgICAgICAgICAgICAgICAgIGInTXk0ek56aHNNalF1TnpjM0xUVXVOekU0WXpJdU16RTRMUzQxTXpVZ05DNDBNVE1nTVM0MScKICAgICAgICAgICAgICAgICAgICAgICBiJ01EY2dNeTQ1TXpZZ015NDRNemhzTFRjdU16WXhJRE0yTGpBME4yTXRMalE1TlNBeUxqUXknCiAgICAgICAgICAgICAgICAgICAgICAgYidOaUF4TGpjNE1pQTBMalVnTkM0eE5URWdNeTQzT0d3eE5TNHpNRFF0TkM0Mk5EbGpNaTR6JwogICAgICAgICAgICAgICAgICAgICAgIGInTnpJdExqY3lJRFF1TmpVeUlERXVNellnTkM0eE5TQXpMamM0T0d3dE1URXVOams0SURVMicKICAgICAgICAgICAgICAgICAgICAgICBiJ0xqWXlNV010TGpjek1pQXpMalUwTWlBekxqazNPU0ExTGpRM015QTFMamswTXlBeUxqUXonCiAgICAgICAgICAgICAgICAgICAgICAgYidOMnd4TGpNeE15MHlMakF5T0d3M01pNDFNVFl0TVRRMExqY3lZekV1TWpFMUxUSXVOREl6JwogICAgICAgICAgICAgICAgICAgICAgIGInTFM0NE9DMDFMakU0TmkwekxqVTBMVFF1TmpjeWJDMHlOUzQxTURVZ05DNDVNakpqTFRJdScKICAgICAgICAgICAgICAgICAgICAgICBiJ016azJMalEyTWkwMExqUXpOUzB4TGpjM0xUTXVOelU1TFRRdU1URTBiREUyTGpZME5pMDEnCiAgICAgICAgICAgICAgICAgICAgICAgYidOeTQzTURWakxqWTNOeTB5TGpNMUxURXVNemN0TkM0MU9ETXRNeTQzTmprdE5DNHhNVE5hJwogICAgICAgICAgICAgICAgICAgICAgIGInSWo0OEwzQmhkR2crUEM5emRtYysnLAogICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC92aXRlLnN2ZycsCiAgICAgICAgICAgICdJc1RleHQnOiAwLAogICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ1BITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5eicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RtY2lJSGh0Ykc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09UazVMM2hzYVc1cklpQmhjbWxoTFdocFpHUmxiajBpZEhKMVpTSWdjbTlzWlQwaScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FXMW5JaUJqYkdGemN6MGlhV052Ym1sbWVTQnBZMjl1YVdaNUxTMXNiMmR2Y3lJZycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QybGtkR2c5SWpNeExqZzRJaUJvWldsbmFIUTlJak15SWlCd2NtVnpaWEoyWlVGeicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NHVmpkRkpoZEdsdlBTSjRUV2xrV1UxcFpDQnRaV1YwSWlCMmFXVjNRbTk0UFNJdycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lEQWdNalUySURJMU55SStQR1JsWm5NK1BHeHBibVZoY2tkeVlXUnBaVzUwSUdsaycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BTSkpZMjl1YVdaNVNXUXhPREV6TURnNFptVXhabUpqTURGbVlqUTJOaUlnZURFOScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lpMHVPREk0SlNJZ2VESTlJalUzTGpZek5pVWlJSGt4UFNJM0xqWTFNaVVpSUhreScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BTSTNPQzQwTVRFbElqNDhjM1J2Y0NCdlptWnpaWFE5SWpBbElpQnpkRzl3TFdOdicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JHOXlQU0lqTkRGRU1VWkdJajQ4TDNOMGIzQStQSE4wYjNBZ2IyWm1jMlYwUFNJeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01EQWxJaUJ6ZEc5d0xXTnZiRzl5UFNJalFrUXpORVpGSWo0OEwzTjBiM0ErUEM5cycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FXNWxZWEpIY21Ga2FXVnVkRDQ4YkdsdVpXRnlSM0poWkdsbGJuUWdhV1E5SWtsaicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2IyNXBabmxKWkRFNE1UTXdPRGhtWlRGbVltTXdNV1ppTkRZM0lpQjRNVDBpTkRNdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016YzJKU0lnZURJOUlqVXdMak14TmlVaUlIa3hQU0l5TGpJME1pVWlJSGt5UFNJNCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09TNHdNeVVpUGp4emRHOXdJRzltWm5ObGREMGlNQ1VpSUhOMGIzQXRZMjlzYjNJOScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lpTkdSa1ZCT0RNaVBqd3ZjM1J2Y0Q0OGMzUnZjQ0J2Wm1aelpYUTlJamd1TXpNeicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0pTSWdjM1J2Y0MxamIyeHZjajBpSTBaR1JFUXpOU0krUEM5emRHOXdQanh6ZEc5dycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lHOW1abk5sZEQwaU1UQXdKU0lnYzNSdmNDMWpiMnh2Y2owaUkwWkdRVGd3TUNJKycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BDOXpkRzl3UGp3dmJHbHVaV0Z5UjNKaFpHbGxiblErUEM5a1pXWnpQanh3WVhSbycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbWVVbGtNVGd4TXpBNE9HWmxNV1ppWXpBeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ptSTBOallwSWlCa1BTSk5NalUxTGpFMU15QXpOeTQ1TXpoTU1UTTBMamc1TnlBeScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05USXVPVGMyWXkweUxqUTRNeUEwTGpRMExUZ3VPRFl5SURRdU5EWTJMVEV4TGpNNCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pNHdORGhNTGpnM05TQXpOeTQ1TlRoakxUSXVOelEyTFRRdU9ERTBJREV1TXpjeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xURXdMalkwTmlBMkxqZ3lOeTA1TGpZM2JERXlNQzR6T0RVZ01qRXVOVEUzWVRZdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UTTNJRFl1TlRNM0lEQWdNQ0F3SURJdU16SXlMUzR3TURSc01URTNMamcyTnkweScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01TNDBPRE5qTlM0ME16Z3RMams1TVNBNUxqVTNOQ0EwTGpjNU5pQTJMamczTnlBNScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xqWXlXaUkrUEM5d1lYUm9Qanh3WVhSb0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VVbGtNVGd4TXpBNE9HWmxNV1ppWXpBeFptSTBOamNwSWlCa1BTSk5NVGcxTGpReicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pNHdOak5NT1RZdU5EUWdNVGN1TlRBeFlUTXVNalk0SURNdU1qWTRJREFnTUNBdycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xUSXVOak0wSURNdU1ERTBiQzAxTGpRM05DQTVNaTQwTlRaaE15NHlOamdnTXk0eScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05qZ2dNQ0F3SURBZ015NDVPVGNnTXk0ek56aHNNalF1TnpjM0xUVXVOekU0WXpJdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016RTRMUzQxTXpVZ05DNDBNVE1nTVM0MU1EY2dNeTQ1TXpZZ015NDRNemhzTFRjdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016WXhJRE0yTGpBME4yTXRMalE1TlNBeUxqUXlOaUF4TGpjNE1pQTBMalVnTkM0eCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05URWdNeTQzT0d3eE5TNHpNRFF0TkM0Mk5EbGpNaTR6TnpJdExqY3lJRFF1TmpVeScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lERXVNellnTkM0eE5TQXpMamM0T0d3dE1URXVOams0SURVMkxqWXlNV010TGpjeicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pQXpMalUwTWlBekxqazNPU0ExTGpRM015QTFMamswTXlBeUxqUXpOMnd4TGpNeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ015MHlMakF5T0d3M01pNDFNVFl0TVRRMExqY3lZekV1TWpFMUxUSXVOREl6TFM0NCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09DMDFMakU0TmkwekxqVTBMVFF1TmpjeWJDMHlOUzQxTURVZ05DNDVNakpqTFRJdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016azJMalEyTWkwMExqUXpOUzB4TGpjM0xUTXVOelU1TFRRdU1URTBiREUyTGpZMCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05pMDFOeTQzTURWakxqWTNOeTB5TGpNMUxURXVNemN0TkM0MU9ETXRNeTQzTmprdCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05DNHhNVE5hSWo0OEwzQmhkR2crUEM5emRtYysnLAogICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC92aXRlLnN2ZycsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAwLAogICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogOTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICdDb250ZW50JzogYid1bHtwYWRkaW5nOjA7bGlzdC1zdHlsZS10eXBlOm5vbmV9XG4nLAogICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC9hc3NldHMvaW5kZXgtQ2JKRV80dDIuY3NzJywKICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29udGVudCc6IGIndWx7cGFkZGluZzowO2xpc3Qtc3R5bGUtdHlwZTpub25lfVxuJywKICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI0MDAyL3dzL2Rpc3QvYXNzZXRzL2luZGV4LUNiSkVfNHQyLmNzcycsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogMTA6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJyhmdW5jdGlvbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxMaXN0O2lmKHQmJnQuc3VwcG9ydHMmJnQuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKScKICAgICAgICAgICAgICAgICAgICAgICAgYiIpcmV0dXJuO2Zvcihjb25zdCByIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25rW3JlbD0ibW9kdWxlcHJlbG9hZCJdXCcpKXMocik7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9Pntmb3IoY29uc3QgaSBvZiByKWlmKGkudHlwZT09PSJjaGlsZExpc3QiKWZvcihjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgbyBvZiBpLmFkZGVkTm9kZXMpby50YWdOYW1lPT09IkxJTksiJiZvLnJlbD09PSJtbycKICAgICAgICAgICAgICAgICAgICAgICAgYidkdWxlcHJlbG9hZCImJnMobyl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N1YnRyZWU6ITB9KTtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9e307cmV0dXJuIHIuaW50ZWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncml0eSYmKGkuaW50ZWdyaXR5PXIuaW50ZWdyaXR5KSxyLnJlZmVycmVyUG9saWN5JiYoaScKICAgICAgICAgICAgICAgICAgICAgICAgYicucmVmZXJyZXJQb2xpY3k9ci5yZWZlcnJlclBvbGljeSksci5jcm9zc09yaWdpbj09PSJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlLWNyZWRlbnRpYWxzIj9pLmNyZWRlbnRpYWxzPSJpbmNsdWRlIjpyLmNyb3NzT3JpZ2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj09PSJhbm9ueW1vdXMiP2kuY3JlZGVudGlhbHM9Im9taXQiOmkuY3JlZGVudGlhbHM9IicKICAgICAgICAgICAgICAgICAgICAgICAgYidzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiBzKHIpe2lmKHIuZXApcmV0dXJuO3IuZXA9ITA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGk9bihyKTtmZXRjaChyLmhyZWYsaSl9fSkoKTsvKipcbiogQHZ1ZS9zaGFyZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YzLjUuMTNcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udHJpYnV0b3JzXG4qIEBsaWNlbnNlIE1JVFxuKiovLyohICNfX05PX1NJREVfRUZGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VDVFNfXyAqL2Z1bmN0aW9uIEFuKGUpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKGNvbnN0IG4gb2YgZS5zcGxpdCgiLCIpKXRbbl09MTtyZXR1cm4gbj0+biBpbiB0fScKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBMPXt9LFhlPVtdLHdlPSgpPT57fSxqcj0oKT0+ITEsV3Q9ZT0+ZS5jaGFyQ29kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdCgwKT09PTExMSYmZS5jaGFyQ29kZUF0KDEpPT09MTEwJiYoZS5jaGFyQ29kZUF0KDInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT4xMjJ8fGUuY2hhckNvZGVBdCgyKTw5NyksUG49ZT0+ZS5zdGFydHNXaXRoKCJvblVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGU6Iiksc2U9T2JqZWN0LmFzc2lnbixSbj0oZSx0KT0+e2NvbnN0IG49ZS5pbmRleE9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0KTtuPi0xJiZlLnNwbGljZShuLDEpfSxMcj1PYmplY3QucHJvdG90eXBlLmhhc093blAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wZXJ0eSxIPShlLHQpPT5Mci5jYWxsKGUsdCksRT1BcnJheS5pc0FycmF5LFplPWU9PicKICAgICAgICAgICAgICAgICAgICAgICAgYid3dChlKT09PSJbb2JqZWN0IE1hcF0iLHF0PWU9Pnd0KGUpPT09IltvYmplY3QgU2V0XSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1puPWU9Pnd0KGUpPT09IltvYmplY3QgRGF0ZV0iLFI9ZT0+dHlwZW9mIGU9PSJmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24iLEo9ZT0+dHlwZW9mIGU9PSJzdHJpbmciLFRlPWU9PnR5cGVvZiBlPT0ic3ltYm9sIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsSz1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiLEVzPWU9PihLKGUpfHxSKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykmJlIoZS50aGVuKSYmUihlLmNhdGNoKSxBcz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyx3dD1lPT5Bcy5jYWxsKGUpLCRyPWU9Pnd0KGUpLnNsaWNlKDgsLTEpLFBzPWU9Pnd0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKT09PSJbb2JqZWN0IE9iamVjdF0iLE1uPWU9PkooZSkmJmUhPT0iTmFOIiYmZVswXSE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0iLSImJiIiK3BhcnNlSW50KGUsMTApPT09ZSx1dD1BbigiLGtleSxyZWYscmVmX2ZvciwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcmVVcGRhdGUsb25Wbm9kZVVwZGF0ZWQsb25Wbm9kZUJlZm9yZVVubW91bnQsb25Wbm9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VVbm1vdW50ZWQiKSxKdD1lPT57Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gbj0+dFtuXXx8KHRbbl09ZShuKSl9LFZyPS8tKFxcdykvZyxOZT1KdChlPT5lLnJlcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlKFZyLCh0LG4pPT5uP24udG9VcHBlckNhc2UoKToiIikpLFVyPS9cXEIoW0EtWl0pL2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdlPUp0KGU9PmUucmVwbGFjZShVciwiLSQxIikudG9Mb3dlckNhc2UoKSksUnM9SnQoZScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSksc249SnQoZT0+ZT9gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uJHtScyhlKX1gOiIiKSxEZT0oZSx0KT0+IU9iamVjdC5pcyhlLHQpLEZ0PShlLC4uLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT0+e2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWVbbl0oLi4udCl9LE1zPShlLHQsbicKICAgICAgICAgICAgICAgICAgICAgICAgYicscz0hMSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudW1lcmFibGU6ITEsd3JpdGFibGU6cyx2YWx1ZTpufSl9LEtyPWU9Pntjb25zdCB0PXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTih0KT9lOnR9O2xldCBRbjtjb25zdCBHdD0oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PlFufHwoUW49dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndSI/Z2xvYmFsOnt9KTtmdW5jdGlvbiBJbihlKXtpZihFKGUpKXtjb25zdCB0PXt9O2ZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcz1lW25dLHI9SihzKT9KcihzKTpJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ocyk7aWYocilmb3IoY29uc3QgaSBpbiByKXRbaV09cltpXX1yZXR1cm4gdH1lbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihKKGUpfHxLKGUpKXJldHVybiBlfWNvbnN0IEJyPS87KD8hW14oXSpcXCkpL2csV3I9LzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFteXSspLyxxcj0vXFwvXFwqW15dKj9cXCpcXC8vZztmdW5jdGlvbiBKcihlKXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdD17fTtyZXR1cm4gZS5yZXBsYWNlKHFyLCIiKS5zcGxpdChCcikuZm9yRWFjaChuPT57JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKG4pe2NvbnN0IHM9bi5zcGxpdChXcik7cy5sZW5ndGg+MSYmKHRbc1swXS50cmltKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInXT1zWzFdLnRyaW0oKSl9fSksdH1mdW5jdGlvbiBGbihlKXtsZXQgdD0iIjtpZihKKGUpKScKICAgICAgICAgICAgICAgICAgICAgICAgYid0PWU7ZWxzZSBpZihFKGUpKWZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1GbihlW25dKTtzJiYodCs9cysiICIpfWVsc2UgaWYoSyhlKSlmb3IoY29uc3QgbiBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSllW25dJiYodCs9bisiICIpO3JldHVybiB0LnRyaW0oKX1jb25zdCBHcj0iaXRlbXNjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsaWRhdGUscmVhZG9ubHkiLFlyPUFuKEdyKTtmdW5jdGlvbiBJcyhlKXtyZXR1cm4hIWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHxlPT09IiJ9ZnVuY3Rpb24genIoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4hMTtsZXQgbj0hMDtmb3IobGV0IHM9MDtuJiZzPGUubGVuZ3RoO3MrKyluPVl0KGVbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NdLHRbc10pO3JldHVybiBufWZ1bmN0aW9uIFl0KGUsdCl7aWYoZT09PXQpcmV0dXJuITAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2xldCBuPVpuKGUpLHM9Wm4odCk7aWYobnx8cylyZXR1cm4gbiYmcz9lLmdldFRpbWUoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT10LmdldFRpbWUoKTohMTtpZihuPVRlKGUpLHM9VGUodCksbnx8cylyZXR1cm4gZT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJz10O2lmKG49RShlKSxzPUUodCksbnx8cylyZXR1cm4gbiYmcz96cihlLHQpOiExO2lmKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPUsoZSkscz1LKHQpLG58fHMpe2lmKCFufHwhcylyZXR1cm4hMTtjb25zdCByPU9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicua2V5cyhlKS5sZW5ndGgsaT1PYmplY3Qua2V5cyh0KS5sZW5ndGg7aWYociE9PWkpcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiExO2Zvcihjb25zdCBvIGluIGUpe2NvbnN0IGw9ZS5oYXNPd25Qcm9wZXJ0eShvKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYz10Lmhhc093blByb3BlcnR5KG8pO2lmKGwmJiFjfHwhbCYmY3x8IVl0KGVbb10sdFtvXScKICAgICAgICAgICAgICAgICAgICAgICAgYicpKXJldHVybiExfX1yZXR1cm4gU3RyaW5nKGUpPT09U3RyaW5nKHQpfWZ1bmN0aW9uIEZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlLHQpe3JldHVybiBlLmZpbmRJbmRleChuPT5ZdChuLHQpKX1jb25zdCBEcz1lPT4hISgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSYmZS5fX3ZfaXNSZWY9PT0hMCksZnQ9ZT0+SihlKT9lOmU9PW51bGw/IiI6RShlKXx8SycKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkmJihlLnRvU3RyaW5nPT09QXN8fCFSKGUudG9TdHJpbmcpKT9EcyhlKT9mdChlLnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSk6SlNPTi5zdHJpbmdpZnkoZSxIcywyKTpTdHJpbmcoZSksSHM9KGUsdCk9PkRzKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT9IcyhlLHQudmFsdWUpOlplKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cicKICAgICAgICAgICAgICAgICAgICAgICAgYidpZXMoKV0ucmVkdWNlKChuLFtzLHJdLGkpPT4obltybihzLGkpKyIgPT4iXT1yLG4pLHt9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9OnF0KHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChuPT4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4obikpfTpUZSh0KT9ybih0KTpLKHQpJiYhRSh0KSYmIVBzKHQpP1N0cmluZyh0KTp0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidybj0oZSx0PSIiKT0+e3ZhciBuO3JldHVybiBUZShlKT9gU3ltYm9sKCR7KG49ZS5kZXNjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpcHRpb24pIT1udWxsP246dH0pYDplfTsvKipcbiogQHZ1ZS9yZWFjdGl2aXR5IHYzLjUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEzXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL2xldCBmZTtjbGFzcyBYcntjb25zdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IodD0hMSl7dGhpcy5kZXRhY2hlZD10LHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmVmZmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RzPVtdLHRoaXMuY2xlYW51cHM9W10sdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5wYXJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0PWZlLCF0JiZmZSYmKHRoaXMuaW5kZXg9KGZlLnNjb3Blc3x8KGZlLnNjb3Blcz1bXSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5wdXNoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5faXNQYXVzZWQ9ITA7bGV0IHQsbjtpZih0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGVzLmxlbmd0aDt0PG47dCsrKXRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Njb3Blc1t0XS5wYXVzZSgpO2Zvcih0PTAsbj10aGlzLmVmZmVjdHMubGVuZ3RoO3Q8bjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCsrKXRoaXMuZWZmZWN0c1t0XS5wYXVzZSgpfX1yZXN1bWUoKXtpZih0aGlzLl9hY3RpdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlJiZ0aGlzLl9pc1BhdXNlZCl7dGhpcy5faXNQYXVzZWQ9ITE7bGV0IHQsbjtpZih0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGVzLmxlbmd0aDt0PG47dCsrKXRoaXMuc2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Blc1t0XS5yZXN1bWUoKTtmb3IodD0wLG49dGhpcy5lZmZlY3RzLmxlbmd0aDt0PG47dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrKyl0aGlzLmVmZmVjdHNbdF0ucmVzdW1lKCl9fXJ1bih0KXtpZih0aGlzLl9hY3RpdmUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdCBuPWZlO3RyeXtyZXR1cm4gZmU9dGhpcyx0KCl9ZmluYWxseXtmZT1ufX19b24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCl7ZmU9dGhpc31vZmYoKXtmZT10aGlzLnBhcmVudH1zdG9wKHQpe2lmKHRoaXMuX2FjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUpe3RoaXMuX2FjdGl2ZT0hMTtsZXQgbixzO2ZvcihuPTAscz10aGlzLmVmZmVjdHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbmd0aDtuPHM7bisrKXRoaXMuZWZmZWN0c1tuXS5zdG9wKCk7Zm9yKHRoaXMuZWZmZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMubGVuZ3RoPTAsbj0wLHM9dGhpcy5jbGVhbnVwcy5sZW5ndGg7bjxzO24rKyl0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjbGVhbnVwc1tuXSgpO2lmKHRoaXMuY2xlYW51cHMubGVuZ3RoPTAsdGhpcy5zY29wZXMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tmb3Iobj0wLHM9dGhpcy5zY29wZXMubGVuZ3RoO248cztuKyspdGhpcy5zY29wZXNbbl0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5wYXJlbnQmJiF0KXtjb25zdCByPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtyJiZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyE9PXRoaXMmJih0aGlzLnBhcmVudC5zY29wZXNbdGhpcy5pbmRleF09cixyLmluZGV4PXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmluZGV4KX10aGlzLnBhcmVudD12b2lkIDB9fX1mdW5jdGlvbiBacigpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZmV9bGV0IFU7Y29uc3Qgb249bmV3IFdlYWtTZXQ7Y2xhc3MgTnN7Y29uc3RydWN0b3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qpe3RoaXMuZm49dCx0aGlzLmRlcHM9dm9pZCAwLHRoaXMuZGVwc1RhaWw9dm9pZCAwLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmZsYWdzPTUsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmNsZWFudXA9dm9pZCAwLHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnNjaGVkdWxlcj12b2lkIDAsZmUmJmZlLmFjdGl2ZSYmZmUuZWZmZWN0cy5wdXNoKHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKX1wYXVzZSgpe3RoaXMuZmxhZ3N8PTY0fXJlc3VtZSgpe3RoaXMuZmxhZ3MmNjQmJignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5mbGFncyY9LTY1LG9uLmhhcyh0aGlzKSYmKG9uLmRlbGV0ZSh0aGlzKSx0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlnZ2VyKCkpKX1ub3RpZnkoKXt0aGlzLmZsYWdzJjImJiEodGhpcy5mbGFncyYzMil8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x0aGlzLmZsYWdzJjh8fExzKHRoaXMpfXJ1bigpe2lmKCEodGhpcy5mbGFncyYxKSlyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHRoaXMuZm4oKTt0aGlzLmZsYWdzfD0yLGtuKHRoaXMpLCRzKHRoaXMpO2NvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PVUsbj1kZTtVPXRoaXMsZGU9ITA7dHJ5e3JldHVybiB0aGlzLmZuKCl9ZmluYWxseXtWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ModGhpcyksVT10LGRlPW4sdGhpcy5mbGFncyY9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyYxKXtmb3IobGV0IHQ9dGhpcy5kZXBzO3Q7dD10Lm5leHREZXApTm4odCk7dGhpcy5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcz10aGlzLmRlcHNUYWlsPXZvaWQgMCxrbih0aGlzKSx0aGlzLm9uU3RvcCYmdGhpcy5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25TdG9wKCksdGhpcy5mbGFncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P29uLmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGQodGhpcyk6dGhpcy5zY2hlZHVsZXI/dGhpcy5zY2hlZHVsZXIoKTp0aGlzLnJ1bklmRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcnR5KCl9cnVuSWZEaXJ0eSgpe21uKHRoaXMpJiZ0aGlzLnJ1bigpfWdldCBkaXJ0eSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tyZXR1cm4gbW4odGhpcyl9fWxldCBqcz0wLGF0LGR0O2Z1bmN0aW9uIExzKGUsdD0hMSknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKGUuZmxhZ3N8PTgsdCl7ZS5uZXh0PWR0LGR0PWU7cmV0dXJufWUubmV4dD1hdCxhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9ZX1mdW5jdGlvbiBEbigpe2pzKyt9ZnVuY3Rpb24gSG4oKXtpZigtLWpzPjApcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJztpZihkdCl7bGV0IHQ9ZHQ7Zm9yKGR0PXZvaWQgMDt0Oyl7Y29uc3Qgbj10Lm5leHQ7dC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4dD12b2lkIDAsdC5mbGFncyY9LTksdD1ufX1sZXQgZTtmb3IoO2F0Oyl7bGV0IHQ9YScKICAgICAgICAgICAgICAgICAgICAgICAgYid0O2ZvcihhdD12b2lkIDA7dDspe2NvbnN0IG49dC5uZXh0O2lmKHQubmV4dD12b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuZmxhZ3MmPS05LHQuZmxhZ3MmMSl0cnl7dC50cmlnZ2VyKCl9Y2F0Y2gocyl7ZXx8KGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXMpfXQ9bn19aWYoZSl0aHJvdyBlfWZ1bmN0aW9uICRzKGUpe2ZvcihsZXQgdD1lLmRlcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzO3Q7dD10Lm5leHREZXApdC52ZXJzaW9uPS0xLHQucHJldkFjdGl2ZUxpbms9dC5kZXAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2ZUxpbmssdC5kZXAuYWN0aXZlTGluaz10fWZ1bmN0aW9uIFZzKGUpe2xldCB0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWUuZGVwc1RhaWwscz1uO2Zvcig7czspe2NvbnN0IHI9cy5wcmV2RGVwO3MudmVyc2lvbicKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0tMT8ocz09PW4mJihuPXIpLE5uKHMpLFFyKHMpKTp0PXMscy5kZXAuYWN0aXZlTGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s9cy5wcmV2QWN0aXZlTGluayxzLnByZXZBY3RpdmVMaW5rPXZvaWQgMCxzPXJ9ZS5kZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz10LGUuZGVwc1RhaWw9bn1mdW5jdGlvbiBtbihlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9dC5uZXh0RGVwKWlmKHQuZGVwLnZlcnNpb24hPT10LnZlcnNpb258fHQuZGVwLmNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZCYmKFVzKHQuZGVwLmNvbXB1dGVkKXx8dC5kZXAudmVyc2lvbiE9PXQudmVyc2lvbiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXJldHVybiEwO3JldHVybiEhZS5fZGlydHl9ZnVuY3Rpb24gVXMoZSl7aWYoZS5mbGFncycKICAgICAgICAgICAgICAgICAgICAgICAgYicmNCYmIShlLmZsYWdzJjE2KXx8KGUuZmxhZ3MmPS0xNyxlLmdsb2JhbFZlcnNpb249PT1fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpKXJldHVybjtlLmdsb2JhbFZlcnNpb249X3Q7Y29uc3QgdD1lLmRlcDtpZihlLmZsYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3w9Mix0LnZlcnNpb24+MCYmIWUuaXNTU1ImJmUuZGVwcyYmIW1uKGUpKXtlLmZsYWdzJicKICAgICAgICAgICAgICAgICAgICAgICAgYic9LTM7cmV0dXJufWNvbnN0IG49VSxzPWRlO1U9ZSxkZT0hMDt0cnl7JHMoZSk7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9ZS5mbihlLl92YWx1ZSk7KHQudmVyc2lvbj09PTB8fERlKHIsZS5fdmFsdWUpKSYmKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLl92YWx1ZT1yLHQudmVyc2lvbisrKX1jYXRjaChyKXt0aHJvdyB0LnZlcnNpb24rKyxyfScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5hbGx5e1U9bixkZT1zLFZzKGUpLGUuZmxhZ3MmPS0zfX1mdW5jdGlvbiBObihlLHQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyExKXtjb25zdHtkZXA6bixwcmV2U3ViOnMsbmV4dFN1YjpyfT1lO2lmKHMmJihzLm5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3ViPXIsZS5wcmV2U3ViPXZvaWQgMCksciYmKHIucHJldlN1Yj1zLGUubmV4dFN1Yj12bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZCAwKSxuLnN1YnM9PT1lJiYobi5zdWJzPXMsIXMmJm4uY29tcHV0ZWQpKXtuLmNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZC5mbGFncyY9LTU7Zm9yKGxldCBpPW4uY29tcHV0ZWQuZGVwcztpO2k9aS5uZXh0RGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncClObihpLCEwKX0hdCYmIS0tbi5zYyYmbi5tYXAmJm4ubWFwLmRlbGV0ZShuLmtleSl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIFFyKGUpe2NvbnN0e3ByZXZEZXA6dCxuZXh0RGVwOm59PWU7dCYmKHQubmV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3REZXA9bixlLnByZXZEZXA9dm9pZCAwKSxuJiYobi5wcmV2RGVwPXQsZS5uZXh0RGVwPXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIDApfWxldCBkZT0hMDtjb25zdCBLcz1bXTtmdW5jdGlvbiBqZSgpe0tzLnB1c2goZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSxkZT0hMX1mdW5jdGlvbiBMZSgpe2NvbnN0IGU9S3MucG9wKCk7ZGU9ZT09PXZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzA/ITA6ZX1mdW5jdGlvbiBrbihlKXtjb25zdHtjbGVhbnVwOnR9PWU7aWYoZS5jbGVhbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncD12b2lkIDAsdCl7Y29uc3Qgbj1VO1U9dm9pZCAwO3RyeXt0KCl9ZmluYWxseXtVPW59fScKICAgICAgICAgICAgICAgICAgICAgICAgYid9bGV0IF90PTA7Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXt0aGlzLnN1Yj10LHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcD1uLHRoaXMudmVyc2lvbj1uLnZlcnNpb24sdGhpcy5uZXh0RGVwPXRoaXMucHJldkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXA9dGhpcy5uZXh0U3ViPXRoaXMucHJldlN1Yj10aGlzLnByZXZBY3RpdmVMaW5rPXZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkIDB9fWNsYXNzIGpue2NvbnN0cnVjdG9yKHQpe3RoaXMuY29tcHV0ZWQ9dCx0aGlzLnZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzaW9uPTAsdGhpcy5hY3RpdmVMaW5rPXZvaWQgMCx0aGlzLnN1YnM9dm9pZCAwLHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm1hcD12b2lkIDAsdGhpcy5rZXk9dm9pZCAwLHRoaXMuc2M9MH10cmFjayh0KXtpZighVScKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCFkZXx8VT09PXRoaXMuY29tcHV0ZWQpcmV0dXJuO2xldCBuPXRoaXMuYWN0aXZlTGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s7aWYobj09PXZvaWQgMHx8bi5zdWIhPT1VKW49dGhpcy5hY3RpdmVMaW5rPW5ldyBrcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInVSx0aGlzKSxVLmRlcHM/KG4ucHJldkRlcD1VLmRlcHNUYWlsLFUuZGVwc1RhaWwubmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidEZXA9bixVLmRlcHNUYWlsPW4pOlUuZGVwcz1VLmRlcHNUYWlsPW4sQnMobik7ZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Yobi52ZXJzaW9uPT09LTEmJihuLnZlcnNpb249dGhpcy52ZXJzaW9uLG4ubmV4dERlcCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtjb25zdCBzPW4ubmV4dERlcDtzLnByZXZEZXA9bi5wcmV2RGVwLG4ucHJldkRlcCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnByZXZEZXAubmV4dERlcD1zKSxuLnByZXZEZXA9VS5kZXBzVGFpbCxuLm5leHREZXA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQgMCxVLmRlcHNUYWlsLm5leHREZXA9bixVLmRlcHNUYWlsPW4sVS5kZXBzPT09biYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJihVLmRlcHM9cyl9cmV0dXJuIG59dHJpZ2dlcih0KXt0aGlzLnZlcnNpb24rKyxfdCsrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLm5vdGlmeSh0KX1ub3RpZnkodCl7RG4oKTt0cnl7Zm9yKGxldCBuPXRoaXMuc3ViJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M7bjtuPW4ucHJldlN1YiluLnN1Yi5ub3RpZnkoKSYmbi5zdWIuZGVwLm5vdGlmeSgpfWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5hbGx5e0huKCl9fX1mdW5jdGlvbiBCcyhlKXtpZihlLmRlcC5zYysrLGUuc3ViLmZsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidncyY0KXtjb25zdCB0PWUuZGVwLmNvbXB1dGVkO2lmKHQmJiFlLmRlcC5zdWJzKXt0LmZsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fnc3w9MjA7Zm9yKGxldCBzPXQuZGVwcztzO3M9cy5uZXh0RGVwKUJzKHMpfWNvbnN0IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWUuZGVwLnN1YnM7biE9PWUmJihlLnByZXZTdWI9bixuJiYobi5uZXh0U3ViPWUpKSxlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXAuc3Vicz1lfX1jb25zdCBibj1uZXcgV2Vha01hcCxxZT1TeW1ib2woIiIpLHluPVN5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21ib2woIiIpLG10PVN5bWJvbCgiIik7ZnVuY3Rpb24gWChlLHQsbil7aWYoZGUmJlUpe2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgcz1ibi5nZXQoZSk7c3x8Ym4uc2V0KGUscz1uZXcgTWFwKTtsZXQgcj1zLmdldChuKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7cnx8KHMuc2V0KG4scj1uZXcgam4pLHIubWFwPXMsci5rZXk9biksci50cmFjaygpfX1mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gRWUoZSx0LG4scyxyLGkpe2NvbnN0IG89Ym4uZ2V0KGUpO2lmKCFvKXtfdCsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKztyZXR1cm59Y29uc3QgbD1jPT57YyYmYy50cmlnZ2VyKCl9O2lmKERuKCksdD09PSJjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXIiKW8uZm9yRWFjaChsKTtlbHNle2NvbnN0IGM9RShlKSxoPWMmJk1uKG4pO2lmKGMmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZuPT09Imxlbmd0aCIpe2NvbnN0IGE9TnVtYmVyKHMpO28uZm9yRWFjaCgocCxUKT0+eygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVD09PSJsZW5ndGgifHxUPT09bXR8fCFUZShUKSYmVD49YSkmJmwocCl9KX1lbHNlIHN3aScKICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2goKG4hPT12b2lkIDB8fG8uaGFzKHZvaWQgMCkpJiZsKG8uZ2V0KG4pKSxoJiZsKG8uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldChtdCkpLHQpe2Nhc2UiYWRkIjpjP2gmJmwoby5nZXQoImxlbmd0aCIpKToobChvLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQocWUpKSxaZShlKSYmbChvLmdldCh5bikpKTticmVhaztjYXNlImRlbGV0ZSI6Y3x8KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsKG8uZ2V0KHFlKSksWmUoZSkmJmwoby5nZXQoeW4pKSk7YnJlYWs7Y2FzZSJzZXQiOlplJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSYmbChvLmdldChxZSkpO2JyZWFrfX1IbigpfWZ1bmN0aW9uIFllKGUpe2NvbnN0IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPUQoZSk7cmV0dXJuIHQ9PT1lP3Q6KFgodCwiaXRlcmF0ZSIsbXQpLGFlKGUpP3Q6dC5tYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwKFopKX1mdW5jdGlvbiB6dChlKXtyZXR1cm4gWChlPUQoZSksIml0ZXJhdGUiLG10KSxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31jb25zdCBlaT17X19wcm90b19fOm51bGwsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGxuKHRoaXMsU3ltYm9sLml0ZXJhdG9yLFopfSxjb25jYXQoLi4uZSl7cmV0dXJuIFllKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzKS5jb25jYXQoLi4uZS5tYXAodD0+RSh0KT9ZZSh0KTp0KSl9LGVudHJpZXMoKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGxuKHRoaXMsImVudHJpZXMiLGU9PihlWzFdPVooZVsxXSksZSkpfSxldmVyeSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0KXtyZXR1cm4gdmUodGhpcywiZXZlcnkiLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihlLHQpe3JldHVybiB2ZSh0aGlzLCJmaWx0ZXIiLGUsdCxuPT5uLm1hcChaKSxhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnRzKX0sZmluZChlLHQpe3JldHVybiB2ZSh0aGlzLCJmaW5kIixlLHQsWixhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7cmV0dXJuIHZlKHRoaXMsImZpbmRJbmRleCIsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCx2b2lkIDAsYXJndW1lbnRzKX0sZmluZExhc3QoZSx0KXtyZXR1cm4gdmUodGhpcywiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmRMYXN0IixlLHQsWixhcmd1bWVudHMpfSxmaW5kTGFzdEluZGV4KGUsdCl7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB2ZSh0aGlzLCJmaW5kTGFzdEluZGV4IixlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKGUsdCl7cmV0dXJuIHZlKHRoaXMsImZvckVhY2giLGUsdCx2b2lkIDAsYXJndW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiBmbih0aGlzLCJpbmNsdWRlcyIsZSl9LGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleE9mKC4uLmUpe3JldHVybiBmbih0aGlzLCJpbmRleE9mIixlKX0sam9pbihlKXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIFllKHRoaXMpLmpvaW4oZSl9LGxhc3RJbmRleE9mKC4uLmUpe3JldHVybiBmbih0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcywibGFzdEluZGV4T2YiLGUpfSxtYXAoZSx0KXtyZXR1cm4gdmUodGhpcywibWFwIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxwb3AoKXtyZXR1cm4gb3QodGhpcywicG9wIil9LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKC4uLmUpe3JldHVybiBvdCh0aGlzLCJwdXNoIixlKX0scmVkdWNlKGUsLi4udCl7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBlcyh0aGlzLCJyZWR1Y2UiLGUsdCl9LHJlZHVjZVJpZ2h0KGUsLi4udCl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBlcyh0aGlzLCJyZWR1Y2VSaWdodCIsZSx0KX0sc2hpZnQoKXtyZXR1cm4gb3QodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMsInNoaWZ0Iil9LHNvbWUoZSx0KXtyZXR1cm4gdmUodGhpcywic29tZSIsZSx0LHZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkIDAsYXJndW1lbnRzKX0sc3BsaWNlKC4uLmUpe3JldHVybiBvdCh0aGlzLCJzcGxpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIixlKX0sdG9SZXZlcnNlZCgpe3JldHVybiBZZSh0aGlzKS50b1JldmVyc2VkKCl9LHRvUycKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnRlZChlKXtyZXR1cm4gWWUodGhpcykudG9Tb3J0ZWQoZSl9LHRvU3BsaWNlZCguLi5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7cmV0dXJuIFllKHRoaXMpLnRvU3BsaWNlZCguLi5lKX0sdW5zaGlmdCguLi5lKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIG90KHRoaXMsInVuc2hpZnQiLGUpfSx2YWx1ZXMoKXtyZXR1cm4gbG4odGhpcywidicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlcyIsWil9fTtmdW5jdGlvbiBsbihlLHQsbil7Y29uc3Qgcz16dChlKSxyPXNbdF0oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7cmV0dXJuIHMhPT1lJiYhYWUoZSkmJihyLl9uZXh0PXIubmV4dCxyLm5leHQ9KCk9PnsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgaT1yLl9uZXh0KCk7cmV0dXJuIGkudmFsdWUmJihpLnZhbHVlPW4oaS52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpKSxpfSkscn1jb25zdCB0aT1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gdmUoZSx0LG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MscixpKXtjb25zdCBvPXp0KGUpLGw9byE9PWUmJiFhZShlKSxjPW9bdF07aWYoYyE9PXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaVt0XSl7Y29uc3QgcD1jLmFwcGx5KGUsaSk7cmV0dXJuIGw/WihwKTpwfWxldCBoPW47bycKICAgICAgICAgICAgICAgICAgICAgICAgYichPT1lJiYobD9oPWZ1bmN0aW9uKHAsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLFoocCksVCxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9Om4ubGVuZ3RoPjImJihoPWZ1bmN0aW9uKHAsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFQsZSl9KSk7Y29uc3QgYT1jLmNhbGwobyxoLHMpO3JldHVybiBsJiZyP3IoYSk6YX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gZXMoZSx0LG4scyl7Y29uc3Qgcj16dChlKTtsZXQgaT1uO3JldHVybiByIT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UmJihhZShlKT9uLmxlbmd0aD4zJiYoaT1mdW5jdGlvbihvLGwsYyl7cmV0dXJuIG4uY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGwodGhpcyxvLGwsYyxlKX0pOmk9ZnVuY3Rpb24obyxsLGMpe3JldHVybiBuLmNhbGwodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMsbyxaKGwpLGMsZSl9KSxyW3RdKGksLi4ucyl9ZnVuY3Rpb24gZm4oZSx0LG4pe2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBzPUQoZSk7WChzLCJpdGVyYXRlIixtdCk7Y29uc3Qgcj1zW3RdKC4uLm4pO3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4ocj09PS0xfHxyPT09ITEpJiZVbihuWzBdKT8oblswXT1EKG5bMF0pLHNbdF0oLi4ubicKICAgICAgICAgICAgICAgICAgICAgICAgYicpKTpyfWZ1bmN0aW9uIG90KGUsdCxuPVtdKXtqZSgpLERuKCk7Y29uc3Qgcz1EKGUpW3RdJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5hcHBseShlLG4pO3JldHVybiBIbigpLExlKCksc31jb25zdCBuaT1BbigiX19wcm90b18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLFdzPW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0eU5hbWVzKFN5bWJvbCkuZmlsdGVyKGU9PmUhPT0iYXJndW1lbnRzIiYmZSE9PSJjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIikubWFwKGU9PlN5bWJvbFtlXSkuZmlsdGVyKFRlKSk7ZnVuY3Rpb24gc2koZSl7VGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpfHwoZT1TdHJpbmcoZSkpO2NvbnN0IHQ9RCh0aGlzKTtyZXR1cm4gWCh0LCJoYXMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSx0Lmhhc093blByb3BlcnR5KGUpfWNsYXNzIHFze2NvbnN0cnVjdG9yKHQ9ITEsbj0hJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpe3RoaXMuX2lzUmVhZG9ubHk9dCx0aGlzLl9pc1NoYWxsb3c9bn1nZXQodCxuLHMpe2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihuPT09Il9fdl9za2lwIilyZXR1cm4gdC5fX3Zfc2tpcDtjb25zdCByPXRoaXMuX2lzUicKICAgICAgICAgICAgICAgICAgICAgICAgYidlYWRvbmx5LGk9dGhpcy5faXNTaGFsbG93O2lmKG49PT0iX192X2lzUmVhY3RpdmUiKXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4hcjtpZihuPT09Il9fdl9pc1JlYWRvbmx5IilyZXR1cm4gcjtpZihuPT09Il9fdl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNTaGFsbG93IilyZXR1cm4gaTtpZihuPT09Il9fdl9yYXciKXJldHVybiBzPT09KHI/aScKICAgICAgICAgICAgICAgICAgICAgICAgYic/aGk6enM6aT9ZczpHcykuZ2V0KHQpfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LmdldFByb3RvdHlwZU9mKHMpP3Q6dm9pZCAwO2NvbnN0IG89RSh0KTtpZighciknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2xldCBjO2lmKG8mJihjPWVpW25dKSlyZXR1cm4gYztpZihuPT09Imhhc093blByb3BlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0eSIpcmV0dXJuIHNpfWNvbnN0IGw9UmVmbGVjdC5nZXQodCxuLFEodCk/dDpzKTtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuKFRlKG4pP1dzLmhhcyhuKTpuaShuKSl8fChyfHxYKHQsImdldCIsbiksaSk/bDpRKGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT9vJiZNbihuKT9sOmwudmFsdWU6SyhsKT9yP1hzKGwpOiRuKGwpOmx9fWNsYXNzIEpzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCExLHQpfXNldCh0LG4scyxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7bGV0IGk9dFtuXTtpZighdGhpcy5faXNTaGFsbG93KXtjb25zdCBjPUplKGkpO2lmKCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWUocykmJiFKZShzKSYmKGk9RChpKSxzPUQocykpLCFFKHQpJiZRKGkpJiYhUShzKSlyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGM/ITE6KGkudmFsdWU9cywhMCl9Y29uc3Qgbz1FKHQpJiZNbihuKT9OdW1iZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pPHQubGVuZ3RoOkgodCxuKSxsPVJlZmxlY3Quc2V0KHQsbixzLFEodCk/dDpyKTtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHQ9PT1EKHIpJiYobz9EZShzLGkpJiZFZSh0LCJzZXQiLG4scyk6RWUodCwiYWRkIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsbixzKSksbH1kZWxldGVQcm9wZXJ0eSh0LG4pe2NvbnN0IHM9SCh0LG4pO3Rbbl07Y29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHI9UmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0LG4pO3JldHVybiByJiZzJiZFZSh0LCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVsZXRlIixuLHZvaWQgMCkscn1oYXModCxuKXtjb25zdCBzPVJlZmxlY3QuaGFzKHQsbicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO3JldHVybighVGUobil8fCFXcy5oYXMobikpJiZYKHQsImhhcyIsbiksc31vd25LZXlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0KXtyZXR1cm4gWCh0LCJpdGVyYXRlIixFKHQpPyJsZW5ndGgiOnFlKSxSZWZsZWN0Lm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd25LZXlzKHQpfX1jbGFzcyByaSBleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQ9ITEpe3N1cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcighMCx0KX1zZXQodCxuKXtyZXR1cm4hMH1kZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24hMH19Y29uc3QgaWk9bmV3IEpzLG9pPW5ldyByaSxsaT1uZXcgSnMoITApO2NvbnN0IHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj1lPT5lLFJ0PWU9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZnVuY3Rpb24gZmkoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCxuKXtyZXR1cm4gZnVuY3Rpb24oLi4ucyl7Y29uc3Qgcj10aGlzLl9fdl9yYXcsaT1EJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyKSxvPVplKGkpLGw9ZT09PSJlbnRyaWVzInx8ZT09PVN5bWJvbC5pdGVyYXRvciYmbywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYz1lPT09ImtleXMiJiZvLGg9cltlXSguLi5zKSxhPW4/eG46dD9TbjpaO3JldHVybiF0JicKICAgICAgICAgICAgICAgICAgICAgICAgYicmWChpLCJpdGVyYXRlIixjP3luOnFlKSx7bmV4dCgpe2NvbnN0e3ZhbHVlOnAsZG9uZTpUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ309aC5uZXh0KCk7cmV0dXJuIFQ/e3ZhbHVlOnAsZG9uZTpUfTp7dmFsdWU6bD9bYShwWzAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSksYShwWzFdKV06YShwKSxkb25lOlR9fSxbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpc319fX1mdW5jdGlvbiBNdChlKXtyZXR1cm4gZnVuY3Rpb24oLi4udCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlPT09ImRlbGV0ZSI/ITE6ZT09PSJjbGVhciI/dm9pZCAwOnRoaXN9fWZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaShlLHQpe2NvbnN0IG49e2dldChyKXtjb25zdCBpPXRoaXMuX192X3JhdyxvPUQoaSksbCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9RChyKTtlfHwoRGUocixsKSYmWChvLCJnZXQiLHIpLFgobywiZ2V0IixsKSk7Y29uc3R7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hhczpjfT1SdChvKSxoPXQ/eG46ZT9TbjpaO2lmKGMuY2FsbChvLHIpKXJldHVybiBoKGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldChyKSk7aWYoYy5jYWxsKG8sbCkpcmV0dXJuIGgoaS5nZXQobCkpO2khPT1vJiZpLicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQocil9LGdldCBzaXplKCl7Y29uc3Qgcj10aGlzLl9fdl9yYXc7cmV0dXJuIWUmJlgoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QociksIml0ZXJhdGUiLHFlKSxSZWZsZWN0LmdldChyLCJzaXplIixyKX0saGFzKHIpe2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBpPXRoaXMuX192X3JhdyxvPUQoaSksbD1EKHIpO3JldHVybiBlfHwoRGUocixsKScKICAgICAgICAgICAgICAgICAgICAgICAgYicmJlgobywiaGFzIixyKSxYKG8sImhhcyIsbCkpLHI9PT1sP2kuaGFzKHIpOmkuaGFzKHIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8aS5oYXMobCl9LGZvckVhY2gocixpKXtjb25zdCBvPXRoaXMsbD1vLl9fdl9yYXcsYz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRChsKSxoPXQ/eG46ZT9TbjpaO3JldHVybiFlJiZYKGMsIml0ZXJhdGUiLHFlKSxsLmZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKChhLHApPT5yLmNhbGwoaSxoKGEpLGgocCksbykpfX07cmV0dXJuIHNlKG4sZT97JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZDpNdCgiYWRkIiksc2V0Ok10KCJzZXQiKSxkZWxldGU6TXQoImRlbGV0ZSIpLGNsZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjpNdCgiY2xlYXIiKX06e2FkZChyKXshdCYmIWFlKHIpJiYhSmUocikmJihyPUQocikpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpPUQodGhpcyk7cmV0dXJuIFJ0KGkpLmhhcy5jYWxsKGkscil8fChpLmFkZChyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksRWUoaSwiYWRkIixyLHIpKSx0aGlzfSxzZXQocixpKXshdCYmIWFlKGkpJiYhSmUoaSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYoaT1EKGkpKTtjb25zdCBvPUQodGhpcykse2hhczpsLGdldDpjfT1SdChvKTtsZXQgaCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9bC5jYWxsKG8scik7aHx8KHI9RChyKSxoPWwuY2FsbChvLHIpKTtjb25zdCBhPWMuY2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wobyxyKTtyZXR1cm4gby5zZXQocixpKSxoP0RlKGksYSkmJkVlKG8sInNldCIscixpKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWUobywiYWRkIixyLGkpLHRoaXN9LGRlbGV0ZShyKXtjb25zdCBpPUQodGhpcykse2hhcycKICAgICAgICAgICAgICAgICAgICAgICAgYic6byxnZXQ6bH09UnQoaSk7bGV0IGM9by5jYWxsKGkscik7Y3x8KHI9RChyKSxjPW8uY2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2woaSxyKSksbCYmbC5jYWxsKGkscik7Y29uc3QgaD1pLmRlbGV0ZShyKTtyZXR1cm4gYyYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJkVlKGksImRlbGV0ZSIscix2b2lkIDApLGh9LGNsZWFyKCl7Y29uc3Qgcj1EKHRoaXMpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpPXIuc2l6ZSE9PTAsbz1yLmNsZWFyKCk7cmV0dXJuIGkmJkVlKHIsImNsZWFyIix2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwLHZvaWQgMCksb319KSxbImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIixTeW1ib2wuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJhdG9yXS5mb3JFYWNoKHI9PntuW3JdPWZpKHIsZSx0KX0pLG59ZnVuY3Rpb24gTG4oZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCl7Y29uc3Qgbj1jaShlLHQpO3JldHVybihzLHIsaSk9PnI9PT0iX192X2lzUmVhY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlIj8hZTpyPT09Il9fdl9pc1JlYWRvbmx5Ij9lOnI9PT0iX192X3JhdyI/czpSZWZsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5nZXQoSChuLHIpJiZyIGluIHM/bjpzLHIsaSl9Y29uc3QgdWk9e2dldDpMbighMSwhMScKICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxhaT17Z2V0OkxuKCExLCEwKX0sZGk9e2dldDpMbighMCwhMSl9O2NvbnN0IEdzPW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3cgV2Vha01hcCxZcz1uZXcgV2Vha01hcCx6cz1uZXcgV2Vha01hcCxoaT1uZXcgV2Vha00nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXA7ZnVuY3Rpb24gcGkoZSl7c3dpdGNoKGUpe2Nhc2UiT2JqZWN0IjpjYXNlIkFycmF5IicKICAgICAgICAgICAgICAgICAgICAgICAgYic6cmV0dXJuIDE7Y2FzZSJNYXAiOmNhc2UiU2V0IjpjYXNlIldlYWtNYXAiOmNhc2UiV2VhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tTZXQiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGdpKGUpe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gZS5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoZSk/MDpwaSgkcihlKSl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICRuKGUpe3JldHVybiBKZShlKT9lOlZuKGUsITEsaWksdWksR3MpfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBfaShlKXtyZXR1cm4gVm4oZSwhMSxsaSxhaSxZcyl9ZnVuY3Rpb24gWHMoZSl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBWbihlLCEwLG9pLGRpLHpzKX1mdW5jdGlvbiBWbihlLHQsbixzLHIpe2lmKCFLKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKXx8ZS5fX3ZfcmF3JiYhKHQmJmUuX192X2lzUmVhY3RpdmUpKXJldHVybiBlO2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpPXIuZ2V0KGUpO2lmKGkpcmV0dXJuIGk7Y29uc3Qgbz1naShlKTtpZihvPT09MClyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGU7Y29uc3QgbD1uZXcgUHJveHkoZSxvPT09Mj9zOm4pO3JldHVybiByLnNldChlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxsfWZ1bmN0aW9uIFFlKGUpe3JldHVybiBKZShlKT9RZShlLl9fdl9yYXcpOiEhKGUmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZlLl9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiBKZShlKXtyZXR1cm4hIShlJiZlLl9fdl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNSZWFkb25seSl9ZnVuY3Rpb24gYWUoZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNTaGFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdyl9ZnVuY3Rpb24gVW4oZSl7cmV0dXJuIGU/ISFlLl9fdl9yYXc6ITF9ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QoZSl7Y29uc3QgdD1lJiZlLl9fdl9yYXc7cmV0dXJuIHQ/RCh0KTplfWZ1bmN0aW9uIG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaShlKXtyZXR1cm4hSChlLCJfX3Zfc2tpcCIpJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmTXMoZSwiX192X3NraXAiLCEwKSxlfWNvbnN0IFo9ZT0+SyhlKT8kbihlKTplLFNuPWU9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz5LKGUpP1hzKGUpOmU7ZnVuY3Rpb24gUShlKXtyZXR1cm4gZT9lLl9fdl9pc1JlZj09PSEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDohMX1mdW5jdGlvbiBiaShlKXtyZXR1cm4geWkoZSwhMSl9ZnVuY3Rpb24geWkoZSx0KScKICAgICAgICAgICAgICAgICAgICAgICAgYid7cmV0dXJuIFEoZSk/ZTpuZXcgeGkoZSx0KX1jbGFzcyB4aXtjb25zdHJ1Y3Rvcih0LG4pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3t0aGlzLmRlcD1uZXcgam4sdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNTaGFsbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndz0hMSx0aGlzLl9yYXdWYWx1ZT1uP3Q6RCh0KSx0aGlzLl92YWx1ZT1uP3Q6Wih0KSx0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5fX3ZfaXNTaGFsbG93PW59Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZGVwLnRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh0KXtjb25zdCBuPXRoaXMuX3Jhd1ZhbHVlLHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXRoaXMuX192X2lzU2hhbGxvd3x8YWUodCl8fEplKHQpO3Q9cz90OkQodCksRGUodCxuKScKICAgICAgICAgICAgICAgICAgICAgICAgYicmJih0aGlzLl9yYXdWYWx1ZT10LHRoaXMuX3ZhbHVlPXM/dDpaKHQpLHRoaXMuZGVwLnRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lnZ2VyKCkpfX1mdW5jdGlvbiBacyhlKXtyZXR1cm4gUShlKT9lLnZhbHVlOmV9Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNpPXtnZXQ6KGUsdCxuKT0+dD09PSJfX3ZfcmF3Ij9lOlpzKFJlZmxlY3QuZ2V0KGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsbikpLHNldDooZSx0LG4scyk9Pntjb25zdCByPWVbdF07cmV0dXJuIFEocikmJiFRKG4pJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8oci52YWx1ZT1uLCEwKTpSZWZsZWN0LnNldChlLHQsbixzKX19O2Z1bmN0aW9uIFFzKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gUWUoZSk/ZTpuZXcgUHJveHkoZSxTaSl9Y2xhc3Mgd2l7Y29uc3RydWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKHQsbixzKXt0aGlzLmZuPXQsdGhpcy5zZXR0ZXI9bix0aGlzLl92YWx1ZT12b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuZGVwPW5ldyBqbih0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTE2LHRoaXMuZ2xvYmFsVicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnNpb249X3QtMSx0aGlzLm5leHQ9dm9pZCAwLHRoaXMuZWZmZWN0PXRoaXMsdGhpcy5fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ192X2lzUmVhZG9ubHk9IW4sdGhpcy5pc1NTUj1zfW5vdGlmeSgpe2lmKHRoaXMuZmxhZ3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfD0xNiwhKHRoaXMuZmxhZ3MmOCkmJlUhPT10aGlzKXJldHVybiBMcyh0aGlzLCEwKSwhMCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9Z2V0IHZhbHVlKCl7Y29uc3QgdD10aGlzLmRlcC50cmFjaygpO3JldHVybiBVcyh0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksdCYmKHQudmVyc2lvbj10aGlzLmRlcC52ZXJzaW9uKSx0aGlzLl92YWx1ZX1zZXQgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKHQpe3RoaXMuc2V0dGVyJiZ0aGlzLnNldHRlcih0KX19ZnVuY3Rpb24gVGkoZSx0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduPSExKXtsZXQgcyxyO3JldHVybiBSKGUpP3M9ZToocz1lLmdldCxyPWUuc2V0KSxuZXcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpKHMscixuKX1jb25zdCBJdD17fSxMdD1uZXcgV2Vha01hcDtsZXQgV2U7ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENpKGUsdD0hMSxuPVdlKXtpZihuKXtsZXQgcz1MdC5nZXQobik7c3x8THQuc2V0KG4scycKICAgICAgICAgICAgICAgICAgICAgICAgYic9W10pLHMucHVzaChlKX19ZnVuY3Rpb24gdmkoZSx0LG49TCl7Y29uc3R7aW1tZWRpYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzpzLGRlZXA6cixvbmNlOmksc2NoZWR1bGVyOm8sYXVnbWVudEpvYjpsLGNhbGw6Y309biwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaD1BPT5yP0E6YWUoQSl8fHI9PT0hMXx8cj09PTA/QWUoQSwxKTpBZShBKTtsZXQgYSxwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidULEMsRj0hMSxJPSExO2lmKFEoZSk/KHA9KCk9PmUudmFsdWUsRj1hZShlKSk6UWUoZSk/JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhwPSgpPT5oKGUpLEY9ITApOkUoZSk/KEk9ITAsRj1lLnNvbWUoQT0+UWUoQSl8fGFlKEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSkscD0oKT0+ZS5tYXAoQT0+e2lmKFEoQSkpcmV0dXJuIEEudmFsdWU7aWYoUWUoQSkpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBoKEEpO2lmKFIoQSkpcmV0dXJuIGM/YyhBLDIpOkEoKX0pKTpSKGUpP3Q/cD1jJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8oKT0+YyhlLDIpOmU6cD0oKT0+e2lmKFQpe2plKCk7dHJ5e1QoKX1maW5hbGx5e0xlKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInfX1jb25zdCBBPVdlO1dlPWE7dHJ5e3JldHVybiBjP2MoZSwzLFtDXSk6ZShDKX1maW5hbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidseXtXZT1BfX06cD13ZSx0JiZyKXtjb25zdCBBPXAsRz1yPT09ITA/MS8wOnI7cD0oKT0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FlKEEoKSxHKX1jb25zdCB6PVpyKCksaj0oKT0+e2Euc3RvcCgpLHomJnouYWN0aXZlJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUm4oei5lZmZlY3RzLGEpfTtpZihpJiZ0KXtjb25zdCBBPXQ7dD0oLi4uRyk9PntBKC4uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidHKSxqKCl9fWxldCBXPUk/bmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKEl0KTpJdDtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgcT1BPT57aWYoISghKGEuZmxhZ3MmMSl8fCFhLmRpcnR5JiYhQSkpaWYodCl7Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEc9YS5ydW4oKTtpZihyfHxGfHwoST9HLnNvbWUoKFJlLGhlKT0+RGUoUmUsV1toZV0pKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6RGUoRyxXKSkpe1QmJlQoKTtjb25zdCBSZT1XZTtXZT1hO3RyeXtjb25zdCBoZT1bRyxXJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PUl0P3ZvaWQgMDpJJiZXWzBdPT09SXQ/W106VyxDXTtjP2ModCwzLGhlKTp0KC4uLmgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSksVz1HfWZpbmFsbHl7V2U9UmV9fX1lbHNlIGEucnVuKCl9O3JldHVybiBsJiZsKHEpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhPW5ldyBOcyhwKSxhLnNjaGVkdWxlcj1vPygpPT5vKHEsITEpOnEsQz1BPT5DaShBLCExJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxhKSxUPWEub25TdG9wPSgpPT57Y29uc3QgQT1MdC5nZXQoYSk7aWYoQSl7aWYoYyljKEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLDQpO2Vsc2UgZm9yKGNvbnN0IEcgb2YgQSlHKCk7THQuZGVsZXRlKGEpfX0sdD9zP3EoIScKICAgICAgICAgICAgICAgICAgICAgICAgYicwKTpXPWEucnVuKCk6bz9vKHEuYmluZChudWxsLCEwKSwhMCk6YS5ydW4oKSxqLnBhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1hLnBhdXNlLmJpbmQoYSksai5yZXN1bWU9YS5yZXN1bWUuYmluZChhKSxqLnN0b3A9aiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInan1mdW5jdGlvbiBBZShlLHQ9MS8wLG4pe2lmKHQ8PTB8fCFLKGUpfHxlLl9fdl9za2lwfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8KG49bnx8bmV3IFNldCxuLmhhcyhlKSkpcmV0dXJuIGU7aWYobi5hZGQoZSksdC0tLFEoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpKUFlKGUudmFsdWUsdCxuKTtlbHNlIGlmKEUoZSkpZm9yKGxldCBzPTA7czxlLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7cysrKUFlKGVbc10sdCxuKTtlbHNlIGlmKHF0KGUpfHxaZShlKSllLmZvckVhY2gocycKICAgICAgICAgICAgICAgICAgICAgICAgYic9PntBZShzLHQsbil9KTtlbHNlIGlmKFBzKGUpKXtmb3IoY29uc3QgcyBpbiBlKUFlKGVbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NdLHQsbik7Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscykmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidBZShlW3NdLHQsbil9cmV0dXJuIGV9LyoqXG4qIEB2dWUvcnVudGltZS1jb3JlIHYzLjUuMScKICAgICAgICAgICAgICAgICAgICAgICAgYiczXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL2Z1bmN0aW9uIFR0KGUsdCxuLHMpe3RyeScKICAgICAgICAgICAgICAgICAgICAgICAgYid7cmV0dXJuIHM/ZSguLi5zKTplKCl9Y2F0Y2gocil7WHQocix0LG4pfX1mdW5jdGlvbiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZSx0LG4scyl7aWYoUihlKSl7Y29uc3Qgcj1UdChlLHQsbixzKTtyZXR1cm4gciYmRXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHIpJiZyLmNhdGNoKGk9PntYdChpLHQsbil9KSxyfWlmKEUoZSkpe2NvbnN0IHI9W107ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXIucHVzaChDZShlW2ldLHQsbixzKSk7cmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiByfX1mdW5jdGlvbiBYdChlLHQsbixzPSEwKXtjb25zdCByPXQ/dC52bm9kZTpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCx7ZXJyb3JIYW5kbGVyOmksdGhyb3dVbmhhbmRsZWRFcnJvckluUHJvZHVjdGlvbjpvfScKICAgICAgICAgICAgICAgICAgICAgICAgYic9dCYmdC5hcHBDb250ZXh0LmNvbmZpZ3x8TDtpZih0KXtsZXQgbD10LnBhcmVudDtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgYz10LnByb3h5LGg9YGh0dHBzOi8vdnVlanMub3JnL2Vycm9yLXJlZmVyZW5jZS8jcnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpbWUtJHtufWA7Zm9yKDtsOyl7Y29uc3QgYT1sLmVjO2lmKGEpe2ZvcihsZXQgcD0wOycKICAgICAgICAgICAgICAgICAgICAgICAgYidwPGEubGVuZ3RoO3ArKylpZihhW3BdKGUsYyxoKT09PSExKXJldHVybn1sPWwucGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ31pZihpKXtqZSgpLFR0KGksbnVsbCwxMCxbZSxjLGhdKSxMZSgpO3JldHVybn19T2koZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixyLHMsbyl9ZnVuY3Rpb24gT2koZSx0LG4scz0hMCxyPSExKXtpZihyKXRocm93IGU7YycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnNvbGUuZXJyb3IoZSl9Y29uc3QgdGU9W107bGV0IHllPS0xO2NvbnN0IGtlPVtdO2xlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgSWU9bnVsbCx6ZT0wO2NvbnN0IGtzPVByb21pc2UucmVzb2x2ZSgpO2xldCAkdD1udWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDtmdW5jdGlvbiBFaShlKXtjb25zdCB0PSR0fHxrcztyZXR1cm4gZT90LnRoZW4odGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYic/ZS5iaW5kKHRoaXMpOmUpOnR9ZnVuY3Rpb24gQWkoZSl7bGV0IHQ9eWUrMSxuPXRlLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGg7Zm9yKDt0PG47KXtjb25zdCBzPXQrbj4+PjEscj10ZVtzXSxpPWJ0KHIpO2k8ZXwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfGk9PT1lJiZyLmZsYWdzJjI/dD1zKzE6bj1zfXJldHVybiB0fWZ1bmN0aW9uIEtuKGUpeycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZighKGUuZmxhZ3MmMSkpe2NvbnN0IHQ9YnQoZSksbj10ZVt0ZS5sZW5ndGgtMV07IW58JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3whKGUuZmxhZ3MmMikmJnQ+PWJ0KG4pP3RlLnB1c2goZSk6dGUuc3BsaWNlKEFpKHQpLDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpLGUuZmxhZ3N8PTEsZXIoKX19ZnVuY3Rpb24gZXIoKXskdHx8KCR0PWtzLnRoZW4obicKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSl9ZnVuY3Rpb24gUGkoZSl7RShlKT9rZS5wdXNoKC4uLmUpOkllJiZlLmlkPT09LTE/JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0llLnNwbGljZSh6ZSsxLDAsZSk6ZS5mbGFncyYxfHwoa2UucHVzaChlKSxlLmZsYWdzfD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSksZXIoKX1mdW5jdGlvbiB0cyhlLHQsbj15ZSsxKXtmb3IoO248dGUubGVuZ3RoO24rKycKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2NvbnN0IHM9dGVbbl07aWYocyYmcy5mbGFncyYyKXtpZihlJiZzLmlkIT09ZS51aWQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRpbnVlO3RlLnNwbGljZShuLDEpLG4tLSxzLmZsYWdzJjQmJihzLmZsYWdzJj0tMiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHMoKSxzLmZsYWdzJjR8fChzLmZsYWdzJj0tMil9fX1mdW5jdGlvbiB0cihlKXtpZihrZScKICAgICAgICAgICAgICAgICAgICAgICAgYicubGVuZ3RoKXtjb25zdCB0PVsuLi5uZXcgU2V0KGtlKV0uc29ydCgobixzKT0+YnQobiktJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J0KHMpKTtpZihrZS5sZW5ndGg9MCxJZSl7SWUucHVzaCguLi50KTtyZXR1cm59Zm9yKEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZT10LHplPTA7emU8SWUubGVuZ3RoO3plKyspe2NvbnN0IG49SWVbemVdO24uZmxhZ3MmNCcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJihuLmZsYWdzJj0tMiksbi5mbGFncyY4fHxuKCksbi5mbGFncyY9LTJ9SWU9bnVsbCx6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9MH19Y29uc3QgYnQ9ZT0+ZS5pZD09bnVsbD9lLmZsYWdzJjI/LTE6MS8wOmUuaWQ7ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG5yKGUpe3RyeXtmb3IoeWU9MDt5ZTx0ZS5sZW5ndGg7eWUrKyl7Y29uc3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9dGVbeWVdO3QmJiEodC5mbGFncyY4KSYmKHQuZmxhZ3MmNCYmKHQuZmxhZ3MmPS0yKSxUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QodCx0LmksdC5pPzE1OjE0KSx0LmZsYWdzJjR8fCh0LmZsYWdzJj0tMikpfX1maW5hbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXtmb3IoO3llPHRlLmxlbmd0aDt5ZSsrKXtjb25zdCB0PXRlW3llXTt0JiYodC5mbGFncycKICAgICAgICAgICAgICAgICAgICAgICAgYicmPS0yKX15ZT0tMSx0ZS5sZW5ndGg9MCx0cigpLCR0PW51bGwsKHRlLmxlbmd0aHx8a2UuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbmd0aCkmJm5yKCl9fWxldCB1ZT1udWxsLHNyPW51bGw7ZnVuY3Rpb24gVnQoZSl7Y28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHQ9dWU7cmV0dXJuIHVlPWUsc3I9ZSYmZS50eXBlLl9fc2NvcGVJZHx8bnVsbCx0fScKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBSaShlLHQ9dWUsbil7aWYoIXR8fGUuX24pcmV0dXJuIGU7Y29uc3Qgcz0oJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uLnIpPT57cy5fZCYmdXMoLTEpO2NvbnN0IGk9VnQodCk7bGV0IG87dHJ5e289ZSguLi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncil9ZmluYWxseXtWdChpKSxzLl9kJiZ1cygxKX1yZXR1cm4gb307cmV0dXJuIHMuX249IScKICAgICAgICAgICAgICAgICAgICAgICAgYicwLHMuX2M9ITAscy5fZD0hMCxzfWZ1bmN0aW9uIE1pKGUsdCl7aWYodWU9PT1udWxsKXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gZTtjb25zdCBuPWVuKHVlKSxzPWUuZGlyc3x8KGUuZGlycz1bXSk7Zm9yKGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj0wO3I8dC5sZW5ndGg7cisrKXtsZXRbaSxvLGwsYz1MXT10W3JdO2kmJihSKGkpJiYoaScKICAgICAgICAgICAgICAgICAgICAgICAgYic9e21vdW50ZWQ6aSx1cGRhdGVkOml9KSxpLmRlZXAmJkFlKG8pLHMucHVzaCh7ZGlyOmksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luc3RhbmNlOm4sdmFsdWU6byxvbGRWYWx1ZTp2b2lkIDAsYXJnOmwsbW9kaWZpZXJzOmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSkpfXJldHVybiBlfWZ1bmN0aW9uIEtlKGUsdCxuLHMpe2NvbnN0IHI9ZS5kaXJzLGk9dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJnQuZGlycztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7Y29uc3QgbD1yW29dO2kmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYobC5vbGRWYWx1ZT1pW29dLnZhbHVlKTtsZXQgYz1sLmRpcltzXTtjJiYoamUoKSxDZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYyxuLDgsW2UuZWwsbCxlLHRdKSxMZSgpKX19Y29uc3QgSWk9U3ltYm9sKCJfdnRlIiksRicKICAgICAgICAgICAgICAgICAgICAgICAgYidpPWU9PmUuX19pc1RlbGVwb3J0O2Z1bmN0aW9uIEJuKGUsdCl7ZS5zaGFwZUZsYWcmNiYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuY29tcG9uZW50PyhlLnRyYW5zaXRpb249dCxCbihlLmNvbXBvbmVudC5zdWJUcmVlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSk6ZS5zaGFwZUZsYWcmMTI4PyhlLnNzQ29udGVudC50cmFuc2l0aW9uPXQuY2xvbmUoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3NDb250ZW50KSxlLnNzRmFsbGJhY2sudHJhbnNpdGlvbj10LmNsb25lKGUuc3NGYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2spKTplLnRyYW5zaXRpb249dH1mdW5jdGlvbiBycihlKXtlLmlkcz1bZS5pZHNbMF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInK2UuaWRzWzJdKysrIi0iLDAsMF19ZnVuY3Rpb24gVXQoZSx0LG4scyxyPSExKXtpZihFKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSl7ZS5mb3JFYWNoKChGLEkpPT5VdChGLHQmJihFKHQpP3RbSV06dCksbixzLHIpKTtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJufWlmKGh0KHMpJiYhcil7cy5zaGFwZUZsYWcmNTEyJiZzLnR5cGUuX19hc3luY1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlZCYmcy5jb21wb25lbnQuc3ViVHJlZS5jb21wb25lbnQmJlV0KGUsdCxuLHMuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudC5zdWJUcmVlKTtyZXR1cm59Y29uc3QgaT1zLnNoYXBlRmxhZyY0P2VuKHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudCk6cy5lbCxvPXI/bnVsbDppLHtpOmwscjpjfT1lLGg9dCYmdC5yLGE9bC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmcz09PUw/bC5yZWZzPXt9OmwucmVmcyxwPWwuc2V0dXBTdGF0ZSxUPUQocCksQz1wPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PUw/KCk9PiExOkY9PkgoVCxGKTtpZihoIT1udWxsJiZoIT09YyYmKEooaCk/KGFbaF09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsQyhoKSYmKHBbaF09bnVsbCkpOlEoaCkmJihoLnZhbHVlPW51bGwpKSxSKGMpKVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChjLGwsMTIsW28sYV0pO2Vsc2V7Y29uc3QgRj1KKGMpLEk9UShjKTtpZihGfHxJKXtjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3Qgej0oKT0+e2lmKGUuZil7Y29uc3Qgaj1GP0MoYyk/cFtjXTphW2NdOmMudmFsdWU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I/RShqKSYmUm4oaixpKTpFKGopP2ouaW5jbHVkZXMoaSl8fGoucHVzaChpKTpGPyhhW2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXT1baV0sQyhjKSYmKHBbY109YVtjXSkpOihjLnZhbHVlPVtpXSxlLmsmJihhW2Uua109YycKICAgICAgICAgICAgICAgICAgICAgICAgYicudmFsdWUpKX1lbHNlIEY/KGFbY109byxDKGMpJiYocFtjXT1vKSk6SSYmKGMudmFsdWU9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28sZS5rJiYoYVtlLmtdPW8pKX07bz8oei5pZD0tMSxsZSh6LG4pKTp6KCl9fX1HdCgpLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXF1ZXN0SWRsZUNhbGxiYWNrO0d0KCkuY2FuY2VsSWRsZUNhbGxiYWNrO2NvbnN0IGh0PScKICAgICAgICAgICAgICAgICAgICAgICAgYidlPT4hIWUudHlwZS5fX2FzeW5jTG9hZGVyLGlyPWU9PmUudHlwZS5fX2lzS2VlcEFsaXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBEaShlLHQpe29yKGUsImEiLHQpfWZ1bmN0aW9uIEhpKGUsdCl7b3IoZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImRhIix0KX1mdW5jdGlvbiBvcihlLHQsbj1uZSl7Y29uc3Qgcz1lLl9fd2RjfHwoZS5fXycKICAgICAgICAgICAgICAgICAgICAgICAgYid3ZGM9KCk9PntsZXQgcj1uO2Zvcig7cjspe2lmKHIuaXNEZWFjdGl2YXRlZClyZXR1cm47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9ci5wYXJlbnR9cmV0dXJuIGUoKX0pO2lmKFp0KHQscyxuKSxuKXtsZXQgcj1uLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7Zm9yKDtyJiZyLnBhcmVudDspaXIoci5wYXJlbnQudm5vZGUpJiZOaShzLHQsbixyKScKICAgICAgICAgICAgICAgICAgICAgICAgYicscj1yLnBhcmVudH19ZnVuY3Rpb24gTmkoZSx0LG4scyl7Y29uc3Qgcj1adCh0LGUscywhJwogICAgICAgICAgICAgICAgICAgICAgICBiJzApO2xyKCgpPT57Um4oc1t0XSxyKX0sbil9ZnVuY3Rpb24gWnQoZSx0LG49bmUscz0hMSknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKG4pe2NvbnN0IHI9bltlXXx8KG5bZV09W10pLGk9dC5fX3dlaHx8KHQuX193ZWg9KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuLi5vKT0+e2plKCk7Y29uc3QgbD1DdChuKSxjPUNlKHQsbixlLG8pO3JldHVybiBsKCksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xlKCksY30pO3JldHVybiBzP3IudW5zaGlmdChpKTpyLnB1c2goaSksaX19Y29uc3QgUGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWU9Pih0LG49bmUpPT57KCFTdHx8ZT09PSJzcCIpJiZadChlLCguLi5zKT0+dCguLi5zKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsbil9LGppPVBlKCJibSIpLExpPVBlKCJtIiksJGk9UGUoImJ1IiksVmk9UGUoInUiKSxVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k9UGUoImJ1bSIpLGxyPVBlKCJ1bSIpLEtpPVBlKCJzcCIpLEJpPVBlKCJydGciKSxXaT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUGUoInJ0YyIpO2Z1bmN0aW9uIHFpKGUsdD1uZSl7WnQoImVjIixlLHQpfWNvbnN0IEppPScKICAgICAgICAgICAgICAgICAgICAgICAgYidTeW1ib2wuZm9yKCJ2LW5kYyIpO2Z1bmN0aW9uIEdpKGUsdCxuLHMpe2xldCByO2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpPW4sbz1FKGUpO2lmKG98fEooZSkpe2NvbnN0IGw9byYmUWUoZSk7bGV0IGM9ITE7bCYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJihjPSFhZShlKSxlPXp0KGUpKSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBoPScKICAgICAgICAgICAgICAgICAgICAgICAgYicwLGE9ZS5sZW5ndGg7aDxhO2grKylyW2hdPXQoYz9aKGVbaF0pOmVbaF0saCx2b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2kpfWVsc2UgaWYodHlwZW9mIGU9PSJudW1iZXIiKXtyPW5ldyBBcnJheShlKTtmb3IobGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBsPTA7bDxlO2wrKylyW2xdPXQobCsxLGwsdm9pZCAwLGkpfWVsc2UgaWYoSyhlKSlpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicoZVtTeW1ib2wuaXRlcmF0b3JdKXI9QXJyYXkuZnJvbShlLChsLGMpPT50KGwsYyx2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwLGkpKTtlbHNle2NvbnN0IGw9T2JqZWN0LmtleXMoZSk7cj1uZXcgQXJyYXkobC5sZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ3RoKTtmb3IobGV0IGM9MCxoPWwubGVuZ3RoO2M8aDtjKyspe2NvbnN0IGE9bFtjXTtyWycKICAgICAgICAgICAgICAgICAgICAgICAgYidjXT10KGVbYV0sYSxjLGkpfX1lbHNlIHI9W107cmV0dXJuIHJ9Y29uc3Qgd249ZT0+ZT9SJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZSk/ZW4oZSk6d24oZS5wYXJlbnQpOm51bGwscHQ9c2UoT2JqZWN0LmNyZWF0ZShudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCkseyQ6ZT0+ZSwkZWw6ZT0+ZS52bm9kZS5lbCwkZGF0YTplPT5lLmRhdGEsJHByb3BzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidlPT5lLnByb3BzLCRhdHRyczplPT5lLmF0dHJzLCRzbG90czplPT5lLnNsb3RzLCRyZWZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzplPT5lLnJlZnMsJHBhcmVudDplPT53bihlLnBhcmVudCksJHJvb3Q6ZT0+d24oZS5yb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCksJGhvc3Q6ZT0+ZS5jZSwkZW1pdDplPT5lLmVtaXQsJG9wdGlvbnM6ZT0+Y3IoZSksJCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JjZVVwZGF0ZTplPT5lLmZ8fChlLmY9KCk9PntLbihlLnVwZGF0ZSl9KSwkbmV4dFRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NrOmU9PmUubnx8KGUubj1FaS5iaW5kKGUucHJveHkpKSwkd2F0Y2g6ZT0+X28uYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSl9KSxjbj0oZSx0KT0+ZSE9PUwmJiFlLl9faXNTY3JpcHRTZXR1cCYmSChlLHQpLFlpPScKICAgICAgICAgICAgICAgICAgICAgICAgYid7Z2V0KHtfOmV9LHQpe2lmKHQ9PT0iX192X3NraXAiKXJldHVybiEwO2NvbnN0e2N0eDpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxzZXR1cFN0YXRlOnMsZGF0YTpyLHByb3BzOmksYWNjZXNzQ2FjaGU6byx0eXBlOmwsYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncENvbnRleHQ6Y309ZTtsZXQgaDtpZih0WzBdIT09IiQiKXtjb25zdCBDPW9bdF07aWYoQycKICAgICAgICAgICAgICAgICAgICAgICAgYichPT12b2lkIDApc3dpdGNoKEMpe2Nhc2UgMTpyZXR1cm4gc1t0XTtjYXNlIDI6cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByW3RdO2Nhc2UgNDpyZXR1cm4gblt0XTtjYXNlIDM6cmV0dXJuIGlbdF19ZWxzZXtpZignCiAgICAgICAgICAgICAgICAgICAgICAgIGInY24ocyx0KSlyZXR1cm4gb1t0XT0xLHNbdF07aWYociE9PUwmJkgocix0KSlyZXR1cm4gbycKICAgICAgICAgICAgICAgICAgICAgICAgYidbdF09MixyW3RdO2lmKChoPWUucHJvcHNPcHRpb25zWzBdKSYmSChoLHQpKXJldHVybiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1t0XT0zLGlbdF07aWYobiE9PUwmJkgobix0KSlyZXR1cm4gb1t0XT00LG5bdF07VG4mJignCiAgICAgICAgICAgICAgICAgICAgICAgIGInb1t0XT0wKX19Y29uc3QgYT1wdFt0XTtsZXQgcCxUO2lmKGEpcmV0dXJuIHQ9PT0iJGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycyImJlgoZS5hdHRycywiZ2V0IiwiIiksYShlKTtpZigocD1sLl9fY3NzTW9kdWxlcykmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYocD1wW3RdKSlyZXR1cm4gcDtpZihuIT09TCYmSChuLHQpKXJldHVybiBvW3RdPTQsblsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndF07aWYoVD1jLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLEgoVCx0KSlyZXR1cm4gVFt0XScKICAgICAgICAgICAgICAgICAgICAgICAgYid9LHNldCh7XzplfSx0LG4pe2NvbnN0e2RhdGE6cyxzZXR1cFN0YXRlOnIsY3R4Oml9PWU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBjbihyLHQpPyhyW3RdPW4sITApOnMhPT1MJiZIKHMsdCk/KHNbdF09biwhMCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOkgoZS5wcm9wcyx0KXx8dFswXT09PSIkIiYmdC5zbGljZSgxKWluIGU/ITE6KGlbdF09bicKICAgICAgICAgICAgICAgICAgICAgICAgYicsITApfSxoYXMoe186e2RhdGE6ZSxzZXR1cFN0YXRlOnQsYWNjZXNzQ2FjaGU6bixjdHg6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsYXBwQ29udGV4dDpyLHByb3BzT3B0aW9uczppfX0sbyl7bGV0IGw7cmV0dXJuISFuW28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXXx8ZSE9PUwmJkgoZSxvKXx8Y24odCxvKXx8KGw9aVswXSkmJkgobCxvKXx8SChzLG8pfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8SChwdCxvKXx8SChyLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLG8pfSxkZWZpbmVQcm9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VydHkoZSx0LG4pe3JldHVybiBuLmdldCE9bnVsbD9lLl8uYWNjZXNzQ2FjaGVbdF09MDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInSChuLCJ2YWx1ZSIpJiZ0aGlzLnNldChlLHQsbi52YWx1ZSxudWxsKSxSZWZsZWN0LmRlZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVQcm9wZXJ0eShlLHQsbil9fTtmdW5jdGlvbiBucyhlKXtyZXR1cm4gRShlKT9lLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R1Y2UoKHQsbik9Pih0W25dPW51bGwsdCkse30pOmV9bGV0IFRuPSEwO2Z1bmN0aW9uIHonCiAgICAgICAgICAgICAgICAgICAgICAgIGInaShlKXtjb25zdCB0PWNyKGUpLG49ZS5wcm94eSxzPWUuY3R4O1RuPSExLHQuYmVmb3JlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZSYmc3ModC5iZWZvcmVDcmVhdGUsZSwiYmMiKTtjb25zdHtkYXRhOnIsY29tcHV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkOmksbWV0aG9kczpvLHdhdGNoOmwscHJvdmlkZTpjLGluamVjdDpoLGNyZWF0ZWQ6YSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVmb3JlTW91bnQ6cCxtb3VudGVkOlQsYmVmb3JlVXBkYXRlOkMsdXBkYXRlZDpGLGFjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmF0ZWQ6SSxkZWFjdGl2YXRlZDp6LGJlZm9yZURlc3Ryb3k6aixiZWZvcmVVbm1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpXLGRlc3Ryb3llZDpxLHVubW91bnRlZDpBLHJlbmRlcjpHLHJlbmRlclRyYWNrZWQ6UmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHJlbmRlclRyaWdnZXJlZDpoZSxlcnJvckNhcHR1cmVkOk1lLHNlcnZlclByZWZldGNoOicKICAgICAgICAgICAgICAgICAgICAgICAgYid2dCxleHBvc2U6JGUsaW5oZXJpdEF0dHJzOm50LGNvbXBvbmVudHM6T3QsZGlyZWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M6RXQsZmlsdGVyczp0bn09dDtpZihoJiZYaShoLHMsbnVsbCksbylmb3IoY29uc3QgQiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gbyl7Y29uc3QgJD1vW0JdO1IoJCkmJihzW0JdPSQuYmluZChuKSl9aWYocil7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IEI9ci5jYWxsKG4sbik7SyhCKSYmKGUuZGF0YT0kbihCKSl9aWYoVG49ITAsaSlmb3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IEIgaW4gaSl7Y29uc3QgJD1pW0JdLFZlPVIoJCk/JC5iaW5kKG4sbik6UigkLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQpPyQuZ2V0LmJpbmQobixuKTp3ZSxBdD0hUigkKSYmUigkLnNldCk/JC5zZXQuYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicobik6d2UsVWU9am8oe2dldDpWZSxzZXQ6QXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsQix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5VZS52YWx1ZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0OnBlPT5VZS52YWx1ZT1wZX0pfWlmKGwpZm9yKGNvbnN0IEIgaW4gbClmcihsW0JdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLG4sQik7aWYoYyl7Y29uc3QgQj1SKGMpP2MuY2FsbChuKTpjO1JlZmxlY3Qub3duS2V5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoQikuZm9yRWFjaCgkPT57bm8oJCxCWyRdKX0pfWEmJnNzKGEsZSwiYyIpO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBrKEIsJCl7RSgkKT8kLmZvckVhY2goVmU9PkIoVmUuYmluZChuKSkpOiQmJkIoJC5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZChuKSl9aWYoayhqaSxwKSxrKExpLFQpLGsoJGksQyksayhWaSxGKSxrKERpLEkpLGsoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hpLHopLGsocWksTWUpLGsoV2ksUmUpLGsoQmksaGUpLGsoVWksVyksayhscixBKSxrKEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSx2dCksRSgkZSkpaWYoJGUubGVuZ3RoKXtjb25zdCBCPWUuZXhwb3NlZHx8KGUuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWQ9e30pOyRlLmZvckVhY2goJD0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCQse2dlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6KCk9Pm5bJF0sc2V0OlZlPT5uWyRdPVZlfSl9KX1lbHNlIGUuZXhwb3NlZHx8KGUuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zZWQ9e30pO0cmJmUucmVuZGVyPT09d2UmJihlLnJlbmRlcj1HKSxudCE9bnVsbCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLmluaGVyaXRBdHRycz1udCksT3QmJihlLmNvbXBvbmVudHM9T3QpLEV0JiYoZS5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aXZlcz1FdCksdnQmJnJyKGUpfWZ1bmN0aW9uIFhpKGUsdCxuPXdlKXtFKGUpJiYoZT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ24oZSkpO2Zvcihjb25zdCBzIGluIGUpe2NvbnN0IHI9ZVtzXTtsZXQgaTtLKHIpPyJkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCJpbiByP2k9RHQoci5mcm9tfHxzLHIuZGVmYXVsdCwhMCk6aT1EdChyLmZyb218JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3xzKTppPUR0KHIpLFEoaSk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscyx7ZW51bWVyYWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+aS52YWx1ZSxzZXQ6bz0+aS52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic9b30pOnRbc109aX19ZnVuY3Rpb24gc3MoZSx0LG4pe0NlKEUoZSk/ZS5tYXAocz0+cy5iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCh0LnByb3h5KSk6ZS5iaW5kKHQucHJveHkpLHQsbil9ZnVuY3Rpb24gZnIoZSx0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHMpe2xldCByPXMuaW5jbHVkZXMoIi4iKT9UcihuLHMpOigpPT5uW3NdO2lmKEooZSkpeycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpPXRbZV07UihpKSYmYW4ocixpKX1lbHNlIGlmKFIoZSkpYW4ocixlLmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pKTtlbHNlIGlmKEsoZSkpaWYoRShlKSllLmZvckVhY2goaT0+ZnIoaSx0LG4scykpO2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHNle2NvbnN0IGk9UihlLmhhbmRsZXIpP2UuaGFuZGxlci5iaW5kKG4pOnRbZS5oYW5kbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcl07UihpKSYmYW4ocixpLGUpfX1mdW5jdGlvbiBjcihlKXtjb25zdCB0PWUudHlwZSx7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21peGluczpuLGV4dGVuZHM6c309dCx7bWl4aW5zOnIsb3B0aW9uc0NhY2hlOmksY29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOm99fT1lLmFwcENvbnRleHQsbD1pLmdldCh0KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7bGV0IGM7cmV0dXJuIGw/Yz1sOiFyLmxlbmd0aCYmIW4mJiFzP2M9dDooYz17fSxyLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgmJnIuZm9yRWFjaChoPT5LdChjLGgsbywhMCkpLEt0KGMsdCxvKSksSyh0KSYmaS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0KHQsYyksY31mdW5jdGlvbiBLdChlLHQsbixzPSExKXtjb25zdHttaXhpbnM6cixleCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kczppfT10O2kmJkt0KGUsaSxuLCEwKSxyJiZyLmZvckVhY2gobz0+S3QoZSxvLG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyEwKSk7Zm9yKGNvbnN0IG8gaW4gdClpZighKHMmJm89PT0iZXhwb3NlIikpe2NvbnN0IGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVppW29dfHxuJiZuW29dO2Vbb109bD9sKGVbb10sdFtvXSk6dFtvXX1yZXR1cm4gZX1jbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgWmk9e2RhdGE6cnMscHJvcHM6aXMsZW1pdHM6aXMsbWV0aG9kczpjdCxjb21wdXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q6Y3QsYmVmb3JlQ3JlYXRlOmVlLGNyZWF0ZWQ6ZWUsYmVmb3JlTW91bnQ6ZWUsbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQ6ZWUsYmVmb3JlVXBkYXRlOmVlLHVwZGF0ZWQ6ZWUsYmVmb3JlRGVzdHJveTplZSxiZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JlVW5tb3VudDplZSxkZXN0cm95ZWQ6ZWUsdW5tb3VudGVkOmVlLGFjdGl2YXRlZDplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsZGVhY3RpdmF0ZWQ6ZWUsZXJyb3JDYXB0dXJlZDplZSxzZXJ2ZXJQcmVmZXRjaDplZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50czpjdCxkaXJlY3RpdmVzOmN0LHdhdGNoOmtpLHByb3ZpZGU6cnMsaW5qZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdDpRaX07ZnVuY3Rpb24gcnMoZSx0KXtyZXR1cm4gdD9lP2Z1bmN0aW9uKCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZShSKGUpP2UuY2FsbCh0aGlzLHRoaXMpOmUsUih0KT90LmNhbGwodGhpcyx0aGlzKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCl9OnQ6ZX1mdW5jdGlvbiBRaShlLHQpe3JldHVybiBjdChDbihlKSxDbih0KSl9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIENuKGUpe2lmKEUoZSkpe2NvbnN0IHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g7bisrKXRbZVtuXV09ZVtuXTtyZXR1cm4gdH1yZXR1cm4gZX1mdW5jdGlvbiBlZShlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gZT9bLi4ubmV3IFNldChbXS5jb25jYXQoZSx0KSldOnR9ZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUsdCl7cmV0dXJuIGU/c2UoT2JqZWN0LmNyZWF0ZShudWxsKSxlLHQpOnR9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGlzKGUsdCl7cmV0dXJuIGU/RShlKSYmRSh0KT9bLi4ubmV3IFNldChbLi4uZSwuLi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndF0pXTpzZShPYmplY3QuY3JlYXRlKG51bGwpLG5zKGUpLG5zKHQ/P3t9KSk6dH1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24ga2koZSx0KXtpZighZSlyZXR1cm4gdDtpZighdClyZXR1cm4gZTtjb25zdCBuPXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhPYmplY3QuY3JlYXRlKG51bGwpLGUpO2Zvcihjb25zdCBzIGluIHQpbltzXT1lZShlW3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiB1cigpe3JldHVybnthcHA6bnVsbCxjb25maScKICAgICAgICAgICAgICAgICAgICAgICAgYidnOntpc05hdGl2ZVRhZzpqcixwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGU6bmV3IFdlYWtNYXB9fWxldCBlbz0wO2Z1bmN0aW9uIHRvKGUsdCl7cmV0dXJuIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihzLHI9bnVsbCl7UihzKXx8KHM9c2Uoe30scykpLHIhPW51bGwmJiFLKHIpJiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9bnVsbCk7Y29uc3QgaT11cigpLG89bmV3IFdlYWtTZXQsbD1bXTtsZXQgYz0hMTtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgaD1pLmFwcD17X3VpZDplbysrLF9jb21wb25lbnQ6cyxfcHJvcHM6cixfY29udGFpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcjpudWxsLF9jb250ZXh0OmksX2luc3RhbmNlOm51bGwsdmVyc2lvbjpMbyxnZXQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpZygpe3JldHVybiBpLmNvbmZpZ30sc2V0IGNvbmZpZyhhKXt9LHVzZShhLC4uLnApe3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gby5oYXMoYSl8fChhJiZSKGEuaW5zdGFsbCk/KG8uYWRkKGEpLGEuaW5zdGFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoaCwuLi5wKSk6UihhKSYmKG8uYWRkKGEpLGEoaCwuLi5wKSkpLGh9LG1peGluKGEpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gaS5taXhpbnMuaW5jbHVkZXMoYSl8fGkubWl4aW5zLnB1c2goYSksaH0sY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudChhLHApe3JldHVybiBwPyhpLmNvbXBvbmVudHNbYV09cCxoKTppLmNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzW2FdfSxkaXJlY3RpdmUoYSxwKXtyZXR1cm4gcD8oaS5kaXJlY3RpdmVzW2FdPXAsaCk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2kuZGlyZWN0aXZlc1thXX0sbW91bnQoYSxwLFQpe2lmKCFjKXtjb25zdCBDPWguX2NlVk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlfHxIZShzLHIpO3JldHVybiBDLmFwcENvbnRleHQ9aSxUPT09ITA/VD0ic3ZnIjpUPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PSExJiYoVD12b2lkIDApLGUoQyxhLFQpLGM9ITAsaC5fY29udGFpbmVyPWEsYS5fX3Z1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VfYXBwX189aCxlbihDLmNvbXBvbmVudCl9fSxvblVubW91bnQoYSl7bC5wdXNoKGEpfSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5tb3VudCgpe2MmJihDZShsLGguX2luc3RhbmNlLDE2KSxlKG51bGwsaC5fY29udGFpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciksZGVsZXRlIGguX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUoYSxwKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGkucHJvdmlkZXNbYV09cCxofSxydW5XaXRoQ29udGV4dChhKXtjb25zdCBwPWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtldD1oO3RyeXtyZXR1cm4gYSgpfWZpbmFsbHl7ZXQ9cH19fTtyZXR1cm4gaH19bGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldD1udWxsO2Z1bmN0aW9uIG5vKGUsdCl7aWYobmUpe2xldCBuPW5lLnByb3ZpZGVzO2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBzPW5lLnBhcmVudCYmbmUucGFyZW50LnByb3ZpZGVzO3M9PT1uJiYobj1uZS5wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZXM9T2JqZWN0LmNyZWF0ZShzKSksbltlXT10fX1mdW5jdGlvbiBEdChlLHQsbj0hMScKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2NvbnN0IHM9bmV8fHVlO2lmKHN8fGV0KXtjb25zdCByPWV0P2V0Ll9jb250ZXh0LnByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlczpzP3MucGFyZW50PT1udWxsP3Mudm5vZGUuYXBwQ29udGV4dCYmcy52bm9kZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwQ29udGV4dC5wcm92aWRlczpzLnBhcmVudC5wcm92aWRlczp2b2lkIDA7aWYociYmZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW4gcilyZXR1cm4gcltlXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIG4mJlIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpP3QuY2FsbChzJiZzLnByb3h5KTp0fX1jb25zdCBhcj17fSxkcj0oKT0+T2JqZWN0LmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGUoYXIpLGhyPWU9Pk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PWFyO2Z1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBzbyhlLHQsbixzPSExKXtjb25zdCByPXt9LGk9ZHIoKTtlLnByb3BzRGVmYXVsdHM9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ09iamVjdC5jcmVhdGUobnVsbCkscHIoZSx0LHIsaSk7Zm9yKGNvbnN0IG8gaW4gZS5wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHNPcHRpb25zWzBdKW8gaW4gcnx8KHJbb109dm9pZCAwKTtuP2UucHJvcHM9cz9yOl9pKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyKTplLnR5cGUucHJvcHM/ZS5wcm9wcz1yOmUucHJvcHM9aSxlLmF0dHJzPWl9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHJvKGUsdCxuLHMpe2NvbnN0e3Byb3BzOnIsYXR0cnM6aSx2bm9kZTp7cGF0Y2hGbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZzpvfX09ZSxsPUQociksW2NdPWUucHJvcHNPcHRpb25zO2xldCBoPSExO2lmKChzfHxvPicKICAgICAgICAgICAgICAgICAgICAgICAgYicwKSYmIShvJjE2KSl7aWYobyY4KXtjb25zdCBhPWUudm5vZGUuZHluYW1pY1Byb3BzO2ZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IobGV0IHA9MDtwPGEubGVuZ3RoO3ArKyl7bGV0IFQ9YVtwXTtpZihRdChlLmVtaXRzT3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsVCkpY29udGludWU7Y29uc3QgQz10W1RdO2lmKGMpaWYoSChpLFQpKUMhPT1pWycKICAgICAgICAgICAgICAgICAgICAgICAgYidUXSYmKGlbVF09QyxoPSEwKTtlbHNle2NvbnN0IEY9TmUoVCk7cltGXT12bihjLGwsRixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxlLCExKX1lbHNlIEMhPT1pW1RdJiYoaVtUXT1DLGg9ITApfX19ZWxzZXtwcihlLHQsciwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSkmJihoPSEwKTtsZXQgYTtmb3IoY29uc3QgcCBpbiBsKSghdHx8IUgodCxwKSYmKChhPScKICAgICAgICAgICAgICAgICAgICAgICAgYidHZShwKSk9PT1wfHwhSCh0LGEpKSkmJihjP24mJihuW3BdIT09dm9pZCAwfHxuW2FdIT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQgMCkmJihyW3BdPXZuKGMsbCxwLHZvaWQgMCxlLCEwKSk6ZGVsZXRlIHJbcF0pO2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihpIT09bClmb3IoY29uc3QgcCBpbiBpKSghdHx8IUgodCxwKSkmJihkZWxldGUgaVtwXScKICAgICAgICAgICAgICAgICAgICAgICAgYicsaD0hMCl9aCYmRWUoZS5hdHRycywic2V0IiwiIil9ZnVuY3Rpb24gcHIoZSx0LG4scyl7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0W3IsaV09ZS5wcm9wc09wdGlvbnM7bGV0IG89ITEsbDtpZih0KWZvcihsZXQgYyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gdCl7aWYodXQoYykpY29udGludWU7Y29uc3QgaD10W2NdO2xldCBhO3ImJkgocixhPScKICAgICAgICAgICAgICAgICAgICAgICAgYidOZShjKSk/IWl8fCFpLmluY2x1ZGVzKGEpP25bYV09aDoobHx8KGw9e30pKVthXT1oOlF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlLmVtaXRzT3B0aW9ucyxjKXx8KCEoYyBpbiBzKXx8aCE9PXNbY10pJiYoc1tjXT1oLG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSEwKX1pZihpKXtjb25zdCBjPUQobiksaD1sfHxMO2ZvcihsZXQgYT0wO2E8aS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoO2ErKyl7Y29uc3QgcD1pW2FdO25bcF09dm4ocixjLHAsaFtwXSxlLCFIKGgscCkpfX1yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIG99ZnVuY3Rpb24gdm4oZSx0LG4scyxyLGkpe2NvbnN0IG89ZVtuXTtpZihvIT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCl7Y29uc3QgbD1IKG8sImRlZmF1bHQiKTtpZihsJiZzPT09dm9pZCAwKXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYz1vLmRlZmF1bHQ7aWYoby50eXBlIT09RnVuY3Rpb24mJiFvLnNraXBGYWN0b3J5JiZSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhjKSl7Y29uc3R7cHJvcHNEZWZhdWx0czpofT1yO2lmKG4gaW4gaClzPWhbbl07ZWxzZXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgYT1DdChyKTtzPWhbbl09Yy5jYWxsKG51bGwsdCksYSgpfX1lbHNlIHM9YztyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSYmci5jZS5fc2V0UHJvcChuLHMpfW9bMF0mJihpJiYhbD9zPSExOm9bMV0mJihzPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyIifHxzPT09R2UobikpJiYocz0hMCkpfXJldHVybiBzfWNvbnN0IGlvPW5ldyBXZWFrTWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncDtmdW5jdGlvbiBncihlLHQsbj0hMSl7Y29uc3Qgcz1uP2lvOnQucHJvcHNDYWNoZSxyPScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLmdldChlKTtpZihyKXJldHVybiByO2NvbnN0IGk9ZS5wcm9wcyxvPXt9LGw9W107bGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjPSExO2lmKCFSKGUpKXtjb25zdCBhPXA9PntjPSEwO2NvbnN0W1QsQ109Z3IocCx0LCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCk7c2UobyxUKSxDJiZsLnB1c2goLi4uQyl9OyFuJiZ0Lm1peGlucy5sZW5ndGgmJnQubScKICAgICAgICAgICAgICAgICAgICAgICAgYidpeGlucy5mb3JFYWNoKGEpLGUuZXh0ZW5kcyYmYShlLmV4dGVuZHMpLGUubWl4aW5zJiZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5taXhpbnMuZm9yRWFjaChhKX1pZighaSYmIWMpcmV0dXJuIEsoZSkmJnMuc2V0KGUsWGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSxYZTtpZihFKGkpKWZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXtjb25zdCBwPU5lKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpW2FdKTtvcyhwKSYmKG9bcF09TCl9ZWxzZSBpZihpKWZvcihjb25zdCBhIGluIGkpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBwPU5lKGEpO2lmKG9zKHApKXtjb25zdCBUPWlbYV0sQz1vW3BdPUUoVCl8fFIoVCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInP3t0eXBlOlR9OnNlKHt9LFQpLEY9Qy50eXBlO2xldCBJPSExLHo9ITA7aWYoRShGKSlmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKGxldCBqPTA7ajxGLmxlbmd0aDsrK2ope2NvbnN0IFc9RltqXSxxPVIoVykmJlcubmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7aWYocT09PSJCb29sZWFuIil7ST0hMDticmVha31lbHNlIHE9PT0iU3RyaW5nIiYmKHonCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSExKX1lbHNlIEk9UihGKSYmRi5uYW1lPT09IkJvb2xlYW4iO0NbMF09SSxDWzFdPXosKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJfHxIKEMsImRlZmF1bHQiKSkmJmwucHVzaChwKX19Y29uc3QgaD1bbyxsXTtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0soZSkmJnMuc2V0KGUsaCksaH1mdW5jdGlvbiBvcyhlKXtyZXR1cm4gZVswXSE9PSIkIiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiF1dChlKX1jb25zdCBfcj1lPT5lWzBdPT09Il8ifHxlPT09IiRzdGFibGUiLFduPWU9PicKICAgICAgICAgICAgICAgICAgICAgICAgYidFKGUpP2UubWFwKFNlKTpbU2UoZSldLG9vPShlLHQsbik9PntpZih0Ll9uKXJldHVybiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJztjb25zdCBzPVJpKCguLi5yKT0+V24odCguLi5yKSksbik7cmV0dXJuIHMuX2M9ITEsc30nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG1yPShlLHQsbik9Pntjb25zdCBzPWUuX2N0eDtmb3IoY29uc3QgciBpbiBlKXtpZihfcicKICAgICAgICAgICAgICAgICAgICAgICAgYicocikpY29udGludWU7Y29uc3QgaT1lW3JdO2lmKFIoaSkpdFtyXT1vbyhyLGkscyk7ZWxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaWYoaSE9bnVsbCl7Y29uc3Qgbz1XbihpKTt0W3JdPSgpPT5vfX19LGJyPShlLHQpPT4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IG49V24odCk7ZS5zbG90cy5kZWZhdWx0PSgpPT5ufSx5cj0oZSx0LG4pPT57ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcihjb25zdCBzIGluIHQpKG58fHMhPT0iXyIpJiYoZVtzXT10W3NdKX0sbG89KGUsdCxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk9Pntjb25zdCBzPWUuc2xvdHM9ZHIoKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7Y28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHI9dC5fO3I/KHlyKHMsdCxuKSxuJiZNcyhzLCJfIixyLCEwKSk6bXIodCxzKX1lbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSB0JiZicihlLHQpfSxmbz0oZSx0LG4pPT57Y29uc3R7dm5vZGU6cyxzbG90czpyfT1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJztsZXQgaT0hMCxvPUw7aWYocy5zaGFwZUZsYWcmMzIpe2NvbnN0IGw9dC5fO2w/biYmbD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0xP2k9ITE6eXIocix0LG4pOihpPSF0LiRzdGFibGUsbXIodCxyKSksbz10fWVsc2UgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJihicihlLHQpLG89e2RlZmF1bHQ6MX0pO2lmKGkpZm9yKGNvbnN0IGwgaW4gcikhX3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wpJiZvW2xdPT1udWxsJiZkZWxldGUgcltsXX0sbGU9VG87ZnVuY3Rpb24gY28oZSl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB1byhlKX1mdW5jdGlvbiB1byhlLHQpe2NvbnN0IG49R3QoKTtuLl9fVlVFX189IScKICAgICAgICAgICAgICAgICAgICAgICAgYicwO2NvbnN0e2luc2VydDpzLHJlbW92ZTpyLHBhdGNoUHJvcDppLGNyZWF0ZUVsZW1lbnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28sY3JlYXRlVGV4dDpsLGNyZWF0ZUNvbW1lbnQ6YyxzZXRUZXh0Omgsc2V0RWxlbWVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0OmEscGFyZW50Tm9kZTpwLG5leHRTaWJsaW5nOlQsc2V0U2NvcGVJZDpDPXdlLGlucycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnRTdGF0aWNDb250ZW50OkZ9PWUsST0oZix1LGQsbT1udWxsLGc9bnVsbCxfPW51bGwsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1M9dm9pZCAwLHg9bnVsbCx5PSEhdS5keW5hbWljQ2hpbGRyZW4pPT57aWYoZj09PXUpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybjtmJiYhbHQoZix1KSYmKG09UHQoZikscGUoZixnLF8sITApLGY9bnVsbCksdS5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2hGbGFnPT09LTImJih5PSExLHUuZHluYW1pY0NoaWxkcmVuPW51bGwpO2NvbnN0e3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlOmIscmVmOk8sc2hhcGVGbGFnOnd9PXU7c3dpdGNoKGIpe2Nhc2Uga3Q6eihmLHUsZCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSk7YnJlYWs7Y2FzZSB5dDpqKGYsdSxkLG0pO2JyZWFrO2Nhc2UgZG46Zj09bnVsbCYmVycKICAgICAgICAgICAgICAgICAgICAgICAgYicodSxkLG0sUyk7YnJlYWs7Y2FzZSB4ZTpPdChmLHUsZCxtLGcsXyxTLHgseSk7YnJlYWs7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZmF1bHQ6dyYxP0coZix1LGQsbSxnLF8sUyx4LHkpOncmNj9FdChmLHUsZCxtLGcsXywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUyx4LHkpOih3JjY0fHx3JjEyOCkmJmIucHJvY2VzcyhmLHUsZCxtLGcsXyxTLHgseSxydCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpfU8hPW51bGwmJmcmJlV0KE8sZiYmZi5yZWYsXyx1fHxmLCF1KX0sej0oZix1LGQsbSk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz57aWYoZj09bnVsbClzKHUuZWw9bCh1LmNoaWxkcmVuKSxkLG0pO2Vsc2V7Y29uc3QgZz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndS5lbD1mLmVsO3UuY2hpbGRyZW4hPT1mLmNoaWxkcmVuJiZoKGcsdS5jaGlsZHJlbil9fScKICAgICAgICAgICAgICAgICAgICAgICAgYicsaj0oZix1LGQsbSk9PntmPT1udWxsP3ModS5lbD1jKHUuY2hpbGRyZW58fCIiKSxkLG0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJzp1LmVsPWYuZWx9LFc9KGYsdSxkLG0pPT57W2YuZWwsZi5hbmNob3JdPUYoZi5jaGlsZHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4sdSxkLG0sZi5lbCxmLmFuY2hvcil9LHE9KHtlbDpmLGFuY2hvcjp1fSxkLG0pPT57bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldCBnO2Zvcig7ZiYmZiE9PXU7KWc9VChmKSxzKGYsZCxtKSxmPWc7cyh1LGQsbSl9LEE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh7ZWw6ZixhbmNob3I6dX0pPT57bGV0IGQ7Zm9yKDtmJiZmIT09dTspZD1UKGYpLHIoZiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGY9ZDtyKHUpfSxHPShmLHUsZCxtLGcsXyxTLHgseSk9Pnt1LnR5cGU9PT0ic3ZnIj9TPScKICAgICAgICAgICAgICAgICAgICAgICAgYicic3ZnIjp1LnR5cGU9PT0ibWF0aCImJihTPSJtYXRobWwiKSxmPT1udWxsP1JlKHUsZCxtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxnLF8sUyx4LHkpOnZ0KGYsdSxnLF8sUyx4LHkpfSxSZT0oZix1LGQsbSxnLF8sUyx4KT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPntsZXQgeSxiO2NvbnN0e3Byb3BzOk8sc2hhcGVGbGFnOncsdHJhbnNpdGlvbjp2LGRpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzOlB9PWY7aWYoeT1mLmVsPW8oZi50eXBlLF8sTyYmTy5pcyxPKSx3Jjg/YSh5LGYuY2hpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkcmVuKTp3JjE2JiZNZShmLmNoaWxkcmVuLHksbnVsbCxtLGcsdW4oZixfKSxTLHgpLFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiZLZShmLG51bGwsbSwiY3JlYXRlZCIpLGhlKHksZixmLnNjb3BlSWQsUyxtKSxPKXtmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKGNvbnN0IFYgaW4gTylWIT09InZhbHVlIiYmIXV0KFYpJiZpKHksVixudWxsLE9bVl0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ18sbSk7InZhbHVlImluIE8mJmkoeSwidmFsdWUiLG51bGwsTy52YWx1ZSxfKSwoYj1PLm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInblZub2RlQmVmb3JlTW91bnQpJiZiZShiLG0sZil9UCYmS2UoZixudWxsLG0sImJlZm9yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3VudCIpO2NvbnN0IE09YW8oZyx2KTtNJiZ2LmJlZm9yZUVudGVyKHkpLHMoeSx1LGQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJywoKGI9TyYmTy5vblZub2RlTW91bnRlZCl8fE18fFApJiZsZSgoKT0+e2ImJmJlKGIsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiksTSYmdi5lbnRlcih5KSxQJiZLZShmLG51bGwsbSwibW91bnRlZCIpfSxnKX0saGU9KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmLHUsZCxtLGcpPT57aWYoZCYmQyhmLGQpLG0pZm9yKGxldCBfPTA7XzxtLmxlbmd0aDtfJwogICAgICAgICAgICAgICAgICAgICAgICBiJysrKUMoZixtW19dKTtpZihnKXtsZXQgXz1nLnN1YlRyZWU7aWYodT09PV98fHZyKF8udHknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGUpJiYoXy5zc0NvbnRlbnQ9PT11fHxfLnNzRmFsbGJhY2s9PT11KSl7Y29uc3QgUz1nLicKICAgICAgICAgICAgICAgICAgICAgICAgYid2bm9kZTtoZShmLFMsUy5zY29wZUlkLFMuc2xvdFNjb3BlSWRzLGcucGFyZW50KX19fSxNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9KGYsdSxkLG0sZyxfLFMseCx5PTApPT57Zm9yKGxldCBiPXk7YjxmLmxlbmd0aDtiKysnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtjb25zdCBPPWZbYl09eD9GZShmW2JdKTpTZShmW2JdKTtJKG51bGwsTyx1LGQsbSxnLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfLFMseCl9fSx2dD0oZix1LGQsbSxnLF8sUyk9Pntjb25zdCB4PXUuZWw9Zi5lbDtsZXR7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdGNoRmxhZzp5LGR5bmFtaWNDaGlsZHJlbjpiLGRpcnM6T309dTt5fD1mLnBhdGNoRmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWcmMTY7Y29uc3Qgdz1mLnByb3BzfHxMLHY9dS5wcm9wc3x8TDtsZXQgUDtpZihkJiZCZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZCwhMSksKFA9di5vblZub2RlQmVmb3JlVXBkYXRlKSYmYmUoUCxkLHUsZiksTyYmS2UoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3UsZixkLCJiZWZvcmVVcGRhdGUiKSxkJiZCZShkLCEwKSwody5pbm5lckhUTUwmJnYuaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVySFRNTD09bnVsbHx8dy50ZXh0Q29udGVudCYmdi50ZXh0Q29udGVudD09bnVsbCkmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidhKHgsIiIpLGI/JGUoZi5keW5hbWljQ2hpbGRyZW4sYix4LGQsbSx1bih1LGcpLF8pOlN8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wkKGYsdSx4LG51bGwsZCxtLHVuKHUsZyksXywhMSkseT4wKXtpZih5JjE2KW50KHgsdywnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndixkLGcpO2Vsc2UgaWYoeSYyJiZ3LmNsYXNzIT09di5jbGFzcyYmaSh4LCJjbGFzcyIsbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bGwsdi5jbGFzcyxnKSx5JjQmJmkoeCwic3R5bGUiLHcuc3R5bGUsdi5zdHlsZSxnKSx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyY4KXtjb25zdCBNPXUuZHluYW1pY1Byb3BzO2ZvcihsZXQgVj0wO1Y8TS5sZW5ndGg7VisnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyl7Y29uc3QgTj1NW1ZdLGllPXdbTl0scmU9dltOXTsocmUhPT1pZXx8Tj09PSJ2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciKSYmaSh4LE4saWUscmUsZyxkKX19eSYxJiZmLmNoaWxkcmVuIT09dS5jaGlsZHJlbiYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EoeCx1LmNoaWxkcmVuKX1lbHNlIVMmJmI9PW51bGwmJm50KHgsdyx2LGQsZyk7KChQPXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uVm5vZGVVcGRhdGVkKXx8TykmJmxlKCgpPT57UCYmYmUoUCxkLHUsZiksTyYmS2UodScKICAgICAgICAgICAgICAgICAgICAgICAgYicsZixkLCJ1cGRhdGVkIil9LG0pfSwkZT0oZix1LGQsbSxnLF8sUyk9Pntmb3IobGV0IHg9JwogICAgICAgICAgICAgICAgICAgICAgICBiJzA7eDx1Lmxlbmd0aDt4Kyspe2NvbnN0IHk9Zlt4XSxiPXVbeF0sTz15LmVsJiYoeS50eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZT09PXhlfHwhbHQoeSxiKXx8eS5zaGFwZUZsYWcmNzApP3AoeS5lbCk6ZDtJKHksYixPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLG0sZyxfLFMsITApfX0sbnQ9KGYsdSxkLG0sZyk9PntpZih1IT09ZCl7aWYodSE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz1MKWZvcihjb25zdCBfIGluIHUpIXV0KF8pJiYhKF8gaW4gZCkmJmkoZixfLHVbX10sbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGwsZyxtKTtmb3IoY29uc3QgXyBpbiBkKXtpZih1dChfKSljb250aW51ZTtjb25zdCBTPScKICAgICAgICAgICAgICAgICAgICAgICAgYidkW19dLHg9dVtfXTtTIT09eCYmXyE9PSJ2YWx1ZSImJmkoZixfLHgsUyxnLG0pfSJ2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiaW4gZCYmaShmLCJ2YWx1ZSIsdS52YWx1ZSxkLnZhbHVlLGcpfX0sT3Q9KGYsdSxkLG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGcsXyxTLHgseSk9Pntjb25zdCBiPXUuZWw9Zj9mLmVsOmwoIiIpLE89dS5hbmNob3I9ZicKICAgICAgICAgICAgICAgICAgICAgICAgYic/Zi5hbmNob3I6bCgiIik7bGV0e3BhdGNoRmxhZzp3LGR5bmFtaWNDaGlsZHJlbjp2LHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290U2NvcGVJZHM6UH09dTtQJiYoeD14P3guY29uY2F0KFApOlApLGY9PW51bGw/KHMoYiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCxtKSxzKE8sZCxtKSxNZSh1LmNoaWxkcmVufHxbXSxkLE8sZyxfLFMseCx5KSk6dz4wJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmdyY2NCYmdiYmZi5keW5hbWljQ2hpbGRyZW4/KCRlKGYuZHluYW1pY0NoaWxkcmVuLHYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QsZyxfLFMseCksKHUua2V5IT1udWxsfHxnJiZ1PT09Zy5zdWJUcmVlKSYmeHIoZix1LCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCkpOiQoZix1LGQsTyxnLF8sUyx4LHkpfSxFdD0oZix1LGQsbSxnLF8sUyx4LHkpPT57dScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xvdFNjb3BlSWRzPXgsZj09bnVsbD91LnNoYXBlRmxhZyY1MTI/Zy5jdHguYWN0aXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKHUsZCxtLFMseSk6dG4odSxkLG0sZyxfLFMseSk6Sm4oZix1LHkpfSx0bj0oZix1LGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG0sZyxfLFMpPT57Y29uc3QgeD1mLmNvbXBvbmVudD1NbyhmLG0sZyk7aWYoaXIoZikmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicoeC5jdHgucmVuZGVyZXI9cnQpLElvKHgsITEsUykseC5hc3luY0RlcCl7aWYoZyYmZy5yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VnaXN0ZXJEZXAoeCxrLFMpLCFmLmVsKXtjb25zdCB5PXguc3ViVHJlZT1IZSh5dCk7aignCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCx5LHUsZCl9fWVsc2Ugayh4LGYsdSxkLGcsXyxTKX0sSm49KGYsdSxkKT0+e2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBtPXUuY29tcG9uZW50PWYuY29tcG9uZW50O2lmKFNvKGYsdSxkKSlpZihtLmFzeW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RlcCYmIW0uYXN5bmNSZXNvbHZlZCl7QihtLHUsZCk7cmV0dXJufWVsc2UgbS5uZXh0PXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG0udXBkYXRlKCk7ZWxzZSB1LmVsPWYuZWwsbS52bm9kZT11fSxrPShmLHUsZCxtLGcsXycKICAgICAgICAgICAgICAgICAgICAgICAgYicsUyk9Pntjb25zdCB4PSgpPT57aWYoZi5pc01vdW50ZWQpe2xldHtuZXh0OncsYnU6dix1JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpQLHBhcmVudDpNLHZub2RlOlZ9PWY7e2NvbnN0IF9lPVNyKGYpO2lmKF9lKXt3JiYody4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWw9Vi5lbCxCKGYsdyxTKSksX2UuYXN5bmNEZXAudGhlbigoKT0+e2YuaXNVbm1vdW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkfHx4KCl9KTtyZXR1cm59fWxldCBOPXcsaWU7QmUoZiwhMSksdz8ody5lbD1WLmVsLEIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YsdyxTKSk6dz1WLHYmJkZ0KHYpLChpZT13LnByb3BzJiZ3LnByb3BzLm9uVm5vZGVCZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JlVXBkYXRlKSYmYmUoaWUsTSx3LFYpLEJlKGYsITApO2NvbnN0IHJlPWZzKGYpLGdlPScKICAgICAgICAgICAgICAgICAgICAgICAgYidmLnN1YlRyZWU7Zi5zdWJUcmVlPXJlLEkoZ2UscmUscChnZS5lbCksUHQoZ2UpLGYsZyxfJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksdy5lbD1yZS5lbCxOPT09bnVsbCYmd28oZixyZS5lbCksUCYmbGUoUCxnKSwoaWU9dy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcHMmJncucHJvcHMub25Wbm9kZVVwZGF0ZWQpJiZsZSgoKT0+YmUoaWUsTSx3LFYpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidnKX1lbHNle2xldCB3O2NvbnN0e2VsOnYscHJvcHM6UH09dSx7Ym06TSxtOlYscGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpOLHJvb3Q6aWUsdHlwZTpyZX09ZixnZT1odCh1KTtCZShmLCExKSxNJiZGdChNKSwhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYodz1QJiZQLm9uVm5vZGVCZWZvcmVNb3VudCkmJmJlKHcsTix1KSxCZShmLCEwKTt7aScKICAgICAgICAgICAgICAgICAgICAgICAgYidlLmNlJiZpZS5jZS5faW5qZWN0Q2hpbGRTdHlsZShyZSk7Y29uc3QgX2U9Zi5zdWJUcmVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1mcyhmKTtJKG51bGwsX2UsZCxtLGYsZyxfKSx1LmVsPV9lLmVsfWlmKFYmJmxlKFYsZyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCFnZSYmKHc9UCYmUC5vblZub2RlTW91bnRlZCkpe2NvbnN0IF9lPXU7bGUoKCk9PmJlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid3LE4sX2UpLGcpfSh1LnNoYXBlRmxhZyYyNTZ8fE4mJmh0KE4udm5vZGUpJiZOLnZub2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zaGFwZUZsYWcmMjU2KSYmZi5hJiZsZShmLmEsZyksZi5pc01vdW50ZWQ9ITAsdT1kPW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPW51bGx9fTtmLnNjb3BlLm9uKCk7Y29uc3QgeT1mLmVmZmVjdD1uZXcgTnMoeCk7Zi5zYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvcGUub2ZmKCk7Y29uc3QgYj1mLnVwZGF0ZT15LnJ1bi5iaW5kKHkpLE89Zi5qb2I9eS5yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuSWZEaXJ0eS5iaW5kKHkpO08uaT1mLE8uaWQ9Zi51aWQseS5zY2hlZHVsZXI9KCk9PksnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihPKSxCZShmLCEwKSxiKCl9LEI9KGYsdSxkKT0+e3UuY29tcG9uZW50PWY7Y29uc3QgbScKICAgICAgICAgICAgICAgICAgICAgICAgYic9Zi52bm9kZS5wcm9wcztmLnZub2RlPXUsZi5uZXh0PW51bGwscm8oZix1LnByb3BzLG0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QpLGZvKGYsdS5jaGlsZHJlbixkKSxqZSgpLHRzKGYpLExlKCl9LCQ9KGYsdSxkLG0sZywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXyxTLHgseT0hMSk9Pntjb25zdCBiPWYmJmYuY2hpbGRyZW4sTz1mP2Yuc2hhcGVGbGFnOicKICAgICAgICAgICAgICAgICAgICAgICAgYicwLHc9dS5jaGlsZHJlbix7cGF0Y2hGbGFnOnYsc2hhcGVGbGFnOlB9PXU7aWYodj4wKXtpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YodiYxMjgpe0F0KGIsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59ZWxzZSBpZih2JjI1NiknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1ZlKGIsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59fVAmOD8oTyYxNiYmc3QoYixnLF8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid3IT09YiYmYShkLHcpKTpPJjE2P1AmMTY/QXQoYix3LGQsbSxnLF8sUyx4LHkpOnN0KGIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csXywhMCk6KE8mOCYmYShkLCIiKSxQJjE2JiZNZSh3LGQsbSxnLF8sUyx4LHkpKX0sVmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPShmLHUsZCxtLGcsXyxTLHgseSk9PntmPWZ8fFhlLHU9dXx8WGU7Y29uc3QgYj1mLmxlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidndGgsTz11Lmxlbmd0aCx3PU1hdGgubWluKGIsTyk7bGV0IHY7Zm9yKHY9MDt2PHc7disrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7Y29uc3QgUD11W3ZdPXk/RmUodVt2XSk6U2UodVt2XSk7SShmW3ZdLFAsZCxudWxsLGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLF8sUyx4LHkpfWI+Tz9zdChmLGcsXywhMCwhMSx3KTpNZSh1LGQsbSxnLF8sUyx4LHksdycKICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxBdD0oZix1LGQsbSxnLF8sUyx4LHkpPT57bGV0IGI9MDtjb25zdCBPPXUubGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICBiJztsZXQgdz1mLmxlbmd0aC0xLHY9Ty0xO2Zvcig7Yjw9dyYmYjw9djspe2NvbnN0IFA9ZlsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYl0sTT11W2JdPXk/RmUodVtiXSk6U2UodVtiXSk7aWYobHQoUCxNKSlJKFAsTSxkLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsLGcsXyxTLHgseSk7ZWxzZSBicmVhaztiKyt9Zm9yKDtiPD13JiZiPD12Oyl7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1A9Zlt3XSxNPXVbdl09eT9GZSh1W3ZdKTpTZSh1W3ZdKTtpZihsdChQLE0pKUkoUCxNLGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG51bGwsZyxfLFMseCx5KTtlbHNlIGJyZWFrO3ctLSx2LS19aWYoYj53KXtpZihiPD12KScKICAgICAgICAgICAgICAgICAgICAgICAgYid7Y29uc3QgUD12KzEsTT1QPE8/dVtQXS5lbDptO2Zvcig7Yjw9djspSShudWxsLHVbYl09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3k/RmUodVtiXSk6U2UodVtiXSksZCxNLGcsXyxTLHgseSksYisrfX1lbHNlIGlmKGI+diknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKDtiPD13OylwZShmW2JdLGcsXywhMCksYisrO2Vsc2V7Y29uc3QgUD1iLE09YixWPScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXcgTWFwO2ZvcihiPU07Yjw9djtiKyspe2NvbnN0IG9lPXVbYl09eT9GZSh1W2JdKTpTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UodVtiXSk7b2Uua2V5IT1udWxsJiZWLnNldChvZS5rZXksYil9bGV0IE4saWU9MDtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgcmU9di1NKzE7bGV0IGdlPSExLF9lPTA7Y29uc3QgaXQ9bmV3IEFycmF5KHJlKTtmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKGI9MDtiPHJlO2IrKylpdFtiXT0wO2ZvcihiPVA7Yjw9dztiKyspe2NvbnN0IG9lPWZbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JdO2lmKGllPj1yZSl7cGUob2UsZyxfLCEwKTtjb250aW51ZX1sZXQgbWU7aWYob2Uua2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSE9bnVsbCltZT1WLmdldChvZS5rZXkpO2Vsc2UgZm9yKE49TTtOPD12O04rKylpZihpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbTi1NXT09PTAmJmx0KG9lLHVbTl0pKXttZT1OO2JyZWFrfW1lPT09dm9pZCAwP3BlKG9lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxnLF8sITApOihpdFttZS1NXT1iKzEsbWU+PV9lP19lPW1lOmdlPSEwLEkob2UsdVttZV0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGQsbnVsbCxnLF8sUyx4LHkpLGllKyspfWNvbnN0IHpuPWdlP2hvKGl0KTpYZTtmb3IoTicKICAgICAgICAgICAgICAgICAgICAgICAgYic9em4ubGVuZ3RoLTEsYj1yZS0xO2I+PTA7Yi0tKXtjb25zdCBvZT1NK2IsbWU9dVtvZV0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1huPW9lKzE8Tz91W29lKzFdLmVsOm07aXRbYl09PT0wP0kobnVsbCxtZSxkLFhuLGcsXywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUyx4LHkpOmdlJiYoTjwwfHxiIT09em5bTl0/VWUobWUsZCxYbiwyKTpOLS0pfX19LFVlPScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZix1LGQsbSxnPW51bGwpPT57Y29uc3R7ZWw6Xyx0eXBlOlMsdHJhbnNpdGlvbjp4LGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbjp5LHNoYXBlRmxhZzpifT1mO2lmKGImNil7VWUoZi5jb21wb25lbnQuc3ViVHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWUsdSxkLG0pO3JldHVybn1pZihiJjEyOCl7Zi5zdXNwZW5zZS5tb3ZlKHUsZCxtKTtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJufWlmKGImNjQpe1MubW92ZShmLHUsZCxydCk7cmV0dXJufWlmKFM9PT14ZSl7cyhfJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx1LGQpO2ZvcihsZXQgdz0wO3c8eS5sZW5ndGg7dysrKVVlKHlbd10sdSxkLG0pO3MoZi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jaG9yLHUsZCk7cmV0dXJufWlmKFM9PT1kbil7cShmLHUsZCk7cmV0dXJufWlmKG0hPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9MiYmYiYxJiZ4KWlmKG09PT0wKXguYmVmb3JlRW50ZXIoXykscyhfLHUsZCksbGUoKCk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz54LmVudGVyKF8pLGcpO2Vsc2V7Y29uc3R7bGVhdmU6dyxkZWxheUxlYXZlOnYsYWZ0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInTGVhdmU6UH09eCxNPSgpPT5zKF8sdSxkKSxWPSgpPT57dyhfLCgpPT57TSgpLFAmJlAoKScKICAgICAgICAgICAgICAgICAgICAgICAgYid9KX07dj92KF8sTSxWKTpWKCl9ZWxzZSBzKF8sdSxkKX0scGU9KGYsdSxkLG09ITEsZz0hJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpPT57Y29uc3R7dHlwZTpfLHByb3BzOlMscmVmOngsY2hpbGRyZW46eSxkeW5hbWljQ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkcmVuOmIsc2hhcGVGbGFnOk8scGF0Y2hGbGFnOncsZGlyczp2LGNhY2hlSW5kZXg6UCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9PWY7aWYodz09PS0yJiYoZz0hMSkseCE9bnVsbCYmVXQoeCxudWxsLGQsZiwhMCksUCE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwmJih1LnJlbmRlckNhY2hlW1BdPXZvaWQgMCksTyYyNTYpe3UuY3R4LmRlYWN0aXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKGYpO3JldHVybn1jb25zdCBNPU8mMSYmdixWPSFodChmKTtsZXQgTjtpZihWJiYoTicKICAgICAgICAgICAgICAgICAgICAgICAgYic9UyYmUy5vblZub2RlQmVmb3JlVW5tb3VudCkmJmJlKE4sdSxmKSxPJjYpTnIoZi5jb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50LGQsbSk7ZWxzZXtpZihPJjEyOCl7Zi5zdXNwZW5zZS51bm1vdW50KGQsbSk7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybn1NJiZLZShmLG51bGwsdSwiYmVmb3JlVW5tb3VudCIpLE8mNjQ/Zi50eXBlLnJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUoZix1LGQscnQsbSk6YiYmIWIuaGFzT25jZSYmKF8hPT14ZXx8dz4wJiZ3JjY0KT9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoYix1LGQsITEsITApOihfPT09eGUmJncmMzg0fHwhZyYmTyYxNikmJnN0KHksdSxkKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSYmR24oZil9KFYmJihOPVMmJlMub25Wbm9kZVVubW91bnRlZCl8fE0pJiZsZSgoKT0+eycKICAgICAgICAgICAgICAgICAgICAgICAgYidOJiZiZShOLHUsZiksTSYmS2UoZixudWxsLHUsInVubW91bnRlZCIpfSxkKX0sR249Zj0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdHt0eXBlOnUsZWw6ZCxhbmNob3I6bSx0cmFuc2l0aW9uOmd9PWY7aWYodT09PXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7SHIoZCxtKTtyZXR1cm59aWYodT09PWRuKXtBKGYpO3JldHVybn1jb25zdCBfPSgpPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+e3IoZCksZyYmIWcucGVyc2lzdGVkJiZnLmFmdGVyTGVhdmUmJmcuYWZ0ZXJMZWF2ZSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ307aWYoZi5zaGFwZUZsYWcmMSYmZyYmIWcucGVyc2lzdGVkKXtjb25zdHtsZWF2ZTpTLGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxheUxlYXZlOnh9PWcseT0oKT0+UyhkLF8pO3g/eChmLmVsLF8seSk6eSgpfWVsc2UgXycKICAgICAgICAgICAgICAgICAgICAgICAgYicoKX0sSHI9KGYsdSk9PntsZXQgZDtmb3IoO2YhPT11OylkPVQoZikscihmKSxmPWQ7cih1JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9LE5yPShmLHUsZCk9Pntjb25zdHtidW06bSxzY29wZTpnLGpvYjpfLHN1YlRyZWU6UywnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW06eCxtOnksYTpifT1mO2xzKHkpLGxzKGIpLG0mJkZ0KG0pLGcuc3RvcCgpLF8mJihfLicKICAgICAgICAgICAgICAgICAgICAgICAgYidmbGFnc3w9OCxwZShTLGYsdSxkKSkseCYmbGUoeCx1KSxsZSgoKT0+e2YuaXNVbm1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkPSEwfSx1KSx1JiZ1LnBlbmRpbmdCcmFuY2gmJiF1LmlzVW5tb3VudGVkJiZmLmFzeW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0RlcCYmIWYuYXN5bmNSZXNvbHZlZCYmZi5zdXNwZW5zZUlkPT09dS5wZW5kaW5nSWQmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicodS5kZXBzLS0sdS5kZXBzPT09MCYmdS5yZXNvbHZlKCkpfSxzdD0oZix1LGQsbT0hMSxnJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0hMSxfPTApPT57Zm9yKGxldCBTPV87UzxmLmxlbmd0aDtTKyspcGUoZltTXSx1LGQsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyl9LFB0PWY9PntpZihmLnNoYXBlRmxhZyY2KXJldHVybiBQdChmLmNvbXBvbmVudC5zdScKICAgICAgICAgICAgICAgICAgICAgICAgYidiVHJlZSk7aWYoZi5zaGFwZUZsYWcmMTI4KXJldHVybiBmLnN1c3BlbnNlLm5leHQoKTtjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgdT1UKGYuYW5jaG9yfHxmLmVsKSxkPXUmJnVbSWldO3JldHVybiBkP1QoZCk6dX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2xldCBubj0hMTtjb25zdCBZbj0oZix1LGQpPT57Zj09bnVsbD91Ll92bm9kZSYmcGUodScKICAgICAgICAgICAgICAgICAgICAgICAgYicuX3Zub2RlLG51bGwsbnVsbCwhMCk6SSh1Ll92bm9kZXx8bnVsbCxmLHUsbnVsbCxudWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxudWxsLGQpLHUuX3Zub2RlPWYsbm58fChubj0hMCx0cygpLHRyKCksbm49ITEpfSxydD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIne3A6SSx1bTpwZSxtOlVlLHI6R24sbXQ6dG4sbWM6TWUscGM6JCxwYmM6JGUsbjpQdCxvOicKICAgICAgICAgICAgICAgICAgICAgICAgYidlfTtyZXR1cm57cmVuZGVyOlluLGh5ZHJhdGU6dm9pZCAwLGNyZWF0ZUFwcDp0byhZbil9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiB1bih7dHlwZTplLHByb3BzOnR9LG4pe3JldHVybiBuPT09InN2ZyImJmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT09ImZvcmVpZ25PYmplY3QifHxuPT09Im1hdGhtbCImJmU9PT0iYW5ub3RhdGlvbi14bScKICAgICAgICAgICAgICAgICAgICAgICAgYidsIiYmdCYmdC5lbmNvZGluZyYmdC5lbmNvZGluZy5pbmNsdWRlcygiaHRtbCIpP3ZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzA6bn1mdW5jdGlvbiBCZSh7ZWZmZWN0OmUsam9iOnR9LG4pe24/KGUuZmxhZ3N8PTMyLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdW5jdGlvbiBhbyhlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0KXtyZXR1cm4oIWV8fGUmJiFlLnBlbmRpbmdCcmFuY2gpJiZ0JiYhdC5wZXJzaXN0ZWR9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIHhyKGUsdCxuPSExKXtjb25zdCBzPWUuY2hpbGRyZW4scj10LmNoaWxkcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtpZihFKHMpJiZFKHIpKWZvcihsZXQgaT0wO2k8cy5sZW5ndGg7aSsrKXtjb25zdCBvPScKICAgICAgICAgICAgICAgICAgICAgICAgYidzW2ldO2xldCBsPXJbaV07bC5zaGFwZUZsYWcmMSYmIWwuZHluYW1pY0NoaWxkcmVuJiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhsLnBhdGNoRmxhZzw9MHx8bC5wYXRjaEZsYWc9PT0zMikmJihsPXJbaV09RmUocltpXSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGwuZWw9by5lbCksIW4mJmwucGF0Y2hGbGFnIT09LTImJnhyKG8sbCkpLGwudHlwZT09PScKICAgICAgICAgICAgICAgICAgICAgICAgYidrdCYmKGwuZWw9by5lbCl9fWZ1bmN0aW9uIGhvKGUpe2NvbnN0IHQ9ZS5zbGljZSgpLG49JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1swXTtsZXQgcyxyLGksbyxsO2NvbnN0IGM9ZS5sZW5ndGg7Zm9yKHM9MDtzPGM7cysrKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgaD1lW3NdO2lmKGghPT0wKXtpZihyPW5bbi5sZW5ndGgtMV0sZVtyXTxoKXt0WycKICAgICAgICAgICAgICAgICAgICAgICAgYidzXT1yLG4ucHVzaChzKTtjb250aW51ZX1mb3IoaT0wLG89bi5sZW5ndGgtMTtpPG87KWw9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2krbz4+MSxlW25bbF1dPGg/aT1sKzE6bz1sO2g8ZVtuW2ldXSYmKGk+MCYmKHRbc109blsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaS0xXSksbltpXT1zKX19Zm9yKGk9bi5sZW5ndGgsbz1uW2ktMV07aS0tID4wOyluW2ldPScKICAgICAgICAgICAgICAgICAgICAgICAgYidvLG89dFtvXTtyZXR1cm4gbn1mdW5jdGlvbiBTcihlKXtjb25zdCB0PWUuc3ViVHJlZS5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50O2lmKHQpcmV0dXJuIHQuYXN5bmNEZXAmJiF0LmFzeW5jUmVzb2x2ZWQ/dDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3IodCl9ZnVuY3Rpb24gbHMoZSl7aWYoZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKycKICAgICAgICAgICAgICAgICAgICAgICAgYicpZVt0XS5mbGFnc3w9OH1jb25zdCBwbz1TeW1ib2wuZm9yKCJ2LXNjeCIpLGdvPSgpPT5EJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QocG8pO2Z1bmN0aW9uIGFuKGUsdCxuKXtyZXR1cm4gd3IoZSx0LG4pfWZ1bmN0aW9uIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncihlLHQsbj1MKXtjb25zdHtpbW1lZGlhdGU6cyxkZWVwOnIsZmx1c2g6aSxvbmNlOm99PScKICAgICAgICAgICAgICAgICAgICAgICAgYiduLGw9c2Uoe30sbiksYz10JiZzfHwhdCYmaSE9PSJwb3N0IjtsZXQgaDtpZihTdCl7aWYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k9PT0ic3luYyIpe2NvbnN0IEM9Z28oKTtoPUMuX193YXRjaGVySGFuZGxlc3x8KEMuX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd2F0Y2hlckhhbmRsZXM9W10pfWVsc2UgaWYoIWMpe2NvbnN0IEM9KCk9Pnt9O3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQy5zdG9wPXdlLEMucmVzdW1lPXdlLEMucGF1c2U9d2UsQ319Y29uc3QgYT1uZTtsLmNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsPShDLEYsSSk9PkNlKEMsYSxGLEkpO2xldCBwPSExO2k9PT0icG9zdCI/bC5zY2hlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyPUM9PntsZShDLGEmJmEuc3VzcGVuc2UpfTppIT09InN5bmMiJiYocD0hMCxsLnNjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZHVsZXI9KEMsRik9PntGP0MoKTpLbihDKX0pLGwuYXVnbWVudEpvYj1DPT57dCYmKEMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZsYWdzfD00KSxwJiYoQy5mbGFnc3w9MixhJiYoQy5pZD1hLnVpZCxDLmk9YSkpfTtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgVD12aShlLHQsbCk7cmV0dXJuIFN0JiYoaD9oLnB1c2goVCk6YyYmVCgpKSxUfWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBfbyhlLHQsbil7Y29uc3Qgcz10aGlzLnByb3h5LHI9SihlKT9lLmluY2x1ZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJygiLiIpP1RyKHMsZSk6KCk9PnNbZV06ZS5iaW5kKHMscyk7bGV0IGk7Uih0KT9pPXQ6KGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXQuaGFuZGxlcixuPXQpO2NvbnN0IG89Q3QodGhpcyksbD13cihyLGkuYmluZChzKSxuKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7cmV0dXJuIG8oKSxsfWZ1bmN0aW9uIFRyKGUsdCl7Y29uc3Qgbj10LnNwbGl0KCIuIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybigpPT57bGV0IHM9ZTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoJiZzO3IrKylzPXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW25bcl1dO3JldHVybiBzfX1jb25zdCBtbz0oZSx0KT0+dD09PSJtb2RlbFZhbHVlInx8dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0ibW9kZWwtdmFsdWUiP2UubW9kZWxNb2RpZmllcnM6ZVtgJHt0fU1vZGlmaWVyc2BdJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8ZVtgJHtOZSh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtHZSh0KX1Nb2RpZmllcnNgXTtmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gYm8oZSx0LC4uLm4pe2lmKGUuaXNVbm1vdW50ZWQpcmV0dXJuO2NvbnN0IHM9ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicudm5vZGUucHJvcHN8fEw7bGV0IHI9bjtjb25zdCBpPXQuc3RhcnRzV2l0aCgidXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzoiKSxvPWkmJm1vKHMsdC5zbGljZSg3KSk7byYmKG8udHJpbSYmKHI9bi5tYXAoYT0+SignCiAgICAgICAgICAgICAgICAgICAgICAgIGInYSk/YS50cmltKCk6YSkpLG8ubnVtYmVyJiYocj1uLm1hcChLcikpKTtsZXQgbCxjPXNbbCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9c24odCldfHxzW2w9c24oTmUodCkpXTshYyYmaSYmKGM9c1tsPXNuKEdlKHQpKV0pLGMmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZDZShjLGUsNixyKTtjb25zdCBoPXNbbCsiT25jZSJdO2lmKGgpe2lmKCFlLmVtaXR0ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKWUuZW1pdHRlZD17fTtlbHNlIGlmKGUuZW1pdHRlZFtsXSlyZXR1cm47ZS5lbWl0dGVkWycKICAgICAgICAgICAgICAgICAgICAgICAgYidsXT0hMCxDZShoLGUsNixyKX19ZnVuY3Rpb24gQ3IoZSx0LG49ITEpe2NvbnN0IHM9dC5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pdHNDYWNoZSxyPXMuZ2V0KGUpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7Y29uc3QgaT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5lbWl0cztsZXQgbz17fSxsPSExO2lmKCFSKGUpKXtjb25zdCBjPWg9Pntjb25zdCBhPScKICAgICAgICAgICAgICAgICAgICAgICAgYidDcihoLHQsITApO2EmJihsPSEwLHNlKG8sYSkpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5taXhpbnMuZm9yRWFjaChjKSxlLmV4dGVuZHMmJmMoZS5leHRlbmRzKSxlLm1peGlucyYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJmUubWl4aW5zLmZvckVhY2goYyl9cmV0dXJuIWkmJiFsPyhLKGUpJiZzLnNldChlLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxudWxsKTooRShpKT9pLmZvckVhY2goYz0+b1tjXT1udWxsKTpzZShvLGkpLEsoZSkmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZzLnNldChlLG8pLG8pfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIWV8fCFXdCh0KT8hMTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHQ9dC5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sIiIpLEgoZSx0WzBdLnRvTG93ZXJDYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSgpK3Quc2xpY2UoMSkpfHxIKGUsR2UodCkpfHxIKGUsdCkpfWZ1bmN0aW9uIGZzKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdHt0eXBlOnQsdm5vZGU6bixwcm94eTpzLHdpdGhQcm94eTpyLHByb3BzT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnM6W2ldLHNsb3RzOm8sYXR0cnM6bCxlbWl0OmMscmVuZGVyOmgscmVuZGVyQ2FjaGU6YScKICAgICAgICAgICAgICAgICAgICAgICAgYicscHJvcHM6cCxkYXRhOlQsc2V0dXBTdGF0ZTpDLGN0eDpGLGluaGVyaXRBdHRyczpJfT1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx6PVZ0KGUpO2xldCBqLFc7dHJ5e2lmKG4uc2hhcGVGbGFnJjQpe2NvbnN0IEE9cnx8cywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRz1BO2o9U2UoaC5jYWxsKEcsQSxhLHAsQyxULEYpKSxXPWx9ZWxzZXtjb25zdCBBPXQ7aicKICAgICAgICAgICAgICAgICAgICAgICAgYic9U2UoQS5sZW5ndGg+MT9BKHAse2F0dHJzOmwsc2xvdHM6byxlbWl0OmN9KTpBKHAsbnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wpKSxXPXQucHJvcHM/bDp5byhsKX19Y2F0Y2goQSl7Z3QubGVuZ3RoPTAsWHQoQSxlLDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSxqPUhlKHl0KX1sZXQgcT1qO2lmKFcmJkkhPT0hMSl7Y29uc3QgQT1PYmplY3Qua2V5cycKICAgICAgICAgICAgICAgICAgICAgICAgYicoVykse3NoYXBlRmxhZzpHfT1xO0EubGVuZ3RoJiZHJjcmJihpJiZBLnNvbWUoUG4pJiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1c9eG8oVyxpKSkscT10dChxLFcsITEsITApKX1yZXR1cm4gbi5kaXJzJiYocT10dChxLG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWxsLCExLCEwKSxxLmRpcnM9cS5kaXJzP3EuZGlycy5jb25jYXQobi5kaXJzKTpuLmRpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzKSxuLnRyYW5zaXRpb24mJkJuKHEsbi50cmFuc2l0aW9uKSxqPXEsVnQoeiksan1jb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgeW89ZT0+e2xldCB0O2Zvcihjb25zdCBuIGluIGUpKG49PT0iY2xhc3MifHxuPT09InMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSJ8fFd0KG4pKSYmKCh0fHwodD17fSkpW25dPWVbbl0pO3JldHVybiB0fSx4bz0oZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCk9Pntjb25zdCBuPXt9O2Zvcihjb25zdCBzIGluIGUpKCFQbihzKXx8IShzLnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyg5KWluIHQpKSYmKG5bc109ZVtzXSk7cmV0dXJuIG59O2Z1bmN0aW9uIFNvKGUsdCxuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3R7cHJvcHM6cyxjaGlsZHJlbjpyLGNvbXBvbmVudDppfT1lLHtwcm9wczpvLGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZHJlbjpsLHBhdGNoRmxhZzpjfT10LGg9aS5lbWl0c09wdGlvbnM7aWYodC5kaXJzfHx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cmFuc2l0aW9uKXJldHVybiEwO2lmKG4mJmM+PTApe2lmKGMmMTAyNClyZXR1cm4hMDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYoYyYxNilyZXR1cm4gcz9jcyhzLG8saCk6ISFvO2lmKGMmOCl7Y29uc3QgYT10LmR5bicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbWljUHJvcHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspe2NvbnN0IFQ9YVtwXTtpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Yob1tUXSE9PXNbVF0mJiFRdChoLFQpKXJldHVybiEwfX19ZWxzZSByZXR1cm4ocnx8bCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYoIWx8fCFsLiRzdGFibGUpPyEwOnM9PT1vPyExOnM/bz9jcyhzLG8saCk6ITA6ISFvOycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4hMX1mdW5jdGlvbiBjcyhlLHQsbil7Y29uc3Qgcz1PYmplY3Qua2V5cyh0KTtpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Yocy5sZW5ndGghPT1PYmplY3Qua2V5cyhlKS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj0wO3I8cy5sZW5ndGg7cisrKXtjb25zdCBpPXNbcl07aWYodFtpXSE9PWVbaV0mJiFRdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicobixpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB3byh7dm5vZGU6ZSxwYXJlbnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R9LG4pe2Zvcig7dDspe2NvbnN0IHM9dC5zdWJUcmVlO2lmKHMuc3VzcGVuc2UmJnMuc3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BlbnNlLmFjdGl2ZUJyYW5jaD09PWUmJihzLmVsPWUuZWwpLHM9PT1lKShlPXQudm5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKS5lbD1uLHQ9dC5wYXJlbnQ7ZWxzZSBicmVha319Y29uc3QgdnI9ZT0+ZS5fX2lzU3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlbnNlO2Z1bmN0aW9uIFRvKGUsdCl7dCYmdC5wZW5kaW5nQnJhbmNoP0UoZSk/dC5lZmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0cy5wdXNoKC4uLmUpOnQuZWZmZWN0cy5wdXNoKGUpOlBpKGUpfWNvbnN0IHhlPVN5bScKICAgICAgICAgICAgICAgICAgICAgICAgYidib2wuZm9yKCJ2LWZndCIpLGt0PVN5bWJvbC5mb3IoInYtdHh0IikseXQ9U3ltYm9sLmZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IoInYtY210IiksZG49U3ltYm9sLmZvcigidi1zdGMiKSxndD1bXTtsZXQgY2U9bnVsbDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gSHQoZT0hMSl7Z3QucHVzaChjZT1lP251bGw6W10pfWZ1bmN0aW9uIENvKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2d0LnBvcCgpLGNlPWd0W2d0Lmxlbmd0aC0xXXx8bnVsbH1sZXQgeHQ9MTtmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdXMoZSx0PSExKXt4dCs9ZSxlPDAmJmNlJiZ0JiYoY2UuaGFzT25jZT0hMCl9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIE9yKGUpe3JldHVybiBlLmR5bmFtaWNDaGlsZHJlbj14dD4wP2NlfHxYZTpudWxsLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDbygpLHh0PjAmJmNlJiZjZS5wdXNoKGUpLGV9ZnVuY3Rpb24gaG4oZSx0LG4scyxyLGkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tyZXR1cm4gT3IoWShlLHQsbixzLHIsaSwhMCkpfWZ1bmN0aW9uIHZvKGUsdCxuLHMsciknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiBPcihIZShlLHQsbixzLHIsITApKX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gZScKICAgICAgICAgICAgICAgICAgICAgICAgYic/ZS5fX3ZfaXNWTm9kZT09PSEwOiExfWZ1bmN0aW9uIGx0KGUsdCl7cmV0dXJuIGUudHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9PT10LnR5cGUmJmUua2V5PT09dC5rZXl9Y29uc3QgQXI9KHtrZXk6ZX0pPT5lPz9udWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxOdD0oe3JlZjplLHJlZl9rZXk6dCxyZWZfZm9yOm59KT0+KHR5cGVvZiBlPT0ibnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciImJihlPSIiK2UpLGUhPW51bGw/SihlKXx8UShlKXx8UihlKT97aTp1ZSxyOmUsazp0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxmOiEhbn06ZTpudWxsKTtmdW5jdGlvbiBZKGUsdD1udWxsLG49bnVsbCxzPTAscj1udWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxpPWU9PT14ZT8wOjEsbz0hMSxsPSExKXtjb25zdCBjPXtfX3ZfaXNWTm9kZTohMCxfXycKICAgICAgICAgICAgICAgICAgICAgICAgYid2X3NraXA6ITAsdHlwZTplLHByb3BzOnQsa2V5OnQmJkFyKHQpLHJlZjp0JiZOdCh0KSxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvcGVJZDpzcixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxzdXNwZW5zZTpudWxsLHNzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLHRyYW5zaXRpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx0YXJnZXRTdGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBlRmxhZzppLHBhdGNoRmxhZzpzLGR5bmFtaWNQcm9wczpyLGR5bmFtaWNDaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYic6bnVsbCxhcHBDb250ZXh0Om51bGwsY3R4OnVlfTtyZXR1cm4gbD8ocW4oYyxuKSxpJjEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJzgmJmUubm9ybWFsaXplKGMpKTpuJiYoYy5zaGFwZUZsYWd8PUoobik/ODoxNikseHQ+MCYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiFvJiZjZSYmKGMucGF0Y2hGbGFnPjB8fGkmNikmJmMucGF0Y2hGbGFnIT09MzImJmNlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKGMpLGN9Y29uc3QgSGU9T287ZnVuY3Rpb24gT28oZSx0PW51bGwsbj1udWxsLHM9JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAscj1udWxsLGk9ITEpe2lmKCghZXx8ZT09PUppKSYmKGU9eXQpLEVyKGUpKXtjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbD10dChlLHQsITApO3JldHVybiBuJiZxbihsLG4pLHh0PjAmJiFpJiZjZSYmKGwuc2hhcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlRmxhZyY2P2NlW2NlLmluZGV4T2YoZSldPWw6Y2UucHVzaChsKSksbC5wYXRjaEZsYWc9JwogICAgICAgICAgICAgICAgICAgICAgICBiJy0yLGx9aWYoTm8oZSkmJihlPWUuX192Y2NPcHRzKSx0KXt0PUVvKHQpO2xldHtjbGFzczonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxzdHlsZTpjfT10O2wmJiFKKGwpJiYodC5jbGFzcz1GbihsKSksSyhjKSYmKFVuKGMpJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIUUoYykmJihjPXNlKHt9LGMpKSx0LnN0eWxlPUluKGMpKX1jb25zdCBvPUooZSk/MTp2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZSk/MTI4OkZpKGUpPzY0OksoZSk/NDpSKGUpPzI6MDtyZXR1cm4gWShlLHQsbixzLHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG8saSwhMCl9ZnVuY3Rpb24gRW8oZSl7cmV0dXJuIGU/VW4oZSl8fGhyKGUpP3NlKHt9LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTplOm51bGx9ZnVuY3Rpb24gdHQoZSx0LG49ITEscz0hMSl7Y29uc3R7cHJvcHM6cixyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmOmkscGF0Y2hGbGFnOm8sY2hpbGRyZW46bCx0cmFuc2l0aW9uOmN9PWUsaD10P0FvKHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHx7fSx0KTpyLGE9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZS50eXBlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wczpoLGtleTpoJiZBcihoKSxyZWY6dCYmdC5yZWY/biYmaT9FKGkpP2kuY29uY2F0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhOdCh0KSk6W2ksTnQodCldOk50KHQpOmksc2NvcGVJZDplLnNjb3BlSWQsc2xvdFNjb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUlkczplLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpsLHRhcmdldDplLnRhcmdldCx0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0U3RhcnQ6ZS50YXJnZXRTdGFydCx0YXJnZXRBbmNob3I6ZS50YXJnZXRBbmNob3Isc3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpY0NvdW50OmUuc3RhdGljQ291bnQsc2hhcGVGbGFnOmUuc2hhcGVGbGFnLHBhdGNoRmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWc6dCYmZS50eXBlIT09eGU/bz09PS0xPzE2Om98MTY6byxkeW5hbWljUHJvcHM6ZS5keScKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1pY1Byb3BzLGR5bmFtaWNDaGlsZHJlbjplLmR5bmFtaWNDaGlsZHJlbixhcHBDb250JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dDplLmFwcENvbnRleHQsZGlyczplLmRpcnMsdHJhbnNpdGlvbjpjLGNvbXBvbmVudDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5jb21wb25lbnQsc3VzcGVuc2U6ZS5zdXNwZW5zZSxzc0NvbnRlbnQ6ZS5zc0NvbnRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0JiZ0dChlLnNzQ29udGVudCksc3NGYWxsYmFjazplLnNzRmFsbGJhY2smJnR0KGUuc3NGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGJhY2spLGVsOmUuZWwsYW5jaG9yOmUuYW5jaG9yLGN0eDplLmN0eCxjZTplLmNlfTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGMmJnMmJkJuKGEsYy5jbG9uZShhKSksYX1mdW5jdGlvbiBQcihlPSIgIix0PScKICAgICAgICAgICAgICAgICAgICAgICAgYicwKXtyZXR1cm4gSGUoa3QsbnVsbCxlLHQpfWZ1bmN0aW9uIFNlKGUpe3JldHVybiBlPT1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VsbHx8dHlwZW9mIGU9PSJib29sZWFuIj9IZSh5dCk6RShlKT9IZSh4ZSxudWxsLGUuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWNlKCkpOkVyKGUpP0ZlKGUpOkhlKGt0LG51bGwsU3RyaW5nKGUpKX1mdW5jdGlvbiBGZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSl7cmV0dXJuIGUuZWw9PT1udWxsJiZlLnBhdGNoRmxhZyE9PS0xfHxlLm1lbW8/ZTp0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZSl9ZnVuY3Rpb24gcW4oZSx0KXtsZXQgbj0wO2NvbnN0e3NoYXBlRmxhZzpzfT1lO2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZih0PT1udWxsKXQ9bnVsbDtlbHNlIGlmKEUodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PScKICAgICAgICAgICAgICAgICAgICAgICAgYic9Im9iamVjdCIpaWYocyY2NSl7Y29uc3Qgcj10LmRlZmF1bHQ7ciYmKHIuX2MmJihyLl9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0hMSkscW4oZSxyKCkpLHIuX2MmJihyLl9kPSEwKSk7cmV0dXJufWVsc2V7bj0zMjtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgcj10Ll87IXImJiFocih0KT90Ll9jdHg9dWU6cj09PTMmJnVlJiYodWUuc2xvdHMuXycKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0xP3QuXz0xOih0Ll89MixlLnBhdGNoRmxhZ3w9MTAyNCkpfWVsc2UgUih0KT8odD17JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZmF1bHQ6dCxfY3R4OnVlfSxuPTMyKToodD1TdHJpbmcodCkscyY2ND8obj0xNix0PVsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUHIodCldKTpuPTgpO2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bn1mdW5jdGlvbiBBbycKICAgICAgICAgICAgICAgICAgICAgICAgYicoLi4uZSl7Y29uc3QgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M9ZVtuXTtmb3IoY29uc3QgciBpbiBzKWlmKHI9PT0iY2xhc3MiKXQuY2xhc3MhPT1zLmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyYmKHQuY2xhc3M9Rm4oW3QuY2xhc3Mscy5jbGFzc10pKTtlbHNlIGlmKHI9PT0icycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlIil0LnN0eWxlPUluKFt0LnN0eWxlLHMuc3R5bGVdKTtlbHNlIGlmKFd0KHIpKXtjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgaT10W3JdLG89c1tyXTtvJiZpIT09byYmIShFKGkpJiZpLmluY2x1ZGVzKG8pKSYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJih0W3JdPWk/W10uY29uY2F0KGksbyk6byl9ZWxzZSByIT09IiImJih0W3JdPXNbcl0pfScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdH1mdW5jdGlvbiBiZShlLHQsbixzPW51bGwpe0NlKGUsdCw3LFtuLHNdKX1jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgUG89dXIoKTtsZXQgUm89MDtmdW5jdGlvbiBNbyhlLHQsbil7Y29uc3Qgcz1lLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlLHI9KHQ/dC5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fFBvLGk9e3VpZDpSbysrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid2bm9kZTplLHR5cGU6cyxwYXJlbnQ6dCxhcHBDb250ZXh0OnIscm9vdDpudWxsLG5leHQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLGpvYjpudWxsLHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29wZTpuZXcgWHIoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOnQ/dC5wcm92aWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M6T2JqZWN0LmNyZWF0ZShyLnByb3ZpZGVzKSxpZHM6dD90LmlkczpbIiIsMCwwXSxhY2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXM6bnVsbCxwcm9wc09wdGlvbnM6Z3IocyxyKSxlbWl0c09wdGlvbnM6Q3IocyxyKSxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pdDpudWxsLGVtaXR0ZWQ6bnVsbCxwcm9wc0RlZmF1bHRzOkwsaW5oZXJpdEF0dHJzOnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmluaGVyaXRBdHRycyxjdHg6TCxkYXRhOkwscHJvcHM6TCxhdHRyczpMLHNsb3RzOkwscicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZnM6TCxzZXR1cFN0YXRlOkwsc2V0dXBDb250ZXh0Om51bGwsc3VzcGVuc2U6bixzdXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vuc2VJZDpuP24ucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbCxjOm51bGwsYm06bnVsbCxtOm51bGwsYnU6bnVsbCx1Om51bGwsdW06bnVsbCxidW06JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbH07cmV0dXJuIGkuY3R4PXtfOml9LGkucm9vdD10P3Qucm9vdDppLGkuZW1pdD1iby5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZChudWxsLGkpLGUuY2UmJmUuY2UoaSksaX1sZXQgbmU9bnVsbCxCdCxPbjt7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9R3QoKSx0PShuLHMpPT57bGV0IHI7cmV0dXJuKHI9ZVtuXSl8fChyPWVbbl09W10pLHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnB1c2gocyksaT0+e3IubGVuZ3RoPjE/ci5mb3JFYWNoKG89Pm8oaSkpOnJbMF0oaSl9fScKICAgICAgICAgICAgICAgICAgICAgICAgYic7QnQ9dCgiX19WVUVfSU5TVEFOQ0VfU0VUVEVSU19fIixuPT5uZT1uKSxPbj10KCJfX1ZVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VfU1NSX1NFVFRFUlNfXyIsbj0+U3Q9bil9Y29uc3QgQ3Q9ZT0+e2NvbnN0IHQ9bmU7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBCdChlKSxlLnNjb3BlLm9uKCksKCk9PntlLnNjb3BlLm9mZigpLEJ0KHQpfX0sYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzPSgpPT57bmUmJm5lLnNjb3BlLm9mZigpLEJ0KG51bGwpfTtmdW5jdGlvbiBScihlKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGUudm5vZGUuc2hhcGVGbGFnJjR9bGV0IFN0PSExO2Z1bmN0aW9uIElvKGUsdD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInITEsbj0hMSl7dCYmT24odCk7Y29uc3R7cHJvcHM6cyxjaGlsZHJlbjpyfT1lLnZub2RlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpPVJyKGUpO3NvKGUscyxpLHQpLGxvKGUscixuKTtjb25zdCBvPWk/Rm8oZSx0KTp2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwO3JldHVybiB0JiZPbighMSksb31mdW5jdGlvbiBGbyhlLHQpe2NvbnN0IG49ZS50eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtlLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksZS5wcm94eT1uZXcgUHJveCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KGUuY3R4LFlpKTtjb25zdHtzZXR1cDpzfT1uO2lmKHMpe2plKCk7Y29uc3Qgcj1lLnNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cENvbnRleHQ9cy5sZW5ndGg+MT9IbyhlKTpudWxsLGk9Q3QoZSksbz1UdChzLGUsMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW2UucHJvcHMscl0pLGw9RXMobyk7aWYoTGUoKSxpKCksKGx8fGUuc3ApJiYhaHQoZSkmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidycihlKSxsKXtpZihvLnRoZW4oYXMsYXMpLHQpcmV0dXJuIG8udGhlbihjPT57ZHMoZSxjJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9KS5jYXRjaChjPT57WHQoYyxlLDApfSk7ZS5hc3luY0RlcD1vfWVsc2UgZHMoZSxvKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxzZSBNcihlKX1mdW5jdGlvbiBkcyhlLHQsbil7Uih0KT9lLnR5cGUuX19zc3JJbmxpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlUmVuZGVyP2Uuc3NyUmVuZGVyPXQ6ZS5yZW5kZXI9dDpLKHQpJiYoZS5zZXR1cFN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1Rcyh0KSksTXIoZSl9ZnVuY3Rpb24gTXIoZSx0LG4pe2NvbnN0IHM9ZS50eXBlO2UucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlcnx8KGUucmVuZGVyPXMucmVuZGVyfHx3ZSk7e2NvbnN0IHI9Q3QoZSk7amUoKTt0cicKICAgICAgICAgICAgICAgICAgICAgICAgYid5e3ppKGUpfWZpbmFsbHl7TGUoKSxyKCl9fX1jb25zdCBEbz17Z2V0KGUsdCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBYKGUsImdldCIsIiIpLGVbdF19fTtmdW5jdGlvbiBIbyhlKXtjb25zdCB0PW49PntlLmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvc2VkPW58fHt9fTtyZXR1cm57YXR0cnM6bmV3IFByb3h5KGUuYXR0cnMsRG8pLHNsbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0czplLnNsb3RzLGVtaXQ6ZS5lbWl0LGV4cG9zZTp0fX1mdW5jdGlvbiBlbihlKXtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGUuZXhwb3NlZD9lLmV4cG9zZVByb3h5fHwoZS5leHBvc2VQcm94eT1uZXcgUHJveHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFFzKG1pKGUuZXhwb3NlZCkpLHtnZXQodCxuKXtpZihuIGluIHQpcmV0dXJuIHRbbl07aScKICAgICAgICAgICAgICAgICAgICAgICAgYidmKG4gaW4gcHQpcmV0dXJuIHB0W25dKGUpfSxoYXModCxuKXtyZXR1cm4gbiBpbiB0fHxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiBwdH19KSk6ZS5wcm94eX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gUihlKSYmIl9fdmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY09wdHMiaW4gZX1jb25zdCBqbz0oZSx0KT0+VGkoZSx0LFN0KSxMbz0iMy41LjEzIjsvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXG4qIEB2dWUvcnVudGltZS1kb20gdjMuNS4xM1xuKiAoYykgMjAxOC1wcmVzZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnNcbiogQGxpY2Vuc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01JVFxuKiovbGV0IEVuO2NvbnN0IGhzPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cudHJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZWRUeXBlcztpZihocyl0cnl7RW49aHMuY3JlYXRlUG9saWN5KCJ2dWUiLHtjcmVhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFRNTDplPT5lfSl9Y2F0Y2h7fWNvbnN0IElyPUVuP2U9PkVuLmNyZWF0ZUhUTUwoZSk6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PmUsJG89Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixWbz0iaHR0cDovL3d3dy53JwogICAgICAgICAgICAgICAgICAgICAgICBiJzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLE9lPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50Om51bGwscHM9T2UmJk9lLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksVW89e2lucycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnQ6KGUsdCxuKT0+e3QuaW5zZXJ0QmVmb3JlKGUsbnx8bnVsbCl9LHJlbW92ZTplPT57JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHQ9ZS5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQoZSl9LGNyZWF0ZUVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50OihlLHQsbixzKT0+e2NvbnN0IHI9dD09PSJzdmciP09lLmNyZWF0ZUVsZW1lbnROUycKICAgICAgICAgICAgICAgICAgICAgICAgYicoJG8sZSk6dD09PSJtYXRobWwiP09lLmNyZWF0ZUVsZW1lbnROUyhWbyxlKTpuP09lLmNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhdGVFbGVtZW50KGUse2lzOm59KTpPZS5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSJzZWxlY3QiJiZzJiZzLm11bHRpcGxlIT1udWxsJiZyLnNldEF0dHJpYnV0ZSgibXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcGxlIixzLm11bHRpcGxlKSxyfSxjcmVhdGVUZXh0OmU9Pk9lLmNyZWF0ZVRleHROb2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSxjcmVhdGVDb21tZW50OmU9Pk9lLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCk9PntlLm5vZGVWYWx1ZT10fSxzZXRFbGVtZW50VGV4dDooZSx0KT0+e2UudGV4dENvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW50PXR9LHBhcmVudE5vZGU6ZT0+ZS5wYXJlbnROb2RlLG5leHRTaWJsaW5nOmU9PmUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+T2UucXVlcnlTZWxlY3RvcihlKSxzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2NvcGVJZChlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfSxpbnNlcnRTdGF0aWNDb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudChlLHQsbixzLHIsaSl7Y29uc3Qgbz1uP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZDtpZihyJiYocj09PWl8fHIubmV4dFNpYmxpbmcpKWZvcig7dC5pbnNlcnRCZWZvcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHIuY2xvbmVOb2RlKCEwKSxuKSwhKHI9PT1pfHwhKHI9ci5uZXh0U2libGluZykpOyk7ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsc2V7cHMuaW5uZXJIVE1MPUlyKHM9PT0ic3ZnIj9gPHN2Zz4ke2V9PC9zdmc+YDpzPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJtYXRobWwiP2A8bWF0aD4ke2V9PC9tYXRoPmA6ZSk7Y29uc3QgbD1wcy5jb250ZW50O2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihzPT09InN2ZyJ8fHM9PT0ibWF0aG1sIil7Y29uc3QgYz1sLmZpcnN0Q2hpbGQ7Zm9yKCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7Yy5maXJzdENoaWxkOylsLmFwcGVuZENoaWxkKGMuZmlyc3RDaGlsZCk7bC5yZW1vdmVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQoYyl9dC5pbnNlcnRCZWZvcmUobCxuKX1yZXR1cm5bbz9vLm5leHRTaWJsaW5nOnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmZpcnN0Q2hpbGQsbj9uLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZF19fSxLbz1TeScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYm9sKCJfdnRjIik7ZnVuY3Rpb24gQm8oZSx0LG4pe2NvbnN0IHM9ZVtLb107cyYmKHQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0P1t0LC4uLnNdOlsuLi5zXSkuam9pbigiICIpKSx0PT1udWxsP2UucmVtb3ZlQXR0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnV0ZSgiY2xhc3MiKTpuP2Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsdCk6ZS5jbGFzc05hbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlPXR9Y29uc3QgZ3M9U3ltYm9sKCJfdm9kIiksV289U3ltYm9sKCJfdnNoIikscW89U3ltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JvbCgiIiksSm89LyhefDspXFxzKmRpc3BsYXlcXHMqOi87ZnVuY3Rpb24gR28oZSx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxuKXtjb25zdCBzPWUuc3R5bGUscj1KKG4pO2xldCBpPSExO2lmKG4mJiFyKXtpZih0KWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihKKHQpKWZvcihjb25zdCBvIG9mIHQuc3BsaXQoIjsiKSl7Y29uc3QgbD1vLnNsaWNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLG8uaW5kZXhPZigiOiIpKS50cmltKCk7bltsXT09bnVsbCYmanQocyxsLCIiKX1lbHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IoY29uc3QgbyBpbiB0KW5bb109PW51bGwmJmp0KHMsbywiIik7Zm9yKGNvbnN0IG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluIG4pbz09PSJkaXNwbGF5IiYmKGk9ITApLGp0KHMsbyxuW29dKX1lbHNlIGlmKHIpeycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZih0IT09bil7Y29uc3Qgbz1zW3FvXTtvJiYobis9IjsiK28pLHMuY3NzVGV4dD1uLGk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0pvLnRlc3Qobil9fWVsc2UgdCYmZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Z3MgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGUmJihlW2dzXT1pP3MuZGlzcGxheToiIixlW1dvXSYmKHMuZGlzcGxheT0ibm9uZSIpKScKICAgICAgICAgICAgICAgICAgICAgICAgYid9Y29uc3QgX3M9L1xccyohaW1wb3J0YW50JC87ZnVuY3Rpb24ganQoZSx0LG4pe2lmKEUobicKICAgICAgICAgICAgICAgICAgICAgICAgYicpKW4uZm9yRWFjaChzPT5qdChlLHQscykpO2Vsc2UgaWYobj09bnVsbCYmKG49IiIpLHQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXJ0c1dpdGgoIi0tIikpZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7Y29uc3Qgcz1ZbygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0KTtfcy50ZXN0KG4pP2Uuc2V0UHJvcGVydHkoR2Uocyksbi5yZXBsYWNlKF9zLCIiKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydGFudCIpOmVbc109bn19Y29uc3QgbXM9WyJXZWJraXQiLCJNb3oiLCJtcyJdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxwbj17fTtmdW5jdGlvbiBZbyhlLHQpe2NvbnN0IG49cG5bdF07aWYobilyZXR1cm4gbjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IHM9TmUodCk7aWYocyE9PSJmaWx0ZXIiJiZzIGluIGUpcmV0dXJuIHBuW3RdPXM7cycKICAgICAgICAgICAgICAgICAgICAgICAgYic9UnMocyk7Zm9yKGxldCByPTA7cjxtcy5sZW5ndGg7cisrKXtjb25zdCBpPW1zW3JdK3M7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKGkgaW4gZSlyZXR1cm4gcG5bdF09aX1yZXR1cm4gdH1jb25zdCBicz0iaHR0cDovL3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3cudzMub3JnLzE5OTkveGxpbmsiO2Z1bmN0aW9uIHlzKGUsdCxuLHMscixpPVlyKHQpKScKICAgICAgICAgICAgICAgICAgICAgICAgYid7cyYmdC5zdGFydHNXaXRoKCJ4bGluazoiKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05TKGJzLHQuc2xpY2UoNix0Lmxlbmd0aCkpOmUuc2V0QXR0cmlidXRlTlMoYnMsdCxuKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj09bnVsbHx8aSYmIUlzKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSh0LGk/IiI6VGUobik/U3RyaW5nKG4pOm4pfWZ1bmN0aW9uIHhzKGUsdCxuLHMscil7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKHQ9PT0iaW5uZXJIVE1MInx8dD09PSJ0ZXh0Q29udGVudCIpe24hPW51bGwmJihlW3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXT10PT09ImlubmVySFRNTCI/SXIobik6bik7cmV0dXJufWNvbnN0IGk9ZS50YWdOYW1lOycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZih0PT09InZhbHVlIiYmaSE9PSJQUk9HUkVTUyImJiFpLmluY2x1ZGVzKCItIikpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBsPWk9PT0iT1BUSU9OIj9lLmdldEF0dHJpYnV0ZSgidmFsdWUiKXx8IiI6ZS52YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUsYz1uPT1udWxsP2UudHlwZT09PSJjaGVja2JveCI/Im9uIjoiIjpTdHJpbmcobik7KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsIT09Y3x8ISgiX3ZhbHVlImluIGUpKSYmKGUudmFsdWU9Yyksbj09bnVsbCYmZS5yZW1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT0iInwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfG49PW51bGwpe2NvbnN0IGw9dHlwZW9mIGVbdF07bD09PSJib29sZWFuIj9uPUlzKG4pOicKICAgICAgICAgICAgICAgICAgICAgICAgYiduPT1udWxsJiZsPT09InN0cmluZyI/KG49IiIsbz0hMCk6bD09PSJudW1iZXIiJiYobj0wJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvPSEwKX10cnl7ZVt0XT1ufWNhdGNoe31vJiZlLnJlbW92ZUF0dHJpYnV0ZShyfHx0KX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gRnIoZSx0LG4scyl7ZS5hZGRFdmVudExpc3RlbmVyKHQsbixzKX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gem8oZSx0LG4scyl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixzKX1jb25zdCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M9U3ltYm9sKCJfdmVpIik7ZnVuY3Rpb24gWG8oZSx0LG4scyxyPW51bGwpe2NvbnN0IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWVbU3NdfHwoZVtTc109e30pLG89aVt0XTtpZihzJiZvKW8udmFsdWU9cztlbHNle2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdFtsLGNdPVpvKHQpO2lmKHMpe2NvbnN0IGg9aVt0XT1lbChzLHIpO0ZyKGUsbCxoLGMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31lbHNlIG8mJih6byhlLGwsbyxjKSxpW3RdPXZvaWQgMCl9fWNvbnN0IHdzPS8oPzpPbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gWm8oZSl7bGV0IHQ7aWYod3MudGVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkpe3Q9e307bGV0IHM7Zm9yKDtzPWUubWF0Y2god3MpOyllPWUuc2xpY2UoMCxlLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgtc1swXS5sZW5ndGgpLHRbc1swXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5bZVsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMl09PT0iOiI/ZS5zbGljZSgzKTpHZShlLnNsaWNlKDIpKSx0XX1sZXQgZ249MDtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgUW89UHJvbWlzZS5yZXNvbHZlKCksa289KCk9PmdufHwoUW8udGhlbigoKT0+Z249MCksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2duPURhdGUubm93KCkpO2Z1bmN0aW9uIGVsKGUsdCl7Y29uc3Qgbj1zPT57aWYoIXMuX3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMpcy5fdnRzPURhdGUubm93KCk7ZWxzZSBpZihzLl92dHM8PW4uYXR0YWNoZWQpcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybjtDZSh0bChzLG4udmFsdWUpLHQsNSxbc10pfTtyZXR1cm4gbi52YWx1ZT1lLG4uYXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaGVkPWtvKCksbn1mdW5jdGlvbiB0bChlLHQpe2lmKEUodCkpe2NvbnN0IG49ZS5zdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb249KCk9PntuLmNhbGwoZSksZS5fc3RvcHBlZD0hMH0sdC5tYXAocz0+cj0+IXIuX3N0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wcGVkJiZzJiZzKHIpKX1lbHNlIHJldHVybiB0fWNvbnN0IFRzPWU9PmUuY2hhckNvZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPicKICAgICAgICAgICAgICAgICAgICAgICAgYic5NiYmZS5jaGFyQ29kZUF0KDIpPDEyMyxubD0oZSx0LG4scyxyLGkpPT57Y29uc3Qgbz1yJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PSJzdmciO3Q9PT0iY2xhc3MiP0JvKGUscyxvKTp0PT09InN0eWxlIj9HbyhlLG4scyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOld0KHQpP1BuKHQpfHxYbyhlLHQsbixzLGkpOih0WzBdPT09Ii4iPyh0PXQuc2xpY2UoMScKICAgICAgICAgICAgICAgICAgICAgICAgYicpLCEwKTp0WzBdPT09Il4iPyh0PXQuc2xpY2UoMSksITEpOnNsKGUsdCxzLG8pKT8oeHMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsdCxzKSwhZS50YWdOYW1lLmluY2x1ZGVzKCItIikmJih0PT09InZhbHVlInx8dD09PSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2tlZCJ8fHQ9PT0ic2VsZWN0ZWQiKSYmeXMoZSx0LHMsbyxpLHQhPT0idmFsdWUiKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpOmUuX2lzVnVlQ0UmJigvW0EtWl0vLnRlc3QodCl8fCFKKHMpKT94cyhlLE5lKHQpLHMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ksdCk6KHQ9PT0idHJ1ZS12YWx1ZSI/ZS5fdHJ1ZVZhbHVlPXM6dD09PSJmYWxzZS12YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUiJiYoZS5fZmFsc2VWYWx1ZT1zKSx5cyhlLHQscyxvKSl9O2Z1bmN0aW9uIHNsKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsbixzKXtpZihzKXJldHVybiEhKHQ9PT0iaW5uZXJIVE1MInx8dD09PSJ0ZXh0Q29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QifHx0IGluIGUmJlRzKHQpJiZSKG4pKTtpZih0PT09InNwZWxsY2hlY2sifHx0PT09ImQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnZ2FibGUifHx0PT09InRyYW5zbGF0ZSJ8fHQ9PT0iZm9ybSJ8fHQ9PT0ibGlzdCImJicKICAgICAgICAgICAgICAgICAgICAgICAgYidlLnRhZ05hbWU9PT0iSU5QVVQifHx0PT09InR5cGUiJiZlLnRhZ05hbWU9PT0iVEVYVEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBIilyZXR1cm4hMTtpZih0PT09IndpZHRoInx8dD09PSJoZWlnaHQiKXtjb25zdCByPWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRhZ05hbWU7aWYocj09PSJJTUcifHxyPT09IlZJREVPInx8cj09PSJDQU5WQVMifHxyPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PSJTT1VSQ0UiKXJldHVybiExfXJldHVybiBUcyh0KSYmSihuKT8hMTp0IGluIGV9Y29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IENzPWU9Pntjb25zdCB0PWUucHJvcHNbIm9uVXBkYXRlOm1vZGVsVmFsdWUiXXx8ITEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiBFKHQpP249PkZ0KHQsbik6dH0sX249U3ltYm9sKCJfYXNzaWduIikscmw9eycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWVwOiEwLGNyZWF0ZWQoZSx0LG4pe2VbX25dPUNzKG4pLEZyKGUsImNoYW5nZSIsKCk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz57Y29uc3Qgcz1lLl9tb2RlbFZhbHVlLHI9aWwoZSksaT1lLmNoZWNrZWQsbz1lW19uXTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYoRShzKSl7Y29uc3QgbD1GcyhzLHIpLGM9bCE9PS0xO2lmKGkmJiFjKW8ocy5jb25jYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KHIpKTtlbHNlIGlmKCFpJiZjKXtjb25zdCBoPVsuLi5zXTtoLnNwbGljZShsLDEpLG8oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gpfX1lbHNlIGlmKHF0KHMpKXtjb25zdCBsPW5ldyBTZXQocyk7aT9sLmFkZChyKTpsLmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxldGUociksbyhsKX1lbHNlIG8oRHIoZSxpKSl9KX0sbW91bnRlZDp2cyxiZWZvcmVVcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkYXRlKGUsdCxuKXtlW19uXT1DcyhuKSx2cyhlLHQsbil9fTtmdW5jdGlvbiB2cyhlLHt2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWU6dCxvbGRWYWx1ZTpufSxzKXtlLl9tb2RlbFZhbHVlPXQ7bGV0IHI7aWYoRSh0KSknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj1Gcyh0LHMucHJvcHMudmFsdWUpPi0xO2Vsc2UgaWYocXQodCkpcj10LmhhcyhzLnBybycKICAgICAgICAgICAgICAgICAgICAgICAgYidwcy52YWx1ZSk7ZWxzZXtpZih0PT09bilyZXR1cm47cj1ZdCh0LERyKGUsITApKX1lLmNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vja2VkIT09ciYmKGUuY2hlY2tlZD1yKX1mdW5jdGlvbiBpbChlKXtyZXR1cm4iX3ZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSJpbiBlP2UuX3ZhbHVlOmUudmFsdWV9ZnVuY3Rpb24gRHIoZSx0KXtjb25zdCBuPXQ/IicKICAgICAgICAgICAgICAgICAgICAgICAgYidfdHJ1ZVZhbHVlIjoiX2ZhbHNlVmFsdWUiO3JldHVybiBuIGluIGU/ZVtuXTp0fWNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbD1zZSh7cGF0Y2hQcm9wOm5sfSxVbyk7bGV0IE9zO2Z1bmN0aW9uIGxsKCl7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBPc3x8KE9zPWNvKG9sKSl9Y29uc3QgZmw9KC4uLmUpPT57Y29uc3QgdD1sbCgpLmNyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVBcHAoLi4uZSkse21vdW50Om59PXQ7cmV0dXJuIHQubW91bnQ9cz0+e2NvbnN0IHI9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VsKHMpO2lmKCFyKXJldHVybjtjb25zdCBpPXQuX2NvbXBvbmVudDshUihpKSYmIWkucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlciYmIWkudGVtcGxhdGUmJihpLnRlbXBsYXRlPXIuaW5uZXJIVE1MKSxyLm5vZGVUeScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZT09PTEmJihyLnRleHRDb250ZW50PSIiKTtjb25zdCBvPW4ociwhMSxjbChyKSk7cmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiByIGluc3RhbmNlb2YgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKCJ2LWNsb2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXYtYXBwIiwiIikpLG99LHR9O2Z1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbChlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4ic3ZnIjtpZih0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mIE1hdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudClyZXR1cm4ibWF0aG1sIn1mdW5jdGlvbiB1bChlKXtyZXR1cm4gSihlKT9kb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQucXVlcnlTZWxlY3RvcihlKTplfWNvbnN0IGFsPXtjbGFzczoiY29udGFpbmVyIHB5JwogICAgICAgICAgICAgICAgICAgICAgICBiJy01In0sZGw9e2NsYXNzOiJ0ZXh0LWNlbnRlciBtYi01In0saGw9e2NsYXNzOiJjdXN0b20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWNvbnRyb2wgY3VzdG9tLXN3aXRjaCBkLWlubGluZS1ibG9jayJ9LHBsPXtjbGFzczoiYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1c3RvbS1jb250cm9sLWxhYmVsIG0tMiIsZm9yOiJiaWxsaW5nVG9nZ2xlIn0sZ2w9e2NsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzczoicm93In0sX2w9e2NsYXNzOiJjYXJkIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLTEwMCJ9LG1sPXtjbGFzczoiY2FyZC1ib2R5IGJvcmRlci0wIHRleHQtY2VudGVyIn0sYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsPXtjbGFzczoiY2FyZC10aXRsZSJ9LHlsPXtjbGFzczoiY2FyZC1wcmljZSJ9LHhsPXtjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3M6InRleHQtbXV0ZWQifSxTbD1bImlubmVySFRNTCJdLHdsPXtfX25hbWU6IlByaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nQ29tcG9uZW50IixzZXR1cChlKXtjb25zdCB0PWJpKCExKTtsZXQgbj1KU09OLnBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZShhdG9iKHdpbmRvdy5hc29uZURhdGEpKTtyZXR1cm4ocyxyKT0+KEh0KCksaG4oImRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YiLGFsLFtZKCJkaXYiLGRsLFtyWzFdfHwoclsxXT1ZKCJoMiIse2NsYXNzOiJtYi00In0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJPdXIgUHJpY2luZyIsLTEpKSxZKCJkaXYiLGhsLFtNaShZKCJpbnB1dCIse3R5cGU6IicKICAgICAgICAgICAgICAgICAgICAgICAgYidjaGVja2JveCIsY2xhc3M6ImN1c3RvbS1jb250cm9sLWlucHV0IixpZDoiYmlsbGluZ1RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dnbGUiLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpyWzBdfHwoclswXT1pPT50LnZhbHVlPWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0sbnVsbCw1MTIpLFtbcmwsdC52YWx1ZV1dKSxZKCJsYWJlbCIscGwsZnQodC52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic/IlllYXJseSI6Ik1vbnRobHkiKSsiIEJpbGxpbmcgIiwxKV0pXSksWSgiZGl2IixnbCxbJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhIdCghMCksaG4oeGUsbnVsbCxHaShacyhuKSxpPT4oSHQoKSxobigiZGl2Iix7Y2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiJjb2wtbWQtNCBtYi00IixrZXk6aS5uYW1lfSxbWSgiZGl2IixfbCxbWSgiZGl2IixtbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsW1koImg0IixibCxmdChpLm5hbWUpLDEpLFkoImgyIix5bCxbUHIoIiAkIitmdCh0LnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZT9pLnllYXJseVByaWNlOmkubW9udGhseVByaWNlKSsiICIsMSksWSgic21hbGwiLHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCwiLyIrZnQodC52YWx1ZT8ieWVhciI6Im1vbnRoIiksMSldKSxyWzJdfHwoclsyXT1ZKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciaHIiLG51bGwsbnVsbCwtMSkpLFkoImRpdiIse2NsYXNzOiJsaXN0LXVuc3R5bGVkIixpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25uZXJIVE1MOmkuZmVhdHVyZXMwfSxudWxsLDgsU2wpXSksclszXXx8KHJbM109WSgiZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndiIse2NsYXNzOiJjYXJkLWZvb3RlciBib3JkZXItMCBiZy10cmFuc3BhcmVudCJ9LFtZKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciYnV0dG9uIix7Y2xhc3M6ImJ0biBidG4tb3V0bGluZS1kYXJrIGJ0bi1sZyB3LTEwMCJ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJywiU2VsZWN0IFBsYW4iKV0sLTEpKV0pXSkpKSwxMjgpKV0pXSkpfX0sVGw9e19fbmFtZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIkFwcCIsc2V0dXAoZSl7bGV0IHQ9SlNPTi5wYXJzZShhdG9iKHdpbmRvdy5hc29uZURhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhKSk7cmV0dXJuIGNvbnNvbGUubG9nKHQpLChuLHMpPT4oSHQoKSx2byh3bCkpfX07ZmwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RsKS5tb3VudCgiIyIrd2luZG93LmFzb25lSWQpO1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC9hc3NldHMvaW5kZXgtaTJEemNTQzcuanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicoZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIikucmVsTGlzdDtpZih0JiZ0LnN1cHBvcnRzJiZ0LnN1cHBvcnRzKCJtb2R1bGVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbG9hZCIpKXJldHVybjtmb3IoY29uc3QgciBvZiBkb2N1bWVudC5xdWVyeVNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvckFsbChcJ2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl1cJykpcyhyKTtuZXcgTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGF0aW9uT2JzZXJ2ZXIocj0+e2Zvcihjb25zdCBpIG9mIHIpaWYoaS50eXBlPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSJjaGlsZExpc3QiKWZvcihjb25zdCBvIG9mIGkuYWRkZWROb2RlcylvLnRhZ05hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lPT09IkxJTksiJiZvLnJlbD09PSJtb2R1bGVwcmVsb2FkIiYmcyhvKX0pLm9icycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBuKHIpe2NvbnN0IGk9e307cmV0dXJuIHIuaW50ZWdyaXR5JiYoaS5pbnRlZ3JpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5PXIuaW50ZWdyaXR5KSxyLnJlZmVycmVyUG9saWN5JiYoaS5yZWZlcnJlclBvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpY3k9ci5yZWZlcnJlclBvbGljeSksci5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpYWxzIj9pLmNyZWRlbnRpYWxzPSJpbmNsdWRlIjpyLmNyb3NzT3JpZ2luPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJhbm9ueW1vdXMiP2kuY3JlZGVudGlhbHM9Im9taXQiOmkuY3JlZGVudGlhbHM9IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiBzKHIpe2lmKHIuZXApcmV0dXJuO3IuZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSEwO2NvbnN0IGk9bihyKTtmZXRjaChyLmhyZWYsaSl9fSkoKTsvKipcbiogQHZ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvc2hhcmVkIHYzLjUuMTNcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291IGFuZCBWdWUgY29udHJpYnV0b3JzXG4qIEBsaWNlbnNlIE1JVFxuKiovLyohICNfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19OT19TSURFX0VGRkVDVFNfXyAqL2Z1bmN0aW9uIEFuKGUpe2NvbnN0IHQ9T2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IG4gb2YgZS5zcGxpdCgiLCIpKXRbbl0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPTE7cmV0dXJuIG49Pm4gaW4gdH1jb25zdCBMPXt9LFhlPVtdLHdlPSgpPT57fSxqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I9KCk9PiExLFd0PWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBdCgxKT09PTExMCYmKGUuY2hhckNvZGVBdCgyKT4xMjJ8fGUuY2hhckNvZGVBdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMik8OTcpLFBuPWU9PmUuc3RhcnRzV2l0aCgib25VcGRhdGU6Iiksc2U9T2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5hc3NpZ24sUm49KGUsdCk9Pntjb25zdCBuPWUuaW5kZXhPZih0KTtuPi0xJiZlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpY2UobiwxKX0sTHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSD0oZSx0KT0+THIuY2FsbChlLHQpLEU9QXJyYXkuaXNBcnJheSxaZT1lPT53dChlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk9PT0iW29iamVjdCBNYXBdIixxdD1lPT53dChlKT09PSJbb2JqZWN0IFNldF0iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidabj1lPT53dChlKT09PSJbb2JqZWN0IERhdGVdIixSPWU9PnR5cGVvZiBlPT0iZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIixKPWU9PnR5cGVvZiBlPT0ic3RyaW5nIixUZT1lPT50eXBlb2YgZT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzeW1ib2wiLEs9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IixFcz1lPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+KEsoZSl8fFIoZSkpJiZSKGUudGhlbikmJlIoZS5jYXRjaCksQXM9T2JqZWN0LnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90b3R5cGUudG9TdHJpbmcsd3Q9ZT0+QXMuY2FsbChlKSwkcj1lPT53dChlKS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2UoOCwtMSksUHM9ZT0+d3QoZSk9PT0iW29iamVjdCBPYmplY3RdIixNbj1lPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+SihlKSYmZSE9PSJOYU4iJiZlWzBdIT09Ii0iJiYiIitwYXJzZUludChlLDEwKT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT1lLHV0PUFuKCIsa2V5LHJlZixyZWZfZm9yLHJlZl9rZXksb25Wbm9kZUJlZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEp0PWU9Pntjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG49PnRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25dfHwodFtuXT1lKG4pKX0sVnI9Ly0oXFx3KS9nLE5lPUp0KGU9PmUucmVwbGFjZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVnIsKHQsbik9Pm4/bi50b1VwcGVyQ2FzZSgpOiIiKSksVXI9L1xcQihbQS1aXSkvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR2U9SnQoZT0+ZS5yZXBsYWNlKFVyLCItJDEiKS50b0xvd2VyQ2FzZSgpKSxScz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSnQoZT0+ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKSxzbj1KJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZT0+ZT9gb24ke1JzKGUpfWA6IiIpLERlPShlLHQpPT4hT2JqZWN0LmlzKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEZ0PShlLC4uLnQpPT57Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi4udCl9LE1zPShlLHQsbixzPSExKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTpzLHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTpufSl9LEtyPWU9Pntjb25zdCB0PXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTih0KT9lOnR9O2xldCBRbjtjb25zdCBHdD0oKT0+UW58fChRbj10eXBlb2YgZ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6e30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtmdW5jdGlvbiBJbihlKXtpZihFKGUpKXtjb25zdCB0PXt9O2ZvcihsZXQgbj0wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcz1lW25dLHI9SihzKT9KcihzKTpJbihzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7aWYocilmb3IoY29uc3QgaSBpbiByKXRbaV09cltpXX1yZXR1cm4gdH1lbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihKKGUpfHxLKGUpKXJldHVybiBlfWNvbnN0IEJyPS87KD8hW14oXSpcXCkpL2csVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyPS86KFteXSspLyxxcj0vXFwvXFwqW15dKj9cXCpcXC8vZztmdW5jdGlvbiBKcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7Y29uc3QgdD17fTtyZXR1cm4gZS5yZXBsYWNlKHFyLCIiKS5zcGxpdChCcikuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2gobj0+e2lmKG4pe2NvbnN0IHM9bi5zcGxpdChXcik7cy5sZW5ndGg+MScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJih0W3NbMF0udHJpbSgpXT1zWzFdLnRyaW0oKSl9fSksdH1mdW5jdGlvbiBGbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7bGV0IHQ9IiI7aWYoSihlKSl0PWU7ZWxzZSBpZihFKGUpKWZvcihsZXQgbj0wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcz1GbihlW25dKTtzJiYodCs9cysiICIpfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbHNlIGlmKEsoZSkpZm9yKGNvbnN0IG4gaW4gZSllW25dJiYodCs9bisiICIpO3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdC50cmltKCl9Y29uc3QgR3I9Iml0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscmVhZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmx5IixZcj1BbihHcik7ZnVuY3Rpb24gSXMoZSl7cmV0dXJuISFlfHxlPT09IiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWZ1bmN0aW9uIHpyKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE7bGV0IG49ITA7Zm9yKGxldCBzPTA7biYmczxlLmxlbmd0aDtzKyspbj1ZdChlWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzXSx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBZdChlLHQpe2lmKGU9PT10KXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hMDtsZXQgbj1abihlKSxzPVpuKHQpO2lmKG58fHMpcmV0dXJuIG4mJnM/ZS5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0VGltZSgpPT09dC5nZXRUaW1lKCk6ITE7aWYobj1UZShlKSxzPVRlKHQpLG58fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKXJldHVybiBlPT09dDtpZihuPUUoZSkscz1FKHQpLG58fHMpcmV0dXJuIG4mJnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInP3pyKGUsdCk6ITE7aWYobj1LKGUpLHM9Syh0KSxufHxzKXtpZighbnx8IXMpcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiExO2NvbnN0IHI9T2JqZWN0LmtleXMoZSkubGVuZ3RoLGk9T2JqZWN0LmtleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKHQpLmxlbmd0aDtpZihyIT09aSlyZXR1cm4hMTtmb3IoY29uc3QgbyBpbiBlKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgbD1lLmhhc093blByb3BlcnR5KG8pLGM9dC5oYXNPd25Qcm9wZXJ0eShvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7aWYobCYmIWN8fCFsJiZjfHwhWXQoZVtvXSx0W29dKSlyZXR1cm4hMX19cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBTdHJpbmcoZSk9PT1TdHJpbmcodCl9ZnVuY3Rpb24gRnMoZSx0KXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGUuZmluZEluZGV4KG49Pll0KG4sdCkpfWNvbnN0IERzPWU9PiEhKGUmJmUuX192JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19pc1JlZj09PSEwKSxmdD1lPT5KKGUpP2U6ZT09bnVsbD8iIjpFKGUpfHxLKGUpJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmKGUudG9TdHJpbmc9PT1Bc3x8IVIoZS50b1N0cmluZykpP0RzKGUpP2Z0KGUudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKTpKU09OLnN0cmluZ2lmeShlLEhzLDIpOlN0cmluZyhlKSxIcz0oZSx0KT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RzKHQpP0hzKGUsdC52YWx1ZSk6WmUodCk/e1tgTWFwKCR7dC5zaXplfSlgXTpbLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLnQuZW50cmllcygpXS5yZWR1Y2UoKG4sW3Mscl0saSk9PihuW3JuKHMsaSkrIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT4iXT1yLG4pLHt9KX06cXQodCk/e1tgU2V0KCR7dC5zaXplfSlgXTpbLi4udC52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWVzKCldLm1hcChuPT5ybihuKSl9OlRlKHQpP3JuKHQpOksodCkmJiFFKHQpJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmIVBzKHQpP1N0cmluZyh0KTp0LHJuPShlLHQ9IiIpPT57dmFyIG47cmV0dXJuIFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShlKT9gU3ltYm9sKCR7KG49ZS5kZXNjcmlwdGlvbikhPW51bGw/bjp0fSlgOmV9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzsvKipcbiogQHZ1ZS9yZWFjdGl2aXR5IHYzLjUuMTNcbiogKGMpIDIwMTgtcHJlc2VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYnV0b3JzXG4qIEBsaWNlbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBNSVRcbioqL2xldCBmZTtjbGFzcyBYcntjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXRhY2hlZD10LHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmVmZmVjdHM9W10sdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xlYW51cHM9W10sdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5wYXJlbnQ9ZmUsIXQmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZmZSYmKHRoaXMuaW5kZXg9KGZlLnNjb3Blc3x8KGZlLnNjb3Blcz1bXSkpLnB1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5faXNQYXVzZWQ9ITA7bGV0IHQsbjtpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YodGhpcy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGVzLmxlbmd0aDt0PG47dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrKyl0aGlzLnNjb3Blc1t0XS5wYXVzZSgpO2Zvcih0PTAsbj10aGlzLmVmZmVjdHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aDt0PG47dCsrKXRoaXMuZWZmZWN0c1t0XS5wYXVzZSgpfX1yZXN1bWUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7aWYodGhpcy5fYWN0aXZlJiZ0aGlzLl9pc1BhdXNlZCl7dGhpcy5faXNQYXVzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkPSExO2xldCB0LG47aWYodGhpcy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5sZW5ndGg7dDxuO3QrKyl0aGlzLnNjb3Blc1t0XS5yZXN1bWUoKTtmb3IodD0wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0ucicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3VtZSgpfX1ydW4odCl7aWYodGhpcy5fYWN0aXZlKXtjb25zdCBuPWZlO3RyeXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGZlPXRoaXMsdCgpfWZpbmFsbHl7ZmU9bn19fW9uKCl7ZmU9dGhpc31vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZmKCl7ZmU9dGhpcy5wYXJlbnR9c3RvcCh0KXtpZih0aGlzLl9hY3RpdmUpe3RoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLl9hY3RpdmU9ITE7bGV0IG4scztmb3Iobj0wLHM9dGhpcy5lZmZlY3RzLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7bjxzO24rKyl0aGlzLmVmZmVjdHNbbl0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLmxlbmd0aD0wLG49MCxzPXRoaXMuY2xlYW51cHMubGVuZ3RoO248cztuKyspdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuY2xlYW51cHNbbl0oKTtpZih0aGlzLmNsZWFudXBzLmxlbmd0aD0wLHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNjb3Blcyl7Zm9yKG49MCxzPXRoaXMuc2NvcGVzLmxlbmd0aDtuPHM7bisrKXRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnNjb3Blc1tuXS5zdG9wKCEwKTt0aGlzLnNjb3Blcy5sZW5ndGg9MH1pZighdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuZGV0YWNoZWQmJnRoaXMucGFyZW50JiYhdCl7Y29uc3Qgcj10aGlzLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuc2NvcGVzLnBvcCgpO3ImJnIhPT10aGlzJiYodGhpcy5wYXJlbnQuc2NvcGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1t0aGlzLmluZGV4XT1yLHIuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQgMH19fWZ1bmN0aW9uIFpyKCl7cmV0dXJuIGZlfWxldCBVO2NvbnN0IG9uPW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXcgV2Vha1NldDtjbGFzcyBOc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZuPXQsdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZGVwcz12b2lkIDAsdGhpcy5kZXBzVGFpbD12b2lkIDAsdGhpcy5mbGFncz01LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLm5leHQ9dm9pZCAwLHRoaXMuY2xlYW51cD12b2lkIDAsdGhpcy5zY2hlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyPXZvaWQgMCxmZSYmZmUuYWN0aXZlJiZmZS5lZmZlY3RzLnB1c2godGhpcyl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlKCl7dGhpcy5mbGFnc3w9NjR9cmVzdW1lKCl7dGhpcy5mbGFncyY2NCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmZsYWdzJj0tNjUsb24uaGFzKHRoaXMpJiYob24uZGVsZXRlKHRoaXMpLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnRyaWdnZXIoKSkpfW5vdGlmeSgpe3RoaXMuZmxhZ3MmMiYmISh0aGlzLmZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FncyYzMil8fHRoaXMuZmxhZ3MmOHx8THModGhpcyl9cnVuKCl7aWYoISh0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmbGFncyYxKSlyZXR1cm4gdGhpcy5mbigpO3RoaXMuZmxhZ3N8PTIsa24odGhpcyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCRzKHRoaXMpO2NvbnN0IHQ9VSxuPWRlO1U9dGhpcyxkZT0hMDt0cnl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmZuKCl9ZmluYWxseXtWcyh0aGlzKSxVPXQsZGU9bix0aGlzLmZsYWdzJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWdzJjEpe2ZvcihsZXQgdD10aGlzLmRlcHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3Q7dD10Lm5leHREZXApTm4odCk7dGhpcy5kZXBzPXRoaXMuZGVwc1RhaWw9dm9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgMCxrbih0aGlzKSx0aGlzLm9uU3RvcCYmdGhpcy5vblN0b3AoKSx0aGlzLmZsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P29uLmFkZCh0aGlzKTp0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5zY2hlZHVsZXI/dGhpcy5zY2hlZHVsZXIoKTp0aGlzLnJ1bklmRGlydHkoKX1yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuSWZEaXJ0eSgpe21uKHRoaXMpJiZ0aGlzLnJ1bigpfWdldCBkaXJ0eSgpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gbW4odGhpcyl9fWxldCBqcz0wLGF0LGR0O2Z1bmN0aW9uIExzKGUsdD0hMSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKGUuZmxhZ3N8PTgsdCl7ZS5uZXh0PWR0LGR0PWU7cmV0dXJufWUubmV4dD1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsYXQ9ZX1mdW5jdGlvbiBEbigpe2pzKyt9ZnVuY3Rpb24gSG4oKXtpZigtLWpzPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwKXJldHVybjtpZihkdCl7bGV0IHQ9ZHQ7Zm9yKGR0PXZvaWQgMDt0Oyl7Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG49dC5uZXh0O3QubmV4dD12b2lkIDAsdC5mbGFncyY9LTksdD1ufX1sZXQgZTtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yKDthdDspe2xldCB0PWF0O2ZvcihhdD12b2lkIDA7dDspe2NvbnN0IG49dC5uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dDtpZih0Lm5leHQ9dm9pZCAwLHQuZmxhZ3MmPS05LHQuZmxhZ3MmMSl0cnl7dC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpZ2dlcigpfWNhdGNoKHMpe2V8fChlPXMpfXQ9bn19aWYoZSl0aHJvdyBlfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAkcyhlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dD10Lm5leHREZXApdC52ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2lvbj0tMSx0LnByZXZBY3RpdmVMaW5rPXQuZGVwLmFjdGl2ZUxpbmssdC5kZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmFjdGl2ZUxpbms9dH1mdW5jdGlvbiBWcyhlKXtsZXQgdCxuPWUuZGVwc1RhaWwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9bjtmb3IoO3M7KXtjb25zdCByPXMucHJldkRlcDtzLnZlcnNpb249PT0tMT8ocycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT1uJiYobj1yKSxObihzKSxRcihzKSk6dD1zLHMuZGVwLmFjdGl2ZUxpbms9cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldkFjdGl2ZUxpbmsscy5wcmV2QWN0aXZlTGluaz12b2lkIDAscz1yfWUuZGVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9dCxlLmRlcHNUYWlsPW59ZnVuY3Rpb24gbW4oZSl7Zm9yKGxldCB0PWUuZGVwcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7dDt0PXQubmV4dERlcClpZih0LmRlcC52ZXJzaW9uIT09dC52ZXJzaW9ufHx0LmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXAuY29tcHV0ZWQmJihVcyh0LmRlcC5jb21wdXRlZCl8fHQuZGVwLnZlcnNpb24hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09dC52ZXJzaW9uKSlyZXR1cm4hMDtyZXR1cm4hIWUuX2RpcnR5fWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVcyhlKXtpZihlLmZsYWdzJjQmJiEoZS5mbGFncyYxNil8fChlLmZsYWdzJj0tMTcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUuZ2xvYmFsVmVyc2lvbj09PV90KSlyZXR1cm47ZS5nbG9iYWxWZXJzaW9uPV90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztjb25zdCB0PWUuZGVwO2lmKGUuZmxhZ3N8PTIsdC52ZXJzaW9uPjAmJiFlLmlzUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTUiYmZS5kZXBzJiYhbW4oZSkpe2UuZmxhZ3MmPS0zO3JldHVybn1jb25zdCBuPVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHM9ZGU7VT1lLGRlPSEwO3RyeXskcyhlKTtjb25zdCByPWUuZm4oZS5fdmFsdWUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzsodC52ZXJzaW9uPT09MHx8RGUocixlLl92YWx1ZSkpJiYoZS5fdmFsdWU9cix0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXJzaW9uKyspfWNhdGNoKHIpe3Rocm93IHQudmVyc2lvbisrLHJ9ZmluYWxseXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVT1uLGRlPXMsVnMoZSksZS5mbGFncyY9LTN9fWZ1bmN0aW9uIE5uKGUsdD0hMSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0e2RlcDpuLHByZXZTdWI6cyxuZXh0U3ViOnJ9PWU7aWYocyYmKHMubmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTdWI9cixlLnByZXZTdWI9dm9pZCAwKSxyJiYoci5wcmV2U3ViPXMsZS5uZXh0U3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYj12b2lkIDApLG4uc3Vicz09PWUmJihuLnN1YnM9cywhcyYmbi5jb21wdXRlZCkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tuLmNvbXB1dGVkLmZsYWdzJj0tNTtmb3IobGV0IGk9bi5jb21wdXRlZC5kZXBzOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpO2k9aS5uZXh0RGVwKU5uKGksITApfSF0JiYhLS1uLnNjJiZuLm1hcCYmbi5tYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlbGV0ZShuLmtleSl9ZnVuY3Rpb24gUXIoZSl7Y29uc3R7cHJldkRlcDp0LG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0RGVwOm59PWU7dCYmKHQubmV4dERlcD1uLGUucHJldkRlcD12b2lkIDApLG4mJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobi5wcmV2RGVwPXQsZS5uZXh0RGVwPXZvaWQgMCl9bGV0IGRlPSEwO2NvbnN0IEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz1bXTtmdW5jdGlvbiBqZSgpe0tzLnB1c2goZGUpLGRlPSExfWZ1bmN0aW9uIExlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpe2NvbnN0IGU9S3MucG9wKCk7ZGU9ZT09PXZvaWQgMD8hMDplfWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrbihlKXtjb25zdHtjbGVhbnVwOnR9PWU7aWYoZS5jbGVhbnVwPXZvaWQgMCx0KXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3Qgbj1VO1U9dm9pZCAwO3RyeXt0KCl9ZmluYWxseXtVPW59fX1sZXQgX3Q9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXt0aGlzLnN1Yj10LHRoaXMuZGVwPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHRoaXMudmVyc2lvbj1uLnZlcnNpb24sdGhpcy5uZXh0RGVwPXRoaXMucHJldkQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXA9dGhpcy5uZXh0U3ViPXRoaXMucHJldlN1Yj10aGlzLnByZXZBY3RpdmVMaW5rJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz12b2lkIDB9fWNsYXNzIGpue2NvbnN0cnVjdG9yKHQpe3RoaXMuY29tcHV0ZWQ9dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdGhpcy52ZXJzaW9uPTAsdGhpcy5hY3RpdmVMaW5rPXZvaWQgMCx0aGlzLnN1YnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXZvaWQgMCx0aGlzLm1hcD12b2lkIDAsdGhpcy5rZXk9dm9pZCAwLHRoaXMuc2M9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzB9dHJhY2sodCl7aWYoIVV8fCFkZXx8VT09PXRoaXMuY29tcHV0ZWQpcmV0dXJuOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXQgbj10aGlzLmFjdGl2ZUxpbms7aWYobj09PXZvaWQgMHx8bi5zdWIhPT1VKW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXRoaXMuYWN0aXZlTGluaz1uZXcga3IoVSx0aGlzKSxVLmRlcHM/KG4ucHJldkRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3A9VS5kZXBzVGFpbCxVLmRlcHNUYWlsLm5leHREZXA9bixVLmRlcHNUYWlsPW4pOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVLmRlcHM9VS5kZXBzVGFpbD1uLEJzKG4pO2Vsc2UgaWYobi52ZXJzaW9uPT09LTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYobi52ZXJzaW9uPXRoaXMudmVyc2lvbixuLm5leHREZXApKXtjb25zdCBzPW4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25leHREZXA7cy5wcmV2RGVwPW4ucHJldkRlcCxuLnByZXZEZXAmJihuLnByZXZEZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwLm5leHREZXA9cyksbi5wcmV2RGVwPVUuZGVwc1RhaWwsbi5uZXh0RGVwPXZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDAsVS5kZXBzVGFpbC5uZXh0RGVwPW4sVS5kZXBzVGFpbD1uLFUuZGVwcz09PW4mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYoVS5kZXBzPXMpfXJldHVybiBufXRyaWdnZXIodCl7dGhpcy52ZXJzaW9uKyssXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KyssdGhpcy5ub3RpZnkodCl9bm90aWZ5KHQpe0RuKCk7dHJ5e2ZvcihsZXQgbj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5zdWJzO247bj1uLnByZXZTdWIpbi5zdWIubm90aWZ5KCkmJm4uc3ViLmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Aubm90aWZ5KCl9ZmluYWxseXtIbigpfX19ZnVuY3Rpb24gQnMoZSl7aWYoZS5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwLnNjKyssZS5zdWIuZmxhZ3MmNCl7Y29uc3QgdD1lLmRlcC5jb21wdXRlZDtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCYmIWUuZGVwLnN1YnMpe3QuZmxhZ3N8PTIwO2ZvcihsZXQgcz10LmRlcHM7cztzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1zLm5leHREZXApQnMocyl9Y29uc3Qgbj1lLmRlcC5zdWJzO24hPT1lJiYoZS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldlN1Yj1uLG4mJihuLm5leHRTdWI9ZSkpLGUuZGVwLnN1YnM9ZX19Y29uc3QgYm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPW5ldyBXZWFrTWFwLHFlPVN5bWJvbCgiIikseW49U3ltYm9sKCIiKSxtdD1TeW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sKCIiKTtmdW5jdGlvbiBYKGUsdCxuKXtpZihkZSYmVSl7bGV0IHM9Ym4uZ2V0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtzfHxibi5zZXQoZSxzPW5ldyBNYXApO2xldCByPXMuZ2V0KG4pO3J8fChzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQobixyPW5ldyBqbiksci5tYXA9cyxyLmtleT1uKSxyLnRyYWNrKCl9fWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBFZShlLHQsbixzLHIsaSl7Y29uc3Qgbz1ibi5nZXQoZSk7aWYoIW8pe190KycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrO3JldHVybn1jb25zdCBsPWM9PntjJiZjLnRyaWdnZXIoKX07aWYoRG4oKSx0PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSJjbGVhciIpby5mb3JFYWNoKGwpO2Vsc2V7Y29uc3QgYz1FKGUpLGg9YyYmTW4oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pO2lmKGMmJm49PT0ibGVuZ3RoIil7Y29uc3QgYT1OdW1iZXIocyk7by5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaCgocCxUKT0+eyhUPT09Imxlbmd0aCJ8fFQ9PT1tdHx8IVRlKFQpJiZUPj1hKSYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJmwocCl9KX1lbHNlIHN3aXRjaCgobiE9PXZvaWQgMHx8by5oYXModm9pZCAwKSkmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZsKG8uZ2V0KG4pKSxoJiZsKG8uZ2V0KG10KSksdCl7Y2FzZSJhZGQiOmM/aCYmbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoby5nZXQoImxlbmd0aCIpKToobChvLmdldChxZSkpLFplKGUpJiZsKG8uZ2V0KHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbikpKTticmVhaztjYXNlImRlbGV0ZSI6Y3x8KGwoby5nZXQocWUpKSxaZShlKSYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2woby5nZXQoeW4pKSk7YnJlYWs7Y2FzZSJzZXQiOlplKGUpJiZsKG8uZ2V0KHFlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO2JyZWFrfX1IbigpfWZ1bmN0aW9uIFllKGUpe2NvbnN0IHQ9RChlKTtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHQ9PT1lP3Q6KFgodCwiaXRlcmF0ZSIsbXQpLGFlKGUpP3Q6dC5tYXAoWikpfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB6dChlKXtyZXR1cm4gWChlPUQoZSksIml0ZXJhdGUiLG10KSxlfWNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBlaT17X19wcm90b19fOm51bGwsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxuKHRoaXMsU3ltYm9sLml0ZXJhdG9yLFopfSxjb25jYXQoLi4uZSl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBZZSh0aGlzKS5jb25jYXQoLi4uZS5tYXAodD0+RSh0KT9ZZSh0KTp0KSl9LGVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWVzKCl7cmV0dXJuIGxuKHRoaXMsImVudHJpZXMiLGU9PihlWzFdPVooZVsxXSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpKX0sZXZlcnkoZSx0KXtyZXR1cm4gdmUodGhpcywiZXZlcnkiLGUsdCx2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwLGFyZ3VtZW50cyl9LGZpbHRlcihlLHQpe3JldHVybiB2ZSh0aGlzLCJmaWx0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIixlLHQsbj0+bi5tYXAoWiksYXJndW1lbnRzKX0sZmluZChlLHQpe3JldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUodGhpcywiZmluZCIsZSx0LFosYXJndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB2ZSh0aGlzLCJmaW5kSW5kZXgiLGUsdCx2b2lkIDAsYXJndW1lbnRzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LGZpbmRMYXN0KGUsdCl7cmV0dXJuIHZlKHRoaXMsImZpbmRMYXN0IixlLHQsWiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJndW1lbnRzKX0sZmluZExhc3RJbmRleChlLHQpe3JldHVybiB2ZSh0aGlzLCJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZExhc3RJbmRleCIsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmb3JFYWNoKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3JldHVybiB2ZSh0aGlzLCJmb3JFYWNoIixlLHQsdm9pZCAwLGFyZ3VtZW50cyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gZm4odGhpcywiaW5jbHVkZXMiLGUpfSxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXhPZiguLi5lKXtyZXR1cm4gZm4odGhpcywiaW5kZXhPZiIsZSl9LGpvaW4oZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3JldHVybiBZZSh0aGlzKS5qb2luKGUpfSxsYXN0SW5kZXhPZiguLi5lKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGZuKHRoaXMsImxhc3RJbmRleE9mIixlKX0sbWFwKGUsdCl7cmV0dXJuIHZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0aGlzLCJtYXAiLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0scG9wKCl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdCh0aGlzLCJwb3AiKX0scHVzaCguLi5lKXtyZXR1cm4gb3QodGhpcywicHVzaCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpfSxyZWR1Y2UoZSwuLi50KXtyZXR1cm4gZXModGhpcywicmVkdWNlIixlLHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30scmVkdWNlUmlnaHQoZSwuLi50KXtyZXR1cm4gZXModGhpcywicmVkdWNlUmlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IixlLHQpfSxzaGlmdCgpe3JldHVybiBvdCh0aGlzLCJzaGlmdCIpfSxzb21lKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHQpe3JldHVybiB2ZSh0aGlzLCJzb21lIixlLHQsdm9pZCAwLGFyZ3VtZW50cyl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxzcGxpY2UoLi4uZSl7cmV0dXJuIG90KHRoaXMsInNwbGljZSIsZSl9LHRvUmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2VkKCl7cmV0dXJuIFllKHRoaXMpLnRvUmV2ZXJzZWQoKX0sdG9Tb3J0ZWQoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiBZZSh0aGlzKS50b1NvcnRlZChlKX0sdG9TcGxpY2VkKC4uLmUpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gWWUodGhpcykudG9TcGxpY2VkKC4uLmUpfSx1bnNoaWZ0KC4uLmUpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gb3QodGhpcywidW5zaGlmdCIsZSl9LHZhbHVlcygpe3JldHVybiBsbih0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncywidmFsdWVzIixaKX19O2Z1bmN0aW9uIGxuKGUsdCxuKXtjb25zdCBzPXp0KGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxyPXNbdF0oKTtyZXR1cm4gcyE9PWUmJiFhZShlKSYmKHIuX25leHQ9ci5uZXh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyLm5leHQ9KCk9Pntjb25zdCBpPXIuX25leHQoKTtyZXR1cm4gaS52YWx1ZSYmKGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnZhbHVlPW4oaS52YWx1ZSkpLGl9KSxyfWNvbnN0IHRpPUFycmF5LnByb3RvdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7ZnVuY3Rpb24gdmUoZSx0LG4scyxyLGkpe2NvbnN0IG89enQoZSksbD1vIT09ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiFhZShlKSxjPW9bdF07aWYoYyE9PXRpW3RdKXtjb25zdCBwPWMuYXBwbHkoZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSk7cmV0dXJuIGw/WihwKTpwfWxldCBoPW47byE9PWUmJihsP2g9ZnVuY3Rpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLFoocCksVCxlKX06bi5sZW5ndGg+MiYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoPWZ1bmN0aW9uKHAsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLHAsVCxlKX0pKTtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgYT1jLmNhbGwobyxoLHMpO3JldHVybiBsJiZyP3IoYSk6YX1mdW5jdGlvbiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoZSx0LG4scyl7Y29uc3Qgcj16dChlKTtsZXQgaT1uO3JldHVybiByIT09ZSYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZShlKT9uLmxlbmd0aD4zJiYoaT1mdW5jdGlvbihvLGwsYyl7cmV0dXJuIG4uY2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGwodGhpcyxvLGwsYyxlKX0pOmk9ZnVuY3Rpb24obyxsLGMpe3JldHVybiBuLmNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsKHRoaXMsbyxaKGwpLGMsZSl9KSxyW3RdKGksLi4ucyl9ZnVuY3Rpb24gZm4oZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdCxuKXtjb25zdCBzPUQoZSk7WChzLCJpdGVyYXRlIixtdCk7Y29uc3Qgcj1zW3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSguLi5uKTtyZXR1cm4ocj09PS0xfHxyPT09ITEpJiZVbihuWzBdKT8oblswXT1EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuWzBdKSxzW3RdKC4uLm4pKTpyfWZ1bmN0aW9uIG90KGUsdCxuPVtdKXtqZSgpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEbigpO2NvbnN0IHM9RChlKVt0XS5hcHBseShlLG4pO3JldHVybiBIbigpLExlKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHN9Y29uc3Qgbmk9QW4oIl9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLFdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1uZXcgU2V0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCkuZmlsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcihlPT5lIT09ImFyZ3VtZW50cyImJmUhPT0iY2FsbGVyIikubWFwKGU9PlN5bWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xbZV0pLmZpbHRlcihUZSkpO2Z1bmN0aW9uIHNpKGUpe1RlKGUpfHwoZT1TdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nKGUpKTtjb25zdCB0PUQodGhpcyk7cmV0dXJuIFgodCwiaGFzIixlKSx0LmhhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPd25Qcm9wZXJ0eShlKX1jbGFzcyBxc3tjb25zdHJ1Y3Rvcih0PSExLG49ITEpe3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLl9pc1JlYWRvbmx5PXQsdGhpcy5faXNTaGFsbG93PW59Z2V0KHQsbixzKXtpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Yobj09PSJfX3Zfc2tpcCIpcmV0dXJuIHQuX192X3NraXA7Y29uc3Qgcj10aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfaXNSZWFkb25seSxpPXRoaXMuX2lzU2hhbGxvdztpZihuPT09Il9fdl9pc1JlYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSIpcmV0dXJuIXI7aWYobj09PSJfX3ZfaXNSZWFkb25seSIpcmV0dXJuIHI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKG49PT0iX192X2lzU2hhbGxvdyIpcmV0dXJuIGk7aWYobj09PSJfX3ZfcmF3IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpcmV0dXJuIHM9PT0ocj9pP2hpOnpzOmk/WXM6R3MpLmdldCh0KXx8T2JqZWN0LmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRQcm90b3R5cGVPZih0KT09PU9iamVjdC5nZXRQcm90b3R5cGVPZihzKT90OnZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkIDA7Y29uc3Qgbz1FKHQpO2lmKCFyKXtsZXQgYztpZihvJiYoYz1laVtuXSkpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBjO2lmKG49PT0iaGFzT3duUHJvcGVydHkiKXJldHVybiBzaX1jb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbD1SZWZsZWN0LmdldCh0LG4sUSh0KT90OnMpO3JldHVybihUZShuKT9Xcy5oYXMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOm5pKG4pKXx8KHJ8fFgodCwiZ2V0IixuKSxpKT9sOlEobCk/byYmTW4obik/bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6bC52YWx1ZTpLKGwpP3I/WHMobCk6JG4obCk6bH19Y2xhc3MgSnMgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXN7Y29uc3RydWN0b3IodD0hMSl7c3VwZXIoITEsdCl9c2V0KHQsbixzLHIpe2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaT10W25dO2lmKCF0aGlzLl9pc1NoYWxsb3cpe2NvbnN0IGM9SmUoaSk7aWYoIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZShzKSYmIUplKHMpJiYoaT1EKGkpLHM9RChzKSksIUUodCkmJlEoaSkmJiFRKHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSlyZXR1cm4gYz8hMTooaS52YWx1ZT1zLCEwKX1jb25zdCBvPUUodCkmJk1uKG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9OdW1iZXIobik8dC5sZW5ndGg6SCh0LG4pLGw9UmVmbGVjdC5zZXQodCxuLHMsUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodCk/dDpyKTtyZXR1cm4gdD09PUQocikmJihvP0RlKHMsaSkmJkVlKHQsInNldCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scyk6RWUodCwiYWRkIixuLHMpKSxsfWRlbGV0ZVByb3BlcnR5KHQsbil7Y29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHM9SCh0LG4pO3Rbbl07Y29uc3Qgcj1SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LG4pO3JldHVybiByJiZzJiZFZSh0LCJkZWxldGUiLG4sdm9pZCAwKSxyfWhhcygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCxuKXtjb25zdCBzPVJlZmxlY3QuaGFzKHQsbik7cmV0dXJuKCFUZShuKXx8IVdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5oYXMobikpJiZYKHQsImhhcyIsbiksc31vd25LZXlzKHQpe3JldHVybiBYKHQsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVyYXRlIixFKHQpPyJsZW5ndGgiOnFlKSxSZWZsZWN0Lm93bktleXModCl9fWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyByaSBleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCEwLHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31zZXQodCxuKXtyZXR1cm4hMH1kZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiEwfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9Y29uc3QgaWk9bmV3IEpzLG9pPW5ldyByaSxsaT1uZXcgSnMoITApO2NvbnN0IHgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj1lPT5lLFJ0PWU9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oLi4ucyl7Y29uc3Qgcj10aGlzLl9fdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfcmF3LGk9RChyKSxvPVplKGkpLGw9ZT09PSJlbnRyaWVzInx8ZT09PVN5bWJvbC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRlcmF0b3ImJm8sYz1lPT09ImtleXMiJiZvLGg9cltlXSguLi5zKSxhPW4/eG46JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q/U246WjtyZXR1cm4hdCYmWChpLCJpdGVyYXRlIixjP3luOnFlKSx7bmV4dCgpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdHt2YWx1ZTpwLGRvbmU6VH09aC5uZXh0KCk7cmV0dXJuIFQ/e3ZhbHVlOnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGRvbmU6VH06e3ZhbHVlOmw/W2EocFswXSksYShwWzFdKV06YShwKSxkb25lOlR9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fX1mdW5jdGlvbiBNdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLnQpe3JldHVybiBlPT09ImRlbGV0ZSI/ITEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmU9PT0iY2xlYXIiP3ZvaWQgMDp0aGlzfX1mdW5jdGlvbiBjaShlLHQpe2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuPXtnZXQocil7Y29uc3QgaT10aGlzLl9fdl9yYXcsbz1EKGkpLGw9RChyKTtlfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8KERlKHIsbCkmJlgobywiZ2V0IixyKSxYKG8sImdldCIsbCkpO2NvbnN0e2hhczonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY309UnQobyksaD10P3huOmU/U246WjtpZihjLmNhbGwobyxyKSlyZXR1cm4gaChpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXQocikpO2lmKGMuY2FsbChvLGwpKXJldHVybiBoKGkuZ2V0KGwpKTtpIT09bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJmkuZ2V0KHIpfSxnZXQgc2l6ZSgpe2NvbnN0IHI9dGhpcy5fX3ZfcmF3O3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hZSYmWChEKHIpLCJpdGVyYXRlIixxZSksUmVmbGVjdC5nZXQociwic2l6ZSIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IpfSxoYXMocil7Y29uc3QgaT10aGlzLl9fdl9yYXcsbz1EKGkpLGw9RChyKTtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGV8fChEZShyLGwpJiZYKG8sImhhcyIsciksWChvLCJoYXMiLGwpKSxyPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWw/aS5oYXMocik6aS5oYXMocil8fGkuaGFzKGwpfSxmb3JFYWNoKHIsaSl7Y29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IG89dGhpcyxsPW8uX192X3JhdyxjPUQobCksaD10P3huOmU/U246WjtyZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIWUmJlgoYywiaXRlcmF0ZSIscWUpLGwuZm9yRWFjaCgoYSxwKT0+ci5jYWxsKGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGgoYSksaChwKSxvKSl9fTtyZXR1cm4gc2UobixlP3thZGQ6TXQoImFkZCIpLHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6TXQoInNldCIpLGRlbGV0ZTpNdCgiZGVsZXRlIiksY2xlYXI6TXQoImNsZWFyIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfTp7YWRkKHIpeyF0JiYhYWUocikmJiFKZShyKSYmKHI9RChyKSk7Y29uc3QgaT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCh0aGlzKTtyZXR1cm4gUnQoaSkuaGFzLmNhbGwoaSxyKXx8KGkuYWRkKHIpLEVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhpLCJhZGQiLHIscikpLHRoaXN9LHNldChyLGkpeyF0JiYhYWUoaSkmJiFKZShpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihpPUQoaSkpO2NvbnN0IG89RCh0aGlzKSx7aGFzOmwsZ2V0OmN9PVJ0KG8pO2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgaD1sLmNhbGwobyxyKTtofHwocj1EKHIpLGg9bC5jYWxsKG8scikpO2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhPWMuY2FsbChvLHIpO3JldHVybiBvLnNldChyLGkpLGg/RGUoaSxhKSYmRWUobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInNldCIscixpKTpFZShvLCJhZGQiLHIsaSksdGhpc30sZGVsZXRlKHIpe2NvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpPUQodGhpcykse2hhczpvLGdldDpsfT1SdChpKTtsZXQgYz1vLmNhbGwoaSxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7Y3x8KHI9RChyKSxjPW8uY2FsbChpLHIpKSxsJiZsLmNhbGwoaSxyKTtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaD1pLmRlbGV0ZShyKTtyZXR1cm4gYyYmRWUoaSwiZGVsZXRlIixyLHZvaWQgMCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGh9LGNsZWFyKCl7Y29uc3Qgcj1EKHRoaXMpLGk9ci5zaXplIT09MCxvPXIuY2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyKCk7cmV0dXJuIGkmJkVlKHIsImNsZWFyIix2b2lkIDAsdm9pZCAwKSxvfX0pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIixTeW1ib2wuaXRlcmF0b3JdLmZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKHI9PntuW3JdPWZpKHIsZSx0KX0pLG59ZnVuY3Rpb24gTG4oZSx0KXtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgbj1jaShlLHQpO3JldHVybihzLHIsaSk9PnI9PT0iX192X2lzUmVhY3RpdmUiPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichZTpyPT09Il9fdl9pc1JlYWRvbmx5Ij9lOnI9PT0iX192X3JhdyI/czpSZWZsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5nZXQoSChuLHIpJiZyIGluIHM/bjpzLHIsaSl9Y29uc3QgdWk9e2dldDpMbighJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzEsITEpfSxhaT17Z2V0OkxuKCExLCEwKX0sZGk9e2dldDpMbighMCwhMSl9O2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBHcz1uZXcgV2Vha01hcCxZcz1uZXcgV2Vha01hcCx6cz1uZXcgV2Vha01hcCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcGkoZSl7c3dpdGNoKGUpe2Nhc2UiT2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCI6Y2FzZSJBcnJheSI6cmV0dXJuIDE7Y2FzZSJNYXAiOmNhc2UiU2V0IjpjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSJXZWFrTWFwIjpjYXNlIldlYWtTZXQiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAwfX1mdW5jdGlvbiBnaShlKXtyZXR1cm4gZS5fX3Zfc2tpcHx8IU9iamVjdC5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NFeHRlbnNpYmxlKGUpPzA6cGkoJHIoZSkpfWZ1bmN0aW9uICRuKGUpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgSmUoZSk/ZTpWbihlLCExLGlpLHVpLEdzKX1mdW5jdGlvbiBfaShlKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFZuKGUsITEsbGksYWksWXMpfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBWbihlLCEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxvaSxkaSx6cyl9ZnVuY3Rpb24gVm4oZSx0LG4scyxyKXtpZighSyhlKXx8ZS5fXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2X3JhdyYmISh0JiZlLl9fdl9pc1JlYWN0aXZlKSlyZXR1cm4gZTtjb25zdCBpPXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldChlKTtpZihpKXJldHVybiBpO2NvbnN0IG89Z2koZSk7aWYobz09PTApcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBlO2NvbnN0IGw9bmV3IFByb3h5KGUsbz09PTI/czpuKTtyZXR1cm4gci5zZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUsbCksbH1mdW5jdGlvbiBRZShlKXtyZXR1cm4gSmUoZSk/UWUoZS5fX3ZfcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndyk6ISEoZSYmZS5fX3ZfaXNSZWFjdGl2ZSl9ZnVuY3Rpb24gSmUoZSl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEhKGUmJmUuX192X2lzUmVhZG9ubHkpfWZ1bmN0aW9uIGFlKGUpe3JldHVybiEhKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlJiZlLl9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIFVuKGUpe3JldHVybiBlPyEhZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX192X3JhdzohMX1mdW5jdGlvbiBEKGUpe2NvbnN0IHQ9ZSYmZS5fX3ZfcmF3O3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gdD9EKHQpOmV9ZnVuY3Rpb24gbWkoZSl7cmV0dXJuIUgoZSwiX192X3NraScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwIikmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJk1zKGUsIl9fdl9za2lwIiwhMCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGV9Y29uc3QgWj1lPT5LKGUpPyRuKGUpOmUsU249ZT0+SyhlKT9YcyhlKTplO2Z1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBRKGUpe3JldHVybiBlP2UuX192X2lzUmVmPT09ITA6ITF9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGJpKGUpe3JldHVybiB5aShlLCExKX1mdW5jdGlvbiB5aShlLHQpe3JldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUShlKT9lOm5ldyB4aShlLHQpfWNsYXNzIHhpe2NvbnN0cnVjdG9yKHQsbil7dGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZGVwPW5ldyBqbix0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1NoYWxsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3PSExLHRoaXMuX3Jhd1ZhbHVlPW4/dDpEKHQpLHRoaXMuX3ZhbHVlPW4/dDpaKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSx0aGlzLl9fdl9pc1NoYWxsb3c9bn1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VwLnRyYWNrKCksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpe2NvbnN0IG49dGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuX3Jhd1ZhbHVlLHM9dGhpcy5fX3ZfaXNTaGFsbG93fHxhZSh0KXx8SmUodCk7dD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz90OkQodCksRGUodCxuKSYmKHRoaXMuX3Jhd1ZhbHVlPXQsdGhpcy5fdmFsdWU9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M/dDpaKHQpLHRoaXMuZGVwLnRyaWdnZXIoKSl9fWZ1bmN0aW9uIFpzKGUpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gUShlKT9lLnZhbHVlOmV9Y29uc3QgU2k9e2dldDooZSx0LG4pPT50PT09Il8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3ZfcmF3Ij9lOlpzKFJlZmxlY3QuZ2V0KGUsdCxuKSksc2V0OihlLHQsbixzKT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdCByPWVbdF07cmV0dXJuIFEocikmJiFRKG4pPyhyLnZhbHVlPW4sITApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZWZsZWN0LnNldChlLHQsbixzKX19O2Z1bmN0aW9uIFFzKGUpe3JldHVybiBRZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk/ZTpuZXcgUHJveHkoZSxTaSl9Y2xhc3Mgd2l7Y29uc3RydWN0b3IodCxuLHMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t0aGlzLmZuPXQsdGhpcy5zZXR0ZXI9bix0aGlzLl92YWx1ZT12b2lkIDAsdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVwPW5ldyBqbih0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTE2LHRoaXMuZ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JhbFZlcnNpb249X3QtMSx0aGlzLm5leHQ9dm9pZCAwLHRoaXMuZWZmZWN0PXRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLHRoaXMuX192X2lzUmVhZG9ubHk9IW4sdGhpcy5pc1NTUj1zfW5vdGlmeSgpe2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZih0aGlzLmZsYWdzfD0xNiwhKHRoaXMuZmxhZ3MmOCkmJlUhPT10aGlzKXJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gTHModGhpcywhMCksITB9Z2V0IHZhbHVlKCl7Y29uc3QgdD10aGlzLmRlcC50cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2soKTtyZXR1cm4gVXModGhpcyksdCYmKHQudmVyc2lvbj10aGlzLmRlcC52ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2lvbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpe3RoaXMuc2V0dGVyJiZ0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zZXR0ZXIodCl9fWZ1bmN0aW9uIFRpKGUsdCxuPSExKXtsZXQgcyxyO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUihlKT9zPWU6KHM9ZS5nZXQscj1lLnNldCksbmV3IHdpKHMscixuKX1jb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSXQ9e30sTHQ9bmV3IFdlYWtNYXA7bGV0IFdlO2Z1bmN0aW9uIENpKGUsdD0hMSxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1XZSl7aWYobil7bGV0IHM9THQuZ2V0KG4pO3N8fEx0LnNldChuLHM9W10pLHMucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2goZSl9fWZ1bmN0aW9uIHZpKGUsdCxuPUwpe2NvbnN0e2ltbWVkaWF0ZTpzLGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWVwOnIsb25jZTppLHNjaGVkdWxlcjpvLGF1Z21lbnRKb2I6bCxjYWxsOmN9PW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2g9QT0+cj9BOmFlKEEpfHxyPT09ITF8fHI9PT0wP0FlKEEsMSk6QWUoQSk7bGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhLHAsVCxDLEY9ITEsST0hMTtpZihRKGUpPyhwPSgpPT5lLnZhbHVlLEY9YWUoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpRZShlKT8ocD0oKT0+aChlKSxGPSEwKTpFKGUpPyhJPSEwLEY9ZS5zb21lKEE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz5RZShBKXx8YWUoQSkpLHA9KCk9PmUubWFwKEE9PntpZihRKEEpKXJldHVybiBBLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZTtpZihRZShBKSlyZXR1cm4gaChBKTtpZihSKEEpKXJldHVybiBjP2MoQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMik6QSgpfSkpOlIoZSk/dD9wPWM/KCk9PmMoZSwyKTplOnA9KCk9PntpZihUKXtqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoKTt0cnl7VCgpfWZpbmFsbHl7TGUoKX19Y29uc3QgQT1XZTtXZT1hO3RyeXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGM/YyhlLDMsW0NdKTplKEMpfWZpbmFsbHl7V2U9QX19OnA9d2UsdCYmciknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IEE9cCxHPXI9PT0hMD8xLzA6cjtwPSgpPT5BZShBKCksRyl9Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3o9WnIoKSxqPSgpPT57YS5zdG9wKCkseiYmei5hY3RpdmUmJlJuKHouZWZmZWN0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsYSl9O2lmKGkmJnQpe2NvbnN0IEE9dDt0PSguLi5HKT0+e0EoLi4uRyksaigpfX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IFc9ST9uZXcgQXJyYXkoZS5sZW5ndGgpLmZpbGwoSXQpOkl0O2NvbnN0IHE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E9PntpZighKCEoYS5mbGFncyYxKXx8IWEuZGlydHkmJiFBKSlpZih0KXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRz1hLnJ1bigpO2lmKHJ8fEZ8fChJP0cuc29tZSgoUmUsaGUpPT5EZShSZSxXW2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV0pKTpEZShHLFcpKSl7VCYmVCgpO2NvbnN0IFJlPVdlO1dlPWE7dHJ5e2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBoZT1bRyxXPT09SXQ/dm9pZCAwOkkmJldbMF09PT1JdD9bXTpXLENdO2M/Yyh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczLGhlKTp0KC4uLmhlKSxXPUd9ZmluYWxseXtXZT1SZX19fWVsc2UgYS5ydW4oKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiBsJiZsKHEpLGE9bmV3IE5zKHApLGEuc2NoZWR1bGVyPW8/KCk9Pm8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3EsITEpOnEsQz1BPT5DaShBLCExLGEpLFQ9YS5vblN0b3A9KCk9Pntjb25zdCBBPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMdC5nZXQoYSk7aWYoQSl7aWYoYyljKEEsNCk7ZWxzZSBmb3IoY29uc3QgRyBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSlHKCk7THQuZGVsZXRlKGEpfX0sdD9zP3EoITApOlc9YS5ydW4oKTpvP28ocS5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZChudWxsLCEwKSwhMCk6YS5ydW4oKSxqLnBhdXNlPWEucGF1c2UuYmluZChhKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsai5yZXN1bWU9YS5yZXN1bWUuYmluZChhKSxqLnN0b3A9aixqfWZ1bmN0aW9uIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShlLHQ9MS8wLG4pe2lmKHQ8PTB8fCFLKGUpfHxlLl9fdl9za2lwfHwobj1ufHxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V3IFNldCxuLmhhcyhlKSkpcmV0dXJuIGU7aWYobi5hZGQoZSksdC0tLFEoZSkpQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGUudmFsdWUsdCxuKTtlbHNlIGlmKEUoZSkpZm9yKGxldCBzPTA7czxlLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7cysrKUFlKGVbc10sdCxuKTtlbHNlIGlmKHF0KGUpfHxaZShlKSllLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKHM9PntBZShzLHQsbil9KTtlbHNlIGlmKFBzKGUpKXtmb3IoY29uc3QgcyBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZSlBZShlW3NdLHQsbik7Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmdldE93blByb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ0eVN5bWJvbHMoZSkpT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGUuY2FsbChlLHMpJiZBZShlW3NdLHQsbil9cmV0dXJuIGV9LyoqXG4qIEB2dWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL3J1bnRpbWUtY29yZSB2My41LjEzXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBUdChlLHQsbixzKXt0cnl7cmV0dXJuIHM/ZSguLi5zKTplKCl9Y2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoKHIpe1h0KHIsdCxuKX19ZnVuY3Rpb24gQ2UoZSx0LG4scyl7aWYoUihlKSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHI9VHQoZSx0LG4scyk7cmV0dXJuIHImJkVzKHIpJiZyLmNhdGNoKGk9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7WHQoaSx0LG4pfSkscn1pZihFKGUpKXtjb25zdCByPVtdO2ZvcihsZXQgaT0wO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPGUubGVuZ3RoO2krKylyLnB1c2goQ2UoZVtpXSx0LG4scykpO3JldHVybiByfX1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gWHQoZSx0LG4scz0hMCl7Y29uc3Qgcj10P3Qudm5vZGU6bnVsbCx7ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycm9ySGFuZGxlcjppLHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb246b30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXQmJnQuYXBwQ29udGV4dC5jb25maWd8fEw7aWYodCl7bGV0IGw9dC5wYXJlbnQ7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGM9dC5wcm94eSxoPWBodHRwczovL3Z1ZWpzLm9yZy9lcnJvci1yZWZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmNlLyNydW50aW1lLSR7bn1gO2Zvcig7bDspe2NvbnN0IGE9bC5lYztpZihhKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspaWYoYVtwXShlLGMsaCk9PT0hMSlyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJufWw9bC5wYXJlbnR9aWYoaSl7amUoKSxUdChpLG51bGwsMTAsW2UsYyxoXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLExlKCk7cmV0dXJufX1PaShlLG4scixzLG8pfWZ1bmN0aW9uIE9pKGUsdCxuLHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSEwLHI9ITEpe2lmKHIpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfWNvbnN0IHRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1bXTtsZXQgeWU9LTE7Y29uc3Qga2U9W107bGV0IEllPW51bGwsemU9MDtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicga3M9UHJvbWlzZS5yZXNvbHZlKCk7bGV0ICR0PW51bGw7ZnVuY3Rpb24gRWkoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IHQ9JHR8fGtzO3JldHVybiBlP3QudGhlbih0aGlzP2UuYmluZCh0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6ZSk6dH1mdW5jdGlvbiBBaShlKXtsZXQgdD15ZSsxLG49dGUubGVuZ3RoO2ZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoO3Q8bjspe2NvbnN0IHM9dCtuPj4+MSxyPXRlW3NdLGk9YnQocik7aTxlfHxpPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWUmJnIuZmxhZ3MmMj90PXMrMTpuPXN9cmV0dXJuIHR9ZnVuY3Rpb24gS24oZSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKCEoZS5mbGFncyYxKSl7Y29uc3QgdD1idChlKSxuPXRlW3RlLmxlbmd0aC0xXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7IW58fCEoZS5mbGFncyYyKSYmdD49YnQobik/dGUucHVzaChlKTp0ZS5zcGxpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEFpKHQpLDAsZSksZS5mbGFnc3w9MSxlcigpfX1mdW5jdGlvbiBlcigpeyR0fHwoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyR0PWtzLnRoZW4obnIpKX1mdW5jdGlvbiBQaShlKXtFKGUpP2tlLnB1c2goLi4uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOkllJiZlLmlkPT09LTE/SWUuc3BsaWNlKHplKzEsMCxlKTplLmZsYWdzJjF8fCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2UucHVzaChlKSxlLmZsYWdzfD0xKSxlcigpfWZ1bmN0aW9uIHRzKGUsdCxuPXllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysxKXtmb3IoO248dGUubGVuZ3RoO24rKyl7Y29uc3Qgcz10ZVtuXTtpZihzJiZzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmbGFncyYyKXtpZihlJiZzLmlkIT09ZS51aWQpY29udGludWU7dGUuc3BsaWNlKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDEpLG4tLSxzLmZsYWdzJjQmJihzLmZsYWdzJj0tMikscygpLHMuZmxhZ3MmNHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzLmZsYWdzJj0tMil9fX1mdW5jdGlvbiB0cihlKXtpZihrZS5sZW5ndGgpe2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB0PVsuLi5uZXcgU2V0KGtlKV0uc29ydCgobixzKT0+YnQobiktYnQocykpO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihrZS5sZW5ndGg9MCxJZSl7SWUucHVzaCguLi50KTtyZXR1cm59Zm9yKEllPXQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plPTA7emU8SWUubGVuZ3RoO3plKyspe2NvbnN0IG49SWVbemVdO24uZmxhZ3MmNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihuLmZsYWdzJj0tMiksbi5mbGFncyY4fHxuKCksbi5mbGFncyY9LTJ9SWU9bnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGwsemU9MH19Y29uc3QgYnQ9ZT0+ZS5pZD09bnVsbD9lLmZsYWdzJjI/LTE6MS8wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzplLmlkO2Z1bmN0aW9uIG5yKGUpe3RyeXtmb3IoeWU9MDt5ZTx0ZS5sZW5ndGg7eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKyspe2NvbnN0IHQ9dGVbeWVdO3QmJiEodC5mbGFncyY4KSYmKHQuZmxhZ3MmNCYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJih0LmZsYWdzJj0tMiksVHQodCx0LmksdC5pPzE1OjE0KSx0LmZsYWdzJjR8fCh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5mbGFncyY9LTIpKX19ZmluYWxseXtmb3IoO3llPHRlLmxlbmd0aDt5ZSsrKXtjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgdD10ZVt5ZV07dCYmKHQuZmxhZ3MmPS0yKX15ZT0tMSx0ZS5sZW5ndGg9MCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHIoKSwkdD1udWxsLCh0ZS5sZW5ndGh8fGtlLmxlbmd0aCkmJm5yKCl9fWxldCB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U9bnVsbCxzcj1udWxsO2Z1bmN0aW9uIFZ0KGUpe2NvbnN0IHQ9dWU7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZT1lLHNyPWUmJmUudHlwZS5fX3Njb3BlSWR8fG51bGwsdH1mdW5jdGlvbiBSaSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0PXVlLG4pe2lmKCF0fHxlLl9uKXJldHVybiBlO2NvbnN0IHM9KC4uLnIpPT57JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuX2QmJnVzKC0xKTtjb25zdCBpPVZ0KHQpO2xldCBvO3RyeXtvPWUoLi4ucil9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmFsbHl7VnQoaSkscy5fZCYmdXMoMSl9cmV0dXJuIG99O3JldHVybiBzLl9uPSEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCxzLl9jPSEwLHMuX2Q9ITAsc31mdW5jdGlvbiBNaShlLHQpe2lmKHVlPT09bnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wpcmV0dXJuIGU7Y29uc3Qgbj1lbih1ZSkscz1lLmRpcnN8fChlLmRpcnM9W10pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0W2ksbyxsLGM9TF09dFtyXTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSYmKFIoaSkmJihpPXttb3VudGVkOmksdXBkYXRlZDppfSksaS5kZWVwJiZBZShvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykscy5wdXNoKHtkaXI6aSxpbnN0YW5jZTpuLHZhbHVlOm8sb2xkVmFsdWU6dm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMCxhcmc6bCxtb2RpZmllcnM6Y30pKX1yZXR1cm4gZX1mdW5jdGlvbiBLZShlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scyl7Y29uc3Qgcj1lLmRpcnMsaT10JiZ0LmRpcnM7Zm9yKGxldCBvPTA7bzxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5sZW5ndGg7bysrKXtjb25zdCBsPXJbb107aSYmKGwub2xkVmFsdWU9aVtvXS52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUpO2xldCBjPWwuZGlyW3NdO2MmJihqZSgpLENlKGMsbiw4LFtlLmVsLGwsZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndF0pLExlKCkpfX1jb25zdCBJaT1TeW1ib2woIl92dGUiKSxGaT1lPT5lLl9faXNUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZXBvcnQ7ZnVuY3Rpb24gQm4oZSx0KXtlLnNoYXBlRmxhZyY2JiZlLmNvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ/KGUudHJhbnNpdGlvbj10LEJuKGUuY29tcG9uZW50LnN1YlRyZWUsdCkpOmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNoYXBlRmxhZyYxMjg/KGUuc3NDb250ZW50LnRyYW5zaXRpb249dC5jbG9uZShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zc0NvbnRlbnQpLGUuc3NGYWxsYmFjay50cmFuc2l0aW9uPXQuY2xvbmUoZS5zcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGYWxsYmFjaykpOmUudHJhbnNpdGlvbj10fWZ1bmN0aW9uIHJyKGUpe2UuaWRzPVsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5pZHNbMF0rZS5pZHNbMl0rKysiLSIsMCwwXX1mdW5jdGlvbiBVdChlLHQsbixzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxyPSExKXtpZihFKGUpKXtlLmZvckVhY2goKEYsSSk9PlV0KEYsdCYmKEUodCk/dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbSV06dCksbixzLHIpKTtyZXR1cm59aWYoaHQocykmJiFyKXtzLnNoYXBlRmxhZyYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNTEyJiZzLnR5cGUuX19hc3luY1Jlc29sdmVkJiZzLmNvbXBvbmVudC5zdWJUcmVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jb21wb25lbnQmJlV0KGUsdCxuLHMuY29tcG9uZW50LnN1YlRyZWUpO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9Y29uc3QgaT1zLnNoYXBlRmxhZyY0P2VuKHMuY29tcG9uZW50KTpzLmVsLG89cj8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbDppLHtpOmwscjpjfT1lLGg9dCYmdC5yLGE9bC5yZWZzPT09TD9sLnJlZnM9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t9OmwucmVmcyxwPWwuc2V0dXBTdGF0ZSxUPUQocCksQz1wPT09TD8oKT0+ITE6RicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PkgoVCxGKTtpZihoIT1udWxsJiZoIT09YyYmKEooaCk/KGFbaF09bnVsbCxDKGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSYmKHBbaF09bnVsbCkpOlEoaCkmJihoLnZhbHVlPW51bGwpKSxSKGMpKVR0KGMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsMTIsW28sYV0pO2Vsc2V7Y29uc3QgRj1KKGMpLEk9UShjKTtpZihGfHxJKXtjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3Qgej0oKT0+e2lmKGUuZil7Y29uc3Qgaj1GP0MoYyk/cFtjXTphW2NdOmMudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlO3I/RShqKSYmUm4oaixpKTpFKGopP2ouaW5jbHVkZXMoaSl8fGoucHVzaChpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6Rj8oYVtjXT1baV0sQyhjKSYmKHBbY109YVtjXSkpOihjLnZhbHVlPVtpXSxlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrJiYoYVtlLmtdPWMudmFsdWUpKX1lbHNlIEY/KGFbY109byxDKGMpJiYocFtjXT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbykpOkkmJihjLnZhbHVlPW8sZS5rJiYoYVtlLmtdPW8pKX07bz8oei5pZD0tMSxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoeixuKSk6eigpfX19R3QoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrO0d0KCkuY2FuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbElkbGVDYWxsYmFjaztjb25zdCBodD1lPT4hIWUudHlwZS5fX2FzeW5jTG9hZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncixpcj1lPT5lLnR5cGUuX19pc0tlZXBBbGl2ZTtmdW5jdGlvbiBEaShlLHQpe29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlLCJhIix0KX1mdW5jdGlvbiBIaShlLHQpe29yKGUsImRhIix0KX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IoZSx0LG49bmUpe2NvbnN0IHM9ZS5fX3dkY3x8KGUuX193ZGM9KCk9PntsZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHI9bjtmb3IoO3I7KXtpZihyLmlzRGVhY3RpdmF0ZWQpcmV0dXJuO3I9ci5wYXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250fXJldHVybiBlKCl9KTtpZihadCh0LHMsbiksbil7bGV0IHI9bi5wYXJlbnQ7ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcig7ciYmci5wYXJlbnQ7KWlyKHIucGFyZW50LnZub2RlKSYmTmkocyx0LG4sciknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHI9ci5wYXJlbnR9fWZ1bmN0aW9uIE5pKGUsdCxuLHMpe2NvbnN0IHI9WnQodCxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxzLCEwKTtscigoKT0+e1JuKHNbdF0scil9LG4pfWZ1bmN0aW9uIFp0KGUsdCxuPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZSxzPSExKXtpZihuKXtjb25zdCByPW5bZV18fChuW2VdPVtdKSxpPXQuX193ZWgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwodC5fX3dlaD0oLi4ubyk9PntqZSgpO2NvbnN0IGw9Q3QobiksYz1DZSh0LG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Usbyk7cmV0dXJuIGwoKSxMZSgpLGN9KTtyZXR1cm4gcz9yLnVuc2hpZnQoaSk6cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucHVzaChpKSxpfX1jb25zdCBQZT1lPT4odCxuPW5lKT0+eyghU3R8fGU9PT0ic3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIikmJlp0KGUsKC4uLnMpPT50KC4uLnMpLG4pfSxqaT1QZSgiYm0iKSxMaT1QZSgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20iKSwkaT1QZSgiYnUiKSxWaT1QZSgidSIpLFVpPVBlKCJidW0iKSxscj1QZSgidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtIiksS2k9UGUoInNwIiksQmk9UGUoInJ0ZyIpLFdpPVBlKCJydGMiKTtmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gcWkoZSx0PW5lKXtadCgiZWMiLGUsdCl9Y29uc3QgSmk9U3ltYm9sLmZvcigiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3YtbmRjIik7ZnVuY3Rpb24gR2koZSx0LG4scyl7bGV0IHI7Y29uc3QgaT1uLG89RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSk7aWYob3x8SihlKSl7Y29uc3QgbD1vJiZRZShlKTtsZXQgYz0hMTtsJiYoYz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIWFlKGUpLGU9enQoZSkpLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IobGV0IGg9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAsYT1lLmxlbmd0aDtoPGE7aCsrKXJbaF09dChjP1ooZVtoXSk6ZVtoXSxoLHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIDAsaSl9ZWxzZSBpZih0eXBlb2YgZT09Im51bWJlciIpe3I9bmV3IEFycmF5KGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtmb3IobGV0IGw9MDtsPGU7bCsrKXJbbF09dChsKzEsbCx2b2lkIDAsaSl9ZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaWYoSyhlKSlpZihlW1N5bWJvbC5pdGVyYXRvcl0pcj1BcnJheS5mcm9tKGUsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLGMpPT50KGwsYyx2b2lkIDAsaSkpO2Vsc2V7Y29uc3QgbD1PYmplY3Qua2V5cygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7cj1uZXcgQXJyYXkobC5sZW5ndGgpO2ZvcihsZXQgYz0wLGg9bC5sZW5ndGg7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2M8aDtjKyspe2NvbnN0IGE9bFtjXTtyW2NdPXQoZVthXSxhLGMsaSl9fWVsc2UgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9W107cmV0dXJuIHJ9Y29uc3Qgd249ZT0+ZT9ScihlKT9lbihlKTp3bihlLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQpOm51bGwscHQ9c2UoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDplPT5lLCRlbDplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0+ZS52bm9kZS5lbCwkZGF0YTplPT5lLmRhdGEsJHByb3BzOmU9PmUucHJvcHMsJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyczplPT5lLmF0dHJzLCRzbG90czplPT5lLnNsb3RzLCRyZWZzOmU9PmUucmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnMsJHBhcmVudDplPT53bihlLnBhcmVudCksJHJvb3Q6ZT0+d24oZS5yb290KSwkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hvc3Q6ZT0+ZS5jZSwkZW1pdDplPT5lLmVtaXQsJG9wdGlvbnM6ZT0+Y3IoZSksJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JjZVVwZGF0ZTplPT5lLmZ8fChlLmY9KCk9PntLbihlLnVwZGF0ZSl9KSwkbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHRUaWNrOmU9PmUubnx8KGUubj1FaS5iaW5kKGUucHJveHkpKSwkd2F0Y2g6ZT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19vLmJpbmQoZSl9KSxjbj0oZSx0KT0+ZSE9PUwmJiFlLl9faXNTY3JpcHRTZXR1cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJkgoZSx0KSxZaT17Z2V0KHtfOmV9LHQpe2lmKHQ9PT0iX192X3NraXAiKXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hMDtjb25zdHtjdHg6bixzZXR1cFN0YXRlOnMsZGF0YTpyLHByb3BzOmksYWNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzc0NhY2hlOm8sdHlwZTpsLGFwcENvbnRleHQ6Y309ZTtsZXQgaDtpZih0WzBdIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PSIkIil7Y29uc3QgQz1vW3RdO2lmKEMhPT12b2lkIDApc3dpdGNoKEMpe2Nhc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDE6cmV0dXJuIHNbdF07Y2FzZSAyOnJldHVybiByW3RdO2Nhc2UgNDpyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25bdF07Y2FzZSAzOnJldHVybiBpW3RdfWVsc2V7aWYoY24ocyx0KSlyZXR1cm4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbdF09MSxzW3RdO2lmKHIhPT1MJiZIKHIsdCkpcmV0dXJuIG9bdF09MixyW3RdO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZigoaD1lLnByb3BzT3B0aW9uc1swXSkmJkgoaCx0KSlyZXR1cm4gb1t0XT0zLGlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RdO2lmKG4hPT1MJiZIKG4sdCkpcmV0dXJuIG9bdF09NCxuW3RdO1RuJiYob1t0XScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9MCl9fWNvbnN0IGE9cHRbdF07bGV0IHAsVDtpZihhKXJldHVybiB0PT09IiRhdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnMiJiZYKGUuYXR0cnMsImdldCIsIiIpLGEoZSk7aWYoKHA9bC5fX2Nzc01vZHVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKSYmKHA9cFt0XSkpcmV0dXJuIHA7aWYobiE9PUwmJkgobix0KSlyZXR1cm4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbdF09NCxuW3RdO2lmKFQ9Yy5jb25maWcuZ2xvYmFsUHJvcGVydGllcyxIKFQsdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXJldHVybiBUW3RdfSxzZXQoe186ZX0sdCxuKXtjb25zdHtkYXRhOnMsc2V0dXBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGU6cixjdHg6aX09ZTtyZXR1cm4gY24ocix0KT8oclt0XT1uLCEwKTpzIT09TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJkgocyx0KT8oc1t0XT1uLCEwKTpIKGUucHJvcHMsdCl8fHRbMF09PT0iJCImJnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNsaWNlKDEpaW4gZT8hMTooaVt0XT1uLCEwKX0saGFzKHtfOntkYXRhOmUsc2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VwU3RhdGU6dCxhY2Nlc3NDYWNoZTpuLGN0eDpzLGFwcENvbnRleHQ6cixwcm9wcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25zOml9fSxvKXtsZXQgbDtyZXR1cm4hIW5bb118fGUhPT1MJiZIKGUsbyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHxjbih0LG8pfHwobD1pWzBdKSYmSChsLG8pfHxIKHMsbyl8fEgocHQsbyl8fEgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsbyl9LGRlZmluZVByb3BlcnR5KGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbil7cmV0dXJuIG4uZ2V0IT1udWxsP2UuXy5hY2Nlc3NDYWNoZVt0XT0wOkgobiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInZhbHVlIikmJnRoaXMuc2V0KGUsdCxuLnZhbHVlLG51bGwpLFJlZmxlY3QuZGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZVByb3BlcnR5KGUsdCxuKX19O2Z1bmN0aW9uIG5zKGUpe3JldHVybiBFKGUpPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLnJlZHVjZSgodCxuKT0+KHRbbl09bnVsbCx0KSx7fSk6ZX1sZXQgVG49ITA7ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHppKGUpe2NvbnN0IHQ9Y3IoZSksbj1lLnByb3h5LHM9ZS5jdHg7VG49JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyExLHQuYmVmb3JlQ3JlYXRlJiZzcyh0LmJlZm9yZUNyZWF0ZSxlLCJiYyIpO2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHtkYXRhOnIsY29tcHV0ZWQ6aSxtZXRob2RzOm8sd2F0Y2g6bCxwcm92aWRlOmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGluamVjdDpoLGNyZWF0ZWQ6YSxiZWZvcmVNb3VudDpwLG1vdW50ZWQ6VCxiZWZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlVXBkYXRlOkMsdXBkYXRlZDpGLGFjdGl2YXRlZDpJLGRlYWN0aXZhdGVkOnosYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZm9yZURlc3Ryb3k6aixiZWZvcmVVbm1vdW50OlcsZGVzdHJveWVkOnEsdW5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlZDpBLHJlbmRlcjpHLHJlbmRlclRyYWNrZWQ6UmUscmVuZGVyVHJpZ2dlcmVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpoZSxlcnJvckNhcHR1cmVkOk1lLHNlcnZlclByZWZldGNoOnZ0LGV4cG9zZTokZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaW5oZXJpdEF0dHJzOm50LGNvbXBvbmVudHM6T3QsZGlyZWN0aXZlczpFdCxmaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyczp0bn09dDtpZihoJiZYaShoLHMsbnVsbCksbylmb3IoY29uc3QgQiBpbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7Y29uc3QgJD1vW0JdO1IoJCkmJihzW0JdPSQuYmluZChuKSl9aWYocil7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IEI9ci5jYWxsKG4sbik7SyhCKSYmKGUuZGF0YT0kbihCKSl9aWYoVG49ITAsaSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKGNvbnN0IEIgaW4gaSl7Y29uc3QgJD1pW0JdLFZlPVIoJCk/JC5iaW5kKG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOlIoJC5nZXQpPyQuZ2V0LmJpbmQobixuKTp3ZSxBdD0hUigkKSYmUigkLnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpPyQuc2V0LmJpbmQobik6d2UsVWU9am8oe2dldDpWZSxzZXQ6QXR9KTtPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlZmluZVByb3BlcnR5KHMsQix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEwLGdldDooKT0+VWUudmFsdWUsc2V0OnBlPT5VZS52YWx1ZT1wZX0pfWlmKGwpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcihjb25zdCBCIGluIGwpZnIobFtCXSxzLG4sQik7aWYoYyl7Y29uc3QgQj1SKGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT9jLmNhbGwobik6YztSZWZsZWN0Lm93bktleXMoQikuZm9yRWFjaCgkPT57bm8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyQsQlskXSl9KX1hJiZzcyhhLGUsImMiKTtmdW5jdGlvbiBrKEIsJCl7RSgkKT8kLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKFZlPT5CKFZlLmJpbmQobikpKTokJiZCKCQuYmluZChuKSl9aWYoaygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamkscCksayhMaSxUKSxrKCRpLEMpLGsoVmksRiksayhEaSxJKSxrKEhpLHopLGsoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3FpLE1lKSxrKFdpLFJlKSxrKEJpLGhlKSxrKFVpLFcpLGsobHIsQSksayhLaSx2dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEUoJGUpKWlmKCRlLmxlbmd0aCl7Y29uc3QgQj1lLmV4cG9zZWR8fChlLmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VkPXt9KTskZS5mb3JFYWNoKCQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx7Z2V0OigpPT5uWyRdLHNldDpWZT0+blskXT1WZX0pfSl9ZWxzZSBlLmV4cG9zZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkfHwoZS5leHBvc2VkPXt9KTtHJiZlLnJlbmRlcj09PXdlJiYoZS5yZW5kZXI9RyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG50IT1udWxsJiYoZS5pbmhlcml0QXR0cnM9bnQpLE90JiYoZS5jb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1PdCksRXQmJihlLmRpcmVjdGl2ZXM9RXQpLHZ0JiZycihlKX1mdW5jdGlvbiBYaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSx0LG49d2Upe0UoZSkmJihlPUNuKGUpKTtmb3IoY29uc3QgcyBpbiBlKXtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgcj1lW3NdO2xldCBpO0socik/ImRlZmF1bHQiaW4gcj9pPUR0KHIuZnJvbXx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Msci5kZWZhdWx0LCEwKTppPUR0KHIuZnJvbXx8cyk6aT1EdChyKSxRKGkpP09iaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuZGVmaW5lUHJvcGVydHkodCxzLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGU6ITAsZ2V0OigpPT5pLnZhbHVlLHNldDpvPT5pLnZhbHVlPW99KTp0W3NdPWl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiBzcyhlLHQsbil7Q2UoRShlKT9lLm1hcChzPT5zLmJpbmQodC5wcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveHkpKTplLmJpbmQodC5wcm94eSksdCxuKX1mdW5jdGlvbiBmcihlLHQsbixzKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IHI9cy5pbmNsdWRlcygiLiIpP1RyKG4scyk6KCk9Pm5bc107aWYoSihlKSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGk9dFtlXTtSKGkpJiZhbihyLGkpfWVsc2UgaWYoUihlKSlhbihyLGUuYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmQobikpO2Vsc2UgaWYoSyhlKSlpZihFKGUpKWUuZm9yRWFjaChpPT5mcihpLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scykpO2Vsc2V7Y29uc3QgaT1SKGUuaGFuZGxlcik/ZS5oYW5kbGVyLmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOnRbZS5oYW5kbGVyXTtSKGkpJiZhbihyLGksZSl9fWZ1bmN0aW9uIGNyKGUpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB0PWUudHlwZSx7bWl4aW5zOm4sZXh0ZW5kczpzfT10LHttaXhpbnM6ciwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uc0NhY2hlOmksY29uZmlnOntvcHRpb25NZXJnZVN0cmF0ZWdpZXM6b319JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1lLmFwcENvbnRleHQsbD1pLmdldCh0KTtsZXQgYztyZXR1cm4gbD9jPWw6IXIubCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmd0aCYmIW4mJiFzP2M9dDooYz17fSxyLmxlbmd0aCYmci5mb3JFYWNoKGg9PksnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChjLGgsbywhMCkpLEt0KGMsdCxvKSksSyh0KSYmaS5zZXQodCxjKSxjfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBLdChlLHQsbixzPSExKXtjb25zdHttaXhpbnM6cixleHRlbmRzOml9PXQ7aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJkt0KGUsaSxuLCEwKSxyJiZyLmZvckVhY2gobz0+S3QoZSxvLG4sITApKTtmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNvbnN0IG8gaW4gdClpZighKHMmJm89PT0iZXhwb3NlIikpe2NvbnN0IGw9WmlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29dfHxuJiZuW29dO2Vbb109bD9sKGVbb10sdFtvXSk6dFtvXX1yZXR1cm4gZX1jbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgWmk9e2RhdGE6cnMscHJvcHM6aXMsZW1pdHM6aXMsbWV0aG9kczpjdCxjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHV0ZWQ6Y3QsYmVmb3JlQ3JlYXRlOmVlLGNyZWF0ZWQ6ZWUsYmVmb3JlTW91bnQ6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlLG1vdW50ZWQ6ZWUsYmVmb3JlVXBkYXRlOmVlLHVwZGF0ZWQ6ZWUsYmVmb3JlRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3k6ZWUsYmVmb3JlVW5tb3VudDplZSxkZXN0cm95ZWQ6ZWUsdW5tb3VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDplZSxhY3RpdmF0ZWQ6ZWUsZGVhY3RpdmF0ZWQ6ZWUsZXJyb3JDYXB0dXJlZDplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Usc2VydmVyUHJlZmV0Y2g6ZWUsY29tcG9uZW50czpjdCxkaXJlY3RpdmVzOmN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3YXRjaDpraSxwcm92aWRlOnJzLGluamVjdDpRaX07ZnVuY3Rpb24gcnMoZSx0KXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHQ/ZT9mdW5jdGlvbigpe3JldHVybiBzZShSKGUpP2UuY2FsbCh0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0aGlzKTplLFIodCk/dC5jYWxsKHRoaXMsdGhpcyk6dCl9OnQ6ZX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUWkoZSx0KXtyZXR1cm4gY3QoQ24oZSksQ24odCkpfWZ1bmN0aW9uIENuKGUpe2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihFKGUpKXtjb25zdCB0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vbbl1dPWVbbl07cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gZWUoZSx0KXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGUsdCkpXTp0fWZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlLHQpe3JldHVybiBlP3NlKE9iamVjdC5jcmVhdGUobnVsbCksZSx0KTp0fWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBpcyhlLHQpe3JldHVybiBlP0UoZSkmJkUodCk/Wy4uLm5ldyBTZXQoWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi5lLC4uLnRdKV06c2UoT2JqZWN0LmNyZWF0ZShudWxsKSxucyhlKSxucyh0Pz8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne30pKTp0fWZ1bmN0aW9uIGtpKGUsdCl7aWYoIWUpcmV0dXJuIHQ7aWYoIXQpcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBlO2NvbnN0IG49c2UoT2JqZWN0LmNyZWF0ZShudWxsKSxlKTtmb3IoY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHMgaW4gdCluW3NdPWVlKGVbc10sdFtzXSk7cmV0dXJuIG59ZnVuY3Rpb24gdXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6anIscGVyZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Zlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXcgV2Vha01hcH19bGV0IGVvPTA7ZnVuY3Rpb24gdG8oZSx0KXtyZXR1cm4gZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKHMscj1udWxsKXtSKHMpfHwocz1zZSh7fSxzKSksciE9bnVsbCYmIUsocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpJiYocj1udWxsKTtjb25zdCBpPXVyKCksbz1uZXcgV2Vha1NldCxsPVtdO2xldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYz0hMTtjb25zdCBoPWkuYXBwPXtfdWlkOmVvKyssX2NvbXBvbmVudDpzLF9wcm9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6cixfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6aSxfaW5zdGFuY2U6bnVsbCx2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2lvbjpMbyxnZXQgY29uZmlnKCl7cmV0dXJuIGkuY29uZmlnfSxzZXQgY29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyhhKXt9LHVzZShhLC4uLnApe3JldHVybiBvLmhhcyhhKXx8KGEmJlIoYS5pbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbCk/KG8uYWRkKGEpLGEuaW5zdGFsbChoLC4uLnApKTpSKGEpJiYoby5hZGQoYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGEoaCwuLi5wKSkpLGh9LG1peGluKGEpe3JldHVybiBpLm1peGlucy5pbmNsdWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMoYSl8fGkubWl4aW5zLnB1c2goYSksaH0sY29tcG9uZW50KGEscCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwPyhpLmNvbXBvbmVudHNbYV09cCxoKTppLmNvbXBvbmVudHNbYV19LGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUoYSxwKXtyZXR1cm4gcD8oaS5kaXJlY3RpdmVzW2FdPXAsaCk6aS5kaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlc1thXX0sbW91bnQoYSxwLFQpe2lmKCFjKXtjb25zdCBDPWguX2NlVk5vZGV8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3xIZShzLHIpO3JldHVybiBDLmFwcENvbnRleHQ9aSxUPT09ITA/VD0ic3ZnIjpUPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PSExJiYoVD12b2lkIDApLGUoQyxhLFQpLGM9ITAsaC5fY29udGFpbmVyPWEsYS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX192dWVfYXBwX189aCxlbihDLmNvbXBvbmVudCl9fSxvblVubW91bnQoYSl7bC5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaChhKX0sdW5tb3VudCgpe2MmJihDZShsLGguX2luc3RhbmNlLDE2KSxlKG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLGguX2NvbnRhaW5lciksZGVsZXRlIGguX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxwcm92aWRlKGEscCl7cmV0dXJuIGkucHJvdmlkZXNbYV09cCxofSxydW5XaXRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRleHQoYSl7Y29uc3QgcD1ldDtldD1oO3RyeXtyZXR1cm4gYSgpfWZpbmFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5e2V0PXB9fX07cmV0dXJuIGh9fWxldCBldD1udWxsO2Z1bmN0aW9uIG5vKGUsdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKG5lKXtsZXQgbj1uZS5wcm92aWRlcztjb25zdCBzPW5lLnBhcmVudCYmbmUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmVudC5wcm92aWRlcztzPT09biYmKG49bmUucHJvdmlkZXM9T2JqZWN0LmNyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUocykpLG5bZV09dH19ZnVuY3Rpb24gRHQoZSx0LG49ITEpe2NvbnN0IHM9bmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHx1ZTtpZihzfHxldCl7Y29uc3Qgcj1ldD9ldC5fY29udGV4dC5wcm92aWRlczpzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9zLnBhcmVudD09bnVsbD9zLnZub2RlLmFwcENvbnRleHQmJnMudm5vZGUuYXBwQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRleHQucHJvdmlkZXM6cy5wYXJlbnQucHJvdmlkZXM6dm9pZCAwO2lmKHImJmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluIHIpcmV0dXJuIHJbZV07aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmUih0KT90LmNhbGwocyYmcy5wcm94eSk6dH19Y29uc3QgYXI9e30sZHI9KCk9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPYmplY3QuY3JlYXRlKGFyKSxocj1lPT5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT09YXI7ZnVuY3Rpb24gc28oZSx0LG4scz0hMSl7Y29uc3Qgcj17fSxpPWRyKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLHByKGUsdCxyLGkpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IoY29uc3QgbyBpbiBlLnByb3BzT3B0aW9uc1swXSlvIGluIHJ8fChyW29dPXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIDApO24/ZS5wcm9wcz1zP3I6X2kocik6ZS50eXBlLnByb3BzP2UucHJvcHM9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I6ZS5wcm9wcz1pLGUuYXR0cnM9aX1mdW5jdGlvbiBybyhlLHQsbixzKXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7cHJvcHM6cixhdHRyczppLHZub2RlOntwYXRjaEZsYWc6b319PWUsbD1EKHIpLFsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY109ZS5wcm9wc09wdGlvbnM7bGV0IGg9ITE7aWYoKHN8fG8+MCkmJiEobyYxNikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tpZihvJjgpe2NvbnN0IGE9ZS52bm9kZS5keW5hbWljUHJvcHM7Zm9yKGxldCBwPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwO3A8YS5sZW5ndGg7cCsrKXtsZXQgVD1hW3BdO2lmKFF0KGUuZW1pdHNPcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyxUKSljb250aW51ZTtjb25zdCBDPXRbVF07aWYoYylpZihIKGksVCkpQyE9PWlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RdJiYoaVtUXT1DLGg9ITApO2Vsc2V7Y29uc3QgRj1OZShUKTtyW0ZdPXZuKGMsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRixDLGUsITEpfWVsc2UgQyE9PWlbVF0mJihpW1RdPUMsaD0hMCl9fX1lbHNle3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncihlLHQscixpKSYmKGg9ITApO2xldCBhO2Zvcihjb25zdCBwIGluIGwpKCF0fHwhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0godCxwKSYmKChhPUdlKHApKT09PXB8fCFIKHQsYSkpKSYmKGM/biYmKG5bcF0hPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9dm9pZCAwfHxuW2FdIT09dm9pZCAwKSYmKHJbcF09dm4oYyxsLHAsdm9pZCAwLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCEwKSk6ZGVsZXRlIHJbcF0pO2lmKGkhPT1sKWZvcihjb25zdCBwIGluIGkpKCF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IUgodCxwKSkmJihkZWxldGUgaVtwXSxoPSEwKX1oJiZFZShlLmF0dHJzLCJzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiIil9ZnVuY3Rpb24gcHIoZSx0LG4scyl7Y29uc3RbcixpXT1lLnByb3BzT3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnM7bGV0IG89ITEsbDtpZih0KWZvcihsZXQgYyBpbiB0KXtpZih1dChjKSljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29udGludWU7Y29uc3QgaD10W2NdO2xldCBhO3ImJkgocixhPU5lKGMpKT8haXx8IScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpLmluY2x1ZGVzKGEpP25bYV09aDoobHx8KGw9e30pKVthXT1oOlF0KGUuZW1pdHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9ucyxjKXx8KCEoYyBpbiBzKXx8aCE9PXNbY10pJiYoc1tjXT1oLG89ITApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31pZihpKXtjb25zdCBjPUQobiksaD1sfHxMO2ZvcihsZXQgYT0wO2E8aS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoO2ErKyl7Y29uc3QgcD1pW2FdO25bcF09dm4ocixjLHAsaFtwXSxlLCFIKGgscCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX19cmV0dXJuIG99ZnVuY3Rpb24gdm4oZSx0LG4scyxyLGkpe2NvbnN0IG89ZVtuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ107aWYobyE9bnVsbCl7Y29uc3QgbD1IKG8sImRlZmF1bHQiKTtpZihsJiZzPT09dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQgMCl7Y29uc3QgYz1vLmRlZmF1bHQ7aWYoby50eXBlIT09RnVuY3Rpb24mJiEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby5za2lwRmFjdG9yeSYmUihjKSl7Y29uc3R7cHJvcHNEZWZhdWx0czpofT1yO2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuIGluIGgpcz1oW25dO2Vsc2V7Y29uc3QgYT1DdChyKTtzPWhbbl09Yy5jYWxsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLHQpLGEoKX19ZWxzZSBzPWM7ci5jZSYmci5jZS5fc2V0UHJvcChuLHMpfW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWzBdJiYoaSYmIWw/cz0hMTpvWzFdJiYocz09PSIifHxzPT09R2UobikpJiYocz0hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzApKX1yZXR1cm4gc31jb25zdCBpbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBncihlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LG49ITEpe2NvbnN0IHM9bj9pbzp0LnByb3BzQ2FjaGUscj1zLmdldChlKTtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncilyZXR1cm4gcjtjb25zdCBpPWUucHJvcHMsbz17fSxsPVtdO2xldCBjPSExO2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyghUihlKSl7Y29uc3QgYT1wPT57Yz0hMDtjb25zdFtULENdPWdyKHAsdCwhMCk7cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKG8sVCksQyYmbC5wdXNoKC4uLkMpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0Lm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXhpbnMuZm9yRWFjaChhKSxlLmV4dGVuZHMmJmEoZS5leHRlbmRzKSxlLm1peGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MmJmUubWl4aW5zLmZvckVhY2goYSl9aWYoIWkmJiFjKXJldHVybiBLKGUpJiZzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQoZSxYZSksWGU7aWYoRShpKSlmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IHA9TmUoaVthXSk7b3MocCkmJihvW3BdPUwpfWVsc2UgaWYoaSlmb3IoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGEgaW4gaSl7Y29uc3QgcD1OZShhKTtpZihvcyhwKSl7Y29uc3QgVD1pWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhXSxDPW9bcF09RShUKXx8UihUKT97dHlwZTpUfTpzZSh7fSxUKSxGPUMudHlwZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IEk9ITEsej0hMDtpZihFKEYpKWZvcihsZXQgaj0wO2o8Ri5sZW5ndGg7KytqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7Y29uc3QgVz1GW2pdLHE9UihXKSYmVy5uYW1lO2lmKHE9PT0iQm9vbGVhbiIpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJPSEwO2JyZWFrfWVsc2UgcT09PSJTdHJpbmciJiYoej0hMSl9ZWxzZSBJPVIoRiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiZGLm5hbWU9PT0iQm9vbGVhbiI7Q1swXT1JLENbMV09eiwoSXx8SChDLCJkZWZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdCIpKSYmbC5wdXNoKHApfX1jb25zdCBoPVtvLGxdO3JldHVybiBLKGUpJiZzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQoZSxoKSxofWZ1bmN0aW9uIG9zKGUpe3JldHVybiBlWzBdIT09IiQiJiYhdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpfWNvbnN0IF9yPWU9PmVbMF09PT0iXyJ8fGU9PT0iJHN0YWJsZSIsV249ZT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UoZSk/ZS5tYXAoU2UpOltTZShlKV0sb289KGUsdCxuKT0+e2lmKHQuX24pcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0O2NvbnN0IHM9UmkoKC4uLnIpPT5Xbih0KC4uLnIpKSxuKTtyZXR1cm4gcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX2M9ITEsc30sbXI9KGUsdCxuKT0+e2NvbnN0IHM9ZS5fY3R4O2Zvcihjb25zdCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiBlKXtpZihfcihyKSljb250aW51ZTtjb25zdCBpPWVbcl07aWYoUihpKSl0WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXT1vbyhyLGkscyk7ZWxzZSBpZihpIT1udWxsKXtjb25zdCBvPVduKGkpO3Rbcl0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSgpPT5vfX19LGJyPShlLHQpPT57Y29uc3Qgbj1Xbih0KTtlLnNsb3RzLmRlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x0PSgpPT5ufSx5cj0oZSx0LG4pPT57Zm9yKGNvbnN0IHMgaW4gdCkobnx8cyE9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciXyIpJiYoZVtzXT10W3NdKX0sbG89KGUsdCxuKT0+e2NvbnN0IHM9ZS5zbG90cz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHIoKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7Y29uc3Qgcj10Ll87cj8oeXIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsdCxuKSxuJiZNcyhzLCJfIixyLCEwKSk6bXIodCxzKX1lbHNlIHQmJmJyKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxmbz0oZSx0LG4pPT57Y29uc3R7dm5vZGU6cyxzbG90czpyfT1lO2xldCBpPSEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCxvPUw7aWYocy5zaGFwZUZsYWcmMzIpe2NvbnN0IGw9dC5fO2w/biYmbD09PTE/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9ITE6eXIocix0LG4pOihpPSF0LiRzdGFibGUsbXIodCxyKSksbz10fWVsc2UgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihicihlLHQpLG89e2RlZmF1bHQ6MX0pO2lmKGkpZm9yKGNvbnN0IGwgaW4gciknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIV9yKGwpJiZvW2xdPT1udWxsJiZkZWxldGUgcltsXX0sbGU9VG87ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvKGUpe3JldHVybiB1byhlKX1mdW5jdGlvbiB1byhlLHQpe2NvbnN0IG49R3QoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bi5fX1ZVRV9fPSEwO2NvbnN0e2luc2VydDpzLHJlbW92ZTpyLHBhdGNoUHJvcDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSxjcmVhdGVFbGVtZW50Om8sY3JlYXRlVGV4dDpsLGNyZWF0ZUNvbW1lbnQ6YyxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0VGV4dDpoLHNldEVsZW1lbnRUZXh0OmEscGFyZW50Tm9kZTpwLG5leHRTaWJsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZzpULHNldFNjb3BlSWQ6Qz13ZSxpbnNlcnRTdGF0aWNDb250ZW50OkZ9PWUsST0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGYsdSxkLG09bnVsbCxnPW51bGwsXz1udWxsLFM9dm9pZCAwLHg9bnVsbCx5PSEhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3UuZHluYW1pY0NoaWxkcmVuKT0+e2lmKGY9PT11KXJldHVybjtmJiYhbHQoZix1KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihtPVB0KGYpLHBlKGYsZyxfLCEwKSxmPW51bGwpLHUucGF0Y2hGbGFnPT09LTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYoeT0hMSx1LmR5bmFtaWNDaGlsZHJlbj1udWxsKTtjb25zdHt0eXBlOmIscmVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpPLHNoYXBlRmxhZzp3fT11O3N3aXRjaChiKXtjYXNlIGt0OnooZix1LGQsbSk7YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFrO2Nhc2UgeXQ6aihmLHUsZCxtKTticmVhaztjYXNlIGRuOmY9PW51bGwmJlcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHUsZCxtLFMpO2JyZWFrO2Nhc2UgeGU6T3QoZix1LGQsbSxnLF8sUyx4LHkpO2JyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhaztkZWZhdWx0OncmMT9HKGYsdSxkLG0sZyxfLFMseCx5KTp3JjY/RXQoZix1LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLG0sZyxfLFMseCx5KToodyY2NHx8dyYxMjgpJiZiLnByb2Nlc3MoZix1LGQsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyxfLFMseCx5LHJ0KX1PIT1udWxsJiZnJiZVdChPLGYmJmYucmVmLF8sdXx8ZiwhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3UpfSx6PShmLHUsZCxtKT0+e2lmKGY9PW51bGwpcyh1LmVsPWwodS5jaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGQsbSk7ZWxzZXtjb25zdCBnPXUuZWw9Zi5lbDt1LmNoaWxkcmVuIT09Zi5jaGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGRyZW4mJmgoZyx1LmNoaWxkcmVuKX19LGo9KGYsdSxkLG0pPT57Zj09bnVsbD9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LmVsPWModS5jaGlsZHJlbnx8IiIpLGQsbSk6dS5lbD1mLmVsfSxXPShmLHUsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbSk9PntbZi5lbCxmLmFuY2hvcl09RihmLmNoaWxkcmVuLHUsZCxtLGYuZWwsZi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jaG9yKX0scT0oe2VsOmYsYW5jaG9yOnV9LGQsbSk9PntsZXQgZztmb3IoO2YmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZmIT09dTspZz1UKGYpLHMoZixkLG0pLGY9ZztzKHUsZCxtKX0sQT0oe2VsOmYsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY2hvcjp1fSk9PntsZXQgZDtmb3IoO2YmJmYhPT11OylkPVQoZikscihmKSxmPWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3IodSl9LEc9KGYsdSxkLG0sZyxfLFMseCx5KT0+e3UudHlwZT09PSJzdmciP1M9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzdmciOnUudHlwZT09PSJtYXRoIiYmKFM9Im1hdGhtbCIpLGY9PW51bGw/UmUodScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZCxtLGcsXyxTLHgseSk6dnQoZix1LGcsXyxTLHgseSl9LFJlPShmLHUsZCxtLGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLF8sUyx4KT0+e2xldCB5LGI7Y29uc3R7cHJvcHM6TyxzaGFwZUZsYWc6dyx0cmFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbjp2LGRpcnM6UH09ZjtpZih5PWYuZWw9byhmLnR5cGUsXyxPJiZPLmlzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPKSx3Jjg/YSh5LGYuY2hpbGRyZW4pOncmMTYmJk1lKGYuY2hpbGRyZW4seSxudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxtLGcsdW4oZixfKSxTLHgpLFAmJktlKGYsbnVsbCxtLCJjcmVhdGVkIiksaGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ksZixmLnNjb3BlSWQsUyxtKSxPKXtmb3IoY29uc3QgViBpbiBPKVYhPT0idmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIiYmIXV0KFYpJiZpKHksVixudWxsLE9bVl0sXyxtKTsidmFsdWUiaW4gTyYmaSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSwidmFsdWUiLG51bGwsTy52YWx1ZSxfKSwoYj1PLm9uVm5vZGVCZWZvcmVNb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpJiZiZShiLG0sZil9UCYmS2UoZixudWxsLG0sImJlZm9yZU1vdW50Iik7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IE09YW8oZyx2KTtNJiZ2LmJlZm9yZUVudGVyKHkpLHMoeSx1LGQpLCgoYj1PJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTy5vblZub2RlTW91bnRlZCl8fE18fFApJiZsZSgoKT0+e2ImJmJlKGIsbSxmKSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmdi5lbnRlcih5KSxQJiZLZShmLG51bGwsbSwibW91bnRlZCIpfSxnKX0saGU9KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmLHUsZCxtLGcpPT57aWYoZCYmQyhmLGQpLG0pZm9yKGxldCBfPTA7XzxtLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7XysrKUMoZixtW19dKTtpZihnKXtsZXQgXz1nLnN1YlRyZWU7aWYodT09PV98JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x2cihfLnR5cGUpJiYoXy5zc0NvbnRlbnQ9PT11fHxfLnNzRmFsbGJhY2s9PT11KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe2NvbnN0IFM9Zy52bm9kZTtoZShmLFMsUy5zY29wZUlkLFMuc2xvdFNjb3BlSWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyxnLnBhcmVudCl9fX0sTWU9KGYsdSxkLG0sZyxfLFMseCx5PTApPT57Zm9yKGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgYj15O2I8Zi5sZW5ndGg7YisrKXtjb25zdCBPPWZbYl09eD9GZShmW2JdKTpTZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZltiXSk7SShudWxsLE8sdSxkLG0sZyxfLFMseCl9fSx2dD0oZix1LGQsbSxnLF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFMpPT57Y29uc3QgeD11LmVsPWYuZWw7bGV0e3BhdGNoRmxhZzp5LGR5bmFtaWNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW46YixkaXJzOk99PXU7eXw9Zi5wYXRjaEZsYWcmMTY7Y29uc3Qgdz1mLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wc3x8TCx2PXUucHJvcHN8fEw7bGV0IFA7aWYoZCYmQmUoZCwhMSksKFA9di4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25Wbm9kZUJlZm9yZVVwZGF0ZSkmJmJlKFAsZCx1LGYpLE8mJktlKHUsZixkLCJiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vmb3JlVXBkYXRlIiksZCYmQmUoZCwhMCksKHcuaW5uZXJIVE1MJiZ2LmlubmVySCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTUw9PW51bGx8fHcudGV4dENvbnRlbnQmJnYudGV4dENvbnRlbnQ9PW51bGwpJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSh4LCIiKSxiPyRlKGYuZHluYW1pY0NoaWxkcmVuLGIseCxkLG0sdW4odSxnKSxfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6U3x8JChmLHUseCxudWxsLGQsbSx1bih1LGcpLF8sITEpLHk+MCl7aWYoeSYxNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpbnQoeCx3LHYsZCxnKTtlbHNlIGlmKHkmMiYmdy5jbGFzcyE9PXYuY2xhc3MmJmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHgsImNsYXNzIixudWxsLHYuY2xhc3MsZykseSY0JiZpKHgsInN0eWxlIix3LnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSx2LnN0eWxlLGcpLHkmOCl7Y29uc3QgTT11LmR5bmFtaWNQcm9wcztmb3IobCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldCBWPTA7VjxNLmxlbmd0aDtWKyspe2NvbnN0IE49TVtWXSxpZT13W05dLHJlPXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW05dOyhyZSE9PWllfHxOPT09InZhbHVlIikmJmkoeCxOLGllLHJlLGcsZCl9fXkmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzEmJmYuY2hpbGRyZW4hPT11LmNoaWxkcmVuJiZhKHgsdS5jaGlsZHJlbil9ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichUyYmYj09bnVsbCYmbnQoeCx3LHYsZCxnKTsoKFA9di5vblZub2RlVXBkYXRlZCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHxPKSYmbGUoKCk9PntQJiZiZShQLGQsdSxmKSxPJiZLZSh1LGYsZCwidXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QiKX0sbSl9LCRlPShmLHUsZCxtLGcsXyxTKT0+e2ZvcihsZXQgeD0wO3g8dS5sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ3RoO3grKyl7Y29uc3QgeT1mW3hdLGI9dVt4XSxPPXkuZWwmJih5LnR5cGU9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGV8fCFsdCh5LGIpfHx5LnNoYXBlRmxhZyY3MCk/cCh5LmVsKTpkO0koeSxiLE8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsbSxnLF8sUywhMCl9fSxudD0oZix1LGQsbSxnKT0+e2lmKHUhPT1kKXtpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodSE9PUwpZm9yKGNvbnN0IF8gaW4gdSkhdXQoXykmJiEoXyBpbiBkKSYmaShmLF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHVbX10sbnVsbCxnLG0pO2Zvcihjb25zdCBfIGluIGQpe2lmKHV0KF8pKWNvbnRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251ZTtjb25zdCBTPWRbX10seD11W19dO1MhPT14JiZfIT09InZhbHVlIiYmaShmLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfLHgsUyxnLG0pfSJ2YWx1ZSJpbiBkJiZpKGYsInZhbHVlIix1LnZhbHVlLGQudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlLGcpfX0sT3Q9KGYsdSxkLG0sZyxfLFMseCx5KT0+e2NvbnN0IGI9dS5lbD1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9mLmVsOmwoIiIpLE89dS5hbmNob3I9Zj9mLmFuY2hvcjpsKCIiKTtsZXR7cGF0YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoRmxhZzp3LGR5bmFtaWNDaGlsZHJlbjp2LHNsb3RTY29wZUlkczpQfT11O1AmJignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneD14P3guY29uY2F0KFApOlApLGY9PW51bGw/KHMoYixkLG0pLHMoTyxkLG0pLE1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LmNoaWxkcmVufHxbXSxkLE8sZyxfLFMseCx5KSk6dz4wJiZ3JjY0JiZ2JiZmLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkeW5hbWljQ2hpbGRyZW4/KCRlKGYuZHluYW1pY0NoaWxkcmVuLHYsZCxnLF8sUywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCksKHUua2V5IT1udWxsfHxnJiZ1PT09Zy5zdWJUcmVlKSYmeHIoZix1LCEwKSk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyQoZix1LGQsTyxnLF8sUyx4LHkpfSxFdD0oZix1LGQsbSxnLF8sUyx4LHkpPT57dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xvdFNjb3BlSWRzPXgsZj09bnVsbD91LnNoYXBlRmxhZyY1MTI/Zy5jdHguYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2YXRlKHUsZCxtLFMseSk6dG4odSxkLG0sZyxfLFMseSk6Sm4oZix1LHkpfSx0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249KGYsdSxkLG0sZyxfLFMpPT57Y29uc3QgeD1mLmNvbXBvbmVudD1NbyhmLG0sZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO2lmKGlyKGYpJiYoeC5jdHgucmVuZGVyZXI9cnQpLElvKHgsITEsUykseC5hc3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNEZXApe2lmKGcmJmcucmVnaXN0ZXJEZXAoeCxrLFMpLCFmLmVsKXtjb25zdCB5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz14LnN1YlRyZWU9SGUoeXQpO2oobnVsbCx5LHUsZCl9fWVsc2Ugayh4LGYsdSxkLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLF8sUyl9LEpuPShmLHUsZCk9Pntjb25zdCBtPXUuY29tcG9uZW50PWYuY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudDtpZihTbyhmLHUsZCkpaWYobS5hc3luY0RlcCYmIW0uYXN5bmNSZXNvbHZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qpe0IobSx1LGQpO3JldHVybn1lbHNlIG0ubmV4dD11LG0udXBkYXRlKCk7ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdS5lbD1mLmVsLG0udm5vZGU9dX0saz0oZix1LGQsbSxnLF8sUyk9Pntjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneD0oKT0+e2lmKGYuaXNNb3VudGVkKXtsZXR7bmV4dDp3LGJ1OnYsdTpQLHBhcmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6TSx2bm9kZTpWfT1mO3tjb25zdCBfZT1TcihmKTtpZihfZSl7dyYmKHcuZWw9VicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZWwsQihmLHcsUykpLF9lLmFzeW5jRGVwLnRoZW4oKCk9PntmLmlzVW5tb3VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHx8eCgpfSk7cmV0dXJufX1sZXQgTj13LGllO0JlKGYsITEpLHc/KHcuZWw9Vi5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsQihmLHcsUykpOnc9Vix2JiZGdCh2KSwoaWU9dy5wcm9wcyYmdy5wcm9wcy5vbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWbm9kZUJlZm9yZVVwZGF0ZSkmJmJlKGllLE0sdyxWKSxCZShmLCEwKTtjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmU9ZnMoZiksZ2U9Zi5zdWJUcmVlO2Yuc3ViVHJlZT1yZSxJKGdlLHJlLHAoZ2UuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKSxQdChnZSksZixnLF8pLHcuZWw9cmUuZWwsTj09PW51bGwmJndvKGYscmUuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxQJiZsZShQLGcpLChpZT13LnByb3BzJiZ3LnByb3BzLm9uVm5vZGVVcGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCkmJmxlKCgpPT5iZShpZSxNLHcsViksZyl9ZWxzZXtsZXQgdztjb25zdHtlbDp2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxwcm9wczpQfT11LHtibTpNLG06VixwYXJlbnQ6Tixyb290OmllLHR5cGU6cmV9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmLGdlPWh0KHUpO0JlKGYsITEpLE0mJkZ0KE0pLCFnZSYmKHc9UCYmUC5vblZub2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUJlZm9yZU1vdW50KSYmYmUodyxOLHUpLEJlKGYsITApO3tpZS5jZSYmaWUuY2UuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19pbmplY3RDaGlsZFN0eWxlKHJlKTtjb25zdCBfZT1mLnN1YlRyZWU9ZnMoZik7SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobnVsbCxfZSxkLG0sZixnLF8pLHUuZWw9X2UuZWx9aWYoViYmbGUoVixnKSwhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYodz1QJiZQLm9uVm5vZGVNb3VudGVkKSl7Y29uc3QgX2U9dTtsZSgoKT0+YmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3csTixfZSksZyl9KHUuc2hhcGVGbGFnJjI1Nnx8TiYmaHQoTi52bm9kZSkmJk4udicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub2RlLnNoYXBlRmxhZyYyNTYpJiZmLmEmJmxlKGYuYSxnKSxmLmlzTW91bnRlZD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInITAsdT1kPW09bnVsbH19O2Yuc2NvcGUub24oKTtjb25zdCB5PWYuZWZmZWN0PW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3cgTnMoeCk7Zi5zY29wZS5vZmYoKTtjb25zdCBiPWYudXBkYXRlPXkucnVuLmJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHkpLE89Zi5qb2I9eS5ydW5JZkRpcnR5LmJpbmQoeSk7Ty5pPWYsTy5pZD1mLnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQseS5zY2hlZHVsZXI9KCk9PktuKE8pLEJlKGYsITApLGIoKX0sQj0oZix1LGQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0+e3UuY29tcG9uZW50PWY7Y29uc3QgbT1mLnZub2RlLnByb3BzO2Yudm5vZGU9dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZi5uZXh0PW51bGwscm8oZix1LnByb3BzLG0sZCksZm8oZix1LmNoaWxkcmVuLGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxqZSgpLHRzKGYpLExlKCl9LCQ9KGYsdSxkLG0sZyxfLFMseCx5PSExKT0+e2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBiPWYmJmYuY2hpbGRyZW4sTz1mP2Yuc2hhcGVGbGFnOjAsdz11LmNoaWxkcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbix7cGF0Y2hGbGFnOnYsc2hhcGVGbGFnOlB9PXU7aWYodj4wKXtpZih2JjEyOCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne0F0KGIsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59ZWxzZSBpZih2JjI1Nil7VmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2IsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59fVAmOD8oTyYxNiYmc3QoYixnLF8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3IT09YiYmYShkLHcpKTpPJjE2P1AmMTY/QXQoYix3LGQsbSxnLF8sUyx4LHkpOnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChiLGcsXywhMCk6KE8mOCYmYShkLCIiKSxQJjE2JiZNZSh3LGQsbSxnLF8sUyx4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx5KSl9LFZlPShmLHUsZCxtLGcsXyxTLHgseSk9PntmPWZ8fFhlLHU9dXx8WGU7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGI9Zi5sZW5ndGgsTz11Lmxlbmd0aCx3PU1hdGgubWluKGIsTyk7bGV0IHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Zvcih2PTA7djx3O3YrKyl7Y29uc3QgUD11W3ZdPXk/RmUodVt2XSk6U2UodVt2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10pO0koZlt2XSxQLGQsbnVsbCxnLF8sUyx4LHkpfWI+Tz9zdChmLGcsXywhMCwhMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdyk6TWUodSxkLG0sZyxfLFMseCx5LHcpfSxBdD0oZix1LGQsbSxnLF8sUyx4LHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT0+e2xldCBiPTA7Y29uc3QgTz11Lmxlbmd0aDtsZXQgdz1mLmxlbmd0aC0xLHY9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08tMTtmb3IoO2I8PXcmJmI8PXY7KXtjb25zdCBQPWZbYl0sTT11W2JdPXk/RmUodScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbYl0pOlNlKHVbYl0pO2lmKGx0KFAsTSkpSShQLE0sZCxudWxsLGcsXyxTLHgseSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Vsc2UgYnJlYWs7YisrfWZvcig7Yjw9dyYmYjw9djspe2NvbnN0IFA9Zlt3XSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz11W3ZdPXk/RmUodVt2XSk6U2UodVt2XSk7aWYobHQoUCxNKSlJKFAsTSxkLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLGcsXyxTLHgseSk7ZWxzZSBicmVhazt3LS0sdi0tfWlmKGI+dyl7aWYoYjw9diknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IFA9disxLE09UDxPP3VbUF0uZWw6bTtmb3IoO2I8PXY7KUkobnVsbCx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tiXT15P0ZlKHVbYl0pOlNlKHVbYl0pLGQsTSxnLF8sUyx4LHkpLGIrK319ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYoYj52KWZvcig7Yjw9dzspcGUoZltiXSxnLF8sITApLGIrKztlbHNle2NvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBQPWIsTT1iLFY9bmV3IE1hcDtmb3IoYj1NO2I8PXY7YisrKXtjb25zdCBvZT11JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tiXT15P0ZlKHVbYl0pOlNlKHVbYl0pO29lLmtleSE9bnVsbCYmVi5zZXQob2UuaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleSxiKX1sZXQgTixpZT0wO2NvbnN0IHJlPXYtTSsxO2xldCBnZT0hMSxfZT0wO2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBpdD1uZXcgQXJyYXkocmUpO2ZvcihiPTA7YjxyZTtiKyspaXRbYl09MDtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yKGI9UDtiPD13O2IrKyl7Y29uc3Qgb2U9ZltiXTtpZihpZT49cmUpe3BlKG9lLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLF8sITApO2NvbnRpbnVlfWxldCBtZTtpZihvZS5rZXkhPW51bGwpbWU9Vi5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG9lLmtleSk7ZWxzZSBmb3IoTj1NO048PXY7TisrKWlmKGl0W04tTV09PT0wJiZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qob2UsdVtOXSkpe21lPU47YnJlYWt9bWU9PT12b2lkIDA/cGUob2UsZyxfLCEwKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6KGl0W21lLU1dPWIrMSxtZT49X2U/X2U9bWU6Z2U9ITAsSShvZSx1W21lXSxkLG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWxsLGcsXyxTLHgseSksaWUrKyl9Y29uc3Qgem49Z2U/aG8oaXQpOlhlO2ZvcihOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz16bi5sZW5ndGgtMSxiPXJlLTE7Yj49MDtiLS0pe2NvbnN0IG9lPU0rYixtZT11WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZV0sWG49b2UrMTxPP3Vbb2UrMV0uZWw6bTtpdFtiXT09PTA/SShudWxsLG1lLGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFhuLGcsXyxTLHgseSk6Z2UmJihOPDB8fGIhPT16bltOXT9VZShtZSxkLFhuLDIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpOLS0pfX19LFVlPShmLHUsZCxtLGc9bnVsbCk9Pntjb25zdHtlbDpfLHR5cGU6UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdHJhbnNpdGlvbjp4LGNoaWxkcmVuOnksc2hhcGVGbGFnOmJ9PWY7aWYoYiY2KXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVWUoZi5jb21wb25lbnQuc3ViVHJlZSx1LGQsbSk7cmV0dXJufWlmKGImMTI4KXtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zdXNwZW5zZS5tb3ZlKHUsZCxtKTtyZXR1cm59aWYoYiY2NCl7Uy5tb3ZlKGYsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZCxydCk7cmV0dXJufWlmKFM9PT14ZSl7cyhfLHUsZCk7Zm9yKGxldCB3PTA7dzwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneS5sZW5ndGg7dysrKVVlKHlbd10sdSxkLG0pO3MoZi5hbmNob3IsdSxkKTtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JufWlmKFM9PT1kbil7cShmLHUsZCk7cmV0dXJufWlmKG0hPT0yJiZiJjEmJngpaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKG09PT0wKXguYmVmb3JlRW50ZXIoXykscyhfLHUsZCksbGUoKCk9PnguZW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKF8pLGcpO2Vsc2V7Y29uc3R7bGVhdmU6dyxkZWxheUxlYXZlOnYsYWZ0ZXJMZWF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6UH09eCxNPSgpPT5zKF8sdSxkKSxWPSgpPT57dyhfLCgpPT57TSgpLFAmJlAoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KX07dj92KF8sTSxWKTpWKCl9ZWxzZSBzKF8sdSxkKX0scGU9KGYsdSxkLG09ITEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGc9ITEpPT57Y29uc3R7dHlwZTpfLHByb3BzOlMscmVmOngsY2hpbGRyZW46eSxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3luYW1pY0NoaWxkcmVuOmIsc2hhcGVGbGFnOk8scGF0Y2hGbGFnOncsZGlyczp2LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWNoZUluZGV4OlB9PWY7aWYodz09PS0yJiYoZz0hMSkseCE9bnVsbCYmVXQoeCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCxkLGYsITApLFAhPW51bGwmJih1LnJlbmRlckNhY2hlW1BdPXZvaWQgMCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08mMjU2KXt1LmN0eC5kZWFjdGl2YXRlKGYpO3JldHVybn1jb25zdCBNPU8mMSYmdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVj0haHQoZik7bGV0IE47aWYoViYmKE49UyYmUy5vblZub2RlQmVmb3JlVW5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQpJiZiZShOLHUsZiksTyY2KU5yKGYuY29tcG9uZW50LGQsbSk7ZWxzZXtpZihPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYxMjgpe2Yuc3VzcGVuc2UudW5tb3VudChkLG0pO3JldHVybn1NJiZLZShmLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLHUsImJlZm9yZVVubW91bnQiKSxPJjY0P2YudHlwZS5yZW1vdmUoZix1LGQscnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG0pOmImJiFiLmhhc09uY2UmJihfIT09eGV8fHc+MCYmdyY2NCk/c3QoYix1LGQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyExLCEwKTooXz09PXhlJiZ3JjM4NHx8IWcmJk8mMTYpJiZzdCh5LHUsZCksbSYmRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGYpfShWJiYoTj1TJiZTLm9uVm5vZGVVbm1vdW50ZWQpfHxNKSYmbGUoKCk9PnsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTiYmYmUoTix1LGYpLE0mJktlKGYsbnVsbCx1LCJ1bm1vdW50ZWQiKX0sZCl9LEduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1mPT57Y29uc3R7dHlwZTp1LGVsOmQsYW5jaG9yOm0sdHJhbnNpdGlvbjpnfT1mOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZih1PT09eGUpe0hyKGQsbSk7cmV0dXJufWlmKHU9PT1kbil7QShmKTtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWNvbnN0IF89KCk9PntyKGQpLGcmJiFnLnBlcnNpc3RlZCYmZy5hZnRlckxlYXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmZy5hZnRlckxlYXZlKCl9O2lmKGYuc2hhcGVGbGFnJjEmJmcmJiFnLnBlcnNpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQpe2NvbnN0e2xlYXZlOlMsZGVsYXlMZWF2ZTp4fT1nLHk9KCk9PlMoZCxfKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneD94KGYuZWwsXyx5KTp5KCl9ZWxzZSBfKCl9LEhyPShmLHUpPT57bGV0IGQ7Zm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyg7ZiE9PXU7KWQ9VChmKSxyKGYpLGY9ZDtyKHUpfSxOcj0oZix1LGQpPT57Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0e2J1bTptLHNjb3BlOmcsam9iOl8sc3ViVHJlZTpTLHVtOngsbTp5LGE6Yn09ZjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHMoeSksbHMoYiksbSYmRnQobSksZy5zdG9wKCksXyYmKF8uZmxhZ3N8PTgscGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MsZix1LGQpKSx4JiZsZSh4LHUpLGxlKCgpPT57Zi5pc1VubW91bnRlZD0hMH0sdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLHUmJnUucGVuZGluZ0JyYW5jaCYmIXUuaXNVbm1vdW50ZWQmJmYuYXN5bmNEZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYhZi5hc3luY1Jlc29sdmVkJiZmLnN1c3BlbnNlSWQ9PT11LnBlbmRpbmdJZCYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LmRlcHMtLSx1LmRlcHM9PT0wJiZ1LnJlc29sdmUoKSl9LHN0PShmLHUsZCxtPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichMSxnPSExLF89MCk9Pntmb3IobGV0IFM9XztTPGYubGVuZ3RoO1MrKylwZShmW1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSx1LGQsbSxnKX0sUHQ9Zj0+e2lmKGYuc2hhcGVGbGFnJjYpcmV0dXJuIFB0KGYuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5zdWJUcmVlKTtpZihmLnNoYXBlRmxhZyYxMjgpcmV0dXJuIGYucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c3BlbnNlLm5leHQoKTtjb25zdCB1PVQoZi5hbmNob3J8fGYuZWwpLGQ9dSYmdVsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSWldO3JldHVybiBkP1QoZCk6dX07bGV0IG5uPSExO2NvbnN0IFluPShmLHUsZCk9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz57Zj09bnVsbD91Ll92bm9kZSYmcGUodS5fdm5vZGUsbnVsbCxudWxsLCEwKTpJKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1Ll92bm9kZXx8bnVsbCxmLHUsbnVsbCxudWxsLG51bGwsZCksdS5fdm5vZGU9ZiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm58fChubj0hMCx0cygpLHRyKCksbm49ITEpfSxydD17cDpJLHVtOnBlLG06VWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I6R24sbXQ6dG4sbWM6TWUscGM6JCxwYmM6JGUsbjpQdCxvOmV9O3JldHVybntyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyOlluLGh5ZHJhdGU6dm9pZCAwLGNyZWF0ZUFwcDp0byhZbil9fWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB1bih7dHlwZTplLHByb3BzOnR9LG4pe3JldHVybiBuPT09InN2ZyImJmU9PT0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvcmVpZ25PYmplY3QifHxuPT09Im1hdGhtbCImJmU9PT0iYW5ub3RhdGlvbi14bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsIiYmdCYmdC5lbmNvZGluZyYmdC5lbmNvZGluZy5pbmNsdWRlcygiaHRtbCIpP3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIDA6bn1mdW5jdGlvbiBCZSh7ZWZmZWN0OmUsam9iOnR9LG4pe24/KGUuZmxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dzfD0zMix0LmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYW8oZSx0KXtyZXR1cm4oIWV8fGUmJiFlLnBlbmRpbmdCcmFuY2gpJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCYmIXQucGVyc2lzdGVkfWZ1bmN0aW9uIHhyKGUsdCxuPSExKXtjb25zdCBzPWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkcmVuLHI9dC5jaGlsZHJlbjtpZihFKHMpJiZFKHIpKWZvcihsZXQgaT0wOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpPHMubGVuZ3RoO2krKyl7Y29uc3Qgbz1zW2ldO2xldCBsPXJbaV07bC5zaGFwZUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFnJjEmJiFsLmR5bmFtaWNDaGlsZHJlbiYmKChsLnBhdGNoRmxhZzw9MHx8bC5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hGbGFnPT09MzIpJiYobD1yW2ldPUZlKHJbaV0pLGwuZWw9by5lbCksIW4mJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLnBhdGNoRmxhZyE9PS0yJiZ4cihvLGwpKSxsLnR5cGU9PT1rdCYmKGwuZWw9by4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWwpfX1mdW5jdGlvbiBobyhlKXtjb25zdCB0PWUuc2xpY2UoKSxuPVswXTtsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MscixpLG8sbDtjb25zdCBjPWUubGVuZ3RoO2ZvcihzPTA7czxjO3MrKyl7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGg9ZVtzXTtpZihoIT09MCl7aWYocj1uW24ubGVuZ3RoLTFdLGVbcl08aCl7dFsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc109cixuLnB1c2gocyk7Y29udGludWV9Zm9yKGk9MCxvPW4ubGVuZ3RoLTE7aTxvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzspbD1pK28+PjEsZVtuW2xdXTxoP2k9bCsxOm89bDtoPGVbbltpXV0mJihpPjAmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodFtzXT1uW2ktMV0pLG5baV09cyl9fWZvcihpPW4ubGVuZ3RoLG89bltpLTFdO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLS0gPjA7KW5baV09byxvPXRbb107cmV0dXJuIG59ZnVuY3Rpb24gU3IoZSl7Y29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHQ9ZS5zdWJUcmVlLmNvbXBvbmVudDtpZih0KXJldHVybiB0LmFzeW5jRGVwJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmIXQuYXN5bmNSZXNvbHZlZD90OlNyKHQpfWZ1bmN0aW9uIGxzKGUpe2lmKGUpZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uZmxhZ3N8PTh9Y29uc3QgcG89JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N5bWJvbC5mb3IoInYtc2N4IiksZ289KCk9PkR0KHBvKTtmdW5jdGlvbiBhbihlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LG4pe3JldHVybiB3cihlLHQsbil9ZnVuY3Rpb24gd3IoZSx0LG49TCl7Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2ltbWVkaWF0ZTpzLGRlZXA6cixmbHVzaDppLG9uY2U6b309bixsPXNlKHt9LG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxjPXQmJnN8fCF0JiZpIT09InBvc3QiO2xldCBoO2lmKFN0KXtpZihpPT09InN5bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjIil7Y29uc3QgQz1nbygpO2g9Qy5fX3dhdGNoZXJIYW5kbGVzfHwoQy5fX3dhdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVySGFuZGxlcz1bXSl9ZWxzZSBpZighYyl7Y29uc3QgQz0oKT0+e307cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDLnN0b3A9d2UsQy5yZXN1bWU9d2UsQy5wYXVzZT13ZSxDfX1jb25zdCBhPW5lOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLmNhbGw9KEMsRixJKT0+Q2UoQyxhLEYsSSk7bGV0IHA9ITE7aT09PSJwb3N0Ij8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbC5zY2hlZHVsZXI9Qz0+e2xlKEMsYSYmYS5zdXNwZW5zZSl9OmkhPT0ic3luYyImJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYocD0hMCxsLnNjaGVkdWxlcj0oQyxGKT0+e0Y/QygpOktuKEMpfSksbC5hdWdtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEpvYj1DPT57dCYmKEMuZmxhZ3N8PTQpLHAmJihDLmZsYWdzfD0yLGEmJihDLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZD1hLnVpZCxDLmk9YSkpfTtjb25zdCBUPXZpKGUsdCxsKTtyZXR1cm4gU3QmJihoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9oLnB1c2goVCk6YyYmVCgpKSxUfWZ1bmN0aW9uIF9vKGUsdCxuKXtjb25zdCBzPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLnByb3h5LHI9SihlKT9lLmluY2x1ZGVzKCIuIik/VHIocyxlKTooKT0+c1snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV06ZS5iaW5kKHMscyk7bGV0IGk7Uih0KT9pPXQ6KGk9dC5oYW5kbGVyLG49dCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IG89Q3QodGhpcyksbD13cihyLGkuYmluZChzKSxuKTtyZXR1cm4gbygpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsfWZ1bmN0aW9uIFRyKGUsdCl7Y29uc3Qgbj10LnNwbGl0KCIuIik7cmV0dXJuKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT57bGV0IHM9ZTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoJiZzO3IrKylzPXNbbltyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ11dO3JldHVybiBzfX1jb25zdCBtbz0oZSx0KT0+dD09PSJtb2RlbFZhbHVlInx8dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0ibW9kZWwtdmFsdWUiP2UubW9kZWxNb2RpZmllcnM6ZVtgJHt0fU1vZGlmaWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnNgXXx8ZVtgJHtOZSh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtHZSh0KX1Nb2RpZmllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzYF07ZnVuY3Rpb24gYm8oZSx0LC4uLm4pe2lmKGUuaXNVbm1vdW50ZWQpcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybjtjb25zdCBzPWUudm5vZGUucHJvcHN8fEw7bGV0IHI9bjtjb25zdCBpPXQuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0c1dpdGgoInVwZGF0ZToiKSxvPWkmJm1vKHMsdC5zbGljZSg3KSk7byYmKG8uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaW0mJihyPW4ubWFwKGE9PkooYSk/YS50cmltKCk6YSkpLG8ubnVtYmVyJiYocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9bi5tYXAoS3IpKSk7bGV0IGwsYz1zW2w9c24odCldfHxzW2w9c24oTmUodCkpXTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIWMmJmkmJihjPXNbbD1zbihHZSh0KSldKSxjJiZDZShjLGUsNixyKTtjb25zdCBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1zW2wrIk9uY2UiXTtpZihoKXtpZighZS5lbWl0dGVkKWUuZW1pdHRlZD17fTtlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSBpZihlLmVtaXR0ZWRbbF0pcmV0dXJuO2UuZW1pdHRlZFtsXT0hMCxDZShoLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDYscil9fWZ1bmN0aW9uIENyKGUsdCxuPSExKXtjb25zdCBzPXQuZW1pdHNDYWNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uscj1zLmdldChlKTtpZihyIT09dm9pZCAwKXJldHVybiByO2NvbnN0IGk9ZS5lbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdHM7bGV0IG89e30sbD0hMTtpZighUihlKSl7Y29uc3QgYz1oPT57Y29uc3QgYT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ3IoaCx0LCEwKTthJiYobD0hMCxzZShvLGEpKX07IW4mJnQubWl4aW5zLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2gmJnQubWl4aW5zLmZvckVhY2goYyksZS5leHRlbmRzJiZjKGUuZXh0ZW5kcyksZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKGMpfXJldHVybiFpJiYhbD8oSyhlKSYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJnMuc2V0KGUsbnVsbCksbnVsbCk6KEUoaSk/aS5mb3JFYWNoKGM9Pm9bY109bnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wpOnNlKG8saSksSyhlKSYmcy5zZXQoZSxvKSxvKX1mdW5jdGlvbiBRdChlLHQpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4hZXx8IVd0KHQpPyExOih0PXQuc2xpY2UoMikucmVwbGFjZSgvT25jZSQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLywiIiksSChlLHRbMF0udG9Mb3dlckNhc2UoKSt0LnNsaWNlKDEpKXx8SChlLEdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0KSl8fEgoZSx0KSl9ZnVuY3Rpb24gZnMoZSl7Y29uc3R7dHlwZTp0LHZub2RlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHByb3h5OnMsd2l0aFByb3h5OnIscHJvcHNPcHRpb25zOltpXSxzbG90czpvLGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRyczpsLGVtaXQ6YyxyZW5kZXI6aCxyZW5kZXJDYWNoZTphLHByb3BzOnAsZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2E6VCxzZXR1cFN0YXRlOkMsY3R4OkYsaW5oZXJpdEF0dHJzOkl9PWUsej1WdChlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bGV0IGosVzt0cnl7aWYobi5zaGFwZUZsYWcmNCl7Y29uc3QgQT1yfHxzLEc9QTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaj1TZShoLmNhbGwoRyxBLGEscCxDLFQsRikpLFc9bH1lbHNle2NvbnN0IEE9dDtqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1TZShBLmxlbmd0aD4xP0EocCx7YXR0cnM6bCxzbG90czpvLGVtaXQ6Y30pOkEocCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbnVsbCkpLFc9dC5wcm9wcz9sOnlvKGwpfX1jYXRjaChBKXtndC5sZW5ndGg9MCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWHQoQSxlLDEpLGo9SGUoeXQpfWxldCBxPWo7aWYoVyYmSSE9PSExKXtjb25zdCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1PYmplY3Qua2V5cyhXKSx7c2hhcGVGbGFnOkd9PXE7QS5sZW5ndGgmJkcmNyYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpJiZBLnNvbWUoUG4pJiYoVz14byhXLGkpKSxxPXR0KHEsVywhMSwhMCkpfXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gbi5kaXJzJiYocT10dChxLG51bGwsITEsITApLHEuZGlycz1xLmRpcnM/cS5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lycy5jb25jYXQobi5kaXJzKTpuLmRpcnMpLG4udHJhbnNpdGlvbiYmQm4ocSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFuc2l0aW9uKSxqPXEsVnQoeiksan1jb25zdCB5bz1lPT57bGV0IHQ7Zm9yKGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBuIGluIGUpKG49PT0iY2xhc3MifHxuPT09InN0eWxlInx8V3QobikpJiYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0fHwodD17fSkpW25dPWVbbl0pO3JldHVybiB0fSx4bz0oZSx0KT0+e2NvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduPXt9O2Zvcihjb25zdCBzIGluIGUpKCFQbihzKXx8IShzLnNsaWNlKDkpaW4gdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSYmKG5bc109ZVtzXSk7cmV0dXJuIG59O2Z1bmN0aW9uIFNvKGUsdCxuKXtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R7cHJvcHM6cyxjaGlsZHJlbjpyLGNvbXBvbmVudDppfT1lLHtwcm9wczpvLGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZHJlbjpsLHBhdGNoRmxhZzpjfT10LGg9aS5lbWl0c09wdGlvbnM7aWYodC5kaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3x8dC50cmFuc2l0aW9uKXJldHVybiEwO2lmKG4mJmM+PTApe2lmKGMmMTAyNClyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuITA7aWYoYyYxNilyZXR1cm4gcz9jcyhzLG8saCk6ISFvO2lmKGMmOCl7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGE9dC5keW5hbWljUHJvcHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtjb25zdCBUPWFbcF07aWYob1tUXSE9PXNbVF0mJiFRdChoLFQpKXJldHVybiEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ319fWVsc2UgcmV0dXJuKHJ8fGwpJiYoIWx8fCFsLiRzdGFibGUpPyEwOnM9PT1vPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichMTpzP28/Y3MocyxvLGgpOiEwOiEhbztyZXR1cm4hMX1mdW5jdGlvbiBjcyhlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4pe2NvbnN0IHM9T2JqZWN0LmtleXModCk7aWYocy5sZW5ndGghPT1PYmplY3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleXMoZSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXQgcj0wO3I8cy5sZW5ndGg7cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrKyl7Y29uc3QgaT1zW3JdO2lmKHRbaV0hPT1lW2ldJiYhUXQobixpKSlyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInITB9cmV0dXJuITF9ZnVuY3Rpb24gd28oe3Zub2RlOmUscGFyZW50OnR9LG4pe2ZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoO3Q7KXtjb25zdCBzPXQuc3ViVHJlZTtpZihzLnN1c3BlbnNlJiZzLnN1c3BlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZS5hY3RpdmVCcmFuY2g9PT1lJiYocy5lbD1lLmVsKSxzPT09ZSkoZT10LnZub2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkuZWw9bix0PXQucGFyZW50O2Vsc2UgYnJlYWt9fWNvbnN0IHZyPWU9PmUuX19pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdXNwZW5zZTtmdW5jdGlvbiBUbyhlLHQpe3QmJnQucGVuZGluZ0JyYW5jaD9FKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKT90LmVmZmVjdHMucHVzaCguLi5lKTp0LmVmZmVjdHMucHVzaChlKTpQaShlKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgeGU9U3ltYm9sLmZvcigidi1mZ3QiKSxrdD1TeW1ib2wuZm9yKCJ2LXR4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QiKSx5dD1TeW1ib2wuZm9yKCJ2LWNtdCIpLGRuPVN5bWJvbC5mb3IoInYtc3RjIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGd0PVtdO2xldCBjZT1udWxsO2Z1bmN0aW9uIEh0KGU9ITEpe2d0LnB1c2goY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWU/bnVsbDpbXSl9ZnVuY3Rpb24gQ28oKXtndC5wb3AoKSxjZT1ndFtndC5sZW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoLTFdfHxudWxsfWxldCB4dD0xO2Z1bmN0aW9uIHVzKGUsdD0hMSl7eHQrPWUsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8MCYmY2UmJnQmJihjZS5oYXNPbmNlPSEwKX1mdW5jdGlvbiBPcihlKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGUuZHluYW1pY0NoaWxkcmVuPXh0PjA/Y2V8fFhlOm51bGwsQ28oKSx4dD4wJiZjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UmJmNlLnB1c2goZSksZX1mdW5jdGlvbiBobihlLHQsbixzLHIsaSl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcihZKGUsdCxuLHMscixpLCEwKSl9ZnVuY3Rpb24gdm8oZSx0LG4scyxyKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIE9yKEhlKGUsdCxuLHMsciwhMCkpfWZ1bmN0aW9uIEVyKGUpe3JldHVybiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gbHQoZSx0KXtyZXR1cm4gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicudHlwZT09PXQudHlwZSYmZS5rZXk9PT10LmtleX1jb25zdCBBcj0oe2tleTplfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT5lPz9udWxsLE50PSh7cmVmOmUscmVmX2tleTp0LHJlZl9mb3I6bn0pPT4odHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VvZiBlPT0ibnVtYmVyIiYmKGU9IiIrZSksZSE9bnVsbD9KKGUpfHxRKGUpfHxSKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKT97aTp1ZSxyOmUsazp0LGY6ISFufTplOm51bGwpO2Z1bmN0aW9uIFkoZSx0PW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWxsLG49bnVsbCxzPTAscj1udWxsLGk9ZT09PXhlPzA6MSxvPSExLGw9ITEpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBjPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmUscHJvcHM6dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsa2V5OnQmJkFyKHQpLHJlZjp0JiZOdCh0KSxzY29wZUlkOnNyLHNsb3RTY29wZUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOm51bGwsdHJhbnNpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsLHRhcmdldFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhZzppLHBhdGNoRmxhZzpzLGR5bmFtaWNQcm9wczpyLGR5bmFtaWNDaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6bnVsbCxhcHBDb250ZXh0Om51bGwsY3R4OnVlfTtyZXR1cm4gbD8ocW4oYyxuKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSYxMjgmJmUubm9ybWFsaXplKGMpKTpuJiYoYy5zaGFwZUZsYWd8PUoobik/ODoxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzYpLHh0PjAmJiFvJiZjZSYmKGMucGF0Y2hGbGFnPjB8fGkmNikmJmMucGF0Y2hGbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZyE9PTMyJiZjZS5wdXNoKGMpLGN9Y29uc3QgSGU9T287ZnVuY3Rpb24gT28oZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD1udWxsLG49bnVsbCxzPTAscj1udWxsLGk9ITEpe2lmKCghZXx8ZT09PUppKSYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlPXl0KSxFcihlKSl7Y29uc3QgbD10dChlLHQsITApO3JldHVybiBuJiZxbihsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSx4dD4wJiYhaSYmY2UmJihsLnNoYXBlRmxhZyY2P2NlW2NlLmluZGV4T2YoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXT1sOmNlLnB1c2gobCkpLGwucGF0Y2hGbGFnPS0yLGx9aWYoTm8oZSkmJihlPWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fdmNjT3B0cyksdCl7dD1Fbyh0KTtsZXR7Y2xhc3M6bCxzdHlsZTpjfT10O2wmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichSihsKSYmKHQuY2xhc3M9Rm4obCkpLEsoYykmJihVbihjKSYmIUUoYykmJihjPXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSh7fSxjKSksdC5zdHlsZT1JbihjKSl9Y29uc3Qgbz1KKGUpPzE6dnIoZSk/MTI4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpGaShlKT82NDpLKGUpPzQ6UihlKT8yOjA7cmV0dXJuIFkoZSx0LG4scyxyLG8saScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsITApfWZ1bmN0aW9uIEVvKGUpe3JldHVybiBlP1VuKGUpfHxocihlKT9zZSh7fSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk6ZTpudWxsfWZ1bmN0aW9uIHR0KGUsdCxuPSExLHM9ITEpe2NvbnN0e3Byb3BzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpyLHJlZjppLHBhdGNoRmxhZzpvLGNoaWxkcmVuOmwsdHJhbnNpdGlvbjpjfT1lLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoPXQ/QW8ocnx8e30sdCk6cixhPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZTplLnR5cGUscHJvcHM6aCxrZXk6aCYmQXIoaCkscmVmOnQmJnQucmVmP24mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZpP0UoaSk/aS5jb25jYXQoTnQodCkpOltpLE50KHQpXTpOdCh0KTppLHNjb3BlSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkOmUuc2NvcGVJZCxzbG90U2NvcGVJZHM6ZS5zbG90U2NvcGVJZHMsY2hpbGRyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmwsdGFyZ2V0OmUudGFyZ2V0LHRhcmdldFN0YXJ0OmUudGFyZ2V0U3RhcnQsdGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEFuY2hvcjplLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDplLnN0YXRpY0NvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCxzaGFwZUZsYWc6ZS5zaGFwZUZsYWcscGF0Y2hGbGFnOnQmJmUudHlwZSE9PXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZT9vPT09LTE/MTY6b3wxNjpvLGR5bmFtaWNQcm9wczplLmR5bmFtaWNQcm9wcyxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3luYW1pY0NoaWxkcmVuOmUuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6ZS5hcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwQ29udGV4dCxkaXJzOmUuZGlycyx0cmFuc2l0aW9uOmMsY29tcG9uZW50OmUuY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCxzdXNwZW5zZTplLnN1c3BlbnNlLHNzQ29udGVudDplLnNzQ29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QmJnR0KGUuc3NDb250ZW50KSxzc0ZhbGxiYWNrOmUuc3NGYWxsYmFjayYmdHQoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3NGYWxsYmFjayksZWw6ZS5lbCxhbmNob3I6ZS5hbmNob3IsY3R4OmUuY3R4LGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTplLmNlfTtyZXR1cm4gYyYmcyYmQm4oYSxjLmNsb25lKGEpKSxhfWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBQcihlPSIgIix0PTApe3JldHVybiBIZShrdCxudWxsLGUsdCl9ZnVuY3Rpb24gUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGUpe3JldHVybiBlPT1udWxsfHx0eXBlb2YgZT09ImJvb2xlYW4iP0hlKHl0KTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRShlKT9IZSh4ZSxudWxsLGUuc2xpY2UoKSk6RXIoZSk/RmUoZSk6SGUoa3QsbnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsU3RyaW5nKGUpKX1mdW5jdGlvbiBGZShlKXtyZXR1cm4gZS5lbD09PW51bGwmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLnBhdGNoRmxhZyE9PS0xfHxlLm1lbW8/ZTp0dChlKX1mdW5jdGlvbiBxbihlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtsZXQgbj0wO2NvbnN0e3NoYXBlRmxhZzpzfT1lO2lmKHQ9PW51bGwpdD1udWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztlbHNlIGlmKEUodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PT0ib2JqZWN0IilpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocyY2NSl7Y29uc3Qgcj10LmRlZmF1bHQ7ciYmKHIuX2MmJihyLl9kPSExKSxxbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSxyKCkpLHIuX2MmJihyLl9kPSEwKSk7cmV0dXJufWVsc2V7bj0zMjtjb25zdCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz10Ll87IXImJiFocih0KT90Ll9jdHg9dWU6cj09PTMmJnVlJiYodWUuc2xvdHMuXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0xP3QuXz0xOih0Ll89MixlLnBhdGNoRmxhZ3w9MTAyNCkpfWVsc2UgUih0KT8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHQ9e2RlZmF1bHQ6dCxfY3R4OnVlfSxuPTMyKToodD1TdHJpbmcodCkscyY2ND8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249MTYsdD1bUHIodCldKTpuPTgpO2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9ZnVuY3Rpb24gQW8oLi4uZSl7Y29uc3QgdD17fTtmb3IobGV0IG49MDtuPGUubGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmd0aDtuKyspe2NvbnN0IHM9ZVtuXTtmb3IoY29uc3QgciBpbiBzKWlmKHI9PT0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzIil0LmNsYXNzIT09cy5jbGFzcyYmKHQuY2xhc3M9Rm4oW3QuY2xhc3MscycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2xhc3NdKSk7ZWxzZSBpZihyPT09InN0eWxlIil0LnN0eWxlPUluKFt0LnN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSxzLnN0eWxlXSk7ZWxzZSBpZihXdChyKSl7Y29uc3QgaT10W3JdLG89c1tyXTtvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmaSE9PW8mJiEoRShpKSYmaS5pbmNsdWRlcyhvKSkmJih0W3JdPWk/W10uY29uYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdChpLG8pOm8pfWVsc2UgciE9PSIiJiYodFtyXT1zW3JdKX1yZXR1cm4gdH1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gYmUoZSx0LG4scz1udWxsKXtDZShlLHQsNyxbbixzXSl9Y29uc3QgUG89JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyKCk7bGV0IFJvPTA7ZnVuY3Rpb24gTW8oZSx0LG4pe2NvbnN0IHM9ZS50eXBlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyPSh0P3QuYXBwQ29udGV4dDplLmFwcENvbnRleHQpfHxQbyxpPXt1aWQ6Um8rKywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndm5vZGU6ZSx0eXBlOnMscGFyZW50OnQsYXBwQ29udGV4dDpyLHJvb3Q6bnVsbCxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiOm51bGwsc2NvcGU6bmV3IFhyKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvc2VkOm51bGwsZXhwb3NlUHJveHk6bnVsbCx3aXRoUHJveHk6bnVsbCxwcm92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXM6dD90LnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoci5wcm92aWRlcyksaWRzOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0P3QuaWRzOlsiIiwwLDBdLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVzOm51bGwscHJvcHNPcHRpb25zOmdyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzLHIpLGVtaXRzT3B0aW9uczpDcihzLHIpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLHByb3BzRGVmYXVsdHM6TCxpbmhlcml0QXR0cnM6cy5pbmhlcml0QXR0cnMsY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDpMLGRhdGE6TCxwcm9wczpMLGF0dHJzOkwsc2xvdHM6TCxyZWZzOkwsc2V0dXBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGU6TCxzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpuLHN1c3BlbnNlSWQ6bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/bi5wZW5kaW5nSWQ6MCxhc3luY0RlcDpudWxsLGFzeW5jUmVzb2x2ZWQ6ITEsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididW06bnVsbCxkYTpudWxsLGE6bnVsbCxydGc6bnVsbCxydGM6bnVsbCxlYzpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxzcDpudWxsfTtyZXR1cm4gaS5jdHg9e186aX0saS5yb290PXQ/dC5yb290OmksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kuZW1pdD1iby5iaW5kKG51bGwsaSksZS5jZSYmZS5jZShpKSxpfWxldCBuZT1udScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbCxCdCxPbjt7Y29uc3QgZT1HdCgpLHQ9KG4scyk9PntsZXQgcjtyZXR1cm4ocj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVtuXSl8fChyPWVbbl09W10pLHIucHVzaChzKSxpPT57ci5sZW5ndGg+MT9yLmZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKG89Pm8oaSkpOnJbMF0oaSl9fTtCdD10KCJfX1ZVRV9JTlNUQU5DRV9TRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUVEVSU19fIixuPT5uZT1uKSxPbj10KCJfX1ZVRV9TU1JfU0VUVEVSU19fIixuPT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3Q9bil9Y29uc3QgQ3Q9ZT0+e2NvbnN0IHQ9bmU7cmV0dXJuIEJ0KGUpLGUuc2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlLm9uKCksKCk9PntlLnNjb3BlLm9mZigpLEJ0KHQpfX0sYXM9KCk9PntuZSYmbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLnNjb3BlLm9mZigpLEJ0KG51bGwpfTtmdW5jdGlvbiBScihlKXtyZXR1cm4gZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndm5vZGUuc2hhcGVGbGFnJjR9bGV0IFN0PSExO2Z1bmN0aW9uIElvKGUsdD0hMSxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0hMSl7dCYmT24odCk7Y29uc3R7cHJvcHM6cyxjaGlsZHJlbjpyfT1lLnZub2RlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpPVJyKGUpO3NvKGUscyxpLHQpLGxvKGUscixuKTtjb25zdCBvPWk/Rm8oZSx0KTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZCAwO3JldHVybiB0JiZPbighMSksb31mdW5jdGlvbiBGbyhlLHQpe2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuPWUudHlwZTtlLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksZS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveHk9bmV3IFByb3h5KGUuY3R4LFlpKTtjb25zdHtzZXR1cDpzfT1uO2lmKHMpe2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpO2NvbnN0IHI9ZS5zZXR1cENvbnRleHQ9cy5sZW5ndGg+MT9IbyhlKTpudWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxpPUN0KGUpLG89VHQocyxlLDAsW2UucHJvcHMscl0pLGw9RXMobyk7aWYoTGUoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaSgpLChsfHxlLnNwKSYmIWh0KGUpJiZycihlKSxsKXtpZihvLnRoZW4oYXMsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSx0KXJldHVybiBvLnRoZW4oYz0+e2RzKGUsYyl9KS5jYXRjaChjPT57WHQoYyxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywwKX0pO2UuYXN5bmNEZXA9b31lbHNlIGRzKGUsbyl9ZWxzZSBNcihlKX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZHMoZSx0LG4pe1IodCk/ZS50eXBlLl9fc3NySW5saW5lUmVuZGVyP2Uuc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclJlbmRlcj10OmUucmVuZGVyPXQ6Syh0KSYmKGUuc2V0dXBTdGF0ZT1Rcyh0KSksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01yKGUpfWZ1bmN0aW9uIE1yKGUsdCxuKXtjb25zdCBzPWUudHlwZTtlLnJlbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fChlLnJlbmRlcj1zLnJlbmRlcnx8d2UpO3tjb25zdCByPUN0KGUpO2plKCk7dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneXt6aShlKX1maW5hbGx5e0xlKCkscigpfX19Y29uc3QgRG89e2dldChlLHQpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gWChlLCJnZXQiLCIiKSxlW3RdfX07ZnVuY3Rpb24gSG8oZSl7Y29uc3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9bj0+e2UuZXhwb3NlZD1ufHx7fX07cmV0dXJue2F0dHJzOm5ldyBQcm94eShlLmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRycyxEbyksc2xvdHM6ZS5zbG90cyxlbWl0OmUuZW1pdCxleHBvc2U6dH19ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGVuKGUpe3JldHVybiBlLmV4cG9zZWQ/ZS5leHBvc2VQcm94eXx8KGUuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9zZVByb3h5PW5ldyBQcm94eShRcyhtaShlLmV4cG9zZWQpKSx7Z2V0KHQsbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKG4gaW4gdClyZXR1cm4gdFtuXTtpZihuIGluIHB0KXJldHVybiBwdFtuXShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9LGhhcyh0LG4pe3JldHVybiBuIGluIHR8fG4gaW4gcHR9fSkpOmUucHJveHl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIE5vKGUpe3JldHVybiBSKGUpJiYiX192Y2NPcHRzImluIGV9Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGpvPShlLHQpPT5UaShlLHQsU3QpLExvPSIzLjUuMTMiOy8qKlxuKiBAdnVlL3J1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW1lLWRvbSB2My41LjEzXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1lvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL2xldCBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ247Y29uc3QgaHM9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy50cnVzdGVkVHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO2lmKGhzKXRyeXtFbj1ocy5jcmVhdGVQb2xpY3koInZ1ZSIse2NyZWF0ZUhUTUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmU9PmV9KX1jYXRjaHt9Y29uc3QgSXI9RW4/ZT0+RW4uY3JlYXRlSFRNTChlKTplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0+ZSwkbz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFZvPSJodHRwOi8vdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsT2U9dHlwZW9mIGRvY3VtZW50PCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndSI/ZG9jdW1lbnQ6bnVsbCxwcz1PZSYmT2UuY3JlYXRlRWxlbWVudCgidGVtcGxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIiksVW89e2luc2VydDooZSx0LG4pPT57dC5pbnNlcnRCZWZvcmUoZSxufHxudScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbCl9LHJlbW92ZTplPT57Y29uc3QgdD1lLnBhcmVudE5vZGU7dCYmdC5yZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hpbGQoZSl9LGNyZWF0ZUVsZW1lbnQ6KGUsdCxuLHMpPT57Y29uc3Qgcj10PT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzdmciP09lLmNyZWF0ZUVsZW1lbnROUygkbyxlKTp0PT09Im1hdGhtbCI/T2UuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZUVsZW1lbnROUyhWbyxlKTpuP09lLmNyZWF0ZUVsZW1lbnQoZSx7aXM6bn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpPZS5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT09InNlbGVjdCImJnMmJnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ211bHRpcGxlIT1udWxsJiZyLnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLHMubXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcGxlKSxyfSxjcmVhdGVUZXh0OmU9Pk9lLmNyZWF0ZVRleHROb2RlKGUpLGNyZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVDb21tZW50OmU9Pk9lLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSx0KT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tlLm5vZGVWYWx1ZT10fSxzZXRFbGVtZW50VGV4dDooZSx0KT0+e2UudGV4dENvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW50PXR9LHBhcmVudE5vZGU6ZT0+ZS5wYXJlbnROb2RlLG5leHRTaWJsaW5nOmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT5lLm5leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+T2UucXVlcnlTZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZSksc2V0U2NvcGVJZChlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfSxpbnNlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0U3RhdGljQ29udGVudChlLHQsbixzLHIsaSl7Y29uc3Qgbz1uP24ucHJldmlvdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2libGluZzp0Lmxhc3RDaGlsZDtpZihyJiYocj09PWl8fHIubmV4dFNpYmxpbmcpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJylmb3IoO3QuaW5zZXJ0QmVmb3JlKHIuY2xvbmVOb2RlKCEwKSxuKSwhKHI9PT1pfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IShyPXIubmV4dFNpYmxpbmcpKTspO2Vsc2V7cHMuaW5uZXJIVE1MPUlyKHM9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInN2ZyI/YDxzdmc+JHtlfTwvc3ZnPmA6cz09PSJtYXRobWwiP2A8bWF0aD4ke2V9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzwvbWF0aD5gOmUpO2NvbnN0IGw9cHMuY29udGVudDtpZihzPT09InN2ZyJ8fHM9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9Im1hdGhtbCIpe2NvbnN0IGM9bC5maXJzdENoaWxkO2Zvcig7Yy5maXJzdENoaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDspbC5hcHBlbmRDaGlsZChjLmZpcnN0Q2hpbGQpO2wucmVtb3ZlQ2hpbGQoYyl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuaW5zZXJ0QmVmb3JlKGwsbil9cmV0dXJuW28/by5uZXh0U2libGluZzp0LmZpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdENoaWxkLG4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGRdfX0sS289U3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJvbCgiX3Z0YyIpO2Z1bmN0aW9uIEJvKGUsdCxuKXtjb25zdCBzPWVbS29dO3MmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYodD0odD9bdCwuLi5zXTpbLi4uc10pLmpvaW4oIiAiKSksdD09bnVsbD9lLnJlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVBdHRyaWJ1dGUoImNsYXNzIik6bj9lLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTplLmNsYXNzTmFtZT10fWNvbnN0IGdzPVN5bWJvbCgiX3ZvZCIpLFdvPVN5bWJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2woIl92c2giKSxxbz1TeW1ib2woIiIpLEpvPS8oXnw7KVxccypkaXNwbGF5XFxzKjovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBHbyhlLHQsbil7Y29uc3Qgcz1lLnN0eWxlLHI9SihuKTtsZXQgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ITE7aWYobiYmIXIpe2lmKHQpaWYoSih0KSlmb3IoY29uc3QgbyBvZiB0LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCgiOyIpKXtjb25zdCBsPW8uc2xpY2UoMCxvLmluZGV4T2YoIjoiKSkudHJpbSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztuW2xdPT1udWxsJiZqdChzLGwsIiIpfWVsc2UgZm9yKGNvbnN0IG8gaW4gdCluWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvXT09bnVsbCYmanQocyxvLCIiKTtmb3IoY29uc3QgbyBpbiBuKW89PT0iZGlzcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXkiJiYoaT0hMCksanQocyxvLG5bb10pfWVsc2UgaWYocil7aWYodCE9PW4pe2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBvPXNbcW9dO28mJihuKz0iOyIrbykscy5jc3NUZXh0PW4saT1Kby50ZXN0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKX19ZWxzZSB0JiZlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTtncyBpbiBlJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGVbZ3NdPWk/cy5kaXNwbGF5OiIiLGVbV29dJiYocy5kaXNwbGF5PSJub25lIikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31jb25zdCBfcz0vXFxzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBqdChlLHQsbil7aWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEUobikpbi5mb3JFYWNoKHM9Pmp0KGUsdCxzKSk7ZWxzZSBpZihuPT1udWxsJiYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249IiIpLHQuc3RhcnRzV2l0aCgiLS0iKSllLnNldFByb3BlcnR5KHQsbik7ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7Y29uc3Qgcz1ZbyhlLHQpO19zLnRlc3Qobik/ZS5zZXRQcm9wZXJ0eShHZShzKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5yZXBsYWNlKF9zLCIiKSwiaW1wb3J0YW50Iik6ZVtzXT1ufX1jb25zdCBtcz1bJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJXZWJraXQiLCJNb3oiLCJtcyJdLHBuPXt9O2Z1bmN0aW9uIFlvKGUsdCl7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IG49cG5bdF07aWYobilyZXR1cm4gbjtsZXQgcz1OZSh0KTtpZihzIT09ImZpbHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIiJiZzIGluIGUpcmV0dXJuIHBuW3RdPXM7cz1ScyhzKTtmb3IobGV0IHI9MDtyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzxtcy5sZW5ndGg7cisrKXtjb25zdCBpPW1zW3JdK3M7aWYoaSBpbiBlKXJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcG5bdF09aX1yZXR1cm4gdH1jb25zdCBicz0iaHR0cDovL3d3dy53My5vcmcvMTknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOTkveGxpbmsiO2Z1bmN0aW9uIHlzKGUsdCxuLHMscixpPVlyKHQpKXtzJiZ0LnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FydHNXaXRoKCJ4bGluazoiKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMoYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLHQuc2xpY2UoNix0Lmxlbmd0aCkpOmUuc2V0QXR0cmlidXRlTlMoYnMsdCxuKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj09bnVsbHx8aSYmIUlzKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZSh0LGk/IiI6VGUobik/U3RyaW5nKG4pOm4pfWZ1bmN0aW9uIHhzKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbixzLHIpe2lmKHQ9PT0iaW5uZXJIVE1MInx8dD09PSJ0ZXh0Q29udGVudCIpe24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIT1udWxsJiYoZVt0XT10PT09ImlubmVySFRNTCI/SXIobik6bik7cmV0dXJufWNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBpPWUudGFnTmFtZTtpZih0PT09InZhbHVlIiYmaSE9PSJQUk9HUkVTUyImJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichaS5pbmNsdWRlcygiLSIpKXtjb25zdCBsPWk9PT0iT1BUSU9OIj9lLmdldEF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWJ1dGUoInZhbHVlIil8fCIiOmUudmFsdWUsYz1uPT1udWxsP2UudHlwZT09PSJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlY2tib3giPyJvbiI6IiI6U3RyaW5nKG4pOyhsIT09Y3x8ISgiX3ZhbHVlImluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSkmJihlLnZhbHVlPWMpLG49PW51bGwmJmUucmVtb3ZlQXR0cmlidXRlKHQpLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLl92YWx1ZT1uO3JldHVybn1sZXQgbz0hMTtpZihuPT09IiJ8fG49PW51bGwpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBsPXR5cGVvZiBlW3RdO2w9PT0iYm9vbGVhbiI/bj1JcyhuKTpuPT1udWxsJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmbD09PSJzdHJpbmciPyhuPSIiLG89ITApOmw9PT0ibnVtYmVyIiYmKG49MCxvPSEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCl9dHJ5e2VbdF09bn1jYXRjaHt9byYmZS5yZW1vdmVBdHRyaWJ1dGUocnx8dCl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIEZyKGUsdCxuLHMpe2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4scyl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHpvKGUsdCxuLHMpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWNvbnN0IFNzPVN5bWJvbCgiX3ZlaSIpO2Z1bmN0aW9uIFhvKGUsdCxuLHMscj1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsbCl7Y29uc3QgaT1lW1NzXXx8KGVbU3NdPXt9KSxvPWlbdF07aWYocyYmbylvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZT1zO2Vsc2V7Y29uc3RbbCxjXT1abyh0KTtpZihzKXtjb25zdCBoPWlbdF0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWVsKHMscik7RnIoZSxsLGgsYyl9ZWxzZSBvJiYoem8oZSxsLG8sYyksaVt0XT12JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pZCAwKX19Y29uc3Qgd3M9Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBabyhlKXtsZXQgdDtpZih3cy50ZXN0KGUpKXt0PXt9O2xldCBzO2ZvcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3M9ZS5tYXRjaCh3cyk7KWU9ZS5zbGljZSgwLGUubGVuZ3RoLXNbMF0ubGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksdFtzWzBdLnRvTG93ZXJDYXNlKCldPSEwfXJldHVybltlWzJdPT09IjoiP2UucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlKDMpOkdlKGUuc2xpY2UoMikpLHRdfWxldCBnbj0wO2NvbnN0IFFvPVByb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlLnJlc29sdmUoKSxrbz0oKT0+Z258fChRby50aGVuKCgpPT5nbj0wKSxnbj1EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZS5ub3coKSk7ZnVuY3Rpb24gZWwoZSx0KXtjb25zdCBuPXM9PntpZighcy5fdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cylzLl92dHM9RGF0ZS5ub3coKTtlbHNlIGlmKHMuX3Z0czw9bi5hdHRhY2hlZCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuO0NlKHRsKHMsbi52YWx1ZSksdCw1LFtzXSl9O3JldHVybiBuLnZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1lLG4uYXR0YWNoZWQ9a28oKSxufWZ1bmN0aW9uIHRsKGUsdCl7aWYoRSh0KSl7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IG49ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGUuc3RvcEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW1lZGlhdGVQcm9wYWdhdGlvbj0oKT0+e24uY2FsbChlKSxlLl9zdG9wcGVkPSEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sdC5tYXAocz0+cj0+IXIuX3N0b3BwZWQmJnMmJnMocikpfWVsc2UgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0fWNvbnN0IFRzPWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPjk2JiZlLmNoYXJDb2RlQXQoMik8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMyxubD0oZSx0LG4scyxyLGkpPT57Y29uc3Qgbz1yPT09InN2ZyI7dD09PSJjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3MiP0JvKGUscyxvKTp0PT09InN0eWxlIj9HbyhlLG4scyk6V3QodCk/UG4odCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHxYbyhlLHQsbixzLGkpOih0WzBdPT09Ii4iPyh0PXQuc2xpY2UoMSksITApOnRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBdPT09Il4iPyh0PXQuc2xpY2UoMSksITEpOnNsKGUsdCxzLG8pKT8oeHMoZSx0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKSwhZS50YWdOYW1lLmluY2x1ZGVzKCItIikmJih0PT09InZhbHVlInx8dD09PSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2tlZCJ8fHQ9PT0ic2VsZWN0ZWQiKSYmeXMoZSx0LHMsbyxpLHQhPT0idmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlIikpOmUuX2lzVnVlQ0UmJigvW0EtWl0vLnRlc3QodCl8fCFKKHMpKT94cyhlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOZSh0KSxzLGksdCk6KHQ9PT0idHJ1ZS12YWx1ZSI/ZS5fdHJ1ZVZhbHVlPXM6dD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT0iZmFsc2UtdmFsdWUiJiYoZS5fZmFsc2VWYWx1ZT1zKSx5cyhlLHQscyxvKSl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBzbChlLHQsbixzKXtpZihzKXJldHVybiEhKHQ9PT0iaW5uZXJIVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNTCJ8fHQ9PT0idGV4dENvbnRlbnQifHx0IGluIGUmJlRzKHQpJiZSKG4pKTtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD09PSJzcGVsbGNoZWNrInx8dD09PSJkcmFnZ2FibGUifHx0PT09InRyYW5zbGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UifHx0PT09ImZvcm0ifHx0PT09Imxpc3QiJiZlLnRhZ05hbWU9PT0iSU5QVVQifCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8dD09PSJ0eXBlIiYmZS50YWdOYW1lPT09IlRFWFRBUkVBIilyZXR1cm4hMTtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD09PSJ3aWR0aCJ8fHQ9PT0iaGVpZ2h0Iil7Y29uc3Qgcj1lLnRhZ05hbWU7aWYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I9PT0iSU1HInx8cj09PSJWSURFTyJ8fHI9PT0iQ0FOVkFTInx8cj09PSJTT1VSQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFIilyZXR1cm4hMX1yZXR1cm4gVHModCkmJkoobik/ITE6dCBpbiBlfWNvbnN0IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz1lPT57Y29uc3QgdD1lLnByb3BzWyJvblVwZGF0ZTptb2RlbFZhbHVlIl18fCExJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztyZXR1cm4gRSh0KT9uPT5GdCh0LG4pOnR9LF9uPVN5bWJvbCgiX2Fzc2lnbiIpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybD17ZGVlcDohMCxjcmVhdGVkKGUsdCxuKXtlW19uXT1DcyhuKSxGcihlLCJjaGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmdlIiwoKT0+e2NvbnN0IHM9ZS5fbW9kZWxWYWx1ZSxyPWlsKGUpLGk9ZS5jaGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tlZCxvPWVbX25dO2lmKEUocykpe2NvbnN0IGw9RnMocyxyKSxjPWwhPT0tMTtpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoaSYmIWMpbyhzLmNvbmNhdChyKSk7ZWxzZSBpZighaSYmYyl7Y29uc3QgaD1bLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNdO2guc3BsaWNlKGwsMSksbyhoKX19ZWxzZSBpZihxdChzKSl7Y29uc3QgbD1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V3IFNldChzKTtpP2wuYWRkKHIpOmwuZGVsZXRlKHIpLG8obCl9ZWxzZSBvKERyKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLGkpKX0pfSxtb3VudGVkOnZzLGJlZm9yZVVwZGF0ZShlLHQsbil7ZVtfbl09Q3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4pLHZzKGUsdCxuKX19O2Z1bmN0aW9uIHZzKGUse3ZhbHVlOnQsb2xkVmFsdWU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ259LHMpe2UuX21vZGVsVmFsdWU9dDtsZXQgcjtpZihFKHQpKXI9RnModCxzLnBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcy52YWx1ZSk+LTE7ZWxzZSBpZihxdCh0KSlyPXQuaGFzKHMucHJvcHMudmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtlbHNle2lmKHQ9PT1uKXJldHVybjtyPVl0KHQsRHIoZSwhMCkpfWUuY2hlY2tlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QhPT1yJiYoZS5jaGVja2VkPXIpfWZ1bmN0aW9uIGlsKGUpe3JldHVybiJfdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlImluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBEcihlLHQpe2NvbnN0IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXQ/Il90cnVlVmFsdWUiOiJfZmFsc2VWYWx1ZSI7cmV0dXJuIG4gaW4gZT9lW25dJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzp0fWNvbnN0IG9sPXNlKHtwYXRjaFByb3A6bmx9LFVvKTtsZXQgT3M7ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGxsKCl7cmV0dXJuIE9zfHwoT3M9Y28ob2wpKX1jb25zdCBmbD0oLi4uZSk9PnsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgdD1sbCgpLmNyZWF0ZUFwcCguLi5lKSx7bW91bnQ6bn09dDtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QubW91bnQ9cz0+e2NvbnN0IHI9dWwocyk7aWYoIXIpcmV0dXJuO2NvbnN0IGk9dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuX2NvbXBvbmVudDshUihpKSYmIWkucmVuZGVyJiYhaS50ZW1wbGF0ZSYmKGkudGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBsYXRlPXIuaW5uZXJIVE1MKSxyLm5vZGVUeXBlPT09MSYmKHIudGV4dENvbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250PSIiKTtjb25zdCBvPW4ociwhMSxjbChyKSk7cmV0dXJuIHIgaW5zdGFuY2VvZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKCJ2LWNsb2FrIiksci5zZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKCJkYXRhLXYtYXBwIiwiIikpLG99LHR9O2Z1bmN0aW9uIGNsKGUpe2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4ic3ZnIjtpZih0eXBlb2YgTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudClyZXR1cm4ibWF0aG1sIn1mdW5jdGlvbiB1bChlKXtyZXR1cm4gSihlKT9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdW1lbnQucXVlcnlTZWxlY3RvcihlKTplfWNvbnN0IGFsPXtjbGFzczoiY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaW5lciBweS01In0sZGw9e2NsYXNzOiJ0ZXh0LWNlbnRlciBtYi01In0saGw9e2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzczoiY3VzdG9tLWNvbnRyb2wgY3VzdG9tLXN3aXRjaCBkLWlubGluZS1ibG9jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2sifSxwbD17Y2xhc3M6ImN1c3RvbS1jb250cm9sLWxhYmVsIG0tMiIsZm9yOiJiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGluZ1RvZ2dsZSJ9LGdsPXtjbGFzczoicm93In0sX2w9e2NsYXNzOiJjYXJkIGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZy10cmFuc3BhcmVudCBib3JkZXItMCBoLTEwMCJ9LG1sPXtjbGFzczoiY2FyZC1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29keSBib3JkZXItMCB0ZXh0LWNlbnRlciJ9LGJsPXtjbGFzczoiY2FyZC10aXRsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicifSx5bD17Y2xhc3M6ImNhcmQtcHJpY2UifSx4bD17Y2xhc3M6InRleHQtbXV0ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIn0sU2w9WyJpbm5lckhUTUwiXSx3bD17X19uYW1lOiJQcmljaW5nQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsc2V0dXAoZSl7Y29uc3QgdD1iaSghMSk7bGV0IG49SlNPTi5wYXJzZShhdG9iKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aW5kb3cuYXNvbmVEYXRhKSk7cmV0dXJuKHMscik9PihIdCgpLGhuKCJkaXYiLGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxbWSgiZGl2IixkbCxbclsxXXx8KHJbMV09WSgiaDIiLHtjbGFzczoibWItNCJ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiT3VyIFByaWNpbmciLC0xKSksWSgiZGl2IixobCxbTWkoWSgiaW5wdXQiLHt0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZToiY2hlY2tib3giLGNsYXNzOiJjdXN0b20tY29udHJvbC1pbnB1dCIsaWQ6ImInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxsaW5nVG9nZ2xlIiwib25VcGRhdGU6bW9kZWxWYWx1ZSI6clswXXx8KHJbMF09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9PnQudmFsdWU9aSl9LG51bGwsNTEyKSxbW3JsLHQudmFsdWVdXSksWSgibGFiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsIixwbCxmdCh0LnZhbHVlPyJZZWFybHkiOiJNb250aGx5IikrIiBCaWxsaW5nICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDEpXSldKSxZKCJkaXYiLGdsLFsoSHQoITApLGhuKHhlLG51bGwsR2koWnMobiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9PihIdCgpLGhuKCJkaXYiLHtjbGFzczoiY29sLW1kLTQgbWItNCIsa2V5OmkubicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWV9LFtZKCJkaXYiLF9sLFtZKCJkaXYiLG1sLFtZKCJoNCIsYmwsZnQoaS5uYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSksMSksWSgiaDIiLHlsLFtQcigiICQiK2Z0KHQudmFsdWU/aS55ZWFybHlQcmljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6aS5tb250aGx5UHJpY2UpKyIgIiwxKSxZKCJzbWFsbCIseGwsIi8iK2Z0KHQudicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlPyJ5ZWFyIjoibW9udGgiKSwxKV0pLHJbMl18fChyWzJdPVkoImhyIixudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxudWxsLC0xKSksWSgiZGl2Iix7Y2xhc3M6Imxpc3QtdW5zdHlsZWQiLGlubmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hUTUw6aS5mZWF0dXJlczB9LG51bGwsOCxTbCldKSxyWzNdfHwoclszXT1ZKCJkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2Iix7Y2xhc3M6ImNhcmQtZm9vdGVyIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50In0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFtZKCJidXR0b24iLHtjbGFzczoiYnRuIGJ0bi1vdXRsaW5lLWRhcmsgYnRuLWxnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3LTEwMCJ9LCJTZWxlY3QgUGxhbiIpXSwtMSkpXSldKSkpLDEyOCkpXSldKSl9fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVGw9e19fbmFtZToiQXBwIixzZXR1cChlKXtsZXQgdD1KU09OLnBhcnNlKGF0b2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHdpbmRvdy5hc29uZURhdGEpKTtyZXR1cm4gY29uc29sZS5sb2codCksKG4scyk9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4oSHQoKSx2byh3bCkpfX07ZmwoVGwpLm1vdW50KCIjIit3aW5kb3cuYXNvbmVJZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjQwMDIvd3MvZGlzdC9hc3NldHMvaW5kZXgtaTJEemNTQzcuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAxNzogeydlbic6IHsnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgJ2ZlYXR1cmVzJzogYidceDgwXHgwNFx4OTU0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMH0nCiAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4OTRceDhjXHRmaWVsZG1jZTBceDk0XHg4YyE8dWw+PGxpPm9uZSA8L2xpPjxsaT4nCiAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R3bzwvbGk+PHVsPlx4OTRzLicsCiAgICAgICAgICAgICAnbW9udGhseVByaWNlJzogMTAsCiAgICAgICAgICAgICAnbmFtZSc6ICdQbGFuIDAnLAogICAgICAgICAgICAgJ3llYXJseVByaWNlJzogMTAwfSwKICAgICAgJ2VuLVVTJzogeydTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAnZmVhdHVyZXMnOiBiJ1x4ODBceDA0XHg5NTRceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHg5NFx4OGNcdGZpZWxkbWNlMFx4OTRceDhjITx1bD48bGk+b25lIDwvbGk+PGxpPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHdvPC9saT48dWw+XHg5NHMuJywKICAgICAgICAgICAgICAgICdtb250aGx5UHJpY2UnOiAxMCwKICAgICAgICAgICAgICAgICduYW1lJzogJ1BsYW4gMCcsCiAgICAgICAgICAgICAgICAneWVhcmx5UHJpY2UnOiAxMDB9fSwKIDE4OiB7J2VuJzogeydTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAnZmVhdHVyZXMnOiBiJ1x4ODBceDA0XHg5NTRceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwfScKICAgICAgICAgICAgICAgICAgICAgICAgIGInXHg5NFx4OGNcdGZpZWxkbWNlMFx4OTRceDhjITx1bD48bGk+b25lIDwvbGk+PGxpPicKICAgICAgICAgICAgICAgICAgICAgICAgIGIndHdvPC9saT48dWw+XHg5NHMuJywKICAgICAgICAgICAgICdtb250aGx5UHJpY2UnOiAxMCwKICAgICAgICAgICAgICduYW1lJzogJ1BsYW4gMScsCiAgICAgICAgICAgICAneWVhcmx5UHJpY2UnOiAxMDB9LAogICAgICAnZW4tVVMnOiB7J1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICdmZWF0dXJlcyc6IGInXHg4MFx4MDRceDk1NFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDk0XHg4Y1x0ZmllbGRtY2UwXHg5NFx4OGMhPHVsPjxsaT5vbmUgPC9saT48bGk+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0d288L2xpPjx1bD5ceDk0cy4nLAogICAgICAgICAgICAgICAgJ21vbnRobHlQcmljZSc6IDEwLAogICAgICAgICAgICAgICAgJ25hbWUnOiAnUGxhbiAxJywKICAgICAgICAgICAgICAgICd5ZWFybHlQcmljZSc6IDEwMH19LAogMTk6IHsnZW4nOiB7J1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICdmZWF0dXJlcyc6IGInXHg4MFx4MDRceDk1NFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDB9JwogICAgICAgICAgICAgICAgICAgICAgICAgYidceDk0XHg4Y1x0ZmllbGRtY2UwXHg5NFx4OGMhPHVsPjxsaT5vbmUgPC9saT48bGk+JwogICAgICAgICAgICAgICAgICAgICAgICAgYid0d288L2xpPjx1bD5ceDk0cy4nLAogICAgICAgICAgICAgJ21vbnRobHlQcmljZSc6IDEwLAogICAgICAgICAgICAgJ25hbWUnOiAnUGxhbiAyJywKICAgICAgICAgICAgICd5ZWFybHlQcmljZSc6IDEwMH0sCiAgICAgICdlbi1VUyc6IHsnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgJ2ZlYXR1cmVzJzogYidceDgwXHgwNFx4OTU0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4OTRceDhjXHRmaWVsZG1jZTBceDk0XHg4YyE8dWw+PGxpPm9uZSA8L2xpPjxsaT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R3bzwvbGk+PHVsPlx4OTRzLicsCiAgICAgICAgICAgICAgICAnbW9udGhseVByaWNlJzogMTAsCiAgICAgICAgICAgICAgICAnbmFtZSc6ICdQbGFuIDInLAogICAgICAgICAgICAgICAgJ3llYXJseVByaWNlJzogMTAwfX0sCiAyMDogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVFbmdpbmUgT25cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVCYXNlIF9QYWdlUGF0aF9cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVSdWxlIF5pbmRleFxcLnBocCQgLSBbTF1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAnUmV3cml0ZVJ1bGUgLiBfUGFnZVBhdGhfaW5kZXgucGhwIFtMXVxuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJy5odGFjY2VzcycsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlRW5naW5lIE9uXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlQmFzZSBfUGFnZVBhdGhfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlUnVsZSBeaW5kZXhcXC5waHAkIC0gW0xdXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVSdWxlIC4gX1BhZ2VQYXRoX2luZGV4LnBocCBbTF1cbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuaHRhY2Nlc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX19Cg==
This is section title.
$
19
/month
Basic Plan
Ultimate Features
Responsive Ready
Visual Composer Included
24/7 Support System
Choose Plan
$
29
/month
Regular Plan
Ultimate Features
Responsive Ready
Visual Composer Included
24/7 Support System
Choose Plan
$
39
/month
Premium Plan
Ultimate Features
Responsive Ready
Visual Composer Included
24/7 Support System
Choose Plan
Page,idxx-xx,oneColumn,
oneColumn/id13-33,Click to clipboard
ezE6IHsnZW4nOiB7J1NsaWRlVHlwZSc6ICdTdGFydE1zZycsCiAgICAgICAgICAgICdkYXRhJzogJzxoMiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+VGhpcyBpcyBzZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAndGl0bGUuPC9oMj48cD4mbmJzcDs8L3A+PHA+Jm5ic3A7PC9wPid9LAogICAgICdlbi1VUyc6IHsnU2xpZGVUeXBlJzogJ1N0YXJ0TXNnJywKICAgICAgICAgICAgICAgJ2RhdGEnOiAnPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij5UaGlzIGlzIHNlY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICd0aXRsZS48L2gyPjxwPiZuYnNwOzwvcD48cD4mbmJzcDs8L3A+J319LAogMjogeydlbic6IHsnU2xpZGVUeXBlJzogJ1RpbnlNQ0UnLAogICAgICAgICAgICAnYUltYWdlJzogJycsCiAgICAgICAgICAgICdhTGFiZWwnOiAnJywKICAgICAgICAgICAgJ2NvZGUnOiAnJywKICAgICAgICAgICAgJ2NvZGVJbmMnOiAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjIGNvbnRlbnQgYmV0d2VlbiBzdHlsZUluYyB0YWcgd2lsbCBiZSBhZGQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlIHRoZSBjbG9zaW5nIGhlYWQgdGFnc1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlSW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gc3R5bGVJbmMgSW5jbHVkZWQgZnJvbSBfSURfIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgQGltcG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3VybCgiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bzozMDAsNDAwLDUwMCw3MDAiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAgIC5yb3cge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmNhcmQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgYm9yZGVyOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgYm9yZGVyLXJhZGl1czogMHB4O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCAwcHggMCByZ2JhKDAsIDAsIDAsICcKICAgICAgICAgICAgICAgICAgICAgICAnMC4wOCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBib3gtc2hhZG93OiAwIDNweCAwcHggMCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1pbi1vdXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBwYWRkaW5nOiAyLjI1cmVtIDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuY2FyZDphZnRlciB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBjb250ZW50OiAiIjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6IDVweDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIGJhY2tncm91bmQtY29sb3I6ICM1N2UyYjI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2l0aW9uOiAwLjVzO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuY2FyZDpob3ZlciB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDIwcHggMzVweCAwIHJnYmEoMCwgMCwgMCwgJwogICAgICAgICAgICAgICAgICAgICAgICcwLjA4KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIGJveC1zaGFkb3c6IDAgMjBweCAzNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA4KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmNhcmQ6aG92ZXI6YWZ0ZXIge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6IDEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5jYXJkIC5jYXJkLWhlYWRlciB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIHBhZGRpbmctbGVmdDogMnJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIGJvcmRlci1ib3R0b206IDBweDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmNhcmQgLmNhcmQtdGl0bGUge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmNhcmQgLmNhcmQtYmxvY2sge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgcGFkZGluZy10b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5jYXJkIC5saXN0LWdyb3VwLWl0ZW0ge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgYm9yZGVyOiAwcHg7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBwYWRkaW5nOiAwLjI1cmVtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgY29sb3I6IF9Db2xvckhfO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC13ZWlnaHQ6IDMwMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmRpc3BsYXktMiB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBmb250LXNpemU6IDdyZW07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBsZXR0ZXItc3BhY2luZzogLTAuNXJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmRpc3BsYXktMiAuY3VycmVuY3kge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC1zaXplOiAyLjc1cmVtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC13ZWlnaHQ6IDQwMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogLTQ1cHg7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBsZXR0ZXItc3BhY2luZzogMHB4O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuZGlzcGxheS0yIC5wZXJpb2Qge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC1zaXplOiAxcmVtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgY29sb3I6ICNiM2IzYjM7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBsZXR0ZXItc3BhY2luZzogMHB4O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuYnRuIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBmb250LXNpemU6IDAuNzVyZW07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBmb250LXdlaWdodDogNTAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgY29sb3I6ICNhNmE2YTY7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBib3JkZXItcmFkaXVzOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgbGV0dGVyLXNwYWNpbmc6IDFweDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmJ0bi1ncmFkaWVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuYnRuLWdyYWRpZW50OmhvdmVyIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIGNvbG9yOiB3aGl0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIGJhY2tncm91bmQtY29sb3I6ICM1N2UyYjI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlSW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc2NyaXB0SW5jIHRhZyB3aWxsIGJlIGFkZCB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmUgdGhlIGNsb3NpbmcgYm9keSB0YWdzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0SW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gc2NyaXB0SW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9zY3JpcHRJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyBFbmRcclxuJywKICAgICAgICAgICAgJ2NvbXBvc2VySlNPTic6ICcnLAogICAgICAgICAgICAnZHluYW1pY0Jsb2NrJzogJycsCiAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAogICAgICAgICAgICAncGhwRmlsZSc6ICcnLAogICAgICAgICAgICAncGhwRmlsZUEnOiAnJywKICAgICAgICAgICAgJ3BocEZpbGVCJzogJycsCiAgICAgICAgICAgICd0Y29kZSc6ICc8ZGl2IGNsYXNzPSJyb3cgZmxleC1pdGVtcy14cy1taWRkbGUgJwogICAgICAgICAgICAgICAgICAgICAnZmxleC1pdGVtcy14cy1jZW50ZXIiPjwhLS0gVGFibGUgIzEgIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjb2wteHMtMTIgY29sLWxnLTQiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHRleHQtY2VudGVyIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8aDMgY2xhc3M9ImRpc3BsYXktMiI+PHNwYW4gJwogICAgICAgICAgICAgICAgICAgICAnY2xhc3M9ImN1cnJlbmN5Ij4kPC9zcGFuPjE5PHNwYW4gJwogICAgICAgICAgICAgICAgICAgICAnY2xhc3M9InBlcmlvZCI+L21vbnRoPC9zcGFuPjwvaDM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkLWJsb2NrIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGg0IGNsYXNzPSJjYXJkLXRpdGxlIj5CYXNpYyBQbGFuPC9oND5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPSJsaXN0LWdyb3VwIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPlVsdGltYXRlIEZlYXR1cmVzPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPlJlc3BvbnNpdmUgUmVhZHk8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+VmlzdWFsIENvbXBvc2VyICcKICAgICAgICAgICAgICAgICAgICAgJ0luY2x1ZGVkPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjI0LzcgU3VwcG9ydCBTeXN0ZW08L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8L3VsPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1ncmFkaWVudCAgbXQtMiIgaHJlZj0iIyI+Q2hvb3NlICcKICAgICAgICAgICAgICAgICAgICAgJ1BsYW48L2E+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPCEtLSBUYWJsZSAjMSAgLS0+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNvbC14cy0xMiBjb2wtbGctNCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQgdGV4dC1jZW50ZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxoMyBjbGFzcz0iZGlzcGxheS0yIj48c3BhbiAnCiAgICAgICAgICAgICAgICAgICAgICdjbGFzcz0iY3VycmVuY3kiPiQ8L3NwYW4+Mjk8c3BhbiAnCiAgICAgICAgICAgICAgICAgICAgICdjbGFzcz0icGVyaW9kIj4vbW9udGg8L3NwYW4+PC9oMz5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQtYmxvY2siPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8aDQgY2xhc3M9ImNhcmQtdGl0bGUiPlJlZ3VsYXIgUGxhbjwvaDQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz0ibGlzdC1ncm91cCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5VbHRpbWF0ZSBGZWF0dXJlczwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5SZXNwb25zaXZlIFJlYWR5PC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPlZpc3VhbCBDb21wb3NlciAnCiAgICAgICAgICAgICAgICAgICAgICdJbmNsdWRlZDwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj4yNC83IFN1cHBvcnQgU3lzdGVtPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC91bD5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tZ3JhZGllbnQgbXQtMiIgaHJlZj0iIyI+Q2hvb3NlICcKICAgICAgICAgICAgICAgICAgICAgJ1BsYW48L2E+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPCEtLSBUYWJsZSAjMSAgLS0+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNvbC14cy0xMiBjb2wtbGctNCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQgdGV4dC1jZW50ZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxoMyBjbGFzcz0iZGlzcGxheS0yIj48c3BhbiAnCiAgICAgICAgICAgICAgICAgICAgICdjbGFzcz0iY3VycmVuY3kiPiQ8L3NwYW4+Mzk8c3BhbiAnCiAgICAgICAgICAgICAgICAgICAgICdjbGFzcz0icGVyaW9kIj4vbW9udGg8L3NwYW4+PC9oMz5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQtYmxvY2siPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8aDQgY2xhc3M9ImNhcmQtdGl0bGUiPlByZW1pdW0gUGxhbjwvaDQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz0ibGlzdC1ncm91cCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5VbHRpbWF0ZSBGZWF0dXJlczwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5SZXNwb25zaXZlIFJlYWR5PC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPlZpc3VhbCBDb21wb3NlciAnCiAgICAgICAgICAgICAgICAgICAgICdJbmNsdWRlZDwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj4yNC83IFN1cHBvcnQgU3lzdGVtPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC91bD5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tZ3JhZGllbnQgIG10LTIiIGhyZWY9IiMiPkNob29zZSAnCiAgICAgICAgICAgICAgICAgICAgICdQbGFuPC9hPjwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicsCiAgICAgICAgICAgICd2Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J1NsaWRlVHlwZSc6ICdUaW55TUNFJywKICAgICAgICAgICAgICAgJ2FJbWFnZSc6ICcnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJycsCiAgICAgICAgICAgICAgICdjb2RlJzogJycsCiAgICAgICAgICAgICAgICdjb2RlSW5jJzogJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc3R5bGVJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBoZWFkIHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZUluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8IS0tIHN0eWxlSW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIEBpbXBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAsNzAwIik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gICAucm93IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5jYXJkIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGJvcmRlcjogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGJvcmRlci1yYWRpdXM6IDBweDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggMHB4IDAgcmdiYSgwLCAwLCAwLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzAuMDgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgYm94LXNoYWRvdzogMCAzcHggMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjA4KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcGFkZGluZzogMi4yNXJlbSAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmNhcmQ6YWZ0ZXIge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgY29udGVudDogIiI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6IDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiA1cHg7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTdlMmIyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNpdGlvbjogMC41cztcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmNhcmQ6aG92ZXIge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIC13ZWJraXQtYm94LXNoYWRvdzogMCAyMHB4IDM1cHggMCByZ2JhKDAsIDAsIDAsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAnMC4wOCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBib3gtc2hhZG93OiAwIDIwcHggMzVweCAwIHJnYmEoMCwgMCwgMCwgMC4wOCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5jYXJkOmhvdmVyOmFmdGVyIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuY2FyZCAuY2FyZC1oZWFkZXIge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwYWRkaW5nLWxlZnQ6IDJyZW07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBib3JkZXItYm90dG9tOiAwcHg7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5jYXJkIC5jYXJkLXRpdGxlIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5jYXJkIC5jYXJkLWJsb2NrIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBhZGRpbmctdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuY2FyZCAubGlzdC1ncm91cC1pdGVtIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGJvcmRlcjogMHB4O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcGFkZGluZzogMC4yNXJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGNvbG9yOiBfQ29sb3JIXztcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGZvbnQtd2VpZ2h0OiAzMDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5kaXNwbGF5LTIge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC1zaXplOiA3cmVtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGV0dGVyLXNwYWNpbmc6IC0wLjVyZW07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5kaXNwbGF5LTIgLmN1cnJlbmN5IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGZvbnQtc2l6ZTogMi43NXJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IC00NXB4O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGV0dGVyLXNwYWNpbmc6IDBweDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmRpc3BsYXktMiAucGVyaW9kIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGZvbnQtc2l6ZTogMXJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGNvbG9yOiAjYjNiM2IzO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGV0dGVyLXNwYWNpbmc6IDBweDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmJ0biB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC1zaXplOiAwLjc1cmVtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgZm9udC13ZWlnaHQ6IDUwMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGNvbG9yOiAjYTZhNmE2O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgYm9yZGVyLXJhZGl1czogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBhZGRpbmc6IDAuNzVyZW0gMS4yNXJlbTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxldHRlci1zcGFjaW5nOiAxcHg7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5idG4tZ3JhZGllbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcyBlYXNlLWluLW91dDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmJ0bi1ncmFkaWVudDpob3ZlciB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBjb2xvcjogd2hpdGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTdlMmIyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZUluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29udGVudCBiZXR3ZWVuIHNjcmlwdEluYyB0YWcgd2lsbCBiZSBhZGQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlIHRoZSBjbG9zaW5nIGJvZHkgdGFnc1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNjcmlwdEluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8IS0tIHNjcmlwdEluYyBJbmNsdWRlZCBmcm9tIF9JRF8gLS0+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNjcmlwdD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8L3NjcmlwdD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc2NyaXB0SW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgRW5kXHJcbicsCiAgICAgICAgICAgICAgICdjb21wb3NlckpTT04nOiAnJywKICAgICAgICAgICAgICAgJ2R5bmFtaWNCbG9jayc6ICcnLAogICAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKICAgICAgICAgICAgICAgJ3BocEZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3BocEZpbGVBJzogJycsCiAgICAgICAgICAgICAgICdwaHBGaWxlQic6ICcnLAogICAgICAgICAgICAgICAndGNvZGUnOiAnPGRpdiBjbGFzcz0icm93IGZsZXgtaXRlbXMteHMtbWlkZGxlICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsZXgtaXRlbXMteHMtY2VudGVyIj48IS0tIFRhYmxlICMxICAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iY29sLXhzLTEyIGNvbC1sZy00Ij5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iY2FyZCB0ZXh0LWNlbnRlciI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGgzIGNsYXNzPSJkaXNwbGF5LTIiPjxzcGFuICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzPSJjdXJyZW5jeSI+JDwvc3Bhbj4xOTxzcGFuICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzPSJwZXJpb2QiPi9tb250aDwvc3Bhbj48L2gzPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iY2FyZC1ibG9jayI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxoNCBjbGFzcz0iY2FyZC10aXRsZSI+QmFzaWMgUGxhbjwvaDQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz0ibGlzdC1ncm91cCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5VbHRpbWF0ZSBGZWF0dXJlczwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5SZXNwb25zaXZlIFJlYWR5PC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPlZpc3VhbCBDb21wb3NlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICdJbmNsdWRlZDwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj4yNC83IFN1cHBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAnU3lzdGVtPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC91bD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tZ3JhZGllbnQgIG10LTIiIGhyZWY9IiMiPkNob29zZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdQbGFuPC9hPjwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gVGFibGUgIzEgIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjb2wteHMtMTIgY29sLWxnLTQiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHRleHQtY2VudGVyIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8aDMgY2xhc3M9ImRpc3BsYXktMiI+PHNwYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9ImN1cnJlbmN5Ij4kPC9zcGFuPjI5PHNwYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9InBlcmlvZCI+L21vbnRoPC9zcGFuPjwvaDM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkLWJsb2NrIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGg0IGNsYXNzPSJjYXJkLXRpdGxlIj5SZWd1bGFyIFBsYW48L2g0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9Imxpc3QtZ3JvdXAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+VWx0aW1hdGUgRmVhdHVyZXM8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+UmVzcG9uc2l2ZSBSZWFkeTwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5WaXN1YWwgQ29tcG9zZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAnSW5jbHVkZWQ8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+MjQvNyBTdXBwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ1N5c3RlbTwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvdWw+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWdyYWRpZW50IG10LTIiIGhyZWY9IiMiPkNob29zZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdQbGFuPC9hPjwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gVGFibGUgIzEgIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjb2wteHMtMTIgY29sLWxnLTQiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHRleHQtY2VudGVyIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8aDMgY2xhc3M9ImRpc3BsYXktMiI+PHNwYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9ImN1cnJlbmN5Ij4kPC9zcGFuPjM5PHNwYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9InBlcmlvZCI+L21vbnRoPC9zcGFuPjwvaDM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkLWJsb2NrIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGg0IGNsYXNzPSJjYXJkLXRpdGxlIj5QcmVtaXVtIFBsYW48L2g0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9Imxpc3QtZ3JvdXAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+VWx0aW1hdGUgRmVhdHVyZXM8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+UmVzcG9uc2l2ZSBSZWFkeTwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj5WaXN1YWwgQ29tcG9zZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAnSW5jbHVkZWQ8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+MjQvNyBTdXBwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ1N5c3RlbTwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvdWw+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWdyYWRpZW50ICBtdC0yIiBocmVmPSIjIj5DaG9vc2UgJwogICAgICAgICAgICAgICAgICAgICAgICAnUGxhbjwvYT48L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nLAogICAgICAgICAgICAgICAndmNvZGUnOiAnJ319fQo=
Page,idxx-xx,v3_price,
v3_price/id15-41,Click to clipboard
ezc6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29udGVudCc6IGInPCFkb2N0eXBlIGh0bWw+XG48aHRtbCBsYW5nPSJlbiI+XG4gIDxoZWFkPlxuICAgIDxtJwogICAgICAgICAgICAgICAgICAgICAgIGInZXRhIGNoYXJzZXQ9IlVURi04IiAvPlxuICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW0nCiAgICAgICAgICAgICAgICAgICAgICAgYidhZ2Uvc3ZnK3htbCIgaHJlZj0iL3ZpdGUuc3ZnIiAvPlxuICAgIDxtZXRhIG5hbWU9InZpZScKICAgICAgICAgICAgICAgICAgICAgICBiJ3dwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4nCiAgICAgICAgICAgICAgICAgICAgICAgYicwIiAvPlxuICAgIDx0aXRsZT5WaXRlICsgVnVlPC90aXRsZT5cbiAgICA8c2NyaXB0IHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgYic9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYXNzZXRzL2luZGV4LWkyRHpjU0M3LmpzJwogICAgICAgICAgICAgICAgICAgICAgIGInIj48L3NjcmlwdD5cbiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luIGgnCiAgICAgICAgICAgICAgICAgICAgICAgYidyZWY9Ii9hc3NldHMvaW5kZXgtQ2JKRV80dDIuY3NzIj5cbiAgPC9oZWFkPlxuICA8Ym9keT4nCiAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICA8ZGl2IGlkPSJhcHAiPjwvZGl2PlxuICA8L2JvZHk+XG48L2h0bWw+XG4nLAogICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC9pbmRleC5odG1sJywKICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29udGVudCc6IGInPCFkb2N0eXBlIGh0bWw+XG48aHRtbCBsYW5nPSJlbiI+XG4gIDxoZWFkPlxuICAgIDxtJwogICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRhIGNoYXJzZXQ9IlVURi04IiAvPlxuICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL3ZpdGUuc3ZnIiAvPlxuICAgIDxtZXRhIG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYWwtc2NhbGU9MS4wIiAvPlxuICAgIDx0aXRsZT5WaXRlICsgVnVlPC90aXRsZT5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzL2luZGV4LWkyRHpjU0M3LmpzIj48L3NjcmlwdD5cbiAgICA8bGluayByZWw9InMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luIGhyZWY9Ii9hc3NldHMvaW5kZXgtQ2JKRV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgYic0dDIuY3NzIj5cbiAgPC9oZWFkPlxuICA8Ym9keT5cbiAgICA8ZGl2IGlkPSJhcHAiPjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgYicvZGl2PlxuICA8L2JvZHk+XG48L2h0bWw+XG4nLAogICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC9pbmRleC5odG1sJywKICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiA4OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ1BITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2knCiAgICAgICAgICAgICAgICAgICAgICAgYidJSGh0Ykc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hzJwogICAgICAgICAgICAgICAgICAgICAgIGInYVc1cklpQmhjbWxoTFdocFpHUmxiajBpZEhKMVpTSWdjbTlzWlQwaWFXMW5JaUJqYkdGeicKICAgICAgICAgICAgICAgICAgICAgICBiJ2N6MGlhV052Ym1sbWVTQnBZMjl1YVdaNUxTMXNiMmR2Y3lJZ2QybGtkR2c5SWpNeExqZzQnCiAgICAgICAgICAgICAgICAgICAgICAgYidJaUJvWldsbmFIUTlJak15SWlCd2NtVnpaWEoyWlVGemNHVmpkRkpoZEdsdlBTSjRUV2xrJwogICAgICAgICAgICAgICAgICAgICAgIGInV1UxcFpDQnRaV1YwSWlCMmFXVjNRbTk0UFNJd0lEQWdNalUySURJMU55SStQR1JsWm5NKycKICAgICAgICAgICAgICAgICAgICAgICBiJ1BHeHBibVZoY2tkeVlXUnBaVzUwSUdsa1BTSkpZMjl1YVdaNVNXUXhPREV6TURnNFptVXgnCiAgICAgICAgICAgICAgICAgICAgICAgYidabUpqTURGbVlqUTJOaUlnZURFOUlpMHVPREk0SlNJZ2VESTlJalUzTGpZek5pVWlJSGt4JwogICAgICAgICAgICAgICAgICAgICAgIGInUFNJM0xqWTFNaVVpSUhreVBTSTNPQzQwTVRFbElqNDhjM1J2Y0NCdlptWnpaWFE5SWpBbCcKICAgICAgICAgICAgICAgICAgICAgICBiJ0lpQnpkRzl3TFdOdmJHOXlQU0lqTkRGRU1VWkdJajQ4TDNOMGIzQStQSE4wYjNBZ2IyWm0nCiAgICAgICAgICAgICAgICAgICAgICAgYidjMlYwUFNJeE1EQWxJaUJ6ZEc5d0xXTnZiRzl5UFNJalFrUXpORVpGSWo0OEwzTjBiM0ErJwogICAgICAgICAgICAgICAgICAgICAgIGInUEM5c2FXNWxZWEpIY21Ga2FXVnVkRDQ4YkdsdVpXRnlSM0poWkdsbGJuUWdhV1E5SWtsaicKICAgICAgICAgICAgICAgICAgICAgICBiJ2IyNXBabmxKWkRFNE1UTXdPRGhtWlRGbVltTXdNV1ppTkRZM0lpQjRNVDBpTkRNdU16YzInCiAgICAgICAgICAgICAgICAgICAgICAgYidKU0lnZURJOUlqVXdMak14TmlVaUlIa3hQU0l5TGpJME1pVWlJSGt5UFNJNE9TNHdNeVVpJwogICAgICAgICAgICAgICAgICAgICAgIGInUGp4emRHOXdJRzltWm5ObGREMGlNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTkdSa1ZCT0RNaScKICAgICAgICAgICAgICAgICAgICAgICBiJ1Bqd3ZjM1J2Y0Q0OGMzUnZjQ0J2Wm1aelpYUTlJamd1TXpNekpTSWdjM1J2Y0MxamIyeHYnCiAgICAgICAgICAgICAgICAgICAgICAgYidjajBpSTBaR1JFUXpOU0krUEM5emRHOXdQanh6ZEc5d0lHOW1abk5sZEQwaU1UQXdKU0lnJwogICAgICAgICAgICAgICAgICAgICAgIGInYzNSdmNDMWpiMnh2Y2owaUkwWkdRVGd3TUNJK1BDOXpkRzl3UGp3dmJHbHVaV0Z5UjNKaCcKICAgICAgICAgICAgICAgICAgICAgICBiJ1pHbGxiblErUEM5a1pXWnpQanh3WVhSb0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbWVVbGsnCiAgICAgICAgICAgICAgICAgICAgICAgYidNVGd4TXpBNE9HWmxNV1ppWXpBeFptSTBOallwSWlCa1BTSk5NalUxTGpFMU15QXpOeTQ1JwogICAgICAgICAgICAgICAgICAgICAgIGInTXpoTU1UTTBMamc1TnlBeU5USXVPVGMyWXkweUxqUTRNeUEwTGpRMExUZ3VPRFl5SURRdScKICAgICAgICAgICAgICAgICAgICAgICBiJ05EWTJMVEV4TGpNNE1pNHdORGhNTGpnM05TQXpOeTQ1TlRoakxUSXVOelEyTFRRdU9ERTAnCiAgICAgICAgICAgICAgICAgICAgICAgYidJREV1TXpjeExURXdMalkwTmlBMkxqZ3lOeTA1TGpZM2JERXlNQzR6T0RVZ01qRXVOVEUzJwogICAgICAgICAgICAgICAgICAgICAgIGInWVRZdU5UTTNJRFl1TlRNM0lEQWdNQ0F3SURJdU16SXlMUzR3TURSc01URTNMamcyTnkweScKICAgICAgICAgICAgICAgICAgICAgICBiJ01TNDBPRE5qTlM0ME16Z3RMams1TVNBNUxqVTNOQ0EwTGpjNU5pQTJMamczTnlBNUxqWXknCiAgICAgICAgICAgICAgICAgICAgICAgYidXaUkrUEM5d1lYUm9Qanh3WVhSb0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbWVVbGtNVGd4JwogICAgICAgICAgICAgICAgICAgICAgIGInTXpBNE9HWmxNV1ppWXpBeFptSTBOamNwSWlCa1BTSk5NVGcxTGpRek1pNHdOak5NT1RZdScKICAgICAgICAgICAgICAgICAgICAgICBiJ05EUWdNVGN1TlRBeFlUTXVNalk0SURNdU1qWTRJREFnTUNBd0xUSXVOak0wSURNdU1ERTAnCiAgICAgICAgICAgICAgICAgICAgICAgYidiQzAxTGpRM05DQTVNaTQwTlRaaE15NHlOamdnTXk0eU5qZ2dNQ0F3SURBZ015NDVPVGNnJwogICAgICAgICAgICAgICAgICAgICAgIGInTXk0ek56aHNNalF1TnpjM0xUVXVOekU0WXpJdU16RTRMUzQxTXpVZ05DNDBNVE1nTVM0MScKICAgICAgICAgICAgICAgICAgICAgICBiJ01EY2dNeTQ1TXpZZ015NDRNemhzTFRjdU16WXhJRE0yTGpBME4yTXRMalE1TlNBeUxqUXknCiAgICAgICAgICAgICAgICAgICAgICAgYidOaUF4TGpjNE1pQTBMalVnTkM0eE5URWdNeTQzT0d3eE5TNHpNRFF0TkM0Mk5EbGpNaTR6JwogICAgICAgICAgICAgICAgICAgICAgIGInTnpJdExqY3lJRFF1TmpVeUlERXVNellnTkM0eE5TQXpMamM0T0d3dE1URXVOams0SURVMicKICAgICAgICAgICAgICAgICAgICAgICBiJ0xqWXlNV010TGpjek1pQXpMalUwTWlBekxqazNPU0ExTGpRM015QTFMamswTXlBeUxqUXonCiAgICAgICAgICAgICAgICAgICAgICAgYidOMnd4TGpNeE15MHlMakF5T0d3M01pNDFNVFl0TVRRMExqY3lZekV1TWpFMUxUSXVOREl6JwogICAgICAgICAgICAgICAgICAgICAgIGInTFM0NE9DMDFMakU0TmkwekxqVTBMVFF1TmpjeWJDMHlOUzQxTURVZ05DNDVNakpqTFRJdScKICAgICAgICAgICAgICAgICAgICAgICBiJ016azJMalEyTWkwMExqUXpOUzB4TGpjM0xUTXVOelU1TFRRdU1URTBiREUyTGpZME5pMDEnCiAgICAgICAgICAgICAgICAgICAgICAgYidOeTQzTURWakxqWTNOeTB5TGpNMUxURXVNemN0TkM0MU9ETXRNeTQzTmprdE5DNHhNVE5hJwogICAgICAgICAgICAgICAgICAgICAgIGInSWo0OEwzQmhkR2crUEM5emRtYysnLAogICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC92aXRlLnN2ZycsCiAgICAgICAgICAgICdJc1RleHQnOiAwLAogICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ1BITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5eicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RtY2lJSGh0Ykc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09UazVMM2hzYVc1cklpQmhjbWxoTFdocFpHUmxiajBpZEhKMVpTSWdjbTlzWlQwaScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FXMW5JaUJqYkdGemN6MGlhV052Ym1sbWVTQnBZMjl1YVdaNUxTMXNiMmR2Y3lJZycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QybGtkR2c5SWpNeExqZzRJaUJvWldsbmFIUTlJak15SWlCd2NtVnpaWEoyWlVGeicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NHVmpkRkpoZEdsdlBTSjRUV2xrV1UxcFpDQnRaV1YwSWlCMmFXVjNRbTk0UFNJdycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lEQWdNalUySURJMU55SStQR1JsWm5NK1BHeHBibVZoY2tkeVlXUnBaVzUwSUdsaycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BTSkpZMjl1YVdaNVNXUXhPREV6TURnNFptVXhabUpqTURGbVlqUTJOaUlnZURFOScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lpMHVPREk0SlNJZ2VESTlJalUzTGpZek5pVWlJSGt4UFNJM0xqWTFNaVVpSUhreScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BTSTNPQzQwTVRFbElqNDhjM1J2Y0NCdlptWnpaWFE5SWpBbElpQnpkRzl3TFdOdicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JHOXlQU0lqTkRGRU1VWkdJajQ4TDNOMGIzQStQSE4wYjNBZ2IyWm1jMlYwUFNJeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01EQWxJaUJ6ZEc5d0xXTnZiRzl5UFNJalFrUXpORVpGSWo0OEwzTjBiM0ErUEM5cycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FXNWxZWEpIY21Ga2FXVnVkRDQ4YkdsdVpXRnlSM0poWkdsbGJuUWdhV1E5SWtsaicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2IyNXBabmxKWkRFNE1UTXdPRGhtWlRGbVltTXdNV1ppTkRZM0lpQjRNVDBpTkRNdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016YzJKU0lnZURJOUlqVXdMak14TmlVaUlIa3hQU0l5TGpJME1pVWlJSGt5UFNJNCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09TNHdNeVVpUGp4emRHOXdJRzltWm5ObGREMGlNQ1VpSUhOMGIzQXRZMjlzYjNJOScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lpTkdSa1ZCT0RNaVBqd3ZjM1J2Y0Q0OGMzUnZjQ0J2Wm1aelpYUTlJamd1TXpNeicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0pTSWdjM1J2Y0MxamIyeHZjajBpSTBaR1JFUXpOU0krUEM5emRHOXdQanh6ZEc5dycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lHOW1abk5sZEQwaU1UQXdKU0lnYzNSdmNDMWpiMnh2Y2owaUkwWkdRVGd3TUNJKycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BDOXpkRzl3UGp3dmJHbHVaV0Z5UjNKaFpHbGxiblErUEM5a1pXWnpQanh3WVhSbycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbWVVbGtNVGd4TXpBNE9HWmxNV1ppWXpBeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ptSTBOallwSWlCa1BTSk5NalUxTGpFMU15QXpOeTQ1TXpoTU1UTTBMamc1TnlBeScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05USXVPVGMyWXkweUxqUTRNeUEwTGpRMExUZ3VPRFl5SURRdU5EWTJMVEV4TGpNNCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pNHdORGhNTGpnM05TQXpOeTQ1TlRoakxUSXVOelEyTFRRdU9ERTBJREV1TXpjeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xURXdMalkwTmlBMkxqZ3lOeTA1TGpZM2JERXlNQzR6T0RVZ01qRXVOVEUzWVRZdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UTTNJRFl1TlRNM0lEQWdNQ0F3SURJdU16SXlMUzR3TURSc01URTNMamcyTnkweScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01TNDBPRE5qTlM0ME16Z3RMams1TVNBNUxqVTNOQ0EwTGpjNU5pQTJMamczTnlBNScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xqWXlXaUkrUEM5d1lYUm9Qanh3WVhSb0lHWnBiR3c5SW5WeWJDZ2pTV052Ym1sbScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VVbGtNVGd4TXpBNE9HWmxNV1ppWXpBeFptSTBOamNwSWlCa1BTSk5NVGcxTGpReicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pNHdOak5NT1RZdU5EUWdNVGN1TlRBeFlUTXVNalk0SURNdU1qWTRJREFnTUNBdycKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xUSXVOak0wSURNdU1ERTBiQzAxTGpRM05DQTVNaTQwTlRaaE15NHlOamdnTXk0eScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05qZ2dNQ0F3SURBZ015NDVPVGNnTXk0ek56aHNNalF1TnpjM0xUVXVOekU0WXpJdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016RTRMUzQxTXpVZ05DNDBNVE1nTVM0MU1EY2dNeTQ1TXpZZ015NDRNemhzTFRjdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016WXhJRE0yTGpBME4yTXRMalE1TlNBeUxqUXlOaUF4TGpjNE1pQTBMalVnTkM0eCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05URWdNeTQzT0d3eE5TNHpNRFF0TkM0Mk5EbGpNaTR6TnpJdExqY3lJRFF1TmpVeScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lERXVNellnTkM0eE5TQXpMamM0T0d3dE1URXVOams0SURVMkxqWXlNV010TGpjeicKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pQXpMalUwTWlBekxqazNPU0ExTGpRM015QTFMamswTXlBeUxqUXpOMnd4TGpNeCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ015MHlMakF5T0d3M01pNDFNVFl0TVRRMExqY3lZekV1TWpFMUxUSXVOREl6TFM0NCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09DMDFMakU0TmkwekxqVTBMVFF1TmpjeWJDMHlOUzQxTURVZ05DNDVNakpqTFRJdScKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ016azJMalEyTWkwMExqUXpOUzB4TGpjM0xUTXVOelU1TFRRdU1URTBiREUyTGpZMCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05pMDFOeTQzTURWakxqWTNOeTB5TGpNMUxURXVNemN0TkM0MU9ETXRNeTQzTmprdCcKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05DNHhNVE5hSWo0OEwzQmhkR2crUEM5emRtYysnLAogICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC92aXRlLnN2ZycsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAwLAogICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogOTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICdDb250ZW50JzogYid1bHtwYWRkaW5nOjA7bGlzdC1zdHlsZS10eXBlOm5vbmV9XG4nLAogICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC9hc3NldHMvaW5kZXgtQ2JKRV80dDIuY3NzJywKICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29udGVudCc6IGIndWx7cGFkZGluZzowO2xpc3Qtc3R5bGUtdHlwZTpub25lfVxuJywKICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAyMDAyL3dzL2Rpc3QvYXNzZXRzL2luZGV4LUNiSkVfNHQyLmNzcycsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogMTA6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJyhmdW5jdGlvbigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxMaXN0O2lmKHQmJnQuc3VwcG9ydHMmJnQuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKScKICAgICAgICAgICAgICAgICAgICAgICAgYiIpcmV0dXJuO2Zvcihjb25zdCByIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25rW3JlbD0ibW9kdWxlcHJlbG9hZCJdXCcpKXMocik7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9Pntmb3IoY29uc3QgaSBvZiByKWlmKGkudHlwZT09PSJjaGlsZExpc3QiKWZvcihjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgbyBvZiBpLmFkZGVkTm9kZXMpby50YWdOYW1lPT09IkxJTksiJiZvLnJlbD09PSJtbycKICAgICAgICAgICAgICAgICAgICAgICAgYidkdWxlcHJlbG9hZCImJnMobyl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N1YnRyZWU6ITB9KTtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9e307cmV0dXJuIHIuaW50ZWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncml0eSYmKGkuaW50ZWdyaXR5PXIuaW50ZWdyaXR5KSxyLnJlZmVycmVyUG9saWN5JiYoaScKICAgICAgICAgICAgICAgICAgICAgICAgYicucmVmZXJyZXJQb2xpY3k9ci5yZWZlcnJlclBvbGljeSksci5jcm9zc09yaWdpbj09PSJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlLWNyZWRlbnRpYWxzIj9pLmNyZWRlbnRpYWxzPSJpbmNsdWRlIjpyLmNyb3NzT3JpZ2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj09PSJhbm9ueW1vdXMiP2kuY3JlZGVudGlhbHM9Im9taXQiOmkuY3JlZGVudGlhbHM9IicKICAgICAgICAgICAgICAgICAgICAgICAgYidzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiBzKHIpe2lmKHIuZXApcmV0dXJuO3IuZXA9ITA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGk9bihyKTtmZXRjaChyLmhyZWYsaSl9fSkoKTsvKipcbiogQHZ1ZS9zaGFyZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YzLjUuMTNcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udHJpYnV0b3JzXG4qIEBsaWNlbnNlIE1JVFxuKiovLyohICNfX05PX1NJREVfRUZGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VDVFNfXyAqL2Z1bmN0aW9uIEFuKGUpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKGNvbnN0IG4gb2YgZS5zcGxpdCgiLCIpKXRbbl09MTtyZXR1cm4gbj0+biBpbiB0fScKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBMPXt9LFhlPVtdLHdlPSgpPT57fSxqcj0oKT0+ITEsV3Q9ZT0+ZS5jaGFyQ29kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdCgwKT09PTExMSYmZS5jaGFyQ29kZUF0KDEpPT09MTEwJiYoZS5jaGFyQ29kZUF0KDInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT4xMjJ8fGUuY2hhckNvZGVBdCgyKTw5NyksUG49ZT0+ZS5zdGFydHNXaXRoKCJvblVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGU6Iiksc2U9T2JqZWN0LmFzc2lnbixSbj0oZSx0KT0+e2NvbnN0IG49ZS5pbmRleE9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0KTtuPi0xJiZlLnNwbGljZShuLDEpfSxMcj1PYmplY3QucHJvdG90eXBlLmhhc093blAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wZXJ0eSxIPShlLHQpPT5Mci5jYWxsKGUsdCksRT1BcnJheS5pc0FycmF5LFplPWU9PicKICAgICAgICAgICAgICAgICAgICAgICAgYid3dChlKT09PSJbb2JqZWN0IE1hcF0iLHF0PWU9Pnd0KGUpPT09IltvYmplY3QgU2V0XSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1puPWU9Pnd0KGUpPT09IltvYmplY3QgRGF0ZV0iLFI9ZT0+dHlwZW9mIGU9PSJmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24iLEo9ZT0+dHlwZW9mIGU9PSJzdHJpbmciLFRlPWU9PnR5cGVvZiBlPT0ic3ltYm9sIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsSz1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiLEVzPWU9PihLKGUpfHxSKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykmJlIoZS50aGVuKSYmUihlLmNhdGNoKSxBcz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyx3dD1lPT5Bcy5jYWxsKGUpLCRyPWU9Pnd0KGUpLnNsaWNlKDgsLTEpLFBzPWU9Pnd0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKT09PSJbb2JqZWN0IE9iamVjdF0iLE1uPWU9PkooZSkmJmUhPT0iTmFOIiYmZVswXSE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0iLSImJiIiK3BhcnNlSW50KGUsMTApPT09ZSx1dD1BbigiLGtleSxyZWYscmVmX2ZvciwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcmVVcGRhdGUsb25Wbm9kZVVwZGF0ZWQsb25Wbm9kZUJlZm9yZVVubW91bnQsb25Wbm9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VVbm1vdW50ZWQiKSxKdD1lPT57Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gbj0+dFtuXXx8KHRbbl09ZShuKSl9LFZyPS8tKFxcdykvZyxOZT1KdChlPT5lLnJlcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlKFZyLCh0LG4pPT5uP24udG9VcHBlckNhc2UoKToiIikpLFVyPS9cXEIoW0EtWl0pL2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdlPUp0KGU9PmUucmVwbGFjZShVciwiLSQxIikudG9Mb3dlckNhc2UoKSksUnM9SnQoZScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSksc249SnQoZT0+ZT9gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uJHtScyhlKX1gOiIiKSxEZT0oZSx0KT0+IU9iamVjdC5pcyhlLHQpLEZ0PShlLC4uLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT0+e2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWVbbl0oLi4udCl9LE1zPShlLHQsbicKICAgICAgICAgICAgICAgICAgICAgICAgYicscz0hMSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudW1lcmFibGU6ITEsd3JpdGFibGU6cyx2YWx1ZTpufSl9LEtyPWU9Pntjb25zdCB0PXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTih0KT9lOnR9O2xldCBRbjtjb25zdCBHdD0oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PlFufHwoUW49dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndSI/Z2xvYmFsOnt9KTtmdW5jdGlvbiBJbihlKXtpZihFKGUpKXtjb25zdCB0PXt9O2ZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcz1lW25dLHI9SihzKT9KcihzKTpJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ocyk7aWYocilmb3IoY29uc3QgaSBpbiByKXRbaV09cltpXX1yZXR1cm4gdH1lbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihKKGUpfHxLKGUpKXJldHVybiBlfWNvbnN0IEJyPS87KD8hW14oXSpcXCkpL2csV3I9LzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFteXSspLyxxcj0vXFwvXFwqW15dKj9cXCpcXC8vZztmdW5jdGlvbiBKcihlKXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdD17fTtyZXR1cm4gZS5yZXBsYWNlKHFyLCIiKS5zcGxpdChCcikuZm9yRWFjaChuPT57JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKG4pe2NvbnN0IHM9bi5zcGxpdChXcik7cy5sZW5ndGg+MSYmKHRbc1swXS50cmltKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInXT1zWzFdLnRyaW0oKSl9fSksdH1mdW5jdGlvbiBGbihlKXtsZXQgdD0iIjtpZihKKGUpKScKICAgICAgICAgICAgICAgICAgICAgICAgYid0PWU7ZWxzZSBpZihFKGUpKWZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1GbihlW25dKTtzJiYodCs9cysiICIpfWVsc2UgaWYoSyhlKSlmb3IoY29uc3QgbiBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSllW25dJiYodCs9bisiICIpO3JldHVybiB0LnRyaW0oKX1jb25zdCBHcj0iaXRlbXNjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsaWRhdGUscmVhZG9ubHkiLFlyPUFuKEdyKTtmdW5jdGlvbiBJcyhlKXtyZXR1cm4hIWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHxlPT09IiJ9ZnVuY3Rpb24genIoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4hMTtsZXQgbj0hMDtmb3IobGV0IHM9MDtuJiZzPGUubGVuZ3RoO3MrKyluPVl0KGVbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NdLHRbc10pO3JldHVybiBufWZ1bmN0aW9uIFl0KGUsdCl7aWYoZT09PXQpcmV0dXJuITAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2xldCBuPVpuKGUpLHM9Wm4odCk7aWYobnx8cylyZXR1cm4gbiYmcz9lLmdldFRpbWUoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT10LmdldFRpbWUoKTohMTtpZihuPVRlKGUpLHM9VGUodCksbnx8cylyZXR1cm4gZT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJz10O2lmKG49RShlKSxzPUUodCksbnx8cylyZXR1cm4gbiYmcz96cihlLHQpOiExO2lmKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPUsoZSkscz1LKHQpLG58fHMpe2lmKCFufHwhcylyZXR1cm4hMTtjb25zdCByPU9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicua2V5cyhlKS5sZW5ndGgsaT1PYmplY3Qua2V5cyh0KS5sZW5ndGg7aWYociE9PWkpcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiExO2Zvcihjb25zdCBvIGluIGUpe2NvbnN0IGw9ZS5oYXNPd25Qcm9wZXJ0eShvKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYz10Lmhhc093blByb3BlcnR5KG8pO2lmKGwmJiFjfHwhbCYmY3x8IVl0KGVbb10sdFtvXScKICAgICAgICAgICAgICAgICAgICAgICAgYicpKXJldHVybiExfX1yZXR1cm4gU3RyaW5nKGUpPT09U3RyaW5nKHQpfWZ1bmN0aW9uIEZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlLHQpe3JldHVybiBlLmZpbmRJbmRleChuPT5ZdChuLHQpKX1jb25zdCBEcz1lPT4hISgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSYmZS5fX3ZfaXNSZWY9PT0hMCksZnQ9ZT0+SihlKT9lOmU9PW51bGw/IiI6RShlKXx8SycKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkmJihlLnRvU3RyaW5nPT09QXN8fCFSKGUudG9TdHJpbmcpKT9EcyhlKT9mdChlLnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSk6SlNPTi5zdHJpbmdpZnkoZSxIcywyKTpTdHJpbmcoZSksSHM9KGUsdCk9PkRzKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT9IcyhlLHQudmFsdWUpOlplKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cicKICAgICAgICAgICAgICAgICAgICAgICAgYidpZXMoKV0ucmVkdWNlKChuLFtzLHJdLGkpPT4obltybihzLGkpKyIgPT4iXT1yLG4pLHt9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9OnF0KHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChuPT4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4obikpfTpUZSh0KT9ybih0KTpLKHQpJiYhRSh0KSYmIVBzKHQpP1N0cmluZyh0KTp0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidybj0oZSx0PSIiKT0+e3ZhciBuO3JldHVybiBUZShlKT9gU3ltYm9sKCR7KG49ZS5kZXNjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpcHRpb24pIT1udWxsP246dH0pYDplfTsvKipcbiogQHZ1ZS9yZWFjdGl2aXR5IHYzLjUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEzXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL2xldCBmZTtjbGFzcyBYcntjb25zdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IodD0hMSl7dGhpcy5kZXRhY2hlZD10LHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmVmZmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RzPVtdLHRoaXMuY2xlYW51cHM9W10sdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5wYXJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0PWZlLCF0JiZmZSYmKHRoaXMuaW5kZXg9KGZlLnNjb3Blc3x8KGZlLnNjb3Blcz1bXSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5wdXNoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5faXNQYXVzZWQ9ITA7bGV0IHQsbjtpZih0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGVzLmxlbmd0aDt0PG47dCsrKXRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Njb3Blc1t0XS5wYXVzZSgpO2Zvcih0PTAsbj10aGlzLmVmZmVjdHMubGVuZ3RoO3Q8bjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCsrKXRoaXMuZWZmZWN0c1t0XS5wYXVzZSgpfX1yZXN1bWUoKXtpZih0aGlzLl9hY3RpdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlJiZ0aGlzLl9pc1BhdXNlZCl7dGhpcy5faXNQYXVzZWQ9ITE7bGV0IHQsbjtpZih0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGVzLmxlbmd0aDt0PG47dCsrKXRoaXMuc2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Blc1t0XS5yZXN1bWUoKTtmb3IodD0wLG49dGhpcy5lZmZlY3RzLmxlbmd0aDt0PG47dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrKyl0aGlzLmVmZmVjdHNbdF0ucmVzdW1lKCl9fXJ1bih0KXtpZih0aGlzLl9hY3RpdmUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdCBuPWZlO3RyeXtyZXR1cm4gZmU9dGhpcyx0KCl9ZmluYWxseXtmZT1ufX19b24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCl7ZmU9dGhpc31vZmYoKXtmZT10aGlzLnBhcmVudH1zdG9wKHQpe2lmKHRoaXMuX2FjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUpe3RoaXMuX2FjdGl2ZT0hMTtsZXQgbixzO2ZvcihuPTAscz10aGlzLmVmZmVjdHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbmd0aDtuPHM7bisrKXRoaXMuZWZmZWN0c1tuXS5zdG9wKCk7Zm9yKHRoaXMuZWZmZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMubGVuZ3RoPTAsbj0wLHM9dGhpcy5jbGVhbnVwcy5sZW5ndGg7bjxzO24rKyl0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjbGVhbnVwc1tuXSgpO2lmKHRoaXMuY2xlYW51cHMubGVuZ3RoPTAsdGhpcy5zY29wZXMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tmb3Iobj0wLHM9dGhpcy5zY29wZXMubGVuZ3RoO248cztuKyspdGhpcy5zY29wZXNbbl0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5wYXJlbnQmJiF0KXtjb25zdCByPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtyJiZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyE9PXRoaXMmJih0aGlzLnBhcmVudC5zY29wZXNbdGhpcy5pbmRleF09cixyLmluZGV4PXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmluZGV4KX10aGlzLnBhcmVudD12b2lkIDB9fX1mdW5jdGlvbiBacigpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZmV9bGV0IFU7Y29uc3Qgb249bmV3IFdlYWtTZXQ7Y2xhc3MgTnN7Y29uc3RydWN0b3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qpe3RoaXMuZm49dCx0aGlzLmRlcHM9dm9pZCAwLHRoaXMuZGVwc1RhaWw9dm9pZCAwLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmZsYWdzPTUsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmNsZWFudXA9dm9pZCAwLHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnNjaGVkdWxlcj12b2lkIDAsZmUmJmZlLmFjdGl2ZSYmZmUuZWZmZWN0cy5wdXNoKHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKX1wYXVzZSgpe3RoaXMuZmxhZ3N8PTY0fXJlc3VtZSgpe3RoaXMuZmxhZ3MmNjQmJignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5mbGFncyY9LTY1LG9uLmhhcyh0aGlzKSYmKG9uLmRlbGV0ZSh0aGlzKSx0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlnZ2VyKCkpKX1ub3RpZnkoKXt0aGlzLmZsYWdzJjImJiEodGhpcy5mbGFncyYzMil8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x0aGlzLmZsYWdzJjh8fExzKHRoaXMpfXJ1bigpe2lmKCEodGhpcy5mbGFncyYxKSlyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHRoaXMuZm4oKTt0aGlzLmZsYWdzfD0yLGtuKHRoaXMpLCRzKHRoaXMpO2NvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PVUsbj1kZTtVPXRoaXMsZGU9ITA7dHJ5e3JldHVybiB0aGlzLmZuKCl9ZmluYWxseXtWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ModGhpcyksVT10LGRlPW4sdGhpcy5mbGFncyY9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyYxKXtmb3IobGV0IHQ9dGhpcy5kZXBzO3Q7dD10Lm5leHREZXApTm4odCk7dGhpcy5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcz10aGlzLmRlcHNUYWlsPXZvaWQgMCxrbih0aGlzKSx0aGlzLm9uU3RvcCYmdGhpcy5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25TdG9wKCksdGhpcy5mbGFncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P29uLmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGQodGhpcyk6dGhpcy5zY2hlZHVsZXI/dGhpcy5zY2hlZHVsZXIoKTp0aGlzLnJ1bklmRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcnR5KCl9cnVuSWZEaXJ0eSgpe21uKHRoaXMpJiZ0aGlzLnJ1bigpfWdldCBkaXJ0eSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tyZXR1cm4gbW4odGhpcyl9fWxldCBqcz0wLGF0LGR0O2Z1bmN0aW9uIExzKGUsdD0hMSknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKGUuZmxhZ3N8PTgsdCl7ZS5uZXh0PWR0LGR0PWU7cmV0dXJufWUubmV4dD1hdCxhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9ZX1mdW5jdGlvbiBEbigpe2pzKyt9ZnVuY3Rpb24gSG4oKXtpZigtLWpzPjApcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJztpZihkdCl7bGV0IHQ9ZHQ7Zm9yKGR0PXZvaWQgMDt0Oyl7Y29uc3Qgbj10Lm5leHQ7dC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4dD12b2lkIDAsdC5mbGFncyY9LTksdD1ufX1sZXQgZTtmb3IoO2F0Oyl7bGV0IHQ9YScKICAgICAgICAgICAgICAgICAgICAgICAgYid0O2ZvcihhdD12b2lkIDA7dDspe2NvbnN0IG49dC5uZXh0O2lmKHQubmV4dD12b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuZmxhZ3MmPS05LHQuZmxhZ3MmMSl0cnl7dC50cmlnZ2VyKCl9Y2F0Y2gocyl7ZXx8KGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXMpfXQ9bn19aWYoZSl0aHJvdyBlfWZ1bmN0aW9uICRzKGUpe2ZvcihsZXQgdD1lLmRlcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzO3Q7dD10Lm5leHREZXApdC52ZXJzaW9uPS0xLHQucHJldkFjdGl2ZUxpbms9dC5kZXAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2ZUxpbmssdC5kZXAuYWN0aXZlTGluaz10fWZ1bmN0aW9uIFZzKGUpe2xldCB0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWUuZGVwc1RhaWwscz1uO2Zvcig7czspe2NvbnN0IHI9cy5wcmV2RGVwO3MudmVyc2lvbicKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0tMT8ocz09PW4mJihuPXIpLE5uKHMpLFFyKHMpKTp0PXMscy5kZXAuYWN0aXZlTGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s9cy5wcmV2QWN0aXZlTGluayxzLnByZXZBY3RpdmVMaW5rPXZvaWQgMCxzPXJ9ZS5kZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz10LGUuZGVwc1RhaWw9bn1mdW5jdGlvbiBtbihlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9dC5uZXh0RGVwKWlmKHQuZGVwLnZlcnNpb24hPT10LnZlcnNpb258fHQuZGVwLmNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZCYmKFVzKHQuZGVwLmNvbXB1dGVkKXx8dC5kZXAudmVyc2lvbiE9PXQudmVyc2lvbiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXJldHVybiEwO3JldHVybiEhZS5fZGlydHl9ZnVuY3Rpb24gVXMoZSl7aWYoZS5mbGFncycKICAgICAgICAgICAgICAgICAgICAgICAgYicmNCYmIShlLmZsYWdzJjE2KXx8KGUuZmxhZ3MmPS0xNyxlLmdsb2JhbFZlcnNpb249PT1fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpKXJldHVybjtlLmdsb2JhbFZlcnNpb249X3Q7Y29uc3QgdD1lLmRlcDtpZihlLmZsYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3w9Mix0LnZlcnNpb24+MCYmIWUuaXNTU1ImJmUuZGVwcyYmIW1uKGUpKXtlLmZsYWdzJicKICAgICAgICAgICAgICAgICAgICAgICAgYic9LTM7cmV0dXJufWNvbnN0IG49VSxzPWRlO1U9ZSxkZT0hMDt0cnl7JHMoZSk7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9ZS5mbihlLl92YWx1ZSk7KHQudmVyc2lvbj09PTB8fERlKHIsZS5fdmFsdWUpKSYmKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLl92YWx1ZT1yLHQudmVyc2lvbisrKX1jYXRjaChyKXt0aHJvdyB0LnZlcnNpb24rKyxyfScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5hbGx5e1U9bixkZT1zLFZzKGUpLGUuZmxhZ3MmPS0zfX1mdW5jdGlvbiBObihlLHQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyExKXtjb25zdHtkZXA6bixwcmV2U3ViOnMsbmV4dFN1YjpyfT1lO2lmKHMmJihzLm5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3ViPXIsZS5wcmV2U3ViPXZvaWQgMCksciYmKHIucHJldlN1Yj1zLGUubmV4dFN1Yj12bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZCAwKSxuLnN1YnM9PT1lJiYobi5zdWJzPXMsIXMmJm4uY29tcHV0ZWQpKXtuLmNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZC5mbGFncyY9LTU7Zm9yKGxldCBpPW4uY29tcHV0ZWQuZGVwcztpO2k9aS5uZXh0RGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncClObihpLCEwKX0hdCYmIS0tbi5zYyYmbi5tYXAmJm4ubWFwLmRlbGV0ZShuLmtleSl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIFFyKGUpe2NvbnN0e3ByZXZEZXA6dCxuZXh0RGVwOm59PWU7dCYmKHQubmV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3REZXA9bixlLnByZXZEZXA9dm9pZCAwKSxuJiYobi5wcmV2RGVwPXQsZS5uZXh0RGVwPXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIDApfWxldCBkZT0hMDtjb25zdCBLcz1bXTtmdW5jdGlvbiBqZSgpe0tzLnB1c2goZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSxkZT0hMX1mdW5jdGlvbiBMZSgpe2NvbnN0IGU9S3MucG9wKCk7ZGU9ZT09PXZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzA/ITA6ZX1mdW5jdGlvbiBrbihlKXtjb25zdHtjbGVhbnVwOnR9PWU7aWYoZS5jbGVhbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncD12b2lkIDAsdCl7Y29uc3Qgbj1VO1U9dm9pZCAwO3RyeXt0KCl9ZmluYWxseXtVPW59fScKICAgICAgICAgICAgICAgICAgICAgICAgYid9bGV0IF90PTA7Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXt0aGlzLnN1Yj10LHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcD1uLHRoaXMudmVyc2lvbj1uLnZlcnNpb24sdGhpcy5uZXh0RGVwPXRoaXMucHJldkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXA9dGhpcy5uZXh0U3ViPXRoaXMucHJldlN1Yj10aGlzLnByZXZBY3RpdmVMaW5rPXZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkIDB9fWNsYXNzIGpue2NvbnN0cnVjdG9yKHQpe3RoaXMuY29tcHV0ZWQ9dCx0aGlzLnZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzaW9uPTAsdGhpcy5hY3RpdmVMaW5rPXZvaWQgMCx0aGlzLnN1YnM9dm9pZCAwLHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm1hcD12b2lkIDAsdGhpcy5rZXk9dm9pZCAwLHRoaXMuc2M9MH10cmFjayh0KXtpZighVScKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCFkZXx8VT09PXRoaXMuY29tcHV0ZWQpcmV0dXJuO2xldCBuPXRoaXMuYWN0aXZlTGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s7aWYobj09PXZvaWQgMHx8bi5zdWIhPT1VKW49dGhpcy5hY3RpdmVMaW5rPW5ldyBrcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInVSx0aGlzKSxVLmRlcHM/KG4ucHJldkRlcD1VLmRlcHNUYWlsLFUuZGVwc1RhaWwubmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidEZXA9bixVLmRlcHNUYWlsPW4pOlUuZGVwcz1VLmRlcHNUYWlsPW4sQnMobik7ZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Yobi52ZXJzaW9uPT09LTEmJihuLnZlcnNpb249dGhpcy52ZXJzaW9uLG4ubmV4dERlcCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtjb25zdCBzPW4ubmV4dERlcDtzLnByZXZEZXA9bi5wcmV2RGVwLG4ucHJldkRlcCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnByZXZEZXAubmV4dERlcD1zKSxuLnByZXZEZXA9VS5kZXBzVGFpbCxuLm5leHREZXA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQgMCxVLmRlcHNUYWlsLm5leHREZXA9bixVLmRlcHNUYWlsPW4sVS5kZXBzPT09biYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJihVLmRlcHM9cyl9cmV0dXJuIG59dHJpZ2dlcih0KXt0aGlzLnZlcnNpb24rKyxfdCsrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLm5vdGlmeSh0KX1ub3RpZnkodCl7RG4oKTt0cnl7Zm9yKGxldCBuPXRoaXMuc3ViJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M7bjtuPW4ucHJldlN1YiluLnN1Yi5ub3RpZnkoKSYmbi5zdWIuZGVwLm5vdGlmeSgpfWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5hbGx5e0huKCl9fX1mdW5jdGlvbiBCcyhlKXtpZihlLmRlcC5zYysrLGUuc3ViLmZsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidncyY0KXtjb25zdCB0PWUuZGVwLmNvbXB1dGVkO2lmKHQmJiFlLmRlcC5zdWJzKXt0LmZsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fnc3w9MjA7Zm9yKGxldCBzPXQuZGVwcztzO3M9cy5uZXh0RGVwKUJzKHMpfWNvbnN0IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWUuZGVwLnN1YnM7biE9PWUmJihlLnByZXZTdWI9bixuJiYobi5uZXh0U3ViPWUpKSxlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXAuc3Vicz1lfX1jb25zdCBibj1uZXcgV2Vha01hcCxxZT1TeW1ib2woIiIpLHluPVN5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21ib2woIiIpLG10PVN5bWJvbCgiIik7ZnVuY3Rpb24gWChlLHQsbil7aWYoZGUmJlUpe2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgcz1ibi5nZXQoZSk7c3x8Ym4uc2V0KGUscz1uZXcgTWFwKTtsZXQgcj1zLmdldChuKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7cnx8KHMuc2V0KG4scj1uZXcgam4pLHIubWFwPXMsci5rZXk9biksci50cmFjaygpfX1mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gRWUoZSx0LG4scyxyLGkpe2NvbnN0IG89Ym4uZ2V0KGUpO2lmKCFvKXtfdCsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKztyZXR1cm59Y29uc3QgbD1jPT57YyYmYy50cmlnZ2VyKCl9O2lmKERuKCksdD09PSJjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXIiKW8uZm9yRWFjaChsKTtlbHNle2NvbnN0IGM9RShlKSxoPWMmJk1uKG4pO2lmKGMmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZuPT09Imxlbmd0aCIpe2NvbnN0IGE9TnVtYmVyKHMpO28uZm9yRWFjaCgocCxUKT0+eygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVD09PSJsZW5ndGgifHxUPT09bXR8fCFUZShUKSYmVD49YSkmJmwocCl9KX1lbHNlIHN3aScKICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2goKG4hPT12b2lkIDB8fG8uaGFzKHZvaWQgMCkpJiZsKG8uZ2V0KG4pKSxoJiZsKG8uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldChtdCkpLHQpe2Nhc2UiYWRkIjpjP2gmJmwoby5nZXQoImxlbmd0aCIpKToobChvLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQocWUpKSxaZShlKSYmbChvLmdldCh5bikpKTticmVhaztjYXNlImRlbGV0ZSI6Y3x8KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsKG8uZ2V0KHFlKSksWmUoZSkmJmwoby5nZXQoeW4pKSk7YnJlYWs7Y2FzZSJzZXQiOlplJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSYmbChvLmdldChxZSkpO2JyZWFrfX1IbigpfWZ1bmN0aW9uIFllKGUpe2NvbnN0IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPUQoZSk7cmV0dXJuIHQ9PT1lP3Q6KFgodCwiaXRlcmF0ZSIsbXQpLGFlKGUpP3Q6dC5tYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwKFopKX1mdW5jdGlvbiB6dChlKXtyZXR1cm4gWChlPUQoZSksIml0ZXJhdGUiLG10KSxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31jb25zdCBlaT17X19wcm90b19fOm51bGwsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGxuKHRoaXMsU3ltYm9sLml0ZXJhdG9yLFopfSxjb25jYXQoLi4uZSl7cmV0dXJuIFllKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzKS5jb25jYXQoLi4uZS5tYXAodD0+RSh0KT9ZZSh0KTp0KSl9LGVudHJpZXMoKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGxuKHRoaXMsImVudHJpZXMiLGU9PihlWzFdPVooZVsxXSksZSkpfSxldmVyeSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0KXtyZXR1cm4gdmUodGhpcywiZXZlcnkiLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihlLHQpe3JldHVybiB2ZSh0aGlzLCJmaWx0ZXIiLGUsdCxuPT5uLm1hcChaKSxhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnRzKX0sZmluZChlLHQpe3JldHVybiB2ZSh0aGlzLCJmaW5kIixlLHQsWixhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7cmV0dXJuIHZlKHRoaXMsImZpbmRJbmRleCIsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCx2b2lkIDAsYXJndW1lbnRzKX0sZmluZExhc3QoZSx0KXtyZXR1cm4gdmUodGhpcywiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmRMYXN0IixlLHQsWixhcmd1bWVudHMpfSxmaW5kTGFzdEluZGV4KGUsdCl7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB2ZSh0aGlzLCJmaW5kTGFzdEluZGV4IixlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKGUsdCl7cmV0dXJuIHZlKHRoaXMsImZvckVhY2giLGUsdCx2b2lkIDAsYXJndW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiBmbih0aGlzLCJpbmNsdWRlcyIsZSl9LGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleE9mKC4uLmUpe3JldHVybiBmbih0aGlzLCJpbmRleE9mIixlKX0sam9pbihlKXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIFllKHRoaXMpLmpvaW4oZSl9LGxhc3RJbmRleE9mKC4uLmUpe3JldHVybiBmbih0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcywibGFzdEluZGV4T2YiLGUpfSxtYXAoZSx0KXtyZXR1cm4gdmUodGhpcywibWFwIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxwb3AoKXtyZXR1cm4gb3QodGhpcywicG9wIil9LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKC4uLmUpe3JldHVybiBvdCh0aGlzLCJwdXNoIixlKX0scmVkdWNlKGUsLi4udCl7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBlcyh0aGlzLCJyZWR1Y2UiLGUsdCl9LHJlZHVjZVJpZ2h0KGUsLi4udCl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBlcyh0aGlzLCJyZWR1Y2VSaWdodCIsZSx0KX0sc2hpZnQoKXtyZXR1cm4gb3QodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMsInNoaWZ0Iil9LHNvbWUoZSx0KXtyZXR1cm4gdmUodGhpcywic29tZSIsZSx0LHZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkIDAsYXJndW1lbnRzKX0sc3BsaWNlKC4uLmUpe3JldHVybiBvdCh0aGlzLCJzcGxpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIixlKX0sdG9SZXZlcnNlZCgpe3JldHVybiBZZSh0aGlzKS50b1JldmVyc2VkKCl9LHRvUycKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnRlZChlKXtyZXR1cm4gWWUodGhpcykudG9Tb3J0ZWQoZSl9LHRvU3BsaWNlZCguLi5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7cmV0dXJuIFllKHRoaXMpLnRvU3BsaWNlZCguLi5lKX0sdW5zaGlmdCguLi5lKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIG90KHRoaXMsInVuc2hpZnQiLGUpfSx2YWx1ZXMoKXtyZXR1cm4gbG4odGhpcywidicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlcyIsWil9fTtmdW5jdGlvbiBsbihlLHQsbil7Y29uc3Qgcz16dChlKSxyPXNbdF0oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7cmV0dXJuIHMhPT1lJiYhYWUoZSkmJihyLl9uZXh0PXIubmV4dCxyLm5leHQ9KCk9PnsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgaT1yLl9uZXh0KCk7cmV0dXJuIGkudmFsdWUmJihpLnZhbHVlPW4oaS52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpKSxpfSkscn1jb25zdCB0aT1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gdmUoZSx0LG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MscixpKXtjb25zdCBvPXp0KGUpLGw9byE9PWUmJiFhZShlKSxjPW9bdF07aWYoYyE9PXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaVt0XSl7Y29uc3QgcD1jLmFwcGx5KGUsaSk7cmV0dXJuIGw/WihwKTpwfWxldCBoPW47bycKICAgICAgICAgICAgICAgICAgICAgICAgYichPT1lJiYobD9oPWZ1bmN0aW9uKHAsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLFoocCksVCxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9Om4ubGVuZ3RoPjImJihoPWZ1bmN0aW9uKHAsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFQsZSl9KSk7Y29uc3QgYT1jLmNhbGwobyxoLHMpO3JldHVybiBsJiZyP3IoYSk6YX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gZXMoZSx0LG4scyl7Y29uc3Qgcj16dChlKTtsZXQgaT1uO3JldHVybiByIT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UmJihhZShlKT9uLmxlbmd0aD4zJiYoaT1mdW5jdGlvbihvLGwsYyl7cmV0dXJuIG4uY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGwodGhpcyxvLGwsYyxlKX0pOmk9ZnVuY3Rpb24obyxsLGMpe3JldHVybiBuLmNhbGwodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMsbyxaKGwpLGMsZSl9KSxyW3RdKGksLi4ucyl9ZnVuY3Rpb24gZm4oZSx0LG4pe2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBzPUQoZSk7WChzLCJpdGVyYXRlIixtdCk7Y29uc3Qgcj1zW3RdKC4uLm4pO3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4ocj09PS0xfHxyPT09ITEpJiZVbihuWzBdKT8oblswXT1EKG5bMF0pLHNbdF0oLi4ubicKICAgICAgICAgICAgICAgICAgICAgICAgYicpKTpyfWZ1bmN0aW9uIG90KGUsdCxuPVtdKXtqZSgpLERuKCk7Y29uc3Qgcz1EKGUpW3RdJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5hcHBseShlLG4pO3JldHVybiBIbigpLExlKCksc31jb25zdCBuaT1BbigiX19wcm90b18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLFdzPW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0eU5hbWVzKFN5bWJvbCkuZmlsdGVyKGU9PmUhPT0iYXJndW1lbnRzIiYmZSE9PSJjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIikubWFwKGU9PlN5bWJvbFtlXSkuZmlsdGVyKFRlKSk7ZnVuY3Rpb24gc2koZSl7VGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpfHwoZT1TdHJpbmcoZSkpO2NvbnN0IHQ9RCh0aGlzKTtyZXR1cm4gWCh0LCJoYXMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSx0Lmhhc093blByb3BlcnR5KGUpfWNsYXNzIHFze2NvbnN0cnVjdG9yKHQ9ITEsbj0hJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpe3RoaXMuX2lzUmVhZG9ubHk9dCx0aGlzLl9pc1NoYWxsb3c9bn1nZXQodCxuLHMpe2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihuPT09Il9fdl9za2lwIilyZXR1cm4gdC5fX3Zfc2tpcDtjb25zdCByPXRoaXMuX2lzUicKICAgICAgICAgICAgICAgICAgICAgICAgYidlYWRvbmx5LGk9dGhpcy5faXNTaGFsbG93O2lmKG49PT0iX192X2lzUmVhY3RpdmUiKXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4hcjtpZihuPT09Il9fdl9pc1JlYWRvbmx5IilyZXR1cm4gcjtpZihuPT09Il9fdl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNTaGFsbG93IilyZXR1cm4gaTtpZihuPT09Il9fdl9yYXciKXJldHVybiBzPT09KHI/aScKICAgICAgICAgICAgICAgICAgICAgICAgYic/aGk6enM6aT9ZczpHcykuZ2V0KHQpfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LmdldFByb3RvdHlwZU9mKHMpP3Q6dm9pZCAwO2NvbnN0IG89RSh0KTtpZighciknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2xldCBjO2lmKG8mJihjPWVpW25dKSlyZXR1cm4gYztpZihuPT09Imhhc093blByb3BlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0eSIpcmV0dXJuIHNpfWNvbnN0IGw9UmVmbGVjdC5nZXQodCxuLFEodCk/dDpzKTtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuKFRlKG4pP1dzLmhhcyhuKTpuaShuKSl8fChyfHxYKHQsImdldCIsbiksaSk/bDpRKGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT9vJiZNbihuKT9sOmwudmFsdWU6SyhsKT9yP1hzKGwpOiRuKGwpOmx9fWNsYXNzIEpzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCExLHQpfXNldCh0LG4scyxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7bGV0IGk9dFtuXTtpZighdGhpcy5faXNTaGFsbG93KXtjb25zdCBjPUplKGkpO2lmKCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWUocykmJiFKZShzKSYmKGk9RChpKSxzPUQocykpLCFFKHQpJiZRKGkpJiYhUShzKSlyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGM/ITE6KGkudmFsdWU9cywhMCl9Y29uc3Qgbz1FKHQpJiZNbihuKT9OdW1iZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pPHQubGVuZ3RoOkgodCxuKSxsPVJlZmxlY3Quc2V0KHQsbixzLFEodCk/dDpyKTtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHQ9PT1EKHIpJiYobz9EZShzLGkpJiZFZSh0LCJzZXQiLG4scyk6RWUodCwiYWRkIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsbixzKSksbH1kZWxldGVQcm9wZXJ0eSh0LG4pe2NvbnN0IHM9SCh0LG4pO3Rbbl07Y29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHI9UmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0LG4pO3JldHVybiByJiZzJiZFZSh0LCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVsZXRlIixuLHZvaWQgMCkscn1oYXModCxuKXtjb25zdCBzPVJlZmxlY3QuaGFzKHQsbicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO3JldHVybighVGUobil8fCFXcy5oYXMobikpJiZYKHQsImhhcyIsbiksc31vd25LZXlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0KXtyZXR1cm4gWCh0LCJpdGVyYXRlIixFKHQpPyJsZW5ndGgiOnFlKSxSZWZsZWN0Lm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd25LZXlzKHQpfX1jbGFzcyByaSBleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQ9ITEpe3N1cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcighMCx0KX1zZXQodCxuKXtyZXR1cm4hMH1kZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24hMH19Y29uc3QgaWk9bmV3IEpzLG9pPW5ldyByaSxsaT1uZXcgSnMoITApO2NvbnN0IHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj1lPT5lLFJ0PWU9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZnVuY3Rpb24gZmkoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCxuKXtyZXR1cm4gZnVuY3Rpb24oLi4ucyl7Y29uc3Qgcj10aGlzLl9fdl9yYXcsaT1EJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyKSxvPVplKGkpLGw9ZT09PSJlbnRyaWVzInx8ZT09PVN5bWJvbC5pdGVyYXRvciYmbywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYz1lPT09ImtleXMiJiZvLGg9cltlXSguLi5zKSxhPW4/eG46dD9TbjpaO3JldHVybiF0JicKICAgICAgICAgICAgICAgICAgICAgICAgYicmWChpLCJpdGVyYXRlIixjP3luOnFlKSx7bmV4dCgpe2NvbnN0e3ZhbHVlOnAsZG9uZTpUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ309aC5uZXh0KCk7cmV0dXJuIFQ/e3ZhbHVlOnAsZG9uZTpUfTp7dmFsdWU6bD9bYShwWzAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSksYShwWzFdKV06YShwKSxkb25lOlR9fSxbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpc319fX1mdW5jdGlvbiBNdChlKXtyZXR1cm4gZnVuY3Rpb24oLi4udCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlPT09ImRlbGV0ZSI/ITE6ZT09PSJjbGVhciI/dm9pZCAwOnRoaXN9fWZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaShlLHQpe2NvbnN0IG49e2dldChyKXtjb25zdCBpPXRoaXMuX192X3JhdyxvPUQoaSksbCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9RChyKTtlfHwoRGUocixsKSYmWChvLCJnZXQiLHIpLFgobywiZ2V0IixsKSk7Y29uc3R7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hhczpjfT1SdChvKSxoPXQ/eG46ZT9TbjpaO2lmKGMuY2FsbChvLHIpKXJldHVybiBoKGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldChyKSk7aWYoYy5jYWxsKG8sbCkpcmV0dXJuIGgoaS5nZXQobCkpO2khPT1vJiZpLicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQocil9LGdldCBzaXplKCl7Y29uc3Qgcj10aGlzLl9fdl9yYXc7cmV0dXJuIWUmJlgoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QociksIml0ZXJhdGUiLHFlKSxSZWZsZWN0LmdldChyLCJzaXplIixyKX0saGFzKHIpe2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBpPXRoaXMuX192X3JhdyxvPUQoaSksbD1EKHIpO3JldHVybiBlfHwoRGUocixsKScKICAgICAgICAgICAgICAgICAgICAgICAgYicmJlgobywiaGFzIixyKSxYKG8sImhhcyIsbCkpLHI9PT1sP2kuaGFzKHIpOmkuaGFzKHIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8aS5oYXMobCl9LGZvckVhY2gocixpKXtjb25zdCBvPXRoaXMsbD1vLl9fdl9yYXcsYz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRChsKSxoPXQ/eG46ZT9TbjpaO3JldHVybiFlJiZYKGMsIml0ZXJhdGUiLHFlKSxsLmZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKChhLHApPT5yLmNhbGwoaSxoKGEpLGgocCksbykpfX07cmV0dXJuIHNlKG4sZT97JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZDpNdCgiYWRkIiksc2V0Ok10KCJzZXQiKSxkZWxldGU6TXQoImRlbGV0ZSIpLGNsZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjpNdCgiY2xlYXIiKX06e2FkZChyKXshdCYmIWFlKHIpJiYhSmUocikmJihyPUQocikpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpPUQodGhpcyk7cmV0dXJuIFJ0KGkpLmhhcy5jYWxsKGkscil8fChpLmFkZChyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksRWUoaSwiYWRkIixyLHIpKSx0aGlzfSxzZXQocixpKXshdCYmIWFlKGkpJiYhSmUoaSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYoaT1EKGkpKTtjb25zdCBvPUQodGhpcykse2hhczpsLGdldDpjfT1SdChvKTtsZXQgaCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9bC5jYWxsKG8scik7aHx8KHI9RChyKSxoPWwuY2FsbChvLHIpKTtjb25zdCBhPWMuY2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wobyxyKTtyZXR1cm4gby5zZXQocixpKSxoP0RlKGksYSkmJkVlKG8sInNldCIscixpKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWUobywiYWRkIixyLGkpLHRoaXN9LGRlbGV0ZShyKXtjb25zdCBpPUQodGhpcykse2hhcycKICAgICAgICAgICAgICAgICAgICAgICAgYic6byxnZXQ6bH09UnQoaSk7bGV0IGM9by5jYWxsKGkscik7Y3x8KHI9RChyKSxjPW8uY2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2woaSxyKSksbCYmbC5jYWxsKGkscik7Y29uc3QgaD1pLmRlbGV0ZShyKTtyZXR1cm4gYyYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJkVlKGksImRlbGV0ZSIscix2b2lkIDApLGh9LGNsZWFyKCl7Y29uc3Qgcj1EKHRoaXMpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpPXIuc2l6ZSE9PTAsbz1yLmNsZWFyKCk7cmV0dXJuIGkmJkVlKHIsImNsZWFyIix2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwLHZvaWQgMCksb319KSxbImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIixTeW1ib2wuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJhdG9yXS5mb3JFYWNoKHI9PntuW3JdPWZpKHIsZSx0KX0pLG59ZnVuY3Rpb24gTG4oZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCl7Y29uc3Qgbj1jaShlLHQpO3JldHVybihzLHIsaSk9PnI9PT0iX192X2lzUmVhY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlIj8hZTpyPT09Il9fdl9pc1JlYWRvbmx5Ij9lOnI9PT0iX192X3JhdyI/czpSZWZsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5nZXQoSChuLHIpJiZyIGluIHM/bjpzLHIsaSl9Y29uc3QgdWk9e2dldDpMbighMSwhMScKICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxhaT17Z2V0OkxuKCExLCEwKX0sZGk9e2dldDpMbighMCwhMSl9O2NvbnN0IEdzPW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3cgV2Vha01hcCxZcz1uZXcgV2Vha01hcCx6cz1uZXcgV2Vha01hcCxoaT1uZXcgV2Vha00nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXA7ZnVuY3Rpb24gcGkoZSl7c3dpdGNoKGUpe2Nhc2UiT2JqZWN0IjpjYXNlIkFycmF5IicKICAgICAgICAgICAgICAgICAgICAgICAgYic6cmV0dXJuIDE7Y2FzZSJNYXAiOmNhc2UiU2V0IjpjYXNlIldlYWtNYXAiOmNhc2UiV2VhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tTZXQiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGdpKGUpe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gZS5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoZSk/MDpwaSgkcihlKSl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICRuKGUpe3JldHVybiBKZShlKT9lOlZuKGUsITEsaWksdWksR3MpfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBfaShlKXtyZXR1cm4gVm4oZSwhMSxsaSxhaSxZcyl9ZnVuY3Rpb24gWHMoZSl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBWbihlLCEwLG9pLGRpLHpzKX1mdW5jdGlvbiBWbihlLHQsbixzLHIpe2lmKCFLKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKXx8ZS5fX3ZfcmF3JiYhKHQmJmUuX192X2lzUmVhY3RpdmUpKXJldHVybiBlO2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpPXIuZ2V0KGUpO2lmKGkpcmV0dXJuIGk7Y29uc3Qgbz1naShlKTtpZihvPT09MClyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGU7Y29uc3QgbD1uZXcgUHJveHkoZSxvPT09Mj9zOm4pO3JldHVybiByLnNldChlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxsfWZ1bmN0aW9uIFFlKGUpe3JldHVybiBKZShlKT9RZShlLl9fdl9yYXcpOiEhKGUmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZlLl9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiBKZShlKXtyZXR1cm4hIShlJiZlLl9fdl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNSZWFkb25seSl9ZnVuY3Rpb24gYWUoZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNTaGFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdyl9ZnVuY3Rpb24gVW4oZSl7cmV0dXJuIGU/ISFlLl9fdl9yYXc6ITF9ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QoZSl7Y29uc3QgdD1lJiZlLl9fdl9yYXc7cmV0dXJuIHQ/RCh0KTplfWZ1bmN0aW9uIG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaShlKXtyZXR1cm4hSChlLCJfX3Zfc2tpcCIpJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmTXMoZSwiX192X3NraXAiLCEwKSxlfWNvbnN0IFo9ZT0+SyhlKT8kbihlKTplLFNuPWU9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz5LKGUpP1hzKGUpOmU7ZnVuY3Rpb24gUShlKXtyZXR1cm4gZT9lLl9fdl9pc1JlZj09PSEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDohMX1mdW5jdGlvbiBiaShlKXtyZXR1cm4geWkoZSwhMSl9ZnVuY3Rpb24geWkoZSx0KScKICAgICAgICAgICAgICAgICAgICAgICAgYid7cmV0dXJuIFEoZSk/ZTpuZXcgeGkoZSx0KX1jbGFzcyB4aXtjb25zdHJ1Y3Rvcih0LG4pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3t0aGlzLmRlcD1uZXcgam4sdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNTaGFsbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndz0hMSx0aGlzLl9yYXdWYWx1ZT1uP3Q6RCh0KSx0aGlzLl92YWx1ZT1uP3Q6Wih0KSx0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5fX3ZfaXNTaGFsbG93PW59Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZGVwLnRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh0KXtjb25zdCBuPXRoaXMuX3Jhd1ZhbHVlLHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXRoaXMuX192X2lzU2hhbGxvd3x8YWUodCl8fEplKHQpO3Q9cz90OkQodCksRGUodCxuKScKICAgICAgICAgICAgICAgICAgICAgICAgYicmJih0aGlzLl9yYXdWYWx1ZT10LHRoaXMuX3ZhbHVlPXM/dDpaKHQpLHRoaXMuZGVwLnRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lnZ2VyKCkpfX1mdW5jdGlvbiBacyhlKXtyZXR1cm4gUShlKT9lLnZhbHVlOmV9Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNpPXtnZXQ6KGUsdCxuKT0+dD09PSJfX3ZfcmF3Ij9lOlpzKFJlZmxlY3QuZ2V0KGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsbikpLHNldDooZSx0LG4scyk9Pntjb25zdCByPWVbdF07cmV0dXJuIFEocikmJiFRKG4pJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8oci52YWx1ZT1uLCEwKTpSZWZsZWN0LnNldChlLHQsbixzKX19O2Z1bmN0aW9uIFFzKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gUWUoZSk/ZTpuZXcgUHJveHkoZSxTaSl9Y2xhc3Mgd2l7Y29uc3RydWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKHQsbixzKXt0aGlzLmZuPXQsdGhpcy5zZXR0ZXI9bix0aGlzLl92YWx1ZT12b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuZGVwPW5ldyBqbih0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTE2LHRoaXMuZ2xvYmFsVicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnNpb249X3QtMSx0aGlzLm5leHQ9dm9pZCAwLHRoaXMuZWZmZWN0PXRoaXMsdGhpcy5fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ192X2lzUmVhZG9ubHk9IW4sdGhpcy5pc1NTUj1zfW5vdGlmeSgpe2lmKHRoaXMuZmxhZ3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfD0xNiwhKHRoaXMuZmxhZ3MmOCkmJlUhPT10aGlzKXJldHVybiBMcyh0aGlzLCEwKSwhMCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9Z2V0IHZhbHVlKCl7Y29uc3QgdD10aGlzLmRlcC50cmFjaygpO3JldHVybiBVcyh0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksdCYmKHQudmVyc2lvbj10aGlzLmRlcC52ZXJzaW9uKSx0aGlzLl92YWx1ZX1zZXQgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKHQpe3RoaXMuc2V0dGVyJiZ0aGlzLnNldHRlcih0KX19ZnVuY3Rpb24gVGkoZSx0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduPSExKXtsZXQgcyxyO3JldHVybiBSKGUpP3M9ZToocz1lLmdldCxyPWUuc2V0KSxuZXcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpKHMscixuKX1jb25zdCBJdD17fSxMdD1uZXcgV2Vha01hcDtsZXQgV2U7ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENpKGUsdD0hMSxuPVdlKXtpZihuKXtsZXQgcz1MdC5nZXQobik7c3x8THQuc2V0KG4scycKICAgICAgICAgICAgICAgICAgICAgICAgYic9W10pLHMucHVzaChlKX19ZnVuY3Rpb24gdmkoZSx0LG49TCl7Y29uc3R7aW1tZWRpYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzpzLGRlZXA6cixvbmNlOmksc2NoZWR1bGVyOm8sYXVnbWVudEpvYjpsLGNhbGw6Y309biwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaD1BPT5yP0E6YWUoQSl8fHI9PT0hMXx8cj09PTA/QWUoQSwxKTpBZShBKTtsZXQgYSxwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidULEMsRj0hMSxJPSExO2lmKFEoZSk/KHA9KCk9PmUudmFsdWUsRj1hZShlKSk6UWUoZSk/JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhwPSgpPT5oKGUpLEY9ITApOkUoZSk/KEk9ITAsRj1lLnNvbWUoQT0+UWUoQSl8fGFlKEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSkscD0oKT0+ZS5tYXAoQT0+e2lmKFEoQSkpcmV0dXJuIEEudmFsdWU7aWYoUWUoQSkpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBoKEEpO2lmKFIoQSkpcmV0dXJuIGM/YyhBLDIpOkEoKX0pKTpSKGUpP3Q/cD1jJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8oKT0+YyhlLDIpOmU6cD0oKT0+e2lmKFQpe2plKCk7dHJ5e1QoKX1maW5hbGx5e0xlKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInfX1jb25zdCBBPVdlO1dlPWE7dHJ5e3JldHVybiBjP2MoZSwzLFtDXSk6ZShDKX1maW5hbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidseXtXZT1BfX06cD13ZSx0JiZyKXtjb25zdCBBPXAsRz1yPT09ITA/MS8wOnI7cD0oKT0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FlKEEoKSxHKX1jb25zdCB6PVpyKCksaj0oKT0+e2Euc3RvcCgpLHomJnouYWN0aXZlJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUm4oei5lZmZlY3RzLGEpfTtpZihpJiZ0KXtjb25zdCBBPXQ7dD0oLi4uRyk9PntBKC4uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidHKSxqKCl9fWxldCBXPUk/bmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKEl0KTpJdDtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgcT1BPT57aWYoISghKGEuZmxhZ3MmMSl8fCFhLmRpcnR5JiYhQSkpaWYodCl7Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEc9YS5ydW4oKTtpZihyfHxGfHwoST9HLnNvbWUoKFJlLGhlKT0+RGUoUmUsV1toZV0pKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6RGUoRyxXKSkpe1QmJlQoKTtjb25zdCBSZT1XZTtXZT1hO3RyeXtjb25zdCBoZT1bRyxXJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PUl0P3ZvaWQgMDpJJiZXWzBdPT09SXQ/W106VyxDXTtjP2ModCwzLGhlKTp0KC4uLmgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSksVz1HfWZpbmFsbHl7V2U9UmV9fX1lbHNlIGEucnVuKCl9O3JldHVybiBsJiZsKHEpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhPW5ldyBOcyhwKSxhLnNjaGVkdWxlcj1vPygpPT5vKHEsITEpOnEsQz1BPT5DaShBLCExJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxhKSxUPWEub25TdG9wPSgpPT57Y29uc3QgQT1MdC5nZXQoYSk7aWYoQSl7aWYoYyljKEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLDQpO2Vsc2UgZm9yKGNvbnN0IEcgb2YgQSlHKCk7THQuZGVsZXRlKGEpfX0sdD9zP3EoIScKICAgICAgICAgICAgICAgICAgICAgICAgYicwKTpXPWEucnVuKCk6bz9vKHEuYmluZChudWxsLCEwKSwhMCk6YS5ydW4oKSxqLnBhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1hLnBhdXNlLmJpbmQoYSksai5yZXN1bWU9YS5yZXN1bWUuYmluZChhKSxqLnN0b3A9aiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInan1mdW5jdGlvbiBBZShlLHQ9MS8wLG4pe2lmKHQ8PTB8fCFLKGUpfHxlLl9fdl9za2lwfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8KG49bnx8bmV3IFNldCxuLmhhcyhlKSkpcmV0dXJuIGU7aWYobi5hZGQoZSksdC0tLFEoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpKUFlKGUudmFsdWUsdCxuKTtlbHNlIGlmKEUoZSkpZm9yKGxldCBzPTA7czxlLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7cysrKUFlKGVbc10sdCxuKTtlbHNlIGlmKHF0KGUpfHxaZShlKSllLmZvckVhY2gocycKICAgICAgICAgICAgICAgICAgICAgICAgYic9PntBZShzLHQsbil9KTtlbHNlIGlmKFBzKGUpKXtmb3IoY29uc3QgcyBpbiBlKUFlKGVbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NdLHQsbik7Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscykmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidBZShlW3NdLHQsbil9cmV0dXJuIGV9LyoqXG4qIEB2dWUvcnVudGltZS1jb3JlIHYzLjUuMScKICAgICAgICAgICAgICAgICAgICAgICAgYiczXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL2Z1bmN0aW9uIFR0KGUsdCxuLHMpe3RyeScKICAgICAgICAgICAgICAgICAgICAgICAgYid7cmV0dXJuIHM/ZSguLi5zKTplKCl9Y2F0Y2gocil7WHQocix0LG4pfX1mdW5jdGlvbiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZSx0LG4scyl7aWYoUihlKSl7Y29uc3Qgcj1UdChlLHQsbixzKTtyZXR1cm4gciYmRXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHIpJiZyLmNhdGNoKGk9PntYdChpLHQsbil9KSxyfWlmKEUoZSkpe2NvbnN0IHI9W107ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXIucHVzaChDZShlW2ldLHQsbixzKSk7cmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiByfX1mdW5jdGlvbiBYdChlLHQsbixzPSEwKXtjb25zdCByPXQ/dC52bm9kZTpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCx7ZXJyb3JIYW5kbGVyOmksdGhyb3dVbmhhbmRsZWRFcnJvckluUHJvZHVjdGlvbjpvfScKICAgICAgICAgICAgICAgICAgICAgICAgYic9dCYmdC5hcHBDb250ZXh0LmNvbmZpZ3x8TDtpZih0KXtsZXQgbD10LnBhcmVudDtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgYz10LnByb3h5LGg9YGh0dHBzOi8vdnVlanMub3JnL2Vycm9yLXJlZmVyZW5jZS8jcnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpbWUtJHtufWA7Zm9yKDtsOyl7Y29uc3QgYT1sLmVjO2lmKGEpe2ZvcihsZXQgcD0wOycKICAgICAgICAgICAgICAgICAgICAgICAgYidwPGEubGVuZ3RoO3ArKylpZihhW3BdKGUsYyxoKT09PSExKXJldHVybn1sPWwucGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ31pZihpKXtqZSgpLFR0KGksbnVsbCwxMCxbZSxjLGhdKSxMZSgpO3JldHVybn19T2koZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixyLHMsbyl9ZnVuY3Rpb24gT2koZSx0LG4scz0hMCxyPSExKXtpZihyKXRocm93IGU7YycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnNvbGUuZXJyb3IoZSl9Y29uc3QgdGU9W107bGV0IHllPS0xO2NvbnN0IGtlPVtdO2xlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgSWU9bnVsbCx6ZT0wO2NvbnN0IGtzPVByb21pc2UucmVzb2x2ZSgpO2xldCAkdD1udWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDtmdW5jdGlvbiBFaShlKXtjb25zdCB0PSR0fHxrcztyZXR1cm4gZT90LnRoZW4odGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYic/ZS5iaW5kKHRoaXMpOmUpOnR9ZnVuY3Rpb24gQWkoZSl7bGV0IHQ9eWUrMSxuPXRlLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGg7Zm9yKDt0PG47KXtjb25zdCBzPXQrbj4+PjEscj10ZVtzXSxpPWJ0KHIpO2k8ZXwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfGk9PT1lJiZyLmZsYWdzJjI/dD1zKzE6bj1zfXJldHVybiB0fWZ1bmN0aW9uIEtuKGUpeycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZighKGUuZmxhZ3MmMSkpe2NvbnN0IHQ9YnQoZSksbj10ZVt0ZS5sZW5ndGgtMV07IW58JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3whKGUuZmxhZ3MmMikmJnQ+PWJ0KG4pP3RlLnB1c2goZSk6dGUuc3BsaWNlKEFpKHQpLDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpLGUuZmxhZ3N8PTEsZXIoKX19ZnVuY3Rpb24gZXIoKXskdHx8KCR0PWtzLnRoZW4obicKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSl9ZnVuY3Rpb24gUGkoZSl7RShlKT9rZS5wdXNoKC4uLmUpOkllJiZlLmlkPT09LTE/JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0llLnNwbGljZSh6ZSsxLDAsZSk6ZS5mbGFncyYxfHwoa2UucHVzaChlKSxlLmZsYWdzfD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSksZXIoKX1mdW5jdGlvbiB0cyhlLHQsbj15ZSsxKXtmb3IoO248dGUubGVuZ3RoO24rKycKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2NvbnN0IHM9dGVbbl07aWYocyYmcy5mbGFncyYyKXtpZihlJiZzLmlkIT09ZS51aWQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRpbnVlO3RlLnNwbGljZShuLDEpLG4tLSxzLmZsYWdzJjQmJihzLmZsYWdzJj0tMiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHMoKSxzLmZsYWdzJjR8fChzLmZsYWdzJj0tMil9fX1mdW5jdGlvbiB0cihlKXtpZihrZScKICAgICAgICAgICAgICAgICAgICAgICAgYicubGVuZ3RoKXtjb25zdCB0PVsuLi5uZXcgU2V0KGtlKV0uc29ydCgobixzKT0+YnQobiktJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J0KHMpKTtpZihrZS5sZW5ndGg9MCxJZSl7SWUucHVzaCguLi50KTtyZXR1cm59Zm9yKEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZT10LHplPTA7emU8SWUubGVuZ3RoO3plKyspe2NvbnN0IG49SWVbemVdO24uZmxhZ3MmNCcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJihuLmZsYWdzJj0tMiksbi5mbGFncyY4fHxuKCksbi5mbGFncyY9LTJ9SWU9bnVsbCx6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9MH19Y29uc3QgYnQ9ZT0+ZS5pZD09bnVsbD9lLmZsYWdzJjI/LTE6MS8wOmUuaWQ7ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG5yKGUpe3RyeXtmb3IoeWU9MDt5ZTx0ZS5sZW5ndGg7eWUrKyl7Y29uc3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9dGVbeWVdO3QmJiEodC5mbGFncyY4KSYmKHQuZmxhZ3MmNCYmKHQuZmxhZ3MmPS0yKSxUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QodCx0LmksdC5pPzE1OjE0KSx0LmZsYWdzJjR8fCh0LmZsYWdzJj0tMikpfX1maW5hbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXtmb3IoO3llPHRlLmxlbmd0aDt5ZSsrKXtjb25zdCB0PXRlW3llXTt0JiYodC5mbGFncycKICAgICAgICAgICAgICAgICAgICAgICAgYicmPS0yKX15ZT0tMSx0ZS5sZW5ndGg9MCx0cigpLCR0PW51bGwsKHRlLmxlbmd0aHx8a2UuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbmd0aCkmJm5yKCl9fWxldCB1ZT1udWxsLHNyPW51bGw7ZnVuY3Rpb24gVnQoZSl7Y28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHQ9dWU7cmV0dXJuIHVlPWUsc3I9ZSYmZS50eXBlLl9fc2NvcGVJZHx8bnVsbCx0fScKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBSaShlLHQ9dWUsbil7aWYoIXR8fGUuX24pcmV0dXJuIGU7Y29uc3Qgcz0oJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uLnIpPT57cy5fZCYmdXMoLTEpO2NvbnN0IGk9VnQodCk7bGV0IG87dHJ5e289ZSguLi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncil9ZmluYWxseXtWdChpKSxzLl9kJiZ1cygxKX1yZXR1cm4gb307cmV0dXJuIHMuX249IScKICAgICAgICAgICAgICAgICAgICAgICAgYicwLHMuX2M9ITAscy5fZD0hMCxzfWZ1bmN0aW9uIE1pKGUsdCl7aWYodWU9PT1udWxsKXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gZTtjb25zdCBuPWVuKHVlKSxzPWUuZGlyc3x8KGUuZGlycz1bXSk7Zm9yKGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj0wO3I8dC5sZW5ndGg7cisrKXtsZXRbaSxvLGwsYz1MXT10W3JdO2kmJihSKGkpJiYoaScKICAgICAgICAgICAgICAgICAgICAgICAgYic9e21vdW50ZWQ6aSx1cGRhdGVkOml9KSxpLmRlZXAmJkFlKG8pLHMucHVzaCh7ZGlyOmksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luc3RhbmNlOm4sdmFsdWU6byxvbGRWYWx1ZTp2b2lkIDAsYXJnOmwsbW9kaWZpZXJzOmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSkpfXJldHVybiBlfWZ1bmN0aW9uIEtlKGUsdCxuLHMpe2NvbnN0IHI9ZS5kaXJzLGk9dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJnQuZGlycztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7Y29uc3QgbD1yW29dO2kmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYobC5vbGRWYWx1ZT1pW29dLnZhbHVlKTtsZXQgYz1sLmRpcltzXTtjJiYoamUoKSxDZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYyxuLDgsW2UuZWwsbCxlLHRdKSxMZSgpKX19Y29uc3QgSWk9U3ltYm9sKCJfdnRlIiksRicKICAgICAgICAgICAgICAgICAgICAgICAgYidpPWU9PmUuX19pc1RlbGVwb3J0O2Z1bmN0aW9uIEJuKGUsdCl7ZS5zaGFwZUZsYWcmNiYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuY29tcG9uZW50PyhlLnRyYW5zaXRpb249dCxCbihlLmNvbXBvbmVudC5zdWJUcmVlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSk6ZS5zaGFwZUZsYWcmMTI4PyhlLnNzQ29udGVudC50cmFuc2l0aW9uPXQuY2xvbmUoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3NDb250ZW50KSxlLnNzRmFsbGJhY2sudHJhbnNpdGlvbj10LmNsb25lKGUuc3NGYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2spKTplLnRyYW5zaXRpb249dH1mdW5jdGlvbiBycihlKXtlLmlkcz1bZS5pZHNbMF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInK2UuaWRzWzJdKysrIi0iLDAsMF19ZnVuY3Rpb24gVXQoZSx0LG4scyxyPSExKXtpZihFKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSl7ZS5mb3JFYWNoKChGLEkpPT5VdChGLHQmJihFKHQpP3RbSV06dCksbixzLHIpKTtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJufWlmKGh0KHMpJiYhcil7cy5zaGFwZUZsYWcmNTEyJiZzLnR5cGUuX19hc3luY1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlZCYmcy5jb21wb25lbnQuc3ViVHJlZS5jb21wb25lbnQmJlV0KGUsdCxuLHMuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudC5zdWJUcmVlKTtyZXR1cm59Y29uc3QgaT1zLnNoYXBlRmxhZyY0P2VuKHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudCk6cy5lbCxvPXI/bnVsbDppLHtpOmwscjpjfT1lLGg9dCYmdC5yLGE9bC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmcz09PUw/bC5yZWZzPXt9OmwucmVmcyxwPWwuc2V0dXBTdGF0ZSxUPUQocCksQz1wPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PUw/KCk9PiExOkY9PkgoVCxGKTtpZihoIT1udWxsJiZoIT09YyYmKEooaCk/KGFbaF09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsQyhoKSYmKHBbaF09bnVsbCkpOlEoaCkmJihoLnZhbHVlPW51bGwpKSxSKGMpKVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChjLGwsMTIsW28sYV0pO2Vsc2V7Y29uc3QgRj1KKGMpLEk9UShjKTtpZihGfHxJKXtjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3Qgej0oKT0+e2lmKGUuZil7Y29uc3Qgaj1GP0MoYyk/cFtjXTphW2NdOmMudmFsdWU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I/RShqKSYmUm4oaixpKTpFKGopP2ouaW5jbHVkZXMoaSl8fGoucHVzaChpKTpGPyhhW2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXT1baV0sQyhjKSYmKHBbY109YVtjXSkpOihjLnZhbHVlPVtpXSxlLmsmJihhW2Uua109YycKICAgICAgICAgICAgICAgICAgICAgICAgYicudmFsdWUpKX1lbHNlIEY/KGFbY109byxDKGMpJiYocFtjXT1vKSk6SSYmKGMudmFsdWU9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28sZS5rJiYoYVtlLmtdPW8pKX07bz8oei5pZD0tMSxsZSh6LG4pKTp6KCl9fX1HdCgpLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXF1ZXN0SWRsZUNhbGxiYWNrO0d0KCkuY2FuY2VsSWRsZUNhbGxiYWNrO2NvbnN0IGh0PScKICAgICAgICAgICAgICAgICAgICAgICAgYidlPT4hIWUudHlwZS5fX2FzeW5jTG9hZGVyLGlyPWU9PmUudHlwZS5fX2lzS2VlcEFsaXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBEaShlLHQpe29yKGUsImEiLHQpfWZ1bmN0aW9uIEhpKGUsdCl7b3IoZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImRhIix0KX1mdW5jdGlvbiBvcihlLHQsbj1uZSl7Y29uc3Qgcz1lLl9fd2RjfHwoZS5fXycKICAgICAgICAgICAgICAgICAgICAgICAgYid3ZGM9KCk9PntsZXQgcj1uO2Zvcig7cjspe2lmKHIuaXNEZWFjdGl2YXRlZClyZXR1cm47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9ci5wYXJlbnR9cmV0dXJuIGUoKX0pO2lmKFp0KHQscyxuKSxuKXtsZXQgcj1uLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7Zm9yKDtyJiZyLnBhcmVudDspaXIoci5wYXJlbnQudm5vZGUpJiZOaShzLHQsbixyKScKICAgICAgICAgICAgICAgICAgICAgICAgYicscj1yLnBhcmVudH19ZnVuY3Rpb24gTmkoZSx0LG4scyl7Y29uc3Qgcj1adCh0LGUscywhJwogICAgICAgICAgICAgICAgICAgICAgICBiJzApO2xyKCgpPT57Um4oc1t0XSxyKX0sbil9ZnVuY3Rpb24gWnQoZSx0LG49bmUscz0hMSknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKG4pe2NvbnN0IHI9bltlXXx8KG5bZV09W10pLGk9dC5fX3dlaHx8KHQuX193ZWg9KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuLi5vKT0+e2plKCk7Y29uc3QgbD1DdChuKSxjPUNlKHQsbixlLG8pO3JldHVybiBsKCksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xlKCksY30pO3JldHVybiBzP3IudW5zaGlmdChpKTpyLnB1c2goaSksaX19Y29uc3QgUGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWU9Pih0LG49bmUpPT57KCFTdHx8ZT09PSJzcCIpJiZadChlLCguLi5zKT0+dCguLi5zKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsbil9LGppPVBlKCJibSIpLExpPVBlKCJtIiksJGk9UGUoImJ1IiksVmk9UGUoInUiKSxVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k9UGUoImJ1bSIpLGxyPVBlKCJ1bSIpLEtpPVBlKCJzcCIpLEJpPVBlKCJydGciKSxXaT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUGUoInJ0YyIpO2Z1bmN0aW9uIHFpKGUsdD1uZSl7WnQoImVjIixlLHQpfWNvbnN0IEppPScKICAgICAgICAgICAgICAgICAgICAgICAgYidTeW1ib2wuZm9yKCJ2LW5kYyIpO2Z1bmN0aW9uIEdpKGUsdCxuLHMpe2xldCByO2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpPW4sbz1FKGUpO2lmKG98fEooZSkpe2NvbnN0IGw9byYmUWUoZSk7bGV0IGM9ITE7bCYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJihjPSFhZShlKSxlPXp0KGUpKSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBoPScKICAgICAgICAgICAgICAgICAgICAgICAgYicwLGE9ZS5sZW5ndGg7aDxhO2grKylyW2hdPXQoYz9aKGVbaF0pOmVbaF0saCx2b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2kpfWVsc2UgaWYodHlwZW9mIGU9PSJudW1iZXIiKXtyPW5ldyBBcnJheShlKTtmb3IobGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBsPTA7bDxlO2wrKylyW2xdPXQobCsxLGwsdm9pZCAwLGkpfWVsc2UgaWYoSyhlKSlpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicoZVtTeW1ib2wuaXRlcmF0b3JdKXI9QXJyYXkuZnJvbShlLChsLGMpPT50KGwsYyx2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwLGkpKTtlbHNle2NvbnN0IGw9T2JqZWN0LmtleXMoZSk7cj1uZXcgQXJyYXkobC5sZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ3RoKTtmb3IobGV0IGM9MCxoPWwubGVuZ3RoO2M8aDtjKyspe2NvbnN0IGE9bFtjXTtyWycKICAgICAgICAgICAgICAgICAgICAgICAgYidjXT10KGVbYV0sYSxjLGkpfX1lbHNlIHI9W107cmV0dXJuIHJ9Y29uc3Qgd249ZT0+ZT9SJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZSk/ZW4oZSk6d24oZS5wYXJlbnQpOm51bGwscHQ9c2UoT2JqZWN0LmNyZWF0ZShudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCkseyQ6ZT0+ZSwkZWw6ZT0+ZS52bm9kZS5lbCwkZGF0YTplPT5lLmRhdGEsJHByb3BzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidlPT5lLnByb3BzLCRhdHRyczplPT5lLmF0dHJzLCRzbG90czplPT5lLnNsb3RzLCRyZWZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzplPT5lLnJlZnMsJHBhcmVudDplPT53bihlLnBhcmVudCksJHJvb3Q6ZT0+d24oZS5yb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCksJGhvc3Q6ZT0+ZS5jZSwkZW1pdDplPT5lLmVtaXQsJG9wdGlvbnM6ZT0+Y3IoZSksJCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JjZVVwZGF0ZTplPT5lLmZ8fChlLmY9KCk9PntLbihlLnVwZGF0ZSl9KSwkbmV4dFRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NrOmU9PmUubnx8KGUubj1FaS5iaW5kKGUucHJveHkpKSwkd2F0Y2g6ZT0+X28uYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSl9KSxjbj0oZSx0KT0+ZSE9PUwmJiFlLl9faXNTY3JpcHRTZXR1cCYmSChlLHQpLFlpPScKICAgICAgICAgICAgICAgICAgICAgICAgYid7Z2V0KHtfOmV9LHQpe2lmKHQ9PT0iX192X3NraXAiKXJldHVybiEwO2NvbnN0e2N0eDpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxzZXR1cFN0YXRlOnMsZGF0YTpyLHByb3BzOmksYWNjZXNzQ2FjaGU6byx0eXBlOmwsYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncENvbnRleHQ6Y309ZTtsZXQgaDtpZih0WzBdIT09IiQiKXtjb25zdCBDPW9bdF07aWYoQycKICAgICAgICAgICAgICAgICAgICAgICAgYichPT12b2lkIDApc3dpdGNoKEMpe2Nhc2UgMTpyZXR1cm4gc1t0XTtjYXNlIDI6cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByW3RdO2Nhc2UgNDpyZXR1cm4gblt0XTtjYXNlIDM6cmV0dXJuIGlbdF19ZWxzZXtpZignCiAgICAgICAgICAgICAgICAgICAgICAgIGInY24ocyx0KSlyZXR1cm4gb1t0XT0xLHNbdF07aWYociE9PUwmJkgocix0KSlyZXR1cm4gbycKICAgICAgICAgICAgICAgICAgICAgICAgYidbdF09MixyW3RdO2lmKChoPWUucHJvcHNPcHRpb25zWzBdKSYmSChoLHQpKXJldHVybiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1t0XT0zLGlbdF07aWYobiE9PUwmJkgobix0KSlyZXR1cm4gb1t0XT00LG5bdF07VG4mJignCiAgICAgICAgICAgICAgICAgICAgICAgIGInb1t0XT0wKX19Y29uc3QgYT1wdFt0XTtsZXQgcCxUO2lmKGEpcmV0dXJuIHQ9PT0iJGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycyImJlgoZS5hdHRycywiZ2V0IiwiIiksYShlKTtpZigocD1sLl9fY3NzTW9kdWxlcykmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYocD1wW3RdKSlyZXR1cm4gcDtpZihuIT09TCYmSChuLHQpKXJldHVybiBvW3RdPTQsblsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndF07aWYoVD1jLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLEgoVCx0KSlyZXR1cm4gVFt0XScKICAgICAgICAgICAgICAgICAgICAgICAgYid9LHNldCh7XzplfSx0LG4pe2NvbnN0e2RhdGE6cyxzZXR1cFN0YXRlOnIsY3R4Oml9PWU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBjbihyLHQpPyhyW3RdPW4sITApOnMhPT1MJiZIKHMsdCk/KHNbdF09biwhMCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOkgoZS5wcm9wcyx0KXx8dFswXT09PSIkIiYmdC5zbGljZSgxKWluIGU/ITE6KGlbdF09bicKICAgICAgICAgICAgICAgICAgICAgICAgYicsITApfSxoYXMoe186e2RhdGE6ZSxzZXR1cFN0YXRlOnQsYWNjZXNzQ2FjaGU6bixjdHg6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsYXBwQ29udGV4dDpyLHByb3BzT3B0aW9uczppfX0sbyl7bGV0IGw7cmV0dXJuISFuW28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXXx8ZSE9PUwmJkgoZSxvKXx8Y24odCxvKXx8KGw9aVswXSkmJkgobCxvKXx8SChzLG8pfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8SChwdCxvKXx8SChyLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLG8pfSxkZWZpbmVQcm9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VydHkoZSx0LG4pe3JldHVybiBuLmdldCE9bnVsbD9lLl8uYWNjZXNzQ2FjaGVbdF09MDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInSChuLCJ2YWx1ZSIpJiZ0aGlzLnNldChlLHQsbi52YWx1ZSxudWxsKSxSZWZsZWN0LmRlZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVQcm9wZXJ0eShlLHQsbil9fTtmdW5jdGlvbiBucyhlKXtyZXR1cm4gRShlKT9lLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R1Y2UoKHQsbik9Pih0W25dPW51bGwsdCkse30pOmV9bGV0IFRuPSEwO2Z1bmN0aW9uIHonCiAgICAgICAgICAgICAgICAgICAgICAgIGInaShlKXtjb25zdCB0PWNyKGUpLG49ZS5wcm94eSxzPWUuY3R4O1RuPSExLHQuYmVmb3JlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZSYmc3ModC5iZWZvcmVDcmVhdGUsZSwiYmMiKTtjb25zdHtkYXRhOnIsY29tcHV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkOmksbWV0aG9kczpvLHdhdGNoOmwscHJvdmlkZTpjLGluamVjdDpoLGNyZWF0ZWQ6YSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVmb3JlTW91bnQ6cCxtb3VudGVkOlQsYmVmb3JlVXBkYXRlOkMsdXBkYXRlZDpGLGFjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmF0ZWQ6SSxkZWFjdGl2YXRlZDp6LGJlZm9yZURlc3Ryb3k6aixiZWZvcmVVbm1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpXLGRlc3Ryb3llZDpxLHVubW91bnRlZDpBLHJlbmRlcjpHLHJlbmRlclRyYWNrZWQ6UmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHJlbmRlclRyaWdnZXJlZDpoZSxlcnJvckNhcHR1cmVkOk1lLHNlcnZlclByZWZldGNoOicKICAgICAgICAgICAgICAgICAgICAgICAgYid2dCxleHBvc2U6JGUsaW5oZXJpdEF0dHJzOm50LGNvbXBvbmVudHM6T3QsZGlyZWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M6RXQsZmlsdGVyczp0bn09dDtpZihoJiZYaShoLHMsbnVsbCksbylmb3IoY29uc3QgQiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gbyl7Y29uc3QgJD1vW0JdO1IoJCkmJihzW0JdPSQuYmluZChuKSl9aWYocil7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IEI9ci5jYWxsKG4sbik7SyhCKSYmKGUuZGF0YT0kbihCKSl9aWYoVG49ITAsaSlmb3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IEIgaW4gaSl7Y29uc3QgJD1pW0JdLFZlPVIoJCk/JC5iaW5kKG4sbik6UigkLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQpPyQuZ2V0LmJpbmQobixuKTp3ZSxBdD0hUigkKSYmUigkLnNldCk/JC5zZXQuYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicobik6d2UsVWU9am8oe2dldDpWZSxzZXQ6QXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsQix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5VZS52YWx1ZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0OnBlPT5VZS52YWx1ZT1wZX0pfWlmKGwpZm9yKGNvbnN0IEIgaW4gbClmcihsW0JdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLG4sQik7aWYoYyl7Y29uc3QgQj1SKGMpP2MuY2FsbChuKTpjO1JlZmxlY3Qub3duS2V5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoQikuZm9yRWFjaCgkPT57bm8oJCxCWyRdKX0pfWEmJnNzKGEsZSwiYyIpO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBrKEIsJCl7RSgkKT8kLmZvckVhY2goVmU9PkIoVmUuYmluZChuKSkpOiQmJkIoJC5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZChuKSl9aWYoayhqaSxwKSxrKExpLFQpLGsoJGksQyksayhWaSxGKSxrKERpLEkpLGsoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hpLHopLGsocWksTWUpLGsoV2ksUmUpLGsoQmksaGUpLGsoVWksVyksayhscixBKSxrKEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSx2dCksRSgkZSkpaWYoJGUubGVuZ3RoKXtjb25zdCBCPWUuZXhwb3NlZHx8KGUuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWQ9e30pOyRlLmZvckVhY2goJD0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCQse2dlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6KCk9Pm5bJF0sc2V0OlZlPT5uWyRdPVZlfSl9KX1lbHNlIGUuZXhwb3NlZHx8KGUuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zZWQ9e30pO0cmJmUucmVuZGVyPT09d2UmJihlLnJlbmRlcj1HKSxudCE9bnVsbCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLmluaGVyaXRBdHRycz1udCksT3QmJihlLmNvbXBvbmVudHM9T3QpLEV0JiYoZS5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aXZlcz1FdCksdnQmJnJyKGUpfWZ1bmN0aW9uIFhpKGUsdCxuPXdlKXtFKGUpJiYoZT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ24oZSkpO2Zvcihjb25zdCBzIGluIGUpe2NvbnN0IHI9ZVtzXTtsZXQgaTtLKHIpPyJkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCJpbiByP2k9RHQoci5mcm9tfHxzLHIuZGVmYXVsdCwhMCk6aT1EdChyLmZyb218JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3xzKTppPUR0KHIpLFEoaSk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscyx7ZW51bWVyYWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+aS52YWx1ZSxzZXQ6bz0+aS52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic9b30pOnRbc109aX19ZnVuY3Rpb24gc3MoZSx0LG4pe0NlKEUoZSk/ZS5tYXAocz0+cy5iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCh0LnByb3h5KSk6ZS5iaW5kKHQucHJveHkpLHQsbil9ZnVuY3Rpb24gZnIoZSx0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHMpe2xldCByPXMuaW5jbHVkZXMoIi4iKT9UcihuLHMpOigpPT5uW3NdO2lmKEooZSkpeycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpPXRbZV07UihpKSYmYW4ocixpKX1lbHNlIGlmKFIoZSkpYW4ocixlLmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pKTtlbHNlIGlmKEsoZSkpaWYoRShlKSllLmZvckVhY2goaT0+ZnIoaSx0LG4scykpO2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHNle2NvbnN0IGk9UihlLmhhbmRsZXIpP2UuaGFuZGxlci5iaW5kKG4pOnRbZS5oYW5kbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcl07UihpKSYmYW4ocixpLGUpfX1mdW5jdGlvbiBjcihlKXtjb25zdCB0PWUudHlwZSx7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21peGluczpuLGV4dGVuZHM6c309dCx7bWl4aW5zOnIsb3B0aW9uc0NhY2hlOmksY29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOm99fT1lLmFwcENvbnRleHQsbD1pLmdldCh0KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7bGV0IGM7cmV0dXJuIGw/Yz1sOiFyLmxlbmd0aCYmIW4mJiFzP2M9dDooYz17fSxyLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgmJnIuZm9yRWFjaChoPT5LdChjLGgsbywhMCkpLEt0KGMsdCxvKSksSyh0KSYmaS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0KHQsYyksY31mdW5jdGlvbiBLdChlLHQsbixzPSExKXtjb25zdHttaXhpbnM6cixleCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kczppfT10O2kmJkt0KGUsaSxuLCEwKSxyJiZyLmZvckVhY2gobz0+S3QoZSxvLG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyEwKSk7Zm9yKGNvbnN0IG8gaW4gdClpZighKHMmJm89PT0iZXhwb3NlIikpe2NvbnN0IGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVppW29dfHxuJiZuW29dO2Vbb109bD9sKGVbb10sdFtvXSk6dFtvXX1yZXR1cm4gZX1jbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgWmk9e2RhdGE6cnMscHJvcHM6aXMsZW1pdHM6aXMsbWV0aG9kczpjdCxjb21wdXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q6Y3QsYmVmb3JlQ3JlYXRlOmVlLGNyZWF0ZWQ6ZWUsYmVmb3JlTW91bnQ6ZWUsbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQ6ZWUsYmVmb3JlVXBkYXRlOmVlLHVwZGF0ZWQ6ZWUsYmVmb3JlRGVzdHJveTplZSxiZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JlVW5tb3VudDplZSxkZXN0cm95ZWQ6ZWUsdW5tb3VudGVkOmVlLGFjdGl2YXRlZDplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsZGVhY3RpdmF0ZWQ6ZWUsZXJyb3JDYXB0dXJlZDplZSxzZXJ2ZXJQcmVmZXRjaDplZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50czpjdCxkaXJlY3RpdmVzOmN0LHdhdGNoOmtpLHByb3ZpZGU6cnMsaW5qZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdDpRaX07ZnVuY3Rpb24gcnMoZSx0KXtyZXR1cm4gdD9lP2Z1bmN0aW9uKCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZShSKGUpP2UuY2FsbCh0aGlzLHRoaXMpOmUsUih0KT90LmNhbGwodGhpcyx0aGlzKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCl9OnQ6ZX1mdW5jdGlvbiBRaShlLHQpe3JldHVybiBjdChDbihlKSxDbih0KSl9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIENuKGUpe2lmKEUoZSkpe2NvbnN0IHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g7bisrKXRbZVtuXV09ZVtuXTtyZXR1cm4gdH1yZXR1cm4gZX1mdW5jdGlvbiBlZShlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gZT9bLi4ubmV3IFNldChbXS5jb25jYXQoZSx0KSldOnR9ZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUsdCl7cmV0dXJuIGU/c2UoT2JqZWN0LmNyZWF0ZShudWxsKSxlLHQpOnR9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGlzKGUsdCl7cmV0dXJuIGU/RShlKSYmRSh0KT9bLi4ubmV3IFNldChbLi4uZSwuLi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndF0pXTpzZShPYmplY3QuY3JlYXRlKG51bGwpLG5zKGUpLG5zKHQ/P3t9KSk6dH1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24ga2koZSx0KXtpZighZSlyZXR1cm4gdDtpZighdClyZXR1cm4gZTtjb25zdCBuPXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhPYmplY3QuY3JlYXRlKG51bGwpLGUpO2Zvcihjb25zdCBzIGluIHQpbltzXT1lZShlW3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiB1cigpe3JldHVybnthcHA6bnVsbCxjb25maScKICAgICAgICAgICAgICAgICAgICAgICAgYidnOntpc05hdGl2ZVRhZzpqcixwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGU6bmV3IFdlYWtNYXB9fWxldCBlbz0wO2Z1bmN0aW9uIHRvKGUsdCl7cmV0dXJuIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihzLHI9bnVsbCl7UihzKXx8KHM9c2Uoe30scykpLHIhPW51bGwmJiFLKHIpJiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9bnVsbCk7Y29uc3QgaT11cigpLG89bmV3IFdlYWtTZXQsbD1bXTtsZXQgYz0hMTtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgaD1pLmFwcD17X3VpZDplbysrLF9jb21wb25lbnQ6cyxfcHJvcHM6cixfY29udGFpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcjpudWxsLF9jb250ZXh0OmksX2luc3RhbmNlOm51bGwsdmVyc2lvbjpMbyxnZXQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpZygpe3JldHVybiBpLmNvbmZpZ30sc2V0IGNvbmZpZyhhKXt9LHVzZShhLC4uLnApe3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gby5oYXMoYSl8fChhJiZSKGEuaW5zdGFsbCk/KG8uYWRkKGEpLGEuaW5zdGFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoaCwuLi5wKSk6UihhKSYmKG8uYWRkKGEpLGEoaCwuLi5wKSkpLGh9LG1peGluKGEpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gaS5taXhpbnMuaW5jbHVkZXMoYSl8fGkubWl4aW5zLnB1c2goYSksaH0sY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudChhLHApe3JldHVybiBwPyhpLmNvbXBvbmVudHNbYV09cCxoKTppLmNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzW2FdfSxkaXJlY3RpdmUoYSxwKXtyZXR1cm4gcD8oaS5kaXJlY3RpdmVzW2FdPXAsaCk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2kuZGlyZWN0aXZlc1thXX0sbW91bnQoYSxwLFQpe2lmKCFjKXtjb25zdCBDPWguX2NlVk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlfHxIZShzLHIpO3JldHVybiBDLmFwcENvbnRleHQ9aSxUPT09ITA/VD0ic3ZnIjpUPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PSExJiYoVD12b2lkIDApLGUoQyxhLFQpLGM9ITAsaC5fY29udGFpbmVyPWEsYS5fX3Z1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VfYXBwX189aCxlbihDLmNvbXBvbmVudCl9fSxvblVubW91bnQoYSl7bC5wdXNoKGEpfSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5tb3VudCgpe2MmJihDZShsLGguX2luc3RhbmNlLDE2KSxlKG51bGwsaC5fY29udGFpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciksZGVsZXRlIGguX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUoYSxwKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGkucHJvdmlkZXNbYV09cCxofSxydW5XaXRoQ29udGV4dChhKXtjb25zdCBwPWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtldD1oO3RyeXtyZXR1cm4gYSgpfWZpbmFsbHl7ZXQ9cH19fTtyZXR1cm4gaH19bGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldD1udWxsO2Z1bmN0aW9uIG5vKGUsdCl7aWYobmUpe2xldCBuPW5lLnByb3ZpZGVzO2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBzPW5lLnBhcmVudCYmbmUucGFyZW50LnByb3ZpZGVzO3M9PT1uJiYobj1uZS5wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZXM9T2JqZWN0LmNyZWF0ZShzKSksbltlXT10fX1mdW5jdGlvbiBEdChlLHQsbj0hMScKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2NvbnN0IHM9bmV8fHVlO2lmKHN8fGV0KXtjb25zdCByPWV0P2V0Ll9jb250ZXh0LnByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlczpzP3MucGFyZW50PT1udWxsP3Mudm5vZGUuYXBwQ29udGV4dCYmcy52bm9kZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwQ29udGV4dC5wcm92aWRlczpzLnBhcmVudC5wcm92aWRlczp2b2lkIDA7aWYociYmZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW4gcilyZXR1cm4gcltlXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIG4mJlIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpP3QuY2FsbChzJiZzLnByb3h5KTp0fX1jb25zdCBhcj17fSxkcj0oKT0+T2JqZWN0LmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGUoYXIpLGhyPWU9Pk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PWFyO2Z1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBzbyhlLHQsbixzPSExKXtjb25zdCByPXt9LGk9ZHIoKTtlLnByb3BzRGVmYXVsdHM9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ09iamVjdC5jcmVhdGUobnVsbCkscHIoZSx0LHIsaSk7Zm9yKGNvbnN0IG8gaW4gZS5wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHNPcHRpb25zWzBdKW8gaW4gcnx8KHJbb109dm9pZCAwKTtuP2UucHJvcHM9cz9yOl9pKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyKTplLnR5cGUucHJvcHM/ZS5wcm9wcz1yOmUucHJvcHM9aSxlLmF0dHJzPWl9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHJvKGUsdCxuLHMpe2NvbnN0e3Byb3BzOnIsYXR0cnM6aSx2bm9kZTp7cGF0Y2hGbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZzpvfX09ZSxsPUQociksW2NdPWUucHJvcHNPcHRpb25zO2xldCBoPSExO2lmKChzfHxvPicKICAgICAgICAgICAgICAgICAgICAgICAgYicwKSYmIShvJjE2KSl7aWYobyY4KXtjb25zdCBhPWUudm5vZGUuZHluYW1pY1Byb3BzO2ZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IobGV0IHA9MDtwPGEubGVuZ3RoO3ArKyl7bGV0IFQ9YVtwXTtpZihRdChlLmVtaXRzT3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsVCkpY29udGludWU7Y29uc3QgQz10W1RdO2lmKGMpaWYoSChpLFQpKUMhPT1pWycKICAgICAgICAgICAgICAgICAgICAgICAgYidUXSYmKGlbVF09QyxoPSEwKTtlbHNle2NvbnN0IEY9TmUoVCk7cltGXT12bihjLGwsRixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxlLCExKX1lbHNlIEMhPT1pW1RdJiYoaVtUXT1DLGg9ITApfX19ZWxzZXtwcihlLHQsciwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSkmJihoPSEwKTtsZXQgYTtmb3IoY29uc3QgcCBpbiBsKSghdHx8IUgodCxwKSYmKChhPScKICAgICAgICAgICAgICAgICAgICAgICAgYidHZShwKSk9PT1wfHwhSCh0LGEpKSkmJihjP24mJihuW3BdIT09dm9pZCAwfHxuW2FdIT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQgMCkmJihyW3BdPXZuKGMsbCxwLHZvaWQgMCxlLCEwKSk6ZGVsZXRlIHJbcF0pO2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihpIT09bClmb3IoY29uc3QgcCBpbiBpKSghdHx8IUgodCxwKSkmJihkZWxldGUgaVtwXScKICAgICAgICAgICAgICAgICAgICAgICAgYicsaD0hMCl9aCYmRWUoZS5hdHRycywic2V0IiwiIil9ZnVuY3Rpb24gcHIoZSx0LG4scyl7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0W3IsaV09ZS5wcm9wc09wdGlvbnM7bGV0IG89ITEsbDtpZih0KWZvcihsZXQgYyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gdCl7aWYodXQoYykpY29udGludWU7Y29uc3QgaD10W2NdO2xldCBhO3ImJkgocixhPScKICAgICAgICAgICAgICAgICAgICAgICAgYidOZShjKSk/IWl8fCFpLmluY2x1ZGVzKGEpP25bYV09aDoobHx8KGw9e30pKVthXT1oOlF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlLmVtaXRzT3B0aW9ucyxjKXx8KCEoYyBpbiBzKXx8aCE9PXNbY10pJiYoc1tjXT1oLG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSEwKX1pZihpKXtjb25zdCBjPUQobiksaD1sfHxMO2ZvcihsZXQgYT0wO2E8aS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoO2ErKyl7Y29uc3QgcD1pW2FdO25bcF09dm4ocixjLHAsaFtwXSxlLCFIKGgscCkpfX1yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIG99ZnVuY3Rpb24gdm4oZSx0LG4scyxyLGkpe2NvbnN0IG89ZVtuXTtpZihvIT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCl7Y29uc3QgbD1IKG8sImRlZmF1bHQiKTtpZihsJiZzPT09dm9pZCAwKXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYz1vLmRlZmF1bHQ7aWYoby50eXBlIT09RnVuY3Rpb24mJiFvLnNraXBGYWN0b3J5JiZSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhjKSl7Y29uc3R7cHJvcHNEZWZhdWx0czpofT1yO2lmKG4gaW4gaClzPWhbbl07ZWxzZXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgYT1DdChyKTtzPWhbbl09Yy5jYWxsKG51bGwsdCksYSgpfX1lbHNlIHM9YztyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSYmci5jZS5fc2V0UHJvcChuLHMpfW9bMF0mJihpJiYhbD9zPSExOm9bMV0mJihzPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyIifHxzPT09R2UobikpJiYocz0hMCkpfXJldHVybiBzfWNvbnN0IGlvPW5ldyBXZWFrTWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncDtmdW5jdGlvbiBncihlLHQsbj0hMSl7Y29uc3Qgcz1uP2lvOnQucHJvcHNDYWNoZSxyPScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLmdldChlKTtpZihyKXJldHVybiByO2NvbnN0IGk9ZS5wcm9wcyxvPXt9LGw9W107bGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjPSExO2lmKCFSKGUpKXtjb25zdCBhPXA9PntjPSEwO2NvbnN0W1QsQ109Z3IocCx0LCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCk7c2UobyxUKSxDJiZsLnB1c2goLi4uQyl9OyFuJiZ0Lm1peGlucy5sZW5ndGgmJnQubScKICAgICAgICAgICAgICAgICAgICAgICAgYidpeGlucy5mb3JFYWNoKGEpLGUuZXh0ZW5kcyYmYShlLmV4dGVuZHMpLGUubWl4aW5zJiZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5taXhpbnMuZm9yRWFjaChhKX1pZighaSYmIWMpcmV0dXJuIEsoZSkmJnMuc2V0KGUsWGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSxYZTtpZihFKGkpKWZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXtjb25zdCBwPU5lKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpW2FdKTtvcyhwKSYmKG9bcF09TCl9ZWxzZSBpZihpKWZvcihjb25zdCBhIGluIGkpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBwPU5lKGEpO2lmKG9zKHApKXtjb25zdCBUPWlbYV0sQz1vW3BdPUUoVCl8fFIoVCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInP3t0eXBlOlR9OnNlKHt9LFQpLEY9Qy50eXBlO2xldCBJPSExLHo9ITA7aWYoRShGKSlmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKGxldCBqPTA7ajxGLmxlbmd0aDsrK2ope2NvbnN0IFc9RltqXSxxPVIoVykmJlcubmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7aWYocT09PSJCb29sZWFuIil7ST0hMDticmVha31lbHNlIHE9PT0iU3RyaW5nIiYmKHonCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSExKX1lbHNlIEk9UihGKSYmRi5uYW1lPT09IkJvb2xlYW4iO0NbMF09SSxDWzFdPXosKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJfHxIKEMsImRlZmF1bHQiKSkmJmwucHVzaChwKX19Y29uc3QgaD1bbyxsXTtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0soZSkmJnMuc2V0KGUsaCksaH1mdW5jdGlvbiBvcyhlKXtyZXR1cm4gZVswXSE9PSIkIiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiF1dChlKX1jb25zdCBfcj1lPT5lWzBdPT09Il8ifHxlPT09IiRzdGFibGUiLFduPWU9PicKICAgICAgICAgICAgICAgICAgICAgICAgYidFKGUpP2UubWFwKFNlKTpbU2UoZSldLG9vPShlLHQsbik9PntpZih0Ll9uKXJldHVybiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJztjb25zdCBzPVJpKCguLi5yKT0+V24odCguLi5yKSksbik7cmV0dXJuIHMuX2M9ITEsc30nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG1yPShlLHQsbik9Pntjb25zdCBzPWUuX2N0eDtmb3IoY29uc3QgciBpbiBlKXtpZihfcicKICAgICAgICAgICAgICAgICAgICAgICAgYicocikpY29udGludWU7Y29uc3QgaT1lW3JdO2lmKFIoaSkpdFtyXT1vbyhyLGkscyk7ZWxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaWYoaSE9bnVsbCl7Y29uc3Qgbz1XbihpKTt0W3JdPSgpPT5vfX19LGJyPShlLHQpPT4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IG49V24odCk7ZS5zbG90cy5kZWZhdWx0PSgpPT5ufSx5cj0oZSx0LG4pPT57ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcihjb25zdCBzIGluIHQpKG58fHMhPT0iXyIpJiYoZVtzXT10W3NdKX0sbG89KGUsdCxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk9Pntjb25zdCBzPWUuc2xvdHM9ZHIoKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7Y28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHI9dC5fO3I/KHlyKHMsdCxuKSxuJiZNcyhzLCJfIixyLCEwKSk6bXIodCxzKX1lbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSB0JiZicihlLHQpfSxmbz0oZSx0LG4pPT57Y29uc3R7dm5vZGU6cyxzbG90czpyfT1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJztsZXQgaT0hMCxvPUw7aWYocy5zaGFwZUZsYWcmMzIpe2NvbnN0IGw9dC5fO2w/biYmbD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0xP2k9ITE6eXIocix0LG4pOihpPSF0LiRzdGFibGUsbXIodCxyKSksbz10fWVsc2UgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJihicihlLHQpLG89e2RlZmF1bHQ6MX0pO2lmKGkpZm9yKGNvbnN0IGwgaW4gcikhX3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wpJiZvW2xdPT1udWxsJiZkZWxldGUgcltsXX0sbGU9VG87ZnVuY3Rpb24gY28oZSl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB1byhlKX1mdW5jdGlvbiB1byhlLHQpe2NvbnN0IG49R3QoKTtuLl9fVlVFX189IScKICAgICAgICAgICAgICAgICAgICAgICAgYicwO2NvbnN0e2luc2VydDpzLHJlbW92ZTpyLHBhdGNoUHJvcDppLGNyZWF0ZUVsZW1lbnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28sY3JlYXRlVGV4dDpsLGNyZWF0ZUNvbW1lbnQ6YyxzZXRUZXh0Omgsc2V0RWxlbWVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0OmEscGFyZW50Tm9kZTpwLG5leHRTaWJsaW5nOlQsc2V0U2NvcGVJZDpDPXdlLGlucycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnRTdGF0aWNDb250ZW50OkZ9PWUsST0oZix1LGQsbT1udWxsLGc9bnVsbCxfPW51bGwsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1M9dm9pZCAwLHg9bnVsbCx5PSEhdS5keW5hbWljQ2hpbGRyZW4pPT57aWYoZj09PXUpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybjtmJiYhbHQoZix1KSYmKG09UHQoZikscGUoZixnLF8sITApLGY9bnVsbCksdS5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2hGbGFnPT09LTImJih5PSExLHUuZHluYW1pY0NoaWxkcmVuPW51bGwpO2NvbnN0e3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlOmIscmVmOk8sc2hhcGVGbGFnOnd9PXU7c3dpdGNoKGIpe2Nhc2Uga3Q6eihmLHUsZCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSk7YnJlYWs7Y2FzZSB5dDpqKGYsdSxkLG0pO2JyZWFrO2Nhc2UgZG46Zj09bnVsbCYmVycKICAgICAgICAgICAgICAgICAgICAgICAgYicodSxkLG0sUyk7YnJlYWs7Y2FzZSB4ZTpPdChmLHUsZCxtLGcsXyxTLHgseSk7YnJlYWs7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZmF1bHQ6dyYxP0coZix1LGQsbSxnLF8sUyx4LHkpOncmNj9FdChmLHUsZCxtLGcsXywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUyx4LHkpOih3JjY0fHx3JjEyOCkmJmIucHJvY2VzcyhmLHUsZCxtLGcsXyxTLHgseSxydCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpfU8hPW51bGwmJmcmJlV0KE8sZiYmZi5yZWYsXyx1fHxmLCF1KX0sej0oZix1LGQsbSk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz57aWYoZj09bnVsbClzKHUuZWw9bCh1LmNoaWxkcmVuKSxkLG0pO2Vsc2V7Y29uc3QgZz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndS5lbD1mLmVsO3UuY2hpbGRyZW4hPT1mLmNoaWxkcmVuJiZoKGcsdS5jaGlsZHJlbil9fScKICAgICAgICAgICAgICAgICAgICAgICAgYicsaj0oZix1LGQsbSk9PntmPT1udWxsP3ModS5lbD1jKHUuY2hpbGRyZW58fCIiKSxkLG0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJzp1LmVsPWYuZWx9LFc9KGYsdSxkLG0pPT57W2YuZWwsZi5hbmNob3JdPUYoZi5jaGlsZHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4sdSxkLG0sZi5lbCxmLmFuY2hvcil9LHE9KHtlbDpmLGFuY2hvcjp1fSxkLG0pPT57bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldCBnO2Zvcig7ZiYmZiE9PXU7KWc9VChmKSxzKGYsZCxtKSxmPWc7cyh1LGQsbSl9LEE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh7ZWw6ZixhbmNob3I6dX0pPT57bGV0IGQ7Zm9yKDtmJiZmIT09dTspZD1UKGYpLHIoZiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGY9ZDtyKHUpfSxHPShmLHUsZCxtLGcsXyxTLHgseSk9Pnt1LnR5cGU9PT0ic3ZnIj9TPScKICAgICAgICAgICAgICAgICAgICAgICAgYicic3ZnIjp1LnR5cGU9PT0ibWF0aCImJihTPSJtYXRobWwiKSxmPT1udWxsP1JlKHUsZCxtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxnLF8sUyx4LHkpOnZ0KGYsdSxnLF8sUyx4LHkpfSxSZT0oZix1LGQsbSxnLF8sUyx4KT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPntsZXQgeSxiO2NvbnN0e3Byb3BzOk8sc2hhcGVGbGFnOncsdHJhbnNpdGlvbjp2LGRpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzOlB9PWY7aWYoeT1mLmVsPW8oZi50eXBlLF8sTyYmTy5pcyxPKSx3Jjg/YSh5LGYuY2hpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkcmVuKTp3JjE2JiZNZShmLmNoaWxkcmVuLHksbnVsbCxtLGcsdW4oZixfKSxTLHgpLFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiZLZShmLG51bGwsbSwiY3JlYXRlZCIpLGhlKHksZixmLnNjb3BlSWQsUyxtKSxPKXtmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKGNvbnN0IFYgaW4gTylWIT09InZhbHVlIiYmIXV0KFYpJiZpKHksVixudWxsLE9bVl0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ18sbSk7InZhbHVlImluIE8mJmkoeSwidmFsdWUiLG51bGwsTy52YWx1ZSxfKSwoYj1PLm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInblZub2RlQmVmb3JlTW91bnQpJiZiZShiLG0sZil9UCYmS2UoZixudWxsLG0sImJlZm9yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3VudCIpO2NvbnN0IE09YW8oZyx2KTtNJiZ2LmJlZm9yZUVudGVyKHkpLHMoeSx1LGQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJywoKGI9TyYmTy5vblZub2RlTW91bnRlZCl8fE18fFApJiZsZSgoKT0+e2ImJmJlKGIsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiksTSYmdi5lbnRlcih5KSxQJiZLZShmLG51bGwsbSwibW91bnRlZCIpfSxnKX0saGU9KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmLHUsZCxtLGcpPT57aWYoZCYmQyhmLGQpLG0pZm9yKGxldCBfPTA7XzxtLmxlbmd0aDtfJwogICAgICAgICAgICAgICAgICAgICAgICBiJysrKUMoZixtW19dKTtpZihnKXtsZXQgXz1nLnN1YlRyZWU7aWYodT09PV98fHZyKF8udHknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGUpJiYoXy5zc0NvbnRlbnQ9PT11fHxfLnNzRmFsbGJhY2s9PT11KSl7Y29uc3QgUz1nLicKICAgICAgICAgICAgICAgICAgICAgICAgYid2bm9kZTtoZShmLFMsUy5zY29wZUlkLFMuc2xvdFNjb3BlSWRzLGcucGFyZW50KX19fSxNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9KGYsdSxkLG0sZyxfLFMseCx5PTApPT57Zm9yKGxldCBiPXk7YjxmLmxlbmd0aDtiKysnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtjb25zdCBPPWZbYl09eD9GZShmW2JdKTpTZShmW2JdKTtJKG51bGwsTyx1LGQsbSxnLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfLFMseCl9fSx2dD0oZix1LGQsbSxnLF8sUyk9Pntjb25zdCB4PXUuZWw9Zi5lbDtsZXR7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdGNoRmxhZzp5LGR5bmFtaWNDaGlsZHJlbjpiLGRpcnM6T309dTt5fD1mLnBhdGNoRmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWcmMTY7Y29uc3Qgdz1mLnByb3BzfHxMLHY9dS5wcm9wc3x8TDtsZXQgUDtpZihkJiZCZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZCwhMSksKFA9di5vblZub2RlQmVmb3JlVXBkYXRlKSYmYmUoUCxkLHUsZiksTyYmS2UoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3UsZixkLCJiZWZvcmVVcGRhdGUiKSxkJiZCZShkLCEwKSwody5pbm5lckhUTUwmJnYuaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVySFRNTD09bnVsbHx8dy50ZXh0Q29udGVudCYmdi50ZXh0Q29udGVudD09bnVsbCkmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidhKHgsIiIpLGI/JGUoZi5keW5hbWljQ2hpbGRyZW4sYix4LGQsbSx1bih1LGcpLF8pOlN8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wkKGYsdSx4LG51bGwsZCxtLHVuKHUsZyksXywhMSkseT4wKXtpZih5JjE2KW50KHgsdywnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndixkLGcpO2Vsc2UgaWYoeSYyJiZ3LmNsYXNzIT09di5jbGFzcyYmaSh4LCJjbGFzcyIsbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bGwsdi5jbGFzcyxnKSx5JjQmJmkoeCwic3R5bGUiLHcuc3R5bGUsdi5zdHlsZSxnKSx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyY4KXtjb25zdCBNPXUuZHluYW1pY1Byb3BzO2ZvcihsZXQgVj0wO1Y8TS5sZW5ndGg7VisnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyl7Y29uc3QgTj1NW1ZdLGllPXdbTl0scmU9dltOXTsocmUhPT1pZXx8Tj09PSJ2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciKSYmaSh4LE4saWUscmUsZyxkKX19eSYxJiZmLmNoaWxkcmVuIT09dS5jaGlsZHJlbiYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EoeCx1LmNoaWxkcmVuKX1lbHNlIVMmJmI9PW51bGwmJm50KHgsdyx2LGQsZyk7KChQPXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uVm5vZGVVcGRhdGVkKXx8TykmJmxlKCgpPT57UCYmYmUoUCxkLHUsZiksTyYmS2UodScKICAgICAgICAgICAgICAgICAgICAgICAgYicsZixkLCJ1cGRhdGVkIil9LG0pfSwkZT0oZix1LGQsbSxnLF8sUyk9Pntmb3IobGV0IHg9JwogICAgICAgICAgICAgICAgICAgICAgICBiJzA7eDx1Lmxlbmd0aDt4Kyspe2NvbnN0IHk9Zlt4XSxiPXVbeF0sTz15LmVsJiYoeS50eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZT09PXhlfHwhbHQoeSxiKXx8eS5zaGFwZUZsYWcmNzApP3AoeS5lbCk6ZDtJKHksYixPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLG0sZyxfLFMsITApfX0sbnQ9KGYsdSxkLG0sZyk9PntpZih1IT09ZCl7aWYodSE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz1MKWZvcihjb25zdCBfIGluIHUpIXV0KF8pJiYhKF8gaW4gZCkmJmkoZixfLHVbX10sbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGwsZyxtKTtmb3IoY29uc3QgXyBpbiBkKXtpZih1dChfKSljb250aW51ZTtjb25zdCBTPScKICAgICAgICAgICAgICAgICAgICAgICAgYidkW19dLHg9dVtfXTtTIT09eCYmXyE9PSJ2YWx1ZSImJmkoZixfLHgsUyxnLG0pfSJ2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiaW4gZCYmaShmLCJ2YWx1ZSIsdS52YWx1ZSxkLnZhbHVlLGcpfX0sT3Q9KGYsdSxkLG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGcsXyxTLHgseSk9Pntjb25zdCBiPXUuZWw9Zj9mLmVsOmwoIiIpLE89dS5hbmNob3I9ZicKICAgICAgICAgICAgICAgICAgICAgICAgYic/Zi5hbmNob3I6bCgiIik7bGV0e3BhdGNoRmxhZzp3LGR5bmFtaWNDaGlsZHJlbjp2LHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290U2NvcGVJZHM6UH09dTtQJiYoeD14P3guY29uY2F0KFApOlApLGY9PW51bGw/KHMoYiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCxtKSxzKE8sZCxtKSxNZSh1LmNoaWxkcmVufHxbXSxkLE8sZyxfLFMseCx5KSk6dz4wJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmdyY2NCYmdiYmZi5keW5hbWljQ2hpbGRyZW4/KCRlKGYuZHluYW1pY0NoaWxkcmVuLHYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QsZyxfLFMseCksKHUua2V5IT1udWxsfHxnJiZ1PT09Zy5zdWJUcmVlKSYmeHIoZix1LCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCkpOiQoZix1LGQsTyxnLF8sUyx4LHkpfSxFdD0oZix1LGQsbSxnLF8sUyx4LHkpPT57dScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xvdFNjb3BlSWRzPXgsZj09bnVsbD91LnNoYXBlRmxhZyY1MTI/Zy5jdHguYWN0aXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKHUsZCxtLFMseSk6dG4odSxkLG0sZyxfLFMseSk6Sm4oZix1LHkpfSx0bj0oZix1LGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG0sZyxfLFMpPT57Y29uc3QgeD1mLmNvbXBvbmVudD1NbyhmLG0sZyk7aWYoaXIoZikmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicoeC5jdHgucmVuZGVyZXI9cnQpLElvKHgsITEsUykseC5hc3luY0RlcCl7aWYoZyYmZy5yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VnaXN0ZXJEZXAoeCxrLFMpLCFmLmVsKXtjb25zdCB5PXguc3ViVHJlZT1IZSh5dCk7aignCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCx5LHUsZCl9fWVsc2Ugayh4LGYsdSxkLGcsXyxTKX0sSm49KGYsdSxkKT0+e2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBtPXUuY29tcG9uZW50PWYuY29tcG9uZW50O2lmKFNvKGYsdSxkKSlpZihtLmFzeW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RlcCYmIW0uYXN5bmNSZXNvbHZlZCl7QihtLHUsZCk7cmV0dXJufWVsc2UgbS5uZXh0PXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG0udXBkYXRlKCk7ZWxzZSB1LmVsPWYuZWwsbS52bm9kZT11fSxrPShmLHUsZCxtLGcsXycKICAgICAgICAgICAgICAgICAgICAgICAgYicsUyk9Pntjb25zdCB4PSgpPT57aWYoZi5pc01vdW50ZWQpe2xldHtuZXh0OncsYnU6dix1JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpQLHBhcmVudDpNLHZub2RlOlZ9PWY7e2NvbnN0IF9lPVNyKGYpO2lmKF9lKXt3JiYody4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWw9Vi5lbCxCKGYsdyxTKSksX2UuYXN5bmNEZXAudGhlbigoKT0+e2YuaXNVbm1vdW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkfHx4KCl9KTtyZXR1cm59fWxldCBOPXcsaWU7QmUoZiwhMSksdz8ody5lbD1WLmVsLEIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YsdyxTKSk6dz1WLHYmJkZ0KHYpLChpZT13LnByb3BzJiZ3LnByb3BzLm9uVm5vZGVCZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JlVXBkYXRlKSYmYmUoaWUsTSx3LFYpLEJlKGYsITApO2NvbnN0IHJlPWZzKGYpLGdlPScKICAgICAgICAgICAgICAgICAgICAgICAgYidmLnN1YlRyZWU7Zi5zdWJUcmVlPXJlLEkoZ2UscmUscChnZS5lbCksUHQoZ2UpLGYsZyxfJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksdy5lbD1yZS5lbCxOPT09bnVsbCYmd28oZixyZS5lbCksUCYmbGUoUCxnKSwoaWU9dy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcHMmJncucHJvcHMub25Wbm9kZVVwZGF0ZWQpJiZsZSgoKT0+YmUoaWUsTSx3LFYpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidnKX1lbHNle2xldCB3O2NvbnN0e2VsOnYscHJvcHM6UH09dSx7Ym06TSxtOlYscGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpOLHJvb3Q6aWUsdHlwZTpyZX09ZixnZT1odCh1KTtCZShmLCExKSxNJiZGdChNKSwhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYodz1QJiZQLm9uVm5vZGVCZWZvcmVNb3VudCkmJmJlKHcsTix1KSxCZShmLCEwKTt7aScKICAgICAgICAgICAgICAgICAgICAgICAgYidlLmNlJiZpZS5jZS5faW5qZWN0Q2hpbGRTdHlsZShyZSk7Y29uc3QgX2U9Zi5zdWJUcmVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1mcyhmKTtJKG51bGwsX2UsZCxtLGYsZyxfKSx1LmVsPV9lLmVsfWlmKFYmJmxlKFYsZyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCFnZSYmKHc9UCYmUC5vblZub2RlTW91bnRlZCkpe2NvbnN0IF9lPXU7bGUoKCk9PmJlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid3LE4sX2UpLGcpfSh1LnNoYXBlRmxhZyYyNTZ8fE4mJmh0KE4udm5vZGUpJiZOLnZub2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zaGFwZUZsYWcmMjU2KSYmZi5hJiZsZShmLmEsZyksZi5pc01vdW50ZWQ9ITAsdT1kPW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPW51bGx9fTtmLnNjb3BlLm9uKCk7Y29uc3QgeT1mLmVmZmVjdD1uZXcgTnMoeCk7Zi5zYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvcGUub2ZmKCk7Y29uc3QgYj1mLnVwZGF0ZT15LnJ1bi5iaW5kKHkpLE89Zi5qb2I9eS5yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuSWZEaXJ0eS5iaW5kKHkpO08uaT1mLE8uaWQ9Zi51aWQseS5zY2hlZHVsZXI9KCk9PksnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihPKSxCZShmLCEwKSxiKCl9LEI9KGYsdSxkKT0+e3UuY29tcG9uZW50PWY7Y29uc3QgbScKICAgICAgICAgICAgICAgICAgICAgICAgYic9Zi52bm9kZS5wcm9wcztmLnZub2RlPXUsZi5uZXh0PW51bGwscm8oZix1LnByb3BzLG0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QpLGZvKGYsdS5jaGlsZHJlbixkKSxqZSgpLHRzKGYpLExlKCl9LCQ9KGYsdSxkLG0sZywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXyxTLHgseT0hMSk9Pntjb25zdCBiPWYmJmYuY2hpbGRyZW4sTz1mP2Yuc2hhcGVGbGFnOicKICAgICAgICAgICAgICAgICAgICAgICAgYicwLHc9dS5jaGlsZHJlbix7cGF0Y2hGbGFnOnYsc2hhcGVGbGFnOlB9PXU7aWYodj4wKXtpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YodiYxMjgpe0F0KGIsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59ZWxzZSBpZih2JjI1NiknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1ZlKGIsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59fVAmOD8oTyYxNiYmc3QoYixnLF8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid3IT09YiYmYShkLHcpKTpPJjE2P1AmMTY/QXQoYix3LGQsbSxnLF8sUyx4LHkpOnN0KGIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csXywhMCk6KE8mOCYmYShkLCIiKSxQJjE2JiZNZSh3LGQsbSxnLF8sUyx4LHkpKX0sVmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPShmLHUsZCxtLGcsXyxTLHgseSk9PntmPWZ8fFhlLHU9dXx8WGU7Y29uc3QgYj1mLmxlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidndGgsTz11Lmxlbmd0aCx3PU1hdGgubWluKGIsTyk7bGV0IHY7Zm9yKHY9MDt2PHc7disrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7Y29uc3QgUD11W3ZdPXk/RmUodVt2XSk6U2UodVt2XSk7SShmW3ZdLFAsZCxudWxsLGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLF8sUyx4LHkpfWI+Tz9zdChmLGcsXywhMCwhMSx3KTpNZSh1LGQsbSxnLF8sUyx4LHksdycKICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxBdD0oZix1LGQsbSxnLF8sUyx4LHkpPT57bGV0IGI9MDtjb25zdCBPPXUubGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICBiJztsZXQgdz1mLmxlbmd0aC0xLHY9Ty0xO2Zvcig7Yjw9dyYmYjw9djspe2NvbnN0IFA9ZlsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYl0sTT11W2JdPXk/RmUodVtiXSk6U2UodVtiXSk7aWYobHQoUCxNKSlJKFAsTSxkLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsLGcsXyxTLHgseSk7ZWxzZSBicmVhaztiKyt9Zm9yKDtiPD13JiZiPD12Oyl7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1A9Zlt3XSxNPXVbdl09eT9GZSh1W3ZdKTpTZSh1W3ZdKTtpZihsdChQLE0pKUkoUCxNLGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG51bGwsZyxfLFMseCx5KTtlbHNlIGJyZWFrO3ctLSx2LS19aWYoYj53KXtpZihiPD12KScKICAgICAgICAgICAgICAgICAgICAgICAgYid7Y29uc3QgUD12KzEsTT1QPE8/dVtQXS5lbDptO2Zvcig7Yjw9djspSShudWxsLHVbYl09JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3k/RmUodVtiXSk6U2UodVtiXSksZCxNLGcsXyxTLHgseSksYisrfX1lbHNlIGlmKGI+diknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKDtiPD13OylwZShmW2JdLGcsXywhMCksYisrO2Vsc2V7Y29uc3QgUD1iLE09YixWPScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXcgTWFwO2ZvcihiPU07Yjw9djtiKyspe2NvbnN0IG9lPXVbYl09eT9GZSh1W2JdKTpTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UodVtiXSk7b2Uua2V5IT1udWxsJiZWLnNldChvZS5rZXksYil9bGV0IE4saWU9MDtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgcmU9di1NKzE7bGV0IGdlPSExLF9lPTA7Y29uc3QgaXQ9bmV3IEFycmF5KHJlKTtmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKGI9MDtiPHJlO2IrKylpdFtiXT0wO2ZvcihiPVA7Yjw9dztiKyspe2NvbnN0IG9lPWZbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JdO2lmKGllPj1yZSl7cGUob2UsZyxfLCEwKTtjb250aW51ZX1sZXQgbWU7aWYob2Uua2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSE9bnVsbCltZT1WLmdldChvZS5rZXkpO2Vsc2UgZm9yKE49TTtOPD12O04rKylpZihpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbTi1NXT09PTAmJmx0KG9lLHVbTl0pKXttZT1OO2JyZWFrfW1lPT09dm9pZCAwP3BlKG9lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxnLF8sITApOihpdFttZS1NXT1iKzEsbWU+PV9lP19lPW1lOmdlPSEwLEkob2UsdVttZV0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGQsbnVsbCxnLF8sUyx4LHkpLGllKyspfWNvbnN0IHpuPWdlP2hvKGl0KTpYZTtmb3IoTicKICAgICAgICAgICAgICAgICAgICAgICAgYic9em4ubGVuZ3RoLTEsYj1yZS0xO2I+PTA7Yi0tKXtjb25zdCBvZT1NK2IsbWU9dVtvZV0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1huPW9lKzE8Tz91W29lKzFdLmVsOm07aXRbYl09PT0wP0kobnVsbCxtZSxkLFhuLGcsXywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUyx4LHkpOmdlJiYoTjwwfHxiIT09em5bTl0/VWUobWUsZCxYbiwyKTpOLS0pfX19LFVlPScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZix1LGQsbSxnPW51bGwpPT57Y29uc3R7ZWw6Xyx0eXBlOlMsdHJhbnNpdGlvbjp4LGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbjp5LHNoYXBlRmxhZzpifT1mO2lmKGImNil7VWUoZi5jb21wb25lbnQuc3ViVHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWUsdSxkLG0pO3JldHVybn1pZihiJjEyOCl7Zi5zdXNwZW5zZS5tb3ZlKHUsZCxtKTtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJufWlmKGImNjQpe1MubW92ZShmLHUsZCxydCk7cmV0dXJufWlmKFM9PT14ZSl7cyhfJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx1LGQpO2ZvcihsZXQgdz0wO3c8eS5sZW5ndGg7dysrKVVlKHlbd10sdSxkLG0pO3MoZi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jaG9yLHUsZCk7cmV0dXJufWlmKFM9PT1kbil7cShmLHUsZCk7cmV0dXJufWlmKG0hPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9MiYmYiYxJiZ4KWlmKG09PT0wKXguYmVmb3JlRW50ZXIoXykscyhfLHUsZCksbGUoKCk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz54LmVudGVyKF8pLGcpO2Vsc2V7Y29uc3R7bGVhdmU6dyxkZWxheUxlYXZlOnYsYWZ0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInTGVhdmU6UH09eCxNPSgpPT5zKF8sdSxkKSxWPSgpPT57dyhfLCgpPT57TSgpLFAmJlAoKScKICAgICAgICAgICAgICAgICAgICAgICAgYid9KX07dj92KF8sTSxWKTpWKCl9ZWxzZSBzKF8sdSxkKX0scGU9KGYsdSxkLG09ITEsZz0hJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpPT57Y29uc3R7dHlwZTpfLHByb3BzOlMscmVmOngsY2hpbGRyZW46eSxkeW5hbWljQ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkcmVuOmIsc2hhcGVGbGFnOk8scGF0Y2hGbGFnOncsZGlyczp2LGNhY2hlSW5kZXg6UCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9PWY7aWYodz09PS0yJiYoZz0hMSkseCE9bnVsbCYmVXQoeCxudWxsLGQsZiwhMCksUCE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwmJih1LnJlbmRlckNhY2hlW1BdPXZvaWQgMCksTyYyNTYpe3UuY3R4LmRlYWN0aXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKGYpO3JldHVybn1jb25zdCBNPU8mMSYmdixWPSFodChmKTtsZXQgTjtpZihWJiYoTicKICAgICAgICAgICAgICAgICAgICAgICAgYic9UyYmUy5vblZub2RlQmVmb3JlVW5tb3VudCkmJmJlKE4sdSxmKSxPJjYpTnIoZi5jb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50LGQsbSk7ZWxzZXtpZihPJjEyOCl7Zi5zdXNwZW5zZS51bm1vdW50KGQsbSk7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybn1NJiZLZShmLG51bGwsdSwiYmVmb3JlVW5tb3VudCIpLE8mNjQ/Zi50eXBlLnJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUoZix1LGQscnQsbSk6YiYmIWIuaGFzT25jZSYmKF8hPT14ZXx8dz4wJiZ3JjY0KT9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoYix1LGQsITEsITApOihfPT09eGUmJncmMzg0fHwhZyYmTyYxNikmJnN0KHksdSxkKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSYmR24oZil9KFYmJihOPVMmJlMub25Wbm9kZVVubW91bnRlZCl8fE0pJiZsZSgoKT0+eycKICAgICAgICAgICAgICAgICAgICAgICAgYidOJiZiZShOLHUsZiksTSYmS2UoZixudWxsLHUsInVubW91bnRlZCIpfSxkKX0sR249Zj0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdHt0eXBlOnUsZWw6ZCxhbmNob3I6bSx0cmFuc2l0aW9uOmd9PWY7aWYodT09PXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7SHIoZCxtKTtyZXR1cm59aWYodT09PWRuKXtBKGYpO3JldHVybn1jb25zdCBfPSgpPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+e3IoZCksZyYmIWcucGVyc2lzdGVkJiZnLmFmdGVyTGVhdmUmJmcuYWZ0ZXJMZWF2ZSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ307aWYoZi5zaGFwZUZsYWcmMSYmZyYmIWcucGVyc2lzdGVkKXtjb25zdHtsZWF2ZTpTLGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxheUxlYXZlOnh9PWcseT0oKT0+UyhkLF8pO3g/eChmLmVsLF8seSk6eSgpfWVsc2UgXycKICAgICAgICAgICAgICAgICAgICAgICAgYicoKX0sSHI9KGYsdSk9PntsZXQgZDtmb3IoO2YhPT11OylkPVQoZikscihmKSxmPWQ7cih1JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9LE5yPShmLHUsZCk9Pntjb25zdHtidW06bSxzY29wZTpnLGpvYjpfLHN1YlRyZWU6UywnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW06eCxtOnksYTpifT1mO2xzKHkpLGxzKGIpLG0mJkZ0KG0pLGcuc3RvcCgpLF8mJihfLicKICAgICAgICAgICAgICAgICAgICAgICAgYidmbGFnc3w9OCxwZShTLGYsdSxkKSkseCYmbGUoeCx1KSxsZSgoKT0+e2YuaXNVbm1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkPSEwfSx1KSx1JiZ1LnBlbmRpbmdCcmFuY2gmJiF1LmlzVW5tb3VudGVkJiZmLmFzeW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0RlcCYmIWYuYXN5bmNSZXNvbHZlZCYmZi5zdXNwZW5zZUlkPT09dS5wZW5kaW5nSWQmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicodS5kZXBzLS0sdS5kZXBzPT09MCYmdS5yZXNvbHZlKCkpfSxzdD0oZix1LGQsbT0hMSxnJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0hMSxfPTApPT57Zm9yKGxldCBTPV87UzxmLmxlbmd0aDtTKyspcGUoZltTXSx1LGQsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyl9LFB0PWY9PntpZihmLnNoYXBlRmxhZyY2KXJldHVybiBQdChmLmNvbXBvbmVudC5zdScKICAgICAgICAgICAgICAgICAgICAgICAgYidiVHJlZSk7aWYoZi5zaGFwZUZsYWcmMTI4KXJldHVybiBmLnN1c3BlbnNlLm5leHQoKTtjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgdT1UKGYuYW5jaG9yfHxmLmVsKSxkPXUmJnVbSWldO3JldHVybiBkP1QoZCk6dX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2xldCBubj0hMTtjb25zdCBZbj0oZix1LGQpPT57Zj09bnVsbD91Ll92bm9kZSYmcGUodScKICAgICAgICAgICAgICAgICAgICAgICAgYicuX3Zub2RlLG51bGwsbnVsbCwhMCk6SSh1Ll92bm9kZXx8bnVsbCxmLHUsbnVsbCxudWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxudWxsLGQpLHUuX3Zub2RlPWYsbm58fChubj0hMCx0cygpLHRyKCksbm49ITEpfSxydD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIne3A6SSx1bTpwZSxtOlVlLHI6R24sbXQ6dG4sbWM6TWUscGM6JCxwYmM6JGUsbjpQdCxvOicKICAgICAgICAgICAgICAgICAgICAgICAgYidlfTtyZXR1cm57cmVuZGVyOlluLGh5ZHJhdGU6dm9pZCAwLGNyZWF0ZUFwcDp0byhZbil9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiB1bih7dHlwZTplLHByb3BzOnR9LG4pe3JldHVybiBuPT09InN2ZyImJmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT09ImZvcmVpZ25PYmplY3QifHxuPT09Im1hdGhtbCImJmU9PT0iYW5ub3RhdGlvbi14bScKICAgICAgICAgICAgICAgICAgICAgICAgYidsIiYmdCYmdC5lbmNvZGluZyYmdC5lbmNvZGluZy5pbmNsdWRlcygiaHRtbCIpP3ZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzA6bn1mdW5jdGlvbiBCZSh7ZWZmZWN0OmUsam9iOnR9LG4pe24/KGUuZmxhZ3N8PTMyLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdW5jdGlvbiBhbyhlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0KXtyZXR1cm4oIWV8fGUmJiFlLnBlbmRpbmdCcmFuY2gpJiZ0JiYhdC5wZXJzaXN0ZWR9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIHhyKGUsdCxuPSExKXtjb25zdCBzPWUuY2hpbGRyZW4scj10LmNoaWxkcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtpZihFKHMpJiZFKHIpKWZvcihsZXQgaT0wO2k8cy5sZW5ndGg7aSsrKXtjb25zdCBvPScKICAgICAgICAgICAgICAgICAgICAgICAgYidzW2ldO2xldCBsPXJbaV07bC5zaGFwZUZsYWcmMSYmIWwuZHluYW1pY0NoaWxkcmVuJiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhsLnBhdGNoRmxhZzw9MHx8bC5wYXRjaEZsYWc9PT0zMikmJihsPXJbaV09RmUocltpXSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGwuZWw9by5lbCksIW4mJmwucGF0Y2hGbGFnIT09LTImJnhyKG8sbCkpLGwudHlwZT09PScKICAgICAgICAgICAgICAgICAgICAgICAgYidrdCYmKGwuZWw9by5lbCl9fWZ1bmN0aW9uIGhvKGUpe2NvbnN0IHQ9ZS5zbGljZSgpLG49JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1swXTtsZXQgcyxyLGksbyxsO2NvbnN0IGM9ZS5sZW5ndGg7Zm9yKHM9MDtzPGM7cysrKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgaD1lW3NdO2lmKGghPT0wKXtpZihyPW5bbi5sZW5ndGgtMV0sZVtyXTxoKXt0WycKICAgICAgICAgICAgICAgICAgICAgICAgYidzXT1yLG4ucHVzaChzKTtjb250aW51ZX1mb3IoaT0wLG89bi5sZW5ndGgtMTtpPG87KWw9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2krbz4+MSxlW25bbF1dPGg/aT1sKzE6bz1sO2g8ZVtuW2ldXSYmKGk+MCYmKHRbc109blsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaS0xXSksbltpXT1zKX19Zm9yKGk9bi5sZW5ndGgsbz1uW2ktMV07aS0tID4wOyluW2ldPScKICAgICAgICAgICAgICAgICAgICAgICAgYidvLG89dFtvXTtyZXR1cm4gbn1mdW5jdGlvbiBTcihlKXtjb25zdCB0PWUuc3ViVHJlZS5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50O2lmKHQpcmV0dXJuIHQuYXN5bmNEZXAmJiF0LmFzeW5jUmVzb2x2ZWQ/dDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3IodCl9ZnVuY3Rpb24gbHMoZSl7aWYoZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKycKICAgICAgICAgICAgICAgICAgICAgICAgYicpZVt0XS5mbGFnc3w9OH1jb25zdCBwbz1TeW1ib2wuZm9yKCJ2LXNjeCIpLGdvPSgpPT5EJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QocG8pO2Z1bmN0aW9uIGFuKGUsdCxuKXtyZXR1cm4gd3IoZSx0LG4pfWZ1bmN0aW9uIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncihlLHQsbj1MKXtjb25zdHtpbW1lZGlhdGU6cyxkZWVwOnIsZmx1c2g6aSxvbmNlOm99PScKICAgICAgICAgICAgICAgICAgICAgICAgYiduLGw9c2Uoe30sbiksYz10JiZzfHwhdCYmaSE9PSJwb3N0IjtsZXQgaDtpZihTdCl7aWYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k9PT0ic3luYyIpe2NvbnN0IEM9Z28oKTtoPUMuX193YXRjaGVySGFuZGxlc3x8KEMuX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd2F0Y2hlckhhbmRsZXM9W10pfWVsc2UgaWYoIWMpe2NvbnN0IEM9KCk9Pnt9O3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQy5zdG9wPXdlLEMucmVzdW1lPXdlLEMucGF1c2U9d2UsQ319Y29uc3QgYT1uZTtsLmNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsPShDLEYsSSk9PkNlKEMsYSxGLEkpO2xldCBwPSExO2k9PT0icG9zdCI/bC5zY2hlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyPUM9PntsZShDLGEmJmEuc3VzcGVuc2UpfTppIT09InN5bmMiJiYocD0hMCxsLnNjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZHVsZXI9KEMsRik9PntGP0MoKTpLbihDKX0pLGwuYXVnbWVudEpvYj1DPT57dCYmKEMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZsYWdzfD00KSxwJiYoQy5mbGFnc3w9MixhJiYoQy5pZD1hLnVpZCxDLmk9YSkpfTtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgVD12aShlLHQsbCk7cmV0dXJuIFN0JiYoaD9oLnB1c2goVCk6YyYmVCgpKSxUfWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBfbyhlLHQsbil7Y29uc3Qgcz10aGlzLnByb3h5LHI9SihlKT9lLmluY2x1ZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJygiLiIpP1RyKHMsZSk6KCk9PnNbZV06ZS5iaW5kKHMscyk7bGV0IGk7Uih0KT9pPXQ6KGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXQuaGFuZGxlcixuPXQpO2NvbnN0IG89Q3QodGhpcyksbD13cihyLGkuYmluZChzKSxuKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7cmV0dXJuIG8oKSxsfWZ1bmN0aW9uIFRyKGUsdCl7Y29uc3Qgbj10LnNwbGl0KCIuIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybigpPT57bGV0IHM9ZTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoJiZzO3IrKylzPXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW25bcl1dO3JldHVybiBzfX1jb25zdCBtbz0oZSx0KT0+dD09PSJtb2RlbFZhbHVlInx8dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0ibW9kZWwtdmFsdWUiP2UubW9kZWxNb2RpZmllcnM6ZVtgJHt0fU1vZGlmaWVyc2BdJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8ZVtgJHtOZSh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtHZSh0KX1Nb2RpZmllcnNgXTtmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gYm8oZSx0LC4uLm4pe2lmKGUuaXNVbm1vdW50ZWQpcmV0dXJuO2NvbnN0IHM9ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicudm5vZGUucHJvcHN8fEw7bGV0IHI9bjtjb25zdCBpPXQuc3RhcnRzV2l0aCgidXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzoiKSxvPWkmJm1vKHMsdC5zbGljZSg3KSk7byYmKG8udHJpbSYmKHI9bi5tYXAoYT0+SignCiAgICAgICAgICAgICAgICAgICAgICAgIGInYSk/YS50cmltKCk6YSkpLG8ubnVtYmVyJiYocj1uLm1hcChLcikpKTtsZXQgbCxjPXNbbCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9c24odCldfHxzW2w9c24oTmUodCkpXTshYyYmaSYmKGM9c1tsPXNuKEdlKHQpKV0pLGMmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZDZShjLGUsNixyKTtjb25zdCBoPXNbbCsiT25jZSJdO2lmKGgpe2lmKCFlLmVtaXR0ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKWUuZW1pdHRlZD17fTtlbHNlIGlmKGUuZW1pdHRlZFtsXSlyZXR1cm47ZS5lbWl0dGVkWycKICAgICAgICAgICAgICAgICAgICAgICAgYidsXT0hMCxDZShoLGUsNixyKX19ZnVuY3Rpb24gQ3IoZSx0LG49ITEpe2NvbnN0IHM9dC5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pdHNDYWNoZSxyPXMuZ2V0KGUpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7Y29uc3QgaT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5lbWl0cztsZXQgbz17fSxsPSExO2lmKCFSKGUpKXtjb25zdCBjPWg9Pntjb25zdCBhPScKICAgICAgICAgICAgICAgICAgICAgICAgYidDcihoLHQsITApO2EmJihsPSEwLHNlKG8sYSkpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5taXhpbnMuZm9yRWFjaChjKSxlLmV4dGVuZHMmJmMoZS5leHRlbmRzKSxlLm1peGlucyYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJmUubWl4aW5zLmZvckVhY2goYyl9cmV0dXJuIWkmJiFsPyhLKGUpJiZzLnNldChlLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxudWxsKTooRShpKT9pLmZvckVhY2goYz0+b1tjXT1udWxsKTpzZShvLGkpLEsoZSkmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZzLnNldChlLG8pLG8pfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIWV8fCFXdCh0KT8hMTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHQ9dC5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sIiIpLEgoZSx0WzBdLnRvTG93ZXJDYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSgpK3Quc2xpY2UoMSkpfHxIKGUsR2UodCkpfHxIKGUsdCkpfWZ1bmN0aW9uIGZzKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdHt0eXBlOnQsdm5vZGU6bixwcm94eTpzLHdpdGhQcm94eTpyLHByb3BzT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnM6W2ldLHNsb3RzOm8sYXR0cnM6bCxlbWl0OmMscmVuZGVyOmgscmVuZGVyQ2FjaGU6YScKICAgICAgICAgICAgICAgICAgICAgICAgYicscHJvcHM6cCxkYXRhOlQsc2V0dXBTdGF0ZTpDLGN0eDpGLGluaGVyaXRBdHRyczpJfT1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx6PVZ0KGUpO2xldCBqLFc7dHJ5e2lmKG4uc2hhcGVGbGFnJjQpe2NvbnN0IEE9cnx8cywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRz1BO2o9U2UoaC5jYWxsKEcsQSxhLHAsQyxULEYpKSxXPWx9ZWxzZXtjb25zdCBBPXQ7aicKICAgICAgICAgICAgICAgICAgICAgICAgYic9U2UoQS5sZW5ndGg+MT9BKHAse2F0dHJzOmwsc2xvdHM6byxlbWl0OmN9KTpBKHAsbnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wpKSxXPXQucHJvcHM/bDp5byhsKX19Y2F0Y2goQSl7Z3QubGVuZ3RoPTAsWHQoQSxlLDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSxqPUhlKHl0KX1sZXQgcT1qO2lmKFcmJkkhPT0hMSl7Y29uc3QgQT1PYmplY3Qua2V5cycKICAgICAgICAgICAgICAgICAgICAgICAgYicoVykse3NoYXBlRmxhZzpHfT1xO0EubGVuZ3RoJiZHJjcmJihpJiZBLnNvbWUoUG4pJiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1c9eG8oVyxpKSkscT10dChxLFcsITEsITApKX1yZXR1cm4gbi5kaXJzJiYocT10dChxLG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWxsLCExLCEwKSxxLmRpcnM9cS5kaXJzP3EuZGlycy5jb25jYXQobi5kaXJzKTpuLmRpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzKSxuLnRyYW5zaXRpb24mJkJuKHEsbi50cmFuc2l0aW9uKSxqPXEsVnQoeiksan1jb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgeW89ZT0+e2xldCB0O2Zvcihjb25zdCBuIGluIGUpKG49PT0iY2xhc3MifHxuPT09InMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSJ8fFd0KG4pKSYmKCh0fHwodD17fSkpW25dPWVbbl0pO3JldHVybiB0fSx4bz0oZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCk9Pntjb25zdCBuPXt9O2Zvcihjb25zdCBzIGluIGUpKCFQbihzKXx8IShzLnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyg5KWluIHQpKSYmKG5bc109ZVtzXSk7cmV0dXJuIG59O2Z1bmN0aW9uIFNvKGUsdCxuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3R7cHJvcHM6cyxjaGlsZHJlbjpyLGNvbXBvbmVudDppfT1lLHtwcm9wczpvLGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZHJlbjpsLHBhdGNoRmxhZzpjfT10LGg9aS5lbWl0c09wdGlvbnM7aWYodC5kaXJzfHx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cmFuc2l0aW9uKXJldHVybiEwO2lmKG4mJmM+PTApe2lmKGMmMTAyNClyZXR1cm4hMDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYoYyYxNilyZXR1cm4gcz9jcyhzLG8saCk6ISFvO2lmKGMmOCl7Y29uc3QgYT10LmR5bicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbWljUHJvcHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspe2NvbnN0IFQ9YVtwXTtpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Yob1tUXSE9PXNbVF0mJiFRdChoLFQpKXJldHVybiEwfX19ZWxzZSByZXR1cm4ocnx8bCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYoIWx8fCFsLiRzdGFibGUpPyEwOnM9PT1vPyExOnM/bz9jcyhzLG8saCk6ITA6ISFvOycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4hMX1mdW5jdGlvbiBjcyhlLHQsbil7Y29uc3Qgcz1PYmplY3Qua2V5cyh0KTtpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Yocy5sZW5ndGghPT1PYmplY3Qua2V5cyhlKS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj0wO3I8cy5sZW5ndGg7cisrKXtjb25zdCBpPXNbcl07aWYodFtpXSE9PWVbaV0mJiFRdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicobixpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB3byh7dm5vZGU6ZSxwYXJlbnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R9LG4pe2Zvcig7dDspe2NvbnN0IHM9dC5zdWJUcmVlO2lmKHMuc3VzcGVuc2UmJnMuc3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BlbnNlLmFjdGl2ZUJyYW5jaD09PWUmJihzLmVsPWUuZWwpLHM9PT1lKShlPXQudm5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKS5lbD1uLHQ9dC5wYXJlbnQ7ZWxzZSBicmVha319Y29uc3QgdnI9ZT0+ZS5fX2lzU3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlbnNlO2Z1bmN0aW9uIFRvKGUsdCl7dCYmdC5wZW5kaW5nQnJhbmNoP0UoZSk/dC5lZmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0cy5wdXNoKC4uLmUpOnQuZWZmZWN0cy5wdXNoKGUpOlBpKGUpfWNvbnN0IHhlPVN5bScKICAgICAgICAgICAgICAgICAgICAgICAgYidib2wuZm9yKCJ2LWZndCIpLGt0PVN5bWJvbC5mb3IoInYtdHh0IikseXQ9U3ltYm9sLmZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IoInYtY210IiksZG49U3ltYm9sLmZvcigidi1zdGMiKSxndD1bXTtsZXQgY2U9bnVsbDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gSHQoZT0hMSl7Z3QucHVzaChjZT1lP251bGw6W10pfWZ1bmN0aW9uIENvKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2d0LnBvcCgpLGNlPWd0W2d0Lmxlbmd0aC0xXXx8bnVsbH1sZXQgeHQ9MTtmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdXMoZSx0PSExKXt4dCs9ZSxlPDAmJmNlJiZ0JiYoY2UuaGFzT25jZT0hMCl9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIE9yKGUpe3JldHVybiBlLmR5bmFtaWNDaGlsZHJlbj14dD4wP2NlfHxYZTpudWxsLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDbygpLHh0PjAmJmNlJiZjZS5wdXNoKGUpLGV9ZnVuY3Rpb24gaG4oZSx0LG4scyxyLGkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tyZXR1cm4gT3IoWShlLHQsbixzLHIsaSwhMCkpfWZ1bmN0aW9uIHZvKGUsdCxuLHMsciknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiBPcihIZShlLHQsbixzLHIsITApKX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gZScKICAgICAgICAgICAgICAgICAgICAgICAgYic/ZS5fX3ZfaXNWTm9kZT09PSEwOiExfWZ1bmN0aW9uIGx0KGUsdCl7cmV0dXJuIGUudHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9PT10LnR5cGUmJmUua2V5PT09dC5rZXl9Y29uc3QgQXI9KHtrZXk6ZX0pPT5lPz9udWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxOdD0oe3JlZjplLHJlZl9rZXk6dCxyZWZfZm9yOm59KT0+KHR5cGVvZiBlPT0ibnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciImJihlPSIiK2UpLGUhPW51bGw/SihlKXx8UShlKXx8UihlKT97aTp1ZSxyOmUsazp0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxmOiEhbn06ZTpudWxsKTtmdW5jdGlvbiBZKGUsdD1udWxsLG49bnVsbCxzPTAscj1udWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxpPWU9PT14ZT8wOjEsbz0hMSxsPSExKXtjb25zdCBjPXtfX3ZfaXNWTm9kZTohMCxfXycKICAgICAgICAgICAgICAgICAgICAgICAgYid2X3NraXA6ITAsdHlwZTplLHByb3BzOnQsa2V5OnQmJkFyKHQpLHJlZjp0JiZOdCh0KSxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvcGVJZDpzcixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxzdXNwZW5zZTpudWxsLHNzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLHRyYW5zaXRpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx0YXJnZXRTdGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBlRmxhZzppLHBhdGNoRmxhZzpzLGR5bmFtaWNQcm9wczpyLGR5bmFtaWNDaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYic6bnVsbCxhcHBDb250ZXh0Om51bGwsY3R4OnVlfTtyZXR1cm4gbD8ocW4oYyxuKSxpJjEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJzgmJmUubm9ybWFsaXplKGMpKTpuJiYoYy5zaGFwZUZsYWd8PUoobik/ODoxNikseHQ+MCYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiFvJiZjZSYmKGMucGF0Y2hGbGFnPjB8fGkmNikmJmMucGF0Y2hGbGFnIT09MzImJmNlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKGMpLGN9Y29uc3QgSGU9T287ZnVuY3Rpb24gT28oZSx0PW51bGwsbj1udWxsLHM9JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAscj1udWxsLGk9ITEpe2lmKCghZXx8ZT09PUppKSYmKGU9eXQpLEVyKGUpKXtjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbD10dChlLHQsITApO3JldHVybiBuJiZxbihsLG4pLHh0PjAmJiFpJiZjZSYmKGwuc2hhcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlRmxhZyY2P2NlW2NlLmluZGV4T2YoZSldPWw6Y2UucHVzaChsKSksbC5wYXRjaEZsYWc9JwogICAgICAgICAgICAgICAgICAgICAgICBiJy0yLGx9aWYoTm8oZSkmJihlPWUuX192Y2NPcHRzKSx0KXt0PUVvKHQpO2xldHtjbGFzczonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCxzdHlsZTpjfT10O2wmJiFKKGwpJiYodC5jbGFzcz1GbihsKSksSyhjKSYmKFVuKGMpJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIUUoYykmJihjPXNlKHt9LGMpKSx0LnN0eWxlPUluKGMpKX1jb25zdCBvPUooZSk/MTp2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZSk/MTI4OkZpKGUpPzY0OksoZSk/NDpSKGUpPzI6MDtyZXR1cm4gWShlLHQsbixzLHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG8saSwhMCl9ZnVuY3Rpb24gRW8oZSl7cmV0dXJuIGU/VW4oZSl8fGhyKGUpP3NlKHt9LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTplOm51bGx9ZnVuY3Rpb24gdHQoZSx0LG49ITEscz0hMSl7Y29uc3R7cHJvcHM6cixyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmOmkscGF0Y2hGbGFnOm8sY2hpbGRyZW46bCx0cmFuc2l0aW9uOmN9PWUsaD10P0FvKHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHx7fSx0KTpyLGE9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZS50eXBlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wczpoLGtleTpoJiZBcihoKSxyZWY6dCYmdC5yZWY/biYmaT9FKGkpP2kuY29uY2F0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhOdCh0KSk6W2ksTnQodCldOk50KHQpOmksc2NvcGVJZDplLnNjb3BlSWQsc2xvdFNjb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUlkczplLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpsLHRhcmdldDplLnRhcmdldCx0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0U3RhcnQ6ZS50YXJnZXRTdGFydCx0YXJnZXRBbmNob3I6ZS50YXJnZXRBbmNob3Isc3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpY0NvdW50OmUuc3RhdGljQ291bnQsc2hhcGVGbGFnOmUuc2hhcGVGbGFnLHBhdGNoRmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWc6dCYmZS50eXBlIT09eGU/bz09PS0xPzE2Om98MTY6byxkeW5hbWljUHJvcHM6ZS5keScKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1pY1Byb3BzLGR5bmFtaWNDaGlsZHJlbjplLmR5bmFtaWNDaGlsZHJlbixhcHBDb250JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dDplLmFwcENvbnRleHQsZGlyczplLmRpcnMsdHJhbnNpdGlvbjpjLGNvbXBvbmVudDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5jb21wb25lbnQsc3VzcGVuc2U6ZS5zdXNwZW5zZSxzc0NvbnRlbnQ6ZS5zc0NvbnRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0JiZ0dChlLnNzQ29udGVudCksc3NGYWxsYmFjazplLnNzRmFsbGJhY2smJnR0KGUuc3NGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGJhY2spLGVsOmUuZWwsYW5jaG9yOmUuYW5jaG9yLGN0eDplLmN0eCxjZTplLmNlfTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGMmJnMmJkJuKGEsYy5jbG9uZShhKSksYX1mdW5jdGlvbiBQcihlPSIgIix0PScKICAgICAgICAgICAgICAgICAgICAgICAgYicwKXtyZXR1cm4gSGUoa3QsbnVsbCxlLHQpfWZ1bmN0aW9uIFNlKGUpe3JldHVybiBlPT1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VsbHx8dHlwZW9mIGU9PSJib29sZWFuIj9IZSh5dCk6RShlKT9IZSh4ZSxudWxsLGUuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWNlKCkpOkVyKGUpP0ZlKGUpOkhlKGt0LG51bGwsU3RyaW5nKGUpKX1mdW5jdGlvbiBGZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSl7cmV0dXJuIGUuZWw9PT1udWxsJiZlLnBhdGNoRmxhZyE9PS0xfHxlLm1lbW8/ZTp0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZSl9ZnVuY3Rpb24gcW4oZSx0KXtsZXQgbj0wO2NvbnN0e3NoYXBlRmxhZzpzfT1lO2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZih0PT1udWxsKXQ9bnVsbDtlbHNlIGlmKEUodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PScKICAgICAgICAgICAgICAgICAgICAgICAgYic9Im9iamVjdCIpaWYocyY2NSl7Y29uc3Qgcj10LmRlZmF1bHQ7ciYmKHIuX2MmJihyLl9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0hMSkscW4oZSxyKCkpLHIuX2MmJihyLl9kPSEwKSk7cmV0dXJufWVsc2V7bj0zMjtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgcj10Ll87IXImJiFocih0KT90Ll9jdHg9dWU6cj09PTMmJnVlJiYodWUuc2xvdHMuXycKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0xP3QuXz0xOih0Ll89MixlLnBhdGNoRmxhZ3w9MTAyNCkpfWVsc2UgUih0KT8odD17JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZmF1bHQ6dCxfY3R4OnVlfSxuPTMyKToodD1TdHJpbmcodCkscyY2ND8obj0xNix0PVsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUHIodCldKTpuPTgpO2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bn1mdW5jdGlvbiBBbycKICAgICAgICAgICAgICAgICAgICAgICAgYicoLi4uZSl7Y29uc3QgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M9ZVtuXTtmb3IoY29uc3QgciBpbiBzKWlmKHI9PT0iY2xhc3MiKXQuY2xhc3MhPT1zLmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyYmKHQuY2xhc3M9Rm4oW3QuY2xhc3Mscy5jbGFzc10pKTtlbHNlIGlmKHI9PT0icycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlIil0LnN0eWxlPUluKFt0LnN0eWxlLHMuc3R5bGVdKTtlbHNlIGlmKFd0KHIpKXtjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgaT10W3JdLG89c1tyXTtvJiZpIT09byYmIShFKGkpJiZpLmluY2x1ZGVzKG8pKSYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJih0W3JdPWk/W10uY29uY2F0KGksbyk6byl9ZWxzZSByIT09IiImJih0W3JdPXNbcl0pfScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdH1mdW5jdGlvbiBiZShlLHQsbixzPW51bGwpe0NlKGUsdCw3LFtuLHNdKX1jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgUG89dXIoKTtsZXQgUm89MDtmdW5jdGlvbiBNbyhlLHQsbil7Y29uc3Qgcz1lLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlLHI9KHQ/dC5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fFBvLGk9e3VpZDpSbysrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid2bm9kZTplLHR5cGU6cyxwYXJlbnQ6dCxhcHBDb250ZXh0OnIscm9vdDpudWxsLG5leHQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLGpvYjpudWxsLHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29wZTpuZXcgWHIoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOnQ/dC5wcm92aWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M6T2JqZWN0LmNyZWF0ZShyLnByb3ZpZGVzKSxpZHM6dD90LmlkczpbIiIsMCwwXSxhY2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXM6bnVsbCxwcm9wc09wdGlvbnM6Z3IocyxyKSxlbWl0c09wdGlvbnM6Q3IocyxyKSxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pdDpudWxsLGVtaXR0ZWQ6bnVsbCxwcm9wc0RlZmF1bHRzOkwsaW5oZXJpdEF0dHJzOnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmluaGVyaXRBdHRycyxjdHg6TCxkYXRhOkwscHJvcHM6TCxhdHRyczpMLHNsb3RzOkwscicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZnM6TCxzZXR1cFN0YXRlOkwsc2V0dXBDb250ZXh0Om51bGwsc3VzcGVuc2U6bixzdXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vuc2VJZDpuP24ucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbCxjOm51bGwsYm06bnVsbCxtOm51bGwsYnU6bnVsbCx1Om51bGwsdW06bnVsbCxidW06JwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbH07cmV0dXJuIGkuY3R4PXtfOml9LGkucm9vdD10P3Qucm9vdDppLGkuZW1pdD1iby5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZChudWxsLGkpLGUuY2UmJmUuY2UoaSksaX1sZXQgbmU9bnVsbCxCdCxPbjt7Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U9R3QoKSx0PShuLHMpPT57bGV0IHI7cmV0dXJuKHI9ZVtuXSl8fChyPWVbbl09W10pLHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnB1c2gocyksaT0+e3IubGVuZ3RoPjE/ci5mb3JFYWNoKG89Pm8oaSkpOnJbMF0oaSl9fScKICAgICAgICAgICAgICAgICAgICAgICAgYic7QnQ9dCgiX19WVUVfSU5TVEFOQ0VfU0VUVEVSU19fIixuPT5uZT1uKSxPbj10KCJfX1ZVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VfU1NSX1NFVFRFUlNfXyIsbj0+U3Q9bil9Y29uc3QgQ3Q9ZT0+e2NvbnN0IHQ9bmU7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBCdChlKSxlLnNjb3BlLm9uKCksKCk9PntlLnNjb3BlLm9mZigpLEJ0KHQpfX0sYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzPSgpPT57bmUmJm5lLnNjb3BlLm9mZigpLEJ0KG51bGwpfTtmdW5jdGlvbiBScihlKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGUudm5vZGUuc2hhcGVGbGFnJjR9bGV0IFN0PSExO2Z1bmN0aW9uIElvKGUsdD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInITEsbj0hMSl7dCYmT24odCk7Y29uc3R7cHJvcHM6cyxjaGlsZHJlbjpyfT1lLnZub2RlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpPVJyKGUpO3NvKGUscyxpLHQpLGxvKGUscixuKTtjb25zdCBvPWk/Rm8oZSx0KTp2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwO3JldHVybiB0JiZPbighMSksb31mdW5jdGlvbiBGbyhlLHQpe2NvbnN0IG49ZS50eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtlLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksZS5wcm94eT1uZXcgUHJveCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KGUuY3R4LFlpKTtjb25zdHtzZXR1cDpzfT1uO2lmKHMpe2plKCk7Y29uc3Qgcj1lLnNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cENvbnRleHQ9cy5sZW5ndGg+MT9IbyhlKTpudWxsLGk9Q3QoZSksbz1UdChzLGUsMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW2UucHJvcHMscl0pLGw9RXMobyk7aWYoTGUoKSxpKCksKGx8fGUuc3ApJiYhaHQoZSkmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidycihlKSxsKXtpZihvLnRoZW4oYXMsYXMpLHQpcmV0dXJuIG8udGhlbihjPT57ZHMoZSxjJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9KS5jYXRjaChjPT57WHQoYyxlLDApfSk7ZS5hc3luY0RlcD1vfWVsc2UgZHMoZSxvKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxzZSBNcihlKX1mdW5jdGlvbiBkcyhlLHQsbil7Uih0KT9lLnR5cGUuX19zc3JJbmxpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlUmVuZGVyP2Uuc3NyUmVuZGVyPXQ6ZS5yZW5kZXI9dDpLKHQpJiYoZS5zZXR1cFN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1Rcyh0KSksTXIoZSl9ZnVuY3Rpb24gTXIoZSx0LG4pe2NvbnN0IHM9ZS50eXBlO2UucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlcnx8KGUucmVuZGVyPXMucmVuZGVyfHx3ZSk7e2NvbnN0IHI9Q3QoZSk7amUoKTt0cicKICAgICAgICAgICAgICAgICAgICAgICAgYid5e3ppKGUpfWZpbmFsbHl7TGUoKSxyKCl9fX1jb25zdCBEbz17Z2V0KGUsdCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBYKGUsImdldCIsIiIpLGVbdF19fTtmdW5jdGlvbiBIbyhlKXtjb25zdCB0PW49PntlLmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvc2VkPW58fHt9fTtyZXR1cm57YXR0cnM6bmV3IFByb3h5KGUuYXR0cnMsRG8pLHNsbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0czplLnNsb3RzLGVtaXQ6ZS5lbWl0LGV4cG9zZTp0fX1mdW5jdGlvbiBlbihlKXtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGUuZXhwb3NlZD9lLmV4cG9zZVByb3h5fHwoZS5leHBvc2VQcm94eT1uZXcgUHJveHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFFzKG1pKGUuZXhwb3NlZCkpLHtnZXQodCxuKXtpZihuIGluIHQpcmV0dXJuIHRbbl07aScKICAgICAgICAgICAgICAgICAgICAgICAgYidmKG4gaW4gcHQpcmV0dXJuIHB0W25dKGUpfSxoYXModCxuKXtyZXR1cm4gbiBpbiB0fHxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiBwdH19KSk6ZS5wcm94eX1mdW5jdGlvbiBObyhlKXtyZXR1cm4gUihlKSYmIl9fdmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY09wdHMiaW4gZX1jb25zdCBqbz0oZSx0KT0+VGkoZSx0LFN0KSxMbz0iMy41LjEzIjsvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXG4qIEB2dWUvcnVudGltZS1kb20gdjMuNS4xM1xuKiAoYykgMjAxOC1wcmVzZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnNcbiogQGxpY2Vuc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01JVFxuKiovbGV0IEVuO2NvbnN0IGhzPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cudHJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZWRUeXBlcztpZihocyl0cnl7RW49aHMuY3JlYXRlUG9saWN5KCJ2dWUiLHtjcmVhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFRNTDplPT5lfSl9Y2F0Y2h7fWNvbnN0IElyPUVuP2U9PkVuLmNyZWF0ZUhUTUwoZSk6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PmUsJG89Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixWbz0iaHR0cDovL3d3dy53JwogICAgICAgICAgICAgICAgICAgICAgICBiJzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLE9lPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50Om51bGwscHM9T2UmJk9lLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksVW89e2lucycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnQ6KGUsdCxuKT0+e3QuaW5zZXJ0QmVmb3JlKGUsbnx8bnVsbCl9LHJlbW92ZTplPT57JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHQ9ZS5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQoZSl9LGNyZWF0ZUVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50OihlLHQsbixzKT0+e2NvbnN0IHI9dD09PSJzdmciP09lLmNyZWF0ZUVsZW1lbnROUycKICAgICAgICAgICAgICAgICAgICAgICAgYicoJG8sZSk6dD09PSJtYXRobWwiP09lLmNyZWF0ZUVsZW1lbnROUyhWbyxlKTpuP09lLmNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhdGVFbGVtZW50KGUse2lzOm59KTpPZS5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSJzZWxlY3QiJiZzJiZzLm11bHRpcGxlIT1udWxsJiZyLnNldEF0dHJpYnV0ZSgibXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcGxlIixzLm11bHRpcGxlKSxyfSxjcmVhdGVUZXh0OmU9Pk9lLmNyZWF0ZVRleHROb2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSxjcmVhdGVDb21tZW50OmU9Pk9lLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCk9PntlLm5vZGVWYWx1ZT10fSxzZXRFbGVtZW50VGV4dDooZSx0KT0+e2UudGV4dENvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW50PXR9LHBhcmVudE5vZGU6ZT0+ZS5wYXJlbnROb2RlLG5leHRTaWJsaW5nOmU9PmUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+T2UucXVlcnlTZWxlY3RvcihlKSxzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2NvcGVJZChlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfSxpbnNlcnRTdGF0aWNDb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudChlLHQsbixzLHIsaSl7Y29uc3Qgbz1uP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZDtpZihyJiYocj09PWl8fHIubmV4dFNpYmxpbmcpKWZvcig7dC5pbnNlcnRCZWZvcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHIuY2xvbmVOb2RlKCEwKSxuKSwhKHI9PT1pfHwhKHI9ci5uZXh0U2libGluZykpOyk7ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsc2V7cHMuaW5uZXJIVE1MPUlyKHM9PT0ic3ZnIj9gPHN2Zz4ke2V9PC9zdmc+YDpzPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJtYXRobWwiP2A8bWF0aD4ke2V9PC9tYXRoPmA6ZSk7Y29uc3QgbD1wcy5jb250ZW50O2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihzPT09InN2ZyJ8fHM9PT0ibWF0aG1sIil7Y29uc3QgYz1sLmZpcnN0Q2hpbGQ7Zm9yKCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7Yy5maXJzdENoaWxkOylsLmFwcGVuZENoaWxkKGMuZmlyc3RDaGlsZCk7bC5yZW1vdmVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQoYyl9dC5pbnNlcnRCZWZvcmUobCxuKX1yZXR1cm5bbz9vLm5leHRTaWJsaW5nOnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmZpcnN0Q2hpbGQsbj9uLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZF19fSxLbz1TeScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYm9sKCJfdnRjIik7ZnVuY3Rpb24gQm8oZSx0LG4pe2NvbnN0IHM9ZVtLb107cyYmKHQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0P1t0LC4uLnNdOlsuLi5zXSkuam9pbigiICIpKSx0PT1udWxsP2UucmVtb3ZlQXR0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnV0ZSgiY2xhc3MiKTpuP2Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsdCk6ZS5jbGFzc05hbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlPXR9Y29uc3QgZ3M9U3ltYm9sKCJfdm9kIiksV289U3ltYm9sKCJfdnNoIikscW89U3ltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JvbCgiIiksSm89LyhefDspXFxzKmRpc3BsYXlcXHMqOi87ZnVuY3Rpb24gR28oZSx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxuKXtjb25zdCBzPWUuc3R5bGUscj1KKG4pO2xldCBpPSExO2lmKG4mJiFyKXtpZih0KWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihKKHQpKWZvcihjb25zdCBvIG9mIHQuc3BsaXQoIjsiKSl7Y29uc3QgbD1vLnNsaWNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLG8uaW5kZXhPZigiOiIpKS50cmltKCk7bltsXT09bnVsbCYmanQocyxsLCIiKX1lbHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IoY29uc3QgbyBpbiB0KW5bb109PW51bGwmJmp0KHMsbywiIik7Zm9yKGNvbnN0IG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluIG4pbz09PSJkaXNwbGF5IiYmKGk9ITApLGp0KHMsbyxuW29dKX1lbHNlIGlmKHIpeycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZih0IT09bil7Y29uc3Qgbz1zW3FvXTtvJiYobis9IjsiK28pLHMuY3NzVGV4dD1uLGk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0pvLnRlc3Qobil9fWVsc2UgdCYmZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Z3MgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGUmJihlW2dzXT1pP3MuZGlzcGxheToiIixlW1dvXSYmKHMuZGlzcGxheT0ibm9uZSIpKScKICAgICAgICAgICAgICAgICAgICAgICAgYid9Y29uc3QgX3M9L1xccyohaW1wb3J0YW50JC87ZnVuY3Rpb24ganQoZSx0LG4pe2lmKEUobicKICAgICAgICAgICAgICAgICAgICAgICAgYicpKW4uZm9yRWFjaChzPT5qdChlLHQscykpO2Vsc2UgaWYobj09bnVsbCYmKG49IiIpLHQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXJ0c1dpdGgoIi0tIikpZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7Y29uc3Qgcz1ZbygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0KTtfcy50ZXN0KG4pP2Uuc2V0UHJvcGVydHkoR2Uocyksbi5yZXBsYWNlKF9zLCIiKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydGFudCIpOmVbc109bn19Y29uc3QgbXM9WyJXZWJraXQiLCJNb3oiLCJtcyJdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxwbj17fTtmdW5jdGlvbiBZbyhlLHQpe2NvbnN0IG49cG5bdF07aWYobilyZXR1cm4gbjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IHM9TmUodCk7aWYocyE9PSJmaWx0ZXIiJiZzIGluIGUpcmV0dXJuIHBuW3RdPXM7cycKICAgICAgICAgICAgICAgICAgICAgICAgYic9UnMocyk7Zm9yKGxldCByPTA7cjxtcy5sZW5ndGg7cisrKXtjb25zdCBpPW1zW3JdK3M7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKGkgaW4gZSlyZXR1cm4gcG5bdF09aX1yZXR1cm4gdH1jb25zdCBicz0iaHR0cDovL3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3cudzMub3JnLzE5OTkveGxpbmsiO2Z1bmN0aW9uIHlzKGUsdCxuLHMscixpPVlyKHQpKScKICAgICAgICAgICAgICAgICAgICAgICAgYid7cyYmdC5zdGFydHNXaXRoKCJ4bGluazoiKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05TKGJzLHQuc2xpY2UoNix0Lmxlbmd0aCkpOmUuc2V0QXR0cmlidXRlTlMoYnMsdCxuKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj09bnVsbHx8aSYmIUlzKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSh0LGk/IiI6VGUobik/U3RyaW5nKG4pOm4pfWZ1bmN0aW9uIHhzKGUsdCxuLHMscil7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKHQ9PT0iaW5uZXJIVE1MInx8dD09PSJ0ZXh0Q29udGVudCIpe24hPW51bGwmJihlW3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXT10PT09ImlubmVySFRNTCI/SXIobik6bik7cmV0dXJufWNvbnN0IGk9ZS50YWdOYW1lOycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZih0PT09InZhbHVlIiYmaSE9PSJQUk9HUkVTUyImJiFpLmluY2x1ZGVzKCItIikpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBsPWk9PT0iT1BUSU9OIj9lLmdldEF0dHJpYnV0ZSgidmFsdWUiKXx8IiI6ZS52YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUsYz1uPT1udWxsP2UudHlwZT09PSJjaGVja2JveCI/Im9uIjoiIjpTdHJpbmcobik7KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsIT09Y3x8ISgiX3ZhbHVlImluIGUpKSYmKGUudmFsdWU9Yyksbj09bnVsbCYmZS5yZW1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT0iInwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfG49PW51bGwpe2NvbnN0IGw9dHlwZW9mIGVbdF07bD09PSJib29sZWFuIj9uPUlzKG4pOicKICAgICAgICAgICAgICAgICAgICAgICAgYiduPT1udWxsJiZsPT09InN0cmluZyI/KG49IiIsbz0hMCk6bD09PSJudW1iZXIiJiYobj0wJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvPSEwKX10cnl7ZVt0XT1ufWNhdGNoe31vJiZlLnJlbW92ZUF0dHJpYnV0ZShyfHx0KX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gRnIoZSx0LG4scyl7ZS5hZGRFdmVudExpc3RlbmVyKHQsbixzKX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gem8oZSx0LG4scyl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixzKX1jb25zdCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M9U3ltYm9sKCJfdmVpIik7ZnVuY3Rpb24gWG8oZSx0LG4scyxyPW51bGwpe2NvbnN0IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWVbU3NdfHwoZVtTc109e30pLG89aVt0XTtpZihzJiZvKW8udmFsdWU9cztlbHNle2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdFtsLGNdPVpvKHQpO2lmKHMpe2NvbnN0IGg9aVt0XT1lbChzLHIpO0ZyKGUsbCxoLGMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31lbHNlIG8mJih6byhlLGwsbyxjKSxpW3RdPXZvaWQgMCl9fWNvbnN0IHdzPS8oPzpPbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gWm8oZSl7bGV0IHQ7aWYod3MudGVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkpe3Q9e307bGV0IHM7Zm9yKDtzPWUubWF0Y2god3MpOyllPWUuc2xpY2UoMCxlLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgtc1swXS5sZW5ndGgpLHRbc1swXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5bZVsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMl09PT0iOiI/ZS5zbGljZSgzKTpHZShlLnNsaWNlKDIpKSx0XX1sZXQgZ249MDtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgUW89UHJvbWlzZS5yZXNvbHZlKCksa289KCk9PmdufHwoUW8udGhlbigoKT0+Z249MCksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2duPURhdGUubm93KCkpO2Z1bmN0aW9uIGVsKGUsdCl7Y29uc3Qgbj1zPT57aWYoIXMuX3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMpcy5fdnRzPURhdGUubm93KCk7ZWxzZSBpZihzLl92dHM8PW4uYXR0YWNoZWQpcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybjtDZSh0bChzLG4udmFsdWUpLHQsNSxbc10pfTtyZXR1cm4gbi52YWx1ZT1lLG4uYXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaGVkPWtvKCksbn1mdW5jdGlvbiB0bChlLHQpe2lmKEUodCkpe2NvbnN0IG49ZS5zdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb249KCk9PntuLmNhbGwoZSksZS5fc3RvcHBlZD0hMH0sdC5tYXAocz0+cj0+IXIuX3N0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wcGVkJiZzJiZzKHIpKX1lbHNlIHJldHVybiB0fWNvbnN0IFRzPWU9PmUuY2hhckNvZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPicKICAgICAgICAgICAgICAgICAgICAgICAgYic5NiYmZS5jaGFyQ29kZUF0KDIpPDEyMyxubD0oZSx0LG4scyxyLGkpPT57Y29uc3Qgbz1yJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PSJzdmciO3Q9PT0iY2xhc3MiP0JvKGUscyxvKTp0PT09InN0eWxlIj9HbyhlLG4scyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOld0KHQpP1BuKHQpfHxYbyhlLHQsbixzLGkpOih0WzBdPT09Ii4iPyh0PXQuc2xpY2UoMScKICAgICAgICAgICAgICAgICAgICAgICAgYicpLCEwKTp0WzBdPT09Il4iPyh0PXQuc2xpY2UoMSksITEpOnNsKGUsdCxzLG8pKT8oeHMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsdCxzKSwhZS50YWdOYW1lLmluY2x1ZGVzKCItIikmJih0PT09InZhbHVlInx8dD09PSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2tlZCJ8fHQ9PT0ic2VsZWN0ZWQiKSYmeXMoZSx0LHMsbyxpLHQhPT0idmFsdWUiKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpOmUuX2lzVnVlQ0UmJigvW0EtWl0vLnRlc3QodCl8fCFKKHMpKT94cyhlLE5lKHQpLHMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ksdCk6KHQ9PT0idHJ1ZS12YWx1ZSI/ZS5fdHJ1ZVZhbHVlPXM6dD09PSJmYWxzZS12YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUiJiYoZS5fZmFsc2VWYWx1ZT1zKSx5cyhlLHQscyxvKSl9O2Z1bmN0aW9uIHNsKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsbixzKXtpZihzKXJldHVybiEhKHQ9PT0iaW5uZXJIVE1MInx8dD09PSJ0ZXh0Q29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QifHx0IGluIGUmJlRzKHQpJiZSKG4pKTtpZih0PT09InNwZWxsY2hlY2sifHx0PT09ImQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnZ2FibGUifHx0PT09InRyYW5zbGF0ZSJ8fHQ9PT0iZm9ybSJ8fHQ9PT0ibGlzdCImJicKICAgICAgICAgICAgICAgICAgICAgICAgYidlLnRhZ05hbWU9PT0iSU5QVVQifHx0PT09InR5cGUiJiZlLnRhZ05hbWU9PT0iVEVYVEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBIilyZXR1cm4hMTtpZih0PT09IndpZHRoInx8dD09PSJoZWlnaHQiKXtjb25zdCByPWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRhZ05hbWU7aWYocj09PSJJTUcifHxyPT09IlZJREVPInx8cj09PSJDQU5WQVMifHxyPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PSJTT1VSQ0UiKXJldHVybiExfXJldHVybiBUcyh0KSYmSihuKT8hMTp0IGluIGV9Y29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IENzPWU9Pntjb25zdCB0PWUucHJvcHNbIm9uVXBkYXRlOm1vZGVsVmFsdWUiXXx8ITEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiBFKHQpP249PkZ0KHQsbik6dH0sX249U3ltYm9sKCJfYXNzaWduIikscmw9eycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWVwOiEwLGNyZWF0ZWQoZSx0LG4pe2VbX25dPUNzKG4pLEZyKGUsImNoYW5nZSIsKCk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz57Y29uc3Qgcz1lLl9tb2RlbFZhbHVlLHI9aWwoZSksaT1lLmNoZWNrZWQsbz1lW19uXTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYoRShzKSl7Y29uc3QgbD1GcyhzLHIpLGM9bCE9PS0xO2lmKGkmJiFjKW8ocy5jb25jYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KHIpKTtlbHNlIGlmKCFpJiZjKXtjb25zdCBoPVsuLi5zXTtoLnNwbGljZShsLDEpLG8oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gpfX1lbHNlIGlmKHF0KHMpKXtjb25zdCBsPW5ldyBTZXQocyk7aT9sLmFkZChyKTpsLmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxldGUociksbyhsKX1lbHNlIG8oRHIoZSxpKSl9KX0sbW91bnRlZDp2cyxiZWZvcmVVcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkYXRlKGUsdCxuKXtlW19uXT1DcyhuKSx2cyhlLHQsbil9fTtmdW5jdGlvbiB2cyhlLHt2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWU6dCxvbGRWYWx1ZTpufSxzKXtlLl9tb2RlbFZhbHVlPXQ7bGV0IHI7aWYoRSh0KSknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj1Gcyh0LHMucHJvcHMudmFsdWUpPi0xO2Vsc2UgaWYocXQodCkpcj10LmhhcyhzLnBybycKICAgICAgICAgICAgICAgICAgICAgICAgYidwcy52YWx1ZSk7ZWxzZXtpZih0PT09bilyZXR1cm47cj1ZdCh0LERyKGUsITApKX1lLmNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vja2VkIT09ciYmKGUuY2hlY2tlZD1yKX1mdW5jdGlvbiBpbChlKXtyZXR1cm4iX3ZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSJpbiBlP2UuX3ZhbHVlOmUudmFsdWV9ZnVuY3Rpb24gRHIoZSx0KXtjb25zdCBuPXQ/IicKICAgICAgICAgICAgICAgICAgICAgICAgYidfdHJ1ZVZhbHVlIjoiX2ZhbHNlVmFsdWUiO3JldHVybiBuIGluIGU/ZVtuXTp0fWNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbD1zZSh7cGF0Y2hQcm9wOm5sfSxVbyk7bGV0IE9zO2Z1bmN0aW9uIGxsKCl7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBPc3x8KE9zPWNvKG9sKSl9Y29uc3QgZmw9KC4uLmUpPT57Y29uc3QgdD1sbCgpLmNyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVBcHAoLi4uZSkse21vdW50Om59PXQ7cmV0dXJuIHQubW91bnQ9cz0+e2NvbnN0IHI9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VsKHMpO2lmKCFyKXJldHVybjtjb25zdCBpPXQuX2NvbXBvbmVudDshUihpKSYmIWkucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlciYmIWkudGVtcGxhdGUmJihpLnRlbXBsYXRlPXIuaW5uZXJIVE1MKSxyLm5vZGVUeScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZT09PTEmJihyLnRleHRDb250ZW50PSIiKTtjb25zdCBvPW4ociwhMSxjbChyKSk7cmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiByIGluc3RhbmNlb2YgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKCJ2LWNsb2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXYtYXBwIiwiIikpLG99LHR9O2Z1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbChlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4ic3ZnIjtpZih0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mIE1hdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudClyZXR1cm4ibWF0aG1sIn1mdW5jdGlvbiB1bChlKXtyZXR1cm4gSihlKT9kb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQucXVlcnlTZWxlY3RvcihlKTplfWNvbnN0IGFsPXtjbGFzczoiY29udGFpbmVyIHB5JwogICAgICAgICAgICAgICAgICAgICAgICBiJy01In0sZGw9e2NsYXNzOiJ0ZXh0LWNlbnRlciBtYi01In0saGw9e2NsYXNzOiJjdXN0b20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWNvbnRyb2wgY3VzdG9tLXN3aXRjaCBkLWlubGluZS1ibG9jayJ9LHBsPXtjbGFzczoiYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1c3RvbS1jb250cm9sLWxhYmVsIG0tMiIsZm9yOiJiaWxsaW5nVG9nZ2xlIn0sZ2w9e2NsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzczoicm93In0sX2w9e2NsYXNzOiJjYXJkIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLTEwMCJ9LG1sPXtjbGFzczoiY2FyZC1ib2R5IGJvcmRlci0wIHRleHQtY2VudGVyIn0sYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsPXtjbGFzczoiY2FyZC10aXRsZSJ9LHlsPXtjbGFzczoiY2FyZC1wcmljZSJ9LHhsPXtjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3M6InRleHQtbXV0ZWQifSxTbD1bImlubmVySFRNTCJdLHdsPXtfX25hbWU6IlByaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nQ29tcG9uZW50IixzZXR1cChlKXtjb25zdCB0PWJpKCExKTtsZXQgbj1KU09OLnBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZShhdG9iKHdpbmRvdy5hc29uZURhdGEpKTtyZXR1cm4ocyxyKT0+KEh0KCksaG4oImRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YiLGFsLFtZKCJkaXYiLGRsLFtyWzFdfHwoclsxXT1ZKCJoMiIse2NsYXNzOiJtYi00In0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJPdXIgUHJpY2luZyIsLTEpKSxZKCJkaXYiLGhsLFtNaShZKCJpbnB1dCIse3R5cGU6IicKICAgICAgICAgICAgICAgICAgICAgICAgYidjaGVja2JveCIsY2xhc3M6ImN1c3RvbS1jb250cm9sLWlucHV0IixpZDoiYmlsbGluZ1RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dnbGUiLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpyWzBdfHwoclswXT1pPT50LnZhbHVlPWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0sbnVsbCw1MTIpLFtbcmwsdC52YWx1ZV1dKSxZKCJsYWJlbCIscGwsZnQodC52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic/IlllYXJseSI6Ik1vbnRobHkiKSsiIEJpbGxpbmcgIiwxKV0pXSksWSgiZGl2IixnbCxbJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhIdCghMCksaG4oeGUsbnVsbCxHaShacyhuKSxpPT4oSHQoKSxobigiZGl2Iix7Y2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiJjb2wtbWQtNCBtYi00IixrZXk6aS5uYW1lfSxbWSgiZGl2IixfbCxbWSgiZGl2IixtbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsW1koImg0IixibCxmdChpLm5hbWUpLDEpLFkoImgyIix5bCxbUHIoIiAkIitmdCh0LnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZT9pLnllYXJseVByaWNlOmkubW9udGhseVByaWNlKSsiICIsMSksWSgic21hbGwiLHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCwiLyIrZnQodC52YWx1ZT8ieWVhciI6Im1vbnRoIiksMSldKSxyWzJdfHwoclsyXT1ZKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciaHIiLG51bGwsbnVsbCwtMSkpLFkoImRpdiIse2NsYXNzOiJsaXN0LXVuc3R5bGVkIixpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25uZXJIVE1MOmkuZmVhdHVyZXMwfSxudWxsLDgsU2wpXSksclszXXx8KHJbM109WSgiZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndiIse2NsYXNzOiJjYXJkLWZvb3RlciBib3JkZXItMCBiZy10cmFuc3BhcmVudCJ9LFtZKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciYnV0dG9uIix7Y2xhc3M6ImJ0biBidG4tb3V0bGluZS1kYXJrIGJ0bi1sZyB3LTEwMCJ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJywiU2VsZWN0IFBsYW4iKV0sLTEpKV0pXSkpKSwxMjgpKV0pXSkpfX0sVGw9e19fbmFtZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIkFwcCIsc2V0dXAoZSl7bGV0IHQ9SlNPTi5wYXJzZShhdG9iKHdpbmRvdy5hc29uZURhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhKSk7cmV0dXJuIGNvbnNvbGUubG9nKHQpLChuLHMpPT4oSHQoKSx2byh3bCkpfX07ZmwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RsKS5tb3VudCgiIyIrd2luZG93LmFzb25lSWQpO1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC9hc3NldHMvaW5kZXgtaTJEemNTQzcuanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicoZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIikucmVsTGlzdDtpZih0JiZ0LnN1cHBvcnRzJiZ0LnN1cHBvcnRzKCJtb2R1bGVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbG9hZCIpKXJldHVybjtmb3IoY29uc3QgciBvZiBkb2N1bWVudC5xdWVyeVNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvckFsbChcJ2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl1cJykpcyhyKTtuZXcgTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGF0aW9uT2JzZXJ2ZXIocj0+e2Zvcihjb25zdCBpIG9mIHIpaWYoaS50eXBlPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSJjaGlsZExpc3QiKWZvcihjb25zdCBvIG9mIGkuYWRkZWROb2RlcylvLnRhZ05hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lPT09IkxJTksiJiZvLnJlbD09PSJtb2R1bGVwcmVsb2FkIiYmcyhvKX0pLm9icycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBuKHIpe2NvbnN0IGk9e307cmV0dXJuIHIuaW50ZWdyaXR5JiYoaS5pbnRlZ3JpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5PXIuaW50ZWdyaXR5KSxyLnJlZmVycmVyUG9saWN5JiYoaS5yZWZlcnJlclBvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpY3k9ci5yZWZlcnJlclBvbGljeSksci5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpYWxzIj9pLmNyZWRlbnRpYWxzPSJpbmNsdWRlIjpyLmNyb3NzT3JpZ2luPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJhbm9ueW1vdXMiP2kuY3JlZGVudGlhbHM9Im9taXQiOmkuY3JlZGVudGlhbHM9IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiBzKHIpe2lmKHIuZXApcmV0dXJuO3IuZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSEwO2NvbnN0IGk9bihyKTtmZXRjaChyLmhyZWYsaSl9fSkoKTsvKipcbiogQHZ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvc2hhcmVkIHYzLjUuMTNcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291IGFuZCBWdWUgY29udHJpYnV0b3JzXG4qIEBsaWNlbnNlIE1JVFxuKiovLyohICNfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19OT19TSURFX0VGRkVDVFNfXyAqL2Z1bmN0aW9uIEFuKGUpe2NvbnN0IHQ9T2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IG4gb2YgZS5zcGxpdCgiLCIpKXRbbl0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPTE7cmV0dXJuIG49Pm4gaW4gdH1jb25zdCBMPXt9LFhlPVtdLHdlPSgpPT57fSxqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I9KCk9PiExLFd0PWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBdCgxKT09PTExMCYmKGUuY2hhckNvZGVBdCgyKT4xMjJ8fGUuY2hhckNvZGVBdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMik8OTcpLFBuPWU9PmUuc3RhcnRzV2l0aCgib25VcGRhdGU6Iiksc2U9T2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5hc3NpZ24sUm49KGUsdCk9Pntjb25zdCBuPWUuaW5kZXhPZih0KTtuPi0xJiZlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpY2UobiwxKX0sTHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSD0oZSx0KT0+THIuY2FsbChlLHQpLEU9QXJyYXkuaXNBcnJheSxaZT1lPT53dChlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk9PT0iW29iamVjdCBNYXBdIixxdD1lPT53dChlKT09PSJbb2JqZWN0IFNldF0iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidabj1lPT53dChlKT09PSJbb2JqZWN0IERhdGVdIixSPWU9PnR5cGVvZiBlPT0iZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIixKPWU9PnR5cGVvZiBlPT0ic3RyaW5nIixUZT1lPT50eXBlb2YgZT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzeW1ib2wiLEs9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IixFcz1lPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+KEsoZSl8fFIoZSkpJiZSKGUudGhlbikmJlIoZS5jYXRjaCksQXM9T2JqZWN0LnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90b3R5cGUudG9TdHJpbmcsd3Q9ZT0+QXMuY2FsbChlKSwkcj1lPT53dChlKS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2UoOCwtMSksUHM9ZT0+d3QoZSk9PT0iW29iamVjdCBPYmplY3RdIixNbj1lPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+SihlKSYmZSE9PSJOYU4iJiZlWzBdIT09Ii0iJiYiIitwYXJzZUludChlLDEwKT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT1lLHV0PUFuKCIsa2V5LHJlZixyZWZfZm9yLHJlZl9rZXksb25Wbm9kZUJlZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEp0PWU9Pntjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG49PnRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25dfHwodFtuXT1lKG4pKX0sVnI9Ly0oXFx3KS9nLE5lPUp0KGU9PmUucmVwbGFjZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVnIsKHQsbik9Pm4/bi50b1VwcGVyQ2FzZSgpOiIiKSksVXI9L1xcQihbQS1aXSkvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR2U9SnQoZT0+ZS5yZXBsYWNlKFVyLCItJDEiKS50b0xvd2VyQ2FzZSgpKSxScz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSnQoZT0+ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKSxzbj1KJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZT0+ZT9gb24ke1JzKGUpfWA6IiIpLERlPShlLHQpPT4hT2JqZWN0LmlzKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEZ0PShlLC4uLnQpPT57Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi4udCl9LE1zPShlLHQsbixzPSExKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTpzLHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTpufSl9LEtyPWU9Pntjb25zdCB0PXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTih0KT9lOnR9O2xldCBRbjtjb25zdCBHdD0oKT0+UW58fChRbj10eXBlb2YgZ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6e30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtmdW5jdGlvbiBJbihlKXtpZihFKGUpKXtjb25zdCB0PXt9O2ZvcihsZXQgbj0wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcz1lW25dLHI9SihzKT9KcihzKTpJbihzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7aWYocilmb3IoY29uc3QgaSBpbiByKXRbaV09cltpXX1yZXR1cm4gdH1lbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihKKGUpfHxLKGUpKXJldHVybiBlfWNvbnN0IEJyPS87KD8hW14oXSpcXCkpL2csVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyPS86KFteXSspLyxxcj0vXFwvXFwqW15dKj9cXCpcXC8vZztmdW5jdGlvbiBKcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7Y29uc3QgdD17fTtyZXR1cm4gZS5yZXBsYWNlKHFyLCIiKS5zcGxpdChCcikuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2gobj0+e2lmKG4pe2NvbnN0IHM9bi5zcGxpdChXcik7cy5sZW5ndGg+MScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJih0W3NbMF0udHJpbSgpXT1zWzFdLnRyaW0oKSl9fSksdH1mdW5jdGlvbiBGbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7bGV0IHQ9IiI7aWYoSihlKSl0PWU7ZWxzZSBpZihFKGUpKWZvcihsZXQgbj0wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcz1GbihlW25dKTtzJiYodCs9cysiICIpfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbHNlIGlmKEsoZSkpZm9yKGNvbnN0IG4gaW4gZSllW25dJiYodCs9bisiICIpO3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdC50cmltKCl9Y29uc3QgR3I9Iml0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscmVhZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmx5IixZcj1BbihHcik7ZnVuY3Rpb24gSXMoZSl7cmV0dXJuISFlfHxlPT09IiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWZ1bmN0aW9uIHpyKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE7bGV0IG49ITA7Zm9yKGxldCBzPTA7biYmczxlLmxlbmd0aDtzKyspbj1ZdChlWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzXSx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBZdChlLHQpe2lmKGU9PT10KXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hMDtsZXQgbj1abihlKSxzPVpuKHQpO2lmKG58fHMpcmV0dXJuIG4mJnM/ZS5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0VGltZSgpPT09dC5nZXRUaW1lKCk6ITE7aWYobj1UZShlKSxzPVRlKHQpLG58fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKXJldHVybiBlPT09dDtpZihuPUUoZSkscz1FKHQpLG58fHMpcmV0dXJuIG4mJnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInP3pyKGUsdCk6ITE7aWYobj1LKGUpLHM9Syh0KSxufHxzKXtpZighbnx8IXMpcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiExO2NvbnN0IHI9T2JqZWN0LmtleXMoZSkubGVuZ3RoLGk9T2JqZWN0LmtleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKHQpLmxlbmd0aDtpZihyIT09aSlyZXR1cm4hMTtmb3IoY29uc3QgbyBpbiBlKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgbD1lLmhhc093blByb3BlcnR5KG8pLGM9dC5oYXNPd25Qcm9wZXJ0eShvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7aWYobCYmIWN8fCFsJiZjfHwhWXQoZVtvXSx0W29dKSlyZXR1cm4hMX19cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBTdHJpbmcoZSk9PT1TdHJpbmcodCl9ZnVuY3Rpb24gRnMoZSx0KXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGUuZmluZEluZGV4KG49Pll0KG4sdCkpfWNvbnN0IERzPWU9PiEhKGUmJmUuX192JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19pc1JlZj09PSEwKSxmdD1lPT5KKGUpP2U6ZT09bnVsbD8iIjpFKGUpfHxLKGUpJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmKGUudG9TdHJpbmc9PT1Bc3x8IVIoZS50b1N0cmluZykpP0RzKGUpP2Z0KGUudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKTpKU09OLnN0cmluZ2lmeShlLEhzLDIpOlN0cmluZyhlKSxIcz0oZSx0KT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RzKHQpP0hzKGUsdC52YWx1ZSk6WmUodCk/e1tgTWFwKCR7dC5zaXplfSlgXTpbLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLnQuZW50cmllcygpXS5yZWR1Y2UoKG4sW3Mscl0saSk9PihuW3JuKHMsaSkrIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT4iXT1yLG4pLHt9KX06cXQodCk/e1tgU2V0KCR7dC5zaXplfSlgXTpbLi4udC52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWVzKCldLm1hcChuPT5ybihuKSl9OlRlKHQpP3JuKHQpOksodCkmJiFFKHQpJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmIVBzKHQpP1N0cmluZyh0KTp0LHJuPShlLHQ9IiIpPT57dmFyIG47cmV0dXJuIFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShlKT9gU3ltYm9sKCR7KG49ZS5kZXNjcmlwdGlvbikhPW51bGw/bjp0fSlgOmV9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzsvKipcbiogQHZ1ZS9yZWFjdGl2aXR5IHYzLjUuMTNcbiogKGMpIDIwMTgtcHJlc2VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYnV0b3JzXG4qIEBsaWNlbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBNSVRcbioqL2xldCBmZTtjbGFzcyBYcntjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXRhY2hlZD10LHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmVmZmVjdHM9W10sdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xlYW51cHM9W10sdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5wYXJlbnQ9ZmUsIXQmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZmZSYmKHRoaXMuaW5kZXg9KGZlLnNjb3Blc3x8KGZlLnNjb3Blcz1bXSkpLnB1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5faXNQYXVzZWQ9ITA7bGV0IHQsbjtpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YodGhpcy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGVzLmxlbmd0aDt0PG47dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrKyl0aGlzLnNjb3Blc1t0XS5wYXVzZSgpO2Zvcih0PTAsbj10aGlzLmVmZmVjdHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aDt0PG47dCsrKXRoaXMuZWZmZWN0c1t0XS5wYXVzZSgpfX1yZXN1bWUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7aWYodGhpcy5fYWN0aXZlJiZ0aGlzLl9pc1BhdXNlZCl7dGhpcy5faXNQYXVzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkPSExO2xldCB0LG47aWYodGhpcy5zY29wZXMpZm9yKHQ9MCxuPXRoaXMuc2NvcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5sZW5ndGg7dDxuO3QrKyl0aGlzLnNjb3Blc1t0XS5yZXN1bWUoKTtmb3IodD0wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0ucicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3VtZSgpfX1ydW4odCl7aWYodGhpcy5fYWN0aXZlKXtjb25zdCBuPWZlO3RyeXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGZlPXRoaXMsdCgpfWZpbmFsbHl7ZmU9bn19fW9uKCl7ZmU9dGhpc31vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZmKCl7ZmU9dGhpcy5wYXJlbnR9c3RvcCh0KXtpZih0aGlzLl9hY3RpdmUpe3RoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLl9hY3RpdmU9ITE7bGV0IG4scztmb3Iobj0wLHM9dGhpcy5lZmZlY3RzLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7bjxzO24rKyl0aGlzLmVmZmVjdHNbbl0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLmxlbmd0aD0wLG49MCxzPXRoaXMuY2xlYW51cHMubGVuZ3RoO248cztuKyspdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuY2xlYW51cHNbbl0oKTtpZih0aGlzLmNsZWFudXBzLmxlbmd0aD0wLHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNjb3Blcyl7Zm9yKG49MCxzPXRoaXMuc2NvcGVzLmxlbmd0aDtuPHM7bisrKXRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnNjb3Blc1tuXS5zdG9wKCEwKTt0aGlzLnNjb3Blcy5sZW5ndGg9MH1pZighdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuZGV0YWNoZWQmJnRoaXMucGFyZW50JiYhdCl7Y29uc3Qgcj10aGlzLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuc2NvcGVzLnBvcCgpO3ImJnIhPT10aGlzJiYodGhpcy5wYXJlbnQuc2NvcGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1t0aGlzLmluZGV4XT1yLHIuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQgMH19fWZ1bmN0aW9uIFpyKCl7cmV0dXJuIGZlfWxldCBVO2NvbnN0IG9uPW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXcgV2Vha1NldDtjbGFzcyBOc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZuPXQsdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZGVwcz12b2lkIDAsdGhpcy5kZXBzVGFpbD12b2lkIDAsdGhpcy5mbGFncz01LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLm5leHQ9dm9pZCAwLHRoaXMuY2xlYW51cD12b2lkIDAsdGhpcy5zY2hlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyPXZvaWQgMCxmZSYmZmUuYWN0aXZlJiZmZS5lZmZlY3RzLnB1c2godGhpcyl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlKCl7dGhpcy5mbGFnc3w9NjR9cmVzdW1lKCl7dGhpcy5mbGFncyY2NCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmZsYWdzJj0tNjUsb24uaGFzKHRoaXMpJiYob24uZGVsZXRlKHRoaXMpLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnRyaWdnZXIoKSkpfW5vdGlmeSgpe3RoaXMuZmxhZ3MmMiYmISh0aGlzLmZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FncyYzMil8fHRoaXMuZmxhZ3MmOHx8THModGhpcyl9cnVuKCl7aWYoISh0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmbGFncyYxKSlyZXR1cm4gdGhpcy5mbigpO3RoaXMuZmxhZ3N8PTIsa24odGhpcyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCRzKHRoaXMpO2NvbnN0IHQ9VSxuPWRlO1U9dGhpcyxkZT0hMDt0cnl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmZuKCl9ZmluYWxseXtWcyh0aGlzKSxVPXQsZGU9bix0aGlzLmZsYWdzJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWdzJjEpe2ZvcihsZXQgdD10aGlzLmRlcHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3Q7dD10Lm5leHREZXApTm4odCk7dGhpcy5kZXBzPXRoaXMuZGVwc1RhaWw9dm9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgMCxrbih0aGlzKSx0aGlzLm9uU3RvcCYmdGhpcy5vblN0b3AoKSx0aGlzLmZsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P29uLmFkZCh0aGlzKTp0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5zY2hlZHVsZXI/dGhpcy5zY2hlZHVsZXIoKTp0aGlzLnJ1bklmRGlydHkoKX1yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuSWZEaXJ0eSgpe21uKHRoaXMpJiZ0aGlzLnJ1bigpfWdldCBkaXJ0eSgpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gbW4odGhpcyl9fWxldCBqcz0wLGF0LGR0O2Z1bmN0aW9uIExzKGUsdD0hMSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKGUuZmxhZ3N8PTgsdCl7ZS5uZXh0PWR0LGR0PWU7cmV0dXJufWUubmV4dD1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsYXQ9ZX1mdW5jdGlvbiBEbigpe2pzKyt9ZnVuY3Rpb24gSG4oKXtpZigtLWpzPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwKXJldHVybjtpZihkdCl7bGV0IHQ9ZHQ7Zm9yKGR0PXZvaWQgMDt0Oyl7Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG49dC5uZXh0O3QubmV4dD12b2lkIDAsdC5mbGFncyY9LTksdD1ufX1sZXQgZTtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yKDthdDspe2xldCB0PWF0O2ZvcihhdD12b2lkIDA7dDspe2NvbnN0IG49dC5uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dDtpZih0Lm5leHQ9dm9pZCAwLHQuZmxhZ3MmPS05LHQuZmxhZ3MmMSl0cnl7dC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpZ2dlcigpfWNhdGNoKHMpe2V8fChlPXMpfXQ9bn19aWYoZSl0aHJvdyBlfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAkcyhlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dD10Lm5leHREZXApdC52ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2lvbj0tMSx0LnByZXZBY3RpdmVMaW5rPXQuZGVwLmFjdGl2ZUxpbmssdC5kZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmFjdGl2ZUxpbms9dH1mdW5jdGlvbiBWcyhlKXtsZXQgdCxuPWUuZGVwc1RhaWwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9bjtmb3IoO3M7KXtjb25zdCByPXMucHJldkRlcDtzLnZlcnNpb249PT0tMT8ocycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT1uJiYobj1yKSxObihzKSxRcihzKSk6dD1zLHMuZGVwLmFjdGl2ZUxpbms9cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldkFjdGl2ZUxpbmsscy5wcmV2QWN0aXZlTGluaz12b2lkIDAscz1yfWUuZGVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9dCxlLmRlcHNUYWlsPW59ZnVuY3Rpb24gbW4oZSl7Zm9yKGxldCB0PWUuZGVwcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7dDt0PXQubmV4dERlcClpZih0LmRlcC52ZXJzaW9uIT09dC52ZXJzaW9ufHx0LmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXAuY29tcHV0ZWQmJihVcyh0LmRlcC5jb21wdXRlZCl8fHQuZGVwLnZlcnNpb24hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09dC52ZXJzaW9uKSlyZXR1cm4hMDtyZXR1cm4hIWUuX2RpcnR5fWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVcyhlKXtpZihlLmZsYWdzJjQmJiEoZS5mbGFncyYxNil8fChlLmZsYWdzJj0tMTcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUuZ2xvYmFsVmVyc2lvbj09PV90KSlyZXR1cm47ZS5nbG9iYWxWZXJzaW9uPV90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztjb25zdCB0PWUuZGVwO2lmKGUuZmxhZ3N8PTIsdC52ZXJzaW9uPjAmJiFlLmlzUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTUiYmZS5kZXBzJiYhbW4oZSkpe2UuZmxhZ3MmPS0zO3JldHVybn1jb25zdCBuPVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHM9ZGU7VT1lLGRlPSEwO3RyeXskcyhlKTtjb25zdCByPWUuZm4oZS5fdmFsdWUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzsodC52ZXJzaW9uPT09MHx8RGUocixlLl92YWx1ZSkpJiYoZS5fdmFsdWU9cix0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXJzaW9uKyspfWNhdGNoKHIpe3Rocm93IHQudmVyc2lvbisrLHJ9ZmluYWxseXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVT1uLGRlPXMsVnMoZSksZS5mbGFncyY9LTN9fWZ1bmN0aW9uIE5uKGUsdD0hMSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0e2RlcDpuLHByZXZTdWI6cyxuZXh0U3ViOnJ9PWU7aWYocyYmKHMubmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTdWI9cixlLnByZXZTdWI9dm9pZCAwKSxyJiYoci5wcmV2U3ViPXMsZS5uZXh0U3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYj12b2lkIDApLG4uc3Vicz09PWUmJihuLnN1YnM9cywhcyYmbi5jb21wdXRlZCkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tuLmNvbXB1dGVkLmZsYWdzJj0tNTtmb3IobGV0IGk9bi5jb21wdXRlZC5kZXBzOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpO2k9aS5uZXh0RGVwKU5uKGksITApfSF0JiYhLS1uLnNjJiZuLm1hcCYmbi5tYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlbGV0ZShuLmtleSl9ZnVuY3Rpb24gUXIoZSl7Y29uc3R7cHJldkRlcDp0LG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0RGVwOm59PWU7dCYmKHQubmV4dERlcD1uLGUucHJldkRlcD12b2lkIDApLG4mJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobi5wcmV2RGVwPXQsZS5uZXh0RGVwPXZvaWQgMCl9bGV0IGRlPSEwO2NvbnN0IEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz1bXTtmdW5jdGlvbiBqZSgpe0tzLnB1c2goZGUpLGRlPSExfWZ1bmN0aW9uIExlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpe2NvbnN0IGU9S3MucG9wKCk7ZGU9ZT09PXZvaWQgMD8hMDplfWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrbihlKXtjb25zdHtjbGVhbnVwOnR9PWU7aWYoZS5jbGVhbnVwPXZvaWQgMCx0KXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3Qgbj1VO1U9dm9pZCAwO3RyeXt0KCl9ZmluYWxseXtVPW59fX1sZXQgX3Q9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7Y2xhc3Mga3J7Y29uc3RydWN0b3IodCxuKXt0aGlzLnN1Yj10LHRoaXMuZGVwPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHRoaXMudmVyc2lvbj1uLnZlcnNpb24sdGhpcy5uZXh0RGVwPXRoaXMucHJldkQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXA9dGhpcy5uZXh0U3ViPXRoaXMucHJldlN1Yj10aGlzLnByZXZBY3RpdmVMaW5rJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz12b2lkIDB9fWNsYXNzIGpue2NvbnN0cnVjdG9yKHQpe3RoaXMuY29tcHV0ZWQ9dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdGhpcy52ZXJzaW9uPTAsdGhpcy5hY3RpdmVMaW5rPXZvaWQgMCx0aGlzLnN1YnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXZvaWQgMCx0aGlzLm1hcD12b2lkIDAsdGhpcy5rZXk9dm9pZCAwLHRoaXMuc2M9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzB9dHJhY2sodCl7aWYoIVV8fCFkZXx8VT09PXRoaXMuY29tcHV0ZWQpcmV0dXJuOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXQgbj10aGlzLmFjdGl2ZUxpbms7aWYobj09PXZvaWQgMHx8bi5zdWIhPT1VKW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXRoaXMuYWN0aXZlTGluaz1uZXcga3IoVSx0aGlzKSxVLmRlcHM/KG4ucHJldkRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3A9VS5kZXBzVGFpbCxVLmRlcHNUYWlsLm5leHREZXA9bixVLmRlcHNUYWlsPW4pOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVLmRlcHM9VS5kZXBzVGFpbD1uLEJzKG4pO2Vsc2UgaWYobi52ZXJzaW9uPT09LTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYobi52ZXJzaW9uPXRoaXMudmVyc2lvbixuLm5leHREZXApKXtjb25zdCBzPW4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25leHREZXA7cy5wcmV2RGVwPW4ucHJldkRlcCxuLnByZXZEZXAmJihuLnByZXZEZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwLm5leHREZXA9cyksbi5wcmV2RGVwPVUuZGVwc1RhaWwsbi5uZXh0RGVwPXZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDAsVS5kZXBzVGFpbC5uZXh0RGVwPW4sVS5kZXBzVGFpbD1uLFUuZGVwcz09PW4mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYoVS5kZXBzPXMpfXJldHVybiBufXRyaWdnZXIodCl7dGhpcy52ZXJzaW9uKyssXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KyssdGhpcy5ub3RpZnkodCl9bm90aWZ5KHQpe0RuKCk7dHJ5e2ZvcihsZXQgbj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5zdWJzO247bj1uLnByZXZTdWIpbi5zdWIubm90aWZ5KCkmJm4uc3ViLmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Aubm90aWZ5KCl9ZmluYWxseXtIbigpfX19ZnVuY3Rpb24gQnMoZSl7aWYoZS5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwLnNjKyssZS5zdWIuZmxhZ3MmNCl7Y29uc3QgdD1lLmRlcC5jb21wdXRlZDtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCYmIWUuZGVwLnN1YnMpe3QuZmxhZ3N8PTIwO2ZvcihsZXQgcz10LmRlcHM7cztzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1zLm5leHREZXApQnMocyl9Y29uc3Qgbj1lLmRlcC5zdWJzO24hPT1lJiYoZS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldlN1Yj1uLG4mJihuLm5leHRTdWI9ZSkpLGUuZGVwLnN1YnM9ZX19Y29uc3QgYm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPW5ldyBXZWFrTWFwLHFlPVN5bWJvbCgiIikseW49U3ltYm9sKCIiKSxtdD1TeW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sKCIiKTtmdW5jdGlvbiBYKGUsdCxuKXtpZihkZSYmVSl7bGV0IHM9Ym4uZ2V0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtzfHxibi5zZXQoZSxzPW5ldyBNYXApO2xldCByPXMuZ2V0KG4pO3J8fChzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQobixyPW5ldyBqbiksci5tYXA9cyxyLmtleT1uKSxyLnRyYWNrKCl9fWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBFZShlLHQsbixzLHIsaSl7Y29uc3Qgbz1ibi5nZXQoZSk7aWYoIW8pe190KycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrO3JldHVybn1jb25zdCBsPWM9PntjJiZjLnRyaWdnZXIoKX07aWYoRG4oKSx0PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSJjbGVhciIpby5mb3JFYWNoKGwpO2Vsc2V7Y29uc3QgYz1FKGUpLGg9YyYmTW4oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pO2lmKGMmJm49PT0ibGVuZ3RoIil7Y29uc3QgYT1OdW1iZXIocyk7by5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaCgocCxUKT0+eyhUPT09Imxlbmd0aCJ8fFQ9PT1tdHx8IVRlKFQpJiZUPj1hKSYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJmwocCl9KX1lbHNlIHN3aXRjaCgobiE9PXZvaWQgMHx8by5oYXModm9pZCAwKSkmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZsKG8uZ2V0KG4pKSxoJiZsKG8uZ2V0KG10KSksdCl7Y2FzZSJhZGQiOmM/aCYmbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoby5nZXQoImxlbmd0aCIpKToobChvLmdldChxZSkpLFplKGUpJiZsKG8uZ2V0KHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbikpKTticmVhaztjYXNlImRlbGV0ZSI6Y3x8KGwoby5nZXQocWUpKSxaZShlKSYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2woby5nZXQoeW4pKSk7YnJlYWs7Y2FzZSJzZXQiOlplKGUpJiZsKG8uZ2V0KHFlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO2JyZWFrfX1IbigpfWZ1bmN0aW9uIFllKGUpe2NvbnN0IHQ9RChlKTtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHQ9PT1lP3Q6KFgodCwiaXRlcmF0ZSIsbXQpLGFlKGUpP3Q6dC5tYXAoWikpfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB6dChlKXtyZXR1cm4gWChlPUQoZSksIml0ZXJhdGUiLG10KSxlfWNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBlaT17X19wcm90b19fOm51bGwsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxuKHRoaXMsU3ltYm9sLml0ZXJhdG9yLFopfSxjb25jYXQoLi4uZSl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBZZSh0aGlzKS5jb25jYXQoLi4uZS5tYXAodD0+RSh0KT9ZZSh0KTp0KSl9LGVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWVzKCl7cmV0dXJuIGxuKHRoaXMsImVudHJpZXMiLGU9PihlWzFdPVooZVsxXSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpKX0sZXZlcnkoZSx0KXtyZXR1cm4gdmUodGhpcywiZXZlcnkiLGUsdCx2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwLGFyZ3VtZW50cyl9LGZpbHRlcihlLHQpe3JldHVybiB2ZSh0aGlzLCJmaWx0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIixlLHQsbj0+bi5tYXAoWiksYXJndW1lbnRzKX0sZmluZChlLHQpe3JldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUodGhpcywiZmluZCIsZSx0LFosYXJndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB2ZSh0aGlzLCJmaW5kSW5kZXgiLGUsdCx2b2lkIDAsYXJndW1lbnRzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LGZpbmRMYXN0KGUsdCl7cmV0dXJuIHZlKHRoaXMsImZpbmRMYXN0IixlLHQsWiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJndW1lbnRzKX0sZmluZExhc3RJbmRleChlLHQpe3JldHVybiB2ZSh0aGlzLCJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZExhc3RJbmRleCIsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmb3JFYWNoKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3JldHVybiB2ZSh0aGlzLCJmb3JFYWNoIixlLHQsdm9pZCAwLGFyZ3VtZW50cyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gZm4odGhpcywiaW5jbHVkZXMiLGUpfSxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXhPZiguLi5lKXtyZXR1cm4gZm4odGhpcywiaW5kZXhPZiIsZSl9LGpvaW4oZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3JldHVybiBZZSh0aGlzKS5qb2luKGUpfSxsYXN0SW5kZXhPZiguLi5lKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGZuKHRoaXMsImxhc3RJbmRleE9mIixlKX0sbWFwKGUsdCl7cmV0dXJuIHZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0aGlzLCJtYXAiLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0scG9wKCl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdCh0aGlzLCJwb3AiKX0scHVzaCguLi5lKXtyZXR1cm4gb3QodGhpcywicHVzaCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpfSxyZWR1Y2UoZSwuLi50KXtyZXR1cm4gZXModGhpcywicmVkdWNlIixlLHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30scmVkdWNlUmlnaHQoZSwuLi50KXtyZXR1cm4gZXModGhpcywicmVkdWNlUmlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IixlLHQpfSxzaGlmdCgpe3JldHVybiBvdCh0aGlzLCJzaGlmdCIpfSxzb21lKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHQpe3JldHVybiB2ZSh0aGlzLCJzb21lIixlLHQsdm9pZCAwLGFyZ3VtZW50cyl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxzcGxpY2UoLi4uZSl7cmV0dXJuIG90KHRoaXMsInNwbGljZSIsZSl9LHRvUmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2VkKCl7cmV0dXJuIFllKHRoaXMpLnRvUmV2ZXJzZWQoKX0sdG9Tb3J0ZWQoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiBZZSh0aGlzKS50b1NvcnRlZChlKX0sdG9TcGxpY2VkKC4uLmUpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gWWUodGhpcykudG9TcGxpY2VkKC4uLmUpfSx1bnNoaWZ0KC4uLmUpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gb3QodGhpcywidW5zaGlmdCIsZSl9LHZhbHVlcygpe3JldHVybiBsbih0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncywidmFsdWVzIixaKX19O2Z1bmN0aW9uIGxuKGUsdCxuKXtjb25zdCBzPXp0KGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxyPXNbdF0oKTtyZXR1cm4gcyE9PWUmJiFhZShlKSYmKHIuX25leHQ9ci5uZXh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyLm5leHQ9KCk9Pntjb25zdCBpPXIuX25leHQoKTtyZXR1cm4gaS52YWx1ZSYmKGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnZhbHVlPW4oaS52YWx1ZSkpLGl9KSxyfWNvbnN0IHRpPUFycmF5LnByb3RvdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7ZnVuY3Rpb24gdmUoZSx0LG4scyxyLGkpe2NvbnN0IG89enQoZSksbD1vIT09ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiFhZShlKSxjPW9bdF07aWYoYyE9PXRpW3RdKXtjb25zdCBwPWMuYXBwbHkoZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSk7cmV0dXJuIGw/WihwKTpwfWxldCBoPW47byE9PWUmJihsP2g9ZnVuY3Rpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLFoocCksVCxlKX06bi5sZW5ndGg+MiYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoPWZ1bmN0aW9uKHAsVCl7cmV0dXJuIG4uY2FsbCh0aGlzLHAsVCxlKX0pKTtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgYT1jLmNhbGwobyxoLHMpO3JldHVybiBsJiZyP3IoYSk6YX1mdW5jdGlvbiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoZSx0LG4scyl7Y29uc3Qgcj16dChlKTtsZXQgaT1uO3JldHVybiByIT09ZSYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZShlKT9uLmxlbmd0aD4zJiYoaT1mdW5jdGlvbihvLGwsYyl7cmV0dXJuIG4uY2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGwodGhpcyxvLGwsYyxlKX0pOmk9ZnVuY3Rpb24obyxsLGMpe3JldHVybiBuLmNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsKHRoaXMsbyxaKGwpLGMsZSl9KSxyW3RdKGksLi4ucyl9ZnVuY3Rpb24gZm4oZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdCxuKXtjb25zdCBzPUQoZSk7WChzLCJpdGVyYXRlIixtdCk7Y29uc3Qgcj1zW3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSguLi5uKTtyZXR1cm4ocj09PS0xfHxyPT09ITEpJiZVbihuWzBdKT8oblswXT1EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuWzBdKSxzW3RdKC4uLm4pKTpyfWZ1bmN0aW9uIG90KGUsdCxuPVtdKXtqZSgpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEbigpO2NvbnN0IHM9RChlKVt0XS5hcHBseShlLG4pO3JldHVybiBIbigpLExlKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHN9Y29uc3Qgbmk9QW4oIl9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLFdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1uZXcgU2V0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCkuZmlsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcihlPT5lIT09ImFyZ3VtZW50cyImJmUhPT0iY2FsbGVyIikubWFwKGU9PlN5bWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xbZV0pLmZpbHRlcihUZSkpO2Z1bmN0aW9uIHNpKGUpe1RlKGUpfHwoZT1TdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nKGUpKTtjb25zdCB0PUQodGhpcyk7cmV0dXJuIFgodCwiaGFzIixlKSx0LmhhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPd25Qcm9wZXJ0eShlKX1jbGFzcyBxc3tjb25zdHJ1Y3Rvcih0PSExLG49ITEpe3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLl9pc1JlYWRvbmx5PXQsdGhpcy5faXNTaGFsbG93PW59Z2V0KHQsbixzKXtpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Yobj09PSJfX3Zfc2tpcCIpcmV0dXJuIHQuX192X3NraXA7Y29uc3Qgcj10aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfaXNSZWFkb25seSxpPXRoaXMuX2lzU2hhbGxvdztpZihuPT09Il9fdl9pc1JlYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSIpcmV0dXJuIXI7aWYobj09PSJfX3ZfaXNSZWFkb25seSIpcmV0dXJuIHI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKG49PT0iX192X2lzU2hhbGxvdyIpcmV0dXJuIGk7aWYobj09PSJfX3ZfcmF3IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpcmV0dXJuIHM9PT0ocj9pP2hpOnpzOmk/WXM6R3MpLmdldCh0KXx8T2JqZWN0LmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRQcm90b3R5cGVPZih0KT09PU9iamVjdC5nZXRQcm90b3R5cGVPZihzKT90OnZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkIDA7Y29uc3Qgbz1FKHQpO2lmKCFyKXtsZXQgYztpZihvJiYoYz1laVtuXSkpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBjO2lmKG49PT0iaGFzT3duUHJvcGVydHkiKXJldHVybiBzaX1jb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbD1SZWZsZWN0LmdldCh0LG4sUSh0KT90OnMpO3JldHVybihUZShuKT9Xcy5oYXMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOm5pKG4pKXx8KHJ8fFgodCwiZ2V0IixuKSxpKT9sOlEobCk/byYmTW4obik/bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6bC52YWx1ZTpLKGwpP3I/WHMobCk6JG4obCk6bH19Y2xhc3MgSnMgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXN7Y29uc3RydWN0b3IodD0hMSl7c3VwZXIoITEsdCl9c2V0KHQsbixzLHIpe2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaT10W25dO2lmKCF0aGlzLl9pc1NoYWxsb3cpe2NvbnN0IGM9SmUoaSk7aWYoIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZShzKSYmIUplKHMpJiYoaT1EKGkpLHM9RChzKSksIUUodCkmJlEoaSkmJiFRKHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSlyZXR1cm4gYz8hMTooaS52YWx1ZT1zLCEwKX1jb25zdCBvPUUodCkmJk1uKG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9OdW1iZXIobik8dC5sZW5ndGg6SCh0LG4pLGw9UmVmbGVjdC5zZXQodCxuLHMsUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodCk/dDpyKTtyZXR1cm4gdD09PUQocikmJihvP0RlKHMsaSkmJkVlKHQsInNldCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scyk6RWUodCwiYWRkIixuLHMpKSxsfWRlbGV0ZVByb3BlcnR5KHQsbil7Y29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHM9SCh0LG4pO3Rbbl07Y29uc3Qgcj1SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LG4pO3JldHVybiByJiZzJiZFZSh0LCJkZWxldGUiLG4sdm9pZCAwKSxyfWhhcygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCxuKXtjb25zdCBzPVJlZmxlY3QuaGFzKHQsbik7cmV0dXJuKCFUZShuKXx8IVdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5oYXMobikpJiZYKHQsImhhcyIsbiksc31vd25LZXlzKHQpe3JldHVybiBYKHQsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVyYXRlIixFKHQpPyJsZW5ndGgiOnFlKSxSZWZsZWN0Lm93bktleXModCl9fWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyByaSBleHRlbmRzIHFze2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCEwLHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31zZXQodCxuKXtyZXR1cm4hMH1kZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiEwfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9Y29uc3QgaWk9bmV3IEpzLG9pPW5ldyByaSxsaT1uZXcgSnMoITApO2NvbnN0IHgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj1lPT5lLFJ0PWU9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oLi4ucyl7Y29uc3Qgcj10aGlzLl9fdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfcmF3LGk9RChyKSxvPVplKGkpLGw9ZT09PSJlbnRyaWVzInx8ZT09PVN5bWJvbC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRlcmF0b3ImJm8sYz1lPT09ImtleXMiJiZvLGg9cltlXSguLi5zKSxhPW4/eG46JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q/U246WjtyZXR1cm4hdCYmWChpLCJpdGVyYXRlIixjP3luOnFlKSx7bmV4dCgpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdHt2YWx1ZTpwLGRvbmU6VH09aC5uZXh0KCk7cmV0dXJuIFQ/e3ZhbHVlOnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGRvbmU6VH06e3ZhbHVlOmw/W2EocFswXSksYShwWzFdKV06YShwKSxkb25lOlR9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fX1mdW5jdGlvbiBNdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLnQpe3JldHVybiBlPT09ImRlbGV0ZSI/ITEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmU9PT0iY2xlYXIiP3ZvaWQgMDp0aGlzfX1mdW5jdGlvbiBjaShlLHQpe2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuPXtnZXQocil7Y29uc3QgaT10aGlzLl9fdl9yYXcsbz1EKGkpLGw9RChyKTtlfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8KERlKHIsbCkmJlgobywiZ2V0IixyKSxYKG8sImdldCIsbCkpO2NvbnN0e2hhczonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY309UnQobyksaD10P3huOmU/U246WjtpZihjLmNhbGwobyxyKSlyZXR1cm4gaChpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXQocikpO2lmKGMuY2FsbChvLGwpKXJldHVybiBoKGkuZ2V0KGwpKTtpIT09bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJmkuZ2V0KHIpfSxnZXQgc2l6ZSgpe2NvbnN0IHI9dGhpcy5fX3ZfcmF3O3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hZSYmWChEKHIpLCJpdGVyYXRlIixxZSksUmVmbGVjdC5nZXQociwic2l6ZSIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IpfSxoYXMocil7Y29uc3QgaT10aGlzLl9fdl9yYXcsbz1EKGkpLGw9RChyKTtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGV8fChEZShyLGwpJiZYKG8sImhhcyIsciksWChvLCJoYXMiLGwpKSxyPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWw/aS5oYXMocik6aS5oYXMocil8fGkuaGFzKGwpfSxmb3JFYWNoKHIsaSl7Y29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IG89dGhpcyxsPW8uX192X3JhdyxjPUQobCksaD10P3huOmU/U246WjtyZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIWUmJlgoYywiaXRlcmF0ZSIscWUpLGwuZm9yRWFjaCgoYSxwKT0+ci5jYWxsKGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGgoYSksaChwKSxvKSl9fTtyZXR1cm4gc2UobixlP3thZGQ6TXQoImFkZCIpLHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6TXQoInNldCIpLGRlbGV0ZTpNdCgiZGVsZXRlIiksY2xlYXI6TXQoImNsZWFyIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfTp7YWRkKHIpeyF0JiYhYWUocikmJiFKZShyKSYmKHI9RChyKSk7Y29uc3QgaT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCh0aGlzKTtyZXR1cm4gUnQoaSkuaGFzLmNhbGwoaSxyKXx8KGkuYWRkKHIpLEVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhpLCJhZGQiLHIscikpLHRoaXN9LHNldChyLGkpeyF0JiYhYWUoaSkmJiFKZShpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihpPUQoaSkpO2NvbnN0IG89RCh0aGlzKSx7aGFzOmwsZ2V0OmN9PVJ0KG8pO2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgaD1sLmNhbGwobyxyKTtofHwocj1EKHIpLGg9bC5jYWxsKG8scikpO2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhPWMuY2FsbChvLHIpO3JldHVybiBvLnNldChyLGkpLGg/RGUoaSxhKSYmRWUobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInNldCIscixpKTpFZShvLCJhZGQiLHIsaSksdGhpc30sZGVsZXRlKHIpe2NvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpPUQodGhpcykse2hhczpvLGdldDpsfT1SdChpKTtsZXQgYz1vLmNhbGwoaSxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7Y3x8KHI9RChyKSxjPW8uY2FsbChpLHIpKSxsJiZsLmNhbGwoaSxyKTtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaD1pLmRlbGV0ZShyKTtyZXR1cm4gYyYmRWUoaSwiZGVsZXRlIixyLHZvaWQgMCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGh9LGNsZWFyKCl7Y29uc3Qgcj1EKHRoaXMpLGk9ci5zaXplIT09MCxvPXIuY2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyKCk7cmV0dXJuIGkmJkVlKHIsImNsZWFyIix2b2lkIDAsdm9pZCAwKSxvfX0pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIixTeW1ib2wuaXRlcmF0b3JdLmZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKHI9PntuW3JdPWZpKHIsZSx0KX0pLG59ZnVuY3Rpb24gTG4oZSx0KXtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgbj1jaShlLHQpO3JldHVybihzLHIsaSk9PnI9PT0iX192X2lzUmVhY3RpdmUiPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichZTpyPT09Il9fdl9pc1JlYWRvbmx5Ij9lOnI9PT0iX192X3JhdyI/czpSZWZsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5nZXQoSChuLHIpJiZyIGluIHM/bjpzLHIsaSl9Y29uc3QgdWk9e2dldDpMbighJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzEsITEpfSxhaT17Z2V0OkxuKCExLCEwKX0sZGk9e2dldDpMbighMCwhMSl9O2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBHcz1uZXcgV2Vha01hcCxZcz1uZXcgV2Vha01hcCx6cz1uZXcgV2Vha01hcCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcGkoZSl7c3dpdGNoKGUpe2Nhc2UiT2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCI6Y2FzZSJBcnJheSI6cmV0dXJuIDE7Y2FzZSJNYXAiOmNhc2UiU2V0IjpjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSJXZWFrTWFwIjpjYXNlIldlYWtTZXQiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAwfX1mdW5jdGlvbiBnaShlKXtyZXR1cm4gZS5fX3Zfc2tpcHx8IU9iamVjdC5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NFeHRlbnNpYmxlKGUpPzA6cGkoJHIoZSkpfWZ1bmN0aW9uICRuKGUpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgSmUoZSk/ZTpWbihlLCExLGlpLHVpLEdzKX1mdW5jdGlvbiBfaShlKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFZuKGUsITEsbGksYWksWXMpfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBWbihlLCEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxvaSxkaSx6cyl9ZnVuY3Rpb24gVm4oZSx0LG4scyxyKXtpZighSyhlKXx8ZS5fXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2X3JhdyYmISh0JiZlLl9fdl9pc1JlYWN0aXZlKSlyZXR1cm4gZTtjb25zdCBpPXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldChlKTtpZihpKXJldHVybiBpO2NvbnN0IG89Z2koZSk7aWYobz09PTApcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBlO2NvbnN0IGw9bmV3IFByb3h5KGUsbz09PTI/czpuKTtyZXR1cm4gci5zZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUsbCksbH1mdW5jdGlvbiBRZShlKXtyZXR1cm4gSmUoZSk/UWUoZS5fX3ZfcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndyk6ISEoZSYmZS5fX3ZfaXNSZWFjdGl2ZSl9ZnVuY3Rpb24gSmUoZSl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEhKGUmJmUuX192X2lzUmVhZG9ubHkpfWZ1bmN0aW9uIGFlKGUpe3JldHVybiEhKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlJiZlLl9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIFVuKGUpe3JldHVybiBlPyEhZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX192X3JhdzohMX1mdW5jdGlvbiBEKGUpe2NvbnN0IHQ9ZSYmZS5fX3ZfcmF3O3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gdD9EKHQpOmV9ZnVuY3Rpb24gbWkoZSl7cmV0dXJuIUgoZSwiX192X3NraScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwIikmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJk1zKGUsIl9fdl9za2lwIiwhMCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGV9Y29uc3QgWj1lPT5LKGUpPyRuKGUpOmUsU249ZT0+SyhlKT9YcyhlKTplO2Z1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBRKGUpe3JldHVybiBlP2UuX192X2lzUmVmPT09ITA6ITF9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGJpKGUpe3JldHVybiB5aShlLCExKX1mdW5jdGlvbiB5aShlLHQpe3JldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUShlKT9lOm5ldyB4aShlLHQpfWNsYXNzIHhpe2NvbnN0cnVjdG9yKHQsbil7dGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZGVwPW5ldyBqbix0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1NoYWxsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3PSExLHRoaXMuX3Jhd1ZhbHVlPW4/dDpEKHQpLHRoaXMuX3ZhbHVlPW4/dDpaKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSx0aGlzLl9fdl9pc1NoYWxsb3c9bn1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VwLnRyYWNrKCksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpe2NvbnN0IG49dGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuX3Jhd1ZhbHVlLHM9dGhpcy5fX3ZfaXNTaGFsbG93fHxhZSh0KXx8SmUodCk7dD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz90OkQodCksRGUodCxuKSYmKHRoaXMuX3Jhd1ZhbHVlPXQsdGhpcy5fdmFsdWU9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M/dDpaKHQpLHRoaXMuZGVwLnRyaWdnZXIoKSl9fWZ1bmN0aW9uIFpzKGUpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gUShlKT9lLnZhbHVlOmV9Y29uc3QgU2k9e2dldDooZSx0LG4pPT50PT09Il8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3ZfcmF3Ij9lOlpzKFJlZmxlY3QuZ2V0KGUsdCxuKSksc2V0OihlLHQsbixzKT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tjb25zdCByPWVbdF07cmV0dXJuIFEocikmJiFRKG4pPyhyLnZhbHVlPW4sITApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZWZsZWN0LnNldChlLHQsbixzKX19O2Z1bmN0aW9uIFFzKGUpe3JldHVybiBRZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk/ZTpuZXcgUHJveHkoZSxTaSl9Y2xhc3Mgd2l7Y29uc3RydWN0b3IodCxuLHMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t0aGlzLmZuPXQsdGhpcy5zZXR0ZXI9bix0aGlzLl92YWx1ZT12b2lkIDAsdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVwPW5ldyBqbih0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTE2LHRoaXMuZ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JhbFZlcnNpb249X3QtMSx0aGlzLm5leHQ9dm9pZCAwLHRoaXMuZWZmZWN0PXRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLHRoaXMuX192X2lzUmVhZG9ubHk9IW4sdGhpcy5pc1NTUj1zfW5vdGlmeSgpe2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZih0aGlzLmZsYWdzfD0xNiwhKHRoaXMuZmxhZ3MmOCkmJlUhPT10aGlzKXJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gTHModGhpcywhMCksITB9Z2V0IHZhbHVlKCl7Y29uc3QgdD10aGlzLmRlcC50cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2soKTtyZXR1cm4gVXModGhpcyksdCYmKHQudmVyc2lvbj10aGlzLmRlcC52ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2lvbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKHQpe3RoaXMuc2V0dGVyJiZ0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zZXR0ZXIodCl9fWZ1bmN0aW9uIFRpKGUsdCxuPSExKXtsZXQgcyxyO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUihlKT9zPWU6KHM9ZS5nZXQscj1lLnNldCksbmV3IHdpKHMscixuKX1jb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSXQ9e30sTHQ9bmV3IFdlYWtNYXA7bGV0IFdlO2Z1bmN0aW9uIENpKGUsdD0hMSxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1XZSl7aWYobil7bGV0IHM9THQuZ2V0KG4pO3N8fEx0LnNldChuLHM9W10pLHMucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2goZSl9fWZ1bmN0aW9uIHZpKGUsdCxuPUwpe2NvbnN0e2ltbWVkaWF0ZTpzLGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWVwOnIsb25jZTppLHNjaGVkdWxlcjpvLGF1Z21lbnRKb2I6bCxjYWxsOmN9PW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2g9QT0+cj9BOmFlKEEpfHxyPT09ITF8fHI9PT0wP0FlKEEsMSk6QWUoQSk7bGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhLHAsVCxDLEY9ITEsST0hMTtpZihRKGUpPyhwPSgpPT5lLnZhbHVlLEY9YWUoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpRZShlKT8ocD0oKT0+aChlKSxGPSEwKTpFKGUpPyhJPSEwLEY9ZS5zb21lKEE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz5RZShBKXx8YWUoQSkpLHA9KCk9PmUubWFwKEE9PntpZihRKEEpKXJldHVybiBBLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZTtpZihRZShBKSlyZXR1cm4gaChBKTtpZihSKEEpKXJldHVybiBjP2MoQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMik6QSgpfSkpOlIoZSk/dD9wPWM/KCk9PmMoZSwyKTplOnA9KCk9PntpZihUKXtqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoKTt0cnl7VCgpfWZpbmFsbHl7TGUoKX19Y29uc3QgQT1XZTtXZT1hO3RyeXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGM/YyhlLDMsW0NdKTplKEMpfWZpbmFsbHl7V2U9QX19OnA9d2UsdCYmciknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IEE9cCxHPXI9PT0hMD8xLzA6cjtwPSgpPT5BZShBKCksRyl9Y29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3o9WnIoKSxqPSgpPT57YS5zdG9wKCkseiYmei5hY3RpdmUmJlJuKHouZWZmZWN0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsYSl9O2lmKGkmJnQpe2NvbnN0IEE9dDt0PSguLi5HKT0+e0EoLi4uRyksaigpfX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IFc9ST9uZXcgQXJyYXkoZS5sZW5ndGgpLmZpbGwoSXQpOkl0O2NvbnN0IHE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E9PntpZighKCEoYS5mbGFncyYxKXx8IWEuZGlydHkmJiFBKSlpZih0KXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRz1hLnJ1bigpO2lmKHJ8fEZ8fChJP0cuc29tZSgoUmUsaGUpPT5EZShSZSxXW2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV0pKTpEZShHLFcpKSl7VCYmVCgpO2NvbnN0IFJlPVdlO1dlPWE7dHJ5e2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBoZT1bRyxXPT09SXQ/dm9pZCAwOkkmJldbMF09PT1JdD9bXTpXLENdO2M/Yyh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczLGhlKTp0KC4uLmhlKSxXPUd9ZmluYWxseXtXZT1SZX19fWVsc2UgYS5ydW4oKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiBsJiZsKHEpLGE9bmV3IE5zKHApLGEuc2NoZWR1bGVyPW8/KCk9Pm8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3EsITEpOnEsQz1BPT5DaShBLCExLGEpLFQ9YS5vblN0b3A9KCk9Pntjb25zdCBBPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMdC5nZXQoYSk7aWYoQSl7aWYoYyljKEEsNCk7ZWxzZSBmb3IoY29uc3QgRyBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSlHKCk7THQuZGVsZXRlKGEpfX0sdD9zP3EoITApOlc9YS5ydW4oKTpvP28ocS5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZChudWxsLCEwKSwhMCk6YS5ydW4oKSxqLnBhdXNlPWEucGF1c2UuYmluZChhKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsai5yZXN1bWU9YS5yZXN1bWUuYmluZChhKSxqLnN0b3A9aixqfWZ1bmN0aW9uIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShlLHQ9MS8wLG4pe2lmKHQ8PTB8fCFLKGUpfHxlLl9fdl9za2lwfHwobj1ufHxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V3IFNldCxuLmhhcyhlKSkpcmV0dXJuIGU7aWYobi5hZGQoZSksdC0tLFEoZSkpQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGUudmFsdWUsdCxuKTtlbHNlIGlmKEUoZSkpZm9yKGxldCBzPTA7czxlLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7cysrKUFlKGVbc10sdCxuKTtlbHNlIGlmKHF0KGUpfHxaZShlKSllLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKHM9PntBZShzLHQsbil9KTtlbHNlIGlmKFBzKGUpKXtmb3IoY29uc3QgcyBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZSlBZShlW3NdLHQsbik7Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmdldE93blByb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ0eVN5bWJvbHMoZSkpT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGUuY2FsbChlLHMpJiZBZShlW3NdLHQsbil9cmV0dXJuIGV9LyoqXG4qIEB2dWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL3J1bnRpbWUtY29yZSB2My41LjEzXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBUdChlLHQsbixzKXt0cnl7cmV0dXJuIHM/ZSguLi5zKTplKCl9Y2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoKHIpe1h0KHIsdCxuKX19ZnVuY3Rpb24gQ2UoZSx0LG4scyl7aWYoUihlKSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHI9VHQoZSx0LG4scyk7cmV0dXJuIHImJkVzKHIpJiZyLmNhdGNoKGk9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7WHQoaSx0LG4pfSkscn1pZihFKGUpKXtjb25zdCByPVtdO2ZvcihsZXQgaT0wO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPGUubGVuZ3RoO2krKylyLnB1c2goQ2UoZVtpXSx0LG4scykpO3JldHVybiByfX1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gWHQoZSx0LG4scz0hMCl7Y29uc3Qgcj10P3Qudm5vZGU6bnVsbCx7ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycm9ySGFuZGxlcjppLHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb246b30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXQmJnQuYXBwQ29udGV4dC5jb25maWd8fEw7aWYodCl7bGV0IGw9dC5wYXJlbnQ7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGM9dC5wcm94eSxoPWBodHRwczovL3Z1ZWpzLm9yZy9lcnJvci1yZWZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmNlLyNydW50aW1lLSR7bn1gO2Zvcig7bDspe2NvbnN0IGE9bC5lYztpZihhKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspaWYoYVtwXShlLGMsaCk9PT0hMSlyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJufWw9bC5wYXJlbnR9aWYoaSl7amUoKSxUdChpLG51bGwsMTAsW2UsYyxoXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLExlKCk7cmV0dXJufX1PaShlLG4scixzLG8pfWZ1bmN0aW9uIE9pKGUsdCxuLHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSEwLHI9ITEpe2lmKHIpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfWNvbnN0IHRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1bXTtsZXQgeWU9LTE7Y29uc3Qga2U9W107bGV0IEllPW51bGwsemU9MDtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicga3M9UHJvbWlzZS5yZXNvbHZlKCk7bGV0ICR0PW51bGw7ZnVuY3Rpb24gRWkoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IHQ9JHR8fGtzO3JldHVybiBlP3QudGhlbih0aGlzP2UuYmluZCh0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6ZSk6dH1mdW5jdGlvbiBBaShlKXtsZXQgdD15ZSsxLG49dGUubGVuZ3RoO2ZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoO3Q8bjspe2NvbnN0IHM9dCtuPj4+MSxyPXRlW3NdLGk9YnQocik7aTxlfHxpPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWUmJnIuZmxhZ3MmMj90PXMrMTpuPXN9cmV0dXJuIHR9ZnVuY3Rpb24gS24oZSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmKCEoZS5mbGFncyYxKSl7Y29uc3QgdD1idChlKSxuPXRlW3RlLmxlbmd0aC0xXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7IW58fCEoZS5mbGFncyYyKSYmdD49YnQobik/dGUucHVzaChlKTp0ZS5zcGxpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEFpKHQpLDAsZSksZS5mbGFnc3w9MSxlcigpfX1mdW5jdGlvbiBlcigpeyR0fHwoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyR0PWtzLnRoZW4obnIpKX1mdW5jdGlvbiBQaShlKXtFKGUpP2tlLnB1c2goLi4uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOkllJiZlLmlkPT09LTE/SWUuc3BsaWNlKHplKzEsMCxlKTplLmZsYWdzJjF8fCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2UucHVzaChlKSxlLmZsYWdzfD0xKSxlcigpfWZ1bmN0aW9uIHRzKGUsdCxuPXllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysxKXtmb3IoO248dGUubGVuZ3RoO24rKyl7Y29uc3Qgcz10ZVtuXTtpZihzJiZzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmbGFncyYyKXtpZihlJiZzLmlkIT09ZS51aWQpY29udGludWU7dGUuc3BsaWNlKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDEpLG4tLSxzLmZsYWdzJjQmJihzLmZsYWdzJj0tMikscygpLHMuZmxhZ3MmNHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzLmZsYWdzJj0tMil9fX1mdW5jdGlvbiB0cihlKXtpZihrZS5sZW5ndGgpe2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB0PVsuLi5uZXcgU2V0KGtlKV0uc29ydCgobixzKT0+YnQobiktYnQocykpO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihrZS5sZW5ndGg9MCxJZSl7SWUucHVzaCguLi50KTtyZXR1cm59Zm9yKEllPXQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plPTA7emU8SWUubGVuZ3RoO3plKyspe2NvbnN0IG49SWVbemVdO24uZmxhZ3MmNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihuLmZsYWdzJj0tMiksbi5mbGFncyY4fHxuKCksbi5mbGFncyY9LTJ9SWU9bnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGwsemU9MH19Y29uc3QgYnQ9ZT0+ZS5pZD09bnVsbD9lLmZsYWdzJjI/LTE6MS8wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzplLmlkO2Z1bmN0aW9uIG5yKGUpe3RyeXtmb3IoeWU9MDt5ZTx0ZS5sZW5ndGg7eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKyspe2NvbnN0IHQ9dGVbeWVdO3QmJiEodC5mbGFncyY4KSYmKHQuZmxhZ3MmNCYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJih0LmZsYWdzJj0tMiksVHQodCx0LmksdC5pPzE1OjE0KSx0LmZsYWdzJjR8fCh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5mbGFncyY9LTIpKX19ZmluYWxseXtmb3IoO3llPHRlLmxlbmd0aDt5ZSsrKXtjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgdD10ZVt5ZV07dCYmKHQuZmxhZ3MmPS0yKX15ZT0tMSx0ZS5sZW5ndGg9MCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHIoKSwkdD1udWxsLCh0ZS5sZW5ndGh8fGtlLmxlbmd0aCkmJm5yKCl9fWxldCB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U9bnVsbCxzcj1udWxsO2Z1bmN0aW9uIFZ0KGUpe2NvbnN0IHQ9dWU7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZT1lLHNyPWUmJmUudHlwZS5fX3Njb3BlSWR8fG51bGwsdH1mdW5jdGlvbiBSaSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSx0PXVlLG4pe2lmKCF0fHxlLl9uKXJldHVybiBlO2NvbnN0IHM9KC4uLnIpPT57JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuX2QmJnVzKC0xKTtjb25zdCBpPVZ0KHQpO2xldCBvO3RyeXtvPWUoLi4ucil9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmFsbHl7VnQoaSkscy5fZCYmdXMoMSl9cmV0dXJuIG99O3JldHVybiBzLl9uPSEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCxzLl9jPSEwLHMuX2Q9ITAsc31mdW5jdGlvbiBNaShlLHQpe2lmKHVlPT09bnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wpcmV0dXJuIGU7Y29uc3Qgbj1lbih1ZSkscz1lLmRpcnN8fChlLmRpcnM9W10pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0W2ksbyxsLGM9TF09dFtyXTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSYmKFIoaSkmJihpPXttb3VudGVkOmksdXBkYXRlZDppfSksaS5kZWVwJiZBZShvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykscy5wdXNoKHtkaXI6aSxpbnN0YW5jZTpuLHZhbHVlOm8sb2xkVmFsdWU6dm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMCxhcmc6bCxtb2RpZmllcnM6Y30pKX1yZXR1cm4gZX1mdW5jdGlvbiBLZShlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scyl7Y29uc3Qgcj1lLmRpcnMsaT10JiZ0LmRpcnM7Zm9yKGxldCBvPTA7bzxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5sZW5ndGg7bysrKXtjb25zdCBsPXJbb107aSYmKGwub2xkVmFsdWU9aVtvXS52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUpO2xldCBjPWwuZGlyW3NdO2MmJihqZSgpLENlKGMsbiw4LFtlLmVsLGwsZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndF0pLExlKCkpfX1jb25zdCBJaT1TeW1ib2woIl92dGUiKSxGaT1lPT5lLl9faXNUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZXBvcnQ7ZnVuY3Rpb24gQm4oZSx0KXtlLnNoYXBlRmxhZyY2JiZlLmNvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ/KGUudHJhbnNpdGlvbj10LEJuKGUuY29tcG9uZW50LnN1YlRyZWUsdCkpOmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNoYXBlRmxhZyYxMjg/KGUuc3NDb250ZW50LnRyYW5zaXRpb249dC5jbG9uZShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zc0NvbnRlbnQpLGUuc3NGYWxsYmFjay50cmFuc2l0aW9uPXQuY2xvbmUoZS5zcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGYWxsYmFjaykpOmUudHJhbnNpdGlvbj10fWZ1bmN0aW9uIHJyKGUpe2UuaWRzPVsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5pZHNbMF0rZS5pZHNbMl0rKysiLSIsMCwwXX1mdW5jdGlvbiBVdChlLHQsbixzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxyPSExKXtpZihFKGUpKXtlLmZvckVhY2goKEYsSSk9PlV0KEYsdCYmKEUodCk/dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbSV06dCksbixzLHIpKTtyZXR1cm59aWYoaHQocykmJiFyKXtzLnNoYXBlRmxhZyYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNTEyJiZzLnR5cGUuX19hc3luY1Jlc29sdmVkJiZzLmNvbXBvbmVudC5zdWJUcmVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jb21wb25lbnQmJlV0KGUsdCxuLHMuY29tcG9uZW50LnN1YlRyZWUpO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9Y29uc3QgaT1zLnNoYXBlRmxhZyY0P2VuKHMuY29tcG9uZW50KTpzLmVsLG89cj8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbDppLHtpOmwscjpjfT1lLGg9dCYmdC5yLGE9bC5yZWZzPT09TD9sLnJlZnM9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t9OmwucmVmcyxwPWwuc2V0dXBTdGF0ZSxUPUQocCksQz1wPT09TD8oKT0+ITE6RicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PkgoVCxGKTtpZihoIT1udWxsJiZoIT09YyYmKEooaCk/KGFbaF09bnVsbCxDKGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSYmKHBbaF09bnVsbCkpOlEoaCkmJihoLnZhbHVlPW51bGwpKSxSKGMpKVR0KGMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsMTIsW28sYV0pO2Vsc2V7Y29uc3QgRj1KKGMpLEk9UShjKTtpZihGfHxJKXtjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3Qgej0oKT0+e2lmKGUuZil7Y29uc3Qgaj1GP0MoYyk/cFtjXTphW2NdOmMudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlO3I/RShqKSYmUm4oaixpKTpFKGopP2ouaW5jbHVkZXMoaSl8fGoucHVzaChpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6Rj8oYVtjXT1baV0sQyhjKSYmKHBbY109YVtjXSkpOihjLnZhbHVlPVtpXSxlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrJiYoYVtlLmtdPWMudmFsdWUpKX1lbHNlIEY/KGFbY109byxDKGMpJiYocFtjXT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbykpOkkmJihjLnZhbHVlPW8sZS5rJiYoYVtlLmtdPW8pKX07bz8oei5pZD0tMSxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoeixuKSk6eigpfX19R3QoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrO0d0KCkuY2FuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbElkbGVDYWxsYmFjaztjb25zdCBodD1lPT4hIWUudHlwZS5fX2FzeW5jTG9hZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncixpcj1lPT5lLnR5cGUuX19pc0tlZXBBbGl2ZTtmdW5jdGlvbiBEaShlLHQpe29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlLCJhIix0KX1mdW5jdGlvbiBIaShlLHQpe29yKGUsImRhIix0KX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IoZSx0LG49bmUpe2NvbnN0IHM9ZS5fX3dkY3x8KGUuX193ZGM9KCk9PntsZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHI9bjtmb3IoO3I7KXtpZihyLmlzRGVhY3RpdmF0ZWQpcmV0dXJuO3I9ci5wYXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250fXJldHVybiBlKCl9KTtpZihadCh0LHMsbiksbil7bGV0IHI9bi5wYXJlbnQ7ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcig7ciYmci5wYXJlbnQ7KWlyKHIucGFyZW50LnZub2RlKSYmTmkocyx0LG4sciknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHI9ci5wYXJlbnR9fWZ1bmN0aW9uIE5pKGUsdCxuLHMpe2NvbnN0IHI9WnQodCxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxzLCEwKTtscigoKT0+e1JuKHNbdF0scil9LG4pfWZ1bmN0aW9uIFp0KGUsdCxuPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZSxzPSExKXtpZihuKXtjb25zdCByPW5bZV18fChuW2VdPVtdKSxpPXQuX193ZWgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwodC5fX3dlaD0oLi4ubyk9PntqZSgpO2NvbnN0IGw9Q3QobiksYz1DZSh0LG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Usbyk7cmV0dXJuIGwoKSxMZSgpLGN9KTtyZXR1cm4gcz9yLnVuc2hpZnQoaSk6cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucHVzaChpKSxpfX1jb25zdCBQZT1lPT4odCxuPW5lKT0+eyghU3R8fGU9PT0ic3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIikmJlp0KGUsKC4uLnMpPT50KC4uLnMpLG4pfSxqaT1QZSgiYm0iKSxMaT1QZSgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20iKSwkaT1QZSgiYnUiKSxWaT1QZSgidSIpLFVpPVBlKCJidW0iKSxscj1QZSgidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtIiksS2k9UGUoInNwIiksQmk9UGUoInJ0ZyIpLFdpPVBlKCJydGMiKTtmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gcWkoZSx0PW5lKXtadCgiZWMiLGUsdCl9Y29uc3QgSmk9U3ltYm9sLmZvcigiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3YtbmRjIik7ZnVuY3Rpb24gR2koZSx0LG4scyl7bGV0IHI7Y29uc3QgaT1uLG89RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSk7aWYob3x8SihlKSl7Y29uc3QgbD1vJiZRZShlKTtsZXQgYz0hMTtsJiYoYz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIWFlKGUpLGU9enQoZSkpLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IobGV0IGg9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAsYT1lLmxlbmd0aDtoPGE7aCsrKXJbaF09dChjP1ooZVtoXSk6ZVtoXSxoLHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIDAsaSl9ZWxzZSBpZih0eXBlb2YgZT09Im51bWJlciIpe3I9bmV3IEFycmF5KGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtmb3IobGV0IGw9MDtsPGU7bCsrKXJbbF09dChsKzEsbCx2b2lkIDAsaSl9ZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaWYoSyhlKSlpZihlW1N5bWJvbC5pdGVyYXRvcl0pcj1BcnJheS5mcm9tKGUsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLGMpPT50KGwsYyx2b2lkIDAsaSkpO2Vsc2V7Y29uc3QgbD1PYmplY3Qua2V5cygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7cj1uZXcgQXJyYXkobC5sZW5ndGgpO2ZvcihsZXQgYz0wLGg9bC5sZW5ndGg7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2M8aDtjKyspe2NvbnN0IGE9bFtjXTtyW2NdPXQoZVthXSxhLGMsaSl9fWVsc2UgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9W107cmV0dXJuIHJ9Y29uc3Qgd249ZT0+ZT9ScihlKT9lbihlKTp3bihlLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQpOm51bGwscHQ9c2UoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDplPT5lLCRlbDplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0+ZS52bm9kZS5lbCwkZGF0YTplPT5lLmRhdGEsJHByb3BzOmU9PmUucHJvcHMsJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyczplPT5lLmF0dHJzLCRzbG90czplPT5lLnNsb3RzLCRyZWZzOmU9PmUucmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnMsJHBhcmVudDplPT53bihlLnBhcmVudCksJHJvb3Q6ZT0+d24oZS5yb290KSwkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hvc3Q6ZT0+ZS5jZSwkZW1pdDplPT5lLmVtaXQsJG9wdGlvbnM6ZT0+Y3IoZSksJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JjZVVwZGF0ZTplPT5lLmZ8fChlLmY9KCk9PntLbihlLnVwZGF0ZSl9KSwkbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHRUaWNrOmU9PmUubnx8KGUubj1FaS5iaW5kKGUucHJveHkpKSwkd2F0Y2g6ZT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19vLmJpbmQoZSl9KSxjbj0oZSx0KT0+ZSE9PUwmJiFlLl9faXNTY3JpcHRTZXR1cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJkgoZSx0KSxZaT17Z2V0KHtfOmV9LHQpe2lmKHQ9PT0iX192X3NraXAiKXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hMDtjb25zdHtjdHg6bixzZXR1cFN0YXRlOnMsZGF0YTpyLHByb3BzOmksYWNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzc0NhY2hlOm8sdHlwZTpsLGFwcENvbnRleHQ6Y309ZTtsZXQgaDtpZih0WzBdIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PSIkIil7Y29uc3QgQz1vW3RdO2lmKEMhPT12b2lkIDApc3dpdGNoKEMpe2Nhc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDE6cmV0dXJuIHNbdF07Y2FzZSAyOnJldHVybiByW3RdO2Nhc2UgNDpyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25bdF07Y2FzZSAzOnJldHVybiBpW3RdfWVsc2V7aWYoY24ocyx0KSlyZXR1cm4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbdF09MSxzW3RdO2lmKHIhPT1MJiZIKHIsdCkpcmV0dXJuIG9bdF09MixyW3RdO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZigoaD1lLnByb3BzT3B0aW9uc1swXSkmJkgoaCx0KSlyZXR1cm4gb1t0XT0zLGlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RdO2lmKG4hPT1MJiZIKG4sdCkpcmV0dXJuIG9bdF09NCxuW3RdO1RuJiYob1t0XScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9MCl9fWNvbnN0IGE9cHRbdF07bGV0IHAsVDtpZihhKXJldHVybiB0PT09IiRhdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnMiJiZYKGUuYXR0cnMsImdldCIsIiIpLGEoZSk7aWYoKHA9bC5fX2Nzc01vZHVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKSYmKHA9cFt0XSkpcmV0dXJuIHA7aWYobiE9PUwmJkgobix0KSlyZXR1cm4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbdF09NCxuW3RdO2lmKFQ9Yy5jb25maWcuZ2xvYmFsUHJvcGVydGllcyxIKFQsdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXJldHVybiBUW3RdfSxzZXQoe186ZX0sdCxuKXtjb25zdHtkYXRhOnMsc2V0dXBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGU6cixjdHg6aX09ZTtyZXR1cm4gY24ocix0KT8oclt0XT1uLCEwKTpzIT09TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJkgocyx0KT8oc1t0XT1uLCEwKTpIKGUucHJvcHMsdCl8fHRbMF09PT0iJCImJnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNsaWNlKDEpaW4gZT8hMTooaVt0XT1uLCEwKX0saGFzKHtfOntkYXRhOmUsc2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VwU3RhdGU6dCxhY2Nlc3NDYWNoZTpuLGN0eDpzLGFwcENvbnRleHQ6cixwcm9wcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25zOml9fSxvKXtsZXQgbDtyZXR1cm4hIW5bb118fGUhPT1MJiZIKGUsbyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHxjbih0LG8pfHwobD1pWzBdKSYmSChsLG8pfHxIKHMsbyl8fEgocHQsbyl8fEgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsbyl9LGRlZmluZVByb3BlcnR5KGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbil7cmV0dXJuIG4uZ2V0IT1udWxsP2UuXy5hY2Nlc3NDYWNoZVt0XT0wOkgobiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInZhbHVlIikmJnRoaXMuc2V0KGUsdCxuLnZhbHVlLG51bGwpLFJlZmxlY3QuZGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZVByb3BlcnR5KGUsdCxuKX19O2Z1bmN0aW9uIG5zKGUpe3JldHVybiBFKGUpPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLnJlZHVjZSgodCxuKT0+KHRbbl09bnVsbCx0KSx7fSk6ZX1sZXQgVG49ITA7ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHppKGUpe2NvbnN0IHQ9Y3IoZSksbj1lLnByb3h5LHM9ZS5jdHg7VG49JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyExLHQuYmVmb3JlQ3JlYXRlJiZzcyh0LmJlZm9yZUNyZWF0ZSxlLCJiYyIpO2NvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHtkYXRhOnIsY29tcHV0ZWQ6aSxtZXRob2RzOm8sd2F0Y2g6bCxwcm92aWRlOmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGluamVjdDpoLGNyZWF0ZWQ6YSxiZWZvcmVNb3VudDpwLG1vdW50ZWQ6VCxiZWZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlVXBkYXRlOkMsdXBkYXRlZDpGLGFjdGl2YXRlZDpJLGRlYWN0aXZhdGVkOnosYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZm9yZURlc3Ryb3k6aixiZWZvcmVVbm1vdW50OlcsZGVzdHJveWVkOnEsdW5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlZDpBLHJlbmRlcjpHLHJlbmRlclRyYWNrZWQ6UmUscmVuZGVyVHJpZ2dlcmVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpoZSxlcnJvckNhcHR1cmVkOk1lLHNlcnZlclByZWZldGNoOnZ0LGV4cG9zZTokZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaW5oZXJpdEF0dHJzOm50LGNvbXBvbmVudHM6T3QsZGlyZWN0aXZlczpFdCxmaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyczp0bn09dDtpZihoJiZYaShoLHMsbnVsbCksbylmb3IoY29uc3QgQiBpbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7Y29uc3QgJD1vW0JdO1IoJCkmJihzW0JdPSQuYmluZChuKSl9aWYocil7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IEI9ci5jYWxsKG4sbik7SyhCKSYmKGUuZGF0YT0kbihCKSl9aWYoVG49ITAsaSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKGNvbnN0IEIgaW4gaSl7Y29uc3QgJD1pW0JdLFZlPVIoJCk/JC5iaW5kKG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOlIoJC5nZXQpPyQuZ2V0LmJpbmQobixuKTp3ZSxBdD0hUigkKSYmUigkLnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpPyQuc2V0LmJpbmQobik6d2UsVWU9am8oe2dldDpWZSxzZXQ6QXR9KTtPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlZmluZVByb3BlcnR5KHMsQix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEwLGdldDooKT0+VWUudmFsdWUsc2V0OnBlPT5VZS52YWx1ZT1wZX0pfWlmKGwpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcihjb25zdCBCIGluIGwpZnIobFtCXSxzLG4sQik7aWYoYyl7Y29uc3QgQj1SKGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT9jLmNhbGwobik6YztSZWZsZWN0Lm93bktleXMoQikuZm9yRWFjaCgkPT57bm8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyQsQlskXSl9KX1hJiZzcyhhLGUsImMiKTtmdW5jdGlvbiBrKEIsJCl7RSgkKT8kLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKFZlPT5CKFZlLmJpbmQobikpKTokJiZCKCQuYmluZChuKSl9aWYoaygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamkscCksayhMaSxUKSxrKCRpLEMpLGsoVmksRiksayhEaSxJKSxrKEhpLHopLGsoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3FpLE1lKSxrKFdpLFJlKSxrKEJpLGhlKSxrKFVpLFcpLGsobHIsQSksayhLaSx2dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEUoJGUpKWlmKCRlLmxlbmd0aCl7Y29uc3QgQj1lLmV4cG9zZWR8fChlLmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VkPXt9KTskZS5mb3JFYWNoKCQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx7Z2V0OigpPT5uWyRdLHNldDpWZT0+blskXT1WZX0pfSl9ZWxzZSBlLmV4cG9zZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkfHwoZS5leHBvc2VkPXt9KTtHJiZlLnJlbmRlcj09PXdlJiYoZS5yZW5kZXI9RyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG50IT1udWxsJiYoZS5pbmhlcml0QXR0cnM9bnQpLE90JiYoZS5jb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1PdCksRXQmJihlLmRpcmVjdGl2ZXM9RXQpLHZ0JiZycihlKX1mdW5jdGlvbiBYaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSx0LG49d2Upe0UoZSkmJihlPUNuKGUpKTtmb3IoY29uc3QgcyBpbiBlKXtjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgcj1lW3NdO2xldCBpO0socik/ImRlZmF1bHQiaW4gcj9pPUR0KHIuZnJvbXx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Msci5kZWZhdWx0LCEwKTppPUR0KHIuZnJvbXx8cyk6aT1EdChyKSxRKGkpP09iaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuZGVmaW5lUHJvcGVydHkodCxzLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGU6ITAsZ2V0OigpPT5pLnZhbHVlLHNldDpvPT5pLnZhbHVlPW99KTp0W3NdPWl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiBzcyhlLHQsbil7Q2UoRShlKT9lLm1hcChzPT5zLmJpbmQodC5wcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveHkpKTplLmJpbmQodC5wcm94eSksdCxuKX1mdW5jdGlvbiBmcihlLHQsbixzKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IHI9cy5pbmNsdWRlcygiLiIpP1RyKG4scyk6KCk9Pm5bc107aWYoSihlKSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGk9dFtlXTtSKGkpJiZhbihyLGkpfWVsc2UgaWYoUihlKSlhbihyLGUuYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmQobikpO2Vsc2UgaWYoSyhlKSlpZihFKGUpKWUuZm9yRWFjaChpPT5mcihpLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scykpO2Vsc2V7Y29uc3QgaT1SKGUuaGFuZGxlcik/ZS5oYW5kbGVyLmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOnRbZS5oYW5kbGVyXTtSKGkpJiZhbihyLGksZSl9fWZ1bmN0aW9uIGNyKGUpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB0PWUudHlwZSx7bWl4aW5zOm4sZXh0ZW5kczpzfT10LHttaXhpbnM6ciwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uc0NhY2hlOmksY29uZmlnOntvcHRpb25NZXJnZVN0cmF0ZWdpZXM6b319JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1lLmFwcENvbnRleHQsbD1pLmdldCh0KTtsZXQgYztyZXR1cm4gbD9jPWw6IXIubCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmd0aCYmIW4mJiFzP2M9dDooYz17fSxyLmxlbmd0aCYmci5mb3JFYWNoKGg9PksnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChjLGgsbywhMCkpLEt0KGMsdCxvKSksSyh0KSYmaS5zZXQodCxjKSxjfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBLdChlLHQsbixzPSExKXtjb25zdHttaXhpbnM6cixleHRlbmRzOml9PXQ7aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJkt0KGUsaSxuLCEwKSxyJiZyLmZvckVhY2gobz0+S3QoZSxvLG4sITApKTtmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNvbnN0IG8gaW4gdClpZighKHMmJm89PT0iZXhwb3NlIikpe2NvbnN0IGw9WmlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29dfHxuJiZuW29dO2Vbb109bD9sKGVbb10sdFtvXSk6dFtvXX1yZXR1cm4gZX1jbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgWmk9e2RhdGE6cnMscHJvcHM6aXMsZW1pdHM6aXMsbWV0aG9kczpjdCxjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHV0ZWQ6Y3QsYmVmb3JlQ3JlYXRlOmVlLGNyZWF0ZWQ6ZWUsYmVmb3JlTW91bnQ6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlLG1vdW50ZWQ6ZWUsYmVmb3JlVXBkYXRlOmVlLHVwZGF0ZWQ6ZWUsYmVmb3JlRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3k6ZWUsYmVmb3JlVW5tb3VudDplZSxkZXN0cm95ZWQ6ZWUsdW5tb3VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDplZSxhY3RpdmF0ZWQ6ZWUsZGVhY3RpdmF0ZWQ6ZWUsZXJyb3JDYXB0dXJlZDplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Usc2VydmVyUHJlZmV0Y2g6ZWUsY29tcG9uZW50czpjdCxkaXJlY3RpdmVzOmN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3YXRjaDpraSxwcm92aWRlOnJzLGluamVjdDpRaX07ZnVuY3Rpb24gcnMoZSx0KXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHQ/ZT9mdW5jdGlvbigpe3JldHVybiBzZShSKGUpP2UuY2FsbCh0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0aGlzKTplLFIodCk/dC5jYWxsKHRoaXMsdGhpcyk6dCl9OnQ6ZX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUWkoZSx0KXtyZXR1cm4gY3QoQ24oZSksQ24odCkpfWZ1bmN0aW9uIENuKGUpe2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihFKGUpKXtjb25zdCB0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vbbl1dPWVbbl07cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gZWUoZSx0KXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGUsdCkpXTp0fWZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlLHQpe3JldHVybiBlP3NlKE9iamVjdC5jcmVhdGUobnVsbCksZSx0KTp0fWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBpcyhlLHQpe3JldHVybiBlP0UoZSkmJkUodCk/Wy4uLm5ldyBTZXQoWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi5lLC4uLnRdKV06c2UoT2JqZWN0LmNyZWF0ZShudWxsKSxucyhlKSxucyh0Pz8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne30pKTp0fWZ1bmN0aW9uIGtpKGUsdCl7aWYoIWUpcmV0dXJuIHQ7aWYoIXQpcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBlO2NvbnN0IG49c2UoT2JqZWN0LmNyZWF0ZShudWxsKSxlKTtmb3IoY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHMgaW4gdCluW3NdPWVlKGVbc10sdFtzXSk7cmV0dXJuIG59ZnVuY3Rpb24gdXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6anIscGVyZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Zlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXcgV2Vha01hcH19bGV0IGVvPTA7ZnVuY3Rpb24gdG8oZSx0KXtyZXR1cm4gZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKHMscj1udWxsKXtSKHMpfHwocz1zZSh7fSxzKSksciE9bnVsbCYmIUsocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpJiYocj1udWxsKTtjb25zdCBpPXVyKCksbz1uZXcgV2Vha1NldCxsPVtdO2xldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYz0hMTtjb25zdCBoPWkuYXBwPXtfdWlkOmVvKyssX2NvbXBvbmVudDpzLF9wcm9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6cixfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6aSxfaW5zdGFuY2U6bnVsbCx2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2lvbjpMbyxnZXQgY29uZmlnKCl7cmV0dXJuIGkuY29uZmlnfSxzZXQgY29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyhhKXt9LHVzZShhLC4uLnApe3JldHVybiBvLmhhcyhhKXx8KGEmJlIoYS5pbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbCk/KG8uYWRkKGEpLGEuaW5zdGFsbChoLC4uLnApKTpSKGEpJiYoby5hZGQoYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGEoaCwuLi5wKSkpLGh9LG1peGluKGEpe3JldHVybiBpLm1peGlucy5pbmNsdWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMoYSl8fGkubWl4aW5zLnB1c2goYSksaH0sY29tcG9uZW50KGEscCl7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwPyhpLmNvbXBvbmVudHNbYV09cCxoKTppLmNvbXBvbmVudHNbYV19LGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUoYSxwKXtyZXR1cm4gcD8oaS5kaXJlY3RpdmVzW2FdPXAsaCk6aS5kaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlc1thXX0sbW91bnQoYSxwLFQpe2lmKCFjKXtjb25zdCBDPWguX2NlVk5vZGV8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3xIZShzLHIpO3JldHVybiBDLmFwcENvbnRleHQ9aSxUPT09ITA/VD0ic3ZnIjpUPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PSExJiYoVD12b2lkIDApLGUoQyxhLFQpLGM9ITAsaC5fY29udGFpbmVyPWEsYS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX192dWVfYXBwX189aCxlbihDLmNvbXBvbmVudCl9fSxvblVubW91bnQoYSl7bC5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaChhKX0sdW5tb3VudCgpe2MmJihDZShsLGguX2luc3RhbmNlLDE2KSxlKG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLGguX2NvbnRhaW5lciksZGVsZXRlIGguX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxwcm92aWRlKGEscCl7cmV0dXJuIGkucHJvdmlkZXNbYV09cCxofSxydW5XaXRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRleHQoYSl7Y29uc3QgcD1ldDtldD1oO3RyeXtyZXR1cm4gYSgpfWZpbmFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5e2V0PXB9fX07cmV0dXJuIGh9fWxldCBldD1udWxsO2Z1bmN0aW9uIG5vKGUsdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKG5lKXtsZXQgbj1uZS5wcm92aWRlcztjb25zdCBzPW5lLnBhcmVudCYmbmUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmVudC5wcm92aWRlcztzPT09biYmKG49bmUucHJvdmlkZXM9T2JqZWN0LmNyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUocykpLG5bZV09dH19ZnVuY3Rpb24gRHQoZSx0LG49ITEpe2NvbnN0IHM9bmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHx1ZTtpZihzfHxldCl7Y29uc3Qgcj1ldD9ldC5fY29udGV4dC5wcm92aWRlczpzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9zLnBhcmVudD09bnVsbD9zLnZub2RlLmFwcENvbnRleHQmJnMudm5vZGUuYXBwQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRleHQucHJvdmlkZXM6cy5wYXJlbnQucHJvdmlkZXM6dm9pZCAwO2lmKHImJmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluIHIpcmV0dXJuIHJbZV07aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmUih0KT90LmNhbGwocyYmcy5wcm94eSk6dH19Y29uc3QgYXI9e30sZHI9KCk9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPYmplY3QuY3JlYXRlKGFyKSxocj1lPT5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT09YXI7ZnVuY3Rpb24gc28oZSx0LG4scz0hMSl7Y29uc3Qgcj17fSxpPWRyKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLHByKGUsdCxyLGkpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IoY29uc3QgbyBpbiBlLnByb3BzT3B0aW9uc1swXSlvIGluIHJ8fChyW29dPXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIDApO24/ZS5wcm9wcz1zP3I6X2kocik6ZS50eXBlLnByb3BzP2UucHJvcHM9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I6ZS5wcm9wcz1pLGUuYXR0cnM9aX1mdW5jdGlvbiBybyhlLHQsbixzKXtjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7cHJvcHM6cixhdHRyczppLHZub2RlOntwYXRjaEZsYWc6b319PWUsbD1EKHIpLFsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY109ZS5wcm9wc09wdGlvbnM7bGV0IGg9ITE7aWYoKHN8fG8+MCkmJiEobyYxNikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tpZihvJjgpe2NvbnN0IGE9ZS52bm9kZS5keW5hbWljUHJvcHM7Zm9yKGxldCBwPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwO3A8YS5sZW5ndGg7cCsrKXtsZXQgVD1hW3BdO2lmKFF0KGUuZW1pdHNPcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyxUKSljb250aW51ZTtjb25zdCBDPXRbVF07aWYoYylpZihIKGksVCkpQyE9PWlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RdJiYoaVtUXT1DLGg9ITApO2Vsc2V7Y29uc3QgRj1OZShUKTtyW0ZdPXZuKGMsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRixDLGUsITEpfWVsc2UgQyE9PWlbVF0mJihpW1RdPUMsaD0hMCl9fX1lbHNle3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncihlLHQscixpKSYmKGg9ITApO2xldCBhO2Zvcihjb25zdCBwIGluIGwpKCF0fHwhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0godCxwKSYmKChhPUdlKHApKT09PXB8fCFIKHQsYSkpKSYmKGM/biYmKG5bcF0hPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9dm9pZCAwfHxuW2FdIT09dm9pZCAwKSYmKHJbcF09dm4oYyxsLHAsdm9pZCAwLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCEwKSk6ZGVsZXRlIHJbcF0pO2lmKGkhPT1sKWZvcihjb25zdCBwIGluIGkpKCF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IUgodCxwKSkmJihkZWxldGUgaVtwXSxoPSEwKX1oJiZFZShlLmF0dHJzLCJzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiIil9ZnVuY3Rpb24gcHIoZSx0LG4scyl7Y29uc3RbcixpXT1lLnByb3BzT3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnM7bGV0IG89ITEsbDtpZih0KWZvcihsZXQgYyBpbiB0KXtpZih1dChjKSljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29udGludWU7Y29uc3QgaD10W2NdO2xldCBhO3ImJkgocixhPU5lKGMpKT8haXx8IScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpLmluY2x1ZGVzKGEpP25bYV09aDoobHx8KGw9e30pKVthXT1oOlF0KGUuZW1pdHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9ucyxjKXx8KCEoYyBpbiBzKXx8aCE9PXNbY10pJiYoc1tjXT1oLG89ITApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31pZihpKXtjb25zdCBjPUQobiksaD1sfHxMO2ZvcihsZXQgYT0wO2E8aS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoO2ErKyl7Y29uc3QgcD1pW2FdO25bcF09dm4ocixjLHAsaFtwXSxlLCFIKGgscCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX19cmV0dXJuIG99ZnVuY3Rpb24gdm4oZSx0LG4scyxyLGkpe2NvbnN0IG89ZVtuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ107aWYobyE9bnVsbCl7Y29uc3QgbD1IKG8sImRlZmF1bHQiKTtpZihsJiZzPT09dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQgMCl7Y29uc3QgYz1vLmRlZmF1bHQ7aWYoby50eXBlIT09RnVuY3Rpb24mJiEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby5za2lwRmFjdG9yeSYmUihjKSl7Y29uc3R7cHJvcHNEZWZhdWx0czpofT1yO2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuIGluIGgpcz1oW25dO2Vsc2V7Y29uc3QgYT1DdChyKTtzPWhbbl09Yy5jYWxsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLHQpLGEoKX19ZWxzZSBzPWM7ci5jZSYmci5jZS5fc2V0UHJvcChuLHMpfW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWzBdJiYoaSYmIWw/cz0hMTpvWzFdJiYocz09PSIifHxzPT09R2UobikpJiYocz0hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzApKX1yZXR1cm4gc31jb25zdCBpbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBncihlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LG49ITEpe2NvbnN0IHM9bj9pbzp0LnByb3BzQ2FjaGUscj1zLmdldChlKTtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncilyZXR1cm4gcjtjb25zdCBpPWUucHJvcHMsbz17fSxsPVtdO2xldCBjPSExO2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyghUihlKSl7Y29uc3QgYT1wPT57Yz0hMDtjb25zdFtULENdPWdyKHAsdCwhMCk7cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKG8sVCksQyYmbC5wdXNoKC4uLkMpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0Lm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXhpbnMuZm9yRWFjaChhKSxlLmV4dGVuZHMmJmEoZS5leHRlbmRzKSxlLm1peGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MmJmUubWl4aW5zLmZvckVhY2goYSl9aWYoIWkmJiFjKXJldHVybiBLKGUpJiZzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQoZSxYZSksWGU7aWYoRShpKSlmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IHA9TmUoaVthXSk7b3MocCkmJihvW3BdPUwpfWVsc2UgaWYoaSlmb3IoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGEgaW4gaSl7Y29uc3QgcD1OZShhKTtpZihvcyhwKSl7Y29uc3QgVD1pWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhXSxDPW9bcF09RShUKXx8UihUKT97dHlwZTpUfTpzZSh7fSxUKSxGPUMudHlwZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV0IEk9ITEsej0hMDtpZihFKEYpKWZvcihsZXQgaj0wO2o8Ri5sZW5ndGg7KytqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7Y29uc3QgVz1GW2pdLHE9UihXKSYmVy5uYW1lO2lmKHE9PT0iQm9vbGVhbiIpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJPSEwO2JyZWFrfWVsc2UgcT09PSJTdHJpbmciJiYoej0hMSl9ZWxzZSBJPVIoRiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiZGLm5hbWU9PT0iQm9vbGVhbiI7Q1swXT1JLENbMV09eiwoSXx8SChDLCJkZWZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdCIpKSYmbC5wdXNoKHApfX1jb25zdCBoPVtvLGxdO3JldHVybiBLKGUpJiZzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQoZSxoKSxofWZ1bmN0aW9uIG9zKGUpe3JldHVybiBlWzBdIT09IiQiJiYhdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpfWNvbnN0IF9yPWU9PmVbMF09PT0iXyJ8fGU9PT0iJHN0YWJsZSIsV249ZT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UoZSk/ZS5tYXAoU2UpOltTZShlKV0sb289KGUsdCxuKT0+e2lmKHQuX24pcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0O2NvbnN0IHM9UmkoKC4uLnIpPT5Xbih0KC4uLnIpKSxuKTtyZXR1cm4gcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX2M9ITEsc30sbXI9KGUsdCxuKT0+e2NvbnN0IHM9ZS5fY3R4O2Zvcihjb25zdCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiBlKXtpZihfcihyKSljb250aW51ZTtjb25zdCBpPWVbcl07aWYoUihpKSl0WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXT1vbyhyLGkscyk7ZWxzZSBpZihpIT1udWxsKXtjb25zdCBvPVduKGkpO3Rbcl0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSgpPT5vfX19LGJyPShlLHQpPT57Y29uc3Qgbj1Xbih0KTtlLnNsb3RzLmRlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x0PSgpPT5ufSx5cj0oZSx0LG4pPT57Zm9yKGNvbnN0IHMgaW4gdCkobnx8cyE9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciXyIpJiYoZVtzXT10W3NdKX0sbG89KGUsdCxuKT0+e2NvbnN0IHM9ZS5zbG90cz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHIoKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7Y29uc3Qgcj10Ll87cj8oeXIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsdCxuKSxuJiZNcyhzLCJfIixyLCEwKSk6bXIodCxzKX1lbHNlIHQmJmJyKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxmbz0oZSx0LG4pPT57Y29uc3R7dm5vZGU6cyxzbG90czpyfT1lO2xldCBpPSEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCxvPUw7aWYocy5zaGFwZUZsYWcmMzIpe2NvbnN0IGw9dC5fO2w/biYmbD09PTE/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9ITE6eXIocix0LG4pOihpPSF0LiRzdGFibGUsbXIodCxyKSksbz10fWVsc2UgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihicihlLHQpLG89e2RlZmF1bHQ6MX0pO2lmKGkpZm9yKGNvbnN0IGwgaW4gciknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIV9yKGwpJiZvW2xdPT1udWxsJiZkZWxldGUgcltsXX0sbGU9VG87ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvKGUpe3JldHVybiB1byhlKX1mdW5jdGlvbiB1byhlLHQpe2NvbnN0IG49R3QoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bi5fX1ZVRV9fPSEwO2NvbnN0e2luc2VydDpzLHJlbW92ZTpyLHBhdGNoUHJvcDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSxjcmVhdGVFbGVtZW50Om8sY3JlYXRlVGV4dDpsLGNyZWF0ZUNvbW1lbnQ6YyxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0VGV4dDpoLHNldEVsZW1lbnRUZXh0OmEscGFyZW50Tm9kZTpwLG5leHRTaWJsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZzpULHNldFNjb3BlSWQ6Qz13ZSxpbnNlcnRTdGF0aWNDb250ZW50OkZ9PWUsST0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGYsdSxkLG09bnVsbCxnPW51bGwsXz1udWxsLFM9dm9pZCAwLHg9bnVsbCx5PSEhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3UuZHluYW1pY0NoaWxkcmVuKT0+e2lmKGY9PT11KXJldHVybjtmJiYhbHQoZix1KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJihtPVB0KGYpLHBlKGYsZyxfLCEwKSxmPW51bGwpLHUucGF0Y2hGbGFnPT09LTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYoeT0hMSx1LmR5bmFtaWNDaGlsZHJlbj1udWxsKTtjb25zdHt0eXBlOmIscmVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpPLHNoYXBlRmxhZzp3fT11O3N3aXRjaChiKXtjYXNlIGt0OnooZix1LGQsbSk7YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFrO2Nhc2UgeXQ6aihmLHUsZCxtKTticmVhaztjYXNlIGRuOmY9PW51bGwmJlcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHUsZCxtLFMpO2JyZWFrO2Nhc2UgeGU6T3QoZix1LGQsbSxnLF8sUyx4LHkpO2JyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhaztkZWZhdWx0OncmMT9HKGYsdSxkLG0sZyxfLFMseCx5KTp3JjY/RXQoZix1LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLG0sZyxfLFMseCx5KToodyY2NHx8dyYxMjgpJiZiLnByb2Nlc3MoZix1LGQsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyxfLFMseCx5LHJ0KX1PIT1udWxsJiZnJiZVdChPLGYmJmYucmVmLF8sdXx8ZiwhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3UpfSx6PShmLHUsZCxtKT0+e2lmKGY9PW51bGwpcyh1LmVsPWwodS5jaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGQsbSk7ZWxzZXtjb25zdCBnPXUuZWw9Zi5lbDt1LmNoaWxkcmVuIT09Zi5jaGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGRyZW4mJmgoZyx1LmNoaWxkcmVuKX19LGo9KGYsdSxkLG0pPT57Zj09bnVsbD9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LmVsPWModS5jaGlsZHJlbnx8IiIpLGQsbSk6dS5lbD1mLmVsfSxXPShmLHUsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbSk9PntbZi5lbCxmLmFuY2hvcl09RihmLmNoaWxkcmVuLHUsZCxtLGYuZWwsZi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jaG9yKX0scT0oe2VsOmYsYW5jaG9yOnV9LGQsbSk9PntsZXQgZztmb3IoO2YmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZmIT09dTspZz1UKGYpLHMoZixkLG0pLGY9ZztzKHUsZCxtKX0sQT0oe2VsOmYsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY2hvcjp1fSk9PntsZXQgZDtmb3IoO2YmJmYhPT11OylkPVQoZikscihmKSxmPWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3IodSl9LEc9KGYsdSxkLG0sZyxfLFMseCx5KT0+e3UudHlwZT09PSJzdmciP1M9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzdmciOnUudHlwZT09PSJtYXRoIiYmKFM9Im1hdGhtbCIpLGY9PW51bGw/UmUodScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZCxtLGcsXyxTLHgseSk6dnQoZix1LGcsXyxTLHgseSl9LFJlPShmLHUsZCxtLGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLF8sUyx4KT0+e2xldCB5LGI7Y29uc3R7cHJvcHM6TyxzaGFwZUZsYWc6dyx0cmFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbjp2LGRpcnM6UH09ZjtpZih5PWYuZWw9byhmLnR5cGUsXyxPJiZPLmlzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPKSx3Jjg/YSh5LGYuY2hpbGRyZW4pOncmMTYmJk1lKGYuY2hpbGRyZW4seSxudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxtLGcsdW4oZixfKSxTLHgpLFAmJktlKGYsbnVsbCxtLCJjcmVhdGVkIiksaGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ksZixmLnNjb3BlSWQsUyxtKSxPKXtmb3IoY29uc3QgViBpbiBPKVYhPT0idmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIiYmIXV0KFYpJiZpKHksVixudWxsLE9bVl0sXyxtKTsidmFsdWUiaW4gTyYmaSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSwidmFsdWUiLG51bGwsTy52YWx1ZSxfKSwoYj1PLm9uVm5vZGVCZWZvcmVNb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpJiZiZShiLG0sZil9UCYmS2UoZixudWxsLG0sImJlZm9yZU1vdW50Iik7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IE09YW8oZyx2KTtNJiZ2LmJlZm9yZUVudGVyKHkpLHMoeSx1LGQpLCgoYj1PJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTy5vblZub2RlTW91bnRlZCl8fE18fFApJiZsZSgoKT0+e2ImJmJlKGIsbSxmKSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmdi5lbnRlcih5KSxQJiZLZShmLG51bGwsbSwibW91bnRlZCIpfSxnKX0saGU9KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmLHUsZCxtLGcpPT57aWYoZCYmQyhmLGQpLG0pZm9yKGxldCBfPTA7XzxtLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7XysrKUMoZixtW19dKTtpZihnKXtsZXQgXz1nLnN1YlRyZWU7aWYodT09PV98JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x2cihfLnR5cGUpJiYoXy5zc0NvbnRlbnQ9PT11fHxfLnNzRmFsbGJhY2s9PT11KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe2NvbnN0IFM9Zy52bm9kZTtoZShmLFMsUy5zY29wZUlkLFMuc2xvdFNjb3BlSWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyxnLnBhcmVudCl9fX0sTWU9KGYsdSxkLG0sZyxfLFMseCx5PTApPT57Zm9yKGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgYj15O2I8Zi5sZW5ndGg7YisrKXtjb25zdCBPPWZbYl09eD9GZShmW2JdKTpTZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZltiXSk7SShudWxsLE8sdSxkLG0sZyxfLFMseCl9fSx2dD0oZix1LGQsbSxnLF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFMpPT57Y29uc3QgeD11LmVsPWYuZWw7bGV0e3BhdGNoRmxhZzp5LGR5bmFtaWNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW46YixkaXJzOk99PXU7eXw9Zi5wYXRjaEZsYWcmMTY7Y29uc3Qgdz1mLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wc3x8TCx2PXUucHJvcHN8fEw7bGV0IFA7aWYoZCYmQmUoZCwhMSksKFA9di4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25Wbm9kZUJlZm9yZVVwZGF0ZSkmJmJlKFAsZCx1LGYpLE8mJktlKHUsZixkLCJiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vmb3JlVXBkYXRlIiksZCYmQmUoZCwhMCksKHcuaW5uZXJIVE1MJiZ2LmlubmVySCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTUw9PW51bGx8fHcudGV4dENvbnRlbnQmJnYudGV4dENvbnRlbnQ9PW51bGwpJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSh4LCIiKSxiPyRlKGYuZHluYW1pY0NoaWxkcmVuLGIseCxkLG0sdW4odSxnKSxfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6U3x8JChmLHUseCxudWxsLGQsbSx1bih1LGcpLF8sITEpLHk+MCl7aWYoeSYxNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpbnQoeCx3LHYsZCxnKTtlbHNlIGlmKHkmMiYmdy5jbGFzcyE9PXYuY2xhc3MmJmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHgsImNsYXNzIixudWxsLHYuY2xhc3MsZykseSY0JiZpKHgsInN0eWxlIix3LnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSx2LnN0eWxlLGcpLHkmOCl7Y29uc3QgTT11LmR5bmFtaWNQcm9wcztmb3IobCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldCBWPTA7VjxNLmxlbmd0aDtWKyspe2NvbnN0IE49TVtWXSxpZT13W05dLHJlPXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW05dOyhyZSE9PWllfHxOPT09InZhbHVlIikmJmkoeCxOLGllLHJlLGcsZCl9fXkmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzEmJmYuY2hpbGRyZW4hPT11LmNoaWxkcmVuJiZhKHgsdS5jaGlsZHJlbil9ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichUyYmYj09bnVsbCYmbnQoeCx3LHYsZCxnKTsoKFA9di5vblZub2RlVXBkYXRlZCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHxPKSYmbGUoKCk9PntQJiZiZShQLGQsdSxmKSxPJiZLZSh1LGYsZCwidXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QiKX0sbSl9LCRlPShmLHUsZCxtLGcsXyxTKT0+e2ZvcihsZXQgeD0wO3g8dS5sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ3RoO3grKyl7Y29uc3QgeT1mW3hdLGI9dVt4XSxPPXkuZWwmJih5LnR5cGU9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGV8fCFsdCh5LGIpfHx5LnNoYXBlRmxhZyY3MCk/cCh5LmVsKTpkO0koeSxiLE8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsbSxnLF8sUywhMCl9fSxudD0oZix1LGQsbSxnKT0+e2lmKHUhPT1kKXtpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodSE9PUwpZm9yKGNvbnN0IF8gaW4gdSkhdXQoXykmJiEoXyBpbiBkKSYmaShmLF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHVbX10sbnVsbCxnLG0pO2Zvcihjb25zdCBfIGluIGQpe2lmKHV0KF8pKWNvbnRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251ZTtjb25zdCBTPWRbX10seD11W19dO1MhPT14JiZfIT09InZhbHVlIiYmaShmLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfLHgsUyxnLG0pfSJ2YWx1ZSJpbiBkJiZpKGYsInZhbHVlIix1LnZhbHVlLGQudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlLGcpfX0sT3Q9KGYsdSxkLG0sZyxfLFMseCx5KT0+e2NvbnN0IGI9dS5lbD1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9mLmVsOmwoIiIpLE89dS5hbmNob3I9Zj9mLmFuY2hvcjpsKCIiKTtsZXR7cGF0YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoRmxhZzp3LGR5bmFtaWNDaGlsZHJlbjp2LHNsb3RTY29wZUlkczpQfT11O1AmJignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneD14P3guY29uY2F0KFApOlApLGY9PW51bGw/KHMoYixkLG0pLHMoTyxkLG0pLE1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LmNoaWxkcmVufHxbXSxkLE8sZyxfLFMseCx5KSk6dz4wJiZ3JjY0JiZ2JiZmLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkeW5hbWljQ2hpbGRyZW4/KCRlKGYuZHluYW1pY0NoaWxkcmVuLHYsZCxnLF8sUywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCksKHUua2V5IT1udWxsfHxnJiZ1PT09Zy5zdWJUcmVlKSYmeHIoZix1LCEwKSk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyQoZix1LGQsTyxnLF8sUyx4LHkpfSxFdD0oZix1LGQsbSxnLF8sUyx4LHkpPT57dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xvdFNjb3BlSWRzPXgsZj09bnVsbD91LnNoYXBlRmxhZyY1MTI/Zy5jdHguYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2YXRlKHUsZCxtLFMseSk6dG4odSxkLG0sZyxfLFMseSk6Sm4oZix1LHkpfSx0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249KGYsdSxkLG0sZyxfLFMpPT57Y29uc3QgeD1mLmNvbXBvbmVudD1NbyhmLG0sZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO2lmKGlyKGYpJiYoeC5jdHgucmVuZGVyZXI9cnQpLElvKHgsITEsUykseC5hc3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNEZXApe2lmKGcmJmcucmVnaXN0ZXJEZXAoeCxrLFMpLCFmLmVsKXtjb25zdCB5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz14LnN1YlRyZWU9SGUoeXQpO2oobnVsbCx5LHUsZCl9fWVsc2Ugayh4LGYsdSxkLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLF8sUyl9LEpuPShmLHUsZCk9Pntjb25zdCBtPXUuY29tcG9uZW50PWYuY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudDtpZihTbyhmLHUsZCkpaWYobS5hc3luY0RlcCYmIW0uYXN5bmNSZXNvbHZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qpe0IobSx1LGQpO3JldHVybn1lbHNlIG0ubmV4dD11LG0udXBkYXRlKCk7ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdS5lbD1mLmVsLG0udm5vZGU9dX0saz0oZix1LGQsbSxnLF8sUyk9Pntjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneD0oKT0+e2lmKGYuaXNNb3VudGVkKXtsZXR7bmV4dDp3LGJ1OnYsdTpQLHBhcmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6TSx2bm9kZTpWfT1mO3tjb25zdCBfZT1TcihmKTtpZihfZSl7dyYmKHcuZWw9VicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZWwsQihmLHcsUykpLF9lLmFzeW5jRGVwLnRoZW4oKCk9PntmLmlzVW5tb3VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHx8eCgpfSk7cmV0dXJufX1sZXQgTj13LGllO0JlKGYsITEpLHc/KHcuZWw9Vi5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsQihmLHcsUykpOnc9Vix2JiZGdCh2KSwoaWU9dy5wcm9wcyYmdy5wcm9wcy5vbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWbm9kZUJlZm9yZVVwZGF0ZSkmJmJlKGllLE0sdyxWKSxCZShmLCEwKTtjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmU9ZnMoZiksZ2U9Zi5zdWJUcmVlO2Yuc3ViVHJlZT1yZSxJKGdlLHJlLHAoZ2UuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKSxQdChnZSksZixnLF8pLHcuZWw9cmUuZWwsTj09PW51bGwmJndvKGYscmUuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxQJiZsZShQLGcpLChpZT13LnByb3BzJiZ3LnByb3BzLm9uVm5vZGVVcGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCkmJmxlKCgpPT5iZShpZSxNLHcsViksZyl9ZWxzZXtsZXQgdztjb25zdHtlbDp2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxwcm9wczpQfT11LHtibTpNLG06VixwYXJlbnQ6Tixyb290OmllLHR5cGU6cmV9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmLGdlPWh0KHUpO0JlKGYsITEpLE0mJkZ0KE0pLCFnZSYmKHc9UCYmUC5vblZub2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUJlZm9yZU1vdW50KSYmYmUodyxOLHUpLEJlKGYsITApO3tpZS5jZSYmaWUuY2UuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19pbmplY3RDaGlsZFN0eWxlKHJlKTtjb25zdCBfZT1mLnN1YlRyZWU9ZnMoZik7SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobnVsbCxfZSxkLG0sZixnLF8pLHUuZWw9X2UuZWx9aWYoViYmbGUoVixnKSwhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYodz1QJiZQLm9uVm5vZGVNb3VudGVkKSl7Y29uc3QgX2U9dTtsZSgoKT0+YmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3csTixfZSksZyl9KHUuc2hhcGVGbGFnJjI1Nnx8TiYmaHQoTi52bm9kZSkmJk4udicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub2RlLnNoYXBlRmxhZyYyNTYpJiZmLmEmJmxlKGYuYSxnKSxmLmlzTW91bnRlZD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInITAsdT1kPW09bnVsbH19O2Yuc2NvcGUub24oKTtjb25zdCB5PWYuZWZmZWN0PW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3cgTnMoeCk7Zi5zY29wZS5vZmYoKTtjb25zdCBiPWYudXBkYXRlPXkucnVuLmJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHkpLE89Zi5qb2I9eS5ydW5JZkRpcnR5LmJpbmQoeSk7Ty5pPWYsTy5pZD1mLnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQseS5zY2hlZHVsZXI9KCk9PktuKE8pLEJlKGYsITApLGIoKX0sQj0oZix1LGQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0+e3UuY29tcG9uZW50PWY7Y29uc3QgbT1mLnZub2RlLnByb3BzO2Yudm5vZGU9dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZi5uZXh0PW51bGwscm8oZix1LnByb3BzLG0sZCksZm8oZix1LmNoaWxkcmVuLGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxqZSgpLHRzKGYpLExlKCl9LCQ9KGYsdSxkLG0sZyxfLFMseCx5PSExKT0+e2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBiPWYmJmYuY2hpbGRyZW4sTz1mP2Yuc2hhcGVGbGFnOjAsdz11LmNoaWxkcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbix7cGF0Y2hGbGFnOnYsc2hhcGVGbGFnOlB9PXU7aWYodj4wKXtpZih2JjEyOCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne0F0KGIsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59ZWxzZSBpZih2JjI1Nil7VmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2IsdyxkLG0sZyxfLFMseCx5KTtyZXR1cm59fVAmOD8oTyYxNiYmc3QoYixnLF8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3IT09YiYmYShkLHcpKTpPJjE2P1AmMTY/QXQoYix3LGQsbSxnLF8sUyx4LHkpOnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChiLGcsXywhMCk6KE8mOCYmYShkLCIiKSxQJjE2JiZNZSh3LGQsbSxnLF8sUyx4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx5KSl9LFZlPShmLHUsZCxtLGcsXyxTLHgseSk9PntmPWZ8fFhlLHU9dXx8WGU7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGI9Zi5sZW5ndGgsTz11Lmxlbmd0aCx3PU1hdGgubWluKGIsTyk7bGV0IHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Zvcih2PTA7djx3O3YrKyl7Y29uc3QgUD11W3ZdPXk/RmUodVt2XSk6U2UodVt2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10pO0koZlt2XSxQLGQsbnVsbCxnLF8sUyx4LHkpfWI+Tz9zdChmLGcsXywhMCwhMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdyk6TWUodSxkLG0sZyxfLFMseCx5LHcpfSxBdD0oZix1LGQsbSxnLF8sUyx4LHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT0+e2xldCBiPTA7Y29uc3QgTz11Lmxlbmd0aDtsZXQgdz1mLmxlbmd0aC0xLHY9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08tMTtmb3IoO2I8PXcmJmI8PXY7KXtjb25zdCBQPWZbYl0sTT11W2JdPXk/RmUodScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbYl0pOlNlKHVbYl0pO2lmKGx0KFAsTSkpSShQLE0sZCxudWxsLGcsXyxTLHgseSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Vsc2UgYnJlYWs7YisrfWZvcig7Yjw9dyYmYjw9djspe2NvbnN0IFA9Zlt3XSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz11W3ZdPXk/RmUodVt2XSk6U2UodVt2XSk7aWYobHQoUCxNKSlJKFAsTSxkLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLGcsXyxTLHgseSk7ZWxzZSBicmVhazt3LS0sdi0tfWlmKGI+dyl7aWYoYjw9diknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2NvbnN0IFA9disxLE09UDxPP3VbUF0uZWw6bTtmb3IoO2I8PXY7KUkobnVsbCx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tiXT15P0ZlKHVbYl0pOlNlKHVbYl0pLGQsTSxnLF8sUyx4LHkpLGIrK319ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYoYj52KWZvcig7Yjw9dzspcGUoZltiXSxnLF8sITApLGIrKztlbHNle2NvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBQPWIsTT1iLFY9bmV3IE1hcDtmb3IoYj1NO2I8PXY7YisrKXtjb25zdCBvZT11JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tiXT15P0ZlKHVbYl0pOlNlKHVbYl0pO29lLmtleSE9bnVsbCYmVi5zZXQob2UuaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleSxiKX1sZXQgTixpZT0wO2NvbnN0IHJlPXYtTSsxO2xldCBnZT0hMSxfZT0wO2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBpdD1uZXcgQXJyYXkocmUpO2ZvcihiPTA7YjxyZTtiKyspaXRbYl09MDtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yKGI9UDtiPD13O2IrKyl7Y29uc3Qgb2U9ZltiXTtpZihpZT49cmUpe3BlKG9lLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLF8sITApO2NvbnRpbnVlfWxldCBtZTtpZihvZS5rZXkhPW51bGwpbWU9Vi5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG9lLmtleSk7ZWxzZSBmb3IoTj1NO048PXY7TisrKWlmKGl0W04tTV09PT0wJiZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qob2UsdVtOXSkpe21lPU47YnJlYWt9bWU9PT12b2lkIDA/cGUob2UsZyxfLCEwKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6KGl0W21lLU1dPWIrMSxtZT49X2U/X2U9bWU6Z2U9ITAsSShvZSx1W21lXSxkLG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWxsLGcsXyxTLHgseSksaWUrKyl9Y29uc3Qgem49Z2U/aG8oaXQpOlhlO2ZvcihOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz16bi5sZW5ndGgtMSxiPXJlLTE7Yj49MDtiLS0pe2NvbnN0IG9lPU0rYixtZT11WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZV0sWG49b2UrMTxPP3Vbb2UrMV0uZWw6bTtpdFtiXT09PTA/SShudWxsLG1lLGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFhuLGcsXyxTLHgseSk6Z2UmJihOPDB8fGIhPT16bltOXT9VZShtZSxkLFhuLDIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpOLS0pfX19LFVlPShmLHUsZCxtLGc9bnVsbCk9Pntjb25zdHtlbDpfLHR5cGU6UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdHJhbnNpdGlvbjp4LGNoaWxkcmVuOnksc2hhcGVGbGFnOmJ9PWY7aWYoYiY2KXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVWUoZi5jb21wb25lbnQuc3ViVHJlZSx1LGQsbSk7cmV0dXJufWlmKGImMTI4KXtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zdXNwZW5zZS5tb3ZlKHUsZCxtKTtyZXR1cm59aWYoYiY2NCl7Uy5tb3ZlKGYsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZCxydCk7cmV0dXJufWlmKFM9PT14ZSl7cyhfLHUsZCk7Zm9yKGxldCB3PTA7dzwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneS5sZW5ndGg7dysrKVVlKHlbd10sdSxkLG0pO3MoZi5hbmNob3IsdSxkKTtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JufWlmKFM9PT1kbil7cShmLHUsZCk7cmV0dXJufWlmKG0hPT0yJiZiJjEmJngpaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKG09PT0wKXguYmVmb3JlRW50ZXIoXykscyhfLHUsZCksbGUoKCk9PnguZW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKF8pLGcpO2Vsc2V7Y29uc3R7bGVhdmU6dyxkZWxheUxlYXZlOnYsYWZ0ZXJMZWF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6UH09eCxNPSgpPT5zKF8sdSxkKSxWPSgpPT57dyhfLCgpPT57TSgpLFAmJlAoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KX07dj92KF8sTSxWKTpWKCl9ZWxzZSBzKF8sdSxkKX0scGU9KGYsdSxkLG09ITEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGc9ITEpPT57Y29uc3R7dHlwZTpfLHByb3BzOlMscmVmOngsY2hpbGRyZW46eSxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3luYW1pY0NoaWxkcmVuOmIsc2hhcGVGbGFnOk8scGF0Y2hGbGFnOncsZGlyczp2LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWNoZUluZGV4OlB9PWY7aWYodz09PS0yJiYoZz0hMSkseCE9bnVsbCYmVXQoeCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCxkLGYsITApLFAhPW51bGwmJih1LnJlbmRlckNhY2hlW1BdPXZvaWQgMCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08mMjU2KXt1LmN0eC5kZWFjdGl2YXRlKGYpO3JldHVybn1jb25zdCBNPU8mMSYmdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVj0haHQoZik7bGV0IE47aWYoViYmKE49UyYmUy5vblZub2RlQmVmb3JlVW5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQpJiZiZShOLHUsZiksTyY2KU5yKGYuY29tcG9uZW50LGQsbSk7ZWxzZXtpZihPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYxMjgpe2Yuc3VzcGVuc2UudW5tb3VudChkLG0pO3JldHVybn1NJiZLZShmLG51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLHUsImJlZm9yZVVubW91bnQiKSxPJjY0P2YudHlwZS5yZW1vdmUoZix1LGQscnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG0pOmImJiFiLmhhc09uY2UmJihfIT09eGV8fHc+MCYmdyY2NCk/c3QoYix1LGQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyExLCEwKTooXz09PXhlJiZ3JjM4NHx8IWcmJk8mMTYpJiZzdCh5LHUsZCksbSYmRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGYpfShWJiYoTj1TJiZTLm9uVm5vZGVVbm1vdW50ZWQpfHxNKSYmbGUoKCk9PnsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTiYmYmUoTix1LGYpLE0mJktlKGYsbnVsbCx1LCJ1bm1vdW50ZWQiKX0sZCl9LEduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1mPT57Y29uc3R7dHlwZTp1LGVsOmQsYW5jaG9yOm0sdHJhbnNpdGlvbjpnfT1mOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZih1PT09eGUpe0hyKGQsbSk7cmV0dXJufWlmKHU9PT1kbil7QShmKTtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWNvbnN0IF89KCk9PntyKGQpLGcmJiFnLnBlcnNpc3RlZCYmZy5hZnRlckxlYXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmZy5hZnRlckxlYXZlKCl9O2lmKGYuc2hhcGVGbGFnJjEmJmcmJiFnLnBlcnNpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQpe2NvbnN0e2xlYXZlOlMsZGVsYXlMZWF2ZTp4fT1nLHk9KCk9PlMoZCxfKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneD94KGYuZWwsXyx5KTp5KCl9ZWxzZSBfKCl9LEhyPShmLHUpPT57bGV0IGQ7Zm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyg7ZiE9PXU7KWQ9VChmKSxyKGYpLGY9ZDtyKHUpfSxOcj0oZix1LGQpPT57Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0e2J1bTptLHNjb3BlOmcsam9iOl8sc3ViVHJlZTpTLHVtOngsbTp5LGE6Yn09ZjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHMoeSksbHMoYiksbSYmRnQobSksZy5zdG9wKCksXyYmKF8uZmxhZ3N8PTgscGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MsZix1LGQpKSx4JiZsZSh4LHUpLGxlKCgpPT57Zi5pc1VubW91bnRlZD0hMH0sdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLHUmJnUucGVuZGluZ0JyYW5jaCYmIXUuaXNVbm1vdW50ZWQmJmYuYXN5bmNEZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYhZi5hc3luY1Jlc29sdmVkJiZmLnN1c3BlbnNlSWQ9PT11LnBlbmRpbmdJZCYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LmRlcHMtLSx1LmRlcHM9PT0wJiZ1LnJlc29sdmUoKSl9LHN0PShmLHUsZCxtPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichMSxnPSExLF89MCk9Pntmb3IobGV0IFM9XztTPGYubGVuZ3RoO1MrKylwZShmW1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSx1LGQsbSxnKX0sUHQ9Zj0+e2lmKGYuc2hhcGVGbGFnJjYpcmV0dXJuIFB0KGYuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5zdWJUcmVlKTtpZihmLnNoYXBlRmxhZyYxMjgpcmV0dXJuIGYucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c3BlbnNlLm5leHQoKTtjb25zdCB1PVQoZi5hbmNob3J8fGYuZWwpLGQ9dSYmdVsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSWldO3JldHVybiBkP1QoZCk6dX07bGV0IG5uPSExO2NvbnN0IFluPShmLHUsZCk9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz57Zj09bnVsbD91Ll92bm9kZSYmcGUodS5fdm5vZGUsbnVsbCxudWxsLCEwKTpJKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1Ll92bm9kZXx8bnVsbCxmLHUsbnVsbCxudWxsLG51bGwsZCksdS5fdm5vZGU9ZiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm58fChubj0hMCx0cygpLHRyKCksbm49ITEpfSxydD17cDpJLHVtOnBlLG06VWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I6R24sbXQ6dG4sbWM6TWUscGM6JCxwYmM6JGUsbjpQdCxvOmV9O3JldHVybntyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyOlluLGh5ZHJhdGU6dm9pZCAwLGNyZWF0ZUFwcDp0byhZbil9fWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB1bih7dHlwZTplLHByb3BzOnR9LG4pe3JldHVybiBuPT09InN2ZyImJmU9PT0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvcmVpZ25PYmplY3QifHxuPT09Im1hdGhtbCImJmU9PT0iYW5ub3RhdGlvbi14bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsIiYmdCYmdC5lbmNvZGluZyYmdC5lbmNvZGluZy5pbmNsdWRlcygiaHRtbCIpP3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIDA6bn1mdW5jdGlvbiBCZSh7ZWZmZWN0OmUsam9iOnR9LG4pe24/KGUuZmxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dzfD0zMix0LmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYW8oZSx0KXtyZXR1cm4oIWV8fGUmJiFlLnBlbmRpbmdCcmFuY2gpJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCYmIXQucGVyc2lzdGVkfWZ1bmN0aW9uIHhyKGUsdCxuPSExKXtjb25zdCBzPWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkcmVuLHI9dC5jaGlsZHJlbjtpZihFKHMpJiZFKHIpKWZvcihsZXQgaT0wOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpPHMubGVuZ3RoO2krKyl7Y29uc3Qgbz1zW2ldO2xldCBsPXJbaV07bC5zaGFwZUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFnJjEmJiFsLmR5bmFtaWNDaGlsZHJlbiYmKChsLnBhdGNoRmxhZzw9MHx8bC5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hGbGFnPT09MzIpJiYobD1yW2ldPUZlKHJbaV0pLGwuZWw9by5lbCksIW4mJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLnBhdGNoRmxhZyE9PS0yJiZ4cihvLGwpKSxsLnR5cGU9PT1rdCYmKGwuZWw9by4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWwpfX1mdW5jdGlvbiBobyhlKXtjb25zdCB0PWUuc2xpY2UoKSxuPVswXTtsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MscixpLG8sbDtjb25zdCBjPWUubGVuZ3RoO2ZvcihzPTA7czxjO3MrKyl7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGg9ZVtzXTtpZihoIT09MCl7aWYocj1uW24ubGVuZ3RoLTFdLGVbcl08aCl7dFsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc109cixuLnB1c2gocyk7Y29udGludWV9Zm9yKGk9MCxvPW4ubGVuZ3RoLTE7aTxvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzspbD1pK28+PjEsZVtuW2xdXTxoP2k9bCsxOm89bDtoPGVbbltpXV0mJihpPjAmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodFtzXT1uW2ktMV0pLG5baV09cyl9fWZvcihpPW4ubGVuZ3RoLG89bltpLTFdO2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLS0gPjA7KW5baV09byxvPXRbb107cmV0dXJuIG59ZnVuY3Rpb24gU3IoZSl7Y29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHQ9ZS5zdWJUcmVlLmNvbXBvbmVudDtpZih0KXJldHVybiB0LmFzeW5jRGVwJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmIXQuYXN5bmNSZXNvbHZlZD90OlNyKHQpfWZ1bmN0aW9uIGxzKGUpe2lmKGUpZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uZmxhZ3N8PTh9Y29uc3QgcG89JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N5bWJvbC5mb3IoInYtc2N4IiksZ289KCk9PkR0KHBvKTtmdW5jdGlvbiBhbihlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LG4pe3JldHVybiB3cihlLHQsbil9ZnVuY3Rpb24gd3IoZSx0LG49TCl7Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2ltbWVkaWF0ZTpzLGRlZXA6cixmbHVzaDppLG9uY2U6b309bixsPXNlKHt9LG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxjPXQmJnN8fCF0JiZpIT09InBvc3QiO2xldCBoO2lmKFN0KXtpZihpPT09InN5bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjIil7Y29uc3QgQz1nbygpO2g9Qy5fX3dhdGNoZXJIYW5kbGVzfHwoQy5fX3dhdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVySGFuZGxlcz1bXSl9ZWxzZSBpZighYyl7Y29uc3QgQz0oKT0+e307cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDLnN0b3A9d2UsQy5yZXN1bWU9d2UsQy5wYXVzZT13ZSxDfX1jb25zdCBhPW5lOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLmNhbGw9KEMsRixJKT0+Q2UoQyxhLEYsSSk7bGV0IHA9ITE7aT09PSJwb3N0Ij8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbC5zY2hlZHVsZXI9Qz0+e2xlKEMsYSYmYS5zdXNwZW5zZSl9OmkhPT0ic3luYyImJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYocD0hMCxsLnNjaGVkdWxlcj0oQyxGKT0+e0Y/QygpOktuKEMpfSksbC5hdWdtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEpvYj1DPT57dCYmKEMuZmxhZ3N8PTQpLHAmJihDLmZsYWdzfD0yLGEmJihDLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZD1hLnVpZCxDLmk9YSkpfTtjb25zdCBUPXZpKGUsdCxsKTtyZXR1cm4gU3QmJihoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9oLnB1c2goVCk6YyYmVCgpKSxUfWZ1bmN0aW9uIF9vKGUsdCxuKXtjb25zdCBzPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLnByb3h5LHI9SihlKT9lLmluY2x1ZGVzKCIuIik/VHIocyxlKTooKT0+c1snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV06ZS5iaW5kKHMscyk7bGV0IGk7Uih0KT9pPXQ6KGk9dC5oYW5kbGVyLG49dCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IG89Q3QodGhpcyksbD13cihyLGkuYmluZChzKSxuKTtyZXR1cm4gbygpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsfWZ1bmN0aW9uIFRyKGUsdCl7Y29uc3Qgbj10LnNwbGl0KCIuIik7cmV0dXJuKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT57bGV0IHM9ZTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoJiZzO3IrKylzPXNbbltyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ11dO3JldHVybiBzfX1jb25zdCBtbz0oZSx0KT0+dD09PSJtb2RlbFZhbHVlInx8dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0ibW9kZWwtdmFsdWUiP2UubW9kZWxNb2RpZmllcnM6ZVtgJHt0fU1vZGlmaWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnNgXXx8ZVtgJHtOZSh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtHZSh0KX1Nb2RpZmllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzYF07ZnVuY3Rpb24gYm8oZSx0LC4uLm4pe2lmKGUuaXNVbm1vdW50ZWQpcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybjtjb25zdCBzPWUudm5vZGUucHJvcHN8fEw7bGV0IHI9bjtjb25zdCBpPXQuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0c1dpdGgoInVwZGF0ZToiKSxvPWkmJm1vKHMsdC5zbGljZSg3KSk7byYmKG8uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaW0mJihyPW4ubWFwKGE9PkooYSk/YS50cmltKCk6YSkpLG8ubnVtYmVyJiYocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9bi5tYXAoS3IpKSk7bGV0IGwsYz1zW2w9c24odCldfHxzW2w9c24oTmUodCkpXTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIWMmJmkmJihjPXNbbD1zbihHZSh0KSldKSxjJiZDZShjLGUsNixyKTtjb25zdCBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1zW2wrIk9uY2UiXTtpZihoKXtpZighZS5lbWl0dGVkKWUuZW1pdHRlZD17fTtlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSBpZihlLmVtaXR0ZWRbbF0pcmV0dXJuO2UuZW1pdHRlZFtsXT0hMCxDZShoLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDYscil9fWZ1bmN0aW9uIENyKGUsdCxuPSExKXtjb25zdCBzPXQuZW1pdHNDYWNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uscj1zLmdldChlKTtpZihyIT09dm9pZCAwKXJldHVybiByO2NvbnN0IGk9ZS5lbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdHM7bGV0IG89e30sbD0hMTtpZighUihlKSl7Y29uc3QgYz1oPT57Y29uc3QgYT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ3IoaCx0LCEwKTthJiYobD0hMCxzZShvLGEpKX07IW4mJnQubWl4aW5zLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2gmJnQubWl4aW5zLmZvckVhY2goYyksZS5leHRlbmRzJiZjKGUuZXh0ZW5kcyksZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKGMpfXJldHVybiFpJiYhbD8oSyhlKSYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJnMuc2V0KGUsbnVsbCksbnVsbCk6KEUoaSk/aS5mb3JFYWNoKGM9Pm9bY109bnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wpOnNlKG8saSksSyhlKSYmcy5zZXQoZSxvKSxvKX1mdW5jdGlvbiBRdChlLHQpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4hZXx8IVd0KHQpPyExOih0PXQuc2xpY2UoMikucmVwbGFjZSgvT25jZSQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLywiIiksSChlLHRbMF0udG9Mb3dlckNhc2UoKSt0LnNsaWNlKDEpKXx8SChlLEdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0KSl8fEgoZSx0KSl9ZnVuY3Rpb24gZnMoZSl7Y29uc3R7dHlwZTp0LHZub2RlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHByb3h5OnMsd2l0aFByb3h5OnIscHJvcHNPcHRpb25zOltpXSxzbG90czpvLGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRyczpsLGVtaXQ6YyxyZW5kZXI6aCxyZW5kZXJDYWNoZTphLHByb3BzOnAsZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2E6VCxzZXR1cFN0YXRlOkMsY3R4OkYsaW5oZXJpdEF0dHJzOkl9PWUsej1WdChlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bGV0IGosVzt0cnl7aWYobi5zaGFwZUZsYWcmNCl7Y29uc3QgQT1yfHxzLEc9QTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaj1TZShoLmNhbGwoRyxBLGEscCxDLFQsRikpLFc9bH1lbHNle2NvbnN0IEE9dDtqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1TZShBLmxlbmd0aD4xP0EocCx7YXR0cnM6bCxzbG90czpvLGVtaXQ6Y30pOkEocCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbnVsbCkpLFc9dC5wcm9wcz9sOnlvKGwpfX1jYXRjaChBKXtndC5sZW5ndGg9MCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWHQoQSxlLDEpLGo9SGUoeXQpfWxldCBxPWo7aWYoVyYmSSE9PSExKXtjb25zdCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1PYmplY3Qua2V5cyhXKSx7c2hhcGVGbGFnOkd9PXE7QS5sZW5ndGgmJkcmNyYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpJiZBLnNvbWUoUG4pJiYoVz14byhXLGkpKSxxPXR0KHEsVywhMSwhMCkpfXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gbi5kaXJzJiYocT10dChxLG51bGwsITEsITApLHEuZGlycz1xLmRpcnM/cS5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lycy5jb25jYXQobi5kaXJzKTpuLmRpcnMpLG4udHJhbnNpdGlvbiYmQm4ocSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFuc2l0aW9uKSxqPXEsVnQoeiksan1jb25zdCB5bz1lPT57bGV0IHQ7Zm9yKGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBuIGluIGUpKG49PT0iY2xhc3MifHxuPT09InN0eWxlInx8V3QobikpJiYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0fHwodD17fSkpW25dPWVbbl0pO3JldHVybiB0fSx4bz0oZSx0KT0+e2NvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduPXt9O2Zvcihjb25zdCBzIGluIGUpKCFQbihzKXx8IShzLnNsaWNlKDkpaW4gdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSYmKG5bc109ZVtzXSk7cmV0dXJuIG59O2Z1bmN0aW9uIFNvKGUsdCxuKXtjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R7cHJvcHM6cyxjaGlsZHJlbjpyLGNvbXBvbmVudDppfT1lLHtwcm9wczpvLGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZHJlbjpsLHBhdGNoRmxhZzpjfT10LGg9aS5lbWl0c09wdGlvbnM7aWYodC5kaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3x8dC50cmFuc2l0aW9uKXJldHVybiEwO2lmKG4mJmM+PTApe2lmKGMmMTAyNClyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuITA7aWYoYyYxNilyZXR1cm4gcz9jcyhzLG8saCk6ISFvO2lmKGMmOCl7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGE9dC5keW5hbWljUHJvcHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtjb25zdCBUPWFbcF07aWYob1tUXSE9PXNbVF0mJiFRdChoLFQpKXJldHVybiEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ319fWVsc2UgcmV0dXJuKHJ8fGwpJiYoIWx8fCFsLiRzdGFibGUpPyEwOnM9PT1vPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichMTpzP28/Y3MocyxvLGgpOiEwOiEhbztyZXR1cm4hMX1mdW5jdGlvbiBjcyhlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4pe2NvbnN0IHM9T2JqZWN0LmtleXModCk7aWYocy5sZW5ndGghPT1PYmplY3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleXMoZSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXQgcj0wO3I8cy5sZW5ndGg7cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrKyl7Y29uc3QgaT1zW3JdO2lmKHRbaV0hPT1lW2ldJiYhUXQobixpKSlyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInITB9cmV0dXJuITF9ZnVuY3Rpb24gd28oe3Zub2RlOmUscGFyZW50OnR9LG4pe2ZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoO3Q7KXtjb25zdCBzPXQuc3ViVHJlZTtpZihzLnN1c3BlbnNlJiZzLnN1c3BlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZS5hY3RpdmVCcmFuY2g9PT1lJiYocy5lbD1lLmVsKSxzPT09ZSkoZT10LnZub2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkuZWw9bix0PXQucGFyZW50O2Vsc2UgYnJlYWt9fWNvbnN0IHZyPWU9PmUuX19pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdXNwZW5zZTtmdW5jdGlvbiBUbyhlLHQpe3QmJnQucGVuZGluZ0JyYW5jaD9FKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKT90LmVmZmVjdHMucHVzaCguLi5lKTp0LmVmZmVjdHMucHVzaChlKTpQaShlKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgeGU9U3ltYm9sLmZvcigidi1mZ3QiKSxrdD1TeW1ib2wuZm9yKCJ2LXR4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QiKSx5dD1TeW1ib2wuZm9yKCJ2LWNtdCIpLGRuPVN5bWJvbC5mb3IoInYtc3RjIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGd0PVtdO2xldCBjZT1udWxsO2Z1bmN0aW9uIEh0KGU9ITEpe2d0LnB1c2goY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWU/bnVsbDpbXSl9ZnVuY3Rpb24gQ28oKXtndC5wb3AoKSxjZT1ndFtndC5sZW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoLTFdfHxudWxsfWxldCB4dD0xO2Z1bmN0aW9uIHVzKGUsdD0hMSl7eHQrPWUsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8MCYmY2UmJnQmJihjZS5oYXNPbmNlPSEwKX1mdW5jdGlvbiBPcihlKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGUuZHluYW1pY0NoaWxkcmVuPXh0PjA/Y2V8fFhlOm51bGwsQ28oKSx4dD4wJiZjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UmJmNlLnB1c2goZSksZX1mdW5jdGlvbiBobihlLHQsbixzLHIsaSl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcihZKGUsdCxuLHMscixpLCEwKSl9ZnVuY3Rpb24gdm8oZSx0LG4scyxyKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIE9yKEhlKGUsdCxuLHMsciwhMCkpfWZ1bmN0aW9uIEVyKGUpe3JldHVybiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gbHQoZSx0KXtyZXR1cm4gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicudHlwZT09PXQudHlwZSYmZS5rZXk9PT10LmtleX1jb25zdCBBcj0oe2tleTplfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT5lPz9udWxsLE50PSh7cmVmOmUscmVmX2tleTp0LHJlZl9mb3I6bn0pPT4odHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VvZiBlPT0ibnVtYmVyIiYmKGU9IiIrZSksZSE9bnVsbD9KKGUpfHxRKGUpfHxSKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKT97aTp1ZSxyOmUsazp0LGY6ISFufTplOm51bGwpO2Z1bmN0aW9uIFkoZSx0PW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWxsLG49bnVsbCxzPTAscj1udWxsLGk9ZT09PXhlPzA6MSxvPSExLGw9ITEpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBjPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmUscHJvcHM6dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsa2V5OnQmJkFyKHQpLHJlZjp0JiZOdCh0KSxzY29wZUlkOnNyLHNsb3RTY29wZUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOm51bGwsdHJhbnNpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsLHRhcmdldFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhZzppLHBhdGNoRmxhZzpzLGR5bmFtaWNQcm9wczpyLGR5bmFtaWNDaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6bnVsbCxhcHBDb250ZXh0Om51bGwsY3R4OnVlfTtyZXR1cm4gbD8ocW4oYyxuKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSYxMjgmJmUubm9ybWFsaXplKGMpKTpuJiYoYy5zaGFwZUZsYWd8PUoobik/ODoxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzYpLHh0PjAmJiFvJiZjZSYmKGMucGF0Y2hGbGFnPjB8fGkmNikmJmMucGF0Y2hGbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZyE9PTMyJiZjZS5wdXNoKGMpLGN9Y29uc3QgSGU9T287ZnVuY3Rpb24gT28oZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD1udWxsLG49bnVsbCxzPTAscj1udWxsLGk9ITEpe2lmKCghZXx8ZT09PUppKSYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlPXl0KSxFcihlKSl7Y29uc3QgbD10dChlLHQsITApO3JldHVybiBuJiZxbihsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSx4dD4wJiYhaSYmY2UmJihsLnNoYXBlRmxhZyY2P2NlW2NlLmluZGV4T2YoZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXT1sOmNlLnB1c2gobCkpLGwucGF0Y2hGbGFnPS0yLGx9aWYoTm8oZSkmJihlPWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fdmNjT3B0cyksdCl7dD1Fbyh0KTtsZXR7Y2xhc3M6bCxzdHlsZTpjfT10O2wmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichSihsKSYmKHQuY2xhc3M9Rm4obCkpLEsoYykmJihVbihjKSYmIUUoYykmJihjPXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSh7fSxjKSksdC5zdHlsZT1JbihjKSl9Y29uc3Qgbz1KKGUpPzE6dnIoZSk/MTI4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpGaShlKT82NDpLKGUpPzQ6UihlKT8yOjA7cmV0dXJuIFkoZSx0LG4scyxyLG8saScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsITApfWZ1bmN0aW9uIEVvKGUpe3JldHVybiBlP1VuKGUpfHxocihlKT9zZSh7fSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk6ZTpudWxsfWZ1bmN0aW9uIHR0KGUsdCxuPSExLHM9ITEpe2NvbnN0e3Byb3BzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpyLHJlZjppLHBhdGNoRmxhZzpvLGNoaWxkcmVuOmwsdHJhbnNpdGlvbjpjfT1lLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoPXQ/QW8ocnx8e30sdCk6cixhPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZTplLnR5cGUscHJvcHM6aCxrZXk6aCYmQXIoaCkscmVmOnQmJnQucmVmP24mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZpP0UoaSk/aS5jb25jYXQoTnQodCkpOltpLE50KHQpXTpOdCh0KTppLHNjb3BlSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkOmUuc2NvcGVJZCxzbG90U2NvcGVJZHM6ZS5zbG90U2NvcGVJZHMsY2hpbGRyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmwsdGFyZ2V0OmUudGFyZ2V0LHRhcmdldFN0YXJ0OmUudGFyZ2V0U3RhcnQsdGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEFuY2hvcjplLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDplLnN0YXRpY0NvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCxzaGFwZUZsYWc6ZS5zaGFwZUZsYWcscGF0Y2hGbGFnOnQmJmUudHlwZSE9PXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZT9vPT09LTE/MTY6b3wxNjpvLGR5bmFtaWNQcm9wczplLmR5bmFtaWNQcm9wcyxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3luYW1pY0NoaWxkcmVuOmUuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6ZS5hcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwQ29udGV4dCxkaXJzOmUuZGlycyx0cmFuc2l0aW9uOmMsY29tcG9uZW50OmUuY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCxzdXNwZW5zZTplLnN1c3BlbnNlLHNzQ29udGVudDplLnNzQ29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QmJnR0KGUuc3NDb250ZW50KSxzc0ZhbGxiYWNrOmUuc3NGYWxsYmFjayYmdHQoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3NGYWxsYmFjayksZWw6ZS5lbCxhbmNob3I6ZS5hbmNob3IsY3R4OmUuY3R4LGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTplLmNlfTtyZXR1cm4gYyYmcyYmQm4oYSxjLmNsb25lKGEpKSxhfWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBQcihlPSIgIix0PTApe3JldHVybiBIZShrdCxudWxsLGUsdCl9ZnVuY3Rpb24gUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGUpe3JldHVybiBlPT1udWxsfHx0eXBlb2YgZT09ImJvb2xlYW4iP0hlKHl0KTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRShlKT9IZSh4ZSxudWxsLGUuc2xpY2UoKSk6RXIoZSk/RmUoZSk6SGUoa3QsbnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsU3RyaW5nKGUpKX1mdW5jdGlvbiBGZShlKXtyZXR1cm4gZS5lbD09PW51bGwmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLnBhdGNoRmxhZyE9PS0xfHxlLm1lbW8/ZTp0dChlKX1mdW5jdGlvbiBxbihlLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtsZXQgbj0wO2NvbnN0e3NoYXBlRmxhZzpzfT1lO2lmKHQ9PW51bGwpdD1udWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztlbHNlIGlmKEUodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PT0ib2JqZWN0IilpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocyY2NSl7Y29uc3Qgcj10LmRlZmF1bHQ7ciYmKHIuX2MmJihyLl9kPSExKSxxbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSxyKCkpLHIuX2MmJihyLl9kPSEwKSk7cmV0dXJufWVsc2V7bj0zMjtjb25zdCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz10Ll87IXImJiFocih0KT90Ll9jdHg9dWU6cj09PTMmJnVlJiYodWUuc2xvdHMuXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0xP3QuXz0xOih0Ll89MixlLnBhdGNoRmxhZ3w9MTAyNCkpfWVsc2UgUih0KT8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHQ9e2RlZmF1bHQ6dCxfY3R4OnVlfSxuPTMyKToodD1TdHJpbmcodCkscyY2ND8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249MTYsdD1bUHIodCldKTpuPTgpO2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9ZnVuY3Rpb24gQW8oLi4uZSl7Y29uc3QgdD17fTtmb3IobGV0IG49MDtuPGUubGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmd0aDtuKyspe2NvbnN0IHM9ZVtuXTtmb3IoY29uc3QgciBpbiBzKWlmKHI9PT0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzIil0LmNsYXNzIT09cy5jbGFzcyYmKHQuY2xhc3M9Rm4oW3QuY2xhc3MscycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2xhc3NdKSk7ZWxzZSBpZihyPT09InN0eWxlIil0LnN0eWxlPUluKFt0LnN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSxzLnN0eWxlXSk7ZWxzZSBpZihXdChyKSl7Y29uc3QgaT10W3JdLG89c1tyXTtvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmaSE9PW8mJiEoRShpKSYmaS5pbmNsdWRlcyhvKSkmJih0W3JdPWk/W10uY29uYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdChpLG8pOm8pfWVsc2UgciE9PSIiJiYodFtyXT1zW3JdKX1yZXR1cm4gdH1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gYmUoZSx0LG4scz1udWxsKXtDZShlLHQsNyxbbixzXSl9Y29uc3QgUG89JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyKCk7bGV0IFJvPTA7ZnVuY3Rpb24gTW8oZSx0LG4pe2NvbnN0IHM9ZS50eXBlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyPSh0P3QuYXBwQ29udGV4dDplLmFwcENvbnRleHQpfHxQbyxpPXt1aWQ6Um8rKywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndm5vZGU6ZSx0eXBlOnMscGFyZW50OnQsYXBwQ29udGV4dDpyLHJvb3Q6bnVsbCxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiOm51bGwsc2NvcGU6bmV3IFhyKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvc2VkOm51bGwsZXhwb3NlUHJveHk6bnVsbCx3aXRoUHJveHk6bnVsbCxwcm92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXM6dD90LnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoci5wcm92aWRlcyksaWRzOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0P3QuaWRzOlsiIiwwLDBdLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVzOm51bGwscHJvcHNPcHRpb25zOmdyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzLHIpLGVtaXRzT3B0aW9uczpDcihzLHIpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLHByb3BzRGVmYXVsdHM6TCxpbmhlcml0QXR0cnM6cy5pbmhlcml0QXR0cnMsY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDpMLGRhdGE6TCxwcm9wczpMLGF0dHJzOkwsc2xvdHM6TCxyZWZzOkwsc2V0dXBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGU6TCxzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpuLHN1c3BlbnNlSWQ6bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/bi5wZW5kaW5nSWQ6MCxhc3luY0RlcDpudWxsLGFzeW5jUmVzb2x2ZWQ6ITEsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididW06bnVsbCxkYTpudWxsLGE6bnVsbCxydGc6bnVsbCxydGM6bnVsbCxlYzpudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxzcDpudWxsfTtyZXR1cm4gaS5jdHg9e186aX0saS5yb290PXQ/dC5yb290OmksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kuZW1pdD1iby5iaW5kKG51bGwsaSksZS5jZSYmZS5jZShpKSxpfWxldCBuZT1udScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbCxCdCxPbjt7Y29uc3QgZT1HdCgpLHQ9KG4scyk9PntsZXQgcjtyZXR1cm4ocj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVtuXSl8fChyPWVbbl09W10pLHIucHVzaChzKSxpPT57ci5sZW5ndGg+MT9yLmZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKG89Pm8oaSkpOnJbMF0oaSl9fTtCdD10KCJfX1ZVRV9JTlNUQU5DRV9TRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUVEVSU19fIixuPT5uZT1uKSxPbj10KCJfX1ZVRV9TU1JfU0VUVEVSU19fIixuPT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3Q9bil9Y29uc3QgQ3Q9ZT0+e2NvbnN0IHQ9bmU7cmV0dXJuIEJ0KGUpLGUuc2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlLm9uKCksKCk9PntlLnNjb3BlLm9mZigpLEJ0KHQpfX0sYXM9KCk9PntuZSYmbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLnNjb3BlLm9mZigpLEJ0KG51bGwpfTtmdW5jdGlvbiBScihlKXtyZXR1cm4gZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndm5vZGUuc2hhcGVGbGFnJjR9bGV0IFN0PSExO2Z1bmN0aW9uIElvKGUsdD0hMSxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0hMSl7dCYmT24odCk7Y29uc3R7cHJvcHM6cyxjaGlsZHJlbjpyfT1lLnZub2RlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpPVJyKGUpO3NvKGUscyxpLHQpLGxvKGUscixuKTtjb25zdCBvPWk/Rm8oZSx0KTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZCAwO3JldHVybiB0JiZPbighMSksb31mdW5jdGlvbiBGbyhlLHQpe2NvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuPWUudHlwZTtlLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksZS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveHk9bmV3IFByb3h5KGUuY3R4LFlpKTtjb25zdHtzZXR1cDpzfT1uO2lmKHMpe2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpO2NvbnN0IHI9ZS5zZXR1cENvbnRleHQ9cy5sZW5ndGg+MT9IbyhlKTpudWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxpPUN0KGUpLG89VHQocyxlLDAsW2UucHJvcHMscl0pLGw9RXMobyk7aWYoTGUoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaSgpLChsfHxlLnNwKSYmIWh0KGUpJiZycihlKSxsKXtpZihvLnRoZW4oYXMsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSx0KXJldHVybiBvLnRoZW4oYz0+e2RzKGUsYyl9KS5jYXRjaChjPT57WHQoYyxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywwKX0pO2UuYXN5bmNEZXA9b31lbHNlIGRzKGUsbyl9ZWxzZSBNcihlKX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZHMoZSx0LG4pe1IodCk/ZS50eXBlLl9fc3NySW5saW5lUmVuZGVyP2Uuc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclJlbmRlcj10OmUucmVuZGVyPXQ6Syh0KSYmKGUuc2V0dXBTdGF0ZT1Rcyh0KSksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01yKGUpfWZ1bmN0aW9uIE1yKGUsdCxuKXtjb25zdCBzPWUudHlwZTtlLnJlbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fChlLnJlbmRlcj1zLnJlbmRlcnx8d2UpO3tjb25zdCByPUN0KGUpO2plKCk7dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneXt6aShlKX1maW5hbGx5e0xlKCkscigpfX19Y29uc3QgRG89e2dldChlLHQpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gWChlLCJnZXQiLCIiKSxlW3RdfX07ZnVuY3Rpb24gSG8oZSl7Y29uc3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9bj0+e2UuZXhwb3NlZD1ufHx7fX07cmV0dXJue2F0dHJzOm5ldyBQcm94eShlLmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRycyxEbyksc2xvdHM6ZS5zbG90cyxlbWl0OmUuZW1pdCxleHBvc2U6dH19ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGVuKGUpe3JldHVybiBlLmV4cG9zZWQ/ZS5leHBvc2VQcm94eXx8KGUuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9zZVByb3h5PW5ldyBQcm94eShRcyhtaShlLmV4cG9zZWQpKSx7Z2V0KHQsbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKG4gaW4gdClyZXR1cm4gdFtuXTtpZihuIGluIHB0KXJldHVybiBwdFtuXShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9LGhhcyh0LG4pe3JldHVybiBuIGluIHR8fG4gaW4gcHR9fSkpOmUucHJveHl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIE5vKGUpe3JldHVybiBSKGUpJiYiX192Y2NPcHRzImluIGV9Y29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGpvPShlLHQpPT5UaShlLHQsU3QpLExvPSIzLjUuMTMiOy8qKlxuKiBAdnVlL3J1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW1lLWRvbSB2My41LjEzXG4qIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1lvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL2xldCBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ247Y29uc3QgaHM9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy50cnVzdGVkVHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO2lmKGhzKXRyeXtFbj1ocy5jcmVhdGVQb2xpY3koInZ1ZSIse2NyZWF0ZUhUTUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmU9PmV9KX1jYXRjaHt9Y29uc3QgSXI9RW4/ZT0+RW4uY3JlYXRlSFRNTChlKTplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0+ZSwkbz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFZvPSJodHRwOi8vdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsT2U9dHlwZW9mIGRvY3VtZW50PCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndSI/ZG9jdW1lbnQ6bnVsbCxwcz1PZSYmT2UuY3JlYXRlRWxlbWVudCgidGVtcGxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIiksVW89e2luc2VydDooZSx0LG4pPT57dC5pbnNlcnRCZWZvcmUoZSxufHxudScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbCl9LHJlbW92ZTplPT57Y29uc3QgdD1lLnBhcmVudE5vZGU7dCYmdC5yZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hpbGQoZSl9LGNyZWF0ZUVsZW1lbnQ6KGUsdCxuLHMpPT57Y29uc3Qgcj10PT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzdmciP09lLmNyZWF0ZUVsZW1lbnROUygkbyxlKTp0PT09Im1hdGhtbCI/T2UuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZUVsZW1lbnROUyhWbyxlKTpuP09lLmNyZWF0ZUVsZW1lbnQoZSx7aXM6bn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpPZS5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT09InNlbGVjdCImJnMmJnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ211bHRpcGxlIT1udWxsJiZyLnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLHMubXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcGxlKSxyfSxjcmVhdGVUZXh0OmU9Pk9lLmNyZWF0ZVRleHROb2RlKGUpLGNyZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVDb21tZW50OmU9Pk9lLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSx0KT0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tlLm5vZGVWYWx1ZT10fSxzZXRFbGVtZW50VGV4dDooZSx0KT0+e2UudGV4dENvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW50PXR9LHBhcmVudE5vZGU6ZT0+ZS5wYXJlbnROb2RlLG5leHRTaWJsaW5nOmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT5lLm5leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+T2UucXVlcnlTZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZSksc2V0U2NvcGVJZChlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfSxpbnNlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0U3RhdGljQ29udGVudChlLHQsbixzLHIsaSl7Y29uc3Qgbz1uP24ucHJldmlvdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2libGluZzp0Lmxhc3RDaGlsZDtpZihyJiYocj09PWl8fHIubmV4dFNpYmxpbmcpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJylmb3IoO3QuaW5zZXJ0QmVmb3JlKHIuY2xvbmVOb2RlKCEwKSxuKSwhKHI9PT1pfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IShyPXIubmV4dFNpYmxpbmcpKTspO2Vsc2V7cHMuaW5uZXJIVE1MPUlyKHM9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInN2ZyI/YDxzdmc+JHtlfTwvc3ZnPmA6cz09PSJtYXRobWwiP2A8bWF0aD4ke2V9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzwvbWF0aD5gOmUpO2NvbnN0IGw9cHMuY29udGVudDtpZihzPT09InN2ZyJ8fHM9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9Im1hdGhtbCIpe2NvbnN0IGM9bC5maXJzdENoaWxkO2Zvcig7Yy5maXJzdENoaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDspbC5hcHBlbmRDaGlsZChjLmZpcnN0Q2hpbGQpO2wucmVtb3ZlQ2hpbGQoYyl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuaW5zZXJ0QmVmb3JlKGwsbil9cmV0dXJuW28/by5uZXh0U2libGluZzp0LmZpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdENoaWxkLG4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGRdfX0sS289U3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJvbCgiX3Z0YyIpO2Z1bmN0aW9uIEJvKGUsdCxuKXtjb25zdCBzPWVbS29dO3MmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYodD0odD9bdCwuLi5zXTpbLi4uc10pLmpvaW4oIiAiKSksdD09bnVsbD9lLnJlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVBdHRyaWJ1dGUoImNsYXNzIik6bj9lLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTplLmNsYXNzTmFtZT10fWNvbnN0IGdzPVN5bWJvbCgiX3ZvZCIpLFdvPVN5bWJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2woIl92c2giKSxxbz1TeW1ib2woIiIpLEpvPS8oXnw7KVxccypkaXNwbGF5XFxzKjovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBHbyhlLHQsbil7Y29uc3Qgcz1lLnN0eWxlLHI9SihuKTtsZXQgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ITE7aWYobiYmIXIpe2lmKHQpaWYoSih0KSlmb3IoY29uc3QgbyBvZiB0LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCgiOyIpKXtjb25zdCBsPW8uc2xpY2UoMCxvLmluZGV4T2YoIjoiKSkudHJpbSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztuW2xdPT1udWxsJiZqdChzLGwsIiIpfWVsc2UgZm9yKGNvbnN0IG8gaW4gdCluWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvXT09bnVsbCYmanQocyxvLCIiKTtmb3IoY29uc3QgbyBpbiBuKW89PT0iZGlzcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXkiJiYoaT0hMCksanQocyxvLG5bb10pfWVsc2UgaWYocil7aWYodCE9PW4pe2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBvPXNbcW9dO28mJihuKz0iOyIrbykscy5jc3NUZXh0PW4saT1Kby50ZXN0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKX19ZWxzZSB0JiZlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTtncyBpbiBlJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGVbZ3NdPWk/cy5kaXNwbGF5OiIiLGVbV29dJiYocy5kaXNwbGF5PSJub25lIikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31jb25zdCBfcz0vXFxzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBqdChlLHQsbil7aWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEUobikpbi5mb3JFYWNoKHM9Pmp0KGUsdCxzKSk7ZWxzZSBpZihuPT1udWxsJiYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249IiIpLHQuc3RhcnRzV2l0aCgiLS0iKSllLnNldFByb3BlcnR5KHQsbik7ZWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7Y29uc3Qgcz1ZbyhlLHQpO19zLnRlc3Qobik/ZS5zZXRQcm9wZXJ0eShHZShzKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5yZXBsYWNlKF9zLCIiKSwiaW1wb3J0YW50Iik6ZVtzXT1ufX1jb25zdCBtcz1bJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJXZWJraXQiLCJNb3oiLCJtcyJdLHBuPXt9O2Z1bmN0aW9uIFlvKGUsdCl7Y29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IG49cG5bdF07aWYobilyZXR1cm4gbjtsZXQgcz1OZSh0KTtpZihzIT09ImZpbHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIiJiZzIGluIGUpcmV0dXJuIHBuW3RdPXM7cz1ScyhzKTtmb3IobGV0IHI9MDtyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzxtcy5sZW5ndGg7cisrKXtjb25zdCBpPW1zW3JdK3M7aWYoaSBpbiBlKXJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcG5bdF09aX1yZXR1cm4gdH1jb25zdCBicz0iaHR0cDovL3d3dy53My5vcmcvMTknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOTkveGxpbmsiO2Z1bmN0aW9uIHlzKGUsdCxuLHMscixpPVlyKHQpKXtzJiZ0LnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FydHNXaXRoKCJ4bGluazoiKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMoYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLHQuc2xpY2UoNix0Lmxlbmd0aCkpOmUuc2V0QXR0cmlidXRlTlMoYnMsdCxuKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj09bnVsbHx8aSYmIUlzKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZSh0LGk/IiI6VGUobik/U3RyaW5nKG4pOm4pfWZ1bmN0aW9uIHhzKGUsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbixzLHIpe2lmKHQ9PT0iaW5uZXJIVE1MInx8dD09PSJ0ZXh0Q29udGVudCIpe24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIT1udWxsJiYoZVt0XT10PT09ImlubmVySFRNTCI/SXIobik6bik7cmV0dXJufWNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBpPWUudGFnTmFtZTtpZih0PT09InZhbHVlIiYmaSE9PSJQUk9HUkVTUyImJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichaS5pbmNsdWRlcygiLSIpKXtjb25zdCBsPWk9PT0iT1BUSU9OIj9lLmdldEF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWJ1dGUoInZhbHVlIil8fCIiOmUudmFsdWUsYz1uPT1udWxsP2UudHlwZT09PSJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlY2tib3giPyJvbiI6IiI6U3RyaW5nKG4pOyhsIT09Y3x8ISgiX3ZhbHVlImluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSkmJihlLnZhbHVlPWMpLG49PW51bGwmJmUucmVtb3ZlQXR0cmlidXRlKHQpLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLl92YWx1ZT1uO3JldHVybn1sZXQgbz0hMTtpZihuPT09IiJ8fG49PW51bGwpe2NvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBsPXR5cGVvZiBlW3RdO2w9PT0iYm9vbGVhbiI/bj1JcyhuKTpuPT1udWxsJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmbD09PSJzdHJpbmciPyhuPSIiLG89ITApOmw9PT0ibnVtYmVyIiYmKG49MCxvPSEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCl9dHJ5e2VbdF09bn1jYXRjaHt9byYmZS5yZW1vdmVBdHRyaWJ1dGUocnx8dCl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIEZyKGUsdCxuLHMpe2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4scyl9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHpvKGUsdCxuLHMpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWNvbnN0IFNzPVN5bWJvbCgiX3ZlaSIpO2Z1bmN0aW9uIFhvKGUsdCxuLHMscj1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsbCl7Y29uc3QgaT1lW1NzXXx8KGVbU3NdPXt9KSxvPWlbdF07aWYocyYmbylvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZT1zO2Vsc2V7Y29uc3RbbCxjXT1abyh0KTtpZihzKXtjb25zdCBoPWlbdF0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWVsKHMscik7RnIoZSxsLGgsYyl9ZWxzZSBvJiYoem8oZSxsLG8sYyksaVt0XT12JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pZCAwKX19Y29uc3Qgd3M9Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBabyhlKXtsZXQgdDtpZih3cy50ZXN0KGUpKXt0PXt9O2xldCBzO2ZvcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3M9ZS5tYXRjaCh3cyk7KWU9ZS5zbGljZSgwLGUubGVuZ3RoLXNbMF0ubGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksdFtzWzBdLnRvTG93ZXJDYXNlKCldPSEwfXJldHVybltlWzJdPT09IjoiP2UucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlKDMpOkdlKGUuc2xpY2UoMikpLHRdfWxldCBnbj0wO2NvbnN0IFFvPVByb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlLnJlc29sdmUoKSxrbz0oKT0+Z258fChRby50aGVuKCgpPT5nbj0wKSxnbj1EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZS5ub3coKSk7ZnVuY3Rpb24gZWwoZSx0KXtjb25zdCBuPXM9PntpZighcy5fdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cylzLl92dHM9RGF0ZS5ub3coKTtlbHNlIGlmKHMuX3Z0czw9bi5hdHRhY2hlZCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuO0NlKHRsKHMsbi52YWx1ZSksdCw1LFtzXSl9O3JldHVybiBuLnZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1lLG4uYXR0YWNoZWQ9a28oKSxufWZ1bmN0aW9uIHRsKGUsdCl7aWYoRSh0KSl7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IG49ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGUuc3RvcEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW1lZGlhdGVQcm9wYWdhdGlvbj0oKT0+e24uY2FsbChlKSxlLl9zdG9wcGVkPSEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sdC5tYXAocz0+cj0+IXIuX3N0b3BwZWQmJnMmJnMocikpfWVsc2UgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0fWNvbnN0IFRzPWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPjk2JiZlLmNoYXJDb2RlQXQoMik8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMyxubD0oZSx0LG4scyxyLGkpPT57Y29uc3Qgbz1yPT09InN2ZyI7dD09PSJjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3MiP0JvKGUscyxvKTp0PT09InN0eWxlIj9HbyhlLG4scyk6V3QodCk/UG4odCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHxYbyhlLHQsbixzLGkpOih0WzBdPT09Ii4iPyh0PXQuc2xpY2UoMSksITApOnRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBdPT09Il4iPyh0PXQuc2xpY2UoMSksITEpOnNsKGUsdCxzLG8pKT8oeHMoZSx0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKSwhZS50YWdOYW1lLmluY2x1ZGVzKCItIikmJih0PT09InZhbHVlInx8dD09PSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2tlZCJ8fHQ9PT0ic2VsZWN0ZWQiKSYmeXMoZSx0LHMsbyxpLHQhPT0idmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlIikpOmUuX2lzVnVlQ0UmJigvW0EtWl0vLnRlc3QodCl8fCFKKHMpKT94cyhlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOZSh0KSxzLGksdCk6KHQ9PT0idHJ1ZS12YWx1ZSI/ZS5fdHJ1ZVZhbHVlPXM6dD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT0iZmFsc2UtdmFsdWUiJiYoZS5fZmFsc2VWYWx1ZT1zKSx5cyhlLHQscyxvKSl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBzbChlLHQsbixzKXtpZihzKXJldHVybiEhKHQ9PT0iaW5uZXJIVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNTCJ8fHQ9PT0idGV4dENvbnRlbnQifHx0IGluIGUmJlRzKHQpJiZSKG4pKTtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD09PSJzcGVsbGNoZWNrInx8dD09PSJkcmFnZ2FibGUifHx0PT09InRyYW5zbGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UifHx0PT09ImZvcm0ifHx0PT09Imxpc3QiJiZlLnRhZ05hbWU9PT0iSU5QVVQifCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8dD09PSJ0eXBlIiYmZS50YWdOYW1lPT09IlRFWFRBUkVBIilyZXR1cm4hMTtpZignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD09PSJ3aWR0aCJ8fHQ9PT0iaGVpZ2h0Iil7Y29uc3Qgcj1lLnRhZ05hbWU7aWYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I9PT0iSU1HInx8cj09PSJWSURFTyJ8fHI9PT0iQ0FOVkFTInx8cj09PSJTT1VSQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFIilyZXR1cm4hMX1yZXR1cm4gVHModCkmJkoobik/ITE6dCBpbiBlfWNvbnN0IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz1lPT57Y29uc3QgdD1lLnByb3BzWyJvblVwZGF0ZTptb2RlbFZhbHVlIl18fCExJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztyZXR1cm4gRSh0KT9uPT5GdCh0LG4pOnR9LF9uPVN5bWJvbCgiX2Fzc2lnbiIpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybD17ZGVlcDohMCxjcmVhdGVkKGUsdCxuKXtlW19uXT1DcyhuKSxGcihlLCJjaGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmdlIiwoKT0+e2NvbnN0IHM9ZS5fbW9kZWxWYWx1ZSxyPWlsKGUpLGk9ZS5jaGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tlZCxvPWVbX25dO2lmKEUocykpe2NvbnN0IGw9RnMocyxyKSxjPWwhPT0tMTtpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoaSYmIWMpbyhzLmNvbmNhdChyKSk7ZWxzZSBpZighaSYmYyl7Y29uc3QgaD1bLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNdO2guc3BsaWNlKGwsMSksbyhoKX19ZWxzZSBpZihxdChzKSl7Y29uc3QgbD1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V3IFNldChzKTtpP2wuYWRkKHIpOmwuZGVsZXRlKHIpLG8obCl9ZWxzZSBvKERyKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLGkpKX0pfSxtb3VudGVkOnZzLGJlZm9yZVVwZGF0ZShlLHQsbil7ZVtfbl09Q3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4pLHZzKGUsdCxuKX19O2Z1bmN0aW9uIHZzKGUse3ZhbHVlOnQsb2xkVmFsdWU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ259LHMpe2UuX21vZGVsVmFsdWU9dDtsZXQgcjtpZihFKHQpKXI9RnModCxzLnBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcy52YWx1ZSk+LTE7ZWxzZSBpZihxdCh0KSlyPXQuaGFzKHMucHJvcHMudmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtlbHNle2lmKHQ9PT1uKXJldHVybjtyPVl0KHQsRHIoZSwhMCkpfWUuY2hlY2tlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QhPT1yJiYoZS5jaGVja2VkPXIpfWZ1bmN0aW9uIGlsKGUpe3JldHVybiJfdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlImluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBEcihlLHQpe2NvbnN0IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXQ/Il90cnVlVmFsdWUiOiJfZmFsc2VWYWx1ZSI7cmV0dXJuIG4gaW4gZT9lW25dJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzp0fWNvbnN0IG9sPXNlKHtwYXRjaFByb3A6bmx9LFVvKTtsZXQgT3M7ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGxsKCl7cmV0dXJuIE9zfHwoT3M9Y28ob2wpKX1jb25zdCBmbD0oLi4uZSk9PnsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgdD1sbCgpLmNyZWF0ZUFwcCguLi5lKSx7bW91bnQ6bn09dDtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QubW91bnQ9cz0+e2NvbnN0IHI9dWwocyk7aWYoIXIpcmV0dXJuO2NvbnN0IGk9dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuX2NvbXBvbmVudDshUihpKSYmIWkucmVuZGVyJiYhaS50ZW1wbGF0ZSYmKGkudGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBsYXRlPXIuaW5uZXJIVE1MKSxyLm5vZGVUeXBlPT09MSYmKHIudGV4dENvbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250PSIiKTtjb25zdCBvPW4ociwhMSxjbChyKSk7cmV0dXJuIHIgaW5zdGFuY2VvZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKCJ2LWNsb2FrIiksci5zZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKCJkYXRhLXYtYXBwIiwiIikpLG99LHR9O2Z1bmN0aW9uIGNsKGUpe2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4ic3ZnIjtpZih0eXBlb2YgTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBNYXRoTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudClyZXR1cm4ibWF0aG1sIn1mdW5jdGlvbiB1bChlKXtyZXR1cm4gSihlKT9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdW1lbnQucXVlcnlTZWxlY3RvcihlKTplfWNvbnN0IGFsPXtjbGFzczoiY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaW5lciBweS01In0sZGw9e2NsYXNzOiJ0ZXh0LWNlbnRlciBtYi01In0saGw9e2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzczoiY3VzdG9tLWNvbnRyb2wgY3VzdG9tLXN3aXRjaCBkLWlubGluZS1ibG9jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2sifSxwbD17Y2xhc3M6ImN1c3RvbS1jb250cm9sLWxhYmVsIG0tMiIsZm9yOiJiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGluZ1RvZ2dsZSJ9LGdsPXtjbGFzczoicm93In0sX2w9e2NsYXNzOiJjYXJkIGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZy10cmFuc3BhcmVudCBib3JkZXItMCBoLTEwMCJ9LG1sPXtjbGFzczoiY2FyZC1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29keSBib3JkZXItMCB0ZXh0LWNlbnRlciJ9LGJsPXtjbGFzczoiY2FyZC10aXRsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicifSx5bD17Y2xhc3M6ImNhcmQtcHJpY2UifSx4bD17Y2xhc3M6InRleHQtbXV0ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIn0sU2w9WyJpbm5lckhUTUwiXSx3bD17X19uYW1lOiJQcmljaW5nQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsc2V0dXAoZSl7Y29uc3QgdD1iaSghMSk7bGV0IG49SlNPTi5wYXJzZShhdG9iKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aW5kb3cuYXNvbmVEYXRhKSk7cmV0dXJuKHMscik9PihIdCgpLGhuKCJkaXYiLGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxbWSgiZGl2IixkbCxbclsxXXx8KHJbMV09WSgiaDIiLHtjbGFzczoibWItNCJ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiT3VyIFByaWNpbmciLC0xKSksWSgiZGl2IixobCxbTWkoWSgiaW5wdXQiLHt0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZToiY2hlY2tib3giLGNsYXNzOiJjdXN0b20tY29udHJvbC1pbnB1dCIsaWQ6ImInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxsaW5nVG9nZ2xlIiwib25VcGRhdGU6bW9kZWxWYWx1ZSI6clswXXx8KHJbMF09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9PnQudmFsdWU9aSl9LG51bGwsNTEyKSxbW3JsLHQudmFsdWVdXSksWSgibGFiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsIixwbCxmdCh0LnZhbHVlPyJZZWFybHkiOiJNb250aGx5IikrIiBCaWxsaW5nICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDEpXSldKSxZKCJkaXYiLGdsLFsoSHQoITApLGhuKHhlLG51bGwsR2koWnMobiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9PihIdCgpLGhuKCJkaXYiLHtjbGFzczoiY29sLW1kLTQgbWItNCIsa2V5OmkubicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWV9LFtZKCJkaXYiLF9sLFtZKCJkaXYiLG1sLFtZKCJoNCIsYmwsZnQoaS5uYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSksMSksWSgiaDIiLHlsLFtQcigiICQiK2Z0KHQudmFsdWU/aS55ZWFybHlQcmljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6aS5tb250aGx5UHJpY2UpKyIgIiwxKSxZKCJzbWFsbCIseGwsIi8iK2Z0KHQudicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlPyJ5ZWFyIjoibW9udGgiKSwxKV0pLHJbMl18fChyWzJdPVkoImhyIixudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCxudWxsLC0xKSksWSgiZGl2Iix7Y2xhc3M6Imxpc3QtdW5zdHlsZWQiLGlubmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hUTUw6aS5mZWF0dXJlczB9LG51bGwsOCxTbCldKSxyWzNdfHwoclszXT1ZKCJkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2Iix7Y2xhc3M6ImNhcmQtZm9vdGVyIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50In0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFtZKCJidXR0b24iLHtjbGFzczoiYnRuIGJ0bi1vdXRsaW5lLWRhcmsgYnRuLWxnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3LTEwMCJ9LCJTZWxlY3QgUGxhbiIpXSwtMSkpXSldKSkpLDEyOCkpXSldKSl9fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVGw9e19fbmFtZToiQXBwIixzZXR1cChlKXtsZXQgdD1KU09OLnBhcnNlKGF0b2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHdpbmRvdy5hc29uZURhdGEpKTtyZXR1cm4gY29uc29sZS5sb2codCksKG4scyk9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4oSHQoKSx2byh3bCkpfX07ZmwoVGwpLm1vdW50KCIjIit3aW5kb3cuYXNvbmVJZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDIwMDIvd3MvZGlzdC9hc3NldHMvaW5kZXgtaTJEemNTQzcuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAxNzogeydlbic6IHsnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgJ2ZlYXR1cmVzJzogYidceDgwXHgwNFx4OTU0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMH0nCiAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4OTRceDhjXHRmaWVsZG1jZTBceDk0XHg4YyE8dWw+PGxpPm9uZSA8L2xpPjxsaT4nCiAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R3bzwvbGk+PHVsPlx4OTRzLicsCiAgICAgICAgICAgICAnbW9udGhseVByaWNlJzogMTAsCiAgICAgICAgICAgICAnbmFtZSc6ICdQbGFuIDAnLAogICAgICAgICAgICAgJ3llYXJseVByaWNlJzogMTAwfSwKICAgICAgJ2VuLVVTJzogeydTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAnZmVhdHVyZXMnOiBiJ1x4ODBceDA0XHg5NTRceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHg5NFx4OGNcdGZpZWxkbWNlMFx4OTRceDhjITx1bD48bGk+b25lIDwvbGk+PGxpPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHdvPC9saT48dWw+XHg5NHMuJywKICAgICAgICAgICAgICAgICdtb250aGx5UHJpY2UnOiAxMCwKICAgICAgICAgICAgICAgICduYW1lJzogJ1BsYW4gMCcsCiAgICAgICAgICAgICAgICAneWVhcmx5UHJpY2UnOiAxMDB9fSwKIDE4OiB7J2VuJzogeydTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAnZmVhdHVyZXMnOiBiJ1x4ODBceDA0XHg5NTRceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwfScKICAgICAgICAgICAgICAgICAgICAgICAgIGInXHg5NFx4OGNcdGZpZWxkbWNlMFx4OTRceDhjITx1bD48bGk+b25lIDwvbGk+PGxpPicKICAgICAgICAgICAgICAgICAgICAgICAgIGIndHdvPC9saT48dWw+XHg5NHMuJywKICAgICAgICAgICAgICdtb250aGx5UHJpY2UnOiAxMCwKICAgICAgICAgICAgICduYW1lJzogJ1BsYW4gMScsCiAgICAgICAgICAgICAneWVhcmx5UHJpY2UnOiAxMDB9LAogICAgICAnZW4tVVMnOiB7J1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICdmZWF0dXJlcyc6IGInXHg4MFx4MDRceDk1NFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDk0XHg4Y1x0ZmllbGRtY2UwXHg5NFx4OGMhPHVsPjxsaT5vbmUgPC9saT48bGk+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0d288L2xpPjx1bD5ceDk0cy4nLAogICAgICAgICAgICAgICAgJ21vbnRobHlQcmljZSc6IDEwLAogICAgICAgICAgICAgICAgJ25hbWUnOiAnUGxhbiAxJywKICAgICAgICAgICAgICAgICd5ZWFybHlQcmljZSc6IDEwMH19LAogMTk6IHsnZW4nOiB7J1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICdmZWF0dXJlcyc6IGInXHg4MFx4MDRceDk1NFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDB9JwogICAgICAgICAgICAgICAgICAgICAgICAgYidceDk0XHg4Y1x0ZmllbGRtY2UwXHg5NFx4OGMhPHVsPjxsaT5vbmUgPC9saT48bGk+JwogICAgICAgICAgICAgICAgICAgICAgICAgYid0d288L2xpPjx1bD5ceDk0cy4nLAogICAgICAgICAgICAgJ21vbnRobHlQcmljZSc6IDEwLAogICAgICAgICAgICAgJ25hbWUnOiAnUGxhbiAyJywKICAgICAgICAgICAgICd5ZWFybHlQcmljZSc6IDEwMH0sCiAgICAgICdlbi1VUyc6IHsnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgJ2ZlYXR1cmVzJzogYidceDgwXHgwNFx4OTU0XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4OTRceDhjXHRmaWVsZG1jZTBceDk0XHg4YyE8dWw+PGxpPm9uZSA8L2xpPjxsaT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R3bzwvbGk+PHVsPlx4OTRzLicsCiAgICAgICAgICAgICAgICAnbW9udGhseVByaWNlJzogMTAsCiAgICAgICAgICAgICAgICAnbmFtZSc6ICdQbGFuIDInLAogICAgICAgICAgICAgICAgJ3llYXJseVByaWNlJzogMTAwfX0sCiAyMDogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVFbmdpbmUgT25cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVCYXNlIF9QYWdlUGF0aF9cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVSdWxlIF5pbmRleFxcLnBocCQgLSBbTF1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAnUmV3cml0ZVJ1bGUgLiBfUGFnZVBhdGhfaW5kZXgucGhwIFtMXVxuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJy5odGFjY2VzcycsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlRW5naW5lIE9uXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlQmFzZSBfUGFnZVBhdGhfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlUnVsZSBeaW5kZXhcXC5waHAkIC0gW0xdXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Jld3JpdGVSdWxlIC4gX1BhZ2VQYXRoX2luZGV4LnBocCBbTF1cbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuaHRhY2Nlc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX19Cg==
Free Plan
$
0
/ Month
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
Shop
Business Plan
$
29
/ Month
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
Shop
Master Plan
$
60
/ Month
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
The Catcher in the Rye
Shop
Page,idxx-xx,threeColumn,
threeColumn/id21-63,Click to clipboard
ezE6IHsnZW4nOiB7J1NsaWRlVHlwZSc6ICdUaW55TUNFJywKICAgICAgICAgICAgJ2FJbWFnZSc6ICcnLAogICAgICAgICAgICAnYUxhYmVsJzogJycsCiAgICAgICAgICAgICdhZGRDbGFzcyc6ICcnLAogICAgICAgICAgICAnY29kZSc6ICcnLAogICAgICAgICAgICAnY29kZUluYyc6ICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyMgY29udGVudCBiZXR3ZWVuIHN0eWxlSW5jIHRhZyB3aWxsIGJlIGFkZCB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmUgdGhlIGNsb3NpbmcgaGVhZCB0YWdzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGVJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPCEtLSBzdHlsZUluYyBJbmNsdWRlZCBmcm9tIF9JRF8gLS0+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlSW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc2NyaXB0SW5jIHRhZyB3aWxsIGJlIGFkZCB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmUgdGhlIGNsb3NpbmcgYm9keSB0YWdzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0SW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gc2NyaXB0SW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9zY3JpcHRJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyBFbmRcclxuJywKICAgICAgICAgICAgJ2NvbXBvc2VySlNPTic6ICcnLAogICAgICAgICAgICAnZHluYW1pY0Jsb2NrJzogJycsCiAgICAgICAgICAgICdmaWxlJzogJycsCiAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAogICAgICAgICAgICAncGhwRmlsZSc6ICcnLAogICAgICAgICAgICAncGhwRmlsZUEnOiAnJywKICAgICAgICAgICAgJ3BocEZpbGVCJzogJycsCiAgICAgICAgICAgICd0Y29kZSc6ICc8ZGl2IGNsYXNzPSJ0ZWFtLW1lbWJlciBkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgc2hhZG93ICcKICAgICAgICAgICAgICAgICAgICAgJ3AtMyBtYi01IGJnLXdoaXRlIHJvdW5kZWQiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwLTMgZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIiAnCiAgICAgICAgICAgICAgICAgICAgICdzdHlsZT0iaGVpZ2h0OiA0MjBweDsiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtYi1hdXRvICI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxoMyBjbGFzcz0icHgtNCI+RnJlZSBQbGFuPC9oMz5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImRpc3BsYXktMiBweC00Ij48c3BhbiBzdHlsZT0iY29sb3I6ICcKICAgICAgICAgICAgICAgICAgICAgJ19Db2xvckRfOyI+PHN1cCBjbGFzcz0iZGlzcGxheS00Ij4kPC9zdXA+MDwvc3Bhbj48c3ViICcKICAgICAgICAgICAgICAgICAgICAgJ3N0eWxlPSJmb250LXNpemU6IDI1cHg7Ij4vIE1vbnRoPC9zdWI+PC9zcGFuPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgcC0yIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxkZWw+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdSeWU8L2RlbD48L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGRlbD48ZW0gY2xhc3M9ImZhcyAnCiAgICAgICAgICAgICAgICAgICAgICdmYS1jaGVjay1kb3VibGUiPjwvZW0+Jm5ic3A7Jm5ic3A7VGhlIENhdGNoZXIgaW4gdGhlICcKICAgICAgICAgICAgICAgICAgICAgJ1J5ZTwvZGVsPjwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvdWw+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwLTMiPjxhIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtaW5mbyIgJwogICAgICAgICAgICAgICAgICAgICAnaHJlZj0iIyI+IFNob3AgPC9hPjwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JywKICAgICAgICAgICAgJ3Zjb2RlJzogJyd9LAogICAgICdlbi1VUyc6IHsnU2xpZGVUeXBlJzogJ1RpbnlNQ0UnLAogICAgICAgICAgICAgICAnYUltYWdlJzogJycsCiAgICAgICAgICAgICAgICdhTGFiZWwnOiAnJywKICAgICAgICAgICAgICAgJ2FkZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICdjb2RlJzogJycsCiAgICAgICAgICAgICAgICdjb2RlSW5jJzogJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc3R5bGVJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBoZWFkIHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZUluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8IS0tIHN0eWxlSW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGVJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbnRlbnQgYmV0d2VlbiBzY3JpcHRJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBib2R5IHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHRJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPCEtLSBzY3JpcHRJbmMgSW5jbHVkZWQgZnJvbSBfSURfIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8L3NjcmlwdEluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjIEVuZFxyXG4nLAogICAgICAgICAgICAgICAnY29tcG9zZXJKU09OJzogJycsCiAgICAgICAgICAgICAgICdkeW5hbWljQmxvY2snOiAnJywKICAgICAgICAgICAgICAgJ2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCiAgICAgICAgICAgICAgICdwaHBGaWxlJzogJycsCiAgICAgICAgICAgICAgICdwaHBGaWxlQSc6ICcnLAogICAgICAgICAgICAgICAncGhwRmlsZUInOiAnJywKICAgICAgICAgICAgICAgJ3Rjb2RlJzogJzxkaXYgY2xhc3M9InRlYW0tbWVtYmVyIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3cgcC0zIG1iLTUgYmctd2hpdGUgcm91bmRlZCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InAtMyBkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4iICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3N0eWxlPSJoZWlnaHQ6IDQyMHB4OyI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1iLWF1dG8gIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGgzIGNsYXNzPSJweC00Ij5GcmVlIFBsYW48L2gzPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iZGlzcGxheS0yIHB4LTQiPjxzcGFuIHN0eWxlPSJjb2xvcjogJwogICAgICAgICAgICAgICAgICAgICAgICAnX0NvbG9yRF87Ij48c3VwIGNsYXNzPSJkaXNwbGF5LTQiPiQ8L3N1cD4wPC9zcGFuPjxzdWIgJwogICAgICAgICAgICAgICAgICAgICAgICAnc3R5bGU9ImZvbnQtc2l6ZTogMjVweDsiPi8gTW9udGg8L3N1Yj48L3NwYW4+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBwLTIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGRlbD48ZW0gY2xhc3M9ImZhcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICdmYS1jaGVjay1kb3VibGUiPjwvZW0+Jm5ic3A7Jm5ic3A7VGhlIENhdGNoZXIgaW4gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgJ1J5ZTwvZGVsPjwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0icC0xIj48ZGVsPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnUnllPC9kZWw+PC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC91bD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InAtMyI+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1pbmZvIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICdocmVmPSIjIj4gU2hvcCA8L2E+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nLAogICAgICAgICAgICAgICAndmNvZGUnOiAnJ319LAogMjogeydlbic6IHsnU2xpZGVUeXBlJzogJ1RpbnlNQ0UnLAogICAgICAgICAgICAnYUltYWdlJzogJycsCiAgICAgICAgICAgICdhTGFiZWwnOiAnJywKICAgICAgICAgICAgJ2FkZENsYXNzJzogJycsCiAgICAgICAgICAgICdjb2RlJzogJycsCiAgICAgICAgICAgICdjb2RlSW5jJzogJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc3R5bGVJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBoZWFkIHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZUluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8IS0tIHN0eWxlSW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGVJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjIGNvbnRlbnQgYmV0d2VlbiBzY3JpcHRJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBib2R5IHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHRJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPCEtLSBzY3JpcHRJbmMgSW5jbHVkZWQgZnJvbSBfSURfIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9zY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L3NjcmlwdEluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjIEVuZFxyXG4nLAogICAgICAgICAgICAnY29tcG9zZXJKU09OJzogJycsCiAgICAgICAgICAgICdkeW5hbWljQmxvY2snOiAnJywKICAgICAgICAgICAgJ2ZpbGUnOiAnJywKICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCiAgICAgICAgICAgICdwaHBGaWxlJzogJycsCiAgICAgICAgICAgICdwaHBGaWxlQSc6ICcnLAogICAgICAgICAgICAncGhwRmlsZUInOiAnJywKICAgICAgICAgICAgJ3Rjb2RlJzogJzxkaXYgY2xhc3M9InRlYW0tbWVtYmVyIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBzaGFkb3cgJwogICAgICAgICAgICAgICAgICAgICAncC0zIG1iLTUgYmctd2hpdGUgcm91bmRlZCBib3JkZXItdG9wLTIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwLTMgZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIiAnCiAgICAgICAgICAgICAgICAgICAgICdzdHlsZT0iaGVpZ2h0OiA0MjBweDsiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtYi1hdXRvICI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxoMyBjbGFzcz0icHgtNCI+QnVzaW5lc3MgUGxhbjwvaDM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJkaXNwbGF5LTIgcHgtNCI+PHNwYW4gc3R5bGU9ImNvbG9yOiAnCiAgICAgICAgICAgICAgICAgICAgICdfQ29sb3JEXzsiPjxzdXAgY2xhc3M9ImRpc3BsYXktNCI+JDwvc3VwPjI5PC9zcGFuPjxzdWIgJwogICAgICAgICAgICAgICAgICAgICAnc3R5bGU9ImZvbnQtc2l6ZTogMjVweDsiPi8gTW9udGg8L3N1Yj48L3NwYW4+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBwLTIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGRlbD48ZW0gY2xhc3M9ImZhcyAnCiAgICAgICAgICAgICAgICAgICAgICdmYS1jaGVjay1kb3VibGUiPjwvZW0+Jm5ic3A7Jm5ic3A7VGhlIENhdGNoZXIgaW4gdGhlICcKICAgICAgICAgICAgICAgICAgICAgJ1J5ZTwvZGVsPjwvbGk+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvdWw+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwLTMiPjxhIGNsYXNzPSJidG4gYnRuLWluZm8iIGhyZWY9IiMiPiBTaG9wICcKICAgICAgICAgICAgICAgICAgICAgJzwvYT48L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicsCiAgICAgICAgICAgICd2Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J1NsaWRlVHlwZSc6ICdUaW55TUNFJywKICAgICAgICAgICAgICAgJ2FJbWFnZSc6ICcnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJycsCiAgICAgICAgICAgICAgICdhZGRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAnY29kZSc6ICcnLAogICAgICAgICAgICAgICAnY29kZUluYyc6ICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29udGVudCBiZXR3ZWVuIHN0eWxlSW5jIHRhZyB3aWxsIGJlIGFkZCB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmUgdGhlIGNsb3NpbmcgaGVhZCB0YWdzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGVJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPCEtLSBzdHlsZUluYyBJbmNsdWRlZCBmcm9tIF9JRF8gLS0+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlSW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc2NyaXB0SW5jIHRhZyB3aWxsIGJlIGFkZCB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmUgdGhlIGNsb3NpbmcgYm9keSB0YWdzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0SW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gc2NyaXB0SW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zY3JpcHRJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBFbmRcclxuJywKICAgICAgICAgICAgICAgJ2NvbXBvc2VySlNPTic6ICcnLAogICAgICAgICAgICAgICAnZHluYW1pY0Jsb2NrJzogJycsCiAgICAgICAgICAgICAgICdmaWxlJzogJycsCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAogICAgICAgICAgICAgICAncGhwRmlsZSc6ICcnLAogICAgICAgICAgICAgICAncGhwRmlsZUEnOiAnJywKICAgICAgICAgICAgICAgJ3BocEZpbGVCJzogJycsCiAgICAgICAgICAgICAgICd0Y29kZSc6ICc8ZGl2IGNsYXNzPSJ0ZWFtLW1lbWJlciBkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAnc2hhZG93IHAtMyBtYi01IGJnLXdoaXRlIHJvdW5kZWQgYm9yZGVyLXRvcC0yIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icC0zIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiIgJwogICAgICAgICAgICAgICAgICAgICAgICAnc3R5bGU9ImhlaWdodDogNDIwcHg7Ij5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ibWItYXV0byAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8aDMgY2xhc3M9InB4LTQiPkJ1c2luZXNzIFBsYW48L2gzPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iZGlzcGxheS0yIHB4LTQiPjxzcGFuIHN0eWxlPSJjb2xvcjogJwogICAgICAgICAgICAgICAgICAgICAgICAnX0NvbG9yRF87Ij48c3VwICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzPSJkaXNwbGF5LTQiPiQ8L3N1cD4yOTwvc3Bhbj48c3ViICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3N0eWxlPSJmb250LXNpemU6IDI1cHg7Ij4vIE1vbnRoPC9zdWI+PC9zcGFuPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgcC0yIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxkZWw+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2RlbD48L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L3VsPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icC0zIj48YSBjbGFzcz0iYnRuIGJ0bi1pbmZvIiBocmVmPSIjIj4gJwogICAgICAgICAgICAgICAgICAgICAgICAnU2hvcCA8L2E+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nLAogICAgICAgICAgICAgICAndmNvZGUnOiAnJ319LAogMzogeydlbic6IHsnU2xpZGVUeXBlJzogJ1RpbnlNQ0UnLAogICAgICAgICAgICAnYUltYWdlJzogJycsCiAgICAgICAgICAgICdhTGFiZWwnOiAnJywKICAgICAgICAgICAgJ2FkZENsYXNzJzogJycsCiAgICAgICAgICAgICdjb2RlJzogJycsCiAgICAgICAgICAgICdjb2RlSW5jJzogJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyBjb250ZW50IGJldHdlZW4gc3R5bGVJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBoZWFkIHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZUluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8IS0tIHN0eWxlSW5jIEluY2x1ZGVkIGZyb20gX0lEXyAtLT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGVJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjIGNvbnRlbnQgYmV0d2VlbiBzY3JpcHRJbmMgdGFnIHdpbGwgYmUgYWRkIHRvIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSB0aGUgY2xvc2luZyBib2R5IHRhZ3NcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHRJbmM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPCEtLSBzY3JpcHRJbmMgSW5jbHVkZWQgZnJvbSBfSURfIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9zY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L3NjcmlwdEluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjIEVuZFxyXG4nLAogICAgICAgICAgICAnY29tcG9zZXJKU09OJzogJycsCiAgICAgICAgICAgICdkeW5hbWljQmxvY2snOiAnJywKICAgICAgICAgICAgJ2ZpbGUnOiAnJywKICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCiAgICAgICAgICAgICdwaHBGaWxlJzogJycsCiAgICAgICAgICAgICdwaHBGaWxlQSc6ICcnLAogICAgICAgICAgICAncGhwRmlsZUInOiAnJywKICAgICAgICAgICAgJ3Rjb2RlJzogJzxkaXYgY2xhc3M9InRlYW0tbWVtYmVyIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBzaGFkb3cgJwogICAgICAgICAgICAgICAgICAgICAncC0zIG1iLTUgYmctd2hpdGUgcm91bmRlZCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InAtMyBkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4iICcKICAgICAgICAgICAgICAgICAgICAgJ3N0eWxlPSJoZWlnaHQ6IDQyMHB4OyI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1iLWF1dG8gIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGgzIGNsYXNzPSJweC00Ij5NYXN0ZXIgUGxhbjwvaDM+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJkaXNwbGF5LTIgcHgtNCI+PHNwYW4gc3R5bGU9ImNvbG9yOiAnCiAgICAgICAgICAgICAgICAgICAgICdfQ29sb3JEXzsiPiA8c3VwIGNsYXNzPSJkaXNwbGF5LTQiPiQ8L3N1cD42MDwvc3Bhbj48c3ViICcKICAgICAgICAgICAgICAgICAgICAgJ3N0eWxlPSJmb250LXNpemU6IDI1cHg7Ij4vIE1vbnRoPC9zdWI+PC9zcGFuPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgcC0yIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPSJwLTEiPjxlbSBjbGFzcz0iZmFzICcKICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZWNrLWRvdWJsZSI+PC9lbT4mbmJzcDsmbmJzcDtUaGUgQ2F0Y2hlciBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAnUnllPC9saT5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC91bD5cclxuJwogICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InAtMyI+PGEgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1pbmZvIiAnCiAgICAgICAgICAgICAgICAgICAgICdocmVmPSIjIj4gU2hvcCA8L2E+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nLAogICAgICAgICAgICAndmNvZGUnOiAnJ30sCiAgICAgJ2VuLVVTJzogeydTbGlkZVR5cGUnOiAnVGlueU1DRScsCiAgICAgICAgICAgICAgICdhSW1hZ2UnOiAnJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICcnLAogICAgICAgICAgICAgICAnYWRkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgJ2NvZGUnOiAnJywKICAgICAgICAgICAgICAgJ2NvZGVJbmMnOiAnIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbnRlbnQgYmV0d2VlbiBzdHlsZUluYyB0YWcgd2lsbCBiZSBhZGQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlIHRoZSBjbG9zaW5nIGhlYWQgdGFnc1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlSW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwhLS0gc3R5bGVJbmMgSW5jbHVkZWQgZnJvbSBfSURfIC0tPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZUluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29udGVudCBiZXR3ZWVuIHNjcmlwdEluYyB0YWcgd2lsbCBiZSBhZGQgdG8gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlIHRoZSBjbG9zaW5nIGJvZHkgdGFnc1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNjcmlwdEluYz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8IS0tIHNjcmlwdEluYyBJbmNsdWRlZCBmcm9tIF9JRF8gLS0+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNjcmlwdD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICc8L3NjcmlwdD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICcgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc2NyaXB0SW5jPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgRW5kXHJcbicsCiAgICAgICAgICAgICAgICdjb21wb3NlckpTT04nOiAnJywKICAgICAgICAgICAgICAgJ2R5bmFtaWNCbG9jayc6ICcnLAogICAgICAgICAgICAgICAnZmlsZSc6ICcnLAogICAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKICAgICAgICAgICAgICAgJ3BocEZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3BocEZpbGVBJzogJycsCiAgICAgICAgICAgICAgICdwaHBGaWxlQic6ICcnLAogICAgICAgICAgICAgICAndGNvZGUnOiAnPGRpdiBjbGFzcz0idGVhbS1tZW1iZXIgZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYWRvdyBwLTMgbWItNSBiZy13aGl0ZSByb3VuZGVkIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icC0zIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiIgJwogICAgICAgICAgICAgICAgICAgICAgICAnc3R5bGU9ImhlaWdodDogNDIwcHg7Ij5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ibWItYXV0byAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8aDMgY2xhc3M9InB4LTQiPk1hc3RlciBQbGFuPC9oMz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImRpc3BsYXktMiBweC00Ij48c3BhbiBzdHlsZT0iY29sb3I6ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ19Db2xvckRfOyI+IDxzdXAgJwogICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9ImRpc3BsYXktNCI+JDwvc3VwPjYwPC9zcGFuPjxzdWIgJwogICAgICAgICAgICAgICAgICAgICAgICAnc3R5bGU9ImZvbnQtc2l6ZTogMjVweDsiPi8gTW9udGg8L3N1Yj48L3NwYW4+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBwLTIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9InAtMSI+PGVtIGNsYXNzPSJmYXMgJwogICAgICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2stZG91YmxlIj48L2VtPiZuYnNwOyZuYnNwO1RoZSBDYXRjaGVyIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICdSeWU8L2xpPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L3VsPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icC0zIj48YSBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWluZm8iICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2hyZWY9IiMiPiBTaG9wIDwvYT48L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicsCiAgICAgICAgICAgICAgICd2Y29kZSc6ICcnfX19Cg==
Copyright © 2025 by WebAsOne LLC, All Rights Reserved