From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 09/28] xen/x86: Calculate maximum host and guest featuresets Date: Tue, 15 Mar 2016 15:35:05 +0000 Message-ID: <1458056124-8024-10-git-send-email-andrew.cooper3@citrix.com> References: <1458056124-8024-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458056124-8024-1-git-send-email-andrew.cooper3@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: Andrew Cooper , Jan Beulich List-Id: xen-devel@lists.xenproject.org QWxsIG9mIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGJ5IHRoZSB0b29sc3RhY2sgdG8g bWFrZSBpbmZvcm1lZApsZXZlbGxpbmcgZGVjaXNpb25zIGZvciBWTXMsIGFuZCBieSBYZW4gdG8g c2FuaXR5IGNoZWNrIHRvb2xzdGFjay1wcm92aWRlZAppbmZvcm1hdGlvbi4KClNpZ25lZC1vZmYt Ynk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Ci0tLQpDQzogSmFu IEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgoKdjM6CiAqIE1vdmUgYXMgbXVjaCBhcyBwb3Nz aWJsZSBpbnRvIC5pbml0LgogKiBGaXggdGhlIGhhbmRpbmcgb2YgdGhlIHNoYXJlZCBiaXRzIGZv ciB0aGUgY3Jvc3MtdmVuZG9yIGNhc2UuCiAqIEZpeCBleHRlbmRlZCBjaGVjay4KLS0tCiB4ZW4v YXJjaC94ODYvY3B1aWQuYyAgICAgICAgfCAxNjAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHhlbi9hcmNoL3g4Ni9zZXR1cC5jICAgICAgICB8ICAgMyArCiB4 ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmggfCAgMTcgKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg MTgwIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvY3B1aWQuYyBiL3hl bi9hcmNoL3g4Ni9jcHVpZC5jCmluZGV4IDc3ZTAwOGEuLjE3NGNmYTAgMTAwNjQ0Ci0tLSBhL3hl bi9hcmNoL3g4Ni9jcHVpZC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCkBAIC0xLDE0ICsx LDE3NCBAQAogI2luY2x1ZGUgPHhlbi9pbml0Lmg+CiAjaW5jbHVkZSA8eGVuL2xpYi5oPgogI2lu Y2x1ZGUgPGFzbS9jcHVpZC5oPgorI2luY2x1ZGUgPGFzbS9odm0vaHZtLmg+CisjaW5jbHVkZSA8 YXNtL2h2bS92bXgvdm1jcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogY29uc3Qg dWludDMyX3Qga25vd25fZmVhdHVyZXNbXSA9IElOSVRfS05PV05fRkVBVFVSRVM7CiBjb25zdCB1 aW50MzJfdCBzcGVjaWFsX2ZlYXR1cmVzW10gPSBJTklUX1NQRUNJQUxfRkVBVFVSRVM7CiAKK3N0 YXRpYyBjb25zdCB1aW50MzJfdCBfX2luaXRjb25zdCBwdl9mZWF0dXJlbWFza1tdID0gSU5JVF9Q Vl9GRUFUVVJFUzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBfX2luaXRjb25zdCBodm1fc2hhZG93 X2ZlYXR1cmVtYXNrW10gPSBJTklUX0hWTV9TSEFET1dfRkVBVFVSRVM7CitzdGF0aWMgY29uc3Qg dWludDMyX3QgX19pbml0Y29uc3QgaHZtX2hhcF9mZWF0dXJlbWFza1tdID0gSU5JVF9IVk1fSEFQ X0ZFQVRVUkVTOworCit1aW50MzJfdCBfX3JlYWRfbW9zdGx5IHJhd19mZWF0dXJlc2V0W0ZTQ0FQ SU5UU107Cit1aW50MzJfdCBfX3JlYWRfbW9zdGx5IHB2X2ZlYXR1cmVzZXRbRlNDQVBJTlRTXTsK K3VpbnQzMl90IF9fcmVhZF9tb3N0bHkgaHZtX2ZlYXR1cmVzZXRbRlNDQVBJTlRTXTsKKworc3Rh dGljIHZvaWQgX19pbml0IHNhbml0aXNlX2ZlYXR1cmVzZXQodWludDMyX3QgKmZzKQoreworICAg IHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBGU0NBUElOVFM7ICsraSAp CisgICAgeworICAgICAgICAvKiBDbGFtcCB0byBrbm93biBtYXNrLiAqLworICAgICAgICBmc1tp XSAmPSBrbm93bl9mZWF0dXJlc1tpXTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNvcnQgb3V0 IHNoYXJlZCBiaXRzLiAgV2UgYXJlIGNvbnN0cnVjdGluZyBhIGZlYXR1cmVzZXQgd2hpY2ggbmVl ZHMgdG8KKyAgICAgKiBiZSBhcHBsaWNhYmxlIHRvIGEgY3Jvc3MtdmVuZG9yIGNhc2UuICBJbnRl bCBzdHJpY3RseSBjbGVhcnMgdGhlIGNvbW1vbgorICAgICAqIGJpdHMgaW4gZTFkLCB3aGlsZSBB TUQgc3RyaWN0bHkgZHVwbGljYXRlcyB0aGVtLgorICAgICAqCisgICAgICogV2UgZHVwbGljYXRl IHRoZW0gaGVyZSB0byBiZSBjb21wYXRpYmxlIHdpdGggQU1EIHdoaWxlIG9uIEludGVsLCBhbmQK KyAgICAgKiByZWx5IG9uIGxvZ2ljIGNsb3NlciB0byB0aGUgZ3Vlc3QgdG8gbWFrZSB0aGUgZmVh dHVyZXNldCBzdHJpY3RlciBpZgorICAgICAqIGVtdWxhdGluZyBJbnRlbC4KKyAgICAgKi8KKyAg ICBmc1tGRUFUVVJFU0VUX2UxZF0gPSAoKGZzW0ZFQVRVUkVTRVRfMWRdICAmICBDUFVJRF9DT01N T05fMURfRkVBVFVSRVMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZzW0ZFQVRVUkVT RVRfZTFkXSAmIH5DUFVJRF9DT01NT05fMURfRkVBVFVSRVMpKTsKK30KKworc3RhdGljIHZvaWQg X19pbml0IGNhbGN1bGF0ZV9yYXdfZmVhdHVyZXNldCh2b2lkKQoreworICAgIHVuc2lnbmVkIGlu dCBtYXgsIHRtcDsKKworICAgIG1heCA9IGNwdWlkX2VheCgwKTsKKworICAgIGlmICggbWF4ID49 IDEgKQorICAgICAgICBjcHVpZCgweDEsICZ0bXAsICZ0bXAsCisgICAgICAgICAgICAgICZyYXdf ZmVhdHVyZXNldFtGRUFUVVJFU0VUXzFjXSwKKyAgICAgICAgICAgICAgJnJhd19mZWF0dXJlc2V0 W0ZFQVRVUkVTRVRfMWRdKTsKKyAgICBpZiAoIG1heCA+PSA3ICkKKyAgICAgICAgY3B1aWRfY291 bnQoMHg3LCAwLCAmdG1wLAorICAgICAgICAgICAgICAgICAgICAmcmF3X2ZlYXR1cmVzZXRbRkVB VFVSRVNFVF83YjBdLAorICAgICAgICAgICAgICAgICAgICAmcmF3X2ZlYXR1cmVzZXRbRkVBVFVS RVNFVF83YzBdLAorICAgICAgICAgICAgICAgICAgICAmdG1wKTsKKyAgICBpZiAoIG1heCA+PSAw eGQgKQorICAgICAgICBjcHVpZF9jb3VudCgweGQsIDEsCisgICAgICAgICAgICAgICAgICAgICZy YXdfZmVhdHVyZXNldFtGRUFUVVJFU0VUX0RhMV0sCisgICAgICAgICAgICAgICAgICAgICZ0bXAs ICZ0bXAsICZ0bXApOworCisgICAgbWF4ID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOworICAgIGlm ICggKG1heCA+PiAxNikgIT0gMHg4MDAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCBt YXggPj0gMHg4MDAwMDAwMSApCisgICAgICAgIGNwdWlkKDB4ODAwMDAwMDEsICZ0bXAsICZ0bXAs CisgICAgICAgICAgICAgICZyYXdfZmVhdHVyZXNldFtGRUFUVVJFU0VUX2UxY10sCisgICAgICAg ICAgICAgICZyYXdfZmVhdHVyZXNldFtGRUFUVVJFU0VUX2UxZF0pOworICAgIGlmICggbWF4ID49 IDB4ODAwMDAwMDcgKQorICAgICAgICBjcHVpZCgweDgwMDAwMDA3LCAmdG1wLCAmdG1wLCAmdG1w LAorICAgICAgICAgICAgICAmcmF3X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF9lN2RdKTsKKyAgICBp ZiAoIG1heCA+PSAweDgwMDAwMDA4ICkKKyAgICAgICAgY3B1aWQoMHg4MDAwMDAwOCwgJnRtcCwK KyAgICAgICAgICAgICAgJnJhd19mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZThiXSwKKyAgICAgICAg ICAgICAgJnRtcCwgJnRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfcHZf ZmVhdHVyZXNldCh2b2lkKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9 IDA7IGkgPCBGU0NBUElOVFM7ICsraSApCisgICAgICAgIHB2X2ZlYXR1cmVzZXRbaV0gPSBob3N0 X2ZlYXR1cmVzZXRbaV0gJiBwdl9mZWF0dXJlbWFza1tpXTsKKworICAgIC8qIFVuY29uZGl0aW9u YWxseSBjbGFpbSB0byBiZSBhYmxlIHRvIHNldCB0aGUgaHlwZXJ2aXNvciBiaXQuICovCisgICAg X19zZXRfYml0KFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IsIHB2X2ZlYXR1cmVzZXQpOworCisgICAg LyoKKyAgICAgKiBBbGxvdyB0aGUgdG9vbHN0YWNrIHRvIHNldCBIVFQgYW5kIENNUF9MRUdBQ1ku ICBUaGVzZSBiaXRzIGFmZmVjdCBob3cKKyAgICAgKiB0byBpbnRlcnByZXQgdG9wb2xvZ3kgaW5m b3JtYXRpb24gaW4gb3RoZXIgY3B1aWQgbGVhdmVzLgorICAgICAqLworICAgIF9fc2V0X2JpdChY ODZfRkVBVFVSRV9IVFQsIHB2X2ZlYXR1cmVzZXQpOworICAgIF9fc2V0X2JpdChYODZfRkVBVFVS RV9DTVBfTEVHQUNZLCBwdl9mZWF0dXJlc2V0KTsKKworICAgIHNhbml0aXNlX2ZlYXR1cmVzZXQo cHZfZmVhdHVyZXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfaHZtX2Zl YXR1cmVzZXQodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBjb25zdCB1aW50MzJf dCAqaHZtX2ZlYXR1cmVtYXNrOworCisgICAgaWYgKCAhaHZtX2VuYWJsZWQgKQorICAgICAgICBy ZXR1cm47CisKKyAgICBodm1fZmVhdHVyZW1hc2sgPSBodm1fZnVuY3MuaGFwX3N1cHBvcnRlZCA/ CisgICAgICAgIGh2bV9oYXBfZmVhdHVyZW1hc2sgOiBodm1fc2hhZG93X2ZlYXR1cmVtYXNrOwor CisgICAgZm9yICggaSA9IDA7IGkgPCBGU0NBUElOVFM7ICsraSApCisgICAgICAgIGh2bV9mZWF0 dXJlc2V0W2ldID0gaG9zdF9mZWF0dXJlc2V0W2ldICYgaHZtX2ZlYXR1cmVtYXNrW2ldOworCisg ICAgLyogVW5jb25kaXRpb25hbGx5IGNsYWltIHRvIGJlIGFibGUgdG8gc2V0IHRoZSBoeXBlcnZp c29yIGJpdC4gKi8KKyAgICBfX3NldF9iaXQoWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiwgaHZtX2Zl YXR1cmVzZXQpOworCisgICAgLyoKKyAgICAgKiBBbGxvdyB0aGUgdG9vbHN0YWNrIHRvIHNldCBI VFQgYW5kIENNUF9MRUdBQ1kuICBUaGVzZSBiaXRzIGFmZmVjdCBob3cKKyAgICAgKiB0byBpbnRl cnByZXQgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaW4gb3RoZXIgY3B1aWQgbGVhdmVzLgorICAgICAq LworICAgIF9fc2V0X2JpdChYODZfRkVBVFVSRV9IVFQsIHB2X2ZlYXR1cmVzZXQpOworICAgIF9f c2V0X2JpdChYODZfRkVBVFVSRV9DTVBfTEVHQUNZLCBwdl9mZWF0dXJlc2V0KTsKKworICAgIC8q CisgICAgICogWGVuIGNhbiBwcm92aWRlIGFuIEFQSUMgZW11bGF0aW9uIHRvIEhWTSBndWVzdHMg ZXZlbiBpZiB0aGUgaG9zdCdzIEFQSUMKKyAgICAgKiBpc24ndCBlbmFibGVkLgorICAgICAqLwor ICAgIF9fc2V0X2JpdChYODZfRkVBVFVSRV9BUElDLCBodm1fZmVhdHVyZXNldCk7CisKKyAgICAv KgorICAgICAqIE9uIEFNRCwgUFYgZ3Vlc3RzIGFyZSBlbnRpcmVseSB1bmFibGUgdG8gdXNlICdz eXNlbnRlcicgYXMgWGVuIHJ1bnMgaW4KKyAgICAgKiBsb25nIG1vZGUgKGFuZCBpbml0X2FtZCgp IGhhcyBjbGVhcmVkIGl0IG91dCBvZiBob3N0IGNhcGFiaWxpdGllcyksIGJ1dAorICAgICAqIEhW TSBndWVzdHMgYXJlIGFibGUgaWYgcnVubmluZyBpbiBwcm90ZWN0ZWQgbW9kZS4KKyAgICAgKi8K KyAgICBpZiAoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYm CisgICAgICAgICB0ZXN0X2JpdChYODZfRkVBVFVSRV9TRVAsIHJhd19mZWF0dXJlc2V0KSApCisg ICAgICAgIF9fc2V0X2JpdChYODZfRkVBVFVSRV9TRVAsIGh2bV9mZWF0dXJlc2V0KTsKKworICAg IC8qCisgICAgICogV2l0aCBWVC14LCBzb21lIGZlYXR1cmVzIGFyZSBvbmx5IHN1cHBvcnRlZCBi eSBYZW4gaWYgZGVkaWNhdGVkCisgICAgICogaGFyZHdhcmUgc3VwcG9ydCBpcyBhbHNvIGF2YWls YWJsZS4KKyAgICAgKi8KKyAgICBpZiAoIGNwdV9oYXNfdm14ICkKKyAgICB7CisgICAgICAgIGlm ICggISh2bXhfdm1leGl0X2NvbnRyb2wgJiBWTV9FWElUX0NMRUFSX0JORENGR1MpIHx8CisgICAg ICAgICAgICAgISh2bXhfdm1lbnRyeV9jb250cm9sICYgVk1fRU5UUllfTE9BRF9CTkRDRkdTKSAp CisgICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9NUFgsIGh2bV9mZWF0dXJlc2V0 KTsKKworICAgICAgICBpZiAoICFjcHVfaGFzX3ZteF94c2F2ZXMgKQorICAgICAgICAgICAgX19j bGVhcl9iaXQoWDg2X0ZFQVRVUkVfWFNBVkVTLCBodm1fZmVhdHVyZXNldCk7CisKKyAgICAgICAg aWYgKCAhY3B1X2hhc192bXhfcGNvbW1pdCApCisgICAgICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9QQ09NTUlULCBodm1fZmVhdHVyZXNldCk7CisgICAgfQorCisgICAgc2FuaXRpc2Vf ZmVhdHVyZXNldChodm1fZmVhdHVyZXNldCk7Cit9CisKK3ZvaWQgX19pbml0IGNhbGN1bGF0ZV9m ZWF0dXJlc2V0cyh2b2lkKQoreworICAgIGNhbGN1bGF0ZV9yYXdfZmVhdHVyZXNldCgpOworICAg IGNhbGN1bGF0ZV9wdl9mZWF0dXJlc2V0KCk7CisgICAgY2FsY3VsYXRlX2h2bV9mZWF0dXJlc2V0 KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBidWlsZF9hc3NlcnRp b25zKHZvaWQpCiB7CiAgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoa25vd25fZmVhdHVyZXMp ICE9IEZTQ0FQSU5UUyk7CiAgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoc3BlY2lhbF9mZWF0 dXJlcykgIT0gRlNDQVBJTlRTKTsKKyAgICBCVUlMRF9CVUdfT04oQVJSQVlfU0laRShwdl9mZWF0 dXJlbWFzaykgIT0gRlNDQVBJTlRTKTsKKyAgICBCVUlMRF9CVUdfT04oQVJSQVlfU0laRShodm1f c2hhZG93X2ZlYXR1cmVtYXNrKSAhPSBGU0NBUElOVFMpOworICAgIEJVSUxEX0JVR19PTihBUlJB WV9TSVpFKGh2bV9oYXBfZmVhdHVyZW1hc2spICE9IEZTQ0FQSU5UUyk7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvc2V0dXAuYyBiL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCmluZGV4 IGE4YmYyYzkuLmM5ZTUyZmUgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCisrKyBi L3hlbi9hcmNoL3g4Ni9zZXR1cC5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8YXNtL25t aS5oPgogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9tYzE0Njgx OHJ0Yy5oPgorI2luY2x1ZGUgPGFzbS9jcHVpZC5oPgogCiAvKiBvcHRfbm9zbXA6IElmIHRydWUs IHNlY29uZGFyeSBwcm9jZXNzb3JzIGFyZSBpZ25vcmVkLiAqLwogc3RhdGljIGJvb2xfdCBfX2lu aXRkYXRhIG9wdF9ub3NtcDsKQEAgLTE0OTQsNiArMTQ5NSw4IEBAIHZvaWQgX19pbml0IG5vcmV0 dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcgbWJpX3ApCiAgICAgICAgICAgICAgICAiTXVs dGlwbGUgaW5pdHJkIGNhbmRpZGF0ZXMsIHBpY2tpbmcgbW9kdWxlICMldVxuIiwKICAgICAgICAg ICAgICAgIGluaXRyZGlkeCk7CiAKKyAgICBjYWxjdWxhdGVfZmVhdHVyZXNldHMoKTsKKwogICAg IC8qCiAgICAgICogVGVtcG9yYXJpbHkgY2xlYXIgU01BUCBpbiBDUjQgdG8gYWxsb3cgdXNlci1h Y2Nlc3NlcyBpbiBjb25zdHJ1Y3RfZG9tMCgpLgogICAgICAqIFRoaXMgc2F2ZXMgYSBsYXJnZSBu dW1iZXIgb2YgY29ybmVyIGNhc2VzIGludGVyYWN0aW9ucyB3aXRoCmRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20teDg2L2NwdWlkLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmgKaW5k ZXggMGVjZjM1Ny4uNTA0MWJjZCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVp ZC5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1aWQuaApAQCAtNiwxMiArNiwyOSBAQAog CiAjZGVmaW5lIEZTQ0FQSU5UUyBGRUFUVVJFU0VUX05SX0VOVFJJRVMKIAorI2RlZmluZSBGRUFU VVJFU0VUXzFkICAgICAwIC8qIDB4MDAwMDAwMDEuZWR4ICAgICAgKi8KKyNkZWZpbmUgRkVBVFVS RVNFVF8xYyAgICAgMSAvKiAweDAwMDAwMDAxLmVjeCAgICAgICovCisjZGVmaW5lIEZFQVRVUkVT RVRfZTFkICAgIDIgLyogMHg4MDAwMDAwMS5lZHggICAgICAqLworI2RlZmluZSBGRUFUVVJFU0VU X2UxYyAgICAzIC8qIDB4ODAwMDAwMDEuZWN4ICAgICAgKi8KKyNkZWZpbmUgRkVBVFVSRVNFVF9E YTEgICAgNCAvKiAweDAwMDAwMDBkOjEuZWF4ICAgICovCisjZGVmaW5lIEZFQVRVUkVTRVRfN2Iw ICAgIDUgLyogMHgwMDAwMDAwNzowLmVieCAgICAqLworI2RlZmluZSBGRUFUVVJFU0VUXzdjMCAg ICA2IC8qIDB4MDAwMDAwMDc6MC5lY3ggICAgKi8KKyNkZWZpbmUgRkVBVFVSRVNFVF9lN2QgICAg NyAvKiAweDgwMDAwMDA3LmVkeCAgICAgICovCisjZGVmaW5lIEZFQVRVUkVTRVRfZThiICAgIDgg LyogMHg4MDAwMDAwOC5lYnggICAgICAqLworCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1 ZGUgPHhlbi90eXBlcy5oPgogCiBleHRlcm4gY29uc3QgdWludDMyX3Qga25vd25fZmVhdHVyZXNb RlNDQVBJTlRTXTsKIGV4dGVybiBjb25zdCB1aW50MzJfdCBzcGVjaWFsX2ZlYXR1cmVzW0ZTQ0FQ SU5UU107CiAKK2V4dGVybiB1aW50MzJfdCByYXdfZmVhdHVyZXNldFtGU0NBUElOVFNdOworI2Rl ZmluZSBob3N0X2ZlYXR1cmVzZXQgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eQorZXh0ZXJu IHVpbnQzMl90IHB2X2ZlYXR1cmVzZXRbRlNDQVBJTlRTXTsKK2V4dGVybiB1aW50MzJfdCBodm1f ZmVhdHVyZXNldFtGU0NBUElOVFNdOworCit2b2lkIGNhbGN1bGF0ZV9mZWF0dXJlc2V0cyh2b2lk KTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qICFfX1g4Nl9DUFVJRF9I X18gKi8KIAotLSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=