PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkYuoENvZGUgZm9yIEFkZCBBdHRyaWJ1dGUgRXhhbXBsZTwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42MS4yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9ImFwZS5odG1sIiB0aXRsZT0iRS6gQ29kZSBmb3IgQWRkIEtleXdvcmQgRXhhbXBsZSI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhcGcuaHRtbCIgdGl0bGU9IkcuoENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGUiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPkYuoENvZGUgZm9yIEFkZCBBdHRyaWJ1dGUgRXhhbXBsZTwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImFwZS5odG1sIj5QcmV2PC9hPqA8L3RkPjx0aCB3aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIj6gPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGcuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0iYXBwZW5kaXgiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhZGRhdHRyaWJ1dGVhcHBlbmRpeCI+PC9hPkYuoENvZGUgZm9yIEFkZCBBdHRyaWJ1dGUgRXhhbXBsZTwvaDI+PC9kaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwojaW5jbHVkZSAmbHQ7bGlieG1sL3htbG1lbW9yeS5oJmd0OwojaW5jbHVkZSAmbHQ7bGlieG1sL3BhcnNlci5oJmd0OwoKCnhtbERvY1B0cgpwYXJzZURvYyhjaGFyICpkb2NuYW1lLCBjaGFyICp1cmkpIHsKCgl4bWxEb2NQdHIgZG9jOwoJeG1sTm9kZVB0ciBjdXI7Cgl4bWxOb2RlUHRyIG5ld25vZGU7Cgl4bWxBdHRyUHRyIG5ld2F0dHI7CgoJZG9jID0geG1sUGFyc2VGaWxlKGRvY25hbWUpOwoJCglpZiAoZG9jID09IE5VTEwgKSB7CgkJZnByaW50ZihzdGRlcnIsIkRvY3VtZW50IG5vdCBwYXJzZWQgc3VjY2Vzc2Z1bGx5LiBcbiIpOwoJCXJldHVybiAoTlVMTCk7Cgl9CgkKCWN1ciA9IHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk7CgkKCWlmIChjdXIgPT0gTlVMTCkgewoJCWZwcmludGYoc3RkZXJyLCJlbXB0eSBkb2N1bWVudFxuIik7CgkJeG1sRnJlZURvYyhkb2MpOwoJCXJldHVybiAoTlVMTCk7Cgl9CgkKCWlmICh4bWxTdHJjbXAoY3VyLSZndDtuYW1lLCAoY29uc3QgeG1sQ2hhciAqKSAic3RvcnkiKSkgewoJCWZwcmludGYoc3RkZXJyLCJkb2N1bWVudCBvZiB0aGUgd3JvbmcgdHlwZSwgcm9vdCBub2RlICE9IHN0b3J5Iik7CgkJeG1sRnJlZURvYyhkb2MpOwoJCXJldHVybiAoTlVMTCk7Cgl9CgkKCW5ld25vZGUgPSB4bWxOZXdUZXh0Q2hpbGQgKGN1ciwgTlVMTCwgInJlZmVyZW5jZSIsIE5VTEwpOwoJbmV3YXR0ciA9IHhtbE5ld1Byb3AgKG5ld25vZGUsICJ1cmkiLCB1cmkpOwoJcmV0dXJuKGRvYyk7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewoKCWNoYXIgKmRvY25hbWU7CgljaGFyICp1cmk7Cgl4bWxEb2NQdHIgZG9jOwoKCWlmIChhcmdjICZsdDs9IDIpIHsKCQlwcmludGYoIlVzYWdlOiAlcyBkb2NuYW1lLCB1cmlcbiIsIGFyZ3ZbMF0pOwoJCXJldHVybigwKTsKCX0KCglkb2NuYW1lID0gYXJndlsxXTsKCXVyaSA9IGFyZ3ZbMl07Cglkb2MgPSBwYXJzZURvYyAoZG9jbmFtZSwgdXJpKTsKCWlmIChkb2MgIT0gTlVMTCkgewoJCXhtbFNhdmVGb3JtYXRGaWxlIChkb2NuYW1lLCBkb2MsIDEpOwoJCXhtbEZyZWVEb2MoZG9jKTsKCX0KCXJldHVybiAoMSk7Cn0KCjwvcHJlPjxwPgogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBlLmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGcuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkUuoENvZGUgZm9yIEFkZCBLZXl3b3JkIEV4YW1wbGWgPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPqBHLqBDb2RlIGZvciBSZXRyaWV2aW5nIEF0dHJpYnV0ZSBWYWx1ZSBFeGFtcGxlPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4K