SW5kZXg6IGV0Yy9jb2RlY3MuY29uZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v dC9tcGxheWVyL21haW4vZXRjL2NvZGVjcy5jb25mLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjI2NwpkaWZmIC11IC1iIC1CIC11IC1yMS4yNjcgY29kZWNzLmNvbmYKLS0tIGV0Yy9jb2Rl Y3MuY29uZgk3IEZlYiAyMDAzIDIwOjExOjA3IC0wMDAwCTEuMjY3CisrKyBldGMvY29kZWNz LmNvbmYJMSBNYXIgMjAwMyAwNDo1ODo1MiAtMDAwMApAQCAtNjgsNiArNjgsMTUgQEAKICAg ZHJpdmVyIG10Z2EKICAgb3V0IEJHUjMyLEJHUjI0CiAKK3ZpZGVvY29kZWMgc2dpCisgIGlu Zm8gIlNHSSBpbWFnZXMgZGVjb2RlciIKKyAgc3RhdHVzIHdvcmtpbmcKKyAgY29tbWVudCAi U0dJMSBpcyBhbiBpbnRlcm5hbCBNUGxheWVyIEZPVVJDQyIKKyAgZm91cmNjIFNHSTEKKyAg ZHJpdmVyIHNnaQorICBvdXQgQkdSMjQKKworCiB2aWRlb2NvZGVjIGZsaQogICBpbmZvICJB dXRvZGVzayBGTEkvRkxDIEFuaW1hdGlvbiIKICAgc3RhdHVzIHdvcmtpbmcKSW5kZXg6IGxp Ym1wY29kZWNzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L21w bGF5ZXIvbWFpbi9saWJtcGNvZGVjcy9NYWtlZmlsZSx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS45MApkaWZmIC11IC1iIC1CIC11IC1yMS45MCBNYWtlZmlsZQotLS0gbGlibXBjb2RlY3Mv TWFrZWZpbGUJMjAgRmViIDIwMDMgMDQ6NTc6MzcgLTAwMDAJMS45MAorKysgbGlibXBjb2Rl Y3MvTWFrZWZpbGUJMSBNYXIgMjAwMyAwNDo1ODo1MiAtMDAwMApAQCAtMTAsNyArMTAsNyBA QAogQVVESU9fU1JDUz1kZWNfYXVkaW8uYyBhZC5jICQoQVVESU9fU1JDU19MSUIpICQoQVVE SU9fU1JDU19OQVQpICQoQVVESU9fU1JDU19PUFQpCiAKIFZJREVPX1NSQ1NfTElCPXZkX2xp Ym1wZWcyLmMgdmRfbnV2LmMgdmRfbHpvLmMKLVZJREVPX1NSQ1NfTkFUPXZkX251bGwuYyB2 ZF9jaW5lcGFrLmMgdmRfcXRycHphLmMgdmRfcmF3LmMgdmRfbXN2aWRjLmMgdmRfZmxpLmMg dmRfcXRybGUuYyB2ZF9xdHNtYy5jIHZkX3JvcXZpZGVvLmMgdmRfY3l1di5jIHZkX21zcmxl LmMgdmRfaHVmZnl1di5jIHZkX21wZWdwZXMuYyB2ZF9zdnExLmMgdmRfbGNsLmMgdmRfbXRn YS5jCitWSURFT19TUkNTX05BVD12ZF9udWxsLmMgdmRfY2luZXBhay5jIHZkX3F0cnB6YS5j IHZkX3Jhdy5jIHZkX21zdmlkYy5jIHZkX2ZsaS5jIHZkX3F0cmxlLmMgdmRfcXRzbWMuYyB2 ZF9yb3F2aWRlby5jIHZkX2N5dXYuYyB2ZF9tc3JsZS5jIHZkX2h1ZmZ5dXYuYyB2ZF9tcGVn cGVzLmMgdmRfc3ZxMS5jIHZkX2xjbC5jIHZkX210Z2EuYyB2ZF9zZ2kuYwogVklERU9fU1JD U19PUFQ9dmRfcmVhbHZpZC5jIHZkX2ZmbXBlZy5jIHZkX2RzaG93LmMgdmRfZG1vLmMgdmRf dmZ3LmMgdmRfdmZ3ZXguYyB2ZF9vZGl2eC5jIHZkX2Rpdng0LmMgdmRfeGFuaW0uYyB2ZF94 dmlkLmMgdmRfbGliZHYuYyB2ZF9xdHZpZGVvLmMKIFZJREVPX1NSQ1M9ZGVjX3ZpZGVvLmMg dmQuYyAkKFZJREVPX1NSQ1NfTkFUKSAkKFZJREVPX1NSQ1NfTElCKSAkKFZJREVPX1NSQ1Nf T1BUKQogCkluZGV4OiBsaWJtcGNvZGVjcy92ZC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnNyb290L21wbGF5ZXIvbWFpbi9saWJtcGNvZGVjcy92ZC5jLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjY2CmRpZmYgLXUgLWIgLUIgLXUgLXIxLjY2IHZkLmMKLS0tIGxpYm1wY29k ZWNzL3ZkLmMJMjUgRmViIDIwMDMgMTU6MzY6MzAgLTAwMDAJMS42NgorKysgbGlibXBjb2Rl Y3MvdmQuYwkxIE1hciAyMDAzIDA0OjU4OjUzIC0wMDAwCkBAIC00OCw2ICs0OCw3IEBACiBl eHRlcm4gdmRfZnVuY3Rpb25zX3QgbXBjb2RlY3NfdmRfbXBuZzsKIGV4dGVybiB2ZF9mdW5j dGlvbnNfdCBtcGNvZGVjc192ZF9panBnOwogZXh0ZXJuIHZkX2Z1bmN0aW9uc190IG1wY29k ZWNzX3ZkX210Z2E7CitleHRlcm4gdmRfZnVuY3Rpb25zX3QgbXBjb2RlY3NfdmRfc2dpOwog ZXh0ZXJuIHZkX2Z1bmN0aW9uc190IG1wY29kZWNzX3ZkX2xpYm1wZWcyOwogZXh0ZXJuIHZk X2Z1bmN0aW9uc190IG1wY29kZWNzX3ZkX2h1ZmZ5dXY7CiBleHRlcm4gdmRfZnVuY3Rpb25z X3QgbXBjb2RlY3NfdmRfbXBlZ3BlczsKQEAgLTEwMCw2ICsxMDEsNyBAQAogCSZtcGNvZGVj c192ZF9panBnLAogI2VuZGlmCiAJJm1wY29kZWNzX3ZkX210Z2EsCisJJm1wY29kZWNzX3Zk X3NnaSwKICNpZmRlZiBVU0VfTElCTVBFRzIKICAgICAgICAgJm1wY29kZWNzX3ZkX2xpYm1w ZWcyLAogI2VuZGlmCkluZGV4OiBsaWJtcGRlbXV4L2RlbXV4X21mLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbXBsYXllci9tYWluL2xpYm1wZGVtdXgvZGVtdXhfbWYu Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1iIC1CIC11IC1yMS4xMCBk ZW11eF9tZi5jCi0tLSBsaWJtcGRlbXV4L2RlbXV4X21mLmMJMjggSmFuIDIwMDMgMjI6MDA6 NTcgLTAwMDAJMS4xMAorKysgbGlibXBkZW11eC9kZW11eF9tZi5jCTEgTWFyIDIwMDMgMDQ6 NTg6NTQgLTAwMDAKQEAgLTk4LDcgKzk4LDkgQEAKICAgICAgaWYgKCAhc3RyY2FzZWNtcCgg bWZfdHlwZSwicG5nIiApKSBzaF92aWRlby0+Zm9ybWF0ID0gbW1pb0ZPVVJDQygnTScsICdQ JywgJ04nLCAnRycgKTsKICAgZWxzZQogICAgICBpZiAoICFzdHJjYXNlY21wKCBtZl90eXBl LCJ0Z2EiICkpIHNoX3ZpZGVvLT5mb3JtYXQgPSBtbWlvRk9VUkNDKCdNJywgJ1QnLCAnRycs ICdBJyApOwotICBlbHNlIHsgbXBfbXNnKE1TR1RfREVNVVgsIE1TR0xfSU5GTywgIltkZW11 eF9tZl0gdW5rbm93IGlucHV0IGZpbGUgdHlwZS5cbiIgKTsgZnJlZSggbWYgKTsgcmV0dXJu IE5VTEw7IH0KKyAgIGVsc2UKKyAgICAgaWYgKCFzdHJjYXNlY21wKCBtZl90eXBlLCJzZ2ki ICkpIHNoX3ZpZGVvLT5mb3JtYXQgPSBtbWlvRk9VUkNDKCdTJywgJ0cnLCAnSScsICcxJyk7 CisgIGVsc2UgeyBtcF9tc2coTVNHVF9ERU1VWCwgTVNHTF9JTkZPLCAiW2RlbXV4X21mXSB1 bmtub3duIGlucHV0IGZpbGUgdHlwZS5cbiIgKTsgZnJlZSggbWYgKTsgcmV0dXJuIE5VTEw7 IH0KIAogICBzaF92aWRlby0+ZGlzcF93ID0gbWZfdzsKICAgc2hfdmlkZW8tPmRpc3BfaCA9 IG1mX2g7Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAw MDAKKysrIGxpYm1wY29kZWNzL3ZkX3NnaS5jCTIwMDMtMDItMjcgMjE6MzI6MDcuMDAwMDAw MDAwICswMDAwCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogYXV0aG9yOiBUb2RkIEtpcmJ5 IDxzbGFwY2F0QHBhY2JlbGwubmV0PgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibXBf bXNnLmgiCisjaW5jbHVkZSAiYnN3YXAuaCIKKyNpbmNsdWRlICJ2ZF9pbnRlcm5hbC5oIgor CisjZGVmaW5lIFNHSV9IRUFERVJfTEVOIDUxMgorI2RlZmluZSBTR0lfTUFHSUMgNDc0CisK KyNkZWZpbmUgU0dJX0dSQVlTQ0FMRV9JTUFHRSAxCisjZGVmaW5lIFNHSV9SR0JfSU1BR0Ug MworI2RlZmluZSBTR0lfUkdCQV9JTUFHRSA0CisKKyNkZWZpbmUgT1VUX1BJWEVMX1NUUklE RSAzIC8qIFJHQiAqLworCisKK3N0YXRpYyB2ZF9pbmZvX3QgaW5mbyA9Cit7CisgICJTR0kg SW1hZ2UgZGVjb2RlciIsCisgICJzZ2kiLAorICAiVG9kZCBLaXJieSIsCisgICJUb2RkIEtp cmJ5IiwKKyAgIiIKK307CisKK0xJQlZEX0VYVEVSTihzZ2kpCisKK3R5cGVkZWYgc3RydWN0 IHsKKyAgc2hvcnQgbWFnaWM7CisgIGNoYXIgcmxlOworICBjaGFyIGJ5dGVzX3Blcl9jaGFu bmVsOworICB1bnNpZ25lZCBzaG9ydCBkaW1lbnNpb247CisgIHVuc2lnbmVkIHNob3J0IHhz aXplOworICB1bnNpZ25lZCBzaG9ydCB5c2l6ZTsKKyAgdW5zaWduZWQgc2hvcnQgenNpemU7 Cit9IFNHSUluZm87CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3V0Zm10ID0gSU1HRk1UX0JH UjI0OworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbGFzdF94ID0gLTE7CitzdGF0aWMgdW5z aWduZWQgc2hvcnQgbGFzdF95ID0gLTE7CisKKworLyogdG8gc2V0L2dldC9xdWVyeSBzcGVj aWFsIGZlYXR1cmVzL3BhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbnQKK2NvbnRyb2woc2hfdmlk ZW9fdCogc2gsIGludCBjbWQsIHZvaWQgKmFyZywgLi4uKQoreyAKKyAgc3dpdGNoIChjbWQp CisgIHsKKyAgICBjYXNlIFZEQ1RSTF9RVUVSWV9GT1JNQVQ6CisgICAgICBpZiAoKigodW5z aWduZWQgaW50ICopIGFyZykgPT0gb3V0Zm10KSB7CisgICAgICAgIHJldHVybiBDT05UUk9M X1RSVUU7CisgICAgICB9CisgICAgICByZXR1cm4gQ09OVFJPTF9GQUxTRTsKKyAgfQorICBy ZXR1cm4gQ09OVFJPTF9VTktOT1dOOworfQorCisKKy8qIGluaXQgZHJpdmVyICovCitzdGF0 aWMgaW50Citpbml0KHNoX3ZpZGVvX3QgKnNoKQoreworICBzaC0+Y29udGV4dCA9IChTR0lJ bmZvICopIGNhbGxvYygxLCBzaXplb2YoU0dJSW5mbykpOworICBsYXN0X3ggPSAtMTsKKwor ICByZXR1cm4gMTsKK30KKworCisvKiB1bmluaXQgZHJpdmVyICovCitzdGF0aWMgdm9pZAor dW5pbml0KHNoX3ZpZGVvX3QgKnNoKQoreworICBTR0lJbmZvCSppbmZvID0gc2gtPmNvbnRl eHQ7CisgIGZyZWUoaW5mbyk7Cit9CisKKworLyogZXhwYW5kIGFuIHJsZSByb3cgaW50byBh IGNoYW5uZWwgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRyb3codW5zaWduZWQgY2hhciAqb3B0 ciwgdW5zaWduZWQgY2hhciAqaXB0ciwgaW50IGNoYW5fb2Zmc2V0KQoreworICB1bnNpZ25l ZCBjaGFyIHBpeGVsLCBjb3VudDsKKyAgb3B0ciArPSBjaGFuX29mZnNldDsKKyAgCisgIHdo aWxlICgxKSB7CisgICAgcGl4ZWwgPSAqaXB0cisrOworICAgIAorICAgIGlmICghKGNvdW50 ID0gKHBpeGVsICYgMHg3ZikpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKHBp eGVsICYgMHg4MCkgeworICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgKm9wdHIg PSAqaXB0cjsKKyAgICAgICAgb3B0ciArPSBPVVRfUElYRUxfU1RSSURFOworICAgICAgICBp cHRyKys7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHBpeGVsID0gKmlwdHIrKzsK KyAgICAgIAorICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgKm9wdHIgPSBwaXhl bDsKKyAgICAgICAgb3B0ciArPSBPVVRfUElYRUxfU1RSSURFOworICAgICAgfQorICAgIH0K KyAgfQorfQorCisKKy8qIGV4cGFuZCBhbiBybGUgcm93IGludG8gYWxsIDMgY2hhbm5lbHMu CisgICBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBncmF5c2NhbGUgc28gd2UgZG9uJ3Qgc2xv dyBkb3duIHRoZSAKKyAgIG1vcmUgY29tbW9uIGNhc2UgcmdiIGZ1bmN0aW9uIHdpdGggYSBi dW5jaCBvZiBpZnMuICovCitzdGF0aWMgdm9pZAorZXhwYW5kcm93X2dzKHVuc2lnbmVkIGNo YXIgKm9wdHIsIHVuc2lnbmVkIGNoYXIgKmlwdHIpCit7CisgIHVuc2lnbmVkIGNoYXIgcGl4 ZWwsIGNvdW50OworICAKKyAgd2hpbGUgKDEpIHsKKyAgICBwaXhlbCA9ICppcHRyKys7Cisg ICAgCisgICAgaWYgKCEoY291bnQgPSAocGl4ZWwgJiAweDdmKSkpIHsKKyAgICAgIHJldHVy bjsKKyAgICB9CisgICAgaWYocGl4ZWwgJiAweDgwKSB7CisgICAgICB3aGlsZSAoY291bnQt LSkgeworICAgICAgICBvcHRyWzBdID0gKmlwdHI7CisgICAgICAgIG9wdHJbMV0gPSAqaXB0 cjsKKyAgICAgICAgb3B0clsyXSA9ICppcHRyOworICAgICAgICBvcHRyICs9IE9VVF9QSVhF TF9TVFJJREU7CisgICAgICAgIGlwdHIrKzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAg ICAgcGl4ZWwgPSAqaXB0cisrOworICAgICAgCisgICAgICB3aGlsZSAoY291bnQtLSkgewor ICAgICAgICBvcHRyWzBdID0gcGl4ZWw7CisgICAgICAgIG9wdHJbMV0gPSBwaXhlbDsKKyAg ICAgICAgb3B0clsyXSA9IHBpeGVsOworICAgICAgICBvcHRyICs9IE9VVF9QSVhFTF9TVFJJ REU7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworLyogZGVjb2RlIGEgcnVuIGxlbmd0 aCBlbmNvZGVkIHNnaSBpbWFnZSAqLworc3RhdGljIHZvaWQKK2RlY29kZV9ybGVfc2dpKFNH SUluZm8gKmluZm8sIHVuc2lnbmVkIGNoYXIgKmRhdGEsIG1wX2ltYWdlX3QgKm1waSkKK3sK KyAgdW5zaWduZWQgY2hhciAqcmxlX2RhdGEsICpkZXN0X3JvdzsKKyAgdW5zaWduZWQgbG9u ZyAqc3RhcnR0YWI7CisgIGludCB5LCB6LCB4c2l6ZSwgeXNpemUsIHpzaXplLCBjaGFuX29m ZnNldDsKKyAgbG9uZyBzdGFydF9vZmZzZXQ7CisgIAorICB4c2l6ZSA9IGluZm8tPnhzaXpl OworICB5c2l6ZSA9IGluZm8tPnlzaXplOworICB6c2l6ZSA9IGluZm8tPnpzaXplOworCisg IC8qIHJsZSBvZmZzZXQgdGFibGUgaXMgcmlnaHQgYWZ0ZXIgdGhlIGhlYWRlciAqLworICBz dGFydHRhYiA9IChsb25nKikoZGF0YSArIFNHSV9IRUFERVJfTEVOKTsgCisgIAorICAgZm9y ICh6ID0gMDsgeiA8IHpzaXplOyB6KyspIHsKKworICAgICAvKiBzZXQgY2hhbl9vZmZzZXQg c28gUkdCIGVuZHMgdXAgQkdSICovCisgICAgIGNoYW5fb2Zmc2V0ID0gKHpzaXplIC0gMSkg LSB6OworICAgICAKKyAgICAgLyogVGhlIG9yaWdpbiBmb3IgU0dJIGltYWdlcyBpcyB0aGUg bG93ZXItbGVmdCBjb3JuZXIKKyAgICAgICAgc28gcmVhZCBzY2FuIGxpbmVzIGZyb20gYm90 dG9tIHRvIHRvcCAqLworICAgICBmb3IgKHkgPSB5c2l6ZSAtIDE7IHkgPj0gMDsgeS0tKSB7 CisgICAgICAgZGVzdF9yb3cgPSBtcGktPnBsYW5lc1swXSArIG1waS0+c3RyaWRlWzBdICog KHlzaXplIC0gMSAtIHkpOworICAgIAorICAgICAgLyogc2V0IHN0YXJ0IG9mIG5leHQgcnVu IChvZmZzZXRzIGFyZSBmcm9tIHN0YXJ0IG9mIGhlYWRlcikgKi8KKyAgICAgIHN0YXJ0X29m ZnNldCA9IGJlMm1lXzMyKCoodW5zaWduZWQgbG9uZyopICZzdGFydHRhYlt5ICsgeiAqIHlz aXplXSk7CisgICAgICAKKyAgICAgIHJsZV9kYXRhID0gJmRhdGFbc3RhcnRfb2Zmc2V0XTsK KyAgICAKKyAgICAgIGlmKGluZm8tPnpzaXplID09IFNHSV9HUkFZU0NBTEVfSU1BR0UpIHsK KyAgICAgICAgZXhwYW5kcm93X2dzKGRlc3Rfcm93LCBybGVfZGF0YSk7CisgICAgICB9IGVs c2UgeworICAgICAgICBleHBhbmRyb3coZGVzdF9yb3csIHJsZV9kYXRhLCBjaGFuX29mZnNl dCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKyAgCisvKiBkZWNvZGUgYW4gc2dpIGlt YWdlICovCitzdGF0aWMgdm9pZAorZGVjb2RlX3VuY29tcHJlc3NlZF9zZ2koU0dJSW5mbyAq aW5mbywgdW5zaWduZWQgY2hhciAqZGF0YSwgbXBfaW1hZ2VfdCAqbXBpKQoreworICB1bnNp Z25lZCBjaGFyICpzcmNfcm93LCAqZGVzdF9yb3c7CisgIGludCB4LCB5LCB6LCB4c2l6ZSwg eXNpemUsIHpzaXplLCBjaGFuX29mZnNldDsKKyAgCisgIHhzaXplID0gaW5mby0+eHNpemU7 CisgIHlzaXplID0gaW5mby0+eXNpemU7CisgIHpzaXplID0gaW5mby0+enNpemU7CisgIAor ICAvKiBza2lwIGhlYWRlciAqLyAKKyAgZGF0YSArPSBTR0lfSEVBREVSX0xFTjsKKyAgCisg IGZvciAoeiA9IDA7IHogPCB6c2l6ZTsgeisrKSB7CisKKyAgICAvKiBzZXQgcm93IHB0ciB0 byBzdGFydCBvZiBjdXJyZW50IHBsYW5lICovCisgICAgc3JjX3JvdyA9IGRhdGEgKyAoeHNp emUgKiB5c2l6ZSAqIHopOworCisgICAgLyogc2V0IGNoYW5fb2Zmc2V0IGZvciBSR0IgLT4g QkdSICovCisgICAgY2hhbl9vZmZzZXQgPSAoenNpemUgLSAxKSAtIHo7CisgICAgCisgICAg LyogdGhlIG9yaWdpbiBmb3IgU0dJIGltYWdlcyBpcyB0aGUgbG93ZXItbGVmdCBjb3JuZXIg IAorICAgICAgIHNvIHJlYWQgc2NhbiBsaW5lcyBmcm9tIGJvdHRvbSB0byB0b3AuICovCisg ICAgZm9yICh5ID0geXNpemUgLSAxOyB5ID49IDA7IHktLSkgeworICAgICAgZGVzdF9yb3cg PSBtcGktPnBsYW5lc1swXSArIG1waS0+c3RyaWRlWzBdICogeTsKKyAgICAgIGZvciAoeCA9 IDA7IHggPCB4c2l6ZTsgeCsrKSB7CisgICAgICAgIAorICAgICAgICAvKiB3ZSBvbmx5IGRv IDI0IGJpdCBvdXRwdXQgc28gcHJvbW90ZSA4IGJpdCBwaXhlbHMgdG8gMjQgKi8KKyAgICAg ICAgaWYgKHpzaXplID09IFNHSV9HUkFZU0NBTEVfSU1BR0UpIHsKKyAgICAgICAgICAvKiB3 cml0ZSBncmV5c2NhbGUgdmFsdWUgaW50byBhbGwgY2hhbm5lbHMgKi8KKyAgICAgICAgICBk ZXN0X3Jvd1swXSA9IHNyY19yb3dbeF07CisgICAgICAgICAgZGVzdF9yb3dbMV0gPSBzcmNf cm93W3hdOworICAgICAgICAgIGRlc3Rfcm93WzJdID0gc3JjX3Jvd1t4XTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICBkZXN0X3Jvd1tjaGFuX29mZnNldF0gPSBzcmNfcm93W3hd OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkZXN0X3JvdyArPSBPVVRfUElYRUxf U1RSSURFOworICAgICAgfQorCisgICAgICAvKiBtb3ZlIHRvIG5leHQgcm93IG9mIHRoZSBj dXJyZW50IHNvdXJjZSBwbGFuZSAqLworICAgICAgc3JjX3JvdyArPSB4c2l6ZTsKKyAgICB9 CisgIH0KK30KKworCisvKiByZWFkIHNnaSBoZWFkZXIgZmllbGRzICovCitzdGF0aWMgdm9p ZAorcmVhZF9zZ2lfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgU0dJSW5mbyAqaW5mbykK K3sKKyAgLyogc2dpIGRhdGEgaXMgYWx3YXlzIHN0b3JlZCBpbiBiaWcgZW5kaWFuIGJ5dGUg b3JkZXIgKi8KKyAgaW5mby0+bWFnaWMgPSBiZTJtZV8xNigqKHVuc2lnbmVkIHNob3J0ICop ICZidWZbMF0pOyAgICAgCisgIGluZm8tPnJsZSA9IGJ1ZlsyXTsKKyAgaW5mby0+Ynl0ZXNf cGVyX2NoYW5uZWwgPSBidWZbM107CisgIGluZm8tPmRpbWVuc2lvbiA9IGJlMm1lXzE2KCoo dW5zaWduZWQgc2hvcnQgKikgJmJ1Zls0XSk7ICAgICAKKyAgaW5mby0+eHNpemUgPSBiZTJt ZV8xNigqKHVuc2lnbmVkIHNob3J0ICopICZidWZbNl0pOyAgICAgCisgIGluZm8tPnlzaXpl ID0gYmUybWVfMTYoKih1bnNpZ25lZCBzaG9ydCAqKSAmYnVmWzhdKTsgICAgIAorICBpbmZv LT56c2l6ZSA9IGJlMm1lXzE2KCoodW5zaWduZWQgc2hvcnQgKikgJmJ1ZlsxMF0pOyAgICAg Cit9CisKKworLyogZGVjb2RlIGEgZnJhbWUgKi8KK3N0YXRpYworbXBfaW1hZ2VfdCAqZGVj b2RlKHNoX3ZpZGVvX3QgKnNoLCB2b2lkICpyYXcsIGludCBsZW4sIGludCBmbGFncykKK3sK KyAgU0dJSW5mbyAqaW5mbyA9IHNoLT5jb250ZXh0OworICB1bnNpZ25lZCBjaGFyICpkYXRh ID0gcmF3OworICBtcF9pbWFnZV90ICptcGk7CisKKyAgaWYgKGxlbiA8PSAwKSB7CisgICAg cmV0dXJuIE5VTEw7IC8qIHNraXAgZnJhbWUgKi8KKyAgfQorICAgIAorICByZWFkX3NnaV9o ZWFkZXIoZGF0YSwgaW5mbyk7IAorICAKKyAgLyogbWFrZSBzdXJlIHRoaXMgaXMgYW4gU0dJ IGltYWdlIGZpbGUgKi8KKyAgaWYgKGluZm8tPm1hZ2ljICE9IFNHSV9NQUdJQykgeworICAg IG1wX21zZyhNU0dUX0RFQ1ZJREVPLCBNU0dMX0lORk8sICJCYWQgbWFnaWMgbnVtYmVyIGlu IGltYWdlLlxuIik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvKiBjaGVjayBpbWFn ZSBkZXB0aCAqLworICBpZiAoaW5mby0+Ynl0ZXNfcGVyX2NoYW5uZWwgIT0gMSkgeworICAg IG1wX21zZyhNU0dUX0RFQ1ZJREVPLCBNU0dMX0lORk8sIAorICAgICAgICAiVW5zdXBwb3J0 ZWQgYnl0ZXMgcGVyIGNoYW5uZWwgdmFsdWUgJWkuXG4iLCBpbmZvLT5ieXRlc19wZXJfY2hh bm5lbCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvKiBjaGVjayBpbWFnZSBkaW1l bnNpb24gKi8KKyAgaWYgKGluZm8tPmRpbWVuc2lvbiAhPSAyICYmIGluZm8tPmRpbWVuc2lv biAhPSAzKSB7CisgICAgbXBfbXNnKE1TR1RfREVDVklERU8sIE1TR0xfSU5GTywgIlVuc3Vw cG9ydGVkIGltYWdlIGRpbWVuc2lvbiAlaS5cbiIsIAorICAgICAgICBpbmZvLT5kaW1lbnNp b24pOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLyogY2hhbmdlIHJnYmEgaW1hZ2Vz IHRvIHJnYiBzbyBhbHBoYSBjaGFubmVsIHdpbGwgYmUgaWdub3JlZCAqLyAKKyAgaWYgKGlu Zm8tPnpzaXplID09IFNHSV9SR0JBX0lNQUdFKSB7CisgICAgaW5mby0+enNpemUgPSBTR0lf UkdCX0lNQUdFOworICB9CisKKyAgLyogY2hlY2sgaW1hZ2UgZGVwdGggKi8KKyAgaWYgKGlu Zm8tPnpzaXplICE9IFNHSV9SR0JfSU1BR0UgJiYgaW5mby0+enNpemUgIT0gU0dJX0dSQVlT Q0FMRV9JTUFHRSkgeworICAgIG1wX21zZyhNU0dUX0RFQ1ZJREVPLCBNU0dMX0lORk8sICJV bnN1cHBvcnRlZCBpbWFnZSBkZXB0aC5cbiIpOworICAgIHJldHVybiBOVUxMOworICB9Cisg IAorICAvKiAocmUpaW5pdCBsaWJ2byBpZiBpbWFnZSBzaXplIGlzIGNoYW5nZWQgKi8KKyAg aWYgKGxhc3RfeCAhPSBpbmZvLT54c2l6ZSB8fCBsYXN0X3kgIT0gaW5mby0+eXNpemUpCisg IHsKKyAgICBsYXN0X3ggPSBpbmZvLT54c2l6ZTsKKyAgICBsYXN0X3kgPSBpbmZvLT55c2l6 ZTsKKyAgICAKKyAgICBpZiAoIW1wY29kZWNzX2NvbmZpZ192byhzaCwgaW5mby0+eHNpemUs IGluZm8tPnlzaXplLCBvdXRmbXQpKSB7CisgICAgICBtcF9tc2coTVNHVF9ERUNWSURFTywg TVNHTF9JTkZPLCAiQ29uZmlnIHZvIGZhaWxlZDpcbiIpOworICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorICB9CisgICAKKyAgaWYgKCEobXBpID0gbXBjb2RlY3NfZ2V0X2ltYWdlKHNo LCBNUF9JTUdUWVBFX1RFTVAsIE1QX0lNR0ZMQUdfQUNDRVBUX1NUUklERSwgCisgICAgICAg ICAgaW5mby0+eHNpemUsIGluZm8tPnlzaXplKSkpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAg fQorIAorICBpZiAoaW5mby0+cmxlKSB7CisgICAgZGVjb2RlX3JsZV9zZ2koaW5mbywgZGF0 YSwgbXBpKTsKKyAgfSBlbHNlIHsKKyAgICBkZWNvZGVfdW5jb21wcmVzc2VkX3NnaShpbmZv LCBkYXRhLCBtcGkpOworICB9CisgIAorICByZXR1cm4gbXBpOworfQorCg==