PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkcuoENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGU8L3RpdGxlPjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNjEuMiI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iTGlieG1sIFR1dG9yaWFsIj48bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iTGlieG1sIFR1dG9yaWFsIj48bGluayByZWw9InByZXZpb3VzIiBocmVmPSJhcGYuaHRtbCIgdGl0bGU9IkYuoENvZGUgZm9yIEFkZCBBdHRyaWJ1dGUgRXhhbXBsZSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhcGguaHRtbCIgdGl0bGU9IkguoENvZGUgZm9yIEVuY29kaW5nIENvbnZlcnNpb24gRXhhbXBsZSI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJuYXZoZWFkZXIiPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiPjx0cj48dGggY29sc3Bhbj0iMyIgYWxpZ249ImNlbnRlciI+Ry6gQ29kZSBmb3IgUmV0cmlldmluZyBBdHRyaWJ1dGUgVmFsdWUgRXhhbXBsZTwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImFwZi5odG1sIj5QcmV2PC9hPqA8L3RkPjx0aCB3aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIj6gPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGguaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0iYXBwZW5kaXgiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnZXRhdHRyaWJ1dGVhcHBlbmRpeCI+PC9hPkcuoENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGU8L2gyPjwvZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwojaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKI2luY2x1ZGUgJmx0O2xpYnhtbC94bWxtZW1vcnkuaCZndDsKI2luY2x1ZGUgJmx0O2xpYnhtbC9wYXJzZXIuaCZndDsKCnZvaWQKZ2V0UmVmZXJlbmNlICh4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIGN1cikgewoKCXhtbENoYXIgKnVyaTsKCWN1ciA9IGN1ci0mZ3Q7eG1sQ2hpbGRyZW5Ob2RlOwoJd2hpbGUgKGN1ciAhPSBOVUxMKSB7CgkgICAgaWYgKCgheG1sU3RyY21wKGN1ci0mZ3Q7bmFtZSwgKGNvbnN0IHhtbENoYXIgKikicmVmZXJlbmNlIikpKSB7CgkJICAgIHVyaSA9IHhtbEdldFByb3AoY3VyLCAidXJpIik7CgkJICAgIHByaW50ZigidXJpOiAlc1xuIiwgdXJpKTsKCQkgICAgeG1sRnJlZSh1cmkpOwoJICAgIH0KCSAgICBjdXIgPSBjdXItJmd0O25leHQ7Cgl9CglyZXR1cm47Cn0KCgp2b2lkCnBhcnNlRG9jKGNoYXIgKmRvY25hbWUpIHsKCgl4bWxEb2NQdHIgZG9jOwoJeG1sTm9kZVB0ciBjdXI7CgoJZG9jID0geG1sUGFyc2VGaWxlKGRvY25hbWUpOwoJCglpZiAoZG9jID09IE5VTEwgKSB7CgkJZnByaW50ZihzdGRlcnIsIkRvY3VtZW50IG5vdCBwYXJzZWQgc3VjY2Vzc2Z1bGx5LiBcbiIpOwoJCXJldHVybjsKCX0KCQoJY3VyID0geG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9jKTsKCQoJaWYgKGN1ciA9PSBOVUxMKSB7CgkJZnByaW50ZihzdGRlcnIsImVtcHR5IGRvY3VtZW50XG4iKTsKCQl4bWxGcmVlRG9jKGRvYyk7CgkJcmV0dXJuOwoJfQoJCglpZiAoeG1sU3RyY21wKGN1ci0mZ3Q7bmFtZSwgKGNvbnN0IHhtbENoYXIgKikgInN0b3J5IikpIHsKCQlmcHJpbnRmKHN0ZGVyciwiZG9jdW1lbnQgb2YgdGhlIHdyb25nIHR5cGUsIHJvb3Qgbm9kZSAhPSBzdG9yeSIpOwoJCXhtbEZyZWVEb2MoZG9jKTsKCQlyZXR1cm47Cgl9CgkKCWdldFJlZmVyZW5jZSAoZG9jLCBjdXIpOwoJeG1sRnJlZURvYyhkb2MpOwoJcmV0dXJuOwp9CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKCgljaGFyICpkb2NuYW1lOwoKCWlmIChhcmdjICZsdDs9IDEpIHsKCQlwcmludGYoIlVzYWdlOiAlcyBkb2NuYW1lXG4iLCBhcmd2WzBdKTsKCQlyZXR1cm4oMCk7Cgl9CgoJZG9jbmFtZSA9IGFyZ3ZbMV07CglwYXJzZURvYyAoZG9jbmFtZSk7CgkKCXJldHVybiAoMSk7Cn0KCjwvcHJlPjxwPgogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBmLmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGguaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkYuoENvZGUgZm9yIEFkZCBBdHRyaWJ1dGUgRXhhbXBsZaA8L3RkPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0iY2VudGVyIj48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+oEguoENvZGUgZm9yIEVuY29kaW5nIENvbnZlcnNpb24gRXhhbXBsZTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+Cg==