From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 26/31] x86/mm: move pv_{alloc, free}_page_type Date: Thu, 17 Aug 2017 15:44:51 +0100 Message-ID: <20170817144456.18989-27-wei.liu2@citrix.com> References: <20170817144456.18989-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1diM59-0002pT-SG for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:47:36 +0000 In-Reply-To: <20170817144456.18989-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGVtIGFuZCB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0byBwdi9tbS5jLiAgVXNlIGJvb2wg aW4gdGhlIG1vdmVkCmNvZGUgd2hlcmUgYXBwcm9wcmlhdGUuCgpQdXQgQlVHKCkgaW4gdGhlIHN0 dWIgYmVjYXVzZSB0aGUgY2FsbGVycyB3aWxsIGNhbGwgQlVHIG9yIEJVR19PTgphbnl3YXkuCgpT aWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KdjQ6IGFkZCBC VUcoKSBpbiBzdHVicwotLS0KIHhlbi9hcmNoL3g4Ni9kb21haW4uYyAgICAgICB8ICAgMSArCiB4 ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgfCA0OTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4Ni9wdi9tbS5jICAgICAgICB8IDQ5MSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9h c20teDg2L21tLmggICAgfCAgIDMgLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oIHwgIDE0 ICsrCiA1IGZpbGVzIGNoYW5nZWQsIDUwNiBpbnNlcnRpb25zKCspLCA0OTUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFp bi5jCmluZGV4IDhmYWUzODQ4NWMuLmU3OWE3ZGU3ZTQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni9kb21haW4uYworKysgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMKQEAgLTY0LDYgKzY0LDcgQEAK ICNpbmNsdWRlIDxjb21wYXQvdmNwdS5oPgogI2luY2x1ZGUgPGFzbS9wc3IuaD4KICNpbmNsdWRl IDxhc20vcHYvZG9tYWluLmg+CisjaW5jbHVkZSA8YXNtL3B2L21tLmg+CiAjaW5jbHVkZSA8YXNt L3B2L3Byb2Nlc3Nvci5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmNwdSAqLCBjdXJyX3Zj cHUpOwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwpp bmRleCA1OTBlN2FlNjViLi4yMDRjMjBkNmZkIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0u YworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTEwLDIxICs1MTAsNiBAQCBzdGF0aWMgdm9p ZCBpbnZhbGlkYXRlX3NoYWRvd19sZHQoc3RydWN0IHZjcHUgKnYsIGludCBmbHVzaCkKIH0KIAog Ci1zdGF0aWMgaW50IGFsbG9jX3NlZ2Rlc2NfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQot ewotICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSk7 Ci0gICAgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjcyA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2Up OwotICAgIHVuc2lnbmVkIGk7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IDUxMjsgaSsrICkKLSAg ICAgICAgaWYgKCB1bmxpa2VseSghY2hlY2tfZGVzY3JpcHRvcihvd25lciwgJmRlc2NzW2ldKSkg KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShkZXNjcyk7Ci0K LSAgICByZXR1cm4gaSA9PSA1MTIgPyAwIDogLUVJTlZBTDsKLX0KLQogYm9vbCBnZXRfcGFnZV9m cm9tX21mbihtZm5fdCBtZm4sIHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKG1mbl94KG1mbikpOwpAQCAtNTM5LDcgKzUyNCw2IEBA IGJvb2wgZ2V0X3BhZ2VfZnJvbV9tZm4obWZuX3QgbWZuLCBzdHJ1Y3QgZG9tYWluICpkKQogICAg IHJldHVybiB0cnVlOwogfQogCi0KIGludCBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbihtZm5f dCBtZm4sIHVuc2lnbmVkIGxvbmcgdHlwZSwgc3RydWN0IGRvbWFpbiAqZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcGFydGlhbCwgYm9vbCBwcmVlbXB0aWJsZSkKIHsKQEAg LTExNjUsMTcyICsxMTQ5LDYgQEAgaW50IHB1dF9wYWdlX2Zyb21fbDRlKGw0X3BnZW50cnlfdCBs NGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcGFydGlhbCwKICAgICByZXR1cm4gMTsKIH0KIAot c3RhdGljIGludCBhbGxvY19sMV90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAg IHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBs b25nICBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMV9wZ2VudHJ5X3QgICpwbDFlOwot ICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAgaW50ICAgICAgICAgICAgcmV0ID0gMDsKLQotICAg IHBsMWUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLQotICAgIGZvciAoIGkgPSAwOyBp IDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBy ZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkLCBkKSApCi0gICAgICAgIHsKLSAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgY2FzZSAwOgotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgX1BBR0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFH RV9DQUNIRV9BVFRSUzoKLSAgICAgICAgICAgIEFTU0VSVCghKHJldCAmIH4oX1BBR0VfUlcgfCBQ QUdFX0NBQ0hFX0FUVFJTKSkpOwotICAgICAgICAgICAgbDFlX2ZsaXBfZmxhZ3MocGwxZVtpXSwg cmV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWRqdXN0X2d1 ZXN0X2wxZShwbDFlW2ldLCBkKTsKLSAgICB9Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDFl KTsKLSAgICByZXR1cm4gMDsKLQotIGZhaWw6Ci0gICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJGYWlsdXJlIGluIGFsbG9jX2wxX3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7Ci0gICAgd2hpbGUg KCBpLS0gPiAwICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUocGwxZVtpXSwgZCk7Ci0KLSAg ICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg aW50IGFsbG9jX2wyX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcg dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWVtcHRpYmxlKQotewotICAg IHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBs b25nICBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMl9wZ2VudHJ5X3QgICpwbDJlOwot ICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAgaW50ICAgICAgICAgICAgcmMgPSAwOwotCi0gICAg cGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZm9yICggaSA9IHBhZ2Ut Pm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDJfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0gICAg ewotICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGkgPiBwYWdlLT5ucl92YWxpZGF0ZWRfcHRl cwotICAgICAgICAgICAgICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAgICBy YyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg aWYgKCAhaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBpKSB8fAotICAgICAgICAgICAgIChyYyA9 IGdldF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbiwgZCkpID4gMCApCi0gICAgICAgICAgICBj b250aW51ZTsKLQotICAgICAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFpbHVyZSBpbiBhbGxvY19sMl90YWJsZTogc2xv dCAlI3hcbiIsIGkpOwotICAgICAgICAgICAgd2hpbGUgKCBpLS0gPiAwICkKLSAgICAgICAgICAg ICAgICBpZiAoIGlzX2d1ZXN0X2wyX3Nsb3QoZCwgdHlwZSwgaSkgKQotICAgICAgICAgICAgICAg ICAgICBwdXRfcGFnZV9mcm9tX2wyZShwbDJlW2ldLCBwZm4pOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLQotICAgICAgICBhZGp1c3RfZ3Vlc3RfbDJlKHBsMmVbaV0sIGQpOwotICAg IH0KLQotICAgIGlmICggcmMgPj0gMCAmJiAodHlwZSAmIFBHVF9wYWVfeGVuX2wyKSApCi0gICAg ewotICAgICAgICAvKiBYZW4gcHJpdmF0ZSBtYXBwaW5ncy4gKi8KLSAgICAgICAgbWVtY3B5KCZw bDJlW0NPTVBBVF9MMl9QQUdFVEFCTEVfRklSU1RfWEVOX1NMT1QoZCldLAotICAgICAgICAgICAg ICAgJmNvbXBhdF9pZGxlX3BnX3RhYmxlX2wyWwotICAgICAgICAgICAgICAgICAgIGwyX3RhYmxl X29mZnNldChISVJPX0NPTVBBVF9NUFRfVklSVF9TVEFSVCldLAotICAgICAgICAgICAgICAgQ09N UEFUX0wyX1BBR0VUQUJMRV9YRU5fU0xPVFMoZCkgKiBzaXplb2YoKnBsMmUpKTsKLSAgICB9Ci0K LSAgICB1bm1hcF9kb21haW5fcGFnZShwbDJlKTsKLSAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJj OwotfQotCi1zdGF0aWMgaW50IGFsbG9jX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Up Ci17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVu c2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGwzX3BnZW50cnlfdCAg KnBsM2U7Ci0gICAgdW5zaWduZWQgaW50ICAgaTsKLSAgICBpbnQgICAgICAgICAgICByYyA9IDAs IHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKLQotICAgIHBsM2UgPSBtYXBfZG9tYWluX3Bh Z2UoX21mbihwZm4pKTsKLQotICAgIC8qCi0gICAgICogUEFFIGd1ZXN0cyBhbGxvY2F0ZSBmdWxs IHBhZ2VzLCBidXQgYXJlbid0IHJlcXVpcmVkIHRvIGluaXRpYWxpemUKLSAgICAgKiBtb3JlIHRo YW4gdGhlIGZpcnN0IGZvdXIgZW50cmllczsgd2hlbiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkK LSAgICAgKiBtb2RlLCBob3dldmVyLCB0aGUgZnVsbCBwYWdlIGlzIHZpc2libGUgdG8gdGhlIE1N VSwgYW5kIGhlbmNlIGFsbAotICAgICAqIDUxMiBlbnRyaWVzIG11c3QgYmUgdmFsaWQvdmVyaWZp ZWQsIHdoaWNoIGlzIG1vc3QgZWFzaWx5IGFjaGlldmVkCi0gICAgICogYnkgY2xlYXJpbmcgdGhl bSBvdXQuCi0gICAgICovCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQotICAgICAg ICBtZW1zZXQocGwzZSArIDQsIDAsIChMM19QQUdFVEFCTEVfRU5UUklFUyAtIDQpICogc2l6ZW9m KCpwbDNlKSk7Ci0KLSAgICBmb3IgKCBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBM M19QQUdFVEFCTEVfRU5UUklFUzsKLSAgICAgICAgICBpKyssIHBhcnRpYWwgPSAwICkKLSAgICB7 Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmIChpID09IDMpICkKLSAgICAg ICAgewotICAgICAgICAgICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MocGwzZVtpXSkgJiBfUEFHRV9Q UkVTRU5UKSB8fAotICAgICAgICAgICAgICAgICAobDNlX2dldF9mbGFncyhwbDNlW2ldKSAmIGwz X2Rpc2FsbG93X21hc2soZCkpICkKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAg ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9t X21mbigKLSAgICAgICAgICAgICAgICAgICAgX21mbihsM2VfZ2V0X3BmbihwbDNlW2ldKSksCi0g ICAgICAgICAgICAgICAgICAgIFBHVF9sMl9wYWdlX3RhYmxlIHwgUEdUX3BhZV94ZW5fbDIsIGQs IHBhcnRpYWwsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCAhaXNfZ3Vlc3Rf bDNfc2xvdChpKSB8fAotICAgICAgICAgICAgICAgICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sM2Uo cGwzZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot Ci0gICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICAgICAgewotICAgICAgICAgICAg cGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9w dGUgPSBwYXJ0aWFsID86IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHJjID09IC1F SU5UUiAmJiBpICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0 ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICAgICAg cmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKLSAg ICB9Ci0KLSAgICBpZiAoIHJjID49IDAgJiYgIXB2X2NyZWF0ZV9wYWVfeGVuX21hcHBpbmdzKGQs IHBsM2UpICkKLSAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgIGlmICggcmMgPCAwICYmIHJjICE9 IC1FUkVTVEFSVCAmJiByYyAhPSAtRUlOVFIgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wzX3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7 Ci0gICAgICAgIGlmICggaSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlk YXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKLSAgICAg ICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsKLSAgICAgICAgfQot ICAgICAgICB3aGlsZSAoIGktLSA+IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICFp c19ndWVzdF9sM19zbG90KGkpICkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKLSAgICAgICAgfQotICAgIH0KLQot ICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOwotICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7 Ci19Ci0KIGJvb2wgZmlsbF9yb19tcHQodW5zaWduZWQgbG9uZyBtZm4pCiB7CiAgICAgbDRfcGdl bnRyeV90ICpsNHRhYiA9IG1hcF9kb21haW5fcGFnZShfbWZuKG1mbikpOwpAQCAtMTM1NSwxODgg KzExNzMsNiBAQCB2b2lkIHphcF9yb19tcHQodW5zaWduZWQgbG9uZyBtZm4pCiAgICAgdW5tYXBf ZG9tYWluX3BhZ2UobDR0YWIpOwogfQogCi1zdGF0aWMgaW50IGFsbG9jX2w0X3RhYmxlKHN0cnVj dCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293 bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwot ICAgIGw0X3BnZW50cnlfdCAgKnBsNGUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLSAg ICB1bnNpZ25lZCBpbnQgICBpOwotICAgIGludCAgICAgICAgICAgIHJjID0gMCwgcGFydGlhbCA9 IHBhZ2UtPnBhcnRpYWxfcHRlOwotCi0gICAgZm9yICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9w dGVzOyBpIDwgTDRfUEFHRVRBQkxFX0VOVFJJRVM7Ci0gICAgICAgICAgaSsrLCBwYXJ0aWFsID0g MCApCi0gICAgewotICAgICAgICBpZiAoICFpc19ndWVzdF9sNF9zbG90KGQsIGkpIHx8Ci0gICAg ICAgICAgICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZuLCBkLCBwYXJ0aWFs KSkgPiAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICggcmMgPT0gLUVS RVNUQVJUICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMg PSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7Ci0gICAg ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHJjIDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGlmICggcmMgIT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbHVyZSBpbiBhbGxvY19sNF90YWJs ZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAgICAgICAgaWYgKCBpICkKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAg ICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICAgICAgICAgIGlmICggcmMgPT0g LUVJTlRSICkKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBj dXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCi0gICAgICAgICAgICAgICAgICAgICAgICBw YWdlLT5ucl92YWxpZGF0ZWRfcHRlcysrOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5h cmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgewotICAgICAg ICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0g ICAgICAgIH0KLQotICAgICAgICBhZGp1c3RfZ3Vlc3RfbDRlKHBsNGVbaV0sIGQpOwotICAgIH0K LQotICAgIGlmICggcmMgPj0gMCApCi0gICAgewotICAgICAgICBwdl9pbml0X2d1ZXN0X2w0X3Rh YmxlKHBsNGUsIGQsICFWTV9BU1NJU1QoZCwgbTJwX3N0cmljdCkpOwotICAgICAgICBhdG9taWNf aW5jKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Ci0gICAgICAgIHJjID0gMDsKLSAg ICB9Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyB2b2lkIGZyZWVfbDFfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKLXsKLSAg ICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgdW5zaWduZWQg bG9uZyBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7Ci0g ICAgdW5zaWduZWQgaW50ICBpOwotCi0gICAgcGwxZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBm bikpOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkK LSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUocGwxZVtpXSwgZCk7Ci0KLSAgICB1bm1hcF9kb21h aW5fcGFnZShwbDFlKTsKLX0KLQotCi1zdGF0aWMgaW50IGZyZWVfbDJfdGFibGUoc3RydWN0IHBh Z2VfaW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxlKQotewotICAgIHN0cnVjdCBkb21haW4gKmQg PSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9f bWZuKHBhZ2UpOwotICAgIGwyX3BnZW50cnlfdCAqcGwyZTsKLSAgICB1bnNpZ25lZCBpbnQgIGkg PSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtIDE7Ci0gICAgaW50IGVyciA9IDA7Ci0KLSAgICBw bDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7Ci0KLSAgICBBU1NFUlQocGFnZS0+bnJf dmFsaWRhdGVkX3B0ZXMpOwotICAgIGRvIHsKLSAgICAgICAgaWYgKCBpc19ndWVzdF9sMl9zbG90 KGQsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCBpKSAmJgotICAgICAgICAgICAgIHB1dF9wYWdl X2Zyb21fbDJlKHBsMmVbaV0sIHBmbikgPT0gMCAmJgotICAgICAgICAgICAgIHByZWVtcHRpYmxl ICYmIGkgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICBlcnIgPSAtRVJFU1RB UlQ7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICggIWVyciAmJiBpLS0gKTsKLQotICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMmUpOwotCi0gICAgaWYgKCAhZXJyICkKLSAgICAgICAgcGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJj0gflBHVF9wYWVfeGVuX2wyOwotCi0gICAgcmV0dXJuIGVycjsKLX0K LQotc3RhdGljIGludCBmcmVlX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0g ICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVk IGxvbmcgcGZuID0gcGFnZV90b19tZm4ocGFnZSk7Ci0gICAgbDNfcGdlbnRyeV90ICpwbDNlOwot ICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKLSAgICB1bnNpZ25l ZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFsOwotCi0gICAgcGwz ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZG8gewotICAgICAgICBpZiAo IGlzX2d1ZXN0X2wzX3Nsb3QoaSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByYyA9IHB1dF9w YWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwgcGFydGlhbCwgMCk7Ci0gICAgICAgICAgICBpZiAo IHJjIDwgMCApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBwYXJ0aWFsID0g MDsKLSAgICAgICAgICAgIGlmICggcmMgPiAwICkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKLSAgICAgICAgfQot ICAgIH0gd2hpbGUgKCBpLS0gKTsKLQotICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOwotCi0g ICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRh dGVkX3B0ZXMgPSBpOwotICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBhcnRpYWwgPzogLTE7 Ci0gICAgfQotICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8IEwzX1BBR0VUQUJMRV9F TlRSSUVTIC0gMSApCi0gICAgewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGkg KyAxOwotICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7Ci0gICAgICAgIHJjID0gLUVSRVNU QVJUOwotICAgIH0KLSAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOwotfQotCi1zdGF0aWMgaW50 IGZyZWVfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKLXsKLSAgICBzdHJ1Y3QgZG9t YWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm4gPSBw YWdlX3RvX21mbihwYWdlKTsKLSAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPSBtYXBfZG9tYWluX3Bh Z2UoX21mbihwZm4pKTsKLSAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlhbF9w dGU7Ci0gICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAhcGFy dGlhbDsKLQotICAgIGRvIHsKLSAgICAgICAgaWYgKCBpc19ndWVzdF9sNF9zbG90KGQsIGkpICkK LSAgICAgICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZuLCBwYXJ0aWFs LCAwKTsKLSAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IHBhcnRpYWwgPSAwOwotICAgIH0gd2hpbGUgKCBpLS0gKTsKLQotICAgIGlmICggcmMgPT0gLUVS RVNUQVJUICkKLSAgICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAg ICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOwotICAgIH0KLSAgICBlbHNl IGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUyAtIDEgKQotICAg IHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKLSAgICAgICAgcGFn ZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICB9Ci0KLSAg ICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKLQotICAgIGlmICggcmMgPj0gMCApCi0gICAgewot ICAgICAgICBhdG9taWNfZGVjKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Ci0gICAg ICAgIHJjID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KIGludCBwYWdlX2xvY2so c3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKIHsKICAgICB1bnNpZ25lZCBsb25nIHgsIG54OwpAQCAt MTk1MSwxMzQgKzE1ODcsNiBAQCB2b2lkIGdldF9wYWdlX2xpZ2h0KHN0cnVjdCBwYWdlX2luZm8g KnBhZ2UpCiAgICAgd2hpbGUgKCB1bmxpa2VseSh5ICE9IHgpICk7CiB9CiAKLXN0YXRpYyBpbnQg cHZfYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcg dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlZW1wdGlibGUpCi17 Ci0gICAgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICBp bnQgcmM7Ci0KLSAgICAvKiBBIHBhZ2UgdGFibGUgaXMgZGlydGllZCB3aGVuIGl0cyB0eXBlIGNv dW50IGJlY29tZXMgbm9uLXplcm8uICovCi0gICAgaWYgKCBsaWtlbHkob3duZXIgIT0gTlVMTCkg KQotICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgX21mbihwYWdlX3RvX21mbihwYWdl KSkpOwotCi0gICAgc3dpdGNoICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQotICAgIHsKLSAgICBj YXNlIFBHVF9sMV9wYWdlX3RhYmxlOgotICAgICAgICByYyA9IGFsbG9jX2wxX3RhYmxlKHBhZ2Up OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxlOgotICAgICAgICBy YyA9IGFsbG9jX2wyX3RhYmxlKHBhZ2UsIHR5cGUsIHByZWVtcHRpYmxlKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKLSAgICAgICAgQVNTRVJUKHByZWVtcHRp YmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sM190YWJsZShwYWdlKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKLSAgICAgICAgQVNTRVJUKHByZWVtcHRpYmxl KTsKLSAgICAgICAgcmMgPSBhbGxvY19sNF90YWJsZShwYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKLSAgICAgICAgcmMgPSBhbGxvY19zZWdkZXNjX3Bh Z2UocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50aygi QmFkIHR5cGUgaW4gYWxsb2NfcGFnZV90eXBlICVseCB0PSUiIFBSdHlwZV9pbmZvICIgYz0lbHhc biIsCi0gICAgICAgICAgICAgICB0eXBlLCBwYWdlLT51LmludXNlLnR5cGVfaW5mbywKLSAgICAg ICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8pOwotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAg ICAgIEJVRygpOwotICAgIH0KLQotICAgIC8qIE5vIG5lZWQgZm9yIGF0b21pYyB1cGRhdGUgb2Yg dHlwZV9pbmZvIGhlcmU6IG5vb25lIGVsc2UgdXBkYXRlcyBpdC4gKi8KLSAgICBzbXBfd21iKCk7 Ci0gICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvIHw9IFBHVF92YWxpZGF0ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgLUVJTlRSOgotICAgICAgICBBU1NFUlQoKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYKLSAg ICAgICAgICAgICAgICAoUEdUX2NvdW50X21hc2t8UEdUX3ZhbGlkYXRlZHxQR1RfcGFydGlhbCkp ID09IDEpOwotICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmPSB+UEdUX2NvdW50X21h c2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChyYyA8IDAp OwotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkVycm9yIHdoaWxlIHZhbGlkYXRp bmcgbWZuICUiIFBSSV9tZm4KLSAgICAgICAgICAgICAgICAgIiAocGZuICUiIFBSSV9wZm4gIikg Zm9yIHR5cGUgJSIgUFJ0eXBlX2luZm8KLSAgICAgICAgICAgICAgICAgIjogY2FmPSUwOGx4IHRh Zj0lIiBQUnR5cGVfaW5mbyAiXG4iLAotICAgICAgICAgICAgICAgICBwYWdlX3RvX21mbihwYWdl KSwgZ2V0X2dwZm5fZnJvbV9tZm4ocGFnZV90b19tZm4ocGFnZSkpLAotICAgICAgICAgICAgICAg ICB0eXBlLCBwYWdlLT5jb3VudF9pbmZvLCBwYWdlLT51LmludXNlLnR5cGVfaW5mbyk7Ci0gICAg ICAgIGlmICggcGFnZSAhPSBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCi0gICAgICAg ICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ewotICAgICAgICAgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmCi0gICAgICAg ICAgICAgICAgICAgIChQR1RfY291bnRfbWFzayB8IFBHVF92YWxpZGF0ZWQpKSA9PSAxKTsKLSAg ICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgIGdldF9wYWdlX2xpZ2h0KHBhZ2UpOwotICAg ICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3BhcnRpYWw7Ci0gICAgICAg IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi0KLWludCBw dl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5 cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0aWJsZSkKLXsKLSAgICBzdHJ1 Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxv bmcgZ21mbjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIGxpa2VseShvd25lciAhPSBOVUxMKSAm JiB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQotICAgIHsKLSAgICAgICAg LyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBjb3VudCBiZWNvbWVzIHpl cm8uICovCi0gICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVyLCBfbWZuKHBhZ2VfdG9fbWZu KHBhZ2UpKSk7Ci0KLSAgICAgICAgQVNTRVJUKCFzaGFkb3dfbW9kZV9yZWZjb3VudHMob3duZXIp KTsKLQotICAgICAgICBnbWZuID0gbWZuX3RvX2dtZm4ob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2Up KTsKLSAgICAgICAgQVNTRVJUKFZBTElEX00yUChnbWZuKSk7Ci0gICAgICAgIC8qIFBhZ2Ugc2hh cmluZyBub3Qgc3VwcG9ydGVkIGZvciBzaGFkb3dlZCBkb21haW5zICovCi0gICAgICAgIGlmKCFT SEFSRURfTTJQKGdtZm4pKQotICAgICAgICAgICAgc2hhZG93X3JlbW92ZV9hbGxfc2hhZG93cyhv d25lciwgX21mbihnbWZuKSk7Ci0gICAgfQotCi0gICAgaWYgKCAhKHR5cGUgJiBQR1RfcGFydGlh bCkgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSAxVSA8PCBQQUdF VEFCTEVfT1JERVI7Ci0gICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKLSAgICB9Ci0KLSAg ICBzd2l0Y2ggKCB0eXBlICYgUEdUX3R5cGVfbWFzayApCi0gICAgewotICAgIGNhc2UgUEdUX2wx X3BhZ2VfdGFibGU6Ci0gICAgICAgIGZyZWVfbDFfdGFibGUocGFnZSk7Ci0gICAgICAgIHJjID0g MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDJfcGFnZV90YWJsZToKLSAgICAgICAg cmMgPSBmcmVlX2wyX3RhYmxlKHBhZ2UsIHByZWVtcHRpYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKLSAgICAgICAgQVNTRVJUKHByZWVtcHRpYmxlKTsK LSAgICAgICAgcmMgPSBmcmVlX2wzX3RhYmxlKHBhZ2UpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIFBHVF9sNF9wYWdlX3RhYmxlOgotICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOwotICAg ICAgICByYyA9IGZyZWVfbDRfdGFibGUocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1 bHQ6Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAidHlwZSAlIiBQUnR5cGVfaW5m byAiIG1mbiAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgIHR5cGUsIHBhZ2VfdG9f bWZuKHBhZ2UpKTsKLSAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICBCVUcoKTsKLSAgICB9 Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQogc3RhdGljIGludCBfX3B1dF9maW5hbF9wYWdlX3R5 cGUoCiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBpbnQg cHJlZW1wdGlibGUpCiB7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvbW0uYyBiL3hlbi9h cmNoL3g4Ni9wdi9tbS5jCmluZGV4IDQ2ZTFmY2Y0ZTUuLmYwMzkzYjllM2MgMTAwNjQ0Ci0tLSBh L3hlbi9hcmNoL3g4Ni9wdi9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCkBAIC0yMCwx MCArMjAsMTMgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAorI2luY2x1ZGUgPHhlbi9ldmVudC5o PgogI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KIAorI2luY2x1ZGUgPGFzbS9tbS5oPgog I2luY2x1ZGUgPGFzbS9wdi9tbS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUg PGFzbS9zaGFkb3cuaD4KIAogLyoKICAqIFBURSB1cGRhdGVzIGNhbiBiZSBkb25lIHdpdGggb3Jk aW5hcnkgd3JpdGVzIGV4Y2VwdDoKQEAgLTI1MSw2ICsyNTQsNDk0IEBAIGJvb2wgcHZfY3JlYXRl X3BhZV94ZW5fbWFwcGluZ3Moc3RydWN0IGRvbWFpbiAqZCwgbDNfcGdlbnRyeV90ICpwbDNlKQog ICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW50IGFsbG9jX2wxX3RhYmxlKHN0cnVjdCBw YWdlX2luZm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVy KHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAg IGwxX3BnZW50cnlfdCAgKnBsMWU7CisgICAgdW5zaWduZWQgaW50ICAgaTsKKyAgICBpbnQgICAg ICAgICAgICByZXQgPSAwOworCisgICAgcGwxZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikp OworCisgICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkKKyAg ICB7CisgICAgICAgIHN3aXRjaCAoIHJldCA9IGdldF9wYWdlX2Zyb21fbDFlKHBsMWVbaV0sIGQs IGQpICkKKyAgICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ290byBmYWls OworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBfUEFH RV9SVyAuLi4gX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgorICAgICAgICAgICAgQVNTRVJU KCEocmV0ICYgfihfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7CisgICAgICAgICAgICBs MWVfZmxpcF9mbGFncyhwbDFlW2ldLCByZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKworICAgICAgICBhZGp1c3RfZ3Vlc3RfbDFlKHBsMWVbaV0sIGQpOworICAgIH0KKworICAg IHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworICAgIHJldHVybiAwOworCisgZmFpbDoKKyAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgIkZhaWx1cmUgaW4gYWxsb2NfbDFfdGFibGU6IHNsb3Qg JSN4XG4iLCBpKTsKKyAgICB3aGlsZSAoIGktLSA+IDAgKQorICAgICAgICBwdXRfcGFnZV9mcm9t X2wxZShwbDFlW2ldLCBkKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworICAgIHJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbDJfdGFibGUoc3RydWN0IHBhZ2VfaW5m byAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIHByZWVtcHRpYmxlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25l cihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nICBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyAg ICBsMl9wZ2VudHJ5X3QgICpwbDJlOworICAgIHVuc2lnbmVkIGludCAgIGk7CisgICAgaW50ICAg ICAgICAgICAgcmMgPSAwOworCisgICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikp OworCisgICAgZm9yICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDJfUEFHRVRB QkxFX0VOVFJJRVM7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGkg PiBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcworICAgICAgICAgICAgICYmIGh5cGVyY2FsbF9wcmVl bXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRf cHRlcyA9IGk7CisgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBp KSB8fAorICAgICAgICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbiwg ZCkpID4gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIHJjIDwgMCAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFpbHVy ZSBpbiBhbGxvY19sMl90YWJsZTogc2xvdCAlI3hcbiIsIGkpOworICAgICAgICAgICAgd2hpbGUg KCBpLS0gPiAwICkKKyAgICAgICAgICAgICAgICBpZiAoIGlzX2d1ZXN0X2wyX3Nsb3QoZCwgdHlw ZSwgaSkgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wyZShwbDJlW2ldLCBw Zm4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhZGp1c3RfZ3Vl c3RfbDJlKHBsMmVbaV0sIGQpOworICAgIH0KKworICAgIGlmICggcmMgPj0gMCAmJiAodHlwZSAm IFBHVF9wYWVfeGVuX2wyKSApCisgICAgeworICAgICAgICAvKiBYZW4gcHJpdmF0ZSBtYXBwaW5n cy4gKi8KKyAgICAgICAgbWVtY3B5KCZwbDJlW0NPTVBBVF9MMl9QQUdFVEFCTEVfRklSU1RfWEVO X1NMT1QoZCldLAorICAgICAgICAgICAgICAgJmNvbXBhdF9pZGxlX3BnX3RhYmxlX2wyWworICAg ICAgICAgICAgICAgICAgIGwyX3RhYmxlX29mZnNldChISVJPX0NPTVBBVF9NUFRfVklSVF9TVEFS VCldLAorICAgICAgICAgICAgICAgQ09NUEFUX0wyX1BBR0VUQUJMRV9YRU5fU0xPVFMoZCkgKiBz aXplb2YoKnBsMmUpKTsKKyAgICB9CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDJlKTsKKyAg ICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOworfQorCitzdGF0aWMgaW50IGFsbG9jX2wzX3RhYmxl KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2Vf Z2V0X293bmVyKHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBh Z2UpOworICAgIGwzX3BnZW50cnlfdCAgKnBsM2U7CisgICAgdW5zaWduZWQgaW50ICAgaTsKKyAg ICBpbnQgICAgICAgICAgICByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKwor ICAgIHBsM2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKKworICAgIC8qCisgICAgICog UEFFIGd1ZXN0cyBhbGxvY2F0ZSBmdWxsIHBhZ2VzLCBidXQgYXJlbid0IHJlcXVpcmVkIHRvIGlu aXRpYWxpemUKKyAgICAgKiBtb3JlIHRoYW4gdGhlIGZpcnN0IGZvdXIgZW50cmllczsgd2hlbiBy dW5uaW5nIGluIGNvbXBhdGliaWxpdHkKKyAgICAgKiBtb2RlLCBob3dldmVyLCB0aGUgZnVsbCBw YWdlIGlzIHZpc2libGUgdG8gdGhlIE1NVSwgYW5kIGhlbmNlIGFsbAorICAgICAqIDUxMiBlbnRy aWVzIG11c3QgYmUgdmFsaWQvdmVyaWZpZWQsIHdoaWNoIGlzIG1vc3QgZWFzaWx5IGFjaGlldmVk CisgICAgICogYnkgY2xlYXJpbmcgdGhlbSBvdXQuCisgICAgICovCisgICAgaWYgKCBpc19wdl8z MmJpdF9kb21haW4oZCkgKQorICAgICAgICBtZW1zZXQocGwzZSArIDQsIDAsIChMM19QQUdFVEFC TEVfRU5UUklFUyAtIDQpICogc2l6ZW9mKCpwbDNlKSk7CisKKyAgICBmb3IgKCBpID0gcGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUzsKKyAgICAgICAgICBp KyssIHBhcnRpYWwgPSAwICkKKyAgICB7CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWlu KGQpICYmIChpID09IDMpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhKGwzZV9nZXRf ZmxhZ3MocGwzZVtpXSkgJiBfUEFHRV9QUkVTRU5UKSB8fAorICAgICAgICAgICAgICAgICAobDNl X2dldF9mbGFncyhwbDNlW2ldKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpICkKKyAgICAgICAgICAg ICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmMg PSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKKyAgICAgICAgICAgICAgICAgICAgX21mbihs M2VfZ2V0X3BmbihwbDNlW2ldKSksCisgICAgICAgICAgICAgICAgICAgIFBHVF9sMl9wYWdlX3Rh YmxlIHwgUEdUX3BhZV94ZW5fbDIsIGQsIHBhcnRpYWwsIHRydWUpOworICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKCAhaXNfZ3Vlc3RfbDNfc2xvdChpKSB8fAorICAgICAgICAgICAgICAgICAg KHJjID0gZ2V0X3BhZ2VfZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAwICkK KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkK KyAgICAgICAgeworICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAg ICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSBpZiAoIHJjID09IC1FSU5UUiAmJiBpICkKKyAgICAgICAgeworICAgICAgICAg ICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICAgcGFnZS0+cGFydGlh bF9wdGUgPSAwOworICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKCByYyA8IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYWRqdXN0X2d1 ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49IDAgJiYgIXB2X2Ny ZWF0ZV9wYWVfeGVuX21hcHBpbmdzKGQsIHBsM2UpICkKKyAgICAgICAgcmMgPSAtRUlOVkFMOwor ICAgIGlmICggcmMgPCAwICYmIHJjICE9IC1FUkVTVEFSVCAmJiByYyAhPSAtRUlOVFIgKQorICAg IHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wz X3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7CisgICAgICAgIGlmICggaSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgICAgIHBhZ2Ut PnBhcnRpYWxfcHRlID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3Rh YmxlID0gcGFnZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIGktLSA+IDAgKQorICAgICAg ICB7CisgICAgICAgICAgICBpZiAoICFpc19ndWVzdF9sM19zbG90KGkpICkKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBk KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOworICAg IHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbDRfdGFibGUo c3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9n ZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyAgcGZuID0gcGFnZV90b19tZm4ocGFn ZSk7CisgICAgbDRfcGdlbnRyeV90ICAqcGw0ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikp OworICAgIHVuc2lnbmVkIGludCAgIGk7CisgICAgaW50ICAgICAgICAgICAgcmMgPSAwLCBwYXJ0 aWFsID0gcGFnZS0+cGFydGlhbF9wdGU7CisKKyAgICBmb3IgKCBpID0gcGFnZS0+bnJfdmFsaWRh dGVkX3B0ZXM7IGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUzsKKyAgICAgICAgICBpKyssIHBhcnRp YWwgPSAwICkKKyAgICB7CisgICAgICAgIGlmICggIWlzX2d1ZXN0X2w0X3Nsb3QoZCwgaSkgfHwK KyAgICAgICAgICAgICAocmMgPSBnZXRfcGFnZV9mcm9tX2w0ZShwbDRlW2ldLCBwZm4sIGQsIHBh cnRpYWwpKSA+IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCByYyA9 PSAtRVJFU1RBUlQgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRf cHRlcyA9IGk7CisgICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBhcnRpYWwgPzogMTsK KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggcmMgPCAwICkKKyAgICAgICAgeworICAgICAg ICAgICAgaWYgKCByYyAhPSAtRUlOVFIgKQorICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsdXJlIGluIGFsbG9jX2w0 X3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7CisgICAgICAgICAgICBpZiAoIGkgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAg ICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCBy YyA9PSAtRUlOVFIgKQorICAgICAgICAgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp ZiAoIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKKyAgICAgICAgICAgICAgICAgICAg ICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzKys7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl bnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICB7Cisg ICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKyAgICAgICAgICAgIHJldHVybiBy YzsKKyAgICAgICAgfQorCisgICAgICAgIGFkanVzdF9ndWVzdF9sNGUocGw0ZVtpXSwgZCk7Cisg ICAgfQorCisgICAgaWYgKCByYyA+PSAwICkKKyAgICB7CisgICAgICAgIHB2X2luaXRfZ3Vlc3Rf bDRfdGFibGUocGw0ZSwgZCwgIVZNX0FTU0lTVChkLCBtMnBfc3RyaWN0KSk7CisgICAgICAgIGF0 b21pY19pbmMoJmQtPmFyY2gucHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKKyAgICAgICAgcmMgPSAw OworICAgIH0KKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKworICAgIHJldHVybiByYzsK K30KKworc3RhdGljIHZvaWQgZnJlZV9sMV90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQor eworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNp Z25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIGwxX3BnZW50cnlfdCAqcGwx ZTsKKyAgICB1bnNpZ25lZCBpbnQgIGk7CisKKyAgICBwbDFlID0gbWFwX2RvbWFpbl9wYWdlKF9t Zm4ocGZuKSk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEwxX1BBR0VUQUJMRV9FTlRSSUVTOyBp KysgKQorICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkKTsKKworICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMWUpOworfQorCitzdGF0aWMgaW50IGZyZWVfbDJfdGFibGUoc3RydWN0 IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxlKQoreworICAgIHN0cnVjdCBkb21haW4g KmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2Vf dG9fbWZuKHBhZ2UpOworICAgIGwyX3BnZW50cnlfdCAqcGwyZTsKKyAgICB1bnNpZ25lZCBpbnQg IGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtIDE7CisgICAgaW50IGVyciA9IDA7CisKKyAg ICBwbDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICBBU1NFUlQocGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXMpOworICAgIGRvIHsKKyAgICAgICAgaWYgKCBpc19ndWVzdF9sMl9z bG90KGQsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCBpKSAmJgorICAgICAgICAgICAgIHB1dF9w YWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbikgPT0gMCAmJgorICAgICAgICAgICAgIHByZWVtcHRp YmxlICYmIGkgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICBlcnIgPSAtRVJF U1RBUlQ7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICggIWVyciAmJiBpLS0gKTsKKworICAgIHVu bWFwX2RvbWFpbl9wYWdlKHBsMmUpOworCisgICAgaWYgKCAhZXJyICkKKyAgICAgICAgcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8gJj0gflBHVF9wYWVfeGVuX2wyOworCisgICAgcmV0dXJuIGVycjsK K30KKworc3RhdGljIGludCBmcmVlX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7 CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworICAgIHVuc2ln bmVkIGxvbmcgcGZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAgbDNfcGdlbnRyeV90ICpwbDNl OworICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKyAgICB1bnNp Z25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFsOworCisgICAg cGwzZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOworCisgICAgZG8geworICAgICAgICBp ZiAoIGlzX2d1ZXN0X2wzX3Nsb3QoaSkgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IHB1 dF9wYWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwgcGFydGlhbCwgMCk7CisgICAgICAgICAgICBp ZiAoIHJjIDwgMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwYXJ0aWFs ID0gMDsKKyAgICAgICAgICAgIGlmICggcmMgPiAwICkKKyAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICAgICAg fQorICAgIH0gd2hpbGUgKCBpLS0gKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOwor CisgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAgICAgcGFnZS0+bnJfdmFs aWRhdGVkX3B0ZXMgPSBpOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBhcnRpYWwgPzog LTE7CisgICAgfQorICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8IEwzX1BBR0VUQUJM RV9FTlRSSUVTIC0gMSApCisgICAgeworICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9 IGkgKyAxOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAgICAgIHJjID0gLUVS RVNUQVJUOworICAgIH0KKyAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOworfQorCitzdGF0aWMg aW50IGZyZWVfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3Qg ZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyBwZm4g PSBwYWdlX3RvX21mbihwYWdlKTsKKyAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPSBtYXBfZG9tYWlu X3BhZ2UoX21mbihwZm4pKTsKKyAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlh bF9wdGU7CisgICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAh cGFydGlhbDsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKCBpc19ndWVzdF9sNF9zbG90KGQsIGkp ICkKKyAgICAgICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZuLCBwYXJ0 aWFsLCAwKTsKKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIHBhcnRpYWwgPSAwOworICAgIH0gd2hpbGUgKCBpLS0gKTsKKworICAgIGlmICggcmMgPT0g LUVSRVNUQVJUICkKKyAgICB7CisgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsK KyAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOworICAgIH0KKyAgICBl bHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUyAtIDEgKQor ICAgIHsKKyAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKKyAgICAgICAg cGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICB9CisK KyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKworICAgIGlmICggcmMgPj0gMCApCisgICAg eworICAgICAgICBhdG9taWNfZGVjKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Cisg ICAgICAgIHJjID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg YWxsb2Nfc2VnZGVzY19wYWdlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgY29uc3Qg c3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICBzdHJ1Y3Qg ZGVzY19zdHJ1Y3QgKmRlc2NzID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7CisgICAgdW5zaWdu ZWQgaTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgNTEyOyBpKysgKQorICAgICAgICBpZiAoIHVu bGlrZWx5KCFjaGVja19kZXNjcmlwdG9yKG93bmVyLCAmZGVzY3NbaV0pKSApCisgICAgICAgICAg ICBicmVhazsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKGRlc2NzKTsKKworICAgIHJldHVybiBp ID09IDUxMiA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgcHZfYWxsb2NfcGFnZV90eXBlKHN0cnVj dCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBwcmVlbXB0aWJsZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBh Z2VfZ2V0X293bmVyKHBhZ2UpOworICAgIGludCByYzsKKworICAgIC8qIEEgcGFnZSB0YWJsZSBp cyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVjb21lcyBub24temVyby4gKi8KKyAgICBp ZiAoIGxpa2VseShvd25lciAhPSBOVUxMKSApCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93 bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICBzd2l0Y2ggKCB0eXBlICYgUEdU X3R5cGVfbWFzayApCisgICAgeworICAgIGNhc2UgUEdUX2wxX3BhZ2VfdGFibGU6CisgICAgICAg IHJjID0gYWxsb2NfbDFfdGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdU X2wyX3BhZ2VfdGFibGU6CisgICAgICAgIHJjID0gYWxsb2NfbDJfdGFibGUocGFnZSwgdHlwZSwg cHJlZW1wdGlibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sM19wYWdlX3RhYmxl OgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGFsbG9jX2wzX3Rh YmxlKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sNF9wYWdlX3RhYmxlOgor ICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGFsbG9jX2w0X3RhYmxl KHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9zZWdfZGVzY19wYWdlOgorICAg ICAgICByYyA9IGFsbG9jX3NlZ2Rlc2NfcGFnZShwYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAg ZGVmYXVsdDoKKyAgICAgICAgcHJpbnRrKCJCYWQgdHlwZSBpbiBhbGxvY19wYWdlX3R5cGUgJWx4 IHQ9JSIgUFJ0eXBlX2luZm8gIiBjPSVseFxuIiwKKyAgICAgICAgICAgICAgIHR5cGUsIHBhZ2Ut PnUuaW51c2UudHlwZV9pbmZvLAorICAgICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbyk7Cisg ICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgQlVHKCk7CisgICAgfQorCisgICAgLyogTm8g bmVlZCBmb3IgYXRvbWljIHVwZGF0ZSBvZiB0eXBlX2luZm8gaGVyZTogbm9vbmUgZWxzZSB1cGRh dGVzIGl0LiAqLworICAgIHNtcF93bWIoKTsKKyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAg IGNhc2UgMDoKKyAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRl ZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAtRUlOVFI6CisgICAgICAgIEFTU0VSVCgocGFn ZS0+dS5pbnVzZS50eXBlX2luZm8gJgorICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFza3xQ R1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgPT0gMSk7CisgICAgICAgIHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvICY9IH5QR1RfY291bnRfbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs dDoKKyAgICAgICAgQVNTRVJUKHJjIDwgMCk7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiRXJyb3Igd2hpbGUgdmFsaWRhdGluZyBtZm4gJSIgUFJJX21mbgorICAgICAgICAgICAg ICAgICAiIChwZm4gJSIgUFJJX3BmbiAiKSBmb3IgdHlwZSAlIiBQUnR5cGVfaW5mbworICAgICAg ICAgICAgICAgICAiOiBjYWY9JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJcbiIsCisgICAgICAg ICAgICAgICAgIHBhZ2VfdG9fbWZuKHBhZ2UpLCBnZXRfZ3Bmbl9mcm9tX21mbihwYWdlX3RvX21m bihwYWdlKSksCisgICAgICAgICAgICAgICAgIHR5cGUsIHBhZ2UtPmNvdW50X2luZm8sIHBhZ2Ut PnUuaW51c2UudHlwZV9pbmZvKTsKKyAgICAgICAgaWYgKCBwYWdlICE9IGN1cnJlbnQtPmFyY2gu b2xkX2d1ZXN0X3RhYmxlICkKKyAgICAgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvID0g MDsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoKHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYKKyAgICAgICAgICAgICAgICAgICAgKFBHVF9jb3VudF9tYXNrIHwg UEdUX3ZhbGlkYXRlZCkpID09IDEpOworICAgIGNhc2UgLUVSRVNUQVJUOgorICAgICAgICAgICAg Z2V0X3BhZ2VfbGlnaHQocGFnZSk7CisgICAgICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5m byB8PSBQR1RfcGFydGlhbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg ICByZXR1cm4gcmM7Cit9CisKK2ludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw cmVlbXB0aWJsZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVy KHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgZ21mbjsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAo IGxpa2VseShvd25lciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93 bmVyKSkgKQorICAgIHsKKyAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBp dHMgdHlwZSBjb3VudCBiZWNvbWVzIHplcm8uICovCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5 KG93bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICAgICAgQVNTRVJUKCFzaGFk b3dfbW9kZV9yZWZjb3VudHMob3duZXIpKTsKKworICAgICAgICBnbWZuID0gbWZuX3RvX2dtZm4o b3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICAgICAgQVNTRVJUKFZBTElEX00yUChnbWZu KSk7CisgICAgICAgIC8qIFBhZ2Ugc2hhcmluZyBub3Qgc3VwcG9ydGVkIGZvciBzaGFkb3dlZCBk b21haW5zICovCisgICAgICAgIGlmKCFTSEFSRURfTTJQKGdtZm4pKQorICAgICAgICAgICAgc2hh ZG93X3JlbW92ZV9hbGxfc2hhZG93cyhvd25lciwgX21mbihnbWZuKSk7CisgICAgfQorCisgICAg aWYgKCAhKHR5cGUgJiBQR1RfcGFydGlhbCkgKQorICAgIHsKKyAgICAgICAgcGFnZS0+bnJfdmFs aWRhdGVkX3B0ZXMgPSAxVSA8PCBQQUdFVEFCTEVfT1JERVI7CisgICAgICAgIHBhZ2UtPnBhcnRp YWxfcHRlID0gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCB0eXBlICYgUEdUX3R5cGVfbWFzayAp CisgICAgeworICAgIGNhc2UgUEdUX2wxX3BhZ2VfdGFibGU6CisgICAgICAgIGZyZWVfbDFfdGFi bGUocGFnZSk7CisgICAgICAgIHJjID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQR1Rf bDJfcGFnZV90YWJsZToKKyAgICAgICAgcmMgPSBmcmVlX2wyX3RhYmxlKHBhZ2UsIHByZWVtcHRp YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKKyAgICAg ICAgQVNTRVJUKHByZWVtcHRpYmxlKTsKKyAgICAgICAgcmMgPSBmcmVlX2wzX3RhYmxlKHBhZ2Up OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sNF9wYWdlX3RhYmxlOgorICAgICAgICBB U1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGZyZWVfbDRfdGFibGUocGFnZSk7Cisg ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAidHlwZSAlIiBQUnR5cGVfaW5mbyAiIG1mbiAlIiBQUklfbWZuICJcbiIsCisgICAgICAg ICAgICAgICAgIHR5cGUsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICAgICAgcmMgPSAtRUlOVkFM OworICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKIC8qCiAgKiBM b2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20t eDg2L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKaW5kZXggNjg1NzY1MWRiMS4uNzQ4 MDM0MTI0MCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCisrKyBiL3hlbi9p bmNsdWRlL2FzbS14ODYvbW0uaApAQCAtMzAyLDkgKzMwMiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCAqX19wYWdlX3RvX3ZpcnQoY29uc3Qgc3RydWN0IHBhZ2VfaW5mbyAqcGcpCiAgICAgICAgICAg ICAgICAgICAgIChQQUdFX1NJWkUgLyAoc2l6ZW9mKCpwZykgJiAtc2l6ZW9mKCpwZykpKSk7CiB9 CiAKLWludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25l ZCBsb25nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0aWJsZSk7Ci0K IGJvb2xfdCBmaWxsX3JvX21wdCh1bnNpZ25lZCBsb25nIG1mbik7CiB2b2lkIHphcF9yb19tcHQo dW5zaWduZWQgbG9uZyBtZm4pOwogCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L3B2 L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L21tLmgKaW5kZXggNjQ4YjI2ZDdkMC4uN2Rl NWVhMmYxMiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oCisrKyBiL3hl bi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaApAQCAtOTUsMTAgKzk1LDE3IEBAIHZvaWQgcHZfYXJj aF9pbml0X21lbW9yeSh2b2lkKTsKIAogaW50IHB2X25ld19ndWVzdF9jcjModW5zaWduZWQgbG9u ZyBwZm4pOwogCitpbnQgcHZfYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Us IHVuc2lnbmVkIGxvbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0 aWJsZSk7CitpbnQgcHZfZnJlZV9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5z aWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlZW1wdGlibGUp OworCiAjZWxzZQogCiAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CiAKKyNpbmNsdWRlIDxhc20vYnVn Lmg+CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdl9nZXRfZ3Vlc3RfZWZmX2wxZSh1bnNpZ25lZCBs b25nIGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDFfcGdl bnRyeV90ICplZmZfbDFlKQoge30KQEAgLTEyNSw2ICsxMzIsMTMgQEAgc3RhdGljIGlubGluZSB2 b2lkIHB2X2FyY2hfaW5pdF9tZW1vcnkodm9pZCkge30KIAogc3RhdGljIGlubGluZSBpbnQgcHZf bmV3X2d1ZXN0X2NyMyh1bnNpZ25lZCBsb25nIHBmbikgeyByZXR1cm4gLUVJTlZBTDsgfQogCitz dGF0aWMgaW5saW5lIGludCBwdl9hbGxvY19wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgcHJlZW1wdGlibGUpCit7IEJVRygpOyByZXR1cm4gLUVJTlZBTDsgfQorc3RhdGlj IGlubGluZSBpbnQgcHZfZnJlZV9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5z aWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBwcmVlbXB0aWJsZSkKK3sgQlVHKCk7IHJldHVybiAtRUlOVkFMOyB9CisKICNlbmRpZgogCiAj ZW5kaWYgLyogX19YODZfUFZfTU1fSF9fICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK