From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgwkm03.jp.fujitsu.com (mgwkm03.jp.fujitsu.com [202.219.69.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 91C3C203B85B2 for ; Tue, 15 May 2018 01:32:18 -0700 (PDT) Received: from g01jpfmpwkw03.exch.g01.fujitsu.local (g01jpfmpwkw03.exch.g01.fujitsu.local [10.0.193.57]) by kw-mxauth.gw.nic.fujitsu.com (Postfix) with ESMTP id 816E3AC0159 for ; Tue, 15 May 2018 17:32:10 +0900 (JST) From: "Qi, Fuli" Subject: RE: [PATCH v6 2/4] ndctl, monitor: add ndctl monitor daemon Date: Tue, 15 May 2018 08:32:08 +0000 Message-ID: <0DEDF3B159719A448A49EF0E7B11E3222766AB3C@g01jpexmbkw01> References: <20180507050926.17243-1-qi.fuli@jp.fujitsu.com> <20180507050926.17243-3-qi.fuli@jp.fujitsu.com> In-Reply-To: Content-Language: ja-JP MIME-Version: 1.0 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: 'Dan Williams' Cc: linux-nvdimm List-ID: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBEYW4gV2lsbGlhbXMgW21haWx0 bzpkYW4uai53aWxsaWFtc0BpbnRlbC5jb21dDQo+IFNlbnQ6IFNhdHVyZGF5LCBNYXkgMTIsIDIw MTggMzo0NSBBTQ0KPiBUbzogUWksIEZ1bGkv5paJIOemj+WIqSA8cWkuZnVsaUBqcC5mdWppdHN1 LmNvbT4NCj4gQ2M6IGxpbnV4LW52ZGltbSA8bGludXgtbnZkaW1tQGxpc3RzLjAxLm9yZz4NCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2NiAyLzRdIG5kY3RsLCBtb25pdG9yOiBhZGQgbmRjdGwgbW9u aXRvciBkYWVtb24NCj4gDQo+IE9uIFN1biwgTWF5IDYsIDIwMTggYXQgMTA6MDkgUE0sIFFJIEZ1 bGkgPHFpLmZ1bGlAanAuZnVqaXRzdS5jb20+IHdyb3RlOg0KPiA+IFRoaXMgcGF0Y2ggYWRkcyB0 aGUgYm9keSBmaWxlIG9mIG5kY3RsIG1vbml0b3IgZGFlbW9uLg0KPiANCj4gVGhpcyBpcyB0b28g c2hvcnQuIExldCdzIGNvcHkgeW91ciBjb3ZlciBsZXR0ZXIgZGV0YWlscyBpbnRvIHRoaXMgcGF0 Y2ggc2luY2UgdGhlIGNvdmVyDQo+IGxldHRlciBpcyB0aHJvd24gYXdheSwgYnV0IHRoZSBjb21t aXQgbWVzc2FnZXMgYXJlIHByZXNlcnZlZCBpbiBnaXQ6DQoNClRoYW5rcyBmb3IgeW91ciBjb21t ZW50cy4NCkkgd2lsbCB3cml0ZSBtb3JlIGRldGFpbHMuDQoNCj4gLS0tDQo+IA0KPiBuZGN0bCBt b25pdG9yIGRhZW1vbiwgYSB0aW55IGRhZW1vbiB0byBtb25pdG9yIHRoZSBzbWFydCBldmVudHMg b2YgbnZkaW1tDQo+IERJTU1zLiBVc2VycyBjYW4gcnVuIGEgbW9uaXRvciBhcyBhIG9uZS1zaG90 IGNvbW1hbmQgb3IgYSBkYWVtb24gaW4NCj4gYmFja2dyb3VuZCBieSB1c2luZyB0aGUgWy0tZGFl bW9uXSBvcHRpb24uIERJTU1zIHRvIG1vbml0b3IgY2FuIGJlIHNlbGVjdGVkIGJ5DQo+IFstLWRp bW1dIFstLWJ1c10gWy0tcmVnaW9uXSBbLS1uYW1lc3BhY2VdIG9wdGlvbnMsIHRoZXNlIG9wdGlv bnMgc3VwcG9ydCBtdWx0aXBsZQ0KPiBzcGFjZS1zZXBlcmF0ZWQgYXJndW1lbnRzLiBXaGVuIGEg c21hcnQgZXZlbnQgZmlyZXMsIG1vbml0b3IgZGFlbW9uIHdpbGwgbG9nIHRoZQ0KPiBub3RpZmlj YXRpb25zIHdoaWNoIGluY2x1ZGluZyBkaW1tIGhlYWx0aCBzdGF0dXMgdG8gc3lzbG9nIG9yIGEg bG9nZmlsZSBieSBzZXR0aW5nDQo+IFstLWxvZ2ZpbGU9PGZpbGV8c3lzbG9nPl0gb3B0aW9uLiBt b25pdG9yIGFsc28gY2FuIG91dHB1dCB0aGUgbm90aWZpY2F0aW9ucyB0byBzdGRlcnINCj4gd2hl biBpdCBydW4gYXMgb25lLXNob3QgY29tbWFuZCBieSBzZXR0aW5nIFstLWxvZ2ZpbGU9PHN0ZGVy cj5dLiBUaGUNCj4gbm90aWZpY2F0aW9ucyBmb2xsb3cganNvbiBmb3JtYXQgYW5kIGNhbiBiZSBj b25zdW1lZCBieSBsb2cgY29sbGVjdG9ycyBsaWtlIEZsdWVudGQuDQo+IFVzZXJzIGNhbiBjaGFu Z2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbW9uaXRvciBieSBlZGl0aW5nIHRoZSBkZWZhdWx0IGNv bmZpZ3VyYXRpb24NCj4gZmlsZSAvZXRjL25kY3RsL21vbml0b3IuY29uZiBvciBieSB1c2luZyBb LS1jb25maWctZmlsZT08ZmlsZT5dIG9wdGlvbiB0byBvdmVycmlkZSB0aGUNCj4gZGVmYXVsdCBj b25maWd1cmF0aW9uLg0KPiANCj4gVXNlcnMgY2FuIHN0YXJ0IGEgbW9uaXRvciBkYWVtb24gYnkg dGhlIGZvbGxvd2luZyBjb21tYW5kOg0KPiAgIyBuZGN0bCBtb25pdG9yIC0tZGFlbW9uIC0tbG9n ZmlsZSAvdmFyL2xvZy9uZGN0bC9tb25pdG9yLmxvZw0KPiANCj4gQWxzbywgYSBtb25pdG9yIGRh ZW1vbiBjYW4gYmUgc3RhcnRlZCBieSBzeXN0ZW1kOg0KPiAgIyBzeXN0ZW1jdGwgc3RhcnQgbmRj dGwtbW9uaXRvci5zZXJ2aWNlIEluIHRoaXMgY2FzZSwgbW9uaXRvciBkYWVtb24gZm9sbG93cyB0 aGUNCj4gZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgL2V0Yy9uZGN0bC9tb25pdG9yLmNvbmYu DQo+IA0KPiAtLS0NCj4gDQo+IEhvd2V2ZXIsIG5vdyB0aGF0IEkgcmUtcmVhZCB0aGlzIGRlc2Ny aXB0aW9uIHdoYXQgYWJvdXQgdGhlIG90aGVyIGV2ZW50IHR5cGVzDQo+IChiZXlvbmQgaGVhbHRo KSBvbiBvdGhlciBvYmplY3RzIChiZXlvbmQgRElNTXMpLiBUaGlzIHNob3VsZCBiZWhhdmUgbGlr ZSB0aGUgJ2xpc3QnDQo+IGNvbW1hbmQgd2hlcmUgd2UgaGF2ZSBmaWx0ZXIgcGFyYW1ldGVycyBm b3IgZGV2aWNlcyB0byBtb25pdG9yICphbmQqIGV2ZW50DQo+IHR5cGVzIGZvciBldmVudHMgdG8g aW5jbHVkZToNCj4gDQo+IGRpbW0tZXZlbnRzPSI8bGlzdCBvZiBkaW1tIGV2ZW50cz4iDQo+IG5h bWVzcGFjZS1ldmVudHM9IjxsaXN0IG9mIG5hbWVzcGFjZSBldmVudHM+Ig0KPiByZWdpb24tZXZl bnRzPSI8bGlzdCBvZiByZWdpb24gZXZlbnRzPiINCj4gYnVzLWV2ZW50cz0iPGxpc3Qgb2YgYnVz IGV2ZW50cz4iDQo+IGJ1cz0iPGJ1cyBmaWx0ZXIgb3B0aW9uPiINCj4gZGltbT0iPGRpbW0gZmls dGVyIG9wdGlvbj4iDQo+IHJlZ2lvbj0iPHJlZ2lvbiBmaWx0ZXIgb3B0aW9uPiINCj4gbmFtZXNw YWNlPSI8bmFtZXNwYWNlIGZpbHRlciBvcHRpb24+Ig0KPiANCj4gV2UgZG9uJ3QgbmVlZCB0byBz dXBwb3J0IGFsbCBvZiB0aGlzIGluIHRoaXMgZmlyc3QgaW1wbGVtZW50YXRpb24sIGJ1dCBzZWUg bW9yZQ0KPiBjb21tZW50cyBiZWxvdyBJIHRoaW5rIHRoZXJlIGFyZSBzb21lIGNoYW5nZXMgd2Ug Y2FuIG1ha2UgdG8gc3RhcnQgZG93biB0aGlzDQo+IHBhdGguDQo+IA0KPiA+DQo+ID4gU2lnbmVk LW9mZi1ieTogUUkgRnVsaSA8cWkuZnVsaUBqcC5mdWppdHN1LmNvbT4NCj4gPiAtLS0NCj4gPiAg YnVpbHRpbi5oICAgICAgICAgfCAgIDEgKw0KPiA+ICBuZGN0bC9NYWtlZmlsZS5hbSB8ICAgMyAr LQ0KPiA+ICBuZGN0bC9tb25pdG9yLmMgICB8IDQ2MA0KPiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIG5kY3RsL25kY3RsLmMgICAgIHwgICAxICsN Cj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA0NjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKSAg Y3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gbmRjdGwvbW9uaXRvci5jDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oDQo+ID4gaW5kZXggZDNjYzcyMy4uNjc1YTZjZSAx MDA2NDQNCj4gPiAtLS0gYS9idWlsdGluLmgNCj4gPiArKysgYi9idWlsdGluLmgNCj4gPiBAQCAt MzksNiArMzksNyBAQCBpbnQgY21kX2luamVjdF9lcnJvcihpbnQgYXJnYywgY29uc3QgY2hhciAq KmFyZ3YsDQo+ID4gdm9pZCAqY3R4KTsgIGludCBjbWRfd2FpdF9zY3J1YihpbnQgYXJnYywgY29u c3QgY2hhciAqKmFyZ3YsIHZvaWQNCj4gPiAqY3R4KTsgIGludCBjbWRfc3RhcnRfc2NydWIoaW50 IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCB2b2lkICpjdHgpOw0KPiA+IGludCBjbWRfbGlzdChp bnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHZvaWQgKmN0eCk7DQo+ID4gK2ludCBjbWRfbW9u aXRvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHZvaWQgKmN0eCk7DQo+ID4gICNpZmRl ZiBFTkFCTEVfVEVTVA0KPiA+ICBpbnQgY21kX3Rlc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiph cmd2LCB2b2lkICpjdHgpOyAgI2VuZGlmIGRpZmYNCj4gPiAtLWdpdCBhL25kY3RsL01ha2VmaWxl LmFtIGIvbmRjdGwvTWFrZWZpbGUuYW0gaW5kZXggZDIyYTM3OS4uN2RiZjIyMw0KPiA+IDEwMDY0 NA0KPiA+IC0tLSBhL25kY3RsL01ha2VmaWxlLmFtDQo+ID4gKysrIGIvbmRjdGwvTWFrZWZpbGUu YW0NCj4gPiBAQCAtMTYsNyArMTYsOCBAQCBuZGN0bF9TT1VSQ0VTID0gbmRjdGwuYyBcDQo+ID4g ICAgICAgICAgICAgICAgIHV0aWwvanNvbi1zbWFydC5jIFwNCj4gPiAgICAgICAgICAgICAgICAg dXRpbC9qc29uLWZpcm13YXJlLmMgXA0KPiA+ICAgICAgICAgICAgICAgICBpbmplY3QtZXJyb3Iu YyBcDQo+ID4gLSAgICAgICAgICAgICAgIGluamVjdC1zbWFydC5jDQo+ID4gKyAgICAgICAgICAg ICAgIGluamVjdC1zbWFydC5jIFwNCj4gPiArICAgICAgICAgICAgICAgbW9uaXRvci5jDQo+ID4N Cj4gPiAgaWYgRU5BQkxFX0RFU1RSVUNUSVZFDQo+ID4gIG5kY3RsX1NPVVJDRVMgKz0gLi4vdGVz dC9ibGtfbmFtZXNwYWNlcy5jIFwgZGlmZiAtLWdpdA0KPiA+IGEvbmRjdGwvbW9uaXRvci5jIGIv bmRjdGwvbW9uaXRvci5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4DQo+ID4gMDAwMDAwMC4u YWI2ZTcwMQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9uZGN0bC9tb25pdG9yLmMNCj4g PiBAQCAtMCwwICsxLDQ2MCBAQA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAxOCwg RlVKSVRTVSBMSU1JVEVELiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yDQo+ID4gK21vZGlmeSBpdA0KPiA+ICsgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gPiArTGljZW5zZSwNCj4gPiAr ICogdmVyc2lvbiAyLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLg0KPiANCj4gRGlkIHlvdSBpbnRlbmQgZm9yIHRoaXMgdG8gYmUgTEdQTC0yLjE/DQo+IA0K PiBUaGUgbGljZW5zaW5nIHdlIGhhdmUgYmVlbiBkb2luZyB0byBkYXRlIGlzIEdQTC0yLjAgZm9y IHRoZSB1dGlsaXR5IGNvZGUgKGkuZS4gbmRjdGwvKQ0KPiBlc3BlY2lhbGx5IGJlY2F1c2UgaXQg Y29waWVzIGZyb20gZ2l0IHdoaWNoIGlzIEdQTDIuMC4gTEdQTC0yLjEgaXMgZm9yIHRoZSBsaWJy YXJ5DQo+IHJvdXRpbmVzIChpLmUuIG5kY3RsL2xpYi8pLiBUaGUgaW50ZW50IGlzIGZvciBhcHBs aWNhdGlvbnMgdG8gYmUgYWJsZSB0byB1c2UgdGhlIGxpYnJhcnkNCj4gd2l0aG91dCBuZWVkaW5n IHRvIHNoYXJlIHRoZWlyIGFwcGxpY2F0aW9uIHNvdXJjZSwgYnV0IGltcHJvdmVtZW50cyB0byB0 aGUgdXRpbGl0eQ0KPiBhcmUgc2hhcmVkIGJhY2sgd2l0aCB0aGUgcHJvamVjdC4NCg0KSSB3aWxs IGNoYW5nZSBpdCB0byBHUEwtMi4wLg0KDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQo+ID4gKyBX SVRIT1VUIEFOWQ0KPiA+ICsgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcg0KPiA+ICsgRklUTkVTUw0KPiA+ICsgKiBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMN Cj4gPiArIExpY2Vuc2UgZm9yDQo+ID4gKyAqIG1vcmUgZGV0YWlscy4NCj4gPiArICovDQo+IA0K PiBDb252ZXJ0IHRoaXMgdG8gU1BEWCBzdHlsZToNCj4gDQo+IC8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wICovDQo+IC8qIENvcHlyaWdodChjKSAyMDE4LCBGVUpJVFNVIExJTUlU RUQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovDQo+IA0KT2ssIEkgc2VlLg0KDQo+ID4gKw0KPiA+ ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gPiArI2luY2x1ZGUgPGpzb24tYy9qc29uLmg+DQo+ID4g KyNpbmNsdWRlIDxsaWJnZW4uaD4NCj4gPiArI2luY2x1ZGUgPGRpcmVudC5oPg0KPiA+ICsjaW5j bHVkZSA8dXRpbC9sb2cuaD4NCj4gPiArI2luY2x1ZGUgPHV0aWwvanNvbi5oPg0KPiA+ICsjaW5j bHVkZSA8dXRpbC9maWx0ZXIuaD4NCj4gPiArI2luY2x1ZGUgPHV0aWwvdXRpbC5oPg0KPiA+ICsj aW5jbHVkZSA8dXRpbC9wYXJzZS1vcHRpb25zLmg+DQo+ID4gKyNpbmNsdWRlIDx1dGlsL3N0cmJ1 Zi5oPg0KPiA+ICsjaW5jbHVkZSA8bmRjdGwvbGliL3ByaXZhdGUuaD4NCj4gPiArI2luY2x1ZGUg PG5kY3RsL2xpYm5kY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KPiA+ICsjaW5j bHVkZSA8c3lzL2Vwb2xsLmg+DQo+ID4gKyNkZWZpbmUgQlVGX1NJWkUgMjA0OA0KPiA+ICsNCj4g PiArc3RhdGljIGVudW0gbG9nX2Rlc3RpbmF0aW9uIHsNCj4gPiArICAgICAgIExPR19ERVNUSU5B VElPTl9TVERFUlIgPSAxLA0KPiA+ICsgICAgICAgTE9HX0RFU1RJTkFUSU9OX1NZU0xPRyA9IDIs DQo+ID4gKyAgICAgICBMT0dfREVTVElOQVRJT05fRklMRSA9IDMsDQo+ID4gK30gbG9nX2Rlc3Rp bmF0aW9uID0gTE9HX0RFU1RJTkFUSU9OX1NZU0xPRzsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1 Y3Qgew0KPiA+ICsgICAgICAgY29uc3QgY2hhciAqbG9nZmlsZTsNCj4gPiArICAgICAgIGNvbnN0 IGNoYXIgKmNvbmZpZ19maWxlOw0KPiA+ICsgICAgICAgYm9vbCBkYWVtb247DQo+ID4gK30gbW9u aXRvcjsNCj4gPiArDQo+ID4gK3N0cnVjdCBtb25pdG9yX2RpbW1fbm9kZSB7DQo+ID4gKyAgICAg ICBzdHJ1Y3QgbmRjdGxfZGltbSAqZGltbTsNCj4gPiArICAgICAgIGludCBoZWFsdGhfZXZlbnRm ZDsNCj4gPiArICAgICAgIHN0cnVjdCBsaXN0X25vZGUgbGlzdDsNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0cnVjdCBtb25pdG9yX2ZpbHRlcl9hcmcgew0KPiA+ICsgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBtZGltbTsNCj4gDQo+IExldCdzIGNhbGwgdGhpcyBmaWVsZCAnZGltbXMnIHRvIG1hdGNo IHRoZSBsaXN0X2hlYWQgbmFtaW5nIHN0eWxlIGluIG90aGVyIHBhcnRzIG9mIHRoZQ0KPiBjb2Rl Lg0KDQpPSywgSSBzZWUuDQo+IA0KPiA+ICsgICAgICAgaW50IG1heGZkX2RpbW07DQo+ID4gKyAg ICAgICBpbnQgbnVtX2RpbW07DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHV0aWxfZmlsdGVyX3BhcmFtcyBwYXJhbTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgZGlkX2ZhaWw7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIGZhaWwoZm10 LCAuLi4pIFwNCj4gPiArZG8geyBcDQo+ID4gKyAgICAgICBkaWRfZmFpbCA9IDE7IFwNCj4gPiAr ICAgICAgIGVycihjdHgsICJuZGN0bC0lczolczolZDogIiBmbXQsIFwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBWRVJTSU9OLCBfX2Z1bmNfXywgX19MSU5FX18sICMjX19WQV9BUkdTX18p OyBcDQo+ID4gK30gd2hpbGUgKDApDQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBpc19kaXIoY2hh ciAqZmlsZXBhdGgpDQo+ID4gK3sNCj4gPiArICAgICAgIERJUiAqZGlyID0gb3BlbmRpcihmaWxl cGF0aCk7DQo+ID4gKyAgICAgICBpZiAoZGlyKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNsb3Nl ZGlyKGRpcik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+ICsgICAgICAg fQ0KPiA+ICsgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHJlY3VyX21rZGlyKGNoYXIgKmZpbGVwYXRoLCBtb2RlX3QgbW9kZSkgew0KPiA+ICsgICAg ICAgY2hhciAqcDsNCj4gPiArICAgICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKHN0cmxl bihmaWxlcGF0aCkgKyA0KTsNCj4gPiArDQo+ID4gKyAgICAgICBzdHJjcHkoYnVmLCBmaWxlcGF0 aCk7DQo+ID4gKyAgICAgICBmb3IgKHAgPSBzdHJjaHIoYnVmICsgMSwgJy8nKTsgcDsgcCA9IHN0 cmNocihwICsgMSwgJy8nKSkgew0KPiA+ICsgICAgICAgICAgICAgICAqcCA9ICdcMCc7DQo+ID4g KyAgICAgICAgICAgICAgIGlmICghaXNfZGlyKGJ1ZikpIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBpZiAobWtkaXIoYnVmLCBtb2RlKSA8IDApIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZyZWUoYnVmKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtMTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAg ICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgKnAgPSAnLyc7DQo+ID4gKyAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgZnJlZShidWYpOw0KPiA+ICsgICAgICAgcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNldF92YWx1ZShjb25zdCBjaGFyICoq YXJnLCBjaGFyICp2YWwpIHsNCj4gPiArICAgICAgIHN0cnVjdCBzdHJidWYgdmFsdWUgPSBTVFJC VUZfSU5JVDsNCj4gPiArICAgICAgIHNpemVfdCBhcmdfbGVuID0gKmFyZyA/IHN0cmxlbigqYXJn KSA6IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKGFyZ19sZW4pIHsNCj4gPiArICAgICAgICAg ICAgICAgc3RyYnVmX2FkZCgmdmFsdWUsICphcmcsIGFyZ19sZW4pOw0KPiA+ICsgICAgICAgICAg ICAgICBzdHJidWZfYWRkc3RyKCZ2YWx1ZSwgIiAiKTsNCj4gPiArICAgICAgIH0NCj4gPiArICAg ICAgIHN0cmJ1Zl9hZGRzdHIoJnZhbHVlLCB2YWwpOw0KPiA+ICsgICAgICAgKmFyZyA9IHN0cmJ1 Zl9kZXRhY2goJnZhbHVlLCBOVUxMKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbG9ncmVw b3J0KHN0cnVjdCBuZGN0bF9jdHggKmN0eCwgaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmaWxl LA0KPiA+ICsgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqZm4sIGNvbnN0IGNo YXIgKmZvcm1hdCwgdmFfbGlzdA0KPiA+ICthcmdzKSB7DQo+ID4gKyAgICAgICBjaGFyICpsb2df ZGlyOw0KPiA+ICsgICAgICAgY2hhciAqYnVmID0gKGNoYXIgKiltYWxsb2MoQlVGX1NJWkUpOw0K PiA+ICsgICAgICAgdnNucHJpbnRmKGJ1ZiwgQlVGX1NJWkUsIGZvcm1hdCwgYXJncyk7DQo+ID4g Kw0KPiA+ICsgICAgICAgc3dpdGNoIChsb2dfZGVzdGluYXRpb24pIHsNCj4gPiArICAgICAgIGNh c2UgTE9HX0RFU1RJTkFUSU9OX1NUREVSUjoNCj4gPiArICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICIlc1xuIiwgYnVmKTsNCj4gPiArICAgICAgICAgICAgICAgZ290byBlbmQ7DQo+ID4g Kw0KPiA+ICsgICAgICAgY2FzZSBMT0dfREVTVElOQVRJT05fU1lTTE9HOg0KPiA+ICsgICAgICAg ICAgICAgICBzeXNsb2cocHJpb3JpdHksICIlc1xuIiwgYnVmKTsNCj4gPiArICAgICAgICAgICAg ICAgZ290byBlbmQ7DQo+ID4gKw0KPiA+ICsgICAgICAgY2FzZSBMT0dfREVTVElOQVRJT05fRklM RToNCj4gPiArICAgICAgICAgICAgICAgbG9nX2RpciA9IGRpcm5hbWUoc3RyZHVwKG1vbml0b3Iu bG9nZmlsZSkpOw0KPiANCj4gV2UgbGVhayBhIG1lbW9yeSBhbGxvY2F0aW9uIGhlcmUsIG9yIGNy YXNoIGlmIHN0cmR1cCBmYWlscy4NCg0KT2ssIEkgc2VlLg0KDQo+ID4gKyAgICAgICAgICAgICAg IGlmICghaXNfZGlyKGxvZ19kaXIpICYmIHJlY3VyX21rZGlyKGxvZ19kaXIsIDA3NDQpICE9IDAp DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBsb2dfZmlsZV9lcnI7DQo+IA0KPiBO byBuZWVkIHRvIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIEp1c3QgZmFp bCBpZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzDQo+IGFyZSBub3QgcHJlc2VudC4gUmVxdWlyZSB0 aGUgYWRtaW5pc3RyYXRvciB0byBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGFoZWFkIG9mIHRpbWUu DQo+IA0KT2ssIEkgd2lsbCByZW1vdmUgdGhlIHJlY3VyX21rZGlyKCkuDQo+IEFjdHVhbGx5LCBJ IGRvbid0IHNlZSBhIG5lZWQgdG8gaGF2ZSBMT0dfREVTVElOQVRJT05fRklMRSBhdCBhbGwuIFdo eSBub3QganVzdA0KPiBkbzoNCj4gDQo+ICAgICBuZGN0bCBtb25pdG9yIDI+ZmlsZQ0KPiANCj4g Li4udG8gcmVkaXJlY3Qgc3RkZXJyIHRvIGEgZmlsZT8NCg0KSW4gbXkgdW5kZXJzdGFuZGluZywg dGhpcyBzdGRlcnIgcmVkaXJlY3Rpb24gZG9lcyBub3QgbWFrZSBzZW5zZSB3aGVuIG5kY3RsIG1v bml0b3INCnJ1bnMgYXMgYSBkYWVtb24sIGVnOg0KICAgIyBuZGN0bCBtb25pdG9yIC0tbG9nZmls ZSBzdGRlcnIgLS1kYWVtb24gMj5maWxlDQpXaGF0IGRvIHlvdSB0aGluaz8NCj4gDQo+ID4gKyAg ICAgICAgICAgICAgIEZJTEUgKmYgPSBmb3Blbihtb25pdG9yLmxvZ2ZpbGUsICJhKyIpOw0KPiA+ ICsgICAgICAgICAgICAgICBpZiAoIWYpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290 byBsb2dfZmlsZV9lcnI7DQo+ID4gKyAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzXG4iLCBi dWYpOw0KPiA+ICsgICAgICAgICAgICAgICBmY2xvc2UoZik7DQo+ID4gKyAgICAgICAgICAgICAg IGZyZWUobG9nX2Rpcik7DQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiA+ICsNCj4g PiArICAgICAgIGxvZ19maWxlX2VycjoNCj4gPiArICAgICAgICAgICAgICAgbG9nX2Rlc3RpbmF0 aW9uID0gTE9HX0RFU1RJTkFUSU9OX1NZU0xPRzsNCj4gPiArICAgICAgICAgICAgICAgZmFpbCgi b3BlbiBsb2dmaWxlICVzIGZhaWxlZFxuJXMiLCBtb25pdG9yLmxvZ2ZpbGUsIGJ1Zik7DQo+ID4g KyAgICAgICAgICAgICAgIGZyZWUobG9nX2Rpcik7DQo+ID4gKyAgICAgICB9DQo+ID4gK2VuZDoN Cj4gPiArICAgICAgIGZyZWUoYnVmKTsNCj4gPiArICAgICAgIHJldHVybjsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgbm90aWZ5X2pzb25fbXNnKHN0cnVjdCBuZGN0bF9jdHggKmN0 eCwgc3RydWN0IG5kY3RsX2RpbW0NCj4gPiArKmRpbW0pIHsNCj4gPiArICAgICAgIHN0cnVjdCBq c29uX29iamVjdCAqam1zZywgKmpkYXRldGltZSwgKmpwaWQsICpqZGltbSwgKmpoZWFsdGg7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7DQo+ID4gKyAgICAgICBjaGFyIGRhdGV0aW1l WzMyXTsNCj4gPiArDQo+ID4gKyAgICAgICBqbXNnID0ganNvbl9vYmplY3RfbmV3X29iamVjdCgp Ow0KPiA+ICsgICAgICAgaWYgKCFqbXNnKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGZhaWwoIlxu Iik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ ID4gKyAgICAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOw0KPiA+ICsgICAg ICAgc3ByaW50ZihkYXRldGltZSwgIiUxMGxkLiUwOWxkIiwgdHMudHZfc2VjLCB0cy50dl9uc2Vj KTsNCj4gPiArICAgICAgIGpkYXRldGltZSA9IGpzb25fb2JqZWN0X25ld19zdHJpbmcoZGF0ZXRp bWUpOw0KPiA+ICsgICAgICAgaWYgKCFqZGF0ZXRpbWUpIHsNCj4gPiArICAgICAgICAgICAgICAg ZmFpbCgiXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgICAgfQ0K PiA+ICsgICAgICAganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbXNnLCAiZGF0ZXRpbWUiLCBqZGF0 ZXRpbWUpOw0KPiANCj4gTGV0J3MgY2FsbCB0aGlzIGZpZWxkICd0aW1lc3RhbXAnLg0KDQpPaywg SSBzZWUuDQo+ID4gKw0KPiA+ICsgICAgICAganBpZCA9IGpzb25fb2JqZWN0X25ld19pbnQoKGlu dClnZXRwaWQoKSk7DQo+IA0KPiBObyBuZWVkIHRvIGNhc3QgaGVyZS4NCg0KT2ssIEkgc2VlLg0K PiANCj4gPiArICAgICAgIGlmICghanBpZCkgew0KPiA+ICsgICAgICAgICAgICAgICBmYWlsKCJc biIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgICB9DQo+ID4gKyAg ICAgICBqc29uX29iamVjdF9vYmplY3RfYWRkKGptc2csICJwaWQiLCBqcGlkKTsNCj4gPiArDQo+ ID4gKyAgICAgICBqZGltbSA9IHV0aWxfZGltbV90b19qc29uKGRpbW0sIDApOw0KPiA+ICsgICAg ICAgaWYgKCFkaW1tKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGZhaWwoIlxuIik7DQo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIGpzb25fb2Jq ZWN0X29iamVjdF9hZGQoam1zZywgImRpbW0iLCBqZGltbSk7DQo+ID4gKw0KPiA+ICsgICAgICAg amhlYWx0aCA9IHV0aWxfZGltbV9oZWFsdGhfdG9fanNvbihkaW1tKTsNCj4gPiArICAgICAgIGlm ICghamhlYWx0aCkgew0KPiA+ICsgICAgICAgICAgICAgICBmYWlsKCJcbiIpOw0KPiA+ICsgICAg ICAgICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBqc29uX29iamVj dF9vYmplY3RfYWRkKGpkaW1tLCAiaGVhbHRoIiwgamhlYWx0aCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgbm90aWNlKGN0eCwgIiVzIiwNCj4gPiArICAgICAgICAgICAgICAganNvbl9vYmplY3RfdG9f anNvbl9zdHJpbmdfZXh0KGptc2csDQo+ID4gKyBKU09OX0NfVE9fU1RSSU5HX1BMQUlOKSk7DQo+ IA0KPiBBcyBtZW50aW9uZWQgYWJvdmUgdGhpcyBmdW5jdGlvbiBzZWVtcyB0byBhc3N1bWUgdGhh dCB0aGUgb25seSBESU1NIGV2ZW50cyB0bw0KPiBzZW5kIGFyZSBESU1NIGhlYWx0aCBldmVudHMu IEl0J3Mgb2sgdG8gc2F2ZSBvdGhlciBvYmplY3QgbW9uaXRvcmluZyB0byBhIGxhdGVyIHBhdGNo LA0KPiBidXQgbGV0J3MgYXQgbGVhc3Qgc3VwcG9ydCBESU1NIGhlYWx0aA0KPiBldmVudHM6DQo+ IA0KPiBkaW1tLXNwYXJlcy1yZW1haW5pbmcNCj4gZGltbS1tZWRpYS10ZW1wZXJhdHVyZQ0KPiBk aW1tLWNvbnRyb2xsZXItdGVtcGVyYXR1cmUNCj4gZGltbS1oZWFsdGgtc3RhdGUNCj4gDQo+IC4u LmFuZCBESU1NIGRldGVjdGVkIGV2ZW50czoNCj4gDQo+IGRpbW0tdW5jbGVhbi1zaHV0ZG93bg0K PiBkaW1tLWRldGVjdGVkDQo+IA0KPiBUaGVyZSBzaG91bGQgYmUgYW4gZXZlbnQgdHlwZSBpbmNs dWRlZCBpbiB0aGUganNvbi4gQWxvbmcgd2l0aCAndGltZXN0YW1wJyBhbmQgJ3BpZCcNCj4gSSB0 aGluayB3ZSBuZWVkIGFuICdldmVudCcgZmllbGQgc28gdGhhdCBjb25zdW1lciBjb2RlIGNhbiBt YWtlIGFzc3VtcHRpb25zIGFib3V0DQo+IHRoZSBmb3JtYXQgb2YgdGhlIGV2ZW50IHJlY29yZC4g SSB0aGluayAnZGltbS1oZWFsdGgnIGFuZCAnZGltbS1kZXRlY3QnIGFyZSB0aGUgb25seQ0KPiBl dmVudCByZWNvcmQgdHlwZXMgd2UgbmVlZCB0byBzdXBwb3J0IGluIHRoaXMgaW5pdGlhbCB2ZXJz aW9uLg0KPiAgDQoNCk9rLCBJIHdpbGwgYWRkIGV2ZW50cyBjb21lIERJTU1zIGluIHRoZSBmaXJz dCBpbXBsZW1lbnRhdGlvbi4NCg0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBmaWx0 ZXJfcmVnaW9uKHN0cnVjdCBuZGN0bF9yZWdpb24gKnJlZ2lvbiwNCj4gPiArICAgICAgICAgICAg ICAgc3RydWN0IHV0aWxfZmlsdGVyX2N0eCAqY3R4KSB7DQo+ID4gKyAgICAgICByZXR1cm4gdHJ1 ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZmlsdGVyX2RpbW0oc3RydWN0IG5k Y3RsX2RpbW0gKmRpbW0sIHN0cnVjdA0KPiA+ICt1dGlsX2ZpbHRlcl9jdHggKmN0eCkgew0KPiA+ ICsgICAgICAgc3RydWN0IG1vbml0b3JfZmlsdGVyX2FyZyAqbWZhID0gKHN0cnVjdCBtb25pdG9y X2ZpbHRlcl9hcmcNCj4gPiArKiljdHgtPmFyZzsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIW5k Y3RsX2RpbW1faXNfY21kX3N1cHBvcnRlZChkaW1tLA0KPiBORF9DTURfU01BUlRfVEhSRVNIT0xE KSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiANCj4gU2ltaWxhciB0byBhYm92ZSB0 aGlzIGFzc3VtZXMgb25seSBoZWFsdGggZXZlbnRzLCBsZXQncyBtYWtlIHRoZSBjb2RlIG1vcmUg Z2VuZXJpYy4NCj4gDQpPaywgSSB3aWxsIGNoYW5nZSBpdC4NCj4gPiArDQo+ID4gKyAgICAgICBz dHJ1Y3QgbW9uaXRvcl9kaW1tX25vZGUgKm1kbiA9IG1hbGxvYyhzaXplb2YoKm1kbikpOw0KPiA+ ICsgICAgICAgbWRuLT5kaW1tID0gZGltbTsNCj4gPiArICAgICAgIGludCBmZCA9IG5kY3RsX2Rp bW1fZ2V0X2hlYWx0aF9ldmVudGZkKGRpbW0pOw0KPiANCj4gTGV0J3Mgbm90IGRlY2xhcmUgbmV3 IHZhcmlhYmxlcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBmdW5jdGlvbi4gSSdsbCBnbyBhZGQNCj4g Ii1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiB0byB0aGUgZGVmYXVsdCB3YXJuaW5nIGZs YWdzLg0KDQpPaywgSSBzZWUuDQo+IA0KPiA+ICsgICAgICAgbWRuLT5oZWFsdGhfZXZlbnRmZCA9 IGZkOw0KPiA+ICsgICAgICAgbGlzdF9hZGRfdGFpbCgmbWZhLT5tZGltbSwgJm1kbi0+bGlzdCk7 DQo+ID4gKyAgICAgICBpZiAoZmQgPiBtZmEtPm1heGZkX2RpbW0pDQo+ID4gKyAgICAgICAgICAg ICAgIG1mYS0+bWF4ZmRfZGltbSA9IGZkOw0KPiA+ICsgICAgICAgbWZhLT5udW1fZGltbSsrOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBmaWx0ZXJfYnVzKHN0cnVjdCBuZGN0bF9i dXMgKmJ1cywgc3RydWN0IHV0aWxfZmlsdGVyX2N0eA0KPiA+ICsqY3R4KSB7DQo+ID4gKyAgICAg ICByZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtb25pdG9yX2Rp bW1fZXZlbnQoc3RydWN0IG5kY3RsX2N0eCAqY3R4LA0KPiA+ICsgICAgICAgICAgICAgICBzdHJ1 Y3QgbW9uaXRvcl9maWx0ZXJfYXJnICptZmEpIHsNCj4gPiArICAgICAgIHN0cnVjdCBlcG9sbF9l dmVudCBldiwgZXZlbnRzW21mYS0+bnVtX2RpbW1dOw0KPiANCj4gQWxsb2NhdGUgZXZlbnRzIHdp dGggbWFsbG9jIHJhdGhlciB0aGFuIGEgVkxBLg0KDQpPaywgSSBzZWUuDQo+IA0KPiA+ICsgICAg ICAgc3RydWN0IG5kY3RsX2RpbW0gKipkaW1tczsNCj4gPiArICAgICAgIGludCBuZmRzLCBlcG9s bGZkOw0KPiA+ICsgICAgICAgc3RydWN0IG1vbml0b3JfZGltbV9ub2RlICptZG47DQo+ID4gKyAg ICAgICBjaGFyIGJ1ZjsNCj4gPiArDQo+ID4gKyAgICAgICBkaW1tcyA9IGNhbGxvYyhtZmEtPm1h eGZkX2RpbW0gKyAxLCBzaXplb2Yoc3RydWN0IG5kY3RsX2RpbW0NCj4gPiArICopKTsNCj4gDQo+ IFdoeSBhIHNlcGFyYXRlIGFsbG9jYXRpb24/IEkgYmVsaWV2ZSB5b3UgY2FuIHN0b3JlIHBvaW50 ZXJzIGJhY2sgdG8gdGhlICdkaW1tJw0KPiBvYmplY3RzIGluIHRoZSBlcG9sbF9ldmVudCBkYXRh Lg0KDQpPaywgSSB3aWxsIHJlZmFjdG9yIGl0Lg0KPiANCj4gPiArICAgICAgIGlmICghZGltbXMp IHsNCj4gPiArICAgICAgICAgICAgICAgZmFpbCgiXG4iKTsNCj4gPiArICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgZXBvbGxmZCA9IGVw b2xsX2NyZWF0ZTEoMCk7DQo+ID4gKyAgICAgICBpZiAoZXBvbGxmZCA9PSAtMSkgew0KPiA+ICsg ICAgICAgICAgICAgICBlcnIoY3R4LCAiZXBvbGxfY3JlYXRlMSBlcnJvclxuIik7DQo+ID4gKyAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgbGlzdF9m b3JfZWFjaCgmbWZhLT5tZGltbSwgbWRuLCBsaXN0KSB7DQo+ID4gKyAgICAgICAgICAgICAgIG1l bXNldCgmZXYsIDAsIHNpemVvZihldikpOw0KPiANCj4gV2h5IG1lbXNldD8NCg0KSSB3aWxsIHJl bW92ZSBpdC4NCj4gDQo+ID4gKyAgICAgICAgICAgICAgIHByZWFkKG1kbi0+aGVhbHRoX2V2ZW50 ZmQsICZidWYsIDEsIDApOw0KPiA+ICsgICAgICAgICAgICAgICBldi5kYXRhLmZkID0gbWRuLT5o ZWFsdGhfZXZlbnRmZDsNCj4gPiArICAgICAgICAgICAgICAgaWYgKGVwb2xsX2N0bChlcG9sbGZk LCBFUE9MTF9DVExfQURELA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRu LT5oZWFsdGhfZXZlbnRmZCwgJmV2KSAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgZXJyKGN0eCwgImVwb2xsX2N0bCBlcnJvclxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAg ICAgZGltbXNbbWRuLT5oZWFsdGhfZXZlbnRmZF0gPSBtZG4tPmRpbW07DQo+ID4gKyAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgd2hpbGUoMSl7DQo+IA0KPiBGb2xsb3cga2VybmVsIGNvZGlu ZyBzdHlsZSwgaS5lLiBhZGQgc3BhY2VzOiAid2hpbGUgKDEpIHsiDQoNCk9rLCBJIHNlZS4NCj4g DQo+ID4gKyAgICAgICAgICAgICAgIG5mZHMgPSBlcG9sbF93YWl0KGVwb2xsZmQsIGV2ZW50cywg bWZhLT5udW1fZGltbSwgLTEpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAobmZkcyA8PSAwKSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZXJyKGN0eCwgImVwb2xsX3dhaXQgZXJyb3Jc biIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAg ICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmZkczsg aSsrKSB7DQo+IA0KPiBNb3ZlIGRlY2xhcmF0aW9uIG9mICdpJyB0byB0aGUgdG9wIG9mIHRoZSBm dW5jdGlvbi4NCg0KT2ssIEkgc2VlLg0KPiANCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBt ZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsNCj4gDQo+IFdoeSBtZW1zZXQ/DQoNClRoZSBzYW1l IEkgd2lsbCByZW1vdmUgaXQuDQo+IA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGV2ID0g ZXZlbnRzW2ldOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeV9qc29uX21zZyhj dHgsIGRpbW1zW2V2LmRhdGEuZmRdKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcmVh ZChldi5kYXRhLmZkLCAmYnVmLCAxLCAwKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgICAgICAgICBpZiAoZGlkX2ZhaWwpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArb3V0 Og0KPiA+ICsgICAgICAgZnJlZShkaW1tcyk7DQo+ID4gKyAgICAgICByZXR1cm4gMTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCByZWFkX2NvbmZpZ19maWxlKHN0cnVjdCBuZGN0bF9j dHggKmN0eCwgY29uc3QgY2hhcg0KPiA+ICsqcHJlZml4KQ0KPiANCj4gVGhpcyBzaG91bGQgbW92 ZSB0byBpdHMgb3duIHNvdXJjZSBmaWxlIGluIHV0aWwvLg0KPiANCj4gPiArew0KPiA+ICsgICAg ICAgRklMRSAqZjsNCj4gPiArICAgICAgIGludCBsaW5lX25yID0gMDsNCj4gPiArICAgICAgIGNo YXIgYnVmW0JVRl9TSVpFXTsNCj4gPiArICAgICAgIGNoYXIgKmNvbmZpZ19maWxlID0gIi9ldGMv bmRjdGwvbW9uaXRvci5jb25mIjsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAobW9uaXRvci5jb25m aWdfZmlsZSkNCj4gPiArICAgICAgICAgICAgICAgZiA9IGZvcGVuKG1vbml0b3IuY29uZmlnX2Zp bGUsICJyIik7DQo+ID4gKyAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgIGYgPSBmb3Bl bihjb25maWdfZmlsZSwgInIiKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoZiA9PSBOVUxMKSB7 DQo+ID4gKyAgICAgICAgICAgICAgIGVycm9yKCJjb25maWctZmlsZTogJXMgY2Fubm90IGJlIG9w ZW5lZFxuIiwgY29uZmlnX2ZpbGUpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLTE7DQo+ ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgd2hpbGUgKGZnZXRzKGJ1ZiwgQlVGX1NJ WkUsIGYpKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHNpemVfdCBsZW47DQo+ID4gKyAgICAgICAg ICAgICAgIGNoYXIgKmtleTsNCj4gPiArICAgICAgICAgICAgICAgY2hhciAqdmFsOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgICAgbGluZV9ucisrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg ICAgLyogZmluZCBrZXkgKi8NCj4gPiArICAgICAgICAgICAgICAga2V5ID0gYnVmOw0KPiA+ICsg ICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZShrZXlbMF0pKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGtleSsrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogY29tbWVudCBv ciBlbXB0eSBsaW5lICovDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChrZXlbMF0gPT0gJyMnIHx8 IGtleVswXSA9PSAnXDAnKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogc3BsaXQga2V5L3ZhbHVlICovDQo+ID4gKyAg ICAgICAgICAgICAgIHZhbCA9IHN0cmNocihrZXksICc9Jyk7DQo+ID4gKyAgICAgICAgICAgICAg IGlmICghdmFsKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZXJyKGN0eCwgIm1pc3Np bmcgPGtleT49PHZhbHVlPiBpbiAnJXMnWyVpXSwgc2tpcA0KPiBsaW5lXG4iLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZSwgbGluZV9ucik7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHZhbFswXSA9ICdcMCc7DQo+ID4gKyAg ICAgICAgICAgICAgIHZhbCsrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogZmluZCB2 YWx1ZSAqLw0KPiA+ICsgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSh2YWxbMF0pKQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCsrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg ICAgLyogdGVybWluYXRlIGtleSAqLw0KPiA+ICsgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4o a2V5KTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFj ZShrZXlbbGVuLTFdKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBsZW4tLTsNCj4gPiAr ICAgICAgICAgICAgICAga2V5W2xlbl0gPSAnXDAnOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg ICAgLyp0ZXJtaW5hdGUgdmFsdWUgKi8NCj4gPiArICAgICAgICAgICAgICAgbGVuID0gc3RybGVu KHZhbCk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChsZW4gPT0gMCkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgICAgd2hpbGUgKGlzc3Bh Y2UodmFsW2xlbi0xXSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbGVuLS07DQo+ID4g KyAgICAgICAgICAgICAgIHZhbFtsZW5dID0gJ1wwJzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIGlmIChsZW4gPT0gMCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsN Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIC8qIHVucXVvdGUgKi8NCj4gPiArICAgICAgICAg ICAgICAgaWYgKHZhbFswXSA9PSAnIicgfHwgdmFsWzBdID09ICdcJycpIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBpZiAodmFsW2xlbi0xXSAhPSB2YWxbMF0pIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVycihjdHgsICJpbmNvbnNpc3RlbnQgcXVvdGluZyBp biAnJXMnWyVpXSwgc2tpcA0KPiBsaW5lXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLCBsaW5lX25yKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB2YWxbbGVuLTFdID0gJ1ww JzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB2YWwrKzsNCj4gPiArICAgICAgICAgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHN0cmNtcChrZXksICJidXMiKSA9 PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ZhbHVlKChjb25zdCBjaGFy ICoqKSZwYXJhbS5idXMsIHZhbCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgaWYgKHN0cmNt cChrZXksICJkaW1tIikgPT0gMCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNldF92 YWx1ZSgoY29uc3QgY2hhciAqKikmcGFyYW0uZGltbSwgdmFsKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAg ICAgICAgICBpZiAoc3RyY21wKGtleSwgInJlZ2lvbiIpID09IDApIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBzZXRfdmFsdWUoKGNvbnN0IGNoYXIgKiopJnBhcmFtLnJlZ2lvbiwgdmFs KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBpZiAoc3RyY21wKGtleSwgIm5hbWVzcGFjZSIp ID09IDApIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzZXRfdmFsdWUoKGNvbnN0IGNo YXIgKiopJnBhcmFtLm5hbWVzcGFjZSwgdmFsKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBp ZiAoc3RyY21wKGtleSwgImxvZ2ZpbGUiKSA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKG1vbml0b3IubG9nZmlsZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNldF92YWx1ZSgo Y29uc3QgY2hhciAqKikmbW9uaXRvci5sb2dmaWxlLCB2YWwpOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGZpeF9maWxlbmFtZShwcmVmaXgsIChjb25zdCBjaGFyICoqKSZtb25pdG9yLmxv Z2ZpbGUpOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAg ICBmY2xvc2UoZik7DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gDQo+IEdpdmVuIHRoYXQgeW91 IHNhaWQgeW91IGJvcnJvd2VkIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCBmcm9tIHVk ZXYsIGNhbiB3ZQ0KPiBib3Jyb3cgdGhlaXIgcGFyc2luZyBjb2RlIGFzIHdlbGwuIEknZCByYXRo ZXIgbm90IGNhcnJ5IGN1c3RvbSBwYXJzaW5nIGNvZGUgaW4gbmRjdGwuDQoNClRoaW5rIG1vcmUg YWJvdXQgdGhpcyBpbXBsZW1lbnRhdGlvbi4gU2luY2UgdGhlIExpY2Vuc2Ugb2Ygc3JjL2xpYnVk ZXYuYyB3aGljaCBJIGJvcnJvd2VkDQpwYXJ0IG9mIHJlYWRfY29uZmlnX2ZpbGUoKSBmcm9tIGlz IExHUEwtMi4xLCBJIHdpbGwgcmV3cml0ZSBpdCB0byBhdm9pZCBsaWNlbnNlIGlzc3VlIGFuZCBq dXN0DQp1c2UgdGhlIG9yaWdpbmFsIGNvZGVzIGFzIGEgcmVmZXJlbmNlDQo+IA0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtpbnQgY21kX21vbml0b3IoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCB2 b2lkICpjdHgpIHsNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0g ew0KPiA+ICsgICAgICAgICAgICAgICBPUFRfU1RSSU5HKCdiJywgImJ1cyIsICZwYXJhbS5idXMs ICJidXMtaWQiLCAiZmlsdGVyIGJ5IGJ1cyIpLA0KPiA+ICsgICAgICAgICAgICAgICBPUFRfU1RS SU5HKCdyJywgInJlZ2lvbiIsICZwYXJhbS5yZWdpb24sICJyZWdpb24taWQiLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbHRlciBieSByZWdpb24iKSwNCj4gPiArICAg ICAgICAgICAgICAgT1BUX1NUUklORygnZCcsICJkaW1tIiwgJnBhcmFtLmRpbW0sICJkaW1tLWlk IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWx0ZXIgYnkgZGltbSIp LA0KPiA+ICsgICAgICAgICAgICAgICBPUFRfU1RSSU5HKCduJywgIm5hbWVzcGFjZSIsICZwYXJh bS5uYW1lc3BhY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNw YWNlLWlkIiwgImZpbHRlciBieSBuYW1lc3BhY2UgaWQiKSwNCj4gPiArICAgICAgICAgICAgICAg T1BUX0ZJTEVOQU1FKCdsJywgImxvZ2ZpbGUiLCAmbW9uaXRvci5sb2dmaWxlLCAiZmlsZXxzeXNs b2d8c3RkZXJyIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgcGxh Y2UgdG8gb3V0cHV0IHRoZSBtb25pdG9yJ3Mgbm90aWZpY2F0aW9uIiksDQo+ID4gKyAgICAgICAg ICAgICAgIE9QVF9GSUxFTkFNRSgnYycsImNvbmZpZy1maWxlIiwgJm1vbml0b3IuY29uZmlnX2Zp bGUsDQo+ICJjb25maWctZmlsZSIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAidXNlIGZpbGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiIpLA0KPiA+ ICsgICAgICAgICAgICAgICBPUFRfQk9PTEVBTignRCcsImRhZW1vbiIsICZtb25pdG9yLmRhZW1v biwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW4gbmRjdGwgbW9uaXRv ciBhcyBhIGRhZW1vbiIpLA0KPiA+ICsgICAgICAgICAgICAgICBPUFRfRU5EKCksDQo+ID4gKyAg ICAgICB9Ow0KPiA+ICsgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVbXSA9IHsNCj4gPiArICAg ICAgICAgICAgICAgIm5kY3RsIG1vbml0b3IgWzxvcHRpb25zPl0iLA0KPiA+ICsgICAgICAgICAg ICAgICBOVUxMDQo+ID4gKyAgICAgICB9Ow0KPiA+ICsgICAgICAgY29uc3QgY2hhciAqcHJlZml4 ID0gIi4vIjsNCj4gPiArICAgICAgIHN0cnVjdCB1dGlsX2ZpbHRlcl9jdHggZmN0eCA9IHsgMCB9 Ow0KPiA+ICsgICAgICAgc3RydWN0IG1vbml0b3JfZmlsdGVyX2FyZyBtZmEgPSB7IDAgfTsNCj4g PiArDQo+ID4gKyAgICAgICBhcmdjID0gcGFyc2Vfb3B0aW9uc19wcmVmaXgoYXJnYywgYXJndiwg cHJlZml4LCBvcHRpb25zLCB1LCAwKTsNCj4gPiArICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg YXJnYzsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGVycm9yKCJ1bmtub3duIHBhcmFtZXRl ciBcIiVzXCJcbiIsIGFyZ3ZbaV0pOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgaWYgKGFy Z2MpDQo+ID4gKyAgICAgICAgICAgICAgIHVzYWdlX3dpdGhfb3B0aW9ucyh1LCBvcHRpb25zKTsN Cj4gPiArDQo+ID4gKyAgICAgICBuZGN0bF9zZXRfbG9nX2ZuKChzdHJ1Y3QgbmRjdGxfY3R4ICop Y3R4LCBsb2dyZXBvcnQpOw0KPiA+ICsgICAgICAgbmRjdGxfc2V0X2xvZ19wcmlvcml0eSgoc3Ry dWN0IG5kY3RsX2N0eCAqKWN0eCwgTE9HX0lORk8pOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChy ZWFkX2NvbmZpZ19maWxlKChzdHJ1Y3QgbmRjdGxfY3R4ICopY3R4LCBwcmVmaXgpKQ0KPiA+ICsg ICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAobW9uaXRvci5s b2dmaWxlKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdHJjbXAobW9uaXRvci5sb2dmaWxl LCAiLi9zdGRlcnIiKSA9PSAwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGxvZ19kZXN0 aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9TVERFUlI7DQo+ID4gKyAgICAgICAgICAgICAgIGVs c2UgaWYgKHN0cmNtcChtb25pdG9yLmxvZ2ZpbGUsICIuL3N5c2xvZyIpID09IDApDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgbG9nX2Rlc3RpbmF0aW9uID0gTE9HX0RFU1RJTkFUSU9OX1NZ U0xPRzsNCj4gPiArICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9GSUxFOw0KPiA+ICsgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgIGlmIChtb25pdG9yLmRhZW1vbikgew0KPiA+ICsgICAgICAg ICAgICAgICBpZiAoZGFlbW9uKDAsIDApICE9IDApIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBlcnIoKHN0cnVjdCBuZGN0bF9jdHggKiljdHgsICJkYWVtb24gc3RhcnQgZmFpbGVkXG4i KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICAgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBpbmZvKChzdHJ1Y3QgbmRjdGxfY3R4ICopY3R4 LCAibmRjdGwgbW9uaXRvciBkYWVtb24gc3RhcnRlZFxuIik7DQo+ID4gKyAgICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgICAgZmN0eC5maWx0ZXJfYnVzID0gZmlsdGVyX2J1czsNCj4gPiArICAgICAg IGZjdHguZmlsdGVyX2RpbW0gPSBmaWx0ZXJfZGltbTsNCj4gPiArICAgICAgIGZjdHguZmlsdGVy X3JlZ2lvbiA9IGZpbHRlcl9yZWdpb247DQo+ID4gKyAgICAgICBmY3R4LmZpbHRlcl9uYW1lc3Bh Y2UgPSBOVUxMOw0KPiA+ICsgICAgICAgZmN0eC5hcmcgPSAmbWZhOw0KPiA+ICsgICAgICAgbGlz dF9oZWFkX2luaXQoJm1mYS5tZGltbSk7DQo+ID4gKyAgICAgICBtZmEubnVtX2RpbW0gPSAwOw0K PiA+ICsgICAgICAgbWZhLm1heGZkX2RpbW0gPSAtMTsNCj4gPiArICAgICAgIG1mYS5mbGFncyA9 IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHV0aWxfZmlsdGVyX3dhbGsoY3R4LCAmZmN0eCwg JnBhcmFtKSkNCj4gPiArICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAg ICAgaWYgKCFtZmEubnVtX2RpbW0pIHsNCj4gPiArICAgICAgICAgICAgICAgZXJyKChzdHJ1Y3Qg bmRjdGxfY3R4ICopY3R4LCAibm8gZGltbXMgY2FuIGJlIG1vbml0b3JlZFxuIik7DQo+ID4gKyAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg IGlmIChtb25pdG9yX2RpbW1fZXZlbnQoY3R4LCAmbWZhKSkNCj4gPiArICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK291dDoNCj4gPiAr ICAgICAgIHJldHVybiAxOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL25kY3RsL25kY3RsLmMg Yi9uZGN0bC9uZGN0bC5jIGluZGV4IDdkYWFkZWIuLjczZGFiZmENCj4gPiAxMDA2NDQNCj4gPiAt LS0gYS9uZGN0bC9uZGN0bC5jDQo+ID4gKysrIGIvbmRjdGwvbmRjdGwuYw0KPiA+IEBAIC04OSw2 ICs4OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0gew0KPiA+ICAg ICAgICAgeyAid2FpdC1zY3J1YiIsIGNtZF93YWl0X3NjcnViIH0sDQo+ID4gICAgICAgICB7ICJz dGFydC1zY3J1YiIsIGNtZF9zdGFydF9zY3J1YiB9LA0KPiA+ICAgICAgICAgeyAibGlzdCIsIGNt ZF9saXN0IH0sDQo+ID4gKyAgICAgICB7ICJtb25pdG9yIiwgY21kX21vbml0b3J9LA0KPiA+ICAg ICAgICAgeyAiaGVscCIsIGNtZF9oZWxwIH0sDQo+ID4gICAgICAgICAjaWZkZWYgRU5BQkxFX1RF U1QNCj4gPiAgICAgICAgIHsgInRlc3QiLCBjbWRfdGVzdCB9LA0KPiA+IC0tDQo+ID4gMi4xNy4w LjE0MC5nMGIwY2M5Zjg2DQo+ID4NCj4gPg0KPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQo+ID4gTGludXgtbnZkaW1tIG1haWxpbmcgbGlzdA0KPiA+ IExpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcNCj4gPiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LW52ZGltbQ0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KTGludXgtbnZkaW1tIG1haWxpbmcgbGlzdApMaW51eC1udmRpbW1A bGlzdHMuMDEub3JnCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt bnZkaW1tCg==