From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v2 1/2] x86: Meltdown band-aid against malicious 64-bit PV guests Date: Mon, 15 Jan 2018 04:06:35 -0700 Message-ID: <5A5C994B020000780019EB94@prv-mh.provo.novell.com> References: <5A5C981A020000780019EB82@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eb2bH-00072M-Ce for xen-devel@lists.xenproject.org; Mon, 15 Jan 2018 11:06:47 +0000 In-Reply-To: <5A5C981A020000780019EB82@prv-mh.provo.novell.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org VGhpcyBpcyBhIHZlcnkgc2ltcGxpc3RpYyBjaGFuZ2UgbGltaXRpbmcgdGhlIGFtb3VudCBvZiBt ZW1vcnkgYSBydW5uaW5nCjY0LWJpdCBQViBndWVzdCBoYXMgbWFwcGVkIChhbmQgaGVuY2UgYXZh aWxhYmxlIGZvciBhdHRhY2tpbmcpOiBPbmx5IHRoZQptYXBwaW5ncyBvZiBzdGFjaywgSURULCBh bmQgVFNTIGFyZSBiZWluZyBjbG9uZWQgZnJvbSB0aGUgZGlyZWN0IG1hcAppbnRvIHBlci1DUFUg cGFnZSB0YWJsZXMuIEd1ZXN0IGNvbnRyb2xsZWQgcGFydHMgb2YgdGhlIHBhZ2UgdGFibGVzIGFy ZQpiZWluZyBjb3BpZWQgaW50byB0aG9zZSBwZXItQ1BVIHBhZ2UgdGFibGVzIHVwb24gZW50cnkg aW50byB0aGUgZ3Vlc3QuCkNyb3NzLXZDUFUgc3luY2hyb25pemF0aW9uIG9mIHRvcCBsZXZlbCBw YWdlIHRhYmxlIGVudHJ5IGNoYW5nZXMgaXMKYmVpbmcgZWZmZWN0ZWQgYnkgZm9yY2luZyBvdGhl ciBhY3RpdmUgdkNQVS1zIG9mIHRoZSBndWVzdCBpbnRvIHRoZQpoeXBlcnZpc29yLgoKVGhlIGNo YW5nZSB0byBjb250ZXh0X3N3aXRjaCgpIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IHRo ZXJlJ3Mgbm8KcmVhc29uIHRvIGtlZXAgc3dpdGNoaW5nIHBhZ2UgdGFibGVzIG9uY2UgYSBQViBn dWVzdCBpcyBiZWluZyBzY2hlZHVsZWQKb3V0LgoKVGhlcmUgaXMgY2VydGFpbmx5IG11Y2ggcm9v bSBmb3IgaW1wcm92ZW1lbnQsIGVzcGVjaWFsbHkgb2YgcGVyZm9ybWFuY2UsCmhlcmUgLSBmaXJz dCBhbmQgZm9yZW1vc3Qgc3VwcHJlc3NpbmcgYWxsIHRoZSBuZWdhdGl2ZSBlZmZlY3RzIG9uIEFN RApzeXN0ZW1zLiBCdXQgaW4gdGhlIGludGVyZXN0IG9mIGJhY2twb3J0YWJpbGl0eSAoaW5jbHVk aW5nIHRvIHJlYWxseSBvbGQKaHlwZXJ2aXNvcnMsIHdoaWNoIG1heSBub3QgZXZlbiBoYXZlIGFs dGVybmF0aXZlIHBhdGNoaW5nKSBhbnkgc3VjaCBpcwpiZWluZyBsZWZ0IG91dCBoZXJlLgoKU2ln bmVkLW9mZi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgotLS0KdjI6IFVzZSBz ZW5zaWJsZSBudW1iZXJzIGZvciB0aGUgcmVnaXN0ZXIgY2xhc3NpZmljYXRpb24gY29uc3RhbnRz IGFsc28KICAgIGZvciB0aGUgbG93IDggcmVnaXN0ZXJzLiBJbnNlcnQgJ3InIGludG8gdGhlaXIg bmFtZXMgdG8gbWFrZSB0aGVpcgogICAgcHVycG9zZSBtb3JlIGNsZWFyLiBVc2UgInN1YiIgaW5z dGVhZCBvZiAiYWRkIiB3aGVuIGFkZGluZyBhbgogICAgaW1tZWRpYXRlIG9mIDEyOC4gRGVmZXIg c3luYyBJUEkgaW4gZG9fbW11X3VwZGF0ZSgpIHVudGlsIHRoZSBlbmQgb2YKICAgIHRoZSBtYWlu IGxvb3AuIFVzZSBmbHVzaCBJUEkgdGhlcmUgaW5zdGVhZCBldmVudCBjaGVjayBvbmUuIE1ha2UK ICAgIHNldHVwIGZ1bmN0aW9ucyByZXR1cm4gYSBwcm9wZXIgZXJyb3IgY29kZS4gVXNlIGJldHRl ciBzdWl0ZWQgbG9jYWwKICAgIHZhcmlhYmxlcyBpbiBjbG9uZV9tYXBwaW5nKCkuIEFkZCBjb21t ZW50IHRvIG5ldyBzdHJ1Y3QgY3B1X2luZm8KICAgIGZpZWxkcy4KLS0tClRoaXMgYWxzbyB3YW50 cyBBbmRyZXcncyAiW1BBVENIIFJGQyAxMS80NF0geDg2L3B0LXNoYWRvdzogQWx3YXlzIHNldApf UEFHRV9BQ0NFU1NFRCBvbiBMNGUgdXBkYXRlcyIuCi0tLQpCYWNrcG9ydGluZyBub3RlczoKLSBU aGlzIG5lZWRzIGY5ZWI3NDc4OWEgKCJ4ODYvZW50cnk6IFJlbW92ZSBzdXBwb3J0IGZvciBwYXJ0 aWFsCiAgY3B1X3VzZXJfcmVncyBmcmFtZXMiKSBhcyBhIHByZXJlcSwgZHVlIHRvIHRoZSB1c2Vz IG9mICVyMTQgYW5kICVyMTUuCiAgQnV0IHRoYXQncyBpbnRlbmRlZCB0byBiZSBiYWNrcG9ydGVk IGFueXdheSAoZm9yIFNwZWN0cmUvU1AyKS4KLSBUaGUgdXNlIG9mICJyb290IiBpbnN0ZWFkIG9m ICJsNCIgaGVyZSBpcyBtYWlubHkgdG8gbm90IG1ha2UgNS1sZXZlbAogIHBhZ2UgdGFibGUgYWRk aXRpb25zIGFueSBoYXJkZXIuIEluIGJhY2twb3J0cyAibDQiIHNob3VsZCBwcm9iYWJseSBiZQog IHByZWZlcnJlZC4KLS0tCkZvbGxvdy11cCBub3RlczoKLSB1c2UgYWx0ZXJuYXRpdmVzIHBhdGNo aW5nIGZvciBmdWxseSBzdXBwcmVzc2luZyBwZXJmb3JtYW5jZSBlZmZlY3RzCiAgd2hlbiBkaXNh YmxlZAotIGNoZWNrIHdoZXRoZXIgcnVubmluZyBnbG9iYWxseSB3aXRoIENSNC5QR0UgY2xlYXIg aGVscHMgb3ZlcmFsbAogIHBlcmZvcm1hbmNlCgotLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluLmMK KysrIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCkBAIC0xNTExLDYgKzE1MTEsOSBAQCB2b2lkIHBh cmF2aXJ0X2N0eHRfc3dpdGNoX3RvKHN0cnVjdCB2Y3B1CiB7CiAgICAgdW5zaWduZWQgbG9uZyBj cjQ7CiAKKyAgICB0aGlzX2NwdShyb290X3BndClbcm9vdF90YWJsZV9vZmZzZXQoUEVSRE9NQUlO X1ZJUlRfU1RBUlQpXSA9CisgICAgICAgIGw0ZV9mcm9tX3BhZ2Uodi0+ZG9tYWluLT5hcmNoLnBl cmRvbWFpbl9sM19wZywgX19QQUdFX0hZUEVSVklTT1JfUlcpOworCiAgICAgY3I0ID0gcHZfZ3Vl c3RfY3I0X3RvX3JlYWxfY3I0KHYpOwogICAgIGlmICggdW5saWtlbHkoY3I0ICE9IHJlYWRfY3I0 KCkpICkKICAgICAgICAgd3JpdGVfY3I0KGNyNCk7CkBAIC0xNjgyLDYgKzE2ODUsOCBAQCB2b2lk IGNvbnRleHRfc3dpdGNoKHN0cnVjdCB2Y3B1ICpwcmV2LCBzCiAKICAgICBBU1NFUlQobG9jYWxf aXJxX2lzX2VuYWJsZWQoKSk7CiAKKyAgICBnZXRfY3B1X2luZm8oKS0+eGVuX2NyMyA9IDA7CisK ICAgICBjcHVtYXNrX2NvcHkoJmRpcnR5X21hc2ssIG5leHQtPnZjcHVfZGlydHlfY3B1bWFzayk7 CiAgICAgLyogQWxsb3cgYXQgbW9zdCBvbmUgQ1BVIGF0IGEgdGltZSB0byBiZSBkaXJ0eS4gKi8K ICAgICBBU1NFUlQoY3B1bWFza193ZWlnaHQoJmRpcnR5X21hc2spIDw9IDEpOwotLS0gYS94ZW4v YXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtMzUyMCw2ICszNTIwLDcg QEAgbG9uZyBkb19tbXVfdXBkYXRlKAogICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudCwg KnYgPSBjdXJyOwogICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW4sICpwdF9vd25lciA9 IGQsICpwZ19vd25lcjsKICAgICBtZm5fdCBtYXBfbWZuID0gSU5WQUxJRF9NRk47CisgICAgYm9v bCBzeW5jX2d1ZXN0ID0gZmFsc2U7CiAgICAgdWludDMyX3QgeHNtX25lZWRlZCA9IDA7CiAgICAg dWludDMyX3QgeHNtX2NoZWNrZWQgPSAwOwogICAgIGludCByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFi bGUoY3Vycik7CkBAIC0zNjgzLDYgKzM2ODQsOCBAQCBsb25nIGRvX21tdV91cGRhdGUoCiAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2Rf bDRfZW50cnkodmEsIGw0ZV9mcm9tX2ludHB0ZShyZXEudmFsKSwgbWZuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9B RCwgdik7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXJjICkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHN5bmNfZ3Vlc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAog ICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dyaXRhYmxlX3BhZ2U6CkBAIC0zNzg3LDYgKzM3OTAs MjQgQEAgbG9uZyBkb19tbXVfdXBkYXRlKAogICAgIGlmICggdmEgKQogICAgICAgICB1bm1hcF9k b21haW5fcGFnZSh2YSk7CiAKKyAgICBpZiAoIHN5bmNfZ3Vlc3QgKQorICAgIHsKKyAgICAgICAg LyoKKyAgICAgICAgICogRm9yY2Ugb3RoZXIgdkNQVS1zIG9mIHRoZSBhZmZlY3RlZCBndWVzdCB0 byBwaWNrIHVwIEw0IGVudHJ5CisgICAgICAgICAqIGNoYW5nZXMgKGlmIGFueSkuIElzc3VlIGEg Zmx1c2ggSVBJIHdpdGggZW1wdHkgb3BlcmF0aW9uIG1hc2sgdG8KKyAgICAgICAgICogZmFjaWxp dGF0ZSB0aGlzIChpbmNsdWRpbmcgb3Vyc2VsdmVzIHdhaXRpbmcgZm9yIHRoZSBJUEkgdG8KKyAg ICAgICAgICogYWN0dWFsbHkgaGF2ZSBhcnJpdmVkKS4gVXRpbGl6ZSB0aGUgZmFjdCB0aGF0IEZM VVNIX1ZBX1ZBTElEIGlzCisgICAgICAgICAqIG1lYW5pbmdsZXNzIHdpdGhvdXQgRkxVU0hfQ0FD SEUsIGJ1dCB3aWxsIGFsbG93IHRvIHBhc3MgdGhlIG5vLW9wCisgICAgICAgICAqIGNoZWNrIGlu IGZsdXNoX2FyZWFfbWFzaygpLgorICAgICAgICAgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGNw dSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKyAgICAgICAgY3B1bWFza190ICptYXNrID0gcGVyX2Nw dShzY3JhdGNoX2NwdW1hc2ssIGNwdSk7CisKKyAgICAgICAgY3B1bWFza19hbmRub3QobWFzaywg cHRfb3duZXItPmRvbWFpbl9kaXJ0eV9jcHVtYXNrLCBjcHVtYXNrX29mKGNwdSkpOworICAgICAg ICBpZiAoICFjcHVtYXNrX2VtcHR5KG1hc2spICkKKyAgICAgICAgICAgIGZsdXNoX2FyZWFfbWFz ayhtYXNrLCBaRVJPX0JMT0NLX1BUUiwgRkxVU0hfVkFfVkFMSUQpOworICAgIH0KKwogICAgIHBl cmZjX2FkZChudW1fcGFnZV91cGRhdGVzLCBpKTsKIAogIG91dDoKLS0tIGEveGVuL2FyY2gveDg2 L3NtcGJvb3QuYworKysgYi94ZW4vYXJjaC94ODYvc21wYm9vdC5jCkBAIC0zMjcsNiArMzI3LDkg QEAgdm9pZCBzdGFydF9zZWNvbmRhcnkodm9pZCAqdW51c2VkKQogICAgICAqLwogICAgIHNwaW5f ZGVidWdfZGlzYWJsZSgpOwogCisgICAgZ2V0X2NwdV9pbmZvKCktPnhlbl9jcjMgPSAwOworICAg IGdldF9jcHVfaW5mbygpLT5wdl9jcjMgPSBfX3BhKHRoaXNfY3B1KHJvb3RfcGd0KSk7CisKICAg ICBsb2FkX3N5c3RlbV90YWJsZXMoKTsKIAogICAgIC8qIEZ1bGwgZXhjZXB0aW9uIHN1cHBvcnQg ZnJvbSBoZXJlIG9uIGluLiAqLwpAQCAtNjMzLDYgKzYzNiwxODcgQEAgdm9pZCBjcHVfZXhpdF9j bGVhcih1bnNpZ25lZCBpbnQgY3B1KQogICAgIHNldF9jcHVfc3RhdGUoQ1BVX1NUQVRFX0RFQUQp OwogfQogCitzdGF0aWMgaW50IGNsb25lX21hcHBpbmcoY29uc3Qgdm9pZCAqcHRyLCByb290X3Bn ZW50cnlfdCAqcnB0KQoreworICAgIHVuc2lnbmVkIGxvbmcgbGluZWFyID0gKHVuc2lnbmVkIGxv bmcpcHRyLCBwZm47CisgICAgdW5zaWduZWQgaW50IGZsYWdzOworICAgIGwzX3BnZW50cnlfdCAq cGwzZSA9IGw0ZV90b19sM2UoaWRsZV9wZ190YWJsZVtyb290X3RhYmxlX29mZnNldChsaW5lYXIp XSkgKworICAgICAgICAgICAgICAgICAgICAgICAgIGwzX3RhYmxlX29mZnNldChsaW5lYXIpOwor ICAgIGwyX3BnZW50cnlfdCAqcGwyZTsKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7CisKKyAgICBp ZiAoIGxpbmVhciA8IERJUkVDVE1BUF9WSVJUX1NUQVJUICkKKyAgICAgICAgcmV0dXJuIDA7CisK KyAgICBmbGFncyA9IGwzZV9nZXRfZmxhZ3MoKnBsM2UpOworICAgIEFTU0VSVChmbGFncyAmIF9Q QUdFX1BSRVNFTlQpOworICAgIGlmICggZmxhZ3MgJiBfUEFHRV9QU0UgKQorICAgIHsKKyAgICAg ICAgcGZuID0gKGwzZV9nZXRfcGZuKCpwbDNlKSAmIH4oKDFVTCA8PCAoMiAqIFBBR0VUQUJMRV9P UkRFUikpIC0gMSkpIHwKKyAgICAgICAgICAgICAgKFBGTl9ET1dOKGxpbmVhcikgJiAoKDFVTCA8 PCAoMiAqIFBBR0VUQUJMRV9PUkRFUikpIC0gMSkpOworICAgICAgICBmbGFncyAmPSB+X1BBR0Vf UFNFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwbDJlID0gbDNlX3RvX2wyZSgq cGwzZSkgKyBsMl90YWJsZV9vZmZzZXQobGluZWFyKTsKKyAgICAgICAgZmxhZ3MgPSBsMmVfZ2V0 X2ZsYWdzKCpwbDJlKTsKKyAgICAgICAgQVNTRVJUKGZsYWdzICYgX1BBR0VfUFJFU0VOVCk7Cisg ICAgICAgIGlmICggZmxhZ3MgJiBfUEFHRV9QU0UgKQorICAgICAgICB7CisgICAgICAgICAgICBw Zm4gPSAobDJlX2dldF9wZm4oKnBsMmUpICYgfigoMVVMIDw8IFBBR0VUQUJMRV9PUkRFUikgLSAx KSkgfAorICAgICAgICAgICAgICAgICAgKFBGTl9ET1dOKGxpbmVhcikgJiAoKDFVTCA8PCBQQUdF VEFCTEVfT1JERVIpIC0gMSkpOworICAgICAgICAgICAgZmxhZ3MgJj0gfl9QQUdFX1BTRTsKKyAg ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBsMWUgPSBsMmVf dG9fbDFlKCpwbDJlKSArIGwxX3RhYmxlX29mZnNldChsaW5lYXIpOworICAgICAgICAgICAgZmxh Z3MgPSBsMWVfZ2V0X2ZsYWdzKCpwbDFlKTsKKyAgICAgICAgICAgIGlmICggIShmbGFncyAmIF9Q QUdFX1BSRVNFTlQpICkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHBm biA9IGwxZV9nZXRfcGZuKCpwbDFlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggIShy b290X2dldF9mbGFncyhycHRbcm9vdF90YWJsZV9vZmZzZXQobGluZWFyKV0pICYgX1BBR0VfUFJF U0VOVCkgKQorICAgIHsKKyAgICAgICAgcGwzZSA9IGFsbG9jX3hlbl9wYWdldGFibGUoKTsKKyAg ICAgICAgaWYgKCAhcGwzZSApCisgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAg Y2xlYXJfcGFnZShwbDNlKTsKKyAgICAgICAgbDRlX3dyaXRlKCZycHRbcm9vdF90YWJsZV9vZmZz ZXQobGluZWFyKV0sCisgICAgICAgICAgICAgICAgICBsNGVfZnJvbV9wYWRkcihfX3BhKHBsM2Up LCBfX1BBR0VfSFlQRVJWSVNPUikpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHBsM2UgPSBs NGVfdG9fbDNlKHJwdFtyb290X3RhYmxlX29mZnNldChsaW5lYXIpXSk7CisKKyAgICBwbDNlICs9 IGwzX3RhYmxlX29mZnNldChsaW5lYXIpOworCisgICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MoKnBs M2UpICYgX1BBR0VfUFJFU0VOVCkgKQorICAgIHsKKyAgICAgICAgcGwyZSA9IGFsbG9jX3hlbl9w YWdldGFibGUoKTsKKyAgICAgICAgaWYgKCAhcGwyZSApCisgICAgICAgICAgICByZXR1cm4gLUVO T01FTTsKKyAgICAgICAgY2xlYXJfcGFnZShwbDJlKTsKKyAgICAgICAgbDNlX3dyaXRlKHBsM2Us IGwzZV9mcm9tX3BhZGRyKF9fcGEocGwyZSksIF9fUEFHRV9IWVBFUlZJU09SKSk7CisgICAgfQor ICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGwzZV9nZXRfZmxhZ3MoKnBsM2UpICYg X1BBR0VfUFNFKSk7CisgICAgICAgIHBsMmUgPSBsM2VfdG9fbDJlKCpwbDNlKTsKKyAgICB9CisK KyAgICBwbDJlICs9IGwyX3RhYmxlX29mZnNldChsaW5lYXIpOworCisgICAgaWYgKCAhKGwyZV9n ZXRfZmxhZ3MoKnBsMmUpICYgX1BBR0VfUFJFU0VOVCkgKQorICAgIHsKKyAgICAgICAgcGwxZSA9 IGFsbG9jX3hlbl9wYWdldGFibGUoKTsKKyAgICAgICAgaWYgKCAhcGwxZSApCisgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgY2xlYXJfcGFnZShwbDFlKTsKKyAgICAgICAgbDJl X3dyaXRlKHBsMmUsIGwyZV9mcm9tX3BhZGRyKF9fcGEocGwxZSksIF9fUEFHRV9IWVBFUlZJU09S KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGwyZV9nZXRfZmxh Z3MoKnBsMmUpICYgX1BBR0VfUFNFKSk7CisgICAgICAgIHBsMWUgPSBsMmVfdG9fbDFlKCpwbDJl KTsKKyAgICB9CisKKyAgICBwbDFlICs9IGwxX3RhYmxlX29mZnNldChsaW5lYXIpOworCisgICAg aWYgKCBsMWVfZ2V0X2ZsYWdzKCpwbDFlKSAmIF9QQUdFX1BSRVNFTlQgKQorICAgIHsKKyAgICAg ICAgQVNTRVJUKGwxZV9nZXRfcGZuKCpwbDFlKSA9PSBwZm4pOworICAgICAgICBBU1NFUlQobDFl X2dldF9mbGFncygqcGwxZSkgPT0gZmxhZ3MpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGwx ZV93cml0ZShwbDFlLCBsMWVfZnJvbV9wZm4ocGZuLCBmbGFncykpOworCisgICAgcmV0dXJuIDA7 Cit9CisKK0RFRklORV9QRVJfQ1BVKHJvb3RfcGdlbnRyeV90ICosIHJvb3RfcGd0KTsKKworc3Rh dGljIGludCBzZXR1cF9jcHVfcm9vdF9wZ3QodW5zaWduZWQgaW50IGNwdSkKK3sKKyAgICByb290 X3BnZW50cnlfdCAqcnB0ID0gYWxsb2NfeGVuX3BhZ2V0YWJsZSgpOworICAgIHVuc2lnbmVkIGlu dCBvZmY7CisgICAgaW50IHJjOworCisgICAgaWYgKCAhcnB0ICkKKyAgICAgICAgcmV0dXJuIC1F Tk9NRU07CisKKyAgICBjbGVhcl9wYWdlKHJwdCk7CisgICAgcGVyX2NwdShyb290X3BndCwgY3B1 KSA9IHJwdDsKKworICAgIHJwdFtyb290X3RhYmxlX29mZnNldChST19NUFRfVklSVF9TVEFSVCld ID0KKyAgICAgICAgaWRsZV9wZ190YWJsZVtyb290X3RhYmxlX29mZnNldChST19NUFRfVklSVF9T VEFSVCldOworICAgIC8qIFNIX0xJTkVBUl9QVCBpbnNlcnRlZCB0b2dldGhlciB3aXRoIGd1ZXN0 IG1hcHBpbmdzLiAqLworICAgIC8qIFBFUkRPTUFJTiBpbnNlcnRlZCBkdXJpbmcgY29udGV4dCBz d2l0Y2guICovCisgICAgcnB0W3Jvb3RfdGFibGVfb2Zmc2V0KFhFTl9WSVJUX1NUQVJUKV0gPQor ICAgICAgICBpZGxlX3BnX3RhYmxlW3Jvb3RfdGFibGVfb2Zmc2V0KFhFTl9WSVJUX1NUQVJUKV07 CisKKyAgICAvKiBJbnN0YWxsIGRpcmVjdCBtYXAgcGFnZSB0YWJsZSBlbnRyaWVzIGZvciBzdGFj aywgSURULCBhbmQgVFNTLiAqLworICAgIGZvciAoIG9mZiA9IHJjID0gMDsgIXJjICYmIG9mZiA8 IFNUQUNLX1NJWkU7IG9mZiArPSBQQUdFX1NJWkUgKQorICAgICAgICByYyA9IGNsb25lX21hcHBp bmcoX192YShfX3BhKHN0YWNrX2Jhc2VbY3B1XSkpICsgb2ZmLCBycHQpOworCisgICAgaWYgKCAh cmMgKQorICAgICAgICByYyA9IGNsb25lX21hcHBpbmcoaWR0X3RhYmxlc1tjcHVdLCBycHQpOwor ICAgIGlmICggIXJjICkKKyAgICAgICAgcmMgPSBjbG9uZV9tYXBwaW5nKCZwZXJfY3B1KGluaXRf dHNzLCBjcHUpLCBycHQpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBjbGVh bnVwX2NwdV9yb290X3BndCh1bnNpZ25lZCBpbnQgY3B1KQoreworICAgIHJvb3RfcGdlbnRyeV90 ICpycHQgPSBwZXJfY3B1KHJvb3RfcGd0LCBjcHUpOworICAgIHVuc2lnbmVkIGludCByOworCisg ICAgaWYgKCAhcnB0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGVyX2NwdShyb290X3BndCwg Y3B1KSA9IE5VTEw7CisKKyAgICBmb3IgKCByID0gcm9vdF90YWJsZV9vZmZzZXQoRElSRUNUTUFQ X1ZJUlRfU1RBUlQpOworICAgICAgICAgIHIgPCByb290X3RhYmxlX29mZnNldChIWVBFUlZJU09S X1ZJUlRfRU5EKTsgKytyICkKKyAgICB7CisgICAgICAgIGwzX3BnZW50cnlfdCAqbDN0OworICAg ICAgICB1bnNpZ25lZCBpbnQgaTM7CisKKyAgICAgICAgaWYgKCAhKHJvb3RfZ2V0X2ZsYWdzKHJw dFtyXSkgJiBfUEFHRV9QUkVTRU5UKSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICBsM3QgPSBsNGVfdG9fbDNlKHJwdFtyXSk7CisKKyAgICAgICAgZm9yICggaTMgPSAwOyBpMyA8 IEwzX1BBR0VUQUJMRV9FTlRSSUVTOyArK2kzICkKKyAgICAgICAgeworICAgICAgICAgICAgbDJf cGdlbnRyeV90ICpsMnQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTI7CisKKyAgICAgICAg ICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzdFtpM10pICYgX1BBR0VfUFJFU0VOVCkgKQorICAg ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBU1NFUlQoIShsM2VfZ2V0X2Zs YWdzKGwzdFtpM10pICYgX1BBR0VfUFNFKSk7CisgICAgICAgICAgICBsMnQgPSBsM2VfdG9fbDJl KGwzdFtpM10pOworCisgICAgICAgICAgICBmb3IgKCBpMiA9IDA7IGkyIDwgTDJfUEFHRVRBQkxF X0VOVFJJRVM7ICsraTIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggIShs MmVfZ2V0X2ZsYWdzKGwydFtpMl0pICYgX1BBR0VfUFJFU0VOVCkgKQorICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIEFTU0VSVCghKGwyZV9nZXRfZmxhZ3Mo bDJ0W2kyXSkgJiBfUEFHRV9QU0UpKTsKKyAgICAgICAgICAgICAgICBmcmVlX3hlbl9wYWdldGFi bGUobDJlX3RvX2wxZShsMnRbaTJdKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZy ZWVfeGVuX3BhZ2V0YWJsZShsMnQpOworICAgICAgICB9CisKKyAgICAgICAgZnJlZV94ZW5fcGFn ZXRhYmxlKGwzdCk7CisgICAgfQorCisgICAgZnJlZV94ZW5fcGFnZXRhYmxlKHJwdCk7Cit9CisK IHN0YXRpYyB2b2lkIGNwdV9zbXBib290X2ZyZWUodW5zaWduZWQgaW50IGNwdSkKIHsKICAgICB1 bnNpZ25lZCBpbnQgb3JkZXIsIHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1KTsKQEAgLTY3MSw2 ICs4NTUsOCBAQCBzdGF0aWMgdm9pZCBjcHVfc21wYm9vdF9mcmVlKHVuc2lnbmVkIGluCiAgICAg ICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZShtZm5fdG9fcGFnZShtZm4pKTsKICAgICB9CiAKKyAg ICBjbGVhbnVwX2NwdV9yb290X3BndChjcHUpOworCiAgICAgb3JkZXIgPSBnZXRfb3JkZXJfZnJv bV9wYWdlcyhOUl9SRVNFUlZFRF9HRFRfUEFHRVMpOwogICAgIGZyZWVfeGVuaGVhcF9wYWdlcyhw ZXJfY3B1KGdkdF90YWJsZSwgY3B1KSwgb3JkZXIpOwogCkBAIC03MjcsNiArOTEzLDExIEBAIHN0 YXRpYyBpbnQgY3B1X3NtcGJvb3RfYWxsb2ModW5zaWduZWQgaW4KICAgICBzZXRfaXN0KCZpZHRf dGFibGVzW2NwdV1bVFJBUF9ubWldLCAgICAgICAgICAgSVNUX05PTkUpOwogICAgIHNldF9pc3Qo JmlkdF90YWJsZXNbY3B1XVtUUkFQX21hY2hpbmVfY2hlY2tdLCBJU1RfTk9ORSk7CiAKKyAgICBy YyA9IHNldHVwX2NwdV9yb290X3BndChjcHUpOworICAgIGlmICggcmMgKQorICAgICAgICBnb3Rv IG91dDsKKyAgICByYyA9IC1FTk9NRU07CisKICAgICBmb3IgKCBzdHViX3BhZ2UgPSAwLCBpID0g Y3B1ICYgfihTVFVCU19QRVJfUEFHRSAtIDEpOwogICAgICAgICAgIGkgPCBucl9jcHVfaWRzICYm IGkgPD0gKGNwdSB8IChTVFVCU19QRVJfUEFHRSAtIDEpKTsgKytpICkKICAgICAgICAgaWYgKCBj cHVfb25saW5lKGkpICYmIGNwdV90b19ub2RlKGkpID09IG5vZGUgKQpAQCAtNzg2LDYgKzk3Nyw4 IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1X3NtcGJvb3QKIAogdm9pZCBfX2lu aXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CisgICAgaW50IHJj OworCiAgICAgcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfc21wYm9vdF9uZmIpOwogCiAgICAg bXRycl9hcHNfc3luY19iZWdpbigpOwpAQCAtNzk5LDYgKzk5MiwxMSBAQCB2b2lkIF9faW5pdCBz bXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGluCiAKICAgICBzdGFja19iYXNlWzBdID0gc3RhY2tf c3RhcnQ7CiAKKyAgICByYyA9IHNldHVwX2NwdV9yb290X3BndCgwKTsKKyAgICBpZiAoIHJjICkK KyAgICAgICAgcGFuaWMoIkVycm9yICVkIHNldHRpbmcgdXAgUFYgcm9vdCBwYWdlIHRhYmxlXG4i LCByYyk7CisgICAgZ2V0X2NwdV9pbmZvKCktPnB2X2NyMyA9IF9fcGEocGVyX2NwdShyb290X3Bn dCwgMCkpOworCiAgICAgc2V0X25yX3NvY2tldHMoKTsKIAogICAgIHNvY2tldF9jcHVtYXNrID0g eHphbGxvY19hcnJheShjcHVtYXNrX3QgKiwgbnJfc29ja2V0cyk7CkBAIC04NjcsNiArMTA2NSw4 IEBAIHZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiAjaWYgTlJfQ1BVUyA+ IDIgKiBCSVRTX1BFUl9MT05HCiAgICAgcGVyX2NwdShzY3JhdGNoX2NwdW1hc2ssIGNwdSkgPSAm c2NyYXRjaF9jcHUwbWFzazsKICNlbmRpZgorCisgICAgZ2V0X2NwdV9pbmZvKCktPnhlbl9jcjMg PSAwOwogfQogCiBzdGF0aWMgdm9pZAotLS0gYS94ZW4vYXJjaC94ODYveDg2XzY0L2FzbS1vZmZz ZXRzLmMKKysrIGIveGVuL2FyY2gveDg2L3g4Nl82NC9hc20tb2Zmc2V0cy5jCkBAIC0xMzcsNiAr MTM3LDggQEAgdm9pZCBfX2R1bW15X18odm9pZCkKICAgICBPRkZTRVQoQ1BVSU5GT19wcm9jZXNz b3JfaWQsIHN0cnVjdCBjcHVfaW5mbywgcHJvY2Vzc29yX2lkKTsKICAgICBPRkZTRVQoQ1BVSU5G T19jdXJyZW50X3ZjcHUsIHN0cnVjdCBjcHVfaW5mbywgY3VycmVudF92Y3B1KTsKICAgICBPRkZT RVQoQ1BVSU5GT19jcjQsIHN0cnVjdCBjcHVfaW5mbywgY3I0KTsKKyAgICBPRkZTRVQoQ1BVSU5G T194ZW5fY3IzLCBzdHJ1Y3QgY3B1X2luZm8sIHhlbl9jcjMpOworICAgIE9GRlNFVChDUFVJTkZP X3B2X2NyMywgc3RydWN0IGNwdV9pbmZvLCBwdl9jcjMpOwogICAgIERFRklORShDUFVJTkZPX3Np emVvZiwgc2l6ZW9mKHN0cnVjdCBjcHVfaW5mbykpOwogICAgIEJMQU5LKCk7CiAKLS0tIGEveGVu L2FyY2gveDg2L3g4Nl82NC9jb21wYXQvZW50cnkuUworKysgYi94ZW4vYXJjaC94ODYveDg2XzY0 L2NvbXBhdC9lbnRyeS5TCkBAIC0xOTksNiArMTk5LDE3IEBAIEVOVFJZKGNzdGFyX2VudGVyKQog ICAgICAgICBwdXNocSAkMAogICAgICAgICBtb3ZsICAkVFJBUF9zeXNjYWxsLCA0KCVyc3ApCiAg ICAgICAgIFNBVkVfQUxMCisKKyAgICAgICAgR0VUX1NUQUNLX0VORChieCkKKyAgICAgICAgbW92 ICAgU1RBQ0tfQ1BVSU5GT19GSUVMRCh4ZW5fY3IzKSglcmJ4KSwgJXJjeAorICAgICAgICBuZWcg ICAlcmN4CitVTkxJS0VMWV9TVEFSVChueiwgY3N0YXJfY3IzKQorICAgICAgICBtb3YgICAlcmN4 LCBTVEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyYngpCisgICAgICAgIG5lZyAgICVyY3gK KyAgICAgICAgd3JpdGVfY3IzIHJjeCwgcmRpLCByc2kKKyAgICAgICAgbW92cSAgJDAsIFNUQUNL X0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXJieCkKK1VOTElLRUxZX0VORChjc3Rhcl9jcjMpCisK ICAgICAgICAgR0VUX0NVUlJFTlQoYngpCiAgICAgICAgIG1vdnEgIFZDUFVfZG9tYWluKCVyYngp LCVyY3gKICAgICAgICAgY21wYiAgJDAsRE9NQUlOX2lzXzMyYml0X3B2KCVyY3gpCi0tLSBhL3hl bi9hcmNoL3g4Ni94ODZfNjQvZW50cnkuUworKysgYi94ZW4vYXJjaC94ODYveDg2XzY0L2VudHJ5 LlMKQEAgLTM3LDYgKzM3LDMyIEBAIEVOVFJZKHN3aXRjaF90b19rZXJuZWwpCiAvKiAlcmJ4OiBz dHJ1Y3QgdmNwdSwgaW50ZXJydXB0cyBkaXNhYmxlZCAqLwogcmVzdG9yZV9hbGxfZ3Vlc3Q6CiAg ICAgICAgIEFTU0VSVF9JTlRFUlJVUFRTX0RJU0FCTEVECisKKyAgICAgICAgLyogQ29weSBndWVz dCBtYXBwaW5ncyBhbmQgc3dpdGNoIHRvIHBlci1DUFUgcm9vdCBwYWdlIHRhYmxlLiAqLworICAg ICAgICBtb3YgICAlY3IzLCAlcjkKKyAgICAgICAgR0VUX1NUQUNLX0VORChkeCkKKyAgICAgICAg bW92ICAgU1RBQ0tfQ1BVSU5GT19GSUVMRChwdl9jcjMpKCVyZHgpLCAlcmRpCisgICAgICAgIG1v dmFicyAkUEFERFJfTUFTSyAmIFBBR0VfTUFTSywgJXJzaQorICAgICAgICBtb3ZhYnMgJERJUkVD VE1BUF9WSVJUX1NUQVJULCAlcmN4CisgICAgICAgIG1vdiAgICVyZGksICVyYXgKKyAgICAgICAg YW5kICAgJXJzaSwgJXJkaQorICAgICAgICBhbmQgICAlcjksICVyc2kKKyAgICAgICAgYWRkICAg JXJjeCwgJXJkaQorICAgICAgICBhZGQgICAlcmN4LCAlcnNpCisgICAgICAgIG1vdiAgICRST09U X1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVCwgJWVjeAorICAgICAgICBtb3YgICByb290X3RhYmxl X29mZnNldChTSF9MSU5FQVJfUFRfVklSVF9TVEFSVCkqOCglcnNpKSwgJXI4CisgICAgICAgIG1v diAgICVyOCwgcm9vdF90YWJsZV9vZmZzZXQoU0hfTElORUFSX1BUX1ZJUlRfU1RBUlQpKjgoJXJk aSkKKyAgICAgICAgcmVwIG1vdnNxCisgICAgICAgIG1vdiAgICRST09UX1BBR0VUQUJMRV9FTlRS SUVTIC0gXAorICAgICAgICAgICAgICAgUk9PVF9QQUdFVEFCTEVfTEFTVF9YRU5fU0xPVCAtIDEs ICVlY3gKKyAgICAgICAgc3ViICAgJChST09UX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVCAtIFwK KyAgICAgICAgICAgICAgICBST09UX1BBR0VUQUJMRV9MQVNUX1hFTl9TTE9UIC0gMSkgKiA4LCAl cnNpCisgICAgICAgIHN1YiAgICQoUk9PVF9QQUdFVEFCTEVfRklSU1RfWEVOX1NMT1QgLSBcCisg ICAgICAgICAgICAgICAgUk9PVF9QQUdFVEFCTEVfTEFTVF9YRU5fU0xPVCAtIDEpICogOCwgJXJk aQorICAgICAgICByZXAgbW92c3EKKyAgICAgICAgbW92ICAgJXI5LCBTVEFDS19DUFVJTkZPX0ZJ RUxEKHhlbl9jcjMpKCVyZHgpCisgICAgICAgIHdyaXRlX2NyMyByYXgsIHJkaSwgcnNpCisKICAg ICAgICAgUkVTVE9SRV9BTEwKICAgICAgICAgdGVzdHcgJFRSQVBfc3lzY2FsbCw0KCVyc3ApCiAg ICAgICAgIGp6ICAgIGlyZXRfZXhpdF90b19ndWVzdApAQCAtNzEsNiArOTcsMTggQEAgaXJldF9l eGl0X3RvX2d1ZXN0OgogICAgICAgICBBTElHTgogLyogTm8gc3BlY2lhbCByZWdpc3RlciBhc3N1 bXB0aW9ucy4gKi8KIHJlc3RvcmVfYWxsX3hlbjoKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hl Y2sgd2hldGhlciB3ZSBuZWVkIHRvIHN3aXRjaCB0byB0aGUgcGVyLUNQVSBwYWdlIHRhYmxlcywg aW4KKyAgICAgICAgICogY2FzZSB3ZSByZXR1cm4gdG8gbGF0ZSBQViBleGl0IGNvZGUgKGZyb20g YW4gTk1JIG9yICNNQykuCisgICAgICAgICAqLworICAgICAgICBHRVRfU1RBQ0tfRU5EKGF4KQor ICAgICAgICBtb3YgICBTVEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyYXgpLCAlcmR4Cisg ICAgICAgIG1vdiAgIFNUQUNLX0NQVUlORk9fRklFTEQocHZfY3IzKSglcmF4KSwgJXJheAorICAg ICAgICB0ZXN0ICAlcmR4LCAlcmR4CitVTkxJS0VMWV9TVEFSVChnLCBleGl0X2NyMykKKyAgICAg ICAgd3JpdGVfY3IzIHJheCwgcmRpLCByc2kKK1VOTElLRUxZX0VORChleGl0X2NyMykKKwogICAg ICAgICBSRVNUT1JFX0FMTCBhZGo9OAogICAgICAgICBpcmV0cQogCkBAIC0xMDAsNyArMTM4LDE4 IEBAIEVOVFJZKGxzdGFyX2VudGVyKQogICAgICAgICBwdXNocSAkMAogICAgICAgICBtb3ZsICAk VFJBUF9zeXNjYWxsLCA0KCVyc3ApCiAgICAgICAgIFNBVkVfQUxMCi0gICAgICAgIEdFVF9DVVJS RU5UKGJ4KQorCisgICAgICAgIEdFVF9TVEFDS19FTkQoYngpCisgICAgICAgIG1vdiAgIFNUQUNL X0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXJieCksICVyY3gKKyAgICAgICAgbmVnICAgJXJjeAor ICAgICAgICBqeiAgICAuTGxzdGFyX2NyM19va2F5CisgICAgICAgIG1vdiAgICVyY3gsIFNUQUNL X0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXJieCkKKyAgICAgICAgbmVnICAgJXJjeAorICAgICAg ICB3cml0ZV9jcjMgcmN4LCByZGksIHJzaQorICAgICAgICBtb3ZxICAkMCwgU1RBQ0tfQ1BVSU5G T19GSUVMRCh4ZW5fY3IzKSglcmJ4KQorLkxsc3Rhcl9jcjNfb2theToKKworICAgICAgICBfX0dF VF9DVVJSRU5UKGJ4KQogICAgICAgICB0ZXN0YiAkVEZfa2VybmVsX21vZGUsVkNQVV90aHJlYWRf ZmxhZ3MoJXJieCkKICAgICAgICAganogICAgc3dpdGNoX3RvX2tlcm5lbAogCkBAIC0xOTIsNyAr MjQxLDE4IEBAIEdMT0JBTChzeXNlbnRlcl9lZmxhZ3Nfc2F2ZWQpCiAgICAgICAgIHB1c2hxICQw CiAgICAgICAgIG1vdmwgICRUUkFQX3N5c2NhbGwsIDQoJXJzcCkKICAgICAgICAgU0FWRV9BTEwK LSAgICAgICAgR0VUX0NVUlJFTlQoYngpCisKKyAgICAgICAgR0VUX1NUQUNLX0VORChieCkKKyAg ICAgICAgbW92ICAgU1RBQ0tfQ1BVSU5GT19GSUVMRCh4ZW5fY3IzKSglcmJ4KSwgJXJjeAorICAg ICAgICBuZWcgICAlcmN4CisgICAgICAgIGp6ICAgIC5Mc3lzZV9jcjNfb2theQorICAgICAgICBt b3YgICAlcmN4LCBTVEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyYngpCisgICAgICAgIG5l ZyAgICVyY3gKKyAgICAgICAgd3JpdGVfY3IzIHJjeCwgcmRpLCByc2kKKyAgICAgICAgbW92cSAg JDAsIFNUQUNLX0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXJieCkKKy5Mc3lzZV9jcjNfb2theToK KworICAgICAgICBfX0dFVF9DVVJSRU5UKGJ4KQogICAgICAgICBjbXBiICAkMCxWQ1BVX3N5c2Vu dGVyX2Rpc2FibGVzX2V2ZW50cyglcmJ4KQogICAgICAgICBtb3ZxICBWQ1BVX3N5c2VudGVyX2Fk ZHIoJXJieCksJXJheAogICAgICAgICBzZXRuZSAlY2wKQEAgLTIyOCwxMyArMjg4LDIzIEBAIEVO VFJZKGludDgwX2RpcmVjdF90cmFwKQogICAgICAgICBtb3ZsICAkMHg4MCwgNCglcnNwKQogICAg ICAgICBTQVZFX0FMTAogCisgICAgICAgIEdFVF9TVEFDS19FTkQoYngpCisgICAgICAgIG1vdiAg IFNUQUNLX0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXJieCksICVyY3gKKyAgICAgICAgbmVnICAg JXJjeAorVU5MSUtFTFlfU1RBUlQobnosIGludDgwX2NyMykKKyAgICAgICAgbW92ICAgJXJjeCwg U1RBQ0tfQ1BVSU5GT19GSUVMRCh4ZW5fY3IzKSglcmJ4KQorICAgICAgICBuZWcgICAlcmN4Cisg ICAgICAgIHdyaXRlX2NyMyByY3gsIHJkaSwgcnNpCisgICAgICAgIG1vdnEgICQwLCBTVEFDS19D UFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyYngpCitVTkxJS0VMWV9FTkQoaW50ODBfY3IzKQorCiAg ICAgICAgIGNtcGIgICQwLHVudHJ1c3RlZF9tc2koJXJpcCkKIFVOTElLRUxZX1NUQVJUKG5lLCBt c2lfY2hlY2spCiAgICAgICAgIG1vdmwgICQweDgwLCVlZGkKICAgICAgICAgY2FsbCAgY2hlY2tf Zm9yX3VuZXhwZWN0ZWRfbXNpCiBVTkxJS0VMWV9FTkQobXNpX2NoZWNrKQogCi0gICAgICAgIEdF VF9DVVJSRU5UKGJ4KQorICAgICAgICBfX0dFVF9DVVJSRU5UKGJ4KQogCiAgICAgICAgIC8qIENo ZWNrIHRoYXQgdGhlIGNhbGxiYWNrIGlzIG5vbi1udWxsLiAqLwogICAgICAgICBsZWFxICBWQ1BV X2ludDgwX2JvdW5jZSglcmJ4KSwlcmR4CkBAIC0zOTEsOSArNDYxLDI3IEBAIEVOVFJZKGRvbV9j cmFzaF9zeW5jX2V4dGFibGUpCiAKIEVOVFJZKGNvbW1vbl9pbnRlcnJ1cHQpCiAgICAgICAgIFNB VkVfQUxMIENMQUMKKworICAgICAgICBHRVRfU1RBQ0tfRU5EKDE0KQorICAgICAgICBtb3YgICBT VEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyMTQpLCAlcmN4CisgICAgICAgIG1vdiAgICVy Y3gsICVyMTUKKyAgICAgICAgbmVnICAgJXJjeAorICAgICAgICBqeiAgICAuTGludHJfY3IzX29r YXkKKyAgICAgICAgam5zICAgLkxpbnRyX2NyM19sb2FkCisgICAgICAgIG1vdiAgICVyY3gsIFNU QUNLX0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXIxNCkKKyAgICAgICAgbmVnICAgJXJjeAorLkxp bnRyX2NyM19sb2FkOgorICAgICAgICB3cml0ZV9jcjMgcmN4LCByZGksIHJzaQorICAgICAgICB4 b3IgICAlZWN4LCAlZWN4CisgICAgICAgIG1vdiAgICVyY3gsIFNUQUNLX0NQVUlORk9fRklFTEQo eGVuX2NyMykoJXIxNCkKKyAgICAgICAgdGVzdGIgJDMsIFVSRUdTX2NzKCVyc3ApCisgICAgICAg IGNtb3ZueiAlcmN4LCAlcjE1CisuTGludHJfY3IzX29rYXk6CisKICAgICAgICAgQ1I0X1BWMzJf UkVTVE9SRQogICAgICAgICBtb3ZxICVyc3AsJXJkaQogICAgICAgICBjYWxscSBkb19JUlEKKyAg ICAgICAgbW92ICAgJXIxNSwgU1RBQ0tfQ1BVSU5GT19GSUVMRCh4ZW5fY3IzKSglcjE0KQogICAg ICAgICBqbXAgcmV0X2Zyb21faW50cgogCiAvKiBObyBzcGVjaWFsIHJlZ2lzdGVyIGFzc3VtcHRp b25zLiAqLwpAQCAtNDExLDYgKzQ5OSwyMyBAQCBFTlRSWShwYWdlX2ZhdWx0KQogLyogTm8gc3Bl Y2lhbCByZWdpc3RlciBhc3N1bXB0aW9ucy4gKi8KIEdMT0JBTChoYW5kbGVfZXhjZXB0aW9uKQog ICAgICAgICBTQVZFX0FMTCBDTEFDCisKKyAgICAgICAgR0VUX1NUQUNLX0VORCgxNCkKKyAgICAg ICAgbW92ICAgU1RBQ0tfQ1BVSU5GT19GSUVMRCh4ZW5fY3IzKSglcjE0KSwgJXJjeAorICAgICAg ICBtb3YgICAlcmN4LCAlcjE1CisgICAgICAgIG5lZyAgICVyY3gKKyAgICAgICAganogICAgLkx4 Y3B0X2NyM19va2F5CisgICAgICAgIGpucyAgIC5MeGNwdF9jcjNfbG9hZAorICAgICAgICBtb3Yg ICAlcmN4LCBTVEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyMTQpCisgICAgICAgIG5lZyAg ICVyY3gKKy5MeGNwdF9jcjNfbG9hZDoKKyAgICAgICAgd3JpdGVfY3IzIHJjeCwgcmRpLCByc2kK KyAgICAgICAgeG9yICAgJWVjeCwgJWVjeAorICAgICAgICBtb3YgICAlcmN4LCBTVEFDS19DUFVJ TkZPX0ZJRUxEKHhlbl9jcjMpKCVyMTQpCisgICAgICAgIHRlc3RiICQzLCBVUkVHU19jcyglcnNw KQorICAgICAgICBjbW92bnogJXJjeCwgJXIxNQorLkx4Y3B0X2NyM19va2F5OgorCiBoYW5kbGVf ZXhjZXB0aW9uX3NhdmVkOgogICAgICAgICBHRVRfQ1VSUkVOVChieCkKICAgICAgICAgdGVzdGIg JFg4Nl9FRkxBR1NfSUY+PjgsVVJFR1NfZWZsYWdzKzEoJXJzcCkKQEAgLTQ3NSw2ICs1ODAsNyBA QCBoYW5kbGVfZXhjZXB0aW9uX3NhdmVkOgogICAgICAgICBsZWFxICBleGNlcHRpb25fdGFibGUo JXJpcCksJXJkeAogICAgICAgICBQRVJGQ19JTkNSKGV4Y2VwdGlvbnMsICVyYXgsICVyYngpCiAg ICAgICAgIGNhbGxxICooJXJkeCwlcmF4LDgpCisgICAgICAgIG1vdiAgICVyMTUsIFNUQUNLX0NQ VUlORk9fRklFTEQoeGVuX2NyMykoJXIxNCkKICAgICAgICAgdGVzdGIgJDMsVVJFR1NfY3MoJXJz cCkKICAgICAgICAganogICAgcmVzdG9yZV9hbGxfeGVuCiAgICAgICAgIGxlYXEgIFZDUFVfdHJh cF9ib3VuY2UoJXJieCksJXJkeApAQCAtNTA3LDYgKzYxMyw3IEBAIGV4Y2VwdGlvbl93aXRoX2lu dHNfZGlzYWJsZWQ6CiAgICAgICAgIHJlcDsgIG1vdnNxICAgICAgICAgICAgICAgICAgICAgIyBt YWtlIHJvb20gZm9yIGVjL2V2CiAxOiAgICAgIG1vdnEgIFVSRUdTX2Vycm9yX2NvZGUoJXJzcCks JXJheCAjIGVjL2V2CiAgICAgICAgIG1vdnEgICVyYXgsVVJFR1Nfa2VybmVsX3NpemVvZiglcnNw KQorICAgICAgICBtb3YgICAlcjE1LCBTVEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyMTQp CiAgICAgICAgIGptcCAgIHJlc3RvcmVfYWxsX3hlbiAgICAgICAgICAgIyByZXR1cm4gdG8gZml4 dXAgY29kZQogCiAvKiBObyBzcGVjaWFsIHJlZ2lzdGVyIGFzc3VtcHRpb25zLiAqLwpAQCAtNTg1 LDYgKzY5MiwxNyBAQCBFTlRSWShkb3VibGVfZmF1bHQpCiAgICAgICAgIG1vdmwgICRUUkFQX2Rv dWJsZV9mYXVsdCw0KCVyc3ApCiAgICAgICAgIC8qIFNldCBBQyB0byByZWR1Y2UgY2hhbmNlIG9m IGZ1cnRoZXIgU01BUCBmYXVsdHMgKi8KICAgICAgICAgU0FWRV9BTEwgU1RBQworCisgICAgICAg IEdFVF9TVEFDS19FTkQoYngpCisgICAgICAgIG1vdiAgIFNUQUNLX0NQVUlORk9fRklFTEQoeGVu X2NyMykoJXJieCksICVyYngKKyAgICAgICAgdGVzdCAgJXJieCwgJXJieAorICAgICAgICBqeiAg ICAuTGRibGZfY3IzX29rYXkKKyAgICAgICAgam5zICAgLkxkYmxmX2NyM19sb2FkCisgICAgICAg IG5lZyAgICVyYngKKy5MZGJsZl9jcjNfbG9hZDoKKyAgICAgICAgd3JpdGVfY3IzIHJieCwgcmRp LCByc2kKKy5MZGJsZl9jcjNfb2theToKKwogICAgICAgICBtb3ZxICAlcnNwLCVyZGkKICAgICAg ICAgY2FsbCAgZG9fZG91YmxlX2ZhdWx0CiAgICAgICAgIEJVRyAgIC8qIGRvX2RvdWJsZV9mYXVs dCgpIHNob3VsZG4ndCByZXR1cm4uICovCkBAIC02MDMsMTAgKzcyMSwyOCBAQCBFTlRSWShubWkp CiAgICAgICAgIG1vdmwgICRUUkFQX25taSw0KCVyc3ApCiBoYW5kbGVfaXN0X2V4Y2VwdGlvbjoK ICAgICAgICAgU0FWRV9BTEwgQ0xBQworCisgICAgICAgIEdFVF9TVEFDS19FTkQoMTQpCisgICAg ICAgIG1vdiAgIFNUQUNLX0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXIxNCksICVyY3gKKyAgICAg ICAgbW92ICAgJXJjeCwgJXIxNQorICAgICAgICBuZWcgICAlcmN4CisgICAgICAgIGp6ICAgIC5M aXN0X2NyM19va2F5CisgICAgICAgIGpucyAgIC5MaXN0X2NyM19sb2FkCisgICAgICAgIG1vdiAg ICVyY3gsIFNUQUNLX0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXIxNCkKKyAgICAgICAgbmVnICAg JXJjeAorLkxpc3RfY3IzX2xvYWQ6CisgICAgICAgIHdyaXRlX2NyMyByY3gsIHJkaSwgcnNpCisg ICAgICAgIG1vdnEgICQwLCBTVEFDS19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyMTQpCisuTGlz dF9jcjNfb2theToKKwogICAgICAgICBDUjRfUFYzMl9SRVNUT1JFCiAgICAgICAgIHRlc3RiICQz LFVSRUdTX2NzKCVyc3ApCiAgICAgICAgIGp6ICAgIDFmCi0gICAgICAgIC8qIEludGVycnVwdGVk IGd1ZXN0IGNvbnRleHQuIENvcHkgdGhlIGNvbnRleHQgdG8gc3RhY2sgYm90dG9tLiAqLworICAg ICAgICAvKgorICAgICAgICAgKiBJbnRlcnJ1cHRlZCBndWVzdCBjb250ZXh0LiBDbGVhciB0aGUg cmVzdG9yZSB2YWx1ZSBmb3IgeGVuX2NyMworICAgICAgICAgKiBhbmQgY29weSB0aGUgY29udGV4 dCB0byBzdGFjayBib3R0b20uCisgICAgICAgICAqLworICAgICAgICB4b3IgICAlcjE1LCAlcjE1 CiAgICAgICAgIEdFVF9DUFVJTkZPX0ZJRUxEKGd1ZXN0X2NwdV91c2VyX3JlZ3MsZGkpCiAgICAg ICAgIG1vdnEgICVyc3AsJXJzaQogICAgICAgICBtb3ZsICAkVVJFR1Nfa2VybmVsX3NpemVvZi84 LCVlY3gKQEAgLTYxNiw2ICs3NTIsNyBAQCBoYW5kbGVfaXN0X2V4Y2VwdGlvbjoKICAgICAgICAg bW92emJsIFVSRUdTX2VudHJ5X3ZlY3RvciglcnNwKSwlZWF4CiAgICAgICAgIGxlYXEgIGV4Y2Vw dGlvbl90YWJsZSglcmlwKSwlcmR4CiAgICAgICAgIGNhbGxxICooJXJkeCwlcmF4LDgpCisgICAg ICAgIG1vdiAgICVyMTUsIFNUQUNLX0NQVUlORk9fRklFTEQoeGVuX2NyMykoJXIxNCkKICAgICAg ICAgY21wYiAgJFRSQVBfbm1pLFVSRUdTX2VudHJ5X3ZlY3RvciglcnNwKQogICAgICAgICBqbmUg ICByZXRfZnJvbV9pbnRyCiAKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9hc21fZGVmbnMuaAor KysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2FzbV9kZWZucy5oCkBAIC05Myw5ICs5MywzMCBAQCB2 b2lkIHJldF9mcm9tX2ludHIodm9pZCk7CiAgICAgICAgIFVOTElLRUxZX0RPTkUobXAsIHRhZyk7 ICAgXAogICAgICAgICBfX1VOTElLRUxZX0VORCh0YWcpCiAKKyAgICAgICAgLmVxdSAuTHJheCwg MAorICAgICAgICAuZXF1IC5McmN4LCAxCisgICAgICAgIC5lcXUgLkxyZHgsIDIKKyAgICAgICAg LmVxdSAuTHJieCwgMworICAgICAgICAuZXF1IC5McnNwLCA0CisgICAgICAgIC5lcXUgLkxyYnAs IDUKKyAgICAgICAgLmVxdSAuTHJzaSwgNgorICAgICAgICAuZXF1IC5McmRpLCA3CisgICAgICAg IC5lcXUgLkxyOCwgIDgKKyAgICAgICAgLmVxdSAuTHI5LCAgOQorICAgICAgICAuZXF1IC5McjEw LCAxMAorICAgICAgICAuZXF1IC5McjExLCAxMQorICAgICAgICAuZXF1IC5McjEyLCAxMgorICAg ICAgICAuZXF1IC5McjEzLCAxMworICAgICAgICAuZXF1IC5McjE0LCAxNAorICAgICAgICAuZXF1 IC5McjE1LCAxNQorCiAjZGVmaW5lIFNUQUNLX0NQVUlORk9fRklFTEQoZmllbGQpICgxIC0gQ1BV SU5GT19zaXplb2YgKyBDUFVJTkZPXyMjZmllbGQpCiAjZGVmaW5lIEdFVF9TVEFDS19FTkQocmVn KSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmlmIC5MciMjcmVnID4gODsgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtb3ZxICRTVEFDS19TSVpFLTEsICVyIyNy ZWc7ICAgICAgICAgICAgICBcCisgICAgICAgIC5lbHNlOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgbW92bCAkU1RBQ0tfU0laRS0xLCAlZSMjcmVnOyAgICAg ICAgICAgICAgXAorICAgICAgICAuZW5kaWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCiAgICAgICAgIG9ycSAgJXJzcCwgJXIjI3JlZwogCiAjZGVmaW5lIEdFVF9DUFVJTkZP X0ZJRUxEKGZpZWxkLCByZWcpICAgICAgICAgICAgIFwKQEAgLTE3Nyw2ICsxOTgsMTUgQEAgdm9p ZCByZXRfZnJvbV9pbnRyKHZvaWQpOwogI2RlZmluZSBBU01fU1RBQyBBU01fQUMoU1RBQykKICNk ZWZpbmUgQVNNX0NMQUMgQVNNX0FDKENMQUMpCiAKKy5tYWNybyB3cml0ZV9jcjMgdmFsOnJlcSwg dG1wMTpyZXEsIHRtcDI6cmVxCisgICAgICAgIG1vdiAgICVjcjQsICVcdG1wMQorICAgICAgICBt b3YgICAlXHRtcDEsICVcdG1wMgorICAgICAgICBhbmQgICAkflg4Nl9DUjRfUEdFLCAlXHRtcDEK KyAgICAgICAgbW92ICAgJVx0bXAxLCAlY3I0CisgICAgICAgIG1vdiAgICVcdmFsLCAlY3IzCisg ICAgICAgIG1vdiAgICVcdG1wMiwgJWNyNAorLmVuZG0KKwogI2RlZmluZSBDUjRfUFYzMl9SRVNU T1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg NjY3OiBBU01fTk9QNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICAgICAgIC5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCI7ICAg ICAgICAgICAgICAgICAgXAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2N1cnJlbnQuaAorKysg Yi94ZW4vaW5jbHVkZS9hc20teDg2L2N1cnJlbnQuaApAQCAtNDEsNiArNDEsMTggQEAgc3RydWN0 IGNwdV9pbmZvIHsKICAgICBzdHJ1Y3QgdmNwdSAqY3VycmVudF92Y3B1OwogICAgIHVuc2lnbmVk IGxvbmcgcGVyX2NwdV9vZmZzZXQ7CiAgICAgdW5zaWduZWQgbG9uZyBjcjQ7CisgICAgLyoKKyAg ICAgKiBPZiB0aGUgdHdvIGZvbGxvd2luZyBmaWVsZHMgdGhlIGxhdHRlciBpcyBiZWluZyBzZXQg dG8gdGhlIENSMyB2YWx1ZQorICAgICAqIHRvIGJlIHVzZWQgb24gdGhlIGdpdmVuIHBDUFUgZm9y IGxvYWRpbmcgd2hlbmV2ZXIgNjQtYml0IFBWIGd1ZXN0CisgICAgICogY29udGV4dCBpcyBiZWlu ZyBlbnRlcmVkLiBUaGUgdmFsdWUgbmV2ZXIgY2hhbmdlcyBvbmNlIHNldC4KKyAgICAgKiBUaGUg Zm9ybWVyIGlzIHRoZSB2YWx1ZSB0byByZXN0b3JlIHdoZW4gcmUtZW50ZXJpbmcgWGVuLCBpZiBh bnkuIElPVworICAgICAqIGl0cyB2YWx1ZSBiZWluZyB6ZXJvIG1lYW5zIHRoZXJlJ3Mgbm90aGlu ZyB0byByZXN0b3JlLiBIb3dldmVyLCBpdHMKKyAgICAgKiB2YWx1ZSBjYW4gYWxzbyBiZSBuZWdh dGl2ZSwgaW5kaWNhdGluZyB0byB0aGUgZXhpdC10by1YZW4gY29kZSB0aGF0CisgICAgICogcmVz dG9yaW5nIGlzIG5vdCBuZWNlc3NhcnksIGJ1dCBhbGxvd2luZyBhbnkgbmVzdGVkIGVudHJ5IGNv ZGUgcGF0aHMKKyAgICAgKiB0byBzdGlsbCBrbm93IHRoZSB2YWx1ZSB0byBwdXQgYmFjayBpbnRv IENSMy4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nIHhlbl9jcjM7CisgICAgdW5zaWduZWQg bG9uZyBwdl9jcjM7CiAgICAgLyogZ2V0X3N0YWNrX2JvdHRvbSgpIG11c3QgYmUgMTYtYnl0ZSBh bGlnbmVkICovCiB9OwogCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKKysr IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaApAQCAtNDYyLDYgKzQ2Miw3IEBAIGV4 dGVybiBpZHRfZW50cnlfdCBpZHRfdGFibGVbXTsKIGV4dGVybiBpZHRfZW50cnlfdCAqaWR0X3Rh Ymxlc1tdOwogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRzc19zdHJ1Y3QsIGluaXRfdHNzKTsK K0RFQ0xBUkVfUEVSX0NQVShyb290X3BnZW50cnlfdCAqLCByb290X3BndCk7CiAKIGV4dGVybiB2 b2lkIGluaXRfaW50ODBfZGlyZWN0X3RyYXAoc3RydWN0IHZjcHUgKnYpOwogCi0tLSBhL3hlbi9p bmNsdWRlL2FzbS14ODYveDg2XzY0L3BhZ2UuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3g4 Nl82NC9wYWdlLmgKQEAgLTI0LDggKzI0LDggQEAKIC8qIFRoZXNlIGFyZSBhcmNoaXRlY3R1cmFs IGxpbWl0cy4gQ3VycmVudCBDUFVzIHN1cHBvcnQgb25seSA0MC1iaXQgcGh5cy4gKi8KICNkZWZp bmUgUEFERFJfQklUUyAgICAgICAgICAgICAgNTIKICNkZWZpbmUgVkFERFJfQklUUyAgICAgICAg ICAgICAgNDgKLSNkZWZpbmUgUEFERFJfTUFTSyAgICAgICAgICAgICAgKCgxVUwgPDwgUEFERFJf QklUUyktMSkKLSNkZWZpbmUgVkFERFJfTUFTSyAgICAgICAgICAgICAgKCgxVUwgPDwgVkFERFJf QklUUyktMSkKKyNkZWZpbmUgUEFERFJfTUFTSyAgICAgICAgICAgICAgKChfQUMoMSxVTCkgPDwg UEFERFJfQklUUyktMSkKKyNkZWZpbmUgVkFERFJfTUFTSyAgICAgICAgICAgICAgKChfQUMoMSxV TCkgPDwgVkFERFJfQklUUyktMSkKIAogI2RlZmluZSBWQUREUl9UT1BfQklUICAgICAgICAgICAo MVVMIDw8IChWQUREUl9CSVRTIC0gMSkpCiAjZGVmaW5lIENBTk9OSUNBTF9NQVNLICAgICAgICAg ICh+MFVMICYgflZBRERSX01BU0spCkBAIC0xMDcsNiArMTA3LDcgQEAgdHlwZWRlZiBsNF9wZ2Vu dHJ5X3Qgcm9vdF9wZ2VudHJ5X3Q7CiAgICAgICA6ICgoKF9zKSA8IFJPT1RfUEFHRVRBQkxFX0ZJ UlNUX1hFTl9TTE9UKSB8fCAgXAogICAgICAgICAgKChfcykgPiBST09UX1BBR0VUQUJMRV9MQVNU X1hFTl9TTE9UKSkpCiAKKyNkZWZpbmUgcm9vdF90YWJsZV9vZmZzZXQgICAgICAgICBsNF90YWJs ZV9vZmZzZXQKICNkZWZpbmUgcm9vdF9nZXRfcGZuICAgICAgICAgICAgICBsNGVfZ2V0X3Bmbgog I2RlZmluZSByb290X2dldF9mbGFncyAgICAgICAgICAgIGw0ZV9nZXRfZmxhZ3MKICNkZWZpbmUg cm9vdF9nZXRfaW50cHRlICAgICAgICAgICBsNGVfZ2V0X2ludHB0ZQoKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu b3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs