LyoKICogRE9TIEVYRSBsb2FkZXIKICoKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvldmVuCiAqLwoKI2lmZGVmIGxpbnV4CgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzeXMvaXBjLmg+CiNpbmNsdWRlIDxzeXMvc2htLmg+CiNpbmNsdWRlIDxzeXMvdm04Ni5oPgojaW5jbHVkZSAid2ludHlwZXMuaCIKCnR5cGVkZWYgc3RydWN0IF9ET1NUQVNLIHsKIExQVk9JRCBpbWc7CiB1bnNpZ25lZCBpbWdfb2ZzOwogV09SRCBwc3Bfc2VnLGxvYWRfc2VnOwogV09SRCBkcG1pX3NlZyxkcG1pX3NlbCxkcG1pX2ZsYWc7CiBITU9EVUxFMTYgaE1vZHVsZTsKIHN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgVk04NjsKIGludCBmbiwgc3RhdGU7CiBjaGFyIG1tX25hbWVbMTI4XTsKIGludCBtbV9mZDsKIGludCByZWFkX3BpcGUsd3JpdGVfcGlwZTsKIHBpZF90IHRhc2s7Cn0gRE9TVEFTSywgKkxQRE9TVEFTSzsKCiNkZWZpbmUgTVpfU1VQUE9SVEVECgpleHRlcm4gaW50IE1aX0luaXRUYXNrKCBMUERPU1RBU0sgbHBEb3NUYXNrICk7CmV4dGVybiBpbnQgTVpfSW5pdE1lbW9yeSggTFBET1NUQVNLIGxwRG9zVGFzaywgTkVfTU9EVUxFICpwTW9kdWxlICk7CmV4dGVybiBpbnQgTVpfUnVuTW9kdWxlKCBMUERPU1RBU0sgbHBEb3NUYXNrICk7CmV4dGVybiB2b2lkIE1aX0tpbGxNb2R1bGUoIExQRE9TVEFTSyBscERvc1Rhc2sgKTsKZXh0ZXJuIGludCBET1NWTV9Qcm9jZXNzKCBMUERPU1RBU0sgbHBEb3NUYXNrICk7CgojZW5kaWYgLyogbGludXggKi8KCmV4dGVybiBISU5TVEFOQ0UxNiBNWl9DcmVhdGVQcm9jZXNzKCBMUENTVFIgbmFtZSwgTFBDU1RSIGNtZGxpbmUsIExQQ1NUUiBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFNUQVJUVVBJTkZPMzJBIHN0YXJ0dXAsIExQUFJPQ0VTU19JTkZPUk1BVElPTiBpbmZvICk7CmV4dGVybiBpbnQgRE9TVk1fRW50ZXIoIFBDT05URVhUIGNvbnRleHQgKTsK