From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH v2 11/13] tools: split up xen-init-dom0.c Date: Wed, 6 Jan 2016 16:26:10 +0000 Message-ID: <1452097570.21055.109.camel@citrix.com> References: <1450444471-6454-1-git-send-email-jgross@suse.com> <1450444471-6454-12-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450444471-6454-12-git-send-email-jgross@suse.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: Juergen Gross , xen-devel@lists.xen.org, ian.jackson@eu.citrix.com, stefano.stabellini@eu.citrix.com, wei.liu2@citrix.com, dgdegra@tycho.nsa.gov List-Id: xen-devel@lists.xenproject.org T24gRnJpLCAyMDE1LTEyLTE4IGF0IDE0OjE0ICswMTAwLCBKdWVyZ2VuIEdyb3NzIHdyb3RlOgo+ IFNwbGl0IHVwIHRvb2xzL2hlbHBlcnMveGVuLWluaXQtZG9tMC5jIGluIG9yZGVyIHRvIHByZXBh cmUgcmV1c2luZwo+IGdlbmVyYXRpb24gb2YgdGhlIGpzb24gY29uZmlndXJhdGlvbiBieSBpbml0 LXhlbnN0b3JlLWRvbWFpbi5jLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEp1ZXJnZW4gR3Jvc3MgPGpn cm9zc0BzdXNlLmNvbT4KCldlaSwgd2FzIHRoZXJlIGEgcmVhc29uIGZvciB1c2luZyBhdGV4aXQo KSB0byBmcmVlIHRoZSBoYW5kbGVzIHdoaWNoIEknbQpub3Qgc2VlaW5nPyBJT1cgSSB0aGluayB0 aGVyZSBpcyBhIHNpbmdsZSBleGl0IHBhdGggd2hpY2ggY291bGQgaGF2ZSBkb25lCmFsbCB0aGF0 IHRvZGF5LCBzbyBKdWVyZ2VuIGlzIE9LIHRvIGNoYW5nZSBpdCBpbiB0aGlzIHdheS4KCklhbi4K Cgo+IC0tLQo+IMKgdG9vbHMvaGVscGVycy9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqB8wqDCoDIg Ky0KPiDCoHRvb2xzL2hlbHBlcnMvaW5pdC1kb20tanNvbi5jIHwgNTkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+IMKgdG9vbHMvaGVscGVycy9pbml0LWRvbS1qc29uLmggfCAx OCArKysrKysrKysrKwo+IMKgdG9vbHMvaGVscGVycy94ZW4taW5pdC1kb20wLmMgfCA3MyArKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gLS0tLS0tCj4gwqA0IGZpbGVzIGNo YW5nZWQsIDg4IGluc2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQo+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IHRvb2xzL2hlbHBlcnMvaW5pdC1kb20tanNvbi5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgdG9vbHMvaGVscGVycy9pbml0LWRvbS1qc29uLmgKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMv aGVscGVycy9NYWtlZmlsZSBiL3Rvb2xzL2hlbHBlcnMvTWFrZWZpbGUKPiBpbmRleCA5MmFlYWQ0 Li5jZmI4NmY1IDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2hlbHBlcnMvTWFrZWZpbGUKPiArKysgYi90 b29scy9oZWxwZXJzL01ha2VmaWxlCj4gQEAgLTEwLDcgKzEwLDcgQEAgaWZlcSAoJChDT05GSUdf TGludXgpLHkpCj4gwqBQUk9HUyArPSBpbml0LXhlbnN0b3JlLWRvbWFpbgo+IMKgZW5kaWYKPiDC oAo+IC1YRU5fSU5JVF9ET00wX09CSlMgPSB4ZW4taW5pdC1kb20wLm8KPiArWEVOX0lOSVRfRE9N MF9PQkpTID0geGVuLWluaXQtZG9tMC5vIGluaXQtZG9tLWpzb24ubwo+IMKgJChYRU5fSU5JVF9E T00wX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVuY3RybCkKPiDCoCQoWEVOX0lOSVRf RE9NMF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKQo+IMKgJChYRU5fSU5J VF9ET00wX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVubGlnaHQpCj4gZGlmZiAtLWdp dCBhL3Rvb2xzL2hlbHBlcnMvaW5pdC1kb20tanNvbi5jIGIvdG9vbHMvaGVscGVycy9pbml0LWRv bS0KPiBqc29uLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjkxYjFm ZGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdG9vbHMvaGVscGVycy9pbml0LWRvbS1qc29uLmMK PiBAQCAtMCwwICsxLDU5IEBACj4gKyNpbmNsdWRlIDxlcnIuaD4KPiArI2luY2x1ZGUgPHN0ZGxp Yi5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2lu Y2x1ZGUgPHN0ZGlvLmg+Cj4gKwo+ICsjaW5jbHVkZSA8eGVuY3RybC5oPgo+ICsjaW5jbHVkZSA8 bGlieGwuaD4KPiArCj4gK2ludCBnZW5fc3R1Yl9qc29uX2NvbmZpZyh1aW50MzJfdCBkb21pZCkK PiArewo+ICvCoMKgwqDCoGludCByYyA9IDE7Cj4gK8KgwqDCoMKgeGVudG9vbGxvZ19sb2dnZXJf c3RkaW9zdHJlYW0gKmxvZ2dlcjsKPiArwqDCoMKgwqBsaWJ4bF9jdHggKmN0eDsKPiArwqDCoMKg wqBsaWJ4bF9kb21haW5fY29uZmlnIGRvbV9jb25maWc7Cj4gK8KgwqDCoMKgY2hhciAqanNvbiA9 IE5VTEw7Cj4gKwo+ICvCoMKgwqDCoGxvZ2dlciA9IHh0bF9jcmVhdGVsb2dnZXJfc3RkaW9zdHJl YW0oc3RkZXJyLCBYVExfRVJST1IsIDApOwo+ICvCoMKgwqDCoGlmICghbG9nZ2VyKQo+ICvCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIDE7Cj4gKwo+ICvCoMKgwqDCoGlmIChsaWJ4bF9jdHhfYWxsb2Mo JmN0eCwgTElCWExfVkVSU0lPTiwgMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKHhlbnRvb2xsb2dfbG9nZ2VyICopbG9nZ2VyKSkgewo+ICvCoMKg wqDCoMKgwqDCoMKgZnByaW50ZihzdGRlcnIsICJjYW5ub3QgaW5pdCBsaWJ4bCBjb250ZXh0XG4i KTsKPiArwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0bG9nOwo+ICvCoMKgwqDCoH0KPiArCj4gK8Kg wqDCoMKgbGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkb21fY29uZmlnKTsKPiArCj4gK8KgwqDC oMKgLyogR2VuZXJhdGUgc3R1YiBKU09OIGNvbmZpZy4gKi8KPiArwqDCoMKgwqBkb21fY29uZmln LmNfaW5mby50eXBlID0gTElCWExfRE9NQUlOX1RZUEVfUFY7Cj4gK8KgwqDCoMKgbGlieGxfZG9t YWluX2J1aWxkX2luZm9faW5pdF90eXBlKCZkb21fY29uZmlnLmJfaW5mbywKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoExJQlhMX0RPTUFJTl9UWVBFX1BWKTsKPiArCj4gK8KgwqDCoMKganNvbiA9IGxp YnhsX2RvbWFpbl9jb25maWdfdG9fanNvbihjdHgsICZkb21fY29uZmlnKTsKPiArwqDCoMKgwqAv KiBsaWJ4bC1qc29uIGZvcm1hdCByZXF1aXJlcyB0aGUgc3RyaW5nIGVuZHMgd2l0aCAnXDAnLiBD b2RlCj4gK8KgwqDCoMKgwqAqIHNuaXBwZXQgdGFrZW4gZnJvbSBsaWJ4bC4KPiArwqDCoMKgwqDC oCovCj4gK8KgwqDCoMKgcmMgPSBsaWJ4bF91c2VyZGF0YV9zdG9yZShjdHgsIGRvbWlkLCAibGli eGwtanNvbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoChjb25zdCB1aW50OF90ICopanNvbiwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RybGVuKGpzb24p ICsgMSAvKiBpbmNsdWRlICdcMCcgKi8pOwo+ICvCoMKgwqDCoGlmIChyYykKPiArwqDCoMKgwqDC oMKgwqDCoGZwcmludGYoc3RkZXJyLCAiY2Fubm90IHN0b3JlIHN0dWIganNvbiBjb25maWcgZm9y IGRvbWFpbiAldVxuIiwKPiBkb21pZCk7Cj4gKwo+ICvCoMKgwqDCoGxpYnhsX2RvbWFpbl9jb25m aWdfZGlzcG9zZSgmZG9tX2NvbmZpZyk7Cj4gK8KgwqDCoMKgZnJlZShqc29uKTsKPiArwqDCoMKg wqBsaWJ4bF9jdHhfZnJlZShjdHgpOwo+ICtvdXRsb2c6Cj4gK8KgwqDCoMKgeHRsX2xvZ2dlcl9k ZXN0cm95KCh4ZW50b29sbG9nX2xvZ2dlciAqKWxvZ2dlcik7Cj4gK8KgwqDCoMKgcmV0dXJuIHJj Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiAr ICogYy1iYXNpYy1vZmZzZXQ6IDQKPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsCj4gKyAqIEVu ZDoKPiArICovCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2hlbHBlcnMvaW5pdC1kb20tanNvbi5oIGIv dG9vbHMvaGVscGVycy9pbml0LWRvbS0KPiBqc29uLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLjU4Yzg1ZGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdG9vbHMvaGVs cGVycy9pbml0LWRvbS1qc29uLmgKPiBAQCAtMCwwICsxLDE4IEBACj4gKyNpZm5kZWYgX19JTklU X0RPTV9KU09OX0gKPiArI2RlZmluZSBfX0lOSVRfRE9NX0pTT05fSAo+ICsKPiArLyoKPiArICog R2VuZXJhdGUgYSBzdHViIEpTT04gY29uZmlnIGZvciBhIGRvbWFpbiB3aXRoIHRoZSBnaXZlbiBk b21pZC4KPiArICovCj4gK2ludCBnZW5fc3R1Yl9qc29uX2NvbmZpZyh1aW50MzJfdCBkb21pZCk7 Cj4gKwo+ICsjZW5kaWYKPiArLyoKPiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBD Cj4gKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKPiArICogYy1iYXNpYy1vZmZzZXQ6IDQKPiArICog dGFiLXdpZHRoOiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAq Lwo+IGRpZmYgLS1naXQgYS90b29scy9oZWxwZXJzL3hlbi1pbml0LWRvbTAuYyBiL3Rvb2xzL2hl bHBlcnMveGVuLWluaXQtCj4gZG9tMC5jCj4gaW5kZXggNzkyNWQ2NC4uOWFiODQ2OCAxMDA2NDQK PiAtLS0gYS90b29scy9oZWxwZXJzL3hlbi1pbml0LWRvbTAuYwo+ICsrKyBiL3Rvb2xzL2hlbHBl cnMveGVuLWluaXQtZG9tMC5jCj4gQEAgLTEsNjUgKzEsMjYgQEAKPiAtI2luY2x1ZGUgPGVyci5o Pgo+IMKgI2luY2x1ZGUgPHN0ZGxpYi5oPgo+IMKgI2luY2x1ZGUgPHN0ZGludC5oPgo+IMKgI2lu Y2x1ZGUgPHN0cmluZy5oPgo+IMKgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gwqAKPiAtI2luY2x1ZGUg PHhlbmN0cmwuaD4KPiDCoCNpbmNsdWRlIDx4ZW5zdG9yZS5oPgo+IC0jaW5jbHVkZSA8bGlieGwu aD4KPiArCj4gKyNpbmNsdWRlICJpbml0LWRvbS1qc29uLmgiCj4gwqAKPiDCoCNkZWZpbmUgRE9N TkFNRV9QQVRIwqDCoMKgIi9sb2NhbC9kb21haW4vMC9uYW1lIgo+IMKgI2RlZmluZSBET01JRF9Q QVRIwqDCoMKgwqDCoCIvbG9jYWwvZG9tYWluLzAvZG9taWQiCj4gwqAKPiAtc3RhdGljIGxpYnhs X2N0eCAqY3R4Owo+IC1zdGF0aWMgeGVudG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0gKmxvZ2dl cjsKPiAtc3RhdGljIHN0cnVjdCB4c19oYW5kbGUgKnhzaDsKPiAtCj4gLXN0YXRpYyB2b2lkIGN0 eF9hbGxvYyh2b2lkKQo+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gwqB7Cj4g LcKgwqDCoMKgaWYgKGxpYnhsX2N0eF9hbGxvYygmY3R4LCBMSUJYTF9WRVJTSU9OLCAwLAo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoeGVudG9vbGxv Z19sb2dnZXIgKilsb2dnZXIpKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVyciwg ImNhbm5vdCBpbml0IGxpYnhsIGNvbnRleHRcbiIpOwo+IC3CoMKgwqDCoMKgwqDCoMKgZXhpdCgx KTsKPiAtwqDCoMKgwqB9Cj4gK8KgwqDCoMKgaW50IHJjOwo+ICvCoMKgwqDCoHN0cnVjdCB4c19o YW5kbGUgKnhzaDsKPiArwqDCoMKgwqBjaGFyICpkb21uYW1lX3N0cmluZyA9IE5VTEwsICpkb21p ZF9zdHJpbmcgPSBOVUxMOwo+ICsKPiDCoMKgwqDCoMKgeHNoID0geHNfb3BlbigwKTsKPiDCoMKg wqDCoMKgaWYgKCF4c2gpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVyciwgImNh bm5vdCBvcGVuIHhlbnN0b3JlIGNvbm5lY3Rpb25cbiIpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoGV4 aXQoMSk7Cj4gwqDCoMKgwqDCoH0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgY3R4X2ZyZWUodm9p ZCkKPiAtewo+IC3CoMKgwqDCoGlmIChjdHgpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoGxpYnhsX2N0 eF9mcmVlKGN0eCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqBjdHggPSBOVUxMOwo+IC3CoMKgwqDCoH0K PiAtwqDCoMKgwqBpZiAobG9nZ2VyKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqB4dGxfbG9nZ2VyX2Rl c3Ryb3koKHhlbnRvb2xsb2dfbG9nZ2VyICopbG9nZ2VyKTsKPiAtwqDCoMKgwqDCoMKgwqDCoGxv Z2dlciA9IE5VTEw7Cj4gLcKgwqDCoMKgfQo+IC3CoMKgwqDCoGlmICh4c2gpIHsKPiAtwqDCoMKg wqDCoMKgwqDCoHhzX2Nsb3NlKHhzaCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqB4c2ggPSBOVUxMOwo+ IC3CoMKgwqDCoH0KPiAtfQo+IC0KPiAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ IC17Cj4gLcKgwqDCoMKgaW50IHJjOwo+IC3CoMKgwqDCoGxpYnhsX2RvbWFpbl9jb25maWcgZG9t MF9jb25maWc7Cj4gLcKgwqDCoMKgY2hhciAqZG9tbmFtZV9zdHJpbmcgPSBOVUxMLCAqZG9taWRf c3RyaW5nID0gTlVMTDsKPiAtwqDCoMKgwqBjaGFyICpqc29uID0gTlVMTDs7Cj4gLQo+IC3CoMKg wqDCoGxvZ2dlciA9IHh0bF9jcmVhdGVsb2dnZXJfc3RkaW9zdHJlYW0oc3RkZXJyLCBYVExfRVJS T1IsIDApOwo+IC3CoMKgwqDCoGlmICghbG9nZ2VyKSBleGl0KDEpOwo+IC0KPiAtwqDCoMKgwqBh dGV4aXQoY3R4X2ZyZWUpOwo+IC0KPiAtwqDCoMKgwqBjdHhfYWxsb2MoKTsKPiAtCj4gLcKgwqDC oMKgbGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkb20wX2NvbmZpZyk7Cj4gwqAKPiDCoMKgwqDC oMKgLyogU2FuaXR5IGNoZWNrOiB0aGlzIHByb2dyYW0gY2FuIG9ubHkgYmUgcnVuIG9uY2UuICov Cj4gwqDCoMKgwqDCoGRvbWlkX3N0cmluZyA9IHhzX3JlYWQoeHNoLCBYQlRfTlVMTCwgRE9NSURf UEFUSCwgTlVMTCk7Cj4gQEAgLTcwLDIyICszMSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKPiDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiDCoMKgwqDCoMKgfQo+IMKg Cj4gLcKgwqDCoMKgLyogR2VuZXJhdGUgc3R1YiBKU09OIGNvbmZpZy4gKi8KPiAtwqDCoMKgwqBk b20wX2NvbmZpZy5jX2luZm8udHlwZSA9IExJQlhMX0RPTUFJTl9UWVBFX1BWOwo+IC3CoMKgwqDC oGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvX2luaXRfdHlwZSgmZG9tMF9jb25maWcuYl9pbmZvLAo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgTElCWExfRE9NQUlOX1RZUEVfUFYpOwo+IC0KPiAtwqDCoMKg wqBqc29uID0gbGlieGxfZG9tYWluX2NvbmZpZ190b19qc29uKGN0eCwgJmRvbTBfY29uZmlnKTsK PiAtwqDCoMKgwqAvKiBsaWJ4bC1qc29uIGZvcm1hdCByZXF1aXJlcyB0aGUgc3RyaW5nIGVuZHMg d2l0aCAnXDAnLiBDb2RlCj4gLcKgwqDCoMKgwqAqIHNuaXBwZXQgdGFrZW4gZnJvbSBsaWJ4bC4K PiAtwqDCoMKgwqDCoCovCj4gLcKgwqDCoMKgcmMgPSBsaWJ4bF91c2VyZGF0YV9zdG9yZShjdHgs IDAsICJsaWJ4bC1qc29uIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKGNvbnN0IHVpbnQ4X3QgKilqc29uLAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJs ZW4oanNvbikgKyAxIC8qIGluY2x1ZGUgJ1wwJyAqLyk7Cj4gLcKgwqDCoMKgaWYgKHJjKSB7Cj4g LcKgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBzdG9yZSBzdHViIGpzb24g Y29uZmlnIGZvciBEb20wXG4iKTsKPiArwqDCoMKgwqByYyA9IGdlbl9zdHViX2pzb25fY29uZmln KDApOwo+ICvCoMKgwqDCoGlmIChyYykKPiDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiAt wqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKgLyogV3JpdGUgeGVuc3RvcmUgZW50cmllcy4gKi8K PiDCoMKgwqDCoMKgaWYgKCF4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBET01JRF9QQVRILCAiMCIs IHN0cmxlbigiMCIpKSkgewo+IEBAIC0xMDQsMTAgKzUyLDkgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQo+IMKgwqDCoMKgwqBwcmludGYoIkRvbmUgc2V0dGluZyB1cCBEb20wXG4i KTsKPiDCoAo+IMKgb3V0Ogo+IC3CoMKgwqDCoGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgm ZG9tMF9jb25maWcpOwo+IMKgwqDCoMKgwqBmcmVlKGRvbWlkX3N0cmluZyk7Cj4gwqDCoMKgwqDC oGZyZWUoZG9tbmFtZV9zdHJpbmcpOwo+IC3CoMKgwqDCoGZyZWUoanNvbik7Cj4gK8KgwqDCoMKg eHNfY2xvc2UoeHNoKTsKPiDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+IMKgfQo+IMKgCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==