Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKi8KCiNpbmNsdWRlICJidXN5Ym94LmgiCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxnZXRvcHQuaD4KCiNpZiBfX0dOVV9MSUJSQVJZX18gPCA1CiNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgojaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiNpZm5kZWYgX19hbHBoYV9fCiMgZGVmaW5lIF9fTlJfa2xvZ2N0bCBfX05SX3N5c2xvZwpzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsIGtsb2djdGwsIGludCwgdHlwZSwgY2hhciAqLCBiLCBpbnQsIGxlbik7CiNlbHNlCQkJCQkJCS8qIF9fYWxwaGFfXyAqLwojZGVmaW5lIGtsb2djdGwgc3lzbG9nCiNlbmRpZgoKI2Vsc2UKIyBpbmNsdWRlIDxzeXMva2xvZy5oPgojZW5kaWYKCmludCBkbWVzZ19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewoJY2hhciAqYnVmOwoJaW50IGM7CglpbnQgYnVmc2l6ZSA9IDgxOTY7CglpbnQgaTsKCWludCBuOwoJaW50IGxldmVsID0gMDsKCWludCBsYXN0YzsKCWludCBjbWQgPSAzOwoKCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiY246czoiKSkgIT0gRU9GKSB7CgkJc3dpdGNoIChjKSB7CgkJY2FzZSAnYyc6CgkJCWNtZCA9IDQ7CgkJCWJyZWFrOwoJCWNhc2UgJ24nOgoJCQljbWQgPSA4OwoJCQlpZiAob3B0YXJnID09IE5VTEwpCgkJCQl1c2FnZShkbWVzZ191c2FnZSk7CgkJCWxldmVsID0gYXRvaShvcHRhcmcpOwoJCQlicmVhazsKCQljYXNlICdzJzoKCQkJaWYgKG9wdGFyZyA9PSBOVUxMKQoJCQkJdXNhZ2UoZG1lc2dfdXNhZ2UpOwoJCQlidWZzaXplID0gYXRvaShvcHRhcmcpOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQl1c2FnZShkbWVzZ191c2FnZSk7CgkJfQoJfQkJCQoKCWlmIChvcHRpbmQgPCBhcmdjKSB7CgkJZ290byBlbmQ7Cgl9CgoJaWYgKGNtZCA9PSA4KSB7CgkJaWYgKGtsb2djdGwoY21kLCBOVUxMLCBsZXZlbCkgPCAwKQoJCQlwZXJyb3JfbXNnX2FuZF9kaWUoImtsb2djdGwiKTsKCQlyZXR1cm4gRVhJVF9TVUNDRVNTOwoJfQoKCWlmIChidWZzaXplIDwgNDA5NikKCQlidWZzaXplID0gNDA5NjsKCWJ1ZiA9IChjaGFyICopIHhtYWxsb2MoYnVmc2l6ZSk7CglpZiAoKG4gPSBrbG9nY3RsKGNtZCwgYnVmLCBidWZzaXplKSkgPCAwKQoJCXBlcnJvcl9tc2dfYW5kX2RpZSgia2xvZ2N0bCIpOwoKCWxhc3RjID0gJ1xuJzsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlpZiAobGFzdGMgPT0gJ1xuJyAmJiBidWZbaV0gPT0gJzwnKSB7CgkJCWkrKzsKCQkJd2hpbGUgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykKCQkJCWkrKzsKCQkJaWYgKGJ1ZltpXSA9PSAnPicpCgkJCQlpKys7CgkJfQoJCWxhc3RjID0gYnVmW2ldOwoJCXB1dGNoYXIobGFzdGMpOwoJfQoJaWYgKGxhc3RjICE9ICdcbicpCgkJcHV0Y2hhcignXG4nKTsKCXJldHVybiBFWElUX1NVQ0NFU1M7CiAgZW5kOgoJdXNhZ2UoZG1lc2dfdXNhZ2UpOwoJcmV0dXJuIEVYSVRfRkFJTFVSRTsKfQo=