From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v8 34/50] x86emul: support AVX512F scatter insns Date: Fri, 15 Mar 2019 04:59:46 -0600 Message-ID: <5C8B85A2020000780021F254@prv1-mh.provo.novell.com> References: <5B6BF83602000078001DC548@prv1-mh.provo.novell.com> <5C8B7EC0020000780021F10B@prv1-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] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h4kZ4-000896-8f for xen-devel@lists.xenproject.org; Fri, 15 Mar 2019 10:59:50 +0000 In-Reply-To: <5C8B7EC0020000780021F10B@prv1-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: George Dunlap , Andrew Cooper , Wei Liu , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org VGhpcyBjb21wbGV0ZXMgc3VwcG9ydCBvZiBBVlg1MTJGIGluIHRoZSBpbnNuIGVtdWxhdG9yLgoK Tm90ZSB0aGF0IGluIHRoZSB0ZXN0IGhhcm5lc3MgdGhlcmUncyBhIGxpdHRsZSBiaXQgb2YgdHJp Y2tlcnkgbmVlZGVkIHRvCmdldCBhcm91bmQgdGhlIG5vdCBmdWxseSBjb25zaXN0ZW50IG5hbWlu ZyBvZiBBVlg1MTJWTCBnYXRoZXIgYW5kCnNjYXR0ZXIgYnVpbHQtaW5zLiBUbyBzdXBwcmVzcyBl eHBhbnNpb24gb2YgdGhlICJkaSIgYW5kICJzaSIgdG9rZW5zCnRoZXkgZ2V0IGNvbnN0cnVjdGVk IGJ5IHRva2VuIGNvbmNhdGVuYXRpb24gaW4gQlMoKSwgd2hpY2ggaXMgZGlmZmVyZW50CmZyb20g QkcoKS4KClNpZ25lZC1vZmYtYnk6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KLS0t ClRCRDogSSBjb3VsZG4ndCByZWFsbHkgZGVjaWRlIHdoZXRoZXIgdG8gZHVwbGljYXRlIGNvZGUg b3IgbWVyZ2Ugc2NhdHRlcgogICAgIGludG8gZ2F0aGVyIGVtdWxhdGlvbi4KLS0tCnY3OiBSZS1i YXNlLgp2NjogTmV3LgoKLS0tIGEvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL2V2ZXgtZGlzcDgu YworKysgYi90b29scy90ZXN0cy94ODZfZW11bGF0b3IvZXZleC1kaXNwOC5jCkBAIC0yNzAsNiAr MjcwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0IGF2eDUxMmZfYWxsW10gPQogICAgIElO U04ocHJvbHYsICAgICAgICA2NiwgMGYzOCwgMTUsICAgIHZsLCAgICAgZHEsIHZsKSwKICAgICBJ TlNOWChwcm9yLCAgICAgICAgNjYsICAgMGYsIDcyLCAwLCB2bCwgICAgIGRxLCB2bCksCiAgICAg SU5TTihwcm9ydiwgICAgICAgIDY2LCAwZjM4LCAxNCwgICAgdmwsICAgICBkcSwgdmwpLAorICAg IElOU04ocHNjYXR0ZXJkLCAgICA2NiwgMGYzOCwgYTAsICAgIHZsLCAgICAgZHEsIGVsKSwKKyAg ICBJTlNOKHBzY2F0dGVycSwgICAgNjYsIDBmMzgsIGExLCAgICB2bCwgICAgIGRxLCBlbCksCiAg ICAgSU5TTihwc2h1ZmQsICAgICAgIDY2LCAgIDBmLCA3MCwgICAgdmwsICAgICAgZCwgdmwpLAog ICAgIElOU04ocHNsbGQsICAgICAgICA2NiwgICAwZiwgZjIsICAgIGVsXzQsICAgIGQsIHZsKSwK ICAgICBJTlNOWChwc2xsZCwgICAgICAgNjYsICAgMGYsIDcyLCA2LCB2bCwgICAgICBkLCB2bCks CkBAIC0zMDUsNiArMzA3LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0IGF2eDUxMmZfYWxs W10gPQogICAgIElOU04ocnNxcnQxNCwgICAgICA2NiwgMGYzOCwgNGYsICAgIGVsLCAgICAgc2Qs IGVsKSwKICAgICBJTlNOKHNjYWxlZiwgICAgICAgNjYsIDBmMzgsIDJjLCAgICB2bCwgICAgIHNk LCB2bCksCiAgICAgSU5TTihzY2FsZWYsICAgICAgIDY2LCAwZjM4LCAyZCwgICAgZWwsICAgICBz ZCwgZWwpLAorICAgIElOU04oc2NhdHRlcmQsICAgICA2NiwgMGYzOCwgYTIsICAgIHZsLCAgICAg c2QsIGVsKSwKKyAgICBJTlNOKHNjYXR0ZXJxLCAgICAgNjYsIDBmMzgsIGEzLCAgICB2bCwgICAg IHNkLCBlbCksCiAgICAgSU5TTl9QRlAoc2h1ZiwgICAgICAgICAgIDBmLCBjNiksCiAgICAgSU5T Tl9GUChzcXJ0LCAgICAgICAgICAgIDBmLCA1MSksCiAgICAgSU5TTl9GUChzdWIsICAgICAgICAg ICAgIDBmLCA1YyksCi0tLSBhL3Rvb2xzL3Rlc3RzL3g4Nl9lbXVsYXRvci9zaW1kLXNnLmMKKysr IGIvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3NpbWQtc2cuYwpAQCAtNDgsMTAgKzQ4LDE0IEBA IHR5cGVkZWYgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKHZlY3Rvcl8KICMgIGVuZGlmCiAjICBk ZWZpbmUgQkdfKGR0LCBpdCwgcmVnLCBtZW0sIGlkeCwgbXNrLCBzY2wpIFwKICAgICBfX2J1aWx0 aW5faWEzMl9nYXRoZXIjI2l0IyNkdChyZWcsIG1lbSwgaWR4LCB0b19tYXNrKG1zayksIHNjbCkK KyMgIGRlZmluZSBCU18oZHQsIGl0LCBtZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgXAorICAgIF9f YnVpbHRpbl9pYTMyX3NjYXR0ZXIjI2l0IyNkdChtZW0sIHRvX21hc2sobXNrKSwgaWR4LCByZWcs IHNjbCkKICMgZWxzZQogIyAgZGVmaW5lIGVxKHgsIHkpIChCKHBjbXBlcXEsIF9tYXNrLCAodmRp X3QpKHgpLCAodmRpX3QpKHkpLCAtMSkgPT0gQUxMX1RSVUUpCiAjICBkZWZpbmUgQkdfKGR0LCBp dCwgcmVnLCBtZW0sIGlkeCwgbXNrLCBzY2wpIFwKICAgICBfX2J1aWx0aW5faWEzMl9nYXRoZXIj I2l0IyNkdChyZWcsIG1lbSwgaWR4LCBCKHB0ZXN0bXEsICwgKHZkaV90KShtc2spLCAodmRpX3Qp KG1zayksIH4wKSwgc2NsKQorIyAgZGVmaW5lIEJTXyhkdCwgaXQsIG1lbSwgaWR4LCByZWcsIG1z aywgc2NsKSBcCisgICAgX19idWlsdGluX2lhMzJfc2NhdHRlciMjaXQjI2R0KG1lbSwgQihwdGVz dG1xLCAsICh2ZGlfdCkobXNrKSwgKHZkaV90KShtc2spLCB+MCksIGlkeCwgcmVnLCBzY2wpCiAj IGVuZGlmCiAvKgogICogSW5zdGVhZCBvZiByZXBsaWNhdGluZyB0aGUgbWFpbiBJRFhfU0laRSBj b25kaXRpb25hbCBiZWxvdyB0aHJlZSB0aW1lcywgdXNlCkBAIC01OSw2ICs2Myw3IEBAIHR5cGVk ZWYgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKHZlY3Rvcl8KICAqIHJlc3BlY3RpdmUgcmVsZXZh bnQgbWFjcm8gYXJndW1lbnQgdG9rZW5zLgogICovCiAjIGRlZmluZSBCRyhkdCwgaXQsIHJlZywg bWVtLCBpZHgsIG1zaywgc2NsKSBCR18oZHQsIGl0LCByZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkK KyMgZGVmaW5lIEJTKGR0LCBpdCwgbWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpIEJTXyhkdCwgaXQj I2ksIG1lbSwgaWR4LCByZWcsIG1zaywgc2NsKQogIyBpZiBWRUNfTUFYIDwgNjQKIC8qCiAgKiBU aGUgc3ViLTUxMi1iaXQgYnVpbHQtaW5zIGhhdmUgYW4gZXh0cmEgIjMiIGluZml4LCBwcmVzdW1h Ymx5IGJlY2F1c2UgdGhlCkBAIC04MiwyMiArODcsMzAgQEAgdHlwZWRlZiBsb25nIGxvbmcgX19h dHRyaWJ1dGVfXygodmVjdG9yXwogIyBpZiBJRFhfU0laRSA9PSA0CiAjICBpZiBJTlRfU0laRSA9 PSA0CiAjICAgZGVmaW5lIGdhdGhlcihyZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkgQkcodjE2c2ks IHNpLCByZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkKKyMgICBkZWZpbmUgc2NhdHRlcihtZW0sIGlk eCwgcmVnLCBtc2ssIHNjbCkgQlModjE2c2ksIHMsIG1lbSwgaWR4LCByZWcsIG1zaywgc2NsKQog IyAgZWxpZiBJTlRfU0laRSA9PSA4CiAjICAgZGVmaW5lIGdhdGhlcihyZWcsIG1lbSwgaWR4LCBt c2ssIHNjbCkgKHZlY190KShCRyh2OGRpLCBzaSwgKHZkaV90KShyZWcpLCBtZW0sIGlkeCwgbXNr LCBzY2wpKQorIyAgIGRlZmluZSBzY2F0dGVyKG1lbSwgaWR4LCByZWcsIG1zaywgc2NsKSBCUyh2 OGRpLCBzLCBtZW0sIGlkeCwgKHZkaV90KShyZWcpLCBtc2ssIHNjbCkKICMgIGVsaWYgRkxPQVRf U0laRSA9PSA0CiAjICAgZGVmaW5lIGdhdGhlcihyZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkgQkco djE2c2YsIHNpLCByZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkKKyMgICBkZWZpbmUgc2NhdHRlciht ZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgQlModjE2c2YsIHMsIG1lbSwgaWR4LCByZWcsIG1zaywg c2NsKQogIyAgZWxpZiBGTE9BVF9TSVpFID09IDgKICMgICBkZWZpbmUgZ2F0aGVyKHJlZywgbWVt LCBpZHgsIG1zaywgc2NsKSBCRyh2OGRmLCBzaSwgcmVnLCBtZW0sIGlkeCwgbXNrLCBzY2wpCisj ICAgZGVmaW5lIHNjYXR0ZXIobWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpIEJTKHY4ZGYsIHMsIG1l bSwgaWR4LCByZWcsIG1zaywgc2NsKQogIyAgZW5kaWYKICMgZWxpZiBJRFhfU0laRSA9PSA4CiAj ICBpZiBJTlRfU0laRSA9PSA0CiAjICAgZGVmaW5lIGdhdGhlcihyZWcsIG1lbSwgaWR4LCBtc2ss IHNjbCkgQkcodjE2c2ksIGRpLCByZWcsIG1lbSwgKGlkaV90KShpZHgpLCBtc2ssIHNjbCkKKyMg ICBkZWZpbmUgc2NhdHRlcihtZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgQlModjE2c2ksIGQsIG1l bSwgKGlkaV90KShpZHgpLCByZWcsIG1zaywgc2NsKQogIyAgZWxpZiBJTlRfU0laRSA9PSA4CiAj ICAgZGVmaW5lIGdhdGhlcihyZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkgKHZlY190KShCRyh2OGRp LCBkaSwgKHZkaV90KShyZWcpLCBtZW0sIChpZGlfdCkoaWR4KSwgbXNrLCBzY2wpKQorIyAgIGRl ZmluZSBzY2F0dGVyKG1lbSwgaWR4LCByZWcsIG1zaywgc2NsKSBCUyh2OGRpLCBkLCBtZW0sIChp ZGlfdCkoaWR4KSwgKHZkaV90KShyZWcpLCBtc2ssIHNjbCkKICMgIGVsaWYgRkxPQVRfU0laRSA9 PSA0CiAjICAgZGVmaW5lIGdhdGhlcihyZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkgQkcodjE2c2Ys IGRpLCByZWcsIG1lbSwgKGlkaV90KShpZHgpLCBtc2ssIHNjbCkKKyMgICBkZWZpbmUgc2NhdHRl cihtZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgQlModjE2c2YsIGQsIG1lbSwgKGlkaV90KShpZHgp LCByZWcsIG1zaywgc2NsKQogIyAgZWxpZiBGTE9BVF9TSVpFID09IDgKICMgICBkZWZpbmUgZ2F0 aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSBCRyh2OGRmLCBkaSwgcmVnLCBtZW0sIChpZGlf dCkoaWR4KSwgbXNrLCBzY2wpCisjICAgZGVmaW5lIHNjYXR0ZXIobWVtLCBpZHgsIHJlZywgbXNr LCBzY2wpIEJTKHY4ZGYsIGQsIG1lbSwgKGlkaV90KShpZHgpLCByZWcsIG1zaywgc2NsKQogIyAg ZW5kaWYKICMgZW5kaWYKICNlbGlmIGRlZmluZWQoX19BVlgyX18pCkBAIC0xOTUsNiArMjA4LDgg QEAgY29uc3QgdHlwZW9mKCh2ZWNfdCl7fVswXSkgYXJyYXlbXSA9IHsKICAgICBHTFVFKFBVVCwg VkVDX01BWCkoVkVDX01BWCArIDEpCiB9OwogCit0eXBlb2YoKHZlY190KXt9WzBdKSBvdXRbVkVD X01BWCAqIDJdOworCiBpbnQgc2dfdGVzdCh2b2lkKQogewogICAgIHVuc2lnbmVkIGludCBpOwpA QCAtMjc1LDUgKzI5MCw0MSBAQCBpbnQgc2dfdGVzdCh2b2lkKQogIyBlbmRpZgogI2VuZGlmCiAK KyNpZmRlZiBzY2F0dGVyCisKKyAgICBmb3IgKCBpID0gMDsgaSA8IHNpemVvZihvdXQpIC8gc2l6 ZW9mKCpvdXQpOyArK2kgKQorICAgICAgICBvdXRbaV0gPSAwOworCisgICAgZm9yICggaSA9IDA7 IGkgPCBJVEVNX0NPVU5UOyArK2kgKQorICAgICAgICB4W2ldID0gaSArIDE7CisKKyAgICB0b3Vj aCh4KTsKKworICAgIHNjYXR0ZXIob3V0LCAoaWR4X3Qpe30sIHgsICh2ZWNfdCl7IDEgfSAhPSAw LCAxKTsKKyAgICBpZiAoIG91dFswXSAhPSAxICkKKyAgICAgICAgcmV0dXJuIF9fTElORV9fOwor ICAgIGZvciAoIGkgPSAxOyBpIDwgSVRFTV9DT1VOVDsgKytpICkKKyAgICAgICAgaWYgKCBvdXRb aV0gKQorICAgICAgICAgICAgcmV0dXJuIF9fTElORV9fOworCisgICAgc2NhdHRlcihvdXQsIChp ZHhfdCl7fSwgeCwgZnVsbCwgMSk7CisgICAgaWYgKCBvdXRbMF0gIT0gSVRFTV9DT1VOVCApCisg ICAgICAgIHJldHVybiBfX0xJTkVfXzsKKyAgICBmb3IgKCBpID0gMTsgaSA8IElURU1fQ09VTlQ7 ICsraSApCisgICAgICAgIGlmICggb3V0W2ldICkKKyAgICAgICAgICAgIHJldHVybiBfX0xJTkVf XzsKKworICAgIHNjYXR0ZXIob3V0LCBpZHgsIHgsIGZ1bGwsIEVMRU1fU0laRSk7CisgICAgZm9y ICggaSA9IDE7IGkgPD0gSVRFTV9DT1VOVDsgKytpICkKKyAgICAgICAgaWYgKCBvdXRbaV0gIT0g aSApCisgICAgICAgICAgICByZXR1cm4gX19MSU5FX187CisKKyAgICBzY2F0dGVyKG91dCwgaW52 LCB4LCBmdWxsLCBFTEVNX1NJWkUpOworICAgIGZvciAoIGkgPSAxOyBpIDw9IElURU1fQ09VTlQ7 ICsraSApCisgICAgICAgIGlmICggb3V0W2ldICE9IElURU1fQ09VTlQgKyAxIC0gaSApCisgICAg ICAgICAgICByZXR1cm4gX19MSU5FX187CisKKyNlbmRpZgorCiAgICAgcmV0dXJuIDA7CiB9Ci0t LSBhL3hlbi9hcmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jCisrKyBiL3hlbi9hcmNo L3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jCkBAIC01MDgsNiArNTA4LDcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBleHQwZjM4X3RhYmxlIHsKICAgICBbMHg5ZF0gPSB7IC5zaW1kX3NpemUg PSBzaW1kX3NjYWxhcl92ZXh3LCAuZDhzID0gZDhzX2RxIH0sCiAgICAgWzB4OWVdID0geyAuc2lt ZF9zaXplID0gc2ltZF9wYWNrZWRfZnAsIC5kOHMgPSBkOHNfdmwgfSwKICAgICBbMHg5Zl0gPSB7 IC5zaW1kX3NpemUgPSBzaW1kX3NjYWxhcl92ZXh3LCAuZDhzID0gZDhzX2RxIH0sCisgICAgWzB4 YTAgLi4uIDB4YTNdID0geyAuc2ltZF9zaXplID0gc2ltZF9vdGhlciwgLnZzaWIgPSAxLCAuZDhz ID0gZDhzX2RxIH0sCiAgICAgWzB4YTYgLi4uIDB4YThdID0geyAuc2ltZF9zaXplID0gc2ltZF9w YWNrZWRfZnAsIC5kOHMgPSBkOHNfdmwgfSwKICAgICBbMHhhOV0gPSB7IC5zaW1kX3NpemUgPSBz aW1kX3NjYWxhcl92ZXh3LCAuZDhzID0gZDhzX2RxIH0sCiAgICAgWzB4YWFdID0geyAuc2ltZF9z aXplID0gc2ltZF9wYWNrZWRfZnAsIC5kOHMgPSBkOHNfdmwgfSwKQEAgLTkzMzAsNiArOTMzMSwx MDIgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBhdng1MTJfdmxlbl9jaGVjayh0cnVlKTsK ICAgICAgICAgZ290byBzaW1kX3ptbTsKIAorICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF82Nigw eDBmMzgsIDB4YTApOiAvKiB2cHNjYXR0ZXJke2QscX0gW3h5el1tbSxtZW17a30gKi8KKyAgICBj YXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYoMHgwZjM4LCAweGExKTogLyogdnBzY2F0dGVycXtkLHF9 IFt4eXpdbW0sbWVte2t9ICovCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYzOCwg MHhhMik6IC8qIHZzY2F0dGVyZHB7cyxkfSBbeHl6XW1tLG1lbXtrfSAqLworICAgIGNhc2UgWDg2 RU1VTF9PUENfRVZFWF82NigweDBmMzgsIDB4YTMpOiAvKiB2c2NhdHRlcnFwe3MsZH0gW3h5el1t bSxtZW17a30gKi8KKyAgICB7CisgICAgICAgIHR5cGVvZihldmV4KSAqcGV2ZXg7CisgICAgICAg IHVuaW9uIHsKKyAgICAgICAgICAgIGludDMyX3QgZHdbMTZdOworICAgICAgICAgICAgaW50NjRf dCBxd1s4XTsKKyAgICAgICAgfSBpbmRleDsKKyAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CisK KyAgICAgICAgQVNTRVJUKGVhLnR5cGUgPT0gT1BfTUVNKTsKKyAgICAgICAgZmFpbF9pZighb3Bz LT53cml0ZSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigoIWV2ZXgub3Btc2sgfHwg ZXZleC5icnMgfHwgZXZleC56IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl eC5yZWcgIT0gMHhmIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kcm1fcmVn ID09IHN0YXRlLT5zaWJfaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhD X1VEKTsKKyAgICAgICAgYXZ4NTEyX3ZsZW5fY2hlY2soZmFsc2UpOworICAgICAgICBob3N0X2Fu ZF92Y3B1X211c3RfaGF2ZShhdng1MTJmKTsKKyAgICAgICAgZ2V0X2ZwdShYODZFTVVMX0ZQVV96 bW0pOworCisgICAgICAgIC8qIFJlYWQgc291cmNlIGFuZCBpbmRleCByZWdpc3RlcnMuICovCisg ICAgICAgIG9wYyA9IGluaXRfZXZleChzdHViKTsKKyAgICAgICAgcGV2ZXggPSBjb3B5X0VWRVgo b3BjLCBldmV4KTsKKyAgICAgICAgcGV2ZXgtPm9wY3ggPSB2ZXhfMGY7CisgICAgICAgIG9wY1sw XSA9IDB4N2Y7IC8qIHZtb3ZkcWF7MzIsNjR9ICovCisgICAgICAgIC8qIFVzZSAoJXJheCkgYXMg ZGVzdGluYXRpb24gYW5kIG1vZHJtX3JlZyBhcyBzb3VyY2UuICovCisgICAgICAgIHBldmV4LT5i ID0gMTsKKyAgICAgICAgb3BjWzFdID0gKG1vZHJtX3JlZyAmIDcpIDw8IDM7CisgICAgICAgIHBl dmV4LT5SWCA9IDE7CisgICAgICAgIG9wY1syXSA9IDB4YzM7CisKKyAgICAgICAgaW52b2tlX3N0 dWIoIiIsICIiLCAiPW0iICgqbW12YWxwKSA6ICJhIiAobW12YWxwKSk7CisKKyAgICAgICAgcGV2 ZXgtPnBmeCA9IHZleF9mMzsgLyogdm1vdmRxdXszMiw2NH0gKi8KKyAgICAgICAgcGV2ZXgtPncg PSBiICYgMTsKKyAgICAgICAgLyogU3dpdGNoIHRvIHNpYl9pbmRleCBhcyBzb3VyY2UuICovCisg ICAgICAgIHBldmV4LT5yID0gIW1vZGVfNjRiaXQoKSB8fCAhKHN0YXRlLT5zaWJfaW5kZXggJiAw eDA4KTsKKyAgICAgICAgcGV2ZXgtPlIgPSAhbW9kZV82NGJpdCgpIHx8ICEoc3RhdGUtPnNpYl9p bmRleCAmIDB4MTApOworICAgICAgICBvcGNbMV0gPSAoc3RhdGUtPnNpYl9pbmRleCAmIDcpIDw8 IDM7CisKKyAgICAgICAgaW52b2tlX3N0dWIoIiIsICIiLCAiPW0iIChpbmRleCkgOiAiYSIgKCZp bmRleCkpOworICAgICAgICBwdXRfc3R1YihzdHViKTsKKworICAgICAgICAvKiBDbGVhciB1bnRv dWNoZWQgcGFydHMgb2YgdGhlIG1hc2sgdmFsdWUuICovCisgICAgICAgIG4gPSAxIDw8ICgyICsg ZXZleC5sciAtICgoYiAmIDEpIHwgZXZleC53KSk7CisgICAgICAgIG9wX2J5dGVzID0gNCA8PCBl dmV4Lnc7CisgICAgICAgIG9wX21hc2sgJj0gKDEgPDwgbikgLSAxOworCisgICAgICAgIGZvciAo IGkgPSAwOyBvcF9tYXNrOyArK2kgKQorICAgICAgICB7CisgICAgICAgICAgICBzaWduZWQgbG9u ZyBpZHggPSBiICYgMSA/IGluZGV4LnF3W2ldIDogaW5kZXguZHdbaV07CisKKyAgICAgICAgICAg IGlmICggIShvcF9tYXNrICYgKDEgPDwgaSkpICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICAgICAgcmMgPSBvcHMtPndyaXRlKGVhLm1lbS5zZWcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHJ1bmNhdGVfZWEoZWEubWVtLm9mZiArIChpZHggPDwgc3RhdGUtPnNp Yl9zY2FsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopbW12YWxwICsg aSAqIG9wX2J5dGVzLCBvcF9ieXRlcywgY3R4dCk7CisgICAgICAgICAgICBpZiAoIHJjICE9IFg4 NkVNVUxfT0tBWSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2VlIGNvbW1l bnQgaW4gZ2F0aGVyIGVtdWxhdGlvbi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoIHJjICE9IFg4 NkVNVUxfRVhDRVBUSU9OICYmIGRvbmUgKQorICAgICAgICAgICAgICAgICAgICByYyA9IFg4NkVN VUxfUkVUUlk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIG9wX21hc2sgJj0gfigxIDw8IGkpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisK KyNpZmRlZiBfX1hFTl9fCisgICAgICAgICAgICBpZiAoIG9wX21hc2sgJiYgbG9jYWxfZXZlbnRz X25lZWRfZGVsaXZlcnkoKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmMgPSBY ODZFTVVMX1JFVFJZOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2Vu ZGlmCisgICAgICAgIH0KKworICAgICAgICAvKiBXcml0ZSBtYXNrIHJlZ2lzdGVyLiBTZWUgY29t bWVudCBpbiBnYXRoZXIgZW11bGF0aW9uLiAqLworICAgICAgICBvcGMgPSBnZXRfc3R1YihzdHVi KTsKKyAgICAgICAgb3BjWzBdID0gMHhjNTsKKyAgICAgICAgb3BjWzFdID0gMHhmODsKKyAgICAg ICAgb3BjWzJdID0gMHg5MDsKKyAgICAgICAgLyogVXNlICglcmF4KSBhcyBzb3VyY2UuICovCisg ICAgICAgIG9wY1szXSA9IGV2ZXgub3Btc2sgPDwgMzsKKyAgICAgICAgb3BjWzRdID0gMHhjMzsK KworICAgICAgICBpbnZva2Vfc3R1YigiIiwgIiIsICIrbSIgKG9wX21hc2spIDogImEiICgmb3Bf bWFzaykpOworICAgICAgICBwdXRfc3R1YihzdHViKTsKKworICAgICAgICBzdGF0ZS0+c2ltZF9z aXplID0gc2ltZF9ub25lOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFg4NkVN VUxfT1BDKDB4MGYzOCwgMHhjOCk6ICAgICAvKiBzaGExbmV4dGUgeG1tL20xMjgseG1tICovCiAg ICAgY2FzZSBYODZFTVVMX09QQygweDBmMzgsIDB4YzkpOiAgICAgLyogc2hhMW1zZzEgeG1tL20x MjgseG1tICovCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBmMzgsIDB4Y2EpOiAgICAgLyogc2hh MW1zZzIgeG1tL20xMjgseG1tICovCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu Zm8veGVuLWRldmVs