3MxZ2rcGgPFmkECT6NA35zhtoMzRNv2jLTk · data · 2.7c767379.chunk.js_33
{
"2.7c767379.chunk.js_33": "base64:KHMpP3M6ZS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdCh0KT9lLnJhdygpLnRvU3RyaW5nKCk6ZS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrdCsiIHVuc3VwcG9ydGVkIil9LGMucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGk9W10sbz0wOyFlLmlzRW1wdHkoKTspe3ZhciBhPWUucmVhZFVJbnQ4KCk7bzw8PTcsb3w9MTI3JmEsMD09PSgxMjgmYSkmJihpLnB1c2gobyksbz0wKX0xMjgmYSYmaS5wdXNoKG8pO3ZhciBzPWlbMF0vNDB8MCx1PWlbMF0lNDA7aWYobj1yP2k6W3MsdV0uY29uY2F0KGkuc2xpY2UoMSkpLHQpe3ZhciBjPXRbbi5qb2luKCIgIildO3ZvaWQgMD09PWMmJihjPXRbbi5qb2luKCIuIildKSx2b2lkIDAhPT1jJiYobj1jKX1yZXR1cm4gbn0sYy5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnJhdygpLnRvU3RyaW5nKCk7aWYoImdlbnRpbWUiPT09dCl2YXIgbj0wfHIuc2xpY2UoMCw0KSxpPTB8ci5zbGljZSg0LDYpLG89MHxyLnNsaWNlKDYsOCksYT0wfHIuc2xpY2UoOCwxMCkscz0wfHIuc2xpY2UoMTAsMTIpLHU9MHxyLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PXQpcmV0dXJuIGUuZXJyb3IoIkRlY29kaW5nICIrdCsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtuPTB8ci5zbGljZSgwLDIpLGk9MHxyLnNsaWNlKDIsNCksbz0wfHIuc2xpY2UoNCw2KSxhPTB8ci5zbGljZSg2LDgpLHM9MHxyLnNsaWNlKDgsMTApLHU9MHxyLnNsaWNlKDEwLDEyKTtuPW48NzA/MmUzK246MTkwMCtufXJldHVybiBEYXRlLlVUQyhuLGktMSxvLGEscyx1LDApfSxjLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbH0sYy5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWFkVUludDgoKTtyZXR1cm4gZS5pc0Vycm9yKHQpP3Q6MCE9PXR9LGMucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnJhdygpLG49bmV3IGEocik7cmV0dXJuIHQmJihuPXRbbi50b1N0cmluZygxMCldfHxuKSxufSxjLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBlJiYoZT1lKHQpKSxlLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNyksaT1yKDE4KS5CdWZmZXIsbz1yKDEzMSksYT1vLmJhc2Uscz1vLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gdShlKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9ZS5uYW1lLHRoaXMuZW50aXR5PWUsdGhpcy50cmVlPW5ldyBjLHRoaXMudHJlZS5faW5pdChlLmJvZHkpfWZ1bmN0aW9uIGMoZSl7YS5Ob2RlLmNhbGwodGhpcywiZGVyIixlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBlPDEwPyIwIitlOmV9ZS5leHBvcnRzPXUsdS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKGUsdCkuam9pbigpfSxuKGMsYS5Ob2RlKSxjLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBvLGE9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk7InNlcW9mIj09PWU/ZT0ic2VxIjoic2V0b2YiPT09ZSYmKGU9InNldCIpO2lmKHMudGFnQnlOYW1lLmhhc093blByb3BlcnR5KGUpKWk9cy50YWdCeU5hbWVbZV07ZWxzZXtpZigibnVtYmVyIiE9PXR5cGVvZiBlfHwoMHxlKSE9PWUpcmV0dXJuIG4uZXJyb3IoIlVua25vd24gdGFnOiAiK2UpO2k9ZX1pZihpPj0zMSlyZXR1cm4gbi5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik7dHx8KGl8PTMyKTtyZXR1cm4gaXw9cy50YWdDbGFzc0J5TmFtZVtyfHwidW5pdmVyc2FsIl08PDZ9KGUsdCxyLHRoaXMucmVwb3J0ZXIpO2lmKG4ubGVuZ3RoPDEyOClyZXR1cm4obz1uZXcgaSgyKSlbMF09YSxvWzFdPW4ubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pO2Zvcih2YXIgdT0xLGM9bi5sZW5ndGg7Yz49MjU2O2M+Pj04KXUrKzsobz1uZXcgaSgyK3UpKVswXT1hLG9bMV09MTI4fHU7Yz0xK3U7Zm9yKHZhciBmPW4ubGVuZ3RoO2Y+MDtjLS0sZj4+PTgpb1tjXT0yNTUmZjtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9LGMucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oZSx0KXtpZigiYml0c3RyIj09PXQpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8ZS51bnVzZWQsZS5kYXRhXSk7aWYoImJtcHN0ciI9PT10KXtmb3IodmFyIHI9bmV3IGkoMiplLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7bisrKXIud3JpdGVVSW50MTZCRShlLmNoYXJDb2RlQXQobiksMipuKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihyKX1yZXR1cm4ibnVtc3RyIj09PXQ/dGhpcy5faXNOdW1zdHIoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT10P3RoaXMuX2lzUHJpbnRzdHIoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk6Im9iakRlc2MiPT09dD90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK3QrIiB1bnN1cHBvcnRlZCIpfSxjLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oZSx0LHIpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUpe2lmKCF0KXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7ZT10W2VdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWVbbl18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtlPWUuc2xpY2UoKTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWVbbl18PTB9aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShlKSk7aWYoIXIpe2lmKGVbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtlLnNwbGljZSgwLDIsNDAqZVswXStlWzFdKX12YXIgbz0wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07Zm9yKG8rKzthPj0xMjg7YT4+PTcpbysrfXZhciBzPW5ldyBpKG8pLHU9cy5sZW5ndGgtMTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXthPWVbbl07Zm9yKHNbdS0tXT0xMjcmYTsoYT4+PTcpPjA7KXNbdS0tXT0xMjh8MTI3JmF9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocyl9LGMucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1uZXcgRGF0ZShlKTtyZXR1cm4iZ2VudGltZSI9PT10P3I9W2Yobi5nZXRGdWxsWWVhcigpKSxmKG4uZ2V0VVRDTW9udGgoKSsxKSxmKG4uZ2V0VVRDRGF0ZSgpKSxmKG4uZ2V0VVRDSG91cnMoKSksZihuLmdldFVUQ01pbnV0ZXMoKSksZihuLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT10P3I9W2Yobi5nZXRGdWxsWWVhcigpJTEwMCksZihuLmdldFVUQ01vbnRoKCkrMSksZihuLmdldFVUQ0RhdGUoKSksZihuLmdldFVUQ0hvdXJzKCkpLGYobi5nZXRVVENNaW51dGVzKCkpLGYobi5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIit0KyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihyLCJvY3RzdHIiKX0sYy5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LGMucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIj09PXR5cGVvZiBlKXtpZighdClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShlKSk7ZT10W2VdfWlmKCJudW1iZXIiIT09dHlwZW9mIGUmJiFpLmlzQnVmZmVyKGUpKXt2YXIgcj1lLnRvQXJyYXkoKTshZS5zaWduJiYxMjgmclswXSYmci51bnNoaWZ0KDApLGU9bmV3IGkocil9aWYoaS5pc0J1ZmZlcihlKSl7dmFyIG49ZS5sZW5ndGg7MD09PWUubGVuZ3RoJiZuKys7dmFyIG89bmV3IGkobik7cmV0dXJuIGUuY29weShvKSwwPT09ZS5sZW5ndGgmJihvWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobyl9aWYoZTwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk7aWYoZTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsZV0pO249MTtmb3IodmFyIGE9ZTthPj0yNTY7YT4+PTgpbisrO2ZvcihhPShvPW5ldyBBcnJheShuKSkubGVuZ3RoLTE7YT49MDthLS0pb1thXT0yNTUmZSxlPj49ODtyZXR1cm4gMTI4Jm9bMF0mJm8udW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBpKG8pKX0sYy5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZT8yNTU6MCl9LGMucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGUmJihlPWUodCkpLGUuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LGMucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PWkuZGVmYXVsdClyZXR1cm4hMTt2YXIgbz1lLmpvaW4oKTtpZih2b2lkIDA9PT1pLmRlZmF1bHRCdWZmZXImJihpLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoaS5kZWZhdWx0LHQscikuam9pbigpKSxvLmxlbmd0aCE9PWkuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25dIT09aS5kZWZhdWx0QnVmZmVyW25dKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXsiMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxMjcpLGk9cig4KS5CdWZmZXI7ZnVuY3Rpb24gbyhlKXt2YXIgdD1pLmFsbG9jVW5zYWZlKDQpO3JldHVybiB0LndyaXRlVUludDMyQkUoZSwwKSx0fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWkuYWxsb2MoMCkscz0wO2EubGVuZ3RoPHQ7KXI9byhzKyspLGE9aS5jb25jYXQoW2Esbigic2hhMSIpLnVwZGF0ZShlKS51cGRhdGUocikuZGlnZXN0KCldKTtyZXR1cm4gYS5zbGljZSgwLHQpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj0tMTsrK248cjspZVtuXV49dFtuXTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDI0KSxpPXIoOCkuQnVmZmVyO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpLmZyb20oZS50b1JlZChuLm1vbnQodC5tb2R1bHVzKSkucmVkUG93KG5ldyBuKHQucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighcilyZXR1cm4gZTt2YXIgbixpLG89ci5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEobj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKG4udmFsdWUpfWNhdGNoKHMpe2k9e2Vycm9yOnN9fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihyPW8ucmV0dXJuKSYmci5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPXIoMTMzKSxvPXIoMTU2KSxhPXIoNjcpLHM9cigxMzYpLHU9cigxNjYpLGM9cigxNjcpLGY9cig3OSk7dC5hZXNFbmNyeXB0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PXImJihyPSJDQkMiKTt2YXIgbz1pLmNpcGhlci5jcmVhdGVDaXBoZXIoIkFFUy0iK3IsZi5ieXRlc1RvU3RyaW5nKGEuX2Zyb21Jbih0KSwicmF3IikpO3JldHVybiBvLnN0YXJ0KHtpdjpuJiZpLnV0aWwuY3JlYXRlQnVmZmVyKGYuYnl0ZXNUb1N0cmluZyhhLl9mcm9tSW4obiksInJhdyIpKX0pLG8udXBkYXRlKGkudXRpbC5jcmVhdGVCdWZmZXIoZi5ieXRlc1RvU3RyaW5nKGUsInJhdyIpKSksby5maW5pc2goKSxmLnN0cmluZ1RvQnl0ZXMoby5vdXRwdXQuZ2V0Qnl0ZXMoKSwicmF3Iil9LHQuYWVzRGVjcnlwdD1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1yJiYocj0iQ0JDIik7dmFyIG89aS5jaXBoZXIuY3JlYXRlRGVjaXBoZXIoIkFFUy0iK3IsZi5ieXRlc1RvU3RyaW5nKGEuX2Zyb21Jbih0KSwicmF3IikpO28uc3RhcnQoe2l2Om4mJmkudXRpbC5jcmVhdGVCdWZmZXIoZi5ieXRlc1RvU3RyaW5nKGEuX2Zyb21JbihuKSwicmF3IikpfSk7dmFyIHM9aS51dGlsLmNyZWF0ZUJ1ZmZlcihmLmJ5dGVzVG9TdHJpbmcoYS5fZnJvbUluKGUpLCJyYXciKSk7aWYoby51cGRhdGUocyksIW8uZmluaXNoKCkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZGVjcnlwdCBkYXRhIHdpdGggcHJvdmlkZWQga2V5Iik7cmV0dXJuIGYuc3RyaW5nVG9CeXRlcyhvLm91dHB1dC5nZXRCeXRlcygpLCJyYXciKX0sdC5tZXNzYWdlRW5jcnlwdD1mdW5jdGlvbihlLHIpe3ZhciBuPVVpbnQ4QXJyYXkuZnJvbShbMV0pLGk9by5yYW5kb21CeXRlcygzMiksYT1vLnJhbmRvbUJ5dGVzKDE2KSxjPWYuc3RyaW5nVG9CeXRlcyhyKSxsPXQuYWVzRW5jcnlwdChjLGksIkNUUiIsYSksaD10LmFlc0VuY3J5cHQoaSxlLCJFQ0IiKSxwPXMuaG1hY1NIQTI1NihjLGkpLGQ9cy5obWFjU0hBMjU2KHUuY29uY2F0KGksYSksZSk7cmV0dXJuIHUuY29uY2F0KG4saCxkLHAsYSxsKX0sdC5tZXNzYWdlRGVjcnlwdD1mdW5jdGlvbihlLHIpe3ZhciBpPW4odS5zcGxpdChyLDEsNDgsMzIsMzIsMTYpLDYpLG89KGlbMF0saVsxXSksYz1pWzJdLGw9aVszXSxoPWlbNF0scD1pWzVdLGQ9dC5hZXNEZWNyeXB0KG8sZSwiRUNCIik7aWYoIWEuX2Zyb21JbihzLmhtYWNTSEEyNTYodS5jb25jYXQoZCxoKSxhLl9mcm9tSW4oZSkpKS5ldmVyeShmdW5jdGlvbihlLHQpe3JldHVybiBlPT09Y1t0XX0pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBrZXkiKTt2YXIgeT10LmFlc0RlY3J5cHQocCxkLCJDVFIiLGgpO2lmKCFhLl9mcm9tSW4ocy5obWFjU0hBMjU2KHksZCkpLmV2ZXJ5KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1sW3RdfSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1lc3NhZ2UiKTtyZXR1cm4gZi5ieXRlc1RvU3RyaW5nKHkpfSx0LnNoYXJlZEtleT1mdW5jdGlvbihlLHQscil7dmFyIG49Yy5kZWZhdWx0LnNoYXJlZEtleShhLl9mcm9tSW4oZSksYS5fZnJvbUluKHQpKSxpPXMuc2hhMjU2KGEuX2Zyb21SYXdJbihyKSk7cmV0dXJuIHMuaG1hY1NIQTI1NihuLGkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNik7cigxMCksbi5jaXBoZXI9bi5jaXBoZXJ8fHt9O3ZhciBpPWUuZXhwb3J0cz1uLmNpcGhlci5tb2Rlcz1uLmNpcGhlci5tb2Rlc3x8e307ZnVuY3Rpb24gbyhlKXtpZigic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uLnV0aWwuY3JlYXRlQnVmZmVyKGUpKSxuLnV0aWwuaXNBcnJheShlKSYmZS5sZW5ndGg+NCl7dmFyIHQ9ZTtlPW4udXRpbC5jcmVhdGVCdWZmZXIoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillLnB1dEJ5dGUodFtyXSl9cmV0dXJuIG4udXRpbC5pc0FycmF5KGUpfHwoZT1bZS5nZXRJbnQzMigpLGUuZ2V0SW50MzIoKSxlLmdldEludDMyKCksZS5nZXRJbnQzMigpXSksZX1mdW5jdGlvbiBhKGUpe2VbZS5sZW5ndGgtMV09ZVtlLmxlbmd0aC0xXSsxJjQyOTQ5NjcyOTV9ZnVuY3Rpb24gcyhlKXtyZXR1cm5bZS80Mjk0OTY3Mjk2fDAsNDI5NDk2NzI5NSZlXX1pLmVjYj1mdW5jdGlvbihlKXtlPWV8fHt9LHRoaXMubmFtZT0iRUNCIix0aGlzLmNpcGhlcj1lLmNpcGhlcix0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZXx8MTYsdGhpcy5faW50cz10aGlzLmJsb2NrU2l6ZS80LHRoaXMuX2luQmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX291dEJsb2NrPW5ldyBBcnJheSh0aGlzLl9pbnRzKX0saS5lY2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe30saS5lY2IucHJvdG90eXBlLmVuY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe2lmKGUubGVuZ3RoKCk8dGhpcy5ibG9ja1NpemUmJiEociYmZS5sZW5ndGgoKT4wKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuX2ludHM7KytuKXRoaXMuX2luQmxvY2tbbl09ZS5nZXRJbnQzMigpO3RoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayk7Zm9yKG49MDtuPHRoaXMuX2ludHM7KytuKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbbl0pfSxpLmVjYi5wcm90b3R5cGUuZGVjcnlwdD1mdW5jdGlvbihlLHQscil7aWYoZS5sZW5ndGgoKTx0aGlzLmJsb2NrU2l6ZSYmIShyJiZlLmxlbmd0aCgpPjApKXJldHVybiEwO2Zvcih2YXIgbj0wO248dGhpcy5faW50czsrK24pdGhpcy5faW5CbG9ja1tuXT1lLmdldEludDMyKCk7dGhpcy5jaXBoZXIuZGVjcnlwdCh0aGlzLl9pbkJsb2NrLHRoaXMuX291dEJsb2NrKTtmb3Iobj0wO248dGhpcy5faW50czsrK24pdC5wdXRJbnQzMih0aGlzLl9vdXRCbG9ja1tuXSl9LGkuZWNiLnByb3RvdHlwZS5wYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCgpPT09dGhpcy5ibG9ja1NpemU/dGhpcy5ibG9ja1NpemU6dGhpcy5ibG9ja1NpemUtZS5sZW5ndGgoKTtyZXR1cm4gZS5maWxsV2l0aEJ5dGUocixyKSwhMH0saS5lY2IucHJvdG90eXBlLnVucGFkPWZ1bmN0aW9uKGUsdCl7aWYodC5vdmVyZmxvdz4wKXJldHVybiExO3ZhciByPWUubGVuZ3RoKCksbj1lLmF0KHItMSk7cmV0dXJuIShuPnRoaXMuYmxvY2tTaXplPDwyKSYmKGUudHJ1bmNhdGUobiksITApfSxpLmNiYz1mdW5jdGlvbihlKXtlPWV8fHt9LHRoaXMubmFtZT0iQ0JDIix0aGlzLmNpcGhlcj1lLmNpcGhlcix0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZXx8MTYsdGhpcy5faW50cz10aGlzLmJsb2NrU2l6ZS80LHRoaXMuX2luQmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX291dEJsb2NrPW5ldyBBcnJheSh0aGlzLl9pbnRzKX0saS5jYmMucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lLml2KXtpZighdGhpcy5fcHJldil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVYgcGFyYW1ldGVyLiIpO3RoaXMuX2l2PXRoaXMuX3ByZXYuc2xpY2UoMCl9ZWxzZXtpZighKCJpdiJpbiBlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVYgcGFyYW1ldGVyLiIpO3RoaXMuX2l2PW8oZS5pdiksdGhpcy5fcHJldj10aGlzLl9pdi5zbGljZSgwKX19LGkuY2JjLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXtpZihlLmxlbmd0aCgpPHRoaXMuYmxvY2tTaXplJiYhKHImJmUubGVuZ3RoKCk+MCkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjx0aGlzLl9pbnRzOysrbil0aGlzLl9pbkJsb2NrW25dPXRoaXMuX3ByZXZbbl1eZS5nZXRJbnQzMigpO3RoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayk7Zm9yKG49MDtuPHRoaXMuX2ludHM7KytuKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbbl0pO3RoaXMuX3ByZXY9dGhpcy5fb3V0QmxvY2t9LGkuY2JjLnByb3RvdHlwZS5kZWNyeXB0PWZ1bmN0aW9uKGUsdCxyKXtpZihlLmxlbmd0aCgpPHRoaXMuYmxvY2tTaXplJiYhKHImJmUubGVuZ3RoKCk+MCkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjx0aGlzLl9pbnRzOysrbil0aGlzLl9pbkJsb2NrW25dPWUuZ2V0SW50MzIoKTt0aGlzLmNpcGhlci5kZWNyeXB0KHRoaXMuX2luQmxvY2ssdGhpcy5fb3V0QmxvY2spO2ZvcihuPTA7bjx0aGlzLl9pbnRzOysrbil0LnB1dEludDMyKHRoaXMuX3ByZXZbbl1edGhpcy5fb3V0QmxvY2tbbl0pO3RoaXMuX3ByZXY9dGhpcy5faW5CbG9jay5zbGljZSgwKX0saS5jYmMucHJvdG90eXBlLnBhZD1mdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoKCk9PT10aGlzLmJsb2NrU2l6ZT90aGlzLmJsb2NrU2l6ZTp0aGlzLmJsb2NrU2l6ZS1lLmxlbmd0aCgpO3JldHVybiBlLmZpbGxXaXRoQnl0ZShyLHIpLCEwfSxpLmNiYy5wcm90b3R5cGUudW5wYWQ9ZnVuY3Rpb24oZSx0KXtpZih0Lm92ZXJmbG93PjApcmV0dXJuITE7dmFyIHI9ZS5sZW5ndGgoKSxuPWUuYXQoci0xKTtyZXR1cm4hKG4+dGhpcy5ibG9ja1NpemU8PDIpJiYoZS50cnVuY2F0ZShuKSwhMCl9LGkuY2ZiPWZ1bmN0aW9uKGUpe2U9ZXx8e30sdGhpcy5uYW1lPSJDRkIiLHRoaXMuY2lwaGVyPWUuY2lwaGVyLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplfHwxNix0aGlzLl9pbnRzPXRoaXMuYmxvY2tTaXplLzQsdGhpcy5faW5CbG9jaz1udWxsLHRoaXMuX291dEJsb2NrPW5ldyBBcnJheSh0aGlzLl9pbnRzKSx0aGlzLl9wYXJ0aWFsQmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX3BhcnRpYWxPdXRwdXQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfSxpLmNmYi5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYoISgiaXYiaW4gZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIElWIHBhcmFtZXRlci4iKTt0aGlzLl9pdj1vKGUuaXYpLHRoaXMuX2luQmxvY2s9dGhpcy5faXYuc2xpY2UoMCksdGhpcy5fcGFydGlhbEJ5dGVzPTB9LGkuY2ZiLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aCgpO2lmKDA9PT1uKXJldHVybiEwO2lmKHRoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayksMD09PXRoaXMuX3BhcnRpYWxCeXRlcyYmbj49dGhpcy5ibG9ja1NpemUpZm9yKHZhciBpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9pbkJsb2NrW2ldPWUuZ2V0SW50MzIoKV50aGlzLl9vdXRCbG9ja1tpXSx0LnB1dEludDMyKHRoaXMuX2luQmxvY2tbaV0pO2Vsc2V7dmFyIG89KHRoaXMuYmxvY2tTaXplLW4pJXRoaXMuYmxvY2tTaXplO28+MCYmKG89dGhpcy5ibG9ja1NpemUtbyksdGhpcy5fcGFydGlhbE91dHB1dC5jbGVhcigpO2ZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9wYXJ0aWFsQmxvY2tbaV09ZS5nZXRJbnQzMigpXnRoaXMuX291dEJsb2NrW2ldLHRoaXMuX3BhcnRpYWxPdXRwdXQucHV0SW50MzIodGhpcy5fcGFydGlhbEJsb2NrW2ldKTtpZihvPjApZS5yZWFkLT10aGlzLmJsb2NrU2l6ZTtlbHNlIGZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9pbkJsb2NrW2ldPXRoaXMuX3BhcnRpYWxCbG9ja1tpXTtpZih0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIHQucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhvLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz1vLCEwO3QucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhuLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfX0saS5jZmIucHJvdG90eXBlLmRlY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUubGVuZ3RoKCk7aWYoMD09PW4pcmV0dXJuITA7aWYodGhpcy5jaXBoZXIuZW5jcnlwdCh0aGlzLl9pbkJsb2NrLHRoaXMuX291dEJsb2NrKSwwPT09dGhpcy5fcGFydGlhbEJ5dGVzJiZuPj10aGlzLmJsb2NrU2l6ZSlmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX2luQmxvY2tbaV09ZS5nZXRJbnQzMigpLHQucHV0SW50MzIodGhpcy5faW5CbG9ja1tpXV50aGlzLl9vdXRCbG9ja1tpXSk7ZWxzZXt2YXIgbz0odGhpcy5ibG9ja1NpemUtbikldGhpcy5ibG9ja1NpemU7bz4wJiYobz10aGlzLmJsb2NrU2l6ZS1vKSx0aGlzLl9wYXJ0aWFsT3V0cHV0LmNsZWFyKCk7Zm9yKGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX3BhcnRpYWxCbG9ja1tpXT1lLmdldEludDMyKCksdGhpcy5fcGFydGlhbE91dHB1dC5wdXRJbnQzMih0aGlzLl9wYXJ0aWFsQmxvY2tbaV1edGhpcy5fb3V0QmxvY2tbaV0pO2lmKG8+MCllLnJlYWQtPXRoaXMuYmxvY2tTaXplO2Vsc2UgZm9yKGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX2luQmxvY2tbaV09dGhpcy5fcGFydGlhbEJsb2NrW2ldO2lmKHRoaXMuX3BhcnRpYWxCeXRlcz4wJiZ0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKHRoaXMuX3BhcnRpYWxCeXRlcyksbz4wJiYhcilyZXR1cm4gdC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG8tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPW8sITA7dC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG4tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPTB9fSxpLm9mYj1mdW5jdGlvbihlKXtlPWV8fHt9LHRoaXMubmFtZT0iT0ZCIix0aGlzLmNpcGhlcj1lLmNpcGhlcix0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZXx8MTYsdGhpcy5faW50cz10aGlzLmJsb2NrU2l6ZS80LHRoaXMuX2luQmxvY2s9bnVsbCx0aGlzLl9vdXRCbG9jaz1uZXcgQXJyYXkodGhpcy5faW50cyksdGhpcy5fcGFydGlhbE91dHB1dD1uLnV0aWwuY3JlYXRlQnVmZmVyKCksdGhpcy5fcGFydGlhbEJ5dGVzPTB9LGkub2ZiLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXtpZighKCJpdiJpbiBlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVYgcGFyYW1ldGVyLiIpO3RoaXMuX2l2PW8oZS5pdiksdGhpcy5faW5CbG9jaz10aGlzLl9pdi5zbGljZSgwKSx0aGlzLl9wYXJ0aWFsQnl0ZXM9MH0saS5vZmIucHJvdG90eXBlLmVuY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUubGVuZ3RoKCk7aWYoMD09PWUubGVuZ3RoKCkpcmV0dXJuITA7aWYodGhpcy5jaXBoZXIuZW5jcnlwdCh0aGlzLl9pbkJsb2NrLHRoaXMuX291dEJsb2NrKSwwPT09dGhpcy5fcGFydGlhbEJ5dGVzJiZuPj10aGlzLmJsb2NrU2l6ZSlmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXQucHV0SW50MzIoZS5nZXRJbnQzMigpXnRoaXMuX291dEJsb2NrW2ldKSx0aGlzLl9pbkJsb2NrW2ldPXRoaXMuX291dEJsb2NrW2ldO2Vsc2V7dmFyIG89KHRoaXMuYmxvY2tTaXplLW4pJXRoaXMuYmxvY2tTaXplO28+MCYmKG89dGhpcy5ibG9ja1NpemUtbyksdGhpcy5fcGFydGlhbE91dHB1dC5jbGVhcigpO2ZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9wYXJ0aWFsT3V0cHV0LnB1dEludDMyKGUuZ2V0SW50MzIoKV50aGlzLl9vdXRCbG9ja1tpXSk7aWYobz4wKWUucmVhZC09dGhpcy5ibG9ja1NpemU7ZWxzZSBmb3IoaT0wO2k8dGhpcy5faW50czsrK2kpdGhpcy5faW5CbG9ja1tpXT10aGlzLl9vdXRCbG9ja1tpXTtpZih0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIHQucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhvLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz1vLCEwO3QucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhuLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfX0saS5vZmIucHJvdG90eXBlLmRlY3J5cHQ9aS5vZmIucHJvdG90eXBlLmVuY3J5cHQsaS5jdHI9ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLm5hbWU9IkNUUiIsdGhpcy5jaXBoZXI9ZS5jaXBoZXIsdGhpcy5ibG9ja1NpemU9ZS5ibG9ja1NpemV8fDE2LHRoaXMuX2ludHM9dGhpcy5ibG9ja1NpemUvNCx0aGlzLl9pbkJsb2NrPW51bGwsdGhpcy5fb3V0QmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX3BhcnRpYWxPdXRwdXQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfSxpLmN0ci5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYoISgiaXYiaW4gZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIElWIHBhcmFtZXRlci4iKTt0aGlzLl9pdj1vKGUuaXYpLHRoaXMuX2luQmxvY2s9dGhpcy5faXYuc2xpY2UoMCksdGhpcy5fcGFydGlhbEJ5dGVzPTB9LGkuY3RyLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aCgpO2lmKDA9PT1uKXJldHVybiEwO2lmKHRoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayksMD09PXRoaXMuX3BhcnRpYWxCeXRlcyYmbj49dGhpcy5ibG9ja1NpemUpZm9yKHZhciBpPTA7aTx0aGlzLl9pbnRzOysraSl0LnB1dEludDMyKGUuZ2V0SW50MzIoKV50aGlzLl9vdXRCbG9ja1tpXSk7ZWxzZXt2YXIgbz0odGhpcy5ibG9ja1NpemUtbikldGhpcy5ibG9ja1NpemU7bz4wJiYobz10aGlzLmJsb2NrU2l6ZS1vKSx0aGlzLl9wYXJ0aWFsT3V0cHV0LmNsZWFyKCk7Zm9yKGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX3BhcnRpYWxPdXRwdXQucHV0SW50MzIoZS5nZXRJbnQzMigpXnRoaXMuX291dEJsb2NrW2ldKTtpZihvPjAmJihlLnJlYWQtPXRoaXMuYmxvY2tTaXplKSx0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIHQucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhvLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz1vLCEwO3QucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhuLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfWEodGhpcy5faW5CbG9jayl9LGkuY3RyLnByb3RvdHlwZS5kZWNyeXB0PWkuY3RyLnByb3RvdHlwZS5lbmNyeXB0LGkuZ2NtPWZ1bmN0aW9uKGUpe2U9ZXx8e30sdGhpcy5uYW1lPSJHQ00iLHRoaXMuY2lwaGVyPWUuY2lwaGVyLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplfHwxNix0aGlzLl9pbnRzPXRoaXMuYmxvY2tTaXplLzQsdGhpcy5faW5CbG9jaz1uZXcgQXJyYXkodGhpcy5faW50cyksdGhpcy5fb3V0QmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX3BhcnRpYWxPdXRwdXQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX3BhcnRpYWxCeXRlcz0wLHRoaXMuX1I9Mzc3NDg3MzYwMH0saS5nY20ucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe2lmKCEoIml2ImluIGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBJViBwYXJhbWV0ZXIuIik7dmFyIHQscj1uLnV0aWwuY3JlYXRlQnVmZmVyKGUuaXYpO2lmKHRoaXMuX2NpcGhlckxlbmd0aD0wLHQ9ImFkZGl0aW9uYWxEYXRhImluIGU/bi51dGlsLmNyZWF0ZUJ1ZmZlcihlLmFkZGl0aW9uYWxEYXRhKTpuLnV0aWwuY3JlYXRlQnVmZmVyKCksdGhpcy5fdGFnTGVuZ3RoPSJ0YWdMZW5ndGgiaW4gZT9lLnRhZ0xlbmd0aDoxMjgsdGhpcy5fdGFnPW51bGwsZS5kZWNyeXB0JiYodGhpcy5fdGFnPW4udXRpbC5jcmVhdGVCdWZmZXIoZS50YWcpLmdldEJ5dGVzKCksdGhpcy5fdGFnLmxlbmd0aCE9PXRoaXMuX3RhZ0xlbmd0aC84KSl0aHJvdyBuZXcgRXJyb3IoIkF1dGhlbnRpY2F0aW9uIHRhZyBkb2VzIG5vdCBtYXRjaCB0YWcgbGVuZ3RoLiIpO3RoaXMuX2hhc2hCbG9jaz1uZXcgQXJyYXkodGhpcy5faW50cyksdGhpcy50YWc9bnVsbCx0aGlzLl9oYXNoU3Via2V5PW5ldyBBcnJheSh0aGlzLl9pbnRzKSx0aGlzLmNpcGhlci5lbmNyeXB0KFswLDAsMCwwXSx0aGlzLl9oYXNoU3Via2V5KSx0aGlzLmNvbXBvbmVudEJpdHM9NCx0aGlzLl9tPXRoaXMuZ2VuZXJhdGVIYXNoVGFibGUodGhpcy5faGFzaFN1YmtleSx0aGlzLmNvbXBvbmVudEJpdHMpO3ZhciBpPXIubGVuZ3RoKCk7aWYoMTI9PT1pKXRoaXMuX2owPVtyLmdldEludDMyKCksci5nZXRJbnQzMigpLHIuZ2V0SW50MzIoKSwxXTtlbHNle2Zvcih0aGlzLl9qMD1bMCwwLDAsMF07ci5sZW5ndGgoKT4wOyl0aGlzLl9qMD10aGlzLmdoYXNoKHRoaXMuX2hhc2hTdWJrZXksdGhpcy5fajAsW3IuZ2V0SW50MzIoKSxyLmdldEludDMyKCksci5nZXRJbnQzMigpLHIuZ2V0SW50MzIoKV0pO3RoaXMuX2owPXRoaXMuZ2hhc2godGhpcy5faGFzaFN1YmtleSx0aGlzLl9qMCxbMCwwXS5jb25jYXQocyg4KmkpKSl9dGhpcy5faW5CbG9jaz10aGlzLl9qMC5zbGljZSgwKSxhKHRoaXMuX2luQmxvY2spLHRoaXMuX3BhcnRpYWxCeXRlcz0wLHQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcih0KSx0aGlzLl9hRGF0YUxlbmd0aD1zKDgqdC5sZW5ndGgoKSk7dmFyIG89dC5sZW5ndGgoKSV0aGlzLmJsb2NrU2l6ZTtmb3IobyYmdC5maWxsV2l0aEJ5dGUoMCx0aGlzLmJsb2NrU2l6ZS1vKSx0aGlzLl9zPVswLDAsMCwwXTt0Lmxlbmd0aCgpPjA7KXRoaXMuX3M9dGhpcy5naGFzaCh0aGlzLl9oYXNoU3Via2V5LHRoaXMuX3MsW3QuZ2V0SW50MzIoKSx0LmdldEludDMyKCksdC5nZXRJbnQzMigpLHQuZ2V0SW50MzIoKV0pfSxpLmdjbS5wcm90b3R5cGUuZW5jcnlwdD1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5sZW5ndGgoKTtpZigwPT09bilyZXR1cm4hMDtpZih0aGlzLmNpcGhlci5lbmNyeXB0KHRoaXMuX2luQmxvY2ssdGhpcy5fb3V0QmxvY2spLDA9PT10aGlzLl9wYXJ0aWFsQnl0ZXMmJm4+PXRoaXMuYmxvY2tTaXplKXtmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbaV1ePWUuZ2V0SW50MzIoKSk7dGhpcy5fY2lwaGVyTGVuZ3RoKz10aGlzLmJsb2NrU2l6ZX1lbHNle3ZhciBvPSh0aGlzLmJsb2NrU2l6ZS1uKSV0aGlzLmJsb2NrU2l6ZTtvPjAmJihvPXRoaXMuYmxvY2tTaXplLW8pLHRoaXMuX3BhcnRpYWxPdXRwdXQuY2xlYXIoKTtmb3IoaT0wO2k8dGhpcy5faW50czsrK2kpdGhpcy5fcGFydGlhbE91dHB1dC5wdXRJbnQzMihlLmdldEludDMyKCledGhpcy5fb3V0QmxvY2tbaV0pO2lmKG88PTB8fHIpe2lmKHIpe3ZhciBzPW4ldGhpcy5ibG9ja1NpemU7dGhpcy5fY2lwaGVyTGVuZ3RoKz1zLHRoaXMuX3BhcnRpYWxPdXRwdXQudHJ1bmNhdGUodGhpcy5ibG9ja1NpemUtcyl9ZWxzZSB0aGlzLl9jaXBoZXJMZW5ndGgrPXRoaXMuYmxvY2tTaXplO2ZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9vdXRCbG9ja1tpXT10aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEludDMyKCk7dGhpcy5fcGFydGlhbE91dHB1dC5yZWFkLT10aGlzLmJsb2NrU2l6ZX1pZih0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIGUucmVhZC09dGhpcy5ibG9ja1NpemUsdC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG8tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPW8sITA7dC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG4tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPTB9dGhpcy5fcz10aGlzLmdoYXNoKHRoaXMuX2hhc2hTdWJrZXksdGhpcy5fcyx0aGlzLl9vdXRCbG9jayksYSh0aGlzLl9pbkJsb2NrKX0saS5nY20ucHJvdG90eXBlLmRlY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUubGVuZ3RoKCk7aWYobjx0aGlzLmJsb2NrU2l6ZSYmIShyJiZuPjApKXJldHVybiEwO3RoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayksYSh0aGlzLl9pbkJsb2NrKSx0aGlzLl9oYXNoQmxvY2tbMF09ZS5nZXRJbnQzMigpLHRoaXMuX2hhc2hCbG9ja1sxXT1lLmdldEludDMyKCksdGhpcy5faGFzaEJsb2NrWzJdPWUuZ2V0SW50MzIoKSx0aGlzLl9oYXNoQmxvY2tbM109ZS5nZXRJbnQzMigpLHRoaXMuX3M9dGhpcy5naGFzaCh0aGlzLl9oYXNoU3Via2V5LHRoaXMuX3MsdGhpcy5faGFzaEJsb2NrKTtmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbaV1edGhpcy5faGFzaEJsb2NrW2ldKTtuPHRoaXMuYmxvY2tTaXplP3RoaXMuX2NpcGhlckxlbmd0aCs9biV0aGlzLmJsb2NrU2l6ZTp0aGlzLl9jaXBoZXJMZW5ndGgrPXRoaXMuYmxvY2tTaXplfSxpLmdjbS5wcm90b3R5cGUuYWZ0ZXJGaW5pc2g9ZnVuY3Rpb24oZSx0KXt2YXIgcj0hMDt0LmRlY3J5cHQmJnQub3ZlcmZsb3cmJmUudHJ1bmNhdGUodGhpcy5ibG9ja1NpemUtdC5vdmVyZmxvdyksdGhpcy50YWc9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2FEYXRhTGVuZ3RoLmNvbmNhdChzKDgqdGhpcy5fY2lwaGVyTGVuZ3RoKSk7dGhpcy5fcz10aGlzLmdoYXNoKHRoaXMuX2hhc2hTdWJrZXksdGhpcy5fcyxpKTt2YXIgbz1bXTt0aGlzLmNpcGhlci5lbmNyeXB0KHRoaXMuX2owLG8pO2Zvcih2YXIgYT0wO2E8dGhpcy5faW50czsrK2EpdGhpcy50YWcucHV0SW50MzIodGhpcy5fc1thXV5vW2FdKTtyZXR1cm4gdGhpcy50YWcudHJ1bmNhdGUodGhpcy50YWcubGVuZ3RoKCklKHRoaXMuX3RhZ0xlbmd0aC84KSksdC5kZWNyeXB0JiZ0aGlzLnRhZy5ieXRlcygpIT09dGhpcy5fdGFnJiYocj0hMSkscn0saS5nY20ucHJvdG90eXBlLm11bHRpcGx5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVswLDAsMCwwXSxuPXQuc2xpY2UoMCksaT0wO2k8MTI4OysraSl7ZVtpLzMyfDBdJjE8PDMxLWklMzImJihyWzBdXj1uWzBdLHJbMV1ePW5bMV0sclsyXV49blsyXSxyWzNdXj1uWzNdKSx0aGlzLnBvdyhuLG4pfXJldHVybiByfSxpLmdjbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTEmZVszXSxuPTM7bj4wOy0tbil0W25dPWVbbl0+Pj4xfCgxJmVbbi0xXSk8PDMxO3RbMF09ZVswXT4+PjEsciYmKHRbMF1ePXRoaXMuX1IpfSxpLmdjbS5wcm90b3R5cGUudGFibGVNdWx0aXBseT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9WzAsMCwwLDBdLHI9MDtyPDMyOysrcil7dmFyIG49ZVtyLzh8MF0+Pj40Kig3LXIlOCkmMTUsaT10aGlzLl9tW3JdW25dO3RbMF1ePWlbMF0sdFsxXV49aVsxXSx0WzJdXj1pWzJdLHRbM11ePWlbM119cmV0dXJuIHR9LGkuZ2NtLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRbMF1ePXJbMF0sdFsxXV49clsxXSx0WzJdXj1yWzJdLHRbM11ePXJbM10sdGhpcy50YWJsZU11bHRpcGx5KHQpfSxpLmdjbS5wcm90b3R5cGUuZ2VuZXJhdGVIYXNoVGFibGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9OC90LG49NCpyLGk9MTYqcixvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSl7dmFyIHM9WzAsMCwwLDBdLHU9KG4tMS1hJW4pKnQ7c1thL258MF09MTw8dC0xPDx1LG9bYV09dGhpcy5nZW5lcmF0ZVN1Ykhhc2hUYWJsZSh0aGlzLm11bHRpcGx5KHMsZSksdCl9cmV0dXJuIG99LGkuZ2NtLnByb3RvdHlwZS5nZW5lcmF0ZVN1Ykhhc2hUYWJsZT1mdW5jdGlvbihlLHQpe3ZhciByPTE8PHQsbj1yPj4+MSxpPW5ldyBBcnJheShyKTtpW25dPWUuc2xpY2UoMCk7Zm9yKHZhciBvPW4+Pj4xO28+MDspdGhpcy5wb3coaVsyKm9dLGlbb109W10pLG8+Pj0xO2ZvcihvPTI7bzxuOyl7Zm9yKHZhciBhPTE7YTxvOysrYSl7dmFyIHM9aVtvXSx1PWlbYV07aVtvK2FdPVtzWzBdXnVbMF0sc1sxXV51WzFdLHNbMl1edVsyXSxzWzNdXnVbM11dfW8qPTJ9Zm9yKGlbMF09WzAsMCwwLDBdLG89bisxO288cjsrK28pe3ZhciBjPWlbb15uXTtpW29dPVtlWzBdXmNbMF0sZVsxXV5jWzFdLGVbMl1eY1syXSxlWzNdXmNbM11dfXJldHVybiBpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNik7cig2NSkscigxMzQpLHIoMjIyKSxyKDEwNikscigzNDYpLHIoNTIpLHIoMTM1KSxyKDEwKTt2YXIgaT1mdW5jdGlvbihlLHQscixpKXt2YXIgbz1uLnV0aWwuY3JlYXRlQnVmZmVyKCksYT1lLmxlbmd0aD4+MSxzPWErKDEmZS5sZW5ndGgpLHU9ZS5zdWJzdHIoMCxzKSxjPWUuc3Vic3RyKGEscyksZj1uLnV0aWwuY3JlYXRlQnVmZmVyKCksbD1uLmhtYWMuY3JlYXRlKCk7cj10K3I7dmFyIGg9TWF0aC5jZWlsKGkvMTYpLHA9TWF0aC5jZWlsKGkvMjApO2wuc3RhcnQoIk1ENSIsdSk7dmFyIGQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpO2YucHV0Qnl0ZXMocik7Zm9yKHZhciB5PTA7eTxoOysreSlsLnN0YXJ0KG51bGwsbnVsbCksbC51cGRhdGUoZi5nZXRCeXRlcygpKSxmLnB1dEJ1ZmZlcihsLmRpZ2VzdCgpKSxsLnN0YXJ0KG51bGwsbnVsbCksbC51cGRhdGUoZi5ieXRlcygpK3IpLGQucHV0QnVmZmVyKGwuZGlnZXN0KCkpO2wuc3RhcnQoIlNIQTEiLGMpO3ZhciBnPW4udXRpbC5jcmVhdGVCdWZmZXIoKTtmLmNsZWFyKCksZi5wdXRCeXRlcyhyKTtmb3IoeT0wO3k8cDsrK3kpbC5zdGFydChudWxsLG51bGwpLGwudXBkYXRlKGYuZ2V0Qnl0ZXMoKSksZi5wdXRCdWZmZXIobC5kaWdlc3QoKSksbC5zdGFydChudWxsLG51bGwpLGwudXBkYXRlKGYuYnl0ZXMoKStyKSxnLnB1dEJ1ZmZlcihsLmRpZ2VzdCgpKTtyZXR1cm4gby5wdXRCeXRlcyhuLnV0aWwueG9yQnl0ZXMoZC5nZXRCeXRlcygpLGcuZ2V0Qnl0ZXMoKSxpKSksb30sbz1mdW5jdGlvbihlLHQscil7dmFyIGk9ITE7dHJ5e3ZhciBvPWUuZGVmbGF0ZSh0LmZyYWdtZW50LmdldEJ5dGVzKCkpO3QuZnJhZ21lbnQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcihvKSx0Lmxlbmd0aD1vLmxlbmd0aCxpPSEwfWNhdGNoKGEpe31yZXR1cm4gaX0sYT1mdW5jdGlvbihlLHQscil7dmFyIGk9ITE7dHJ5e3ZhciBvPWUuaW5mbGF0ZSh0LmZyYWdtZW50LmdldEJ5dGVzKCkpO3QuZnJhZ21lbnQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcihvKSx0Lmxlbmd0aD1vLmxlbmd0aCxpPSEwfWNhdGNoKGEpe31yZXR1cm4gaX0scz1mdW5jdGlvbihlLHQpe3ZhciByPTA7c3dpdGNoKHQpe2Nhc2UgMTpyPWUuZ2V0Qnl0ZSgpO2JyZWFrO2Nhc2UgMjpyPWUuZ2V0SW50MTYoKTticmVhaztjYXNlIDM6cj1lLmdldEludDI0KCk7YnJlYWs7Y2FzZSA0OnI9ZS5nZXRJbnQzMigpfXJldHVybiBuLnV0aWwuY3JlYXRlQnVmZmVyKGUuZ2V0Qnl0ZXMocikpfSx1PWZ1bmN0aW9uKGUsdCxyKXtlLnB1dEludChyLmxlbmd0aCgpLHQ8PDMpLGUucHV0QnVmZmVyKHIpfSxjPXtWZXJzaW9uczp7VExTXzFfMDp7bWFqb3I6MyxtaW5vcjoxfSxUTFNfMV8xOnttYWpvcjozLG1pbm9yOjJ9LFRMU18xXzI6e21ham9yOjMsbWlub3I6M319fTtjLlN1cHBvcnRlZFZlcnNpb25zPVtjLlZlcnNpb25zLlRMU18xXzEsYy5WZXJzaW9ucy5UTFNfMV8wXSxjLlZlcnNpb249Yy5TdXBwb3J0ZWRWZXJzaW9uc1swXSxjLk1heEZyYWdtZW4="
}
Changelog:
{
"2020.06.16 14:10": "base64:KHMpP3M6ZS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdCh0KT9lLnJhdygpLnRvU3RyaW5nKCk6ZS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrdCsiIHVuc3VwcG9ydGVkIil9LGMucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGk9W10sbz0wOyFlLmlzRW1wdHkoKTspe3ZhciBhPWUucmVhZFVJbnQ4KCk7bzw8PTcsb3w9MTI3JmEsMD09PSgxMjgmYSkmJihpLnB1c2gobyksbz0wKX0xMjgmYSYmaS5wdXNoKG8pO3ZhciBzPWlbMF0vNDB8MCx1PWlbMF0lNDA7aWYobj1yP2k6W3MsdV0uY29uY2F0KGkuc2xpY2UoMSkpLHQpe3ZhciBjPXRbbi5qb2luKCIgIildO3ZvaWQgMD09PWMmJihjPXRbbi5qb2luKCIuIildKSx2b2lkIDAhPT1jJiYobj1jKX1yZXR1cm4gbn0sYy5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnJhdygpLnRvU3RyaW5nKCk7aWYoImdlbnRpbWUiPT09dCl2YXIgbj0wfHIuc2xpY2UoMCw0KSxpPTB8ci5zbGljZSg0LDYpLG89MHxyLnNsaWNlKDYsOCksYT0wfHIuc2xpY2UoOCwxMCkscz0wfHIuc2xpY2UoMTAsMTIpLHU9MHxyLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PXQpcmV0dXJuIGUuZXJyb3IoIkRlY29kaW5nICIrdCsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtuPTB8ci5zbGljZSgwLDIpLGk9MHxyLnNsaWNlKDIsNCksbz0wfHIuc2xpY2UoNCw2KSxhPTB8ci5zbGljZSg2LDgpLHM9MHxyLnNsaWNlKDgsMTApLHU9MHxyLnNsaWNlKDEwLDEyKTtuPW48NzA/MmUzK246MTkwMCtufXJldHVybiBEYXRlLlVUQyhuLGktMSxvLGEscyx1LDApfSxjLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbH0sYy5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWFkVUludDgoKTtyZXR1cm4gZS5pc0Vycm9yKHQpP3Q6MCE9PXR9LGMucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnJhdygpLG49bmV3IGEocik7cmV0dXJuIHQmJihuPXRbbi50b1N0cmluZygxMCldfHxuKSxufSxjLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBlJiYoZT1lKHQpKSxlLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNyksaT1yKDE4KS5CdWZmZXIsbz1yKDEzMSksYT1vLmJhc2Uscz1vLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gdShlKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9ZS5uYW1lLHRoaXMuZW50aXR5PWUsdGhpcy50cmVlPW5ldyBjLHRoaXMudHJlZS5faW5pdChlLmJvZHkpfWZ1bmN0aW9uIGMoZSl7YS5Ob2RlLmNhbGwodGhpcywiZGVyIixlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBlPDEwPyIwIitlOmV9ZS5leHBvcnRzPXUsdS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKGUsdCkuam9pbigpfSxuKGMsYS5Ob2RlKSxjLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBvLGE9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk7InNlcW9mIj09PWU/ZT0ic2VxIjoic2V0b2YiPT09ZSYmKGU9InNldCIpO2lmKHMudGFnQnlOYW1lLmhhc093blByb3BlcnR5KGUpKWk9cy50YWdCeU5hbWVbZV07ZWxzZXtpZigibnVtYmVyIiE9PXR5cGVvZiBlfHwoMHxlKSE9PWUpcmV0dXJuIG4uZXJyb3IoIlVua25vd24gdGFnOiAiK2UpO2k9ZX1pZihpPj0zMSlyZXR1cm4gbi5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik7dHx8KGl8PTMyKTtyZXR1cm4gaXw9cy50YWdDbGFzc0J5TmFtZVtyfHwidW5pdmVyc2FsIl08PDZ9KGUsdCxyLHRoaXMucmVwb3J0ZXIpO2lmKG4ubGVuZ3RoPDEyOClyZXR1cm4obz1uZXcgaSgyKSlbMF09YSxvWzFdPW4ubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pO2Zvcih2YXIgdT0xLGM9bi5sZW5ndGg7Yz49MjU2O2M+Pj04KXUrKzsobz1uZXcgaSgyK3UpKVswXT1hLG9bMV09MTI4fHU7Yz0xK3U7Zm9yKHZhciBmPW4ubGVuZ3RoO2Y+MDtjLS0sZj4+PTgpb1tjXT0yNTUmZjtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9LGMucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oZSx0KXtpZigiYml0c3RyIj09PXQpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8ZS51bnVzZWQsZS5kYXRhXSk7aWYoImJtcHN0ciI9PT10KXtmb3IodmFyIHI9bmV3IGkoMiplLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7bisrKXIud3JpdGVVSW50MTZCRShlLmNoYXJDb2RlQXQobiksMipuKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihyKX1yZXR1cm4ibnVtc3RyIj09PXQ/dGhpcy5faXNOdW1zdHIoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT10P3RoaXMuX2lzUHJpbnRzdHIoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk6Im9iakRlc2MiPT09dD90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK3QrIiB1bnN1cHBvcnRlZCIpfSxjLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oZSx0LHIpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUpe2lmKCF0KXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7ZT10W2VdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWVbbl18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtlPWUuc2xpY2UoKTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWVbbl18PTB9aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShlKSk7aWYoIXIpe2lmKGVbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtlLnNwbGljZSgwLDIsNDAqZVswXStlWzFdKX12YXIgbz0wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07Zm9yKG8rKzthPj0xMjg7YT4+PTcpbysrfXZhciBzPW5ldyBpKG8pLHU9cy5sZW5ndGgtMTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXthPWVbbl07Zm9yKHNbdS0tXT0xMjcmYTsoYT4+PTcpPjA7KXNbdS0tXT0xMjh8MTI3JmF9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocyl9LGMucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1uZXcgRGF0ZShlKTtyZXR1cm4iZ2VudGltZSI9PT10P3I9W2Yobi5nZXRGdWxsWWVhcigpKSxmKG4uZ2V0VVRDTW9udGgoKSsxKSxmKG4uZ2V0VVRDRGF0ZSgpKSxmKG4uZ2V0VVRDSG91cnMoKSksZihuLmdldFVUQ01pbnV0ZXMoKSksZihuLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT10P3I9W2Yobi5nZXRGdWxsWWVhcigpJTEwMCksZihuLmdldFVUQ01vbnRoKCkrMSksZihuLmdldFVUQ0RhdGUoKSksZihuLmdldFVUQ0hvdXJzKCkpLGYobi5nZXRVVENNaW51dGVzKCkpLGYobi5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIit0KyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihyLCJvY3RzdHIiKX0sYy5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LGMucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIj09PXR5cGVvZiBlKXtpZighdClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCF0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShlKSk7ZT10W2VdfWlmKCJudW1iZXIiIT09dHlwZW9mIGUmJiFpLmlzQnVmZmVyKGUpKXt2YXIgcj1lLnRvQXJyYXkoKTshZS5zaWduJiYxMjgmclswXSYmci51bnNoaWZ0KDApLGU9bmV3IGkocil9aWYoaS5pc0J1ZmZlcihlKSl7dmFyIG49ZS5sZW5ndGg7MD09PWUubGVuZ3RoJiZuKys7dmFyIG89bmV3IGkobik7cmV0dXJuIGUuY29weShvKSwwPT09ZS5sZW5ndGgmJihvWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobyl9aWYoZTwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk7aWYoZTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsZV0pO249MTtmb3IodmFyIGE9ZTthPj0yNTY7YT4+PTgpbisrO2ZvcihhPShvPW5ldyBBcnJheShuKSkubGVuZ3RoLTE7YT49MDthLS0pb1thXT0yNTUmZSxlPj49ODtyZXR1cm4gMTI4Jm9bMF0mJm8udW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBpKG8pKX0sYy5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZT8yNTU6MCl9LGMucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGUmJihlPWUodCkpLGUuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LGMucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PWkuZGVmYXVsdClyZXR1cm4hMTt2YXIgbz1lLmpvaW4oKTtpZih2b2lkIDA9PT1pLmRlZmF1bHRCdWZmZXImJihpLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoaS5kZWZhdWx0LHQscikuam9pbigpKSxvLmxlbmd0aCE9PWkuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25dIT09aS5kZWZhdWx0QnVmZmVyW25dKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXsiMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxMjcpLGk9cig4KS5CdWZmZXI7ZnVuY3Rpb24gbyhlKXt2YXIgdD1pLmFsbG9jVW5zYWZlKDQpO3JldHVybiB0LndyaXRlVUludDMyQkUoZSwwKSx0fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWkuYWxsb2MoMCkscz0wO2EubGVuZ3RoPHQ7KXI9byhzKyspLGE9aS5jb25jYXQoW2Esbigic2hhMSIpLnVwZGF0ZShlKS51cGRhdGUocikuZGlnZXN0KCldKTtyZXR1cm4gYS5zbGljZSgwLHQpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj0tMTsrK248cjspZVtuXV49dFtuXTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDI0KSxpPXIoOCkuQnVmZmVyO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpLmZyb20oZS50b1JlZChuLm1vbnQodC5tb2R1bHVzKSkucmVkUG93KG5ldyBuKHQucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighcilyZXR1cm4gZTt2YXIgbixpLG89ci5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEobj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKG4udmFsdWUpfWNhdGNoKHMpe2k9e2Vycm9yOnN9fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihyPW8ucmV0dXJuKSYmci5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPXIoMTMzKSxvPXIoMTU2KSxhPXIoNjcpLHM9cigxMzYpLHU9cigxNjYpLGM9cigxNjcpLGY9cig3OSk7dC5hZXNFbmNyeXB0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PXImJihyPSJDQkMiKTt2YXIgbz1pLmNpcGhlci5jcmVhdGVDaXBoZXIoIkFFUy0iK3IsZi5ieXRlc1RvU3RyaW5nKGEuX2Zyb21Jbih0KSwicmF3IikpO3JldHVybiBvLnN0YXJ0KHtpdjpuJiZpLnV0aWwuY3JlYXRlQnVmZmVyKGYuYnl0ZXNUb1N0cmluZyhhLl9mcm9tSW4obiksInJhdyIpKX0pLG8udXBkYXRlKGkudXRpbC5jcmVhdGVCdWZmZXIoZi5ieXRlc1RvU3RyaW5nKGUsInJhdyIpKSksby5maW5pc2goKSxmLnN0cmluZ1RvQnl0ZXMoby5vdXRwdXQuZ2V0Qnl0ZXMoKSwicmF3Iil9LHQuYWVzRGVjcnlwdD1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1yJiYocj0iQ0JDIik7dmFyIG89aS5jaXBoZXIuY3JlYXRlRGVjaXBoZXIoIkFFUy0iK3IsZi5ieXRlc1RvU3RyaW5nKGEuX2Zyb21Jbih0KSwicmF3IikpO28uc3RhcnQoe2l2Om4mJmkudXRpbC5jcmVhdGVCdWZmZXIoZi5ieXRlc1RvU3RyaW5nKGEuX2Zyb21JbihuKSwicmF3IikpfSk7dmFyIHM9aS51dGlsLmNyZWF0ZUJ1ZmZlcihmLmJ5dGVzVG9TdHJpbmcoYS5fZnJvbUluKGUpLCJyYXciKSk7aWYoby51cGRhdGUocyksIW8uZmluaXNoKCkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZGVjcnlwdCBkYXRhIHdpdGggcHJvdmlkZWQga2V5Iik7cmV0dXJuIGYuc3RyaW5nVG9CeXRlcyhvLm91dHB1dC5nZXRCeXRlcygpLCJyYXciKX0sdC5tZXNzYWdlRW5jcnlwdD1mdW5jdGlvbihlLHIpe3ZhciBuPVVpbnQ4QXJyYXkuZnJvbShbMV0pLGk9by5yYW5kb21CeXRlcygzMiksYT1vLnJhbmRvbUJ5dGVzKDE2KSxjPWYuc3RyaW5nVG9CeXRlcyhyKSxsPXQuYWVzRW5jcnlwdChjLGksIkNUUiIsYSksaD10LmFlc0VuY3J5cHQoaSxlLCJFQ0IiKSxwPXMuaG1hY1NIQTI1NihjLGkpLGQ9cy5obWFjU0hBMjU2KHUuY29uY2F0KGksYSksZSk7cmV0dXJuIHUuY29uY2F0KG4saCxkLHAsYSxsKX0sdC5tZXNzYWdlRGVjcnlwdD1mdW5jdGlvbihlLHIpe3ZhciBpPW4odS5zcGxpdChyLDEsNDgsMzIsMzIsMTYpLDYpLG89KGlbMF0saVsxXSksYz1pWzJdLGw9aVszXSxoPWlbNF0scD1pWzVdLGQ9dC5hZXNEZWNyeXB0KG8sZSwiRUNCIik7aWYoIWEuX2Zyb21JbihzLmhtYWNTSEEyNTYodS5jb25jYXQoZCxoKSxhLl9mcm9tSW4oZSkpKS5ldmVyeShmdW5jdGlvbihlLHQpe3JldHVybiBlPT09Y1t0XX0pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBrZXkiKTt2YXIgeT10LmFlc0RlY3J5cHQocCxkLCJDVFIiLGgpO2lmKCFhLl9mcm9tSW4ocy5obWFjU0hBMjU2KHksZCkpLmV2ZXJ5KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1sW3RdfSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1lc3NhZ2UiKTtyZXR1cm4gZi5ieXRlc1RvU3RyaW5nKHkpfSx0LnNoYXJlZEtleT1mdW5jdGlvbihlLHQscil7dmFyIG49Yy5kZWZhdWx0LnNoYXJlZEtleShhLl9mcm9tSW4oZSksYS5fZnJvbUluKHQpKSxpPXMuc2hhMjU2KGEuX2Zyb21SYXdJbihyKSk7cmV0dXJuIHMuaG1hY1NIQTI1NihuLGkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNik7cigxMCksbi5jaXBoZXI9bi5jaXBoZXJ8fHt9O3ZhciBpPWUuZXhwb3J0cz1uLmNpcGhlci5tb2Rlcz1uLmNpcGhlci5tb2Rlc3x8e307ZnVuY3Rpb24gbyhlKXtpZigic3RyaW5nIj09PXR5cGVvZiBlJiYoZT1uLnV0aWwuY3JlYXRlQnVmZmVyKGUpKSxuLnV0aWwuaXNBcnJheShlKSYmZS5sZW5ndGg+NCl7dmFyIHQ9ZTtlPW4udXRpbC5jcmVhdGVCdWZmZXIoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillLnB1dEJ5dGUodFtyXSl9cmV0dXJuIG4udXRpbC5pc0FycmF5KGUpfHwoZT1bZS5nZXRJbnQzMigpLGUuZ2V0SW50MzIoKSxlLmdldEludDMyKCksZS5nZXRJbnQzMigpXSksZX1mdW5jdGlvbiBhKGUpe2VbZS5sZW5ndGgtMV09ZVtlLmxlbmd0aC0xXSsxJjQyOTQ5NjcyOTV9ZnVuY3Rpb24gcyhlKXtyZXR1cm5bZS80Mjk0OTY3Mjk2fDAsNDI5NDk2NzI5NSZlXX1pLmVjYj1mdW5jdGlvbihlKXtlPWV8fHt9LHRoaXMubmFtZT0iRUNCIix0aGlzLmNpcGhlcj1lLmNpcGhlcix0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZXx8MTYsdGhpcy5faW50cz10aGlzLmJsb2NrU2l6ZS80LHRoaXMuX2luQmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX291dEJsb2NrPW5ldyBBcnJheSh0aGlzLl9pbnRzKX0saS5lY2IucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe30saS5lY2IucHJvdG90eXBlLmVuY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe2lmKGUubGVuZ3RoKCk8dGhpcy5ibG9ja1NpemUmJiEociYmZS5sZW5ndGgoKT4wKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuX2ludHM7KytuKXRoaXMuX2luQmxvY2tbbl09ZS5nZXRJbnQzMigpO3RoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayk7Zm9yKG49MDtuPHRoaXMuX2ludHM7KytuKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbbl0pfSxpLmVjYi5wcm90b3R5cGUuZGVjcnlwdD1mdW5jdGlvbihlLHQscil7aWYoZS5sZW5ndGgoKTx0aGlzLmJsb2NrU2l6ZSYmIShyJiZlLmxlbmd0aCgpPjApKXJldHVybiEwO2Zvcih2YXIgbj0wO248dGhpcy5faW50czsrK24pdGhpcy5faW5CbG9ja1tuXT1lLmdldEludDMyKCk7dGhpcy5jaXBoZXIuZGVjcnlwdCh0aGlzLl9pbkJsb2NrLHRoaXMuX291dEJsb2NrKTtmb3Iobj0wO248dGhpcy5faW50czsrK24pdC5wdXRJbnQzMih0aGlzLl9vdXRCbG9ja1tuXSl9LGkuZWNiLnByb3RvdHlwZS5wYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCgpPT09dGhpcy5ibG9ja1NpemU/dGhpcy5ibG9ja1NpemU6dGhpcy5ibG9ja1NpemUtZS5sZW5ndGgoKTtyZXR1cm4gZS5maWxsV2l0aEJ5dGUocixyKSwhMH0saS5lY2IucHJvdG90eXBlLnVucGFkPWZ1bmN0aW9uKGUsdCl7aWYodC5vdmVyZmxvdz4wKXJldHVybiExO3ZhciByPWUubGVuZ3RoKCksbj1lLmF0KHItMSk7cmV0dXJuIShuPnRoaXMuYmxvY2tTaXplPDwyKSYmKGUudHJ1bmNhdGUobiksITApfSxpLmNiYz1mdW5jdGlvbihlKXtlPWV8fHt9LHRoaXMubmFtZT0iQ0JDIix0aGlzLmNpcGhlcj1lLmNpcGhlcix0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZXx8MTYsdGhpcy5faW50cz10aGlzLmJsb2NrU2l6ZS80LHRoaXMuX2luQmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX291dEJsb2NrPW5ldyBBcnJheSh0aGlzLl9pbnRzKX0saS5jYmMucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lLml2KXtpZighdGhpcy5fcHJldil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVYgcGFyYW1ldGVyLiIpO3RoaXMuX2l2PXRoaXMuX3ByZXYuc2xpY2UoMCl9ZWxzZXtpZighKCJpdiJpbiBlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVYgcGFyYW1ldGVyLiIpO3RoaXMuX2l2PW8oZS5pdiksdGhpcy5fcHJldj10aGlzLl9pdi5zbGljZSgwKX19LGkuY2JjLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXtpZihlLmxlbmd0aCgpPHRoaXMuYmxvY2tTaXplJiYhKHImJmUubGVuZ3RoKCk+MCkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjx0aGlzLl9pbnRzOysrbil0aGlzLl9pbkJsb2NrW25dPXRoaXMuX3ByZXZbbl1eZS5nZXRJbnQzMigpO3RoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayk7Zm9yKG49MDtuPHRoaXMuX2ludHM7KytuKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbbl0pO3RoaXMuX3ByZXY9dGhpcy5fb3V0QmxvY2t9LGkuY2JjLnByb3RvdHlwZS5kZWNyeXB0PWZ1bmN0aW9uKGUsdCxyKXtpZihlLmxlbmd0aCgpPHRoaXMuYmxvY2tTaXplJiYhKHImJmUubGVuZ3RoKCk+MCkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjx0aGlzLl9pbnRzOysrbil0aGlzLl9pbkJsb2NrW25dPWUuZ2V0SW50MzIoKTt0aGlzLmNpcGhlci5kZWNyeXB0KHRoaXMuX2luQmxvY2ssdGhpcy5fb3V0QmxvY2spO2ZvcihuPTA7bjx0aGlzLl9pbnRzOysrbil0LnB1dEludDMyKHRoaXMuX3ByZXZbbl1edGhpcy5fb3V0QmxvY2tbbl0pO3RoaXMuX3ByZXY9dGhpcy5faW5CbG9jay5zbGljZSgwKX0saS5jYmMucHJvdG90eXBlLnBhZD1mdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoKCk9PT10aGlzLmJsb2NrU2l6ZT90aGlzLmJsb2NrU2l6ZTp0aGlzLmJsb2NrU2l6ZS1lLmxlbmd0aCgpO3JldHVybiBlLmZpbGxXaXRoQnl0ZShyLHIpLCEwfSxpLmNiYy5wcm90b3R5cGUudW5wYWQ9ZnVuY3Rpb24oZSx0KXtpZih0Lm92ZXJmbG93PjApcmV0dXJuITE7dmFyIHI9ZS5sZW5ndGgoKSxuPWUuYXQoci0xKTtyZXR1cm4hKG4+dGhpcy5ibG9ja1NpemU8PDIpJiYoZS50cnVuY2F0ZShuKSwhMCl9LGkuY2ZiPWZ1bmN0aW9uKGUpe2U9ZXx8e30sdGhpcy5uYW1lPSJDRkIiLHRoaXMuY2lwaGVyPWUuY2lwaGVyLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplfHwxNix0aGlzLl9pbnRzPXRoaXMuYmxvY2tTaXplLzQsdGhpcy5faW5CbG9jaz1udWxsLHRoaXMuX291dEJsb2NrPW5ldyBBcnJheSh0aGlzLl9pbnRzKSx0aGlzLl9wYXJ0aWFsQmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX3BhcnRpYWxPdXRwdXQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfSxpLmNmYi5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYoISgiaXYiaW4gZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIElWIHBhcmFtZXRlci4iKTt0aGlzLl9pdj1vKGUuaXYpLHRoaXMuX2luQmxvY2s9dGhpcy5faXYuc2xpY2UoMCksdGhpcy5fcGFydGlhbEJ5dGVzPTB9LGkuY2ZiLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aCgpO2lmKDA9PT1uKXJldHVybiEwO2lmKHRoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayksMD09PXRoaXMuX3BhcnRpYWxCeXRlcyYmbj49dGhpcy5ibG9ja1NpemUpZm9yKHZhciBpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9pbkJsb2NrW2ldPWUuZ2V0SW50MzIoKV50aGlzLl9vdXRCbG9ja1tpXSx0LnB1dEludDMyKHRoaXMuX2luQmxvY2tbaV0pO2Vsc2V7dmFyIG89KHRoaXMuYmxvY2tTaXplLW4pJXRoaXMuYmxvY2tTaXplO28+MCYmKG89dGhpcy5ibG9ja1NpemUtbyksdGhpcy5fcGFydGlhbE91dHB1dC5jbGVhcigpO2ZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9wYXJ0aWFsQmxvY2tbaV09ZS5nZXRJbnQzMigpXnRoaXMuX291dEJsb2NrW2ldLHRoaXMuX3BhcnRpYWxPdXRwdXQucHV0SW50MzIodGhpcy5fcGFydGlhbEJsb2NrW2ldKTtpZihvPjApZS5yZWFkLT10aGlzLmJsb2NrU2l6ZTtlbHNlIGZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9pbkJsb2NrW2ldPXRoaXMuX3BhcnRpYWxCbG9ja1tpXTtpZih0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIHQucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhvLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz1vLCEwO3QucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhuLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfX0saS5jZmIucHJvdG90eXBlLmRlY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUubGVuZ3RoKCk7aWYoMD09PW4pcmV0dXJuITA7aWYodGhpcy5jaXBoZXIuZW5jcnlwdCh0aGlzLl9pbkJsb2NrLHRoaXMuX291dEJsb2NrKSwwPT09dGhpcy5fcGFydGlhbEJ5dGVzJiZuPj10aGlzLmJsb2NrU2l6ZSlmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX2luQmxvY2tbaV09ZS5nZXRJbnQzMigpLHQucHV0SW50MzIodGhpcy5faW5CbG9ja1tpXV50aGlzLl9vdXRCbG9ja1tpXSk7ZWxzZXt2YXIgbz0odGhpcy5ibG9ja1NpemUtbikldGhpcy5ibG9ja1NpemU7bz4wJiYobz10aGlzLmJsb2NrU2l6ZS1vKSx0aGlzLl9wYXJ0aWFsT3V0cHV0LmNsZWFyKCk7Zm9yKGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX3BhcnRpYWxCbG9ja1tpXT1lLmdldEludDMyKCksdGhpcy5fcGFydGlhbE91dHB1dC5wdXRJbnQzMih0aGlzLl9wYXJ0aWFsQmxvY2tbaV1edGhpcy5fb3V0QmxvY2tbaV0pO2lmKG8+MCllLnJlYWQtPXRoaXMuYmxvY2tTaXplO2Vsc2UgZm9yKGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX2luQmxvY2tbaV09dGhpcy5fcGFydGlhbEJsb2NrW2ldO2lmKHRoaXMuX3BhcnRpYWxCeXRlcz4wJiZ0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKHRoaXMuX3BhcnRpYWxCeXRlcyksbz4wJiYhcilyZXR1cm4gdC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG8tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPW8sITA7dC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG4tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPTB9fSxpLm9mYj1mdW5jdGlvbihlKXtlPWV8fHt9LHRoaXMubmFtZT0iT0ZCIix0aGlzLmNpcGhlcj1lLmNpcGhlcix0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZXx8MTYsdGhpcy5faW50cz10aGlzLmJsb2NrU2l6ZS80LHRoaXMuX2luQmxvY2s9bnVsbCx0aGlzLl9vdXRCbG9jaz1uZXcgQXJyYXkodGhpcy5faW50cyksdGhpcy5fcGFydGlhbE91dHB1dD1uLnV0aWwuY3JlYXRlQnVmZmVyKCksdGhpcy5fcGFydGlhbEJ5dGVzPTB9LGkub2ZiLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXtpZighKCJpdiJpbiBlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVYgcGFyYW1ldGVyLiIpO3RoaXMuX2l2PW8oZS5pdiksdGhpcy5faW5CbG9jaz10aGlzLl9pdi5zbGljZSgwKSx0aGlzLl9wYXJ0aWFsQnl0ZXM9MH0saS5vZmIucHJvdG90eXBlLmVuY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUubGVuZ3RoKCk7aWYoMD09PWUubGVuZ3RoKCkpcmV0dXJuITA7aWYodGhpcy5jaXBoZXIuZW5jcnlwdCh0aGlzLl9pbkJsb2NrLHRoaXMuX291dEJsb2NrKSwwPT09dGhpcy5fcGFydGlhbEJ5dGVzJiZuPj10aGlzLmJsb2NrU2l6ZSlmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXQucHV0SW50MzIoZS5nZXRJbnQzMigpXnRoaXMuX291dEJsb2NrW2ldKSx0aGlzLl9pbkJsb2NrW2ldPXRoaXMuX291dEJsb2NrW2ldO2Vsc2V7dmFyIG89KHRoaXMuYmxvY2tTaXplLW4pJXRoaXMuYmxvY2tTaXplO28+MCYmKG89dGhpcy5ibG9ja1NpemUtbyksdGhpcy5fcGFydGlhbE91dHB1dC5jbGVhcigpO2ZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9wYXJ0aWFsT3V0cHV0LnB1dEludDMyKGUuZ2V0SW50MzIoKV50aGlzLl9vdXRCbG9ja1tpXSk7aWYobz4wKWUucmVhZC09dGhpcy5ibG9ja1NpemU7ZWxzZSBmb3IoaT0wO2k8dGhpcy5faW50czsrK2kpdGhpcy5faW5CbG9ja1tpXT10aGlzLl9vdXRCbG9ja1tpXTtpZih0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIHQucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhvLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz1vLCEwO3QucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhuLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfX0saS5vZmIucHJvdG90eXBlLmRlY3J5cHQ9aS5vZmIucHJvdG90eXBlLmVuY3J5cHQsaS5jdHI9ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLm5hbWU9IkNUUiIsdGhpcy5jaXBoZXI9ZS5jaXBoZXIsdGhpcy5ibG9ja1NpemU9ZS5ibG9ja1NpemV8fDE2LHRoaXMuX2ludHM9dGhpcy5ibG9ja1NpemUvNCx0aGlzLl9pbkJsb2NrPW51bGwsdGhpcy5fb3V0QmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX3BhcnRpYWxPdXRwdXQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfSxpLmN0ci5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYoISgiaXYiaW4gZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIElWIHBhcmFtZXRlci4iKTt0aGlzLl9pdj1vKGUuaXYpLHRoaXMuX2luQmxvY2s9dGhpcy5faXYuc2xpY2UoMCksdGhpcy5fcGFydGlhbEJ5dGVzPTB9LGkuY3RyLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aCgpO2lmKDA9PT1uKXJldHVybiEwO2lmKHRoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayksMD09PXRoaXMuX3BhcnRpYWxCeXRlcyYmbj49dGhpcy5ibG9ja1NpemUpZm9yKHZhciBpPTA7aTx0aGlzLl9pbnRzOysraSl0LnB1dEludDMyKGUuZ2V0SW50MzIoKV50aGlzLl9vdXRCbG9ja1tpXSk7ZWxzZXt2YXIgbz0odGhpcy5ibG9ja1NpemUtbikldGhpcy5ibG9ja1NpemU7bz4wJiYobz10aGlzLmJsb2NrU2l6ZS1vKSx0aGlzLl9wYXJ0aWFsT3V0cHV0LmNsZWFyKCk7Zm9yKGk9MDtpPHRoaXMuX2ludHM7KytpKXRoaXMuX3BhcnRpYWxPdXRwdXQucHV0SW50MzIoZS5nZXRJbnQzMigpXnRoaXMuX291dEJsb2NrW2ldKTtpZihvPjAmJihlLnJlYWQtPXRoaXMuYmxvY2tTaXplKSx0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIHQucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhvLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz1vLCEwO3QucHV0Qnl0ZXModGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyhuLXRoaXMuX3BhcnRpYWxCeXRlcykpLHRoaXMuX3BhcnRpYWxCeXRlcz0wfWEodGhpcy5faW5CbG9jayl9LGkuY3RyLnByb3RvdHlwZS5kZWNyeXB0PWkuY3RyLnByb3RvdHlwZS5lbmNyeXB0LGkuZ2NtPWZ1bmN0aW9uKGUpe2U9ZXx8e30sdGhpcy5uYW1lPSJHQ00iLHRoaXMuY2lwaGVyPWUuY2lwaGVyLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplfHwxNix0aGlzLl9pbnRzPXRoaXMuYmxvY2tTaXplLzQsdGhpcy5faW5CbG9jaz1uZXcgQXJyYXkodGhpcy5faW50cyksdGhpcy5fb3V0QmxvY2s9bmV3IEFycmF5KHRoaXMuX2ludHMpLHRoaXMuX3BhcnRpYWxPdXRwdXQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX3BhcnRpYWxCeXRlcz0wLHRoaXMuX1I9Mzc3NDg3MzYwMH0saS5nY20ucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe2lmKCEoIml2ImluIGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBJViBwYXJhbWV0ZXIuIik7dmFyIHQscj1uLnV0aWwuY3JlYXRlQnVmZmVyKGUuaXYpO2lmKHRoaXMuX2NpcGhlckxlbmd0aD0wLHQ9ImFkZGl0aW9uYWxEYXRhImluIGU/bi51dGlsLmNyZWF0ZUJ1ZmZlcihlLmFkZGl0aW9uYWxEYXRhKTpuLnV0aWwuY3JlYXRlQnVmZmVyKCksdGhpcy5fdGFnTGVuZ3RoPSJ0YWdMZW5ndGgiaW4gZT9lLnRhZ0xlbmd0aDoxMjgsdGhpcy5fdGFnPW51bGwsZS5kZWNyeXB0JiYodGhpcy5fdGFnPW4udXRpbC5jcmVhdGVCdWZmZXIoZS50YWcpLmdldEJ5dGVzKCksdGhpcy5fdGFnLmxlbmd0aCE9PXRoaXMuX3RhZ0xlbmd0aC84KSl0aHJvdyBuZXcgRXJyb3IoIkF1dGhlbnRpY2F0aW9uIHRhZyBkb2VzIG5vdCBtYXRjaCB0YWcgbGVuZ3RoLiIpO3RoaXMuX2hhc2hCbG9jaz1uZXcgQXJyYXkodGhpcy5faW50cyksdGhpcy50YWc9bnVsbCx0aGlzLl9oYXNoU3Via2V5PW5ldyBBcnJheSh0aGlzLl9pbnRzKSx0aGlzLmNpcGhlci5lbmNyeXB0KFswLDAsMCwwXSx0aGlzLl9oYXNoU3Via2V5KSx0aGlzLmNvbXBvbmVudEJpdHM9NCx0aGlzLl9tPXRoaXMuZ2VuZXJhdGVIYXNoVGFibGUodGhpcy5faGFzaFN1YmtleSx0aGlzLmNvbXBvbmVudEJpdHMpO3ZhciBpPXIubGVuZ3RoKCk7aWYoMTI9PT1pKXRoaXMuX2owPVtyLmdldEludDMyKCksci5nZXRJbnQzMigpLHIuZ2V0SW50MzIoKSwxXTtlbHNle2Zvcih0aGlzLl9qMD1bMCwwLDAsMF07ci5sZW5ndGgoKT4wOyl0aGlzLl9qMD10aGlzLmdoYXNoKHRoaXMuX2hhc2hTdWJrZXksdGhpcy5fajAsW3IuZ2V0SW50MzIoKSxyLmdldEludDMyKCksci5nZXRJbnQzMigpLHIuZ2V0SW50MzIoKV0pO3RoaXMuX2owPXRoaXMuZ2hhc2godGhpcy5faGFzaFN1YmtleSx0aGlzLl9qMCxbMCwwXS5jb25jYXQocyg4KmkpKSl9dGhpcy5faW5CbG9jaz10aGlzLl9qMC5zbGljZSgwKSxhKHRoaXMuX2luQmxvY2spLHRoaXMuX3BhcnRpYWxCeXRlcz0wLHQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcih0KSx0aGlzLl9hRGF0YUxlbmd0aD1zKDgqdC5sZW5ndGgoKSk7dmFyIG89dC5sZW5ndGgoKSV0aGlzLmJsb2NrU2l6ZTtmb3IobyYmdC5maWxsV2l0aEJ5dGUoMCx0aGlzLmJsb2NrU2l6ZS1vKSx0aGlzLl9zPVswLDAsMCwwXTt0Lmxlbmd0aCgpPjA7KXRoaXMuX3M9dGhpcy5naGFzaCh0aGlzLl9oYXNoU3Via2V5LHRoaXMuX3MsW3QuZ2V0SW50MzIoKSx0LmdldEludDMyKCksdC5nZXRJbnQzMigpLHQuZ2V0SW50MzIoKV0pfSxpLmdjbS5wcm90b3R5cGUuZW5jcnlwdD1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5sZW5ndGgoKTtpZigwPT09bilyZXR1cm4hMDtpZih0aGlzLmNpcGhlci5lbmNyeXB0KHRoaXMuX2luQmxvY2ssdGhpcy5fb3V0QmxvY2spLDA9PT10aGlzLl9wYXJ0aWFsQnl0ZXMmJm4+PXRoaXMuYmxvY2tTaXplKXtmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbaV1ePWUuZ2V0SW50MzIoKSk7dGhpcy5fY2lwaGVyTGVuZ3RoKz10aGlzLmJsb2NrU2l6ZX1lbHNle3ZhciBvPSh0aGlzLmJsb2NrU2l6ZS1uKSV0aGlzLmJsb2NrU2l6ZTtvPjAmJihvPXRoaXMuYmxvY2tTaXplLW8pLHRoaXMuX3BhcnRpYWxPdXRwdXQuY2xlYXIoKTtmb3IoaT0wO2k8dGhpcy5faW50czsrK2kpdGhpcy5fcGFydGlhbE91dHB1dC5wdXRJbnQzMihlLmdldEludDMyKCledGhpcy5fb3V0QmxvY2tbaV0pO2lmKG88PTB8fHIpe2lmKHIpe3ZhciBzPW4ldGhpcy5ibG9ja1NpemU7dGhpcy5fY2lwaGVyTGVuZ3RoKz1zLHRoaXMuX3BhcnRpYWxPdXRwdXQudHJ1bmNhdGUodGhpcy5ibG9ja1NpemUtcyl9ZWxzZSB0aGlzLl9jaXBoZXJMZW5ndGgrPXRoaXMuYmxvY2tTaXplO2ZvcihpPTA7aTx0aGlzLl9pbnRzOysraSl0aGlzLl9vdXRCbG9ja1tpXT10aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEludDMyKCk7dGhpcy5fcGFydGlhbE91dHB1dC5yZWFkLT10aGlzLmJsb2NrU2l6ZX1pZih0aGlzLl9wYXJ0aWFsQnl0ZXM+MCYmdGhpcy5fcGFydGlhbE91dHB1dC5nZXRCeXRlcyh0aGlzLl9wYXJ0aWFsQnl0ZXMpLG8+MCYmIXIpcmV0dXJuIGUucmVhZC09dGhpcy5ibG9ja1NpemUsdC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG8tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPW8sITA7dC5wdXRCeXRlcyh0aGlzLl9wYXJ0aWFsT3V0cHV0LmdldEJ5dGVzKG4tdGhpcy5fcGFydGlhbEJ5dGVzKSksdGhpcy5fcGFydGlhbEJ5dGVzPTB9dGhpcy5fcz10aGlzLmdoYXNoKHRoaXMuX2hhc2hTdWJrZXksdGhpcy5fcyx0aGlzLl9vdXRCbG9jayksYSh0aGlzLl9pbkJsb2NrKX0saS5nY20ucHJvdG90eXBlLmRlY3J5cHQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUubGVuZ3RoKCk7aWYobjx0aGlzLmJsb2NrU2l6ZSYmIShyJiZuPjApKXJldHVybiEwO3RoaXMuY2lwaGVyLmVuY3J5cHQodGhpcy5faW5CbG9jayx0aGlzLl9vdXRCbG9jayksYSh0aGlzLl9pbkJsb2NrKSx0aGlzLl9oYXNoQmxvY2tbMF09ZS5nZXRJbnQzMigpLHRoaXMuX2hhc2hCbG9ja1sxXT1lLmdldEludDMyKCksdGhpcy5faGFzaEJsb2NrWzJdPWUuZ2V0SW50MzIoKSx0aGlzLl9oYXNoQmxvY2tbM109ZS5nZXRJbnQzMigpLHRoaXMuX3M9dGhpcy5naGFzaCh0aGlzLl9oYXNoU3Via2V5LHRoaXMuX3MsdGhpcy5faGFzaEJsb2NrKTtmb3IodmFyIGk9MDtpPHRoaXMuX2ludHM7KytpKXQucHV0SW50MzIodGhpcy5fb3V0QmxvY2tbaV1edGhpcy5faGFzaEJsb2NrW2ldKTtuPHRoaXMuYmxvY2tTaXplP3RoaXMuX2NpcGhlckxlbmd0aCs9biV0aGlzLmJsb2NrU2l6ZTp0aGlzLl9jaXBoZXJMZW5ndGgrPXRoaXMuYmxvY2tTaXplfSxpLmdjbS5wcm90b3R5cGUuYWZ0ZXJGaW5pc2g9ZnVuY3Rpb24oZSx0KXt2YXIgcj0hMDt0LmRlY3J5cHQmJnQub3ZlcmZsb3cmJmUudHJ1bmNhdGUodGhpcy5ibG9ja1NpemUtdC5vdmVyZmxvdyksdGhpcy50YWc9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2FEYXRhTGVuZ3RoLmNvbmNhdChzKDgqdGhpcy5fY2lwaGVyTGVuZ3RoKSk7dGhpcy5fcz10aGlzLmdoYXNoKHRoaXMuX2hhc2hTdWJrZXksdGhpcy5fcyxpKTt2YXIgbz1bXTt0aGlzLmNpcGhlci5lbmNyeXB0KHRoaXMuX2owLG8pO2Zvcih2YXIgYT0wO2E8dGhpcy5faW50czsrK2EpdGhpcy50YWcucHV0SW50MzIodGhpcy5fc1thXV5vW2FdKTtyZXR1cm4gdGhpcy50YWcudHJ1bmNhdGUodGhpcy50YWcubGVuZ3RoKCklKHRoaXMuX3RhZ0xlbmd0aC84KSksdC5kZWNyeXB0JiZ0aGlzLnRhZy5ieXRlcygpIT09dGhpcy5fdGFnJiYocj0hMSkscn0saS5nY20ucHJvdG90eXBlLm11bHRpcGx5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVswLDAsMCwwXSxuPXQuc2xpY2UoMCksaT0wO2k8MTI4OysraSl7ZVtpLzMyfDBdJjE8PDMxLWklMzImJihyWzBdXj1uWzBdLHJbMV1ePW5bMV0sclsyXV49blsyXSxyWzNdXj1uWzNdKSx0aGlzLnBvdyhuLG4pfXJldHVybiByfSxpLmdjbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTEmZVszXSxuPTM7bj4wOy0tbil0W25dPWVbbl0+Pj4xfCgxJmVbbi0xXSk8PDMxO3RbMF09ZVswXT4+PjEsciYmKHRbMF1ePXRoaXMuX1IpfSxpLmdjbS5wcm90b3R5cGUudGFibGVNdWx0aXBseT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9WzAsMCwwLDBdLHI9MDtyPDMyOysrcil7dmFyIG49ZVtyLzh8MF0+Pj40Kig3LXIlOCkmMTUsaT10aGlzLl9tW3JdW25dO3RbMF1ePWlbMF0sdFsxXV49aVsxXSx0WzJdXj1pWzJdLHRbM11ePWlbM119cmV0dXJuIHR9LGkuZ2NtLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRbMF1ePXJbMF0sdFsxXV49clsxXSx0WzJdXj1yWzJdLHRbM11ePXJbM10sdGhpcy50YWJsZU11bHRpcGx5KHQpfSxpLmdjbS5wcm90b3R5cGUuZ2VuZXJhdGVIYXNoVGFibGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9OC90LG49NCpyLGk9MTYqcixvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSl7dmFyIHM9WzAsMCwwLDBdLHU9KG4tMS1hJW4pKnQ7c1thL258MF09MTw8dC0xPDx1LG9bYV09dGhpcy5nZW5lcmF0ZVN1Ykhhc2hUYWJsZSh0aGlzLm11bHRpcGx5KHMsZSksdCl9cmV0dXJuIG99LGkuZ2NtLnByb3RvdHlwZS5nZW5lcmF0ZVN1Ykhhc2hUYWJsZT1mdW5jdGlvbihlLHQpe3ZhciByPTE8PHQsbj1yPj4+MSxpPW5ldyBBcnJheShyKTtpW25dPWUuc2xpY2UoMCk7Zm9yKHZhciBvPW4+Pj4xO28+MDspdGhpcy5wb3coaVsyKm9dLGlbb109W10pLG8+Pj0xO2ZvcihvPTI7bzxuOyl7Zm9yKHZhciBhPTE7YTxvOysrYSl7dmFyIHM9aVtvXSx1PWlbYV07aVtvK2FdPVtzWzBdXnVbMF0sc1sxXV51WzFdLHNbMl1edVsyXSxzWzNdXnVbM11dfW8qPTJ9Zm9yKGlbMF09WzAsMCwwLDBdLG89bisxO288cjsrK28pe3ZhciBjPWlbb15uXTtpW29dPVtlWzBdXmNbMF0sZVsxXV5jWzFdLGVbMl1eY1syXSxlWzNdXmNbM11dfXJldHVybiBpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNik7cig2NSkscigxMzQpLHIoMjIyKSxyKDEwNikscigzNDYpLHIoNTIpLHIoMTM1KSxyKDEwKTt2YXIgaT1mdW5jdGlvbihlLHQscixpKXt2YXIgbz1uLnV0aWwuY3JlYXRlQnVmZmVyKCksYT1lLmxlbmd0aD4+MSxzPWErKDEmZS5sZW5ndGgpLHU9ZS5zdWJzdHIoMCxzKSxjPWUuc3Vic3RyKGEscyksZj1uLnV0aWwuY3JlYXRlQnVmZmVyKCksbD1uLmhtYWMuY3JlYXRlKCk7cj10K3I7dmFyIGg9TWF0aC5jZWlsKGkvMTYpLHA9TWF0aC5jZWlsKGkvMjApO2wuc3RhcnQoIk1ENSIsdSk7dmFyIGQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcigpO2YucHV0Qnl0ZXMocik7Zm9yKHZhciB5PTA7eTxoOysreSlsLnN0YXJ0KG51bGwsbnVsbCksbC51cGRhdGUoZi5nZXRCeXRlcygpKSxmLnB1dEJ1ZmZlcihsLmRpZ2VzdCgpKSxsLnN0YXJ0KG51bGwsbnVsbCksbC51cGRhdGUoZi5ieXRlcygpK3IpLGQucHV0QnVmZmVyKGwuZGlnZXN0KCkpO2wuc3RhcnQoIlNIQTEiLGMpO3ZhciBnPW4udXRpbC5jcmVhdGVCdWZmZXIoKTtmLmNsZWFyKCksZi5wdXRCeXRlcyhyKTtmb3IoeT0wO3k8cDsrK3kpbC5zdGFydChudWxsLG51bGwpLGwudXBkYXRlKGYuZ2V0Qnl0ZXMoKSksZi5wdXRCdWZmZXIobC5kaWdlc3QoKSksbC5zdGFydChudWxsLG51bGwpLGwudXBkYXRlKGYuYnl0ZXMoKStyKSxnLnB1dEJ1ZmZlcihsLmRpZ2VzdCgpKTtyZXR1cm4gby5wdXRCeXRlcyhuLnV0aWwueG9yQnl0ZXMoZC5nZXRCeXRlcygpLGcuZ2V0Qnl0ZXMoKSxpKSksb30sbz1mdW5jdGlvbihlLHQscil7dmFyIGk9ITE7dHJ5e3ZhciBvPWUuZGVmbGF0ZSh0LmZyYWdtZW50LmdldEJ5dGVzKCkpO3QuZnJhZ21lbnQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcihvKSx0Lmxlbmd0aD1vLmxlbmd0aCxpPSEwfWNhdGNoKGEpe31yZXR1cm4gaX0sYT1mdW5jdGlvbihlLHQscil7dmFyIGk9ITE7dHJ5e3ZhciBvPWUuaW5mbGF0ZSh0LmZyYWdtZW50LmdldEJ5dGVzKCkpO3QuZnJhZ21lbnQ9bi51dGlsLmNyZWF0ZUJ1ZmZlcihvKSx0Lmxlbmd0aD1vLmxlbmd0aCxpPSEwfWNhdGNoKGEpe31yZXR1cm4gaX0scz1mdW5jdGlvbihlLHQpe3ZhciByPTA7c3dpdGNoKHQpe2Nhc2UgMTpyPWUuZ2V0Qnl0ZSgpO2JyZWFrO2Nhc2UgMjpyPWUuZ2V0SW50MTYoKTticmVhaztjYXNlIDM6cj1lLmdldEludDI0KCk7YnJlYWs7Y2FzZSA0OnI9ZS5nZXRJbnQzMigpfXJldHVybiBuLnV0aWwuY3JlYXRlQnVmZmVyKGUuZ2V0Qnl0ZXMocikpfSx1PWZ1bmN0aW9uKGUsdCxyKXtlLnB1dEludChyLmxlbmd0aCgpLHQ8PDMpLGUucHV0QnVmZmVyKHIpfSxjPXtWZXJzaW9uczp7VExTXzFfMDp7bWFqb3I6MyxtaW5vcjoxfSxUTFNfMV8xOnttYWpvcjozLG1pbm9yOjJ9LFRMU18xXzI6e21ham9yOjMsbWlub3I6M319fTtjLlN1cHBvcnRlZFZlcnNpb25zPVtjLlZlcnNpb25zLlRMU18xXzEsYy5WZXJzaW9ucy5UTFNfMV8wXSxjLlZlcnNpb249Yy5TdXBwb3J0ZWRWZXJzaW9uc1swXSxjLk1heEZyYWdtZW4="
}