From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v6 34/42] x86emul: support AVX512F scatter insns Date: Thu, 06 Dec 2018 03:08:52 -0700 Message-ID: <5C08F53402000078002038AE@prv1-mh.provo.novell.com> References: <5B6BF83602000078001DC548@prv1-mh.provo.novell.com> <5C08EFAE020000780020373E@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gUqaX-000799-GX for xen-devel@lists.xenproject.org; Thu, 06 Dec 2018 10:08:57 +0000 In-Reply-To: <5C08EFAE020000780020373E@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 b3IgbWVyZ2Ugc2NhdHRlcgogICAgIGludG8gZ2F0aGVyIGVtdWxhdGlvbi4KLS0tCnY2OiBOZXcu CgotLS0gYS90b29scy90ZXN0cy94ODZfZW11bGF0b3IvZXZleC1kaXNwOC5jCisrKyBiL3Rvb2xz L3Rlc3RzL3g4Nl9lbXVsYXRvci9ldmV4LWRpc3A4LmMKQEAgLTI3MCw2ICsyNzAsOCBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IHRlc3QgYXZ4NTEyZl9hbGxbXSA9CiAgICAgSU5TTihwcm9sdiwgICAg ICAgIDY2LCAwZjM4LCAxNSwgICAgdmwsICAgICBkcSwgdmwpLAogICAgIElOU05YKHByb3IsICAg ICAgICA2NiwgICAwZiwgNzIsIDAsIHZsLCAgICAgZHEsIHZsKSwKICAgICBJTlNOKHByb3J2LCAg ICAgICAgNjYsIDBmMzgsIDE0LCAgICB2bCwgICAgIGRxLCB2bCksCisgICAgSU5TTihwc2NhdHRl cmQsICAgIDY2LCAwZjM4LCBhMCwgICAgdmwsICAgICBkcSwgZWwpLAorICAgIElOU04ocHNjYXR0 ZXJxLCAgICA2NiwgMGYzOCwgYTEsICAgIHZsLCAgICAgZHEsIGVsKSwKICAgICBJTlNOKHBzaHVm ZCwgICAgICAgNjYsICAgMGYsIDcwLCAgICB2bCwgICAgICBkLCB2bCksCiAgICAgSU5TTihwc2xs ZCwgICAgICAgIDY2LCAgIDBmLCBmMiwgICAgZWxfNCwgICAgZCwgdmwpLAogICAgIElOU05YKHBz bGxkLCAgICAgICA2NiwgICAwZiwgNzIsIDYsIHZsLCAgICAgIGQsIHZsKSwKQEAgLTMwNSw2ICsz MDcsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3QgYXZ4NTEyZl9hbGxbXSA9CiAgICAgSU5T Tihyc3FydDE0LCAgICAgIDY2LCAwZjM4LCA0ZiwgICAgZWwsICAgICBzZCwgZWwpLAogICAgIElO U04oc2NhbGVmLCAgICAgICA2NiwgMGYzOCwgMmMsICAgIHZsLCAgICAgc2QsIHZsKSwKICAgICBJ TlNOKHNjYWxlZiwgICAgICAgNjYsIDBmMzgsIDJkLCAgICBlbCwgICAgIHNkLCBlbCksCisgICAg SU5TTihzY2F0dGVyZCwgICAgIDY2LCAwZjM4LCBhMiwgICAgdmwsICAgICBzZCwgZWwpLAorICAg IElOU04oc2NhdHRlcnEsICAgICA2NiwgMGYzOCwgYTMsICAgIHZsLCAgICAgc2QsIGVsKSwKICAg ICBJTlNOX1BGUChzaHVmLCAgICAgICAgICAgMGYsIGM2KSwKICAgICBJTlNOX0ZQKHNxcnQsICAg ICAgICAgICAgMGYsIDUxKSwKICAgICBJTlNOX0ZQKHN1YiwgICAgICAgICAgICAgMGYsIDVjKSwK LS0tIGEvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3NpbWQtc2cuYworKysgYi90b29scy90ZXN0 cy94ODZfZW11bGF0b3Ivc2ltZC1zZy5jCkBAIC00OCwxMCArNDgsMTQgQEAgdHlwZWRlZiBsb25n IGxvbmcgX19hdHRyaWJ1dGVfXygodmVjdG9yXwogIyAgZW5kaWYKICMgIGRlZmluZSBCR18oZHQs IGl0LCByZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkgXAogICAgIF9fYnVpbHRpbl9pYTMyX2dhdGhl ciMjaXQjI2R0KHJlZywgbWVtLCBpZHgsIHRvX21hc2sobXNrKSwgc2NsKQorIyAgZGVmaW5lIEJT XyhkdCwgaXQsIG1lbSwgaWR4LCByZWcsIG1zaywgc2NsKSBcCisgICAgX19idWlsdGluX2lhMzJf c2NhdHRlciMjaXQjI2R0KG1lbSwgdG9fbWFzayhtc2spLCBpZHgsIHJlZywgc2NsKQogIyBlbHNl CiAjICBkZWZpbmUgZXEoeCwgeSkgKEIocGNtcGVxcSwgX21hc2ssICh2ZGlfdCkoeCksICh2ZGlf dCkoeSksIC0xKSA9PSBBTExfVFJVRSkKICMgIGRlZmluZSBCR18oZHQsIGl0LCByZWcsIG1lbSwg aWR4LCBtc2ssIHNjbCkgXAogICAgIF9fYnVpbHRpbl9pYTMyX2dhdGhlciMjaXQjI2R0KHJlZywg bWVtLCBpZHgsIEIocHRlc3RtcSwgLCAodmRpX3QpKG1zayksICh2ZGlfdCkobXNrKSwgfjApLCBz Y2wpCisjICBkZWZpbmUgQlNfKGR0LCBpdCwgbWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpIFwKKyAg ICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyIyNpdCMjZHQobWVtLCBCKHB0ZXN0bXEsICwgKHZkaV90 KShtc2spLCAodmRpX3QpKG1zayksIH4wKSwgaWR4LCByZWcsIHNjbCkKICMgZW5kaWYKIC8qCiAg KiBJbnN0ZWFkIG9mIHJlcGxpY2F0aW5nIHRoZSBtYWluIElEWF9TSVpFIGNvbmRpdGlvbmFsIGJl bG93IHRocmVlIHRpbWVzLCB1c2UKQEAgLTU5LDYgKzYzLDcgQEAgdHlwZWRlZiBsb25nIGxvbmcg X19hdHRyaWJ1dGVfXygodmVjdG9yXwogICogcmVzcGVjdGl2ZSByZWxldmFudCBtYWNybyBhcmd1 bWVudCB0b2tlbnMuCiAgKi8KICMgZGVmaW5lIEJHKGR0LCBpdCwgcmVnLCBtZW0sIGlkeCwgbXNr LCBzY2wpIEJHXyhkdCwgaXQsIHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKQorIyBkZWZpbmUgQlMo ZHQsIGl0LCBtZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgQlNfKGR0LCBpdCMjaSwgbWVtLCBpZHgs IHJlZywgbXNrLCBzY2wpCiAjIGlmIFZFQ19NQVggPCA2NAogLyoKICAqIFRoZSBzdWItNTEyLWJp dCBidWlsdC1pbnMgaGF2ZSBhbiBleHRyYSAiMyIgaW5maXgsIHByZXN1bWFibHkgYmVjYXVzZSB0 aGUKQEAgLTgyLDIyICs4NywzMCBAQCB0eXBlZGVmIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKCh2 ZWN0b3JfCiAjIGlmIElEWF9TSVpFID09IDQKICMgIGlmIElOVF9TSVpFID09IDQKICMgICBkZWZp bmUgZ2F0aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSBCRyh2MTZzaSwgc2ksIHJlZywgbWVt LCBpZHgsIG1zaywgc2NsKQorIyAgIGRlZmluZSBzY2F0dGVyKG1lbSwgaWR4LCByZWcsIG1zaywg c2NsKSBCUyh2MTZzaSwgcywgbWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpCiAjICBlbGlmIElOVF9T SVpFID09IDgKICMgICBkZWZpbmUgZ2F0aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSAodmVj X3QpKEJHKHY4ZGksIHNpLCAodmRpX3QpKHJlZyksIG1lbSwgaWR4LCBtc2ssIHNjbCkpCisjICAg ZGVmaW5lIHNjYXR0ZXIobWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpIEJTKHY4ZGksIHMsIG1lbSwg aWR4LCAodmRpX3QpKHJlZyksIG1zaywgc2NsKQogIyAgZWxpZiBGTE9BVF9TSVpFID09IDQKICMg ICBkZWZpbmUgZ2F0aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSBCRyh2MTZzZiwgc2ksIHJl ZywgbWVtLCBpZHgsIG1zaywgc2NsKQorIyAgIGRlZmluZSBzY2F0dGVyKG1lbSwgaWR4LCByZWcs IG1zaywgc2NsKSBCUyh2MTZzZiwgcywgbWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpCiAjICBlbGlm IEZMT0FUX1NJWkUgPT0gOAogIyAgIGRlZmluZSBnYXRoZXIocmVnLCBtZW0sIGlkeCwgbXNrLCBz Y2wpIEJHKHY4ZGYsIHNpLCByZWcsIG1lbSwgaWR4LCBtc2ssIHNjbCkKKyMgICBkZWZpbmUgc2Nh dHRlcihtZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgQlModjhkZiwgcywgbWVtLCBpZHgsIHJlZywg bXNrLCBzY2wpCiAjICBlbmRpZgogIyBlbGlmIElEWF9TSVpFID09IDgKICMgIGlmIElOVF9TSVpF ID09IDQKICMgICBkZWZpbmUgZ2F0aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSBCRyh2MTZz aSwgZGksIHJlZywgbWVtLCAoaWRpX3QpKGlkeCksIG1zaywgc2NsKQorIyAgIGRlZmluZSBzY2F0 dGVyKG1lbSwgaWR4LCByZWcsIG1zaywgc2NsKSBCUyh2MTZzaSwgZCwgbWVtLCAoaWRpX3QpKGlk eCksIHJlZywgbXNrLCBzY2wpCiAjICBlbGlmIElOVF9TSVpFID09IDgKICMgICBkZWZpbmUgZ2F0 aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSAodmVjX3QpKEJHKHY4ZGksIGRpLCAodmRpX3Qp KHJlZyksIG1lbSwgKGlkaV90KShpZHgpLCBtc2ssIHNjbCkpCisjICAgZGVmaW5lIHNjYXR0ZXIo bWVtLCBpZHgsIHJlZywgbXNrLCBzY2wpIEJTKHY4ZGksIGQsIG1lbSwgKGlkaV90KShpZHgpLCAo dmRpX3QpKHJlZyksIG1zaywgc2NsKQogIyAgZWxpZiBGTE9BVF9TSVpFID09IDQKICMgICBkZWZp bmUgZ2F0aGVyKHJlZywgbWVtLCBpZHgsIG1zaywgc2NsKSBCRyh2MTZzZiwgZGksIHJlZywgbWVt LCAoaWRpX3QpKGlkeCksIG1zaywgc2NsKQorIyAgIGRlZmluZSBzY2F0dGVyKG1lbSwgaWR4LCBy ZWcsIG1zaywgc2NsKSBCUyh2MTZzZiwgZCwgbWVtLCAoaWRpX3QpKGlkeCksIHJlZywgbXNrLCBz Y2wpCiAjICBlbGlmIEZMT0FUX1NJWkUgPT0gOAogIyAgIGRlZmluZSBnYXRoZXIocmVnLCBtZW0s IGlkeCwgbXNrLCBzY2wpIEJHKHY4ZGYsIGRpLCByZWcsIG1lbSwgKGlkaV90KShpZHgpLCBtc2ss IHNjbCkKKyMgICBkZWZpbmUgc2NhdHRlcihtZW0sIGlkeCwgcmVnLCBtc2ssIHNjbCkgQlModjhk ZiwgZCwgbWVtLCAoaWRpX3QpKGlkeCksIHJlZywgbXNrLCBzY2wpCiAjICBlbmRpZgogIyBlbmRp ZgogI2VsaWYgZGVmaW5lZChfX0FWWDJfXykKQEAgLTE5NSw2ICsyMDgsOCBAQCBjb25zdCB0eXBl b2YoKHZlY190KXt9WzBdKSBhcnJheVtdID0gewogICAgIEdMVUUoUFVULCBWRUNfTUFYKShWRUNf TUFYICsgMSkKIH07CiAKK3R5cGVvZigodmVjX3Qpe31bMF0pIG91dFtWRUNfTUFYICogMl07CisK IGludCBzZ190ZXN0KHZvaWQpCiB7CiAgICAgdW5zaWduZWQgaW50IGk7CkBAIC0yNzUsNSArMjkw LDQxIEBAIGludCBzZ190ZXN0KHZvaWQpCiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmZGVmIHNjYXR0 ZXIKKworICAgIGZvciAoIGkgPSAwOyBpIDwgc2l6ZW9mKG91dCkgLyBzaXplb2YoKm91dCk7ICsr aSApCisgICAgICAgIG91dFtpXSA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IElURU1fQ09V TlQ7ICsraSApCisgICAgICAgIHhbaV0gPSBpICsgMTsKKworICAgIHRvdWNoKHgpOworCisgICAg c2NhdHRlcihvdXQsIChpZHhfdCl7fSwgeCwgKHZlY190KXsgMSB9ICE9IDAsIDEpOworICAgIGlm ICggb3V0WzBdICE9IDEgKQorICAgICAgICByZXR1cm4gX19MSU5FX187CisgICAgZm9yICggaSA9 IDE7IGkgPCBJVEVNX0NPVU5UOyArK2kgKQorICAgICAgICBpZiAoIG91dFtpXSApCisgICAgICAg ICAgICByZXR1cm4gX19MSU5FX187CisKKyAgICBzY2F0dGVyKG91dCwgKGlkeF90KXt9LCB4LCBm dWxsLCAxKTsKKyAgICBpZiAoIG91dFswXSAhPSBJVEVNX0NPVU5UICkKKyAgICAgICAgcmV0dXJu IF9fTElORV9fOworICAgIGZvciAoIGkgPSAxOyBpIDwgSVRFTV9DT1VOVDsgKytpICkKKyAgICAg ICAgaWYgKCBvdXRbaV0gKQorICAgICAgICAgICAgcmV0dXJuIF9fTElORV9fOworCisgICAgc2Nh dHRlcihvdXQsIGlkeCwgeCwgZnVsbCwgRUxFTV9TSVpFKTsKKyAgICBmb3IgKCBpID0gMTsgaSA8 PSBJVEVNX0NPVU5UOyArK2kgKQorICAgICAgICBpZiAoIG91dFtpXSAhPSBpICkKKyAgICAgICAg ICAgIHJldHVybiBfX0xJTkVfXzsKKworICAgIHNjYXR0ZXIob3V0LCBpbnYsIHgsIGZ1bGwsIEVM RU1fU0laRSk7CisgICAgZm9yICggaSA9IDE7IGkgPD0gSVRFTV9DT1VOVDsgKytpICkKKyAgICAg ICAgaWYgKCBvdXRbaV0gIT0gSVRFTV9DT1VOVCArIDEgLSBpICkKKyAgICAgICAgICAgIHJldHVy biBfX0xJTkVfXzsKKworI2VuZGlmCisKICAgICByZXR1cm4gMDsKIH0KLS0tIGEveGVuL2FyY2gv eDg2L3g4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmMKKysrIGIveGVuL2FyY2gveDg2L3g4Nl9lbXVs YXRlL3g4Nl9lbXVsYXRlLmMKQEAgLTUwOCw2ICs1MDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGV4dDBmMzhfdGFibGUgewogICAgIFsweDlkXSA9IHsgLnNpbWRfc2l6ZSA9IHNpbWRfc2NhbGFy X3ZleHcsIC5kOHMgPSBkOHNfZHEgfSwKICAgICBbMHg5ZV0gPSB7IC5zaW1kX3NpemUgPSBzaW1k X3BhY2tlZF9mcCwgLmQ4cyA9IGQ4c192bCB9LAogICAgIFsweDlmXSA9IHsgLnNpbWRfc2l6ZSA9 IHNpbWRfc2NhbGFyX3ZleHcsIC5kOHMgPSBkOHNfZHEgfSwKKyAgICBbMHhhMCAuLi4gMHhhM10g PSB7IC5zaW1kX3NpemUgPSBzaW1kX290aGVyLCAudnNpYiA9IDEsIC5kOHMgPSBkOHNfZHEgfSwK ICAgICBbMHhhNiAuLi4gMHhhOF0gPSB7IC5zaW1kX3NpemUgPSBzaW1kX3BhY2tlZF9mcCwgLmQ4 cyA9IGQ4c192bCB9LAogICAgIFsweGE5XSA9IHsgLnNpbWRfc2l6ZSA9IHNpbWRfc2NhbGFyX3Zl eHcsIC5kOHMgPSBkOHNfZHEgfSwKICAgICBbMHhhYV0gPSB7IC5zaW1kX3NpemUgPSBzaW1kX3Bh Y2tlZF9mcCwgLmQ4cyA9IGQ4c192bCB9LApAQCAtOTI4Miw2ICs5MjgzLDEwMiBAQCB4ODZfZW11 bGF0ZSgKICAgICAgICAgICAgIGhvc3RfYW5kX3ZjcHVfbXVzdF9oYXZlKGF2eDUxMmYpOwogICAg ICAgICBnb3RvIHNpbWRfem1tOwogCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYz OCwgMHhhMCk6IC8qIHZwc2NhdHRlcmR7ZCxxfSBbeHl6XW1tLG1lbXtrfSAqLworICAgIGNhc2Ug WDg2RU1VTF9PUENfRVZFWF82NigweDBmMzgsIDB4YTEpOiAvKiB2cHNjYXR0ZXJxe2QscX0gW3h5 el1tbSxtZW17a30gKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYoMHgwZjM4LCAweGEy KTogLyogdnNjYXR0ZXJkcHtzLGR9IFt4eXpdbW0sbWVte2t9ICovCisgICAgY2FzZSBYODZFTVVM X09QQ19FVkVYXzY2KDB4MGYzOCwgMHhhMyk6IC8qIHZzY2F0dGVycXB7cyxkfSBbeHl6XW1tLG1l bXtrfSAqLworICAgIHsKKyAgICAgICAgdHlwZW9mKGV2ZXgpICpwZXZleDsKKyAgICAgICAgdW5p b24geworICAgICAgICAgICAgaW50MzJfdCBkd1sxNl07CisgICAgICAgICAgICBpbnQ2NF90IHF3 WzhdOworICAgICAgICB9IGluZGV4OworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKworICAg ICAgICBBU1NFUlQoZWEudHlwZSA9PSBPUF9NRU0pOworICAgICAgICBmYWlsX2lmKCFvcHMtPndy aXRlKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCghZXZleC5vcG1zayB8fCBldmV4 LmJyIHx8IGV2ZXgueiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXgucmVn ICE9IDB4ZiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHJtX3JlZyA9PSBz dGF0ZS0+c2liX2luZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19VRCk7 CisgICAgICAgIGF2eDUxMl92bGVuX2NoZWNrKGZhbHNlKTsKKyAgICAgICAgaG9zdF9hbmRfdmNw dV9tdXN0X2hhdmUoYXZ4NTEyZik7CisgICAgICAgIGdldF9mcHUoWDg2RU1VTF9GUFVfem1tKTsK KworICAgICAgICAvKiBSZWFkIHNvdXJjZSBhbmQgaW5kZXggcmVnaXN0ZXJzLiAqLworICAgICAg ICBvcGMgPSBpbml0X2V2ZXgoc3R1Yik7CisgICAgICAgIHBldmV4ID0gY29weV9FVkVYKG9wYywg ZXZleCk7CisgICAgICAgIHBldmV4LT5vcGN4ID0gdmV4XzBmOworICAgICAgICBvcGNbMF0gPSAw eDdmOyAvKiB2bW92ZHFhezMyLDY0fSAqLworICAgICAgICAvKiBVc2UgKCVyYXgpIGFzIGRlc3Rp bmF0aW9uIGFuZCBtb2RybV9yZWcgYXMgc291cmNlLiAqLworICAgICAgICBwZXZleC0+YiA9IDE7 CisgICAgICAgIG9wY1sxXSA9IChtb2RybV9yZWcgJiA3KSA8PCAzOworICAgICAgICBwZXZleC0+ UlggPSAxOworICAgICAgICBvcGNbMl0gPSAweGMzOworCisgICAgICAgIGludm9rZV9zdHViKCIi LCAiIiwgIj1tIiAoKm1tdmFscCkgOiAiYSIgKG1tdmFscCkpOworCisgICAgICAgIHBldmV4LT5w ZnggPSB2ZXhfZjM7IC8qIHZtb3ZkcXV7MzIsNjR9ICovCisgICAgICAgIHBldmV4LT53ID0gYiAm IDE7CisgICAgICAgIC8qIFN3aXRjaCB0byBzaWJfaW5kZXggYXMgc291cmNlLiAqLworICAgICAg ICBwZXZleC0+ciA9ICFtb2RlXzY0Yml0KCkgfHwgIShzdGF0ZS0+c2liX2luZGV4ICYgMHgwOCk7 CisgICAgICAgIHBldmV4LT5SID0gIW1vZGVfNjRiaXQoKSB8fCAhKHN0YXRlLT5zaWJfaW5kZXgg JiAweDEwKTsKKyAgICAgICAgb3BjWzFdID0gKHN0YXRlLT5zaWJfaW5kZXggJiA3KSA8PCAzOwor CisgICAgICAgIGludm9rZV9zdHViKCIiLCAiIiwgIj1tIiAoaW5kZXgpIDogImEiICgmaW5kZXgp KTsKKyAgICAgICAgcHV0X3N0dWIoc3R1Yik7CisKKyAgICAgICAgLyogQ2xlYXIgdW50b3VjaGVk IHBhcnRzIG9mIHRoZSBtYXNrIHZhbHVlLiAqLworICAgICAgICBuID0gMSA8PCAoMiArIGV2ZXgu bHIgLSAoKGIgJiAxKSB8IGV2ZXgudykpOworICAgICAgICBvcF9ieXRlcyA9IDQgPDwgZXZleC53 OworICAgICAgICBvcF9tYXNrICY9ICgxIDw8IG4pIC0gMTsKKworICAgICAgICBmb3IgKCBpID0g MDsgb3BfbWFzazsgKytpICkKKyAgICAgICAgeworICAgICAgICAgICAgc2lnbmVkIGxvbmcgaWR4 ID0gYiAmIDEgPyBpbmRleC5xd1tpXSA6IGluZGV4LmR3W2ldOworCisgICAgICAgICAgICBpZiAo ICEob3BfbWFzayAmICgxIDw8IGkpKSApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg ICAgICAgICAgIHJjID0gb3BzLT53cml0ZShlYS5tZW0uc2VnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRydW5jYXRlX2VhKGVhLm1lbS5vZmYgKyAoaWR4IDw8IHN0YXRlLT5zaWJfc2Nh bGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKW1tdmFscCArIGkgKiBv cF9ieXRlcywgb3BfYnl0ZXMsIGN0eHQpOworICAgICAgICAgICAgaWYgKCByYyAhPSBYODZFTVVM X09LQVkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNlZSBjb21tZW50IGlu IGdhdGhlciBlbXVsYXRpb24uICovCisgICAgICAgICAgICAgICAgaWYgKCByYyAhPSBYODZFTVVM X0VYQ0VQVElPTiAmJiBkb25lICkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBYODZFTVVMX1JF VFJZOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBvcF9tYXNrICY9IH4oMSA8PCBpKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworCisjaWZk ZWYgX19YRU5fXworICAgICAgICAgICAgaWYgKCBvcF9tYXNrICYmIGxvY2FsX2V2ZW50c19uZWVk X2RlbGl2ZXJ5KCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjID0gWDg2RU1V TF9SRVRSWTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZgor ICAgICAgICB9CisKKyAgICAgICAgLyogV3JpdGUgbWFzayByZWdpc3Rlci4gU2VlIGNvbW1lbnQg aW4gZ2F0aGVyIGVtdWxhdGlvbi4gKi8KKyAgICAgICAgb3BjID0gZ2V0X3N0dWIoc3R1Yik7Cisg ICAgICAgIG9wY1swXSA9IDB4YzU7CisgICAgICAgIG9wY1sxXSA9IDB4Zjg7CisgICAgICAgIG9w Y1syXSA9IDB4OTA7CisgICAgICAgIC8qIFVzZSAoJXJheCkgYXMgc291cmNlLiAqLworICAgICAg ICBvcGNbM10gPSBldmV4Lm9wbXNrIDw8IDM7CisgICAgICAgIG9wY1s0XSA9IDB4YzM7CisKKyAg ICAgICAgaW52b2tlX3N0dWIoIiIsICIiLCAiK20iIChvcF9tYXNrKSA6ICJhIiAoJm9wX21hc2sp KTsKKyAgICAgICAgcHV0X3N0dWIoc3R1Yik7CisKKyAgICAgICAgc3RhdGUtPnNpbWRfc2l6ZSA9 IHNpbWRfbm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBYODZFTVVMX09Q QygweDBmMzgsIDB4YzgpOiAgICAgLyogc2hhMW5leHRlIHhtbS9tMTI4LHhtbSAqLwogICAgIGNh c2UgWDg2RU1VTF9PUEMoMHgwZjM4LCAweGM5KTogICAgIC8qIHNoYTFtc2cxIHhtbS9tMTI4LHht bSAqLwogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZjM4LCAweGNhKTogICAgIC8qIHNoYTFtc2cy IHhtbS9tMTI4LHhtbSAqLwoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJv amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hl bi1kZXZlbA==