From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 6/6] x86/hvm: Implement hvmemul_write() using real mappings Date: Wed, 21 Jun 2017 16:12:32 +0100 Message-ID: <1498057952-13556-7-git-send-email-andrew.cooper3@citrix.com> References: <1498057952-13556-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: <1498057952-13556-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 , =?UTF-8?q?Mihai=20Don=C8=9Bu?= , Paul Durrant , Razvan Cojocaru , Jan Beulich List-Id: xen-devel@lists.xenproject.org QW4gYWNjZXNzIHdoaWNoIGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5IGlzIHBlcmZvcm1lZCBhdG9t aWNhbGx5IGJ5IHg4NgpoYXJkd2FyZSwgYWxiZWl0IHdpdGggYSBzZXZlcmUgcGVyZm9ybWFuY2Ug cGVuYWx0eS4gIEFuIGltcG9ydGFudCBjb3JuZXIgY2FzZQppcyB3aGVuIGEgc3RyYWRkbGVkIGFj Y2VzcyBoaXRzIHR3byBwYWdlcyB3aGljaCBkaWZmZXIgaW4gd2hldGhlciBhCnRyYW5zbGF0aW9u IGV4aXN0cywgb3IgaW4gbmV0IGFjY2VzcyByaWdodHMuCgpUaGUgdXNlIG9mIGh2bV9jb3B5Kigp IGluIGh2bWVtdWxfd3JpdGUoKSBpcyBwcm9ibGVtYXRpYywgYmVjYXVzZSBpdCBwZXJmb3Jtcwph IHRyYW5zbGF0aW9uIHRoZW4gY29tcGxldGVzIHRoZSBwYXJ0aWFsIHdyaXRlLCBiZWZvcmUgbW92 aW5nIG9udG8gdGhlIG5leHQKdHJhbnNsYXRpb24uCgpJZiBhbiBpbmRpdmlkdWFsIGVtdWxhdGVk IHdyaXRlIHN0cmFkZGxlcyB0d28gcGFnZXMsIHRoZSBmaXJzdCBvZiB3aGljaCBpcwp3cml0YWJs ZSwgYW5kIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaXMgbm90LCB0aGUgZmlyc3QgaGFsZiBvZiB0aGUg d3JpdGUgd2lsbApjb21wbGV0ZSBiZWZvcmUgI1BGIGlzIHJhaXNlZCBmcm9tIHRoZSBzZWNvbmQg aGFsZi4KClRoaXMgcmVzdWx0cyBpbiBndWVzdCBzdGF0ZSBjb3JydXB0aW9uIGFzIGEgc2lkZSBl ZmZlY3Qgb2YgZW11bGF0aW9uLCB3aGljaApoYXMgYmVlbiBvYnNlcnZlZCB0byBjYXVzZSB3aW5k b3dzIHRvIGNyYXNoIHdoaWxlIHVuZGVyIGludHJvc3BlY3Rpb24uCgpJbnRyb2R1Y2UgdGhlIGh2 bWVtdWxfeyx1bn1tYXBfbGluZWFyX2FkZHIoKSBoZWxwZXJzLCB3aGljaCB0cmFuc2xhdGUgYW4K ZW50aXJlIGNvbnRlbnRzIG9mIGEgbGluZWFyIGFjY2VzcywgYW5kIHZtYXAoKSB0aGUgdW5kZXJs eWluZyBmcmFtZXMgdG8KcHJvdmlkZSBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtYXBwaW5nIGZvciB0 aGUgZW11bGF0b3IgdG8gdXNlLiAgVGhpcyBpcyB0aGUKc2FtZSBtZWNoYW5pc20gYXMgdXNlZCBi eSB0aGUgc2hhZG93IGVtdWxhdGlvbiBjb2RlLgoKVGhpcyB3aWxsIGNhdGNoIGFueSB0cmFuc2xh dGlvbiBpc3N1ZXMgYW5kIGFib3J0IHRoZSBlbXVsYXRpb24gYmVmb3JlIGFueQptb2RpZmljYXRp b25zIG9jY3VyLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNA Y2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+CkNDOiBQ YXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpDQzogUmF6dmFuIENvam9jYXJ1 IDxyY29qb2NhcnVAYml0ZGVmZW5kZXIuY29tPgpDQzogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0 ZGVmZW5kZXIuY29tPgoKV2hpbGUgdGhlIG1heGltdW0gc2l6ZSBvZiBsaW5lYXIgbWFwcGluZyBp cyBjYXBwZWQgYXQgMSBwYWdlLCB0aGUgbG9naWMgaW4gdGhlCmhlbHBlcnMgaXMgd3JpdHRlbiB0 byB3b3JrIHByb3Blcmx5IGFzIGh2bWVtdWxfY3R4dC0+bWZuW10gZ2V0cyBsb25nZXIsCnNwZWNp ZmljYWxseSB3aXRoIFhTQVZFIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBtaW5kLgoKVGhpcyBo YXMgb25seSBoYWQgbGlnaHQgdGVzdGluZyBzbyBmYXIuCi0tLQogeGVuL2FyY2gveDg2L2h2bS9l bXVsYXRlLmMgICAgICAgIHwgMTc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9lbXVsYXRlLmggfCAgIDcgKysKIDIgZmlsZXMg Y2hhbmdlZCwgMTY5IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9odm0vZW11bGF0ZS5jIGIveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMK aW5kZXggMzg0YWQwYi4uODA0YmVhNSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS9lbXVs YXRlLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMKQEAgLTQ5OCw2ICs0OTgsMTU5 IEBAIHN0YXRpYyBpbnQgaHZtZW11bF9kb19tbWlvX2FkZHIocGFkZHJfdCBtbWlvX2dwYSwKIH0K IAogLyoKKyAqIE1hcCB0aGUgZnJhbWUocykgY292ZXJpbmcgYW4gaW5kaXZpZHVhbCBsaW5lYXIg YWNjZXNzLCBmb3Igd3JpdGVhYmxlCisgKiBhY2Nlc3MuICBNYXkgcmV0dXJuIE5VTEwgZm9yIE1N SU8sIG9yIEVSUl9QVFIoflg4NkVNVUxfKikgZm9yIG90aGVyIGVycm9ycworICogaW5jbHVkaW5n IEVSUl9QVFIoflg4NkVNVUxfT0tBWSkgZm9yIHdyaXRlLWRpc2NhcmQgbWFwcGluZ3MuCisgKgor ICogSW4gZGVidWcgYnVpbGRzLCBtYXAoKSBjaGVja3MgdGhhdCBlYWNoIHNsb3QgaW4gaHZtZW11 bF9jdHh0LT5tZm5bXSBpcworICogY2xlYW4gYmVmb3JlIHVzZSwgYW5kIHBvaXNpb25zIHVudXNl ZCBzbG90cyB3aXRoIElOVkFMSURfTUZOLgorICovCitzdGF0aWMgdm9pZCAqaHZtZW11bF9tYXBf bGluZWFyX2FkZHIoCisgICAgdW5zaWduZWQgbG9uZyBsaW5lYXIsIHVuc2lnbmVkIGludCBieXRl cywgdWludDMyX3QgcGZlYywKKyAgICBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCAqaHZtZW11bF9j dHh0KQoreworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICB2b2lkICplcnIs ICptYXBwaW5nOworCisgICAgLyogRmlyc3QgYW5kIGZpbmFsIGdmbnMgd2hpY2ggbmVlZCBtYXBw aW5nLiAqLworICAgIHVuc2lnbmVkIGxvbmcgZnJhbWUgPSBsaW5lYXIgPj4gUEFHRV9TSElGVCwg Zmlyc3QgPSBmcmFtZTsKKyAgICB1bnNpZ25lZCBsb25nIGZpbmFsID0gKGxpbmVhciArIGJ5dGVz IC0gISFieXRlcykgPj4gUEFHRV9TSElGVDsKKworICAgIC8qCisgICAgICogbWZuIHBvaW50cyB0 byB0aGUgbmV4dCBmcmVlIHNsb3QuICBBbGwgdXNlZCBzbG90cyBoYXZlIGEgcGFnZSByZWZlcmVu Y2UKKyAgICAgKiBoZWxkIG9uIHRoZW0uCisgICAgICovCisgICAgbWZuX3QgKm1mbiA9ICZodm1l bXVsX2N0eHQtPm1mblswXTsKKworICAgIC8qCisgICAgICogVGhlIGNhbGxlciBoYXMgbm8gbGVn aXRpbWF0ZSByZWFzb24gZm9yIHRyeWluZyBhIHplcm8tYnl0ZSB3cml0ZSwgYnV0CisgICAgICog ZmluYWwgaXMgY2FsY3VsYXRlIHRvIGZhaWwgc2FmZSBpbiByZWxlYXNlIGJ1aWxkcy4KKyAgICAg KgorICAgICAqIFRoZSBtYXhpbXVtIHdyaXRlIHNpemUgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9m IGFkamFjZW50IG1mbnNbXSB3aGljaAorICAgICAqIGNhbiBiZSB2bWFwKCknZCwgYWNjb3V0aW5n IGZvciBwb3NzaWJsZSBtaXNhbGlnbm1lbnQgd2l0aGluIHRoZSByZWdpb24uCisgICAgICogVGhl IGhpZ2hlciBsZXZlbCBlbXVsYXRpb24gY2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3Vy aW5nIHRoYXQKKyAgICAgKiBtZm5zW10gaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgcmVxdWVzdGVk IHdyaXRlIHNpemUuCisgICAgICovCisgICAgaWYgKCBieXRlcyA9PSAwIHx8CisgICAgICAgICBm aW5hbCAtIGZpcnN0ID4gQVJSQVlfU0laRShodm1lbXVsX2N0eHQtPm1mbikgLSAxICkKKyAgICB7 CisgICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOworICAgICAgICBnb3RvIHVuaGFuZGxlYWJs ZTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGVudW0gaHZtX3RyYW5zbGF0aW9uX3Jlc3Vs dCByZXM7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgICAgIHBhZ2VmYXVs dF9pbmZvX3QgcGZpbmZvOworICAgICAgICBwMm1fdHlwZV90IHAybXQ7CisKKyAgICAgICAgcmVz ID0gaHZtX3RyYW5zbGF0ZV9nZXRfcGFnZShjdXJyLCBmcmFtZSA8PCBQQUdFX1NISUZULCB0cnVl LCBwZmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwZmluZm8sICZw YWdlLCBOVUxMLCAmcDJtdCk7CisKKyAgICAgICAgc3dpdGNoICggcmVzICkKKyAgICAgICAgewor ICAgICAgICBjYXNlIEhWTVRSQU5TX29rYXk6CisgICAgICAgICAgICBicmVhazsKKworICAgICAg ICBjYXNlIEhWTVRSQU5TX2JhZF9saW5lYXJfdG9fZ2ZuOgorICAgICAgICAgICAgeDg2X2VtdWxf cGFnZWZhdWx0KHBmaW5mby5lYywgcGZpbmZvLmxpbmVhciwgJmh2bWVtdWxfY3R4dC0+Y3R4dCk7 CisgICAgICAgICAgICBlcnIgPSBFUlJfUFRSKH4obG9uZylYODZFTVVMX0VYQ0VQVElPTik7Cisg ICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBjYXNlIEhWTVRSQU5TX2JhZF9nZm5fdG9f bWZuOgorICAgICAgICAgICAgZXJyID0gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworCisg ICAgICAgIGNhc2UgSFZNVFJBTlNfZ2ZuX3BhZ2VkX291dDoKKyAgICAgICAgY2FzZSBIVk1UUkFO U19nZm5fc2hhcmVkOgorICAgICAgICAgICAgZXJyID0gRVJSX1BUUih+KGxvbmcpWDg2RU1VTF9S RVRSWSk7CisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgZ290byB1bmhhbmRsZWFibGU7CisgICAgICAgIH0KKworICAgICAgICAvKiBFcnJvciBj aGVja2luZy4gIENvbmZpcm0gdGhhdCB0aGUgY3VycmVudCBzbG90IGlzIGNsZWFuLiAqLworICAg ICAgICBBU1NFUlQobWZuX3goKm1mbikgPT0gMCk7CisKKyAgICAgICAgKm1mbisrID0gX21mbihw YWdlX3RvX21mbihwYWdlKSk7CisgICAgICAgIGZyYW1lKys7CisKKyAgICAgICAgaWYgKCBwMm1f aXNfZGlzY2FyZF93cml0ZShwMm10KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IEVS Ul9QVFIofihsb25nKVg4NkVNVUxfT0tBWSk7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAg ICAgfQorCisgICAgfSB3aGlsZSAoIGZyYW1lIDwgZmluYWwgKTsKKworICAgIC8qIEVudGlyZSBh Y2Nlc3Mgd2l0aGluIGEgc2luZ2xlIGZyYW1lPyAqLworICAgIGlmICggZmlyc3QgPT0gZmluYWwg KQorICAgICAgICBtYXBwaW5nID0gbWFwX2RvbWFpbl9wYWdlKGh2bWVtdWxfY3R4dC0+bWZuWzBd KSArIChsaW5lYXIgJiB+UEFHRV9NQVNLKTsKKyAgICAvKiBNdWx0aXBsZSBmcmFtZXM/IE5lZWQg dG8gdm1hcCgpLiAqLworICAgIGVsc2UgaWYgKCAobWFwcGluZyA9IHZtYXAoaHZtZW11bF9jdHh0 LT5tZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm4gLSBodm1lbXVsX2N0eHQt Pm1mbikpID09IE5VTEwgKQorICAgICAgICBnb3RvIHVuaGFuZGxlYWJsZTsKKworI2lmbmRlZiBO REVCVUcgLyogUG9pc2lvbiB1bnVzZWQgbWZuW11zIHdpdGggSU5WQUxJRF9NRk4uICovCisgICAg d2hpbGUgKCBtZm4gPCBodm1lbXVsX2N0eHQtPm1mbiArIEFSUkFZX1NJWkUoaHZtZW11bF9jdHh0 LT5tZm4pICkKKyAgICB7CisgICAgICAgIEFTU0VSVChtZm5feCgqbWZuKSA9PSAwKTsKKyAgICAg ICAgKm1mbisrID0gSU5WQUxJRF9NRk47CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gbWFw cGluZzsKKworIHVuaGFuZGxlYWJsZToKKyAgICBlcnIgPSBFUlJfUFRSKH4obG9uZylYODZFTVVM X1VOSEFORExFQUJMRSk7CisKKyBvdXQ6CisgICAgLyogRHJvcCBhbGwgaGVsZCByZWZlcmVuY2Vz LiAqLworICAgIHdoaWxlICggbWZuID4gaHZtZW11bF9jdHh0LT5tZm4gKQorICAgICAgICBwdXRf cGFnZShtZm5fdG9fcGFnZShtZm5feCgqbWZuLS0pKSk7CisKKyAgICByZXR1cm4gZXJyOworfQor CitzdGF0aWMgdm9pZCBodm1lbXVsX3VubWFwX2xpbmVhcl9hZGRyKAorICAgIHZvaWQgKm1hcHBp bmcsIHVuc2lnbmVkIGxvbmcgbGluZWFyLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgc3RydWN0 IGh2bV9lbXVsYXRlX2N0eHQgKmh2bWVtdWxfY3R4dCkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpj dXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKKyAgICB1bnNpZ25lZCBsb25nIGZyYW1lID0gbGluZWFy ID4+IFBBR0VfU0hJRlQ7CisgICAgdW5zaWduZWQgbG9uZyBmaW5hbCA9IChsaW5lYXIgKyBieXRl cyAtICEhYnl0ZXMpID4+IFBBR0VfU0hJRlQ7CisgICAgbWZuX3QgKm1mbiA9ICZodm1lbXVsX2N0 eHQtPm1mblswXTsKKworICAgIEFTU0VSVChieXRlcyA+IDApOworCisgICAgaWYgKCBmcmFtZSA9 PSBmaW5hbCApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKG1hcHBpbmcpOworICAgIGVsc2UK KyAgICAgICAgdnVubWFwKG1hcHBpbmcpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIEFTU0VS VChtZm5fdmFsaWQoKm1mbikpOworICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJyZCwgKm1m bik7CisgICAgICAgIHB1dF9wYWdlKG1mbl90b19wYWdlKG1mbl94KCptZm4pKSk7CisKKyAgICAg ICAgZnJhbWUrKzsKKyAgICAgICAgKm1mbisrID0gX21mbigwKTsgLyogQ2xlYW4gc2xvdCBmb3Ig bWFwKCkncyBlcnJvciBjaGVja2luZy4gKi8KKworICAgIH0gd2hpbGUgKCBmcmFtZSA8IGZpbmFs ICk7CisKKworI2lmbmRlZiBOREVCVUcgLyogQ2hlY2sgKGFuZCBjbGVhbikgYWxsIHVudXNlZCBt Zm5zLiAqLworICAgIHdoaWxlICggbWZuIDwgaHZtZW11bF9jdHh0LT5tZm4gKyBBUlJBWV9TSVpF KGh2bWVtdWxfY3R4dC0+bWZuKSApCisgICAgeworICAgICAgICBBU1NFUlQobWZuX2VxKCptZm4s IElOVkFMSURfTUZOKSk7CisgICAgICAgICptZm4rKyA9IF9tZm4oMCk7CisgICAgfQorI2VuZGlm Cit9CisKKy8qCiAgKiBDb252ZXJ0IGFkZHIgZnJvbSBsaW5lYXIgdG8gcGh5c2ljYWwgZm9ybSwg dmFsaWQgb3ZlciB0aGUgcmFuZ2UKICAqIFthZGRyLCBhZGRyICsgKnJlcHMgKiBieXRlc19wZXJf cmVwXS4gKnJlcHMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nIHRvCiAgKiB0aGUgdmFsaWQgY29tcHV0 ZWQgcmFuZ2UuIEl0IGlzIGFsd2F5cyA+MCB3aGVuIFg4NkVNVUxfT0tBWSBpcyByZXR1cm5lZC4K QEAgLTk4NywxMSArMTE0MCwxMSBAQCBzdGF0aWMgaW50IGh2bWVtdWxfd3JpdGUoCiAgICAgc3Ry dWN0IGh2bV9lbXVsYXRlX2N0eHQgKmh2bWVtdWxfY3R4dCA9CiAgICAgICAgIGNvbnRhaW5lcl9v ZihjdHh0LCBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCwgY3R4dCk7CiAgICAgc3RydWN0IHZjcHUg KmN1cnIgPSBjdXJyZW50OwotICAgIHBhZ2VmYXVsdF9pbmZvX3QgcGZpbmZvOwogICAgIHVuc2ln bmVkIGxvbmcgYWRkciwgcmVwcyA9IDE7CiAgICAgdWludDMyX3QgcGZlYyA9IFBGRUNfcGFnZV9w cmVzZW50IHwgUEZFQ193cml0ZV9hY2Nlc3M7CiAgICAgc3RydWN0IGh2bV92Y3B1X2lvICp2aW8g PSAmY3Vyci0+YXJjaC5odm1fdmNwdS5odm1faW87CiAgICAgaW50IHJjOworICAgIHZvaWQgKm1h cHBpbmc7CiAKICAgICBpZiAoIGlzX3g4Nl9zeXN0ZW1fc2VnbWVudChzZWcpICkKICAgICAgICAg cGZlYyB8PSBQRkVDX2ltcGxpY2l0OwpAQCAtMTAwNywyMyArMTE2MCwxNSBAQCBzdGF0aWMgaW50 IGh2bWVtdWxfd3JpdGUoCiAgICAgICAgICAodmlvLT5tbWlvX2dsYSA9PSAoYWRkciAmIFBBR0Vf TUFTSykpICkKICAgICAgICAgcmV0dXJuIGh2bWVtdWxfbGluZWFyX21taW9fd3JpdGUoYWRkciwg Ynl0ZXMsIHBfZGF0YSwgcGZlYywgaHZtZW11bF9jdHh0LCAxKTsKIAotICAgIHJjID0gaHZtX2Nv cHlfdG9fZ3Vlc3RfbGluZWFyKGFkZHIsIHBfZGF0YSwgYnl0ZXMsIHBmZWMsICZwZmluZm8pOwot Ci0gICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNlIEhWTVRSQU5TX29rYXk6Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgSFZNVFJBTlNfYmFkX2xpbmVhcl90b19nZm46Ci0gICAgICAg IHg4Nl9lbXVsX3BhZ2VmYXVsdChwZmluZm8uZWMsIHBmaW5mby5saW5lYXIsICZodm1lbXVsX2N0 eHQtPmN0eHQpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgY2FzZSBI Vk1UUkFOU19iYWRfZ2ZuX3RvX21mbjoKKyAgICBtYXBwaW5nID0gaHZtZW11bF9tYXBfbGluZWFy X2FkZHIoYWRkciwgYnl0ZXMsIHBmZWMsIGh2bWVtdWxfY3R4dCk7CisgICAgaWYgKCBJU19FUlIo bWFwcGluZykgKQorICAgICAgICByZXR1cm4gflBUUl9FUlIobWFwcGluZyk7CisgICAgZWxzZSBp ZiAoICFtYXBwaW5nICkKICAgICAgICAgcmV0dXJuIGh2bWVtdWxfbGluZWFyX21taW9fd3JpdGUo YWRkciwgYnl0ZXMsIHBfZGF0YSwgcGZlYywgaHZtZW11bF9jdHh0LCAwKTsKLSAgICBjYXNlIEhW TVRSQU5TX2dmbl9wYWdlZF9vdXQ6Ci0gICAgY2FzZSBIVk1UUkFOU19nZm5fc2hhcmVkOgotICAg ICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g WDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgfQorCisgICAgbWVtY3B5KG1hcHBpbmcsIHBfZGF0 YSwgYnl0ZXMpOworCisgICAgaHZtZW11bF91bm1hcF9saW5lYXJfYWRkcihtYXBwaW5nLCBhZGRy LCBieXRlcywgaHZtZW11bF9jdHh0KTsKIAogICAgIHJldHVybiBYODZFTVVMX09LQVk7CiB9CmRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9lbXVsYXRlLmggYi94ZW4vaW5jbHVk ZS9hc20teDg2L2h2bS9lbXVsYXRlLmgKaW5kZXggODg2NDc3NS4uNjVlZmQ0ZSAxMDA2NDQKLS0t IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZW11bGF0ZS5oCisrKyBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvaHZtL2VtdWxhdGUuaApAQCAtMzcsNiArMzcsMTMgQEAgc3RydWN0IGh2bV9lbXVsYXRl X2N0eHQgewogICAgIHVuc2lnbmVkIGxvbmcgc2VnX3JlZ19hY2Nlc3NlZDsKICAgICB1bnNpZ25l ZCBsb25nIHNlZ19yZWdfZGlydHk7CiAKKyAgICAvKgorICAgICAqIE1GTnMgYmVoaW5kIHRlbXBv cmFyeSBtYXBwaW5ncyBpbiB0aGUgd3JpdGUgY2FsbGJhY2suICBUaGUgbGVuZ3RoIGlzCisgICAg ICogYXJiaXRyYXJ5LCBhbmQgY2FuIGJlIGluY3JlYXNlZCBpZiB3cml0ZXMgbG9uZ2VyIHRoYW4g UEFHRV9TSVpFIGFyZQorICAgICAqIG5lZWRlZC4KKyAgICAgKi8KKyAgICBtZm5fdCBtZm5bMl07 CisKICAgICB1aW50MzJfdCBpbnRyX3NoYWRvdzsKIAogICAgIGJvb2xfdCBzZXRfY29udGV4dDsK LS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==