From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH 1/4] xen: credit2: implement utilization cap Date: Thu, 22 Jun 2017 17:55:33 +0100 Message-ID: <2db5b8c2-eb6b-3926-806e-9bcf2e46b4a1@citrix.com> References: <149692186557.9605.11625777539060264052.stgit@Solace.fritz.box> <149692372627.9605.8252407697848997058.stgit@Solace.fritz.box> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dO5ON-0003wm-Lg for xen-devel@lists.xenproject.org; Thu, 22 Jun 2017 16:55:39 +0000 In-Reply-To: <149692372627.9605.8252407697848997058.stgit@Solace.fritz.box> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Dario Faggioli , xen-devel@lists.xenproject.org Cc: Wei Liu , George Dunlap , Andrew Cooper , Anshul Makkar , Ian Jackson , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gMDgvMDYvMTcgMTM6MDgsIERhcmlvIEZhZ2dpb2xpIHdyb3RlOgo+IFRoaXMgY29tbWl0IGlt cGxlbWVudHMgdGhlIFhlbiBwYXJ0IG9mIHRoZSBjYXAgbWVjaGFuaXNtIGZvcgo+IENyZWRpdDIu Cj4gCj4gQSBjYXAgaXMgaG93IG11Y2gsIGluIHRlcm1zIG9mICUgb2YgcGh5c2ljYWwgQ1BVIHRp bWUsIGEgZG9tYWluCj4gY2FuIGV4ZWN1dGUgYXQgbW9zdC4KPiAKPiBGb3IgaW5zdGFuY2UsIGEg ZG9tYWluIHRoYXQgbXVzdCBub3QgdXNlIG1vcmUgdGhhbiAxLzQgb2Ygb25lCj4gcGh5c2ljYWwg Q1BVLCBtdXN0IGhhdmUgYSBjYXAgb2YgMjUlOyBvbmUgdGhhdCBtdXN0IG5vdCB1c2UgbW9yZQo+ IHRoYW4gMSsxLzIgb2YgcGh5c2ljYWwgQ1BVIHRpbWUsIG11c3QgYmUgZ2l2ZW4gYSBjYXAgb2Yg MTUwJS4KPiAKPiBDYXBzIGFyZSBwZXIgZG9tYWluLCBzbyBpdCBpcyBhbGwgYSBkb21haW4ncyB2 Q1BVcywgY3VtdWxhdGl2ZWx5LAo+IHRoYXQgd2lsbCBiZSBmb3JjZWQgdG8gZXhlY3V0ZSBubyBt b3JlIHRoYW4gdGhlIGRlY2lkZWQgYW1vdW50Lgo+IAo+IFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkg Z2l2aW5nIGVhY2ggZG9tYWluIGEgJ2J1ZGdldCcsIGFuZCB1c2luZwo+IGEgKHBlci1kb21haW4g YWdhaW4pIHBlcmlvZGljIHRpbWVyLiBWYWx1ZXMgb2YgYnVkZ2V0IGFuZCAncGVyaW9kJwo+IGFy ZSBjaG9zZW4gc28gdGhhdCBidWRnZXQvcGVyaW9kIGlzIGVxdWFsIHRvIHRoZSBjYXAgaXRzZWxm Lgo+IAo+IEJ1ZGdldCBpcyBidXJuZWQgYnkgdGhlIGRvbWFpbidzIHZDUFVzLCBpbiBhIHNpbWls YXIgd2F5IHRvIGhvdwo+IGNyZWRpdHMgYXJlLgo+IAo+IFdoZW4gYSBkb21haW4gcnVucyBvdXQg b2YgYnVkZ2V0LCBpdHMgdkNQVXMgY2FuJ3QgcnVuIGFueSBsb25nZXIuCj4gVGhleSBjYW4gZ2Fp biwgd2hlbiB0aGUgYnVkZ2V0IGlzIHJlcGxlbmlzaG1lbnQgYnkgdGhlIHRpbWVyLCB3aGljaAo+ IGV2ZW50IGhhcHBlbnMgb25jZSBldmVyeSBwZXJpb2QuCj4gCj4gQmxvY2tpbmcgdGhlIHZDUFVz IGJlY2F1c2Ugb2YgbGFjayBvZiBidWRnZXQgaGFwcGVucyBieQo+IG1lYW5zIG9mIGEgbmV3IChf VlBGX3BhcmtlZCkgcGF1c2UgZmxhZywgc28gdGhhdCwgZS5nLiwKPiB2Y3B1X3J1bm5hYmxlKCkg c3RpbGwgd29ya3MuIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzCj4gZG9uZSBpbiBzY2hlZF9y dGRzLmMsIGFzIG9wcG9zZWQgdG8gd2hhdCBoYXBwZW5zIGluCj4gc2NoZWRfY3JlZGl0LmMsIHdo ZXJlIHZjcHVfcGF1c2UoKSBhbmQgdmNwdV91bnBhdXNlKCkKPiAod2hpY2ggbWVhbnMsIGFtb25n IG90aGVyIHRoaW5ncywgbW9yZSBvdmVyaGVhZCkuCj4gCj4gTm90ZSB0aGF0IHhlbmFseXplIGFu ZCB0b29scy94ZW50cmFjZS9mb3JtYXQgYXJlIGFsc28gbW9kaWZpZWQsCj4gdG8ga2VlcCB0aGVt IHVwZGF0ZWQgd2l0aCBvbmUgbW9kaWZpZWQgZXZlbnQuCj4gCj4gU2lnbmVkLW9mZi1ieTogRGFy aW8gRmFnZ2lvbGkgPGRhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20+CgpMb29rcyByZWFsbHkgZ29v ZCBvdmVyYWxsLCBEYXJpbyEgIEp1c3QgYSBmZXcgcmVsYXRpdmVseSBtaW5vciBjb21tZW50cy4K Cj4gZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vc2NoZWRfY3JlZGl0Mi5jIGIveGVuL2NvbW1vbi9z Y2hlZF9jcmVkaXQyLmMKPiBpbmRleCAxMjY0MTdjLi5iYTRiZjRiIDEwMDY0NAo+IC0tLSBhL3hl bi9jb21tb24vc2NoZWRfY3JlZGl0Mi5jCj4gKysrIGIveGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQy LmMKPiBAQCAtOTIsNiArOTIsODIgQEAKPiAgICovCj4gIAo+ICAvKgo+ICsgKiBVdGlsaXphdGlv biBjYXA6Cj4gKyAqCj4gKyAqIFNldHRpbmcgYW4gcENQVSB1dGlsaXphdGlvbiBjYXAgZm9yIGEg ZG9tYWluIG1lYW5zIHRoZSBmb2xsb3dpbmc6Cj4gKyAqCj4gKyAqIC0gYSBkb21haW4gY2FuIGhh dmUgYSBjYXAsIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiAlIG9mIHBoeXNpY2FsIENQVSB0aW1lLgo+ ICsgKiAgIEEgZG9tYWluIHRoYXQgbXVzdCBub3QgdXNlIG1vcmUgdGhhbiAxLzQgb2YgX29uZV8g cGh5c2ljYWwgQ1BVLCB3aWxsCj4gKyAqICAgYmUgZ2l2ZW4gYSBjYXAgb2YgMjUlOyBhIGRvbWFp biB0aGF0IG11c3Qgbm90IHVzZSBtb3JlIHRoYW4gMSsxLzIgb2YKPiArICogICBwaHlzaWNhbCBD UFUgdGltZSwgd2lsbCBiZSBnaXZlbiBhIGNhcCBvZiAxNTAlOwo+ICsgKgo+ICsgKiAtIGNhcHMg YXJlIHBlci1kb21haW4gKG5vdCBwZXItdkNQVSkuIElmIGEgZG9tYWluIGhhcyBvbmx5IDEgdkNQ VSwgYW5kCj4gKyAqICAgYSA0MCUgY2FwLCB0aGF0IG9uZSB2Q1BVIHdpbGwgdXNlIDQwJSBvZiBv bmUgcENQVS4gSWYgYSBzb21haW4gaGFzIDQKPiArICogICB2Q1BVcywgYW5kIGEgMjAwJSBjYXAs IGFsbCBpdHMgNCB2Q1BVcyBhcmUgYWxsb3dlZCB0byBydW4gZm9yICh0aGUKPiArICogICBlcXVp dmFsZW50IG9mKSAxMDAlIHRpbWUgb24gMiBwQ1BVcy4gSG93IG11Y2ggZWFjaCBvZiB0aGUgdmFy aW91cyA0Cj4gKyAqICAgdkNQVXMgd2lsbCBnZXQsIGlzIHVuc3BlY2lmaWVkICh3aWxsIGRlcGVu ZCBvbiB2YXJpb3VzIGFzcGVjdHM6IHdvcmtsb2FkLAo+ICsgKiAgIHN5c3RlbSBsb2FkLCBldGMu KS4KPiArICoKPiArICogRm9yIGltcGxlbWVudGluZyB0aGlzLCB3ZSB1c2UgdGhlIGZvbGxvd2lu ZyBhcHByb2FjaDoKPiArICoKPiArICogLSBlYWNoIGRvbWFpbiBpcyBnaXZlbiBhICdidWRnZXQn LCBhbiBlYWNoIGRvbWFpbiBoYXMgYSB0aW1lciwgd2hpY2gKPiArICogICByZXBsZW5pc2hlcyB0 aGUgZG9tYWluJ3MgYnVkZ2V0IHBlcmlvZGljYWxseS4gVGhlIGJ1ZGdldCBpcyB0aGUgYW1vdW50 Cj4gKyAqICAgb2YgdGltZSB0aGUgdkNQVXMgb2YgdGhlIGRvbWFpbiBjYW4gdXNlIGV2ZXJ5ICdw ZXJpb2QnOwo+ICsgKgo+ICsgKiAtIHRoZSBwZXJpb2QgaXMgQ1NDSEVEMl9CREdUX1JFUExfUEVS SU9ELCBhbmQgaXMgdGhlIHNhbWUgZm9yIGFsbCBkb21haW5zCj4gKyAqICAgKGJ1dCBlYWNoIGRv bWFpbiBoYXMgaXRzIG93biB0aW1lcjsgc28gdGhlIGFsbCBhcmUgcGVyaW9kaWMgYnkgdGhlIHNh bWUKPiArICogICBwZXJpb2QsIGJ1dCByZXBsZW5pc2htZW50IG9mIHRoZSBidWRnZXRzIG9mIHRo ZSB2YXJpb3VzIGRvbWFpbnMsIGF0Cj4gKyAqICAgcGVyaW9kcyBib3VuZGFyaWVzLCBhcmUgbm90 IHN5bmNocm9ub3VzKTsKPiArICoKPiArICogLSB3aGVuIHZDUFVzIHJ1biwgdGhleSBjb25zdW1l IGJ1ZGdldC4gV2hlbiB0aGV5IGRvbid0IHJ1biwgdGhleSBkb24ndAo+ICsgKiAgIGNvbnN1bWUg YnVkZ2V0LiBJZiB0aGVyZSBpcyBubyBidWRnZXQgbGVmdCBmb3IgdGhlIGRvbWFpbiwgbm8gdkNQ VSBvZgo+ICsgKiAgIHRoYXQgZG9tYWluIGNhbiBydW4uIElmIGEgdkNQVSB0cmllcyB0byBydW4g YW5kIGZpbmRzIHRoYXQgdGhlcmUgaXMgbm8KPiArICogICBidWRnZXQsIGl0IGJsb2Nrcy4KPiAr ICogICBCdWRnZXQgbmV2ZXIgZXhwaXJlcywgc28gYXQgd2hhdGV2ZXIgdGltZSBhIHZDUFUgd2Fu dHMgdG8gcnVuLCBpdCBjYW4KPiArICogICBjaGVjayB0aGUgZG9tYWluJ3MgYnVkZ2V0LCBhbmQg aWYgdGhlcmUgaXMgc29tZSwgaXQgY2FuIHVzZSBpdC4KCkknbSBub3Qgc3VyZSB3aGF0IHRoaXMg cGFyYWdyYXBoIGlzIHRyeWluZyB0byBzYXkuIFNheWluZyBidWRnZXQgIm5ldmVyCmV4cGlyZXMi IG1ha2VzIGl0IHNvdW5kIGxpa2UgeW91IGNvbnRpbnVlIHRvIGFjY3VtdWxhdGUgaXQsIHN1Y2gg dGhhdCBpZgp5b3UgZG9uJ3QgcnVuIGF0IGFsbCBmb3Igc2V2ZXJhbCBwZXJpb2RzLCB5b3UgY291 bGQgInNhdmUgaXQgdXAiIGFuZCBydW4KYXQgMTAwJSBmb3Igb25lIGZ1bGwgcGVyaW9kLgoKQnV0 IHRoYXQncyBjb250cmFkaWN0ZWQgYnkuLi4KCj4gKyAqIC0gYnVkZ2V0IGlzIHJlcGxlbmlzaGVk IHRvIHRoZSB0b3Agb2YgdGhlIGNhcGFjaXR5IGZvciB0aGUgZG9tYWluIG9uY2UKPiArICogICBw ZXIgcGVyaW9kLiBFdmVuIGlmIHRoZXJlIHdhcyBzb21lIGxlZnRvdmVyIGJ1ZGdldCBmcm9tIHBy ZXZpb3VzIHBlcmlvZCwKPiArICogICB0aG91Z2gsIHRoZSBidWRnZXQgYWZ0ZXIgYSByZXBsZW5p c2htZW50IHdpbGwgYWx3YXlzIGJlIGF0IG1vc3QgZXF1YWwKPiArICogICB0byB0aGUgdG90YWwg Y2FwYWNpZnkgb2YgdGhlIGRvbWFpbiAoJ3RvdF9idWRnZXQnKTsKCi4uLnRoaXMgcGFyYWdyYXBo LgoKPiArICogLSB3aGVuIGEgYnVkZ2V0IHJlcGxlbmlzaG1lbnQgb2NjdXJzLCBpZiB0aGVyZSBh cmUgdkNQVXMgdGhhdCBoYWQgYmVlbgo+ICsgKiAgIGJsb2NrZWQgYmVjYXVzZSBvZiBsYWNrIG9m IGJ1ZGdldCwgdGhleSdsbCBiZSB1bmJsb2NrZWQsIGFuZCB0aGV5IHdpbGwKPiArICogICAocG90 ZW50aWFsbHkpIGJlIGFibGUgdG8gcnVuIGFnYWluLgo+ICsgKgo+ICsgKiBGaW5hbGx5LCBzb21l IGV2ZW4gbW9yZSBpbXBsZW1lbnRhdGlvbiByZWxhdGVkIGRldGFpbDoKPiArICoKPiArICogLSBi dWRnZXQgaXMgc3RvcmVkIGluIGEgZG9tYWluLXdpZGUgcG9vbC4gdkNQVXMgb2YgdGhlIGRvbWFp biB0aGF0IHdhbnQKPiArICogICB0byBydW4gZ28gdG8gc3VjaCBwb29sLCBhbmQgZ3J1YiBzb21l LiBXaGVuIHRoZXkgZG8gc28sIHRoZSBhbW91bnQKPiArICogICB0aGV5IGdyYWJiZWQgaXMgX2lt bWVkaWF0ZWx5XyByZW1vdmVkIGZyb20gdGhlIHBvb2wuIFRoaXMgaGFwcGVucyBpbgo+ICsgKiAg IHZjcHVfdHJ5X3RvX2dldF9idWRnZXQoKTsKClRoaXMgc291bmRzIGxpa2UgYSBnb29kIHNvbHV0 aW9uIHRvIHRoZSAiZ3JlZWR5IHZjcHUiIHByb2JsZW0uIDotKQoKPiArICogLSB3aGVuIHZDUFVz IHN0b3AgcnVubmluZywgaWYgdGhleSd2ZSBub3QgY29uc3VtZWQgYWxsIHRoZSBidWRnZXQgdGhl eQo+ICsgKiAgIHRvb2ssIHRoZSBsZWZ0b3ZlciBpcyBwdXQgYmFjayBpbiB0aGUgcG9vbC4gVGhp cyBoYXBwZW5zIGluCj4gKyAqICAgdmNwdV9naXZlX2J1ZGdldF9iYWNrKCk7Cj4gKyAqCj4gKyAq IC0gdGhlIGFib3ZlIG1lYW5zIHRoYXQgYSB2Q1BVIGNhbiBmaW5kIG91dCB0aGF0IHRoZXJlIGlz IG5vIGJ1ZGdldCBhbmQKPiArICogICBibG9jaywgbm90IG9ubHkgaWYgdGhlIGNhcCBoYXMgYWN0 dWFsbHkgYmVlbiByZWFjaGVkIChmb3IgdGhpcyBwZXJpb2QpLAo+ICsgKiAgIGJ1dCBhbHNvIGlm IHNvbWUgb3RoZXIgdkNQVXMsIGluIG9yZGVyIHRvIHJ1biwgaGF2ZSBncmFiYmVkIGEgY2VydGFp bgo+ICsgKiAgIHF1b3RhIG9mIGJ1ZGdldCwgbm8gbWF0dGVyIHdoZXRoZXIgdGhleSd2ZSBhbHJl YWR5IHVzZWQgaXQgYWxsIG9yIG5vdC4KPiArICogICBBIHZDUFUgYmxvY2tpbmcgYmVjYXVzZSAo YW55IGZvcm0gb2YpIGxhY2sgb2YgYnVkZ2V0IGlzIHNhaWQgdG8gYmUKPiArICogICAicGFya2Vk IiwgYW5kIHN1Y2ggYmxvY2tpbmcgaGFwcGVucyBpbiBwYXJrX3ZjcHUoKTsKPiArICoKPiArICog LSB3aGVuIGEgdkNQVSBzdG9wcyBydW5uaW5nLCBhbmQgcHV0cyBiYWNrIHNvbWUgYnVkZ2V0IGlu IHRoZSBkb21haW4gcG9vbCwKPiArICogICB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlcmUg aXMgc29tZW9uZSB3aGljaCBoYXMgYmVlbiBwYXJrZWQgYW5kIHRoYXQKPiArICogICBjYW4gYmUg dW5wYXJrZWQuIFRoaXMgaGFwcGVucyBpbiB1bnBhcmtfcGFya2VkX3ZjcHVzKCksIGNhbGxlZCBm cm9tCj4gKyAqICAgY3NjaGVkMl9jb250ZXh0X3NhdmVkKCk7Cj4gKyAqCj4gKyAqIC0gb2YgY291 cnNlLCB1bnBhcmtpbmcgaGFwcGVucyBhbHNvIGFzIGEgY29uc2VxdWVuZSBvZiB0aGUgZG9tYWlu J3MgYnVkZ2V0CgoqY29uc2VxdWVuY2UKCj4gQEAgLTI5Myw2ICszODIsMTQgQEAgc3RhdGljIGlu dCBfX3JlYWRfbW9zdGx5IG9wdF91bmRlcmxvYWRfYmFsYW5jZV90b2xlcmFuY2UgPSAwOwo+ICBp bnRlZ2VyX3BhcmFtKCJjcmVkaXQyX2JhbGFuY2VfdW5kZXIiLCBvcHRfdW5kZXJsb2FkX2JhbGFu Y2VfdG9sZXJhbmNlKTsKPiAgc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IG9wdF9vdmVybG9hZF9i YWxhbmNlX3RvbGVyYW5jZSA9IC0zOwo+ICBpbnRlZ2VyX3BhcmFtKCJjcmVkaXQyX2JhbGFuY2Vf b3ZlciIsIG9wdF9vdmVybG9hZF9iYWxhbmNlX3RvbGVyYW5jZSk7Cj4gKy8qCj4gKyAqIERvbWFp bnMgc3ViamVjdCB0byBhIGNhcCwgcmVjZWl2ZSBhIHJlcGxlbmlzaG1lbnQgb2YgdGhlaXIgcnVu dGltZSBidWRnZXQKClVubmVjZXNzYXJ5IGNvbW1hLgoKCj4gQEAgLTE0MzgsNiArMTU3MCwyMTcg QEAgdm9pZCBidXJuX2NyZWRpdHMoc3RydWN0IGNzY2hlZDJfcnVucXVldWVfZGF0YSAqcnFkLAo+ ICAgICAgfQo+ICB9Cj4gIAo+ICsvKgo+ICsgKiBCdWRnZXQtcmVsYXRlZCBjb2RlLgo+ICsgKi8K PiArCj4gK3N0YXRpYyB2b2lkIHBhcmtfdmNwdShzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpzdmMpCj4g K3sKPiArICAgIHN0cnVjdCB2Y3B1ICp2ID0gc3ZjLT52Y3B1Owo+ICsKPiArICAgIEFTU0VSVChz cGluX2lzX2xvY2tlZCgmc3ZjLT5zZG9tLT5idWRnZXRfbG9jaykpOwo+ICsKPiArICAgIC8qCj4g KyAgICAgKiBJdCB3YXMgaW1wb3NzaWJsZSB0byBmaW5kIGJ1ZGdldCBmb3IgdGhpcyB2Q1BVLCBz byBpdCBoYXMgdG8gYmUKPiArICAgICAqICJwYXJrZWQiLiBUaGlzIGltcGxpZXMgaXQgaXMgbm90 IHJ1bm5hYmxlLCBzbyB3ZSBtYXJrIGl0IGFzIHN1Y2ggaW4KPiArICAgICAqIGl0cyBwYXVzZV9m bGFncy4gSWYgdGhlIHZDUFUgaXMgY3VycmVudGx5IHNjaGVkdWxlZCAod2hpY2ggbWVhbnMgd2UK PiArICAgICAqIGFyZSBoZXJlIGFmdGVyIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBjc2NoZWRf c2NoZWR1bGUoKSksIGZsYWdnaW5nCj4gKyAgICAgKiBpcyBlbm91Z2gsIGFzIHdlJ2xsIGNob29z ZSBzb21lb25lIGVsc2UsIGFuZCB0aGVuIGNvbnRleHRfc2F2ZWQoKQo+ICsgICAgICogd2lsbCB0 YWtlIGNhcmUgb2YgdXBkYXRpbmcgdGhlIGxvYWQgcHJvcGVybHkuCj4gKyAgICAgKgo+ICsgICAg ICogSWYsIE9UT0gsIHRoZSB2Q1BVIGlzIHNpdHRpbmcgaW4gdGhlIHJ1bnF1ZXVlICh3aGljaCBt ZWFucyB3ZSBhcmUgaGVyZQo+ICsgICAgICogYWZ0ZXIgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGlu IHJ1bnFfY2FuZGlkYXRlKCkpLCB3ZSBtdXN0IGdvIGFsbCB0aGUKPiArICAgICAqIHdheSBkb3du IHRvIHRha2luZyBpdCBvdXQgb2YgdGhlcmUsIGFuZCB1cGRhdGluZyB0aGUgbG9hZCBhY2NvcmRp bmdseS4KPiArICAgICAqCj4gKyAgICAgKiBJbiBib3RoIGNhc2VzLCB3ZSBhbHNvIGFkZCBpdCB0 byB0aGUgbGlzdCBvZiBwYXJrZWQgdkNQVXMgb2YgdGhlIGRvbWFpbi4KPiArICAgICAqLwo+ICsg ICAgX19zZXRfYml0KF9WUEZfcGFya2VkLCAmdi0+cGF1c2VfZmxhZ3MpOwo+ICsgICAgaWYgKCB2 Y3B1X29uX3J1bnEoc3ZjKSApCj4gKyAgICB7Cj4gKyAgICAgICAgcnVucV9yZW1vdmUoc3ZjKTsK PiArICAgICAgICB1cGRhdGVfbG9hZChzdmMtPnNkb20tPmRvbS0+Y3B1cG9vbC0+c2NoZWQsIHN2 Yy0+cnFkLCBzdmMsIC0xLCBOT1coKSk7Cj4gKyAgICB9Cj4gKyAgICBsaXN0X2FkZCgmc3ZjLT5w YXJrZWRfZWxlbSwgJnN2Yy0+c2RvbS0+cGFya2VkX3ZjcHVzKTsKPiArfQo+ICsKPiArc3RhdGlj IGJvb2wgdmNwdV90cnlfdG9fZ2V0X2J1ZGdldChzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpzdmMpCgpU aGlzIG5hbWUgaXMgT0ssIGJ1dCBpdCdzIGEgYml0IGxvbmcuICBXaGF0IGFib3V0ICJ2Y3B1X2dy YWJfYnVkZ2V0KCkiPwoKPiArewo+ICsgICAgc3RydWN0IGNzY2hlZDJfZG9tICpzZG9tID0gc3Zj LT5zZG9tOwo+ICsgICAgdW5zaWduZWQgaW50IGNwdSA9IHN2Yy0+dmNwdS0+cHJvY2Vzc29yOwo+ ICsKPiArICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZChwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNw dSkuc2NoZWR1bGVfbG9jaykpOwo+ICsKPiArICAgIGlmICggc3ZjLT5idWRnZXQgPiAwICkKPiAr ICAgICAgICByZXR1cm4gdHJ1ZTsKPiArCj4gKyAgICAvKiBidWRnZXRfbG9jayBuZXN0cyBpbnNp ZGUgcnVucXVldWUgbG9jay4gKi8KPiArICAgIHNwaW5fbG9jaygmc2RvbS0+YnVkZ2V0X2xvY2sp Owo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBIZXJlLCBzdmMtPmJ1ZGdldCBpcyA8PSAwIChhcywg aWYgaXQgd2FzID4gMCwgd2UnZCBoYXZlIHRha2VuIHRoZSBpZgo+ICsgICAgICogYWJvdmUhKS4g VGhhdCBiYXNpY2FsbHkgbWVhbnMgdGhlIHZDUFUgaGFzIG92ZXJydW4gYSBiaXQgLS1iZWNhdXNl IG9mCj4gKyAgICAgKiB2YXJpb3VzIHJlYXNvbnMtLSBhbmQgd2Ugd2FudCB0byB0YWtlIHRoYXQg aW50byBhY2NvdW50LiBXaXRoIHRoZSArPSwKPiArICAgICAqIHdlIGFyZSBhY3R1YWxseSBzdWJ0 cmFjdGluZyB0aGUgYW1vdW50IG9mIGJ1ZGdldCB0aGUgdkNQVSBoYXMKPiArICAgICAqIG92ZXJj b25zdW1lZCwgZnJvbSB0aGUgdG90YWwgZG9tYWluIGJ1ZGdldC4KPiArICAgICAqLwo+ICsgICAg c2RvbS0+YnVkZ2V0ICs9IHN2Yy0+YnVkZ2V0Owo+ICsKPiArICAgIGlmICggc2RvbS0+YnVkZ2V0 ID4gMCApCj4gKyAgICB7Cj4gKyAgICAgICAgc3ZjLT5idWRnZXQgPSBzZG9tLT5idWRnZXQ7Cj4g KyAgICAgICAgc2RvbS0+YnVkZ2V0ID0gMDsKCkp1c3QgYSBtaW5vciBjb21tZW50IGhlcmUgLS0g SSBkaWRuJ3Qgc2VlIGFueXRoaW5nIGluIHRoaXMgZGVzY3JpcHRpb24sCnRoZSBjb3ZlciBsZXR0 ZXIsIG9yIHRoaXMgcGF0Y2ggaW5kaWNhdGluZyB0aGF0IHlvdSB3ZXJlIHBsYW5uaW5nIG9uCmNo YW5naW5nIHRoaXMgaW4gYSBmb2xsb3ctdXAgcGF0Y2guICBBIGhlYWRzLXVwIG5vdCB0byB3b3Jy eSBhYm91dAphcHBhcmVudGx5IGFsbG93aW5nIG9ubHkgb25lIHZjcHUgdG8gcnVuIGF0IGEgdGlt ZSBtaWdodCBoYXZlIGJlZW4gbmljZS4gOi0pCgo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAg ewo+ICsgICAgICAgIHN2Yy0+YnVkZ2V0ID0gMDsKPiArICAgICAgICBwYXJrX3ZjcHUoc3ZjKTsK PiArICAgIH0KPiArCj4gKyAgICBzcGluX3VubG9jaygmc2RvbS0+YnVkZ2V0X2xvY2spOwo+ICsK PiArICAgIHJldHVybiBzdmMtPmJ1ZGdldCA+IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4g K3ZjcHVfZ2l2ZV9idWRnZXRfYmFjayhzdHJ1Y3QgY3NjaGVkMl92Y3B1ICpzdmMsIHN0cnVjdCBs aXN0X2hlYWQgKnBhcmtlZCkKCiJ2Y3B1X3JldHVybl9idWRnZXQiPwoKPiArewo+ICsgICAgc3Ry dWN0IGNzY2hlZDJfZG9tICpzZG9tID0gc3ZjLT5zZG9tOwo+ICsgICAgdW5zaWduZWQgaW50IGNw dSA9IHN2Yy0+dmNwdS0+cHJvY2Vzc29yOwo+ICsKPiArICAgIEFTU0VSVChzcGluX2lzX2xvY2tl ZChwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNwdSkuc2NoZWR1bGVfbG9jaykpOwo+ICsgICAgQVNT RVJUKGxpc3RfZW1wdHkocGFya2VkKSk7Cj4gKwo+ICsgICAgLyogYnVkZ2V0X2xvY2sgbmVzdHMg aW5zaWRlIHJ1bnF1ZXVlIGxvY2suICovCj4gKyAgICBzcGluX2xvY2soJnNkb20tPmJ1ZGdldF9s b2NrKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogVGhlIHZDUFUgaXMgc3RvcHBpbmcgcnVubmlu ZyAoZS5nLiwgYmVjYXVzZSBpdCdzIGJsb2NraW5nLCBvciBpdCBoYXMKPiArICAgICAqIGJlZW4g cHJlZW1wdGVkKS4gSWYgaXQgaGFzbid0IGNvbnN1bWVkIGFsbCB0aGUgYnVkZ2V0IGl0IGdvdCB3 aGVuLAo+ICsgICAgICogc3RhcnRpbmcgdG8gcnVuLCBwdXQgdGhhdCByZW1haW5pbmcgYW1vdW50 IGJhY2sgaW4gdGhlIGRvbWFpbidzIGJ1ZGdldAo+ICsgICAgICogcG9vbC4KPiArICAgICAqLwo+ ICsgICAgc2RvbS0+YnVkZ2V0ICs9IHN2Yy0+YnVkZ2V0Owo+ICsgICAgc3ZjLT5idWRnZXQgPSAw Owo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBNYWtpbmcgYnVkZ2V0IGF2YWlsYWJsZSBhZ2FpbiB0 byB0aGUgZG9tYWluIG1lYW5zIHRoYXQgcGFya2VkIHZDUFVzCj4gKyAgICAgKiBtYXkgYmUgdW5w YXJrZWQgYW5kIHJ1bi4gVGhleSBhcmUsIGlmIGFueSwgaW4gdGhlIGRvbWFpbidzIHBhcmtlZF92 Y3B1cwo+ICsgICAgICogbGlzdCwgc28gd2Ugd2FudCB0byBnbyB0aHJvdWdoIHRoYXQgYW5kIHVu cGFyayB0aGVtIChzbyB0aGV5IGNhbiB0cnkKPiArICAgICAqIHRvIGdldCBzb21lIGJ1ZGdldCku Cj4gKyAgICAgKgo+ICsgICAgICogVG91Y2hpbmcgdGhlIGxpc3QgcmVxdWlyZXMgdGhlIGJ1ZGdl dF9sb2NrLCB3aGljaCB3ZSBob2xkLiBMZXQncwo+ICsgICAgICogdGhlcmVmb3JlIHB1dCBldmVy eW9uZSBpbiB0aGF0IGxpc3QgaW4gYW5vdGhlciwgdGVtcG9yYXJ5IGxpc3QsIHdoaWNoCj4gKyAg ICAgKiB0aGVuIHRoZSBjYWxsZXIgd2lsbCB0cmF2ZXJzZSwgdW5wYXJraW5nIHRoZSB2Q1BVcyBp dCBmaW5kcyB0aGVyZS4KPiArICAgICAqCj4gKyAgICAgKiBJbiBmYWN0LCB3ZSBjYW4ndCBkbyB0 aGUgYWN0dWFsIHVucGFya2luZyBoZXJlLCBiZWNhdXNlIHRoYXQgcmVxdWlyZXMKPiArICAgICAq IHRha2luZyB0aGUgcnVucXVldWUgbG9jayBvZiB0aGUgdkNQVXMgYmVpbmcgdW5wYXJrZWQsIGFu ZCB3ZSBjYW4ndAo+ICsgICAgICogdGFrZSBhbnkgcnVucXVldWUgbG9ja3Mgd2hpbGUgd2UgaG9s ZCBhIGJ1ZGdldF9sb2NrLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHNkb20tPmJ1ZGdldCA+IDAg KQo+ICsgICAgICAgIGxpc3Rfc3BsaWNlX2luaXQoJnNkb20tPnBhcmtlZF92Y3B1cywgcGFya2Vk KTsKPiArCj4gKyAgICBzcGluX3VubG9jaygmc2RvbS0+YnVkZ2V0X2xvY2spOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZAo+ICt1bnBhcmtfcGFya2VkX3ZjcHVzKGNvbnN0IHN0cnVjdCBzY2hlZHVs ZXIgKm9wcywgc3RydWN0IGxpc3RfaGVhZCAqdmNwdXMpCj4gK3sKPiArICAgIHN0cnVjdCBjc2No ZWQyX3ZjcHUgKnN2YywgKnRtcDsKPiArICAgIHNwaW5sb2NrX3QgKmxvY2s7Cj4gKwo+ICsgICAg bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN2YywgdG1wLCB2Y3B1cywgcGFya2VkX2VsZW0pCj4g KyAgICB7Cj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArICAgICAgICBzX3RpbWVf dCBub3c7Cj4gKwo+ICsgICAgICAgIGxvY2sgPSB2Y3B1X3NjaGVkdWxlX2xvY2tfaXJxc2F2ZShz dmMtPnZjcHUsICZmbGFncyk7Cj4gKwo+ICsgICAgICAgIF9fY2xlYXJfYml0KF9WUEZfcGFya2Vk LCAmc3ZjLT52Y3B1LT5wYXVzZV9mbGFncyk7Cj4gKyAgICAgICAgaWYgKCB1bmxpa2VseShzdmMt PmZsYWdzICYgQ1NGTEFHX3NjaGVkdWxlZCkgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAg LyoKPiArICAgICAgICAgICAgICogV2UgZW5kIGhlcmUgaWYgYSBidWRnZXQgcmVwbGVuaXNobWVu dCBhcnJpdmVkIGJldHdlZW4KPiArICAgICAgICAgICAgICogY3NjaGVkMl9zY2hlZHVsZSgpIChh bmQsIGluIHBhcnRpY3VsYXIsIGFmdGVyIGEgY2FsbCB0bwo+ICsgICAgICAgICAgICAgKiB2Y3B1 X3RyeV90b19nZXRfYnVkZ2V0KCkgdGhhdCByZXR1cm5lZCBmYWxzZSksIGFuZAo+ICsgICAgICAg ICAgICAgKiBjb250ZXh0X3NhdmVkKCkuIEJ5IHNldHRpbmcgX19DU0ZMQUdfZGVsYXllZF9ydW5x X2FkZCwKPiArICAgICAgICAgICAgICogd2UgdGVsbCBjb250ZXh0X3NhdmVkKCkgdG8gcHV0IHRo ZSB2Q1BVIGJhY2sgaW4gdGhlCj4gKyAgICAgICAgICAgICAqIHJ1bnF1ZXVlLCBmcm9tIHdoZXJl IGl0IHdpbGwgY29tcGV0ZSB3aXRoIHRoZSBvdGhlcnMKPiArICAgICAgICAgICAgICogZm9yIHRo ZSBuZXdseSByZXBsZW5pc2hlZCBidWRnZXQuCj4gKyAgICAgICAgICAgICAqLwo+ICsgICAgICAg ICAgICBBU1NFUlQoIHN2Yy0+cnFkICE9IE5VTEwgKTsKPiArICAgICAgICAgICAgQVNTRVJUKCBj MnJxZChvcHMsIHN2Yy0+dmNwdS0+cHJvY2Vzc29yKSA9PSBzdmMtPnJxZCApOwo+ICsgICAgICAg ICAgICBfX3NldF9iaXQoX19DU0ZMQUdfZGVsYXllZF9ydW5xX2FkZCwgJnN2Yy0+ZmxhZ3MpOwo+ ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlIGlmICggdmNwdV9ydW5uYWJsZShzdmMtPnZjcHUp ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIC8qCj4gKyAgICAgICAgICAgICAqIFRoZSB2 Q1BVIHNob3VsZCBnbyBiYWNrIHRvIHRoZSBydW5xdWV1ZSwgYW5kIGNvbXBldGUgZm9yCj4gKyAg ICAgICAgICAgICAqIHRoZSBuZXdseSByZXBsZW5pc2hlZCBidWRnZXQsIGJ1dCBvbmx5IGlmIGl0 IGlzIGFjdHVhbGx5Cj4gKyAgICAgICAgICAgICAqIHJ1bm5hYmxlIChhbmQgd2FzIHRoZXJlZm9y ZSBvZmZsaW5lIG9ubHkgYmVjYXVzZSBvZiB0aGUKPiArICAgICAgICAgICAgICogbGFjayBvZiBi dWRnZXQpLgo+ICsgICAgICAgICAgICAgKi8KPiArICAgICAgICAgICAgbm93ID0gTk9XKCk7Cj4g KyAgICAgICAgICAgIHVwZGF0ZV9sb2FkKG9wcywgc3ZjLT5ycWQsIHN2YywgMSwgbm93KTsKPiAr ICAgICAgICAgICAgcnVucV9pbnNlcnQob3BzLCBzdmMpOwo+ICsgICAgICAgICAgICBydW5xX3Rp Y2tsZShvcHMsIHN2Yywgbm93KTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgbGlzdF9kZWxfaW5p dCgmc3ZjLT5wYXJrZWRfZWxlbSk7Cj4gKwo+ICsgICAgICAgIHZjcHVfc2NoZWR1bGVfdW5sb2Nr X2lycXJlc3RvcmUobG9jaywgZmxhZ3MsIHN2Yy0+dmNwdSk7Cj4gKyAgICB9Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHJlcGxfc2RvbV9idWRnZXQodm9pZCogZGF0YSkKCldoeSBub3QganVzdCAi cmVwbGVuaXNoX2J1ZGdldCI/Cgo+ICt7Cj4gKyAgICBzdHJ1Y3QgY3NjaGVkMl9kb20gKnNkb20g PSBkYXRhOwo+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArICAgIHNfdGltZV90IG5vdzsK PiArICAgIExJU1RfSEVBRChwYXJrZWQpOwo+ICsKPiArICAgIHNwaW5fbG9ja19pcnFzYXZlKCZz ZG9tLT5idWRnZXRfbG9jaywgZmxhZ3MpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBJdCBpcyBw b3NzaWJsZSB0aGF0IHRoZSBkb21haW4gb3ZlcnJ1biwgYW5kIHRoYXQgdGhlIGJ1ZGdldCBoZW5j ZSB3ZW50Cj4gKyAgICAgKiBiZWxvdyAwIChyZWFzb25zIG1heSBiZSBzeXN0ZW0gb3ZlcmJvb2tp bmcsIGlzc3VlcyBpbiBvciB0b28gY29hcnNlCj4gKyAgICAgKiBydW50aW1lIGFjY291bnRpbmcs IGV0Yy4pLiBJbiBwYXJ0aWN1bGFyLCBpZiB3ZSBvdmVycnVuIGJ5IG1vcmUgdGhhbgo+ICsgICAg ICogdG90X2J1ZGdldCwgdGhlbiBidWRnZXQrdG90X2J1ZGdldCB3b3VsZCBzdGlsbCBiZSA8IDAs IHdoaWNoIGluIHR1cm4KPiArICAgICAqIG1lYW5zIHRoYXQsIGRlc3BpdGUgcmVwbGVuaXNobWVu dCwgdGhlcmUncyBzdGlsbCBubyBidWRnZXQgZm9yIHVuYXJraW5nCj4gKyAgICAgKiBhbmQgcnVu bmluZyB2Q1BVcy4KPiArICAgICAqCj4gKyAgICAgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQg d2UgYXJlIGhhbmRsaW5nIHRoZSByZXBsZW5pc2htZW50IG11Y2ggbGF0ZXIKPiArICAgICAqIHRo YW4gZXhwZWN0ZWQgKHJlYXNvbnMgbWF5IGFnYWluIGJlIG92ZXJib29raW5nLCBvciBpc3N1ZXMg d2l0aCB0aW1lcnMpLgo+ICsgICAgICogSWYgd2UgYXJlIG1vcmUgdGhhbiBDU0NIRUQyX0JER1Rf UkVQTF9QRVJJT0QgbGF0ZSwgdGhpcyBtZWFucyB3ZSBoYXZlCj4gKyAgICAgKiBiYXNpY2FsbHkg c2tpcHBlZCAoYXQgbGVhc3QpIG9uZSByZXBsZW5pc2htZW50Lgo+ICsgICAgICoKPiArICAgICAq IFdlIGRlYWwgd2l0aCBib3RoIHRoZSBpc3N1ZXMgaGVyZSwgYnksIGJhc2ljYWxseSwgZG9pbmcg bW9yZSB0aGFuIGp1c3QKPiArICAgICAqIG9uZSByZXBsZW5pc2htZW50LiBOb3RlLCBob3dldmVy LCB0aGF0IGV2ZXJ5IHRpbWUgd2UgYWRkIHRvdF9idWRnZXQKPiArICAgICAqIHRvIHRoZSBidWRn ZXQsIHdlIGFsc28gbW92ZSBuZXh0X3JlcGwgYXdheSBieSBDU0NIRUQyX0JER1RfUkVQTF9QRVJJ T0QuCj4gKyAgICAgKiBUaGlzIGd1YXJhbnRlZXMgd2UgYWx3YXlzIHJlc3BlY3QgdGhlIGNhcC4K PiArICAgICAqLwo+ICsgICAgbm93ID0gTk9XKCk7Cj4gKyAgICBkbwo+ICsgICAgewo+ICsgICAg ICAgIHNkb20tPm5leHRfcmVwbCArPSBDU0NIRUQyX0JER1RfUkVQTF9QRVJJT0Q7Cj4gKyAgICAg ICAgc2RvbS0+YnVkZ2V0ICs9IHNkb20tPnRvdF9idWRnZXQ7Cj4gKyAgICB9Cj4gKyAgICB3aGls ZSAoIHNkb20tPm5leHRfcmVwbCA8PSBub3cgfHwgc2RvbS0+YnVkZ2V0IDw9IDAgKTsKClRoZSBm aXJzdCBjbGF1c2UgKCJvb3BzLCBhY2NpZGVudGFsbHkgbWlzc2VkIGEgcmVwbGVuaXNobWVudCBw ZXJpb2QiKSBJCmFncmVlIHdpdGg7IGJ1dCBJJ20gZ29pbmcgYmFjayBhbmQgZm9ydGggYSBiaXQg b24gdGhlIHNlY29uZCBvbmUuICBJdAptZWFucyBlc3NlbnRpYWxseSB0aGF0IHRoZSBzY2hlZHVs ZXIgbWFkZSBhIG1pc3Rha2UgYW5kIGFsbG93ZWQgdGhlIFZNCnRvIHJ1biBmb3Igb25lIGZ1bGwg YnVkZ2V0ICptb3JlKiB0aGFuIGl0cyBhbGxvY2F0ZWQgdGltZSAocGVyaGFwcwphY2N1bXVsYXRl ZCBvdmVyIHNldmVyYWwgcGVyaW9kcykuCgpPbiB0aGUgb25lIGhhbmQsIGl0J3MgdGhlIHNjaGVk dWxlciB0aGF0IG1hZGUgYSBtaXN0YWtlLCBzbyB3ZSBzaG91bGRuJ3QKInB1bmlzaCIgYSBkb21h aW4gYnkgZ2l2aW5nIGl0IGEgZnVsbCBwZXJpb2Qgd2l0aCBubyBidWRnZXQuCgpPbiB0aGUgb3Ro ZXIgaGFuZCwgaWYgdGhlcmUncyBhIHJlbGlhYmxlIHdheSB0byB0cmljayB0aGUgc2NoZWR1bGVy IGludG8KYWxsb3dpbmcgYSBndWVzdCB0byBvdmVyLXJ1biBpdHMgYnVkZ2V0LCB0aGlzIGFsbG93 cyBhIHJvZ3VlIGd1ZXN0IHRvCmVzc2VudGlhbGx5IHdvcmsgYXJvdW5kIHRoZSBjYXAuCgpLbm93 IHdoYXQgSSBtZWFuPwoKPiBAQCAtMjQyMywxNCArMjc4NSwyMiBAQCBjc2NoZWQyX3J1bnRpbWUo Y29uc3Qgc3RydWN0IHNjaGVkdWxlciAqb3BzLCBpbnQgY3B1LAo+ICAgICAgICogY3JlZGl0IHZh bHVlcyBvZiBNSU4sTUFYIHBlciB2Y3B1LCBzaW5jZSBlYWNoIHZjcHUgYnVybnMgY3JlZGl0Cj4g ICAgICAgKiBhdCBhIGRpZmZlcmVudCByYXRlLgo+ICAgICAgICovCj4gLSAgICBpZiAocnRfY3Jl ZGl0ID4gMCkKPiArICAgIGlmICggcnRfY3JlZGl0ID4gMCApCj4gICAgICAgICAgdGltZSA9IGMy dChycWQsIHJ0X2NyZWRpdCwgc25leHQpOwo+ICAgICAgZWxzZQo+ICAgICAgICAgIHRpbWUgPSAw Owo+ICAKPiAtICAgIC8qIDMpIEJ1dCBuZXZlciBydW4gbG9uZ2VyIHRoYW4gTUFYX1RJTUVSIG9y IGxlc3MgdGhhbiBNSU5fVElNRVIgb3IKPiAtICAgICAqIHRoZSByYXRlX2xpbWl0IHRpbWUuICov Cj4gLSAgICBpZiAoIHRpbWUgPCBtaW5fdGltZSkKPiArICAgIC8qCj4gKyAgICAgKiAzKSBCdXQs IGlmIGNhcHBlZCwgbmV2ZXIgcnVuIG1vcmUgdGhhbiBvdXIgYnVkZ2V0Lgo+ICsgICAgICovCj4g KyAgICBpZiAoIHVubGlrZWx5KGhhc19jYXAoc25leHQpKSApCj4gKyAgICAgICAgdGltZSA9IHNu ZXh0LT5idWRnZXQgPCB0aW1lID8gc25leHQtPmJ1ZGdldCA6IHRpbWU7Cj4gKwo+ICsgICAgLyoK PiArICAgICAqIDQpIEJ1dCBuZXZlciBydW4gbG9uZ2VyIHRoYW4gTUFYX1RJTUVSIG9yIGxlc3Mg dGhhbiBNSU5fVElNRVIgb3IKClR3byAiYnV0cyIgaW4gYSByb3cgZG9lc24ndCB3b3JrLiAgSSdk IGNoYW5nZSB0aGlzIHRvICJhbmQiLCB3aGljaCBzb3J0Cm9mIGZvbGxvd3Mgb24gZnJvbSB0aGUg bGFzdCAiYnV0Ii4KClRoYW5rcywKIC1HZW9yZ2UKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK