ZGlmZiAtLWdpdCBhL21idGsvbGlibWJ0a19mb3RhL21idGtfZm90YS5jIGIvbWJ0ay9saWJtYnRrX2ZvdGEvbWJ0a19mb3RhLmMKaW5kZXggYmM4YTM5OS4uNmU2NzU2OSAxMDA3NTUKLS0tIGEvbWJ0ay9saWJtYnRrX2ZvdGEvbWJ0a19mb3RhLmMKKysrIGIvbWJ0ay9saWJtYnRrX2ZvdGEvbWJ0a19mb3RhLmMKQEAgLTEyLDYgKzEyLDggQEAKICNpbmNsdWRlIDxzZW1hcGhvcmUuaD4NCiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4NCiANCisjaW5jbHVkZSAibWJ0a19sb2cuaCINCisNCiANCiAjaWZkZWYgREVCVUcNCiAgICAgI2RlZmluZSBmb3RhX2xvZyguLi4pICAgICAgICAgICAgICAgICAgICBwcmludGYoX19WQV9BUkdTX18pDQpAQCAtOTcsNyArOTksNyBAQAogDQogCW5vdGlmeV9zdHIgPSBibG9ibXNnX2dldF9zdHJpbmcodGJbQVRUUl9TTVNHUFNdKTsNCiAgICAgbGVuID0gc3RybGVuKG5vdGlmeV9zdHIpOw0KLSAgICBmb3RhX2xvZygiJXMgOiAlc1xyXG4iLCBfX0ZVTkNUSU9OX18sIG5vdGlmeV9zdHIpOw0KKyAgICBMT0dFKCIlcyA6ICVzXHJcbiIsIF9fRlVOQ1RJT05fXywgbm90aWZ5X3N0cik7DQogLy8gICAgcHJpbnRmKCJMMTExMTElcyA6ICVzXHJcbiIsIF9fRlVOQ1RJT05fXywgbm90aWZ5X3N0cik7DQogICAgIGlmIChzdHJzdHJfbihub3RpZnlfc3RyLCAic3RhcnQiKSkgew0KICAgICAgICAgZm90YV9jYigwLCAwKTsNCkBAIC0xMDUsMTIgKzEwNywxMiBAQAogICAgICAgICBmb3RhX2NiKDAsIDEwMCk7DQogICAgICAgICBmb3RhX2Rvd2xvYWRfZmxhZyA9IDQ7DQogLy8gICAgICAgIHNlbV9wb3N0KCZzZW0pOw0KLSAgICAgICAgcHJpbnRmKCJkb3dubG9hZCBmaXJtd2FyZSBzdWNjZXNzIVxyXG4iKTsNCisgICAgICAgIExPR0UoImRvd25sb2FkIGZpcm13YXJlIHN1Y2Nlc3MhXHJcbiIpOw0KICAgICB9IGVsc2UgaWYgKHN0cnN0cl9uKG5vdGlmeV9zdHIsICJlbmRbMF0iKSkgew0KICAgICAgICAgZm90YV9jYigxLCAxMDApOw0KICAgICAgICAgZm90YV9kb3dsb2FkX2ZsYWcgPSA1Ow0KIC8vICAgICAgICBzZW1fcG9zdCgmc2VtKTsNCi0gICAgICAgIHByaW50ZigiZG93bmxvYWQgZmlybXdhcmUgZmFpbCFcclxuIik7DQorICAgICAgICBMT0dFKCJkb3dubG9hZCBmaXJtd2FyZSBmYWlsIVxyXG4iKTsNCiAgICAgfQ0KICAgICByZXQgPSBzdHJzdHJfbihub3RpZnlfc3RyLCAicHJvZ3Jlc3MiKTsNCiAgICAgaWYgKHJldCkgew0KQEAgLTEyNiw3ICsxMjgsNyBAQAogICAgIFVOVVNFRFBBUkFNKGN0eCk7DQogICAgIFVOVVNFRFBBUkFNKG9iaik7DQogICAgIFVOVVNFRFBBUkFNKGlkKTsNCi0gICAgZm90YV9sb2coIiVzLCVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgTE9HRSgiJXMsJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KIH0NCiANCiANCkBAIC0xNDMsMTEgKzE0NSwyMyBAQAogaW50IG1idGtfZm90YV9md193cml0ZShjaGFyKiBmbmFtZSwgaW50IHNlZ21lbnRfc2l6ZSkNCiB7DQogICAgIGZvdGFfZG93bG9hZF9mbGFnID0gIDM7DQotICAgIHByaW50ZigibWJ0a19mb3RhX2Z3X3dyaXRlIHN0YXJ0MlxuIik7DQotICAgIGludCBMID0gMTsNCisgICAgTE9HRSgibWJ0a19mb3RhX2Z3X3dyaXRlIHN0YXJ0M1xuIik7DQogICAgIGludCByZXQgPSAtMTsNCiAgICAgc3RhdGljIHN0cnVjdCB1YnVzX3JlcXVlc3QgcmVxOw0KICAgICBpbnQgX3NlZ21lbnRfc2l6ZTsNCisgICAgY2hhciBjbWRbMTI4XT17MH07DQorDQorICAgIGlmKCFhY2Nlc3MoIi9zeXMvcG93ZXIvd2FrZV9sb2NrIiwgV19PSykpDQorICAgIHsNCisgICAgICAgIHNwcmludGYoY21kLCAiZWNobyAlcyA+IC9zeXMvcG93ZXIvd2FrZV9sb2NrIiwgIm90YV9sb2NrIik7DQorICAgICAgICBzeXN0ZW0oY21kKTsNCisgICAgICAgIExPR0UoIi9zeXMvcG93ZXIvd2FrZV9sb2NrIHN1Y2Nlc3NcbiIpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgTE9HRSgiL3N5cy9wb3dlci93YWtlX2xvY2sgY2FuIG5vdCB3cml0ZS5cbiIpOw0KKyAgICB9DQorDQogICAgIGJsb2JfYnVmX2luaXQoJmIsIDApOw0KICAgICBibG9ibXNnX2FkZF9zdHJpbmcoJmIsICJ1cmwiLCBmbmFtZSk7DQogICAgIGJsb2Jtc2dfYWRkX3UzMigmYiwgInR5cGUiLCAyKTsNCkBAIC0xNTksMTUgKzE3MywxMCBAQAogICAgIGJsb2Jtc2dfYWRkX3UzMigmYiwgInN5bmMiLCAxKTsNCiAgICAgdWJ1c19pbnZva2VfYXN5bmMoZm90YV91YnVzX2N0eCwgZm90YV9yZXF1ZXN0X2lkLCAiZG93bmxvYWQiLCBiLmhlYWQsICZyZXEpOw0KICAgICB1YnVzX2NvbXBsZXRlX3JlcXVlc3RfYXN5bmMoZm90YV91YnVzX2N0eCwgJnJlcSk7DQotI2lmIDENCisNCiAgICAgd2hpbGUoMSkNCiAgICAgew0KLSAgICAgICAgaWYoTCA9PSAxKQ0KLSAgICAgICAgew0KLSAgICAgICAgIC8vICAgcHJpbnRmKCIlcywgTDolZCIsIF9fRlVOQ1RJT05fXyxMKTsNCi0gICAgICAgICAgICBMKys7DQotICAgICAgICB9DQotICAgICAgICAvKiBWMqi0ocGhwiAqLw0KKyAgICAgICAgLyogVjLvv73vv73vv73vv73vv73vv70gKi8NCiAvLyAgICAgICAgc2VtX3dhaXQoJnNlbSk7DQogLy8gICAgICAgIGJyZWFrOw0KIA0KQEAgLTE3NiwxMSArMTg1LDIxIEBACiAgICAgICAgLy8gICAgIHByaW50ZigiYnJlYWsgd2hpbGUoKSwgZm90YV9kb3dsb2FkX2ZsYWc6JWQiLCBmb3RhX2Rvd2xvYWRfZmxhZyk7DQogICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICB9DQotCXNsZWVwKDEpOw0KKyAgICAgICAgc2xlZXAoMSk7DQogICAgIH0NCi0jZW5kaWYNCi0vLyAgICBwcmludGYoIiVzLCBMOiVkLCBmb3RhX2Rvd2xvYWRfZmxhZyA9IDolZCIsIF9fRlVOQ1RJT05fXyxMLCBmb3RhX2Rvd2xvYWRfZmxhZyk7DQotLy8gICAgcHJpbnRmKCJtYnRrX2ZvdGFfZndfd3JpdGUgZW5kIFxuIik7DQorDQorICAgIGlmKCFhY2Nlc3MoIi9zeXMvcG93ZXIvd2FrZV91bmxvY2siLCBXX09LKSkNCisgICAgew0KKyAgICAgICAgY2hhciBjbWRbMTI4XT17MH07DQorICAgICAgICBzcHJpbnRmKGNtZCwgImVjaG8gJXMgPiAvc3lzL3Bvd2VyL3dha2VfdW5sb2NrIiwgIm90YV9sb2NrIik7DQorICAgICAgICBzeXN0ZW0oY21kKTsNCisgICAgICAgIExPR0UoIi9zeXMvcG93ZXIvd2FrZV91bmxvY2sgc3VjY2Vzc1xuIik7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBMT0dFKCIvc3lzL3Bvd2VyL3dha2VfdW5sb2NrIGNhbiBub3Qgd3JpdGUuXG4iKTsNCisgICAgfQ0KKyAgICBMT0dFKCIlcywgZm90YV9kb3dsb2FkX2ZsYWcgPSA6JWQiLCBfX0ZVTkNUSU9OX18sIGZvdGFfZG93bG9hZF9mbGFnKTsNCiAgICAgaWYoZm90YV9kb3dsb2FkX2ZsYWcgPT0gNCkNCiAgICAgew0KICAgICAgICAgcmV0ID0gMDsNCkBAIC0yMDcsMTEgKzIyNiwyNCBAQAogaW50IG1idGtfZm90YV9md193cml0ZV9ieV91cmwoY2hhciogdXJsLCBpbnQgc2VnbWVudF9zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubl90aW1lb3V0LCBpbnQgZG93bmxvYWRfdGltZW91dCkNCiB7DQotICAgIHByaW50ZigibWJ0a19mb3RhX2Z3X3dyaXRlX2J5X3VybCBzdGFydDJcbiIpOw0KLSAgICBpbnQgcmV0ID0gLTEsIEwgPSAxOw0KKyAgICBMT0dFKCJtYnRrX2ZvdGFfZndfd3JpdGVfYnlfdXJsIHN0YXJ0MlxuIik7DQorICAgIGludCByZXQgPSAtMTsNCiAgICAgZm90YV9kb3dsb2FkX2ZsYWcgPSAgMzsNCiAgICAgc3RhdGljIHN0cnVjdCB1YnVzX3JlcXVlc3QgcmVxOw0KICAgICBpbnQgX3NlZ21lbnRfc2l6ZTsNCisgICAgY2hhciBjbWRbMTI4XT17MH07DQorDQorICAgIGlmKCFhY2Nlc3MoIi9zeXMvcG93ZXIvd2FrZV9sb2NrIiwgV19PSykpDQorICAgIHsNCisgICAgICAgIHNwcmludGYoY21kLCAiZWNobyAlcyA+IC9zeXMvcG93ZXIvd2FrZV9sb2NrIiwgIm90YV9sb2NrIik7DQorICAgICAgICBzeXN0ZW0oY21kKTsNCisgICAgICAgIExPR0UoIi9zeXMvcG93ZXIvd2FrZV9sb2NrIHN1Y2Nlc3NcbiIpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgTE9HRSgiL3N5cy9wb3dlci93YWtlX2xvY2sgY2FuIG5vdCB3cml0ZS5cbiIpOw0KKyAgICB9DQorICAgIA0KICAgICBibG9iX2J1Zl9pbml0KCZiLCAwKTsNCiAgICAgYmxvYm1zZ19hZGRfc3RyaW5nKCZiLCAidXJsIiwgdXJsKTsNCiAgICAgYmxvYm1zZ19hZGRfc3RyaW5nKCZiLCAidXNlcm5hbWUiLCAidXNlciBuYW1lIik7DQpAQCAtMjI3LDEyICsyNTksNyBAQAogDQogICAgIHdoaWxlKDEpDQogICAgIHsNCi0gICAgICAgIGlmKEwgPT0gMSkNCi0gICAgICAgIHsNCi0gICAgICAvLyAgICAgIHByaW50ZigiJXMsIEw6JWQiLCBfX0ZVTkNUSU9OX18sTCk7DQotICAgICAgICAgICAgTCsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgLyogVjKotKHBocIgKi8NCisgICAgICAgIC8qIFYy77+977+977+977+977+977+9ICovDQogLy8gICAgICAgIHNlbV93YWl0KCZzZW0pOw0KIC8vICAgICAgICBicmVhazsNCiANCkBAIC0yNDEsMTEgKzI2OCwyMiBAQAogICAgICAgIC8vICAgICBwcmludGYoImJyZWFrIHdoaWxlKCksIGZvdGFfZG93bG9hZF9mbGFnOiVkIiwgZm90YV9kb3dsb2FkX2ZsYWcpOw0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgfQ0KLQlzbGVlcCgxKTsNCisgICAgICAgIHNsZWVwKDEpOw0KICAgICB9DQogDQotIC8vICAgcHJpbnRmKCIlcywgTDolZCwgZm90YV9kb3dsb2FkX2ZsYWcgPSA6JWQiLCBfX0ZVTkNUSU9OX18sTCwgZm90YV9kb3dsb2FkX2ZsYWcpOw0KLSAvLyAgIHByaW50ZigibWJ0a19mb3RhX2Z3X3dyaXRlX2J5X3VybCBlbmQgXG4iKTsNCisgICAgaWYoIWFjY2VzcygiL3N5cy9wb3dlci93YWtlX3VubG9jayIsIFdfT0spKQ0KKyAgICB7DQorICAgICAgICBjaGFyIGNtZFsxMjhdPXswfTsNCisgICAgICAgIHNwcmludGYoY21kLCAiZWNobyAlcyA+IC9zeXMvcG93ZXIvd2FrZV91bmxvY2siLCAib3RhX2xvY2siKTsNCisgICAgICAgIHN5c3RlbShjbWQpOw0KKyAgICAgICAgTE9HRSgiL3N5cy9wb3dlci93YWtlX3VubG9jayBzdWNjZXNzXG4iKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIExPR0UoIi9zeXMvcG93ZXIvd2FrZV91bmxvY2sgY2FuIG5vdCB3cml0ZS5cbiIpOw0KKyAgICB9DQorDQorICAgIExPR0UoIiVzLCBmb3RhX2Rvd2xvYWRfZmxhZyA9IDolZCIsIF9fRlVOQ1RJT05fXywgZm90YV9kb3dsb2FkX2ZsYWcpOw0KICAgICBpZihmb3RhX2Rvd2xvYWRfZmxhZyA9PSA0KQ0KICAgICB7DQogICAgICAgICByZXQgPSAwOw0KQEAgLTI2NSwxNyArMzAzLDE3IEBACiAgICAgaW50IHJldDsNCiANCiAgICAgcmV0ID0gcHRocmVhZF9jYW5jZWwoZm90YV9zdGF0dXNfcHRocmVhZCk7DQotICAgIGZvdGFfbG9nKCJraWxsIHB0aHJlYWQgOiAlZCBcbiIsIHJldCk7DQorICAgIExPR0UoImtpbGwgcHRocmVhZCA6ICVkIFxuIiwgcmV0KTsNCiAgICAgcHRocmVhZF9qb2luKGZvdGFfc3RhdHVzX3B0aHJlYWQsIE5VTEwpOw0KICAgICBkbyB7DQogICAgICAgICByZXQgPSBwdGhyZWFkX2tpbGwoZm90YV9zdGF0dXNfcHRocmVhZCwgMCk7DQotICAgICAgICBmb3RhX2xvZygia2lsbCBwdGhyZWFkOiAlZCBcbiIsIHJldCk7DQorICAgICAgICBMT0dFKCJraWxsIHB0aHJlYWQ6ICVkIFxuIiwgcmV0KTsNCiAgICAgICAgIGlmIChyZXQgPT0gRVNSQ0gpIHsNCi0gICAgICAgICAgICBmb3RhX2xvZygiVGhlIHNwZWNpZmllZCB0aHJlYWQgZG9lcyBub3QgZXhpc3Qgb3IgaGFzIHRlcm1pbmF0ZWRcbiIpOw0KKyAgICAgICAgICAgIExPR0UoIlRoZSBzcGVjaWZpZWQgdGhyZWFkIGRvZXMgbm90IGV4aXN0IG9yIGhhcyB0ZXJtaW5hdGVkXG4iKTsNCiAgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IEVJTlZBTCkgew0KLSAgICAgICAgICAgIGZvdGFfbG9nKCJVc2VsZXNzIHNpZ25hbFxuIik7DQorICAgICAgICAgICAgTE9HRSgiVXNlbGVzcyBzaWduYWxcbiIpOw0KICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmb3RhX2xvZygiVGhlIHRocmVhZCBleGlzdHNcbiIpOw0KKyAgICAgICAgICAgIExPR0UoIlRoZSB0aHJlYWQgZXhpc3RzXG4iKTsNCiAgICAgICAgIH0NCiAgICAgICAgIHVzbGVlcCgxMDAwMDApOw0KICAgICB9IHdoaWxlICgwID09IHJldCk7DQpAQCAtMzEzLDcgKzM1MSw3IEBACiAgICAgLy9yZWdpc3RlciBmb3IgcmlsIGluZGljYXRpb24NCiAgICAgcmV0ID0gdWJ1c19yZWdpc3Rlcl9zdWJzY3JpYmVyKGZvdGFfdWJ1c19jdHgsICZub3RpZmljYXRpb25fZXZlbnQpOw0KICAgICBpZiAocmV0KSB7DQotICAgICAgICBmb3RhX2xvZygiJXMsJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KKyAgICAgICAgTE9HRSgiJXMsJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KICAgICAgICAgcHRocmVhZF9leGl0KE5VTEwpOw0KICAgICB9DQogICAgIG5vdGlmaWNhdGlvbl9ldmVudC5jYiA9IG90YWRfbm90aWZ5Ow0KQEAgLTMzNyw3ICszNzUsNyBAQAogICAgIHVsb29wX2luaXQoKTsNCiAgICAgZm90YV91YnVzX2N0eCA9IHVidXNfY29ubmVjdChOVUxMKTsNCiAgICAgaWYgKCFmb3RhX3VidXNfY3R4KSB7DQotICAgICAgICBmb3RhX2xvZygiJXMsJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KKyAgICAgICAgTE9HRSgiJXMsJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KICAgICAgICAgdWxvb3BfZG9uZSgpOw0KICAgICAgICAgcmV0dXJuIDA7DQogICAgIH0NCkBAIC0zNDgsMTQgKzM4NiwxNCBAQAogICAgICAgICAvL3JlZ2lzdGVyIGZvciByaWwgcmVxdWVzdA0KICAgICAgICAgcmV0cmllcyA9IDA7DQogICAgICAgICBpZiAodWJ1c19sb29rdXBfaWQoZm90YV91YnVzX2N0eCwgIm90YSIsICZmb3RhX3JlcXVlc3RfaWQpKSB7DQotICAgICAgICAgICAgZm90YV9sb2coIiVzLCVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgICAgICAgICBMT0dFKCIlcywlZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgc2xlZXAoMSk7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgfQ0KICAgICB9IHdoaWxlIChyZXRyaWVzKysgPCAyMCk7DQogICAgIGlmIChyZXRyaWVzID49IDIwKSB7DQotICAgICAgICBwcmludGYoIiVzLCVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgICAgIExPR0UoIiVzLCVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCiAgICAgICAgIGdvdG8gZmFpbDE7DQogICAgIH0NCiAgICAgcHRocmVhZF9jcmVhdGUoJmZvdGFfc3RhdHVzX3B0aHJlYWQsIE5VTEwsICh2b2lkKiltYnRrX2ZvdGFfdGhyZWFkLCBOVUxMKTsNCkBAIC0zODMsMyArNDIxLDcgQEAKIH0NCiANCiANCisNCisNCisNCisNCg==