From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [RFC PATCH v2 02/16] libxc: Load BIOS and ACPI table into guest memory Date: Tue, 3 Nov 2015 17:45:45 +0000 Message-ID: <1446572745.16178.65.camel@citrix.com> References: <1445875397-2846-1-git-send-email-anthony.perard@citrix.com> <1445875397-2846-3-git-send-email-anthony.perard@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1445875397-2846-3-git-send-email-anthony.perard@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Anthony PERARD , xen-devel@lists.xen.org Cc: Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gTW9uLCAyMDE1LTEwLTI2IGF0IDE2OjAzICswMDAwLCBBbnRob255IFBFUkFSRCB3cm90ZToK CkF0IGZpcnN0IGl0IHNlZW1zIGxpa2Ugbm90IGxvYWRpbmcgdGhlIEFDUEkgdGFibGUgYWxyZWFk eSB3YXMgYW4gdW5ub3RpY2VkCmZ1bmN0aW9uYWwgcmVncmVzc2lvbiBmcm9tIHRoZSBzd2l0Y2gg dG8gSFZNIHVzaW5nIHRoZSByZWd1bGFyIFBWIGRvbWFpbgpidWlsZGVyLiBCdXQgdGhlbiBsb29r aW5nIGF0IHRoYXQgY29kZSBJIHNlZSB0aGVyZSBpcyBhbiBhY3BpX21vZHVsZSBmaWVsZAp3aGlj aCBSb2dlciBhZGRlZCB0byB0aGUgc2FtZSB4Y19kb21faW1hZ2Ugc3RydWN0IGFuZCBhcHBlYXJz IHRvIGhhdmUgYWRkZWQKY29kZSB0byBzdXBwb3J0LgoKU28gSSBndWVzcyBJIGFtIGNvbmZ1c2Vk IGFib3V0IGhvdyB3aGF0IHlvdSBhcmUgYWRkaW5nIGhlcmUgZGlmZmVycyBmcm9tCnRoYXQsIHdo aWNoIGF0IHRoZSBsZWFzdCByZXF1aXJlcyBkaXNjdXNzaW9uIGluIHRoZSBjb21taXQgbWVzc2Fn ZSwgYnV0IGl0CnNlZW1zIGxpa2UgZWl0aGVyIG9uZSBvciB0aGUgb3RoZXIgaXMgbWlzbGVhZGlu Z2x5IG5hbWVkIG5vdyBvciB0aGV5IHNob3VsZApzb21laG93IGJlIGNvbWJpbmVkLgoKSWFuLgoK PiAuLi4gYW5kIHByZXBhcmUgYSBjbWRsaW5lIGZvciBodm1sb2FkZXIgd2l0aCB0aGUgb3JkZXIg b2YgdGhlIG1vZHVsZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogQW50aG9ueSBQRVJBUkQgPGFudGhv bnkucGVyYXJkQGNpdHJpeC5jb20+Cj4gLS0tCj4gwqB0b29scy9saWJ4Yy9pbmNsdWRlL3hjX2Rv bS5owqDCoMKgfMKgwqA0ICsrCj4gwqB0b29scy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMgfCA0 NCArKysrKysrKysrKysrKysrKy0tLS0KPiDCoHRvb2xzL2xpYnhjL3hjX2RvbV94ODYuY8KgwqDC oMKgwqDCoMKgfCA5MAo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAxMzAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkK PiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20uaCBiL3Rvb2xzL2xp YnhjL2luY2x1ZGUveGNfZG9tLmgKPiBpbmRleCA0OTM5Zjc2Li5jNzAwM2E0IDEwMDY0NAo+IC0t LSBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGNfZG9tLmgKPiArKysgYi90b29scy9saWJ4Yy9pbmNs dWRlL3hjX2RvbS5oCj4gQEAgLTIwMyw2ICsyMDMsMTAgQEAgc3RydWN0IHhjX2RvbV9pbWFnZSB7 Cj4gwqAKPiDCoMKgwqDCoMKgLyogRXh0cmEgU01CSU9TIHN0cnVjdHVyZXMgcGFzc2VkIHRvIEhW TUxPQURFUiAqLwo+IMKgwqDCoMKgwqBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSBzbWJp b3NfbW9kdWxlOwo+ICsKPiArwqDCoMKgwqAvKiBCSU9TIGFzIG1vZHVsZSAqLwo+ICvCoMKgwqDC oHN0cnVjdCB4Y19odm1fZmlybXdhcmVfbW9kdWxlIGJpb3NfbW9kdWxlOwo+ICvCoMKgwqDCoHN0 cnVjdCB4Y19odm1fZmlybXdhcmVfbW9kdWxlIGFjcGlfdGFibGVfbW9kdWxlOwo+IMKgfTsKPiDC oAo+IMKgLyogLS0tIHBsdWdnYWJsZSBrZXJuZWwgbG9hZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfZG9tX2h2 bWxvYWRlci5jCj4gYi90b29scy9saWJ4Yy94Y19kb21faHZtbG9hZGVyLmMKPiBpbmRleCA3OWEz Yjk5Li4zOTg3ZWQ4IDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2xpYnhjL3hjX2RvbV9odm1sb2FkZXIu Ywo+ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX2RvbV9odm1sb2FkZXIuYwo+IEBAIC0xMjksNiArMTI5 LDE4IEBAIHN0YXRpYyBlbGZfZXJyb3JzdGF0dXMKPiB4Y19kb21fcGFyc2VfaHZtX2tlcm5lbChz dHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCj4gwqDCoMKgwqDCoHJldHVybiByYzsKPiDCoH0KPiDC oAo+ICtzdGF0aWMgdWludDY0X3QgbW9kdWxlX2luaXQoc3RydWN0IHhjX2h2bV9maXJtd2FyZV9t b2R1bGUgKm1vZHVsZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1aW50NjRfdCBtc3RhcnQpCj4gK3sKPiArI2RlZmluZSBNT0RVTEVf QUxJR04gMVVMIDw8IDcKPiArI2RlZmluZSBNS0FMSUdOKHgsIGEpICgoKHVpbnQ2NF90KSh4KSAr IChhKSAtIDEpICYgfih1aW50NjRfdCkoKGEpIC0gMSkpCj4gK8KgwqDCoMKgaWYgKCBtb2R1bGUt Pmxlbmd0aCAhPSAwICkgewo+ICvCoMKgwqDCoMKgwqDCoMKgbW9kdWxlLT5ndWVzdF9hZGRyX291 dCA9IG1zdGFydDsKPiArwqDCoMKgwqDCoMKgwqDCoHJldHVybiBNS0FMSUdOKG1vZHVsZS0+bGVu Z3RoLCBNT0RVTEVfQUxJR04pOwo+ICvCoMKgwqDCoH0gZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIDA7Cj4gK30KPiArCj4gwqBzdGF0aWMgaW50IG1vZHVsZXNfaW5pdChzdHJ1Y3QgeGNf ZG9tX2ltYWdlICpkb20sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1aW50NjRfdCB2ZW5kLCBzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgKm1z dGFydF9vdXQsIHVpbnQ2NF90ICptZW5kX291dCkKPiBAQCAtMTM2LDMzICsxNDgsNDcgQEAgc3Rh dGljIGludCBtb2R1bGVzX2luaXQoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tLAo+IMKgI2RlZmlu ZSBNT0RVTEVfQUxJR04gMVVMIDw8IDcKPiDCoCNkZWZpbmUgTUJfQUxJR07CoMKgwqDCoMKgMVVM IDw8IDIwCj4gwqAjZGVmaW5lIE1LQUxJR04oeCwgYSkgKCgodWludDY0X3QpKHgpICsgKGEpIC0g MSkgJiB+KHVpbnQ2NF90KSgoYSkgLSAxKSkKPiAtwqDCoMKgwqB1aW50NjRfdCB0b3RhbF9sZW4g PSAwLCBvZmZzZXQxID0gMDsKPiArwqDCoMKgwqB1aW50NjRfdCB0b3RhbF9sZW4gPSAwLCBvZmZz ZXQxID0gMCwgb2Zmc2V0MDsKPiArwqDCoMKgwqB1aW50NjRfdCBtc3RhcnQ7Cj4gwqAKPiAtwqDC oMKgwqBpZiAoIGRvbS0+YWNwaV9tb2R1bGUubGVuZ3RoID09IDAgJiYgZG9tLT5zbWJpb3NfbW9k dWxlLmxlbmd0aCA9PSAwCj4gKQo+IC3CoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK8KgwqDC oMKgLyogV2FudCB0byBwbGFjZSB0aGUgbW9kdWxlcyAxTWIrY2hhbmdlIGJlaGluZCB0aGUgbG9h ZGVyIGltYWdlLiAqLwo+ICvCoMKgwqDCoG1zdGFydCA9IE1LQUxJR04oZWxmLT5wZW5kLCBNQl9B TElHTikgKyAoTUJfQUxJR04pOwo+IMKgCj4gwqDCoMKgwqDCoC8qIEZpbmQgdGhlIHRvdGFsIGxl bmd0aCBmb3IgdGhlIGZpcm13YXJlIG1vZHVsZXMgd2l0aCBhIHJlYXNvbmFibGUKPiBsYXJnZQo+ IMKgwqDCoMKgwqDCoCogYWxpZ25tZW50IHNpemUgdG8gYWxpZ24gZWFjaCB0aGUgbW9kdWxlcy4K PiDCoMKgwqDCoMKgwqAqLwo+IC3CoMKgwqDCoHRvdGFsX2xlbiA9IE1LQUxJR04oZG9tLT5hY3Bp X21vZHVsZS5sZW5ndGgsIE1PRFVMRV9BTElHTik7Cj4gK8KgwqDCoMKgdG90YWxfbGVuICs9IG1v ZHVsZV9pbml0KCZkb20tPmJpb3NfbW9kdWxlLCBtc3RhcnQgKyB0b3RhbF9sZW4pOwo+ICvCoMKg wqDCoHRvdGFsX2xlbiArPSBtb2R1bGVfaW5pdCgmZG9tLT5hY3BpX3RhYmxlX21vZHVsZSwgbXN0 YXJ0ICsKPiB0b3RhbF9sZW4pOwo+ICvCoMKgwqDCoG9mZnNldDAgPSB0b3RhbF9sZW47Cj4gK8Kg wqDCoMKgdG90YWxfbGVuICs9IE1LQUxJR04oZG9tLT5hY3BpX21vZHVsZS5sZW5ndGgsIE1PRFVM RV9BTElHTik7Cj4gwqDCoMKgwqDCoG9mZnNldDEgPSB0b3RhbF9sZW47Cj4gwqDCoMKgwqDCoHRv dGFsX2xlbiArPSBNS0FMSUdOKGRvbS0+c21iaW9zX21vZHVsZS5sZW5ndGgsIE1PRFVMRV9BTElH Tik7Cj4gwqAKPiAtwqDCoMKgwqAvKiBXYW50IHRvIHBsYWNlIHRoZSBtb2R1bGVzIDFNYitjaGFu Z2UgYmVoaW5kIHRoZSBsb2FkZXIgaW1hZ2UuICovCj4gLcKgwqDCoMKgKm1zdGFydF9vdXQgPSBN S0FMSUdOKGVsZi0+cGVuZCwgTUJfQUxJR04pICsgKE1CX0FMSUdOKTsKPiArwqDCoMKgwqBpZiAo IHRvdGFsX2xlbiA9PSAwICkKPiArwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICsKPiArwqDC oMKgwqAqbXN0YXJ0X291dCA9IG1zdGFydDsKPiDCoMKgwqDCoMKgKm1lbmRfb3V0ID0gKm1zdGFy dF9vdXQgKyB0b3RhbF9sZW47Cj4gwqAKPiDCoMKgwqDCoMKgaWYgKCAqbWVuZF9vdXQgPiB2ZW5k ICkKPiDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Cj4gwqAKPiDCoMKgwqDCoMKgaWYgKCBk b20tPmFjcGlfbW9kdWxlLmxlbmd0aCAhPSAwICkKPiAtwqDCoMKgwqDCoMKgwqDCoGRvbS0+YWNw aV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAqbXN0YXJ0X291dDsKPiArwqDCoMKgwqDCoMKgwqDC oGRvbS0+YWNwaV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAqbXN0YXJ0X291dCArIG9mZnNldDA7 Cj4gwqDCoMKgwqDCoGlmICggZG9tLT5zbWJpb3NfbW9kdWxlLmxlbmd0aCAhPSAwICkKPiDCoMKg wqDCoMKgwqDCoMKgwqBkb20tPnNtYmlvc19tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAqbXN0YXJ0 X291dCArIG9mZnNldDE7Cj4gwqAKPiDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiAr c3RhdGljIHZvaWQgbG9hZG1vZHVsZShzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSAqbW9k dWxlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWlu dDhfdCAqZGVzdCwgdWludDY0X3QgbXN0YXJ0KQo+ICt7Cj4gK8KgwqDCoMKgaWYgKCBtb2R1bGUt Pmxlbmd0aCAhPSAwICkKPiArwqDCoMKgwqDCoMKgwqDCoG1lbWNweShkZXN0ICsgKG1vZHVsZS0+ Z3Vlc3RfYWRkcl9vdXQgLSBtc3RhcnQpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBtb2R1bGUtPmRhdGEsIG1vZHVsZS0+bGVuZ3RoKTsKPiArfQo+ICsKPiDCoHN0YXRpYyBpbnQg bG9hZG1vZHVsZXMoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tLAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IG1zdGFydCwgdWludDY0X3Qg bWVuZCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 aW50MzJfdCBkb21pZCkKPiBAQCAtMjAxLDkgKzIyNywxMSBAQCBzdGF0aWMgaW50IGxvYWRtb2R1 bGVzKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwKPiDCoMKgwqDCoMKgbWVtc2V0KGRlc3QsIDAs IHBhZ2VzIDw8IFBBR0VfU0hJRlQpOwo+IMKgCj4gwqDCoMKgwqDCoC8qIExvYWQgbW9kdWxlcyBp bnRvIHJhbmdlICovCj4gK8KgwqDCoMKgbG9hZG1vZHVsZSgmZG9tLT5iaW9zX21vZHVsZSwgZGVz dCwgbXN0YXJ0KTsKPiArwqDCoMKgwqBsb2FkbW9kdWxlKCZkb20tPmFjcGlfdGFibGVfbW9kdWxl LCBkZXN0LCBtc3RhcnQpOwo+IMKgwqDCoMKgwqBpZiAoIGRvbS0+YWNwaV9tb2R1bGUubGVuZ3Ro ICE9IDAgKQo+IMKgwqDCoMKgwqB7Cj4gLcKgwqDCoMKgwqDCoMKgwqBtZW1jcHkoZGVzdCwKPiAr wqDCoMKgwqDCoMKgwqDCoG1lbWNweShkZXN0ICsgKGRvbS0+YWNwaV9tb2R1bGUuZ3Vlc3RfYWRk cl9vdXQgLSBtc3RhcnQpLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG9tLT5h Y3BpX21vZHVsZS5kYXRhLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG9tLT5h Y3BpX21vZHVsZS5sZW5ndGgpOwo+IMKgwqDCoMKgwqB9Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnhjL3hjX2RvbV94ODYuYyBiL3Rvb2xzL2xpYnhjL3hjX2RvbV94ODYuYwo+IGluZGV4IGMzYmI3 YTMuLjI0NDRjYzIgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGMveGNfZG9tX3g4Ni5jCj4gKysr IGIvdG9vbHMvbGlieGMveGNfZG9tX3g4Ni5jCj4gQEAgLTUxMSw2ICs1MTEsMjcgQEAgc3RhdGlj IHZvaWQgYnVpbGRfaHZtX2luZm8odm9pZCAqaHZtX2luZm9fcGFnZSwKPiBzdHJ1Y3QgeGNfZG9t X2ltYWdlICpkb20pCj4gwqDCoMKgwqDCoGh2bV9pbmZvLT5jaGVja3N1bSA9IC1zdW07Cj4gwqB9 Cj4gwqAKPiArc3RhdGljIHZvaWQgYWRkX21vZHVsZV90b19saXN0KHN0cnVjdCB4Y19odm1fZmly bXdhcmVfbW9kdWxlICptb2R1bGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqY21k bGluZSwgc2l6ZV90Cj4gbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaHZtX21vZGxpc3RfZW50cnkgKm1vZGxp c3QsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc2l6ZV90IG1vZGxpc3Rfc2l6ZSwgaW50ICptb2R1bGVfbnIpCj4gK3sKPiAr wqDCoMKgwqBpZiAoIG1vZHVsZS0+bGVuZ3RoID09IDAgKQo+ICvCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuOwo+ICsKPiArwqDCoMKgwqAvKiBhc3NlcnQoKm1vZHVsZV9uciA8IG1vZGxpc3Rfc2l6ZSk7 ICovCj4gKwo+ICvCoMKgwqDCoGlmICggKm1vZHVsZV9uciA9PSAwICkKPiArwqDCoMKgwqDCoMKg wqDCoHN0cmNhdChjbWRsaW5lLCAibW9kdWxlcz0iKTsKPiArwqDCoMKgwqBlbHNlCj4gK8KgwqDC oMKgwqDCoMKgwqBzdHJjYXQoY21kbGluZSwgIiwiKTsKPiArwqDCoMKgwqBzdHJjYXQoY21kbGlu ZSwgbmFtZSk7Cj4gKwo+ICvCoMKgwqDCoG1vZGxpc3RbKm1vZHVsZV9ucl0ucGFkZHIgPSBtb2R1 bGUtPmd1ZXN0X2FkZHJfb3V0Owo+ICvCoMKgwqDCoG1vZGxpc3RbKm1vZHVsZV9ucl0uc2l6ZSA9 IG1vZHVsZS0+bGVuZ3RoOwo+ICvCoMKgwqDCoCgqbW9kdWxlX25yKSsrOwo+ICt9Cj4gKwo+IMKg c3RhdGljIGludCBhbGxvY19tYWdpY19wYWdlc19odm0oc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9t KQo+IMKgewo+IMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIGk7Cj4gQEAgLTYyNyw2ICs2NDgsNzUg QEAgc3RhdGljIGludCBhbGxvY19tYWdpY19wYWdlc19odm0oc3RydWN0IHhjX2RvbV9pbWFnZQo+ ICpkb20pCj4gwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgZWxzZQo+IMKgwqDCoMKgwqB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGNfZG9tX3NlZyBzZWc7Cj4gK8KgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgaHZtX3N0YXJ0X2luZm8gKnN0YXJ0X2luZm87Cj4gK8KgwqDCoMKgwqDCoMKgwqBjaGFy ICpjbWRsaW5lOwo+ICvCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGh2bV9tb2RsaXN0X2VudHJ5ICpt b2RsaXN0Owo+ICvCoMKgwqDCoMKgwqDCoMKgdm9pZCAqc3RhcnRfcGFnZTsKPiArwqDCoMKgwqDC oMKgwqDCoHNpemVfdCBjbWRsaW5lX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgwqBzaXplX3Qgc3Rh cnRfaW5mb19zaXplID0gc2l6ZW9mKCpzdGFydF9pbmZvKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg wqBjaGFyIGNtZGxpbmVfbmV3W01BWF9HVUVTVF9DTURMSU5FXTsKPiArwqDCoMKgwqDCoMKgwqDC oGludCBtb2R1bGVfbnIgPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBodm1fbW9k bGlzdF9lbnRyeSBtb2RsaXN0X2J1aWxkaW5nWzRdOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoGNt ZGxpbmVfbmV3WzBdID0gJ1wwJzsKPiArwqDCoMKgwqDCoMKgwqDCoGFkZF9tb2R1bGVfdG9fbGlz dCgmZG9tLT5iaW9zX21vZHVsZSwgImJpb3MiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbWRsaW5lX25ldywgTUFYX0dVRVNUX0NNRExJ TkUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1vZGxpc3RfYnVpbGRpbmcsCj4gQVJSQVlfU0laRShtb2RsaXN0X2J1aWxkaW5nKSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJm1v ZHVsZV9ucik7Cj4gK8KgwqDCoMKgwqDCoMKgwqBhZGRfbW9kdWxlX3RvX2xpc3QoJmRvbS0+YWNw aV90YWJsZV9tb2R1bGUsICJhY3BpX3RhYmxlIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY21kbGluZV9uZXcsIE1BWF9HVUVTVF9DTURM SU5FLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtb2RsaXN0X2J1aWxkaW5nLAo+IEFSUkFZX1NJWkUobW9kbGlzdF9idWlsZGluZyksCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZt b2R1bGVfbnIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoHN0YXJ0X2luZm9fc2l6ZSArPSBzaXpl b2YoKm1vZGxpc3QpICogbW9kdWxlX25yOwo+ICvCoMKgwqDCoMKgwqDCoMKgY21kbGluZV9zaXpl ID0gUk9VTkRVUChzdHJsZW4oY21kbGluZV9uZXcpICsgMSwgOCk7Cj4gK8KgwqDCoMKgwqDCoMKg wqBzdGFydF9pbmZvX3NpemUgKz0gY21kbGluZV9zaXplOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oHJjID0geGNfZG9tX2FsbG9jX3NlZ21lbnQoZG9tLCAmc2VnLCAiSFZNbGl0ZSBzdGFydCBpbmZv IiwgMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdGFydF9pbmZvX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKg aWYgKCByYyAhPSAwICkKPiArwqDCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRE9NUFJJTlRGKCJVbmFibGUgdG8gcmVzZXJ2ZSBtZW1vcnkgZm9yIHRoZSBzdGFydCBp bmZvIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ICvCoMKgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoHN0YXJ0X3BhZ2UgPSB4Y19tYXBfZm9yZWln bl9yYW5nZSh4Y2gsIGRvbWlkLCBzdGFydF9pbmZvX3NpemUsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNlZy5wZm4pOwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKCBzdGFydF9wYWdlID09IE5V TEwgKQo+ICvCoMKgwqDCoMKgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBET01Q UklOVEYoIlVuYWJsZSB0byBtYXAgSFZNIHN0YXJ0IGluZm8gcGFnZSIpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnb3RvIGVycm9yX291dDsKPiArwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgwqBzdGFydF9pbmZvID0gc3RhcnRfcGFnZTsKPiArwqDCoMKgwqDCoMKg wqDCoGNtZGxpbmUgPSBzdGFydF9wYWdlICsgc2l6ZW9mKCpzdGFydF9pbmZvKTsKPiArwqDCoMKg wqDCoMKgwqDCoG1vZGxpc3QgPSBzdGFydF9wYWdlICsgc2l6ZW9mKCpzdGFydF9pbmZvKSArIGNt ZGxpbmVfc2l6ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqBpZiAoIGNtZGxpbmVfc2l6ZSApCj4g K8KgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cm5jcHkoY21k bGluZSwgY21kbGluZV9uZXcsIE1BWF9HVUVTVF9DTURMSU5FKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY21kbGluZVtNQVhfR1VFU1RfQ01ETElORSAtIDFdID0gJ1wwJzsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RhcnRfaW5mby0+Y21kbGluZV9wYWRkciA9IChzZWcucGZuIDw8 IFBBR0VfU0hJRlQpICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoeGVuX3Bmbl90KWNtZGxpbmUgLQo+ICh4ZW5fcGZu X3Qpc3RhcnRfaW5mbyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgc3RhcnRfaW5mby0+bnJfbW9kdWxlcyA9IG1vZHVsZV9ucjsKPiArwqDCoMKgwqDCoMKgwqDC oGlmICggc3RhcnRfaW5mby0+bnJfbW9kdWxlcyAhPSAwICkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtZW1jcHkobW9kbGlzdCwgbW9kbGlzdF9idWlsZGluZywgc2l6ZW9mKCptb2RsaXN0 KSAqCj4gbW9kdWxlX25yKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhcnRfaW5mby0+ bW9kbGlzdF9wYWRkciA9IChzZWcucGZuIDw8IFBBR0VfU0hJRlQpICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoeGVu X3Bmbl90KW1vZGxpc3QgLQo+ICh4ZW5fcGZuX3Qpc3RhcnRfaW5mbyk7Cj4gK8KgwqDCoMKgwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgc3RhcnRfaW5mby0+bWFnaWMgPSBIVk1fU1RB UlRfTUFHSUNfVkFMVUU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgbXVubWFwKHN0YXJ0X3BhZ2Us IHN0YXJ0X2luZm9fc2l6ZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgZG9tLT5zdGFydF9pbmZv X3BmbiA9IHNlZy5wZm47Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqAqIEFsbG9jYXRlIGFuZCBjbGVhciBhZGRpdGlvbmFsIGlvcmVxIHNlcnZlciBwYWdl cy4gVGhlIGRlZmF1bHQKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCogc2VydmVyIHdpbGwgdXNlIHRo ZSBJT1JFUSBhbmQgQlVGSU9SRVEgc3BlY2lhbCBwYWdlcyBhYm92ZS4KX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK