From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joao Martins Subject: Re: [PATCH 1/8] x86/time: improve cross-CPU clock monotonicity (and more) Date: Thu, 16 Jun 2016 21:27:16 +0100 Message-ID: <57630BA4.30607@oracle.com> References: <576140F302000078000F52FE@prv-mh.provo.novell.com> <5761496802000078000F5395@prv-mh.provo.novell.com> <5761DC0E.5010201@oracle.com> <57627F0702000078000F590A@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bDds6-0003ld-3x for xen-devel@lists.xenproject.org; Thu, 16 Jun 2016 20:26:38 +0000 In-Reply-To: <57627F0702000078000F590A@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: Andrew Cooper , Dario Faggioli , xen-devel List-Id: xen-devel@lists.xenproject.org Pj4+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+ICsgICAgdTY0IHRzYzsKPj4+ICsKPj4+ ICsgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwo+Pj4gKyAgICBhcF9icmluZ3VwX3JlZi5tYXN0 ZXJfc3RpbWUgPSByZWFkX3BsYXRmb3JtX3N0aW1lKCk7Cj4+PiArICAgIHRzYyA9IHJkdHNjKCk7 Cj4+PiArICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKPj4+ICsKPj4+ICsgICAgYXBfYnJp bmd1cF9yZWYubG9jYWxfc3RpbWUgPSBnZXRfc190aW1lX2ZpeGVkKHRzYyk7Cj4+PiArfQo+Pj4g Kwo+Pj4gIHZvaWQgaW5pdF9wZXJjcHVfdGltZSh2b2lkKQo+Pj4gIHsKPj4+ICAgICAgc3RydWN0 IGNwdV90aW1lICp0ID0gJnRoaXNfY3B1KGNwdV90aW1lKTsKPj4+ICAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKPj4+ICsgICAgdTY0IHRzYzsKPj4+ICAgICAgc190aW1lX3Qgbm93Owo+Pj4gIAo+ Pj4gICAgICAvKiBJbml0aWFsIGVzdGltYXRlIGZvciBUU0MgcmF0ZS4gKi8KPj4+ICAgICAgdC0+ dHNjX3NjYWxlID0gcGVyX2NwdShjcHVfdGltZSwgMCkudHNjX3NjYWxlOwo+Pj4gIAo+Pj4gICAg ICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Cj4+PiAtICAgIHQtPmxvY2FsX3RzY19zdGFtcCA9IHJk dHNjKCk7Cj4+PiAgICAgIG5vdyA9IHJlYWRfcGxhdGZvcm1fc3RpbWUoKTsKPj4gRG8gd2UgbmVl ZCB0byB0YWtlIGFub3RoZXIgcmVhZCBmcm9tIHRoZSBwbGF0Zm9ybSB0aW1lciBoZXJlPyBXZSBj b3VsZAo+PiBqdXN0IHJldXNlIHRoZSBvbmUgb24gYXBfYnJpbmd1cF9yZWYubWFzdGVyX3N0aW1l LiBTZWUgYWxzbyBiZWxvdy4KPiAKPiBZZXMsIGZvciB0aGlzIG1vZGVsIG9mIGFwcHJveGltYXRp b24gb2YgdGhlIGxvY2FsIHN0aW1lIGRlbHRhIGJ5Cj4gbWFzdGVyIHN0aW1lIGRlbHRhIHdlIG9i dmlvdXNseSBuZWVkIHRvIHJlYWQgdGhlIG1hc3RlciBjbG9jawo+IGhlcmUgYWdhaW4gKG9yIGVs c2Ugd2UgaGF2ZSBubyB3YXkgdG8gY2FsY3VsYXRlIHRoZSBtYXN0ZXIKPiBkZWx0YSwgd2hpY2gg d2Ugd2FudCB0byB1c2UgYXMgdGhlIGNvcnJlY3RpbmcgdmFsdWUpLgpBaCwgY29ycmVjdC4KCj4+ IFNvIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRoYXQgCj4+IGdldF9zX3RpbWUoUzApIG9uCj4+IENQ VTAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBnZXRfc190aW1lKFMxKSBvbiBDUFUxIFtTMSA+ IFMwXSBlbmRzIHVwIAo+PiByZXR1cm5pbmcgYQo+PiB2YWx1ZSBiYWNrd2FyZHMgSU9XIEwwICsg c2NhbGUoUzAgLSBUMCkgaXMgYmlnZ2VyIHRoYW4gTDEgKyBzY2FsZShTMSAtIFQxKS4gCj4+IFRo YXQgaXMKPj4gaW5kZXBlbmRlbnRseSBvZiB0aGUgZGVsdGFzIGJlaW5nIGFkZGVkIG9uIGV2ZXJ5 IGNhbGlicmF0aW9uLgo+Pgo+PiBTbyBob3cgYWJvdXQgd2UgZG8gdGhlIHNlZWRpbmcgaW4gYW5v dGhlciB3YXk/Cj4+Cj4+IDEpIFJlbHlpbmcgb24gaW5kaXZpZHVhbCBDUFUgVFNDIGxpa2UgeW91 IGRvIG9uIENQVSAwOgo+Pgo+PiAgICAgIHQtPnN0YW1wLm1hc3Rlcl9zdGltZSA9IG5vdzsKPj4g KyAgICB0LT5zdGFtcC5sb2NhbF90c2MgPSAwOwo+PiArICAgIHQtPnN0YW1wLmxvY2FsX3N0aW1l ID0gMDsKPj4gKwo+PiAgICAgIGlmICggYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5U X1RTQykgKQo+PiAgICAgIHsKPj4gICAgICAgICAgbm93ID0gZ2V0X3NfdGltZV9maXhlZCh0c2Mp Owo+PiAgICAgIH0KPiAKPiBBcyBzYWlkIGJlZm9yZSBlbHNld2hlcmUsIHN1Y2ggYSBtb2RlbCBj YW4gb25seSB3b3JrIGlmIGFsbCBUU0NzCj4gc3RhcnQgdGlja2luZyBhdCB0aGUgc2FtZSB0aW1l LiBUaGUgbGF0ZXN0IHRoaXMgYXNzdW1wdGlvbiBicmVha3MgCj4gaXMgd2hlbiBhIENQVSBnZXRz IHBoeXNpY2FsbHkgaG90cGx1Z2dlZC4KQWdyZWVkLgoKPj4gT3IgMikgdGFraW5nIGludG8gYWNj b3VudCB0aGUgc2tldyBiZXR3ZWVuIHBsYXRmb3JtIHRpbWVyIGFuZCB0c2Mgd2UgdGFrZSBvbgo+ PiBpbml0X3BlcmNwdV90aW1lLiBEaWZmIGJlbG93IGJhc2VkIG9uIHRoaXMgc2VyaWVzOgo+Pgo+ PiBAQCAtMTM5NCwxMSArMTUwOCwxNCBAQCB2b2lkIGluaXRfcGVyY3B1X3RpbWUodm9pZCkKPj4g ICAgICB0LT50c2Nfc2NhbGUgPSBwZXJfY3B1KGNwdV90aW1lLCAwKS50c2Nfc2NhbGU7Cj4+Cj4+ ICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwo+PiAtICAgIG5vdyA9IHJlYWRfcGxhdGZvcm1f c3RpbWUoKTsKPj4gKyAgICBub3cgPSBhcF9icmluZ3VwX3JlZi5tYXN0ZXJfc3RpbWU7Cj4+ICAg ICAgdHNjID0gcmR0c2Nfb3JkZXJlZCgpOwo+PiAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdz KTsKPj4KPj4gICAgICB0LT5zdGFtcC5tYXN0ZXJfc3RpbWUgPSBub3c7Cj4+ICsgICAgdC0+c3Rh bXAubG9jYWxfdHNjID0gYm9vdF90c2Nfc3RhbXA7Cj4gCj4gQWdhaW4gLSB0aGlzIGlzIGludmFs aWQuIEl0IGluZGVlZCB3b3JrcyBmaW5lIG9uIGEgc2luZ2xlIHNvY2tldCBzeXN0ZW0KPiAod2hl cmUgYWxsIFRTQ3Mgc3RhcnQgdGlja2luZyBhdCB0aGUgc2FtZSB0aW1lKSwgYW5kIGdpdmVzIHJl YWxseSBnb29kCj4gcmVzdWx0cy4gQnV0IGR1ZSB0byBob3RwbHVnIChhbmQgdG8gYSBsZXNzZXIg ZGVncmVlIG11bHRpLXNvY2tldCwgYnV0Cj4gbGlrZWx5IHRvIGEgc29tZXdoYXQgaGlnaGVyIGRl Z3JlZSBtdWx0aS1ub2RlLCBzeXN0ZW1zKSB3ZSBqdXN0IGNhbid0Cj4gdXNlIGJvb3RfdHNjX3N0 YW1wIGFzIHJlZmVyZW5jZSBmb3IgQVBzLgpJdCBhbHNvIGdpdmVzIHJlYWxseSBnb29kIHJlc3Vs dHMgb24gbXkgbXVsdGktc29ja2V0IHN5c3RlbSBhdCBsZWFzdCBvbiBteSBvbGQgSW50ZWwKbXVs dGktc29ja2V0IGJveCAoV2VzdG1lcmUtYmFzZWQ7IFRTQyBpbnZhcmlhbnQgaXMgaW50cm9kdWNl ZCBvbiBpdHMgcHJlZGVjZXNzb3I6Ck5laGFsZW0pLiBCdHcsIExpbnV4IHNlZW1zIHRvIHRha2Ug SW50ZWwgYm94ZXMgYXMgaGF2aW5nIHN5bmNocm9uaXplZCBUU0NzIGFjcm9zcwpjb3JlcyBhbmQg c29ja2V0cyBbMF1bMV0uIFRob3VnaCBDUFUgaG90cGx1ZyBpcyB0aGUgdHJvdWJsZXNvbWUgY2Fz ZS4KClswXSBhcmNoL3g4Ni9rZXJuZWwvdHNjLmMjTDEwODIKWzFdIGFyY2gveDg2L2tlcm5lbC9j cHUvaW50ZWwuYyNMODUKCj4gCj4+ICsgICAgdC0+c3RhbXAubG9jYWxfc3RpbWUgPSAwOwo+PiAr Cj4+Cj4+ICAgICAgLyoKPj4gICAgICAgKiBUbyBhdm9pZCBhIGRpc2NvbnRpbnVpdHkgKFRTQyBh bmQgcGxhdGZvcm0gY2xvY2sgY2FuJ3QgYmUgZXhwZWN0ZWQKPj4gICAgICAgKiB0byBiZSBpbiBw ZXJmZWN0IHN5bmMpLCBpbml0aWFsaXphdGlvbiBoZXJlIG5lZWRzIHRvIG1hdGNoIHVwIHdpdGgK Pj4gQEAgLTE0MDYsMTAgKzE1MjMsMTIgQEAgdm9pZCBpbml0X3BlcmNwdV90aW1lKHZvaWQpCj4+ ICAgICAgICovCj4+ICAgICAgaWYgKCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRf VFNDKSApCj4+ICAgICAgewo+PiArICAgICAgICB1NjQgc3RpbWUgPSBnZXRfc190aW1lX2ZpeGVk KHRzYyk7Cj4+ICsKPj4gICAgICAgICAgaWYgKCBzeXN0ZW1fc3RhdGUgPCBTWVNfU1RBVEVfc21w X2Jvb3QgKQo+PiAtICAgICAgICAgICAgbm93ID0gZ2V0X3NfdGltZV9maXhlZCh0c2MpOwo+PiAr ICAgICAgICAgICAgbm93ID0gc3RpbWU7Cj4+ICAgICAgICAgIGVsc2UKPj4gLSAgICAgICAgICAg IG5vdyArPSBhcF9icmluZ3VwX3JlZi5sb2NhbF9zdGltZSAtIGFwX2JyaW5ndXBfcmVmLm1hc3Rl cl9zdGltZTsKPj4gKyAgICAgICAgICAgIG5vdyArPSBzdGltZSAtIGFwX2JyaW5ndXBfcmVmLm1h c3Rlcl9zdGltZTsKPiAKPiBUaGF0IHNlZW1zIHRvIGNvbnRyYWRpY3QgeW91ciBkZXNpcmUgdG8g a2VlcCBvdXQgb2YgYWxsIGNhbGN1bGF0aW9ucwo+IHRoZSBza2V3IGJldHdlZW4gcGxhdGZvcm0g dGltZXIgYW5kIFRTQy4KPiAKVGhhdCdzIGluZGVlZCBteSBkZXNpcmUgKG9uIG15IHJlbGF0ZWQg c2VyaWVzIGFib3V0IHVzaW5nIHRzYyBhcyBjbG9ja3NvdXJjZSBhbmQgdHNjCnN0YWJsZSBiaXQp LCBidXQgYmVpbmcgYXdhcmUgb2YgVFNDIGxpbWl0YXRpb25zOiBJIHdhcyB0cnlpbmcgdG8gc2Vl IGlmIHRoZXJlIHdhcwpjb21tb24gZ3JvdW5kIGJldHdlZW4gdGhpcyBzZWVkaW5nIHdpdGggcGxh dGZvcm0gdGltZXIgd2hpbGUgYWNjb3VudGluZyB0byB0aGUKcG90ZW50aWFsIHVucmVsaWFibGUg VFNDIG9mIGluZGl2aWR1YWwgQ1BVcy4gQnV0IG9mIGNvdXJzZSwgZm9yIGFueSBvZiB0aGVzZQpz b2x1dGlvbnMgdG8gaGF2ZSBnZXRfc190aW1lIHJldHVybiBtb25vdG9uaWNhbGx5IGluY3JlYXNp bmcgdmFsdWVzLCBpdCBjYW4gb25seSB3b3JrCm9uIGEgdHJ1bHkgaW52YXJpYW50IFRTQyBib3gu Cgo+PiAgICAgIH0KPj4KPj4gU2Vjb25kIG9wdGlvbiBmb2xsb3dzIGEgc2ltaWxhciB0aGlua2lu ZyBvZiB0aGlzIHBhdGNoLCBidXQgb24gYm90aCB3YXlzIHRoZQo+PiBsb2NhbF9zdGltZSB3aWxs IG1hdGNoIHRoZSB0c2Mgb24gaW5pdF9wZXJjcHVfdGltZSwgdGh1cyBiZWluZyBhIG1hdGNoZWQg Cj4+IHBhaXIuIEkgaGF2ZQo+PiBhIHRlc3Qgc2ltaWxhciB0byBjaGVja190c2Nfd2FycCBidXQg d2l0aCBnZXRfc190aW1lKCkgYW5kIEkgbm8gbG9uZ2VyIAo+PiBvYnNlcnZlIHRpbWUKPj4gZ29p bmcgYmFja3dhcmRzLiBCdXQgd2l0aG91dCB0aGUgYWJvdmUgSSBzdGlsbCBvYnNlcnZlIGl0IGV2 ZW4gb24gc2hvcnQgCj4+IHBlcmlvZHMuCj4gCj4gUmlnaHQgLSBJJ20gbm90IGNsYWltaW5nIHRo ZSBzZXJpZXMgZWxpbWluYXRlcyBhbGwgYmFja3dhcmRzIG1vdmVzLgo+IEJ1dCBJIHNpbXBseSBj YW4ndCBzZWUgYSBtb2RlbCB0byBmdWxseSBlbGltaW5hdGUgdGhlbS4gClRvdGFsbHkgYWdyZWUg d2l0aCB5b3UuCgo+IEkuZS4gbXkgcGxhbiB3YXMsIG9uY2UgdGhlIGJhY2t3YXJkcyBtb3ZlcyBh cmUgc21hbGwgZW5vdWdoLCB0byBtYXliZQo+IGluZGVlZCBjb21wZW5zYXRlIHRoZW0gYnkgbWFp bnRhaW5pbmcgYSBnbG9iYWwgdmFyaWFibGUgdHJhY2tpbmcKPiB0aGUgbW9zdCByZWNlbnRseSBy ZXR1cm5lZCB2YWx1ZS4gVGhlcmUgYXJlIGlzc3VlcyB3aXRoIHN1Y2ggYW4KPiBhcHByb2FjaCB0 b28sIHRob3VnaDogSFQgZWZmZWN0cyBjYW4gcmVzdWx0IGluIG9uZSBoeXBlcnRocmVhZAo+IG1h a2luZyBpdCBqdXN0IHBhc3QgdGhhdCBjaGVjayBvZiB0aGUgZ2xvYmFsLCB0aGVuIGhhcmR3YXJl Cj4gc3dpdGNoaW5nIHRvIHRoZSBvdGhlciBoeXBlcnRocmVhZCwgTk9XKCkgcHJvZHVjaW5nIGEg c2xpZ2h0bHkKPiBsYXJnZXIgdmFsdWUgdGhlcmUsIGFuZCBoYXJkd2FyZSBzd2l0Y2hpbmcgYmFj ayB0byB0aGUgZmlyc3QKPiBoeXBlcnRocmVhZCBvbmx5IGFmdGVyIHRoZSBzZWNvbmQgb25lIGNv bnN1bWVkIHRoZSByZXN1bHQgb2YKPiBOT1coKS4gRGFyaW8ncyB1c2Ugd291bGQgYmUgdW5hZmZl Y3RlZCBieSB0aGlzIGFpdWksIGFzIGhpcyBOT1coKQo+IGludm9jYXRpb25zIGFyZSBnbG9iYWxs eSBzZXJpYWxpemVkIHRocm91Z2ggYSBzcGlubG9jaywgYnV0IGFyYml0cmFyeQo+IE5PVygpIGlu dm9jYXRpb25zIG9uIHR3byBoeXBlcnRocmVhZHMgY2FuJ3QgYmUgbWFkZSBzdWNoIHRoYXQKPiB0 aGUgaW52b2tpbmcgcGFydHkgY2FuIGJlIGd1YXJhbnRlZWQgdG8gc2VlIHN0cmljdGx5IG1vbnRv bmljCj4gdmFsdWVzLgo+IAo+IEFuZCBidHcuLCBzaW1pbGFyIGNvbnNpZGVyYXRpb25zIGFwcGx5 IGZvciB0d28gZnVsbHkgaW5kZXBlbmRlbnQKPiBDUFVzLCBpZiBvbmUgcnVucyBhdCBhIG11Y2gg aGlnaGVyIFAtc3RhdGUgdGhhbiB0aGUgb3RoZXIgKGkuZS4KPiB0aGUgZmFzdGVyIG9uZSBjb3Vs ZCBvdmVydGFrZSB0aGUgc2xvd2VyIG9uZSBiZXR3ZWVuIHRoZQo+IG1vbnRvbmljaXR5IGNoZWNr IGluIE5PVygpIGFuZCB0aGUgY2FsbGVycyBjb25zdW1pbmcgdGhlIHJldHVybmVkCj4gdmFsdWVz KS4gU28gaW4gdGhlIGVuZCBJJ20gbm90IHN1cmUgaXQncyB3b3J0aCB0aGUgcGVyZm9ybWFuY2Ug aGl0Cj4gc3VjaCBhIGdsb2JhbCBtb250b25pY2l0eSBjaGVjayB3b3VsZCBpbmN1ciwgYW5kIHRo ZXJlZm9yZSBJIGRpZG4ndAo+IG1ha2UgYSByZXNwZWN0aXZlIHBhdGNoIHBhcnQgb2YgdGhpcyBz ZXJpZXMuCj4gCgpIbSwgZ3Vlc3RzIHB2Y2xvY2sgc2hvdWxkIGhhdmUgZmFjZWQgc2ltaWxhciBp c3N1ZXMgdG9vIGFzIHRoZWlyCmxvY2FsIHN0YW1wcyBmb3IgZWFjaCB2Y3B1IGRpdmVyZ2UuIExp bnV4IGNvbW1pdCA0ODlmYjQ5ICgieDg2LCBwYXJhdmlydDogQWRkIGEKZ2xvYmFsIHN5bmNocm9u aXphdGlvbiBwb2ludCBmb3IgcHZjbG9jayIpIGRlcGljdHMgYSBmaXggdG8gc2ltaWxhciBzaXR1 YXRpb25zIHRvIHRoZQpzY2VuYXJpb3MgeW91IGp1c3QgZGVzY3JpYmVkIC0gd2hpY2ggbGVhZCB0 byBoYXZlIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIGtlZXAgdHJhY2sgb2YKbW9zdCByZWNlbnQgdGlt ZXN0YW1wLiBPbmUgaW1wb3J0YW50IGNodW5rIG9mIHRoYXQgY29tbWl0IGlzIHBhc3RlZCBiZWxv dyBmb3IKY29udmVuaWVuY2U6CgotLQovKgogKiBBc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCBsYXN0 X3ZhbHVlLCBhIGdsb2JhbCBhY2N1bXVsYXRvciwgYWx3YXlzIGdvZXMKICogZm9yd2FyZC4gSWYg d2UgYXJlIGxlc3MgdGhhbiB0aGF0LCB3ZSBzaG91bGQgbm90IGJlIG11Y2ggc21hbGxlci4KICog V2UgYXNzdW1lIHRoZXJlIGlzIGFuIGVycm9yIG1hcmdpbmcgd2UncmUgaW5zaWRlLCBhbmQgdGhl biB0aGUgY29ycmVjdGlvbgogKiBkb2VzIG5vdCBzYWNyaWZpY2UgYWNjdXJhY3kuCiAqCiAqIEZv ciByZWFkczogZ2xvYmFsIG1heSBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0ZXN0IGFuZCByZXR1cm4s CiAqIGJ1dCB0aGlzIG1lYW5zIHNvbWVvbmUgZWxzZSB1cGRhdGVkIHBva2VkIHRoZSBjbG9jayBh dCBhIGxhdGVyIHRpbWUuCiAqIFdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCBz ZWVpbmcgYSBiYWNrd2FyZHMgZXZlbnQuCiAqCiAqIEZvciB1cGRhdGVzOiBsYXN0X3ZhbHVlID0g cmV0IGlzIG5vdCBlbm91Z2gsIHNpbmNlIHR3byB2Y3B1cyBjb3VsZCBiZQogKiB1cGRhdGluZyBh dCB0aGUgc2FtZSB0aW1lLCBhbmQgb25lIG9mIHRoZW0gY291bGQgYmUgc2xpZ2h0bHkgYmVoaW5k LAogKiBtYWtpbmcgdGhlIGFzc3VtcHRpb24gdGhhdCBsYXN0X3ZhbHVlIGFsd2F5cyBnbyBmb3J3 YXJkIGZhaWwgdG8gaG9sZC4KICovCiBsYXN0ID0gYXRvbWljNjRfcmVhZCgmbGFzdF92YWx1ZSk7 CiBkbyB7CiAgICAgaWYgKHJldCA8IGxhc3QpCiAgICAgICAgIHJldHVybiBsYXN0OwogICAgIGxh c3QgPSBhdG9taWM2NF9jbXB4Y2hnKCZsYXN0X3ZhbHVlLCBsYXN0LCByZXQpOwogfSB3aGlsZSAo dW5saWtlbHkobGFzdCAhPSByZXQpKTsKLS0KClRob3VnaCBJIGFtIG5vdCBzdXJlIHdoYXQgb3Ro ZXIgb3B0aW9ucyB3ZSB3b3VsZCBoYXZlIHdpdGggc3VjaCBhIGhlYXZ5IHJlbGlhbmNlIG9uClRT QyByaWdodCBub3cuCgpKb2FvCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=