From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [DRAFT 1] XenSock protocol design document Date: Mon, 11 Jul 2016 12:47:15 +0000 Message-ID: <73bd3db9772d4357a199ac681abdadba@AMSPEX02CL03.citrite.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMag5-0001Fw-0W for xen-devel@lists.xenproject.org; Mon, 11 Jul 2016 12:51:13 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini , "xen-devel@lists.xenproject.org" Cc: "jgross@suse.com" , Lars Kurth , Wei Liu , David Vrabel , "joao.m.martins@oracle.com" , "boris.ostrovsky@oracle.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQpbc25pcF0KPiAKPiAjIFhlblNvY2tzIFByb3Rv Y29sIHYxCj4gCj4gIyMgUmF0aW9uYWxlCj4gCj4gWGVuU29ja3MgaXMgYSBwYXJhdmlydHVhbGl6 ZWQgcHJvdG9jb2wgZm9yIHRoZSBQT1NJWCBzb2NrZXQgQVBJLgo+IAo+IFRoZSBwdXJwb3NlIG9m IFhlblNvY2tzIGlzIHRvIGFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNwZWNpZmljIHNl dAo+IG9mIFBPU0lYIGNhbGxzIHRvIGJlIGRvbmUgaW4gYSBkb21haW4gb3RoZXIgdGhhbiB5b3Vy IG93bi4gSXQgYWxsb3dzCj4gY29ubmVjdCwgYWNjZXB0LCBiaW5kLCByZWxlYXNlLCBsaXN0ZW4s IHBvbGwsIHJlY3Ztc2cgYW5kIHNlbmRtc2cgdG8gYmUKPiBpbXBsZW1lbnRlZCBpbiBhbm90aGVy IGRvbWFpbi4KCkRvZXMgdGhlIG90aGVyIGRvbWFpbiBoYXZlIHByaXZpbGVnZSBvdmVyIHRoZSBk b21haW4gaXNzdWluZyB0aGUgUE9TSVggY2FsbHM/Cgpbc25pcF0KPiAjIyMjIFN0YXRlIE1hY2hp bmUKPiAKPiAgICAgKipGcm9udCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkJhY2sq Kgo+ICAgICBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRl SW5pdGlhbGlzaW5nCj4gICAgIC0gUXVlcnkgdmlydHVhbCBkZXZpY2UgICAgICAgICAgICAgICAg LSBRdWVyeSBiYWNrZW5kIGRldmljZQo+ICAgICAgIHByb3BlcnRpZXMuICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWRlbnRpZmljYXRpb24gZGF0YS4KPiAgICAgLSBTZXR1cCBPUyBkZXZpY2Ug aW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAgIC0gQWxsb2NhdGUgYW5k IGluaXRpYWxpemUgdGhlICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICAgICAgIHJlcXVlc3Qg cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKPiAgICAgLSBQdWJs aXNoIHRyYW5zcG9ydCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgIFhlbmJ1c1N0YXRlSW5pdFdh aXQKPiAgICAgICB0aGF0IHdpbGwgYmUgaW4gZWZmZWN0IGR1cmluZwo+ICAgICAgIHRoaXMgY29u bmVjdGlvbi4KPiAgICAgICAgICAgICAgICAgIHwKPiAgICAgICAgICAgICAgICAgIHwKPiAgICAg ICAgICAgICAgICAgIFYKPiAgICAgICAgWGVuYnVzU3RhdGVJbml0aWFsaXNlZAo+IAo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gUXVlcnkgZnJvbnRlbmQgdHJh bnNwb3J0IHBhcmFtZXRlcnMuCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLSBDb25uZWN0IHRvIHRoZSByZXF1ZXN0IHJpbmcgYW5kCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBjaGFubmVsLgo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYZW5idXNT dGF0ZUNvbm5lY3RlZAo+IAo+ICAgICAgLSBRdWVyeSBiYWNrZW5kIGRldmljZSBwcm9wZXJ0aWVz Lgo+ICAgICAgLSBGaW5hbGl6ZSBPUyB2aXJ0dWFsIGRldmljZQo+ICAgICAgICBpbnN0YW5jZS4K PiAgICAgICAgICAgICAgICAgIHwKPiAgICAgICAgICAgICAgICAgIHwKPiAgICAgICAgICAgICAg ICAgIFYKPiAgICAgICAgIFhlbmJ1c1N0YXRlQ29ubmVjdGVkCj4gCj4gT25jZSBmcm9udGVuZCBh bmQgYmFja2VuZCBhcmUgY29ubmVjdGVkLCB0aGV5IGhhdmUgYSBzaGFyZWQgcGFnZSwgd2hpY2gK PiB3aWxsIGlzIHVzZWQgdG8gZXhjaGFuZ2UgbWVzc2FnZXMgb3ZlciBhIHJpbmcsIGFuZCBhbiBl dmVudCBjaGFubmVsLAo+IHdoaWNoIGlzIHVzZWQgdG8gc2VuZCBub3RpZmljYXRpb25zLgo+IAoK V2hhdCBhYm91dCBYZW5idXNTdGF0ZUNsb3NpbmcgYW5kIFhlbmJ1c1N0YXRlQ2xvc2VkPyBXZSdy ZSBtaXNzaW5nIGhhbGYgdGhlIHN0YXRlIG1vZGVsIGhlcmUuIFNwZWNpZmljYWxseSBob3cgZG8g aW5kaXZpZHVhbCBjb25uZWN0aW9ucyBnZXQgdGVybWluYXRlZCBpZiBlaXRoZXIgZW5kIG1vdmVz IHRvIGNsb3Npbmc/IERvZXMgZWl0aGVyIGVuZCBoYXZlIHRvIHdhaXQgZm9yIHRoZSBvdGhlcj8K Cj4gCj4gIyMjIENvbW1hbmRzIFJpbmcKPiAKPiBUaGUgc2hhcmVkIHJpbmcgaXMgdXNlZCBieSB0 aGUgZnJvbnRlbmQgdG8gZm9yd2FyZCBzb2NrZXQgQVBJIGNhbGxzIHRvIHRoZQo+IGJhY2tlbmQu IEknbGwgcmVmZXIgdG8gdGhpcyByaW5nIGFzICoqY29tbWFuZHMgcmluZyoqIHRvIGRpc3Rpbmd1 aXNoIGl0IGZyb20KPiBvdGhlciByaW5ncyB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIgaW4g dGhlIGxpZmVjeWNsZSBvZiB0aGUgcHJvdG9jb2wgKGRhdGEKPiByaW5ncykuIFRoZSByaW5nIGZv cm1hdCBpcyBkZWZpbmVkIHVzaW5nIHRoZSBmYW1pbGlhciBgREVGSU5FX1JJTkdfVFlQRVNgCj4g bWFjcm8KPiAoYHhlbi9pbmNsdWRlL3B1YmxpYy9pby9yaW5nLmhgKS4gRnJvbnRlbmQgcmVxdWVz dHMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgcmluZwo+IHVzaW5nIHRoZSBgUklOR19HRVRfUkVRVUVT VGAgbWFjcm8uCj4gCj4gVGhlIGZvcm1hdCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6Cj4gCj4gICAg ICNkZWZpbmUgWEVOU09DS19EQVRBUklOR19PUkRFUiA2Cj4gICAgICNkZWZpbmUgWEVOU09DS19E QVRBUklOR19QQUdFUyAoMSA8PCBYRU5TT0NLX0RBVEFSSU5HX09SREVSKQo+ICAgICAjZGVmaW5l IFhFTlNPQ0tfREFUQVJJTkdfU0laRSAoWEVOU09DS19EQVRBUklOR19QQUdFUyA8PAo+IFBBR0Vf U0hJRlQpCj4gCgpXaHkgYSBmaXhlZCBzaXplPyBBbHNvLCBJIGFzc3VtZSBEQVRBUklORyBzaG91 bGQgYmUgQ01EUklORyBvciBzb21lc3VjaCBoZXJlLiBQbHVzIGEgZml4ZWQgc2l6ZSBvZiAqc2l4 KiBwYWdlcyBzZWVtcyBsaWtlIGEgbG90LgoKPiAgICAgI2RlZmluZSBYRU5TT0NLX0NPTk5FQ1Qg ICAgICAgIDAKPiAgICAgI2RlZmluZSBYRU5TT0NLX1JFTEVBU0UgICAgICAgIDMKPiAgICAgI2Rl ZmluZSBYRU5TT0NLX0JJTkQgICAgICAgICAgIDQKPiAgICAgI2RlZmluZSBYRU5TT0NLX0xJU1RF TiAgICAgICAgIDUKPiAgICAgI2RlZmluZSBYRU5TT0NLX0FDQ0VQVCAgICAgICAgIDYKPiAgICAg I2RlZmluZSBYRU5TT0NLX1BPTEwgICAgICAgICAgIDcKPiAKPiAgICAgc3RydWN0IHhlbl94ZW5z b2NrX3JlcXVlc3Qgewo+ICAgICAgICAgdWludDMyX3QgaWQ7ICAgICAvKiBwcml2YXRlIHRvIGd1 ZXN0LCBlY2hvZWQgaW4gcmVzcG9uc2UgKi8KPiAgICAgICAgIHVpbnQzMl90IGNtZDsgICAgLyog Y29tbWFuZCB0byBleGVjdXRlICovCj4gICAgICAgICB1aW50NjRfdCBzb2NraWQ7IC8qIGlkIG9m IHRoZSBzb2NrZXQgKi8KPiAgICAgICAgIHVuaW9uIHsKPiAgICAgICAgICAgICBzdHJ1Y3QgeGVu X3hlbnNvY2tfY29ubmVjdCB7Cj4gICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWRkclsyOF07Cj4g ICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbjsKPiAgICAgICAgICAgICAgICAgdWludDMyX3Qg ZmxhZ3M7Cj4gICAgICAgICAgICAgICAgIGdyYW50X3JlZl90IHJlZltYRU5TT0NLX0RBVEFSSU5H X1BBR0VTXTsKPiAgICAgICAgICAgICAgICAgdWludDMyX3QgZXZ0Y2huOwo+ICAgICAgICAgICAg IH0gY29ubmVjdDsKPiAgICAgICAgICAgICBzdHJ1Y3QgeGVuX3hlbnNvY2tfYmluZCB7Cj4gICAg ICAgICAgICAgICAgIHVpbnQ4X3QgYWRkclsyOF07IC8qIGlwdjYgcmVhZHkgKi8KPiAgICAgICAg ICAgICAgICAgdWludDMyX3QgbGVuOwo+ICAgICAgICAgICAgIH0gYmluZDsKPiAgICAgICAgICAg ICBzdHJ1Y3QgeGVuX3hlbnNvY2tfYWNjZXB0IHsKPiAgICAgICAgICAgICAgICAgdWludDY0X3Qg c29ja2lkOwo+ICAgICAgICAgICAgICAgICBncmFudF9yZWZfdCByZWZbWEVOU09DS19EQVRBUklO R19QQUdFU107Cj4gICAgICAgICAgICAgICAgIHVpbnQzMl90IGV2dGNobjsKPiAgICAgICAgICAg ICB9IGFjY2VwdDsKPiAgICAgICAgIH0gdTsKPiAgICAgfTsKPiAKClBlcmhhcHMgc29tZSBsYXlv dXQgZGlhZ3JhbXMgZm9yIHRoZSBhYm92ZSB0byBhdm9pZCBBQkkgYXNzdW1wdGlvbnM/Cgo+IFRo ZSBmaXJzdCB0aHJlZSBmaWVsZHMgYXJlIGNvbW1vbiBmb3IgZXZlcnkgY29tbWFuZC4gVGhlaXIg YmluYXJ5IGxheW91dAo+IGlzOgo+IAo+ICAgICAwICAgICAgIDQgICAgICAgOCAgICAgICAxMiAg ICAgIDE2Cj4gICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAgICB8ICBp ZCAgIHwgIGNtZCAgfCAgICAgc29ja2lkICAgIHwKPiAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0rCj4gCgpUaGF0J3MgYSBzdGFydCBhdCBsZWFzdCA6LSkKCj4gLSAqKmlkKiog aXMgZ2VuZXJhdGVkIGJ5IHRoZSBmcm9udGVuZCBhbmQgaWRlbnRpZmllcyBvbmUgc3BlY2lmaWMg cmVxdWVzdAo+IC0gKipjbWQqKiBpcyB0aGUgY29tbWFuZCByZXF1ZXN0ZWQgYnkgdGhlIGZyb250 ZW5kOgo+ICAgICAtIGBYRU5TT0NLX0NPTk5FQ1RgOiAwCj4gICAgIC0gYFhFTlNPQ0tfUkVMRUFT RWA6IDMKPiAgICAgLSBgWEVOU09DS19CSU5EYDogICAgNAo+ICAgICAtIGBYRU5TT0NLX0xJU1RF TmA6ICA1Cj4gICAgIC0gYFhFTlNPQ0tfQUNDRVBUYDogIDYKPiAgICAgLSBgWEVOU09DS19QT0xM YDogICAgNwo+IC0gKipzb2NraWQqKiBpcyBnZW5lcmF0ZWQgYnkgdGhlIGZyb250ZW5kIGFuZCBp ZGVudGlmaWVzIHRoZSBzb2NrZXQgdG8KPiBjb25uZWN0LAo+ICAgYmluZCwgZXRjLiBBIG5ldyBz b2NraWQgaXMgcmVxdWlyZWQgb24gYFhFTlNPQ0tfQ09OTkVDVGAgYW5kCj4gYFhFTlNPQ0tfQklO RGAKPiAgIGNvbW1hbmRzLiBBIG5ldyBzb2NraWQgaXMgYWxzbyByZXF1aXJlZCBvbiBgWEVOU09D S19BQ0NFUFRgLCBmb3IgdGhlCj4gbmV3Cj4gICBzb2NrZXQuCj4gCgpbc25pcF0KPiAjIyMjIENv bm5lY3QKPiAKPiBUaGUgKipjb25uZWN0Kiogb3BlcmF0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBj b25uZWN0IHN5c3RlbSBjYWxsLiBJdAo+IGNvbm5lY3RzIGEKPiBzb2NrZXQgdG8gdGhlIHNwZWNp ZmllZCBhZGRyZXNzLiAqKnNvY2tpZCoqIGlzIGZyZWVseSBjaG9zZW4gYnkgdGhlIGZyb250ZW5k Cj4gYW5kCj4gcmVmZXJlbmNlcyB0aGlzIHNwZWNpZmljIHNvY2tldCBmcm9tIHRoaXMgcG9pbnQg Zm9yd2FyZC4KPiAKPiBUaGUgY29ubmVjdCBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyBzaGFyZWQg cmluZywgd2hpY2ggd2UnbGwgY2FsbCAqKmRhdGEKPiByaW5nKiouCj4gVGhlIG5ldyByaW5nIGlz IHVzZWQgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgdGhlIGNvbm5lY3RlZCBzb2NrZXQu Cj4gSW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIHNldHVwIHRoZSBuZXcgcmluZywgc3VjaCBhcyBn cmFudCB0YWJsZSByZWZlcmVuY2VzCj4gYW5kCj4gZXZlbnQgY2hhbm5lbCBwb3J0cywgYXJlIHBh c3NlZCBmcm9tIHRoZSBmcm9udGVuZCB0byB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mCj4gdGhpcyBy ZXF1ZXN0LiBBICoqZGF0YSByaW5nKiogaXMgdW5tYXBwZWQgYW5kIGZyZWVkIHVwb24gaXNzdWlu ZyBhCj4gKipyZWxlYXNlKioKPiBjb21tYW5kIG9uIHRoZSBhY3RpdmUgc29ja2V0IGlkZW50aWZp ZWQgYnkgKipzb2NraWQqKi4KPiAKPiBXaGVuIHRoZSBmcm9udGVuZCBpc3N1ZXMgYSAqKmNvbm5l Y3QqKiBjb21tYW5kLCB0aGUgYmFja2VuZDoKPiAtIGNyZWF0ZXMgYSBuZXcgc29ja2V0IGFuZCBj b25uZWN0cyBpdCB0byAqKmFkZHIqKgo+IC0gY3JlYXRlcyBhbiBpbnRlcm5hbCBtYXBwaW5nIGZy b20gKipzb2NraWQqKiB0byBpdHMgb3duIHNvY2tldAo+IC0gbWFwcyBhbGwgdGhlIGdyYW50IHJl ZmVyZW5jZXMgYW5kIHVzZXMgdGhlbSBhcyBzaGFyZWQgbWVtb3J5IGZvciB0aGUgbmV3Cj4gZGF0 YQo+ICAgcmluZwo+IC0gYmluZCB0aGUgKipldnRjaG4qKgo+IC0gcmVwbGllcyB0byB0aGUgZnJv bnRlbmQKPiAKPiBUaGUgZGF0YSByaW5nIGZvcm1hdCB3aWxsIGJlIGRlc2NyaWJlZCBpbiB0aGUg Zm9sbG93aW5nIHNlY3Rpb24uCj4gCj4gRmllbGRzOgo+IAo+IC0gKipjbWQqKiB2YWx1ZTogMAo+ IC0gYWRkaXRpb25hbCBmaWVsZHM6Cj4gICAtICoqYWRkcioqOiBhZGRyZXNzIHRvIGNvbm5lY3Qg dG8sIGluIHN0cnVjdCBzb2NrYWRkciBmb3JtYXQKPiAgIC0gKipsZW4qKjogYWRkcmVzcyBsZW5n dGgKPiAgIC0gKipmbGFncyoqOiBmbGFncyBmb3IgdGhlIGNvbm5lY3Rpb24sIHJlc2VydmVkIGZv ciBmdXR1cmUgdXNhZ2UKPiAgIC0gKipyZWYqKjogZ3JhbnQgcmVmZXJlbmNlcyBvZiB0aGUgZGF0 YSByaW5nCj4gICAtICoqZXZ0Y2huKio6IHBvcnQgbnVtYmVyIG9mIHRoZSBldnRjaG4gdG8gc2ln bmFsIGFjdGl2aXR5IG9uIHRoZSBkYXRhIHJpbmcKPiAKPiBCaW5hcnkgbGF5b3V0Ogo+IAo+ICAg ICAgICAgMTYgICAgICAyMCAgICAgIDI0ICAgICAgMjggICAgICAzMiAgICAgIDM2ICAgICAgNDAg ICAgICA0NCAgICAgNDgKPiAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFkZHIgICAgICAgICAgICAgICAgICAgICAgIHwgIGxlbiAgfAo+ICAg ICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSsKPiAgICAgICAgIHwgZmxhZ3MgfHJlZlswXSB8cmVmWzFdIHxyZWZbMl0g fHJlZlszXSB8cmVmWzRdIHxyZWZbNV0gfHJlZls2XSB8Cj4gICAgICAgICArLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAg ICAgICAgfHJlZls3XSB8cmVmWzhdIHxyZWZbOV0gfHJlZlsxMF18cmVmWzExXXxyZWZbMTJdfHJl ZlsxM118cmVmWzE0XXwKPiAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgICAgICB8cmVmWzE1XXxyZWZb MTZdfHJlZlsxN118cmVmWzE4XXxyZWZbMTldfHJlZlsyMF18cmVmWzIxXXxyZWZbMjJdfAo+ICAg ICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSsKPiAgICAgICAgIHxyZWZbMjNdfHJlZlsyNF18cmVmWzI1XXxyZWZbMjZd fHJlZlsyN118cmVmWzI4XXxyZWZbMjldfHJlZlszMF18Cj4gICAgICAgICArLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAg ICAgICAgfHJlZlszMV18cmVmWzMyXXxyZWZbMzNdfHJlZlszNF18cmVmWzM1XXxyZWZbMzZdfHJl ZlszN118cmVmWzM4XXwKPiAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgICAgICB8cmVmWzM5XXxyZWZb NDBdfHJlZls0MV18cmVmWzQyXXxyZWZbNDNdfHJlZls0NF18cmVmWzQ1XXxyZWZbNDZdfAo+ICAg ICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSsKPiAgICAgICAgIHxyZWZbNDddfHJlZls0OF18cmVmWzQ5XXxyZWZbNTBd fHJlZls1MV18cmVmWzUyXXxyZWZbNTNdfHJlZls1NF18Cj4gICAgICAgICArLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAg ICAgICAgfHJlZls1NV18cmVmWzU2XXxyZWZbNTddfHJlZls1OF18cmVmWzU5XXxyZWZbNjBdfHJl Zls2MV18cmVmWzYyXXwKPiAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCj4gICAgICAgICB8cmVmWzYzXXxldnRj aG4gfAo+ICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSsKPiAKClNvIHlvdSByZWFsbHkgZG8gd2Fu dCB0byBiYWtlIGEgNjQgcGFnZSByaW5nIGludG8gdGhlIHByb3RvY29sIHRoZW4/Cgo+IFJldHVy biB2YWx1ZToKPiAKPiAgIC0gMCBvbiBzdWNjZXNzCj4gICAtIGxlc3MgdGhhbiAwIG9uIGZhaWx1 cmUsIHNlZSB0aGUgZXJyb3IgY29kZXMgb2YgdGhlIHNvY2tldCBzeXN0ZW0gY2FsbAo+IAoKVGhl IHNvY2tldCBzeXN0ZW0gY2FsbCBvbiB3aGljaCBPUz8KCj4gIyMjIyBCaW5kCj4gCj4gVGhlICoq YmluZCoqIG9wZXJhdGlvbiBhc3NpZ25zIHRoZSBhZGRyZXNzIHBhc3NlZCBhcyBwYXJhbWV0ZXIg dG8gdGhlCj4gc29ja2V0Lgo+IEl0IGNvcnJlc3BvbmRzIHRvIHRoZSBiaW5kIHN5c3RlbSBjYWxs LgoKSXMgYSBkb21haW4gYWxsb3dlZCB0byBiaW5kIHRvIGEgcHJpdmlsZWdlZCBwb3J0IGluIHRo ZSBiYWNrZW5kIGRvbWFpbj8KCj4gKipzb2NraWQqKiBpcyBmcmVlbHkgY2hvc2VuIGJ5IHRoZQo+ IGZyb250ZW5kIGFuZCByZWZlcmVuY2VzIHRoaXMgc3BlY2lmaWMgc29ja2V0IGZyb20gdGhpcyBw b2ludCBmb3J3YXJkLgo+ICoqQmluZCoqLAo+ICoqbGlzdGVuKiogYW5kICoqYWNjZXB0KiogYXJl IHRoZSB0aHJlZSBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIGhhdmUgZnVsbHkKPiB3b3JraW5nIHBh c3NpdmUgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGlzc3VlZCBpbiB0aGlzIG9yZGVyLgo+IAo+IEZp ZWxkczoKPiAKPiAtICoqY21kKiogdmFsdWU6IDQKPiAtIGFkZGl0aW9uYWwgZmllbGRzOgo+ICAg LSAqKmFkZHIqKjogYWRkcmVzcyB0byBiaW5kIHRvLCBpbiBzdHJ1Y3Qgc29ja2FkZHIgZm9ybWF0 Cj4gICAtICoqbGVuKio6IGFkZHJlc3MgbGVuZ3RoCj4gCj4gQmluYXJ5IGxheW91dDoKPiAKPiAg ICAgICAgIDE2ICAgICAgMjAgICAgICAyNCAgICAgIDI4ICAgICAgMzIgICAgICAzNiAgICAgIDQw ICAgICAgNDQgICAgIDQ4Cj4gICAgICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwo+ICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhZGRyICAgICAgICAgICAgICAgICAgICAgICB8ICBsZW4gIHwKPiAg ICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSst LS0tLS0tKy0tLS0tLS0rCj4gCj4gUmV0dXJuIHZhbHVlOgo+IAo+ICAgLSAwIG9uIHN1Y2Nlc3MK PiAgIC0gbGVzcyB0aGFuIDAgb24gZmFpbHVyZSwgc2VlIHRoZSBlcnJvciBjb2RlcyBvZiB0aGUg YmluZCBzeXN0ZW0gY2FsbAo+IAo+IAo+ICMjIyMgTGlzdGVuCj4gCj4gVGhlICoqbGlzdGVuKiog b3BlcmF0aW9uIG1hcmtzIHRoZSBzb2NrZXQgYXMgYSBwYXNzaXZlIHNvY2tldC4gSXQKPiBjb3Jy ZXNwb25kcyB0bwo+IHRoZSBsaXN0ZW4gc3lzdGVtIGNhbGwuCgouLi53aGljaCBhbHNvIHRha2Vz IGEgJ2JhY2tsb2cnIHBhcmFtZXRlciwgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGJlIHNwZWNpZmll ZCBoZXJlLgoKPiAKPiBGaWVsZHM6Cj4gCj4gLSAqKmNtZCoqIHZhbHVlOiA1Cj4gLSBhZGRpdGlv bmFsIGZpZWxkczogbm9uZQo+IAo+IFJldHVybiB2YWx1ZToKPiAgIC0gMCBvbiBzdWNjZXNzCj4g ICAtIGxlc3MgdGhhbiAwIG9uIGZhaWx1cmUsIHNlZSB0aGUgZXJyb3IgY29kZXMgb2YgdGhlIGxp c3RlbiBzeXN0ZW0gY2FsbAo+IAo+IAoKW3NuaXBdCj4gIyMjIERhdGEgcmluZwo+IAo+IERhdGEg cmluZ3MgYXJlIHVzZWQgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhIG92ZXIgYSBjb25u ZWN0ZWQgc29ja2V0Lgo+IFRoZXkKPiBhcmUgY3JlYXRlZCB1cG9uIGEgc3VjY2Vzc2Z1bCAqKmFj Y2VwdCoqIG9yICoqY29ubmVjdCoqIGNvbW1hbmQuIFRoZQo+IHJpbmcgd29ya3MKPiBpbiBhIHNp bWlsYXIgd2F5IHRvIHRoZSBleGlzdGluZyBYZW4gY29uc29sZSByaW5nLgo+IAo+ICMjIyMgRm9y bWF0Cj4gCj4gICAgICNkZWZpbmUgWEVOU09DS19EQVRBUklOR19PUkRFUiA2Cj4gICAgICNkZWZp bmUgWEVOU09DS19EQVRBUklOR19QQUdFUyAoMSA8PCBYRU5TT0NLX0RBVEFSSU5HX09SREVSKQo+ ICAgICAjZGVmaW5lIFhFTlNPQ0tfREFUQVJJTkdfU0laRSAoWEVOU09DS19EQVRBUklOR19QQUdF UyA8PAo+IFBBR0VfU0hJRlQpCj4gICAgIHR5cGVkZWYgdWludDMyX3QgWEVOU09DS19SSU5HX0lE WDsKPiAKPiAgICAgc3RydWN0IHhlbnNvY2tfcmluZ19pbnRmIHsKPiAgICAgCWNoYXIgaW5bWEVO U09DS19EQVRBUklOR19TSVpFLzRdOwo+ICAgICAJY2hhciBvdXRbWEVOU09DS19EQVRBUklOR19T SVpFLzJdOwoKV2h5IGhhdmUgZGlmZmVyaW5nIHNpemVzIGZvciB0aGUgcmluZ3M/Cgo+ICAgICAJ WEVOU09DS19SSU5HX0lEWCBpbl9jb25zLCBpbl9wcm9kOwo+ICAgICAJWEVOU09DS19SSU5HX0lE WCBvdXRfY29ucywgb3V0X3Byb2Q7Cj4gICAgIAlpbnQzMl90IGluX2Vycm9yLCBvdXRfZXJyb3I7 Cj4gICAgIH07Cj4gCj4gVGhlIGRlc2lnbiBpcyBmbGV4aWJsZSBhbmQgY2FuIHN1cHBvcnQgZGlm ZmVyZW50IHJpbmcgc2l6ZXMgKGF0IGNvbXBpbGUgdGltZSkuCj4gVGhlIGZvbGxvd2luZyBkZXNj cmlwdGlvbiBpcyBiYXNlZCBvbiBvcmRlciA2IHJpbmdzLCBjaG9zZW4gYmVjYXVzZSB0aGV5Cj4g cHJvdmlkZQo+IGV4Y2VsbGVudCBwZXJmb3JtYW5jZS4KPiAKCldoYXQgYWJvdXQgZGF0YWdyYW0g c29ja2V0cz8gUmF3IHNvY2tldHM/IFNldHRpbmcgc29ja2V0IG9wdGlvbnM/IEV0Yy4KCiAgUGF1 bAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==