LyogR1NTQVBJL2tyYjUgc3VwcG9ydCBmb3IgRlRQIC0gbG9vc2VseSBiYXNlZCBvbiBvbGQga3JiNC5jCiAqCiAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKgogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAqCiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLiAgKi8KCiNpbmNsdWRlICJzZXR1cC5oIgoKI2lmbmRlZiBDVVJMX0RJU0FCTEVfRlRQCiNpZmRlZiBIQVZFX0dTU0FQSQoKI2lmZGVmIEhBVkVfT0xEX0dTU01JVAojZGVmaW5lIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFIGdzc19udF9zZXJ2aWNlX25hbWUKI2VuZGlmCgojaW5jbHVkZSA8c3RkbGliLmg+CiNpZmRlZiBIQVZFX05FVERCX0gKI2luY2x1ZGUgPG5ldGRiLmg+CiNlbmRpZgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpZmRlZiBIQVZFX0dTU01JVAovKiBNSVQgc3R5bGUgKi8KI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGkuaD4KI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgojaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9rcmI1Lmg+CiNlbHNlCi8qIEhlaW1kYWwtc3R5bGUgKi8KI2luY2x1ZGUgPGdzc2FwaS5oPgojZW5kaWYKCiNpbmNsdWRlICJ1cmxkYXRhLmgiCiNpbmNsdWRlICJiYXNlNjQuaCIKI2luY2x1ZGUgImZ0cC5oIgojaW5jbHVkZSAic2VuZGYuaCIKI2luY2x1ZGUgImtyYjQuaCIKI2luY2x1ZGUgIm1lbW9yeS5oIgoKI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgoKLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiNpbmNsdWRlICJtZW1kZWJ1Zy5oIgoKI2RlZmluZSBMT0NBTF9BRERSICgmY29ubi0+bG9jYWxfYWRkcikKI2RlZmluZSBSRU1PVEVfQUREUiBjb25uLT5pcF9hZGRyLT5haV9hZGRyCgpzdGF0aWMgaW50CmtyYjVfY2hlY2tfcHJvdCh2b2lkICphcHBfZGF0YSwgaW50IGxldmVsKQp7CiAgYXBwX2RhdGEgPSBOVUxMOyAvKiBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmcgKi8KICBpZihsZXZlbCA9PSBwcm90X2NvbmZpZGVudGlhbCkKICAgIHJldHVybiAtMTsKICByZXR1cm4gMDsKfQoKc3RhdGljIGludAprcmI1X2RlY29kZSh2b2lkICphcHBfZGF0YSwgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgbGV2ZWwsCiAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKewogIGdzc19jdHhfaWRfdCAqY29udGV4dCA9IGFwcF9kYXRhOwogIE9NX3VpbnQzMiBtYWosIG1pbjsKICBnc3NfYnVmZmVyX2Rlc2MgZW5jLCBkZWM7CgogIC8qIHNodXQgZ2NjIHVwICovCiAgbGV2ZWwgPSAwOwogIGNvbm4gPSBOVUxMOwoKICBlbmMudmFsdWUgPSBidWY7CiAgZW5jLmxlbmd0aCA9IGxlbjsKICBtYWogPSBnc3NfdW5zZWFsKCZtaW4sICpjb250ZXh0LCAmZW5jLCAmZGVjLCBOVUxMLCBOVUxMKTsKICBpZihtYWogIT0gR1NTX1NfQ09NUExFVEUpIHsKICAgIGlmKGxlbiA+PSA0KQogICAgICBzdHJjcHkoYnVmLCAiNTk5ICIpOwogICAgcmV0dXJuIC0xOwogIH0KCiAgbWVtY3B5KGJ1ZiwgZGVjLnZhbHVlLCBkZWMubGVuZ3RoKTsKICBsZW4gPSBkZWMubGVuZ3RoOwogIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluLCAmZGVjKTsKCiAgcmV0dXJuIGxlbjsKfQoKc3RhdGljIGludAprcmI1X292ZXJoZWFkKHZvaWQgKmFwcF9kYXRhLCBpbnQgbGV2ZWwsIGludCBsZW4pCnsKICAvKiBubyBhcmd1bWVudHMgYXJlIHVzZWQsIGp1c3QgaW5pdCB0aGVtIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgKi8KICBhcHBfZGF0YSA9IE5VTEw7CiAgbGV2ZWwgPSAwOwogIGxlbiA9IDA7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKa3JiNV9lbmNvZGUodm9pZCAqYXBwX2RhdGEsIGNvbnN0IHZvaWQgKmZyb20sIGludCBsZW5ndGgsIGludCBsZXZlbCwgdm9pZCAqKnRvLAogICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCnsKICBnc3NfY3R4X2lkX3QgKmNvbnRleHQgPSBhcHBfZGF0YTsKICBnc3NfYnVmZmVyX2Rlc2MgZGVjLCBlbmM7CiAgT01fdWludDMyIG1haiwgbWluOwogIGludCBzdGF0ZTsKICBpbnQgbGVuOwoKICAvKiBzaHV0IGdjYyB1cCAqLwogIGNvbm4gPSBOVUxMOwoKICAvKiBOT1RFIHRoYXQgdGhlIGNhc3QgaXMgc2FmZSwgbmVpdGhlciBvZiB0aGUga3JiNSwgZ251IGdzcyBhbmQgaGVpbWRhbCAKICAgKiBsaWJyYXJpZXMgbW9kaWZ5IHRoZSBpbnB1dCBidWZmZXIgaW4gZ3NzX3NlYWwoKQogICAqLwogIGRlYy52YWx1ZSA9ICh2b2lkKilmcm9tOwogIGRlYy5sZW5ndGggPSBsZW5ndGg7CiAgbWFqID0gZ3NzX3NlYWwoJm1pbiwgKmNvbnRleHQsCgkJIGxldmVsID09IHByb3RfcHJpdmF0ZSwKCQkgR1NTX0NfUU9QX0RFRkFVTFQsCgkJICZkZWMsICZzdGF0ZSwgJmVuYyk7CgogIGlmKG1haiAhPSBHU1NfU19DT01QTEVURSkKICAgIHJldHVybiAtMTsKCiAgLyogbWFsbG9jIGEgbmV3IGJ1ZmZlciwgaW4gY2FzZSBnc3NfcmVsZWFzZV9idWZmZXIgZG9lc24ndCB3b3JrIGFzIGV4cGVjdGVkICovCiAgKnRvID0gbWFsbG9jKGVuYy5sZW5ndGgpOwogIGlmKCEqdG8pCiAgICByZXR1cm4gLTE7CiAgbWVtY3B5KCp0bywgZW5jLnZhbHVlLCBlbmMubGVuZ3RoKTsKICBsZW4gPSBlbmMubGVuZ3RoOwogIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluLCAmZW5jKTsKICByZXR1cm4gbGVuOwp9CgpzdGF0aWMgaW50CmtyYjVfYXV0aCh2b2lkICphcHBfZGF0YSwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQp7CiAgaW50IHJldDsKICBjaGFyICpwOwogIGNvbnN0IGNoYXIgKmhvc3QgPSBjb25uLT5kbnNfZW50cnktPmFkZHItPmFpX2Nhbm9ubmFtZTsKICBzc2l6ZV90IG5yZWFkOwogIHNvY2tsZW5fdCBsID0gc2l6ZW9mKGNvbm4tPmxvY2FsX2FkZHIpOwogIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKICBDVVJMY29kZSByZXN1bHQ7CiAgY29uc3QgY2hhciAqc2VydmljZSA9ICJmdHAiLCAqc3J2X2hvc3QgPSAiaG9zdCI7CiAgZ3NzX2J1ZmZlcl9kZXNjIGdzc2J1ZiwgX2dzc3Jlc3AsICpnc3NyZXNwOwogIE9NX3VpbnQzMiBtYWosIG1pbjsKICBnc3NfbmFtZV90IGdzc25hbWU7CiAgZ3NzX2N0eF9pZF90ICpjb250ZXh0ID0gYXBwX2RhdGE7CiAgc3RydWN0IGdzc19jaGFubmVsX2JpbmRpbmdzX3N0cnVjdCBjaGFuOwoKICBpZihnZXRzb2NrbmFtZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwKICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopTE9DQUxfQUREUiwgJmwpIDwgMCkKICAgIHBlcnJvcigiZ2V0c29ja25hbWUoKSIpOwoKICBjaGFuLmluaXRpYXRvcl9hZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7CiAgY2hhbi5pbml0aWF0b3JfYWRkcmVzcy5sZW5ndGggPSBsIC0gNDsKICBjaGFuLmluaXRpYXRvcl9hZGRyZXNzLnZhbHVlID0gJigoc3RydWN0IHNvY2thZGRyX2luICopTE9DQUxfQUREUiktPnNpbl9hZGRyLnNfYWRkcjsKICBjaGFuLmFjY2VwdG9yX2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsKICBjaGFuLmFjY2VwdG9yX2FkZHJlc3MubGVuZ3RoID0gbCAtIDQ7CiAgY2hhbi5hY2NlcHRvcl9hZGRyZXNzLnZhbHVlID0gJigoc3RydWN0IHNvY2thZGRyX2luICopUkVNT1RFX0FERFIpLT5zaW5fYWRkci5zX2FkZHI7CiAgY2hhbi5hcHBsaWNhdGlvbl9kYXRhLmxlbmd0aCA9IDA7CiAgY2hhbi5hcHBsaWNhdGlvbl9kYXRhLnZhbHVlID0gTlVMTDsKCiAgLyogdGhpcyBsb29wIHdpbGwgZXhlY3V0ZSB0d2ljZSAob25jZSBmb3Igc2VydmljZSwgb25jZSBmb3IgaG9zdCkgKi8KICB3aGlsZSgxKSB7CiAgICAvKiB0aGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgcmVwZWF0ZWQgaGVyZSwgYnV0IGNhbid0IGhlbHAgaXQgKi8KICAgIGlmKHNlcnZpY2UgPT0gc3J2X2hvc3QpIHsKICAgICAgcmVzdWx0ID0gQ3VybF9mdHBzZW5kZihjb25uLCAiQVVUSCBHU1NBUEkiKTsKCiAgICAgIGlmKHJlc3VsdCkKCXJldHVybiAtMjsKICAgICAgaWYoQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sIE5VTEwpKQoJcmV0dXJuIC0xOwoKICAgICAgaWYoZGF0YS0+c3RhdGUuYnVmZmVyWzBdICE9ICczJykKCXJldHVybiAtMTsKICAgIH0KCiAgICBnc3NidWYudmFsdWUgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CiAgICBnc3NidWYubGVuZ3RoID0gc25wcmludGYoZ3NzYnVmLnZhbHVlLCBCVUZTSVpFLCAiJXNAJXMiLCBzZXJ2aWNlLCBob3N0KTsKICAgIG1haiA9IGdzc19pbXBvcnRfbmFtZSgmbWluLCAmZ3NzYnVmLCBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwgJmdzc25hbWUpOwogICAgaWYobWFqICE9IEdTU19TX0NPTVBMRVRFKSB7CiAgICAgIGdzc19yZWxlYXNlX25hbWUoJm1pbiwgJmdzc25hbWUpOwogICAgICBpZihzZXJ2aWNlID09IHNydl9ob3N0KSB7CglDdXJsX2ZhaWxmKGRhdGEsICJFcnJvciBpbXBvcnRpbmcgc2VydmljZSBuYW1lICVzIiwgZ3NzYnVmLnZhbHVlKTsKCXJldHVybiBBVVRIX0VSUk9SOwogICAgICB9CiAgICAgIHNlcnZpY2UgPSBzcnZfaG9zdDsKICAgICAgY29udGludWU7CiAgICB9CiAgICB7CiAgICAgIGdzc19PSUQgdDsKICAgICAgZ3NzX2Rpc3BsYXlfbmFtZSgmbWluLCBnc3NuYW1lLCAmZ3NzYnVmLCAmdCk7CiAgICAgIEN1cmxfaW5mb2YoZGF0YSwgIlRyeWluZyBhZ2FpbnN0ICVzXG4iLCBnc3NidWYudmFsdWUpOwogICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbiwgJmdzc2J1Zik7CiAgICB9CiAgICBnc3NyZXNwID0gR1NTX0NfTk9fQlVGRkVSOwogICAgKmNvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOwoKICAgIGRvIHsKICAgICAgcmV0ID0gQVVUSF9PSzsKICAgICAgbWFqID0gZ3NzX2luaXRfc2VjX2NvbnRleHQoJm1pbiwKCQkJCSBHU1NfQ19OT19DUkVERU5USUFMLAoJCQkJIGNvbnRleHQsCgkJCQkgZ3NzbmFtZSwKCQkJCSBHU1NfQ19OT19PSUQsCgkJCQkgR1NTX0NfTVVUVUFMX0ZMQUcgfCBHU1NfQ19SRVBMQVlfRkxBRywKCQkJCSAwLAoJCQkJICZjaGFuLAoJCQkJIGdzc3Jlc3AsCgkJCQkgTlVMTCwKCQkJCSAmZ3NzYnVmLAoJCQkJIE5VTEwsCgkJCQkgTlVMTCk7CgogICAgICBpZihnc3NyZXNwKSB7CglmcmVlKF9nc3NyZXNwLnZhbHVlKTsKCWdzc3Jlc3AgPSBOVUxMOwogICAgICB9CgogICAgICBpZihtYWogIT0gR1NTX1NfQ09NUExFVEUgJiYgbWFqICE9IEdTU19TX0NPTlRJTlVFX05FRURFRCkgewoJQ3VybF9pbmZvZihkYXRhLCAiRXJyb3IgY3JlYXRpbmcgc2VjdXJpdHkgY29udGV4dCIpOwoJcmV0ID0gQVVUSF9FUlJPUjsKCWJyZWFrOwogICAgICB9CgogICAgICBpZihnc3NidWYubGVuZ3RoICE9IDApIHsKCWlmKEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCAoY2hhciAqKWdzc2J1Zi52YWx1ZSwgZ3NzYnVmLmxlbmd0aCwgJnApIDwgMSkgewoJICBDdXJsX2luZm9mKGRhdGEsICJPdXQgb2YgbWVtb3J5IGJhc2U2NC1lbmNvZGluZyIpOwoJICByZXQgPSBBVVRIX0NPTlRJTlVFOwoJICBicmVhazsKCX0KCglyZXN1bHQgPSBDdXJsX2Z0cHNlbmRmKGNvbm4sICJBREFUICVzIiwgcCk7CgoJZnJlZShwKTsKCglpZihyZXN1bHQpIHsKCSAgcmV0ID0gLTI7CgkgIGJyZWFrOwoJfQoKCWlmKEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCBOVUxMKSkgewoJICByZXQgPSAtMTsKCSAgYnJlYWs7Cgl9CgoJaWYoZGF0YS0+c3RhdGUuYnVmZmVyWzBdICE9ICcyJyAmJiBkYXRhLT5zdGF0ZS5idWZmZXJbMF0gIT0gJzMnKXsKCSAgQ3VybF9pbmZvZihkYXRhLCAiU2VydmVyIGRpZG4ndCBhY2NlcHQgYXV0aCBkYXRhXG4iKTsKCSAgcmV0ID0gQVVUSF9FUlJPUjsKCSAgYnJlYWs7Cgl9CgoJcCA9IGRhdGEtPnN0YXRlLmJ1ZmZlciArIDQ7CglwID0gc3Ryc3RyKHAsICJBREFUPSIpOwoJaWYocCkgewoJICBfZ3NzcmVzcC5sZW5ndGggPSBDdXJsX2Jhc2U2NF9kZWNvZGUocCArIDUsICh1bnNpZ25lZCBjaGFyICoqKSZfZ3NzcmVzcC52YWx1ZSk7CgkgIGlmKF9nc3NyZXNwLmxlbmd0aCA8IDEpIHsKCSAgICBDdXJsX2ZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5IGJhc2U2NC1lbmNvZGluZyIpOwoJICAgIHJldCA9IEFVVEhfQ09OVElOVUU7CgkgICAgYnJlYWs7CgkgIH0KCX0KCglnc3NyZXNwID0gJl9nc3NyZXNwOwogICAgICB9CiAgICB9IHdoaWxlKG1haiA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpOwoKICAgIGdzc19yZWxlYXNlX25hbWUoJm1pbiwgJmdzc25hbWUpOwoKICAgIGlmKGdzc3Jlc3ApCiAgICAgIGZyZWUoX2dzc3Jlc3AudmFsdWUpOwoKICAgIGlmKHJldCA9PSBBVVRIX09LIHx8IHNlcnZpY2UgPT0gc3J2X2hvc3QpCiAgICAgIHJldHVybiByZXQ7CgogICAgc2VydmljZSA9IHNydl9ob3N0OwogIH0KfQoKc3RydWN0IEN1cmxfc2VjX2NsaWVudF9tZWNoIEN1cmxfa3JiNV9jbGllbnRfbWVjaCA9IHsKICAgICJHU1NBUEkiLAogICAgc2l6ZW9mKGdzc19jdHhfaWRfdCksCiAgICBOVUxMLCAvKiBpbml0ICovCiAgICBrcmI1X2F1dGgsCiAgICBOVUxMLCAvKiBlbmQgKi8KICAgIGtyYjVfY2hlY2tfcHJvdCwKICAgIGtyYjVfb3ZlcmhlYWQsCiAgICBrcmI1X2VuY29kZSwKICAgIGtyYjVfZGVjb2RlCn07CgojZW5kaWYgLyogSEFWRV9HU1NBUEkgKi8KI2VuZGlmIC8qIENVUkxfRElTQUJMRV9GVFAgKi8K