BLDC 6-Step 모터 시뮬레이터 극쌍 수, Hall 센서 간격과 순서, 모터 선·권선축 순서, 스테이터 슬롯 수 및 CW/CCW 방향에 따른 BLDC 6-step 동작을 실시간으로 확인할 수 있습니다. InVzZSBzdHJpY3QiOygoKT0+e3ZhciBuZD1PYmplY3QuY3JlYXRlO3ZhciBsbz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGlkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dmFyIGNkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBmZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysb2Q9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgbHQ9KGwsdCk9PigpPT57dHJ5e3JldHVybiB0fHxsKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHN9Y2F0Y2goYSl7dGhyb3cgdD0wLGF9fTt2YXIgc2Q9KGwsdCxhLGUpPT57aWYodCYmdHlwZW9mIHQ9PSJvYmplY3QifHx0eXBlb2YgdD09ImZ1bmN0aW9uIilmb3IobGV0IHUgb2YgY2QodCkpIW9kLmNhbGwobCx1KSYmdSE9PWEmJmxvKGwsdSx7Z2V0OigpPT50W3VdLGVudW1lcmFibGU6IShlPWlkKHQsdSkpfHxlLmVudW1lcmFibGV9KTtyZXR1cm4gbH07dmFyIE1hPShsLHQsYSk9PihhPWwhPW51bGw/bmQoZmQobCkpOnt9LHNkKHR8fCFsfHwhbC5fX2VzTW9kdWxlP2xvKGEsImRlZmF1bHQiLHt2YWx1ZTpsLGVudW1lcmFibGU6ITB9KTphLGwpKTt2YXIgc289bHQoaz0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkaShsLHQpe3ZhciBhPWwubGVuZ3RoO2wucHVzaCh0KTtsOmZvcig7MDxhOyl7dmFyIGU9YS0xPj4+MSx1PWxbZV07aWYoMDxBdSh1LHQpKWxbZV09dCxsW2FdPXUsYT1lO2Vsc2UgYnJlYWsgbH19ZnVuY3Rpb24gdHQobCl7cmV0dXJuIGwubGVuZ3RoPT09MD9udWxsOmxbMF19ZnVuY3Rpb24gVHUobCl7aWYobC5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciB0PWxbMF0sYT1sLnBvcCgpO2lmKGEhPT10KXtsWzBdPWE7bDpmb3IodmFyIGU9MCx1PWwubGVuZ3RoLG49dT4+PjE7ZTxuOyl7dmFyIGk9MiooZSsxKS0xLGM9bFtpXSxmPWkrMSxkPWxbZl07aWYoMD5BdShjLGEpKWY8dSYmMD5BdShkLGMpPyhsW2VdPWQsbFtmXT1hLGU9Zik6KGxbZV09YyxsW2ldPWEsZT1pKTtlbHNlIGlmKGY8dSYmMD5BdShkLGEpKWxbZV09ZCxsW2ZdPWEsZT1mO2Vsc2UgYnJlYWsgbH19cmV0dXJuIHR9ZnVuY3Rpb24gQXUobCx0KXt2YXIgYT1sLnNvcnRJbmRleC10LnNvcnRJbmRleDtyZXR1cm4gYSE9PTA/YTpsLmlkLXQuaWR9ay51bnN0YWJsZV9ub3c9dm9pZCAwO3R5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnR5cGVvZiBwZXJmb3JtYW5jZS5ub3c9PSJmdW5jdGlvbiI/KHRvPXBlcmZvcm1hbmNlLGsudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRvLm5vdygpfSk6KG9pPURhdGUsYW89b2kubm93KCksay51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gb2kubm93KCktYW99KTt2YXIgdG8sb2ksYW8sZnQ9W10sRHQ9W10sbWQ9MSxHbD1udWxsLHlsPTMsaGk9ITEscGU9ITEsU2U9ITEscmk9ITEsbm89dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDpudWxsLGlvPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsZW89dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7ZnVuY3Rpb24gTXUobCl7Zm9yKHZhciB0PXR0KER0KTt0IT09bnVsbDspe2lmKHQuY2FsbGJhY2s9PT1udWxsKVR1KER0KTtlbHNlIGlmKHQuc3RhcnRUaW1lPD1sKVR1KER0KSx0LnNvcnRJbmRleD10LmV4cGlyYXRpb25UaW1lLGRpKGZ0LHQpO2Vsc2UgYnJlYWs7dD10dChEdCl9fWZ1bmN0aW9uIHZpKGwpe2lmKFNlPSExLE11KGwpLCFwZSlpZih0dChmdCkhPT1udWxsKXBlPSEwLHhhfHwoeGE9ITAsVGEoKSk7ZWxzZXt2YXIgdD10dChEdCk7dCE9PW51bGwmJnlpKHZpLHQuc3RhcnRUaW1lLWwpfX12YXIgeGE9ITEsRWU9LTEsY289NSxmbz0tMTtmdW5jdGlvbiBvbygpe3JldHVybiByaT8hMDohKGsudW5zdGFibGVfbm93KCktZm88Y28pfWZ1bmN0aW9uIHNpKCl7aWYocmk9ITEseGEpe3ZhciBsPWsudW5zdGFibGVfbm93KCk7Zm89bDt2YXIgdD0hMDt0cnl7bDp7cGU9ITEsU2UmJihTZT0hMSxpbyhFZSksRWU9LTEpLGhpPSEwO3ZhciBhPXlsO3RyeXt0Ontmb3IoTXUobCksR2w9dHQoZnQpO0dsIT09bnVsbCYmIShHbC5leHBpcmF0aW9uVGltZT5sJiZvbygpKTspe3ZhciBlPUdsLmNhbGxiYWNrO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXtHbC5jYWxsYmFjaz1udWxsLHlsPUdsLnByaW9yaXR5TGV2ZWw7dmFyIHU9ZShHbC5leHBpcmF0aW9uVGltZTw9bCk7aWYobD1rLnVuc3RhYmxlX25vdygpLHR5cGVvZiB1PT0iZnVuY3Rpb24iKXtHbC5jYWxsYmFjaz11LE11KGwpLHQ9ITA7YnJlYWsgdH1HbD09PXR0KGZ0KSYmVHUoZnQpLE11KGwpfWVsc2UgVHUoZnQpO0dsPXR0KGZ0KX1pZihHbCE9PW51bGwpdD0hMDtlbHNle3ZhciBuPXR0KER0KTtuIT09bnVsbCYmeWkodmksbi5zdGFydFRpbWUtbCksdD0hMX19YnJlYWsgbH1maW5hbGx5e0dsPW51bGwseWw9YSxoaT0hMX10PXZvaWQgMH19ZmluYWxseXt0P1RhKCk6eGE9ITF9fX12YXIgVGE7dHlwZW9mIGVvPT0iZnVuY3Rpb24iP1RhPWZ1bmN0aW9uKCl7ZW8oc2kpfTp0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiPyhtaT1uZXcgTWVzc2FnZUNoYW5uZWwsdW89bWkucG9ydDIsbWkucG9ydDEub25tZXNzYWdlPXNpLFRhPWZ1bmN0aW9uKCl7dW8ucG9zdE1lc3NhZ2UobnVsbCl9KTpUYT1mdW5jdGlvbigpe25vKHNpLDApfTt2YXIgbWksdW87ZnVuY3Rpb24geWkobCx0KXtFZT1ubyhmdW5jdGlvbigpe2woay51bnN0YWJsZV9ub3coKSl9LHQpfWsudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7ay51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xO2sudW5zdGFibGVfTG93UHJpb3JpdHk9NDtrLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7ay51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbDtrLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTI7ay51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihsKXtsLmNhbGxiYWNrPW51bGx9O2sudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24obCl7MD5sfHwxMjU8bD9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpjbz0wPGw/TWF0aC5mbG9vcigxZTMvbCk6NX07ay51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5bH07ay51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGwpe3N3aXRjaCh5bCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIHQ9MzticmVhaztkZWZhdWx0OnQ9eWx9dmFyIGE9eWw7eWw9dDt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e3lsPWF9fTtrLnVuc3RhYmxlX3JlcXVlc3RQYWludD1mdW5jdGlvbigpe3JpPSEwfTtrLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihsLHQpe3N3aXRjaChsKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6bD0zfXZhciBhPXlsO3lsPWw7dHJ5e3JldHVybiB0KCl9ZmluYWxseXt5bD1hfX07ay51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGwsdCxhKXt2YXIgZT1rLnVuc3RhYmxlX25vdygpO3N3aXRjaCh0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsPyhhPWEuZGVsYXksYT10eXBlb2YgYT09Im51bWJlciImJjA8YT9lK2E6ZSk6YT1lLGwpe2Nhc2UgMTp2YXIgdT0tMTticmVhaztjYXNlIDI6dT0yNTA7YnJlYWs7Y2FzZSA1OnU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6dT0xZTQ7YnJlYWs7ZGVmYXVsdDp1PTVlM31yZXR1cm4gdT1hK3UsbD17aWQ6bWQrKyxjYWxsYmFjazp0LHByaW9yaXR5TGV2ZWw6bCxzdGFydFRpbWU6YSxleHBpcmF0aW9uVGltZTp1LHNvcnRJbmRleDotMX0sYT5lPyhsLnNvcnRJbmRleD1hLGRpKER0LGwpLHR0KGZ0KT09PW51bGwmJmw9PT10dChEdCkmJihTZT8oaW8oRWUpLEVlPS0xKTpTZT0hMCx5aSh2aSxhLWUpKSk6KGwuc29ydEluZGV4PXUsZGkoZnQsbCkscGV8fGhpfHwocGU9ITAseGF8fCh4YT0hMCxUYSgpKSkpLGx9O2sudW5zdGFibGVfc2hvdWxkWWllbGQ9b287ay51bnN0YWJsZV93cmFwQ2FsbGJhY2s9ZnVuY3Rpb24obCl7dmFyIHQ9eWw7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9eWw7eWw9dDt0cnl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7eWw9YX19fX0pO3ZhciBobz1sdCgoeHYsbW8pPT57InVzZSBzdHJpY3QiO21vLmV4cG9ydHM9c28oKX0pO3ZhciBNbz1sdChEPT57InVzZSBzdHJpY3QiO3ZhciBwaT1TeW1ib2wuZm9yKCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudCIpLGRkPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLGhkPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IikscmQ9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSx2ZD1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLHlkPVN5bWJvbC5mb3IoInJlYWN0LmNvbnN1bWVyIiksZ2Q9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLGJkPVN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIikscGQ9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxTZD1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksYm89U3ltYm9sLmZvcigicmVhY3QubGF6eSIpLEVkPVN5bWJvbC5mb3IoInJlYWN0LmFjdGl2aXR5Iikscm89U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHpkKGwpe3JldHVybiBsPT09bnVsbHx8dHlwZW9mIGwhPSJvYmplY3QiP251bGw6KGw9cm8mJmxbcm9dfHxsWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpudWxsKX12YXIgcG89e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LFNvPU9iamVjdC5hc3NpZ24sRW89e307ZnVuY3Rpb24gX2EobCx0LGEpe3RoaXMucHJvcHM9bCx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9RW8sdGhpcy51cGRhdGVyPWF8fHBvfV9hLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O19hLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihsLHQpe2lmKHR5cGVvZiBsIT0ib2JqZWN0IiYmdHlwZW9mIGwhPSJmdW5jdGlvbiImJmwhPW51bGwpdGhyb3cgRXJyb3IoInRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxsLHQsInNldFN0YXRlIil9O19hLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihsKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsbCwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gem8oKXt9em8ucHJvdG90eXBlPV9hLnByb3RvdHlwZTtmdW5jdGlvbiBTaShsLHQsYSl7dGhpcy5wcm9wcz1sLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1Fbyx0aGlzLnVwZGF0ZXI9YXx8cG99dmFyIEVpPVNpLnByb3RvdHlwZT1uZXcgem87RWkuY29uc3RydWN0b3I9U2k7U28oRWksX2EucHJvdG90eXBlKTtFaS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgdm89QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBiaSgpe312YXIgSj17SDpudWxsLEE6bnVsbCxUOm51bGwsUzpudWxsfSxBbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHppKGwsdCxhKXt2YXIgZT1hLnJlZjtyZXR1cm57JCR0eXBlb2Y6cGksdHlwZTpsLGtleTp0LHJlZjplIT09dm9pZCAwP2U6bnVsbCxwcm9wczphfX1mdW5jdGlvbiBBZChsLHQpe3JldHVybiB6aShsLnR5cGUsdCxsLnByb3BzKX1mdW5jdGlvbiBBaShsKXtyZXR1cm4gdHlwZW9mIGw9PSJvYmplY3QiJiZsIT09bnVsbCYmbC4kJHR5cGVvZj09PXBpfWZ1bmN0aW9uIE1kKGwpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK2wucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiB0W2FdfSl9dmFyIHlvPS9cLysvZztmdW5jdGlvbiBnaShsLHQpe3JldHVybiB0eXBlb2YgbD09Im9iamVjdCImJmwhPT1udWxsJiZsLmtleSE9bnVsbD9NZCgiIitsLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gVGQobCl7c3dpdGNoKGwuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIGwudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgbC5yZWFzb247ZGVmYXVsdDpzd2l0Y2godHlwZW9mIGwuc3RhdHVzPT0ic3RyaW5nIj9sLnRoZW4oYmksYmkpOihsLnN0YXR1cz0icGVuZGluZyIsbC50aGVuKGZ1bmN0aW9uKHQpe2wuc3RhdHVzPT09InBlbmRpbmciJiYobC5zdGF0dXM9ImZ1bGZpbGxlZCIsbC52YWx1ZT10KX0sZnVuY3Rpb24odCl7bC5zdGF0dXM9PT0icGVuZGluZyImJihsLnN0YXR1cz0icmVqZWN0ZWQiLGwucmVhc29uPXQpfSkpLGwuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIGwudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgbC5yZWFzb259fXRocm93IGx9ZnVuY3Rpb24gT2EobCx0LGEsZSx1KXt2YXIgbj10eXBlb2YgbDsobj09PSJ1bmRlZmluZWQifHxuPT09ImJvb2xlYW4iKSYmKGw9bnVsbCk7dmFyIGk9ITE7aWYobD09PW51bGwpaT0hMDtlbHNlIHN3aXRjaChuKXtjYXNlImJpZ2ludCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjppPSEwO2JyZWFrO2Nhc2Uib2JqZWN0Ijpzd2l0Y2gobC4kJHR5cGVvZil7Y2FzZSBwaTpjYXNlIGRkOmk9ITA7YnJlYWs7Y2FzZSBibzpyZXR1cm4gaT1sLl9pbml0LE9hKGkobC5fcGF5bG9hZCksdCxhLGUsdSl9fWlmKGkpcmV0dXJuIHU9dShsKSxpPWU9PT0iIj8iLiIrZ2kobCwwKTplLHZvKHUpPyhhPSIiLGkhPW51bGwmJihhPWkucmVwbGFjZSh5bywiJCYvIikrIi8iKSxPYSh1LHQsYSwiIixmdW5jdGlvbihkKXtyZXR1cm4gZH0pKTp1IT1udWxsJiYoQWkodSkmJih1PUFkKHUsYSsodS5rZXk9PW51bGx8fGwmJmwua2V5PT09dS5rZXk/IiI6KCIiK3Uua2V5KS5yZXBsYWNlKHlvLCIkJi8iKSsiLyIpK2kpKSx0LnB1c2godSkpLDE7aT0wO3ZhciBjPWU9PT0iIj8iLiI6ZSsiOiI7aWYodm8obCkpZm9yKHZhciBmPTA7ZjxsLmxlbmd0aDtmKyspZT1sW2ZdLG49YytnaShlLGYpLGkrPU9hKGUsdCxhLG4sdSk7ZWxzZSBpZihmPXpkKGwpLHR5cGVvZiBmPT0iZnVuY3Rpb24iKWZvcihsPWYuY2FsbChsKSxmPTA7IShlPWwubmV4dCgpKS5kb25lOyllPWUudmFsdWUsbj1jK2dpKGUsZisrKSxpKz1PYShlLHQsYSxuLHUpO2Vsc2UgaWYobj09PSJvYmplY3QiKXtpZih0eXBlb2YgbC50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBPYShUZChsKSx0LGEsZSx1KTt0aHJvdyB0PVN0cmluZyhsKSxFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiKyh0PT09IltvYmplY3QgT2JqZWN0XSI/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMobCkuam9pbigiLCAiKSsifSI6dCkrIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC4iKX1yZXR1cm4gaX1mdW5jdGlvbiB4dShsLHQsYSl7aWYobD09bnVsbClyZXR1cm4gbDt2YXIgZT1bXSx1PTA7cmV0dXJuIE9hKGwsZSwiIiwiIixmdW5jdGlvbihuKXtyZXR1cm4gdC5jYWxsKGEsbix1KyspfSksZX1mdW5jdGlvbiB4ZChsKXtpZihsLl9zdGF0dXM9PT0tMSl7dmFyIHQ9bC5fcmVzdWx0O3Q9dCgpLHQudGhlbihmdW5jdGlvbihhKXsobC5fc3RhdHVzPT09MHx8bC5fc3RhdHVzPT09LTEpJiYobC5fc3RhdHVzPTEsbC5fcmVzdWx0PWEpfSxmdW5jdGlvbihhKXsobC5fc3RhdHVzPT09MHx8bC5fc3RhdHVzPT09LTEpJiYobC5fc3RhdHVzPTIsbC5fcmVzdWx0PWEpfSksbC5fc3RhdHVzPT09LTEmJihsLl9zdGF0dXM9MCxsLl9yZXN1bHQ9dCl9aWYobC5fc3RhdHVzPT09MSlyZXR1cm4gbC5fcmVzdWx0LmRlZmF1bHQ7dGhyb3cgbC5fcmVzdWx0fXZhciBnbz10eXBlb2YgcmVwb3J0RXJyb3I9PSJmdW5jdGlvbiI/cmVwb3J0RXJyb3I6ZnVuY3Rpb24obCl7aWYodHlwZW9mIHdpbmRvdz09Im9iamVjdCImJnR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudD09ImZ1bmN0aW9uIil7dmFyIHQ9bmV3IHdpbmRvdy5FcnJvckV2ZW50KCJlcnJvciIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxtZXNzYWdlOnR5cGVvZiBsPT0ib2JqZWN0IiYmbCE9PW51bGwmJnR5cGVvZiBsLm1lc3NhZ2U9PSJzdHJpbmciP1N0cmluZyhsLm1lc3NhZ2UpOlN0cmluZyhsKSxlcnJvcjpsfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpKXJldHVybn1lbHNlIGlmKHR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MuZW1pdD09ImZ1bmN0aW9uIil7cHJvY2Vzcy5lbWl0KCJ1bmNhdWdodEV4Y2VwdGlvbiIsbCk7cmV0dXJufWNvbnNvbGUuZXJyb3IobCl9LE9kPXttYXA6eHUsZm9yRWFjaDpmdW5jdGlvbihsLHQsYSl7eHUobCxmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhKX0sY291bnQ6ZnVuY3Rpb24obCl7dmFyIHQ9MDtyZXR1cm4geHUobCxmdW5jdGlvbigpe3QrK30pLHR9LHRvQXJyYXk6ZnVuY3Rpb24obCl7cmV0dXJuIHh1KGwsZnVuY3Rpb24odCl7cmV0dXJuIHR9KXx8W119LG9ubHk6ZnVuY3Rpb24obCl7aWYoIUFpKGwpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gbH19O0QuQWN0aXZpdHk9RWQ7RC5DaGlsZHJlbj1PZDtELkNvbXBvbmVudD1fYTtELkZyYWdtZW50PWhkO0QuUHJvZmlsZXI9dmQ7RC5QdXJlQ29tcG9uZW50PVNpO0QuU3RyaWN0TW9kZT1yZDtELlN1c3BlbnNlPXBkO0QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFPUo7RC5fX0NPTVBJTEVSX1JVTlRJTUU9e19fcHJvdG9fXzpudWxsLGM6ZnVuY3Rpb24obCl7cmV0dXJuIEouSC51c2VNZW1vQ2FjaGUobCl9fTtELmNhY2hlPWZ1bmN0aW9uKGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KG51bGwsYXJndW1lbnRzKX19O0QuY2FjaGVTaWduYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07RC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24obCx0LGEpe2lmKGw9PW51bGwpdGhyb3cgRXJyb3IoIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgIitsKyIuIik7dmFyIGU9U28oe30sbC5wcm9wcyksdT1sLmtleTtpZih0IT1udWxsKWZvcihuIGluIHQua2V5IT09dm9pZCAwJiYodT0iIit0LmtleSksdCkhQW8uY2FsbCh0LG4pfHxuPT09ImtleSJ8fG49PT0iX19zZWxmInx8bj09PSJfX3NvdXJjZSJ8fG49PT0icmVmIiYmdC5yZWY9PT12b2lkIDB8fChlW25dPXRbbl0pO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGgtMjtpZihuPT09MSllLmNoaWxkcmVuPWE7ZWxzZSBpZigxPG4pe2Zvcih2YXIgaT1BcnJheShuKSxjPTA7YzxuO2MrKylpW2NdPWFyZ3VtZW50c1tjKzJdO2UuY2hpbGRyZW49aX1yZXR1cm4gemkobC50eXBlLHUsZSl9O0QuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihsKXtyZXR1cm4gbD17JCR0eXBlb2Y6Z2QsX2N1cnJlbnRWYWx1ZTpsLF9jdXJyZW50VmFsdWUyOmwsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSxsLlByb3ZpZGVyPWwsbC5Db25zdW1lcj17JCR0eXBlb2Y6eWQsX2NvbnRleHQ6bH0sbH07RC5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGwsdCxhKXt2YXIgZSx1PXt9LG49bnVsbDtpZih0IT1udWxsKWZvcihlIGluIHQua2V5IT09dm9pZCAwJiYobj0iIit0LmtleSksdClBby5jYWxsKHQsZSkmJmUhPT0ia2V5IiYmZSE9PSJfX3NlbGYiJiZlIT09Il9fc291cmNlIiYmKHVbZV09dFtlXSk7dmFyIGk9YXJndW1lbnRzLmxlbmd0aC0yO2lmKGk9PT0xKXUuY2hpbGRyZW49YTtlbHNlIGlmKDE8aSl7Zm9yKHZhciBjPUFycmF5KGkpLGY9MDtmPGk7ZisrKWNbZl09YXJndW1lbnRzW2YrMl07dS5jaGlsZHJlbj1jfWlmKGwmJmwuZGVmYXVsdFByb3BzKWZvcihlIGluIGk9bC5kZWZhdWx0UHJvcHMsaSl1W2VdPT09dm9pZCAwJiYodVtlXT1pW2VdKTtyZXR1cm4gemkobCxuLHUpfTtELmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtELmZvcndhcmRSZWY9ZnVuY3Rpb24obCl7cmV0dXJueyQkdHlwZW9mOmJkLHJlbmRlcjpsfX07RC5pc1ZhbGlkRWxlbWVudD1BaTtELmxhenk9ZnVuY3Rpb24obCl7cmV0dXJueyQkdHlwZW9mOmJvLF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6bH0sX2luaXQ6eGR9fTtELm1lbW89ZnVuY3Rpb24obCx0KXtyZXR1cm57JCR0eXBlb2Y6U2QsdHlwZTpsLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtELnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihsKXt2YXIgdD1KLlQsYT17fTtKLlQ9YTt0cnl7dmFyIGU9bCgpLHU9Si5TO3UhPT1udWxsJiZ1KGEsZSksdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmdHlwZW9mIGUudGhlbj09ImZ1bmN0aW9uIiYmZS50aGVuKGJpLGdvKX1jYXRjaChuKXtnbyhuKX1maW5hbGx5e3QhPT1udWxsJiZhLnR5cGVzIT09bnVsbCYmKHQudHlwZXM9YS50eXBlcyksSi5UPXR9fTtELnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaD1mdW5jdGlvbigpe3JldHVybiBKLkgudXNlQ2FjaGVSZWZyZXNoKCl9O0QudXNlPWZ1bmN0aW9uKGwpe3JldHVybiBKLkgudXNlKGwpfTtELnVzZUFjdGlvblN0YXRlPWZ1bmN0aW9uKGwsdCxhKXtyZXR1cm4gSi5ILnVzZUFjdGlvblN0YXRlKGwsdCxhKX07RC51c2VDYWxsYmFjaz1mdW5jdGlvbihsLHQpe3JldHVybiBKLkgudXNlQ2FsbGJhY2sobCx0KX07RC51c2VDb250ZXh0PWZ1bmN0aW9uKGwpe3JldHVybiBKLkgudXNlQ29udGV4dChsKX07RC51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtELnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24obCx0KXtyZXR1cm4gSi5ILnVzZURlZmVycmVkVmFsdWUobCx0KX07RC51c2VFZmZlY3Q9ZnVuY3Rpb24obCx0KXtyZXR1cm4gSi5ILnVzZUVmZmVjdChsLHQpfTtELnVzZUVmZmVjdEV2ZW50PWZ1bmN0aW9uKGwpe3JldHVybiBKLkgudXNlRWZmZWN0RXZlbnQobCl9O0QudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSi5ILnVzZUlkKCl9O0QudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihsLHQsYSl7cmV0dXJuIEouSC51c2VJbXBlcmF0aXZlSGFuZGxlKGwsdCxhKX07RC51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24obCx0KXtyZXR1cm4gSi5ILnVzZUluc2VydGlvbkVmZmVjdChsLHQpfTtELnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihsLHQpe3JldHVybiBKLkgudXNlTGF5b3V0RWZmZWN0KGwsdCl9O0QudXNlTWVtbz1mdW5jdGlvbihsLHQpe3JldHVybiBKLkgudXNlTWVtbyhsLHQpfTtELnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24obCx0KXtyZXR1cm4gSi5ILnVzZU9wdGltaXN0aWMobCx0KX07RC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGwsdCxhKXtyZXR1cm4gSi5ILnVzZVJlZHVjZXIobCx0LGEpfTtELnVzZVJlZj1mdW5jdGlvbihsKXtyZXR1cm4gSi5ILnVzZVJlZihsKX07RC51c2VTdGF0ZT1mdW5jdGlvbihsKXtyZXR1cm4gSi5ILnVzZVN0YXRlKGwpfTtELnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGwsdCxhKXtyZXR1cm4gSi5ILnVzZVN5bmNFeHRlcm5hbFN0b3JlKGwsdCxhKX07RC51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEouSC51c2VUcmFuc2l0aW9uKCl9O0QudmVyc2lvbj0iMTkuMi42In0pO3ZhciBPdT1sdCgoX3YsVG8pPT57InVzZSBzdHJpY3QiO1RvLmV4cG9ydHM9TW8oKX0pO3ZhciBPbz1sdChibD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX2Q9T3UoKTtmdW5jdGlvbiB4byhsKXt2YXIgdD0iaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzLyIrbDtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe3QrPSI/YXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciBhPTI7YTxhcmd1bWVudHMubGVuZ3RoO2ErKyl0Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYV0pfXJldHVybiJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitsKyI7IHZpc2l0ICIrdCsiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifWZ1bmN0aW9uIFV0KCl7fXZhciBnbD17ZDp7ZjpVdCxyOmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoeG8oNTIyKSl9LEQ6VXQsQzpVdCxMOlV0LG06VXQsWDpVdCxTOlV0LE06VXR9LHA6MCxmaW5kRE9NTm9kZTpudWxsfSxEZD1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKTtmdW5jdGlvbiBVZChsLHQsYSl7dmFyIGU9Mzxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOkRkLGtleTplPT1udWxsP251bGw6IiIrZSxjaGlsZHJlbjpsLGNvbnRhaW5lckluZm86dCxpbXBsZW1lbnRhdGlvbjphfX12YXIgemU9X2QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFO2Z1bmN0aW9uIF91KGwsdCl7aWYobD09PSJmb250IilyZXR1cm4iIjtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ9PT0idXNlLWNyZWRlbnRpYWxzIj90OiIifWJsLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERT1nbDtibC5jcmVhdGVQb3J0YWw9ZnVuY3Rpb24obCx0KXt2YXIgYT0yPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbDtpZighdHx8dC5ub2RlVHlwZSE9PTEmJnQubm9kZVR5cGUhPT05JiZ0Lm5vZGVUeXBlIT09MTEpdGhyb3cgRXJyb3IoeG8oMjk5KSk7cmV0dXJuIFVkKGwsdCxudWxsLGEpfTtibC5mbHVzaFN5bmM9ZnVuY3Rpb24obCl7dmFyIHQ9emUuVCxhPWdsLnA7dHJ5e2lmKHplLlQ9bnVsbCxnbC5wPTIsbClyZXR1cm4gbCgpfWZpbmFsbHl7emUuVD10LGdsLnA9YSxnbC5kLmYoKX19O2JsLnByZWNvbm5lY3Q9ZnVuY3Rpb24obCx0KXt0eXBlb2YgbD09InN0cmluZyImJih0Pyh0PXQuY3Jvc3NPcmlnaW4sdD10eXBlb2YgdD09InN0cmluZyI/dD09PSJ1c2UtY3JlZGVudGlhbHMiP3Q6IiI6dm9pZCAwKTp0PW51bGwsZ2wuZC5DKGwsdCkpfTtibC5wcmVmZXRjaEROUz1mdW5jdGlvbihsKXt0eXBlb2YgbD09InN0cmluZyImJmdsLmQuRChsKX07YmwucHJlaW5pdD1mdW5jdGlvbihsLHQpe2lmKHR5cGVvZiBsPT0ic3RyaW5nIiYmdCYmdHlwZW9mIHQuYXM9PSJzdHJpbmciKXt2YXIgYT10LmFzLGU9X3UoYSx0LmNyb3NzT3JpZ2luKSx1PXR5cGVvZiB0LmludGVncml0eT09InN0cmluZyI/dC5pbnRlZ3JpdHk6dm9pZCAwLG49dHlwZW9mIHQuZmV0Y2hQcmlvcml0eT09InN0cmluZyI/dC5mZXRjaFByaW9yaXR5OnZvaWQgMDthPT09InN0eWxlIj9nbC5kLlMobCx0eXBlb2YgdC5wcmVjZWRlbmNlPT0ic3RyaW5nIj90LnByZWNlZGVuY2U6dm9pZCAwLHtjcm9zc09yaWdpbjplLGludGVncml0eTp1LGZldGNoUHJpb3JpdHk6bn0pOmE9PT0ic2NyaXB0IiYmZ2wuZC5YKGwse2Nyb3NzT3JpZ2luOmUsaW50ZWdyaXR5OnUsZmV0Y2hQcmlvcml0eTpuLG5vbmNlOnR5cGVvZiB0Lm5vbmNlPT0ic3RyaW5nIj90Lm5vbmNlOnZvaWQgMH0pfX07YmwucHJlaW5pdE1vZHVsZT1mdW5jdGlvbihsLHQpe2lmKHR5cGVvZiBsPT0ic3RyaW5nIilpZih0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsKXtpZih0LmFzPT1udWxsfHx0LmFzPT09InNjcmlwdCIpe3ZhciBhPV91KHQuYXMsdC5jcm9zc09yaWdpbik7Z2wuZC5NKGwse2Nyb3NzT3JpZ2luOmEsaW50ZWdyaXR5OnR5cGVvZiB0LmludGVncml0eT09InN0cmluZyI/dC5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOnR5cGVvZiB0Lm5vbmNlPT0ic3RyaW5nIj90Lm5vbmNlOnZvaWQgMH0pfX1lbHNlIHQ9PW51bGwmJmdsLmQuTShsKX07YmwucHJlbG9hZD1mdW5jdGlvbihsLHQpe2lmKHR5cGVvZiBsPT0ic3RyaW5nIiYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQuYXM9PSJzdHJpbmciKXt2YXIgYT10LmFzLGU9X3UoYSx0LmNyb3NzT3JpZ2luKTtnbC5kLkwobCxhLHtjcm9zc09yaWdpbjplLGludGVncml0eTp0eXBlb2YgdC5pbnRlZ3JpdHk9PSJzdHJpbmciP3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZTp0eXBlb2YgdC5ub25jZT09InN0cmluZyI/dC5ub25jZTp2b2lkIDAsdHlwZTp0eXBlb2YgdC50eXBlPT0ic3RyaW5nIj90LnR5cGU6dm9pZCAwLGZldGNoUHJpb3JpdHk6dHlwZW9mIHQuZmV0Y2hQcmlvcml0eT09InN0cmluZyI/dC5mZXRjaFByaW9yaXR5OnZvaWQgMCxyZWZlcnJlclBvbGljeTp0eXBlb2YgdC5yZWZlcnJlclBvbGljeT09InN0cmluZyI/dC5yZWZlcnJlclBvbGljeTp2b2lkIDAsaW1hZ2VTcmNTZXQ6dHlwZW9mIHQuaW1hZ2VTcmNTZXQ9PSJzdHJpbmciP3QuaW1hZ2VTcmNTZXQ6dm9pZCAwLGltYWdlU2l6ZXM6dHlwZW9mIHQuaW1hZ2VTaXplcz09InN0cmluZyI/dC5pbWFnZVNpemVzOnZvaWQgMCxtZWRpYTp0eXBlb2YgdC5tZWRpYT09InN0cmluZyI/dC5tZWRpYTp2b2lkIDB9KX19O2JsLnByZWxvYWRNb2R1bGU9ZnVuY3Rpb24obCx0KXtpZih0eXBlb2YgbD09InN0cmluZyIpaWYodCl7dmFyIGE9X3UodC5hcyx0LmNyb3NzT3JpZ2luKTtnbC5kLm0obCx7YXM6dHlwZW9mIHQuYXM9PSJzdHJpbmciJiZ0LmFzIT09InNjcmlwdCI/dC5hczp2b2lkIDAsY3Jvc3NPcmlnaW46YSxpbnRlZ3JpdHk6dHlwZW9mIHQuaW50ZWdyaXR5PT0ic3RyaW5nIj90LmludGVncml0eTp2b2lkIDB9KX1lbHNlIGdsLmQubShsKX07YmwucmVxdWVzdEZvcm1SZXNldD1mdW5jdGlvbihsKXtnbC5kLnIobCl9O2JsLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZ1bmN0aW9uKGwsdCl7cmV0dXJuIGwodCl9O2JsLnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihsLHQsYSl7cmV0dXJuIHplLkgudXNlRm9ybVN0YXRlKGwsdCxhKX07YmwudXNlRm9ybVN0YXR1cz1mdW5jdGlvbigpe3JldHVybiB6ZS5ILnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCl9O2JsLnZlcnNpb249IjE5LjIuNiJ9KTt2YXIgVW89bHQoKFV2LERvKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfbygpe2lmKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXz4idSJ8fHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UhPSJmdW5jdGlvbiIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoX28pfWNhdGNoKGwpe2NvbnNvbGUuZXJyb3IobCl9fV9vKCksRG8uZXhwb3J0cz1PbygpfSk7dmFyIFptPWx0KGxpPT57InVzZSBzdHJpY3QiO3ZhciBjbD1obygpLGEwPU91KCksSGQ9VW8oKTtmdW5jdGlvbiBwKGwpe3ZhciB0PSJodHRwczovL3JlYWN0LmRldi9lcnJvcnMvIitsO2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7dCs9Ij9hcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzWzFdKTtmb3IodmFyIGE9MjthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKXQrPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1thXSl9cmV0dXJuIk1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2wrIjsgdmlzaXQgIit0KyIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiJ9ZnVuY3Rpb24gZTAobCl7cmV0dXJuISghbHx8bC5ub2RlVHlwZSE9PTEmJmwubm9kZVR5cGUhPT05JiZsLm5vZGVUeXBlIT09MTEpfWZ1bmN0aW9uIGZ1KGwpe3ZhciB0PWwsYT1sO2lmKGwuYWx0ZXJuYXRlKWZvcig7dC5yZXR1cm47KXQ9dC5yZXR1cm47ZWxzZXtsPXQ7ZG8gdD1sLCh0LmZsYWdzJjQwOTgpIT09MCYmKGE9dC5yZXR1cm4pLGw9dC5yZXR1cm47d2hpbGUobCl9cmV0dXJuIHQudGFnPT09Mz9hOm51bGx9ZnVuY3Rpb24gdTAobCl7aWYobC50YWc9PT0xMyl7dmFyIHQ9bC5tZW1vaXplZFN0YXRlO2lmKHQ9PT1udWxsJiYobD1sLmFsdGVybmF0ZSxsIT09bnVsbCYmKHQ9bC5tZW1vaXplZFN0YXRlKSksdCE9PW51bGwpcmV0dXJuIHQuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuMChsKXtpZihsLnRhZz09PTMxKXt2YXIgdD1sLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihsPWwuYWx0ZXJuYXRlLGwhPT1udWxsJiYodD1sLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIEhvKGwpe2lmKGZ1KGwpIT09bCl0aHJvdyBFcnJvcihwKDE4OCkpfWZ1bmN0aW9uIE5kKGwpe3ZhciB0PWwuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PWZ1KGwpLHQ9PT1udWxsKXRocm93IEVycm9yKHAoMTg4KSk7cmV0dXJuIHQhPT1sP251bGw6bH1mb3IodmFyIGE9bCxlPXQ7Oyl7dmFyIHU9YS5yZXR1cm47aWYodT09PW51bGwpYnJlYWs7dmFyIG49dS5hbHRlcm5hdGU7aWYobj09PW51bGwpe2lmKGU9dS5yZXR1cm4sZSE9PW51bGwpe2E9ZTtjb250aW51ZX1icmVha31pZih1LmNoaWxkPT09bi5jaGlsZCl7Zm9yKG49dS5jaGlsZDtuOyl7aWYobj09PWEpcmV0dXJuIEhvKHUpLGw7aWYobj09PWUpcmV0dXJuIEhvKHUpLHQ7bj1uLnNpYmxpbmd9dGhyb3cgRXJyb3IocCgxODgpKX1pZihhLnJldHVybiE9PWUucmV0dXJuKWE9dSxlPW47ZWxzZXtmb3IodmFyIGk9ITEsYz11LmNoaWxkO2M7KXtpZihjPT09YSl7aT0hMCxhPXUsZT1uO2JyZWFrfWlmKGM9PT1lKXtpPSEwLGU9dSxhPW47YnJlYWt9Yz1jLnNpYmxpbmd9aWYoIWkpe2ZvcihjPW4uY2hpbGQ7Yzspe2lmKGM9PT1hKXtpPSEwLGE9bixlPXU7YnJlYWt9aWYoYz09PWUpe2k9ITAsZT1uLGE9dTticmVha31jPWMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihwKDE4OSkpfX1pZihhLmFsdGVybmF0ZSE9PWUpdGhyb3cgRXJyb3IocCgxOTApKX1pZihhLnRhZyE9PTMpdGhyb3cgRXJyb3IocCgxODgpKTtyZXR1cm4gYS5zdGF0ZU5vZGUuY3VycmVudD09PWE/bDp0fWZ1bmN0aW9uIGkwKGwpe3ZhciB0PWwudGFnO2lmKHQ9PT01fHx0PT09MjZ8fHQ9PT0yN3x8dD09PTYpcmV0dXJuIGw7Zm9yKGw9bC5jaGlsZDtsIT09bnVsbDspe2lmKHQ9aTAobCksdCE9PW51bGwpcmV0dXJuIHQ7bD1sLnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyICQ9T2JqZWN0LmFzc2lnbixDZD1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksRHU9U3ltYm9sLmZvcigicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnQiKSxVZT1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxSYT1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLGMwPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksZWM9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxmMD1TeW1ib2wuZm9yKCJyZWFjdC5jb25zdW1lciIpLHl0PVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSxJYz1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLHVjPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksbmM9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpLFBjPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxIdD1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksaWM9U3ltYm9sLmZvcigicmVhY3QuYWN0aXZpdHkiKSxSZD1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsIiksTm89U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIEFlKGwpe3JldHVybiBsPT09bnVsbHx8dHlwZW9mIGwhPSJvYmplY3QiP251bGw6KGw9Tm8mJmxbTm9dfHxsWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpudWxsKX12YXIgQmQ9U3ltYm9sLmZvcigicmVhY3QuY2xpZW50LnJlZmVyZW5jZSIpO2Z1bmN0aW9uIGNjKGwpe2lmKGw9PW51bGwpcmV0dXJuIG51bGw7aWYodHlwZW9mIGw9PSJmdW5jdGlvbiIpcmV0dXJuIGwuJCR0eXBlb2Y9PT1CZD9udWxsOmwuZGlzcGxheU5hbWV8fGwubmFtZXx8bnVsbDtpZih0eXBlb2YgbD09InN0cmluZyIpcmV0dXJuIGw7c3dpdGNoKGwpe2Nhc2UgUmE6cmV0dXJuIkZyYWdtZW50IjtjYXNlIGVjOnJldHVybiJQcm9maWxlciI7Y2FzZSBjMDpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSB1YzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgbmM6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSBpYzpyZXR1cm4iQWN0aXZpdHkifWlmKHR5cGVvZiBsPT0ib2JqZWN0Iilzd2l0Y2gobC4kJHR5cGVvZil7Y2FzZSBVZTpyZXR1cm4iUG9ydGFsIjtjYXNlIHl0OnJldHVybiBsLmRpc3BsYXlOYW1lfHwiQ29udGV4dCI7Y2FzZSBmMDpyZXR1cm4obC5fY29udGV4dC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIEljOnZhciB0PWwucmVuZGVyO3JldHVybiBsPWwuZGlzcGxheU5hbWUsbHx8KGw9dC5kaXNwbGF5TmFtZXx8dC5uYW1lfHwiIixsPWwhPT0iIj8iRm9yd2FyZFJlZigiK2wrIikiOiJGb3J3YXJkUmVmIiksbDtjYXNlIFBjOnJldHVybiB0PWwuZGlzcGxheU5hbWV8fG51bGwsdCE9PW51bGw/dDpjYyhsLnR5cGUpfHwiTWVtbyI7Y2FzZSBIdDp0PWwuX3BheWxvYWQsbD1sLl9pbml0O3RyeXtyZXR1cm4gY2MobCh0KSl9Y2F0Y2h7fX1yZXR1cm4gbnVsbH12YXIgSGU9QXJyYXkuaXNBcnJheSxPPWEwLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxHPUhkLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxvYT17cGVuZGluZzohMSxkYXRhOm51bGwsbWV0aG9kOm51bGwsYWN0aW9uOm51bGx9LGZjPVtdLEJhPS0xO2Z1bmN0aW9uIGl0KGwpe3JldHVybntjdXJyZW50Omx9fWZ1bmN0aW9uIHNsKGwpezA+QmF8fChsLmN1cnJlbnQ9ZmNbQmFdLGZjW0JhXT1udWxsLEJhLS0pfWZ1bmN0aW9uIEsobCx0KXtCYSsrLGZjW0JhXT1sLmN1cnJlbnQsbC5jdXJyZW50PXR9dmFyIG50PWl0KG51bGwpLFdlPWl0KG51bGwpLFp0PWl0KG51bGwpLG9uPWl0KG51bGwpO2Z1bmN0aW9uIHNuKGwsdCl7c3dpdGNoKEsoWnQsdCksSyhXZSxsKSxLKG50LG51bGwpLHQubm9kZVR5cGUpe2Nhc2UgOTpjYXNlIDExOmw9KGw9dC5kb2N1bWVudEVsZW1lbnQpJiYobD1sLm5hbWVzcGFjZVVSSSk/WHMobCk6MDticmVhaztkZWZhdWx0OmlmKGw9dC50YWdOYW1lLHQ9dC5uYW1lc3BhY2VVUkkpdD1Ycyh0KSxsPV9tKHQsbCk7ZWxzZSBzd2l0Y2gobCl7Y2FzZSJzdmciOmw9MTticmVhaztjYXNlIm1hdGgiOmw9MjticmVhaztkZWZhdWx0Omw9MH19c2wobnQpLEsobnQsbCl9ZnVuY3Rpb24gUGEoKXtzbChudCksc2woV2UpLHNsKFp0KX1mdW5jdGlvbiBvYyhsKXtsLm1lbW9pemVkU3RhdGUhPT1udWxsJiZLKG9uLGwpO3ZhciB0PW50LmN1cnJlbnQsYT1fbSh0LGwudHlwZSk7dCE9PWEmJihLKFdlLGwpLEsobnQsYSkpfWZ1bmN0aW9uIG1uKGwpe1dlLmN1cnJlbnQ9PT1sJiYoc2wobnQpLHNsKFdlKSksb24uY3VycmVudD09PWwmJihzbChvbiksbnUuX2N1cnJlbnRWYWx1ZT1vYSl9dmFyIE1pLENvO2Z1bmN0aW9uIG5hKGwpe2lmKE1pPT09dm9pZCAwKXRyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGEpe3ZhciB0PWEuc3RhY2sudHJpbSgpLm1hdGNoKC9cbiggKihhdCApPykvKTtNaT10JiZ0WzFdfHwiIixDbz0tMTxhLnN0YWNrLmluZGV4T2YoYAogICAgYXRgKT8iICg8YW5vbnltb3VzPikiOi0xPGEuc3RhY2suaW5kZXhPZigiQCIpPyJAdW5rbm93bjowOjAiOiIifXJldHVybmAKYCtNaStsK0NvfXZhciBUaT0hMTtmdW5jdGlvbiB4aShsLHQpe2lmKCFsfHxUaSlyZXR1cm4iIjtUaT0hMDt2YXIgYT1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e3ZhciBlPXtEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6ZnVuY3Rpb24oKXt0cnl7aWYodCl7dmFyIHk9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5wcm90b3R5cGUsInByb3BzIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KSx0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoeSxbXSl9Y2F0Y2gocil7dmFyIG09cn1SZWZsZWN0LmNvbnN0cnVjdChsLFtdLHkpfWVsc2V7dHJ5e3kuY2FsbCgpfWNhdGNoKHIpe209cn1sLmNhbGwoeS5wcm90b3R5cGUpfX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKHIpe209cn0oeT1sKCkpJiZ0eXBlb2YgeS5jYXRjaD09ImZ1bmN0aW9uIiYmeS5jYXRjaChmdW5jdGlvbigpe30pfX1jYXRjaChyKXtpZihyJiZtJiZ0eXBlb2Ygci5zdGFjaz09InN0cmluZyIpcmV0dXJuW3Iuc3RhY2ssbS5zdGFja119cmV0dXJuW251bGwsbnVsbF19fTtlLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZT0iRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Ijt2YXIgdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCJuYW1lIik7dSYmdS5jb25maWd1cmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwibmFtZSIse3ZhbHVlOiJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QifSk7dmFyIG49ZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxpPW5bMF0sYz1uWzFdO2lmKGkmJmMpe3ZhciBmPWkuc3BsaXQoYApgKSxkPWMuc3BsaXQoYApgKTtmb3IodT1lPTA7ZTxmLmxlbmd0aCYmIWZbZV0uaW5jbHVkZXMoIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCIpOyllKys7Zm9yKDt1PGQubGVuZ3RoJiYhZFt1XS5pbmNsdWRlcygiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Iik7KXUrKztpZihlPT09Zi5sZW5ndGh8fHU9PT1kLmxlbmd0aClmb3IoZT1mLmxlbmd0aC0xLHU9ZC5sZW5ndGgtMTsxPD1lJiYwPD11JiZmW2VdIT09ZFt1XTspdS0tO2Zvcig7MTw9ZSYmMDw9dTtlLS0sdS0tKWlmKGZbZV0hPT1kW3VdKXtpZihlIT09MXx8dSE9PTEpZG8gaWYoZS0tLHUtLSwwPnV8fGZbZV0hPT1kW3VdKXt2YXIgdj1gCmArZltlXS5yZXBsYWNlKCIgYXQgbmV3ICIsIiBhdCAiKTtyZXR1cm4gbC5kaXNwbGF5TmFtZSYmdi5pbmNsdWRlcygiPGFub255bW91cz4iKSYmKHY9di5yZXBsYWNlKCI8YW5vbnltb3VzPiIsbC5kaXNwbGF5TmFtZSkpLHZ9d2hpbGUoMTw9ZSYmMDw9dSk7YnJlYWt9fX1maW5hbGx5e1RpPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPWF9cmV0dXJuKGE9bD9sLmRpc3BsYXlOYW1lfHxsLm5hbWU6IiIpP25hKGEpOiIifWZ1bmN0aW9uIHFkKGwsdCl7c3dpdGNoKGwudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBuYShsLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIG5hKCJMYXp5Iik7Y2FzZSAxMzpyZXR1cm4gbC5jaGlsZCE9PXQmJnQhPT1udWxsP25hKCJTdXNwZW5zZSBGYWxsYmFjayIpOm5hKCJTdXNwZW5zZSIpO2Nhc2UgMTk6cmV0dXJuIG5hKCJTdXNwZW5zZUxpc3QiKTtjYXNlIDA6Y2FzZSAxNTpyZXR1cm4geGkobC50eXBlLCExKTtjYXNlIDExOnJldHVybiB4aShsLnR5cGUucmVuZGVyLCExKTtjYXNlIDE6cmV0dXJuIHhpKGwudHlwZSwhMCk7Y2FzZSAzMTpyZXR1cm4gbmEoIkFjdGl2aXR5Iik7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gUm8obCl7dHJ5e3ZhciB0PSIiLGE9bnVsbDtkbyB0Kz1xZChsLGEpLGE9bCxsPWwucmV0dXJuO3doaWxlKGwpO3JldHVybiB0fWNhdGNoKGUpe3JldHVybmAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtlLm1lc3NhZ2UrYApgK2Uuc3RhY2t9fXZhciBzYz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGxmPWNsLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssT2k9Y2wudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssWWQ9Y2wudW5zdGFibGVfc2hvdWxkWWllbGQsR2Q9Y2wudW5zdGFibGVfcmVxdWVzdFBhaW50LE5sPWNsLnVuc3RhYmxlX25vdyxYZD1jbC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxvMD1jbC51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxzMD1jbC51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxkbj1jbC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxRZD1jbC51bnN0YWJsZV9Mb3dQcmlvcml0eSxtMD1jbC51bnN0YWJsZV9JZGxlUHJpb3JpdHksamQ9Y2wubG9nLFpkPWNsLnVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlLG91PW51bGwsQ2w9bnVsbDtmdW5jdGlvbiBZdChsKXtpZih0eXBlb2YgamQ9PSJmdW5jdGlvbiImJlpkKGwpLENsJiZ0eXBlb2YgQ2wuc2V0U3RyaWN0TW9kZT09ImZ1bmN0aW9uIil0cnl7Q2wuc2V0U3RyaWN0TW9kZShvdSxsKX1jYXRjaHt9fXZhciBSbD1NYXRoLmNsejMyP01hdGguY2x6MzI6S2QsVmQ9TWF0aC5sb2csTGQ9TWF0aC5MTjI7ZnVuY3Rpb24gS2QobCl7cmV0dXJuIGw+Pj49MCxsPT09MD8zMjozMS0oVmQobCkvTGR8MCl8MH12YXIgVXU9MjU2LEh1PTI2MjE0NCxOdT00MTk0MzA0O2Z1bmN0aW9uIGlhKGwpe3ZhciB0PWwmNDI7aWYodCE9PTApcmV0dXJuIHQ7c3dpdGNoKGwmLWwpe2Nhc2UgMTpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiA0O2Nhc2UgODpyZXR1cm4gODtjYXNlIDE2OnJldHVybiAxNjtjYXNlIDMyOnJldHVybiAzMjtjYXNlIDY0OnJldHVybiA2NDtjYXNlIDEyODpyZXR1cm4gMTI4O2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpyZXR1cm4gbCYyNjE4ODg7Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gbCYzOTMyMTYwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnJldHVybiBsJjYyOTE0NTYwO2Nhc2UgNjcxMDg4NjQ6cmV0dXJuIDY3MTA4ODY0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMDtkZWZhdWx0OnJldHVybiBsfX1mdW5jdGlvbiBHbihsLHQsYSl7dmFyIGU9bC5wZW5kaW5nTGFuZXM7aWYoZT09PTApcmV0dXJuIDA7dmFyIHU9MCxuPWwuc3VzcGVuZGVkTGFuZXMsaT1sLnBpbmdlZExhbmVzO2w9bC53YXJtTGFuZXM7dmFyIGM9ZSYxMzQyMTc3Mjc7cmV0dXJuIGMhPT0wPyhlPWMmfm4sZSE9PTA/dT1pYShlKTooaSY9YyxpIT09MD91PWlhKGkpOmF8fChhPWMmfmwsYSE9PTAmJih1PWlhKGEpKSkpKTooYz1lJn5uLGMhPT0wP3U9aWEoYyk6aSE9PTA/dT1pYShpKTphfHwoYT1lJn5sLGEhPT0wJiYodT1pYShhKSkpKSx1PT09MD8wOnQhPT0wJiZ0IT09dSYmKHQmbik9PT0wJiYobj11Ji11LGE9dCYtdCxuPj1hfHxuPT09MzImJihhJjQxOTQwNDgpIT09MCk/dDp1fWZ1bmN0aW9uIHN1KGwsdCl7cmV0dXJuKGwucGVuZGluZ0xhbmVzJn4obC5zdXNwZW5kZWRMYW5lcyZ+bC5waW5nZWRMYW5lcykmdCk9PT0wfWZ1bmN0aW9uIEpkKGwsdCl7c3dpdGNoKGwpe2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgODpjYXNlIDY0OnJldHVybiB0KzI1MDtjYXNlIDE2OmNhc2UgMzI6Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIHQrNWUzO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOnJldHVybi0xO2Nhc2UgNjcxMDg4NjQ6Y2FzZSAxMzQyMTc3Mjg6Y2FzZSAyNjg0MzU0NTY6Y2FzZSA1MzY4NzA5MTI6Y2FzZSAxMDczNzQxODI0OnJldHVybi0xO2RlZmF1bHQ6cmV0dXJuLTF9fWZ1bmN0aW9uIGQwKCl7dmFyIGw9TnU7cmV0dXJuIE51PDw9MSwoTnUmNjI5MTQ1NjApPT09MCYmKE51PTQxOTQzMDQpLGx9ZnVuY3Rpb24gX2kobCl7Zm9yKHZhciB0PVtdLGE9MDszMT5hO2ErKyl0LnB1c2gobCk7cmV0dXJuIHR9ZnVuY3Rpb24gbXUobCx0KXtsLnBlbmRpbmdMYW5lc3w9dCx0IT09MjY4NDM1NDU2JiYobC5zdXNwZW5kZWRMYW5lcz0wLGwucGluZ2VkTGFuZXM9MCxsLndhcm1MYW5lcz0wKX1mdW5jdGlvbiB3ZChsLHQsYSxlLHUsbil7dmFyIGk9bC5wZW5kaW5nTGFuZXM7bC5wZW5kaW5nTGFuZXM9YSxsLnN1c3BlbmRlZExhbmVzPTAsbC5waW5nZWRMYW5lcz0wLGwud2FybUxhbmVzPTAsbC5leHBpcmVkTGFuZXMmPWEsbC5lbnRhbmdsZWRMYW5lcyY9YSxsLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj1hLGwuc2hlbGxTdXNwZW5kQ291bnRlcj0wO3ZhciBjPWwuZW50YW5nbGVtZW50cyxmPWwuZXhwaXJhdGlvblRpbWVzLGQ9bC5oaWRkZW5VcGRhdGVzO2ZvcihhPWkmfmE7MDxhOyl7dmFyIHY9MzEtUmwoYSkseT0xPDx2O2Nbdl09MCxmW3ZdPS0xO3ZhciBtPWRbdl07aWYobSE9PW51bGwpZm9yKGRbdl09bnVsbCx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciByPW1bdl07ciE9PW51bGwmJihyLmxhbmUmPS01MzY4NzA5MTMpfWEmPX55fWUhPT0wJiZoMChsLGUsMCksbiE9PTAmJnU9PT0wJiZsLnRhZyE9PTAmJihsLnN1c3BlbmRlZExhbmVzfD1uJn4oaSZ+dCkpfWZ1bmN0aW9uIGgwKGwsdCxhKXtsLnBlbmRpbmdMYW5lc3w9dCxsLnN1c3BlbmRlZExhbmVzJj1+dDt2YXIgZT0zMS1SbCh0KTtsLmVudGFuZ2xlZExhbmVzfD10LGwuZW50YW5nbGVtZW50c1tlXT1sLmVudGFuZ2xlbWVudHNbZV18MTA3Mzc0MTgyNHxhJjI2MTkzMH1mdW5jdGlvbiByMChsLHQpe3ZhciBhPWwuZW50YW5nbGVkTGFuZXN8PXQ7Zm9yKGw9bC5lbnRhbmdsZW1lbnRzO2E7KXt2YXIgZT0zMS1SbChhKSx1PTE8PGU7dSZ0fGxbZV0mdCYmKGxbZV18PXQpLGEmPX51fX1mdW5jdGlvbiB2MChsLHQpe3ZhciBhPXQmLXQ7cmV0dXJuIGE9KGEmNDIpIT09MD8xOnRmKGEpLChhJihsLnN1c3BlbmRlZExhbmVzfHQpKSE9PTA/MDphfWZ1bmN0aW9uIHRmKGwpe3N3aXRjaChsKXtjYXNlIDI6bD0xO2JyZWFrO2Nhc2UgODpsPTQ7YnJlYWs7Y2FzZSAzMjpsPTE2O2JyZWFrO2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmw9MTI4O2JyZWFrO2Nhc2UgMjY4NDM1NDU2Omw9MTM0MjE3NzI4O2JyZWFrO2RlZmF1bHQ6bD0wfXJldHVybiBsfWZ1bmN0aW9uIGFmKGwpe3JldHVybiBsJj0tbCwyPGw/ODxsPyhsJjEzNDIxNzcyNykhPT0wPzMyOjI2ODQzNTQ1Njo4OjJ9ZnVuY3Rpb24geTAoKXt2YXIgbD1HLnA7cmV0dXJuIGwhPT0wP2w6KGw9d2luZG93LmV2ZW50LGw9PT12b2lkIDA/MzI6WG0obC50eXBlKSl9ZnVuY3Rpb24gQm8obCx0KXt2YXIgYT1HLnA7dHJ5e3JldHVybiBHLnA9bCx0KCl9ZmluYWxseXtHLnA9YX19dmFyIHRhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGRsPSJfX3JlYWN0RmliZXIkIit0YSxUbD0iX19yZWFjdFByb3BzJCIrdGEsc2U9Il9fcmVhY3RDb250YWluZXIkIit0YSxtYz0iX19yZWFjdEV2ZW50cyQiK3RhLFdkPSJfX3JlYWN0TGlzdGVuZXJzJCIrdGEsJGQ9Il9fcmVhY3RIYW5kbGVzJCIrdGEscW89Il9fcmVhY3RSZXNvdXJjZXMkIit0YSxkdT0iX19yZWFjdE1hcmtlciQiK3RhO2Z1bmN0aW9uIGVmKGwpe2RlbGV0ZSBsW2RsXSxkZWxldGUgbFtUbF0sZGVsZXRlIGxbbWNdLGRlbGV0ZSBsW1dkXSxkZWxldGUgbFskZF19ZnVuY3Rpb24gcWEobCl7dmFyIHQ9bFtkbF07aWYodClyZXR1cm4gdDtmb3IodmFyIGE9bC5wYXJlbnROb2RlO2E7KXtpZih0PWFbc2VdfHxhW2RsXSl7aWYoYT10LmFsdGVybmF0ZSx0LmNoaWxkIT09bnVsbHx8YSE9PW51bGwmJmEuY2hpbGQhPT1udWxsKWZvcihsPUxzKGwpO2whPT1udWxsOyl7aWYoYT1sW2RsXSlyZXR1cm4gYTtsPUxzKGwpfXJldHVybiB0fWw9YSxhPWwucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtZShsKXtpZihsPWxbZGxdfHxsW3NlXSl7dmFyIHQ9bC50YWc7aWYodD09PTV8fHQ9PT02fHx0PT09MTN8fHQ9PT0zMXx8dD09PTI2fHx0PT09Mjd8fHQ9PT0zKXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIE5lKGwpe3ZhciB0PWwudGFnO2lmKHQ9PT01fHx0PT09MjZ8fHQ9PT0yN3x8dD09PTYpcmV0dXJuIGwuc3RhdGVOb2RlO3Rocm93IEVycm9yKHAoMzMpKX1mdW5jdGlvbiBKYShsKXt2YXIgdD1sW3FvXTtyZXR1cm4gdHx8KHQ9bFtxb109e2hvaXN0YWJsZVN0eWxlczpuZXcgTWFwLGhvaXN0YWJsZVNjcmlwdHM6bmV3IE1hcH0pLHR9ZnVuY3Rpb24gb2wobCl7bFtkdV09ITB9dmFyIGcwPW5ldyBTZXQsYjA9e307ZnVuY3Rpb24gcGEobCx0KXtsZShsLHQpLGxlKGwrIkNhcHR1cmUiLHQpfWZ1bmN0aW9uIGxlKGwsdCl7Zm9yKGIwW2xdPXQsbD0wO2w8dC5sZW5ndGg7bCsrKWcwLmFkZCh0W2xdKX12YXIga2Q9UmVnRXhwKCJeWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokIiksWW89e30sR289e307ZnVuY3Rpb24gRmQobCl7cmV0dXJuIHNjLmNhbGwoR28sbCk/ITA6c2MuY2FsbChZbyxsKT8hMTprZC50ZXN0KGwpP0dvW2xdPSEwOihZb1tsXT0hMCwhMSl9ZnVuY3Rpb24gd3UobCx0LGEpe2lmKEZkKHQpKWlmKGE9PT1udWxsKWwucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7c3dpdGNoKHR5cGVvZiBhKXtjYXNlInVuZGVmaW5lZCI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOmwucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybjtjYXNlImJvb2xlYW4iOnZhciBlPXQudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO2lmKGUhPT0iZGF0YS0iJiZlIT09ImFyaWEtIil7bC5yZW1vdmVBdHRyaWJ1dGUodCk7cmV0dXJufX1sLnNldEF0dHJpYnV0ZSh0LCIiK2EpfX1mdW5jdGlvbiBDdShsLHQsYSl7aWYoYT09PW51bGwpbC5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIGEpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6Y2FzZSJib29sZWFuIjpsLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm59bC5zZXRBdHRyaWJ1dGUodCwiIithKX19ZnVuY3Rpb24gb3QobCx0LGEsZSl7aWYoZT09PW51bGwpbC5yZW1vdmVBdHRyaWJ1dGUoYSk7ZWxzZXtzd2l0Y2godHlwZW9mIGUpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6Y2FzZSJib29sZWFuIjpsLnJlbW92ZUF0dHJpYnV0ZShhKTtyZXR1cm59bC5zZXRBdHRyaWJ1dGVOUyh0LGEsIiIrZSl9fWZ1bmN0aW9uIFFsKGwpe3N3aXRjaCh0eXBlb2YgbCl7Y2FzZSJiaWdpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuIGw7Y2FzZSJvYmplY3QiOnJldHVybiBsO2RlZmF1bHQ6cmV0dXJuIiJ9fWZ1bmN0aW9uIHAwKGwpe3ZhciB0PWwudHlwZTtyZXR1cm4obD1sLm5vZGVOYW1lKSYmbC50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmKHQ9PT0iY2hlY2tib3gifHx0PT09InJhZGlvIil9ZnVuY3Rpb24gSWQobCx0LGEpe3ZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsdCk7aWYoIWwuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS5zZXQ9PSJmdW5jdGlvbiIpe3ZhciB1PWUuZ2V0LG49ZS5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaSl7YT0iIitpLG4uY2FsbCh0aGlzLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHQse2VudW1lcmFibGU6ZS5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldFZhbHVlOmZ1bmN0aW9uKGkpe2E9IiIraX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7bC5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGxbdF19fX19ZnVuY3Rpb24gZGMobCl7aWYoIWwuX3ZhbHVlVHJhY2tlcil7dmFyIHQ9cDAobCk/ImNoZWNrZWQiOiJ2YWx1ZSI7bC5fdmFsdWVUcmFja2VyPUlkKGwsdCwiIitsW3RdKX19ZnVuY3Rpb24gUzAobCl7aWYoIWwpcmV0dXJuITE7dmFyIHQ9bC5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciBhPXQuZ2V0VmFsdWUoKSxlPSIiO3JldHVybiBsJiYoZT1wMChsKT9sLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6bC52YWx1ZSksbD1lLGwhPT1hPyh0LnNldFZhbHVlKGwpLCEwKTohMX1mdW5jdGlvbiBobihsKXtpZihsPWx8fCh0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMCksdHlwZW9mIGw+InUiKXJldHVybiBudWxsO3RyeXtyZXR1cm4gbC5hY3RpdmVFbGVtZW50fHxsLmJvZHl9Y2F0Y2h7cmV0dXJuIGwuYm9keX19dmFyIFBkPS9bXG4iXFxdL2c7ZnVuY3Rpb24gVmwobCl7cmV0dXJuIGwucmVwbGFjZShQZCxmdW5jdGlvbih0KXtyZXR1cm4iXFwiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikrIiAifSl9ZnVuY3Rpb24gaGMobCx0LGEsZSx1LG4saSxjKXtsLm5hbWU9IiIsaSE9bnVsbCYmdHlwZW9mIGkhPSJmdW5jdGlvbiImJnR5cGVvZiBpIT0ic3ltYm9sIiYmdHlwZW9mIGkhPSJib29sZWFuIj9sLnR5cGU9aTpsLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLHQhPW51bGw/aT09PSJudW1iZXIiPyh0PT09MCYmbC52YWx1ZT09PSIifHxsLnZhbHVlIT10KSYmKGwudmFsdWU9IiIrUWwodCkpOmwudmFsdWUhPT0iIitRbCh0KSYmKGwudmFsdWU9IiIrUWwodCkpOmkhPT0ic3VibWl0IiYmaSE9PSJyZXNldCJ8fGwucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpLHQhPW51bGw/cmMobCxpLFFsKHQpKTphIT1udWxsP3JjKGwsaSxRbChhKSk6ZSE9bnVsbCYmbC5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIiksdT09bnVsbCYmbiE9bnVsbCYmKGwuZGVmYXVsdENoZWNrZWQ9ISFuKSx1IT1udWxsJiYobC5jaGVja2VkPXUmJnR5cGVvZiB1IT0iZnVuY3Rpb24iJiZ0eXBlb2YgdSE9InN5bWJvbCIpLGMhPW51bGwmJnR5cGVvZiBjIT0iZnVuY3Rpb24iJiZ0eXBlb2YgYyE9InN5bWJvbCImJnR5cGVvZiBjIT0iYm9vbGVhbiI/bC5uYW1lPSIiK1FsKGMpOmwucmVtb3ZlQXR0cmlidXRlKCJuYW1lIil9ZnVuY3Rpb24gRTAobCx0LGEsZSx1LG4saSxjKXtpZihuIT1udWxsJiZ0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmdHlwZW9mIG4hPSJzeW1ib2wiJiZ0eXBlb2YgbiE9ImJvb2xlYW4iJiYobC50eXBlPW4pLHQhPW51bGx8fGEhPW51bGwpe2lmKCEobiE9PSJzdWJtaXQiJiZuIT09InJlc2V0Inx8dCE9bnVsbCkpe2RjKGwpO3JldHVybn1hPWEhPW51bGw/IiIrUWwoYSk6IiIsdD10IT1udWxsPyIiK1FsKHQpOmEsY3x8dD09PWwudmFsdWV8fChsLnZhbHVlPXQpLGwuZGVmYXVsdFZhbHVlPXR9ZT1lPz91LGU9dHlwZW9mIGUhPSJmdW5jdGlvbiImJnR5cGVvZiBlIT0ic3ltYm9sIiYmISFlLGwuY2hlY2tlZD1jP2wuY2hlY2tlZDohIWUsbC5kZWZhdWx0Q2hlY2tlZD0hIWUsaSE9bnVsbCYmdHlwZW9mIGkhPSJmdW5jdGlvbiImJnR5cGVvZiBpIT0ic3ltYm9sIiYmdHlwZW9mIGkhPSJib29sZWFuIiYmKGwubmFtZT1pKSxkYyhsKX1mdW5jdGlvbiByYyhsLHQsYSl7dD09PSJudW1iZXIiJiZobihsLm93bmVyRG9jdW1lbnQpPT09bHx8bC5kZWZhdWx0VmFsdWU9PT0iIithfHwobC5kZWZhdWx0VmFsdWU9IiIrYSl9ZnVuY3Rpb24gd2EobCx0LGEsZSl7aWYobD1sLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKyl0WyIkIithW3VdXT0hMDtmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXU9dC5oYXNPd25Qcm9wZXJ0eSgiJCIrbFthXS52YWx1ZSksbFthXS5zZWxlY3RlZCE9PXUmJihsW2FdLnNlbGVjdGVkPXUpLHUmJmUmJihsW2FdLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3IoYT0iIitRbChhKSx0PW51bGwsdT0wO3U8bC5sZW5ndGg7dSsrKXtpZihsW3VdLnZhbHVlPT09YSl7bFt1XS5zZWxlY3RlZD0hMCxlJiYobFt1XS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8bFt1XS5kaXNhYmxlZHx8KHQ9bFt1XSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gejAobCx0LGEpe2lmKHQhPW51bGwmJih0PSIiK1FsKHQpLHQhPT1sLnZhbHVlJiYobC52YWx1ZT10KSxhPT1udWxsKSl7bC5kZWZhdWx0VmFsdWUhPT10JiYobC5kZWZhdWx0VmFsdWU9dCk7cmV0dXJufWwuZGVmYXVsdFZhbHVlPWEhPW51bGw/IiIrUWwoYSk6IiJ9ZnVuY3Rpb24gQTAobCx0LGEsZSl7aWYodD09bnVsbCl7aWYoZSE9bnVsbCl7aWYoYSE9bnVsbCl0aHJvdyBFcnJvcihwKDkyKSk7aWYoSGUoZSkpe2lmKDE8ZS5sZW5ndGgpdGhyb3cgRXJyb3IocCg5MykpO2U9ZVswXX1hPWV9YT09bnVsbCYmKGE9IiIpLHQ9YX1hPVFsKHQpLGwuZGVmYXVsdFZhbHVlPWEsZT1sLnRleHRDb250ZW50LGU9PT1hJiZlIT09IiImJmUhPT1udWxsJiYobC52YWx1ZT1lKSxkYyhsKX1mdW5jdGlvbiB0ZShsLHQpe2lmKHQpe3ZhciBhPWwuZmlyc3RDaGlsZDtpZihhJiZhPT09bC5sYXN0Q2hpbGQmJmEubm9kZVR5cGU9PT0zKXthLm5vZGVWYWx1ZT10O3JldHVybn19bC50ZXh0Q29udGVudD10fXZhciBsaD1uZXcgU2V0KCJhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXAiLnNwbGl0KCIgIikpO2Z1bmN0aW9uIFhvKGwsdCxhKXt2YXIgZT10LmluZGV4T2YoIi0tIik9PT0wO2E9PW51bGx8fHR5cGVvZiBhPT0iYm9vbGVhbiJ8fGE9PT0iIj9lP2wuc2V0UHJvcGVydHkodCwiIik6dD09PSJmbG9hdCI/bC5jc3NGbG9hdD0iIjpsW3RdPSIiOmU/bC5zZXRQcm9wZXJ0eSh0LGEpOnR5cGVvZiBhIT0ibnVtYmVyInx8YT09PTB8fGxoLmhhcyh0KT90PT09ImZsb2F0Ij9sLmNzc0Zsb2F0PWE6bFt0XT0oIiIrYSkudHJpbSgpOmxbdF09YSsicHgifWZ1bmN0aW9uIE0wKGwsdCxhKXtpZih0IT1udWxsJiZ0eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgRXJyb3IocCg2MikpO2lmKGw9bC5zdHlsZSxhIT1udWxsKXtmb3IodmFyIGUgaW4gYSkhYS5oYXNPd25Qcm9wZXJ0eShlKXx8dCE9bnVsbCYmdC5oYXNPd25Qcm9wZXJ0eShlKXx8KGUuaW5kZXhPZigiLS0iKT09PTA/bC5zZXRQcm9wZXJ0eShlLCIiKTplPT09ImZsb2F0Ij9sLmNzc0Zsb2F0PSIiOmxbZV09IiIpO2Zvcih2YXIgdSBpbiB0KWU9dFt1XSx0Lmhhc093blByb3BlcnR5KHUpJiZhW3VdIT09ZSYmWG8obCx1LGUpfWVsc2UgZm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmWG8obCxuLHRbbl0pfWZ1bmN0aW9uIHVmKGwpe2lmKGwuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuITE7c3dpdGNoKGwpe2Nhc2UiYW5ub3RhdGlvbi14bWwiOmNhc2UiY29sb3ItcHJvZmlsZSI6Y2FzZSJmb250LWZhY2UiOmNhc2UiZm9udC1mYWNlLXNyYyI6Y2FzZSJmb250LWZhY2UtdXJpIjpjYXNlImZvbnQtZmFjZS1mb3JtYXQiOmNhc2UiZm9udC1mYWNlLW5hbWUiOmNhc2UibWlzc2luZy1nbHlwaCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19dmFyIHRoPW5ldyBNYXAoW1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il0sWyJjcm9zc09yaWdpbiIsImNyb3Nzb3JpZ2luIl0sWyJhY2NlbnRIZWlnaHQiLCJhY2NlbnQtaGVpZ2h0Il0sWyJhbGlnbm1lbnRCYXNlbGluZSIsImFsaWdubWVudC1iYXNlbGluZSJdLFsiYXJhYmljRm9ybSIsImFyYWJpYy1mb3JtIl0sWyJiYXNlbGluZVNoaWZ0IiwiYmFzZWxpbmUtc2hpZnQiXSxbImNhcEhlaWdodCIsImNhcC1oZWlnaHQiXSxbImNsaXBQYXRoIiwiY2xpcC1wYXRoIl0sWyJjbGlwUnVsZSIsImNsaXAtcnVsZSJdLFsiY29sb3JJbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbiJdLFsiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycyIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyJdLFsiY29sb3JQcm9maWxlIiwiY29sb3ItcHJvZmlsZSJdLFsiY29sb3JSZW5kZXJpbmciLCJjb2xvci1yZW5kZXJpbmciXSxbImRvbWluYW50QmFzZWxpbmUiLCJkb21pbmFudC1iYXNlbGluZSJdLFsiZW5hYmxlQmFja2dyb3VuZCIsImVuYWJsZS1iYWNrZ3JvdW5kIl0sWyJmaWxsT3BhY2l0eSIsImZpbGwtb3BhY2l0eSJdLFsiZmlsbFJ1bGUiLCJmaWxsLXJ1bGUiXSxbImZsb29kQ29sb3IiLCJmbG9vZC1jb2xvciJdLFsiZmxvb2RPcGFjaXR5IiwiZmxvb2Qtb3BhY2l0eSJdLFsiZm9udEZhbWlseSIsImZvbnQtZmFtaWx5Il0sWyJmb250U2l6ZSIsImZvbnQtc2l6ZSJdLFsiZm9udFNpemVBZGp1c3QiLCJmb250LXNpemUtYWRqdXN0Il0sWyJmb250U3RyZXRjaCIsImZvbnQtc3RyZXRjaCJdLFsiZm9udFN0eWxlIiwiZm9udC1zdHlsZSJdLFsiZm9udFZhcmlhbnQiLCJmb250LXZhcmlhbnQiXSxbImZvbnRXZWlnaHQiLCJmb250LXdlaWdodCJdLFsiZ2x5cGhOYW1lIiwiZ2x5cGgtbmFtZSJdLFsiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwiLCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIl0sWyJnbHlwaE9yaWVudGF0aW9uVmVydGljYWwiLCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCJdLFsiaG9yaXpBZHZYIiwiaG9yaXotYWR2LXgiXSxbImhvcml6T3JpZ2luWCIsImhvcml6LW9yaWdpbi14Il0sWyJpbWFnZVJlbmRlcmluZyIsImltYWdlLXJlbmRlcmluZyJdLFsibGV0dGVyU3BhY2luZyIsImxldHRlci1zcGFjaW5nIl0sWyJsaWdodGluZ0NvbG9yIiwibGlnaHRpbmctY29sb3IiXSxbIm1hcmtlckVuZCIsIm1hcmtlci1lbmQiXSxbIm1hcmtlck1pZCIsIm1hcmtlci1taWQiXSxbIm1hcmtlclN0YXJ0IiwibWFya2VyLXN0YXJ0Il0sWyJvdmVybGluZVBvc2l0aW9uIiwib3ZlcmxpbmUtcG9zaXRpb24iXSxbIm92ZXJsaW5lVGhpY2tuZXNzIiwib3ZlcmxpbmUtdGhpY2tuZXNzIl0sWyJwYWludE9yZGVyIiwicGFpbnQtb3JkZXIiXSxbInBhbm9zZS0xIiwicGFub3NlLTEiXSxbInBvaW50ZXJFdmVudHMiLCJwb2ludGVyLWV2ZW50cyJdLFsicmVuZGVyaW5nSW50ZW50IiwicmVuZGVyaW5nLWludGVudCJdLFsic2hhcGVSZW5kZXJpbmciLCJzaGFwZS1yZW5kZXJpbmciXSxbInN0b3BDb2xvciIsInN0b3AtY29sb3IiXSxbInN0b3BPcGFjaXR5Iiwic3RvcC1vcGFjaXR5Il0sWyJzdHJpa2V0aHJvdWdoUG9zaXRpb24iLCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIl0sWyJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzIiwic3RyaWtldGhyb3VnaC10aGlja25lc3MiXSxbInN0cm9rZURhc2hhcnJheSIsInN0cm9rZS1kYXNoYXJyYXkiXSxbInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2UtZGFzaG9mZnNldCJdLFsic3Ryb2tlTGluZWNhcCIsInN0cm9rZS1saW5lY2FwIl0sWyJzdHJva2VMaW5lam9pbiIsInN0cm9rZS1saW5lam9pbiJdLFsic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZS1taXRlcmxpbWl0Il0sWyJzdHJva2VPcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiXSxbInN0cm9rZVdpZHRoIiwic3Ryb2tlLXdpZHRoIl0sWyJ0ZXh0QW5jaG9yIiwidGV4dC1hbmNob3IiXSxbInRleHREZWNvcmF0aW9uIiwidGV4dC1kZWNvcmF0aW9uIl0sWyJ0ZXh0UmVuZGVyaW5nIiwidGV4dC1yZW5kZXJpbmciXSxbInRyYW5zZm9ybU9yaWdpbiIsInRyYW5zZm9ybS1vcmlnaW4iXSxbInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lLXBvc2l0aW9uIl0sWyJ1bmRlcmxpbmVUaGlja25lc3MiLCJ1bmRlcmxpbmUtdGhpY2tuZXNzIl0sWyJ1bmljb2RlQmlkaSIsInVuaWNvZGUtYmlkaSJdLFsidW5pY29kZVJhbmdlIiwidW5pY29kZS1yYW5nZSJdLFsidW5pdHNQZXJFbSIsInVuaXRzLXBlci1lbSJdLFsidkFscGhhYmV0aWMiLCJ2LWFscGhhYmV0aWMiXSxbInZIYW5naW5nIiwidi1oYW5naW5nIl0sWyJ2SWRlb2dyYXBoaWMiLCJ2LWlkZW9ncmFwaGljIl0sWyJ2TWF0aGVtYXRpY2FsIiwidi1tYXRoZW1hdGljYWwiXSxbInZlY3RvckVmZmVjdCIsInZlY3Rvci1lZmZlY3QiXSxbInZlcnRBZHZZIiwidmVydC1hZHYteSJdLFsidmVydE9yaWdpblgiLCJ2ZXJ0LW9yaWdpbi14Il0sWyJ2ZXJ0T3JpZ2luWSIsInZlcnQtb3JpZ2luLXkiXSxbIndvcmRTcGFjaW5nIiwid29yZC1zcGFjaW5nIl0sWyJ3cml0aW5nTW9kZSIsIndyaXRpbmctbW9kZSJdLFsieG1sbnNYbGluayIsInhtbG5zOnhsaW5rIl0sWyJ4SGVpZ2h0IiwieC1oZWlnaHQiXV0pLGFoPS9eW1x1MDAwMC1cdTAwMUYgXSpqW1xyXG5cdF0qYVtcclxuXHRdKnZbXHJcblx0XSphW1xyXG5cdF0qc1tcclxuXHRdKmNbXHJcblx0XSpyW1xyXG5cdF0qaVtcclxuXHRdKnBbXHJcblx0XSp0W1xyXG5cdF0qOi9pO2Z1bmN0aW9uIFd1KGwpe3JldHVybiBhaC50ZXN0KCIiK2wpPyJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLicpIjpsfWZ1bmN0aW9uIGd0KCl7fXZhciB2Yz1udWxsO2Z1bmN0aW9uIG5mKGwpe3JldHVybiBsPWwudGFyZ2V0fHxsLnNyY0VsZW1lbnR8fHdpbmRvdyxsLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYobD1sLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSxsLm5vZGVUeXBlPT09Mz9sLnBhcmVudE5vZGU6bH12YXIgWWE9bnVsbCxXYT1udWxsO2Z1bmN0aW9uIFFvKGwpe3ZhciB0PW1lKGwpO2lmKHQmJihsPXQuc3RhdGVOb2RlKSl7dmFyIGE9bFtUbF18fG51bGw7bDpzd2l0Y2gobD10LnN0YXRlTm9kZSx0LnR5cGUpe2Nhc2UiaW5wdXQiOmlmKGhjKGwsYS52YWx1ZSxhLmRlZmF1bHRWYWx1ZSxhLmRlZmF1bHRWYWx1ZSxhLmNoZWNrZWQsYS5kZWZhdWx0Q2hlY2tlZCxhLnR5cGUsYS5uYW1lKSx0PWEubmFtZSxhLnR5cGU9PT0icmFkaW8iJiZ0IT1udWxsKXtmb3IoYT1sO2EucGFyZW50Tm9kZTspYT1hLnBhcmVudE5vZGU7Zm9yKGE9YS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPSInK1ZsKCIiK3QpKyciXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8YS5sZW5ndGg7dCsrKXt2YXIgZT1hW3RdO2lmKGUhPT1sJiZlLmZvcm09PT1sLmZvcm0pe3ZhciB1PWVbVGxdfHxudWxsO2lmKCF1KXRocm93IEVycm9yKHAoOTApKTtoYyhlLHUudmFsdWUsdS5kZWZhdWx0VmFsdWUsdS5kZWZhdWx0VmFsdWUsdS5jaGVja2VkLHUuZGVmYXVsdENoZWNrZWQsdS50eXBlLHUubmFtZSl9fWZvcih0PTA7dDxhLmxlbmd0aDt0KyspZT1hW3RdLGUuZm9ybT09PWwuZm9ybSYmUzAoZSl9YnJlYWsgbDtjYXNlInRleHRhcmVhIjp6MChsLGEudmFsdWUsYS5kZWZhdWx0VmFsdWUpO2JyZWFrIGw7Y2FzZSJzZWxlY3QiOnQ9YS52YWx1ZSx0IT1udWxsJiZ3YShsLCEhYS5tdWx0aXBsZSx0LCExKX19fXZhciBEaT0hMTtmdW5jdGlvbiBUMChsLHQsYSl7aWYoRGkpcmV0dXJuIGwodCxhKTtEaT0hMDt0cnl7dmFyIGU9bCh0KTtyZXR1cm4gZX1maW5hbGx5e2lmKERpPSExLChZYSE9PW51bGx8fFdhIT09bnVsbCkmJihrbigpLFlhJiYodD1ZYSxsPVdhLFdhPVlhPW51bGwsUW8odCksbCkpKWZvcih0PTA7dDxsLmxlbmd0aDt0KyspUW8obFt0XSl9fWZ1bmN0aW9uICRlKGwsdCl7dmFyIGE9bC5zdGF0ZU5vZGU7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7dmFyIGU9YVtUbF18fG51bGw7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7YT1lW3RdO2w6c3dpdGNoKHQpe2Nhc2Uib25DbGljayI6Y2FzZSJvbkNsaWNrQ2FwdHVyZSI6Y2FzZSJvbkRvdWJsZUNsaWNrIjpjYXNlIm9uRG91YmxlQ2xpY2tDYXB0dXJlIjpjYXNlIm9uTW91c2VEb3duIjpjYXNlIm9uTW91c2VEb3duQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlTW92ZSI6Y2FzZSJvbk1vdXNlTW92ZUNhcHR1cmUiOmNhc2Uib25Nb3VzZVVwIjpjYXNlIm9uTW91c2VVcENhcHR1cmUiOmNhc2Uib25Nb3VzZUVudGVyIjooZT0hZS5kaXNhYmxlZCl8fChsPWwudHlwZSxlPSEobD09PSJidXR0b24ifHxsPT09ImlucHV0Inx8bD09PSJzZWxlY3QifHxsPT09InRleHRhcmVhIikpLGw9IWU7YnJlYWsgbDtkZWZhdWx0Omw9ITF9aWYobClyZXR1cm4gbnVsbDtpZihhJiZ0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihwKDIzMSx0LHR5cGVvZiBhKSk7cmV0dXJuIGF9dmFyIHp0PSEodHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ+InUiKSx5Yz0hMTtpZih6dCl0cnl7RGE9e30sT2JqZWN0LmRlZmluZVByb3BlcnR5KERhLCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7eWM9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLERhLERhKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsRGEsRGEpfWNhdGNoe3ljPSExfXZhciBEYSxHdD1udWxsLGNmPW51bGwsJHU9bnVsbDtmdW5jdGlvbiB4MCgpe2lmKCR1KXJldHVybiAkdTt2YXIgbCx0PWNmLGE9dC5sZW5ndGgsZSx1PSJ2YWx1ZSJpbiBHdD9HdC52YWx1ZTpHdC50ZXh0Q29udGVudCxuPXUubGVuZ3RoO2ZvcihsPTA7bDxhJiZ0W2xdPT09dVtsXTtsKyspO3ZhciBpPWEtbDtmb3IoZT0xO2U8PWkmJnRbYS1lXT09PXVbbi1lXTtlKyspO3JldHVybiAkdT11LnNsaWNlKGwsMTxlPzEtZTp2b2lkIDApfWZ1bmN0aW9uIGt1KGwpe3ZhciB0PWwua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gbD8obD1sLmNoYXJDb2RlLGw9PT0wJiZ0PT09MTMmJihsPTEzKSk6bD10LGw9PT0xMCYmKGw9MTMpLDMyPD1sfHxsPT09MTM/bDowfWZ1bmN0aW9uIFJ1KCl7cmV0dXJuITB9ZnVuY3Rpb24gam8oKXtyZXR1cm4hMX1mdW5jdGlvbiB4bChsKXtmdW5jdGlvbiB0KGEsZSx1LG4saSl7dGhpcy5fcmVhY3ROYW1lPWEsdGhpcy5fdGFyZ2V0SW5zdD11LHRoaXMudHlwZT1lLHRoaXMubmF0aXZlRXZlbnQ9bix0aGlzLnRhcmdldD1pLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgYyBpbiBsKWwuaGFzT3duUHJvcGVydHkoYykmJihhPWxbY10sdGhpc1tjXT1hP2Eobik6bltjXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShuLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/bi5kZWZhdWx0UHJldmVudGVkOm4ucmV0dXJuVmFsdWU9PT0hMSk/UnU6am8sdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1qbyx0aGlzfXJldHVybiAkKHQucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTp0eXBlb2YgYS5yZXR1cm5WYWx1ZSE9InVua25vd24iJiYoYS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9UnUpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOnR5cGVvZiBhLmNhbmNlbEJ1YmJsZSE9InVua25vd24iJiYoYS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9UnUpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6UnV9KSx0fXZhciBTYT17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGwpe3JldHVybiBsLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSxYbj14bChTYSksaHU9JCh7fSxTYSx7dmlldzowLGRldGFpbDowfSksZWg9eGwoaHUpLFVpLEhpLE1lLFFuPSQoe30saHUse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6ZmYsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24obCl7cmV0dXJuIGwucmVsYXRlZFRhcmdldD09PXZvaWQgMD9sLmZyb21FbGVtZW50PT09bC5zcmNFbGVtZW50P2wudG9FbGVtZW50OmwuZnJvbUVsZW1lbnQ6bC5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24obCl7cmV0dXJuIm1vdmVtZW50WCJpbiBsP2wubW92ZW1lbnRYOihsIT09TWUmJihNZSYmbC50eXBlPT09Im1vdXNlbW92ZSI/KFVpPWwuc2NyZWVuWC1NZS5zY3JlZW5YLEhpPWwuc2NyZWVuWS1NZS5zY3JlZW5ZKTpIaT1VaT0wLE1lPWwpLFVpKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGwpe3JldHVybiJtb3ZlbWVudFkiaW4gbD9sLm1vdmVtZW50WTpIaX19KSxabz14bChRbiksdWg9JCh7fSxRbix7ZGF0YVRyYW5zZmVyOjB9KSxuaD14bCh1aCksaWg9JCh7fSxodSx7cmVsYXRlZFRhcmdldDowfSksTmk9eGwoaWgpLGNoPSQoe30sU2Ese2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLGZoPXhsKGNoKSxvaD0kKHt9LFNhLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGwpe3JldHVybiJjbGlwYm9hcmREYXRhImluIGw/bC5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pLHNoPXhsKG9oKSxtaD0kKHt9LFNhLHtkYXRhOjB9KSxWbz14bChtaCksZGg9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LGhoPXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0scmg9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifTtmdW5jdGlvbiB2aChsKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGwpOihsPXJoW2xdKT8hIXRbbF06ITF9ZnVuY3Rpb24gZmYoKXtyZXR1cm4gdmh9dmFyIHloPSQoe30saHUse2tleTpmdW5jdGlvbihsKXtpZihsLmtleSl7dmFyIHQ9ZGhbbC5rZXldfHxsLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGwudHlwZT09PSJrZXlwcmVzcyI/KGw9a3UobCksbD09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShsKSk6bC50eXBlPT09ImtleWRvd24ifHxsLnR5cGU9PT0ia2V5dXAiP2hoW2wua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTpmZixjaGFyQ29kZTpmdW5jdGlvbihsKXtyZXR1cm4gbC50eXBlPT09ImtleXByZXNzIj9rdShsKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGwpe3JldHVybiBsLnR5cGU9PT0ia2V5ZG93biJ8fGwudHlwZT09PSJrZXl1cCI/bC5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGwpe3JldHVybiBsLnR5cGU9PT0ia2V5cHJlc3MiP2t1KGwpOmwudHlwZT09PSJrZXlkb3duInx8bC50eXBlPT09ImtleXVwIj9sLmtleUNvZGU6MH19KSxnaD14bCh5aCksYmg9JCh7fSxRbix7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSxMbz14bChiaCkscGg9JCh7fSxodSx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOmZmfSksU2g9eGwocGgpLEVoPSQoe30sU2Ese3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksemg9eGwoRWgpLEFoPSQoe30sUW4se2RlbHRhWDpmdW5jdGlvbihsKXtyZXR1cm4iZGVsdGFYImluIGw/bC5kZWx0YVg6IndoZWVsRGVsdGFYImluIGw/LWwud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGwpe3JldHVybiJkZWx0YVkiaW4gbD9sLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gbD8tbC53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBsPy1sLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSxNaD14bChBaCksVGg9JCh7fSxTYSx7bmV3U3RhdGU6MCxvbGRTdGF0ZTowfSkseGg9eGwoVGgpLE9oPVs5LDEzLDI3LDMyXSxvZj16dCYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LEJlPW51bGw7enQmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihCZT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBfaD16dCYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFCZSxPMD16dCYmKCFvZnx8QmUmJjg8QmUmJjExPj1CZSksS289IiAiLEpvPSExO2Z1bmN0aW9uIF8wKGwsdCl7c3dpdGNoKGwpe2Nhc2Uia2V5dXAiOnJldHVybiBPaC5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEQwKGwpe3JldHVybiBsPWwuZGV0YWlsLHR5cGVvZiBsPT0ib2JqZWN0IiYmImRhdGEiaW4gbD9sLmRhdGE6bnVsbH12YXIgR2E9ITE7ZnVuY3Rpb24gRGgobCx0KXtzd2l0Y2gobCl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIEQwKHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDooSm89ITAsS28pO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gbD10LmRhdGEsbD09PUtvJiZKbz9udWxsOmw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gVWgobCx0KXtpZihHYSlyZXR1cm4gbD09PSJjb21wb3NpdGlvbmVuZCJ8fCFvZiYmXzAobCx0KT8obD14MCgpLCR1PWNmPUd0PW51bGwsR2E9ITEsbCk6bnVsbDtzd2l0Y2gobCl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIE8wJiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIEhoPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiB3byhsKXt2YXIgdD1sJiZsLm5vZGVOYW1lJiZsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhSGhbbC50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBVMChsLHQsYSxlKXtZYT9XYT9XYS5wdXNoKGUpOldhPVtlXTpZYT1lLHQ9SG4odCwib25DaGFuZ2UiKSwwPHQubGVuZ3RoJiYoYT1uZXcgWG4oIm9uQ2hhbmdlIiwiY2hhbmdlIixudWxsLGEsZSksbC5wdXNoKHtldmVudDphLGxpc3RlbmVyczp0fSkpfXZhciBxZT1udWxsLGtlPW51bGw7ZnVuY3Rpb24gTmgobCl7VG0obCwwKX1mdW5jdGlvbiBqbihsKXt2YXIgdD1OZShsKTtpZihTMCh0KSlyZXR1cm4gbH1mdW5jdGlvbiBXbyhsLHQpe2lmKGw9PT0iY2hhbmdlIilyZXR1cm4gdH12YXIgSDA9ITE7enQmJih6dD8ocXU9Im9uaW5wdXQiaW4gZG9jdW1lbnQscXV8fChDaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxDaS5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IikscXU9dHlwZW9mIENpLm9uaW5wdXQ9PSJmdW5jdGlvbiIpLEJ1PXF1KTpCdT0hMSxIMD1CdSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSk7dmFyIEJ1LHF1LENpO2Z1bmN0aW9uICRvKCl7cWUmJihxZS5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsTjApLGtlPXFlPW51bGwpfWZ1bmN0aW9uIE4wKGwpe2lmKGwucHJvcGVydHlOYW1lPT09InZhbHVlIiYmam4oa2UpKXt2YXIgdD1bXTtVMCh0LGtlLGwsbmYobCkpLFQwKE5oLHQpfX1mdW5jdGlvbiBDaChsLHQsYSl7bD09PSJmb2N1c2luIj8oJG8oKSxxZT10LGtlPWEscWUuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLE4wKSk6bD09PSJmb2N1c291dCImJiRvKCl9ZnVuY3Rpb24gUmgobCl7aWYobD09PSJzZWxlY3Rpb25jaGFuZ2UifHxsPT09ImtleXVwInx8bD09PSJrZXlkb3duIilyZXR1cm4gam4oa2UpfWZ1bmN0aW9uIEJoKGwsdCl7aWYobD09PSJjbGljayIpcmV0dXJuIGpuKHQpfWZ1bmN0aW9uIHFoKGwsdCl7aWYobD09PSJpbnB1dCJ8fGw9PT0iY2hhbmdlIilyZXR1cm4gam4odCl9ZnVuY3Rpb24gWWgobCx0KXtyZXR1cm4gbD09PXQmJihsIT09MHx8MS9sPT09MS90KXx8bCE9PWwmJnQhPT10fXZhciBxbD10eXBlb2YgT2JqZWN0LmlzPT0iZnVuY3Rpb24iP09iamVjdC5pczpZaDtmdW5jdGlvbiBGZShsLHQpe2lmKHFsKGwsdCkpcmV0dXJuITA7aWYodHlwZW9mIGwhPSJvYmplY3QifHxsPT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QifHx0PT09bnVsbClyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyhsKSxlPU9iamVjdC5rZXlzKHQpO2lmKGEubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHU9YVtlXTtpZighc2MuY2FsbCh0LHUpfHwhcWwobFt1XSx0W3VdKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBrbyhsKXtmb3IoO2wmJmwuZmlyc3RDaGlsZDspbD1sLmZpcnN0Q2hpbGQ7cmV0dXJuIGx9ZnVuY3Rpb24gRm8obCx0KXt2YXIgYT1rbyhsKTtsPTA7Zm9yKHZhciBlO2E7KXtpZihhLm5vZGVUeXBlPT09Myl7aWYoZT1sK2EudGV4dENvbnRlbnQubGVuZ3RoLGw8PXQmJmU+PXQpcmV0dXJue25vZGU6YSxvZmZzZXQ6dC1sfTtsPWV9bDp7Zm9yKDthOyl7aWYoYS5uZXh0U2libGluZyl7YT1hLm5leHRTaWJsaW5nO2JyZWFrIGx9YT1hLnBhcmVudE5vZGV9YT12b2lkIDB9YT1rbyhhKX19ZnVuY3Rpb24gQzAobCx0KXtyZXR1cm4gbCYmdD9sPT09dD8hMDpsJiZsLm5vZGVUeXBlPT09Mz8hMTp0JiZ0Lm5vZGVUeXBlPT09Mz9DMChsLHQucGFyZW50Tm9kZSk6ImNvbnRhaW5zImluIGw/bC5jb250YWlucyh0KTpsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPyEhKGwuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmMTYpOiExOiExfWZ1bmN0aW9uIFIwKGwpe2w9bCE9bnVsbCYmbC5vd25lckRvY3VtZW50IT1udWxsJiZsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXchPW51bGw/bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OndpbmRvdztmb3IodmFyIHQ9aG4obC5kb2N1bWVudCk7dCBpbnN0YW5jZW9mIGwuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIGE9dHlwZW9mIHQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmPT0ic3RyaW5nIn1jYXRjaHthPSExfWlmKGEpbD10LmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhazt0PWhuKGwuZG9jdW1lbnQpfXJldHVybiB0fWZ1bmN0aW9uIHNmKGwpe3ZhciB0PWwmJmwubm9kZU5hbWUmJmwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKHQ9PT0iaW5wdXQiJiYobC50eXBlPT09InRleHQifHxsLnR5cGU9PT0ic2VhcmNoInx8bC50eXBlPT09InRlbCJ8fGwudHlwZT09PSJ1cmwifHxsLnR5cGU9PT0icGFzc3dvcmQiKXx8dD09PSJ0ZXh0YXJlYSJ8fGwuY29udGVudEVkaXRhYmxlPT09InRydWUiKX12YXIgR2g9enQmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsWGE9bnVsbCxnYz1udWxsLFllPW51bGwsYmM9ITE7ZnVuY3Rpb24gSW8obCx0LGEpe3ZhciBlPWEud2luZG93PT09YT9hLmRvY3VtZW50OmEubm9kZVR5cGU9PT05P2E6YS5vd25lckRvY3VtZW50O2JjfHxYYT09bnVsbHx8WGEhPT1obihlKXx8KGU9WGEsInNlbGVjdGlvblN0YXJ0ImluIGUmJnNmKGUpP2U9e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTooZT0oZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCksZT17YW5jaG9yTm9kZTplLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OmUuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTplLmZvY3VzTm9kZSxmb2N1c09mZnNldDplLmZvY3VzT2Zmc2V0fSksWWUmJkZlKFllLGUpfHwoWWU9ZSxlPUhuKGdjLCJvblNlbGVjdCIpLDA8ZS5sZW5ndGgmJih0PW5ldyBYbigib25TZWxlY3QiLCJzZWxlY3QiLG51bGwsdCxhKSxsLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOmV9KSx0LnRhcmdldD1YYSkpKX1mdW5jdGlvbiB1YShsLHQpe3ZhciBhPXt9O3JldHVybiBhW2wudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLGFbIldlYmtpdCIrbF09IndlYmtpdCIrdCxhWyJNb3oiK2xdPSJtb3oiK3QsYX12YXIgUWE9e2FuaW1hdGlvbmVuZDp1YSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uRW5kIiksYW5pbWF0aW9uaXRlcmF0aW9uOnVhKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFydDp1YSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9ucnVuOnVhKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvblJ1biIpLHRyYW5zaXRpb25zdGFydDp1YSgiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25TdGFydCIpLHRyYW5zaXRpb25jYW5jZWw6dWEoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uQ2FuY2VsIiksdHJhbnNpdGlvbmVuZDp1YSgiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25FbmQiKX0sUmk9e30sQjA9e307enQmJihCMD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRlIFFhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIFFhLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIFFhLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRpb25FdmVudCJpbiB3aW5kb3d8fGRlbGV0ZSBRYS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO2Z1bmN0aW9uIEVhKGwpe2lmKFJpW2xdKXJldHVybiBSaVtsXTtpZighUWFbbF0pcmV0dXJuIGw7dmFyIHQ9UWFbbF0sYTtmb3IoYSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoYSkmJmEgaW4gQjApcmV0dXJuIFJpW2xdPXRbYV07cmV0dXJuIGx9dmFyIHEwPUVhKCJhbmltYXRpb25lbmQiKSxZMD1FYSgiYW5pbWF0aW9uaXRlcmF0aW9uIiksRzA9RWEoImFuaW1hdGlvbnN0YXJ0IiksWGg9RWEoInRyYW5zaXRpb25ydW4iKSxRaD1FYSgidHJhbnNpdGlvbnN0YXJ0Iiksamg9RWEoInRyYW5zaXRpb25jYW5jZWwiKSxYMD1FYSgidHJhbnNpdGlvbmVuZCIpLFEwPW5ldyBNYXAscGM9ImFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbCIuc3BsaXQoIiAiKTtwYy5wdXNoKCJzY3JvbGxFbmQiKTtmdW5jdGlvbiBJbChsLHQpe1EwLnNldChsLHQpLHBhKHQsW2xdKX12YXIgcm49dHlwZW9mIHJlcG9ydEVycm9yPT0iZnVuY3Rpb24iP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGwpe2lmKHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2Ygd2luZG93LkVycm9yRXZlbnQ9PSJmdW5jdGlvbiIpe3ZhciB0PW5ldyB3aW5kb3cuRXJyb3JFdmVudCgiZXJyb3IiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsbWVzc2FnZTp0eXBlb2YgbD09Im9iamVjdCImJmwhPT1udWxsJiZ0eXBlb2YgbC5tZXNzYWdlPT0ic3RyaW5nIj9TdHJpbmcobC5tZXNzYWdlKTpTdHJpbmcobCksZXJyb3I6bH0pO2lmKCF3aW5kb3cuZGlzcGF0Y2hFdmVudCh0KSlyZXR1cm59ZWxzZSBpZih0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLmVtaXQ9PSJmdW5jdGlvbiIpe3Byb2Nlc3MuZW1pdCgidW5jYXVnaHRFeGNlcHRpb24iLGwpO3JldHVybn1jb25zb2xlLmVycm9yKGwpfSxYbD1bXSxqYT0wLG1mPTA7ZnVuY3Rpb24gWm4oKXtmb3IodmFyIGw9amEsdD1tZj1qYT0wO3Q8bDspe3ZhciBhPVhsW3RdO1hsW3QrK109bnVsbDt2YXIgZT1YbFt0XTtYbFt0KytdPW51bGw7dmFyIHU9WGxbdF07WGxbdCsrXT1udWxsO3ZhciBuPVhsW3RdO2lmKFhsW3QrK109bnVsbCxlIT09bnVsbCYmdSE9PW51bGwpe3ZhciBpPWUucGVuZGluZztpPT09bnVsbD91Lm5leHQ9dToodS5uZXh0PWkubmV4dCxpLm5leHQ9dSksZS5wZW5kaW5nPXV9biE9PTAmJmowKGEsdSxuKX19ZnVuY3Rpb24gVm4obCx0LGEsZSl7WGxbamErK109bCxYbFtqYSsrXT10LFhsW2phKytdPWEsWGxbamErK109ZSxtZnw9ZSxsLmxhbmVzfD1lLGw9bC5hbHRlcm5hdGUsbCE9PW51bGwmJihsLmxhbmVzfD1lKX1mdW5jdGlvbiBkZihsLHQsYSxlKXtyZXR1cm4gVm4obCx0LGEsZSksdm4obCl9ZnVuY3Rpb24gemEobCx0KXtyZXR1cm4gVm4obCxudWxsLG51bGwsdCksdm4obCl9ZnVuY3Rpb24gajAobCx0LGEpe2wubGFuZXN8PWE7dmFyIGU9bC5hbHRlcm5hdGU7ZSE9PW51bGwmJihlLmxhbmVzfD1hKTtmb3IodmFyIHU9ITEsbj1sLnJldHVybjtuIT09bnVsbDspbi5jaGlsZExhbmVzfD1hLGU9bi5hbHRlcm5hdGUsZSE9PW51bGwmJihlLmNoaWxkTGFuZXN8PWEpLG4udGFnPT09MjImJihsPW4uc3RhdGVOb2RlLGw9PT1udWxsfHxsLl92aXNpYmlsaXR5JjF8fCh1PSEwKSksbD1uLG49bi5yZXR1cm47cmV0dXJuIGwudGFnPT09Mz8obj1sLnN0YXRlTm9kZSx1JiZ0IT09bnVsbCYmKHU9MzEtUmwoYSksbD1uLmhpZGRlblVwZGF0ZXMsZT1sW3VdLGU9PT1udWxsP2xbdV09W3RdOmUucHVzaCh0KSx0LmxhbmU9YXw1MzY4NzA5MTIpLG4pOm51bGx9ZnVuY3Rpb24gdm4obCl7aWYoNTA8SmUpdGhyb3cgSmU9MCxRYz1udWxsLEVycm9yKHAoMTg1KSk7Zm9yKHZhciB0PWwucmV0dXJuO3QhPT1udWxsOylsPXQsdD1sLnJldHVybjtyZXR1cm4gbC50YWc9PT0zP2wuc3RhdGVOb2RlOm51bGx9dmFyIFphPXt9O2Z1bmN0aW9uIFpoKGwsdCxhLGUpe3RoaXMudGFnPWwsdGhpcy5rZXk9YSx0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZkNsZWFudXA9dGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1lLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBVbChsLHQsYSxlKXtyZXR1cm4gbmV3IFpoKGwsdCxhLGUpfWZ1bmN0aW9uIGhmKGwpe3JldHVybiBsPWwucHJvdG90eXBlLCEoIWx8fCFsLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIHB0KGwsdCl7dmFyIGE9bC5hbHRlcm5hdGU7cmV0dXJuIGE9PT1udWxsPyhhPVVsKGwudGFnLHQsbC5rZXksbC5tb2RlKSxhLmVsZW1lbnRUeXBlPWwuZWxlbWVudFR5cGUsYS50eXBlPWwudHlwZSxhLnN0YXRlTm9kZT1sLnN0YXRlTm9kZSxhLmFsdGVybmF0ZT1sLGwuYWx0ZXJuYXRlPWEpOihhLnBlbmRpbmdQcm9wcz10LGEudHlwZT1sLnR5cGUsYS5mbGFncz0wLGEuc3VidHJlZUZsYWdzPTAsYS5kZWxldGlvbnM9bnVsbCksYS5mbGFncz1sLmZsYWdzJjY1MDExNzEyLGEuY2hpbGRMYW5lcz1sLmNoaWxkTGFuZXMsYS5sYW5lcz1sLmxhbmVzLGEuY2hpbGQ9bC5jaGlsZCxhLm1lbW9pemVkUHJvcHM9bC5tZW1vaXplZFByb3BzLGEubWVtb2l6ZWRTdGF0ZT1sLm1lbW9pemVkU3RhdGUsYS51cGRhdGVRdWV1ZT1sLnVwZGF0ZVF1ZXVlLHQ9bC5kZXBlbmRlbmNpZXMsYS5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9LGEuc2libGluZz1sLnNpYmxpbmcsYS5pbmRleD1sLmluZGV4LGEucmVmPWwucmVmLGEucmVmQ2xlYW51cD1sLnJlZkNsZWFudXAsYX1mdW5jdGlvbiBaMChsLHQpe2wuZmxhZ3MmPTY1MDExNzE0O3ZhciBhPWwuYWx0ZXJuYXRlO3JldHVybiBhPT09bnVsbD8obC5jaGlsZExhbmVzPTAsbC5sYW5lcz10LGwuY2hpbGQ9bnVsbCxsLnN1YnRyZWVGbGFncz0wLGwubWVtb2l6ZWRQcm9wcz1udWxsLGwubWVtb2l6ZWRTdGF0ZT1udWxsLGwudXBkYXRlUXVldWU9bnVsbCxsLmRlcGVuZGVuY2llcz1udWxsLGwuc3RhdGVOb2RlPW51bGwpOihsLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzLGwubGFuZXM9YS5sYW5lcyxsLmNoaWxkPWEuY2hpbGQsbC5zdWJ0cmVlRmxhZ3M9MCxsLmRlbGV0aW9ucz1udWxsLGwubWVtb2l6ZWRQcm9wcz1hLm1lbW9pemVkUHJvcHMsbC5tZW1vaXplZFN0YXRlPWEubWVtb2l6ZWRTdGF0ZSxsLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsbC50eXBlPWEudHlwZSx0PWEuZGVwZW5kZW5jaWVzLGwuZGVwZW5kZW5jaWVzPXQ9PT1udWxsP251bGw6e2xhbmVzOnQubGFuZXMsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0fSksbH1mdW5jdGlvbiBGdShsLHQsYSxlLHUsbil7dmFyIGk9MDtpZihlPWwsdHlwZW9mIGw9PSJmdW5jdGlvbiIpaGYobCkmJihpPTEpO2Vsc2UgaWYodHlwZW9mIGw9PSJzdHJpbmciKWk9S3IobCxhLG50LmN1cnJlbnQpPzI2Omw9PT0iaHRtbCJ8fGw9PT0iaGVhZCJ8fGw9PT0iYm9keSI/Mjc6NTtlbHNlIGw6c3dpdGNoKGwpe2Nhc2UgaWM6cmV0dXJuIGw9VWwoMzEsYSx0LHUpLGwuZWxlbWVudFR5cGU9aWMsbC5sYW5lcz1uLGw7Y2FzZSBSYTpyZXR1cm4gc2EoYS5jaGlsZHJlbix1LG4sdCk7Y2FzZSBjMDppPTgsdXw9MjQ7YnJlYWs7Y2FzZSBlYzpyZXR1cm4gbD1VbCgxMixhLHQsdXwyKSxsLmVsZW1lbnRUeXBlPWVjLGwubGFuZXM9bixsO2Nhc2UgdWM6cmV0dXJuIGw9VWwoMTMsYSx0LHUpLGwuZWxlbWVudFR5cGU9dWMsbC5sYW5lcz1uLGw7Y2FzZSBuYzpyZXR1cm4gbD1VbCgxOSxhLHQsdSksbC5lbGVtZW50VHlwZT1uYyxsLmxhbmVzPW4sbDtkZWZhdWx0OmlmKHR5cGVvZiBsPT0ib2JqZWN0IiYmbCE9PW51bGwpc3dpdGNoKGwuJCR0eXBlb2Ype2Nhc2UgeXQ6aT0xMDticmVhayBsO2Nhc2UgZjA6aT05O2JyZWFrIGw7Y2FzZSBJYzppPTExO2JyZWFrIGw7Y2FzZSBQYzppPTE0O2JyZWFrIGw7Y2FzZSBIdDppPTE2LGU9bnVsbDticmVhayBsfWk9MjksYT1FcnJvcihwKDEzMCxsPT09bnVsbD8ibnVsbCI6dHlwZW9mIGwsIiIpKSxlPW51bGx9cmV0dXJuIHQ9VWwoaSxhLHQsdSksdC5lbGVtZW50VHlwZT1sLHQudHlwZT1lLHQubGFuZXM9bix0fWZ1bmN0aW9uIHNhKGwsdCxhLGUpe3JldHVybiBsPVVsKDcsbCxlLHQpLGwubGFuZXM9YSxsfWZ1bmN0aW9uIEJpKGwsdCxhKXtyZXR1cm4gbD1VbCg2LGwsbnVsbCx0KSxsLmxhbmVzPWEsbH1mdW5jdGlvbiBWMChsKXt2YXIgdD1VbCgxOCxudWxsLG51bGwsMCk7cmV0dXJuIHQuc3RhdGVOb2RlPWwsdH1mdW5jdGlvbiBxaShsLHQsYSl7cmV0dXJuIHQ9VWwoNCxsLmNoaWxkcmVuIT09bnVsbD9sLmNoaWxkcmVuOltdLGwua2V5LHQpLHQubGFuZXM9YSx0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzpsLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246bC5pbXBsZW1lbnRhdGlvbn0sdH12YXIgUG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTGwobCx0KXtpZih0eXBlb2YgbD09Im9iamVjdCImJmwhPT1udWxsKXt2YXIgYT1Qby5nZXQobCk7cmV0dXJuIGEhPT12b2lkIDA/YToodD17dmFsdWU6bCxzb3VyY2U6dCxzdGFjazpSbyh0KX0sUG8uc2V0KGwsdCksdCl9cmV0dXJue3ZhbHVlOmwsc291cmNlOnQsc3RhY2s6Um8odCl9fXZhciBWYT1bXSxMYT0wLHluPW51bGwsSWU9MCxqbD1bXSxabD0wLEZ0PW51bGwsYXQ9MSxldD0iIjtmdW5jdGlvbiBydChsLHQpe1ZhW0xhKytdPUllLFZhW0xhKytdPXluLHluPWwsSWU9dH1mdW5jdGlvbiBMMChsLHQsYSl7amxbWmwrK109YXQsamxbWmwrK109ZXQsamxbWmwrK109RnQsRnQ9bDt2YXIgZT1hdDtsPWV0O3ZhciB1PTMyLVJsKGUpLTE7ZSY9figxPDx1KSxhKz0xO3ZhciBuPTMyLVJsKHQpK3U7aWYoMzA8bil7dmFyIGk9dS11JTU7bj0oZSYoMTw8aSktMSkudG9TdHJpbmcoMzIpLGU+Pj1pLHUtPWksYXQ9MTw8MzItUmwodCkrdXxhPDx1fGUsZXQ9bitsfWVsc2UgYXQ9MTw8bnxhPDx1fGUsZXQ9bH1mdW5jdGlvbiByZihsKXtsLnJldHVybiE9PW51bGwmJihydChsLDEpLEwwKGwsMSwwKSl9ZnVuY3Rpb24gdmYobCl7Zm9yKDtsPT09eW47KXluPVZhWy0tTGFdLFZhW0xhXT1udWxsLEllPVZhWy0tTGFdLFZhW0xhXT1udWxsO2Zvcig7bD09PUZ0OylGdD1qbFstLVpsXSxqbFtabF09bnVsbCxldD1qbFstLVpsXSxqbFtabF09bnVsbCxhdD1qbFstLVpsXSxqbFtabF09bnVsbH1mdW5jdGlvbiBLMChsLHQpe2psW1psKytdPWF0LGpsW1psKytdPWV0LGpsW1psKytdPUZ0LGF0PXQuaWQsZXQ9dC5vdmVyZmxvdyxGdD1sfXZhciBobD1udWxsLFc9bnVsbCxCPSExLFZ0PW51bGwsS2w9ITEsU2M9RXJyb3IocCg1MTkpKTtmdW5jdGlvbiBJdChsKXt2YXIgdD1FcnJvcihwKDQxOCwxPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMCYmYXJndW1lbnRzWzFdPyJ0ZXh0IjoiSFRNTCIsIiIpKTt0aHJvdyBQZShMbCh0LGwpKSxTY31mdW5jdGlvbiBscyhsKXt2YXIgdD1sLnN0YXRlTm9kZSxhPWwudHlwZSxlPWwubWVtb2l6ZWRQcm9wcztzd2l0Y2godFtkbF09bCx0W1RsXT1lLGEpe2Nhc2UiZGlhbG9nIjpOKCJjYW5jZWwiLHQpLE4oImNsb3NlIix0KTticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOk4oImxvYWQiLHQpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihhPTA7YTxldS5sZW5ndGg7YSsrKU4oZXVbYV0sdCk7YnJlYWs7Y2FzZSJzb3VyY2UiOk4oImVycm9yIix0KTticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjpOKCJlcnJvciIsdCksTigibG9hZCIsdCk7YnJlYWs7Y2FzZSJkZXRhaWxzIjpOKCJ0b2dnbGUiLHQpO2JyZWFrO2Nhc2UiaW5wdXQiOk4oImludmFsaWQiLHQpLEUwKHQsZS52YWx1ZSxlLmRlZmF1bHRWYWx1ZSxlLmNoZWNrZWQsZS5kZWZhdWx0Q2hlY2tlZCxlLnR5cGUsZS5uYW1lLCEwKTticmVhaztjYXNlInNlbGVjdCI6TigiaW52YWxpZCIsdCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6TigiaW52YWxpZCIsdCksQTAodCxlLnZhbHVlLGUuZGVmYXVsdFZhbHVlLGUuY2hpbGRyZW4pfWE9ZS5jaGlsZHJlbix0eXBlb2YgYSE9InN0cmluZyImJnR5cGVvZiBhIT0ibnVtYmVyIiYmdHlwZW9mIGEhPSJiaWdpbnQifHx0LnRleHRDb250ZW50PT09IiIrYXx8ZS5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc9PT0hMHx8T20odC50ZXh0Q29udGVudCxhKT8oZS5wb3BvdmVyIT1udWxsJiYoTigiYmVmb3JldG9nZ2xlIix0KSxOKCJ0b2dnbGUiLHQpKSxlLm9uU2Nyb2xsIT1udWxsJiZOKCJzY3JvbGwiLHQpLGUub25TY3JvbGxFbmQhPW51bGwmJk4oInNjcm9sbGVuZCIsdCksZS5vbkNsaWNrIT1udWxsJiYodC5vbmNsaWNrPWd0KSx0PSEwKTp0PSExLHR8fEl0KGwsITApfWZ1bmN0aW9uIHRzKGwpe2ZvcihobD1sLnJldHVybjtobDspc3dpdGNoKGhsLnRhZyl7Y2FzZSA1OmNhc2UgMzE6Y2FzZSAxMzpLbD0hMTtyZXR1cm47Y2FzZSAyNzpjYXNlIDM6S2w9ITA7cmV0dXJuO2RlZmF1bHQ6aGw9aGwucmV0dXJufX1mdW5jdGlvbiBVYShsKXtpZihsIT09aGwpcmV0dXJuITE7aWYoIUIpcmV0dXJuIHRzKGwpLEI9ITAsITE7dmFyIHQ9bC50YWcsYTtpZigoYT10IT09MyYmdCE9PTI3KSYmKChhPXQ9PT01KSYmKGE9bC50eXBlLGE9IShhIT09ImZvcm0iJiZhIT09ImJ1dHRvbiIpfHxLYyhsLnR5cGUsbC5tZW1vaXplZFByb3BzKSksYT0hYSksYSYmVyYmSXQobCksdHMobCksdD09PTEzKXtpZihsPWwubWVtb2l6ZWRTdGF0ZSxsPWwhPT1udWxsP2wuZGVoeWRyYXRlZDpudWxsLCFsKXRocm93IEVycm9yKHAoMzE3KSk7Vz1WcyhsKX1lbHNlIGlmKHQ9PT0zMSl7aWYobD1sLm1lbW9pemVkU3RhdGUsbD1sIT09bnVsbD9sLmRlaHlkcmF0ZWQ6bnVsbCwhbCl0aHJvdyBFcnJvcihwKDMxNykpO1c9VnMobCl9ZWxzZSB0PT09Mjc/KHQ9VyxhYShsLnR5cGUpPyhsPSRjLCRjPW51bGwsVz1sKTpXPXQpOlc9aGw/d2wobC5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9ZnVuY3Rpb24gcmEoKXtXPWhsPW51bGwsQj0hMX1mdW5jdGlvbiBZaSgpe3ZhciBsPVZ0O3JldHVybiBsIT09bnVsbCYmKEFsPT09bnVsbD9BbD1sOkFsLnB1c2guYXBwbHkoQWwsbCksVnQ9bnVsbCksbH1mdW5jdGlvbiBQZShsKXtWdD09PW51bGw/VnQ9W2xdOlZ0LnB1c2gobCl9dmFyIEVjPWl0KG51bGwpLEFhPW51bGwsYnQ9bnVsbDtmdW5jdGlvbiBDdChsLHQsYSl7SyhFYyx0Ll9jdXJyZW50VmFsdWUpLHQuX2N1cnJlbnRWYWx1ZT1hfWZ1bmN0aW9uIFN0KGwpe2wuX2N1cnJlbnRWYWx1ZT1FYy5jdXJyZW50LHNsKEVjKX1mdW5jdGlvbiB6YyhsLHQsYSl7Zm9yKDtsIT09bnVsbDspe3ZhciBlPWwuYWx0ZXJuYXRlO2lmKChsLmNoaWxkTGFuZXMmdCkhPT10PyhsLmNoaWxkTGFuZXN8PXQsZSE9PW51bGwmJihlLmNoaWxkTGFuZXN8PXQpKTplIT09bnVsbCYmKGUuY2hpbGRMYW5lcyZ0KSE9PXQmJihlLmNoaWxkTGFuZXN8PXQpLGw9PT1hKWJyZWFrO2w9bC5yZXR1cm59fWZ1bmN0aW9uIEFjKGwsdCxhLGUpe3ZhciB1PWwuY2hpbGQ7Zm9yKHUhPT1udWxsJiYodS5yZXR1cm49bCk7dSE9PW51bGw7KXt2YXIgbj11LmRlcGVuZGVuY2llcztpZihuIT09bnVsbCl7dmFyIGk9dS5jaGlsZDtuPW4uZmlyc3RDb250ZXh0O2w6Zm9yKDtuIT09bnVsbDspe3ZhciBjPW47bj11O2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKWlmKGMuY29udGV4dD09PXRbZl0pe24ubGFuZXN8PWEsYz1uLmFsdGVybmF0ZSxjIT09bnVsbCYmKGMubGFuZXN8PWEpLHpjKG4ucmV0dXJuLGEsbCksZXx8KGk9bnVsbCk7YnJlYWsgbH1uPWMubmV4dH19ZWxzZSBpZih1LnRhZz09PTE4KXtpZihpPXUucmV0dXJuLGk9PT1udWxsKXRocm93IEVycm9yKHAoMzQxKSk7aS5sYW5lc3w9YSxuPWkuYWx0ZXJuYXRlLG4hPT1udWxsJiYobi5sYW5lc3w9YSksemMoaSxhLGwpLGk9bnVsbH1lbHNlIGk9dS5jaGlsZDtpZihpIT09bnVsbClpLnJldHVybj11O2Vsc2UgZm9yKGk9dTtpIT09bnVsbDspe2lmKGk9PT1sKXtpPW51bGw7YnJlYWt9aWYodT1pLnNpYmxpbmcsdSE9PW51bGwpe3UucmV0dXJuPWkucmV0dXJuLGk9dTticmVha31pPWkucmV0dXJufXU9aX19ZnVuY3Rpb24gZGUobCx0LGEsZSl7bD1udWxsO2Zvcih2YXIgdT10LG49ITE7dSE9PW51bGw7KXtpZighbil7aWYoKHUuZmxhZ3MmNTI0Mjg4KSE9PTApbj0hMDtlbHNlIGlmKCh1LmZsYWdzJjI2MjE0NCkhPT0wKWJyZWFrfWlmKHUudGFnPT09MTApe3ZhciBpPXUuYWx0ZXJuYXRlO2lmKGk9PT1udWxsKXRocm93IEVycm9yKHAoMzg3KSk7aWYoaT1pLm1lbW9pemVkUHJvcHMsaSE9PW51bGwpe3ZhciBjPXUudHlwZTtxbCh1LnBlbmRpbmdQcm9wcy52YWx1ZSxpLnZhbHVlKXx8KGwhPT1udWxsP2wucHVzaChjKTpsPVtjXSl9fWVsc2UgaWYodT09PW9uLmN1cnJlbnQpe2lmKGk9dS5hbHRlcm5hdGUsaT09PW51bGwpdGhyb3cgRXJyb3IocCgzODcpKTtpLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSE9PXUubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlJiYobCE9PW51bGw/bC5wdXNoKG51KTpsPVtudV0pfXU9dS5yZXR1cm59bCE9PW51bGwmJkFjKHQsbCxhLGUpLHQuZmxhZ3N8PTI2MjE0NH1mdW5jdGlvbiBnbihsKXtmb3IobD1sLmZpcnN0Q29udGV4dDtsIT09bnVsbDspe2lmKCFxbChsLmNvbnRleHQuX2N1cnJlbnRWYWx1ZSxsLm1lbW9pemVkVmFsdWUpKXJldHVybiEwO2w9bC5uZXh0fXJldHVybiExfWZ1bmN0aW9uIHZhKGwpe0FhPWwsYnQ9bnVsbCxsPWwuZGVwZW5kZW5jaWVzLGwhPT1udWxsJiYobC5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gcmwobCl7cmV0dXJuIEowKEFhLGwpfWZ1bmN0aW9uIFl1KGwsdCl7cmV0dXJuIEFhPT09bnVsbCYmdmEobCksSjAobCx0KX1mdW5jdGlvbiBKMChsLHQpe3ZhciBhPXQuX2N1cnJlbnRWYWx1ZTtpZih0PXtjb250ZXh0OnQsbWVtb2l6ZWRWYWx1ZTphLG5leHQ6bnVsbH0sYnQ9PT1udWxsKXtpZihsPT09bnVsbCl0aHJvdyBFcnJvcihwKDMwOCkpO2J0PXQsbC5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OnR9LGwuZmxhZ3N8PTUyNDI4OH1lbHNlIGJ0PWJ0Lm5leHQ9dDtyZXR1cm4gYX12YXIgVmg9dHlwZW9mIEFib3J0Q29udHJvbGxlcjwidSI/QWJvcnRDb250cm9sbGVyOmZ1bmN0aW9uKCl7dmFyIGw9W10sdD10aGlzLnNpZ25hbD17YWJvcnRlZDohMSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsZSl7bC5wdXNoKGUpfX07dGhpcy5hYm9ydD1mdW5jdGlvbigpe3QuYWJvcnRlZD0hMCxsLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGEoKX0pfX0sTGg9Y2wudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxLaD1jbC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSx1bD17JCR0eXBlb2Y6eXQsQ29uc3VtZXI6bnVsbCxQcm92aWRlcjpudWxsLF9jdXJyZW50VmFsdWU6bnVsbCxfY3VycmVudFZhbHVlMjpudWxsLF90aHJlYWRDb3VudDowfTtmdW5jdGlvbiB5Zigpe3JldHVybntjb250cm9sbGVyOm5ldyBWaCxkYXRhOm5ldyBNYXAscmVmQ291bnQ6MH19ZnVuY3Rpb24gcnUobCl7bC5yZWZDb3VudC0tLGwucmVmQ291bnQ9PT0wJiZMaChLaCxmdW5jdGlvbigpe2wuY29udHJvbGxlci5hYm9ydCgpfSl9dmFyIEdlPW51bGwsTWM9MCxhZT0wLCRhPW51bGw7ZnVuY3Rpb24gSmgobCx0KXtpZihHZT09PW51bGwpe3ZhciBhPUdlPVtdO01jPTAsYWU9amYoKSwkYT17c3RhdHVzOiJwZW5kaW5nIix2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihlKXthLnB1c2goZSl9fX1yZXR1cm4gTWMrKyx0LnRoZW4oYXMsYXMpLHR9ZnVuY3Rpb24gYXMoKXtpZigtLU1jPT09MCYmR2UhPT1udWxsKXskYSE9PW51bGwmJigkYS5zdGF0dXM9ImZ1bGZpbGxlZCIpO3ZhciBsPUdlO0dlPW51bGwsYWU9MCwkYT1udWxsO2Zvcih2YXIgdD0wO3Q8bC5sZW5ndGg7dCsrKSgwLGxbdF0pKCl9fWZ1bmN0aW9uIHdoKGwsdCl7dmFyIGE9W10sZT17c3RhdHVzOiJwZW5kaW5nIix2YWx1ZTpudWxsLHJlYXNvbjpudWxsLHRoZW46ZnVuY3Rpb24odSl7YS5wdXNoKHUpfX07cmV0dXJuIGwudGhlbihmdW5jdGlvbigpe2Uuc3RhdHVzPSJmdWxmaWxsZWQiLGUudmFsdWU9dDtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKykoMCxhW3VdKSh0KX0sZnVuY3Rpb24odSl7Zm9yKGUuc3RhdHVzPSJyZWplY3RlZCIsZS5yZWFzb249dSx1PTA7dTxhLmxlbmd0aDt1KyspKDAsYVt1XSkodm9pZCAwKX0pLGV9dmFyIGVzPU8uUztPLlM9ZnVuY3Rpb24obCx0KXtpbT1ObCgpLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiImJkpoKGwsdCksZXMhPT1udWxsJiZlcyhsLHQpfTt2YXIgbWE9aXQobnVsbCk7ZnVuY3Rpb24gZ2YoKXt2YXIgbD1tYS5jdXJyZW50O3JldHVybiBsIT09bnVsbD9sOkwucG9vbGVkQ2FjaGV9ZnVuY3Rpb24gSXUobCx0KXt0PT09bnVsbD9LKG1hLG1hLmN1cnJlbnQpOksobWEsdC5wb29sKX1mdW5jdGlvbiB3MCgpe3ZhciBsPWdmKCk7cmV0dXJuIGw9PT1udWxsP251bGw6e3BhcmVudDp1bC5fY3VycmVudFZhbHVlLHBvb2w6bH19dmFyIGhlPUVycm9yKHAoNDYwKSksYmY9RXJyb3IocCg0NzQpKSxMbj1FcnJvcihwKDU0MikpLGJuPXt0aGVuOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gdXMobCl7cmV0dXJuIGw9bC5zdGF0dXMsbD09PSJmdWxmaWxsZWQifHxsPT09InJlamVjdGVkIn1mdW5jdGlvbiBXMChsLHQsYSl7c3dpdGNoKGE9bFthXSxhPT09dm9pZCAwP2wucHVzaCh0KTphIT09dCYmKHQudGhlbihndCxndCksdD1hKSx0LnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiB0LnZhbHVlO2Nhc2UicmVqZWN0ZWQiOnRocm93IGw9dC5yZWFzb24saXMobCksbDtkZWZhdWx0OmlmKHR5cGVvZiB0LnN0YXR1cz09InN0cmluZyIpdC50aGVuKGd0LGd0KTtlbHNle2lmKGw9TCxsIT09bnVsbCYmMTAwPGwuc2hlbGxTdXNwZW5kQ291bnRlcil0aHJvdyBFcnJvcihwKDQ4MikpO2w9dCxsLnN0YXR1cz0icGVuZGluZyIsbC50aGVuKGZ1bmN0aW9uKGUpe2lmKHQuc3RhdHVzPT09InBlbmRpbmciKXt2YXIgdT10O3Uuc3RhdHVzPSJmdWxmaWxsZWQiLHUudmFsdWU9ZX19LGZ1bmN0aW9uKGUpe2lmKHQuc3RhdHVzPT09InBlbmRpbmciKXt2YXIgdT10O3Uuc3RhdHVzPSJyZWplY3RlZCIsdS5yZWFzb249ZX19KX1zd2l0Y2godC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gdC52YWx1ZTtjYXNlInJlamVjdGVkIjp0aHJvdyBsPXQucmVhc29uLGlzKGwpLGx9dGhyb3cgZGE9dCxoZX19ZnVuY3Rpb24gY2EobCl7dHJ5e3ZhciB0PWwuX2luaXQ7cmV0dXJuIHQobC5fcGF5bG9hZCl9Y2F0Y2goYSl7dGhyb3cgYSE9PW51bGwmJnR5cGVvZiBhPT0ib2JqZWN0IiYmdHlwZW9mIGEudGhlbj09ImZ1bmN0aW9uIj8oZGE9YSxoZSk6YX19dmFyIGRhPW51bGw7ZnVuY3Rpb24gbnMoKXtpZihkYT09PW51bGwpdGhyb3cgRXJyb3IocCg0NTkpKTt2YXIgbD1kYTtyZXR1cm4gZGE9bnVsbCxsfWZ1bmN0aW9uIGlzKGwpe2lmKGw9PT1oZXx8bD09PUxuKXRocm93IEVycm9yKHAoNDgzKSl9dmFyIGthPW51bGwsbHU9MDtmdW5jdGlvbiBHdShsKXt2YXIgdD1sdTtyZXR1cm4gbHUrPTEsa2E9PT1udWxsJiYoa2E9W10pLFcwKGthLGwsdCl9ZnVuY3Rpb24gVGUobCx0KXt0PXQucHJvcHMucmVmLGwucmVmPXQhPT12b2lkIDA/dDpudWxsfWZ1bmN0aW9uIFh1KGwsdCl7dGhyb3cgdC4kJHR5cGVvZj09PUNkP0Vycm9yKHAoNTI1KSk6KGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLEVycm9yKHAoMzEsbD09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOmwpKSl9ZnVuY3Rpb24gJDAobCl7ZnVuY3Rpb24gdChzLG8pe2lmKGwpe3ZhciBoPXMuZGVsZXRpb25zO2g9PT1udWxsPyhzLmRlbGV0aW9ucz1bb10scy5mbGFnc3w9MTYpOmgucHVzaChvKX19ZnVuY3Rpb24gYShzLG8pe2lmKCFsKXJldHVybiBudWxsO2Zvcig7byE9PW51bGw7KXQocyxvKSxvPW8uc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBlKHMpe2Zvcih2YXIgbz1uZXcgTWFwO3MhPT1udWxsOylzLmtleSE9PW51bGw/by5zZXQocy5rZXkscyk6by5zZXQocy5pbmRleCxzKSxzPXMuc2libGluZztyZXR1cm4gb31mdW5jdGlvbiB1KHMsbyl7cmV0dXJuIHM9cHQocyxvKSxzLmluZGV4PTAscy5zaWJsaW5nPW51bGwsc31mdW5jdGlvbiBuKHMsbyxoKXtyZXR1cm4gcy5pbmRleD1oLGw/KGg9cy5hbHRlcm5hdGUsaCE9PW51bGw/KGg9aC5pbmRleCxoPG8/KHMuZmxhZ3N8PTY3MTA4ODY2LG8pOmgpOihzLmZsYWdzfD02NzEwODg2NixvKSk6KHMuZmxhZ3N8PTEwNDg1NzYsbyl9ZnVuY3Rpb24gaShzKXtyZXR1cm4gbCYmcy5hbHRlcm5hdGU9PT1udWxsJiYocy5mbGFnc3w9NjcxMDg4NjYpLHN9ZnVuY3Rpb24gYyhzLG8saCxnKXtyZXR1cm4gbz09PW51bGx8fG8udGFnIT09Nj8obz1CaShoLHMubW9kZSxnKSxvLnJldHVybj1zLG8pOihvPXUobyxoKSxvLnJldHVybj1zLG8pfWZ1bmN0aW9uIGYocyxvLGgsZyl7dmFyIE09aC50eXBlO3JldHVybiBNPT09UmE/dihzLG8saC5wcm9wcy5jaGlsZHJlbixnLGgua2V5KTpvIT09bnVsbCYmKG8uZWxlbWVudFR5cGU9PT1NfHx0eXBlb2YgTT09Im9iamVjdCImJk0hPT1udWxsJiZNLiQkdHlwZW9mPT09SHQmJmNhKE0pPT09by50eXBlKT8obz11KG8saC5wcm9wcyksVGUobyxoKSxvLnJldHVybj1zLG8pOihvPUZ1KGgudHlwZSxoLmtleSxoLnByb3BzLG51bGwscy5tb2RlLGcpLFRlKG8saCksby5yZXR1cm49cyxvKX1mdW5jdGlvbiBkKHMsbyxoLGcpe3JldHVybiBvPT09bnVsbHx8by50YWchPT00fHxvLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09aC5jb250YWluZXJJbmZvfHxvLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PWguaW1wbGVtZW50YXRpb24/KG89cWkoaCxzLm1vZGUsZyksby5yZXR1cm49cyxvKToobz11KG8saC5jaGlsZHJlbnx8W10pLG8ucmV0dXJuPXMsbyl9ZnVuY3Rpb24gdihzLG8saCxnLE0pe3JldHVybiBvPT09bnVsbHx8by50YWchPT03PyhvPXNhKGgscy5tb2RlLGcsTSksby5yZXR1cm49cyxvKToobz11KG8saCksby5yZXR1cm49cyxvKX1mdW5jdGlvbiB5KHMsbyxoKXtpZih0eXBlb2Ygbz09InN0cmluZyImJm8hPT0iInx8dHlwZW9mIG89PSJudW1iZXIifHx0eXBlb2Ygbz09ImJpZ2ludCIpcmV0dXJuIG89QmkoIiIrbyxzLm1vZGUsaCksby5yZXR1cm49cyxvO2lmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe3N3aXRjaChvLiQkdHlwZW9mKXtjYXNlIER1OnJldHVybiBoPUZ1KG8udHlwZSxvLmtleSxvLnByb3BzLG51bGwscy5tb2RlLGgpLFRlKGgsbyksaC5yZXR1cm49cyxoO2Nhc2UgVWU6cmV0dXJuIG89cWkobyxzLm1vZGUsaCksby5yZXR1cm49cyxvO2Nhc2UgSHQ6cmV0dXJuIG89Y2EobykseShzLG8saCl9aWYoSGUobyl8fEFlKG8pKXJldHVybiBvPXNhKG8scy5tb2RlLGgsbnVsbCksby5yZXR1cm49cyxvO2lmKHR5cGVvZiBvLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIHkocyxHdShvKSxoKTtpZihvLiQkdHlwZW9mPT09eXQpcmV0dXJuIHkocyxZdShzLG8pLGgpO1h1KHMsbyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbShzLG8saCxnKXt2YXIgTT1vIT09bnVsbD9vLmtleTpudWxsO2lmKHR5cGVvZiBoPT0ic3RyaW5nIiYmaCE9PSIifHx0eXBlb2YgaD09Im51bWJlciJ8fHR5cGVvZiBoPT0iYmlnaW50IilyZXR1cm4gTSE9PW51bGw/bnVsbDpjKHMsbywiIitoLGcpO2lmKHR5cGVvZiBoPT0ib2JqZWN0IiYmaCE9PW51bGwpe3N3aXRjaChoLiQkdHlwZW9mKXtjYXNlIER1OnJldHVybiBoLmtleT09PU0/ZihzLG8saCxnKTpudWxsO2Nhc2UgVWU6cmV0dXJuIGgua2V5PT09TT9kKHMsbyxoLGcpOm51bGw7Y2FzZSBIdDpyZXR1cm4gaD1jYShoKSxtKHMsbyxoLGcpfWlmKEhlKGgpfHxBZShoKSlyZXR1cm4gTSE9PW51bGw/bnVsbDp2KHMsbyxoLGcsbnVsbCk7aWYodHlwZW9mIGgudGhlbj09ImZ1bmN0aW9uIilyZXR1cm4gbShzLG8sR3UoaCksZyk7aWYoaC4kJHR5cGVvZj09PXl0KXJldHVybiBtKHMsbyxZdShzLGgpLGcpO1h1KHMsaCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihzLG8saCxnLE0pe2lmKHR5cGVvZiBnPT0ic3RyaW5nIiYmZyE9PSIifHx0eXBlb2YgZz09Im51bWJlciJ8fHR5cGVvZiBnPT0iYmlnaW50IilyZXR1cm4gcz1zLmdldChoKXx8bnVsbCxjKG8scywiIitnLE0pO2lmKHR5cGVvZiBnPT0ib2JqZWN0IiYmZyE9PW51bGwpe3N3aXRjaChnLiQkdHlwZW9mKXtjYXNlIER1OnJldHVybiBzPXMuZ2V0KGcua2V5PT09bnVsbD9oOmcua2V5KXx8bnVsbCxmKG8scyxnLE0pO2Nhc2UgVWU6cmV0dXJuIHM9cy5nZXQoZy5rZXk9PT1udWxsP2g6Zy5rZXkpfHxudWxsLGQobyxzLGcsTSk7Y2FzZSBIdDpyZXR1cm4gZz1jYShnKSxyKHMsbyxoLGcsTSl9aWYoSGUoZyl8fEFlKGcpKXJldHVybiBzPXMuZ2V0KGgpfHxudWxsLHYobyxzLGcsTSxudWxsKTtpZih0eXBlb2YgZy50aGVuPT0iZnVuY3Rpb24iKXJldHVybiByKHMsbyxoLEd1KGcpLE0pO2lmKGcuJCR0eXBlb2Y9PT15dClyZXR1cm4gcihzLG8saCxZdShvLGcpLE0pO1h1KG8sZyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRShzLG8saCxnKXtmb3IodmFyIE09bnVsbCxfPW51bGwsQT1vLHg9bz0wLFU9bnVsbDtBIT09bnVsbCYmeDxoLmxlbmd0aDt4Kyspe0EuaW5kZXg+eD8oVT1BLEE9bnVsbCk6VT1BLnNpYmxpbmc7dmFyIFM9bShzLEEsaFt4XSxnKTtpZihTPT09bnVsbCl7QT09PW51bGwmJihBPVUpO2JyZWFrfWwmJkEmJlMuYWx0ZXJuYXRlPT09bnVsbCYmdChzLEEpLG89bihTLG8seCksXz09PW51bGw/TT1TOl8uc2libGluZz1TLF89UyxBPVV9aWYoeD09PWgubGVuZ3RoKXJldHVybiBhKHMsQSksQiYmcnQocyx4KSxNO2lmKEE9PT1udWxsKXtmb3IoO3g8aC5sZW5ndGg7eCsrKUE9eShzLGhbeF0sZyksQSE9PW51bGwmJihvPW4oQSxvLHgpLF89PT1udWxsP009QTpfLnNpYmxpbmc9QSxfPUEpO3JldHVybiBCJiZydChzLHgpLE19Zm9yKEE9ZShBKTt4PGgubGVuZ3RoO3grKylVPXIoQSxzLHgsaFt4XSxnKSxVIT09bnVsbCYmKGwmJlUuYWx0ZXJuYXRlIT09bnVsbCYmQS5kZWxldGUoVS5rZXk9PT1udWxsP3g6VS5rZXkpLG89bihVLG8seCksXz09PW51bGw/TT1VOl8uc2libGluZz1VLF89VSk7cmV0dXJuIGwmJkEuZm9yRWFjaChmdW5jdGlvbihxKXtyZXR1cm4gdChzLHEpfSksQiYmcnQocyx4KSxNfWZ1bmN0aW9uIHoocyxvLGgsZyl7aWYoaD09bnVsbCl0aHJvdyBFcnJvcihwKDE1MSkpO2Zvcih2YXIgTT1udWxsLF89bnVsbCxBPW8seD1vPTAsVT1udWxsLFM9aC5uZXh0KCk7QSE9PW51bGwmJiFTLmRvbmU7eCsrLFM9aC5uZXh0KCkpe0EuaW5kZXg+eD8oVT1BLEE9bnVsbCk6VT1BLnNpYmxpbmc7dmFyIHE9bShzLEEsUy52YWx1ZSxnKTtpZihxPT09bnVsbCl7QT09PW51bGwmJihBPVUpO2JyZWFrfWwmJkEmJnEuYWx0ZXJuYXRlPT09bnVsbCYmdChzLEEpLG89bihxLG8seCksXz09PW51bGw/TT1xOl8uc2libGluZz1xLF89cSxBPVV9aWYoUy5kb25lKXJldHVybiBhKHMsQSksQiYmcnQocyx4KSxNO2lmKEE9PT1udWxsKXtmb3IoOyFTLmRvbmU7eCsrLFM9aC5uZXh0KCkpUz15KHMsUy52YWx1ZSxnKSxTIT09bnVsbCYmKG89bihTLG8seCksXz09PW51bGw/TT1TOl8uc2libGluZz1TLF89Uyk7cmV0dXJuIEImJnJ0KHMseCksTX1mb3IoQT1lKEEpOyFTLmRvbmU7eCsrLFM9aC5uZXh0KCkpUz1yKEEscyx4LFMudmFsdWUsZyksUyE9PW51bGwmJihsJiZTLmFsdGVybmF0ZSE9PW51bGwmJkEuZGVsZXRlKFMua2V5PT09bnVsbD94OlMua2V5KSxvPW4oUyxvLHgpLF89PT1udWxsP009UzpfLnNpYmxpbmc9UyxfPVMpO3JldHVybiBsJiZBLmZvckVhY2goZnVuY3Rpb24oJGwpe3JldHVybiB0KHMsJGwpfSksQiYmcnQocyx4KSxNfWZ1bmN0aW9uIFQocyxvLGgsZyl7aWYodHlwZW9mIGg9PSJvYmplY3QiJiZoIT09bnVsbCYmaC50eXBlPT09UmEmJmgua2V5PT09bnVsbCYmKGg9aC5wcm9wcy5jaGlsZHJlbiksdHlwZW9mIGg9PSJvYmplY3QiJiZoIT09bnVsbCl7c3dpdGNoKGguJCR0eXBlb2Ype2Nhc2UgRHU6bDp7Zm9yKHZhciBNPWgua2V5O28hPT1udWxsOyl7aWYoby5rZXk9PT1NKXtpZihNPWgudHlwZSxNPT09UmEpe2lmKG8udGFnPT09Nyl7YShzLG8uc2libGluZyksZz11KG8saC5wcm9wcy5jaGlsZHJlbiksZy5yZXR1cm49cyxzPWc7YnJlYWsgbH19ZWxzZSBpZihvLmVsZW1lbnRUeXBlPT09TXx8dHlwZW9mIE09PSJvYmplY3QiJiZNIT09bnVsbCYmTS4kJHR5cGVvZj09PUh0JiZjYShNKT09PW8udHlwZSl7YShzLG8uc2libGluZyksZz11KG8saC5wcm9wcyksVGUoZyxoKSxnLnJldHVybj1zLHM9ZzticmVhayBsfWEocyxvKTticmVha31lbHNlIHQocyxvKTtvPW8uc2libGluZ31oLnR5cGU9PT1SYT8oZz1zYShoLnByb3BzLmNoaWxkcmVuLHMubW9kZSxnLGgua2V5KSxnLnJldHVybj1zLHM9Zyk6KGc9RnUoaC50eXBlLGgua2V5LGgucHJvcHMsbnVsbCxzLm1vZGUsZyksVGUoZyxoKSxnLnJldHVybj1zLHM9Zyl9cmV0dXJuIGkocyk7Y2FzZSBVZTpsOntmb3IoTT1oLmtleTtvIT09bnVsbDspe2lmKG8ua2V5PT09TSlpZihvLnRhZz09PTQmJm8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1oLmNvbnRhaW5lckluZm8mJm8uc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09aC5pbXBsZW1lbnRhdGlvbil7YShzLG8uc2libGluZyksZz11KG8saC5jaGlsZHJlbnx8W10pLGcucmV0dXJuPXMscz1nO2JyZWFrIGx9ZWxzZXthKHMsbyk7YnJlYWt9ZWxzZSB0KHMsbyk7bz1vLnNpYmxpbmd9Zz1xaShoLHMubW9kZSxnKSxnLnJldHVybj1zLHM9Z31yZXR1cm4gaShzKTtjYXNlIEh0OnJldHVybiBoPWNhKGgpLFQocyxvLGgsZyl9aWYoSGUoaCkpcmV0dXJuIEUocyxvLGgsZyk7aWYoQWUoaCkpe2lmKE09QWUoaCksdHlwZW9mIE0hPSJmdW5jdGlvbiIpdGhyb3cgRXJyb3IocCgxNTApKTtyZXR1cm4gaD1NLmNhbGwoaCkseihzLG8saCxnKX1pZih0eXBlb2YgaC50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBUKHMsbyxHdShoKSxnKTtpZihoLiQkdHlwZW9mPT09eXQpcmV0dXJuIFQocyxvLFl1KHMsaCksZyk7WHUocyxoKX1yZXR1cm4gdHlwZW9mIGg9PSJzdHJpbmciJiZoIT09IiJ8fHR5cGVvZiBoPT0ibnVtYmVyInx8dHlwZW9mIGg9PSJiaWdpbnQiPyhoPSIiK2gsbyE9PW51bGwmJm8udGFnPT09Nj8oYShzLG8uc2libGluZyksZz11KG8saCksZy5yZXR1cm49cyxzPWcpOihhKHMsbyksZz1CaShoLHMubW9kZSxnKSxnLnJldHVybj1zLHM9ZyksaShzKSk6YShzLG8pfXJldHVybiBmdW5jdGlvbihzLG8saCxnKXt0cnl7bHU9MDt2YXIgTT1UKHMsbyxoLGcpO3JldHVybiBrYT1udWxsLE19Y2F0Y2goQSl7aWYoQT09PWhlfHxBPT09TG4pdGhyb3cgQTt2YXIgXz1VbCgyOSxBLG51bGwscy5tb2RlKTtyZXR1cm4gXy5sYW5lcz1nLF8ucmV0dXJuPXMsX319fXZhciB5YT0kMCghMCksazA9JDAoITEpLE50PSExO2Z1bmN0aW9uIHBmKGwpe2wudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTpsLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxsYW5lczowLGhpZGRlbkNhbGxiYWNrczpudWxsfSxjYWxsYmFja3M6bnVsbH19ZnVuY3Rpb24gVGMobCx0KXtsPWwudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT09PWwmJih0LnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6bC5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmwuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmwubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmwuc2hhcmVkLGNhbGxiYWNrczpudWxsfSl9ZnVuY3Rpb24gTHQobCl7cmV0dXJue2xhbmU6bCx0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fWZ1bmN0aW9uIEt0KGwsdCxhKXt2YXIgZT1sLnVwZGF0ZVF1ZXVlO2lmKGU9PT1udWxsKXJldHVybiBudWxsO2lmKGU9ZS5zaGFyZWQsKFkmMikhPT0wKXt2YXIgdT1lLnBlbmRpbmc7cmV0dXJuIHU9PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9dS5uZXh0LHUubmV4dD10KSxlLnBlbmRpbmc9dCx0PXZuKGwpLGowKGwsbnVsbCxhKSx0fXJldHVybiBWbihsLGUsdCxhKSx2bihsKX1mdW5jdGlvbiBYZShsLHQsYSl7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwoYSY0MTk0MDQ4KSE9PTApKXt2YXIgZT10LmxhbmVzO2UmPWwucGVuZGluZ0xhbmVzLGF8PWUsdC5sYW5lcz1hLHIwKGwsYSl9fWZ1bmN0aW9uIEdpKGwsdCl7dmFyIGE9bC51cGRhdGVRdWV1ZSxlPWwuYWx0ZXJuYXRlO2lmKGUhPT1udWxsJiYoZT1lLnVwZGF0ZVF1ZXVlLGE9PT1lKSl7dmFyIHU9bnVsbCxuPW51bGw7aWYoYT1hLmZpcnN0QmFzZVVwZGF0ZSxhIT09bnVsbCl7ZG97dmFyIGk9e2xhbmU6YS5sYW5lLHRhZzphLnRhZyxwYXlsb2FkOmEucGF5bG9hZCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH07bj09PW51bGw/dT1uPWk6bj1uLm5leHQ9aSxhPWEubmV4dH13aGlsZShhIT09bnVsbCk7bj09PW51bGw/dT1uPXQ6bj1uLm5leHQ9dH1lbHNlIHU9bj10O2E9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6dSxsYXN0QmFzZVVwZGF0ZTpuLHNoYXJlZDplLnNoYXJlZCxjYWxsYmFja3M6ZS5jYWxsYmFja3N9LGwudXBkYXRlUXVldWU9YTtyZXR1cm59bD1hLmxhc3RCYXNlVXBkYXRlLGw9PT1udWxsP2EuZmlyc3RCYXNlVXBkYXRlPXQ6bC5uZXh0PXQsYS5sYXN0QmFzZVVwZGF0ZT10fXZhciB4Yz0hMTtmdW5jdGlvbiBRZSgpe2lmKHhjKXt2YXIgbD0kYTtpZihsIT09bnVsbCl0aHJvdyBsfX1mdW5jdGlvbiBqZShsLHQsYSxlKXt4Yz0hMTt2YXIgdT1sLnVwZGF0ZVF1ZXVlO050PSExO3ZhciBuPXUuZmlyc3RCYXNlVXBkYXRlLGk9dS5sYXN0QmFzZVVwZGF0ZSxjPXUuc2hhcmVkLnBlbmRpbmc7aWYoYyE9PW51bGwpe3Uuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgZj1jLGQ9Zi5uZXh0O2YubmV4dD1udWxsLGk9PT1udWxsP249ZDppLm5leHQ9ZCxpPWY7dmFyIHY9bC5hbHRlcm5hdGU7diE9PW51bGwmJih2PXYudXBkYXRlUXVldWUsYz12Lmxhc3RCYXNlVXBkYXRlLGMhPT1pJiYoYz09PW51bGw/di5maXJzdEJhc2VVcGRhdGU9ZDpjLm5leHQ9ZCx2Lmxhc3RCYXNlVXBkYXRlPWYpKX1pZihuIT09bnVsbCl7dmFyIHk9dS5iYXNlU3RhdGU7aT0wLHY9ZD1mPW51bGwsYz1uO2Rve3ZhciBtPWMubGFuZSYtNTM2ODcwOTEzLHI9bSE9PWMubGFuZTtpZihyPyhSJm0pPT09bTooZSZtKT09PW0pe20hPT0wJiZtPT09YWUmJih4Yz0hMCksdiE9PW51bGwmJih2PXYubmV4dD17bGFuZTowLHRhZzpjLnRhZyxwYXlsb2FkOmMucGF5bG9hZCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH0pO2w6e3ZhciBFPWwsej1jO209dDt2YXIgVD1hO3N3aXRjaCh6LnRhZyl7Y2FzZSAxOmlmKEU9ei5wYXlsb2FkLHR5cGVvZiBFPT0iZnVuY3Rpb24iKXt5PUUuY2FsbChULHksbSk7YnJlYWsgbH15PUU7YnJlYWsgbDtjYXNlIDM6RS5mbGFncz1FLmZsYWdzJi02NTUzN3wxMjg7Y2FzZSAwOmlmKEU9ei5wYXlsb2FkLG09dHlwZW9mIEU9PSJmdW5jdGlvbiI/RS5jYWxsKFQseSxtKTpFLG09PW51bGwpYnJlYWsgbDt5PSQoe30seSxtKTticmVhayBsO2Nhc2UgMjpOdD0hMH19bT1jLmNhbGxiYWNrLG0hPT1udWxsJiYobC5mbGFnc3w9NjQsciYmKGwuZmxhZ3N8PTgxOTIpLHI9dS5jYWxsYmFja3Mscj09PW51bGw/dS5jYWxsYmFja3M9W21dOnIucHVzaChtKSl9ZWxzZSByPXtsYW5lOm0sdGFnOmMudGFnLHBheWxvYWQ6Yy5wYXlsb2FkLGNhbGxiYWNrOmMuY2FsbGJhY2ssbmV4dDpudWxsfSx2PT09bnVsbD8oZD12PXIsZj15KTp2PXYubmV4dD1yLGl8PW07aWYoYz1jLm5leHQsYz09PW51bGwpe2lmKGM9dS5zaGFyZWQucGVuZGluZyxjPT09bnVsbClicmVhaztyPWMsYz1yLm5leHQsci5uZXh0PW51bGwsdS5sYXN0QmFzZVVwZGF0ZT1yLHUuc2hhcmVkLnBlbmRpbmc9bnVsbH19d2hpbGUoITApO3Y9PT1udWxsJiYoZj15KSx1LmJhc2VTdGF0ZT1mLHUuZmlyc3RCYXNlVXBkYXRlPWQsdS5sYXN0QmFzZVVwZGF0ZT12LG49PT1udWxsJiYodS5zaGFyZWQubGFuZXM9MCksbGF8PWksbC5sYW5lcz1pLGwubWVtb2l6ZWRTdGF0ZT15fX1mdW5jdGlvbiBGMChsLHQpe2lmKHR5cGVvZiBsIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKHAoMTkxLGwpKTtsLmNhbGwodCl9ZnVuY3Rpb24gSTAobCx0KXt2YXIgYT1sLmNhbGxiYWNrcztpZihhIT09bnVsbClmb3IobC5jYWxsYmFja3M9bnVsbCxsPTA7bDxhLmxlbmd0aDtsKyspRjAoYVtsXSx0KX12YXIgZWU9aXQobnVsbCkscG49aXQoMCk7ZnVuY3Rpb24gY3MobCx0KXtsPXh0LEsocG4sbCksSyhlZSx0KSx4dD1sfHQuYmFzZUxhbmVzfWZ1bmN0aW9uIE9jKCl7Syhwbix4dCksSyhlZSxlZS5jdXJyZW50KX1mdW5jdGlvbiBTZigpe3h0PXBuLmN1cnJlbnQsc2woZWUpLHNsKHBuKX12YXIgWWw9aXQobnVsbCksSmw9bnVsbDtmdW5jdGlvbiBSdChsKXt2YXIgdD1sLmFsdGVybmF0ZTtLKGxsLGxsLmN1cnJlbnQmMSksSyhZbCxsKSxKbD09PW51bGwmJih0PT09bnVsbHx8ZWUuY3VycmVudCE9PW51bGx8fHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYoSmw9bCl9ZnVuY3Rpb24gX2MobCl7SyhsbCxsbC5jdXJyZW50KSxLKFlsLGwpLEpsPT09bnVsbCYmKEpsPWwpfWZ1bmN0aW9uIFAwKGwpe2wudGFnPT09MjI/KEsobGwsbGwuY3VycmVudCksSyhZbCxsKSxKbD09PW51bGwmJihKbD1sKSk6QnQobCl9ZnVuY3Rpb24gQnQoKXtLKGxsLGxsLmN1cnJlbnQpLEsoWWwsWWwuY3VycmVudCl9ZnVuY3Rpb24gRGwobCl7c2woWWwpLEpsPT09bCYmKEpsPW51bGwpLHNsKGxsKX12YXIgbGw9aXQoMCk7ZnVuY3Rpb24gU24obCl7Zm9yKHZhciB0PWw7dCE9PW51bGw7KXtpZih0LnRhZz09PTEzKXt2YXIgYT10Lm1lbW9pemVkU3RhdGU7aWYoYSE9PW51bGwmJihhPWEuZGVoeWRyYXRlZCxhPT09bnVsbHx8d2MoYSl8fFdjKGEpKSlyZXR1cm4gdH1lbHNlIGlmKHQudGFnPT09MTkmJih0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXI9PT0iZm9yd2FyZHMifHx0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXI9PT0iYmFja3dhcmRzInx8dC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyPT09InVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHMifHx0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXI9PT0idG9nZXRoZXIiKSl7aWYoKHQuZmxhZ3MmMTI4KSE9PTApcmV0dXJuIHR9ZWxzZSBpZih0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWwpYnJlYWs7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHx0LnJldHVybj09PWwpcmV0dXJuIG51bGw7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfXJldHVybiBudWxsfXZhciBBdD0wLEg9bnVsbCxWPW51bGwsYWw9bnVsbCxFbj0hMSxGYT0hMSxnYT0hMSx6bj0wLHR1PTAsSWE9bnVsbCxXaD0wO2Z1bmN0aW9uIEkoKXt0aHJvdyBFcnJvcihwKDMyMSkpfWZ1bmN0aW9uIEVmKGwsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmYTxsLmxlbmd0aDthKyspaWYoIXFsKGxbYV0sdFthXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gemYobCx0LGEsZSx1LG4pe3JldHVybiBBdD1uLEg9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLE8uSD1sPT09bnVsbHx8bC5tZW1vaXplZFN0YXRlPT09bnVsbD9VMTpDZixnYT0hMSxuPWEoZSx1KSxnYT0hMSxGYSYmKG49dDEodCxhLGUsdSkpLGwxKGwpLG59ZnVuY3Rpb24gbDEobCl7Ty5IPWF1O3ZhciB0PVYhPT1udWxsJiZWLm5leHQhPT1udWxsO2lmKEF0PTAsYWw9Vj1IPW51bGwsRW49ITEsdHU9MCxJYT1udWxsLHQpdGhyb3cgRXJyb3IocCgzMDApKTtsPT09bnVsbHx8bmx8fChsPWwuZGVwZW5kZW5jaWVzLGwhPT1udWxsJiZnbihsKSYmKG5sPSEwKSl9ZnVuY3Rpb24gdDEobCx0LGEsZSl7SD1sO3ZhciB1PTA7ZG97aWYoRmEmJihJYT1udWxsKSx0dT0wLEZhPSExLDI1PD11KXRocm93IEVycm9yKHAoMzAxKSk7aWYodSs9MSxhbD1WPW51bGwsbC51cGRhdGVRdWV1ZSE9bnVsbCl7dmFyIG49bC51cGRhdGVRdWV1ZTtuLmxhc3RFZmZlY3Q9bnVsbCxuLmV2ZW50cz1udWxsLG4uc3RvcmVzPW51bGwsbi5tZW1vQ2FjaGUhPW51bGwmJihuLm1lbW9DYWNoZS5pbmRleD0wKX1PLkg9SDEsbj10KGEsZSl9d2hpbGUoRmEpO3JldHVybiBufWZ1bmN0aW9uICRoKCl7dmFyIGw9Ty5ILHQ9bC51c2VTdGF0ZSgpWzBdO3JldHVybiB0PXR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiI/dnUodCk6dCxsPWwudXNlU3RhdGUoKVswXSwoViE9PW51bGw/Vi5tZW1vaXplZFN0YXRlOm51bGwpIT09bCYmKEguZmxhZ3N8PTEwMjQpLHR9ZnVuY3Rpb24gQWYoKXt2YXIgbD16biE9PTA7cmV0dXJuIHpuPTAsbH1mdW5jdGlvbiBNZihsLHQsYSl7dC51cGRhdGVRdWV1ZT1sLnVwZGF0ZVF1ZXVlLHQuZmxhZ3MmPS0yMDUzLGwubGFuZXMmPX5hfWZ1bmN0aW9uIFRmKGwpe2lmKEVuKXtmb3IobD1sLm1lbW9pemVkU3RhdGU7bCE9PW51bGw7KXt2YXIgdD1sLnF1ZXVlO3QhPT1udWxsJiYodC5wZW5kaW5nPW51bGwpLGw9bC5uZXh0fUVuPSExfUF0PTAsYWw9Vj1IPW51bGwsRmE9ITEsdHU9em49MCxJYT1udWxsfWZ1bmN0aW9uIHBsKCl7dmFyIGw9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07cmV0dXJuIGFsPT09bnVsbD9ILm1lbW9pemVkU3RhdGU9YWw9bDphbD1hbC5uZXh0PWwsYWx9ZnVuY3Rpb24gdGwoKXtpZihWPT09bnVsbCl7dmFyIGw9SC5hbHRlcm5hdGU7bD1sIT09bnVsbD9sLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGw9Vi5uZXh0O3ZhciB0PWFsPT09bnVsbD9ILm1lbW9pemVkU3RhdGU6YWwubmV4dDtpZih0IT09bnVsbClhbD10LFY9bDtlbHNle2lmKGw9PT1udWxsKXRocm93IEguYWx0ZXJuYXRlPT09bnVsbD9FcnJvcihwKDQ2NykpOkVycm9yKHAoMzEwKSk7Vj1sLGw9e21lbW9pemVkU3RhdGU6Vi5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpWLmJhc2VTdGF0ZSxiYXNlUXVldWU6Vi5iYXNlUXVldWUscXVldWU6Vi5xdWV1ZSxuZXh0Om51bGx9LGFsPT09bnVsbD9ILm1lbW9pemVkU3RhdGU9YWw9bDphbD1hbC5uZXh0PWx9cmV0dXJuIGFsfWZ1bmN0aW9uIEtuKCl7cmV0dXJue2xhc3RFZmZlY3Q6bnVsbCxldmVudHM6bnVsbCxzdG9yZXM6bnVsbCxtZW1vQ2FjaGU6bnVsbH19ZnVuY3Rpb24gdnUobCl7dmFyIHQ9dHU7cmV0dXJuIHR1Kz0xLElhPT09bnVsbCYmKElhPVtdKSxsPVcwKElhLGwsdCksdD1ILChhbD09PW51bGw/dC5tZW1vaXplZFN0YXRlOmFsLm5leHQpPT09bnVsbCYmKHQ9dC5hbHRlcm5hdGUsTy5IPXQ9PT1udWxsfHx0Lm1lbW9pemVkU3RhdGU9PT1udWxsP1UxOkNmKSxsfWZ1bmN0aW9uIEpuKGwpe2lmKGwhPT1udWxsJiZ0eXBlb2YgbD09Im9iamVjdCIpe2lmKHR5cGVvZiBsLnRoZW49PSJmdW5jdGlvbiIpcmV0dXJuIHZ1KGwpO2lmKGwuJCR0eXBlb2Y9PT15dClyZXR1cm4gcmwobCl9dGhyb3cgRXJyb3IocCg0MzgsU3RyaW5nKGwpKSl9ZnVuY3Rpb24geGYobCl7dmFyIHQ9bnVsbCxhPUgudXBkYXRlUXVldWU7aWYoYSE9PW51bGwmJih0PWEubWVtb0NhY2hlKSx0PT1udWxsKXt2YXIgZT1ILmFsdGVybmF0ZTtlIT09bnVsbCYmKGU9ZS51cGRhdGVRdWV1ZSxlIT09bnVsbCYmKGU9ZS5tZW1vQ2FjaGUsZSE9bnVsbCYmKHQ9e2RhdGE6ZS5kYXRhLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gdS5zbGljZSgpfSksaW5kZXg6MH0pKSl9aWYodD09bnVsbCYmKHQ9e2RhdGE6W10saW5kZXg6MH0pLGE9PT1udWxsJiYoYT1LbigpLEgudXBkYXRlUXVldWU9YSksYS5tZW1vQ2FjaGU9dCxhPXQuZGF0YVt0LmluZGV4XSxhPT09dm9pZCAwKWZvcihhPXQuZGF0YVt0LmluZGV4XT1BcnJheShsKSxlPTA7ZTxsO2UrKylhW2VdPVJkO3JldHVybiB0LmluZGV4KyssYX1mdW5jdGlvbiBNdChsLHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KGwpOnR9ZnVuY3Rpb24gUHUobCl7dmFyIHQ9dGwoKTtyZXR1cm4gT2YodCxWLGwpfWZ1bmN0aW9uIE9mKGwsdCxhKXt2YXIgZT1sLnF1ZXVlO2lmKGU9PT1udWxsKXRocm93IEVycm9yKHAoMzExKSk7ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIHU9bC5iYXNlUXVldWUsbj1lLnBlbmRpbmc7aWYobiE9PW51bGwpe2lmKHUhPT1udWxsKXt2YXIgaT11Lm5leHQ7dS5uZXh0PW4ubmV4dCxuLm5leHQ9aX10LmJhc2VRdWV1ZT11PW4sZS5wZW5kaW5nPW51bGx9aWYobj1sLmJhc2VTdGF0ZSx1PT09bnVsbClsLm1lbW9pemVkU3RhdGU9bjtlbHNle3Q9dS5uZXh0O3ZhciBjPWk9bnVsbCxmPW51bGwsZD10LHY9ITE7ZG97dmFyIHk9ZC5sYW5lJi01MzY4NzA5MTM7aWYoeSE9PWQubGFuZT8oUiZ5KT09PXk6KEF0JnkpPT09eSl7dmFyIG09ZC5yZXZlcnRMYW5lO2lmKG09PT0wKWYhPT1udWxsJiYoZj1mLm5leHQ9e2xhbmU6MCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjpkLmFjdGlvbixoYXNFYWdlclN0YXRlOmQuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOmQuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSx5PT09YWUmJih2PSEwKTtlbHNlIGlmKChBdCZtKT09PW0pe2Q9ZC5uZXh0LG09PT1hZSYmKHY9ITApO2NvbnRpbnVlfWVsc2UgeT17bGFuZTowLHJldmVydExhbmU6ZC5yZXZlcnRMYW5lLGdlc3R1cmU6bnVsbCxhY3Rpb246ZC5hY3Rpb24saGFzRWFnZXJTdGF0ZTpkLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpkLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxmPT09bnVsbD8oYz1mPXksaT1uKTpmPWYubmV4dD15LEgubGFuZXN8PW0sbGF8PW07eT1kLmFjdGlvbixnYSYmYShuLHkpLG49ZC5oYXNFYWdlclN0YXRlP2QuZWFnZXJTdGF0ZTphKG4seSl9ZWxzZSBtPXtsYW5lOnkscmV2ZXJ0TGFuZTpkLnJldmVydExhbmUsZ2VzdHVyZTpkLmdlc3R1cmUsYWN0aW9uOmQuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6ZC5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6ZC5lYWdlclN0YXRlLG5leHQ6bnVsbH0sZj09PW51bGw/KGM9Zj1tLGk9bik6Zj1mLm5leHQ9bSxILmxhbmVzfD15LGxhfD15O2Q9ZC5uZXh0fXdoaWxlKGQhPT1udWxsJiZkIT09dCk7aWYoZj09PW51bGw/aT1uOmYubmV4dD1jLCFxbChuLGwubWVtb2l6ZWRTdGF0ZSkmJihubD0hMCx2JiYoYT0kYSxhIT09bnVsbCkpKXRocm93IGE7bC5tZW1vaXplZFN0YXRlPW4sbC5iYXNlU3RhdGU9aSxsLmJhc2VRdWV1ZT1mLGUubGFzdFJlbmRlcmVkU3RhdGU9bn1yZXR1cm4gdT09PW51bGwmJihlLmxhbmVzPTApLFtsLm1lbW9pemVkU3RhdGUsZS5kaXNwYXRjaF19ZnVuY3Rpb24gWGkobCl7dmFyIHQ9dGwoKSxhPXQucXVldWU7aWYoYT09PW51bGwpdGhyb3cgRXJyb3IocCgzMTEpKTthLmxhc3RSZW5kZXJlZFJlZHVjZXI9bDt2YXIgZT1hLmRpc3BhdGNoLHU9YS5wZW5kaW5nLG49dC5tZW1vaXplZFN0YXRlO2lmKHUhPT1udWxsKXthLnBlbmRpbmc9bnVsbDt2YXIgaT11PXUubmV4dDtkbyBuPWwobixpLmFjdGlvbiksaT1pLm5leHQ7d2hpbGUoaSE9PXUpO3FsKG4sdC5tZW1vaXplZFN0YXRlKXx8KG5sPSEwKSx0Lm1lbW9pemVkU3RhdGU9bix0LmJhc2VRdWV1ZT09PW51bGwmJih0LmJhc2VTdGF0ZT1uKSxhLmxhc3RSZW5kZXJlZFN0YXRlPW59cmV0dXJuW24sZV19ZnVuY3Rpb24gYTEobCx0LGEpe3ZhciBlPUgsdT10bCgpLG49QjtpZihuKXtpZihhPT09dm9pZCAwKXRocm93IEVycm9yKHAoNDA3KSk7YT1hKCl9ZWxzZSBhPXQoKTt2YXIgaT0hcWwoKFZ8fHUpLm1lbW9pemVkU3RhdGUsYSk7aWYoaSYmKHUubWVtb2l6ZWRTdGF0ZT1hLG5sPSEwKSx1PXUucXVldWUsX2YobjEuYmluZChudWxsLGUsdSxsKSxbbF0pLHUuZ2V0U25hcHNob3QhPT10fHxpfHxhbCE9PW51bGwmJmFsLm1lbW9pemVkU3RhdGUudGFnJjEpe2lmKGUuZmxhZ3N8PTIwNDgsdWUoOSx7ZGVzdHJveTp2b2lkIDB9LHUxLmJpbmQobnVsbCxlLHUsYSx0KSxudWxsKSxMPT09bnVsbCl0aHJvdyBFcnJvcihwKDM0OSkpO258fChBdCYxMjcpIT09MHx8ZTEoZSx0LGEpfXJldHVybiBhfWZ1bmN0aW9uIGUxKGwsdCxhKXtsLmZsYWdzfD0xNjM4NCxsPXtnZXRTbmFwc2hvdDp0LHZhbHVlOmF9LHQ9SC51cGRhdGVRdWV1ZSx0PT09bnVsbD8odD1LbigpLEgudXBkYXRlUXVldWU9dCx0LnN0b3Jlcz1bbF0pOihhPXQuc3RvcmVzLGE9PT1udWxsP3Quc3RvcmVzPVtsXTphLnB1c2gobCkpfWZ1bmN0aW9uIHUxKGwsdCxhLGUpe3QudmFsdWU9YSx0LmdldFNuYXBzaG90PWUsaTEodCkmJmMxKGwpfWZ1bmN0aW9uIG4xKGwsdCxhKXtyZXR1cm4gYShmdW5jdGlvbigpe2kxKHQpJiZjMShsKX0pfWZ1bmN0aW9uIGkxKGwpe3ZhciB0PWwuZ2V0U25hcHNob3Q7bD1sLnZhbHVlO3RyeXt2YXIgYT10KCk7cmV0dXJuIXFsKGwsYSl9Y2F0Y2h7cmV0dXJuITB9fWZ1bmN0aW9uIGMxKGwpe3ZhciB0PXphKGwsMik7dCE9PW51bGwmJk1sKHQsbCwyKX1mdW5jdGlvbiBEYyhsKXt2YXIgdD1wbCgpO2lmKHR5cGVvZiBsPT0iZnVuY3Rpb24iKXt2YXIgYT1sO2lmKGw9YSgpLGdhKXtZdCghMCk7dHJ5e2EoKX1maW5hbGx5e1l0KCExKX19fXJldHVybiB0Lm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9bCx0LnF1ZXVlPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6TXQsbGFzdFJlbmRlcmVkU3RhdGU6bH0sdH1mdW5jdGlvbiBmMShsLHQsYSxlKXtyZXR1cm4gbC5iYXNlU3RhdGU9YSxPZihsLFYsdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpNdCl9ZnVuY3Rpb24ga2gobCx0LGEsZSx1KXtpZihXbihsKSl0aHJvdyBFcnJvcihwKDQ4NSkpO2lmKGw9dC5hY3Rpb24sbCE9PW51bGwpe3ZhciBuPXtwYXlsb2FkOnUsYWN0aW9uOmwsbmV4dDpudWxsLGlzVHJhbnNpdGlvbjohMCxzdGF0dXM6InBlbmRpbmciLHZhbHVlOm51bGwscmVhc29uOm51bGwsbGlzdGVuZXJzOltdLHRoZW46ZnVuY3Rpb24oaSl7bi5saXN0ZW5lcnMucHVzaChpKX19O08uVCE9PW51bGw/YSghMCk6bi5pc1RyYW5zaXRpb249ITEsZShuKSxhPXQucGVuZGluZyxhPT09bnVsbD8obi5uZXh0PXQucGVuZGluZz1uLG8xKHQsbikpOihuLm5leHQ9YS5uZXh0LHQucGVuZGluZz1hLm5leHQ9bil9fWZ1bmN0aW9uIG8xKGwsdCl7dmFyIGE9dC5hY3Rpb24sZT10LnBheWxvYWQsdT1sLnN0YXRlO2lmKHQuaXNUcmFuc2l0aW9uKXt2YXIgbj1PLlQsaT17fTtPLlQ9aTt0cnl7dmFyIGM9YSh1LGUpLGY9Ty5TO2YhPT1udWxsJiZmKGksYyksZnMobCx0LGMpfWNhdGNoKGQpe1VjKGwsdCxkKX1maW5hbGx5e24hPT1udWxsJiZpLnR5cGVzIT09bnVsbCYmKG4udHlwZXM9aS50eXBlcyksTy5UPW59fWVsc2UgdHJ5e249YSh1LGUpLGZzKGwsdCxuKX1jYXRjaChkKXtVYyhsLHQsZCl9fWZ1bmN0aW9uIGZzKGwsdCxhKXthIT09bnVsbCYmdHlwZW9mIGE9PSJvYmplY3QiJiZ0eXBlb2YgYS50aGVuPT0iZnVuY3Rpb24iP2EudGhlbihmdW5jdGlvbihlKXtvcyhsLHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBVYyhsLHQsZSl9KTpvcyhsLHQsYSl9ZnVuY3Rpb24gb3MobCx0LGEpe3Quc3RhdHVzPSJmdWxmaWxsZWQiLHQudmFsdWU9YSxzMSh0KSxsLnN0YXRlPWEsdD1sLnBlbmRpbmcsdCE9PW51bGwmJihhPXQubmV4dCxhPT09dD9sLnBlbmRpbmc9bnVsbDooYT1hLm5leHQsdC5uZXh0PWEsbzEobCxhKSkpfWZ1bmN0aW9uIFVjKGwsdCxhKXt2YXIgZT1sLnBlbmRpbmc7aWYobC5wZW5kaW5nPW51bGwsZSE9PW51bGwpe2U9ZS5uZXh0O2RvIHQuc3RhdHVzPSJyZWplY3RlZCIsdC5yZWFzb249YSxzMSh0KSx0PXQubmV4dDt3aGlsZSh0IT09ZSl9bC5hY3Rpb249bnVsbH1mdW5jdGlvbiBzMShsKXtsPWwubGlzdGVuZXJzO2Zvcih2YXIgdD0wO3Q8bC5sZW5ndGg7dCsrKSgwLGxbdF0pKCl9ZnVuY3Rpb24gbTEobCx0KXtyZXR1cm4gdH1mdW5jdGlvbiBzcyhsLHQpe2lmKEIpe3ZhciBhPUwuZm9ybVN0YXRlO2lmKGEhPT1udWxsKXtsOnt2YXIgZT1IO2lmKEIpe2lmKFcpe3Q6e2Zvcih2YXIgdT1XLG49S2w7dS5ub2RlVHlwZSE9PTg7KXtpZighbil7dT1udWxsO2JyZWFrIHR9aWYodT13bCh1Lm5leHRTaWJsaW5nKSx1PT09bnVsbCl7dT1udWxsO2JyZWFrIHR9fW49dS5kYXRhLHU9bj09PSJGISJ8fG49PT0iRiI/dTpudWxsfWlmKHUpe1c9d2wodS5uZXh0U2libGluZyksZT11LmRhdGE9PT0iRiEiO2JyZWFrIGx9fUl0KGUpfWU9ITF9ZSYmKHQ9YVswXSl9fXJldHVybiBhPXBsKCksYS5tZW1vaXplZFN0YXRlPWEuYmFzZVN0YXRlPXQsZT17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOm0xLGxhc3RSZW5kZXJlZFN0YXRlOnR9LGEucXVldWU9ZSxhPU8xLmJpbmQobnVsbCxILGUpLGUuZGlzcGF0Y2g9YSxlPURjKCExKSxuPU5mLmJpbmQobnVsbCxILCExLGUucXVldWUpLGU9cGwoKSx1PXtzdGF0ZTp0LGRpc3BhdGNoOm51bGwsYWN0aW9uOmwscGVuZGluZzpudWxsfSxlLnF1ZXVlPXUsYT1raC5iaW5kKG51bGwsSCx1LG4sYSksdS5kaXNwYXRjaD1hLGUubWVtb2l6ZWRTdGF0ZT1sLFt0LGEsITFdfWZ1bmN0aW9uIG1zKGwpe3ZhciB0PXRsKCk7cmV0dXJuIGQxKHQsVixsKX1mdW5jdGlvbiBkMShsLHQsYSl7aWYodD1PZihsLHQsbTEpWzBdLGw9UHUoTXQpWzBdLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiIpdHJ5e3ZhciBlPXZ1KHQpfWNhdGNoKGkpe3Rocm93IGk9PT1oZT9MbjppfWVsc2UgZT10O3Q9dGwoKTt2YXIgdT10LnF1ZXVlLG49dS5kaXNwYXRjaDtyZXR1cm4gYSE9PXQubWVtb2l6ZWRTdGF0ZSYmKEguZmxhZ3N8PTIwNDgsdWUoOSx7ZGVzdHJveTp2b2lkIDB9LEZoLmJpbmQobnVsbCx1LGEpLG51bGwpKSxbZSxuLGxdfWZ1bmN0aW9uIEZoKGwsdCl7bC5hY3Rpb249dH1mdW5jdGlvbiBkcyhsKXt2YXIgdD10bCgpLGE9VjtpZihhIT09bnVsbClyZXR1cm4gZDEodCxhLGwpO3RsKCksdD10Lm1lbW9pemVkU3RhdGUsYT10bCgpO3ZhciBlPWEucXVldWUuZGlzcGF0Y2g7cmV0dXJuIGEubWVtb2l6ZWRTdGF0ZT1sLFt0LGUsITFdfWZ1bmN0aW9uIHVlKGwsdCxhLGUpe3JldHVybiBsPXt0YWc6bCxjcmVhdGU6YSxkZXBzOmUsaW5zdDp0LG5leHQ6bnVsbH0sdD1ILnVwZGF0ZVF1ZXVlLHQ9PT1udWxsJiYodD1LbigpLEgudXBkYXRlUXVldWU9dCksYT10Lmxhc3RFZmZlY3QsYT09PW51bGw/dC5sYXN0RWZmZWN0PWwubmV4dD1sOihlPWEubmV4dCxhLm5leHQ9bCxsLm5leHQ9ZSx0Lmxhc3RFZmZlY3Q9bCksbH1mdW5jdGlvbiBoMSgpe3JldHVybiB0bCgpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gbG4obCx0LGEsZSl7dmFyIHU9cGwoKTtILmZsYWdzfD1sLHUubWVtb2l6ZWRTdGF0ZT11ZSgxfHQse2Rlc3Ryb3k6dm9pZCAwfSxhLGU9PT12b2lkIDA/bnVsbDplKX1mdW5jdGlvbiB3bihsLHQsYSxlKXt2YXIgdT10bCgpO2U9ZT09PXZvaWQgMD9udWxsOmU7dmFyIG49dS5tZW1vaXplZFN0YXRlLmluc3Q7ViE9PW51bGwmJmUhPT1udWxsJiZFZihlLFYubWVtb2l6ZWRTdGF0ZS5kZXBzKT91Lm1lbW9pemVkU3RhdGU9dWUodCxuLGEsZSk6KEguZmxhZ3N8PWwsdS5tZW1vaXplZFN0YXRlPXVlKDF8dCxuLGEsZSkpfWZ1bmN0aW9uIGhzKGwsdCl7bG4oODM5MDY1Niw4LGwsdCl9ZnVuY3Rpb24gX2YobCx0KXt3bigyMDQ4LDgsbCx0KX1mdW5jdGlvbiBJaChsKXtILmZsYWdzfD00O3ZhciB0PUgudXBkYXRlUXVldWU7aWYodD09PW51bGwpdD1LbigpLEgudXBkYXRlUXVldWU9dCx0LmV2ZW50cz1bbF07ZWxzZXt2YXIgYT10LmV2ZW50czthPT09bnVsbD90LmV2ZW50cz1bbF06YS5wdXNoKGwpfX1mdW5jdGlvbiByMShsKXt2YXIgdD10bCgpLm1lbW9pemVkU3RhdGU7cmV0dXJuIEloKHtyZWY6dCxuZXh0SW1wbDpsfSksZnVuY3Rpb24oKXtpZigoWSYyKSE9PTApdGhyb3cgRXJyb3IocCg0NDApKTtyZXR1cm4gdC5pbXBsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1mdW5jdGlvbiB2MShsLHQpe3JldHVybiB3big0LDIsbCx0KX1mdW5jdGlvbiB5MShsLHQpe3JldHVybiB3big0LDQsbCx0KX1mdW5jdGlvbiBnMShsLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXtsPWwoKTt2YXIgYT10KGwpO3JldHVybiBmdW5jdGlvbigpe3R5cGVvZiBhPT0iZnVuY3Rpb24iP2EoKTp0KG51bGwpfX1pZih0IT1udWxsKXJldHVybiBsPWwoKSx0LmN1cnJlbnQ9bCxmdW5jdGlvbigpe3QuY3VycmVudD1udWxsfX1mdW5jdGlvbiBiMShsLHQsYSl7YT1hIT1udWxsP2EuY29uY2F0KFtsXSk6bnVsbCx3big0LDQsZzEuYmluZChudWxsLHQsbCksYSl9ZnVuY3Rpb24gRGYoKXt9ZnVuY3Rpb24gcDEobCx0KXt2YXIgYT10bCgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIGU9YS5tZW1vaXplZFN0YXRlO3JldHVybiB0IT09bnVsbCYmRWYodCxlWzFdKT9lWzBdOihhLm1lbW9pemVkU3RhdGU9W2wsdF0sbCl9ZnVuY3Rpb24gUzEobCx0KXt2YXIgYT10bCgpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIGU9YS5tZW1vaXplZFN0YXRlO2lmKHQhPT1udWxsJiZFZih0LGVbMV0pKXJldHVybiBlWzBdO2lmKGU9bCgpLGdhKXtZdCghMCk7dHJ5e2woKX1maW5hbGx5e1l0KCExKX19cmV0dXJuIGEubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlfWZ1bmN0aW9uIFVmKGwsdCxhKXtyZXR1cm4gYT09PXZvaWQgMHx8KEF0JjEwNzM3NDE4MjQpIT09MCYmKFImMjYxOTMwKT09PTA/bC5tZW1vaXplZFN0YXRlPXQ6KGwubWVtb2l6ZWRTdGF0ZT1hLGw9Zm0oKSxILmxhbmVzfD1sLGxhfD1sLGEpfWZ1bmN0aW9uIEUxKGwsdCxhLGUpe3JldHVybiBxbChhLHQpP2E6ZWUuY3VycmVudCE9PW51bGw/KGw9VWYobCxhLGUpLHFsKGwsdCl8fChubD0hMCksbCk6KEF0JjQyKT09PTB8fChBdCYxMDczNzQxODI0KSE9PTAmJihSJjI2MTkzMCk9PT0wPyhubD0hMCxsLm1lbW9pemVkU3RhdGU9YSk6KGw9Zm0oKSxILmxhbmVzfD1sLGxhfD1sLHQpfWZ1bmN0aW9uIHoxKGwsdCxhLGUsdSl7dmFyIG49Ry5wO0cucD1uIT09MCYmOD5uP246ODt2YXIgaT1PLlQsYz17fTtPLlQ9YyxOZihsLCExLHQsYSk7dHJ5e3ZhciBmPXUoKSxkPU8uUztpZihkIT09bnVsbCYmZChjLGYpLGYhPT1udWxsJiZ0eXBlb2YgZj09Im9iamVjdCImJnR5cGVvZiBmLnRoZW49PSJmdW5jdGlvbiIpe3ZhciB2PXdoKGYsZSk7WmUobCx0LHYsQmwobCkpfWVsc2UgWmUobCx0LGUsQmwobCkpfWNhdGNoKHkpe1plKGwsdCx7dGhlbjpmdW5jdGlvbigpe30sc3RhdHVzOiJyZWplY3RlZCIscmVhc29uOnl9LEJsKCkpfWZpbmFsbHl7Ry5wPW4saSE9PW51bGwmJmMudHlwZXMhPT1udWxsJiYoaS50eXBlcz1jLnR5cGVzKSxPLlQ9aX19ZnVuY3Rpb24gUGgoKXt9ZnVuY3Rpb24gSGMobCx0LGEsZSl7aWYobC50YWchPT01KXRocm93IEVycm9yKHAoNDc2KSk7dmFyIHU9QTEobCkucXVldWU7ejEobCx1LHQsb2EsYT09PW51bGw/UGg6ZnVuY3Rpb24oKXtyZXR1cm4gTTEobCksYShlKX0pfWZ1bmN0aW9uIEExKGwpe3ZhciB0PWwubWVtb2l6ZWRTdGF0ZTtpZih0IT09bnVsbClyZXR1cm4gdDt0PXttZW1vaXplZFN0YXRlOm9hLGJhc2VTdGF0ZTpvYSxiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOk10LGxhc3RSZW5kZXJlZFN0YXRlOm9hfSxuZXh0Om51bGx9O3ZhciBhPXt9O3JldHVybiB0Lm5leHQ9e21lbW9pemVkU3RhdGU6YSxiYXNlU3RhdGU6YSxiYXNlUXVldWU6bnVsbCxxdWV1ZTp7cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOk10LGxhc3RSZW5kZXJlZFN0YXRlOmF9LG5leHQ6bnVsbH0sbC5tZW1vaXplZFN0YXRlPXQsbD1sLmFsdGVybmF0ZSxsIT09bnVsbCYmKGwubWVtb2l6ZWRTdGF0ZT10KSx0fWZ1bmN0aW9uIE0xKGwpe3ZhciB0PUExKGwpO3QubmV4dD09PW51bGwmJih0PWwuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpLFplKGwsdC5uZXh0LnF1ZXVlLHt9LEJsKCkpfWZ1bmN0aW9uIEhmKCl7cmV0dXJuIHJsKG51KX1mdW5jdGlvbiBUMSgpe3JldHVybiB0bCgpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24geDEoKXtyZXR1cm4gdGwoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGxyKGwpe2Zvcih2YXIgdD1sLnJldHVybjt0IT09bnVsbDspe3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpjYXNlIDM6dmFyIGE9QmwoKTtsPUx0KGEpO3ZhciBlPUt0KHQsbCxhKTtlIT09bnVsbCYmKE1sKGUsdCxhKSxYZShlLHQsYSkpLHQ9e2NhY2hlOnlmKCl9LGwucGF5bG9hZD10O3JldHVybn10PXQucmV0dXJufX1mdW5jdGlvbiB0cihsLHQsYSl7dmFyIGU9QmwoKTthPXtsYW5lOmUscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246YSxoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LFduKGwpP18xKHQsYSk6KGE9ZGYobCx0LGEsZSksYSE9PW51bGwmJihNbChhLGwsZSksRDEoYSx0LGUpKSl9ZnVuY3Rpb24gTzEobCx0LGEpe3ZhciBlPUJsKCk7WmUobCx0LGEsZSl9ZnVuY3Rpb24gWmUobCx0LGEsZSl7dmFyIHU9e2xhbmU6ZSxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjphLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoV24obCkpXzEodCx1KTtlbHNle3ZhciBuPWwuYWx0ZXJuYXRlO2lmKGwubGFuZXM9PT0wJiYobj09PW51bGx8fG4ubGFuZXM9PT0wKSYmKG49dC5sYXN0UmVuZGVyZWRSZWR1Y2VyLG4hPT1udWxsKSl0cnl7dmFyIGk9dC5sYXN0UmVuZGVyZWRTdGF0ZSxjPW4oaSxhKTtpZih1Lmhhc0VhZ2VyU3RhdGU9ITAsdS5lYWdlclN0YXRlPWMscWwoYyxpKSlyZXR1cm4gVm4obCx0LHUsMCksTD09PW51bGwmJlpuKCksITF9Y2F0Y2h7fWlmKGE9ZGYobCx0LHUsZSksYSE9PW51bGwpcmV0dXJuIE1sKGEsbCxlKSxEMShhLHQsZSksITB9cmV0dXJuITF9ZnVuY3Rpb24gTmYobCx0LGEsZSl7aWYoZT17bGFuZToyLHJldmVydExhbmU6amYoKSxnZXN0dXJlOm51bGwsYWN0aW9uOmUsaGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxXbihsKSl7aWYodCl0aHJvdyBFcnJvcihwKDQ3OSkpfWVsc2UgdD1kZihsLGEsZSwyKSx0IT09bnVsbCYmTWwodCxsLDIpfWZ1bmN0aW9uIFduKGwpe3ZhciB0PWwuYWx0ZXJuYXRlO3JldHVybiBsPT09SHx8dCE9PW51bGwmJnQ9PT1IfWZ1bmN0aW9uIF8xKGwsdCl7RmE9RW49ITA7dmFyIGE9bC5wZW5kaW5nO2E9PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9YS5uZXh0LGEubmV4dD10KSxsLnBlbmRpbmc9dH1mdW5jdGlvbiBEMShsLHQsYSl7aWYoKGEmNDE5NDA0OCkhPT0wKXt2YXIgZT10LmxhbmVzO2UmPWwucGVuZGluZ0xhbmVzLGF8PWUsdC5sYW5lcz1hLHIwKGwsYSl9fXZhciBhdT17cmVhZENvbnRleHQ6cmwsdXNlOkpuLHVzZUNhbGxiYWNrOkksdXNlQ29udGV4dDpJLHVzZUVmZmVjdDpJLHVzZUltcGVyYXRpdmVIYW5kbGU6SSx1c2VMYXlvdXRFZmZlY3Q6SSx1c2VJbnNlcnRpb25FZmZlY3Q6SSx1c2VNZW1vOkksdXNlUmVkdWNlcjpJLHVzZVJlZjpJLHVzZVN0YXRlOkksdXNlRGVidWdWYWx1ZTpJLHVzZURlZmVycmVkVmFsdWU6SSx1c2VUcmFuc2l0aW9uOkksdXNlU3luY0V4dGVybmFsU3RvcmU6SSx1c2VJZDpJLHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOkksdXNlRm9ybVN0YXRlOkksdXNlQWN0aW9uU3RhdGU6SSx1c2VPcHRpbWlzdGljOkksdXNlTWVtb0NhY2hlOkksdXNlQ2FjaGVSZWZyZXNoOkl9O2F1LnVzZUVmZmVjdEV2ZW50PUk7dmFyIFUxPXtyZWFkQ29udGV4dDpybCx1c2U6Sm4sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24obCx0KXtyZXR1cm4gcGwoKS5tZW1vaXplZFN0YXRlPVtsLHQ9PT12b2lkIDA/bnVsbDp0XSxsfSx1c2VDb250ZXh0OnJsLHVzZUVmZmVjdDpocyx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGwsdCxhKXthPWEhPW51bGw/YS5jb25jYXQoW2xdKTpudWxsLGxuKDQxOTQzMDgsNCxnMS5iaW5kKG51bGwsdCxsKSxhKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGwsdCl7cmV0dXJuIGxuKDQxOTQzMDgsNCxsLHQpfSx1c2VJbnNlcnRpb25FZmZlY3Q6ZnVuY3Rpb24obCx0KXtsbig0LDIsbCx0KX0sdXNlTWVtbzpmdW5jdGlvbihsLHQpe3ZhciBhPXBsKCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgZT1sKCk7aWYoZ2Epe1l0KCEwKTt0cnl7bCgpfWZpbmFsbHl7WXQoITEpfX1yZXR1cm4gYS5tZW1vaXplZFN0YXRlPVtlLHRdLGV9LHVzZVJlZHVjZXI6ZnVuY3Rpb24obCx0LGEpe3ZhciBlPXBsKCk7aWYoYSE9PXZvaWQgMCl7dmFyIHU9YSh0KTtpZihnYSl7WXQoITApO3RyeXthKHQpfWZpbmFsbHl7WXQoITEpfX19ZWxzZSB1PXQ7cmV0dXJuIGUubWVtb2l6ZWRTdGF0ZT1lLmJhc2VTdGF0ZT11LGw9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpsLGxhc3RSZW5kZXJlZFN0YXRlOnV9LGUucXVldWU9bCxsPWwuZGlzcGF0Y2g9dHIuYmluZChudWxsLEgsbCksW2UubWVtb2l6ZWRTdGF0ZSxsXX0sdXNlUmVmOmZ1bmN0aW9uKGwpe3ZhciB0PXBsKCk7cmV0dXJuIGw9e2N1cnJlbnQ6bH0sdC5tZW1vaXplZFN0YXRlPWx9LHVzZVN0YXRlOmZ1bmN0aW9uKGwpe2w9RGMobCk7dmFyIHQ9bC5xdWV1ZSxhPU8xLmJpbmQobnVsbCxILHQpO3JldHVybiB0LmRpc3BhdGNoPWEsW2wubWVtb2l6ZWRTdGF0ZSxhXX0sdXNlRGVidWdWYWx1ZTpEZix1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGwsdCl7dmFyIGE9cGwoKTtyZXR1cm4gVWYoYSxsLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGw9RGMoITEpO3JldHVybiBsPXoxLmJpbmQobnVsbCxILGwucXVldWUsITAsITEpLHBsKCkubWVtb2l6ZWRTdGF0ZT1sLFshMSxsXX0sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24obCx0LGEpe3ZhciBlPUgsdT1wbCgpO2lmKEIpe2lmKGE9PT12b2lkIDApdGhyb3cgRXJyb3IocCg0MDcpKTthPWEoKX1lbHNle2lmKGE9dCgpLEw9PT1udWxsKXRocm93IEVycm9yKHAoMzQ5KSk7KFImMTI3KSE9PTB8fGUxKGUsdCxhKX11Lm1lbW9pemVkU3RhdGU9YTt2YXIgbj17dmFsdWU6YSxnZXRTbmFwc2hvdDp0fTtyZXR1cm4gdS5xdWV1ZT1uLGhzKG4xLmJpbmQobnVsbCxlLG4sbCksW2xdKSxlLmZsYWdzfD0yMDQ4LHVlKDkse2Rlc3Ryb3k6dm9pZCAwfSx1MS5iaW5kKG51bGwsZSxuLGEsdCksbnVsbCksYX0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgbD1wbCgpLHQ9TC5pZGVudGlmaWVyUHJlZml4O2lmKEIpe3ZhciBhPWV0LGU9YXQ7YT0oZSZ+KDE8PDMyLVJsKGUpLTEpKS50b1N0cmluZygzMikrYSx0PSJfIit0KyJSXyIrYSxhPXpuKyssMDxhJiYodCs9IkgiK2EudG9TdHJpbmcoMzIpKSx0Kz0iXyJ9ZWxzZSBhPVdoKyssdD0iXyIrdCsicl8iK2EudG9TdHJpbmcoMzIpKyJfIjtyZXR1cm4gbC5tZW1vaXplZFN0YXRlPXR9LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOkhmLHVzZUZvcm1TdGF0ZTpzcyx1c2VBY3Rpb25TdGF0ZTpzcyx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGwpe3ZhciB0PXBsKCk7dC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWw7dmFyIGE9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpudWxsLGxhc3RSZW5kZXJlZFN0YXRlOm51bGx9O3JldHVybiB0LnF1ZXVlPWEsdD1OZi5iaW5kKG51bGwsSCwhMCxhKSxhLmRpc3BhdGNoPXQsW2wsdF19LHVzZU1lbW9DYWNoZTp4Zix1c2VDYWNoZVJlZnJlc2g6ZnVuY3Rpb24oKXtyZXR1cm4gcGwoKS5tZW1vaXplZFN0YXRlPWxyLmJpbmQobnVsbCxIKX0sdXNlRWZmZWN0RXZlbnQ6ZnVuY3Rpb24obCl7dmFyIHQ9cGwoKSxhPXtpbXBsOmx9O3JldHVybiB0Lm1lbW9pemVkU3RhdGU9YSxmdW5jdGlvbigpe2lmKChZJjIpIT09MCl0aHJvdyBFcnJvcihwKDQ0MCkpO3JldHVybiBhLmltcGwuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sQ2Y9e3JlYWRDb250ZXh0OnJsLHVzZTpKbix1c2VDYWxsYmFjazpwMSx1c2VDb250ZXh0OnJsLHVzZUVmZmVjdDpfZix1c2VJbXBlcmF0aXZlSGFuZGxlOmIxLHVzZUluc2VydGlvbkVmZmVjdDp2MSx1c2VMYXlvdXRFZmZlY3Q6eTEsdXNlTWVtbzpTMSx1c2VSZWR1Y2VyOlB1LHVzZVJlZjpoMSx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBQdShNdCl9LHVzZURlYnVnVmFsdWU6RGYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihsLHQpe3ZhciBhPXRsKCk7cmV0dXJuIEUxKGEsVi5tZW1vaXplZFN0YXRlLGwsdCl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgbD1QdShNdClbMF0sdD10bCgpLm1lbW9pemVkU3RhdGU7cmV0dXJuW3R5cGVvZiBsPT0iYm9vbGVhbiI/bDp2dShsKSx0XX0sdXNlU3luY0V4dGVybmFsU3RvcmU6YTEsdXNlSWQ6VDEsdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6SGYsdXNlRm9ybVN0YXRlOm1zLHVzZUFjdGlvblN0YXRlOm1zLHVzZU9wdGltaXN0aWM6ZnVuY3Rpb24obCx0KXt2YXIgYT10bCgpO3JldHVybiBmMShhLFYsbCx0KX0sdXNlTWVtb0NhY2hlOnhmLHVzZUNhY2hlUmVmcmVzaDp4MX07Q2YudXNlRWZmZWN0RXZlbnQ9cjE7dmFyIEgxPXtyZWFkQ29udGV4dDpybCx1c2U6Sm4sdXNlQ2FsbGJhY2s6cDEsdXNlQ29udGV4dDpybCx1c2VFZmZlY3Q6X2YsdXNlSW1wZXJhdGl2ZUhhbmRsZTpiMSx1c2VJbnNlcnRpb25FZmZlY3Q6djEsdXNlTGF5b3V0RWZmZWN0OnkxLHVzZU1lbW86UzEsdXNlUmVkdWNlcjpYaSx1c2VSZWY6aDEsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gWGkoTXQpfSx1c2VEZWJ1Z1ZhbHVlOkRmLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24obCx0KXt2YXIgYT10bCgpO3JldHVybiBWPT09bnVsbD9VZihhLGwsdCk6RTEoYSxWLm1lbW9pemVkU3RhdGUsbCx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBsPVhpKE10KVswXSx0PXRsKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdHlwZW9mIGw9PSJib29sZWFuIj9sOnZ1KGwpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTphMSx1c2VJZDpUMSx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpIZix1c2VGb3JtU3RhdGU6ZHMsdXNlQWN0aW9uU3RhdGU6ZHMsdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihsLHQpe3ZhciBhPXRsKCk7cmV0dXJuIFYhPT1udWxsP2YxKGEsVixsLHQpOihhLmJhc2VTdGF0ZT1sLFtsLGEucXVldWUuZGlzcGF0Y2hdKX0sdXNlTWVtb0NhY2hlOnhmLHVzZUNhY2hlUmVmcmVzaDp4MX07SDEudXNlRWZmZWN0RXZlbnQ9cjE7ZnVuY3Rpb24gUWkobCx0LGEsZSl7dD1sLm1lbW9pemVkU3RhdGUsYT1hKGUsdCksYT1hPT1udWxsP3Q6JCh7fSx0LGEpLGwubWVtb2l6ZWRTdGF0ZT1hLGwubGFuZXM9PT0wJiYobC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9YSl9dmFyIE5jPXtlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24obCx0LGEpe2w9bC5fcmVhY3RJbnRlcm5hbHM7dmFyIGU9QmwoKSx1PUx0KGUpO3UucGF5bG9hZD10LGEhPW51bGwmJih1LmNhbGxiYWNrPWEpLHQ9S3QobCx1LGUpLHQhPT1udWxsJiYoTWwodCxsLGUpLFhlKHQsbCxlKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24obCx0LGEpe2w9bC5fcmVhY3RJbnRlcm5hbHM7dmFyIGU9QmwoKSx1PUx0KGUpO3UudGFnPTEsdS5wYXlsb2FkPXQsYSE9bnVsbCYmKHUuY2FsbGJhY2s9YSksdD1LdChsLHUsZSksdCE9PW51bGwmJihNbCh0LGwsZSksWGUodCxsLGUpKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGwsdCl7bD1sLl9yZWFjdEludGVybmFsczt2YXIgYT1CbCgpLGU9THQoYSk7ZS50YWc9Mix0IT1udWxsJiYoZS5jYWxsYmFjaz10KSx0PUt0KGwsZSxhKSx0IT09bnVsbCYmKE1sKHQsbCxhKSxYZSh0LGwsYSkpfX07ZnVuY3Rpb24gcnMobCx0LGEsZSx1LG4saSl7cmV0dXJuIGw9bC5zdGF0ZU5vZGUsdHlwZW9mIGwuc2hvdWxkQ29tcG9uZW50VXBkYXRlPT0iZnVuY3Rpb24iP2wuc2hvdWxkQ29tcG9uZW50VXBkYXRlKGUsbixpKTp0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IUZlKGEsZSl8fCFGZSh1LG4pOiEwfWZ1bmN0aW9uIHZzKGwsdCxhLGUpe2w9dC5zdGF0ZSx0eXBlb2YgdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYSxlKSx0eXBlb2YgdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz09ImZ1bmN0aW9uIiYmdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhhLGUpLHQuc3RhdGUhPT1sJiZOYy5lbnF1ZXVlUmVwbGFjZVN0YXRlKHQsdC5zdGF0ZSxudWxsKX1mdW5jdGlvbiBiYShsLHQpe3ZhciBhPXQ7aWYoInJlZiJpbiB0KXthPXt9O2Zvcih2YXIgZSBpbiB0KWUhPT0icmVmIiYmKGFbZV09dFtlXSl9aWYobD1sLmRlZmF1bHRQcm9wcyl7YT09PXQmJihhPSQoe30sYSkpO2Zvcih2YXIgdSBpbiBsKWFbdV09PT12b2lkIDAmJihhW3VdPWxbdV0pfXJldHVybiBhfWZ1bmN0aW9uIE4xKGwpe3JuKGwpfWZ1bmN0aW9uIEMxKGwpe2NvbnNvbGUuZXJyb3IobCl9ZnVuY3Rpb24gUjEobCl7cm4obCl9ZnVuY3Rpb24gQW4obCx0KXt0cnl7dmFyIGE9bC5vblVuY2F1Z2h0RXJyb3I7YSh0LnZhbHVlLHtjb21wb25lbnRTdGFjazp0LnN0YWNrfSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19ZnVuY3Rpb24geXMobCx0LGEpe3RyeXt2YXIgZT1sLm9uQ2F1Z2h0RXJyb3I7ZShhLnZhbHVlLHtjb21wb25lbnRTdGFjazphLnN0YWNrLGVycm9yQm91bmRhcnk6dC50YWc9PT0xP3Quc3RhdGVOb2RlOm51bGx9KX1jYXRjaCh1KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdX0pfX1mdW5jdGlvbiBDYyhsLHQsYSl7cmV0dXJuIGE9THQoYSksYS50YWc9MyxhLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH0sYS5jYWxsYmFjaz1mdW5jdGlvbigpe0FuKGwsdCl9LGF9ZnVuY3Rpb24gQjEobCl7cmV0dXJuIGw9THQobCksbC50YWc9MyxsfWZ1bmN0aW9uIHExKGwsdCxhLGUpe3ZhciB1PWEudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYodHlwZW9mIHU9PSJmdW5jdGlvbiIpe3ZhciBuPWUudmFsdWU7bC5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHUobil9LGwuY2FsbGJhY2s9ZnVuY3Rpb24oKXt5cyh0LGEsZSl9fXZhciBpPWEuc3RhdGVOb2RlO2khPT1udWxsJiZ0eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKGwuY2FsbGJhY2s9ZnVuY3Rpb24oKXt5cyh0LGEsZSksdHlwZW9mIHUhPSJmdW5jdGlvbiImJihKdD09PW51bGw/SnQ9bmV3IFNldChbdGhpc10pOkp0LmFkZCh0aGlzKSk7dmFyIGM9ZS5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKGUudmFsdWUse2NvbXBvbmVudFN0YWNrOmMhPT1udWxsP2M6IiJ9KX0pfWZ1bmN0aW9uIGFyKGwsdCxhLGUsdSl7aWYoYS5mbGFnc3w9MzI3NjgsZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmdHlwZW9mIGUudGhlbj09ImZ1bmN0aW9uIil7aWYodD1hLmFsdGVybmF0ZSx0IT09bnVsbCYmZGUodCxhLHUsITApLGE9WWwuY3VycmVudCxhIT09bnVsbCl7c3dpdGNoKGEudGFnKXtjYXNlIDMxOmNhc2UgMTM6cmV0dXJuIEpsPT09bnVsbD9fbigpOmEuYWx0ZXJuYXRlPT09bnVsbCYmUD09PTAmJihQPTMpLGEuZmxhZ3MmPS0yNTcsYS5mbGFnc3w9NjU1MzYsYS5sYW5lcz11LGU9PT1ibj9hLmZsYWdzfD0xNjM4NDoodD1hLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsP2EudXBkYXRlUXVldWU9bmV3IFNldChbZV0pOnQuYWRkKGUpLEZpKGwsZSx1KSksITE7Y2FzZSAyMjpyZXR1cm4gYS5mbGFnc3w9NjU1MzYsZT09PWJuP2EuZmxhZ3N8PTE2Mzg0Oih0PWEudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e3RyYW5zaXRpb25zOm51bGwsbWFya2VySW5zdGFuY2VzOm51bGwscmV0cnlRdWV1ZTpuZXcgU2V0KFtlXSl9LGEudXBkYXRlUXVldWU9dCk6KGE9dC5yZXRyeVF1ZXVlLGE9PT1udWxsP3QucmV0cnlRdWV1ZT1uZXcgU2V0KFtlXSk6YS5hZGQoZSkpLEZpKGwsZSx1KSksITF9dGhyb3cgRXJyb3IocCg0MzUsYS50YWcpKX1yZXR1cm4gRmkobCxlLHUpLF9uKCksITF9aWYoQilyZXR1cm4gdD1ZbC5jdXJyZW50LHQhPT1udWxsPygodC5mbGFncyY2NTUzNik9PT0wJiYodC5mbGFnc3w9MjU2KSx0LmZsYWdzfD02NTUzNix0LmxhbmVzPXUsZSE9PVNjJiYobD1FcnJvcihwKDQyMikse2NhdXNlOmV9KSxQZShMbChsLGEpKSkpOihlIT09U2MmJih0PUVycm9yKHAoNDIzKSx7Y2F1c2U6ZX0pLFBlKExsKHQsYSkpKSxsPWwuY3VycmVudC5hbHRlcm5hdGUsbC5mbGFnc3w9NjU1MzYsdSY9LXUsbC5sYW5lc3w9dSxlPUxsKGUsYSksdT1DYyhsLnN0YXRlTm9kZSxlLHUpLEdpKGwsdSksUCE9PTQmJihQPTIpKSwhMTt2YXIgbj1FcnJvcihwKDUyMCkse2NhdXNlOmV9KTtpZihuPUxsKG4sYSksS2U9PT1udWxsP0tlPVtuXTpLZS5wdXNoKG4pLFAhPT00JiYoUD0yKSx0PT09bnVsbClyZXR1cm4hMDtlPUxsKGUsYSksYT10O2Rve3N3aXRjaChhLnRhZyl7Y2FzZSAzOnJldHVybiBhLmZsYWdzfD02NTUzNixsPXUmLXUsYS5sYW5lc3w9bCxsPUNjKGEuc3RhdGVOb2RlLGUsbCksR2koYSxsKSwhMTtjYXNlIDE6aWYodD1hLnR5cGUsbj1hLnN0YXRlTm9kZSwoYS5mbGFncyYxMjgpPT09MCYmKHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8biE9PW51bGwmJnR5cGVvZiBuLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoSnQ9PT1udWxsfHwhSnQuaGFzKG4pKSkpcmV0dXJuIGEuZmxhZ3N8PTY1NTM2LHUmPS11LGEubGFuZXN8PXUsdT1CMSh1KSxxMSh1LGwsYSxlKSxHaShhLHUpLCExfWE9YS5yZXR1cm59d2hpbGUoYSE9PW51bGwpO3JldHVybiExfXZhciBSZj1FcnJvcihwKDQ2MSkpLG5sPSExO2Z1bmN0aW9uIG1sKGwsdCxhLGUpe3QuY2hpbGQ9bD09PW51bGw/azAodCxudWxsLGEsZSk6eWEodCxsLmNoaWxkLGEsZSl9ZnVuY3Rpb24gZ3MobCx0LGEsZSx1KXthPWEucmVuZGVyO3ZhciBuPXQucmVmO2lmKCJyZWYiaW4gZSl7dmFyIGk9e307Zm9yKHZhciBjIGluIGUpYyE9PSJyZWYiJiYoaVtjXT1lW2NdKX1lbHNlIGk9ZTtyZXR1cm4gdmEodCksZT16ZihsLHQsYSxpLG4sdSksYz1BZigpLGwhPT1udWxsJiYhbmw/KE1mKGwsdCx1KSxUdChsLHQsdSkpOihCJiZjJiZyZih0KSx0LmZsYWdzfD0xLG1sKGwsdCxlLHUpLHQuY2hpbGQpfWZ1bmN0aW9uIGJzKGwsdCxhLGUsdSl7aWYobD09PW51bGwpe3ZhciBuPWEudHlwZTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiImJiFoZihuKSYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDAmJmEuY29tcGFyZT09PW51bGw/KHQudGFnPTE1LHQudHlwZT1uLFkxKGwsdCxuLGUsdSkpOihsPUZ1KGEudHlwZSxudWxsLGUsdCx0Lm1vZGUsdSksbC5yZWY9dC5yZWYsbC5yZXR1cm49dCx0LmNoaWxkPWwpfWlmKG49bC5jaGlsZCwhQmYobCx1KSl7dmFyIGk9bi5tZW1vaXplZFByb3BzO2lmKGE9YS5jb21wYXJlLGE9YSE9PW51bGw/YTpGZSxhKGksZSkmJmwucmVmPT09dC5yZWYpcmV0dXJuIFR0KGwsdCx1KX1yZXR1cm4gdC5mbGFnc3w9MSxsPXB0KG4sZSksbC5yZWY9dC5yZWYsbC5yZXR1cm49dCx0LmNoaWxkPWx9ZnVuY3Rpb24gWTEobCx0LGEsZSx1KXtpZihsIT09bnVsbCl7dmFyIG49bC5tZW1vaXplZFByb3BzO2lmKEZlKG4sZSkmJmwucmVmPT09dC5yZWYpaWYobmw9ITEsdC5wZW5kaW5nUHJvcHM9ZT1uLEJmKGwsdSkpKGwuZmxhZ3MmMTMxMDcyKSE9PTAmJihubD0hMCk7ZWxzZSByZXR1cm4gdC5sYW5lcz1sLmxhbmVzLFR0KGwsdCx1KX1yZXR1cm4gUmMobCx0LGEsZSx1KX1mdW5jdGlvbiBHMShsLHQsYSxlKXt2YXIgdT1lLmNoaWxkcmVuLG49bCE9PW51bGw/bC5tZW1vaXplZFN0YXRlOm51bGw7aWYobD09PW51bGwmJnQuc3RhdGVOb2RlPT09bnVsbCYmKHQuc3RhdGVOb2RlPXtfdmlzaWJpbGl0eToxLF9wZW5kaW5nTWFya2VyczpudWxsLF9yZXRyeUNhY2hlOm51bGwsX3RyYW5zaXRpb25zOm51bGx9KSxlLm1vZGU9PT0iaGlkZGVuIil7aWYoKHQuZmxhZ3MmMTI4KSE9PTApe2lmKG49biE9PW51bGw/bi5iYXNlTGFuZXN8YTphLGwhPT1udWxsKXtmb3IoZT10LmNoaWxkPWwuY2hpbGQsdT0wO2UhPT1udWxsOyl1PXV8ZS5sYW5lc3xlLmNoaWxkTGFuZXMsZT1lLnNpYmxpbmc7ZT11Jn5ufWVsc2UgZT0wLHQuY2hpbGQ9bnVsbDtyZXR1cm4gcHMobCx0LG4sYSxlKX1pZigoYSY1MzY4NzA5MTIpIT09MCl0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsfSxsIT09bnVsbCYmSXUodCxuIT09bnVsbD9uLmNhY2hlUG9vbDpudWxsKSxuIT09bnVsbD9jcyh0LG4pOk9jKCksUDAodCk7ZWxzZSByZXR1cm4gZT10LmxhbmVzPTUzNjg3MDkxMixwcyhsLHQsbiE9PW51bGw/bi5iYXNlTGFuZXN8YTphLGEsZSl9ZWxzZSBuIT09bnVsbD8oSXUodCxuLmNhY2hlUG9vbCksY3ModCxuKSxCdCh0KSx0Lm1lbW9pemVkU3RhdGU9bnVsbCk6KGwhPT1udWxsJiZJdSh0LG51bGwpLE9jKCksQnQodCkpO3JldHVybiBtbChsLHQsdSxhKSx0LmNoaWxkfWZ1bmN0aW9uIENlKGwsdCl7cmV0dXJuIGwhPT1udWxsJiZsLnRhZz09PTIyfHx0LnN0YXRlTm9kZSE9PW51bGx8fCh0LnN0YXRlTm9kZT17X3Zpc2liaWxpdHk6MSxfcGVuZGluZ01hcmtlcnM6bnVsbCxfcmV0cnlDYWNoZTpudWxsLF90cmFuc2l0aW9uczpudWxsfSksdC5zaWJsaW5nfWZ1bmN0aW9uIHBzKGwsdCxhLGUsdSl7dmFyIG49Z2YoKTtyZXR1cm4gbj1uPT09bnVsbD9udWxsOntwYXJlbnQ6dWwuX2N1cnJlbnRWYWx1ZSxwb29sOm59LHQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmEsY2FjaGVQb29sOm59LGwhPT1udWxsJiZJdSh0LG51bGwpLE9jKCksUDAodCksbCE9PW51bGwmJmRlKGwsdCxlLCEwKSx0LmNoaWxkTGFuZXM9dSxudWxsfWZ1bmN0aW9uIHRuKGwsdCl7cmV0dXJuIHQ9TW4oe21vZGU6dC5tb2RlLGNoaWxkcmVuOnQuY2hpbGRyZW59LGwubW9kZSksdC5yZWY9bC5yZWYsbC5jaGlsZD10LHQucmV0dXJuPWwsdH1mdW5jdGlvbiBTcyhsLHQsYSl7cmV0dXJuIHlhKHQsbC5jaGlsZCxudWxsLGEpLGw9dG4odCx0LnBlbmRpbmdQcm9wcyksbC5mbGFnc3w9MixEbCh0KSx0Lm1lbW9pemVkU3RhdGU9bnVsbCxsfWZ1bmN0aW9uIGVyKGwsdCxhKXt2YXIgZT10LnBlbmRpbmdQcm9wcyx1PSh0LmZsYWdzJjEyOCkhPT0wO2lmKHQuZmxhZ3MmPS0xMjksbD09PW51bGwpe2lmKEIpe2lmKGUubW9kZT09PSJoaWRkZW4iKXJldHVybiBsPXRuKHQsZSksdC5sYW5lcz01MzY4NzA5MTIsQ2UobnVsbCxsKTtpZihfYyh0KSwobD1XKT8obD1VbShsLEtsKSxsPWwhPT1udWxsJiZsLmRhdGE9PT0iJiI/bDpudWxsLGwhPT1udWxsJiYodC5tZW1vaXplZFN0YXRlPXtkZWh5ZHJhdGVkOmwsdHJlZUNvbnRleHQ6RnQhPT1udWxsP3tpZDphdCxvdmVyZmxvdzpldH06bnVsbCxyZXRyeUxhbmU6NTM2ODcwOTEyLGh5ZHJhdGlvbkVycm9yczpudWxsfSxhPVYwKGwpLGEucmV0dXJuPXQsdC5jaGlsZD1hLGhsPXQsVz1udWxsKSk6bD1udWxsLGw9PT1udWxsKXRocm93IEl0KHQpO3JldHVybiB0LmxhbmVzPTUzNjg3MDkxMixudWxsfXJldHVybiB0bih0LGUpfXZhciBuPWwubWVtb2l6ZWRTdGF0ZTtpZihuIT09bnVsbCl7dmFyIGk9bi5kZWh5ZHJhdGVkO2lmKF9jKHQpLHUpaWYodC5mbGFncyYyNTYpdC5mbGFncyY9LTI1Nyx0PVNzKGwsdCxhKTtlbHNlIGlmKHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpdC5jaGlsZD1sLmNoaWxkLHQuZmxhZ3N8PTEyOCx0PW51bGw7ZWxzZSB0aHJvdyBFcnJvcihwKDU1OCkpO2Vsc2UgaWYobmx8fGRlKGwsdCxhLCExKSx1PShhJmwuY2hpbGRMYW5lcykhPT0wLG5sfHx1KXtpZihlPUwsZSE9PW51bGwmJihpPXYwKGUsYSksaSE9PTAmJmkhPT1uLnJldHJ5TGFuZSkpdGhyb3cgbi5yZXRyeUxhbmU9aSx6YShsLGkpLE1sKGUsbCxpKSxSZjtfbigpLHQ9U3MobCx0LGEpfWVsc2UgbD1uLnRyZWVDb250ZXh0LFc9d2woaS5uZXh0U2libGluZyksaGw9dCxCPSEwLFZ0PW51bGwsS2w9ITEsbCE9PW51bGwmJkswKHQsbCksdD10bih0LGUpLHQuZmxhZ3N8PTQwOTY7cmV0dXJuIHR9cmV0dXJuIGw9cHQobC5jaGlsZCx7bW9kZTplLm1vZGUsY2hpbGRyZW46ZS5jaGlsZHJlbn0pLGwucmVmPXQucmVmLHQuY2hpbGQ9bCxsLnJldHVybj10LGx9ZnVuY3Rpb24gYW4obCx0KXt2YXIgYT10LnJlZjtpZihhPT09bnVsbClsIT09bnVsbCYmbC5yZWYhPT1udWxsJiYodC5mbGFnc3w9NDE5NDgxNik7ZWxzZXtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGEhPSJvYmplY3QiKXRocm93IEVycm9yKHAoMjg0KSk7KGw9PT1udWxsfHxsLnJlZiE9PWEpJiYodC5mbGFnc3w9NDE5NDgxNil9fWZ1bmN0aW9uIFJjKGwsdCxhLGUsdSl7cmV0dXJuIHZhKHQpLGE9emYobCx0LGEsZSx2b2lkIDAsdSksZT1BZigpLGwhPT1udWxsJiYhbmw/KE1mKGwsdCx1KSxUdChsLHQsdSkpOihCJiZlJiZyZih0KSx0LmZsYWdzfD0xLG1sKGwsdCxhLHUpLHQuY2hpbGQpfWZ1bmN0aW9uIEVzKGwsdCxhLGUsdSxuKXtyZXR1cm4gdmEodCksdC51cGRhdGVRdWV1ZT1udWxsLGE9dDEodCxlLGEsdSksbDEobCksZT1BZigpLGwhPT1udWxsJiYhbmw/KE1mKGwsdCxuKSxUdChsLHQsbikpOihCJiZlJiZyZih0KSx0LmZsYWdzfD0xLG1sKGwsdCxhLG4pLHQuY2hpbGQpfWZ1bmN0aW9uIHpzKGwsdCxhLGUsdSl7aWYodmEodCksdC5zdGF0ZU5vZGU9PT1udWxsKXt2YXIgbj1aYSxpPWEuY29udGV4dFR5cGU7dHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbCYmKG49cmwoaSkpLG49bmV3IGEoZSxuKSx0Lm1lbW9pemVkU3RhdGU9bi5zdGF0ZSE9PW51bGwmJm4uc3RhdGUhPT12b2lkIDA/bi5zdGF0ZTpudWxsLG4udXBkYXRlcj1OYyx0LnN0YXRlTm9kZT1uLG4uX3JlYWN0SW50ZXJuYWxzPXQsbj10LnN0YXRlTm9kZSxuLnByb3BzPWUsbi5zdGF0ZT10Lm1lbW9pemVkU3RhdGUsbi5yZWZzPXt9LHBmKHQpLGk9YS5jb250ZXh0VHlwZSxuLmNvbnRleHQ9dHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbD9ybChpKTpaYSxuLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxpPWEuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoUWkodCxhLGksZSksbi5zdGF0ZT10Lm1lbW9pemVkU3RhdGUpLHR5cGVvZiBhLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIG4uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBuLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBuLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KGk9bi5zdGF0ZSx0eXBlb2Ygbi5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm4uY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIG4uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbi5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksaSE9PW4uc3RhdGUmJk5jLmVucXVldWVSZXBsYWNlU3RhdGUobixuLnN0YXRlLG51bGwpLGplKHQsZSxuLHUpLFFlKCksbi5zdGF0ZT10Lm1lbW9pemVkU3RhdGUpLHR5cGVvZiBuLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCksZT0hMH1lbHNlIGlmKGw9PT1udWxsKXtuPXQuc3RhdGVOb2RlO3ZhciBjPXQubWVtb2l6ZWRQcm9wcyxmPWJhKGEsYyk7bi5wcm9wcz1mO3ZhciBkPW4uY29udGV4dCx2PWEuY29udGV4dFR5cGU7aT1aYSx0eXBlb2Ygdj09Im9iamVjdCImJnYhPT1udWxsJiYoaT1ybCh2KSk7dmFyIHk9YS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7dj10eXBlb2YgeT09ImZ1bmN0aW9uInx8dHlwZW9mIG4uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiIsYz10LnBlbmRpbmdQcm9wcyE9PWMsdnx8dHlwZW9mIG4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiImJnR5cGVvZiBuLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiJ8fChjfHxkIT09aSkmJnZzKHQsbixlLGkpLE50PSExO3ZhciBtPXQubWVtb2l6ZWRTdGF0ZTtuLnN0YXRlPW0samUodCxlLG4sdSksUWUoKSxkPXQubWVtb2l6ZWRTdGF0ZSxjfHxtIT09ZHx8TnQ/KHR5cGVvZiB5PT0iZnVuY3Rpb24iJiYoUWkodCxhLHksZSksZD10Lm1lbW9pemVkU3RhdGUpLChmPU50fHxycyh0LGEsZixlLG0sZCxpKSk/KHZ8fHR5cGVvZiBuLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBuLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHR5cGVvZiBuLmNvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbi5jb21wb25lbnRXaWxsTW91bnQoKSx0eXBlb2Ygbi5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZuLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksdHlwZW9mIG4uY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSk6KHR5cGVvZiBuLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCksdC5tZW1vaXplZFByb3BzPWUsdC5tZW1vaXplZFN0YXRlPWQpLG4ucHJvcHM9ZSxuLnN0YXRlPWQsbi5jb250ZXh0PWksZT1mKToodHlwZW9mIG4uY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSxlPSExKX1lbHNle249dC5zdGF0ZU5vZGUsVGMobCx0KSxpPXQubWVtb2l6ZWRQcm9wcyx2PWJhKGEsaSksbi5wcm9wcz12LHk9dC5wZW5kaW5nUHJvcHMsbT1uLmNvbnRleHQsZD1hLmNvbnRleHRUeXBlLGY9WmEsdHlwZW9mIGQ9PSJvYmplY3QiJiZkIT09bnVsbCYmKGY9cmwoZCkpLGM9YS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsKGQ9dHlwZW9mIGM9PSJmdW5jdGlvbiJ8fHR5cGVvZiBuLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iKXx8dHlwZW9mIG4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiImJnR5cGVvZiBuLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiJ8fChpIT09eXx8bSE9PWYpJiZ2cyh0LG4sZSxmKSxOdD0hMSxtPXQubWVtb2l6ZWRTdGF0ZSxuLnN0YXRlPW0samUodCxlLG4sdSksUWUoKTt2YXIgcj10Lm1lbW9pemVkU3RhdGU7aSE9PXl8fG0hPT1yfHxOdHx8bCE9PW51bGwmJmwuZGVwZW5kZW5jaWVzIT09bnVsbCYmZ24obC5kZXBlbmRlbmNpZXMpPyh0eXBlb2YgYz09ImZ1bmN0aW9uIiYmKFFpKHQsYSxjLGUpLHI9dC5tZW1vaXplZFN0YXRlKSwodj1OdHx8cnModCxhLHYsZSxtLHIsZil8fGwhPT1udWxsJiZsLmRlcGVuZGVuY2llcyE9PW51bGwmJmduKGwuZGVwZW5kZW5jaWVzKSk/KGR8fHR5cGVvZiBuLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5jb21wb25lbnRXaWxsVXBkYXRlIT0iZnVuY3Rpb24ifHwodHlwZW9mIG4uY29tcG9uZW50V2lsbFVwZGF0ZT09ImZ1bmN0aW9uIiYmbi5jb21wb25lbnRXaWxsVXBkYXRlKGUscixmKSx0eXBlb2Ygbi5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZT09ImZ1bmN0aW9uIiYmbi5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShlLHIsZikpLHR5cGVvZiBuLmNvbXBvbmVudERpZFVwZGF0ZT09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQpLHR5cGVvZiBuLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9MTAyNCkpOih0eXBlb2Ygbi5jb21wb25lbnREaWRVcGRhdGUhPSJmdW5jdGlvbiJ8fGk9PT1sLm1lbW9pemVkUHJvcHMmJm09PT1sLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSx0eXBlb2Ygbi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9ImZ1bmN0aW9uInx8aT09PWwubWVtb2l6ZWRQcm9wcyYmbT09PWwubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHQubWVtb2l6ZWRQcm9wcz1lLHQubWVtb2l6ZWRTdGF0ZT1yKSxuLnByb3BzPWUsbi5zdGF0ZT1yLG4uY29udGV4dD1mLGU9dik6KHR5cGVvZiBuLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8aT09PWwubWVtb2l6ZWRQcm9wcyYmbT09PWwubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBuLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxpPT09bC5tZW1vaXplZFByb3BzJiZtPT09bC5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCksZT0hMSl9cmV0dXJuIG49ZSxhbihsLHQpLGU9KHQuZmxhZ3MmMTI4KSE9PTAsbnx8ZT8obj10LnN0YXRlTm9kZSxhPWUmJnR5cGVvZiBhLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9ImZ1bmN0aW9uIj9udWxsOm4ucmVuZGVyKCksdC5mbGFnc3w9MSxsIT09bnVsbCYmZT8odC5jaGlsZD15YSh0LGwuY2hpbGQsbnVsbCx1KSx0LmNoaWxkPXlhKHQsbnVsbCxhLHUpKTptbChsLHQsYSx1KSx0Lm1lbW9pemVkU3RhdGU9bi5zdGF0ZSxsPXQuY2hpbGQpOmw9VHQobCx0LHUpLGx9ZnVuY3Rpb24gQXMobCx0LGEsZSl7cmV0dXJuIHJhKCksdC5mbGFnc3w9MjU2LG1sKGwsdCxhLGUpLHQuY2hpbGR9dmFyIGppPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MCxoeWRyYXRpb25FcnJvcnM6bnVsbH07ZnVuY3Rpb24gWmkobCl7cmV0dXJue2Jhc2VMYW5lczpsLGNhY2hlUG9vbDp3MCgpfX1mdW5jdGlvbiBWaShsLHQsYSl7cmV0dXJuIGw9bCE9PW51bGw/bC5jaGlsZExhbmVzJn5hOjAsdCYmKGx8PUhsKSxsfWZ1bmN0aW9uIFgxKGwsdCxhKXt2YXIgZT10LnBlbmRpbmdQcm9wcyx1PSExLG49KHQuZmxhZ3MmMTI4KSE9PTAsaTtpZigoaT1uKXx8KGk9bCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZT09PW51bGw/ITE6KGxsLmN1cnJlbnQmMikhPT0wKSxpJiYodT0hMCx0LmZsYWdzJj0tMTI5KSxpPSh0LmZsYWdzJjMyKSE9PTAsdC5mbGFncyY9LTMzLGw9PT1udWxsKXtpZihCKXtpZih1P1J0KHQpOkJ0KHQpLChsPVcpPyhsPVVtKGwsS2wpLGw9bCE9PW51bGwmJmwuZGF0YSE9PSImIj9sOm51bGwsbCE9PW51bGwmJih0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6bCx0cmVlQ29udGV4dDpGdCE9PW51bGw/e2lkOmF0LG92ZXJmbG93OmV0fTpudWxsLHJldHJ5TGFuZTo1MzY4NzA5MTIsaHlkcmF0aW9uRXJyb3JzOm51bGx9LGE9VjAobCksYS5yZXR1cm49dCx0LmNoaWxkPWEsaGw9dCxXPW51bGwpKTpsPW51bGwsbD09PW51bGwpdGhyb3cgSXQodCk7cmV0dXJuIFdjKGwpP3QubGFuZXM9MzI6dC5sYW5lcz01MzY4NzA5MTIsbnVsbH12YXIgYz1lLmNoaWxkcmVuO3JldHVybiBlPWUuZmFsbGJhY2ssdT8oQnQodCksdT10Lm1vZGUsYz1Nbih7bW9kZToiaGlkZGVuIixjaGlsZHJlbjpjfSx1KSxlPXNhKGUsdSxhLG51bGwpLGMucmV0dXJuPXQsZS5yZXR1cm49dCxjLnNpYmxpbmc9ZSx0LmNoaWxkPWMsZT10LmNoaWxkLGUubWVtb2l6ZWRTdGF0ZT1aaShhKSxlLmNoaWxkTGFuZXM9VmkobCxpLGEpLHQubWVtb2l6ZWRTdGF0ZT1qaSxDZShudWxsLGUpKTooUnQodCksQmModCxjKSl9dmFyIGY9bC5tZW1vaXplZFN0YXRlO2lmKGYhPT1udWxsJiYoYz1mLmRlaHlkcmF0ZWQsYyE9PW51bGwpKXtpZihuKXQuZmxhZ3MmMjU2PyhSdCh0KSx0LmZsYWdzJj0tMjU3LHQ9TGkobCx0LGEpKTp0Lm1lbW9pemVkU3RhdGUhPT1udWxsPyhCdCh0KSx0LmNoaWxkPWwuY2hpbGQsdC5mbGFnc3w9MTI4LHQ9bnVsbCk6KEJ0KHQpLGM9ZS5mYWxsYmFjayx1PXQubW9kZSxlPU1uKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjplLmNoaWxkcmVufSx1KSxjPXNhKGMsdSxhLG51bGwpLGMuZmxhZ3N8PTIsZS5yZXR1cm49dCxjLnJldHVybj10LGUuc2libGluZz1jLHQuY2hpbGQ9ZSx5YSh0LGwuY2hpbGQsbnVsbCxhKSxlPXQuY2hpbGQsZS5tZW1vaXplZFN0YXRlPVppKGEpLGUuY2hpbGRMYW5lcz1WaShsLGksYSksdC5tZW1vaXplZFN0YXRlPWppLHQ9Q2UobnVsbCxlKSk7ZWxzZSBpZihSdCh0KSxXYyhjKSl7aWYoaT1jLm5leHRTaWJsaW5nJiZjLm5leHRTaWJsaW5nLmRhdGFzZXQsaSl2YXIgZD1pLmRnc3Q7aT1kLGU9RXJyb3IocCg0MTkpKSxlLnN0YWNrPSIiLGUuZGlnZXN0PWksUGUoe3ZhbHVlOmUsc291cmNlOm51bGwsc3RhY2s6bnVsbH0pLHQ9TGkobCx0LGEpfWVsc2UgaWYobmx8fGRlKGwsdCxhLCExKSxpPShhJmwuY2hpbGRMYW5lcykhPT0wLG5sfHxpKXtpZihpPUwsaSE9PW51bGwmJihlPXYwKGksYSksZSE9PTAmJmUhPT1mLnJldHJ5TGFuZSkpdGhyb3cgZi5yZXRyeUxhbmU9ZSx6YShsLGUpLE1sKGksbCxlKSxSZjt3YyhjKXx8X24oKSx0PUxpKGwsdCxhKX1lbHNlIHdjKGMpPyh0LmZsYWdzfD0xOTIsdC5jaGlsZD1sLmNoaWxkLHQ9bnVsbCk6KGw9Zi50cmVlQ29udGV4dCxXPXdsKGMubmV4dFNpYmxpbmcpLGhsPXQsQj0hMCxWdD1udWxsLEtsPSExLGwhPT1udWxsJiZLMCh0LGwpLHQ9QmModCxlLmNoaWxkcmVuKSx0LmZsYWdzfD00MDk2KTtyZXR1cm4gdH1yZXR1cm4gdT8oQnQodCksYz1lLmZhbGxiYWNrLHU9dC5tb2RlLGY9bC5jaGlsZCxkPWYuc2libGluZyxlPXB0KGYse21vZGU6ImhpZGRlbiIsY2hpbGRyZW46ZS5jaGlsZHJlbn0pLGUuc3VidHJlZUZsYWdzPWYuc3VidHJlZUZsYWdzJjY1MDExNzEyLGQhPT1udWxsP2M9cHQoZCxjKTooYz1zYShjLHUsYSxudWxsKSxjLmZsYWdzfD0yKSxjLnJldHVybj10LGUucmV0dXJuPXQsZS5zaWJsaW5nPWMsdC5jaGlsZD1lLENlKG51bGwsZSksZT10LmNoaWxkLGM9bC5jaGlsZC5tZW1vaXplZFN0YXRlLGM9PT1udWxsP2M9WmkoYSk6KHU9Yy5jYWNoZVBvb2wsdSE9PW51bGw/KGY9dWwuX2N1cnJlbnRWYWx1ZSx1PXUucGFyZW50IT09Zj97cGFyZW50OmYscG9vbDpmfTp1KTp1PXcwKCksYz17YmFzZUxhbmVzOmMuYmFzZUxhbmVzfGEsY2FjaGVQb29sOnV9KSxlLm1lbW9pemVkU3RhdGU9YyxlLmNoaWxkTGFuZXM9VmkobCxpLGEpLHQubWVtb2l6ZWRTdGF0ZT1qaSxDZShsLmNoaWxkLGUpKTooUnQodCksYT1sLmNoaWxkLGw9YS5zaWJsaW5nLGE9cHQoYSx7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ZS5jaGlsZHJlbn0pLGEucmV0dXJuPXQsYS5zaWJsaW5nPW51bGwsbCE9PW51bGwmJihpPXQuZGVsZXRpb25zLGk9PT1udWxsPyh0LmRlbGV0aW9ucz1bbF0sdC5mbGFnc3w9MTYpOmkucHVzaChsKSksdC5jaGlsZD1hLHQubWVtb2l6ZWRTdGF0ZT1udWxsLGEpfWZ1bmN0aW9uIEJjKGwsdCl7cmV0dXJuIHQ9TW4oe21vZGU6InZpc2libGUiLGNoaWxkcmVuOnR9LGwubW9kZSksdC5yZXR1cm49bCxsLmNoaWxkPXR9ZnVuY3Rpb24gTW4obCx0KXtyZXR1cm4gbD1VbCgyMixsLG51bGwsdCksbC5sYW5lcz0wLGx9ZnVuY3Rpb24gTGkobCx0LGEpe3JldHVybiB5YSh0LGwuY2hpbGQsbnVsbCxhKSxsPUJjKHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLGwuZmxhZ3N8PTIsdC5tZW1vaXplZFN0YXRlPW51bGwsbH1mdW5jdGlvbiBNcyhsLHQsYSl7bC5sYW5lc3w9dDt2YXIgZT1sLmFsdGVybmF0ZTtlIT09bnVsbCYmKGUubGFuZXN8PXQpLHpjKGwucmV0dXJuLHQsYSl9ZnVuY3Rpb24gS2kobCx0LGEsZSx1LG4pe3ZhciBpPWwubWVtb2l6ZWRTdGF0ZTtpPT09bnVsbD9sLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOnQscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDplLHRhaWw6YSx0YWlsTW9kZTp1LHRyZWVGb3JrQ291bnQ6bn06KGkuaXNCYWNrd2FyZHM9dCxpLnJlbmRlcmluZz1udWxsLGkucmVuZGVyaW5nU3RhcnRUaW1lPTAsaS5sYXN0PWUsaS50YWlsPWEsaS50YWlsTW9kZT11LGkudHJlZUZvcmtDb3VudD1uKX1mdW5jdGlvbiBRMShsLHQsYSl7dmFyIGU9dC5wZW5kaW5nUHJvcHMsdT1lLnJldmVhbE9yZGVyLG49ZS50YWlsO2U9ZS5jaGlsZHJlbjt2YXIgaT1sbC5jdXJyZW50LGM9KGkmMikhPT0wO2lmKGM/KGk9aSYxfDIsdC5mbGFnc3w9MTI4KTppJj0xLEsobGwsaSksbWwobCx0LGUsYSksZT1CP0llOjAsIWMmJmwhPT1udWxsJiYobC5mbGFncyYxMjgpIT09MClsOmZvcihsPXQuY2hpbGQ7bCE9PW51bGw7KXtpZihsLnRhZz09PTEzKWwubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJk1zKGwsYSx0KTtlbHNlIGlmKGwudGFnPT09MTkpTXMobCxhLHQpO2Vsc2UgaWYobC5jaGlsZCE9PW51bGwpe2wuY2hpbGQucmV0dXJuPWwsbD1sLmNoaWxkO2NvbnRpbnVlfWlmKGw9PT10KWJyZWFrIGw7Zm9yKDtsLnNpYmxpbmc9PT1udWxsOyl7aWYobC5yZXR1cm49PT1udWxsfHxsLnJldHVybj09PXQpYnJlYWsgbDtsPWwucmV0dXJufWwuc2libGluZy5yZXR1cm49bC5yZXR1cm4sbD1sLnNpYmxpbmd9c3dpdGNoKHUpe2Nhc2UiZm9yd2FyZHMiOmZvcihhPXQuY2hpbGQsdT1udWxsO2EhPT1udWxsOylsPWEuYWx0ZXJuYXRlLGwhPT1udWxsJiZTbihsKT09PW51bGwmJih1PWEpLGE9YS5zaWJsaW5nO2E9dSxhPT09bnVsbD8odT10LmNoaWxkLHQuY2hpbGQ9bnVsbCk6KHU9YS5zaWJsaW5nLGEuc2libGluZz1udWxsKSxLaSh0LCExLHUsYSxuLGUpO2JyZWFrO2Nhc2UiYmFja3dhcmRzIjpjYXNlInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHMiOmZvcihhPW51bGwsdT10LmNoaWxkLHQuY2hpbGQ9bnVsbDt1IT09bnVsbDspe2lmKGw9dS5hbHRlcm5hdGUsbCE9PW51bGwmJlNuKGwpPT09bnVsbCl7dC5jaGlsZD11O2JyZWFrfWw9dS5zaWJsaW5nLHUuc2libGluZz1hLGE9dSx1PWx9S2kodCwhMCxhLG51bGwsbixlKTticmVhaztjYXNlInRvZ2V0aGVyIjpLaSh0LCExLG51bGwsbnVsbCx2b2lkIDAsZSk7YnJlYWs7ZGVmYXVsdDp0Lm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBUdChsLHQsYSl7aWYobCE9PW51bGwmJih0LmRlcGVuZGVuY2llcz1sLmRlcGVuZGVuY2llcyksbGF8PXQubGFuZXMsKGEmdC5jaGlsZExhbmVzKT09PTApaWYobCE9PW51bGwpe2lmKGRlKGwsdCxhLCExKSwoYSZ0LmNoaWxkTGFuZXMpPT09MClyZXR1cm4gbnVsbH1lbHNlIHJldHVybiBudWxsO2lmKGwhPT1udWxsJiZ0LmNoaWxkIT09bC5jaGlsZCl0aHJvdyBFcnJvcihwKDE1MykpO2lmKHQuY2hpbGQhPT1udWxsKXtmb3IobD10LmNoaWxkLGE9cHQobCxsLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1hLGEucmV0dXJuPXQ7bC5zaWJsaW5nIT09bnVsbDspbD1sLnNpYmxpbmcsYT1hLnNpYmxpbmc9cHQobCxsLnBlbmRpbmdQcm9wcyksYS5yZXR1cm49dDthLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBCZihsLHQpe3JldHVybihsLmxhbmVzJnQpIT09MD8hMDoobD1sLmRlcGVuZGVuY2llcywhIShsIT09bnVsbCYmZ24obCkpKX1mdW5jdGlvbiB1cihsLHQsYSl7c3dpdGNoKHQudGFnKXtjYXNlIDM6c24odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxDdCh0LHVsLGwubWVtb2l6ZWRTdGF0ZS5jYWNoZSkscmEoKTticmVhaztjYXNlIDI3OmNhc2UgNTpvYyh0KTticmVhaztjYXNlIDQ6c24odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOkN0KHQsdC50eXBlLHQubWVtb2l6ZWRQcm9wcy52YWx1ZSk7YnJlYWs7Y2FzZSAzMTppZih0Lm1lbW9pemVkU3RhdGUhPT1udWxsKXJldHVybiB0LmZsYWdzfD0xMjgsX2ModCksbnVsbDticmVhaztjYXNlIDEzOnZhciBlPXQubWVtb2l6ZWRTdGF0ZTtpZihlIT09bnVsbClyZXR1cm4gZS5kZWh5ZHJhdGVkIT09bnVsbD8oUnQodCksdC5mbGFnc3w9MTI4LG51bGwpOihhJnQuY2hpbGQuY2hpbGRMYW5lcykhPT0wP1gxKGwsdCxhKTooUnQodCksbD1UdChsLHQsYSksbCE9PW51bGw/bC5zaWJsaW5nOm51bGwpO1J0KHQpO2JyZWFrO2Nhc2UgMTk6dmFyIHU9KGwuZmxhZ3MmMTI4KSE9PTA7aWYoZT0oYSZ0LmNoaWxkTGFuZXMpIT09MCxlfHwoZGUobCx0LGEsITEpLGU9KGEmdC5jaGlsZExhbmVzKSE9PTApLHUpe2lmKGUpcmV0dXJuIFExKGwsdCxhKTt0LmZsYWdzfD0xMjh9aWYodT10Lm1lbW9pemVkU3RhdGUsdSE9PW51bGwmJih1LnJlbmRlcmluZz1udWxsLHUudGFpbD1udWxsLHUubGFzdEVmZmVjdD1udWxsKSxLKGxsLGxsLmN1cnJlbnQpLGUpYnJlYWs7cmV0dXJuIG51bGw7Y2FzZSAyMjpyZXR1cm4gdC5sYW5lcz0wLEcxKGwsdCxhLHQucGVuZGluZ1Byb3BzKTtjYXNlIDI0OkN0KHQsdWwsbC5tZW1vaXplZFN0YXRlLmNhY2hlKX1yZXR1cm4gVHQobCx0LGEpfWZ1bmN0aW9uIGoxKGwsdCxhKXtpZihsIT09bnVsbClpZihsLm1lbW9pemVkUHJvcHMhPT10LnBlbmRpbmdQcm9wcylubD0hMDtlbHNle2lmKCFCZihsLGEpJiYodC5mbGFncyYxMjgpPT09MClyZXR1cm4gbmw9ITEsdXIobCx0LGEpO25sPShsLmZsYWdzJjEzMTA3MikhPT0wfWVsc2Ugbmw9ITEsQiYmKHQuZmxhZ3MmMTA0ODU3NikhPT0wJiZMMCh0LEllLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMTY6bDp7dmFyIGU9dC5wZW5kaW5nUHJvcHM7aWYobD1jYSh0LmVsZW1lbnRUeXBlKSx0LnR5cGU9bCx0eXBlb2YgbD09ImZ1bmN0aW9uIiloZihsKT8oZT1iYShsLGUpLHQudGFnPTEsdD16cyhudWxsLHQsbCxlLGEpKToodC50YWc9MCx0PVJjKG51bGwsdCxsLGUsYSkpO2Vsc2V7aWYobCE9bnVsbCl7dmFyIHU9bC4kJHR5cGVvZjtpZih1PT09SWMpe3QudGFnPTExLHQ9Z3MobnVsbCx0LGwsZSxhKTticmVhayBsfWVsc2UgaWYodT09PVBjKXt0LnRhZz0xNCx0PWJzKG51bGwsdCxsLGUsYSk7YnJlYWsgbH19dGhyb3cgdD1jYyhsKXx8bCxFcnJvcihwKDMwNix0LCIiKSl9fXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gUmMobCx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxhKTtjYXNlIDE6cmV0dXJuIGU9dC50eXBlLHU9YmEoZSx0LnBlbmRpbmdQcm9wcyksenMobCx0LGUsdSxhKTtjYXNlIDM6bDp7aWYoc24odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsPT09bnVsbCl0aHJvdyBFcnJvcihwKDM4NykpO2U9dC5wZW5kaW5nUHJvcHM7dmFyIG49dC5tZW1vaXplZFN0YXRlO3U9bi5lbGVtZW50LFRjKGwsdCksamUodCxlLG51bGwsYSk7dmFyIGk9dC5tZW1vaXplZFN0YXRlO2lmKGU9aS5jYWNoZSxDdCh0LHVsLGUpLGUhPT1uLmNhY2hlJiZBYyh0LFt1bF0sYSwhMCksUWUoKSxlPWkuZWxlbWVudCxuLmlzRGVoeWRyYXRlZClpZihuPXtlbGVtZW50OmUsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOmkuY2FjaGV9LHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4sdC5tZW1vaXplZFN0YXRlPW4sdC5mbGFncyYyNTYpe3Q9QXMobCx0LGUsYSk7YnJlYWsgbH1lbHNlIGlmKGUhPT11KXt1PUxsKEVycm9yKHAoNDI0KSksdCksUGUodSksdD1BcyhsLHQsZSxhKTticmVhayBsfWVsc2UgZm9yKGw9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxsLm5vZGVUeXBlPT09OT9sPWwuYm9keTpsPWwubm9kZU5hbWU9PT0iSFRNTCI/bC5vd25lckRvY3VtZW50LmJvZHk6bCxXPXdsKGwuZmlyc3RDaGlsZCksaGw9dCxCPSEwLFZ0PW51bGwsS2w9ITAsYT1rMCh0LG51bGwsZSxhKSx0LmNoaWxkPWE7YTspYS5mbGFncz1hLmZsYWdzJi0zfDQwOTYsYT1hLnNpYmxpbmc7ZWxzZXtpZihyYSgpLGU9PT11KXt0PVR0KGwsdCxhKTticmVhayBsfW1sKGwsdCxlLGEpfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDI2OnJldHVybiBhbihsLHQpLGw9PT1udWxsPyhhPUpzKHQudHlwZSxudWxsLHQucGVuZGluZ1Byb3BzLG51bGwpKT90Lm1lbW9pemVkU3RhdGU9YTpCfHwoYT10LnR5cGUsbD10LnBlbmRpbmdQcm9wcyxlPU5uKFp0LmN1cnJlbnQpLmNyZWF0ZUVsZW1lbnQoYSksZVtkbF09dCxlW1RsXT1sLHZsKGUsYSxsKSxvbChlKSx0LnN0YXRlTm9kZT1lKTp0Lm1lbW9pemVkU3RhdGU9SnModC50eXBlLGwubWVtb2l6ZWRQcm9wcyx0LnBlbmRpbmdQcm9wcyxsLm1lbW9pemVkU3RhdGUpLG51bGw7Y2FzZSAyNzpyZXR1cm4gb2ModCksbD09PW51bGwmJkImJihlPXQuc3RhdGVOb2RlPUhtKHQudHlwZSx0LnBlbmRpbmdQcm9wcyxadC5jdXJyZW50KSxobD10LEtsPSEwLHU9VyxhYSh0LnR5cGUpPygkYz11LFc9d2woZS5maXJzdENoaWxkKSk6Vz11KSxtbChsLHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYSksYW4obCx0KSxsPT09bnVsbCYmKHQuZmxhZ3N8PTQxOTQzMDQpLHQuY2hpbGQ7Y2FzZSA1OnJldHVybiBsPT09bnVsbCYmQiYmKCh1PWU9VykmJihlPU5yKGUsdC50eXBlLHQucGVuZGluZ1Byb3BzLEtsKSxlIT09bnVsbD8odC5zdGF0ZU5vZGU9ZSxobD10LFc9d2woZS5maXJzdENoaWxkKSxLbD0hMSx1PSEwKTp1PSExKSx1fHxJdCh0KSksb2ModCksdT10LnR5cGUsbj10LnBlbmRpbmdQcm9wcyxpPWwhPT1udWxsP2wubWVtb2l6ZWRQcm9wczpudWxsLGU9bi5jaGlsZHJlbixLYyh1LG4pP2U9bnVsbDppIT09bnVsbCYmS2ModSxpKSYmKHQuZmxhZ3N8PTMyKSx0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiYodT16ZihsLHQsJGgsbnVsbCxudWxsLGEpLG51Ll9jdXJyZW50VmFsdWU9dSksYW4obCx0KSxtbChsLHQsZSxhKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gbD09PW51bGwmJkImJigobD1hPVcpJiYoYT1DcihhLHQucGVuZGluZ1Byb3BzLEtsKSxhIT09bnVsbD8odC5zdGF0ZU5vZGU9YSxobD10LFc9bnVsbCxsPSEwKTpsPSExKSxsfHxJdCh0KSksbnVsbDtjYXNlIDEzOnJldHVybiBYMShsLHQsYSk7Y2FzZSA0OnJldHVybiBzbih0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGU9dC5wZW5kaW5nUHJvcHMsbD09PW51bGw/dC5jaGlsZD15YSh0LG51bGwsZSxhKTptbChsLHQsZSxhKSx0LmNoaWxkO2Nhc2UgMTE6cmV0dXJuIGdzKGwsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsYSk7Y2FzZSA3OnJldHVybiBtbChsLHQsdC5wZW5kaW5nUHJvcHMsYSksdC5jaGlsZDtjYXNlIDg6cmV0dXJuIG1sKGwsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixhKSx0LmNoaWxkO2Nhc2UgMTI6cmV0dXJuIG1sKGwsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixhKSx0LmNoaWxkO2Nhc2UgMTA6cmV0dXJuIGU9dC5wZW5kaW5nUHJvcHMsQ3QodCx0LnR5cGUsZS52YWx1ZSksbWwobCx0LGUuY2hpbGRyZW4sYSksdC5jaGlsZDtjYXNlIDk6cmV0dXJuIHU9dC50eXBlLl9jb250ZXh0LGU9dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sdmEodCksdT1ybCh1KSxlPWUodSksdC5mbGFnc3w9MSxtbChsLHQsZSxhKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGJzKGwsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMsYSk7Y2FzZSAxNTpyZXR1cm4gWTEobCx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxhKTtjYXNlIDE5OnJldHVybiBRMShsLHQsYSk7Y2FzZSAzMTpyZXR1cm4gZXIobCx0LGEpO2Nhc2UgMjI6cmV0dXJuIEcxKGwsdCxhLHQucGVuZGluZ1Byb3BzKTtjYXNlIDI0OnJldHVybiB2YSh0KSxlPXJsKHVsKSxsPT09bnVsbD8odT1nZigpLHU9PT1udWxsJiYodT1MLG49eWYoKSx1LnBvb2xlZENhY2hlPW4sbi5yZWZDb3VudCsrLG4hPT1udWxsJiYodS5wb29sZWRDYWNoZUxhbmVzfD1hKSx1PW4pLHQubWVtb2l6ZWRTdGF0ZT17cGFyZW50OmUsY2FjaGU6dX0scGYodCksQ3QodCx1bCx1KSk6KChsLmxhbmVzJmEpIT09MCYmKFRjKGwsdCksamUodCxudWxsLG51bGwsYSksUWUoKSksdT1sLm1lbW9pemVkU3RhdGUsbj10Lm1lbW9pemVkU3RhdGUsdS5wYXJlbnQhPT1lPyh1PXtwYXJlbnQ6ZSxjYWNoZTplfSx0Lm1lbW9pemVkU3RhdGU9dSx0LmxhbmVzPT09MCYmKHQubWVtb2l6ZWRTdGF0ZT10LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT11KSxDdCh0LHVsLGUpKTooZT1uLmNhY2hlLEN0KHQsdWwsZSksZSE9PXUuY2FjaGUmJkFjKHQsW3VsXSxhLCEwKSkpLG1sKGwsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixhKSx0LmNoaWxkO2Nhc2UgMjk6dGhyb3cgdC5wZW5kaW5nUHJvcHN9dGhyb3cgRXJyb3IocCgxNTYsdC50YWcpKX1mdW5jdGlvbiBzdChsKXtsLmZsYWdzfD00fWZ1bmN0aW9uIEppKGwsdCxhLGUsdSl7aWYoKHQ9KGwubW9kZSYzMikhPT0wKSYmKHQ9ITEpLHQpe2lmKGwuZmxhZ3N8PTE2Nzc3MjE2LCh1JjMzNTU0NDEyOCk9PT11KWlmKGwuc3RhdGVOb2RlLmNvbXBsZXRlKWwuZmxhZ3N8PTgxOTI7ZWxzZSBpZihtbSgpKWwuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBkYT1ibixiZn1lbHNlIGwuZmxhZ3MmPS0xNjc3NzIxN31mdW5jdGlvbiBUcyhsLHQpe2lmKHQudHlwZSE9PSJzdHlsZXNoZWV0Inx8KHQuc3RhdGUubG9hZGluZyY0KSE9PTApbC5mbGFncyY9LTE2Nzc3MjE3O2Vsc2UgaWYobC5mbGFnc3w9MTY3NzcyMTYsIVJtKHQpKWlmKG1tKCkpbC5mbGFnc3w9ODE5MjtlbHNlIHRocm93IGRhPWJuLGJmfWZ1bmN0aW9uIFF1KGwsdCl7dCE9PW51bGwmJihsLmZsYWdzfD00KSxsLmZsYWdzJjE2Mzg0JiYodD1sLnRhZyE9PTIyP2QwKCk6NTM2ODcwOTEyLGwubGFuZXN8PXQsbmV8PXQpfWZ1bmN0aW9uIHhlKGwsdCl7aWYoIUIpc3dpdGNoKGwudGFpbE1vZGUpe2Nhc2UiaGlkZGVuIjp0PWwudGFpbDtmb3IodmFyIGE9bnVsbDt0IT09bnVsbDspdC5hbHRlcm5hdGUhPT1udWxsJiYoYT10KSx0PXQuc2libGluZzthPT09bnVsbD9sLnRhaWw9bnVsbDphLnNpYmxpbmc9bnVsbDticmVhaztjYXNlImNvbGxhcHNlZCI6YT1sLnRhaWw7Zm9yKHZhciBlPW51bGw7YSE9PW51bGw7KWEuYWx0ZXJuYXRlIT09bnVsbCYmKGU9YSksYT1hLnNpYmxpbmc7ZT09PW51bGw/dHx8bC50YWlsPT09bnVsbD9sLnRhaWw9bnVsbDpsLnRhaWwuc2libGluZz1udWxsOmUuc2libGluZz1udWxsfX1mdW5jdGlvbiB3KGwpe3ZhciB0PWwuYWx0ZXJuYXRlIT09bnVsbCYmbC5hbHRlcm5hdGUuY2hpbGQ9PT1sLmNoaWxkLGE9MCxlPTA7aWYodClmb3IodmFyIHU9bC5jaGlsZDt1IT09bnVsbDspYXw9dS5sYW5lc3x1LmNoaWxkTGFuZXMsZXw9dS5zdWJ0cmVlRmxhZ3MmNjUwMTE3MTIsZXw9dS5mbGFncyY2NTAxMTcxMix1LnJldHVybj1sLHU9dS5zaWJsaW5nO2Vsc2UgZm9yKHU9bC5jaGlsZDt1IT09bnVsbDspYXw9dS5sYW5lc3x1LmNoaWxkTGFuZXMsZXw9dS5zdWJ0cmVlRmxhZ3MsZXw9dS5mbGFncyx1LnJldHVybj1sLHU9dS5zaWJsaW5nO3JldHVybiBsLnN1YnRyZWVGbGFnc3w9ZSxsLmNoaWxkTGFuZXM9YSx0fWZ1bmN0aW9uIG5yKGwsdCxhKXt2YXIgZT10LnBlbmRpbmdQcm9wcztzd2l0Y2godmYodCksdC50YWcpe2Nhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIHcodCksbnVsbDtjYXNlIDE6cmV0dXJuIHcodCksbnVsbDtjYXNlIDM6cmV0dXJuIGE9dC5zdGF0ZU5vZGUsZT1udWxsLGwhPT1udWxsJiYoZT1sLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PWUmJih0LmZsYWdzfD0yMDQ4KSxTdCh1bCksUGEoKSxhLnBlbmRpbmdDb250ZXh0JiYoYS5jb250ZXh0PWEucGVuZGluZ0NvbnRleHQsYS5wZW5kaW5nQ29udGV4dD1udWxsKSwobD09PW51bGx8fGwuY2hpbGQ9PT1udWxsKSYmKFVhKHQpP3N0KHQpOmw9PT1udWxsfHxsLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYodC5mbGFncyYyNTYpPT09MHx8KHQuZmxhZ3N8PTEwMjQsWWkoKSkpLHcodCksbnVsbDtjYXNlIDI2OnZhciB1PXQudHlwZSxuPXQubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gbD09PW51bGw/KHN0KHQpLG4hPT1udWxsPyh3KHQpLFRzKHQsbikpOih3KHQpLEppKHQsdSxudWxsLGUsYSkpKTpuP24hPT1sLm1lbW9pemVkU3RhdGU/KHN0KHQpLHcodCksVHModCxuKSk6KHcodCksdC5mbGFncyY9LTE2Nzc3MjE3KToobD1sLm1lbW9pemVkUHJvcHMsbCE9PWUmJnN0KHQpLHcodCksSmkodCx1LGwsZSxhKSksbnVsbDtjYXNlIDI3OmlmKG1uKHQpLGE9WnQuY3VycmVudCx1PXQudHlwZSxsIT09bnVsbCYmdC5zdGF0ZU5vZGUhPW51bGwpbC5tZW1vaXplZFByb3BzIT09ZSYmc3QodCk7ZWxzZXtpZighZSl7aWYodC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKHAoMTY2KSk7cmV0dXJuIHcodCksbnVsbH1sPW50LmN1cnJlbnQsVWEodCk/bHModCxsKToobD1IbSh1LGUsYSksdC5zdGF0ZU5vZGU9bCxzdCh0KSl9cmV0dXJuIHcodCksbnVsbDtjYXNlIDU6aWYobW4odCksdT10LnR5cGUsbCE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKWwubWVtb2l6ZWRQcm9wcyE9PWUmJnN0KHQpO2Vsc2V7aWYoIWUpe2lmKHQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihwKDE2NikpO3JldHVybiB3KHQpLG51bGx9aWYobj1udC5jdXJyZW50LFVhKHQpKWxzKHQsbik7ZWxzZXt2YXIgaT1ObihadC5jdXJyZW50KTtzd2l0Y2gobil7Y2FzZSAxOm49aS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix1KTticmVhaztjYXNlIDI6bj1pLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsdSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2godSl7Y2FzZSJzdmciOm49aS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix1KTticmVhaztjYXNlIm1hdGgiOm49aS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHUpO2JyZWFrO2Nhc2Uic2NyaXB0IjpuPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsbj1uLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCk7YnJlYWs7Y2FzZSJzZWxlY3QiOm49dHlwZW9mIGUuaXM9PSJzdHJpbmciP2kuY3JlYXRlRWxlbWVudCgic2VsZWN0Iix7aXM6ZS5pc30pOmkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZS5tdWx0aXBsZT9uLm11bHRpcGxlPSEwOmUuc2l6ZSYmKG4uc2l6ZT1lLnNpemUpO2JyZWFrO2RlZmF1bHQ6bj10eXBlb2YgZS5pcz09InN0cmluZyI/aS5jcmVhdGVFbGVtZW50KHUse2lzOmUuaXN9KTppLmNyZWF0ZUVsZW1lbnQodSl9fW5bZGxdPXQsbltUbF09ZTtsOmZvcihpPXQuY2hpbGQ7aSE9PW51bGw7KXtpZihpLnRhZz09PTV8fGkudGFnPT09NiluLmFwcGVuZENoaWxkKGkuc3RhdGVOb2RlKTtlbHNlIGlmKGkudGFnIT09NCYmaS50YWchPT0yNyYmaS5jaGlsZCE9PW51bGwpe2kuY2hpbGQucmV0dXJuPWksaT1pLmNoaWxkO2NvbnRpbnVlfWlmKGk9PT10KWJyZWFrIGw7Zm9yKDtpLnNpYmxpbmc9PT1udWxsOyl7aWYoaS5yZXR1cm49PT1udWxsfHxpLnJldHVybj09PXQpYnJlYWsgbDtpPWkucmV0dXJufWkuc2libGluZy5yZXR1cm49aS5yZXR1cm4saT1pLnNpYmxpbmd9dC5zdGF0ZU5vZGU9bjtsOnN3aXRjaCh2bChuLHUsZSksdSl7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjplPSEhZS5hdXRvRm9jdXM7YnJlYWsgbDtjYXNlImltZyI6ZT0hMDticmVhayBsO2RlZmF1bHQ6ZT0hMX1lJiZzdCh0KX19cmV0dXJuIHcodCksSmkodCx0LnR5cGUsbD09PW51bGw/bnVsbDpsLm1lbW9pemVkUHJvcHMsdC5wZW5kaW5nUHJvcHMsYSksbnVsbDtjYXNlIDY6aWYobCYmdC5zdGF0ZU5vZGUhPW51bGwpbC5tZW1vaXplZFByb3BzIT09ZSYmc3QodCk7ZWxzZXtpZih0eXBlb2YgZSE9InN0cmluZyImJnQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihwKDE2NikpO2lmKGw9WnQuY3VycmVudCxVYSh0KSl7aWYobD10LnN0YXRlTm9kZSxhPXQubWVtb2l6ZWRQcm9wcyxlPW51bGwsdT1obCx1IT09bnVsbClzd2l0Y2godS50YWcpe2Nhc2UgMjc6Y2FzZSA1OmU9dS5tZW1vaXplZFByb3BzfWxbZGxdPXQsbD0hIShsLm5vZGVWYWx1ZT09PWF8fGUhPT1udWxsJiZlLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZz09PSEwfHxPbShsLm5vZGVWYWx1ZSxhKSksbHx8SXQodCwhMCl9ZWxzZSBsPU5uKGwpLmNyZWF0ZVRleHROb2RlKGUpLGxbZGxdPXQsdC5zdGF0ZU5vZGU9bH1yZXR1cm4gdyh0KSxudWxsO2Nhc2UgMzE6aWYoYT10Lm1lbW9pemVkU3RhdGUsbD09PW51bGx8fGwubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe2lmKGU9VWEodCksYSE9PW51bGwpe2lmKGw9PT1udWxsKXtpZighZSl0aHJvdyBFcnJvcihwKDMxOCkpO2lmKGw9dC5tZW1vaXplZFN0YXRlLGw9bCE9PW51bGw/bC5kZWh5ZHJhdGVkOm51bGwsIWwpdGhyb3cgRXJyb3IocCg1NTcpKTtsW2RsXT10fWVsc2UgcmEoKSwodC5mbGFncyYxMjgpPT09MCYmKHQubWVtb2l6ZWRTdGF0ZT1udWxsKSx0LmZsYWdzfD00O3codCksbD0hMX1lbHNlIGE9WWkoKSxsIT09bnVsbCYmbC5tZW1vaXplZFN0YXRlIT09bnVsbCYmKGwubWVtb2l6ZWRTdGF0ZS5oeWRyYXRpb25FcnJvcnM9YSksbD0hMDtpZighbClyZXR1cm4gdC5mbGFncyYyNTY/KERsKHQpLHQpOihEbCh0KSxudWxsKTtpZigodC5mbGFncyYxMjgpIT09MCl0aHJvdyBFcnJvcihwKDU1OCkpfXJldHVybiB3KHQpLG51bGw7Y2FzZSAxMzppZihlPXQubWVtb2l6ZWRTdGF0ZSxsPT09bnVsbHx8bC5tZW1vaXplZFN0YXRlIT09bnVsbCYmbC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZih1PVVhKHQpLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihsPT09bnVsbCl7aWYoIXUpdGhyb3cgRXJyb3IocCgzMTgpKTtpZih1PXQubWVtb2l6ZWRTdGF0ZSx1PXUhPT1udWxsP3UuZGVoeWRyYXRlZDpudWxsLCF1KXRocm93IEVycm9yKHAoMzE3KSk7dVtkbF09dH1lbHNlIHJhKCksKHQuZmxhZ3MmMTI4KT09PTAmJih0Lm1lbW9pemVkU3RhdGU9bnVsbCksdC5mbGFnc3w9NDt3KHQpLHU9ITF9ZWxzZSB1PVlpKCksbCE9PW51bGwmJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJihsLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPXUpLHU9ITA7aWYoIXUpcmV0dXJuIHQuZmxhZ3MmMjU2PyhEbCh0KSx0KTooRGwodCksbnVsbCl9cmV0dXJuIERsKHQpLCh0LmZsYWdzJjEyOCkhPT0wPyh0LmxhbmVzPWEsdCk6KGE9ZSE9PW51bGwsbD1sIT09bnVsbCYmbC5tZW1vaXplZFN0YXRlIT09bnVsbCxhJiYoZT10LmNoaWxkLHU9bnVsbCxlLmFsdGVybmF0ZSE9PW51bGwmJmUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJih1PWUuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLG49bnVsbCxlLm1lbW9pemVkU3RhdGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKG49ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxuIT09dSYmKGUuZmxhZ3N8PTIwNDgpKSxhIT09bCYmYSYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLFF1KHQsdC51cGRhdGVRdWV1ZSksdyh0KSxudWxsKTtjYXNlIDQ6cmV0dXJuIFBhKCksbD09PW51bGwmJlpmKHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHcodCksbnVsbDtjYXNlIDEwOnJldHVybiBTdCh0LnR5cGUpLHcodCksbnVsbDtjYXNlIDE5OmlmKHNsKGxsKSxlPXQubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbClyZXR1cm4gdyh0KSxudWxsO2lmKHU9KHQuZmxhZ3MmMTI4KSE9PTAsbj1lLnJlbmRlcmluZyxuPT09bnVsbClpZih1KXhlKGUsITEpO2Vsc2V7aWYoUCE9PTB8fGwhPT1udWxsJiYobC5mbGFncyYxMjgpIT09MClmb3IobD10LmNoaWxkO2whPT1udWxsOyl7aWYobj1TbihsKSxuIT09bnVsbCl7Zm9yKHQuZmxhZ3N8PTEyOCx4ZShlLCExKSxsPW4udXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT1sLFF1KHQsbCksdC5zdWJ0cmVlRmxhZ3M9MCxsPWEsYT10LmNoaWxkO2EhPT1udWxsOylaMChhLGwpLGE9YS5zaWJsaW5nO3JldHVybiBLKGxsLGxsLmN1cnJlbnQmMXwyKSxCJiZydCh0LGUudHJlZUZvcmtDb3VudCksdC5jaGlsZH1sPWwuc2libGluZ31lLnRhaWwhPT1udWxsJiZObCgpPnhuJiYodC5mbGFnc3w9MTI4LHU9ITAseGUoZSwhMSksdC5sYW5lcz00MTk0MzA0KX1lbHNle2lmKCF1KWlmKGw9U24obiksbCE9PW51bGwpe2lmKHQuZmxhZ3N8PTEyOCx1PSEwLGw9bC51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPWwsUXUodCxsKSx4ZShlLCEwKSxlLnRhaWw9PT1udWxsJiZlLnRhaWxNb2RlPT09ImhpZGRlbiImJiFuLmFsdGVybmF0ZSYmIUIpcmV0dXJuIHcodCksbnVsbH1lbHNlIDIqTmwoKS1lLnJlbmRlcmluZ1N0YXJ0VGltZT54biYmYSE9PTUzNjg3MDkxMiYmKHQuZmxhZ3N8PTEyOCx1PSEwLHhlKGUsITEpLHQubGFuZXM9NDE5NDMwNCk7ZS5pc0JhY2t3YXJkcz8obi5zaWJsaW5nPXQuY2hpbGQsdC5jaGlsZD1uKToobD1lLmxhc3QsbCE9PW51bGw/bC5zaWJsaW5nPW46dC5jaGlsZD1uLGUubGFzdD1uKX1yZXR1cm4gZS50YWlsIT09bnVsbD8obD1lLnRhaWwsZS5yZW5kZXJpbmc9bCxlLnRhaWw9bC5zaWJsaW5nLGUucmVuZGVyaW5nU3RhcnRUaW1lPU5sKCksbC5zaWJsaW5nPW51bGwsYT1sbC5jdXJyZW50LEsobGwsdT9hJjF8MjphJjEpLEImJnJ0KHQsZS50cmVlRm9ya0NvdW50KSxsKToodyh0KSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIERsKHQpLFNmKCksZT10Lm1lbW9pemVkU3RhdGUhPT1udWxsLGwhPT1udWxsP2wubWVtb2l6ZWRTdGF0ZSE9PW51bGwhPT1lJiYodC5mbGFnc3w9ODE5Mik6ZSYmKHQuZmxhZ3N8PTgxOTIpLGU/KGEmNTM2ODcwOTEyKSE9PTAmJih0LmZsYWdzJjEyOCk9PT0wJiYodyh0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOncodCksYT10LnVwZGF0ZVF1ZXVlLGEhPT1udWxsJiZRdSh0LGEucmV0cnlRdWV1ZSksYT1udWxsLGwhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKGE9bC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlPW51bGwsdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihlPXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksZSE9PWEmJih0LmZsYWdzfD0yMDQ4KSxsIT09bnVsbCYmc2wobWEpLG51bGw7Y2FzZSAyNDpyZXR1cm4gYT1udWxsLGwhPT1udWxsJiYoYT1sLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PWEmJih0LmZsYWdzfD0yMDQ4KSxTdCh1bCksdyh0KSxudWxsO2Nhc2UgMjU6cmV0dXJuIG51bGw7Y2FzZSAzMDpyZXR1cm4gbnVsbH10aHJvdyBFcnJvcihwKDE1Nix0LnRhZykpfWZ1bmN0aW9uIGlyKGwsdCl7c3dpdGNoKHZmKHQpLHQudGFnKXtjYXNlIDE6cmV0dXJuIGw9dC5mbGFncyxsJjY1NTM2Pyh0LmZsYWdzPWwmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMzpyZXR1cm4gU3QodWwpLFBhKCksbD10LmZsYWdzLChsJjY1NTM2KSE9PTAmJihsJjEyOCk9PT0wPyh0LmZsYWdzPWwmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIG1uKHQpLG51bGw7Y2FzZSAzMTppZih0Lm1lbW9pemVkU3RhdGUhPT1udWxsKXtpZihEbCh0KSx0LmFsdGVybmF0ZT09PW51bGwpdGhyb3cgRXJyb3IocCgzNDApKTtyYSgpfXJldHVybiBsPXQuZmxhZ3MsbCY2NTUzNj8odC5mbGFncz1sJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDEzOmlmKERsKHQpLGw9dC5tZW1vaXplZFN0YXRlLGwhPT1udWxsJiZsLmRlaHlkcmF0ZWQhPT1udWxsKXtpZih0LmFsdGVybmF0ZT09PW51bGwpdGhyb3cgRXJyb3IocCgzNDApKTtyYSgpfXJldHVybiBsPXQuZmxhZ3MsbCY2NTUzNj8odC5mbGFncz1sJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDE5OnJldHVybiBzbChsbCksbnVsbDtjYXNlIDQ6cmV0dXJuIFBhKCksbnVsbDtjYXNlIDEwOnJldHVybiBTdCh0LnR5cGUpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBEbCh0KSxTZigpLGwhPT1udWxsJiZzbChtYSksbD10LmZsYWdzLGwmNjU1MzY/KHQuZmxhZ3M9bCYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAyNDpyZXR1cm4gU3QodWwpLG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBaMShsLHQpe3N3aXRjaCh2Zih0KSx0LnRhZyl7Y2FzZSAzOlN0KHVsKSxQYSgpO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6bW4odCk7YnJlYWs7Y2FzZSA0OlBhKCk7YnJlYWs7Y2FzZSAzMTp0Lm1lbW9pemVkU3RhdGUhPT1udWxsJiZEbCh0KTticmVhaztjYXNlIDEzOkRsKHQpO2JyZWFrO2Nhc2UgMTk6c2wobGwpO2JyZWFrO2Nhc2UgMTA6U3QodC50eXBlKTticmVhaztjYXNlIDIyOmNhc2UgMjM6RGwodCksU2YoKSxsIT09bnVsbCYmc2wobWEpO2JyZWFrO2Nhc2UgMjQ6U3QodWwpfX1mdW5jdGlvbiB5dShsLHQpe3RyeXt2YXIgYT10LnVwZGF0ZVF1ZXVlLGU9YSE9PW51bGw/YS5sYXN0RWZmZWN0Om51bGw7aWYoZSE9PW51bGwpe3ZhciB1PWUubmV4dDthPXU7ZG97aWYoKGEudGFnJmwpPT09bCl7ZT12b2lkIDA7dmFyIG49YS5jcmVhdGUsaT1hLmluc3Q7ZT1uKCksaS5kZXN0cm95PWV9YT1hLm5leHR9d2hpbGUoYSE9PXUpfX1jYXRjaChjKXtRKHQsdC5yZXR1cm4sYyl9fWZ1bmN0aW9uIFB0KGwsdCxhKXt0cnl7dmFyIGU9dC51cGRhdGVRdWV1ZSx1PWUhPT1udWxsP2UubGFzdEVmZmVjdDpudWxsO2lmKHUhPT1udWxsKXt2YXIgbj11Lm5leHQ7ZT1uO2Rve2lmKChlLnRhZyZsKT09PWwpe3ZhciBpPWUuaW5zdCxjPWkuZGVzdHJveTtpZihjIT09dm9pZCAwKXtpLmRlc3Ryb3k9dm9pZCAwLHU9dDt2YXIgZj1hLGQ9Yzt0cnl7ZCgpfWNhdGNoKHYpe1EodSxmLHYpfX19ZT1lLm5leHR9d2hpbGUoZSE9PW4pfX1jYXRjaCh2KXtRKHQsdC5yZXR1cm4sdil9fWZ1bmN0aW9uIFYxKGwpe3ZhciB0PWwudXBkYXRlUXVldWU7aWYodCE9PW51bGwpe3ZhciBhPWwuc3RhdGVOb2RlO3RyeXtJMCh0LGEpfWNhdGNoKGUpe1EobCxsLnJldHVybixlKX19fWZ1bmN0aW9uIEwxKGwsdCxhKXthLnByb3BzPWJhKGwudHlwZSxsLm1lbW9pemVkUHJvcHMpLGEuc3RhdGU9bC5tZW1vaXplZFN0YXRlO3RyeXthLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goZSl7UShsLHQsZSl9fWZ1bmN0aW9uIFZlKGwsdCl7dHJ5e3ZhciBhPWwucmVmO2lmKGEhPT1udWxsKXtzd2l0Y2gobC50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6dmFyIGU9bC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAzMDplPWwuc3RhdGVOb2RlO2JyZWFrO2RlZmF1bHQ6ZT1sLnN0YXRlTm9kZX10eXBlb2YgYT09ImZ1bmN0aW9uIj9sLnJlZkNsZWFudXA9YShlKTphLmN1cnJlbnQ9ZX19Y2F0Y2godSl7UShsLHQsdSl9fWZ1bmN0aW9uIHV0KGwsdCl7dmFyIGE9bC5yZWYsZT1sLnJlZkNsZWFudXA7aWYoYSE9PW51bGwpaWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpdHJ5e2UoKX1jYXRjaCh1KXtRKGwsdCx1KX1maW5hbGx5e2wucmVmQ2xlYW51cD1udWxsLGw9bC5hbHRlcm5hdGUsbCE9bnVsbCYmKGwucmVmQ2xlYW51cD1udWxsKX1lbHNlIGlmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXRyeXthKG51bGwpfWNhdGNoKHUpe1EobCx0LHUpfWVsc2UgYS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gSzEobCl7dmFyIHQ9bC50eXBlLGE9bC5tZW1vaXplZFByb3BzLGU9bC5zdGF0ZU5vZGU7dHJ5e2w6c3dpdGNoKHQpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6YS5hdXRvRm9jdXMmJmUuZm9jdXMoKTticmVhayBsO2Nhc2UiaW1nIjphLnNyYz9lLnNyYz1hLnNyYzphLnNyY1NldCYmKGUuc3Jjc2V0PWEuc3JjU2V0KX19Y2F0Y2godSl7UShsLGwucmV0dXJuLHUpfX1mdW5jdGlvbiB3aShsLHQsYSl7dHJ5e3ZhciBlPWwuc3RhdGVOb2RlO3hyKGUsbC50eXBlLGEsdCksZVtUbF09dH1jYXRjaCh1KXtRKGwsbC5yZXR1cm4sdSl9fWZ1bmN0aW9uIEoxKGwpe3JldHVybiBsLnRhZz09PTV8fGwudGFnPT09M3x8bC50YWc9PT0yNnx8bC50YWc9PT0yNyYmYWEobC50eXBlKXx8bC50YWc9PT00fWZ1bmN0aW9uIFdpKGwpe2w6Zm9yKDs7KXtmb3IoO2wuc2libGluZz09PW51bGw7KXtpZihsLnJldHVybj09PW51bGx8fEoxKGwucmV0dXJuKSlyZXR1cm4gbnVsbDtsPWwucmV0dXJufWZvcihsLnNpYmxpbmcucmV0dXJuPWwucmV0dXJuLGw9bC5zaWJsaW5nO2wudGFnIT09NSYmbC50YWchPT02JiZsLnRhZyE9PTE4Oyl7aWYobC50YWc9PT0yNyYmYWEobC50eXBlKXx8bC5mbGFncyYyfHxsLmNoaWxkPT09bnVsbHx8bC50YWc9PT00KWNvbnRpbnVlIGw7bC5jaGlsZC5yZXR1cm49bCxsPWwuY2hpbGR9aWYoIShsLmZsYWdzJjIpKXJldHVybiBsLnN0YXRlTm9kZX19ZnVuY3Rpb24gcWMobCx0LGEpe3ZhciBlPWwudGFnO2lmKGU9PT01fHxlPT09NilsPWwuc3RhdGVOb2RlLHQ/KGEubm9kZVR5cGU9PT05P2EuYm9keTphLm5vZGVOYW1lPT09IkhUTUwiP2Eub3duZXJEb2N1bWVudC5ib2R5OmEpLmluc2VydEJlZm9yZShsLHQpOih0PWEubm9kZVR5cGU9PT05P2EuYm9keTphLm5vZGVOYW1lPT09IkhUTUwiP2Eub3duZXJEb2N1bWVudC5ib2R5OmEsdC5hcHBlbmRDaGlsZChsKSxhPWEuX3JlYWN0Um9vdENvbnRhaW5lcixhIT1udWxsfHx0Lm9uY2xpY2shPT1udWxsfHwodC5vbmNsaWNrPWd0KSk7ZWxzZSBpZihlIT09NCYmKGU9PT0yNyYmYWEobC50eXBlKSYmKGE9bC5zdGF0ZU5vZGUsdD1udWxsKSxsPWwuY2hpbGQsbCE9PW51bGwpKWZvcihxYyhsLHQsYSksbD1sLnNpYmxpbmc7bCE9PW51bGw7KXFjKGwsdCxhKSxsPWwuc2libGluZ31mdW5jdGlvbiBUbihsLHQsYSl7dmFyIGU9bC50YWc7aWYoZT09PTV8fGU9PT02KWw9bC5zdGF0ZU5vZGUsdD9hLmluc2VydEJlZm9yZShsLHQpOmEuYXBwZW5kQ2hpbGQobCk7ZWxzZSBpZihlIT09NCYmKGU9PT0yNyYmYWEobC50eXBlKSYmKGE9bC5zdGF0ZU5vZGUpLGw9bC5jaGlsZCxsIT09bnVsbCkpZm9yKFRuKGwsdCxhKSxsPWwuc2libGluZztsIT09bnVsbDspVG4obCx0LGEpLGw9bC5zaWJsaW5nfWZ1bmN0aW9uIHcxKGwpe3ZhciB0PWwuc3RhdGVOb2RlLGE9bC5tZW1vaXplZFByb3BzO3RyeXtmb3IodmFyIGU9bC50eXBlLHU9dC5hdHRyaWJ1dGVzO3UubGVuZ3RoOyl0LnJlbW92ZUF0dHJpYnV0ZU5vZGUodVswXSk7dmwodCxlLGEpLHRbZGxdPWwsdFtUbF09YX1jYXRjaChuKXtRKGwsbC5yZXR1cm4sbil9fXZhciB2dD0hMSxlbD0hMSwkaT0hMSx4cz10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCxmbD1udWxsO2Z1bmN0aW9uIGNyKGwsdCl7aWYobD1sLmNvbnRhaW5lckluZm8sVmM9cW4sbD1SMChsKSxzZihsKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGwpdmFyIGE9e3N0YXJ0Omwuc2VsZWN0aW9uU3RhcnQsZW5kOmwuc2VsZWN0aW9uRW5kfTtlbHNlIGw6e2E9KGE9bC5vd25lckRvY3VtZW50KSYmYS5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciBlPWEuZ2V0U2VsZWN0aW9uJiZhLmdldFNlbGVjdGlvbigpO2lmKGUmJmUucmFuZ2VDb3VudCE9PTApe2E9ZS5hbmNob3JOb2RlO3ZhciB1PWUuYW5jaG9yT2Zmc2V0LG49ZS5mb2N1c05vZGU7ZT1lLmZvY3VzT2Zmc2V0O3RyeXthLm5vZGVUeXBlLG4ubm9kZVR5cGV9Y2F0Y2h7YT1udWxsO2JyZWFrIGx9dmFyIGk9MCxjPS0xLGY9LTEsZD0wLHY9MCx5PWwsbT1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIHI7eSE9PWF8fHUhPT0wJiZ5Lm5vZGVUeXBlIT09M3x8KGM9aSt1KSx5IT09bnx8ZSE9PTAmJnkubm9kZVR5cGUhPT0zfHwoZj1pK2UpLHkubm9kZVR5cGU9PT0zJiYoaSs9eS5ub2RlVmFsdWUubGVuZ3RoKSwocj15LmZpcnN0Q2hpbGQpIT09bnVsbDspbT15LHk9cjtmb3IoOzspe2lmKHk9PT1sKWJyZWFrIHQ7aWYobT09PWEmJisrZD09PXUmJihjPWkpLG09PT1uJiYrK3Y9PT1lJiYoZj1pKSwocj15Lm5leHRTaWJsaW5nKSE9PW51bGwpYnJlYWs7eT1tLG09eS5wYXJlbnROb2RlfXk9cn1hPWM9PT0tMXx8Zj09PS0xP251bGw6e3N0YXJ0OmMsZW5kOmZ9fWVsc2UgYT1udWxsfWE9YXx8e3N0YXJ0OjAsZW5kOjB9fWVsc2UgYT1udWxsO2ZvcihMYz17Zm9jdXNlZEVsZW06bCxzZWxlY3Rpb25SYW5nZTphfSxxbj0hMSxmbD10O2ZsIT09bnVsbDspaWYodD1mbCxsPXQuY2hpbGQsKHQuc3VidHJlZUZsYWdzJjEwMjgpIT09MCYmbCE9PW51bGwpbC5yZXR1cm49dCxmbD1sO2Vsc2UgZm9yKDtmbCE9PW51bGw7KXtzd2l0Y2godD1mbCxuPXQuYWx0ZXJuYXRlLGw9dC5mbGFncyx0LnRhZyl7Y2FzZSAwOmlmKChsJjQpIT09MCYmKGw9dC51cGRhdGVRdWV1ZSxsPWwhPT1udWxsP2wuZXZlbnRzOm51bGwsbCE9PW51bGwpKWZvcihhPTA7YTxsLmxlbmd0aDthKyspdT1sW2FdLHUucmVmLmltcGw9dS5uZXh0SW1wbDticmVhaztjYXNlIDExOmNhc2UgMTU6YnJlYWs7Y2FzZSAxOmlmKChsJjEwMjQpIT09MCYmbiE9PW51bGwpe2w9dm9pZCAwLGE9dCx1PW4ubWVtb2l6ZWRQcm9wcyxuPW4ubWVtb2l6ZWRTdGF0ZSxlPWEuc3RhdGVOb2RlO3RyeXt2YXIgRT1iYShhLnR5cGUsdSk7bD1lLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEUsbiksZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT1sfWNhdGNoKHope1EoYSxhLnJldHVybix6KX19YnJlYWs7Y2FzZSAzOmlmKChsJjEwMjQpIT09MCl7aWYobD10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGE9bC5ub2RlVHlwZSxhPT09OSlKYyhsKTtlbHNlIGlmKGE9PT0xKXN3aXRjaChsLm5vZGVOYW1lKXtjYXNlIkhFQUQiOmNhc2UiSFRNTCI6Y2FzZSJCT0RZIjpKYyhsKTticmVhaztkZWZhdWx0OmwudGV4dENvbnRlbnQ9IiJ9fWJyZWFrO2Nhc2UgNTpjYXNlIDI2OmNhc2UgMjc6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6aWYoKGwmMTAyNCkhPT0wKXRocm93IEVycm9yKHAoMTYzKSl9aWYobD10LnNpYmxpbmcsbCE9PW51bGwpe2wucmV0dXJuPXQucmV0dXJuLGZsPWw7YnJlYWt9Zmw9dC5yZXR1cm59fWZ1bmN0aW9uIFcxKGwsdCxhKXt2YXIgZT1hLmZsYWdzO3N3aXRjaChhLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpkdChsLGEpLGUmNCYmeXUoNSxhKTticmVhaztjYXNlIDE6aWYoZHQobCxhKSxlJjQpaWYobD1hLnN0YXRlTm9kZSx0PT09bnVsbCl0cnl7bC5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGkpe1EoYSxhLnJldHVybixpKX1lbHNle3ZhciB1PWJhKGEudHlwZSx0Lm1lbW9pemVkUHJvcHMpO3Q9dC5tZW1vaXplZFN0YXRlO3RyeXtsLmNvbXBvbmVudERpZFVwZGF0ZSh1LHQsbC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9Y2F0Y2goaSl7UShhLGEucmV0dXJuLGkpfX1lJjY0JiZWMShhKSxlJjUxMiYmVmUoYSxhLnJldHVybik7YnJlYWs7Y2FzZSAzOmlmKGR0KGwsYSksZSY2NCYmKGw9YS51cGRhdGVRdWV1ZSxsIT09bnVsbCkpe2lmKHQ9bnVsbCxhLmNoaWxkIT09bnVsbClzd2l0Y2goYS5jaGlsZC50YWcpe2Nhc2UgMjc6Y2FzZSA1OnQ9YS5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOnQ9YS5jaGlsZC5zdGF0ZU5vZGV9dHJ5e0kwKGwsdCl9Y2F0Y2goaSl7UShhLGEucmV0dXJuLGkpfX1icmVhaztjYXNlIDI3OnQ9PT1udWxsJiZlJjQmJncxKGEpO2Nhc2UgMjY6Y2FzZSA1OmR0KGwsYSksdD09PW51bGwmJmUmNCYmSzEoYSksZSY1MTImJlZlKGEsYS5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZHQobCxhKTticmVhaztjYXNlIDMxOmR0KGwsYSksZSY0JiZGMShsLGEpO2JyZWFrO2Nhc2UgMTM6ZHQobCxhKSxlJjQmJkkxKGwsYSksZSY2NCYmKGw9YS5tZW1vaXplZFN0YXRlLGwhPT1udWxsJiYobD1sLmRlaHlkcmF0ZWQsbCE9PW51bGwmJihhPXlyLmJpbmQobnVsbCxhKSxScihsLGEpKSkpO2JyZWFrO2Nhc2UgMjI6aWYoZT1hLm1lbW9pemVkU3RhdGUhPT1udWxsfHx2dCwhZSl7dD10IT09bnVsbCYmdC5tZW1vaXplZFN0YXRlIT09bnVsbHx8ZWwsdT12dDt2YXIgbj1lbDt2dD1lLChlbD10KSYmIW4/aHQobCxhLChhLnN1YnRyZWVGbGFncyY4NzcyKSE9PTApOmR0KGwsYSksdnQ9dSxlbD1ufWJyZWFrO2Nhc2UgMzA6YnJlYWs7ZGVmYXVsdDpkdChsLGEpfX1mdW5jdGlvbiAkMShsKXt2YXIgdD1sLmFsdGVybmF0ZTt0IT09bnVsbCYmKGwuYWx0ZXJuYXRlPW51bGwsJDEodCkpLGwuY2hpbGQ9bnVsbCxsLmRlbGV0aW9ucz1udWxsLGwuc2libGluZz1udWxsLGwudGFnPT09NSYmKHQ9bC5zdGF0ZU5vZGUsdCE9PW51bGwmJmVmKHQpKSxsLnN0YXRlTm9kZT1udWxsLGwucmV0dXJuPW51bGwsbC5kZXBlbmRlbmNpZXM9bnVsbCxsLm1lbW9pemVkUHJvcHM9bnVsbCxsLm1lbW9pemVkU3RhdGU9bnVsbCxsLnBlbmRpbmdQcm9wcz1udWxsLGwuc3RhdGVOb2RlPW51bGwsbC51cGRhdGVRdWV1ZT1udWxsfXZhciBGPW51bGwsemw9ITE7ZnVuY3Rpb24gbXQobCx0LGEpe2ZvcihhPWEuY2hpbGQ7YSE9PW51bGw7KWsxKGwsdCxhKSxhPWEuc2libGluZ31mdW5jdGlvbiBrMShsLHQsYSl7aWYoQ2wmJnR5cGVvZiBDbC5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7Q2wub25Db21taXRGaWJlclVubW91bnQob3UsYSl9Y2F0Y2h7fXN3aXRjaChhLnRhZyl7Y2FzZSAyNjplbHx8dXQoYSx0KSxtdChsLHQsYSksYS5tZW1vaXplZFN0YXRlP2EubWVtb2l6ZWRTdGF0ZS5jb3VudC0tOmEuc3RhdGVOb2RlJiYoYT1hLnN0YXRlTm9kZSxhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSkpO2JyZWFrO2Nhc2UgMjc6ZWx8fHV0KGEsdCk7dmFyIGU9Rix1PXpsO2FhKGEudHlwZSkmJihGPWEuc3RhdGVOb2RlLHpsPSExKSxtdChsLHQsYSksd2UoYS5zdGF0ZU5vZGUpLEY9ZSx6bD11O2JyZWFrO2Nhc2UgNTplbHx8dXQoYSx0KTtjYXNlIDY6aWYoZT1GLHU9emwsRj1udWxsLG10KGwsdCxhKSxGPWUsemw9dSxGIT09bnVsbClpZih6bCl0cnl7KEYubm9kZVR5cGU9PT05P0YuYm9keTpGLm5vZGVOYW1lPT09IkhUTUwiP0Yub3duZXJEb2N1bWVudC5ib2R5OkYpLnJlbW92ZUNoaWxkKGEuc3RhdGVOb2RlKX1jYXRjaChuKXtRKGEsdCxuKX1lbHNlIHRyeXtGLnJlbW92ZUNoaWxkKGEuc3RhdGVOb2RlKX1jYXRjaChuKXtRKGEsdCxuKX1icmVhaztjYXNlIDE4OkYhPT1udWxsJiYoemw/KGw9RixqcyhsLm5vZGVUeXBlPT09OT9sLmJvZHk6bC5ub2RlTmFtZT09PSJIVE1MIj9sLm93bmVyRG9jdW1lbnQuYm9keTpsLGEuc3RhdGVOb2RlKSxvZShsKSk6anMoRixhLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgNDplPUYsdT16bCxGPWEuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8semw9ITAsbXQobCx0LGEpLEY9ZSx6bD11O2JyZWFrO2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpQdCgyLGEsdCksZWx8fFB0KDQsYSx0KSxtdChsLHQsYSk7YnJlYWs7Y2FzZSAxOmVsfHwodXQoYSx0KSxlPWEuc3RhdGVOb2RlLHR5cGVvZiBlLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iJiZMMShhLHQsZSkpLG10KGwsdCxhKTticmVhaztjYXNlIDIxOm10KGwsdCxhKTticmVhaztjYXNlIDIyOmVsPShlPWVsKXx8YS5tZW1vaXplZFN0YXRlIT09bnVsbCxtdChsLHQsYSksZWw9ZTticmVhaztkZWZhdWx0Om10KGwsdCxhKX19ZnVuY3Rpb24gRjEobCx0KXtpZih0Lm1lbW9pemVkU3RhdGU9PT1udWxsJiYobD10LmFsdGVybmF0ZSxsIT09bnVsbCYmKGw9bC5tZW1vaXplZFN0YXRlLGwhPT1udWxsKSkpe2w9bC5kZWh5ZHJhdGVkO3RyeXtvZShsKX1jYXRjaChhKXtRKHQsdC5yZXR1cm4sYSl9fX1mdW5jdGlvbiBJMShsLHQpe2lmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJihsPXQuYWx0ZXJuYXRlLGwhPT1udWxsJiYobD1sLm1lbW9pemVkU3RhdGUsbCE9PW51bGwmJihsPWwuZGVoeWRyYXRlZCxsIT09bnVsbCkpKSl0cnl7b2UobCl9Y2F0Y2goYSl7USh0LHQucmV0dXJuLGEpfX1mdW5jdGlvbiBmcihsKXtzd2l0Y2gobC50YWcpe2Nhc2UgMzE6Y2FzZSAxMzpjYXNlIDE5OnZhciB0PWwuc3RhdGVOb2RlO3JldHVybiB0PT09bnVsbCYmKHQ9bC5zdGF0ZU5vZGU9bmV3IHhzKSx0O2Nhc2UgMjI6cmV0dXJuIGw9bC5zdGF0ZU5vZGUsdD1sLl9yZXRyeUNhY2hlLHQ9PT1udWxsJiYodD1sLl9yZXRyeUNhY2hlPW5ldyB4cyksdDtkZWZhdWx0OnRocm93IEVycm9yKHAoNDM1LGwudGFnKSl9fWZ1bmN0aW9uIGp1KGwsdCl7dmFyIGE9ZnIobCk7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFhLmhhcyhlKSl7YS5hZGQoZSk7dmFyIHU9Z3IuYmluZChudWxsLGwsZSk7ZS50aGVuKHUsdSl9fSl9ZnVuY3Rpb24gU2wobCx0KXt2YXIgYT10LmRlbGV0aW9ucztpZihhIT09bnVsbClmb3IodmFyIGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHU9YVtlXSxuPWwsaT10LGM9aTtsOmZvcig7YyE9PW51bGw7KXtzd2l0Y2goYy50YWcpe2Nhc2UgMjc6aWYoYWEoYy50eXBlKSl7Rj1jLnN0YXRlTm9kZSx6bD0hMTticmVhayBsfWJyZWFrO2Nhc2UgNTpGPWMuc3RhdGVOb2RlLHpsPSExO2JyZWFrIGw7Y2FzZSAzOmNhc2UgNDpGPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8semw9ITA7YnJlYWsgbH1jPWMucmV0dXJufWlmKEY9PT1udWxsKXRocm93IEVycm9yKHAoMTYwKSk7azEobixpLHUpLEY9bnVsbCx6bD0hMSxuPXUuYWx0ZXJuYXRlLG4hPT1udWxsJiYobi5yZXR1cm49bnVsbCksdS5yZXR1cm49bnVsbH1pZih0LnN1YnRyZWVGbGFncyYxMzg4Nilmb3IodD10LmNoaWxkO3QhPT1udWxsOylQMSh0LGwpLHQ9dC5zaWJsaW5nfXZhciBGbD1udWxsO2Z1bmN0aW9uIFAxKGwsdCl7dmFyIGE9bC5hbHRlcm5hdGUsZT1sLmZsYWdzO3N3aXRjaChsLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OlNsKHQsbCksRWwobCksZSY0JiYoUHQoMyxsLGwucmV0dXJuKSx5dSgzLGwpLFB0KDUsbCxsLnJldHVybikpO2JyZWFrO2Nhc2UgMTpTbCh0LGwpLEVsKGwpLGUmNTEyJiYoZWx8fGE9PT1udWxsfHx1dChhLGEucmV0dXJuKSksZSY2NCYmdnQmJihsPWwudXBkYXRlUXVldWUsbCE9PW51bGwmJihlPWwuY2FsbGJhY2tzLGUhPT1udWxsJiYoYT1sLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MsbC5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzPWE9PT1udWxsP2U6YS5jb25jYXQoZSkpKSk7YnJlYWs7Y2FzZSAyNjp2YXIgdT1GbDtpZihTbCh0LGwpLEVsKGwpLGUmNTEyJiYoZWx8fGE9PT1udWxsfHx1dChhLGEucmV0dXJuKSksZSY0KXt2YXIgbj1hIT09bnVsbD9hLm1lbW9pemVkU3RhdGU6bnVsbDtpZihlPWwubWVtb2l6ZWRTdGF0ZSxhPT09bnVsbClpZihlPT09bnVsbClpZihsLnN0YXRlTm9kZT09PW51bGwpe2w6e2U9bC50eXBlLGE9bC5tZW1vaXplZFByb3BzLHU9dS5vd25lckRvY3VtZW50fHx1O3Q6c3dpdGNoKGUpe2Nhc2UidGl0bGUiOm49dS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKVswXSwoIW58fG5bZHVdfHxuW2RsXXx8bi5uYW1lc3BhY2VVUkk9PT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifHxuLmhhc0F0dHJpYnV0ZSgiaXRlbXByb3AiKSkmJihuPXUuY3JlYXRlRWxlbWVudChlKSx1LmhlYWQuaW5zZXJ0QmVmb3JlKG4sdS5xdWVyeVNlbGVjdG9yKCJoZWFkID4gdGl0bGUiKSkpLHZsKG4sZSxhKSxuW2RsXT1sLG9sKG4pLGU9bjticmVhayBsO2Nhc2UibGluayI6dmFyIGk9V3MoImxpbmsiLCJocmVmIix1KS5nZXQoZSsoYS5ocmVmfHwiIikpO2lmKGkpe2Zvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKWlmKG49aVtjXSxuLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09KGEuaHJlZj09bnVsbHx8YS5ocmVmPT09IiI/bnVsbDphLmhyZWYpJiZuLmdldEF0dHJpYnV0ZSgicmVsIik9PT0oYS5yZWw9PW51bGw/bnVsbDphLnJlbCkmJm4uZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPT09KGEudGl0bGU9PW51bGw/bnVsbDphLnRpdGxlKSYmbi5nZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIik9PT0oYS5jcm9zc09yaWdpbj09bnVsbD9udWxsOmEuY3Jvc3NPcmlnaW4pKXtpLnNwbGljZShjLDEpO2JyZWFrIHR9fW49dS5jcmVhdGVFbGVtZW50KGUpLHZsKG4sZSxhKSx1LmhlYWQuYXBwZW5kQ2hpbGQobik7YnJlYWs7Y2FzZSJtZXRhIjppZihpPVdzKCJtZXRhIiwiY29udGVudCIsdSkuZ2V0KGUrKGEuY29udGVudHx8IiIpKSl7Zm9yKGM9MDtjPGkubGVuZ3RoO2MrKylpZihuPWlbY10sbi5nZXRBdHRyaWJ1dGUoImNvbnRlbnQiKT09PShhLmNvbnRlbnQ9PW51bGw/bnVsbDoiIithLmNvbnRlbnQpJiZuLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09KGEubmFtZT09bnVsbD9udWxsOmEubmFtZSkmJm4uZ2V0QXR0cmlidXRlKCJwcm9wZXJ0eSIpPT09KGEucHJvcGVydHk9PW51bGw/bnVsbDphLnByb3BlcnR5KSYmbi5nZXRBdHRyaWJ1dGUoImh0dHAtZXF1aXYiKT09PShhLmh0dHBFcXVpdj09bnVsbD9udWxsOmEuaHR0cEVxdWl2KSYmbi5nZXRBdHRyaWJ1dGUoImNoYXJzZXQiKT09PShhLmNoYXJTZXQ9PW51bGw/bnVsbDphLmNoYXJTZXQpKXtpLnNwbGljZShjLDEpO2JyZWFrIHR9fW49dS5jcmVhdGVFbGVtZW50KGUpLHZsKG4sZSxhKSx1LmhlYWQuYXBwZW5kQ2hpbGQobik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihwKDQ2OCxlKSl9bltkbF09bCxvbChuKSxlPW59bC5zdGF0ZU5vZGU9ZX1lbHNlICRzKHUsbC50eXBlLGwuc3RhdGVOb2RlKTtlbHNlIGwuc3RhdGVOb2RlPXdzKHUsZSxsLm1lbW9pemVkUHJvcHMpO2Vsc2UgbiE9PWU/KG49PT1udWxsP2Euc3RhdGVOb2RlIT09bnVsbCYmKGE9YS5zdGF0ZU5vZGUsYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpKTpuLmNvdW50LS0sZT09PW51bGw/JHModSxsLnR5cGUsbC5zdGF0ZU5vZGUpOndzKHUsZSxsLm1lbW9pemVkUHJvcHMpKTplPT09bnVsbCYmbC5zdGF0ZU5vZGUhPT1udWxsJiZ3aShsLGwubWVtb2l6ZWRQcm9wcyxhLm1lbW9pemVkUHJvcHMpfWJyZWFrO2Nhc2UgMjc6U2wodCxsKSxFbChsKSxlJjUxMiYmKGVsfHxhPT09bnVsbHx8dXQoYSxhLnJldHVybikpLGEhPT1udWxsJiZlJjQmJndpKGwsbC5tZW1vaXplZFByb3BzLGEubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmlmKFNsKHQsbCksRWwobCksZSY1MTImJihlbHx8YT09PW51bGx8fHV0KGEsYS5yZXR1cm4pKSxsLmZsYWdzJjMyKXt1PWwuc3RhdGVOb2RlO3RyeXt0ZSh1LCIiKX1jYXRjaChFKXtRKGwsbC5yZXR1cm4sRSl9fWUmNCYmbC5zdGF0ZU5vZGUhPW51bGwmJih1PWwubWVtb2l6ZWRQcm9wcyx3aShsLHUsYSE9PW51bGw/YS5tZW1vaXplZFByb3BzOnUpKSxlJjEwMjQmJigkaT0hMCk7YnJlYWs7Y2FzZSA2OmlmKFNsKHQsbCksRWwobCksZSY0KXtpZihsLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IocCgxNjIpKTtlPWwubWVtb2l6ZWRQcm9wcyxhPWwuc3RhdGVOb2RlO3RyeXthLm5vZGVWYWx1ZT1lfWNhdGNoKEUpe1EobCxsLnJldHVybixFKX19YnJlYWs7Y2FzZSAzOmlmKG5uPW51bGwsdT1GbCxGbD1Dbih0LmNvbnRhaW5lckluZm8pLFNsKHQsbCksRmw9dSxFbChsKSxlJjQmJmEhPT1udWxsJiZhLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXRyeXtvZSh0LmNvbnRhaW5lckluZm8pfWNhdGNoKEUpe1EobCxsLnJldHVybixFKX0kaSYmKCRpPSExLGxtKGwpKTticmVhaztjYXNlIDQ6ZT1GbCxGbD1DbihsLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxTbCh0LGwpLEVsKGwpLEZsPWU7YnJlYWs7Y2FzZSAxMjpTbCh0LGwpLEVsKGwpO2JyZWFrO2Nhc2UgMzE6U2wodCxsKSxFbChsKSxlJjQmJihlPWwudXBkYXRlUXVldWUsZSE9PW51bGwmJihsLnVwZGF0ZVF1ZXVlPW51bGwsanUobCxlKSkpO2JyZWFrO2Nhc2UgMTM6U2wodCxsKSxFbChsKSxsLmNoaWxkLmZsYWdzJjgxOTImJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGwhPShhIT09bnVsbCYmYS5tZW1vaXplZFN0YXRlIT09bnVsbCkmJigkbj1ObCgpKSxlJjQmJihlPWwudXBkYXRlUXVldWUsZSE9PW51bGwmJihsLnVwZGF0ZVF1ZXVlPW51bGwsanUobCxlKSkpO2JyZWFrO2Nhc2UgMjI6dT1sLm1lbW9pemVkU3RhdGUhPT1udWxsO3ZhciBmPWEhPT1udWxsJiZhLm1lbW9pemVkU3RhdGUhPT1udWxsLGQ9dnQsdj1lbDtpZih2dD1kfHx1LGVsPXZ8fGYsU2wodCxsKSxlbD12LHZ0PWQsRWwobCksZSY4MTkyKWw6Zm9yKHQ9bC5zdGF0ZU5vZGUsdC5fdmlzaWJpbGl0eT11P3QuX3Zpc2liaWxpdHkmLTI6dC5fdmlzaWJpbGl0eXwxLHUmJihhPT09bnVsbHx8Znx8dnR8fGVsfHxmYShsKSksYT1udWxsLHQ9bDs7KXtpZih0LnRhZz09PTV8fHQudGFnPT09MjYpe2lmKGE9PT1udWxsKXtmPWE9dDt0cnl7aWYobj1mLnN0YXRlTm9kZSx1KWk9bi5zdHlsZSx0eXBlb2YgaS5zZXRQcm9wZXJ0eT09ImZ1bmN0aW9uIj9pLnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOmkuZGlzcGxheT0ibm9uZSI7ZWxzZXtjPWYuc3RhdGVOb2RlO3ZhciB5PWYubWVtb2l6ZWRQcm9wcy5zdHlsZSxtPXkhPW51bGwmJnkuaGFzT3duUHJvcGVydHkoImRpc3BsYXkiKT95LmRpc3BsYXk6bnVsbDtjLnN0eWxlLmRpc3BsYXk9bT09bnVsbHx8dHlwZW9mIG09PSJib29sZWFuIj8iIjooIiIrbSkudHJpbSgpfX1jYXRjaChFKXtRKGYsZi5yZXR1cm4sRSl9fX1lbHNlIGlmKHQudGFnPT09Nil7aWYoYT09PW51bGwpe2Y9dDt0cnl7Zi5zdGF0ZU5vZGUubm9kZVZhbHVlPXU/IiI6Zi5tZW1vaXplZFByb3BzfWNhdGNoKEUpe1EoZixmLnJldHVybixFKX19fWVsc2UgaWYodC50YWc9PT0xOCl7aWYoYT09PW51bGwpe2Y9dDt0cnl7dmFyIHI9Zi5zdGF0ZU5vZGU7dT9acyhyLCEwKTpacyhmLnN0YXRlTm9kZSwhMSl9Y2F0Y2goRSl7UShmLGYucmV0dXJuLEUpfX19ZWxzZSBpZigodC50YWchPT0yMiYmdC50YWchPT0yM3x8dC5tZW1vaXplZFN0YXRlPT09bnVsbHx8dD09PWwpJiZ0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWwpYnJlYWsgbDtmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09bClicmVhayBsO2E9PT10JiYoYT1udWxsKSx0PXQucmV0dXJufWE9PT10JiYoYT1udWxsKSx0LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfWUmNCYmKGU9bC51cGRhdGVRdWV1ZSxlIT09bnVsbCYmKGE9ZS5yZXRyeVF1ZXVlLGEhPT1udWxsJiYoZS5yZXRyeVF1ZXVlPW51bGwsanUobCxhKSkpKTticmVhaztjYXNlIDE5OlNsKHQsbCksRWwobCksZSY0JiYoZT1sLnVwZGF0ZVF1ZXVlLGUhPT1udWxsJiYobC51cGRhdGVRdWV1ZT1udWxsLGp1KGwsZSkpKTticmVhaztjYXNlIDMwOmJyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDpTbCh0LGwpLEVsKGwpfX1mdW5jdGlvbiBFbChsKXt2YXIgdD1sLmZsYWdzO2lmKHQmMil7dHJ5e2Zvcih2YXIgYSxlPWwucmV0dXJuO2UhPT1udWxsOyl7aWYoSjEoZSkpe2E9ZTticmVha31lPWUucmV0dXJufWlmKGE9PW51bGwpdGhyb3cgRXJyb3IocCgxNjApKTtzd2l0Y2goYS50YWcpe2Nhc2UgMjc6dmFyIHU9YS5zdGF0ZU5vZGUsbj1XaShsKTtUbihsLG4sdSk7YnJlYWs7Y2FzZSA1OnZhciBpPWEuc3RhdGVOb2RlO2EuZmxhZ3MmMzImJih0ZShpLCIiKSxhLmZsYWdzJj0tMzMpO3ZhciBjPVdpKGwpO1RuKGwsYyxpKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBmPWEuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sZD1XaShsKTtxYyhsLGQsZik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihwKDE2MSkpfX1jYXRjaCh2KXtRKGwsbC5yZXR1cm4sdil9bC5mbGFncyY9LTN9dCY0MDk2JiYobC5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGxtKGwpe2lmKGwuc3VidHJlZUZsYWdzJjEwMjQpZm9yKGw9bC5jaGlsZDtsIT09bnVsbDspe3ZhciB0PWw7bG0odCksdC50YWc9PT01JiZ0LmZsYWdzJjEwMjQmJnQuc3RhdGVOb2RlLnJlc2V0KCksbD1sLnNpYmxpbmd9fWZ1bmN0aW9uIGR0KGwsdCl7aWYodC5zdWJ0cmVlRmxhZ3MmODc3Milmb3IodD10LmNoaWxkO3QhPT1udWxsOylXMShsLHQuYWx0ZXJuYXRlLHQpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIGZhKGwpe2ZvcihsPWwuY2hpbGQ7bCE9PW51bGw7KXt2YXIgdD1sO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OlB0KDQsdCx0LnJldHVybiksZmEodCk7YnJlYWs7Y2FzZSAxOnV0KHQsdC5yZXR1cm4pO3ZhciBhPXQuc3RhdGVOb2RlO3R5cGVvZiBhLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iJiZMMSh0LHQucmV0dXJuLGEpLGZhKHQpO2JyZWFrO2Nhc2UgMjc6d2UodC5zdGF0ZU5vZGUpO2Nhc2UgMjY6Y2FzZSA1OnV0KHQsdC5yZXR1cm4pLGZhKHQpO2JyZWFrO2Nhc2UgMjI6dC5tZW1vaXplZFN0YXRlPT09bnVsbCYmZmEodCk7YnJlYWs7Y2FzZSAzMDpmYSh0KTticmVhaztkZWZhdWx0OmZhKHQpfWw9bC5zaWJsaW5nfX1mdW5jdGlvbiBodChsLHQsYSl7Zm9yKGE9YSYmKHQuc3VidHJlZUZsYWdzJjg3NzIpIT09MCx0PXQuY2hpbGQ7dCE9PW51bGw7KXt2YXIgZT10LmFsdGVybmF0ZSx1PWwsbj10LGk9bi5mbGFncztzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6aHQodSxuLGEpLHl1KDQsbik7YnJlYWs7Y2FzZSAxOmlmKGh0KHUsbixhKSxlPW4sdT1lLnN0YXRlTm9kZSx0eXBlb2YgdS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIil0cnl7dS5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGQpe1EoZSxlLnJldHVybixkKX1pZihlPW4sdT1lLnVwZGF0ZVF1ZXVlLHUhPT1udWxsKXt2YXIgYz1lLnN0YXRlTm9kZTt0cnl7dmFyIGY9dS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzO2lmKGYhPT1udWxsKWZvcih1LnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bnVsbCx1PTA7dTxmLmxlbmd0aDt1KyspRjAoZlt1XSxjKX1jYXRjaChkKXtRKGUsZS5yZXR1cm4sZCl9fWEmJmkmNjQmJlYxKG4pLFZlKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6dzEobik7Y2FzZSAyNjpjYXNlIDU6aHQodSxuLGEpLGEmJmU9PT1udWxsJiZpJjQmJksxKG4pLFZlKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6aHQodSxuLGEpO2JyZWFrO2Nhc2UgMzE6aHQodSxuLGEpLGEmJmkmNCYmRjEodSxuKTticmVhaztjYXNlIDEzOmh0KHUsbixhKSxhJiZpJjQmJkkxKHUsbik7YnJlYWs7Y2FzZSAyMjpuLm1lbW9pemVkU3RhdGU9PT1udWxsJiZodCh1LG4sYSksVmUobixuLnJldHVybik7YnJlYWs7Y2FzZSAzMDpicmVhaztkZWZhdWx0Omh0KHUsbixhKX10PXQuc2libGluZ319ZnVuY3Rpb24gcWYobCx0KXt2YXIgYT1udWxsO2whPT1udWxsJiZsLm1lbW9pemVkU3RhdGUhPT1udWxsJiZsLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sIT09bnVsbCYmKGE9bC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxsPW51bGwsdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCE9PW51bGwmJihsPXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksbCE9PWEmJihsIT1udWxsJiZsLnJlZkNvdW50KyssYSE9bnVsbCYmcnUoYSkpfWZ1bmN0aW9uIFlmKGwsdCl7bD1udWxsLHQuYWx0ZXJuYXRlIT09bnVsbCYmKGw9dC5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksdD10Lm1lbW9pemVkU3RhdGUuY2FjaGUsdCE9PWwmJih0LnJlZkNvdW50KyssbCE9bnVsbCYmcnUobCkpfWZ1bmN0aW9uIGtsKGwsdCxhLGUpe2lmKHQuc3VidHJlZUZsYWdzJjEwMjU2KWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KXRtKGwsdCxhLGUpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIHRtKGwsdCxhLGUpe3ZhciB1PXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmtsKGwsdCxhLGUpLHUmMjA0OCYmeXUoOSx0KTticmVhaztjYXNlIDE6a2wobCx0LGEsZSk7YnJlYWs7Y2FzZSAzOmtsKGwsdCxhLGUpLHUmMjA0OCYmKGw9bnVsbCx0LmFsdGVybmF0ZSE9PW51bGwmJihsPXQuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQ9dC5tZW1vaXplZFN0YXRlLmNhY2hlLHQhPT1sJiYodC5yZWZDb3VudCsrLGwhPW51bGwmJnJ1KGwpKSk7YnJlYWs7Y2FzZSAxMjppZih1JjIwNDgpe2tsKGwsdCxhLGUpLGw9dC5zdGF0ZU5vZGU7dHJ5e3ZhciBuPXQubWVtb2l6ZWRQcm9wcyxpPW4uaWQsYz1uLm9uUG9zdENvbW1pdDt0eXBlb2YgYz09ImZ1bmN0aW9uIiYmYyhpLHQuYWx0ZXJuYXRlPT09bnVsbD8ibW91bnQiOiJ1cGRhdGUiLGwucGFzc2l2ZUVmZmVjdER1cmF0aW9uLC0wKX1jYXRjaChmKXtRKHQsdC5yZXR1cm4sZil9fWVsc2Uga2wobCx0LGEsZSk7YnJlYWs7Y2FzZSAzMTprbChsLHQsYSxlKTticmVhaztjYXNlIDEzOmtsKGwsdCxhLGUpO2JyZWFrO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyMjpuPXQuc3RhdGVOb2RlLGk9dC5hbHRlcm5hdGUsdC5tZW1vaXplZFN0YXRlIT09bnVsbD9uLl92aXNpYmlsaXR5JjI/a2wobCx0LGEsZSk6TGUobCx0KTpuLl92aXNpYmlsaXR5JjI/a2wobCx0LGEsZSk6KG4uX3Zpc2liaWxpdHl8PTIsTmEobCx0LGEsZSwodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT09MHx8ITEpKSx1JjIwNDgmJnFmKGksdCk7YnJlYWs7Y2FzZSAyNDprbChsLHQsYSxlKSx1JjIwNDgmJllmKHQuYWx0ZXJuYXRlLHQpO2JyZWFrO2RlZmF1bHQ6a2wobCx0LGEsZSl9fWZ1bmN0aW9uIE5hKGwsdCxhLGUsdSl7Zm9yKHU9dSYmKCh0LnN1YnRyZWVGbGFncyYxMDI1NikhPT0wfHwhMSksdD10LmNoaWxkO3QhPT1udWxsOyl7dmFyIG49bCxpPXQsYz1hLGY9ZSxkPWkuZmxhZ3M7c3dpdGNoKGkudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1Ok5hKG4saSxjLGYsdSkseXUoOCxpKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6dmFyIHY9aS5zdGF0ZU5vZGU7aS5tZW1vaXplZFN0YXRlIT09bnVsbD92Ll92aXNpYmlsaXR5JjI/TmEobixpLGMsZix1KTpMZShuLGkpOih2Ll92aXNpYmlsaXR5fD0yLE5hKG4saSxjLGYsdSkpLHUmJmQmMjA0OCYmcWYoaS5hbHRlcm5hdGUsaSk7YnJlYWs7Y2FzZSAyNDpOYShuLGksYyxmLHUpLHUmJmQmMjA0OCYmWWYoaS5hbHRlcm5hdGUsaSk7YnJlYWs7ZGVmYXVsdDpOYShuLGksYyxmLHUpfXQ9dC5zaWJsaW5nfX1mdW5jdGlvbiBMZShsLHQpe2lmKHQuc3VidHJlZUZsYWdzJjEwMjU2KWZvcih0PXQuY2hpbGQ7dCE9PW51bGw7KXt2YXIgYT1sLGU9dCx1PWUuZmxhZ3M7c3dpdGNoKGUudGFnKXtjYXNlIDIyOkxlKGEsZSksdSYyMDQ4JiZxZihlLmFsdGVybmF0ZSxlKTticmVhaztjYXNlIDI0OkxlKGEsZSksdSYyMDQ4JiZZZihlLmFsdGVybmF0ZSxlKTticmVhaztkZWZhdWx0OkxlKGEsZSl9dD10LnNpYmxpbmd9fXZhciBSZT04MTkyO2Z1bmN0aW9uIEhhKGwsdCxhKXtpZihsLnN1YnRyZWVGbGFncyZSZSlmb3IobD1sLmNoaWxkO2whPT1udWxsOylhbShsLHQsYSksbD1sLnNpYmxpbmd9ZnVuY3Rpb24gYW0obCx0LGEpe3N3aXRjaChsLnRhZyl7Y2FzZSAyNjpIYShsLHQsYSksbC5mbGFncyZSZSYmbC5tZW1vaXplZFN0YXRlIT09bnVsbCYmSnIoYSxGbCxsLm1lbW9pemVkU3RhdGUsbC5tZW1vaXplZFByb3BzKTticmVhaztjYXNlIDU6SGEobCx0LGEpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIGU9Rmw7Rmw9Q24obC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksSGEobCx0LGEpLEZsPWU7YnJlYWs7Y2FzZSAyMjpsLm1lbW9pemVkU3RhdGU9PT1udWxsJiYoZT1sLmFsdGVybmF0ZSxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbD8oZT1SZSxSZT0xNjc3NzIxNixIYShsLHQsYSksUmU9ZSk6SGEobCx0LGEpKTticmVhaztkZWZhdWx0OkhhKGwsdCxhKX19ZnVuY3Rpb24gZW0obCl7dmFyIHQ9bC5hbHRlcm5hdGU7aWYodCE9PW51bGwmJihsPXQuY2hpbGQsbCE9PW51bGwpKXt0LmNoaWxkPW51bGw7ZG8gdD1sLnNpYmxpbmcsbC5zaWJsaW5nPW51bGwsbD10O3doaWxlKGwhPT1udWxsKX19ZnVuY3Rpb24gT2UobCl7dmFyIHQ9bC5kZWxldGlvbnM7aWYoKGwuZmxhZ3MmMTYpIT09MCl7aWYodCE9PW51bGwpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBlPXRbYV07Zmw9ZSxubShlLGwpfWVtKGwpfWlmKGwuc3VidHJlZUZsYWdzJjEwMjU2KWZvcihsPWwuY2hpbGQ7bCE9PW51bGw7KXVtKGwpLGw9bC5zaWJsaW5nfWZ1bmN0aW9uIHVtKGwpe3N3aXRjaChsLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpPZShsKSxsLmZsYWdzJjIwNDgmJlB0KDksbCxsLnJldHVybik7YnJlYWs7Y2FzZSAzOk9lKGwpO2JyZWFrO2Nhc2UgMTI6T2UobCk7YnJlYWs7Y2FzZSAyMjp2YXIgdD1sLnN0YXRlTm9kZTtsLm1lbW9pemVkU3RhdGUhPT1udWxsJiZ0Ll92aXNpYmlsaXR5JjImJihsLnJldHVybj09PW51bGx8fGwucmV0dXJuLnRhZyE9PTEzKT8odC5fdmlzaWJpbGl0eSY9LTMsZW4obCkpOk9lKGwpO2JyZWFrO2RlZmF1bHQ6T2UobCl9fWZ1bmN0aW9uIGVuKGwpe3ZhciB0PWwuZGVsZXRpb25zO2lmKChsLmZsYWdzJjE2KSE9PTApe2lmKHQhPT1udWxsKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgZT10W2FdO2ZsPWUsbm0oZSxsKX1lbShsKX1mb3IobD1sLmNoaWxkO2whPT1udWxsOyl7c3dpdGNoKHQ9bCx0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpQdCg4LHQsdC5yZXR1cm4pLGVuKHQpO2JyZWFrO2Nhc2UgMjI6YT10LnN0YXRlTm9kZSxhLl92aXNpYmlsaXR5JjImJihhLl92aXNpYmlsaXR5Jj0tMyxlbih0KSk7YnJlYWs7ZGVmYXVsdDplbih0KX1sPWwuc2libGluZ319ZnVuY3Rpb24gbm0obCx0KXtmb3IoO2ZsIT09bnVsbDspe3ZhciBhPWZsO3N3aXRjaChhLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpQdCg4LGEsdCk7YnJlYWs7Y2FzZSAyMzpjYXNlIDIyOmlmKGEubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJmEubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2whPT1udWxsKXt2YXIgZT1hLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2w7ZSE9bnVsbCYmZS5yZWZDb3VudCsrfWJyZWFrO2Nhc2UgMjQ6cnUoYS5tZW1vaXplZFN0YXRlLmNhY2hlKX1pZihlPWEuY2hpbGQsZSE9PW51bGwpZS5yZXR1cm49YSxmbD1lO2Vsc2UgbDpmb3IoYT1sO2ZsIT09bnVsbDspe2U9Zmw7dmFyIHU9ZS5zaWJsaW5nLG49ZS5yZXR1cm47aWYoJDEoZSksZT09PWEpe2ZsPW51bGw7YnJlYWsgbH1pZih1IT09bnVsbCl7dS5yZXR1cm49bixmbD11O2JyZWFrIGx9Zmw9bn19fXZhciBvcj17Z2V0Q2FjaGVGb3JUeXBlOmZ1bmN0aW9uKGwpe3ZhciB0PXJsKHVsKSxhPXQuZGF0YS5nZXQobCk7cmV0dXJuIGE9PT12b2lkIDAmJihhPWwoKSx0LmRhdGEuc2V0KGwsYSkpLGF9LGNhY2hlU2lnbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIHJsKHVsKS5jb250cm9sbGVyLnNpZ25hbH19LHNyPXR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iP1dlYWtNYXA6TWFwLFk9MCxMPW51bGwsQz1udWxsLFI9MCxYPTAsX2w9bnVsbCxYdD0hMSxyZT0hMSxHZj0hMSx4dD0wLFA9MCxsYT0wLGhhPTAsWGY9MCxIbD0wLG5lPTAsS2U9bnVsbCxBbD1udWxsLFljPSExLCRuPTAsaW09MCx4bj0xLzAsT249bnVsbCxKdD1udWxsLGlsPTAsd3Q9bnVsbCxpZT1udWxsLEV0PTAsR2M9MCxYYz1udWxsLGNtPW51bGwsSmU9MCxRYz1udWxsO2Z1bmN0aW9uIEJsKCl7cmV0dXJuKFkmMikhPT0wJiZSIT09MD9SJi1SOk8uVCE9PW51bGw/amYoKTp5MCgpfWZ1bmN0aW9uIGZtKCl7aWYoSGw9PT0wKWlmKChSJjUzNjg3MDkxMik9PT0wfHxCKXt2YXIgbD1IdTtIdTw8PTEsKEh1JjM5MzIxNjApPT09MCYmKEh1PTI2MjE0NCksSGw9bH1lbHNlIEhsPTUzNjg3MDkxMjtyZXR1cm4gbD1ZbC5jdXJyZW50LGwhPT1udWxsJiYobC5mbGFnc3w9MzIpLEhsfWZ1bmN0aW9uIE1sKGwsdCxhKXsobD09PUwmJihYPT09Mnx8WD09PTkpfHxsLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsKSYmKGNlKGwsMCksUXQobCxSLEhsLCExKSksbXUobCxhKSwoKFkmMik9PT0wfHxsIT09TCkmJihsPT09TCYmKChZJjIpPT09MCYmKGhhfD1hKSxQPT09NCYmUXQobCxSLEhsLCExKSksY3QobCkpfWZ1bmN0aW9uIG9tKGwsdCxhKXtpZigoWSY2KSE9PTApdGhyb3cgRXJyb3IocCgzMjcpKTt2YXIgZT0hYSYmKHQmMTI3KT09PTAmJih0JmwuZXhwaXJlZExhbmVzKT09PTB8fHN1KGwsdCksdT1lP2hyKGwsdCk6a2kobCx0LCEwKSxuPWU7ZG97aWYodT09PTApe3JlJiYhZSYmUXQobCx0LDAsITEpO2JyZWFrfWVsc2V7aWYoYT1sLmN1cnJlbnQuYWx0ZXJuYXRlLG4mJiFtcihhKSl7dT1raShsLHQsITEpLG49ITE7Y29udGludWV9aWYodT09PTIpe2lmKG49dCxsLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJm4pdmFyIGk9MDtlbHNlIGk9bC5wZW5kaW5nTGFuZXMmLTUzNjg3MDkxMyxpPWkhPT0wP2k6aSY1MzY4NzA5MTI/NTM2ODcwOTEyOjA7aWYoaSE9PTApe3Q9aTtsOnt2YXIgYz1sO3U9S2U7dmFyIGY9Yy5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkO2lmKGYmJihjZShjLGkpLmZsYWdzfD0yNTYpLGk9a2koYyxpLCExKSxpIT09Mil7aWYoR2YmJiFmKXtjLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzfD1uLGhhfD1uLHU9NDticmVhayBsfW49QWwsQWw9dSxuIT09bnVsbCYmKEFsPT09bnVsbD9BbD1uOkFsLnB1c2guYXBwbHkoQWwsbikpfXU9aX1pZihuPSExLHUhPT0yKWNvbnRpbnVlfX1pZih1PT09MSl7Y2UobCwwKSxRdChsLHQsMCwhMCk7YnJlYWt9bDp7c3dpdGNoKGU9bCxuPXUsbil7Y2FzZSAwOmNhc2UgMTp0aHJvdyBFcnJvcihwKDM0NSkpO2Nhc2UgNDppZigodCY0MTk0MDQ4KSE9PXQpYnJlYWs7Y2FzZSA2OlF0KGUsdCxIbCwhWHQpO2JyZWFrIGw7Y2FzZSAyOkFsPW51bGw7YnJlYWs7Y2FzZSAzOmNhc2UgNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKHAoMzI5KSl9aWYoKHQmNjI5MTQ1NjApPT09dCYmKHU9JG4rMzAwLU5sKCksMTA8dSkpe2lmKFF0KGUsdCxIbCwhWHQpLEduKGUsMCwhMCkhPT0wKWJyZWFrIGw7RXQ9dCxlLnRpbWVvdXRIYW5kbGU9RG0oT3MuYmluZChudWxsLGUsYSxBbCxPbixZYyx0LEhsLGhhLG5lLFh0LG4sIlRocm90dGxlZCIsLTAsMCksdSk7YnJlYWsgbH1PcyhlLGEsQWwsT24sWWMsdCxIbCxoYSxuZSxYdCxuLG51bGwsLTAsMCl9fWJyZWFrfXdoaWxlKCEwKTtjdChsKX1mdW5jdGlvbiBPcyhsLHQsYSxlLHUsbixpLGMsZixkLHYseSxtLHIpe2lmKGwudGltZW91dEhhbmRsZT0tMSx5PXQuc3VidHJlZUZsYWdzLHkmODE5Mnx8KHkmMTY3ODU0MDgpPT09MTY3ODU0MDgpe3k9e3N0eWxlc2hlZXRzOm51bGwsY291bnQ6MCxpbWdDb3VudDowLGltZ0J5dGVzOjAsc3VzcGVuc2V5SW1hZ2VzOltdLHdhaXRpbmdGb3JJbWFnZXM6ITAsd2FpdGluZ0ZvclZpZXdUcmFuc2l0aW9uOiExLHVuc3VzcGVuZDpndH0sYW0odCxuLHkpO3ZhciBFPShuJjYyOTE0NTYwKT09PW4/JG4tTmwoKToobiY0MTk0MDQ4KT09PW4/aW0tTmwoKTowO2lmKEU9d3IoeSxFKSxFIT09bnVsbCl7RXQ9bixsLmNhbmNlbFBlbmRpbmdDb21taXQ9RShEcy5iaW5kKG51bGwsbCx0LG4sYSxlLHUsaSxjLGYsdix5LG51bGwsbSxyKSksUXQobCxuLGksIWQpO3JldHVybn19RHMobCx0LG4sYSxlLHUsaSxjLGYpfWZ1bmN0aW9uIG1yKGwpe2Zvcih2YXIgdD1sOzspe3ZhciBhPXQudGFnO2lmKChhPT09MHx8YT09PTExfHxhPT09MTUpJiZ0LmZsYWdzJjE2Mzg0JiYoYT10LnVwZGF0ZVF1ZXVlLGEhPT1udWxsJiYoYT1hLnN0b3JlcyxhIT09bnVsbCkpKWZvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgdT1hW2VdLG49dS5nZXRTbmFwc2hvdDt1PXUudmFsdWU7dHJ5e2lmKCFxbChuKCksdSkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9fWlmKGE9dC5jaGlsZCx0LnN1YnRyZWVGbGFncyYxNjM4NCYmYSE9PW51bGwpYS5yZXR1cm49dCx0PWE7ZWxzZXtpZih0PT09bClicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09bClyZXR1cm4hMDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fXJldHVybiEwfWZ1bmN0aW9uIFF0KGwsdCxhLGUpe3QmPX5YZix0Jj1+aGEsbC5zdXNwZW5kZWRMYW5lc3w9dCxsLnBpbmdlZExhbmVzJj1+dCxlJiYobC53YXJtTGFuZXN8PXQpLGU9bC5leHBpcmF0aW9uVGltZXM7Zm9yKHZhciB1PXQ7MDx1Oyl7dmFyIG49MzEtUmwodSksaT0xPDxuO2Vbbl09LTEsdSY9fml9YSE9PTAmJmgwKGwsYSx0KX1mdW5jdGlvbiBrbigpe3JldHVybihZJjYpPT09MD8oZ3UoMCwhMSksITEpOiEwfWZ1bmN0aW9uIFFmKCl7aWYoQyE9PW51bGwpe2lmKFg9PT0wKXZhciBsPUMucmV0dXJuO2Vsc2UgbD1DLGJ0PUFhPW51bGwsVGYobCksa2E9bnVsbCxsdT0wLGw9Qztmb3IoO2whPT1udWxsOylaMShsLmFsdGVybmF0ZSxsKSxsPWwucmV0dXJuO0M9bnVsbH19ZnVuY3Rpb24gY2UobCx0KXt2YXIgYT1sLnRpbWVvdXRIYW5kbGU7YSE9PS0xJiYobC50aW1lb3V0SGFuZGxlPS0xLERyKGEpKSxhPWwuY2FuY2VsUGVuZGluZ0NvbW1pdCxhIT09bnVsbCYmKGwuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsLGEoKSksRXQ9MCxRZigpLEw9bCxDPWE9cHQobC5jdXJyZW50LG51bGwpLFI9dCxYPTAsX2w9bnVsbCxYdD0hMSxyZT1zdShsLHQpLEdmPSExLG5lPUhsPVhmPWhhPWxhPVA9MCxBbD1LZT1udWxsLFljPSExLCh0JjgpIT09MCYmKHR8PXQmMzIpO3ZhciBlPWwuZW50YW5nbGVkTGFuZXM7aWYoZSE9PTApZm9yKGw9bC5lbnRhbmdsZW1lbnRzLGUmPXQ7MDxlOyl7dmFyIHU9MzEtUmwoZSksbj0xPDx1O3R8PWxbdV0sZSY9fm59cmV0dXJuIHh0PXQsWm4oKSxhfWZ1bmN0aW9uIHNtKGwsdCl7SD1udWxsLE8uSD1hdSx0PT09aGV8fHQ9PT1Mbj8odD1ucygpLFg9Myk6dD09PWJmPyh0PW5zKCksWD00KTpYPXQ9PT1SZj84OnQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiI/NjoxLF9sPXQsQz09PW51bGwmJihQPTEsQW4obCxMbCh0LGwuY3VycmVudCkpKX1mdW5jdGlvbiBtbSgpe3ZhciBsPVlsLmN1cnJlbnQ7cmV0dXJuIGw9PT1udWxsPyEwOihSJjQxOTQwNDgpPT09Uj9KbD09PW51bGw6KFImNjI5MTQ1NjApPT09Unx8KFImNTM2ODcwOTEyKSE9PTA/bD09PUpsOiExfWZ1bmN0aW9uIGRtKCl7dmFyIGw9Ty5IO3JldHVybiBPLkg9YXUsbD09PW51bGw/YXU6bH1mdW5jdGlvbiBobSgpe3ZhciBsPU8uQTtyZXR1cm4gTy5BPW9yLGx9ZnVuY3Rpb24gX24oKXtQPTQsWHR8fChSJjQxOTQwNDgpIT09UiYmWWwuY3VycmVudCE9PW51bGx8fChyZT0hMCksKGxhJjEzNDIxNzcyNyk9PT0wJiYoaGEmMTM0MjE3NzI3KT09PTB8fEw9PT1udWxsfHxRdChMLFIsSGwsITEpfWZ1bmN0aW9uIGtpKGwsdCxhKXt2YXIgZT1ZO1l8PTI7dmFyIHU9ZG0oKSxuPWhtKCk7KEwhPT1sfHxSIT09dCkmJihPbj1udWxsLGNlKGwsdCkpLHQ9ITE7dmFyIGk9UDtsOmRvIHRyeXtpZihYIT09MCYmQyE9PW51bGwpe3ZhciBjPUMsZj1fbDtzd2l0Y2goWCl7Y2FzZSA4OlFmKCksaT02O2JyZWFrIGw7Y2FzZSAzOmNhc2UgMjpjYXNlIDk6Y2FzZSA2OllsLmN1cnJlbnQ9PT1udWxsJiYodD0hMCk7dmFyIGQ9WDtpZihYPTAsX2w9bnVsbCxLYShsLGMsZixkKSxhJiZyZSl7aT0wO2JyZWFrIGx9YnJlYWs7ZGVmYXVsdDpkPVgsWD0wLF9sPW51bGwsS2EobCxjLGYsZCl9fWRyKCksaT1QO2JyZWFrfWNhdGNoKHYpe3NtKGwsdil9d2hpbGUoITApO3JldHVybiB0JiZsLnNoZWxsU3VzcGVuZENvdW50ZXIrKyxidD1BYT1udWxsLFk9ZSxPLkg9dSxPLkE9bixDPT09bnVsbCYmKEw9bnVsbCxSPTAsWm4oKSksaX1mdW5jdGlvbiBkcigpe2Zvcig7QyE9PW51bGw7KXJtKEMpfWZ1bmN0aW9uIGhyKGwsdCl7dmFyIGE9WTtZfD0yO3ZhciBlPWRtKCksdT1obSgpO0whPT1sfHxSIT09dD8oT249bnVsbCx4bj1ObCgpKzUwMCxjZShsLHQpKTpyZT1zdShsLHQpO2w6ZG8gdHJ5e2lmKFghPT0wJiZDIT09bnVsbCl7dD1DO3ZhciBuPV9sO3Q6c3dpdGNoKFgpe2Nhc2UgMTpYPTAsX2w9bnVsbCxLYShsLHQsbiwxKTticmVhaztjYXNlIDI6Y2FzZSA5OmlmKHVzKG4pKXtYPTAsX2w9bnVsbCxfcyh0KTticmVha310PWZ1bmN0aW9uKCl7WCE9PTImJlghPT05fHxMIT09bHx8KFg9NyksY3QobCl9LG4udGhlbih0LHQpO2JyZWFrIGw7Y2FzZSAzOlg9NzticmVhayBsO2Nhc2UgNDpYPTU7YnJlYWsgbDtjYXNlIDc6dXMobik/KFg9MCxfbD1udWxsLF9zKHQpKTooWD0wLF9sPW51bGwsS2EobCx0LG4sNykpO2JyZWFrO2Nhc2UgNTp2YXIgaT1udWxsO3N3aXRjaChDLnRhZyl7Y2FzZSAyNjppPUMubWVtb2l6ZWRTdGF0ZTtjYXNlIDU6Y2FzZSAyNzp2YXIgYz1DO2lmKGk/Um0oaSk6Yy5zdGF0ZU5vZGUuY29tcGxldGUpe1g9MCxfbD1udWxsO3ZhciBmPWMuc2libGluZztpZihmIT09bnVsbClDPWY7ZWxzZXt2YXIgZD1jLnJldHVybjtkIT09bnVsbD8oQz1kLEZuKGQpKTpDPW51bGx9YnJlYWsgdH19WD0wLF9sPW51bGwsS2EobCx0LG4sNSk7YnJlYWs7Y2FzZSA2Olg9MCxfbD1udWxsLEthKGwsdCxuLDYpO2JyZWFrO2Nhc2UgODpRZigpLFA9NjticmVhayBsO2RlZmF1bHQ6dGhyb3cgRXJyb3IocCg0NjIpKX19cnIoKTticmVha31jYXRjaCh2KXtzbShsLHYpfXdoaWxlKCEwKTtyZXR1cm4gYnQ9QWE9bnVsbCxPLkg9ZSxPLkE9dSxZPWEsQyE9PW51bGw/MDooTD1udWxsLFI9MCxabigpLFApfWZ1bmN0aW9uIHJyKCl7Zm9yKDtDIT09bnVsbCYmIVlkKCk7KXJtKEMpfWZ1bmN0aW9uIHJtKGwpe3ZhciB0PWoxKGwuYWx0ZXJuYXRlLGwseHQpO2wubWVtb2l6ZWRQcm9wcz1sLnBlbmRpbmdQcm9wcyx0PT09bnVsbD9GbihsKTpDPXR9ZnVuY3Rpb24gX3MobCl7dmFyIHQ9bCxhPXQuYWx0ZXJuYXRlO3N3aXRjaCh0LnRhZyl7Y2FzZSAxNTpjYXNlIDA6dD1FcyhhLHQsdC5wZW5kaW5nUHJvcHMsdC50eXBlLHZvaWQgMCxSKTticmVhaztjYXNlIDExOnQ9RXMoYSx0LHQucGVuZGluZ1Byb3BzLHQudHlwZS5yZW5kZXIsdC5yZWYsUik7YnJlYWs7Y2FzZSA1OlRmKHQpO2RlZmF1bHQ6WjEoYSx0KSx0PUM9WjAodCx4dCksdD1qMShhLHQseHQpfWwubWVtb2l6ZWRQcm9wcz1sLnBlbmRpbmdQcm9wcyx0PT09bnVsbD9GbihsKTpDPXR9ZnVuY3Rpb24gS2EobCx0LGEsZSl7YnQ9QWE9bnVsbCxUZih0KSxrYT1udWxsLGx1PTA7dmFyIHU9dC5yZXR1cm47dHJ5e2lmKGFyKGwsdSx0LGEsUikpe1A9MSxBbihsLExsKGEsbC5jdXJyZW50KSksQz1udWxsO3JldHVybn19Y2F0Y2gobil7aWYodSE9PW51bGwpdGhyb3cgQz11LG47UD0xLEFuKGwsTGwoYSxsLmN1cnJlbnQpKSxDPW51bGw7cmV0dXJufXQuZmxhZ3MmMzI3Njg/KEJ8fGU9PT0xP2w9ITA6cmV8fChSJjUzNjg3MDkxMikhPT0wP2w9ITE6KFh0PWw9ITAsKGU9PT0yfHxlPT09OXx8ZT09PTN8fGU9PT02KSYmKGU9WWwuY3VycmVudCxlIT09bnVsbCYmZS50YWc9PT0xMyYmKGUuZmxhZ3N8PTE2Mzg0KSkpLHZtKHQsbCkpOkZuKHQpfWZ1bmN0aW9uIEZuKGwpe3ZhciB0PWw7ZG97aWYoKHQuZmxhZ3MmMzI3NjgpIT09MCl7dm0odCxYdCk7cmV0dXJufWw9dC5yZXR1cm47dmFyIGE9bnIodC5hbHRlcm5hdGUsdCx4dCk7aWYoYSE9PW51bGwpe0M9YTtyZXR1cm59aWYodD10LnNpYmxpbmcsdCE9PW51bGwpe0M9dDtyZXR1cm59Qz10PWx9d2hpbGUodCE9PW51bGwpO1A9PT0wJiYoUD01KX1mdW5jdGlvbiB2bShsLHQpe2Rve3ZhciBhPWlyKGwuYWx0ZXJuYXRlLGwpO2lmKGEhPT1udWxsKXthLmZsYWdzJj0zMjc2NyxDPWE7cmV0dXJufWlmKGE9bC5yZXR1cm4sYSE9PW51bGwmJihhLmZsYWdzfD0zMjc2OCxhLnN1YnRyZWVGbGFncz0wLGEuZGVsZXRpb25zPW51bGwpLCF0JiYobD1sLnNpYmxpbmcsbCE9PW51bGwpKXtDPWw7cmV0dXJufUM9bD1hfXdoaWxlKGwhPT1udWxsKTtQPTYsQz1udWxsfWZ1bmN0aW9uIERzKGwsdCxhLGUsdSxuLGksYyxmKXtsLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbDtkbyBJbigpO3doaWxlKGlsIT09MCk7aWYoKFkmNikhPT0wKXRocm93IEVycm9yKHAoMzI3KSk7aWYodCE9PW51bGwpe2lmKHQ9PT1sLmN1cnJlbnQpdGhyb3cgRXJyb3IocCgxNzcpKTtpZihuPXQubGFuZXN8dC5jaGlsZExhbmVzLG58PW1mLHdkKGwsYSxuLGksYyxmKSxsPT09TCYmKEM9TD1udWxsLFI9MCksaWU9dCx3dD1sLEV0PWEsR2M9bixYYz11LGNtPWUsKHQuc3VidHJlZUZsYWdzJjEwMjU2KSE9PTB8fCh0LmZsYWdzJjEwMjU2KSE9PTA/KGwuY2FsbGJhY2tOb2RlPW51bGwsbC5jYWxsYmFja1ByaW9yaXR5PTAsYnIoZG4sZnVuY3Rpb24oKXtyZXR1cm4gU20oKSxudWxsfSkpOihsLmNhbGxiYWNrTm9kZT1udWxsLGwuY2FsbGJhY2tQcmlvcml0eT0wKSxlPSh0LmZsYWdzJjEzODc4KSE9PTAsKHQuc3VidHJlZUZsYWdzJjEzODc4KSE9PTB8fGUpe2U9Ty5ULE8uVD1udWxsLHU9Ry5wLEcucD0yLGk9WSxZfD00O3RyeXtjcihsLHQsYSl9ZmluYWxseXtZPWksRy5wPXUsTy5UPWV9fWlsPTEseW0oKSxnbSgpLGJtKCl9fWZ1bmN0aW9uIHltKCl7aWYoaWw9PT0xKXtpbD0wO3ZhciBsPXd0LHQ9aWUsYT0odC5mbGFncyYxMzg3OCkhPT0wO2lmKCh0LnN1YnRyZWVGbGFncyYxMzg3OCkhPT0wfHxhKXthPU8uVCxPLlQ9bnVsbDt2YXIgZT1HLnA7Ry5wPTI7dmFyIHU9WTtZfD00O3RyeXtQMSh0LGwpO3ZhciBuPUxjLGk9UjAobC5jb250YWluZXJJbmZvKSxjPW4uZm9jdXNlZEVsZW0sZj1uLnNlbGVjdGlvblJhbmdlO2lmKGkhPT1jJiZjJiZjLm93bmVyRG9jdW1lbnQmJkMwKGMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYykpe2lmKGYhPT1udWxsJiZzZihjKSl7dmFyIGQ9Zi5zdGFydCx2PWYuZW5kO2lmKHY9PT12b2lkIDAmJih2PWQpLCJzZWxlY3Rpb25TdGFydCJpbiBjKWMuc2VsZWN0aW9uU3RhcnQ9ZCxjLnNlbGVjdGlvbkVuZD1NYXRoLm1pbih2LGMudmFsdWUubGVuZ3RoKTtlbHNle3ZhciB5PWMub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQsbT15JiZ5LmRlZmF1bHRWaWV3fHx3aW5kb3c7aWYobS5nZXRTZWxlY3Rpb24pe3ZhciByPW0uZ2V0U2VsZWN0aW9uKCksRT1jLnRleHRDb250ZW50Lmxlbmd0aCx6PU1hdGgubWluKGYuc3RhcnQsRSksVD1mLmVuZD09PXZvaWQgMD96Ok1hdGgubWluKGYuZW5kLEUpOyFyLmV4dGVuZCYmej5UJiYoaT1ULFQ9eix6PWkpO3ZhciBzPUZvKGMseiksbz1GbyhjLFQpO2lmKHMmJm8mJihyLnJhbmdlQ291bnQhPT0xfHxyLmFuY2hvck5vZGUhPT1zLm5vZGV8fHIuYW5jaG9yT2Zmc2V0IT09cy5vZmZzZXR8fHIuZm9jdXNOb2RlIT09by5ub2RlfHxyLmZvY3VzT2Zmc2V0IT09by5vZmZzZXQpKXt2YXIgaD15LmNyZWF0ZVJhbmdlKCk7aC5zZXRTdGFydChzLm5vZGUscy5vZmZzZXQpLHIucmVtb3ZlQWxsUmFuZ2VzKCksej5UPyhyLmFkZFJhbmdlKGgpLHIuZXh0ZW5kKG8ubm9kZSxvLm9mZnNldCkpOihoLnNldEVuZChvLm5vZGUsby5vZmZzZXQpLHIuYWRkUmFuZ2UoaCkpfX19fWZvcih5PVtdLHI9YztyPXIucGFyZW50Tm9kZTspci5ub2RlVHlwZT09PTEmJnkucHVzaCh7ZWxlbWVudDpyLGxlZnQ6ci5zY3JvbGxMZWZ0LHRvcDpyLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2YgYy5mb2N1cz09ImZ1bmN0aW9uIiYmYy5mb2N1cygpLGM9MDtjPHkubGVuZ3RoO2MrKyl7dmFyIGc9eVtjXTtnLmVsZW1lbnQuc2Nyb2xsTGVmdD1nLmxlZnQsZy5lbGVtZW50LnNjcm9sbFRvcD1nLnRvcH19cW49ISFWYyxMYz1WYz1udWxsfWZpbmFsbHl7WT11LEcucD1lLE8uVD1hfX1sLmN1cnJlbnQ9dCxpbD0yfX1mdW5jdGlvbiBnbSgpe2lmKGlsPT09Mil7aWw9MDt2YXIgbD13dCx0PWllLGE9KHQuZmxhZ3MmODc3MikhPT0wO2lmKCh0LnN1YnRyZWVGbGFncyY4NzcyKSE9PTB8fGEpe2E9Ty5ULE8uVD1udWxsO3ZhciBlPUcucDtHLnA9Mjt2YXIgdT1ZO1l8PTQ7dHJ5e1cxKGwsdC5hbHRlcm5hdGUsdCl9ZmluYWxseXtZPXUsRy5wPWUsTy5UPWF9fWlsPTN9fWZ1bmN0aW9uIGJtKCl7aWYoaWw9PT00fHxpbD09PTMpe2lsPTAsR2QoKTt2YXIgbD13dCx0PWllLGE9RXQsZT1jbTsodC5zdWJ0cmVlRmxhZ3MmMTAyNTYpIT09MHx8KHQuZmxhZ3MmMTAyNTYpIT09MD9pbD01OihpbD0wLGllPXd0PW51bGwscG0obCxsLnBlbmRpbmdMYW5lcykpO3ZhciB1PWwucGVuZGluZ0xhbmVzO2lmKHU9PT0wJiYoSnQ9bnVsbCksYWYoYSksdD10LnN0YXRlTm9kZSxDbCYmdHlwZW9mIENsLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtDbC5vbkNvbW1pdEZpYmVyUm9vdChvdSx0LHZvaWQgMCwodC5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe31pZihlIT09bnVsbCl7dD1PLlQsdT1HLnAsRy5wPTIsTy5UPW51bGw7dHJ5e2Zvcih2YXIgbj1sLm9uUmVjb3ZlcmFibGVFcnJvcixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBjPWVbaV07bihjLnZhbHVlLHtjb21wb25lbnRTdGFjazpjLnN0YWNrfSl9fWZpbmFsbHl7Ty5UPXQsRy5wPXV9fShFdCYzKSE9PTAmJkluKCksY3QobCksdT1sLnBlbmRpbmdMYW5lcywoYSYyNjE5MzApIT09MCYmKHUmNDIpIT09MD9sPT09UWM/SmUrKzooSmU9MCxRYz1sKTpKZT0wLGd1KDAsITEpfX1mdW5jdGlvbiBwbShsLHQpeyhsLnBvb2xlZENhY2hlTGFuZXMmPXQpPT09MCYmKHQ9bC5wb29sZWRDYWNoZSx0IT1udWxsJiYobC5wb29sZWRDYWNoZT1udWxsLHJ1KHQpKSl9ZnVuY3Rpb24gSW4oKXtyZXR1cm4geW0oKSxnbSgpLGJtKCksU20oKX1mdW5jdGlvbiBTbSgpe2lmKGlsIT09NSlyZXR1cm4hMTt2YXIgbD13dCx0PUdjO0djPTA7dmFyIGE9YWYoRXQpLGU9Ty5ULHU9Ry5wO3RyeXtHLnA9MzI+YT8zMjphLE8uVD1udWxsLGE9WGMsWGM9bnVsbDt2YXIgbj13dCxpPUV0O2lmKGlsPTAsaWU9d3Q9bnVsbCxFdD0wLChZJjYpIT09MCl0aHJvdyBFcnJvcihwKDMzMSkpO3ZhciBjPVk7aWYoWXw9NCx1bShuLmN1cnJlbnQpLHRtKG4sbi5jdXJyZW50LGksYSksWT1jLGd1KDAsITEpLENsJiZ0eXBlb2YgQ2wub25Qb3N0Q29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtDbC5vblBvc3RDb21taXRGaWJlclJvb3Qob3Usbil9Y2F0Y2h7fXJldHVybiEwfWZpbmFsbHl7Ry5wPXUsTy5UPWUscG0obCx0KX19ZnVuY3Rpb24gVXMobCx0LGEpe3Q9TGwoYSx0KSx0PUNjKGwuc3RhdGVOb2RlLHQsMiksbD1LdChsLHQsMiksbCE9PW51bGwmJihtdShsLDIpLGN0KGwpKX1mdW5jdGlvbiBRKGwsdCxhKXtpZihsLnRhZz09PTMpVXMobCxsLGEpO2Vsc2UgZm9yKDt0IT09bnVsbDspe2lmKHQudGFnPT09Myl7VXModCxsLGEpO2JyZWFrfWVsc2UgaWYodC50YWc9PT0xKXt2YXIgZT10LnN0YXRlTm9kZTtpZih0eXBlb2YgdC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dHlwZW9mIGUuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihKdD09PW51bGx8fCFKdC5oYXMoZSkpKXtsPUxsKGEsbCksYT1CMSgyKSxlPUt0KHQsYSwyKSxlIT09bnVsbCYmKHExKGEsZSx0LGwpLG11KGUsMiksY3QoZSkpO2JyZWFrfX10PXQucmV0dXJufX1mdW5jdGlvbiBGaShsLHQsYSl7dmFyIGU9bC5waW5nQ2FjaGU7aWYoZT09PW51bGwpe2U9bC5waW5nQ2FjaGU9bmV3IHNyO3ZhciB1PW5ldyBTZXQ7ZS5zZXQodCx1KX1lbHNlIHU9ZS5nZXQodCksdT09PXZvaWQgMCYmKHU9bmV3IFNldCxlLnNldCh0LHUpKTt1LmhhcyhhKXx8KEdmPSEwLHUuYWRkKGEpLGw9dnIuYmluZChudWxsLGwsdCxhKSx0LnRoZW4obCxsKSl9ZnVuY3Rpb24gdnIobCx0LGEpe3ZhciBlPWwucGluZ0NhY2hlO2UhPT1udWxsJiZlLmRlbGV0ZSh0KSxsLnBpbmdlZExhbmVzfD1sLnN1c3BlbmRlZExhbmVzJmEsbC53YXJtTGFuZXMmPX5hLEw9PT1sJiYoUiZhKT09PWEmJihQPT09NHx8UD09PTMmJihSJjYyOTE0NTYwKT09PVImJjMwMD5ObCgpLSRuPyhZJjIpPT09MCYmY2UobCwwKTpYZnw9YSxuZT09PVImJihuZT0wKSksY3QobCl9ZnVuY3Rpb24gRW0obCx0KXt0PT09MCYmKHQ9ZDAoKSksbD16YShsLHQpLGwhPT1udWxsJiYobXUobCx0KSxjdChsKSl9ZnVuY3Rpb24geXIobCl7dmFyIHQ9bC5tZW1vaXplZFN0YXRlLGE9MDt0IT09bnVsbCYmKGE9dC5yZXRyeUxhbmUpLEVtKGwsYSl9ZnVuY3Rpb24gZ3IobCx0KXt2YXIgYT0wO3N3aXRjaChsLnRhZyl7Y2FzZSAzMTpjYXNlIDEzOnZhciBlPWwuc3RhdGVOb2RlLHU9bC5tZW1vaXplZFN0YXRlO3UhPT1udWxsJiYoYT11LnJldHJ5TGFuZSk7YnJlYWs7Y2FzZSAxOTplPWwuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMjI6ZT1sLnN0YXRlTm9kZS5fcmV0cnlDYWNoZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHAoMzE0KSl9ZSE9PW51bGwmJmUuZGVsZXRlKHQpLEVtKGwsYSl9ZnVuY3Rpb24gYnIobCx0KXtyZXR1cm4gbGYobCx0KX12YXIgRG49bnVsbCxDYT1udWxsLGpjPSExLFVuPSExLElpPSExLGp0PTA7ZnVuY3Rpb24gY3QobCl7bCE9PUNhJiZsLm5leHQ9PT1udWxsJiYoQ2E9PT1udWxsP0RuPUNhPWw6Q2E9Q2EubmV4dD1sKSxVbj0hMCxqY3x8KGpjPSEwLFNyKCkpfWZ1bmN0aW9uIGd1KGwsdCl7aWYoIUlpJiZVbil7SWk9ITA7ZG8gZm9yKHZhciBhPSExLGU9RG47ZSE9PW51bGw7KXtpZighdClpZihsIT09MCl7dmFyIHU9ZS5wZW5kaW5nTGFuZXM7aWYodT09PTApdmFyIG49MDtlbHNle3ZhciBpPWUuc3VzcGVuZGVkTGFuZXMsYz1lLnBpbmdlZExhbmVzO249KDE8PDMxLVJsKDQyfGwpKzEpLTEsbiY9dSZ+KGkmfmMpLG49biYyMDEzMjY3NDE/biYyMDEzMjY3NDF8MTpuP258MjowfW4hPT0wJiYoYT0hMCxIcyhlLG4pKX1lbHNlIG49UixuPUduKGUsZT09PUw/bjowLGUuY2FuY2VsUGVuZGluZ0NvbW1pdCE9PW51bGx8fGUudGltZW91dEhhbmRsZSE9PS0xKSwobiYzKT09PTB8fHN1KGUsbil8fChhPSEwLEhzKGUsbikpO2U9ZS5uZXh0fXdoaWxlKGEpO0lpPSExfX1mdW5jdGlvbiBwcigpe3ptKCl9ZnVuY3Rpb24gem0oKXtVbj1qYz0hMTt2YXIgbD0wO2p0IT09MCYmX3IoKSYmKGw9anQpO2Zvcih2YXIgdD1ObCgpLGE9bnVsbCxlPURuO2UhPT1udWxsOyl7dmFyIHU9ZS5uZXh0LG49QW0oZSx0KTtuPT09MD8oZS5uZXh0PW51bGwsYT09PW51bGw/RG49dTphLm5leHQ9dSx1PT09bnVsbCYmKENhPWEpKTooYT1lLChsIT09MHx8KG4mMykhPT0wKSYmKFVuPSEwKSksZT11fWlsIT09MCYmaWwhPT01fHxndShsLCExKSxqdCE9PTAmJihqdD0wKX1mdW5jdGlvbiBBbShsLHQpe2Zvcih2YXIgYT1sLnN1c3BlbmRlZExhbmVzLGU9bC5waW5nZWRMYW5lcyx1PWwuZXhwaXJhdGlvblRpbWVzLG49bC5wZW5kaW5nTGFuZXMmLTYyOTE0NTYxOzA8bjspe3ZhciBpPTMxLVJsKG4pLGM9MTw8aSxmPXVbaV07Zj09PS0xPygoYyZhKT09PTB8fChjJmUpIT09MCkmJih1W2ldPUpkKGMsdCkpOmY8PXQmJihsLmV4cGlyZWRMYW5lc3w9YyksbiY9fmN9aWYodD1MLGE9UixhPUduKGwsbD09PXQ/YTowLGwuY2FuY2VsUGVuZGluZ0NvbW1pdCE9PW51bGx8fGwudGltZW91dEhhbmRsZSE9PS0xKSxlPWwuY2FsbGJhY2tOb2RlLGE9PT0wfHxsPT09dCYmKFg9PT0yfHxYPT09OSl8fGwuY2FuY2VsUGVuZGluZ0NvbW1pdCE9PW51bGwpcmV0dXJuIGUhPT1udWxsJiZlIT09bnVsbCYmT2koZSksbC5jYWxsYmFja05vZGU9bnVsbCxsLmNhbGxiYWNrUHJpb3JpdHk9MDtpZigoYSYzKT09PTB8fHN1KGwsYSkpe2lmKHQ9YSYtYSx0PT09bC5jYWxsYmFja1ByaW9yaXR5KXJldHVybiB0O3N3aXRjaChlIT09bnVsbCYmT2koZSksYWYoYSkpe2Nhc2UgMjpjYXNlIDg6YT1zMDticmVhaztjYXNlIDMyOmE9ZG47YnJlYWs7Y2FzZSAyNjg0MzU0NTY6YT1tMDticmVhaztkZWZhdWx0OmE9ZG59cmV0dXJuIGU9TW0uYmluZChudWxsLGwpLGE9bGYoYSxlKSxsLmNhbGxiYWNrUHJpb3JpdHk9dCxsLmNhbGxiYWNrTm9kZT1hLHR9cmV0dXJuIGUhPT1udWxsJiZlIT09bnVsbCYmT2koZSksbC5jYWxsYmFja1ByaW9yaXR5PTIsbC5jYWxsYmFja05vZGU9bnVsbCwyfWZ1bmN0aW9uIE1tKGwsdCl7aWYoaWwhPT0wJiZpbCE9PTUpcmV0dXJuIGwuY2FsbGJhY2tOb2RlPW51bGwsbC5jYWxsYmFja1ByaW9yaXR5PTAsbnVsbDt2YXIgYT1sLmNhbGxiYWNrTm9kZTtpZihJbigpJiZsLmNhbGxiYWNrTm9kZSE9PWEpcmV0dXJuIG51bGw7dmFyIGU9UjtyZXR1cm4gZT1HbihsLGw9PT1MP2U6MCxsLmNhbmNlbFBlbmRpbmdDb21taXQhPT1udWxsfHxsLnRpbWVvdXRIYW5kbGUhPT0tMSksZT09PTA/bnVsbDoob20obCxlLHQpLEFtKGwsTmwoKSksbC5jYWxsYmFja05vZGUhPW51bGwmJmwuY2FsbGJhY2tOb2RlPT09YT9NbS5iaW5kKG51bGwsbCk6bnVsbCl9ZnVuY3Rpb24gSHMobCx0KXtpZihJbigpKXJldHVybiBudWxsO29tKGwsdCwhMCl9ZnVuY3Rpb24gU3IoKXtVcihmdW5jdGlvbigpeyhZJjYpIT09MD9sZihvMCxwcik6em0oKX0pfWZ1bmN0aW9uIGpmKCl7aWYoanQ9PT0wKXt2YXIgbD1hZTtsPT09MCYmKGw9VXUsVXU8PD0xLChVdSYyNjE4ODgpPT09MCYmKFV1PTI1NikpLGp0PWx9cmV0dXJuIGp0fWZ1bmN0aW9uIE5zKGwpe3JldHVybiBsPT1udWxsfHx0eXBlb2YgbD09InN5bWJvbCJ8fHR5cGVvZiBsPT0iYm9vbGVhbiI/bnVsbDp0eXBlb2YgbD09ImZ1bmN0aW9uIj9sOld1KCIiK2wpfWZ1bmN0aW9uIENzKGwsdCl7dmFyIGE9dC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGEubmFtZT10Lm5hbWUsYS52YWx1ZT10LnZhbHVlLGwuaWQmJmEuc2V0QXR0cmlidXRlKCJmb3JtIixsLmlkKSx0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdCksbD1uZXcgRm9ybURhdGEobCksYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLGx9ZnVuY3Rpb24gRXIobCx0LGEsZSx1KXtpZih0PT09InN1Ym1pdCImJmEmJmEuc3RhdGVOb2RlPT09dSl7dmFyIG49TnMoKHVbVGxdfHxudWxsKS5hY3Rpb24pLGk9ZS5zdWJtaXR0ZXI7aSYmKHQ9KHQ9aVtUbF18fG51bGwpP05zKHQuZm9ybUFjdGlvbik6aS5nZXRBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSx0IT09bnVsbCYmKG49dCxpPW51bGwpKTt2YXIgYz1uZXcgWG4oImFjdGlvbiIsImFjdGlvbiIsbnVsbCxlLHUpO2wucHVzaCh7ZXZlbnQ6YyxsaXN0ZW5lcnM6W3tpbnN0YW5jZTpudWxsLGxpc3RlbmVyOmZ1bmN0aW9uKCl7aWYoZS5kZWZhdWx0UHJldmVudGVkKXtpZihqdCE9PTApe3ZhciBmPWk/Q3ModSxpKTpuZXcgRm9ybURhdGEodSk7SGMoYSx7cGVuZGluZzohMCxkYXRhOmYsbWV0aG9kOnUubWV0aG9kLGFjdGlvbjpufSxudWxsLGYpfX1lbHNlIHR5cGVvZiBuPT0iZnVuY3Rpb24iJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGY9aT9Dcyh1LGkpOm5ldyBGb3JtRGF0YSh1KSxIYyhhLHtwZW5kaW5nOiEwLGRhdGE6ZixtZXRob2Q6dS5tZXRob2QsYWN0aW9uOm59LG4sZikpfSxjdXJyZW50VGFyZ2V0OnV9XX0pfX1mb3IoWnU9MDtadTxwYy5sZW5ndGg7WnUrKylWdT1wY1tadV0sUnM9VnUudG9Mb3dlckNhc2UoKSxCcz1WdVswXS50b1VwcGVyQ2FzZSgpK1Z1LnNsaWNlKDEpLElsKFJzLCJvbiIrQnMpO3ZhciBWdSxScyxCcyxadTtJbChxMCwib25BbmltYXRpb25FbmQiKTtJbChZMCwib25BbmltYXRpb25JdGVyYXRpb24iKTtJbChHMCwib25BbmltYXRpb25TdGFydCIpO0lsKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTtJbCgiZm9jdXNpbiIsIm9uRm9jdXMiKTtJbCgiZm9jdXNvdXQiLCJvbkJsdXIiKTtJbChYaCwib25UcmFuc2l0aW9uUnVuIik7SWwoUWgsIm9uVHJhbnNpdGlvblN0YXJ0Iik7SWwoamgsIm9uVHJhbnNpdGlvbkNhbmNlbCIpO0lsKFgwLCJvblRyYW5zaXRpb25FbmQiKTtsZSgib25Nb3VzZUVudGVyIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO2xlKCJvbk1vdXNlTGVhdmUiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSk7bGUoIm9uUG9pbnRlckVudGVyIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtsZSgib25Qb2ludGVyTGVhdmUiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pO3BhKCJvbkNoYW5nZSIsImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtwYSgib25TZWxlY3QiLCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpO3BhKCJvbkJlZm9yZUlucHV0IixbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdKTtwYSgib25Db21wb3NpdGlvbkVuZCIsImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTtwYSgib25Db21wb3NpdGlvblN0YXJ0IiwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7cGEoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7dmFyIGV1PSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZyIuc3BsaXQoIiAiKSx6cj1uZXcgU2V0KCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQoZXUpKTtmdW5jdGlvbiBUbShsLHQpe3Q9KHQmNCkhPT0wO2Zvcih2YXIgYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgZT1sW2FdLHU9ZS5ldmVudDtlPWUubGlzdGVuZXJzO2w6e3ZhciBuPXZvaWQgMDtpZih0KWZvcih2YXIgaT1lLmxlbmd0aC0xOzA8PWk7aS0tKXt2YXIgYz1lW2ldLGY9Yy5pbnN0YW5jZSxkPWMuY3VycmVudFRhcmdldDtpZihjPWMubGlzdGVuZXIsZiE9PW4mJnUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBsO249Yyx1LmN1cnJlbnRUYXJnZXQ9ZDt0cnl7bih1KX1jYXRjaCh2KXtybih2KX11LmN1cnJlbnRUYXJnZXQ9bnVsbCxuPWZ9ZWxzZSBmb3IoaT0wO2k8ZS5sZW5ndGg7aSsrKXtpZihjPWVbaV0sZj1jLmluc3RhbmNlLGQ9Yy5jdXJyZW50VGFyZ2V0LGM9Yy5saXN0ZW5lcixmIT09biYmdS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGw7bj1jLHUuY3VycmVudFRhcmdldD1kO3RyeXtuKHUpfWNhdGNoKHYpe3JuKHYpfXUuY3VycmVudFRhcmdldD1udWxsLG49Zn19fX1mdW5jdGlvbiBOKGwsdCl7dmFyIGE9dFttY107YT09PXZvaWQgMCYmKGE9dFttY109bmV3IFNldCk7dmFyIGU9bCsiX19idWJibGUiO2EuaGFzKGUpfHwoeG0odCxsLDIsITEpLGEuYWRkKGUpKX1mdW5jdGlvbiBQaShsLHQsYSl7dmFyIGU9MDt0JiYoZXw9NCkseG0oYSxsLGUsdCl9dmFyIEx1PSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIFpmKGwpe2lmKCFsW0x1XSl7bFtMdV09ITAsZzAuZm9yRWFjaChmdW5jdGlvbihhKXthIT09InNlbGVjdGlvbmNoYW5nZSImJih6ci5oYXMoYSl8fFBpKGEsITEsbCksUGkoYSwhMCxsKSl9KTt2YXIgdD1sLm5vZGVUeXBlPT09OT9sOmwub3duZXJEb2N1bWVudDt0PT09bnVsbHx8dFtMdV18fCh0W0x1XT0hMCxQaSgic2VsZWN0aW9uY2hhbmdlIiwhMSx0KSl9fWZ1bmN0aW9uIHhtKGwsdCxhLGUpe3N3aXRjaChYbSh0KSl7Y2FzZSAyOnZhciB1PWtyO2JyZWFrO2Nhc2UgODp1PUZyO2JyZWFrO2RlZmF1bHQ6dT1KZn1hPXUuYmluZChudWxsLHQsYSxsKSx1PXZvaWQgMCwheWN8fHQhPT0idG91Y2hzdGFydCImJnQhPT0idG91Y2htb3ZlIiYmdCE9PSJ3aGVlbCJ8fCh1PSEwKSxlP3UhPT12b2lkIDA/bC5hZGRFdmVudExpc3RlbmVyKHQsYSx7Y2FwdHVyZTohMCxwYXNzaXZlOnV9KTpsLmFkZEV2ZW50TGlzdGVuZXIodCxhLCEwKTp1IT09dm9pZCAwP2wuYWRkRXZlbnRMaXN0ZW5lcih0LGEse3Bhc3NpdmU6dX0pOmwuYWRkRXZlbnRMaXN0ZW5lcih0LGEsITEpfWZ1bmN0aW9uIGxjKGwsdCxhLGUsdSl7dmFyIG49ZTtpZigodCYxKT09PTAmJih0JjIpPT09MCYmZSE9PW51bGwpbDpmb3IoOzspe2lmKGU9PT1udWxsKXJldHVybjt2YXIgaT1lLnRhZztpZihpPT09M3x8aT09PTQpe3ZhciBjPWUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYoYz09PXUpYnJlYWs7aWYoaT09PTQpZm9yKGk9ZS5yZXR1cm47aSE9PW51bGw7KXt2YXIgZj1pLnRhZztpZigoZj09PTN8fGY9PT00KSYmaS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PXUpcmV0dXJuO2k9aS5yZXR1cm59Zm9yKDtjIT09bnVsbDspe2lmKGk9cWEoYyksaT09PW51bGwpcmV0dXJuO2lmKGY9aS50YWcsZj09PTV8fGY9PT02fHxmPT09MjZ8fGY9PT0yNyl7ZT1uPWk7Y29udGludWUgbH1jPWMucGFyZW50Tm9kZX19ZT1lLnJldHVybn1UMChmdW5jdGlvbigpe3ZhciBkPW4sdj1uZihhKSx5PVtdO2w6e3ZhciBtPVEwLmdldChsKTtpZihtIT09dm9pZCAwKXt2YXIgcj1YbixFPWw7c3dpdGNoKGwpe2Nhc2Uia2V5cHJlc3MiOmlmKGt1KGEpPT09MClicmVhayBsO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6cj1naDticmVhaztjYXNlImZvY3VzaW4iOkU9ImZvY3VzIixyPU5pO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOkU9ImJsdXIiLHI9Tmk7YnJlYWs7Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6cj1OaTticmVhaztjYXNlImNsaWNrIjppZihhLmJ1dHRvbj09PTIpYnJlYWsgbDtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOnI9Wm87YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6cj1uaDticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjpyPVNoO2JyZWFrO2Nhc2UgcTA6Y2FzZSBZMDpjYXNlIEcwOnI9Zmg7YnJlYWs7Y2FzZSBYMDpyPXpoO2JyZWFrO2Nhc2Uic2Nyb2xsIjpjYXNlInNjcm9sbGVuZCI6cj1laDticmVhaztjYXNlIndoZWVsIjpyPU1oO2JyZWFrO2Nhc2UiY29weSI6Y2FzZSJjdXQiOmNhc2UicGFzdGUiOnI9c2g7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJ1cCI6cj1MbzticmVhaztjYXNlInRvZ2dsZSI6Y2FzZSJiZWZvcmV0b2dnbGUiOnI9eGh9dmFyIHo9KHQmNCkhPT0wLFQ9IXomJihsPT09InNjcm9sbCJ8fGw9PT0ic2Nyb2xsZW5kIikscz16P20hPT1udWxsP20rIkNhcHR1cmUiOm51bGw6bTt6PVtdO2Zvcih2YXIgbz1kLGg7byE9PW51bGw7KXt2YXIgZz1vO2lmKGg9Zy5zdGF0ZU5vZGUsZz1nLnRhZyxnIT09NSYmZyE9PTI2JiZnIT09Mjd8fGg9PT1udWxsfHxzPT09bnVsbHx8KGc9JGUobyxzKSxnIT1udWxsJiZ6LnB1c2godXUobyxnLGgpKSksVClicmVhaztvPW8ucmV0dXJufTA8ei5sZW5ndGgmJihtPW5ldyByKG0sRSxudWxsLGEsdikseS5wdXNoKHtldmVudDptLGxpc3RlbmVyczp6fSkpfX1pZigodCY3KT09PTApe2w6e2lmKG09bD09PSJtb3VzZW92ZXIifHxsPT09InBvaW50ZXJvdmVyIixyPWw9PT0ibW91c2VvdXQifHxsPT09InBvaW50ZXJvdXQiLG0mJmEhPT12YyYmKEU9YS5yZWxhdGVkVGFyZ2V0fHxhLmZyb21FbGVtZW50KSYmKHFhKEUpfHxFW3NlXSkpYnJlYWsgbDtpZigocnx8bSkmJihtPXYud2luZG93PT09dj92OihtPXYub3duZXJEb2N1bWVudCk/bS5kZWZhdWx0Vmlld3x8bS5wYXJlbnRXaW5kb3c6d2luZG93LHI/KEU9YS5yZWxhdGVkVGFyZ2V0fHxhLnRvRWxlbWVudCxyPWQsRT1FP3FhKEUpOm51bGwsRSE9PW51bGwmJihUPWZ1KEUpLHo9RS50YWcsRSE9PVR8fHohPT01JiZ6IT09MjcmJnohPT02KSYmKEU9bnVsbCkpOihyPW51bGwsRT1kKSxyIT09RSkpe2lmKHo9Wm8sZz0ib25Nb3VzZUxlYXZlIixzPSJvbk1vdXNlRW50ZXIiLG89Im1vdXNlIiwobD09PSJwb2ludGVyb3V0Inx8bD09PSJwb2ludGVyb3ZlciIpJiYoej1MbyxnPSJvblBvaW50ZXJMZWF2ZSIscz0ib25Qb2ludGVyRW50ZXIiLG89InBvaW50ZXIiKSxUPXI9PW51bGw/bTpOZShyKSxoPUU9PW51bGw/bTpOZShFKSxtPW5ldyB6KGcsbysibGVhdmUiLHIsYSx2KSxtLnRhcmdldD1ULG0ucmVsYXRlZFRhcmdldD1oLGc9bnVsbCxxYSh2KT09PWQmJih6PW5ldyB6KHMsbysiZW50ZXIiLEUsYSx2KSx6LnRhcmdldD1oLHoucmVsYXRlZFRhcmdldD1ULGc9eiksVD1nLHImJkUpdDp7Zm9yKHo9QXIscz1yLG89RSxoPTAsZz1zO2c7Zz16KGcpKWgrKztnPTA7Zm9yKHZhciBNPW87TTtNPXooTSkpZysrO2Zvcig7MDxoLWc7KXM9eihzKSxoLS07Zm9yKDswPGctaDspbz16KG8pLGctLTtmb3IoO2gtLTspe2lmKHM9PT1vfHxvIT09bnVsbCYmcz09PW8uYWx0ZXJuYXRlKXt6PXM7YnJlYWsgdH1zPXoocyksbz16KG8pfXo9bnVsbH1lbHNlIHo9bnVsbDtyIT09bnVsbCYmcXMoeSxtLHIseiwhMSksRSE9PW51bGwmJlQhPT1udWxsJiZxcyh5LFQsRSx6LCEwKX19bDp7aWYobT1kP05lKGQpOndpbmRvdyxyPW0ubm9kZU5hbWUmJm0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxyPT09InNlbGVjdCJ8fHI9PT0iaW5wdXQiJiZtLnR5cGU9PT0iZmlsZSIpdmFyIF89V287ZWxzZSBpZih3byhtKSlpZihIMClfPXFoO2Vsc2V7Xz1SaDt2YXIgQT1DaH1lbHNlIHI9bS5ub2RlTmFtZSwhcnx8ci50b0xvd2VyQ2FzZSgpIT09ImlucHV0Inx8bS50eXBlIT09ImNoZWNrYm94IiYmbS50eXBlIT09InJhZGlvIj9kJiZ1ZihkLmVsZW1lbnRUeXBlKSYmKF89V28pOl89Qmg7aWYoXyYmKF89XyhsLGQpKSl7VTAoeSxfLGEsdik7YnJlYWsgbH1BJiZBKGwsbSxkKSxsPT09ImZvY3Vzb3V0IiYmZCYmbS50eXBlPT09Im51bWJlciImJmQubWVtb2l6ZWRQcm9wcy52YWx1ZSE9bnVsbCYmcmMobSwibnVtYmVyIixtLnZhbHVlKX1zd2l0Y2goQT1kP05lKGQpOndpbmRvdyxsKXtjYXNlImZvY3VzaW4iOih3byhBKXx8QS5jb250ZW50RWRpdGFibGU9PT0idHJ1ZSIpJiYoWGE9QSxnYz1kLFllPW51bGwpO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOlllPWdjPVhhPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmJjPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpiYz0hMSxJbyh5LGEsdik7YnJlYWs7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKEdoKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6SW8oeSxhLHYpfXZhciB4O2lmKG9mKWw6e3N3aXRjaChsKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOnZhciBVPSJvbkNvbXBvc2l0aW9uU3RhcnQiO2JyZWFrIGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6VT0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgbDtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpVPSJvbkNvbXBvc2l0aW9uVXBkYXRlIjticmVhayBsfVU9dm9pZCAwfWVsc2UgR2E/XzAobCxhKSYmKFU9Im9uQ29tcG9zaXRpb25FbmQiKTpsPT09ImtleWRvd24iJiZhLmtleUNvZGU9PT0yMjkmJihVPSJvbkNvbXBvc2l0aW9uU3RhcnQiKTtVJiYoTzAmJmEubG9jYWxlIT09ImtvIiYmKEdhfHxVIT09Im9uQ29tcG9zaXRpb25TdGFydCI/VT09PSJvbkNvbXBvc2l0aW9uRW5kIiYmR2EmJih4PXgwKCkpOihHdD12LGNmPSJ2YWx1ZSJpbiBHdD9HdC52YWx1ZTpHdC50ZXh0Q29udGVudCxHYT0hMCkpLEE9SG4oZCxVKSwwPEEubGVuZ3RoJiYoVT1uZXcgVm8oVSxsLG51bGwsYSx2KSx5LnB1c2goe2V2ZW50OlUsbGlzdGVuZXJzOkF9KSx4P1UuZGF0YT14Oih4PUQwKGEpLHghPT1udWxsJiYoVS5kYXRhPXgpKSkpLCh4PV9oP0RoKGwsYSk6VWgobCxhKSkmJihVPUhuKGQsIm9uQmVmb3JlSW5wdXQiKSwwPFUubGVuZ3RoJiYoQT1uZXcgVm8oIm9uQmVmb3JlSW5wdXQiLCJiZWZvcmVpbnB1dCIsbnVsbCxhLHYpLHkucHVzaCh7ZXZlbnQ6QSxsaXN0ZW5lcnM6VX0pLEEuZGF0YT14KSksRXIoeSxsLGQsYSx2KX1UbSh5LHQpfSl9ZnVuY3Rpb24gdXUobCx0LGEpe3JldHVybntpbnN0YW5jZTpsLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDphfX1mdW5jdGlvbiBIbihsLHQpe2Zvcih2YXIgYT10KyJDYXB0dXJlIixlPVtdO2whPT1udWxsOyl7dmFyIHU9bCxuPXUuc3RhdGVOb2RlO2lmKHU9dS50YWcsdSE9PTUmJnUhPT0yNiYmdSE9PTI3fHxuPT09bnVsbHx8KHU9JGUobCxhKSx1IT1udWxsJiZlLnVuc2hpZnQodXUobCx1LG4pKSx1PSRlKGwsdCksdSE9bnVsbCYmZS5wdXNoKHV1KGwsdSxuKSkpLGwudGFnPT09MylyZXR1cm4gZTtsPWwucmV0dXJufXJldHVybltdfWZ1bmN0aW9uIEFyKGwpe2lmKGw9PT1udWxsKXJldHVybiBudWxsO2RvIGw9bC5yZXR1cm47d2hpbGUobCYmbC50YWchPT01JiZsLnRhZyE9PTI3KTtyZXR1cm4gbHx8bnVsbH1mdW5jdGlvbiBxcyhsLHQsYSxlLHUpe2Zvcih2YXIgbj10Ll9yZWFjdE5hbWUsaT1bXTthIT09bnVsbCYmYSE9PWU7KXt2YXIgYz1hLGY9Yy5hbHRlcm5hdGUsZD1jLnN0YXRlTm9kZTtpZihjPWMudGFnLGYhPT1udWxsJiZmPT09ZSlicmVhaztjIT09NSYmYyE9PTI2JiZjIT09Mjd8fGQ9PT1udWxsfHwoZj1kLHU/KGQ9JGUoYSxuKSxkIT1udWxsJiZpLnVuc2hpZnQodXUoYSxkLGYpKSk6dXx8KGQ9JGUoYSxuKSxkIT1udWxsJiZpLnB1c2godXUoYSxkLGYpKSkpLGE9YS5yZXR1cm59aS5sZW5ndGghPT0wJiZsLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOml9KX12YXIgTXI9L1xyXG4/L2csVHI9L1x1MDAwMHxcdUZGRkQvZztmdW5jdGlvbiBZcyhsKXtyZXR1cm4odHlwZW9mIGw9PSJzdHJpbmciP2w6IiIrbCkucmVwbGFjZShNcixgCmApLnJlcGxhY2UoVHIsIiIpfWZ1bmN0aW9uIE9tKGwsdCl7cmV0dXJuIHQ9WXModCksWXMobCk9PT10fWZ1bmN0aW9uIFoobCx0LGEsZSx1LG4pe3N3aXRjaChhKXtjYXNlImNoaWxkcmVuIjp0eXBlb2YgZT09InN0cmluZyI/dD09PSJib2R5Inx8dD09PSJ0ZXh0YXJlYSImJmU9PT0iInx8dGUobCxlKToodHlwZW9mIGU9PSJudW1iZXIifHx0eXBlb2YgZT09ImJpZ2ludCIpJiZ0IT09ImJvZHkiJiZ0ZShsLCIiK2UpO2JyZWFrO2Nhc2UiY2xhc3NOYW1lIjpDdShsLCJjbGFzcyIsZSk7YnJlYWs7Y2FzZSJ0YWJJbmRleCI6Q3UobCwidGFiaW5kZXgiLGUpO2JyZWFrO2Nhc2UiZGlyIjpjYXNlInJvbGUiOmNhc2Uidmlld0JveCI6Y2FzZSJ3aWR0aCI6Y2FzZSJoZWlnaHQiOkN1KGwsYSxlKTticmVhaztjYXNlInN0eWxlIjpNMChsLGUsbik7YnJlYWs7Y2FzZSJkYXRhIjppZih0IT09Im9iamVjdCIpe0N1KGwsImRhdGEiLGUpO2JyZWFrfWNhc2Uic3JjIjpjYXNlImhyZWYiOmlmKGU9PT0iIiYmKHQhPT0iYSJ8fGEhPT0iaHJlZiIpKXtsLnJlbW92ZUF0dHJpYnV0ZShhKTticmVha31pZihlPT1udWxsfHx0eXBlb2YgZT09ImZ1bmN0aW9uInx8dHlwZW9mIGU9PSJzeW1ib2wifHx0eXBlb2YgZT09ImJvb2xlYW4iKXtsLnJlbW92ZUF0dHJpYnV0ZShhKTticmVha31lPVd1KCIiK2UpLGwuc2V0QXR0cmlidXRlKGEsZSk7YnJlYWs7Y2FzZSJhY3Rpb24iOmNhc2UiZm9ybUFjdGlvbiI6aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpe2wuc2V0QXR0cmlidXRlKGEsImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdBIFJlYWN0IGZvcm0gd2FzIHVuZXhwZWN0ZWRseSBzdWJtaXR0ZWQuIElmIHlvdSBjYWxsZWQgZm9ybS5zdWJtaXQoKSBtYW51YWxseSwgY29uc2lkZXIgdXNpbmcgZm9ybS5yZXF1ZXN0U3VibWl0KCkgaW5zdGVhZC4gSWYgeW91XFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKSIpO2JyZWFrfWVsc2UgdHlwZW9mIG49PSJmdW5jdGlvbiImJihhPT09ImZvcm1BY3Rpb24iPyh0IT09ImlucHV0IiYmWihsLHQsIm5hbWUiLHUubmFtZSx1LG51bGwpLFoobCx0LCJmb3JtRW5jVHlwZSIsdS5mb3JtRW5jVHlwZSx1LG51bGwpLFoobCx0LCJmb3JtTWV0aG9kIix1LmZvcm1NZXRob2QsdSxudWxsKSxaKGwsdCwiZm9ybVRhcmdldCIsdS5mb3JtVGFyZ2V0LHUsbnVsbCkpOihaKGwsdCwiZW5jVHlwZSIsdS5lbmNUeXBlLHUsbnVsbCksWihsLHQsIm1ldGhvZCIsdS5tZXRob2QsdSxudWxsKSxaKGwsdCwidGFyZ2V0Iix1LnRhcmdldCx1LG51bGwpKSk7aWYoZT09bnVsbHx8dHlwZW9mIGU9PSJzeW1ib2wifHx0eXBlb2YgZT09ImJvb2xlYW4iKXtsLnJlbW92ZUF0dHJpYnV0ZShhKTticmVha31lPVd1KCIiK2UpLGwuc2V0QXR0cmlidXRlKGEsZSk7YnJlYWs7Y2FzZSJvbkNsaWNrIjplIT1udWxsJiYobC5vbmNsaWNrPWd0KTticmVhaztjYXNlIm9uU2Nyb2xsIjplIT1udWxsJiZOKCJzY3JvbGwiLGwpO2JyZWFrO2Nhc2Uib25TY3JvbGxFbmQiOmUhPW51bGwmJk4oInNjcm9sbGVuZCIsbCk7YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYoZSE9bnVsbCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHwhKCJfX2h0bWwiaW4gZSkpdGhyb3cgRXJyb3IocCg2MSkpO2lmKGE9ZS5fX2h0bWwsYSE9bnVsbCl7aWYodS5jaGlsZHJlbiE9bnVsbCl0aHJvdyBFcnJvcihwKDYwKSk7bC5pbm5lckhUTUw9YX19YnJlYWs7Y2FzZSJtdWx0aXBsZSI6bC5tdWx0aXBsZT1lJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJzeW1ib2wiO2JyZWFrO2Nhc2UibXV0ZWQiOmwubXV0ZWQ9ZSYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJnR5cGVvZiBlIT0ic3ltYm9sIjticmVhaztjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiZGVmYXVsdFZhbHVlIjpjYXNlImRlZmF1bHRDaGVja2VkIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmJyZWFrO2Nhc2UiYXV0b0ZvY3VzIjpicmVhaztjYXNlInhsaW5rSHJlZiI6aWYoZT09bnVsbHx8dHlwZW9mIGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBlPT0iYm9vbGVhbiJ8fHR5cGVvZiBlPT0ic3ltYm9sIil7bC5yZW1vdmVBdHRyaWJ1dGUoInhsaW5rOmhyZWYiKTticmVha31hPVd1KCIiK2UpLGwuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazpocmVmIixhKTticmVhaztjYXNlImNvbnRlbnRFZGl0YWJsZSI6Y2FzZSJzcGVsbENoZWNrIjpjYXNlImRyYWdnYWJsZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJhdXRvUmV2ZXJzZSI6Y2FzZSJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIjpjYXNlImZvY3VzYWJsZSI6Y2FzZSJwcmVzZXJ2ZUFscGhhIjplIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJzeW1ib2wiP2wuc2V0QXR0cmlidXRlKGEsIiIrZSk6bC5yZW1vdmVBdHRyaWJ1dGUoYSk7YnJlYWs7Y2FzZSJpbmVydCI6Y2FzZSJhbGxvd0Z1bGxTY3JlZW4iOmNhc2UiYXN5bmMiOmNhc2UiYXV0b1BsYXkiOmNhc2UiY29udHJvbHMiOmNhc2UiZGVmYXVsdCI6Y2FzZSJkZWZlciI6Y2FzZSJkaXNhYmxlZCI6Y2FzZSJkaXNhYmxlUGljdHVyZUluUGljdHVyZSI6Y2FzZSJkaXNhYmxlUmVtb3RlUGxheWJhY2siOmNhc2UiZm9ybU5vVmFsaWRhdGUiOmNhc2UiaGlkZGVuIjpjYXNlImxvb3AiOmNhc2Uibm9Nb2R1bGUiOmNhc2Uibm9WYWxpZGF0ZSI6Y2FzZSJvcGVuIjpjYXNlInBsYXlzSW5saW5lIjpjYXNlInJlYWRPbmx5IjpjYXNlInJlcXVpcmVkIjpjYXNlInJldmVyc2VkIjpjYXNlInNjb3BlZCI6Y2FzZSJzZWFtbGVzcyI6Y2FzZSJpdGVtU2NvcGUiOmUmJnR5cGVvZiBlIT0iZnVuY3Rpb24iJiZ0eXBlb2YgZSE9InN5bWJvbCI/bC5zZXRBdHRyaWJ1dGUoYSwiIik6bC5yZW1vdmVBdHRyaWJ1dGUoYSk7YnJlYWs7Y2FzZSJjYXB0dXJlIjpjYXNlImRvd25sb2FkIjplPT09ITA/bC5zZXRBdHRyaWJ1dGUoYSwiIik6ZSE9PSExJiZlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJzeW1ib2wiP2wuc2V0QXR0cmlidXRlKGEsZSk6bC5yZW1vdmVBdHRyaWJ1dGUoYSk7YnJlYWs7Y2FzZSJjb2xzIjpjYXNlInJvd3MiOmNhc2Uic2l6ZSI6Y2FzZSJzcGFuIjplIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJzeW1ib2wiJiYhaXNOYU4oZSkmJjE8PWU/bC5zZXRBdHRyaWJ1dGUoYSxlKTpsLnJlbW92ZUF0dHJpYnV0ZShhKTticmVhaztjYXNlInJvd1NwYW4iOmNhc2Uic3RhcnQiOmU9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24ifHx0eXBlb2YgZT09InN5bWJvbCJ8fGlzTmFOKGUpP2wucmVtb3ZlQXR0cmlidXRlKGEpOmwuc2V0QXR0cmlidXRlKGEsZSk7YnJlYWs7Y2FzZSJwb3BvdmVyIjpOKCJiZWZvcmV0b2dnbGUiLGwpLE4oInRvZ2dsZSIsbCksd3UobCwicG9wb3ZlciIsZSk7YnJlYWs7Y2FzZSJ4bGlua0FjdHVhdGUiOm90KGwsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazphY3R1YXRlIixlKTticmVhaztjYXNlInhsaW5rQXJjcm9sZSI6b3QobCwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmFyY3JvbGUiLGUpO2JyZWFrO2Nhc2UieGxpbmtSb2xlIjpvdChsLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6cm9sZSIsZSk7YnJlYWs7Y2FzZSJ4bGlua1Nob3ciOm90KGwsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazpzaG93IixlKTticmVhaztjYXNlInhsaW5rVGl0bGUiOm90KGwsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazp0aXRsZSIsZSk7YnJlYWs7Y2FzZSJ4bGlua1R5cGUiOm90KGwsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazp0eXBlIixlKTticmVhaztjYXNlInhtbEJhc2UiOm90KGwsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpiYXNlIixlKTticmVhaztjYXNlInhtbExhbmciOm90KGwsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpsYW5nIixlKTticmVhaztjYXNlInhtbFNwYWNlIjpvdChsLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLGUpO2JyZWFrO2Nhc2UiaXMiOnd1KGwsImlzIixlKTticmVhaztjYXNlImlubmVyVGV4dCI6Y2FzZSJ0ZXh0Q29udGVudCI6YnJlYWs7ZGVmYXVsdDooISgyPGEubGVuZ3RoKXx8YVswXSE9PSJvIiYmYVswXSE9PSJPInx8YVsxXSE9PSJuIiYmYVsxXSE9PSJOIikmJihhPXRoLmdldChhKXx8YSx3dShsLGEsZSkpfX1mdW5jdGlvbiBaYyhsLHQsYSxlLHUsbil7c3dpdGNoKGEpe2Nhc2Uic3R5bGUiOk0wKGwsZSxuKTticmVhaztjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihlIT1udWxsKXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fCEoIl9faHRtbCJpbiBlKSl0aHJvdyBFcnJvcihwKDYxKSk7aWYoYT1lLl9faHRtbCxhIT1udWxsKXtpZih1LmNoaWxkcmVuIT1udWxsKXRocm93IEVycm9yKHAoNjApKTtsLmlubmVySFRNTD1hfX1icmVhaztjYXNlImNoaWxkcmVuIjp0eXBlb2YgZT09InN0cmluZyI/dGUobCxlKToodHlwZW9mIGU9PSJudW1iZXIifHx0eXBlb2YgZT09ImJpZ2ludCIpJiZ0ZShsLCIiK2UpO2JyZWFrO2Nhc2Uib25TY3JvbGwiOmUhPW51bGwmJk4oInNjcm9sbCIsbCk7YnJlYWs7Y2FzZSJvblNjcm9sbEVuZCI6ZSE9bnVsbCYmTigic2Nyb2xsZW5kIixsKTticmVhaztjYXNlIm9uQ2xpY2siOmUhPW51bGwmJihsLm9uY2xpY2s9Z3QpO2JyZWFrO2Nhc2Uic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIjpjYXNlInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyI6Y2FzZSJpbm5lckhUTUwiOmNhc2UicmVmIjpicmVhaztjYXNlImlubmVyVGV4dCI6Y2FzZSJ0ZXh0Q29udGVudCI6YnJlYWs7ZGVmYXVsdDppZighYjAuaGFzT3duUHJvcGVydHkoYSkpbDp7aWYoYVswXT09PSJvIiYmYVsxXT09PSJuIiYmKHU9YS5lbmRzV2l0aCgiQ2FwdHVyZSIpLHQ9YS5zbGljZSgyLHU/YS5sZW5ndGgtNzp2b2lkIDApLG49bFtUbF18fG51bGwsbj1uIT1udWxsP25bYV06bnVsbCx0eXBlb2Ygbj09ImZ1bmN0aW9uIiYmbC5yZW1vdmVFdmVudExpc3RlbmVyKHQsbix1KSx0eXBlb2YgZT09ImZ1bmN0aW9uIikpe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiZuIT09bnVsbCYmKGEgaW4gbD9sW2FdPW51bGw6bC5oYXNBdHRyaWJ1dGUoYSkmJmwucmVtb3ZlQXR0cmlidXRlKGEpKSxsLmFkZEV2ZW50TGlzdGVuZXIodCxlLHUpO2JyZWFrIGx9YSBpbiBsP2xbYV09ZTplPT09ITA/bC5zZXRBdHRyaWJ1dGUoYSwiIik6d3UobCxhLGUpfX19ZnVuY3Rpb24gdmwobCx0LGEpe3N3aXRjaCh0KXtjYXNlImRpdiI6Y2FzZSJzcGFuIjpjYXNlInN2ZyI6Y2FzZSJwYXRoIjpjYXNlImEiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlImxpIjpicmVhaztjYXNlImltZyI6TigiZXJyb3IiLGwpLE4oImxvYWQiLGwpO3ZhciBlPSExLHU9ITEsbjtmb3IobiBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkobikpe3ZhciBpPWFbbl07aWYoaSE9bnVsbClzd2l0Y2gobil7Y2FzZSJzcmMiOmU9ITA7YnJlYWs7Y2FzZSJzcmNTZXQiOnU9ITA7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6dGhyb3cgRXJyb3IocCgxMzcsdCkpO2RlZmF1bHQ6WihsLHQsbixpLGEsbnVsbCl9fXUmJloobCx0LCJzcmNTZXQiLGEuc3JjU2V0LGEsbnVsbCksZSYmWihsLHQsInNyYyIsYS5zcmMsYSxudWxsKTtyZXR1cm47Y2FzZSJpbnB1dCI6TigiaW52YWxpZCIsbCk7dmFyIGM9bj1pPXU9bnVsbCxmPW51bGwsZD1udWxsO2ZvcihlIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHY9YVtlXTtpZih2IT1udWxsKXN3aXRjaChlKXtjYXNlIm5hbWUiOnU9djticmVhaztjYXNlInR5cGUiOmk9djticmVhaztjYXNlImNoZWNrZWQiOmY9djticmVhaztjYXNlImRlZmF1bHRDaGVja2VkIjpkPXY7YnJlYWs7Y2FzZSJ2YWx1ZSI6bj12O2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpjPXY7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYodiE9bnVsbCl0aHJvdyBFcnJvcihwKDEzNyx0KSk7YnJlYWs7ZGVmYXVsdDpaKGwsdCxlLHYsYSxudWxsKX19RTAobCxuLGMsZixkLGksdSwhMSk7cmV0dXJuO2Nhc2Uic2VsZWN0IjpOKCJpbnZhbGlkIixsKSxlPWk9bj1udWxsO2Zvcih1IGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eSh1KSYmKGM9YVt1XSxjIT1udWxsKSlzd2l0Y2godSl7Y2FzZSJ2YWx1ZSI6bj1jO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjppPWM7YnJlYWs7Y2FzZSJtdWx0aXBsZSI6ZT1jO2RlZmF1bHQ6WihsLHQsdSxjLGEsbnVsbCl9dD1uLGE9aSxsLm11bHRpcGxlPSEhZSx0IT1udWxsP3dhKGwsISFlLHQsITEpOmEhPW51bGwmJndhKGwsISFlLGEsITApO3JldHVybjtjYXNlInRleHRhcmVhIjpOKCJpbnZhbGlkIixsKSxuPXU9ZT1udWxsO2ZvcihpIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShpKSYmKGM9YVtpXSxjIT1udWxsKSlzd2l0Y2goaSl7Y2FzZSJ2YWx1ZSI6ZT1jO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjp1PWM7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6bj1jO2JyZWFrO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKGMhPW51bGwpdGhyb3cgRXJyb3IocCg5MSkpO2JyZWFrO2RlZmF1bHQ6WihsLHQsaSxjLGEsbnVsbCl9QTAobCxlLHUsbik7cmV0dXJuO2Nhc2Uib3B0aW9uIjpmb3IoZiBpbiBhKWEuaGFzT3duUHJvcGVydHkoZikmJihlPWFbZl0sZSE9bnVsbCkmJihmPT09InNlbGVjdGVkIj9sLnNlbGVjdGVkPWUmJnR5cGVvZiBlIT0iZnVuY3Rpb24iJiZ0eXBlb2YgZSE9InN5bWJvbCI6WihsLHQsZixlLGEsbnVsbCkpO3JldHVybjtjYXNlImRpYWxvZyI6TigiYmVmb3JldG9nZ2xlIixsKSxOKCJ0b2dnbGUiLGwpLE4oImNhbmNlbCIsbCksTigiY2xvc2UiLGwpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6TigibG9hZCIsbCk7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGU9MDtlPGV1Lmxlbmd0aDtlKyspTihldVtlXSxsKTticmVhaztjYXNlImltYWdlIjpOKCJlcnJvciIsbCksTigibG9hZCIsbCk7YnJlYWs7Y2FzZSJkZXRhaWxzIjpOKCJ0b2dnbGUiLGwpO2JyZWFrO2Nhc2UiZW1iZWQiOmNhc2Uic291cmNlIjpjYXNlImxpbmsiOk4oImVycm9yIixsKSxOKCJsb2FkIixsKTtjYXNlImFyZWEiOmNhc2UiYmFzZSI6Y2FzZSJiciI6Y2FzZSJjb2wiOmNhc2UiaHIiOmNhc2Uia2V5Z2VuIjpjYXNlIm1ldGEiOmNhc2UicGFyYW0iOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IoZCBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoZCkmJihlPWFbZF0sZSE9bnVsbCkpc3dpdGNoKGQpe2Nhc2UiY2hpbGRyZW4iOmNhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOnRocm93IEVycm9yKHAoMTM3LHQpKTtkZWZhdWx0OloobCx0LGQsZSxhLG51bGwpfXJldHVybjtkZWZhdWx0OmlmKHVmKHQpKXtmb3IodiBpbiBhKWEuaGFzT3duUHJvcGVydHkodikmJihlPWFbdl0sZSE9PXZvaWQgMCYmWmMobCx0LHYsZSxhLHZvaWQgMCkpO3JldHVybn19Zm9yKGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYoZT1hW2NdLGUhPW51bGwmJloobCx0LGMsZSxhLG51bGwpKX1mdW5jdGlvbiB4cihsLHQsYSxlKXtzd2l0Y2godCl7Y2FzZSJkaXYiOmNhc2Uic3BhbiI6Y2FzZSJzdmciOmNhc2UicGF0aCI6Y2FzZSJhIjpjYXNlImciOmNhc2UicCI6Y2FzZSJsaSI6YnJlYWs7Y2FzZSJpbnB1dCI6dmFyIHU9bnVsbCxuPW51bGwsaT1udWxsLGM9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbDtmb3IociBpbiBhKXt2YXIgeT1hW3JdO2lmKGEuaGFzT3duUHJvcGVydHkocikmJnkhPW51bGwpc3dpdGNoKHIpe2Nhc2UiY2hlY2tlZCI6YnJlYWs7Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOmY9eTtkZWZhdWx0OmUuaGFzT3duUHJvcGVydHkocil8fFoobCx0LHIsbnVsbCxlLHkpfX1mb3IodmFyIG0gaW4gZSl7dmFyIHI9ZVttXTtpZih5PWFbbV0sZS5oYXNPd25Qcm9wZXJ0eShtKSYmKHIhPW51bGx8fHkhPW51bGwpKXN3aXRjaChtKXtjYXNlInR5cGUiOm49cjticmVhaztjYXNlIm5hbWUiOnU9cjticmVhaztjYXNlImNoZWNrZWQiOmQ9cjticmVhaztjYXNlImRlZmF1bHRDaGVja2VkIjp2PXI7YnJlYWs7Y2FzZSJ2YWx1ZSI6aT1yO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpjPXI7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYociE9bnVsbCl0aHJvdyBFcnJvcihwKDEzNyx0KSk7YnJlYWs7ZGVmYXVsdDpyIT09eSYmWihsLHQsbSxyLGUseSl9fWhjKGwsaSxjLGYsZCx2LG4sdSk7cmV0dXJuO2Nhc2Uic2VsZWN0IjpyPWk9Yz1tPW51bGw7Zm9yKG4gaW4gYSlpZihmPWFbbl0sYS5oYXNPd25Qcm9wZXJ0eShuKSYmZiE9bnVsbClzd2l0Y2gobil7Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJtdWx0aXBsZSI6cj1mO2RlZmF1bHQ6ZS5oYXNPd25Qcm9wZXJ0eShuKXx8WihsLHQsbixudWxsLGUsZil9Zm9yKHUgaW4gZSlpZihuPWVbdV0sZj1hW3VdLGUuaGFzT3duUHJvcGVydHkodSkmJihuIT1udWxsfHxmIT1udWxsKSlzd2l0Y2godSl7Y2FzZSJ2YWx1ZSI6bT1uO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpjPW47YnJlYWs7Y2FzZSJtdWx0aXBsZSI6aT1uO2RlZmF1bHQ6biE9PWYmJloobCx0LHUsbixlLGYpfXQ9YyxhPWksZT1yLG0hPW51bGw/d2EobCwhIWEsbSwhMSk6ISFlIT0hIWEmJih0IT1udWxsP3dhKGwsISFhLHQsITApOndhKGwsISFhLGE/W106IiIsITEpKTtyZXR1cm47Y2FzZSJ0ZXh0YXJlYSI6cj1tPW51bGw7Zm9yKGMgaW4gYSlpZih1PWFbY10sYS5oYXNPd25Qcm9wZXJ0eShjKSYmdSE9bnVsbCYmIWUuaGFzT3duUHJvcGVydHkoYykpc3dpdGNoKGMpe2Nhc2UidmFsdWUiOmJyZWFrO2Nhc2UiY2hpbGRyZW4iOmJyZWFrO2RlZmF1bHQ6WihsLHQsYyxudWxsLGUsdSl9Zm9yKGkgaW4gZSlpZih1PWVbaV0sbj1hW2ldLGUuaGFzT3duUHJvcGVydHkoaSkmJih1IT1udWxsfHxuIT1udWxsKSlzd2l0Y2goaSl7Y2FzZSJ2YWx1ZSI6bT11O2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyPXU7YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYodSE9bnVsbCl0aHJvdyBFcnJvcihwKDkxKSk7YnJlYWs7ZGVmYXVsdDp1IT09biYmWihsLHQsaSx1LGUsbil9ejAobCxtLHIpO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKHZhciBFIGluIGEpbT1hW0VdLGEuaGFzT3duUHJvcGVydHkoRSkmJm0hPW51bGwmJiFlLmhhc093blByb3BlcnR5KEUpJiYoRT09PSJzZWxlY3RlZCI/bC5zZWxlY3RlZD0hMTpaKGwsdCxFLG51bGwsZSxtKSk7Zm9yKGYgaW4gZSltPWVbZl0scj1hW2ZdLGUuaGFzT3duUHJvcGVydHkoZikmJm0hPT1yJiYobSE9bnVsbHx8ciE9bnVsbCkmJihmPT09InNlbGVjdGVkIj9sLnNlbGVjdGVkPW0mJnR5cGVvZiBtIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbSE9InN5bWJvbCI6WihsLHQsZixtLGUscikpO3JldHVybjtjYXNlImltZyI6Y2FzZSJsaW5rIjpjYXNlImFyZWEiOmNhc2UiYmFzZSI6Y2FzZSJiciI6Y2FzZSJjb2wiOmNhc2UiZW1iZWQiOmNhc2UiaHIiOmNhc2Uia2V5Z2VuIjpjYXNlIm1ldGEiOmNhc2UicGFyYW0iOmNhc2Uic291cmNlIjpjYXNlInRyYWNrIjpjYXNlIndiciI6Y2FzZSJtZW51aXRlbSI6Zm9yKHZhciB6IGluIGEpbT1hW3pdLGEuaGFzT3duUHJvcGVydHkoeikmJm0hPW51bGwmJiFlLmhhc093blByb3BlcnR5KHopJiZaKGwsdCx6LG51bGwsZSxtKTtmb3IoZCBpbiBlKWlmKG09ZVtkXSxyPWFbZF0sZS5oYXNPd25Qcm9wZXJ0eShkKSYmbSE9PXImJihtIT1udWxsfHxyIT1udWxsKSlzd2l0Y2goZCl7Y2FzZSJjaGlsZHJlbiI6Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobSE9bnVsbCl0aHJvdyBFcnJvcihwKDEzNyx0KSk7YnJlYWs7ZGVmYXVsdDpaKGwsdCxkLG0sZSxyKX1yZXR1cm47ZGVmYXVsdDppZih1Zih0KSl7Zm9yKHZhciBUIGluIGEpbT1hW1RdLGEuaGFzT3duUHJvcGVydHkoVCkmJm0hPT12b2lkIDAmJiFlLmhhc093blByb3BlcnR5KFQpJiZaYyhsLHQsVCx2b2lkIDAsZSxtKTtmb3IodiBpbiBlKW09ZVt2XSxyPWFbdl0sIWUuaGFzT3duUHJvcGVydHkodil8fG09PT1yfHxtPT09dm9pZCAwJiZyPT09dm9pZCAwfHxaYyhsLHQsdixtLGUscik7cmV0dXJufX1mb3IodmFyIHMgaW4gYSltPWFbc10sYS5oYXNPd25Qcm9wZXJ0eShzKSYmbSE9bnVsbCYmIWUuaGFzT3duUHJvcGVydHkocykmJloobCx0LHMsbnVsbCxlLG0pO2Zvcih5IGluIGUpbT1lW3ldLHI9YVt5XSwhZS5oYXNPd25Qcm9wZXJ0eSh5KXx8bT09PXJ8fG09PW51bGwmJnI9PW51bGx8fFoobCx0LHksbSxlLHIpfWZ1bmN0aW9uIEdzKGwpe3N3aXRjaChsKXtjYXNlImNzcyI6Y2FzZSJzY3JpcHQiOmNhc2UiZm9udCI6Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UiaW5wdXQiOmNhc2UibGluayI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gT3IoKXtpZih0eXBlb2YgcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZT09ImZ1bmN0aW9uIil7Zm9yKHZhciBsPTAsdD0wLGE9cGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSgicmVzb3VyY2UiKSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciB1PWFbZV0sbj11LnRyYW5zZmVyU2l6ZSxpPXUuaW5pdGlhdG9yVHlwZSxjPXUuZHVyYXRpb247aWYobiYmYyYmR3MoaSkpe2ZvcihpPTAsYz11LnJlc3BvbnNlRW5kLGUrPTE7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWFbZV0sZD1mLnN0YXJ0VGltZTtpZihkPmMpYnJlYWs7dmFyIHY9Zi50cmFuc2ZlclNpemUseT1mLmluaXRpYXRvclR5cGU7diYmR3MoeSkmJihmPWYucmVzcG9uc2VFbmQsaSs9diooZjxjPzE6KGMtZCkvKGYtZCkpKX1pZigtLWUsdCs9OCoobitpKS8odS5kdXJhdGlvbi8xZTMpLGwrKywxMDxsKWJyZWFrfX1pZigwPGwpcmV0dXJuIHQvbC8xZTZ9cmV0dXJuIG5hdmlnYXRvci5jb25uZWN0aW9uJiYobD1uYXZpZ2F0b3IuY29ubmVjdGlvbi5kb3dubGluayx0eXBlb2YgbD09Im51bWJlciIpP2w6NX12YXIgVmM9bnVsbCxMYz1udWxsO2Z1bmN0aW9uIE5uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09OT9sOmwub3duZXJEb2N1bWVudH1mdW5jdGlvbiBYcyhsKXtzd2l0Y2gobCl7Y2FzZSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6cmV0dXJuIDE7Y2FzZSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBfbShsLHQpe2lmKGw9PT0wKXN3aXRjaCh0KXtjYXNlInN2ZyI6cmV0dXJuIDE7Y2FzZSJtYXRoIjpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfXJldHVybiBsPT09MSYmdD09PSJmb3JlaWduT2JqZWN0Ij8wOmx9ZnVuY3Rpb24gS2MobCx0KXtyZXR1cm4gbD09PSJ0ZXh0YXJlYSJ8fGw9PT0ibm9zY3JpcHQifHx0eXBlb2YgdC5jaGlsZHJlbj09InN0cmluZyJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0ibnVtYmVyInx8dHlwZW9mIHQuY2hpbGRyZW49PSJiaWdpbnQifHx0eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTD09Im9iamVjdCImJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPT1udWxsJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCE9bnVsbH12YXIgdGM9bnVsbDtmdW5jdGlvbiBfcigpe3ZhciBsPXdpbmRvdy5ldmVudDtyZXR1cm4gbCYmbC50eXBlPT09InBvcHN0YXRlIj9sPT09dGM/ITE6KHRjPWwsITApOih0Yz1udWxsLCExKX12YXIgRG09dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDp2b2lkIDAsRHI9dHlwZW9mIGNsZWFyVGltZW91dD09ImZ1bmN0aW9uIj9jbGVhclRpbWVvdXQ6dm9pZCAwLFFzPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2U6dm9pZCAwLFVyPXR5cGVvZiBxdWV1ZU1pY3JvdGFzaz09ImZ1bmN0aW9uIj9xdWV1ZU1pY3JvdGFzazp0eXBlb2YgUXM8InUiP2Z1bmN0aW9uKGwpe3JldHVybiBRcy5yZXNvbHZlKG51bGwpLnRoZW4obCkuY2F0Y2goSHIpfTpEbTtmdW5jdGlvbiBIcihsKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgbH0pfWZ1bmN0aW9uIGFhKGwpe3JldHVybiBsPT09ImhlYWQifWZ1bmN0aW9uIGpzKGwsdCl7dmFyIGE9dCxlPTA7ZG97dmFyIHU9YS5uZXh0U2libGluZztpZihsLnJlbW92ZUNoaWxkKGEpLHUmJnUubm9kZVR5cGU9PT04KWlmKGE9dS5kYXRhLGE9PT0iLyQifHxhPT09Ii8mIil7aWYoZT09PTApe2wucmVtb3ZlQ2hpbGQodSksb2UodCk7cmV0dXJufWUtLX1lbHNlIGlmKGE9PT0iJCJ8fGE9PT0iJD8ifHxhPT09IiR+Inx8YT09PSIkISJ8fGE9PT0iJiIpZSsrO2Vsc2UgaWYoYT09PSJodG1sIil3ZShsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtlbHNlIGlmKGE9PT0iaGVhZCIpe2E9bC5vd25lckRvY3VtZW50LmhlYWQsd2UoYSk7Zm9yKHZhciBuPWEuZmlyc3RDaGlsZDtuOyl7dmFyIGk9bi5uZXh0U2libGluZyxjPW4ubm9kZU5hbWU7bltkdV18fGM9PT0iU0NSSVBUInx8Yz09PSJTVFlMRSJ8fGM9PT0iTElOSyImJm4ucmVsLnRvTG93ZXJDYXNlKCk9PT0ic3R5bGVzaGVldCJ8fGEucmVtb3ZlQ2hpbGQobiksbj1pfX1lbHNlIGE9PT0iYm9keSImJndlKGwub3duZXJEb2N1bWVudC5ib2R5KTthPXV9d2hpbGUoYSk7b2UodCl9ZnVuY3Rpb24gWnMobCx0KXt2YXIgYT1sO2w9MDtkb3t2YXIgZT1hLm5leHRTaWJsaW5nO2lmKGEubm9kZVR5cGU9PT0xP3Q/KGEuX3N0YXNoZWREaXNwbGF5PWEuc3R5bGUuZGlzcGxheSxhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKTooYS5zdHlsZS5kaXNwbGF5PWEuX3N0YXNoZWREaXNwbGF5fHwiIixhLmdldEF0dHJpYnV0ZSgic3R5bGUiKT09PSIiJiZhLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSk6YS5ub2RlVHlwZT09PTMmJih0PyhhLl9zdGFzaGVkVGV4dD1hLm5vZGVWYWx1ZSxhLm5vZGVWYWx1ZT0iIik6YS5ub2RlVmFsdWU9YS5fc3Rhc2hlZFRleHR8fCIiKSxlJiZlLm5vZGVUeXBlPT09OClpZihhPWUuZGF0YSxhPT09Ii8kIil7aWYobD09PTApYnJlYWs7bC0tfWVsc2UgYSE9PSIkIiYmYSE9PSIkPyImJmEhPT0iJH4iJiZhIT09IiQhInx8bCsrO2E9ZX13aGlsZShhKX1mdW5jdGlvbiBKYyhsKXt2YXIgdD1sLmZpcnN0Q2hpbGQ7Zm9yKHQmJnQubm9kZVR5cGU9PT0xMCYmKHQ9dC5uZXh0U2libGluZyk7dDspe3ZhciBhPXQ7c3dpdGNoKHQ9dC5uZXh0U2libGluZyxhLm5vZGVOYW1lKXtjYXNlIkhUTUwiOmNhc2UiSEVBRCI6Y2FzZSJCT0RZIjpKYyhhKSxlZihhKTtjb250aW51ZTtjYXNlIlNDUklQVCI6Y2FzZSJTVFlMRSI6Y29udGludWU7Y2FzZSJMSU5LIjppZihhLnJlbC50b0xvd2VyQ2FzZSgpPT09InN0eWxlc2hlZXQiKWNvbnRpbnVlfWwucmVtb3ZlQ2hpbGQoYSl9fWZ1bmN0aW9uIE5yKGwsdCxhLGUpe2Zvcig7bC5ub2RlVHlwZT09PTE7KXt2YXIgdT1hO2lmKGwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSl7aWYoIWUmJihsLm5vZGVOYW1lIT09IklOUFVUInx8bC50eXBlIT09ImhpZGRlbiIpKWJyZWFrfWVsc2UgaWYoZSl7aWYoIWxbZHVdKXN3aXRjaCh0KXtjYXNlIm1ldGEiOmlmKCFsLmhhc0F0dHJpYnV0ZSgiaXRlbXByb3AiKSlicmVhaztyZXR1cm4gbDtjYXNlImxpbmsiOmlmKG49bC5nZXRBdHRyaWJ1dGUoInJlbCIpLG49PT0ic3R5bGVzaGVldCImJmwuaGFzQXR0cmlidXRlKCJkYXRhLXByZWNlZGVuY2UiKSlicmVhaztpZihuIT09dS5yZWx8fGwuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0odS5ocmVmPT1udWxsfHx1LmhyZWY9PT0iIj9udWxsOnUuaHJlZil8fGwuZ2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIpIT09KHUuY3Jvc3NPcmlnaW49PW51bGw/bnVsbDp1LmNyb3NzT3JpZ2luKXx8bC5nZXRBdHRyaWJ1dGUoInRpdGxlIikhPT0odS50aXRsZT09bnVsbD9udWxsOnUudGl0bGUpKWJyZWFrO3JldHVybiBsO2Nhc2Uic3R5bGUiOmlmKGwuaGFzQXR0cmlidXRlKCJkYXRhLXByZWNlZGVuY2UiKSlicmVhaztyZXR1cm4gbDtjYXNlInNjcmlwdCI6aWYobj1sLmdldEF0dHJpYnV0ZSgic3JjIiksKG4hPT0odS5zcmM9PW51bGw/bnVsbDp1LnNyYyl8fGwuZ2V0QXR0cmlidXRlKCJ0eXBlIikhPT0odS50eXBlPT1udWxsP251bGw6dS50eXBlKXx8bC5nZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIikhPT0odS5jcm9zc09yaWdpbj09bnVsbD9udWxsOnUuY3Jvc3NPcmlnaW4pKSYmbiYmbC5oYXNBdHRyaWJ1dGUoImFzeW5jIikmJiFsLmhhc0F0dHJpYnV0ZSgiaXRlbXByb3AiKSlicmVhaztyZXR1cm4gbDtkZWZhdWx0OnJldHVybiBsfX1lbHNlIGlmKHQ9PT0iaW5wdXQiJiZsLnR5cGU9PT0iaGlkZGVuIil7dmFyIG49dS5uYW1lPT1udWxsP251bGw6IiIrdS5uYW1lO2lmKHUudHlwZT09PSJoaWRkZW4iJiZsLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09bilyZXR1cm4gbH1lbHNlIHJldHVybiBsO2lmKGw9d2wobC5uZXh0U2libGluZyksbD09PW51bGwpYnJlYWt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ3IobCx0LGEpe2lmKHQ9PT0iIilyZXR1cm4gbnVsbDtmb3IoO2wubm9kZVR5cGUhPT0zOylpZigobC5ub2RlVHlwZSE9PTF8fGwubm9kZU5hbWUhPT0iSU5QVVQifHxsLnR5cGUhPT0iaGlkZGVuIikmJiFhfHwobD13bChsLm5leHRTaWJsaW5nKSxsPT09bnVsbCkpcmV0dXJuIG51bGw7cmV0dXJuIGx9ZnVuY3Rpb24gVW0obCx0KXtmb3IoO2wubm9kZVR5cGUhPT04OylpZigobC5ub2RlVHlwZSE9PTF8fGwubm9kZU5hbWUhPT0iSU5QVVQifHxsLnR5cGUhPT0iaGlkZGVuIikmJiF0fHwobD13bChsLm5leHRTaWJsaW5nKSxsPT09bnVsbCkpcmV0dXJuIG51bGw7cmV0dXJuIGx9ZnVuY3Rpb24gd2MobCl7cmV0dXJuIGwuZGF0YT09PSIkPyJ8fGwuZGF0YT09PSIkfiJ9ZnVuY3Rpb24gV2MobCl7cmV0dXJuIGwuZGF0YT09PSIkISJ8fGwuZGF0YT09PSIkPyImJmwub3duZXJEb2N1bWVudC5yZWFkeVN0YXRlIT09ImxvYWRpbmcifWZ1bmN0aW9uIFJyKGwsdCl7dmFyIGE9bC5vd25lckRvY3VtZW50O2lmKGwuZGF0YT09PSIkfiIpbC5fcmVhY3RSZXRyeT10O2Vsc2UgaWYobC5kYXRhIT09IiQ/Inx8YS5yZWFkeVN0YXRlIT09ImxvYWRpbmciKXQoKTtlbHNle3ZhciBlPWZ1bmN0aW9uKCl7dCgpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZSl9O2EuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZSksbC5fcmVhY3RSZXRyeT1lfX1mdW5jdGlvbiB3bChsKXtmb3IoO2whPW51bGw7bD1sLm5leHRTaWJsaW5nKXt2YXIgdD1sLm5vZGVUeXBlO2lmKHQ9PT0xfHx0PT09MylicmVhaztpZih0PT09OCl7aWYodD1sLmRhdGEsdD09PSIkInx8dD09PSIkISJ8fHQ9PT0iJD8ifHx0PT09IiR+Inx8dD09PSImInx8dD09PSJGISJ8fHQ9PT0iRiIpYnJlYWs7aWYodD09PSIvJCJ8fHQ9PT0iLyYiKXJldHVybiBudWxsfX1yZXR1cm4gbH12YXIgJGM9bnVsbDtmdW5jdGlvbiBWcyhsKXtsPWwubmV4dFNpYmxpbmc7Zm9yKHZhciB0PTA7bDspe2lmKGwubm9kZVR5cGU9PT04KXt2YXIgYT1sLmRhdGE7aWYoYT09PSIvJCJ8fGE9PT0iLyYiKXtpZih0PT09MClyZXR1cm4gd2wobC5uZXh0U2libGluZyk7dC0tfWVsc2UgYSE9PSIkIiYmYSE9PSIkISImJmEhPT0iJD8iJiZhIT09IiR+IiYmYSE9PSImInx8dCsrfWw9bC5uZXh0U2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBMcyhsKXtsPWwucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgdD0wO2w7KXtpZihsLm5vZGVUeXBlPT09OCl7dmFyIGE9bC5kYXRhO2lmKGE9PT0iJCJ8fGE9PT0iJCEifHxhPT09IiQ/Inx8YT09PSIkfiJ8fGE9PT0iJiIpe2lmKHQ9PT0wKXJldHVybiBsO3QtLX1lbHNlIGEhPT0iLyQiJiZhIT09Ii8mInx8dCsrfWw9bC5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSG0obCx0LGEpe3N3aXRjaCh0PU5uKGEpLGwpe2Nhc2UiaHRtbCI6aWYobD10LmRvY3VtZW50RWxlbWVudCwhbCl0aHJvdyBFcnJvcihwKDQ1MikpO3JldHVybiBsO2Nhc2UiaGVhZCI6aWYobD10LmhlYWQsIWwpdGhyb3cgRXJyb3IocCg0NTMpKTtyZXR1cm4gbDtjYXNlImJvZHkiOmlmKGw9dC5ib2R5LCFsKXRocm93IEVycm9yKHAoNDU0KSk7cmV0dXJuIGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihwKDQ1MSkpfX1mdW5jdGlvbiB3ZShsKXtmb3IodmFyIHQ9bC5hdHRyaWJ1dGVzO3QubGVuZ3RoOylsLnJlbW92ZUF0dHJpYnV0ZU5vZGUodFswXSk7ZWYobCl9dmFyIFdsPW5ldyBNYXAsS3M9bmV3IFNldDtmdW5jdGlvbiBDbihsKXtyZXR1cm4gdHlwZW9mIGwuZ2V0Um9vdE5vZGU9PSJmdW5jdGlvbiI/bC5nZXRSb290Tm9kZSgpOmwubm9kZVR5cGU9PT05P2w6bC5vd25lckRvY3VtZW50fXZhciBPdD1HLmQ7Ry5kPXtmOkJyLHI6cXIsRDpZcixDOkdyLEw6WHIsbTpRcixYOlpyLFM6anIsTTpWcn07ZnVuY3Rpb24gQnIoKXt2YXIgbD1PdC5mKCksdD1rbigpO3JldHVybiBsfHx0fWZ1bmN0aW9uIHFyKGwpe3ZhciB0PW1lKGwpO3QhPT1udWxsJiZ0LnRhZz09PTUmJnQudHlwZT09PSJmb3JtIj9NMSh0KTpPdC5yKGwpfXZhciB2ZT10eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQ7ZnVuY3Rpb24gTm0obCx0LGEpe3ZhciBlPXZlO2lmKGUmJnR5cGVvZiB0PT0ic3RyaW5nIiYmdCl7dmFyIHU9VmwodCk7dT0nbGlua1tyZWw9IicrbCsnIl1baHJlZj0iJyt1KyciXScsdHlwZW9mIGE9PSJzdHJpbmciJiYodSs9J1tjcm9zc29yaWdpbj0iJythKyciXScpLEtzLmhhcyh1KXx8KEtzLmFkZCh1KSxsPXtyZWw6bCxjcm9zc09yaWdpbjphLGhyZWY6dH0sZS5xdWVyeVNlbGVjdG9yKHUpPT09bnVsbCYmKHQ9ZS5jcmVhdGVFbGVtZW50KCJsaW5rIiksdmwodCwibGluayIsbCksb2wodCksZS5oZWFkLmFwcGVuZENoaWxkKHQpKSl9fWZ1bmN0aW9uIFlyKGwpe090LkQobCksTm0oImRucy1wcmVmZXRjaCIsbCxudWxsKX1mdW5jdGlvbiBHcihsLHQpe090LkMobCx0KSxObSgicHJlY29ubmVjdCIsbCx0KX1mdW5jdGlvbiBYcihsLHQsYSl7T3QuTChsLHQsYSk7dmFyIGU9dmU7aWYoZSYmbCYmdCl7dmFyIHU9J2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9IicrVmwodCkrJyJdJzt0PT09ImltYWdlIiYmYSYmYS5pbWFnZVNyY1NldD8odSs9J1tpbWFnZXNyY3NldD0iJytWbChhLmltYWdlU3JjU2V0KSsnIl0nLHR5cGVvZiBhLmltYWdlU2l6ZXM9PSJzdHJpbmciJiYodSs9J1tpbWFnZXNpemVzPSInK1ZsKGEuaW1hZ2VTaXplcykrJyJdJykpOnUrPSdbaHJlZj0iJytWbChsKSsnIl0nO3ZhciBuPXU7c3dpdGNoKHQpe2Nhc2Uic3R5bGUiOm49ZmUobCk7YnJlYWs7Y2FzZSJzY3JpcHQiOm49eWUobCl9V2wuaGFzKG4pfHwobD0kKHtyZWw6InByZWxvYWQiLGhyZWY6dD09PSJpbWFnZSImJmEmJmEuaW1hZ2VTcmNTZXQ/dm9pZCAwOmwsYXM6dH0sYSksV2wuc2V0KG4sbCksZS5xdWVyeVNlbGVjdG9yKHUpIT09bnVsbHx8dD09PSJzdHlsZSImJmUucXVlcnlTZWxlY3RvcihidShuKSl8fHQ9PT0ic2NyaXB0IiYmZS5xdWVyeVNlbGVjdG9yKHB1KG4pKXx8KHQ9ZS5jcmVhdGVFbGVtZW50KCJsaW5rIiksdmwodCwibGluayIsbCksb2wodCksZS5oZWFkLmFwcGVuZENoaWxkKHQpKSl9fWZ1bmN0aW9uIFFyKGwsdCl7T3QubShsLHQpO3ZhciBhPXZlO2lmKGEmJmwpe3ZhciBlPXQmJnR5cGVvZiB0LmFzPT0ic3RyaW5nIj90LmFzOiJzY3JpcHQiLHU9J2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl1bYXM9IicrVmwoZSkrJyJdW2hyZWY9IicrVmwobCkrJyJdJyxuPXU7c3dpdGNoKGUpe2Nhc2UiYXVkaW93b3JrbGV0IjpjYXNlInBhaW50d29ya2xldCI6Y2FzZSJzZXJ2aWNld29ya2VyIjpjYXNlInNoYXJlZHdvcmtlciI6Y2FzZSJ3b3JrZXIiOmNhc2Uic2NyaXB0IjpuPXllKGwpfWlmKCFXbC5oYXMobikmJihsPSQoe3JlbDoibW9kdWxlcHJlbG9hZCIsaHJlZjpsfSx0KSxXbC5zZXQobixsKSxhLnF1ZXJ5U2VsZWN0b3IodSk9PT1udWxsKSl7c3dpdGNoKGUpe2Nhc2UiYXVkaW93b3JrbGV0IjpjYXNlInBhaW50d29ya2xldCI6Y2FzZSJzZXJ2aWNld29ya2VyIjpjYXNlInNoYXJlZHdvcmtlciI6Y2FzZSJ3b3JrZXIiOmNhc2Uic2NyaXB0IjppZihhLnF1ZXJ5U2VsZWN0b3IocHUobikpKXJldHVybn1lPWEuY3JlYXRlRWxlbWVudCgibGluayIpLHZsKGUsImxpbmsiLGwpLG9sKGUpLGEuaGVhZC5hcHBlbmRDaGlsZChlKX19fWZ1bmN0aW9uIGpyKGwsdCxhKXtPdC5TKGwsdCxhKTt2YXIgZT12ZTtpZihlJiZsKXt2YXIgdT1KYShlKS5ob2lzdGFibGVTdHlsZXMsbj1mZShsKTt0PXR8fCJkZWZhdWx0Ijt2YXIgaT11LmdldChuKTtpZighaSl7dmFyIGM9e2xvYWRpbmc6MCxwcmVsb2FkOm51bGx9O2lmKGk9ZS5xdWVyeVNlbGVjdG9yKGJ1KG4pKSljLmxvYWRpbmc9NTtlbHNle2w9JCh7cmVsOiJzdHlsZXNoZWV0IixocmVmOmwsImRhdGEtcHJlY2VkZW5jZSI6dH0sYSksKGE9V2wuZ2V0KG4pKSYmVmYobCxhKTt2YXIgZj1pPWUuY3JlYXRlRWxlbWVudCgibGluayIpO29sKGYpLHZsKGYsImxpbmsiLGwpLGYuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZCx2KXtmLm9ubG9hZD1kLGYub25lcnJvcj12fSksZi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe2MubG9hZGluZ3w9MX0pLGYuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKCl7Yy5sb2FkaW5nfD0yfSksYy5sb2FkaW5nfD00LHVuKGksdCxlKX1pPXt0eXBlOiJzdHlsZXNoZWV0IixpbnN0YW5jZTppLGNvdW50OjEsc3RhdGU6Y30sdS5zZXQobixpKX19fWZ1bmN0aW9uIFpyKGwsdCl7T3QuWChsLHQpO3ZhciBhPXZlO2lmKGEmJmwpe3ZhciBlPUphKGEpLmhvaXN0YWJsZVNjcmlwdHMsdT15ZShsKSxuPWUuZ2V0KHUpO258fChuPWEucXVlcnlTZWxlY3RvcihwdSh1KSksbnx8KGw9JCh7c3JjOmwsYXN5bmM6ITB9LHQpLCh0PVdsLmdldCh1KSkmJkxmKGwsdCksbj1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLG9sKG4pLHZsKG4sImxpbmsiLGwpLGEuaGVhZC5hcHBlbmRDaGlsZChuKSksbj17dHlwZToic2NyaXB0IixpbnN0YW5jZTpuLGNvdW50OjEsc3RhdGU6bnVsbH0sZS5zZXQodSxuKSl9fWZ1bmN0aW9uIFZyKGwsdCl7T3QuTShsLHQpO3ZhciBhPXZlO2lmKGEmJmwpe3ZhciBlPUphKGEpLmhvaXN0YWJsZVNjcmlwdHMsdT15ZShsKSxuPWUuZ2V0KHUpO258fChuPWEucXVlcnlTZWxlY3RvcihwdSh1KSksbnx8KGw9JCh7c3JjOmwsYXN5bmM6ITAsdHlwZToibW9kdWxlIn0sdCksKHQ9V2wuZ2V0KHUpKSYmTGYobCx0KSxuPWEuY3JlYXRlRWxlbWVudCgic2NyaXB0Iiksb2wobiksdmwobiwibGluayIsbCksYS5oZWFkLmFwcGVuZENoaWxkKG4pKSxuPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOm4sY291bnQ6MSxzdGF0ZTpudWxsfSxlLnNldCh1LG4pKX19ZnVuY3Rpb24gSnMobCx0LGEsZSl7dmFyIHU9KHU9WnQuY3VycmVudCk/Q24odSk6bnVsbDtpZighdSl0aHJvdyBFcnJvcihwKDQ0NikpO3N3aXRjaChsKXtjYXNlIm1ldGEiOmNhc2UidGl0bGUiOnJldHVybiBudWxsO2Nhc2Uic3R5bGUiOnJldHVybiB0eXBlb2YgYS5wcmVjZWRlbmNlPT0ic3RyaW5nIiYmdHlwZW9mIGEuaHJlZj09InN0cmluZyI/KHQ9ZmUoYS5ocmVmKSxhPUphKHUpLmhvaXN0YWJsZVN0eWxlcyxlPWEuZ2V0KHQpLGV8fChlPXt0eXBlOiJzdHlsZSIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LGEuc2V0KHQsZSkpLGUpOnt0eXBlOiJ2b2lkIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07Y2FzZSJsaW5rIjppZihhLnJlbD09PSJzdHlsZXNoZWV0IiYmdHlwZW9mIGEuaHJlZj09InN0cmluZyImJnR5cGVvZiBhLnByZWNlZGVuY2U9PSJzdHJpbmciKXtsPWZlKGEuaHJlZik7dmFyIG49SmEodSkuaG9pc3RhYmxlU3R5bGVzLGk9bi5nZXQobCk7aWYoaXx8KHU9dS5vd25lckRvY3VtZW50fHx1LGk9e3R5cGU6InN0eWxlc2hlZXQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTp7bG9hZGluZzowLHByZWxvYWQ6bnVsbH19LG4uc2V0KGwsaSksKG49dS5xdWVyeVNlbGVjdG9yKGJ1KGwpKSkmJiFuLl9wJiYoaS5pbnN0YW5jZT1uLGkuc3RhdGUubG9hZGluZz01KSxXbC5oYXMobCl8fChhPXtyZWw6InByZWxvYWQiLGFzOiJzdHlsZSIsaHJlZjphLmhyZWYsY3Jvc3NPcmlnaW46YS5jcm9zc09yaWdpbixpbnRlZ3JpdHk6YS5pbnRlZ3JpdHksbWVkaWE6YS5tZWRpYSxocmVmTGFuZzphLmhyZWZMYW5nLHJlZmVycmVyUG9saWN5OmEucmVmZXJyZXJQb2xpY3l9LFdsLnNldChsLGEpLG58fExyKHUsbCxhLGkuc3RhdGUpKSksdCYmZT09PW51bGwpdGhyb3cgRXJyb3IocCg1MjgsIiIpKTtyZXR1cm4gaX1pZih0JiZlIT09bnVsbCl0aHJvdyBFcnJvcihwKDUyOSwiIikpO3JldHVybiBudWxsO2Nhc2Uic2NyaXB0IjpyZXR1cm4gdD1hLmFzeW5jLGE9YS5zcmMsdHlwZW9mIGE9PSJzdHJpbmciJiZ0JiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQhPSJzeW1ib2wiPyh0PXllKGEpLGE9SmEodSkuaG9pc3RhYmxlU2NyaXB0cyxlPWEuZ2V0KHQpLGV8fChlPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSxhLnNldCh0LGUpKSxlKTp7dHlwZToidm9pZCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9O2RlZmF1bHQ6dGhyb3cgRXJyb3IocCg0NDQsbCkpfX1mdW5jdGlvbiBmZShsKXtyZXR1cm4naHJlZj0iJytWbChsKSsnIid9ZnVuY3Rpb24gYnUobCl7cmV0dXJuJ2xpbmtbcmVsPSJzdHlsZXNoZWV0Il1bJytsKyJdIn1mdW5jdGlvbiBDbShsKXtyZXR1cm4gJCh7fSxsLHsiZGF0YS1wcmVjZWRlbmNlIjpsLnByZWNlZGVuY2UscHJlY2VkZW5jZTpudWxsfSl9ZnVuY3Rpb24gTHIobCx0LGEsZSl7bC5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD0icHJlbG9hZCJdW2FzPSJzdHlsZSJdWycrdCsiXSIpP2UubG9hZGluZz0xOih0PWwuY3JlYXRlRWxlbWVudCgibGluayIpLGUucHJlbG9hZD10LHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtyZXR1cm4gZS5sb2FkaW5nfD0xfSksdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oKXtyZXR1cm4gZS5sb2FkaW5nfD0yfSksdmwodCwibGluayIsYSksb2wodCksbC5oZWFkLmFwcGVuZENoaWxkKHQpKX1mdW5jdGlvbiB5ZShsKXtyZXR1cm4nW3NyYz0iJytWbChsKSsnIl0nfWZ1bmN0aW9uIHB1KGwpe3JldHVybiJzY3JpcHRbYXN5bmNdIitsfWZ1bmN0aW9uIHdzKGwsdCxhKXtpZih0LmNvdW50KyssdC5pbnN0YW5jZT09PW51bGwpc3dpdGNoKHQudHlwZSl7Y2FzZSJzdHlsZSI6dmFyIGU9bC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLWhyZWZ+PSInK1ZsKGEuaHJlZikrJyJdJyk7aWYoZSlyZXR1cm4gdC5pbnN0YW5jZT1lLG9sKGUpLGU7dmFyIHU9JCh7fSxhLHsiZGF0YS1ocmVmIjphLmhyZWYsImRhdGEtcHJlY2VkZW5jZSI6YS5wcmVjZWRlbmNlLGhyZWY6bnVsbCxwcmVjZWRlbmNlOm51bGx9KTtyZXR1cm4gZT0obC5vd25lckRvY3VtZW50fHxsKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLG9sKGUpLHZsKGUsInN0eWxlIix1KSx1bihlLGEucHJlY2VkZW5jZSxsKSx0Lmluc3RhbmNlPWU7Y2FzZSJzdHlsZXNoZWV0Ijp1PWZlKGEuaHJlZik7dmFyIG49bC5xdWVyeVNlbGVjdG9yKGJ1KHUpKTtpZihuKXJldHVybiB0LnN0YXRlLmxvYWRpbmd8PTQsdC5pbnN0YW5jZT1uLG9sKG4pLG47ZT1DbShhKSwodT1XbC5nZXQodSkpJiZWZihlLHUpLG49KGwub3duZXJEb2N1bWVudHx8bCkuY3JlYXRlRWxlbWVudCgibGluayIpLG9sKG4pO3ZhciBpPW47cmV0dXJuIGkuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oYyxmKXtpLm9ubG9hZD1jLGkub25lcnJvcj1mfSksdmwobiwibGluayIsZSksdC5zdGF0ZS5sb2FkaW5nfD00LHVuKG4sYS5wcmVjZWRlbmNlLGwpLHQuaW5zdGFuY2U9bjtjYXNlInNjcmlwdCI6cmV0dXJuIG49eWUoYS5zcmMpLCh1PWwucXVlcnlTZWxlY3RvcihwdShuKSkpPyh0Lmluc3RhbmNlPXUsb2wodSksdSk6KGU9YSwodT1XbC5nZXQobikpJiYoZT0kKHt9LGEpLExmKGUsdSkpLGw9bC5vd25lckRvY3VtZW50fHxsLHU9bC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxvbCh1KSx2bCh1LCJsaW5rIixlKSxsLmhlYWQuYXBwZW5kQ2hpbGQodSksdC5pbnN0YW5jZT11KTtjYXNlInZvaWQiOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgRXJyb3IocCg0NDMsdC50eXBlKSl9ZWxzZSB0LnR5cGU9PT0ic3R5bGVzaGVldCImJih0LnN0YXRlLmxvYWRpbmcmNCk9PT0wJiYoZT10Lmluc3RhbmNlLHQuc3RhdGUubG9hZGluZ3w9NCx1bihlLGEucHJlY2VkZW5jZSxsKSk7cmV0dXJuIHQuaW5zdGFuY2V9ZnVuY3Rpb24gdW4obCx0LGEpe2Zvcih2YXIgZT1hLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPSJzdHlsZXNoZWV0Il1bZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdJyksdT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOm51bGwsbj11LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGM9ZVtpXTtpZihjLmRhdGFzZXQucHJlY2VkZW5jZT09PXQpbj1jO2Vsc2UgaWYobiE9PXUpYnJlYWt9bj9uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsbi5uZXh0U2libGluZyk6KHQ9YS5ub2RlVHlwZT09PTk/YS5oZWFkOmEsdC5pbnNlcnRCZWZvcmUobCx0LmZpcnN0Q2hpbGQpKX1mdW5jdGlvbiBWZihsLHQpe2wuY3Jvc3NPcmlnaW49PW51bGwmJihsLmNyb3NzT3JpZ2luPXQuY3Jvc3NPcmlnaW4pLGwucmVmZXJyZXJQb2xpY3k9PW51bGwmJihsLnJlZmVycmVyUG9saWN5PXQucmVmZXJyZXJQb2xpY3kpLGwudGl0bGU9PW51bGwmJihsLnRpdGxlPXQudGl0bGUpfWZ1bmN0aW9uIExmKGwsdCl7bC5jcm9zc09yaWdpbj09bnVsbCYmKGwuY3Jvc3NPcmlnaW49dC5jcm9zc09yaWdpbiksbC5yZWZlcnJlclBvbGljeT09bnVsbCYmKGwucmVmZXJyZXJQb2xpY3k9dC5yZWZlcnJlclBvbGljeSksbC5pbnRlZ3JpdHk9PW51bGwmJihsLmludGVncml0eT10LmludGVncml0eSl9dmFyIG5uPW51bGw7ZnVuY3Rpb24gV3MobCx0LGEpe2lmKG5uPT09bnVsbCl7dmFyIGU9bmV3IE1hcCx1PW5uPW5ldyBNYXA7dS5zZXQoYSxlKX1lbHNlIHU9bm4sZT11LmdldChhKSxlfHwoZT1uZXcgTWFwLHUuc2V0KGEsZSkpO2lmKGUuaGFzKGwpKXJldHVybiBlO2ZvcihlLnNldChsLG51bGwpLGE9YS5nZXRFbGVtZW50c0J5VGFnTmFtZShsKSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBuPWFbdV07aWYoIShuW2R1XXx8bltkbF18fGw9PT0ibGluayImJm4uZ2V0QXR0cmlidXRlKCJyZWwiKT09PSJzdHlsZXNoZWV0IikmJm4ubmFtZXNwYWNlVVJJIT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIil7dmFyIGk9bi5nZXRBdHRyaWJ1dGUodCl8fCIiO2k9bCtpO3ZhciBjPWUuZ2V0KGkpO2M/Yy5wdXNoKG4pOmUuc2V0KGksW25dKX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobCx0LGEpe2w9bC5vd25lckRvY3VtZW50fHxsLGwuaGVhZC5pbnNlcnRCZWZvcmUoYSx0PT09InRpdGxlIj9sLnF1ZXJ5U2VsZWN0b3IoImhlYWQgPiB0aXRsZSIpOm51bGwpfWZ1bmN0aW9uIEtyKGwsdCxhKXtpZihhPT09MXx8dC5pdGVtUHJvcCE9bnVsbClyZXR1cm4hMTtzd2l0Y2gobCl7Y2FzZSJtZXRhIjpjYXNlInRpdGxlIjpyZXR1cm4hMDtjYXNlInN0eWxlIjppZih0eXBlb2YgdC5wcmVjZWRlbmNlIT0ic3RyaW5nInx8dHlwZW9mIHQuaHJlZiE9InN0cmluZyJ8fHQuaHJlZj09PSIiKWJyZWFrO3JldHVybiEwO2Nhc2UibGluayI6aWYodHlwZW9mIHQucmVsIT0ic3RyaW5nInx8dHlwZW9mIHQuaHJlZiE9InN0cmluZyJ8fHQuaHJlZj09PSIifHx0Lm9uTG9hZHx8dC5vbkVycm9yKWJyZWFrO3JldHVybiB0LnJlbD09PSJzdHlsZXNoZWV0Ij8obD10LmRpc2FibGVkLHR5cGVvZiB0LnByZWNlZGVuY2U9PSJzdHJpbmciJiZsPT1udWxsKTohMDtjYXNlInNjcmlwdCI6aWYodC5hc3luYyYmdHlwZW9mIHQuYXN5bmMhPSJmdW5jdGlvbiImJnR5cGVvZiB0LmFzeW5jIT0ic3ltYm9sIiYmIXQub25Mb2FkJiYhdC5vbkVycm9yJiZ0LnNyYyYmdHlwZW9mIHQuc3JjPT0ic3RyaW5nIilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBSbShsKXtyZXR1cm4hKGwudHlwZT09PSJzdHlsZXNoZWV0IiYmKGwuc3RhdGUubG9hZGluZyYzKT09PTApfWZ1bmN0aW9uIEpyKGwsdCxhLGUpe2lmKGEudHlwZT09PSJzdHlsZXNoZWV0IiYmKHR5cGVvZiBlLm1lZGlhIT0ic3RyaW5nInx8bWF0Y2hNZWRpYShlLm1lZGlhKS5tYXRjaGVzIT09ITEpJiYoYS5zdGF0ZS5sb2FkaW5nJjQpPT09MCl7aWYoYS5pbnN0YW5jZT09PW51bGwpe3ZhciB1PWZlKGUuaHJlZiksbj10LnF1ZXJ5U2VsZWN0b3IoYnUodSkpO2lmKG4pe3Q9bi5fcCx0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iJiYobC5jb3VudCsrLGw9Um4uYmluZChsKSx0LnRoZW4obCxsKSksYS5zdGF0ZS5sb2FkaW5nfD00LGEuaW5zdGFuY2U9bixvbChuKTtyZXR1cm59bj10Lm93bmVyRG9jdW1lbnR8fHQsZT1DbShlKSwodT1XbC5nZXQodSkpJiZWZihlLHUpLG49bi5jcmVhdGVFbGVtZW50KCJsaW5rIiksb2wobik7dmFyIGk9bjtpLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsZil7aS5vbmxvYWQ9YyxpLm9uZXJyb3I9Zn0pLHZsKG4sImxpbmsiLGUpLGEuaW5zdGFuY2U9bn1sLnN0eWxlc2hlZXRzPT09bnVsbCYmKGwuc3R5bGVzaGVldHM9bmV3IE1hcCksbC5zdHlsZXNoZWV0cy5zZXQoYSx0KSwodD1hLnN0YXRlLnByZWxvYWQpJiYoYS5zdGF0ZS5sb2FkaW5nJjMpPT09MCYmKGwuY291bnQrKyxhPVJuLmJpbmQobCksdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixhKSl9fXZhciBhYz0wO2Z1bmN0aW9uIHdyKGwsdCl7cmV0dXJuIGwuc3R5bGVzaGVldHMmJmwuY291bnQ9PT0wJiZjbihsLGwuc3R5bGVzaGVldHMpLDA8bC5jb3VudHx8MDxsLmltZ0NvdW50P2Z1bmN0aW9uKGEpe3ZhciBlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihsLnN0eWxlc2hlZXRzJiZjbihsLGwuc3R5bGVzaGVldHMpLGwudW5zdXNwZW5kKXt2YXIgbj1sLnVuc3VzcGVuZDtsLnVuc3VzcGVuZD1udWxsLG4oKX19LDZlNCt0KTswPGwuaW1nQnl0ZXMmJmFjPT09MCYmKGFjPTYyNTAwKk9yKCkpO3ZhciB1PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihsLndhaXRpbmdGb3JJbWFnZXM9ITEsbC5jb3VudD09PTAmJihsLnN0eWxlc2hlZXRzJiZjbihsLGwuc3R5bGVzaGVldHMpLGwudW5zdXNwZW5kKSl7dmFyIG49bC51bnN1c3BlbmQ7bC51bnN1c3BlbmQ9bnVsbCxuKCl9fSwobC5pbWdCeXRlcz5hYz81MDo4MDApK3QpO3JldHVybiBsLnVuc3VzcGVuZD1hLGZ1bmN0aW9uKCl7bC51bnN1c3BlbmQ9bnVsbCxjbGVhclRpbWVvdXQoZSksY2xlYXJUaW1lb3V0KHUpfX06bnVsbH1mdW5jdGlvbiBSbigpe2lmKHRoaXMuY291bnQtLSx0aGlzLmNvdW50PT09MCYmKHRoaXMuaW1nQ291bnQ9PT0wfHwhdGhpcy53YWl0aW5nRm9ySW1hZ2VzKSl7aWYodGhpcy5zdHlsZXNoZWV0cyljbih0aGlzLHRoaXMuc3R5bGVzaGVldHMpO2Vsc2UgaWYodGhpcy51bnN1c3BlbmQpe3ZhciBsPXRoaXMudW5zdXNwZW5kO3RoaXMudW5zdXNwZW5kPW51bGwsbCgpfX19dmFyIEJuPW51bGw7ZnVuY3Rpb24gY24obCx0KXtsLnN0eWxlc2hlZXRzPW51bGwsbC51bnN1c3BlbmQhPT1udWxsJiYobC5jb3VudCsrLEJuPW5ldyBNYXAsdC5mb3JFYWNoKFdyLGwpLEJuPW51bGwsUm4uY2FsbChsKSl9ZnVuY3Rpb24gV3IobCx0KXtpZighKHQuc3RhdGUubG9hZGluZyY0KSl7dmFyIGE9Qm4uZ2V0KGwpO2lmKGEpdmFyIGU9YS5nZXQobnVsbCk7ZWxzZXthPW5ldyBNYXAsQm4uc2V0KGwsYSk7Zm9yKHZhciB1PWwucXVlcnlTZWxlY3RvckFsbCgibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0iKSxuPTA7bjx1Lmxlbmd0aDtuKyspe3ZhciBpPXVbbl07KGkubm9kZU5hbWU9PT0iTElOSyJ8fGkuZ2V0QXR0cmlidXRlKCJtZWRpYSIpIT09Im5vdCBhbGwiKSYmKGEuc2V0KGkuZGF0YXNldC5wcmVjZWRlbmNlLGkpLGU9aSl9ZSYmYS5zZXQobnVsbCxlKX11PXQuaW5zdGFuY2UsaT11LmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIiksbj1hLmdldChpKXx8ZSxuPT09ZSYmYS5zZXQobnVsbCx1KSxhLnNldChpLHUpLHRoaXMuY291bnQrKyxlPVJuLmJpbmQodGhpcyksdS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlKSx1LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixlKSxuP24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodSxuLm5leHRTaWJsaW5nKToobD1sLm5vZGVUeXBlPT09OT9sLmhlYWQ6bCxsLmluc2VydEJlZm9yZSh1LGwuZmlyc3RDaGlsZCkpLHQuc3RhdGUubG9hZGluZ3w9NH19dmFyIG51PXskJHR5cGVvZjp5dCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2N1cnJlbnRWYWx1ZTpvYSxfY3VycmVudFZhbHVlMjpvYSxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gJHIobCx0LGEsZSx1LG4saSxjLGYpe3RoaXMudGFnPTEsdGhpcy5jb250YWluZXJJbmZvPWwsdGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMubmV4dD10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD10aGlzLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV4cGlyYXRpb25UaW1lcz1faSgtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLnNoZWxsU3VzcGVuZENvdW50ZXI9dGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLndhcm1MYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9X2koMCksdGhpcy5oaWRkZW5VcGRhdGVzPV9pKG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1lLHRoaXMub25VbmNhdWdodEVycm9yPXUsdGhpcy5vbkNhdWdodEVycm9yPW4sdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9aSx0aGlzLnBvb2xlZENhY2hlPW51bGwsdGhpcy5wb29sZWRDYWNoZUxhbmVzPTAsdGhpcy5mb3JtU3RhdGU9Zix0aGlzLmluY29tcGxldGVUcmFuc2l0aW9ucz1uZXcgTWFwfWZ1bmN0aW9uIEJtKGwsdCxhLGUsdSxuLGksYyxmLGQsdix5KXtyZXR1cm4gbD1uZXcgJHIobCx0LGEsaSxmLGQsdix5LGMpLHQ9MSxuPT09ITAmJih0fD0yNCksbj1VbCgzLG51bGwsbnVsbCx0KSxsLmN1cnJlbnQ9bixuLnN0YXRlTm9kZT1sLHQ9eWYoKSx0LnJlZkNvdW50KyssbC5wb29sZWRDYWNoZT10LHQucmVmQ291bnQrKyxuLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6ZSxpc0RlaHlkcmF0ZWQ6YSxjYWNoZTp0fSxwZihuKSxsfWZ1bmN0aW9uIHFtKGwpe3JldHVybiBsPyhsPVphLGwpOlphfWZ1bmN0aW9uIFltKGwsdCxhLGUsdSxuKXt1PXFtKHUpLGUuY29udGV4dD09PW51bGw/ZS5jb250ZXh0PXU6ZS5wZW5kaW5nQ29udGV4dD11LGU9THQodCksZS5wYXlsb2FkPXtlbGVtZW50OmF9LG49bj09PXZvaWQgMD9udWxsOm4sbiE9PW51bGwmJihlLmNhbGxiYWNrPW4pLGE9S3QobCxlLHQpLGEhPT1udWxsJiYoTWwoYSxsLHQpLFhlKGEsbCx0KSl9ZnVuY3Rpb24ga3MobCx0KXtpZihsPWwubWVtb2l6ZWRTdGF0ZSxsIT09bnVsbCYmbC5kZWh5ZHJhdGVkIT09bnVsbCl7dmFyIGE9bC5yZXRyeUxhbmU7bC5yZXRyeUxhbmU9YSE9PTAmJmE8dD9hOnR9fWZ1bmN0aW9uIEtmKGwsdCl7a3MobCx0KSwobD1sLmFsdGVybmF0ZSkmJmtzKGwsdCl9ZnVuY3Rpb24gR20obCl7aWYobC50YWc9PT0xM3x8bC50YWc9PT0zMSl7dmFyIHQ9emEobCw2NzEwODg2NCk7dCE9PW51bGwmJk1sKHQsbCw2NzEwODg2NCksS2YobCw2NzEwODg2NCl9fWZ1bmN0aW9uIEZzKGwpe2lmKGwudGFnPT09MTN8fGwudGFnPT09MzEpe3ZhciB0PUJsKCk7dD10Zih0KTt2YXIgYT16YShsLHQpO2EhPT1udWxsJiZNbChhLGwsdCksS2YobCx0KX19dmFyIHFuPSEwO2Z1bmN0aW9uIGtyKGwsdCxhLGUpe3ZhciB1PU8uVDtPLlQ9bnVsbDt2YXIgbj1HLnA7dHJ5e0cucD0yLEpmKGwsdCxhLGUpfWZpbmFsbHl7Ry5wPW4sTy5UPXV9fWZ1bmN0aW9uIEZyKGwsdCxhLGUpe3ZhciB1PU8uVDtPLlQ9bnVsbDt2YXIgbj1HLnA7dHJ5e0cucD04LEpmKGwsdCxhLGUpfWZpbmFsbHl7Ry5wPW4sTy5UPXV9fWZ1bmN0aW9uIEpmKGwsdCxhLGUpe2lmKHFuKXt2YXIgdT1rYyhlKTtpZih1PT09bnVsbClsYyhsLHQsZSxZbixhKSxJcyhsLGUpO2Vsc2UgaWYoUHIodSxsLHQsYSxlKSllLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYoSXMobCxlKSx0JjQmJi0xPElyLmluZGV4T2YobCkpe2Zvcig7dSE9PW51bGw7KXt2YXIgbj1tZSh1KTtpZihuIT09bnVsbClzd2l0Y2gobi50YWcpe2Nhc2UgMzppZihuPW4uc3RhdGVOb2RlLG4uY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIGk9aWEobi5wZW5kaW5nTGFuZXMpO2lmKGkhPT0wKXt2YXIgYz1uO2ZvcihjLnBlbmRpbmdMYW5lc3w9MixjLmVudGFuZ2xlZExhbmVzfD0yO2k7KXt2YXIgZj0xPDwzMS1SbChpKTtjLmVudGFuZ2xlbWVudHNbMV18PWYsaSY9fmZ9Y3QobiksKFkmNik9PT0wJiYoeG49TmwoKSs1MDAsZ3UoMCwhMSkpfX1icmVhaztjYXNlIDMxOmNhc2UgMTM6Yz16YShuLDIpLGMhPT1udWxsJiZNbChjLG4sMiksa24oKSxLZihuLDIpfWlmKG49a2MoZSksbj09PW51bGwmJmxjKGwsdCxlLFluLGEpLG49PT11KWJyZWFrO3U9bn11IT09bnVsbCYmZS5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIGxjKGwsdCxlLG51bGwsYSl9fWZ1bmN0aW9uIGtjKGwpe3JldHVybiBsPW5mKGwpLHdmKGwpfXZhciBZbj1udWxsO2Z1bmN0aW9uIHdmKGwpe2lmKFluPW51bGwsbD1xYShsKSxsIT09bnVsbCl7dmFyIHQ9ZnUobCk7aWYodD09PW51bGwpbD1udWxsO2Vsc2V7dmFyIGE9dC50YWc7aWYoYT09PTEzKXtpZihsPXUwKHQpLGwhPT1udWxsKXJldHVybiBsO2w9bnVsbH1lbHNlIGlmKGE9PT0zMSl7aWYobD1uMCh0KSxsIT09bnVsbClyZXR1cm4gbDtsPW51bGx9ZWxzZSBpZihhPT09Myl7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gdC50YWc9PT0zP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtsPW51bGx9ZWxzZSB0IT09bCYmKGw9bnVsbCl9fXJldHVybiBZbj1sLG51bGx9ZnVuY3Rpb24gWG0obCl7c3dpdGNoKGwpe2Nhc2UiYmVmb3JldG9nZ2xlIjpjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2hjYW5jZWwiOmNhc2UidG91Y2hlbmQiOmNhc2UidG91Y2hzdGFydCI6Y2FzZSJ2b2x1bWVjaGFuZ2UiOmNhc2UiY2hhbmdlIjpjYXNlInNlbGVjdGlvbmNoYW5nZSI6Y2FzZSJ0ZXh0SW5wdXQiOmNhc2UiY29tcG9zaXRpb25zdGFydCI6Y2FzZSJjb21wb3NpdGlvbmVuZCI6Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6Y2FzZSJiZWZvcmVpbnB1dCI6Y2FzZSJibHVyIjpjYXNlImZ1bGxzY3JlZW5jaGFuZ2UiOmNhc2UiZm9jdXMiOmNhc2UiaGFzaGNoYW5nZSI6Y2FzZSJwb3BzdGF0ZSI6Y2FzZSJzZWxlY3QiOmNhc2Uic2VsZWN0c3RhcnQiOnJldHVybiAyO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2V4aXQiOmNhc2UiZHJhZ2xlYXZlIjpjYXNlImRyYWdvdmVyIjpjYXNlIm1vdXNlbW92ZSI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJzY3JvbGwiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gODtjYXNlIm1lc3NhZ2UiOnN3aXRjaChYZCgpKXtjYXNlIG8wOnJldHVybiAyO2Nhc2UgczA6cmV0dXJuIDg7Y2FzZSBkbjpjYXNlIFFkOnJldHVybiAzMjtjYXNlIG0wOnJldHVybiAyNjg0MzU0NTY7ZGVmYXVsdDpyZXR1cm4gMzJ9ZGVmYXVsdDpyZXR1cm4gMzJ9fXZhciBGYz0hMSxXdD1udWxsLCR0PW51bGwsa3Q9bnVsbCxpdT1uZXcgTWFwLGN1PW5ldyBNYXAscXQ9W10sSXI9Im1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBJcyhsLHQpe3N3aXRjaChsKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOld0PW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjokdD1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0IjprdD1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6aXUuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y3UuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gX2UobCx0LGEsZSx1LG4pe3JldHVybiBsPT09bnVsbHx8bC5uYXRpdmVFdmVudCE9PW4/KGw9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTphLGV2ZW50U3lzdGVtRmxhZ3M6ZSxuYXRpdmVFdmVudDpuLHRhcmdldENvbnRhaW5lcnM6W3VdfSx0IT09bnVsbCYmKHQ9bWUodCksdCE9PW51bGwmJkdtKHQpKSxsKToobC5ldmVudFN5c3RlbUZsYWdzfD1lLHQ9bC50YXJnZXRDb250YWluZXJzLHUhPT1udWxsJiZ0LmluZGV4T2YodSk9PT0tMSYmdC5wdXNoKHUpLGwpfWZ1bmN0aW9uIFByKGwsdCxhLGUsdSl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIFd0PV9lKFd0LGwsdCxhLGUsdSksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiAkdD1fZSgkdCxsLHQsYSxlLHUpLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4ga3Q9X2Uoa3QsbCx0LGEsZSx1KSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgbj11LnBvaW50ZXJJZDtyZXR1cm4gaXUuc2V0KG4sX2UoaXUuZ2V0KG4pfHxudWxsLGwsdCxhLGUsdSkpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBuPXUucG9pbnRlcklkLGN1LnNldChuLF9lKGN1LmdldChuKXx8bnVsbCxsLHQsYSxlLHUpKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBRbShsKXt2YXIgdD1xYShsLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBhPWZ1KHQpO2lmKGEhPT1udWxsKXtpZih0PWEudGFnLHQ9PT0xMyl7aWYodD11MChhKSx0IT09bnVsbCl7bC5ibG9ja2VkT249dCxCbyhsLnByaW9yaXR5LGZ1bmN0aW9uKCl7RnMoYSl9KTtyZXR1cm59fWVsc2UgaWYodD09PTMxKXtpZih0PW4wKGEpLHQhPT1udWxsKXtsLmJsb2NrZWRPbj10LEJvKGwucHJpb3JpdHksZnVuY3Rpb24oKXtGcyhhKX0pO3JldHVybn19ZWxzZSBpZih0PT09MyYmYS5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7bC5ibG9ja2VkT249YS50YWc9PT0zP2Euc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtyZXR1cm59fX1sLmJsb2NrZWRPbj1udWxsfWZ1bmN0aW9uIGZuKGwpe2lmKGwuYmxvY2tlZE9uIT09bnVsbClyZXR1cm4hMTtmb3IodmFyIHQ9bC50YXJnZXRDb250YWluZXJzOzA8dC5sZW5ndGg7KXt2YXIgYT1rYyhsLm5hdGl2ZUV2ZW50KTtpZihhPT09bnVsbCl7YT1sLm5hdGl2ZUV2ZW50O3ZhciBlPW5ldyBhLmNvbnN0cnVjdG9yKGEudHlwZSxhKTt2Yz1lLGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZSksdmM9bnVsbH1lbHNlIHJldHVybiB0PW1lKGEpLHQhPT1udWxsJiZHbSh0KSxsLmJsb2NrZWRPbj1hLCExO3Quc2hpZnQoKX1yZXR1cm4hMH1mdW5jdGlvbiBQcyhsLHQsYSl7Zm4obCkmJmEuZGVsZXRlKHQpfWZ1bmN0aW9uIGx2KCl7RmM9ITEsV3QhPT1udWxsJiZmbihXdCkmJihXdD1udWxsKSwkdCE9PW51bGwmJmZuKCR0KSYmKCR0PW51bGwpLGt0IT09bnVsbCYmZm4oa3QpJiYoa3Q9bnVsbCksaXUuZm9yRWFjaChQcyksY3UuZm9yRWFjaChQcyl9ZnVuY3Rpb24gS3UobCx0KXtsLmJsb2NrZWRPbj09PXQmJihsLmJsb2NrZWRPbj1udWxsLEZjfHwoRmM9ITAsY2wudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhjbC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxsdikpKX12YXIgSnU9bnVsbDtmdW5jdGlvbiBsMChsKXtKdSE9PWwmJihKdT1sLGNsLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soY2wudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZnVuY3Rpb24oKXtKdT09PWwmJihKdT1udWxsKTtmb3IodmFyIHQ9MDt0PGwubGVuZ3RoO3QrPTMpe3ZhciBhPWxbdF0sZT1sW3QrMV0sdT1sW3QrMl07aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpe2lmKHdmKGV8fGEpPT09bnVsbCljb250aW51ZTticmVha312YXIgbj1tZShhKTtuIT09bnVsbCYmKGwuc3BsaWNlKHQsMyksdC09MyxIYyhuLHtwZW5kaW5nOiEwLGRhdGE6dSxtZXRob2Q6YS5tZXRob2QsYWN0aW9uOmV9LGUsdSkpfX0pKX1mdW5jdGlvbiBvZShsKXtmdW5jdGlvbiB0KGYpe3JldHVybiBLdShmLGwpfVd0IT09bnVsbCYmS3UoV3QsbCksJHQhPT1udWxsJiZLdSgkdCxsKSxrdCE9PW51bGwmJkt1KGt0LGwpLGl1LmZvckVhY2godCksY3UuZm9yRWFjaCh0KTtmb3IodmFyIGE9MDthPHF0Lmxlbmd0aDthKyspe3ZhciBlPXF0W2FdO2UuYmxvY2tlZE9uPT09bCYmKGUuYmxvY2tlZE9uPW51bGwpfWZvcig7MDxxdC5sZW5ndGgmJihhPXF0WzBdLGEuYmxvY2tlZE9uPT09bnVsbCk7KVFtKGEpLGEuYmxvY2tlZE9uPT09bnVsbCYmcXQuc2hpZnQoKTtpZihhPShsLm93bmVyRG9jdW1lbnR8fGwpLiQkcmVhY3RGb3JtUmVwbGF5LGEhPW51bGwpZm9yKGU9MDtlPGEubGVuZ3RoO2UrPTMpe3ZhciB1PWFbZV0sbj1hW2UrMV0saT11W1RsXXx8bnVsbDtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIilpfHxsMChhKTtlbHNlIGlmKGkpe3ZhciBjPW51bGw7aWYobiYmbi5oYXNBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSl7aWYodT1uLGk9bltUbF18fG51bGwpYz1pLmZvcm1BY3Rpb247ZWxzZSBpZih3Zih1KSE9PW51bGwpY29udGludWV9ZWxzZSBjPWkuYWN0aW9uO3R5cGVvZiBjPT0iZnVuY3Rpb24iP2FbZSsxXT1jOihhLnNwbGljZShlLDMpLGUtPTMpLGwwKGEpfX19ZnVuY3Rpb24gam0oKXtmdW5jdGlvbiBsKG4pe24uY2FuSW50ZXJjZXB0JiZuLmluZm89PT0icmVhY3QtdHJhbnNpdGlvbiImJm4uaW50ZXJjZXB0KHtoYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3JldHVybiB1PWl9KX0sZm9jdXNSZXNldDoibWFudWFsIixzY3JvbGw6Im1hbnVhbCJ9KX1mdW5jdGlvbiB0KCl7dSE9PW51bGwmJih1KCksdT1udWxsKSxlfHxzZXRUaW1lb3V0KGEsMjApfWZ1bmN0aW9uIGEoKXtpZighZSYmIW5hdmlnYXRpb24udHJhbnNpdGlvbil7dmFyIG49bmF2aWdhdGlvbi5jdXJyZW50RW50cnk7biYmbi51cmwhPW51bGwmJm5hdmlnYXRpb24ubmF2aWdhdGUobi51cmwse3N0YXRlOm4uZ2V0U3RhdGUoKSxpbmZvOiJyZWFjdC10cmFuc2l0aW9uIixoaXN0b3J5OiJyZXBsYWNlIn0pfX1pZih0eXBlb2YgbmF2aWdhdGlvbj09Im9iamVjdCIpe3ZhciBlPSExLHU9bnVsbDtyZXR1cm4gbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJuYXZpZ2F0ZSIsbCksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKCJuYXZpZ2F0ZXN1Y2Nlc3MiLHQpLG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigibmF2aWdhdGVlcnJvciIsdCksc2V0VGltZW91dChhLDEwMCksZnVuY3Rpb24oKXtlPSEwLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibmF2aWdhdGUiLGwpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibmF2aWdhdGVzdWNjZXNzIix0KSxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm5hdmlnYXRlZXJyb3IiLHQpLHUhPT1udWxsJiYodSgpLHU9bnVsbCl9fX1mdW5jdGlvbiBXZihsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bH1Qbi5wcm90b3R5cGUucmVuZGVyPVdmLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obCl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQ9PT1udWxsKXRocm93IEVycm9yKHAoNDA5KSk7dmFyIGE9dC5jdXJyZW50LGU9QmwoKTtZbShhLGUsbCx0LG51bGwsbnVsbCl9O1BuLnByb3RvdHlwZS51bm1vdW50PVdmLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5faW50ZXJuYWxSb290O2lmKGwhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1sLmNvbnRhaW5lckluZm87WW0obC5jdXJyZW50LDIsbnVsbCxsLG51bGwsbnVsbCksa24oKSx0W3NlXT1udWxsfX07ZnVuY3Rpb24gUG4obCl7dGhpcy5faW50ZXJuYWxSb290PWx9UG4ucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGwpe2lmKGwpe3ZhciB0PXkwKCk7bD17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmwscHJpb3JpdHk6dH07Zm9yKHZhciBhPTA7YTxxdC5sZW5ndGgmJnQhPT0wJiZ0PHF0W2FdLnByaW9yaXR5O2ErKyk7cXQuc3BsaWNlKGEsMCxsKSxhPT09MCYmUW0obCl9fTt2YXIgdDA9YTAudmVyc2lvbjtpZih0MCE9PSIxOS4yLjYiKXRocm93IEVycm9yKHAoNTI3LHQwLCIxOS4yLjYiKSk7Ry5maW5kRE9NTm9kZT1mdW5jdGlvbihsKXt2YXIgdD1sLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBsLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihwKDE4OCkpOihsPU9iamVjdC5rZXlzKGwpLmpvaW4oIiwiKSxFcnJvcihwKDI2OCxsKSkpO3JldHVybiBsPU5kKHQpLGw9bCE9PW51bGw/aTAobCk6bnVsbCxsPWw9PT1udWxsP251bGw6bC5zdGF0ZU5vZGUsbH07dmFyIHR2PXtidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTkuMi42IixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20iLGN1cnJlbnREaXNwYXRjaGVyUmVmOk8scmVjb25jaWxlclZlcnNpb246IjE5LjIuNiJ9O2lmKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX188InUiJiYoRGU9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLCFEZS5pc0Rpc2FibGVkJiZEZS5zdXBwb3J0c0ZpYmVyKSl0cnl7b3U9RGUuaW5qZWN0KHR2KSxDbD1EZX1jYXRjaHt9dmFyIERlO2xpLmNyZWF0ZVJvb3Q9ZnVuY3Rpb24obCx0KXtpZighZTAobCkpdGhyb3cgRXJyb3IocCgyOTkpKTt2YXIgYT0hMSxlPSIiLHU9TjEsbj1DMSxpPVIxO3JldHVybiB0IT1udWxsJiYodC51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihhPSEwKSx0LmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihlPXQuaWRlbnRpZmllclByZWZpeCksdC5vblVuY2F1Z2h0RXJyb3IhPT12b2lkIDAmJih1PXQub25VbmNhdWdodEVycm9yKSx0Lm9uQ2F1Z2h0RXJyb3IhPT12b2lkIDAmJihuPXQub25DYXVnaHRFcnJvciksdC5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihpPXQub25SZWNvdmVyYWJsZUVycm9yKSksdD1CbShsLDEsITEsbnVsbCxudWxsLGEsZSxudWxsLHUsbixpLGptKSxsW3NlXT10LmN1cnJlbnQsWmYobCksbmV3IFdmKHQpfTtsaS5oeWRyYXRlUm9vdD1mdW5jdGlvbihsLHQsYSl7aWYoIWUwKGwpKXRocm93IEVycm9yKHAoMjk5KSk7dmFyIGU9ITEsdT0iIixuPU4xLGk9QzEsYz1SMSxmPW51bGw7cmV0dXJuIGEhPW51bGwmJihhLnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKGU9ITApLGEuaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKHU9YS5pZGVudGlmaWVyUHJlZml4KSxhLm9uVW5jYXVnaHRFcnJvciE9PXZvaWQgMCYmKG49YS5vblVuY2F1Z2h0RXJyb3IpLGEub25DYXVnaHRFcnJvciE9PXZvaWQgMCYmKGk9YS5vbkNhdWdodEVycm9yKSxhLm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKGM9YS5vblJlY292ZXJhYmxlRXJyb3IpLGEuZm9ybVN0YXRlIT09dm9pZCAwJiYoZj1hLmZvcm1TdGF0ZSkpLHQ9Qm0obCwxLCEwLHQsYT8/bnVsbCxlLHUsZixuLGksYyxqbSksdC5jb250ZXh0PXFtKG51bGwpLGE9dC5jdXJyZW50LGU9QmwoKSxlPXRmKGUpLHU9THQoZSksdS5jYWxsYmFjaz1udWxsLEt0KGEsdSxlKSxhPWUsdC5jdXJyZW50LmxhbmVzPWEsbXUodCxhKSxjdCh0KSxsW3NlXT10LmN1cnJlbnQsWmYobCksbmV3IFBuKHQpfTtsaS52ZXJzaW9uPSIxOS4yLjYifSk7dmFyIEttPWx0KChOdixMbSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gVm0oKXtpZighKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18+InUifHx0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFIT0iZnVuY3Rpb24iKSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKFZtKX1jYXRjaChsKXtjb25zb2xlLmVycm9yKGwpfX1WbSgpLExtLmV4cG9ydHM9Wm0oKX0pO3ZhciBGbT1sdChpaT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbXY9U3ltYm9sLmZvcigicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnQiKSxkdj1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpO2Z1bmN0aW9uIGttKGwsdCxhKXt2YXIgZT1udWxsO2lmKGEhPT12b2lkIDAmJihlPSIiK2EpLHQua2V5IT09dm9pZCAwJiYoZT0iIit0LmtleSksImtleSJpbiB0KXthPXt9O2Zvcih2YXIgdSBpbiB0KXUhPT0ia2V5IiYmKGFbdV09dFt1XSl9ZWxzZSBhPXQ7cmV0dXJuIHQ9YS5yZWYseyQkdHlwZW9mOm12LHR5cGU6bCxrZXk6ZSxyZWY6dCE9PXZvaWQgMD90Om51bGwscHJvcHM6YX19aWkuRnJhZ21lbnQ9ZHY7aWkuanN4PWttO2lpLmpzeHM9a219KTt2YXIgRXU9bHQoKEJ2LEltKT0+eyJ1c2Ugc3RyaWN0IjtJbS5leHBvcnRzPUZtKCl9KTt2YXIgdGQ9TWEoS20oKSwxKTt2YXIgT2w9TWEoT3UoKSwxKTt2YXIga2Y9e3BvbGVQYWlyczozLGhhbGxTcGFjaW5nTTo4MCxoYWxsT3JkZXI6WzEsMiwzXSxwaGFzZU9yZGVyOlsiVSIsIlciLCJWIl0sc2xvdENvdW50OjE4LGRpcmVjdGlvbjoiQ1ciLGhhbGxPZmZzZXRNOjAsaGFsbEludmVydGVkOiEwfSxhdj1uZXcgTWFwKFtbIjEtMy0yLTYtNC01IixbMSwiXHVDODE1XHVDMEMxXHVCMTdDXHVCOUFDIFx1QzgxNVx1QkMyOVx1RDVBNSBcdUFFMzBcdUM5MDAgKDdcdUJDODhcdUM3NTggXHVDMkUwXHVENjM4IFx1QkMxOFx1QzgwNCkiXV0sWyIzLTItNi00LTUtMSIsWzIsIlx1QzgxNVx1QzBDMVx1QjE3Q1x1QjlBQyBcdUM4MTVcdUJDMjlcdUQ1QTVceEI3NjBceEIwIFx1QzcwNFx1QzBDMSBcdUM1NUVcdUMxMkMiXV0sWyIyLTYtNC01LTEtMyIsWzMsIlx1QzgxNVx1QzBDMVx1QjE3Q1x1QjlBQyBcdUM4MTVcdUJDMjlcdUQ1QTVceEI3MTIwXHhCMCBcdUM3MDRcdUMwQzEgXHVDNTVFXHVDMTJDIl1dLFsiMS01LTQtNi0yLTMiLFs0LCJcdUM4MTVcdUMwQzFcdUIxN0NcdUI5QUMgXHVDNUVEXHVCQzI5XHVENUE1IFx1QUUzMFx1QzkwMCJdXSxbIjUtNC02LTItMy0xIixbNSwiXHVDODE1XHVDMEMxXHVCMTdDXHVCOUFDIFx1QzVFRFx1QkMyOVx1RDVBNVx4Qjc2MFx4QjAgXHVDNzA0XHVDMEMxIFx1QzU1RVx1QzEyQyJdXSxbIjQtNi0yLTMtMS01IixbNiwiXHVDODE1XHVDMEMxXHVCMTdDXHVCOUFDIFx1QzVFRFx1QkMyOVx1RDVBNVx4QjcxMjBceEIwIFx1QzcwNFx1QzBDMSBcdUM1NUVcdUMxMkMiXV0sWyI2LTQtNS0xLTMtMiIsWzcsIlx1QzJFNFx1QUUzMCBcdUM4MTVcdUJDMjlcdUQ1QTUgXHVBRTMwXHVDOTAwIChhY3RpdmUtbG93KSJdXSxbIjQtNS0xLTMtMi02IixbOCwiXHVDMkU0XHVBRTMwIFx1QzgxNVx1QkMyOVx1RDVBNVx4Qjc2MFx4QjAgXHVDNzA0XHVDMEMxIFx1QzU1RVx1QzEyQyJdXSxbIjUtMS0zLTItNi00IixbOSwiXHVDMkU0XHVBRTMwIFx1QzgxNVx1QkMyOVx1RDVBNVx4QjcxMjBceEIwIFx1QzcwNFx1QzBDMSBcdUM1NUVcdUMxMkMiXV0sWyI2LTItMy0xLTUtNCIsWzEwLCJcdUMyRTRcdUFFMzAgXHVDNUVEXHVCQzI5XHVENUE1IFx1QUUzMFx1QzkwMCAoYWN0aXZlLWxvdykiXV0sWyIyLTMtMS01LTQtNiIsWzExLCJcdUMyRTRcdUFFMzAgXHVDNUVEXHVCQzI5XHVENUE1XHhCNzYwXHhCMCBcdUM3MDRcdUMwQzEgXHVDNTVFXHVDMTJDIl1dLFsiMy0xLTUtNC02LTIiLFsxMiwiXHVDMkU0XHVBRTMwIFx1QzVFRFx1QkMyOVx1RDVBNVx4QjcxMjBceEIwIFx1QzcwNFx1QzBDMSBcdUM1NUVcdUMxMkMiXV1dKSxqPWw9PihsJTM2MCszNjApJTM2MCxlYT0obCx0KT0+KGwtdCs1NDApJTM2MC0xODAsYWk9bD0+aigtbCksd209bD0+aigtbCksRmY9bD0+bD09PSJDVyI/MTotMTtmdW5jdGlvbiBlaShsKXtyZXR1cm4gbFswXSo0K2xbMV0qMitsWzJdfWZ1bmN0aW9uIFN1KGwpe3JldHVybiBsWzJdKjQrbFsxXSoyK2xbMF19ZnVuY3Rpb24gdWkobCl7cmV0dXJuW2w+PjImMSxsPj4xJjEsbCYxXX1mdW5jdGlvbiBuaShsLHQsYSxlLHUpe2xldCBuPWUubWFwKGk9PntsZXQgYz1hKihsLWktdCk7cmV0dXJuIE1hdGguY29zKGMqTWF0aC5QSS8xODApPj0wPzE6MH0pO3JldHVybiB1P24ubWFwKGk9PjEtaSk6bn1mdW5jdGlvbiBldihsLHQpe2xldCBhPVtqKDIqbCksaihsKSwwXSxlPVswLDAsMF07cmV0dXJuIGEuZm9yRWFjaCgodSxuKT0+e2VbdFtuXS0xXT11fSksZX1mdW5jdGlvbiBKbShsLHQpe2xldCBhPVswLGoobCksaigyKmwpXSxlPVswLDAsMF07cmV0dXJuIGEuZm9yRWFjaCgodSxuKT0+e2VbdFtuXS0xXT11fSksZX1mdW5jdGlvbiBXbShsKXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGwubWFwKCh0LGEpPT5bdCxhKjEyMF0pKX1mdW5jdGlvbiB1dihsKXtsZXQgdD1XbShsKTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFsiVSIsIlYiLCJXIl0ubWFwKGE9PlthLGooMTIwLXRbYV0pXSkpfWZ1bmN0aW9uIElmKGwsdCl7bGV0IGE9aihsKnQpLGU9TWF0aC5hYnMoZWEoYSwxMjApKSx1PU1hdGguYWJzKGVhKGEsMjQwKSk7cmV0dXJuIGU8PXU/MTIwOjI0MH1mdW5jdGlvbiBudihsLHQsYT0wKXtsZXQgZT1sLWE7cmV0dXJuIGoodD09PSJDVyI/LWU6ZSl9ZnVuY3Rpb24gaXYobCx0LGE9MCl7cmV0dXJuIGooYSsodD09PSJDVyI/LWw6bCkpfWZ1bmN0aW9uIGN2KGwsdCl7bGV0IGE9WyJVIiwiViIsIlciXS5maW5kKGU9PmUhPT1sJiZlIT09dCk7cmV0dXJue2hpZ2g6bCxsb3c6dCxmbG9hdGluZzphfX1mdW5jdGlvbiAkZihsLHQpe2xldCBhPXRbbC5oaWdoXSpNYXRoLlBJLzE4MCxlPXRbbC5sb3ddKk1hdGguUEkvMTgwLHU9TWF0aC5jb3MoYSktTWF0aC5jb3MoZSksbj1NYXRoLnNpbihhKS1NYXRoLnNpbihlKTtyZXR1cm4gaihNYXRoLmF0YW4yKG4sdSkqMTgwL01hdGguUEkpfWZ1bmN0aW9uIGZ2KGwsdCxhLGUpe2xldCB1PVtdO3QuZm9yRWFjaCgoaSxjKT0+e2xldCBmPWwqKGkrYSk7WzkwLDI3MF0uZm9yRWFjaChkPT51LnB1c2goe2FuZ2xlOmooZitkKSxzZW5zb3I6YysxfSkpfSksdS5zb3J0KChpLGMpPT5pLmFuZ2xlLWMuYW5nbGUpO2xldCBuPVtdO3JldHVybiB1LmZvckVhY2goaT0+e2xldCBjPW4uYXQoLTEpO2MmJk1hdGguYWJzKGMuYW5nbGUtaS5hbmdsZSk8MWUtNj9jLnNlbnNvcnMucHVzaChpLnNlbnNvcik6bi5wdXNoKHthbmdsZTppLmFuZ2xlLHNlbnNvcnM6W2kuc2Vuc29yXX0pfSksbi5sZW5ndGg+MSYmblswXS5hbmdsZSszNjAtbi5hdCgtMSkuYW5nbGU8MWUtNiYmKG5bMF0uc2Vuc29ycy5wdXNoKC4uLm4uYXQoLTEpLnNlbnNvcnMpLG4ucG9wKCkpLG4ubWFwKChpLGMpPT57bGV0IGY9blsoYysxKSVuLmxlbmd0aF0sZD1qKGYuYW5nbGUtaS5hbmdsZSksdj1qKGkuYW5nbGUrZC8yKSx5PW5pKHYvbCxhLGwsdCxlKTtyZXR1cm57c3RhcnRFOmkuYW5nbGUsd2lkdGhFOmQsY29kZTplaSh5KSxzdGFydFNlbnNvcnM6Wy4uLmkuc2Vuc29yc10uc29ydCgpLGVuZFNlbnNvcnM6Wy4uLmYuc2Vuc29yc10uc29ydCgpfX0pfWZ1bmN0aW9uIG92KGwsdCxhLGUsdSxuKXtsZXQgaT1sPT09IkNDVyI/MTotMSxjPVsiVSIsIlYiLCJXIl0sZj1jLmZsYXRNYXAoeT0+Yy5maWx0ZXIobT0+bSE9PXkpLm1hcChtPT5jdih5LG0pKSksZD1uZXcgTWFwO2ZvcihsZXQgeT0wO3k8MzYwMDt5Kz0xKXtsZXQgbT15Ki4xLHI9ZWkobmkobSx0LGEsZSxuKSk7aWYocj09PTB8fHI9PT03KWNvbnRpbnVlO2xldCBFPWooYSptKSpNYXRoLlBJLzE4MCx6PWQuZ2V0KHIpPz9bMCwwXTt6WzBdKz1NYXRoLmNvcyhFKSx6WzFdKz1NYXRoLnNpbihFKSxkLnNldChyLHopfWxldCB2PW5ldyBNYXA7cmV0dXJuIGQuZm9yRWFjaCgoW3ksbV0scik9PntsZXQgRT1qKE1hdGguYXRhbjIobSx5KSoxODAvTWF0aC5QSSksej1qKEUraSo5MCksVD1mLnJlZHVjZSgocyxvKT0+TWF0aC5hYnMoZWEoJGYobyx1KSx6KSk8TWF0aC5hYnMoZWEoJGYocyx1KSx6KSk/bzpzKTt2LnNldChyLFQpfSksdn1mdW5jdGlvbiBzdihsLHQsYSxlLHUsbil7bGV0IGk9bD09PSJDQ1ciPzE6LTEsYz1bXTtmb3IobGV0IGY9MDtmPDM2MDAmJmMubGVuZ3RoPDY7Zis9MSl7bGV0IGQ9aihuL2EraSpmKi4xKSx2PWVpKG5pKGQsdCxhLGUsdSkpO3YhPT0wJiZ2IT09NyYmIWMuaW5jbHVkZXModikmJmMucHVzaCh2KX1yZXR1cm4gY312YXIgdGk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jb25maWc9dCx0aGlzLmRpc3BsYXlIYWxsQW5nbGVzPWV2KHQuaGFsbFNwYWNpbmdNLHQuaGFsbE9yZGVyKSx0aGlzLmhhbGxBbmdsZXM9Sm0odC5oYWxsU3BhY2luZ00sdC5oYWxsT3JkZXIpLHRoaXMuZGlzcGxheVBoYXNlQW5nbGVzPVdtKHQucGhhc2VPcmRlciksdGhpcy5waGFzZUFuZ2xlcz11dih0LnBoYXNlT3JkZXIpLHRoaXMucGhhc2VSZWZlcmVuY2VFPXRoaXMuZGlzcGxheVBoYXNlQW5nbGVzLlUsdGhpcy5yZWZlcmVuY2VTcGFjaW5nRT1JZih0LnBvbGVQYWlycyx0LmhhbGxTcGFjaW5nTSksdGhpcy5ub21pbmFsSGFsbEFuZ2xlcz1KbSh0aGlzLnJlZmVyZW5jZVNwYWNpbmdFL3QucG9sZVBhaXJzLHQuaGFsbE9yZGVyKSx0aGlzLmNvbnRyb2xEaXJlY3Rpb249dC5kaXJlY3Rpb249PT0iQ1ciPyJDQ1ciOiJDVyIsdGhpcy5jb21tdXRhdGlvbk1hcD1vdih0aGlzLmNvbnRyb2xEaXJlY3Rpb24sdC5oYWxsT2Zmc2V0TSx0LnBvbGVQYWlycyx0aGlzLm5vbWluYWxIYWxsQW5nbGVzLHRoaXMucGhhc2VBbmdsZXMsdC5oYWxsSW52ZXJ0ZWQpLHRoaXMub3JkZXJlZENvZGVzPXN2KHQuZGlyZWN0aW9uLHQuaGFsbE9mZnNldE0sdC5wb2xlUGFpcnMsdGhpcy5ub21pbmFsSGFsbEFuZ2xlcyx0LmhhbGxJbnZlcnRlZCx0aGlzLnBoYXNlUmVmZXJlbmNlRSk7bGV0IGE9dGhpcy5vcmRlcmVkQ29kZXMubWFwKGU9PlN1KHVpKGUpKSkuam9pbigiLSIpO3RoaXMuaGFsbFBhdHRlcm49YXYuZ2V0KGEpPz9udWxsLHRoaXMuaGFsbFNlY3RvcnM9ZnYodC5wb2xlUGFpcnMsdGhpcy5oYWxsQW5nbGVzLHQuaGFsbE9mZnNldE0sdC5oYWxsSW52ZXJ0ZWQpfWhhbGxCaXRzKHQpe3JldHVybiBuaSh0LHRoaXMuY29uZmlnLmhhbGxPZmZzZXRNLHRoaXMuY29uZmlnLnBvbGVQYWlycyx0aGlzLmhhbGxBbmdsZXMsdGhpcy5jb25maWcuaGFsbEludmVydGVkKX1maWVsZEFuZ2xlKHQpe3JldHVybiAkZih0LHRoaXMucGhhc2VBbmdsZXMpfWRpc3BsYXlGaWVsZEFuZ2xlKHQpe3JldHVybiBqKDEyMC10aGlzLmZpZWxkQW5nbGUodCkpfXByb2dyZXNzRm9yRWxlY3RyaWNhbCh0KXtyZXR1cm4gbnYodCx0aGlzLmNvbmZpZy5kaXJlY3Rpb24sdGhpcy5waGFzZVJlZmVyZW5jZUUpfWVsZWN0cmljYWxGb3JQcm9ncmVzcyh0KXtyZXR1cm4gaXYodCx0aGlzLmNvbmZpZy5kaXJlY3Rpb24sdGhpcy5waGFzZVJlZmVyZW5jZUUpfXNlY3RvckF0KHQpe3JldHVybiB0aGlzLmhhbGxTZWN0b3JzLmZpbmQoYT0+aih0LWEuc3RhcnRFKTxhLndpZHRoRSk/P251bGx9c2VjdG9yU2V2ZXJpdHkodCl7bGV0IGE9TWF0aC5hYnModC53aWR0aEUtNjApO3JldHVybiB0LmNvZGU9PT0wfHx0LmNvZGU9PT03fHx0LnN0YXJ0U2Vuc29ycy5sZW5ndGg+MXx8dC5lbmRTZW5zb3JzLmxlbmd0aD4xfHx0LndpZHRoRTwyMHx8YT4yMD8yOmE+Mj8xOjB9Y29udHJvbFNldmVyaXR5KHQpe2xldCBhPXRoaXMuc2VjdG9yU2V2ZXJpdHkodCksZT10aGlzLmNvbW11dGF0aW9uTWFwLmdldCh0LmNvZGUpO2lmKCFlKXJldHVybiAyO2xldCBuPSh0aGlzLmNvbnRyb2xEaXJlY3Rpb249PT0iQ0NXIj8xOi0xKSplYSh0aGlzLmZpZWxkQW5nbGUoZSksaih0LnN0YXJ0RSt0LndpZHRoRS8yKSk7cmV0dXJuIG48MTV8fG4+MTY1PzI6KChuPDQ1fHxuPjEzNSkmJihhPU1hdGgubWF4KGEsMSkpLGEpfXNuYXBzaG90KHQpe2xldCBhPWoodCksZT1qKGEqdGhpcy5jb25maWcucG9sZVBhaXJzKSx1PXRoaXMuaGFsbEJpdHMoYSksbj1laSh1KSxpPXRoaXMuY29tbXV0YXRpb25NYXAuZ2V0KG4pPz9udWxsLGM9dGhpcy5zZWN0b3JBdChlKSxmPXRoaXMub3JkZXJlZENvZGVzLmluZGV4T2YobiksZD1jP3RoaXMuY29udHJvbFNldmVyaXR5KGMpOjIsdj1udWxsO3JldHVybiBpJiYodj0odGhpcy5jb250cm9sRGlyZWN0aW9uPT09IkNDVyI/MTotMSkqZWEodGhpcy5maWVsZEFuZ2xlKGkpLGUpLHY8MTV8fHY+MTY1P2Q9Mjoodjw0NXx8dj4xMzUpJiYoZD1NYXRoLm1heChkLDEpKSkse21lY2hBbmdsZTphLGVsZWN0cmljYWxBbmdsZTplLHByb2dyZXNzQW5nbGU6dGhpcy5wcm9ncmVzc0ZvckVsZWN0cmljYWwoZSksaGFsbEJpdHM6dSxjb2RlOm4sZHJpdmU6aSxzZWN0b3I6YyxzdGVwOmY+PTA/ZisxOjAsZWZmZWN0aXZlTGVhZEU6dixzZXZlcml0eTpkfX19O2Z1bmN0aW9uICRtKGwsdCl7bGV0IGE9bC5wb2xlUGFpcnMqMixlPTM2MC9sLnNsb3RDb3VudCx1PWUqbC5wb2xlUGFpcnMsbj1sLnNsb3RDb3VudC8oYSozKSxpPSh5LG0pPT5tP2kobSx5JW0pOnksYz1sLnNsb3RDb3VudCphL2kobC5zbG90Q291bnQsYSksZj1sLmhhbGxTcGFjaW5nTS9lLGQ9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKGYpKSx2PWQqZS1sLmhhbGxTcGFjaW5nTTtyZXR1cm57cG9sZXM6YSxzbG90UGl0Y2hNOmUsc2xvdFBpdGNoRTp1LHE6bix3aW5kaW5nQ2xhc3M6TWF0aC5hYnMobi1NYXRoLnJvdW5kKG4pKTwxZS05PyJcdUM4MTVcdUMyMTggXHVDMkFDXHVCODZGIjoiXHVCRDg0XHVDMjE4IFx1QzJBQ1x1Qjg2RiIscmVwZWF0T3JkZXI6YyxyZXBlYXRIejpjKnQvNjAsc2xvdFBhc3NIejpsLnNsb3RDb3VudCp0LzYwLGhhbGxTcGFuU2xvdHM6ZixuZWFyZXN0SGFsbFNsb3RzOmQsaGFsbE1vdW50RXJyb3JNOnYsaGFsbE1vdW50RXJyb3JFOnYqbC5wb2xlUGFpcnN9fXZhciBiPU1hKEV1KCksMSksaHY9W1sxLDIsM10sWzEsMywyXSxbMiwxLDNdLFsyLDMsMV0sWzMsMSwyXSxbMywyLDFdXSxydj1bIlVWVyIsIlVXViIsIlZVVyIsIlZXVSIsIldVViIsIldWVSJdO2Z1bmN0aW9uIFBsKGwsdCxhLGUpe2xldCB1PWUqTWF0aC5QSS8xODA7cmV0dXJuW2wrYSpNYXRoLmNvcyh1KSx0LWEqTWF0aC5zaW4odSldfWZ1bmN0aW9uIHZ2KGwsdCxhLGUsdSl7bGV0IG49ZS11LzIsaT1lK3UvMixbYyxmXT1QbChsLHQsYSxuKSxbZCx2XT1QbChsLHQsYSxpKTtyZXR1cm5gTSAke2x9ICR7dH0gTCAke2N9ICR7Zn0gQSAke2F9ICR7YX0gMCAwIDAgJHtkfSAke3Z9IFpgfWZ1bmN0aW9uIHl2KGwsdCxhLGUsdSl7bGV0W24saV09UGwobCx0LGEsZSksW2MsZl09UGwobCx0LGEsZSt1KTtyZXR1cm5gTSAke259ICR7aX0gQSAke2F9ICR7YX0gMCAke3U+MTgwPzE6MH0gMCAke2N9ICR7Zn1gfWZ1bmN0aW9uIGd2KHttb2RlbDpsLHNuYXBzaG90OnR9KXtsZXQgaT1sLmNvbmZpZy5wb2xlUGFpcnMsYz0zNjAvKDIqaSksZj1jKi45NSxkPWFpKHQubWVjaEFuZ2xlKSx2PWFpKHQuZWxlY3RyaWNhbEFuZ2xlKSx5PXtVOiJvcGVuIixWOiJvcGVuIixXOiJvcGVuIn07cmV0dXJuIHQuZHJpdmUmJih5W3QuZHJpdmUuaGlnaF09InBvcyIseVt0LmRyaXZlLmxvd109Im5lZyIpLCgwLGIuanN4cykoInN2ZyIse2NsYXNzTmFtZToibW90b3Itc3ZnIix2aWV3Qm94OiIwIDAgNzIwIDcyMCIscm9sZToiaW1nIiwiYXJpYS1sYWJlbCI6IkJMREMgXHVCODVDXHVEMTMwXHVDNjQwIFx1QzJBNFx1RDE0Q1x1Qzc3NFx1RDEzMCBcdUMyRTRcdUMyRENcdUFDMDQgXHVCMkU4XHVCQTc0IixjaGlsZHJlbjpbKDAsYi5qc3hzKSgiZGVmcyIse2NoaWxkcmVuOlsoMCxiLmpzeCkoIm1hcmtlciIse2lkOiJhcnJvdy1yZWQiLG1hcmtlcldpZHRoOiI5IixtYXJrZXJIZWlnaHQ6IjkiLHJlZlg6IjciLHJlZlk6IjQuNSIsb3JpZW50OiJhdXRvIixjaGlsZHJlbjooMCxiLmpzeCkoInBhdGgiLHtkOiJNMCwwIEw5LDQuNSBMMCw5IFoiLGNsYXNzTmFtZToiZmlsbC1ub3J0aCJ9KX0pLCgwLGIuanN4KSgibWFya2VyIix7aWQ6ImFycm93LWZpZWxkIixtYXJrZXJXaWR0aDoiOCIsbWFya2VySGVpZ2h0OiI4IixyZWZYOiI2IixyZWZZOiI0IixvcmllbnQ6ImF1dG8iLGNoaWxkcmVuOigwLGIuanN4KSgicGF0aCIse2Q6Ik0wLDAgTDgsNCBMMCw4IFoiLGNsYXNzTmFtZToiZmlsbC1maWVsZCJ9KX0pXX0pLCgwLGIuanN4KSgiY2lyY2xlIix7Y3g6MzYwLGN5OjM2MCxyOjI2MCxjbGFzc05hbWU6Im1vdG9yLW91dGxpbmUifSksKDAsYi5qc3gpKCJjaXJjbGUiLHtjeDozNjAsY3k6MzYwLHI6MTYyKjEuMTIsY2xhc3NOYW1lOiJtb3Rvci1vdXRsaW5lIHRoaW4ifSksQXJyYXkuZnJvbSh7bGVuZ3RoOmwuY29uZmlnLnNsb3RDb3VudH0sKG0scik9PntsZXQgRT1yKjM2MC9sLmNvbmZpZy5zbG90Q291bnQsW3osVF09UGwoMzYwLDM2MCwyNjAqLjc2LEUpLFtzLG9dPVBsKDM2MCwzNjAsMjYwKi45OSxFKTtyZXR1cm4oMCxiLmpzeCkoImxpbmUiLHt4MTp6LHkxOlQseDI6cyx5MjpvLGNsYXNzTmFtZToic2xvdC1saW5lIn0sYHNsb3QtJHtyfWApfSksbC5oYWxsU2VjdG9ycy5mbGF0TWFwKChtLHIpPT57bGV0IEU9bC5jb250cm9sU2V2ZXJpdHkobSk7cmV0dXJuIEU/QXJyYXkuZnJvbSh7bGVuZ3RoOml9LCh6LFQpPT57bGV0IHM9bS5zdGFydEUvaStUKjM2MC9pO3JldHVybigwLGIuanN4KSgicGF0aCIse2Q6eXYoMzYwLDM2MCwyNjAqMS4wMzUscyxtLndpZHRoRS9pKSxjbGFzc05hbWU6RT09PTI/InJpc2sgY3JpdGljYWwiOiJyaXNrIGNhdXRpb24ifSxgcmlzay0ke3J9LSR7VH1gKX0pOltdfSksT2JqZWN0LmVudHJpZXMobC5kaXNwbGF5UGhhc2VBbmdsZXMpLmZsYXRNYXAoKFttLHJdKT0+QXJyYXkuZnJvbSh7bGVuZ3RoOml9LChFLHopPT5bcixyKzE4MF0ubWFwKChULHMpPT57bGV0IG89eiozNjAvaStUL2ksW2gsZ109UGwoMzYwLDM2MCwyNjAqLjg3LG8pO3JldHVybigwLGIuanN4cykoImciLHtjbGFzc05hbWU6YHBoYXNlLW1hcmtlciAke3lbbV19YCxjaGlsZHJlbjpbKDAsYi5qc3gpKCJlbGxpcHNlIix7Y3g6aCxjeTpnLHJ4OiIyMiIscnk6IjE1In0pLCgwLGIuanN4KSgidGV4dCIse3g6aCx5OmcrNSxjaGlsZHJlbjptfSldfSxgJHttfS0ke3p9LSR7c31gKX0pKS5mbGF0KCkpLEFycmF5LmZyb20oe2xlbmd0aDoyKml9LChtLHIpPT57bGV0IEU9dC5tZWNoQW5nbGUrcipjLFt6LFRdPVBsKDM2MCwzNjAsMTYyKi43MixFKSxzPXIlMj09PTA7cmV0dXJuKDAsYi5qc3hzKSgiZyIse2NoaWxkcmVuOlsoMCxiLmpzeCkoInBhdGgiLHtkOnZ2KDM2MCwzNjAsMTYyLEUsZiksY2xhc3NOYW1lOnM/InJvdG9yLW5vcnRoIjoicm90b3Itc291dGgifSksKDAsYi5qc3gpKCJ0ZXh0Iix7eDp6LHk6VCs2LGNsYXNzTmFtZToicG9sZS1sYWJlbCIsY2hpbGRyZW46cz8iTiI6IlMifSldfSxgcG9sZS0ke3J9YCl9KSxsLmRpc3BsYXlIYWxsQW5nbGVzLm1hcCgobSxyKT0+e2xldCBFPXQuaGFsbEJpdHNbcl0sW3osVF09UGwoMzYwLDM2MCwyNjAqMS4xNixtKTtyZXR1cm4oMCxiLmpzeHMpKCJnIix7Y2xhc3NOYW1lOmBoYWxsLWJveCAke0U/Im9uIjoib2ZmIn1gLGNoaWxkcmVuOlsoMCxiLmpzeCkoInJlY3QiLHt4OnotMzEseTpULTIxLHdpZHRoOiI2MiIsaGVpZ2h0OiI0MiIscng6IjIifSksKDAsYi5qc3hzKSgidGV4dCIse3g6eix5OlQtMyxjaGlsZHJlbjpbIkgiLHIrMSwiOiIsRV19KSwoMCxiLmpzeHMpKCJ0ZXh0Iix7eDp6LHk6VCsxNCxjbGFzc05hbWU6ImhhbGwtYW5nbGUiLGNoaWxkcmVuOlttLnRvRml4ZWQoMCksIlx4QjBtIixNYXRoLmFicyhlYShtLDApKTwxZS02PyIgXHVBRTMwXHVDOTAwIjoiIl19KV19LGBoYWxsLSR7cn1gKX0pLCgoKT0+e2xldFttLHJdPVBsKDM2MCwzNjAsMTcxLjcyLHQubWVjaEFuZ2xlKTtyZXR1cm4oMCxiLmpzeCkoImxpbmUiLHt4MTozNjAseTE6MzYwLHgyOm0seTI6cixjbGFzc05hbWU6InJvdG9yLWFycm93IixtYXJrZXJFbmQ6InVybCgjYXJyb3ctcmVkKSJ9KX0pKCksdC5kcml2ZSYmQXJyYXkuZnJvbSh7bGVuZ3RoOml9LChtLHIpPT57bGV0IEU9bC5kaXNwbGF5RmllbGRBbmdsZSh0LmRyaXZlKS9pK3IqMzYwL2ksW3osVF09UGwoMzYwLDM2MCwyNjAqLjcsRSk7cmV0dXJuKDAsYi5qc3gpKCJsaW5lIix7eDE6MzYwLHkxOjM2MCx4Mjp6LHkyOlQsY2xhc3NOYW1lOiJmaWVsZC1hcnJvdyIsbWFya2VyRW5kOiJ1cmwoI2Fycm93LWZpZWxkKSJ9LGBmaWVsZC0ke3J9YCl9KSwoMCxiLmpzeCkoImNpcmNsZSIse2N4OjM2MCxjeTozNjAscjoiNjIiLGNsYXNzTmFtZToiaHViIn0pLCgwLGIuanN4cykoInRleHQiLHt4OjM2MCx5OjM1NCxjbGFzc05hbWU6Imh1Yi10ZXh0IixjaGlsZHJlbjpbIlx1MDNCOG0gIixkLnRvRml4ZWQoMSksIlx4QjAiXX0pLCgwLGIuanN4cykoInRleHQiLHt4OjM2MCx5OjM3OCxjbGFzc05hbWU6Imh1Yi10ZXh0IixjaGlsZHJlbjpbIlx1MDNCOGUgIix2LnRvRml4ZWQoMSksIlx4QjAiXX0pLCgwLGIuanN4cykoImciLHtjbGFzc05hbWU6Im1vdG9yLWNhcHRpb24iLGNoaWxkcmVuOlsoMCxiLmpzeCkoInRleHQiLHt4OiIxOCIseToiMjgiLGNoaWxkcmVuOiJcdUJFNjhcdUFDMTUgXHVCODVDXHVEMTMwIE5cdUNEOTUifSksKDAsYi5qc3hzKSgidGV4dCIse3g6IjE4Iix5OiI0OSIsY2hpbGRyZW46WyJcdUIxNzhcdUI3OTEgXHVDMkE0XHVEMTRDXHVDNzc0XHVEMTMwIE5cdUNEOTUgXHhENyIsaV19KSwoMCxiLmpzeHMpKCJ0ZXh0Iix7eDoiMTgiLHk6IjcwIixjaGlsZHJlbjpbIlx1QzJBNFx1RDE0Q1x1Qzc3NFx1RDEzMCAiLGwuY29uZmlnLnNsb3RDb3VudCwiXHVDMkFDXHVCODZGIl19KSwoMCxiLmpzeHMpKCJ0ZXh0Iix7eDoiMTgiLHk6IjkxIixjaGlsZHJlbjpbIlx1MDNCOHMsZSAiLHQuZHJpdmU/bC5kaXNwbGF5RmllbGRBbmdsZSh0LmRyaXZlKS50b0ZpeGVkKDApOiJcdTIwMTQiLCJceEIwIl19KV19KV19KX1mdW5jdGlvbiBidih7c25hcHNob3Q6bH0pe2xldCB0PXtVOjAsVjowLFc6MH07cmV0dXJuIGwuZHJpdmUmJih0W2wuZHJpdmUuaGlnaF09MSx0W2wuZHJpdmUubG93XT0tMSksKDAsYi5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InBoYXNlLXBhbmVsIiwiYXJpYS1sYWJlbCI6Ilx1RDYwNFx1QzdBQyBVIFYgVyBcdUNEOUNcdUI4MjUgXHVDMEMxXHVEMERDIixjaGlsZHJlbjpbIlUiLCJWIiwiVyJdLm1hcChhPT57bGV0IGU9dFthXTtyZXR1cm4oMCxiLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6YHBoYXNlLW91dHB1dCAke2U+MD8icG9zIjplPDA/Im5lZyI6Im9wZW4ifWAsY2hpbGRyZW46WygwLGIuanN4KSgic3BhbiIse2NsYXNzTmFtZToicGhhc2UtcGluIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLCgwLGIuanN4KSgic3Ryb25nIix7Y2hpbGRyZW46YX0pLCgwLGIuanN4KSgic3BhbiIse2NoaWxkcmVuOmU+MD8iK0RDIjplPDA/Ilx1MjIxMkRDIjoiT1BFTiJ9KV19LGEpfSl9KX1mdW5jdGlvbiBQbShsLHQpe2xldCBhPWwrdDtyZXR1cm4gYTw9MzYwP1tbbCxhXV06W1tsLDM2MF0sWzAsYS0zNjBdXX1mdW5jdGlvbiBwdih7bW9kZWw6bCxzbmFwc2hvdDp0fSl7bGV0IGQ9cz0+NDgrNjYwKnMvMzYwLHY9cz0+e2xldCBvPWwuY29uZmlnLmRpcmVjdGlvbj09PSJDVyI/aihzLnN0YXJ0RStzLndpZHRoRSk6cy5zdGFydEU7cmV0dXJuIGwucHJvZ3Jlc3NGb3JFbGVjdHJpY2FsKG8pfSx5PVsuLi5uZXcgU2V0KFswLDM2MCwuLi5sLmhhbGxTZWN0b3JzLm1hcCh2KV0pXS5zb3J0KChzLG8pPT5zLW8pLG09eS5zbGljZSgwLC0xKS5tYXAoKHMsbyk9PntsZXQgaD15W28rMV0sZz1sLmhhbGxCaXRzKGwuZWxlY3RyaWNhbEZvclByb2dyZXNzKChzK2gpLzIpL2wuY29uZmlnLnBvbGVQYWlycyksTT1nWzBdKjQrZ1sxXSoyK2dbMl07cmV0dXJue3N0YXJ0OnMsZW5kOmgsYml0czpnLGRyaXZlOmwuY29tbXV0YXRpb25NYXAuZ2V0KE0pPz9udWxsfX0pLHI9WyJIMyIsIkgyIiwiSDEiLCJVIiwiViIsIlciXSxFPVsyLDEsMF0sej1zPT57bGV0IG89MjgrMzIqKHMrLjUpLGg9czwzPzMyKi4zOjMyKi4zNSxnPW51bGwsTT0iIjtyZXR1cm4gbS5mb3JFYWNoKF89PntsZXQgQTtpZihzPDMpQT1fLmJpdHNbRVtzXV07ZWxzZXtsZXQgVT1bIlUiLCJWIiwiVyJdW3MtM107QT1fLmRyaXZlPy5oaWdoPT09VT8xOl8uZHJpdmU/Lmxvdz09PVU/LTE6MH1sZXQgeD1zPDM/bysoQT8taDpoKTpvLWgqQTtnPT09bnVsbD9NKz1gTSAke2QoXy5zdGFydCl9ICR7eH1gOk1hdGguYWJzKGcteCk+LjEmJihNKz1gIEwgJHtkKF8uc3RhcnQpfSAke2d9IEwgJHtkKF8uc3RhcnQpfSAke3h9YCksTSs9YCBMICR7ZChfLmVuZCl9ICR7eH1gLGc9eH0pLE19LFQ9dC5zZWN0b3I/dih0LnNlY3Rvcik6bnVsbDtyZXR1cm4oMCxiLmpzeHMpKCJzdmciLHtjbGFzc05hbWU6InRpbWluZy1zdmciLHZpZXdCb3g6IjAgMCA3MjAgMjQ2Iixyb2xlOiJpbWciLCJhcmlhLWxhYmVsIjoiXHVBRDhDXHVDMTIwIFVcdUNEOTUgXHVBRTMwXHVDOTAwIEhhbGwgXHVCQzBGIFUgViBXIFx1RDBDMFx1Qzc3NFx1QkMwRCBcdUQzMENcdUQ2MTUiLGNoaWxkcmVuOlt0LnNlY3RvciYmVCE9PW51bGwmJlBtKFQsdC5zZWN0b3Iud2lkdGhFKS5tYXAoKFtzLG9dLGgpPT4oMCxiLmpzeCkoInJlY3QiLHt4OmQocykseToiMTUiLHdpZHRoOmQobyktZChzKSxoZWlnaHQ6IjIwNSIsY2xhc3NOYW1lOiJ0aW1pbmctYWN0aXZlIn0sYGFjdGl2ZS0ke2h9YCkpLGwuaGFsbFNlY3RvcnMuZmxhdE1hcCgocyxvKT0+e2xldCBoPWwuY29udHJvbFNldmVyaXR5KHMpO3JldHVybiBoP1BtKHYocykscy53aWR0aEUpLm1hcCgoW2csTV0sXyk9PigwLGIuanN4KSgicmVjdCIse3g6ZChnKSx5OiIxNSIsd2lkdGg6ZChNKS1kKGcpLGhlaWdodDoiMjA1IixjbGFzc05hbWU6aD09PTI/InRpbWluZy1jcml0aWNhbCI6InRpbWluZy1jYXV0aW9uIn0sYHdhcm4tJHtvfS0ke199YCkpOltdfSksWzAsNjAsMTIwLDE4MCwyNDAsMzAwLDM2MF0ubWFwKHM9PigwLGIuanN4cykoImciLHtjaGlsZHJlbjpbKDAsYi5qc3gpKCJsaW5lIix7eDE6ZChzKSx5MToiMTUiLHgyOmQocykseTI6IjIyMCIsY2xhc3NOYW1lOiJ0aW1pbmctZ3JpZCJ9KSwoMCxiLmpzeHMpKCJ0ZXh0Iix7eDpkKHMpLHk6IjExIix0ZXh0QW5jaG9yOnM9PT0wPyJzdGFydCI6cz09PTM2MD8iZW5kIjoibWlkZGxlIixjbGFzc05hbWU6InRpbWluZy10aWNrIixjaGlsZHJlbjpbcywiXHhCMCJdfSldfSxzKSksci5tYXAoKHMsbyk9PntsZXQgaD0yOCszMioobysuNSk7cmV0dXJuKDAsYi5qc3hzKSgiZyIse2NoaWxkcmVuOlsoMCxiLmpzeCkoInRleHQiLHt4OjQwLHk6aCs0LHRleHRBbmNob3I6ImVuZCIsY2xhc3NOYW1lOiJ0aW1pbmctbGFiZWwiLGNoaWxkcmVuOnN9KSwoMCxiLmpzeCkoImxpbmUiLHt4MTo0OCx5MTpoLHgyOjcwOCx5MjpoLGNsYXNzTmFtZToidGltaW5nLWdyaWQifSksKDAsYi5qc3gpKCJwYXRoIix7ZDp6KG8pLGNsYXNzTmFtZTpgd2F2ZSBsYW5lLSR7b31gfSldfSxzKX0pLCgwLGIuanN4KSgibGluZSIse3gxOmQodC5wcm9ncmVzc0FuZ2xlKSx5MToiMTUiLHgyOmQodC5wcm9ncmVzc0FuZ2xlKSx5MjoiMjIwIixjbGFzc05hbWU6InRpbWluZy1tYXJrZXIifSksKDAsYi5qc3gpKCJ0ZXh0Iix7eDo3NTYvMix5OiIyNDEiLHRleHRBbmNob3I6Im1pZGRsZSIsY2xhc3NOYW1lOiJ0aW1pbmctYXhpcy10aXRsZSIsY2hpbGRyZW46Ilx1QUQ4Q1x1QzEyMCBVXHVDRDk1IFx1QUUzMFx1QzkwMCBcdUM5QzRcdUQ1ODkgXHVDODA0XHVBRTMwXHVBQzAxIn0pXX0pfWZ1bmN0aW9uIFN2KGwpe3JldHVybiBsLm9yZGVyZWRDb2Rlcy5tYXAodD0+U3UodWkodCkpKS5qb2luKCItIil9ZnVuY3Rpb24gUGYoKXtsZXRbbCx0XT0oMCxPbC51c2VTdGF0ZSkoa2YpLFthLGVdPSgwLE9sLnVzZVN0YXRlKShrZiksW3Usbl09KDAsT2wudXNlU3RhdGUpKDUpLFtpLGNdPSgwLE9sLnVzZVN0YXRlKSgzMCksW2YsZF09KDAsT2wudXNlU3RhdGUpKCExKSx2PSgwLE9sLnVzZVJlZikobnVsbCkseT0oMCxPbC51c2VNZW1vKSgoKT0+bmV3IHRpKGwpLFtsXSksbT0oMCxPbC51c2VNZW1vKSgoKT0+eS5zbmFwc2hvdCh3bSh1KSksW3ksdV0pLHI9YWkobS5lbGVjdHJpY2FsQW5nbGUpLEU9KDAsT2wudXNlTWVtbykoKCk9PiRtKGwsaSksW2wsaV0pOygwLE9sLnVzZUVmZmVjdCkoKCk9PntpZighZil7di5jdXJyZW50PW51bGw7cmV0dXJufWxldCBTPTAscT0kbD0+e2lmKHYuY3VycmVudCE9PW51bGwpe2xldCBnZT1NYXRoLm1pbigoJGwtdi5jdXJyZW50KS8xZTMsLjEpLF90PUZmKGwuZGlyZWN0aW9uKTtuKHp1PT5qKHp1K190KmkqNipnZSkpfXYuY3VycmVudD0kbCxTPXJlcXVlc3RBbmltYXRpb25GcmFtZShxKX07cmV0dXJuIFM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHEpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShTKX0sW2YsaSxsLmRpcmVjdGlvbl0pO2xldCB6PXkuaGFsbFNlY3RvcnMucmVkdWNlKChTLHEpPT4oU1t5LmNvbnRyb2xTZXZlcml0eShxKV0rPTEsUyksWzAsMCwwXSksVD15LmhhbGxTZWN0b3JzLmZpbHRlcihTPT5TLmNvZGU9PT0wfHxTLmNvZGU9PT03KS5sZW5ndGgscz16WzJdP2BcdUM3MDRcdUQ1RDggXHVBRDZDXHVBQzA0ICR7elsyXX1cdUFDMUMke1Q/YCBceEI3IDAwMC8xMTEgJHtUfVx1QUQ2Q1x1QUMwNGA6IiJ9YDp6WzFdP2BcdUQwQzBcdUM3NzRcdUJDMEQgXHVDOEZDXHVDNzU4IFx1QUQ2Q1x1QUMwNCAke3pbMV19XHVBQzFDYDoiNlx1QUMxQyBcdUFENkNcdUFDMDQgXHVCQUE4XHVCNDUwIDYwXHhCMGUgXHVDODE1XHVDMEMxIixvPXkuaGFsbFBhdHRlcm4/YFx1RDMyOFx1RDEzNCAke3kuaGFsbFBhdHRlcm5bMF19IFx4QjcgJHt5LmhhbGxQYXR0ZXJuWzFdfWA6Ilx1RDMyOFx1RDEzNCBcdUJFNDRcdUQ0NUNcdUM5MDAiLGg9aihsLnBvbGVQYWlycypsLmhhbGxTcGFjaW5nTSksZz0iXHVDNzIwXHVENkE4XHVENTVDIEhhbGwgXHVBRDZDXHVBQzA0XHVDNzQ0IFx1Q0MzRVx1Qzc0NCBcdUMyMTggXHVDNUM2XHVDMkI1XHVCMkM4XHVCMkU0LiI7aWYobS5zZWN0b3ImJm0uZHJpdmUpe2xldCBTPWoobS5lbGVjdHJpY2FsQW5nbGUtbS5zZWN0b3Iuc3RhcnRFKSxxPWwuZGlyZWN0aW9uPT09IkNDVyI/bS5zZWN0b3Iud2lkdGhFLVM6UywkbD1sLmRpcmVjdGlvbj09PSJDQ1ciP20uc2VjdG9yLmVuZFNlbnNvcnM6bS5zZWN0b3Iuc3RhcnRTZW5zb3JzLGdlPXEvTWF0aC5tYXgoLjAwMSw2KmkqbC5wb2xlUGFpcnMpKjFlMztnPWBcdUFENkNcdUFDMDQgJHttLnNlY3Rvci53aWR0aEUudG9GaXhlZCgxKX1ceEIwZSAoJHsobS5zZWN0b3Iud2lkdGhFLTYwKS50b0ZpeGVkKDEpLnJlcGxhY2UoL14oLT8pLywiJDErIikucmVwbGFjZSgiLSsiLCItIil9KSBceEI3IFx1QjJFNFx1Qzc0QyAkeyRsLm1hcChfdD0+YEgke190fWApLmpvaW4oIisiKX0gJHtnZS50b0ZpeGVkKDEpfW1zIFx4QjcgXHVDNzkwXHVBQ0M0XHVBQzAxICR7KG0uZWZmZWN0aXZlTGVhZEU/PzApLnRvRml4ZWQoMSl9XHhCMGVgfWxldCBNPXkub3JkZXJlZENvZGVzLm1hcCgoUyxxKT0+e2xldCAkbD11aShTKSxnZT1TdSgkbCksX3Q9eS5jb21tdXRhdGlvbk1hcC5nZXQoUyk/P251bGwsenU9eS5oYWxsU2VjdG9ycy5maWx0ZXIoYmU9PmJlLmNvZGU9PT1TKSxlZD16dS5yZWR1Y2UoKGJlLGZpKT0+YmUrZmkud2lkdGhFLDApLHVkPXp1LnJlZHVjZSgoYmUsZmkpPT5NYXRoLm1heChiZSx5LmNvbnRyb2xTZXZlcml0eShmaSkpLDApLGNpPXtVOiJaIixWOiJaIixXOiJaIn07cmV0dXJuIF90JiYoY2lbX3QuaGlnaF09IisiLGNpW190Lmxvd109Ilx1MjIxMiIpLHtzdGVwOnErMSxjb2RlOlMsYml0czokbCxyYXc6Z2UsZHJpdmU6X3Qsd2lkdGg6ZWQsc2V2ZXJpdHk6dWQsb3V0cHV0OmNpfX0pLF89KCk9Pnt0KHsuLi5hLHBvbGVQYWlyczpNYXRoLm1pbig4LE1hdGgubWF4KDEsTWF0aC5yb3VuZChhLnBvbGVQYWlycykpKSxoYWxsU3BhY2luZ006TWF0aC5taW4oMTc5LE1hdGgubWF4KDEsYS5oYWxsU3BhY2luZ00pKSxzbG90Q291bnQ6TWF0aC5taW4oNzIsTWF0aC5tYXgoMyxNYXRoLnJvdW5kKGEuc2xvdENvdW50KSkpfSl9LEE9KCk9PntsZXQgUz1JZihhLnBvbGVQYWlycyxhLmhhbGxTcGFjaW5nTSkvYS5wb2xlUGFpcnMscT17Li4uYSxoYWxsU3BhY2luZ006TnVtYmVyKFMudG9GaXhlZCg2KSl9O2UocSksdChxKX0seD1TPT57ZShxPT4oey4uLnEsZGlyZWN0aW9uOlN9KSksdChxPT4oey4uLnEsZGlyZWN0aW9uOlN9KSl9LFU9Uz0+e2QoITEpO2xldCBxPUZmKGwuZGlyZWN0aW9uKTtuKCRsPT5qKCRsK1MqcSo2MC9sLnBvbGVQYWlycykpfTtyZXR1cm4oMCxiLmpzeHMpKCJtYWluIix7Y2xhc3NOYW1lOiJhcHAtc2hlbGwiLGNoaWxkcmVuOlsoMCxiLmpzeHMpKCJoZWFkZXIiLHtjbGFzc05hbWU6ImFwcC1oZWFkZXIiLGNoaWxkcmVuOlsoMCxiLmpzeHMpKCJoMSIse2NoaWxkcmVuOltsLnBvbGVQYWlycywiXHVDMzBEKCIsbC5wb2xlUGFpcnMqMiwiXHVBREY5KSBceEI3ICIsbC5zbG90Q291bnQsIlx1QzJBQ1x1Qjg2RiBCTERDIDYtc3RlcCJdfSksKDAsYi5qc3hzKSgicCIse2NoaWxkcmVuOlsiSGFsbCBcdUFDMDRcdUFDQTkgIixsLmhhbGxTcGFjaW5nTSwiXHhCMG0gPSAiLGgudG9GaXhlZCgwKSwiXHhCMGUgXHhCNyBcdUQzMTBcdUM4MTUgIix5LnJlZmVyZW5jZVNwYWNpbmdFPT09MTIwPyIrMTIwXHhCMGUiOiJcdTIyMTIxMjBceEIwZSIsIiBceEI3ICIsbC5oYWxsT3JkZXIubWFwKFM9PmBIJHtTfWApLmpvaW4oIi0iKSwiIFx4QjcgXHVDMTIwICIsbC5waGFzZU9yZGVyLmpvaW4oIiIpLCIgXHhCNyAiLG9dfSldfSksKDAsYi5qc3hzKSgic2VjdGlvbiIse2NsYXNzTmFtZToic2ltLWdyaWQiLGNoaWxkcmVuOlsoMCxiLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW90b3ItcGFuZWwiLGNoaWxkcmVuOigwLGIuanN4KShndix7bW9kZWw6eSxzbmFwc2hvdDptfSl9KSwoMCxiLmpzeHMpKCJhc2lkZSIse2NsYXNzTmFtZToibG9naWMtcGFuZWwiLGNoaWxkcmVuOlsoMCxiLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6YGxpdmUtc3RhdHVzIHNldmVyaXR5LSR7bS5zZXZlcml0eX1gLGNoaWxkcmVuOlsoMCxiLmpzeHMpKCJzdHJvbmciLHtjaGlsZHJlbjpbIlNURVAgIixtLnN0ZXB8fCJcdTIwMTQiLCIvNlx1MzAwMEhhbGwoSDNIMkgxKSAiLFN1KG0uaGFsbEJpdHMpLnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDMsIjAiKSwiXHUzMDAwIixtLmRyaXZlP2Ake20uZHJpdmUuaGlnaH0rIC8gJHttLmRyaXZlLmxvd31cdTIyMTIgLyAke20uZHJpdmUuZmxvYXRpbmd9PVpgOiJcdUNEOUNcdUI4MjUgXHVDQzI4XHVCMkU4Il19KSwoMCxiLmpzeHMpKCJzcGFuIix7Y2hpbGRyZW46W20uc2V2ZXJpdHk9PT0wPyJPSyI6bS5zZXZlcml0eT09PTE/Ilx1QzhGQ1x1Qzc1OCI6Ilx1QzcwNFx1RDVEOCIsIlx1MzAwMCIsZ119KV19KSwoMCxiLmpzeCkoYnYse3NuYXBzaG90Om19KSwoMCxiLmpzeHMpKCJoMiIse2NoaWxkcmVuOlsiXHVBRDhDXHVDMTIwIFVcdUNEOTUgXHVBRTMwXHVDOTAwICIsbywiOiAiLFN2KHkpXX0pLCgwLGIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJ0YWJsZS13cmFwIixjaGlsZHJlbjooMCxiLmpzeHMpKCJ0YWJsZSIse2NsYXNzTmFtZToibG9naWMtdGFibGUiLGNoaWxkcmVuOlsoMCxiLmpzeCkoInRoZWFkIix7Y2hpbGRyZW46KDAsYi5qc3hzKSgidHIiLHtjaGlsZHJlbjpbKDAsYi5qc3gpKCJ0aCIse2NoaWxkcmVuOiJTdGVwIn0pLCgwLGIuanN4KSgidGgiLHtjaGlsZHJlbjoiSGFsbCBcdUFDMTIifSksKDAsYi5qc3gpKCJ0aCIse2NoaWxkcmVuOiJcdUFENkNcdUFDMDRcdUQzRUQifSksKDAsYi5qc3gpKCJ0aCIse2NoaWxkcmVuOiJIMyJ9KSwoMCxiLmpzeCkoInRoIix7Y2hpbGRyZW46IkgyIn0pLCgwLGIuanN4KSgidGgiLHtjaGlsZHJlbjoiSDEifSksKDAsYi5qc3gpKCJ0aCIse2NoaWxkcmVuOiJVIn0pLCgwLGIuanN4KSgidGgiLHtjaGlsZHJlbjoiViJ9KSwoMCxiLmpzeCkoInRoIix7Y2hpbGRyZW46IlcifSksKDAsYi5qc3gpKCJ0aCIse2NoaWxkcmVuOiJcdUM4MDRcdUI5NTggXHVBQ0JEXHVCODVDIn0pXX0pfSksKDAsYi5qc3gpKCJ0Ym9keSIse2NoaWxkcmVuOk0ubWFwKFM9PigwLGIuanN4cykoInRyIix7Y2xhc3NOYW1lOlMuY29kZT09PW0uY29kZT8iYWN0aXZlLXJvdyI6IiIsY2hpbGRyZW46WygwLGIuanN4KSgidGQiLHtjaGlsZHJlbjpTLnN0ZXB9KSwoMCxiLmpzeCkoInRkIix7Y2hpbGRyZW46Uy5yYXd9KSwoMCxiLmpzeHMpKCJ0ZCIse2NoaWxkcmVuOltTLndpZHRoLnRvRml4ZWQoMSksIlx4QjAiLFMuc2V2ZXJpdHk9PT0yPyIhIjpTLnNldmVyaXR5PT09MT8iXHUyNUIzIjoiIl19KSwoMCxiLmpzeCkoInRkIix7Y2hpbGRyZW46Uy5iaXRzWzJdfSksKDAsYi5qc3gpKCJ0ZCIse2NoaWxkcmVuOlMuYml0c1sxXX0pLCgwLGIuanN4KSgidGQiLHtjaGlsZHJlbjpTLmJpdHNbMF19KSwoMCxiLmpzeCkoInRkIix7Y2hpbGRyZW46Uy5vdXRwdXQuVX0pLCgwLGIuanN4KSgidGQiLHtjaGlsZHJlbjpTLm91dHB1dC5WfSksKDAsYi5qc3gpKCJ0ZCIse2NoaWxkcmVuOlMub3V0cHV0Lld9KSwoMCxiLmpzeCkoInRkIix7Y2hpbGRyZW46Uy5kcml2ZT9gJHtTLmRyaXZlLmhpZ2h9XHUyMTkyJHtTLmRyaXZlLmxvd31gOiJcdUNDMjhcdUIyRTgifSldfSxTLmNvZGUpKX0pXX0pfSksKDAsYi5qc3gpKCJwIix7Y2xhc3NOYW1lOiJsZWdlbmQiLGNoaWxkcmVuOiJTdGVwPVx1QUQ4Q1x1QzEyMCBVXHVDRDk1XHVCRDgwXHVEMTMwIFx1QzEyMFx1RDBERCBcdUJDMjlcdUQ1QTVcdUM3M0NcdUI4NUMgXHVDOUM0XHVENTg5IFx4QjcgSGFsbCBcdUFDMTI9SDNceEQ3NCtIMlx4RDcyK0gxIFx4QjcgKy9cdTIyMTIvWj0rREMvXHUyMjEyREMvXHVBQzFDXHVCQzI5In0pLCgwLGIuanN4KShwdix7bW9kZWw6eSxzbmFwc2hvdDptfSksKDAsYi5qc3hzKSgicCIse2NsYXNzTmFtZToiZXhwbGFpbiIsY2hpbGRyZW46WyJcdUQ2MDRcdUM3QUMgSGFsbCBcdUFENkNcdUFDMDQgXHVEM0VEXHVDNzU4IFx1QUUzMFx1QzkwMFx1Qzc0MCA2MFx4QjBlXHVDNzg1XHVCMkM4XHVCMkU0LiBcdUM4RkNcdUQ2NjlcdUMwQzlcdUM3NDAgXHhCMTJceEIwZSBcdUNEMDhcdUFDRkMgXHVEMEMwXHVDNzc0XHVCQzBEIFx1QzYyNFx1Q0MyOCwgXHVCRTY4XHVBQzA0XHVDMEM5XHVDNzQwIDAwMC8xMTFceEI3XHVCM0Q5XHVDMkRDIFx1QzgwNFx1RDY1OFx4QjdcdUFERjlcdUIyRThcdUM4MDEgXHVBQzA0XHVBQ0E5IFx1QzYyNFx1Q0MyOFx1Qjk3QyBcdUI3M0JcdUQ1NjlcdUIyQzhcdUIyRTQuIDEgc3RlcFx1Qzc0MCAiLCg2MC9sLnBvbGVQYWlycykudG9GaXhlZCgyKSwiXHhCMCBcdUFFMzBcdUFDQzRcdUFDMDFcdUM3ODVcdUIyQzhcdUIyRTQuIl19KSwoMCxiLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InNsb3QtbW9uaXRvciIsY2hpbGRyZW46WygwLGIuanN4cykoInNwYW4iLHtjaGlsZHJlbjpbIlx1QzJBQ1x1Qjg2RiAiLGwuc2xvdENvdW50LCIgXHhCNyBcdUQ1M0NcdUNFNTggIixFLnNsb3RQaXRjaE0udG9GaXhlZCgyKSwiXHhCMG0vIixFLnNsb3RQaXRjaEUudG9GaXhlZCgyKSwiXHhCMGUgXHhCNyBxPSIsRS5xLnRvRml4ZWQoMyksIiAoIixFLndpbmRpbmdDbGFzcywiKSJdfSksKDAsYi5qc3hzKSgic3BhbiIse2NoaWxkcmVuOlsiXHVDMkFDXHVCODZGLVx1QURGOSBcdUJDMThcdUJDRjUgIixFLnJlcGVhdE9yZGVyLCJcdUQ2OEMvcmV2ID0gIixFLnJlcGVhdEh6LnRvRml4ZWQoMSksIkh6IFx4QjcgXHVDMkFDXHVCODZGIFx1RDFCNVx1QUNGQyAiLEUuc2xvdFBhc3NIei50b0ZpeGVkKDEpLCJIeiJdfSksKDAsYi5qc3hzKSgic3BhbiIse2NoaWxkcmVuOlsiSGFsbCBcdUFDMDRcdUFDQTkgIixFLmhhbGxTcGFuU2xvdHMudG9GaXhlZCgyKSwiXHVDMkFDXHVCODZGIFx4QjcgXHVDRDVDXHVBREZDXHVDODExICIsRS5uZWFyZXN0SGFsbFNsb3RzLCJcdUMyQUNcdUI4NkYgXHVCMzAwXHVCRTQ0ICIsRS5oYWxsTW91bnRFcnJvck0+PTA/IisiOiIiLEUuaGFsbE1vdW50RXJyb3JNLnRvRml4ZWQoMiksIlx4QjBtLyIsRS5oYWxsTW91bnRFcnJvckU+PTA/IisiOiIiLEUuaGFsbE1vdW50RXJyb3JFLnRvRml4ZWQoMiksIlx4QjBlIl19KV19KV19KV19KSwoMCxiLmpzeHMpKCJzZWN0aW9uIix7Y2xhc3NOYW1lOiJjb250cm9scy1wYW5lbCIsImFyaWEtbGFiZWwiOiJcdUMyRENcdUJCQUNcdUI4MDhcdUM3NzRcdUQxMzAgXHVDODFDXHVDNUI0IixjaGlsZHJlbjpbKDAsYi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJwbGF5LWNvbnRyb2xzIixjaGlsZHJlbjpbKDAsYi5qc3gpKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToicHJpbWFyeS1idXR0b24iLG9uQ2xpY2s6KCk9PmQoUz0+IVMpLGNoaWxkcmVuOmY/Ilx1MjNGOCBcdUM4MTVcdUM5QzAiOiJcdTI1QjYgXHVDN0FDXHVDMEREIn0pLCgwLGIuanN4KSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5VKC0xKSxjaGlsZHJlbjoiXHUyNUMwIDEgc3RlcCJ9KSwoMCxiLmpzeCkoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+VSgxKSxjaGlsZHJlbjoiMSBzdGVwIFx1MjVCNiJ9KV19KSwoMCxiLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsiXHVENjhDXHVDODA0IFx1QkMyOVx1RDVBNSAoQ1c9XHVDODE1XHVCQzI5XHVENUE1KSIsKDAsYi5qc3hzKSgic2VsZWN0Iix7dmFsdWU6bC5kaXJlY3Rpb24sb25DaGFuZ2U6Uz0+eChTLnRhcmdldC52YWx1ZSksY2hpbGRyZW46WygwLGIuanN4KSgib3B0aW9uIix7dmFsdWU6IkNXIixjaGlsZHJlbjoiQ1cifSksKDAsYi5qc3gpKCJvcHRpb24iLHt2YWx1ZToiQ0NXIixjaGlsZHJlbjoiQ0NXIn0pXX0pXX0pLCgwLGIuanN4cykoImxhYmVsIix7Y2hpbGRyZW46WyJcdUMxOERcdUIzQzRcdTMwMDAiLCgwLGIuanN4cykoInN0cm9uZyIse2NoaWxkcmVuOltpLnRvRml4ZWQoMSksIiBycG0iXX0pLCgwLGIuanN4KSgiaW5wdXQiLHt0eXBlOiJyYW5nZSIsbWluOiIxIixtYXg6IjE4MCIsc3RlcDoiMC4xIix2YWx1ZTppLG9uQ2hhbmdlOlM9PmMoTnVtYmVyKFMudGFyZ2V0LnZhbHVlKSl9KV19KSwoMCxiLmpzeHMpKCJsYWJlbCIse2NsYXNzTmFtZToiYW5nbGUtY29udHJvbCIsY2hpbGRyZW46WyJcdUI4NUNcdUQxMzAgXHVBRTMwXHVBQ0M0XHVBQzAxIChDVyspXHUzMDAwIiwoMCxiLmpzeHMpKCJzdHJvbmciLHtjaGlsZHJlbjpbdS50b0ZpeGVkKDEpLCJceEIwbSAvICIsci50b0ZpeGVkKDEpLCJceEIwZSJdfSksKDAsYi5qc3gpKCJpbnB1dCIse3R5cGU6InJhbmdlIixtaW46IjAiLG1heDoiMzYwIixzdGVwOiIwLjEiLHZhbHVlOnUsb25DaGFuZ2U6Uz0+bihOdW1iZXIoUy50YXJnZXQudmFsdWUpKX0pLCgwLGIuanN4KSgic21hbGwiLHtjaGlsZHJlbjoiQ1cgXHVDODE1XHVCQzI5XHVENUE1XHVDNUQwXHVDMTFDXHVCMjk0IFx1Qzk5RFx1QUMwMCBceEI3IENDVyBcdUM1RURcdUJDMjlcdUQ1QTVcdUM1RDBcdUMxMUNcdUIyOTQgXHVBQzEwXHVDMThDIn0pXX0pLCgwLGIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZGl2aWRlciJ9KSwoMCxiLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsiXHVBREY5XHVDMzBEIFx1QzIxOCIsKDAsYi5qc3gpKCJzZWxlY3QiLHt2YWx1ZTphLnBvbGVQYWlycyxvbkNoYW5nZTpTPT5lKHsuLi5hLHBvbGVQYWlyczpOdW1iZXIoUy50YXJnZXQudmFsdWUpfSksY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOjh9LChTLHEpPT4oMCxiLmpzeCkoIm9wdGlvbiIse2NoaWxkcmVuOnErMX0scSsxKSl9KV19KSwoMCxiLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsiSGFsbCBcdUFDMDRcdUFDQTkgKFx1QUUzMFx1QUNDNFx1QUMwMSkiLCgwLGIuanN4KSgiaW5wdXQiLHt0eXBlOiJudW1iZXIiLG1pbjoiMSIsbWF4OiIxNzkiLHN0ZXA6IjAuMSIsdmFsdWU6YS5oYWxsU3BhY2luZ00sb25DaGFuZ2U6Uz0+ZSh7Li4uYSxoYWxsU3BhY2luZ006TnVtYmVyKFMudGFyZ2V0LnZhbHVlKX0pfSldfSksKDAsYi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmBjb25maWctc3RhdHVzICR7elsyXT8iZGFuZ2VyIjp6WzFdPyJ3YXJuIjoib2sifWAsY2hpbGRyZW46W3MsIiAoIixsLmhhbGxJbnZlcnRlZD8iSGFsbCBcdUJDMThcdUM4MDQiOiJIYWxsIFx1QzgxNVx1QzBDMSIsIiwgIixvLCIpIl19KSwoMCxiLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1hY3Rpb25zIixjaGlsZHJlbjpbKDAsYi5qc3gpKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6QSxjaGlsZHJlbjoiXHVBRDhDXHVDN0E1IFx1QUMwNFx1QUNBOSJ9KSwoMCxiLmpzeCkoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOiJwcmltYXJ5LWJ1dHRvbiIsb25DbGljazpfLGNoaWxkcmVuOiJcdUM4MDFcdUM2QTkifSldfSksKDAsYi5qc3hzKSgibGFiZWwiLHtjaGlsZHJlbjpbIkhhbGwgXHVDMjFDXHVDMTFDIChcdUM4MTVcdUJDMjlcdUQ1QTUvQ1cpIiwoMCxiLmpzeCkoInNlbGVjdCIse3ZhbHVlOmEuaGFsbE9yZGVyLmpvaW4oIi0iKSxvbkNoYW5nZTpTPT5lKHsuLi5hLGhhbGxPcmRlcjpTLnRhcmdldC52YWx1ZS5zcGxpdCgiLSIpLm1hcChOdW1iZXIpfSksY2hpbGRyZW46aHYubWFwKFM9PigwLGIuanN4KSgib3B0aW9uIix7dmFsdWU6Uy5qb2luKCItIiksY2hpbGRyZW46Uy5tYXAocT0+YEgke3F9YCkuam9pbigiLSIpfSxTLmpvaW4oIi0iKSkpfSksKDAsYi5qc3gpKCJzbWFsbCIse2NoaWxkcmVuOiJcdUMxMjBcdUQwREQgXHVDMjFDXHVDMTFDXHVCMzAwXHVCODVDIENXIFx1QkMzMFx1Q0U1OCBceEI3IFx1QjlDOFx1QzlDMFx1QjlDOSBcdUMxM0NcdUMxMUNcdUFDMDAgMFx4QjAgXHVBRTMwXHVDOTAwIn0pXX0pLCgwLGIuanN4cykoImxhYmVsIix7Y2hpbGRyZW46WyJcdUJBQThcdUQxMzAgXHVDMTIwL1x1QUQ4Q1x1QzEyMFx1Q0Q5NSBcdUMyMUNcdUMxMUMiLCgwLGIuanN4KSgic2VsZWN0Iix7dmFsdWU6YS5waGFzZU9yZGVyLmpvaW4oIiIpLG9uQ2hhbmdlOlM9PmUoey4uLmEscGhhc2VPcmRlcjpTLnRhcmdldC52YWx1ZS5zcGxpdCgiIil9KSxjaGlsZHJlbjpydi5tYXAoUz0+KDAsYi5qc3gpKCJvcHRpb24iLHtjaGlsZHJlbjpTfSxTKSl9KSwoMCxiLmpzeCkoInNtYWxsIix7Y2hpbGRyZW46Ilx1QzEyMFx1RDBERCBcdUMyMUNcdUMxMUNcdUIzMDBcdUI4NUMgXHVDODA0XHVBRTMwXHVBQzAxIDBceEIwLCAxMjBceEIwLCAyNDBceEIwIFx1QUQ4Q1x1QzEyMFx1Q0Q5NSJ9KV19KSwoMCxiLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsiXHVDMkE0XHVEMTRDXHVDNzc0XHVEMTMwIFx1QzJBQ1x1Qjg2RiBcdUMyMTgiLCgwLGIuanN4KSgiaW5wdXQiLHt0eXBlOiJudW1iZXIiLG1pbjoiMyIsbWF4OiI3MiIsc3RlcDoiMSIsdmFsdWU6YS5zbG90Q291bnQsb25DaGFuZ2U6Uz0+ZSh7Li4uYSxzbG90Q291bnQ6TnVtYmVyKFMudGFyZ2V0LnZhbHVlKX0pfSksKDAsYi5qc3gpKCJzbWFsbCIse2NoaWxkcmVuOiIzXHUyMDEzNzJcdUMyQUNcdUI4NkYifSldfSksKDAsYi5qc3hzKSgibGFiZWwiLHtjaGlsZHJlbjpbIkhhbGwgXHVDRDlDXHVCODI1IFx1QjE3Q1x1QjlBQyIsKDAsYi5qc3hzKSgic2VsZWN0Iix7dmFsdWU6YS5oYWxsSW52ZXJ0ZWQ/ImludmVydGVkIjoibm9ybWFsIixvbkNoYW5nZTpTPT5lKHsuLi5hLGhhbGxJbnZlcnRlZDpTLnRhcmdldC52YWx1ZT09PSJpbnZlcnRlZCJ9KSxjaGlsZHJlbjpbKDAsYi5qc3gpKCJvcHRpb24iLHt2YWx1ZToiaW52ZXJ0ZWQiLGNoaWxkcmVuOiJcdUJDMThcdUM4MDQoXHVDMkU0XHVBRTMwKSJ9KSwoMCxiLmpzeCkoIm9wdGlvbiIse3ZhbHVlOiJub3JtYWwiLGNoaWxkcmVuOiJcdUM4MTVcdUMwQzEifSldfSksKDAsYi5qc3gpKCJzbWFsbCIse2NoaWxkcmVuOiJcdUMyRTRcdUFFMzAgXHVBRTMwXHVCQ0Y4XHVDNzQwIGFjdGl2ZS1sb3cgXHVCQzE4XHVDODA0In0pXX0pXX0pXX0pfXZhciBsZD1gQGltcG9ydCAidGFpbHdpbmRjc3MiOwoKOnJvb3QgewogIC0tYmc6ICMxMDE1MWQ7CiAgLS1wYW5lbDogIzE3MjAyYjsKICAtLXBhbmVsLTI6ICMxYjI2MzM7CiAgLS1mZzogI2VlZjRmYjsKICAtLW11dGVkOiAjOWViMGMzOwogIC0tZ3JpZDogIzNhNDg1ODsKICAtLW5vcnRoOiAjZWY1MzUwOwogIC0tc291dGg6ICM0MmE1ZjU7CiAgLS1maWVsZDogI2ZmZDU0ZjsKICAtLXBvczogI2ZmNzA0MzsKICAtLW5lZzogIzQyYTVmNTsKICAtLW9wZW46ICM3MTgwOTY7CiAgLS1jYXV0aW9uOiAjZmZjYTVjOwogIC0tY3JpdGljYWw6ICNmZjZiNmI7CiAgLS1hY3RpdmU6ICM0YjQyMWQ7CiAgY29sb3Itc2NoZW1lOiBkYXJrOwp9CgoqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQoKaHRtbCwgYm9keSB7IG1hcmdpbjogMDsgbWluLWhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogdmFyKC0tYmcpOyBjb2xvcjogdmFyKC0tZmcpOyB9Cgpib2R5IHsKICBmb250LWZhbWlseTogIk1hbGd1biBHb3RoaWMiLCAiTm90byBTYW5zIEtSIiwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxNHB4Owp9CgpidXR0b24sIHNlbGVjdCwgaW5wdXQgeyBmb250OiBpbmhlcml0OyB9CgpidXR0b24sIHNlbGVjdCwgaW5wdXRbdHlwZT0ibnVtYmVyIl0gewogIG1pbi1oZWlnaHQ6IDM2cHg7CiAgYm9yZGVyOiAxcHggc29saWQgIzdmOGE5NjsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgYmFja2dyb3VuZDogI2U5ZTdkZjsKICBjb2xvcjogIzExMTgyMDsKICBwYWRkaW5nOiA2cHggMTBweDsKfQoKYnV0dG9uIHsgY3Vyc29yOiBwb2ludGVyOyB9CmJ1dHRvbjpob3ZlciB7IGZpbHRlcjogYnJpZ2h0bmVzcygxLjA1KTsgfQpidXR0b246Zm9jdXMtdmlzaWJsZSwgc2VsZWN0OmZvY3VzLXZpc2libGUsIGlucHV0OmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAzcHggc29saWQgIzYzYjNlZDsgb3V0bGluZS1vZmZzZXQ6IDJweDsgfQoucHJpbWFyeS1idXR0b24geyBmb250LXdlaWdodDogNzAwOyB9CgppbnB1dFt0eXBlPSJyYW5nZSJdIHsgYWNjZW50LWNvbG9yOiAjZDlkNmNhOyB3aWR0aDogMTAwJTsgfQoKLmFwcC1zaGVsbCB7IG1pbi1oZWlnaHQ6IDEwMHZoOyBwYWRkaW5nOiAxMnB4IDE2cHggMTZweDsgfQoKLmFwcC1oZWFkZXIgewogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBnYXA6IDIwcHg7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKLmFwcC1oZWFkZXIgaDEgeyBtYXJnaW46IDA7IGZvbnQtc2l6ZTogMTlweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQouYXBwLWhlYWRlciBwIHsgbWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB0ZXh0LWFsaWduOiByaWdodDsgZm9udC1zaXplOiAxMnB4OyB9Cgouc2ltLWdyaWQgewogIGRpc3BsYXk6IGdyaWQ7CiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNDcwcHgsIDFmcikgbWlubWF4KDUxMHB4LCA1NjBweCk7CiAgZ2FwOiAxMnB4OwogIG1pbi1oZWlnaHQ6IDY4MHB4Owp9CgoubW90b3ItcGFuZWwgeyBtaW4td2lkdGg6IDA7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9Ci5tb3Rvci1zdmcgeyB3aWR0aDogbWluKDEwMCUsIDc4MHB4KTsgaGVpZ2h0OiBhdXRvOyBkaXNwbGF5OiBibG9jazsgfQoubW90b3Itb3V0bGluZSB7IGZpbGw6IG5vbmU7IHN0cm9rZTogdmFyKC0tZ3JpZCk7IHN0cm9rZS13aWR0aDogMzsgfQoubW90b3Itb3V0bGluZS50aGluIHsgc3Ryb2tlLXdpZHRoOiAyOyB9Ci5zbG90LWxpbmUgeyBzdHJva2U6IHZhcigtLWdyaWQpOyBzdHJva2Utd2lkdGg6IDE7IH0KLnJpc2sgeyBmaWxsOiBub25lOyBzdHJva2Utd2lkdGg6IDc7IHN0cm9rZS1saW5lY2FwOiBidXR0OyB9Ci5yaXNrLmNhdXRpb24geyBzdHJva2U6IHZhcigtLWNhdXRpb24pOyB9Ci5yaXNrLmNyaXRpY2FsIHsgc3Ryb2tlOiB2YXIoLS1jcml0aWNhbCk7IH0KLnBoYXNlLW1hcmtlciBlbGxpcHNlIHsgc3Ryb2tlLXdpZHRoOiAyOyB9Ci5waGFzZS1tYXJrZXIgdGV4dCB7IGZpbGw6IHZhcigtLWZnKTsgdGV4dC1hbmNob3I6IG1pZGRsZTsgZm9udDogNzAwIDE1cHggQXJpYWwsIHNhbnMtc2VyaWY7IH0KLnBoYXNlLW1hcmtlci5wb3MgZWxsaXBzZSB7IGZpbGw6IHZhcigtLXBvcyk7IHN0cm9rZTogdmFyKC0tZmcpOyB9Ci5waGFzZS1tYXJrZXIubmVnIGVsbGlwc2UgeyBmaWxsOiB2YXIoLS1uZWcpOyBzdHJva2U6IHZhcigtLWZnKTsgfQoucGhhc2UtbWFya2VyLm9wZW4gZWxsaXBzZSB7IGZpbGw6IHZhcigtLW9wZW4pOyBzdHJva2U6IHZhcigtLWdyaWQpOyB9Ci5yb3Rvci1ub3J0aCB7IGZpbGw6IHZhcigtLW5vcnRoKTsgc3Ryb2tlOiB2YXIoLS1iZyk7IHN0cm9rZS13aWR0aDogMjsgfQoucm90b3Itc291dGggeyBmaWxsOiB2YXIoLS1zb3V0aCk7IHN0cm9rZTogdmFyKC0tYmcpOyBzdHJva2Utd2lkdGg6IDI7IH0KLnBvbGUtbGFiZWwgeyBmaWxsOiB3aGl0ZTsgdGV4dC1hbmNob3I6IG1pZGRsZTsgZm9udDogNzAwIDIwcHggQXJpYWwsIHNhbnMtc2VyaWY7IH0KLmhhbGwtYm94IHJlY3QgeyBzdHJva2U6IHZhcigtLWZpZWxkKTsgc3Ryb2tlLXdpZHRoOiAyOyB9Ci5oYWxsLWJveC5vbiByZWN0IHsgZmlsbDogdmFyKC0tZmllbGQpOyB9Ci5oYWxsLWJveC5vZmYgcmVjdCB7IGZpbGw6IHZhcigtLXBhbmVsKTsgfQouaGFsbC1ib3ggdGV4dCB7IHRleHQtYW5jaG9yOiBtaWRkbGU7IGZvbnQ6IDcwMCAxMnB4IENvbnNvbGFzLCBtb25vc3BhY2U7IH0KLmhhbGwtYm94Lm9uIHRleHQgeyBmaWxsOiB2YXIoLS1iZyk7IH0KLmhhbGwtYm94Lm9mZiB0ZXh0IHsgZmlsbDogdmFyKC0tZmcpOyB9Ci5oYWxsLWJveCAuaGFsbC1hbmdsZSB7IGZvbnQtc2l6ZTogMTFweDsgfQoucm90b3ItYXJyb3cgeyBzdHJva2U6IHZhcigtLW5vcnRoKTsgc3Ryb2tlLXdpZHRoOiA1OyB9Ci5maWVsZC1hcnJvdyB7IHN0cm9rZTogdmFyKC0tZmllbGQpOyBzdHJva2Utd2lkdGg6IDM7IH0KLmZpbGwtbm9ydGggeyBmaWxsOiB2YXIoLS1ub3J0aCk7IH0KLmZpbGwtZmllbGQgeyBmaWxsOiB2YXIoLS1maWVsZCk7IH0KLmh1YiB7IGZpbGw6IHZhcigtLXBhbmVsKTsgc3Ryb2tlOiB2YXIoLS1ncmlkKTsgc3Ryb2tlLXdpZHRoOiAyOyB9Ci5odWItdGV4dCB7IGZpbGw6IHZhcigtLWZnKTsgdGV4dC1hbmNob3I6IG1pZGRsZTsgZm9udDogNzAwIDE1cHggQ29uc29sYXMsIG1vbm9zcGFjZTsgfQoubW90b3ItY2FwdGlvbiB0ZXh0IHsgZmlsbDogdmFyKC0tZmcpOyBmb250LXNpemU6IDEycHg7IH0KCi5sb2dpYy1wYW5lbCB7CiAgbWluLXdpZHRoOiAwOwogIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsKTsKICBwYWRkaW5nOiAxNHB4OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5saXZlLXN0YXR1cyB7IG1pbi1oZWlnaHQ6IDU3cHg7IGRpc3BsYXk6IGdyaWQ7IGdhcDogNXB4OyBmb250LWZhbWlseTogQ29uc29sYXMsIG1vbm9zcGFjZTsgfQoubGl2ZS1zdGF0dXMgc3Ryb25nIHsgZm9udC1zaXplOiAxNHB4OyB9Ci5saXZlLXN0YXR1cyBzcGFuIHsgZm9udC1zaXplOiAxM3B4OyB9Ci5zZXZlcml0eS0wIHsgY29sb3I6IHZhcigtLWZnKTsgfQouc2V2ZXJpdHktMSB7IGNvbG9yOiB2YXIoLS1jYXV0aW9uKTsgfQouc2V2ZXJpdHktMiB7IGNvbG9yOiB2YXIoLS1jcml0aWNhbCk7IH0KCi5waGFzZS1wYW5lbCB7CiAgaGVpZ2h0OiAxMTJweDsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7CiAgYWxpZ24taXRlbXM6IGVuZDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZ3JpZCk7CiAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoucGhhc2Utb3V0cHV0IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBnYXA6IDEwcHg7CiAgcGFkZGluZy1ib3R0b206IDdweDsKICBmb250LWZhbWlseTogQ29uc29sYXMsIG1vbm9zcGFjZTsKfQoKLnBoYXNlLXBpbiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogNTAlOyBib3R0b206IDM4cHg7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDM2cHg7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgfQoucGhhc2UtcGluOjpiZWZvcmUgeyBjb250ZW50OiAiIjsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGxlZnQ6IC00cHg7IHRvcDogLTdweDsgfQoucGhhc2Utb3V0cHV0LnBvcyAucGhhc2UtcGluLCAucGhhc2Utb3V0cHV0LnBvcyAucGhhc2UtcGluOjpiZWZvcmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1wb3MpOyB9Ci5waGFzZS1vdXRwdXQubmVnIC5waGFzZS1waW4sIC5waGFzZS1vdXRwdXQubmVnIC5waGFzZS1waW46OmJlZm9yZSB7IGJhY2tncm91bmQ6IHZhcigtLW5lZyk7IH0KLnBoYXNlLW91dHB1dC5vcGVuIC5waGFzZS1waW4geyBoZWlnaHQ6IDJweDsgYm90dG9tOiA1NnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmlkKTsgfQoucGhhc2Utb3V0cHV0Lm9wZW4gLnBoYXNlLXBpbjo6YmVmb3JlIHsgYmFja2dyb3VuZDogdmFyKC0tb3Blbik7IH0KCi5sb2dpYy1wYW5lbCBoMiB7IG1hcmdpbjogOHB4IDAgNXB4OyBmb250LXNpemU6IDEzcHg7IH0KLnRhYmxlLXdyYXAgeyBvdmVyZmxvdy14OiBhdXRvOyB9Ci5sb2dpYy10YWJsZSB7IHdpZHRoOiAxMDAlOyBtaW4td2lkdGg6IDUwMHB4OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBiYWNrZ3JvdW5kOiAjZjBlZWU4OyBjb2xvcjogIzExMTgyMDsgZm9udC1zaXplOiAxMnB4OyB9Ci5sb2dpYy10YWJsZSB0aCwgLmxvZ2ljLXRhYmxlIHRkIHsgYm9yZGVyOiAxcHggc29saWQgIzljOWI5NDsgcGFkZGluZzogNHB4IDVweDsgdGV4dC1hbGlnbjogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Ci5sb2dpYy10YWJsZSB0aCB7IGJhY2tncm91bmQ6ICNkOGQ1Y2Q7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KLmxvZ2ljLXRhYmxlIC5hY3RpdmUtcm93IHsgYmFja2dyb3VuZDogIzVhNGQxODsgY29sb3I6IHdoaXRlOyB9Ci5sZWdlbmQsIC5leHBsYWluIHsgbWFyZ2luOiA2cHggMDsgZm9udC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tZmcpOyB9CgoudGltaW5nLXN2ZyB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IG1pbi1oZWlnaHQ6IDE3OHB4OyBkaXNwbGF5OiBibG9jazsgfQoudGltaW5nLWFjdGl2ZSB7IGZpbGw6ICMzMDJkMWM7IH0KLnRpbWluZy1jYXV0aW9uIHsgZmlsbDogIzNhMzAxZDsgfQoudGltaW5nLWNyaXRpY2FsIHsgZmlsbDogIzNiMjAyNjsgfQoudGltaW5nLWdyaWQgeyBzdHJva2U6IHZhcigtLWdyaWQpOyBzdHJva2Utd2lkdGg6IDE7IH0KLnRpbWluZy10aWNrLCAudGltaW5nLWF4aXMtdGl0bGUgeyBmaWxsOiB2YXIoLS1tdXRlZCk7IGZvbnQ6IDExcHggQ29uc29sYXMsIG1vbm9zcGFjZTsgfQoudGltaW5nLWxhYmVsIHsgZmlsbDogdmFyKC0tZmcpOyBmb250OiA3MDAgMTJweCBDb25zb2xhcywgbW9ub3NwYWNlOyB9Ci53YXZlIHsgZmlsbDogbm9uZTsgc3Ryb2tlLXdpZHRoOiAyLjU7IH0KLmxhbmUtMCwgLmxhbmUtMSwgLmxhbmUtMiB7IHN0cm9rZTogdmFyKC0tZmllbGQpOyB9Ci5sYW5lLTMgeyBzdHJva2U6IHZhcigtLXBvcyk7IH0KLmxhbmUtNCB7IHN0cm9rZTogdmFyKC0tbmVnKTsgfQoubGFuZS01IHsgc3Ryb2tlOiAjYWI3Y2ZmOyB9Ci50aW1pbmctbWFya2VyIHsgc3Ryb2tlOiB2YXIoLS1mZyk7IHN0cm9rZS13aWR0aDogMjsgfQoKLnNsb3QtbW9uaXRvciB7IGRpc3BsYXk6IGdyaWQ7IGdhcDogMnB4OyBmb250LXNpemU6IDExcHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0KCi5jb250cm9scy1wYW5lbCB7CiAgbWFyZ2luLXRvcDogMTBweDsKICBiYWNrZ3JvdW5kOiB2YXIoLS1wYW5lbC0yKTsKICBib3JkZXItdG9wOiAycHggc29saWQgI2Q2ZGRlNjsKICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMTcwcHggMTkwcHggbWlubWF4KDI4MHB4LCAxZnIpOwogIGdhcDogMTBweCAxNHB4OwogIGFsaWduLWl0ZW1zOiBlbmQ7Cn0KCi5jb250cm9scy1wYW5lbCBsYWJlbCB7IGRpc3BsYXk6IGdyaWQ7IGdhcDogNXB4OyBtaW4td2lkdGg6IDA7IH0KLmNvbnRyb2xzLXBhbmVsIHN0cm9uZyB7IGZvbnQtZmFtaWx5OiBDb25zb2xhcywgbW9ub3NwYWNlOyB9Ci5jb250cm9scy1wYW5lbCBzbWFsbCB7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTFweDsgfQoucGxheS1jb250cm9scyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwcHggMTAwcHg7IGdhcDogNXB4OyB9Ci5wbGF5LWNvbnRyb2xzIC5wcmltYXJ5LWJ1dHRvbiB7IGdyaWQtcm93OiBzcGFuIDI7IH0KLmFuZ2xlLWNvbnRyb2wgeyBtaW4td2lkdGg6IDI4MHB4OyB9Ci5jb25maWctZGl2aWRlciB7IGdyaWQtY29sdW1uOiAxIC8gLTE7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZDZkZGU2OyBtYXJnaW4tdG9wOiAycHg7IH0KLmNvbmZpZy1zdGF0dXMgeyBhbGlnbi1zZWxmOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTJweDsgfQouY29uZmlnLXN0YXR1cy5vayB7IGNvbG9yOiB2YXIoLS1maWVsZCk7IH0KLmNvbmZpZy1zdGF0dXMud2FybiB7IGNvbG9yOiB2YXIoLS1jYXV0aW9uKTsgfQouY29uZmlnLXN0YXR1cy5kYW5nZXIgeyBjb2xvcjogdmFyKC0tY3JpdGljYWwpOyB9Ci5jb25maWctYWN0aW9ucyB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IGdhcDogNnB4OyB9CgpAbWVkaWEgKG1heC13aWR0aDogMTEyMHB4KSB7CiAgLmFwcC1oZWFkZXIgeyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA0cHg7IH0KICAuYXBwLWhlYWRlciBwIHsgdGV4dC1hbGlnbjogbGVmdDsgfQogIC5zaW0tZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9CiAgLm1vdG9yLXBhbmVsIHsgbWluLWhlaWdodDogNjAwcHg7IH0KICAubG9naWMtcGFuZWwgeyBtYXgtd2lkdGg6IG5vbmU7IH0KICAuY29udHJvbHMtcGFuZWwgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMjIwcHgsIDFmcikpOyB9CiAgLmNvbmZpZy1kaXZpZGVyIHsgZ3JpZC1jb2x1bW46IDEgLyAtMTsgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNjUwcHgpIHsKICAuYXBwLXNoZWxsIHsgcGFkZGluZzogOHB4OyB9CiAgLmFwcC1oZWFkZXIgaDEgeyBmb250LXNpemU6IDE2cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IH0KICAuc2ltLWdyaWQgeyBtaW4taGVpZ2h0OiBhdXRvOyB9CiAgLm1vdG9yLXBhbmVsIHsgbWluLWhlaWdodDogMDsgfQogIC5sb2dpYy1wYW5lbCB7IHBhZGRpbmc6IDlweDsgfQogIC5jb250cm9scy1wYW5lbCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9CiAgLmNvbmZpZy1kaXZpZGVyIHsgZ3JpZC1jb2x1bW46IDE7IH0KICAucGxheS1jb250cm9scyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7IH0KICAuYW5nbGUtY29udHJvbCB7IG1pbi13aWR0aDogMDsgfQp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICogeyBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsgfQp9CmA7dmFyIGFkPU1hKEV1KCksMSksenY9bGQucmVwbGFjZSgnQGltcG9ydCAidGFpbHdpbmRjc3MiOycsIiIpLnJlcGxhY2UoIjpyb290IHsiLCI6aG9zdCB7IiksQXY9YAo6aG9zdCB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7Cn0KLmFwcC1zaGVsbCB7CiAgYmFja2dyb3VuZDogdmFyKC0tYmcpOwogIGNvbG9yOiB2YXIoLS1mZyk7CiAgZm9udC1mYW1pbHk6ICJNYWxndW4gR290aGljIiwgIk5vdG8gU2FucyBLUiIsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMTRweDsKfQpgO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWJsZGMtc2l4LXN0ZXAtcm9vdF0iKS5mb3JFYWNoKGw9PntpZihsLmRhdGFzZXQuYmxkY01vdW50ZWQ9PT0idHJ1ZSIpcmV0dXJuO2wuZGF0YXNldC5ibGRjTW91bnRlZD0idHJ1ZSI7bGV0IHQ9bC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2EudGV4dENvbnRlbnQ9YCR7enZ9CiR7QXZ9YDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmFwcGVuZChhLGUpLCgwLHRkLmNyZWF0ZVJvb3QpKGUpLnJlbmRlcigoMCxhZC5qc3gpKFBmLHt9KSl9KTt9KSgpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24uanM6CiAgKCoqCiAgICogQGxpY2Vuc2UgUmVhY3QKICAgKiByZWFjdC5wcm9kdWN0aW9uLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanM6CiAgKCoqCiAgICogQGxpY2Vuc2UgUmVhY3QKICAgKiByZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanMKICAgKgogICAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiAgICoKICAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICAgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAgICopCgpyZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24uanMKICAgKgogICAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiAgICoKICAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICAgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAgICopCiovCg==