From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 0AFFC20348600 for ; Tue, 22 May 2018 01:58:19 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 May 2018 01:58:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,429,1520924400"; d="scan'208";a="48879203" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga002.fm.intel.com with ESMTP; 22 May 2018 01:58:18 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 22 May 2018 01:58:18 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 22 May 2018 01:58:17 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.79]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.240]) with mapi id 14.03.0319.002; Tue, 22 May 2018 16:58:15 +0800 From: "Zeng, Star" To: Ard Biesheuvel , "Bi, Dandan" , Laszlo Ersek , Andrew Fish , "Kinney, Michael D" CC: Leif Lindholm , "edk2-devel@lists.01.org" , "Gao, Liming" , Matt Sealey , "Zeng, Star" Thread-Topic: [edk2] [PATCH v2 3/8] MdeModulePkg/DxeCorePerformanceLib:Track FPDT record in DXE phase Thread-Index: AQHTmdHSnZvFDbcLrUGLMz6l1fjbn6QbGK+AgB/2qgCAAIsbgIAAhv+Q Date: Tue, 22 May 2018 08:58:15 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BAEE227@shsmsx102.ccr.corp.intel.com> References: <1517320437-11688-1-git-send-email-dandan.bi@intel.com> <1517320437-11688-4-git-send-email-dandan.bi@intel.com> <3C0D5C461C9E904E8F62152F6274C0BB3BAD755F@shsmsx102.ccr.corp.intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2 3/8] MdeModulePkg/DxeCorePerformanceLib:Track FPDT record in DXE phase X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 May 2018 08:58:20 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SG93IGFib3V0IHRoZSBjb2RlIHRvIHRyeSBhbGxvY2F0aW5nIDw0RyBtZW1vcnksIHRoZW4gdHJ5 IGFsbG9jYXRpbmcgYW55IG1lbW9yeSBpZiBmYWlsZWQgdG8gYWxsb2NhdGUgPDRHIG1lbW9yeT8N Cg0KRm9yIGV4YW1wbGUsIHRoZSBjb2RlIHNuaXBwZXQgaW4gU21iaW9zRHhlLmMuDQoNCiAgICBQ aHlzaWNhbEFkZHJlc3MgPSAweGZmZmZmZmZmOw0KICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQ YWdlcyAoDQogICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVzcywNCiAgICAgICAg ICAgICAgICAgICAgRWZpUnVudGltZVNlcnZpY2VzRGF0YSwNCiAgICAgICAgICAgICAgICAgICAg RUZJX1NJWkVfVE9fUEFHRVMgKHNpemVvZiAoU01CSU9TX1RBQkxFX0VOVFJZX1BPSU5UKSksDQog ICAgICAgICAgICAgICAgICAgICZQaHlzaWNhbEFkZHJlc3MNCiAgICAgICAgICAgICAgICAgICAg KTsNCiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgICBERUJVRyAoKEVGSV9EX0VS Uk9SLCAiU21iaW9zQ3JlYXRlVGFibGUgKCkgY291bGQgbm90IGFsbG9jYXRlIEVudHJ5UG9pbnRT dHJ1Y3R1cmUgPCA0R0JcbiIpKTsNCiAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQYWdlcyAo DQogICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVBbnlQYWdlcywNCiAgICAgICAgICAgICAg ICAgICAgICBFZmlSdW50aW1lU2VydmljZXNEYXRhLA0KICAgICAgICAgICAgICAgICAgICAgIEVG SV9TSVpFX1RPX1BBR0VTIChzaXplb2YgKFNNQklPU19UQUJMRV9FTlRSWV9QT0lOVCkpLA0KICAg ICAgICAgICAgICAgICAgICAgICZQaHlzaWNhbEFkZHJlc3MNCiAgICAgICAgICAgICAgICAgICAg ICApOw0KICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCiAgICAgIH0NCiAgICB9DQoNCg0KVGhhbmtzLA0KU3Rhcg0KLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEFyZCBCaWVzaGV1dmVsIFttYWlsdG86YXJk LmJpZXNoZXV2ZWxAbGluYXJvLm9yZ10gDQpTZW50OiBUdWVzZGF5LCBNYXkgMjIsIDIwMTggNDo1 MiBQTQ0KVG86IEJpLCBEYW5kYW4gPGRhbmRhbi5iaUBpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsg PGxlcnNla0ByZWRoYXQuY29tPjsgQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT47IEtpbm5l eSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCkNjOiBMZWlmIExpbmRo b2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsg WmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2Fv QGludGVsLmNvbT47IE1hdHQgU2VhbGV5IDxuZWtvQGJha3VoYXRzdS5uZXQ+DQpTdWJqZWN0OiBS ZTogW2VkazJdIFtQQVRDSCB2MiAzLzhdIE1kZU1vZHVsZVBrZy9EeGVDb3JlUGVyZm9ybWFuY2VM aWI6VHJhY2sgRlBEVCByZWNvcmQgaW4gRFhFIHBoYXNlDQoNCigrIExhc3psbywgQW5kcmV3LCBN aWtlKQ0KDQpPbiAyMiBNYXkgMjAxOCBhdCAwMjozMywgQmksIERhbmRhbiA8ZGFuZGFuLmJpQGlu dGVsLmNvbT4gd3JvdGU6DQo+IFNvcnJ5IGZvciB0aGUgZGVsYXllZCByZXNwb25zZS4NCj4NCj4g VGhlIGFsbG9jYXRlZCAgcGVyZm9ybWFuY2UgdGFibGUgKCBiZWxvdyA0RyApIGlzIHRvIHNhdmUg dGhlIGJvb3QgcGVyZm9ybWFuY2UgZGF0YSBpbiBub3JtYWwgYm9vdCBhbmQgUzMgcGhhc2UuDQo+ IFBFSU0gRmlybXdhcmVQZXJmb3JtYW5jZVBlaSB3aWxsIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUg cGVyZm9ybWFuY2UgdGFibGUgYW5kIHVwZGF0ZSB0aGUgcGVyZm9ybWFuY2UgZGF0ZSBvZiBTMyBw aGFzZSB0byB0aGUgdGFibGUuDQo+IFRoZSBhZGRyZXNzIG5lZWQgdG8gYmUgaGFuZGxlZCBpbiBQ RUkgcGhhc2UoMzJiaXQpLCB0aGF0J3MgdGhlIG1haW4gcmVhc29uIHdoeSB3ZSBhbGxvY2F0ZSBp dCBiZWxvdyA0Ry4NCj4NCg0KVGhlIDMyLWJpdCBQRUkgKyA2NC1iaXQgRFhFIGNvbWJvIGlzIHNw ZWNpZmljIHRvIFg2NC4gWW91IGhhdmUgYWRkZWQNCmNvZGUgdG8gYSBnZW5lcmljIGxpYnJhcnkg dGhhdCBBU1NFUlQoKXMgaWYgYWxsb2NhdGluZyBtZW1vcnkgYmVsb3cgNA0KR0IgZmFpbHMsIGJy ZWFraW5nIG5vbi1QQyBhcmNoaXRlY3R1cmVzLg0KDQpTbyBwbGVhc2UsIGZpeCB0aGlzLiBPciBh dCBsZWFzdCBzdWdnZXN0IGEgd2F5IGFyb3VuZCBpdCBzbyB0aGF0IG90aGVyDQphcmNoaXRlY3R1 cmVzIGNhbiBrZWVwIHVzaW5nIHRoaXMgbGlicmFyeS4NCg0KVGhpcyBpcyBhbm90aGVyIGNvbnNl cXVlbmNlIG9mIG91ciBmYWlsdXJlIHRvIG1vZGVsIHRoZSBzcGVjaWFsIDMyLWJpdA0KUEVJLzY0 LWJpdCBEWEUgY29tYmluYXRpb24gdXNpbmcgcHJvcGVyIFBJIGludGVyZmFjZXMsIHJlc3VsdGlu ZyBpbg0KdGhlc2Uga2luZHMgb2YgYnJlYWthZ2VzIGFuZCBvcGVuIGNvZGVkIDQgR0IgYWxsb2Nh dGlvbnMgYWxsDQp0aHJvdWdob3V0IHRoZSBjb2RlLiBDYW4gd2UgcGxlYXNlIHdvcmsgb24gZ2V0 dGluZyB0aGlzIGZpeGVkPw0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv bTogQXJkIEJpZXNoZXV2ZWwgW21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBT ZW50OiBXZWRuZXNkYXksIE1heSAyLCAyMDE4IDEyOjI3IEFNDQo+IFRvOiBCaSwgRGFuZGFuIDxk YW5kYW4uYmlAaW50ZWwuY29tPjsgTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8u b3JnPg0KPiBDYzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IFplbmcsIFN0YXIgPHN0YXIuemVu Z0BpbnRlbC5jb20+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBNYXR0IFNl YWxleSA8bmVrb0BiYWt1aGF0c3UubmV0Pg0KPiBTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCB2 MiAzLzhdIE1kZU1vZHVsZVBrZy9EeGVDb3JlUGVyZm9ybWFuY2VMaWI6VHJhY2sgRlBEVCByZWNv cmQgaW4gRFhFIHBoYXNlDQo+DQo+IE9uIDMwIEphbnVhcnkgMjAxOCBhdCAxNDo1MywgRGFuZGFu IEJpIDxkYW5kYW4uYmlAaW50ZWwuY29tPiB3cm90ZToNCj4+IFYyOg0KPj4gVXBkYXRlIER4ZWNv cmVQZXJmb3JtYW5jZUxpYiB0byByZXBvcnQgdGhlIGJvb3QgcGVyZm9ybWFuY2UgdGFibGUNCj4+ IGFkZHJlc3MgaW5zdGVhZCBvZiByZWNvcmRzIGNvbnRlbnRzLg0KPj4NCj4+IFVwZGF0ZWQgdG8g Y29udmVydCBQcmVmIGVudHJ5IHRvIEZQRFQgcmVjb3JkIGluIERYRSBwaGFzZSBhbmQgdGhlbg0K Pj4gYWxsb2NhdGUgYm9vdCBwZXJmb3JtYW5jZSB0YWJsZSB0byBzYXZlIHRoZSByZWNvcmQgYW5k IHJlcG9ydA0KPj4gdGhlIGFkZHJlc3Mgb2YgYm9vdCBwZXJmb3JtYW5jZSB0YWJsZSB0byBGaXJt d2FyZVBlcmZvcm1hbmNlRHhlLg0KPj4NCj4+IENjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGlu dGVsLmNvbT4NCj4+IENjOiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+PiBDb250 cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+PiBT aWduZWQtb2ZmLWJ5OiBEYW5kYW4gQmkgPGRhbmRhbi5iaUBpbnRlbC5jb20+DQo+PiAtLS0NCj4+ ICAuLi4vRHhlQ29yZVBlcmZvcm1hbmNlTGliL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi5jICB8IDEz ODkgKysrKysrKysrKysrKysrLS0tLS0NCj4+ICAuLi4vRHhlQ29yZVBlcmZvcm1hbmNlTGliLmlu ZiAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0NCj4+ICAuLi4vRHhlQ29yZVBlcmZvcm1h bmNlTGliSW50ZXJuYWwuaCAgICAgICAgICAgICAgICB8ICAgMTcgKy0NCj4+ICAzIGZpbGVzIGNo YW5nZWQsIDExMDggaW5zZXJ0aW9ucygrKSwgMzE4IGRlbGV0aW9ucygtKQ0KPj4NCj4+IGRpZmYg LS1naXQgYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFuY2VMaWIvRHhlQ29y ZVBlcmZvcm1hbmNlTGliLmMgYi9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFu Y2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliLmMNCj4+IGluZGV4IDdjMGUyMDcuLmM2ZjhhMTYg MTAwNjQ0DQo+PiAtLS0gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFuY2VM aWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliLmMNCj4+ICsrKyBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5 L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi9EeGVDb3JlUGVyZm9ybWFuY2VMaWIuYw0KPj4gQEAgLTgs MTEgKzgsMTEgQEANCj4+ICAgIHdoaWNoIGFyZSBjb25zdW1lZCBieSBEeGVQZXJmb3JtYW5jZUxp YiB0byBsb2dnaW5nIHBlcmZvcm1hbmNlIGRhdGEgaW4gRFhFIHBoYXNlLg0KPj4NCj4+ICAgIFRo aXMgbGlicmFyeSBpcyBtYWlubHkgdXNlZCBieSBEeGVDb3JlIHRvIHN0YXJ0IHBlcmZvcm1hbmNl IGxvZ2dpbmcgdG8gZW5zdXJlIHRoYXQNCj4+ICAgIFBlcmZvcm1hbmNlIFByb3RvY29sIGlzIGlu c3RhbGxlZCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgRFhFIHBoYXNlLg0KPj4NCj4+IC1Db3B5 cmlnaHQgKGMpIDIwMDYgLSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+PiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4gIChDKSBDb3B5cmlnaHQgMjAxNiBIZXds ZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4+ICBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+PiAgYXJlIGxpY2Vuc2VkIGFuZCBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBM aWNlbnNlDQo+PiAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVs bCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPj4gIGh0dHA6Ly9vcGVuc291 cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+IEBAIC0yMywyNyArMjMsNjUgQEAg V0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4+ICAqKi8NCj4+DQo+Pg0KPj4gICNpbmNsdWRlICJEeGVD b3JlUGVyZm9ybWFuY2VMaWJJbnRlcm5hbC5oIg0KPj4NCj4+IC0NCj4+ICAvLw0KPj4gLS8vIFRo ZSBkYXRhIHN0cnVjdHVyZSB0byBob2xkIGdsb2JhbCBwZXJmb3JtYW5jZSBkYXRhLg0KPj4gKy8v IERhdGEgZm9yIEZQRFQgcGVyZm9ybWFuY2UgcmVjb3Jkcy4NCj4+ICAvLw0KPj4gLUdBVUdFX0RB VEFfSEVBREVSICAgICptR2F1Z2VEYXRhOw0KPj4gKyNkZWZpbmUgU01NX0JPT1RfUkVDT1JEX0NP TU1fU0laRSAoT0ZGU0VUX09GIChFRklfU01NX0NPTU1VTklDQVRFX0hFQURFUiwgRGF0YSkgKyBz aXplb2YoU01NX0JPT1RfUkVDT1JEX0NPTU1VTklDQVRFKSkNCj4+ICsjZGVmaW5lIFNUUklOR19T SVpFICAgICAgICAgICAgIChFREtJSV9TVFJJTkdfRVZFTlRfUkVDT1JEX05BTUVfTEVOR1RIICog c2l6ZW9mIChDSEFSOCkpDQo+PiArI2RlZmluZSBNQVhfUkVDT1JEX1NJWkUgICAgICAgICAoc2l6 ZW9mIChEWU5BTUlDX1NUUklOR19FVkVOVF9SRUNPUkQpICsgU1RSSU5HX1NJWkUpDQo+PiArI2Rl ZmluZSBGSVJNV0FSRV9SRUNPUkRfQlVGRkVSICAweDEwMDAwDQo+PiArI2RlZmluZSBDQUNIRV9I QU5ETEVfR1VJRF9DT1VOVCAweDEwMDANCj4+ICsNCj4+ICtCT09UX1BFUkZPUk1BTkNFX1RBQkxF ICAgICAgICAgICptQWNwaUJvb3RQZXJmb3JtYW5jZVRhYmxlID0gTlVMTDsNCj4+ICtCT09UX1BF UkZPUk1BTkNFX1RBQkxFICAgICAgICAgIG1Cb290UGVyZm9ybWFuY2VUYWJsZVRlbXBsYXRlID0g ew0KPj4gKyAgew0KPj4gKyAgICBFRklfQUNQSV81XzBfRlBEVF9CT09UX1BFUkZPUk1BTkNFX1RB QkxFX1NJR05BVFVSRSwNCj4+ICsgICAgc2l6ZW9mIChCT09UX1BFUkZPUk1BTkNFX1RBQkxFKQ0K Pj4gKyAgfSwNCj4+ICsgIHsNCj4+ICsgICAgew0KPj4gKyAgICAgIEVGSV9BQ1BJXzVfMF9GUERU X1JVTlRJTUVfUkVDT1JEX1RZUEVfRklSTVdBUkVfQkFTSUNfQk9PVCwgICAgLy8gVHlwZQ0KPj4g KyAgICAgIHNpemVvZiAoRUZJX0FDUElfNV8wX0ZQRFRfRklSTVdBUkVfQkFTSUNfQk9PVF9SRUNP UkQpLCAgICAgICAgLy8gTGVuZ3RoDQo+PiArICAgICAgRUZJX0FDUElfNV8wX0ZQRFRfUlVOVElN RV9SRUNPUkRfUkVWSVNJT05fRklSTVdBUkVfQkFTSUNfQk9PVCAvLyBSZXZpc2lvbg0KPj4gKyAg ICB9LA0KPj4gKyAgICAwLCAgLy8gUmVzZXJ2ZWQNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8gVGhl c2UgdmFsdWVzIHdpbGwgYmUgdXBkYXRlZCBhdCBydW50aW1lLg0KPj4gKyAgICAvLw0KPj4gKyAg ICAwLCAgLy8gUmVzZXRFbmQNCj4+ICsgICAgMCwgIC8vIE9zTG9hZGVyTG9hZEltYWdlU3RhcnQN Cj4+ICsgICAgMCwgIC8vIE9zTG9hZGVyU3RhcnRJbWFnZVN0YXJ0DQo+PiArICAgIDAsICAvLyBF eGl0Qm9vdFNlcnZpY2VzRW50cnkNCj4+ICsgICAgMCAgIC8vIEV4aXRCb290U2VydmljZXNFeGl0 DQo+PiArICB9DQo+PiArfTsNCj4+DQo+PiAtLy8NCj4+IC0vLyBUaGUgY3VycmVudCBtYXhpbXVt IG51bWJlciBvZiBsb2dnaW5nIGVudHJpZXMuIElmIGN1cnJlbnQgbnVtYmVyIG9mDQo+PiAtLy8g ZW50cmllcyBleGNlZWRzIHRoaXMgdmFsdWUsIGl0IHdpbGwgcmUtYWxsb2NhdGUgYSBsYXJnZXIg YXJyYXkgYW5kDQo+PiAtLy8gbWlncmF0aW9uIHRoZSBvbGQgZGF0YSB0byB0aGUgbGFyZ2VyIGFy cmF5Lg0KPj4gLS8vDQo+PiAtVUlOVDMyICAgICAgICAgICAgICAgbU1heEdhdWdlUmVjb3JkczsN Cj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+PiArICBFRklfSEFORExFICAgIEhhbmRsZTsNCj4+ICsg IENIQVI4ICAgICAgICAgTmFtZVN0cmluZ1tFREtJSV9TVFJJTkdfRVZFTlRfUkVDT1JEX05BTUVf TEVOR1RIXTsNCj4+ICsgIEVGSV9HVUlEICAgICAgTW9kdWxlR3VpZDsNCj4+ICt9IEhBTkRMRV9H VUlEX01BUDsNCj4+DQo+PiAtLy8NCj4+IC0vLyBUaGUgaGFuZGxlIHRvIGluc3RhbGwgUGVyZm9y bWFuY2UgUHJvdG9jb2wgaW5zdGFuY2UuDQo+PiAtLy8NCj4+IC1FRklfSEFORExFICAgICAgICAg ICBtSGFuZGxlID0gTlVMTDsNCj4+ICtIQU5ETEVfR1VJRF9NQVAgbUNhY2hlSGFuZGxlR3VpZFRh YmxlW0NBQ0hFX0hBTkRMRV9HVUlEX0NPVU5UXTsNCj4+ICtVSU5UTiAgICAgICAgICAgbUNhY2hl UGFpckNvdW50ID0gMDsNCj4+ICsNCj4+ICtVSU5UMzIgIG1Mb2FkSW1hZ2VDb3VudCAgICAgICA9 IDA7DQo+PiArVUlOVDMyICBtUGVyZm9ybWFuY2VMZW5ndGggICAgPSAwOw0KPj4gK1VJTlQzMiAg bU1heFBlcmZvcm1hbmNlTGVuZ3RoID0gMDsNCj4+ICtVSU5UMzIgIG1Cb290UmVjb3JkU2l6ZSAg ICAgICA9IDA7DQo+PiArVUlOVDMyICBtQm9vdFJlY29yZE1heFNpemUgICAgPSAwOw0KPj4gKw0K Pj4gK0JPT0xFQU4gbUZwZHRCdWZmZXJJc1JlcG9ydGVkID0gRkFMU0U7DQo+PiArQk9PTEVBTiBt TGFja1NwYWNlSXNSZXBvcnRlZCAgPSBGQUxTRTsNCj4+ICtDSEFSOCAgICptUGxhdGZvcm1MYW5n dWFnZSAgICA9IE5VTEw7DQo+PiArVUlOVDggICAqbVBlcmZvcm1hbmNlUG9pbnRlciAgPSBOVUxM Ow0KPj4gK1VJTlQ4ICAgKm1Cb290UmVjb3JkQnVmZmVyICAgID0gTlVMTDsNCj4+ICsNCj4+ICtF RklfREVWSUNFX1BBVEhfVE9fVEVYVF9QUk9UT0NPTCAgKm1EZXZpY2VQYXRoVG9UZXh0ID0gTlVM TDsNCj4+DQo+PiAgLy8NCj4+ICAvLyBJbnRlcmZhY2VzIGZvciBQZXJmb3JtYW5jZSBQcm90b2Nv bC4NCj4+ICAvLw0KPj4gIFBFUkZPUk1BTkNFX1BST1RPQ09MIG1QZXJmb3JtYW5jZUludGVyZmFj ZSA9IHsNCj4+IEBAIC02MSwxNzkgKzk5LDEwNjkgQEAgUEVSRk9STUFOQ0VfRVhfUFJPVE9DT0wg bVBlcmZvcm1hbmNlRXhJbnRlcmZhY2UgPSB7DQo+PiAgICBHZXRHYXVnZUV4DQo+PiAgICB9Ow0K Pj4NCj4+ICBQRVJGT1JNQU5DRV9QUk9QRVJUWSAgbVBlcmZvcm1hbmNlUHJvcGVydHk7DQo+Pg0K Pj4gLS8vDQo+PiAtLy8gIEdhdWdlIHJlY29yZCBsb2NrIHRvIGF2b2lkIGRhdGEgY29ycnVwdGlv biBvciBldmVuIG1lbW9yeSBvdmVyZmxvdw0KPj4gLS8vDQo+PiAtU1RBVElDIEVGSV9MT0NLIG1Q ZXJmUmVjb3JkTG9jayA9IEVGSV9JTklUSUFMSVpFX0xPQ0tfVkFSSUFCTEUgKFRQTF9OT1RJRlkp Ow0KPj4gKy8qKg0KPj4gK0NoZWNrIHdoZXRoZXIgdGhlIFRva2VuIGlzIGEga25vd24gb25lIHdo aWNoIGlzIHVlc2VkIGJ5IGNvcmUuDQo+PiArDQo+PiArQHBhcmFtICBUb2tlbiAgICAgIFBvaW50 ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+PiArDQo+PiArQHJldHZhbCBU UlVFICAgICAgIElzIGEga25vd24gb25lIHVzZWQgYnkgY29yZS4NCj4+ICtAcmV0dmFsIEZBTFNF ICAgICAgTm90IGEga25vd24gb25lLg0KPj4gKw0KPj4gKyoqLw0KPj4gK0JPT0xFQU4NCj4+ICtJ c0tub3duVG9rZW5zICgNCj4+ICsgIElOIENPTlNUIENIQVI4ICAqVG9rZW4NCj4+ICsgICkNCj4+ ICt7DQo+PiArICBpZiAoQXNjaWlTdHJDbXAgKFRva2VuLCBTRUNfVE9LKSA9PSAwIHx8DQo+PiAr ICAgICAgQXNjaWlTdHJDbXAgKFRva2VuLCBQRUlfVE9LKSA9PSAwIHx8DQo+PiArICAgICAgQXNj aWlTdHJDbXAgKFRva2VuLCBEWEVfVE9LKSA9PSAwIHx8DQo+PiArICAgICAgQXNjaWlTdHJDbXAg KFRva2VuLCBCRFNfVE9LKSA9PSAwIHx8DQo+PiArICAgICAgQXNjaWlTdHJDbXAgKFRva2VuLCBE UklWRVJCSU5ESU5HX1NUQVJUX1RPSykgPT0gMCB8fA0KPj4gKyAgICAgIEFzY2lpU3RyQ21wIChU b2tlbiwgRFJJVkVSQklORElOR19TVVBQT1JUX1RPSykgPT0gMCB8fA0KPj4gKyAgICAgIEFzY2lp U3RyQ21wIChUb2tlbiwgRFJJVkVSQklORElOR19TVE9QX1RPSykgPT0gMCB8fA0KPj4gKyAgICAg IEFzY2lpU3RyQ21wIChUb2tlbiwgTE9BRF9JTUFHRV9UT0spID09IDAgfHwNCj4+ICsgICAgICBB c2NpaVN0ckNtcCAoVG9rZW4sIFNUQVJUX0lNQUdFX1RPSykgPT0gMCB8fA0KPj4gKyAgICAgIEFz Y2lpU3RyQ21wIChUb2tlbiwgUEVJTV9UT0spID09IDApIHsNCj4+ICsgICAgcmV0dXJuIFRSVUU7 DQo+PiArICB9IGVsc2Ugew0KPj4gKyAgICByZXR1cm4gRkFMU0U7DQo+PiArICB9DQo+PiArfQ0K Pj4gKw0KPj4gKy8qKg0KPj4gK0NoZWNrIHdoZXRoZXIgdGhlIElEIGlzIGEga25vd24gb25lIHdo aWNoIG1hcCB0byB0aGUga25vd24gVG9rZW4uDQo+PiArDQo+PiArQHBhcmFtICBJZGVudGlmaWVy ICAzMi1iaXQgaWRlbnRpZmllci4NCj4+ICsNCj4+ICtAcmV0dmFsIFRSVUUgICAgICAgIElzIGEg a25vd24gb25lIHVzZWQgYnkgY29yZS4NCj4+ICtAcmV0dmFsIEZBTFNFICAgICAgIE5vdCBhIGtu b3duIG9uZS4NCj4+ICsNCj4+ICsqKi8NCj4+ICtCT09MRUFODQo+PiArSXNLbm93bklEICgNCj4+ ICsgIElOIFVJTlQzMiAgICAgICBJZGVudGlmaWVyDQo+PiArICApDQo+PiArew0KPj4gKyAgaWYg KElkZW50aWZpZXIgPT0gTU9EVUxFX1NUQVJUX0lEIHx8DQo+PiArICAgICAgSWRlbnRpZmllciA9 PSBNT0RVTEVfRU5EX0lEIHx8DQo+PiArICAgICAgSWRlbnRpZmllciA9PSBNT0RVTEVfTE9BRElN QUdFX1NUQVJUX0lEIHx8DQo+PiArICAgICAgSWRlbnRpZmllciA9PSBNT0RVTEVfTE9BRElNQUdF X0VORF9JRCB8fA0KPj4gKyAgICAgIElkZW50aWZpZXIgPT0gTU9EVUxFX0RCX1NUQVJUX0lEIHx8 DQo+PiArICAgICAgSWRlbnRpZmllciA9PSBNT0RVTEVfREJfRU5EX0lEIHx8DQo+PiArICAgICAg SWRlbnRpZmllciA9PSBNT0RVTEVfREJfU1VQUE9SVF9TVEFSVF9JRCB8fA0KPj4gKyAgICAgIElk ZW50aWZpZXIgPT0gTU9EVUxFX0RCX1NVUFBPUlRfRU5EX0lEIHx8DQo+PiArICAgICAgSWRlbnRp ZmllciA9PSBNT0RVTEVfREJfU1RPUF9TVEFSVF9JRCB8fA0KPj4gKyAgICAgIElkZW50aWZpZXIg PT0gTU9EVUxFX0RCX1NUT1BfRU5EX0lEKSB7DQo+PiArICAgIHJldHVybiBUUlVFOw0KPj4gKyAg fSBlbHNlIHsNCj4+ICsgICAgcmV0dXJuIEZBTFNFOw0KPj4gKyAgfQ0KPj4gK30NCj4+DQo+PiAg LyoqDQo+PiAtICBTZWFyY2hlcyBpbiB0aGUgZ2F1Z2UgYXJyYXkgd2l0aCBrZXl3b3JkIEhhbmRs ZSwgVG9rZW4sIE1vZHVsZSBhbmQgSWRlbnRpZmllci4NCj4+ICsgIEFsbG9jYXRlIEVmaVJlc2Vy dmVkTWVtb3J5VHlwZSBiZWxvdyA0RyBtZW1vcnkgYWRkcmVzcy4NCj4+ICsNCj4+ICsgIFRoaXMg ZnVuY3Rpb24gYWxsb2NhdGVzIEVmaVJlc2VydmVkTWVtb3J5VHlwZSBiZWxvdyA0RyBtZW1vcnkg YWRkcmVzcy4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIFNpemUgICBTaXplIG9mIG1lbW9yeSB0 byBhbGxvY2F0ZS4NCj4+ICsNCj4+ICsgIEByZXR1cm4gQWxsb2NhdGVkIGFkZHJlc3MgZm9yIG91 dHB1dC4NCj4+ICsNCj4+ICsqKi8NCj4+ICtWT0lEICoNCj4+ICtGcGR0QWxsb2NhdGVSZXNlcnZl ZE1lbW9yeUJlbG93NEcgKA0KPj4gKyAgSU4gVUlOVE4gICAgICAgU2l6ZQ0KPj4gKyAgKQ0KPj4g K3sNCj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICBQYWdlczsNCj4+ICsgIEVGSV9QSFlTSUNB TF9BRERSRVNTICBBZGRyZXNzOw0KPj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsN Cj4+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPj4gKw0KPj4gKyAgQnVmZmVy ICA9IE5VTEw7DQo+PiArICBQYWdlcyAgID0gRUZJX1NJWkVfVE9fUEFHRVMgKFNpemUpOw0KPj4g KyAgQWRkcmVzcyA9IDB4ZmZmZmZmZmY7DQo+PiArDQo+PiArICBTdGF0dXMgPSBnQlMtPkFsbG9j YXRlUGFnZXMgKA0KPj4gKyAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVzcywNCj4+ ICsgICAgICAgICAgICAgICAgICBFZmlSZXNlcnZlZE1lbW9yeVR5cGUsDQo+PiArICAgICAgICAg ICAgICAgICAgUGFnZXMsDQo+PiArICAgICAgICAgICAgICAgICAgJkFkZHJlc3MNCj4+ICsgICAg ICAgICAgICAgICAgICApOw0KPj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4NCj4g VGhpcyBjb2RlIGlzIGJyZWFraW5nIERFQlVHIGJ1aWxkcyBvbiBBUk0gc3lzdGVtcyB0aGF0IGhh dmUgbm8gbWVtb3J5DQo+IGJlbG93IDQgR0IuDQo+DQo+PiArDQo+PiArICBpZiAoIUVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPj4gKyAgICBCdWZmZXIgPSAoVk9JRCAqKSAoVUlOVE4pIEFkZHJlc3M7 DQo+PiArICAgIFplcm9NZW0gKEJ1ZmZlciwgU2l6ZSk7DQo+PiArICB9DQo+PiArDQo+PiArICBy ZXR1cm4gQnVmZmVyOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIEFsbG9jYXRlIGJ1ZmZl ciBmb3IgQm9vdCBQZXJmb3JtYW5jZSB0YWJsZS4NCj4+ICsNCj4+ICsgIEByZXR1cm4gU3RhdHVz IGNvZGUuDQo+PiArDQo+PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0FsbG9jYXRlQm9vdFBl cmZvcm1hbmNlVGFibGUgKA0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IFNpemU7DQo+PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAqU21tQm9vdFJlY29y ZENvbW1CdWZmZXI7DQo+PiArICBFRklfU01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAqU21tQ29t bUJ1ZmZlckhlYWRlcjsNCj4+ICsgIFNNTV9CT09UX1JFQ09SRF9DT01NVU5JQ0FURSAgICpTbW1D b21tRGF0YTsNCj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1TaXplOw0K Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQm9vdFBlcmZvcm1hbmNlRGF0YVNp emU7DQo+PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAqQm9vdFBlcmZvcm1hbmNl RGF0YTsNCj4+ICsgIEVGSV9TTU1fQ09NTVVOSUNBVElPTl9QUk9UT0NPTCAgKkNvbW11bmljYXRp b247DQo+PiArICBGSVJNV0FSRV9QRVJGT1JNQU5DRV9WQVJJQUJMRSBQZXJmb3JtYW5jZVZhcmlh YmxlOw0KPj4gKyAgRURLSUlfUElfU01NX0NPTU1VTklDQVRJT05fUkVHSU9OX1RBQkxFICpTbW1D b21tUmVnaW9uVGFibGU7DQo+PiArICBFRklfTUVNT1JZX0RFU0NSSVBUT1IgICAgICAgICAqU21t Q29tbU1lbVJlZ2lvbjsNCj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKlNtbUJvb3RSZWNvcmREYXRh Ow0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgU21tQm9vdFJlY29yZERhdGFT aXplOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRNZW1TaXpl Ow0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIENvbGxlY3QgYm9vdCByZWNvcmRzIGZyb20gU01N IGRyaXZlcnMuDQo+PiArICAvLw0KPj4gKyAgU21tQm9vdFJlY29yZENvbW1CdWZmZXIgPSBOVUxM Ow0KPj4gKyAgU21tQ29tbURhdGEgICAgICAgICAgICAgPSBOVUxMOw0KPj4gKyAgU21tQm9vdFJl Y29yZERhdGEgICAgICAgPSBOVUxMOw0KPj4gKyAgU21tQm9vdFJlY29yZERhdGFTaXplICAgPSAw Ow0KPj4gKyAgUmVzZXJ2ZWRNZW1TaXplICAgICAgICAgPSAwOw0KPj4gKyAgU3RhdHVzID0gZ0JT LT5Mb2NhdGVQcm90b2NvbCAoJmdFZmlTbW1Db21tdW5pY2F0aW9uUHJvdG9jb2xHdWlkLCBOVUxM LCAoVk9JRCAqKikgJkNvbW11bmljYXRpb24pOw0KPj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8gSW5pdGlhbGl6ZSBjb21tdW5pY2F0ZSBidWZm ZXINCj4+ICsgICAgLy8gR2V0IHRoZSBwcmVwYXJlZCBSZXNlcnZlZCBNZW1vcnkgUmFuZ2UNCj4+ ICsgICAgLy8NCj4+ICsgICAgU3RhdHVzID0gRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxl ICgNCj4+ICsgICAgICAgICAgICAgICZnRWRraWlQaVNtbUNvbW11bmljYXRpb25SZWdpb25UYWJs ZUd1aWQsDQo+PiArICAgICAgICAgICAgICAoVk9JRCAqKikgJlNtbUNvbW1SZWdpb25UYWJsZQ0K Pj4gKyAgICAgICAgICAgICAgKTsNCj4+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4+ICsgICAgICBBU1NFUlQgKFNtbUNvbW1SZWdpb25UYWJsZSAhPSBOVUxMKTsNCj4+ICsgICAg ICBTbW1Db21tTWVtUmVnaW9uID0gKEVGSV9NRU1PUllfREVTQ1JJUFRPUiAqKSAoU21tQ29tbVJl Z2lvblRhYmxlICsgMSk7DQo+PiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgU21tQ29t bVJlZ2lvblRhYmxlLT5OdW1iZXJPZkVudHJpZXM7IEluZGV4ICsrKSB7DQo+PiArICAgICAgICBp ZiAoU21tQ29tbU1lbVJlZ2lvbi0+VHlwZSA9PSBFZmlDb252ZW50aW9uYWxNZW1vcnkpIHsNCj4+ ICsgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICB9DQo+PiArICAgICAgICBTbW1Db21tTWVt UmVnaW9uID0gKEVGSV9NRU1PUllfREVTQ1JJUFRPUiAqKSAoKFVJTlQ4ICopIFNtbUNvbW1NZW1S ZWdpb24gKyBTbW1Db21tUmVnaW9uVGFibGUtPkRlc2NyaXB0b3JTaXplKTsNCj4+ICsgICAgICB9 DQo+PiArICAgICAgQVNTRVJUIChJbmRleCA8IFNtbUNvbW1SZWdpb25UYWJsZS0+TnVtYmVyT2ZF bnRyaWVzKTsNCj4+ICsgICAgICBBU1NFUlQgKFNtbUNvbW1NZW1SZWdpb24tPlBoeXNpY2FsU3Rh cnQgPiAwKTsNCj4+ICsgICAgICBBU1NFUlQgKFNtbUNvbW1NZW1SZWdpb24tPk51bWJlck9mUGFn ZXMgPiAwKTsNCj4+ICsgICAgICBSZXNlcnZlZE1lbVNpemUgPSAoVUlOVE4pIFNtbUNvbW1NZW1S ZWdpb24tPk51bWJlck9mUGFnZXMgKiBFRklfUEFHRV9TSVpFOw0KPj4gKw0KPj4gKyAgICAgIC8v DQo+PiArICAgICAgLy8gQ2hlY2sgZW5vdWdoIHJlc2VydmVkIG1lbW9yeSBzcGFjZQ0KPj4gKyAg ICAgIC8vDQo+PiArICAgICAgaWYgKFJlc2VydmVkTWVtU2l6ZSA+IFNNTV9CT09UX1JFQ09SRF9D T01NX1NJWkUpIHsNCj4+ICsgICAgICAgIFNtbUJvb3RSZWNvcmRDb21tQnVmZmVyID0gKFZPSUQg KikgKFVJTlROKSBTbW1Db21tTWVtUmVnaW9uLT5QaHlzaWNhbFN0YXJ0Ow0KPj4gKyAgICAgICAg U21tQ29tbUJ1ZmZlckhlYWRlciA9IChFRklfU01NX0NPTU1VTklDQVRFX0hFQURFUiopU21tQm9v dFJlY29yZENvbW1CdWZmZXI7DQo+PiArICAgICAgICBTbW1Db21tRGF0YSA9IChTTU1fQk9PVF9S RUNPUkRfQ09NTVVOSUNBVEUqKVNtbUNvbW1CdWZmZXJIZWFkZXItPkRhdGE7DQo+PiArICAgICAg ICBaZXJvTWVtKChVSU5UOCopU21tQ29tbURhdGEsIHNpemVvZihTTU1fQk9PVF9SRUNPUkRfQ09N TVVOSUNBVEUpKTsNCj4+ICsNCj4+ICsgICAgICAgIENvcHlHdWlkICgmU21tQ29tbUJ1ZmZlckhl YWRlci0+SGVhZGVyR3VpZCwgJmdFZmlGaXJtd2FyZVBlcmZvcm1hbmNlR3VpZCk7DQo+PiArICAg ICAgICBTbW1Db21tQnVmZmVySGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mKFNNTV9CT09U X1JFQ09SRF9DT01NVU5JQ0FURSk7DQo+PiArICAgICAgICBDb21tU2l6ZSA9IFNNTV9CT09UX1JF Q09SRF9DT01NX1NJWkU7DQo+PiArDQo+PiArICAgICAgICAvLw0KPj4gKyAgICAgICAgLy8gR2V0 IHRoZSBzaXplIG9mIGJvb3QgcmVjb3Jkcy4NCj4+ICsgICAgICAgIC8vDQo+PiArICAgICAgICBT bW1Db21tRGF0YS0+RnVuY3Rpb24gICAgICAgPSBTTU1fRlBEVF9GVU5DVElPTl9HRVRfQk9PVF9S RUNPUkRfU0laRTsNCj4+ICsgICAgICAgIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkRGF0YSA9IE5V TEw7DQo+PiArICAgICAgICBTdGF0dXMgPSBDb21tdW5pY2F0aW9uLT5Db21tdW5pY2F0ZSAoQ29t bXVuaWNhdGlvbiwgU21tQm9vdFJlY29yZENvbW1CdWZmZXIsICZDb21tU2l6ZSk7DQo+PiArICAg ICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPj4gKw0KPj4gKyAgICAgICAgaWYgKCFF RklfRVJST1IgKFNtbUNvbW1EYXRhLT5SZXR1cm5TdGF0dXMpICYmIFNtbUNvbW1EYXRhLT5Cb290 UmVjb3JkU2l6ZSAhPSAwKSB7DQo+PiArICAgICAgICAgIC8vDQo+PiArICAgICAgICAgIC8vIEdl dCBhbGwgYm9vdCByZWNvcmRzDQo+PiArICAgICAgICAgIC8vDQo+PiArICAgICAgICAgIFNtbUNv bW1EYXRhLT5GdW5jdGlvbiAgICAgICA9IFNNTV9GUERUX0ZVTkNUSU9OX0dFVF9CT09UX1JFQ09S RF9EQVRBX0JZX09GRlNFVDsNCj4+ICsgICAgICAgICAgU21tQm9vdFJlY29yZERhdGFTaXplICAg ICAgID0gU21tQ29tbURhdGEtPkJvb3RSZWNvcmRTaXplOw0KPj4gKyAgICAgICAgICBTbW1Cb290 UmVjb3JkRGF0YSAgICAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sKFNtbUJvb3RSZWNvcmREYXRh U2l6ZSk7DQo+PiArICAgICAgICAgIEFTU0VSVCAoU21tQm9vdFJlY29yZERhdGEgICE9IE5VTEwp Ow0KPj4gKyAgICAgICAgICBTbW1Db21tRGF0YS0+Qm9vdFJlY29yZE9mZnNldCA9IDA7DQo+PiAr ICAgICAgICAgIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkRGF0YSAgID0gKFZPSUQgKikgKChVSU5U TikgU21tQ29tbU1lbVJlZ2lvbi0+UGh5c2ljYWxTdGFydCArIFNNTV9CT09UX1JFQ09SRF9DT01N X1NJWkUpOw0KPj4gKyAgICAgICAgICBTbW1Db21tRGF0YS0+Qm9vdFJlY29yZFNpemUgICA9IFJl c2VydmVkTWVtU2l6ZSAtIFNNTV9CT09UX1JFQ09SRF9DT01NX1NJWkU7DQo+PiArICAgICAgICAg IHdoaWxlIChTbW1Db21tRGF0YS0+Qm9vdFJlY29yZE9mZnNldCA8IFNtbUJvb3RSZWNvcmREYXRh U2l6ZSkgew0KPj4gKyAgICAgICAgICAgIFN0YXR1cyA9IENvbW11bmljYXRpb24tPkNvbW11bmlj YXRlIChDb21tdW5pY2F0aW9uLCBTbW1Cb290UmVjb3JkQ29tbUJ1ZmZlciwgJkNvbW1TaXplKTsN Cj4+ICsgICAgICAgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPj4gKyAgICAgICAg ICAgIEFTU0VSVF9FRklfRVJST1IoU21tQ29tbURhdGEtPlJldHVyblN0YXR1cyk7DQo+PiArICAg ICAgICAgICAgaWYgKFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkT2Zmc2V0ICsgU21tQ29tbURhdGEt PkJvb3RSZWNvcmRTaXplID4gU21tQm9vdFJlY29yZERhdGFTaXplKSB7DQo+PiArICAgICAgICAg ICAgICBDb3B5TWVtICgoVUlOVDggKikgU21tQm9vdFJlY29yZERhdGEgKyBTbW1Db21tRGF0YS0+ Qm9vdFJlY29yZE9mZnNldCwgU21tQ29tbURhdGEtPkJvb3RSZWNvcmREYXRhLCBTbW1Cb290UmVj b3JkRGF0YVNpemUgLSBTbW1Db21tRGF0YS0+Qm9vdFJlY29yZE9mZnNldCk7DQo+PiArICAgICAg ICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgIENvcHlNZW0gKChVSU5UOCAqKSBTbW1C b290UmVjb3JkRGF0YSArIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkT2Zmc2V0LCBTbW1Db21tRGF0 YS0+Qm9vdFJlY29yZERhdGEsIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkU2l6ZSk7DQo+PiArICAg ICAgICAgICAgfQ0KPj4gKyAgICAgICAgICAgIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkT2Zmc2V0 ID0gU21tQ29tbURhdGEtPkJvb3RSZWNvcmRPZmZzZXQgKyBTbW1Db21tRGF0YS0+Qm9vdFJlY29y ZFNpemU7DQo+PiArICAgICAgICAgIH0NCj4+ICsgICAgICAgIH0NCj4+ICsgICAgICB9DQo+PiAr ICAgIH0NCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBQcmVwYXJlIG1lbW9yeSBm b3IgQm9vdCBQZXJmb3JtYW5jZSB0YWJsZS4NCj4+ICsgIC8vIEJvb3QgUGVyZm9ybWFuY2UgdGFi bGUgaW5jbHVkZXMgQmFzaWNCb290IHJlY29yZCwgYW5kIG9uZSBvciBtb3JlIGFwcGVuZGVkIEJv b3QgUmVjb3Jkcy4NCj4+ICsgIC8vDQo+PiArICBCb290UGVyZm9ybWFuY2VEYXRhU2l6ZSA9IHNp emVvZiAoQk9PVF9QRVJGT1JNQU5DRV9UQUJMRSkgKyBtUGVyZm9ybWFuY2VMZW5ndGggKyBQY2RH ZXQzMiAoUGNkRXh0RnBkdEJvb3RSZWNvcmRQYWRTaXplKTsNCj4+ICsgIGlmIChTbW1Db21tRGF0 YSAhPSBOVUxMKSB7DQo+PiArICAgIEJvb3RQZXJmb3JtYW5jZURhdGFTaXplICs9IFNtbUJvb3RS ZWNvcmREYXRhU2l6ZTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBUcnkgdG8g YWxsb2NhdGUgdGhlIHNhbWUgcnVudGltZSBidWZmZXIgYXMgbGFzdCB0aW1lIGJvb3QuDQo+PiAr ICAvLw0KPj4gKyAgWmVyb01lbSAoJlBlcmZvcm1hbmNlVmFyaWFibGUsIHNpemVvZiAoUGVyZm9y bWFuY2VWYXJpYWJsZSkpOw0KPj4gKyAgU2l6ZSA9IHNpemVvZiAoUGVyZm9ybWFuY2VWYXJpYWJs ZSk7DQo+PiArICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4+ICsgICAgICAgICAgICAg ICAgICBFRklfRklSTVdBUkVfUEVSRk9STUFOQ0VfVkFSSUFCTEVfTkFNRSwNCj4+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaUZpcm13YXJlUGVyZm9ybWFuY2VHdWlkLA0KPj4gKyAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+PiArICAgICAgICAgICAgICAgICAgJlNpemUsDQo+PiArICAgICAgICAg ICAgICAgICAgJlBlcmZvcm1hbmNlVmFyaWFibGUNCj4+ICsgICAgICAgICAgICAgICAgICApOw0K Pj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgICAgU3RhdHVzID0gZ0JTLT5B bGxvY2F0ZVBhZ2VzICgNCj4+ICsgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlQWRkcmVzcywN Cj4+ICsgICAgICAgICAgICAgICAgICAgIEVmaVJlc2VydmVkTWVtb3J5VHlwZSwNCj4+ICsgICAg ICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChCb290UGVyZm9ybWFuY2VEYXRhU2l6 ZSksDQo+PiArICAgICAgICAgICAgICAgICAgICAmUGVyZm9ybWFuY2VWYXJpYWJsZS5Cb290UGVy Zm9ybWFuY2VUYWJsZVBvaW50ZXINCj4+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+PiArICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiArICAgICAgbUFjcGlCb290UGVyZm9ybWFu Y2VUYWJsZSA9IChCT09UX1BFUkZPUk1BTkNFX1RBQkxFICopIChVSU5UTikgUGVyZm9ybWFuY2VW YXJpYWJsZS5Cb290UGVyZm9ybWFuY2VUYWJsZVBvaW50ZXI7DQo+PiArICAgIH0NCj4+ICsgIH0N Cj4+ICsNCj4+ICsgIGlmIChtQWNwaUJvb3RQZXJmb3JtYW5jZVRhYmxlID09IE5VTEwpIHsNCj4+ ICsgICAgLy8NCj4+ICsgICAgLy8gRmFpbCB0byBhbGxvY2F0ZSBhdCBzcGVjaWZpZWQgYWRkcmVz cywgY29udGludWUgdG8gYWxsb2NhdGUgYXQgYW55IGFkZHJlc3MuDQo+PiArICAgIC8vDQo+PiAr ICAgIG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFibGUgPSAoQk9PVF9QRVJGT1JNQU5DRV9UQUJMRSAq KSBGcGR0QWxsb2NhdGVSZXNlcnZlZE1lbW9yeUJlbG93NEcgKEJvb3RQZXJmb3JtYW5jZURhdGFT aXplKTsNCj4NCj4gV2h5IGRvZXMgdGhpcyBhbGxvY2F0aW9uIG5lZWQgdG8gbGl2ZSBiZWxvdyA0 IEdCPw0KPg0KPiBJZiB0aGVyZSBpcyBubyBnb29kIHJlYXNvbiwgY2FuIHdlIHBsZWFzZSBnZXQg cmlkIG9mIHRoaXM/DQo+IElmIHRoZXJlIGlzIGEgZ29vZCByZWFzb24sIGNhbiB3ZSBwbGVhc2Ug ZG9jdW1lbnQgaXQgaW4gdGhlIGNvZGU/DQo+DQo+PiArICB9DQo+PiArICBERUJVRyAoKERFQlVH X0lORk8sICJEeGVDb3JlUGVyZm9ybWFuY2VMaWI6IEFDUEkgQm9vdCBQZXJmb3JtYW5jZSBUYWJs ZSBhZGRyZXNzID0gMHgleFxuIiwgbUFjcGlCb290UGVyZm9ybWFuY2VUYWJsZSkpOw0KPj4gKw0K Pj4gKyAgaWYgKG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFibGUgPT0gTlVMTCkgew0KPj4gKyAgICBp ZiAoU21tQ29tbURhdGEgIT0gTlVMTCAmJiBTbW1Cb290UmVjb3JkRGF0YSAhPSBOVUxMKSB7DQo+ PiArICAgICAgRnJlZVBvb2wgKFNtbUJvb3RSZWNvcmREYXRhKTsNCj4+ICsgICAgfQ0KPj4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0K Pj4gKyAgLy8gUHJlcGFyZSBCb290IFBlcmZvcm1hbmNlIFRhYmxlLg0KPj4gKyAgLy8NCj4+ICsg IEJvb3RQZXJmb3JtYW5jZURhdGEgPSAoVUlOVDggKikgbUFjcGlCb290UGVyZm9ybWFuY2VUYWJs ZTsNCj4+ICsgIC8vDQo+PiArICAvLyBGaWxsIEJhc2ljIEJvb3QgcmVjb3JkIHRvIEJvb3QgUGVy Zm9ybWFuY2UgVGFibGUuDQo+PiArICAvLw0KPj4gKyAgQ29weU1lbSAobUFjcGlCb290UGVyZm9y bWFuY2VUYWJsZSwgJm1Cb290UGVyZm9ybWFuY2VUYWJsZVRlbXBsYXRlLCBzaXplb2YgKG1Cb290 UGVyZm9ybWFuY2VUYWJsZVRlbXBsYXRlKSk7DQo+PiArICBCb290UGVyZm9ybWFuY2VEYXRhID0g Qm9vdFBlcmZvcm1hbmNlRGF0YSArIG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFibGUtPkhlYWRlci5M ZW5ndGg7DQo+PiArICAvLw0KPj4gKyAgLy8gRmlsbCBCb290IHJlY29yZHMgZnJvbSBib290IGRy aXZlcnMuDQo+PiArICAvLw0KPj4gKyAgaWYgKG1QZXJmb3JtYW5jZVBvaW50ZXIgIT0gTlVMTCkg ew0KPj4gKyAgICBDb3B5TWVtIChCb290UGVyZm9ybWFuY2VEYXRhLCBtUGVyZm9ybWFuY2VQb2lu dGVyLCBtUGVyZm9ybWFuY2VMZW5ndGgpOw0KPj4gKyAgICBtQWNwaUJvb3RQZXJmb3JtYW5jZVRh YmxlLT5IZWFkZXIuTGVuZ3RoICs9IG1QZXJmb3JtYW5jZUxlbmd0aDsNCj4+ICsgICAgQm9vdFBl cmZvcm1hbmNlRGF0YSA9IEJvb3RQZXJmb3JtYW5jZURhdGEgKyBtUGVyZm9ybWFuY2VMZW5ndGg7 DQo+PiArICB9DQo+PiArICBpZiAoU21tQ29tbURhdGEgIT0gTlVMTCAmJiBTbW1Cb290UmVjb3Jk RGF0YSAhPSBOVUxMKSB7DQo+PiArICAgIC8vDQo+PiArICAgIC8vIEZpbGwgQm9vdCByZWNvcmRz IGZyb20gU01NIGRyaXZlcnMuDQo+PiArICAgIC8vDQo+PiArICAgIENvcHlNZW0gKEJvb3RQZXJm b3JtYW5jZURhdGEsIFNtbUJvb3RSZWNvcmREYXRhLCBTbW1Cb290UmVjb3JkRGF0YVNpemUpOw0K Pj4gKyAgICBGcmVlUG9vbCAoU21tQm9vdFJlY29yZERhdGEpOw0KPj4gKyAgICBtQWNwaUJvb3RQ ZXJmb3JtYW5jZVRhYmxlLT5IZWFkZXIuTGVuZ3RoID0gKFVJTlQzMikgKG1BY3BpQm9vdFBlcmZv cm1hbmNlVGFibGUtPkhlYWRlci5MZW5ndGggKyBTbW1Cb290UmVjb3JkRGF0YVNpemUpOw0KPj4g KyAgICBCb290UGVyZm9ybWFuY2VEYXRhID0gQm9vdFBlcmZvcm1hbmNlRGF0YSArIFNtbUJvb3RS ZWNvcmREYXRhU2l6ZTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBTYXZlIEJv b3QgUGVyZm9ybWFuY2UgVGFibGUgYWRkcmVzcyB0byBWYXJpYWJsZSBmb3IgdXNlIGluIFM0IHJl c3VtZS4NCj4+ICsgIC8vDQo+PiArICBQZXJmb3JtYW5jZVZhcmlhYmxlLkJvb3RQZXJmb3JtYW5j ZVRhYmxlUG9pbnRlciA9IChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBtQWNwaUJvb3RQ ZXJmb3JtYW5jZVRhYmxlOw0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIFNhdmUgUnVudGltZSBQ ZXJmb3JtYW5jZSBUYWJsZSBwb2ludGVycyB0byBWYXJpYWJsZS4NCj4+ICsgIC8vIERvbid0IGNo ZWNrIFNldFZhcmlhYmxlIHJldHVybiBzdGF0dXMuIEl0IGRvZXNuJ3QgaW1wYWN0IEZQRFQgdGFi bGUgZ2VuZXJhdGlvbi4NCj4+ICsgIC8vDQo+PiArICBnUlQtPlNldFZhcmlhYmxlICgNCj4+ICsg ICAgICAgIEVGSV9GSVJNV0FSRV9QRVJGT1JNQU5DRV9WQVJJQUJMRV9OQU1FLA0KPj4gKyAgICAg ICAgJmdFZmlGaXJtd2FyZVBlcmZvcm1hbmNlR3VpZCwNCj4+ICsgICAgICAgIEVGSV9WQVJJQUJM RV9OT05fVk9MQVRJTEUgfCBFRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTLA0KPj4gKyAg ICAgICAgc2l6ZW9mIChQZXJmb3JtYW5jZVZhcmlhYmxlKSwNCj4+ICsgICAgICAgICZQZXJmb3Jt YW5jZVZhcmlhYmxlDQo+PiArICAgICAgICApOw0KPj4gKw0KPj4gKyAgbUJvb3RSZWNvcmRCdWZm ZXIgID0gKFVJTlQ4ICopIG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFibGU7DQo+PiArICBtQm9vdFJl Y29yZFNpemUgICAgPSBtQWNwaUJvb3RQZXJmb3JtYW5jZVRhYmxlLT5IZWFkZXIuTGVuZ3RoOw0K Pj4gKyAgbUJvb3RSZWNvcmRNYXhTaXplID0gbUJvb3RSZWNvcmRTaXplICsgUGNkR2V0MzIgKFBj ZEV4dEZwZHRCb290UmVjb3JkUGFkU2l6ZSk7DQo+PiArDQo+PiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgR2V0IGEgaHVtYW4gcmVhZGFibGUgbW9k dWxlIG5hbWUgYW5kIG1vZHVsZSBndWlkIGZvciB0aGUgZ2l2ZW4gaW1hZ2UgaGFuZGxlLg0KPj4g KyAgSWYgbW9kdWxlIG5hbWUgY2FuJ3QgYmUgZm91bmQsICIiIHN0cmluZyB3aWxsIHJldHVybi4N Cj4+ICsgIElmIG1vZHVsZSBndWlkIGNhbid0IGJlIGZvdW5kLCBaZXJvIEd1aWQgd2lsbCByZXR1 cm4uDQo+PiArDQo+PiArICBAcGFyYW0gICAgSGFuZGxlICAgICAgICBJbWFnZSBoYW5kbGUgb3Ig Q29udHJvbGxlciBoYW5kbGUuDQo+PiArICBAcGFyYW0gICAgTmFtZVN0cmluZyAgICBUaGUgYXNj aWkgc3RyaW5nIHdpbGwgYmUgZmlsbGVkIGludG8gaXQuIElmIG5vdCBmb3VuZCwgbnVsbCBzdHJp bmcgd2lsbCByZXR1cm4uDQo+PiArICBAcGFyYW0gICAgQnVmZmVyU2l6ZSAgICBTaXplIG9mIHRo ZSBpbnB1dCBOYW1lU3RyaW5nIGJ1ZmZlci4NCj4+ICsgIEBwYXJhbSAgICBNb2R1bGVHdWlkICAg IFBvaW50IHRvIHRoZSBndWlkIGJ1ZmZlciB0byBzdG9yZSB0aGUgZ290IG1vZHVsZSBndWlkIHZh bHVlLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgU3VjY2Vzc2Z1bGx5IGdl dCBtb2R1bGUgbmFtZSBhbmQgZ3VpZC4NCj4+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICBUaGUgaW5wdXQgcGFyYW1ldGVyIE5hbWVTdHJpbmcgaXMgTlVMTC4NCj4+ICsgIEByZXR2 YWwgb3RoZXIgdmFsdWUgIE1vZHVsZSBOYW1lIGNhbid0IGJlIGdvdC4NCj4+ICsqKi8NCj4+ICtF RklfU1RBVFVTDQo+PiArR2V0TW9kdWxlSW5mb0Zyb21IYW5kbGUgKA0KPj4gKyAgSU4gRUZJX0hB TkRMRSAgSGFuZGxlLA0KPj4gKyAgT1VUIENIQVI4ICAgICAgICAgICAgKk5hbWVTdHJpbmcsDQo+ PiArICBJTiBVSU5UTiAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPj4gKyAgT1VUIEVGSV9HVUlE ICAgICAgICAgKk1vZHVsZUd1aWQgT1BUSU9OQUwNCj4+ICsgICkNCj4+ICt7DQo+PiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4gKyAgRUZJX0xPQURFRF9JTUFHRV9Q Uk9UT0NPTCAgICpMb2FkZWRJbWFnZTsNCj4+ICsgIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NP TCAqRHJpdmVyQmluZGluZzsNCj4+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqUGRi RmlsZU5hbWU7DQo+PiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgKlRlbXBHdWlkOw0K Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0SW5kZXg7DQo+PiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+PiArICBJTlROICAgICAgICAgICAgICAg ICAgICAgICAgQ291bnQ7DQo+PiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgTW9kdWxl R3VpZElzR2V0Ow0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1NpemU7 DQo+PiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKlN0cmluZ1B0cjsNCj4+ICsgIEVG SV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgICAgICAqQ29tcG9uZW50TmFtZTI7DQo+PiArICBN RURJQV9GV19WT0xfRklMRVBBVEhfREVWSUNFX1BBVEggKkZ2RmlsZVBhdGg7DQo+PiArDQo+PiAr ICBpZiAoTmFtZVN0cmluZyA9PSBOVUxMIHx8IEJ1ZmZlclNpemUgPT0gMCkgew0KPj4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4gKyAgfQ0KPj4gKyAgLy8NCj4+ICsgIC8v IFRyeSB0byBnZXQgdGhlIE1vZHVsZUd1aWQgYW5kIG5hbWUgc3RyaW5nIGZvcm0gdGhlIGNhYWNo ZWQgYXJyYXkuDQo+PiArICAvLw0KPj4gKyAgaWYgKG1DYWNoZVBhaXJDb3VudCA+IDApIHsNCj4+ ICsgICAgZm9yIChDb3VudCA9IG1DYWNoZVBhaXJDb3VudCAtMTsgQ291bnQgPj0gMDsgQ291bnQt LSkgew0KPj4gKyAgICAgIGlmIChIYW5kbGUgPT0gbUNhY2hlSGFuZGxlR3VpZFRhYmxlW0NvdW50 XS5IYW5kbGUpIHsNCj4+ICsgICAgICAgIENvcHlHdWlkIChNb2R1bGVHdWlkLCAmbUNhY2hlSGFu ZGxlR3VpZFRhYmxlW0NvdW50XS5Nb2R1bGVHdWlkKTsNCj4+ICsgICAgICAgIEFzY2lpU3RyQ3B5 UyAoTmFtZVN0cmluZywgRURLSUlfU1RSSU5HX0VWRU5UX1JFQ09SRF9OQU1FX0xFTkdUSCwgbUNh Y2hlSGFuZGxlR3VpZFRhYmxlW0NvdW50XS5OYW1lU3RyaW5nKTsNCj4+ICsgICAgICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4+ICsgICAgICB9DQo+PiArICAgIH0NCj4+ICsgIH0NCj4+ICsNCj4+ ICsgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+ICsgIExvYWRlZEltYWdlICAg ICA9IE5VTEw7DQo+PiArICBNb2R1bGVHdWlkSXNHZXQgPSBGQUxTRTsNCj4+ICsNCj4+ICsgIC8v DQo+PiArICAvLyBJbml0aWFsaXplIEdVSUQgYXMgemVybyB2YWx1ZS4NCj4+ICsgIC8vDQo+PiAr ICBUZW1wR3VpZCAgICA9ICZnWmVyb0d1aWQ7DQo+PiArICAvLw0KPj4gKyAgLy8gSW5pdGlhbGl6 ZSBpdCBhcyAiIiBzdHJpbmcuDQo+PiArICAvLw0KPj4gKyAgTmFtZVN0cmluZ1swXSA9IDA7DQo+ PiArDQo+PiArICBpZiAoSGFuZGxlICE9IE5VTEwpIHsNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8g VHJ5IEhhbmRsZSBhcyBJbWFnZUhhbmRsZS4NCj4+ICsgICAgLy8NCj4+ICsgICAgU3RhdHVzID0g Z0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+PiArICAgICAgICAgICAgICAgICAgSGFuZGxlLA0KPj4g KyAgICAgICAgICAgICAgICAgICZnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQsDQo+PiArICAg ICAgICAgICAgICAgICAgKFZPSUQqKikgJkxvYWRlZEltYWdlDQo+PiArICAgICAgICAgICAgICAg ICAgKTsNCj4+ICsNCj4+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyAgICAg IC8vDQo+PiArICAgICAgLy8gVHJ5IEhhbmRsZSBhcyBDb250cm9sbGVyIEhhbmRsZQ0KPj4gKyAg ICAgIC8vDQo+PiArICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgSGFuZGxlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlEcml2 ZXJCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiop ICZEcml2ZXJCaW5kaW5nLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+ICsgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+PiArICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9Q Uk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+PiArICAg ICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgICAgICAgIC8vDQo+PiArICAgICAg ICAvLyBHZXQgSW1hZ2UgcHJvdG9jb2wgZnJvbSBJbWFnZUhhbmRsZQ0KPj4gKyAgICAgICAgLy8N Cj4+ICsgICAgICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICBEcml2ZXJCaW5kaW5nLT5JbWFnZUhhbmRsZSwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgJmdFZmlMb2FkZWRJbWFnZVByb3RvY29sR3VpZCwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgKFZPSUQqKikgJkxvYWRlZEltYWdlDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICk7DQo+PiArICAgICAgfQ0KPj4gKyAgICB9DQo+PiArICB9DQo+PiArDQo+PiArICBpZiAo IUVGSV9FUlJPUiAoU3RhdHVzKSAmJiBMb2FkZWRJbWFnZSAhPSBOVUxMKSB7DQo+PiArICAgIC8v DQo+PiArICAgIC8vIEdldCBNb2R1bGUgR3VpZCBmcm9tIERldmljZVBhdGguDQo+PiArICAgIC8v DQo+PiArICAgIGlmIChMb2FkZWRJbWFnZS0+RmlsZVBhdGggIT0gTlVMTCAmJg0KPj4gKyAgICAg ICAgTG9hZGVkSW1hZ2UtPkZpbGVQYXRoLT5UeXBlID09IE1FRElBX0RFVklDRV9QQVRIICYmDQo+ PiArICAgICAgICBMb2FkZWRJbWFnZS0+RmlsZVBhdGgtPlN1YlR5cGUgPT0gTUVESUFfUElXR19G V19GSUxFX0RQDQo+PiArICAgICAgICkgew0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgLy8gRGV0 ZXJtaW5lIEdVSUQgYXNzb2NpYXRlZCB3aXRoIG1vZHVsZSBsb2dnaW5nIHBlcmZvcm1hbmNlDQo+ PiArICAgICAgLy8NCj4+ICsgICAgICBNb2R1bGVHdWlkSXNHZXQgPSBUUlVFOw0KPj4gKyAgICAg IEZ2RmlsZVBhdGggICAgICA9IChNRURJQV9GV19WT0xfRklMRVBBVEhfREVWSUNFX1BBVEggKikg TG9hZGVkSW1hZ2UtPkZpbGVQYXRoOw0KPj4gKyAgICAgIFRlbXBHdWlkICAgICAgICA9ICZGdkZp bGVQYXRoLT5GdkZpbGVOYW1lOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIC8vDQo+PiArICAg IC8vIE1ldGhvZCAxIEdldCBNb2R1bGUgTmFtZSBmcm9tIFBEQiBzdHJpbmcuDQo+PiArICAgIC8v DQo+PiArICAgIFBkYkZpbGVOYW1lID0gUGVDb2ZmTG9hZGVyR2V0UGRiUG9pbnRlciAoTG9hZGVk SW1hZ2UtPkltYWdlQmFzZSk7DQo+PiArICAgIGlmIChQZGJGaWxlTmFtZSAhPSBOVUxMICYmIEJ1 ZmZlclNpemUgPiAwKSB7DQo+PiArICAgICAgU3RhcnRJbmRleCA9IDA7DQo+PiArICAgICAgZm9y IChJbmRleCA9IDA7IFBkYkZpbGVOYW1lW0luZGV4XSAhPSAwOyBJbmRleCsrKSB7DQo+PiArICAg ICAgICBpZiAoKFBkYkZpbGVOYW1lW0luZGV4XSA9PSAnXFwnKSB8fCAoUGRiRmlsZU5hbWVbSW5k ZXhdID09ICcvJykpIHsNCj4+ICsgICAgICAgICAgU3RhcnRJbmRleCA9IEluZGV4ICsgMTsNCj4+ ICsgICAgICAgIH0NCj4+ICsgICAgICB9DQo+PiArICAgICAgLy8NCj4+ICsgICAgICAvLyBDb3B5 IHRoZSBQREIgZmlsZSBuYW1lIHRvIG91ciB0ZW1wb3Jhcnkgc3RyaW5nLg0KPj4gKyAgICAgIC8v IElmIHRoZSBsZW5ndGggaXMgYmlnZ2VyIHRoYW4gQnVmZmVyU2l6ZSwgdHJpbSB0aGUgcmVkdWRh bnQgY2hhcmFjdGVycyB0byBhdm9pZCBvdmVyZmxvdyBpbiBhcnJheSBib3VuZGFyeS4NCj4+ICsg ICAgICAvLw0KPj4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEJ1ZmZlclNpemUgLSAx OyBJbmRleCsrKSB7DQo+PiArICAgICAgICBOYW1lU3RyaW5nW0luZGV4XSA9IFBkYkZpbGVOYW1l W0luZGV4ICsgU3RhcnRJbmRleF07DQo+PiArICAgICAgICBpZiAoTmFtZVN0cmluZ1tJbmRleF0g PT0gMCB8fCBOYW1lU3RyaW5nW0luZGV4XSA9PSAnLicpIHsNCj4+ICsgICAgICAgICAgTmFtZVN0 cmluZ1tJbmRleF0gPSAwOw0KPj4gKyAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgIH0NCj4+ ICsgICAgICB9DQo+Pg0KPj4gLSAgVGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBzZWFyY2hlcyBmb3Ig dGhlIGdhdWdlIGVudHJ5IGluIHRoZSBnYXVnZSBhcnJheS4NCj4+IC0gIElmIHRoZXJlIGlzIGFu IGVudHJ5IHRoYXQgZXhhY3RseSBtYXRjaGVzIHRoZSBnaXZlbiBrZXl3b3Jkcw0KPj4gLSAgYW5k IGl0cyBlbmQgdGltZSBzdGFtcCBpcyB6ZXJvLCB0aGVuIHRoZSBpbmRleCBvZiB0aGF0IGdhdWdl IGVudHJ5IGlzIHJldHVybmVkOw0KPj4gLSAgb3RoZXJ3aXNlLCB0aGUgdGhlIG51bWJlciBvZiBn YXVnZSBlbnRyaWVzIGluIHRoZSBhcnJheSBpcyByZXR1cm5lZC4NCj4+ICsgICAgICBpZiAoSW5k ZXggPT0gQnVmZmVyU2l6ZSAtIDEpIHsNCj4+ICsgICAgICAgIE5hbWVTdHJpbmdbSW5kZXhdID0g MDsNCj4+ICsgICAgICB9DQo+PiArICAgICAgLy8NCj4+ICsgICAgICAvLyBNb2R1bGUgTmFtZSBp cyBnb3QuDQo+PiArICAgICAgLy8NCj4+ICsgICAgICBnb3RvIERvbmU7DQo+PiArICAgIH0NCj4+ ICsgIH0NCj4+DQo+PiArICAvLw0KPj4gKyAgLy8gTWV0aG9kIDI6IEdldCB0aGUgbmFtZSBzdHJp bmcgZnJvbSBDb21wb25lbnROYW1lMiBwcm90b2NvbA0KPj4gKyAgLy8NCj4+ICsgIFN0YXR1cyA9 IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPj4gKyAgICAgICAgICAgICAgICAgIEhhbmRsZSwNCj4+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJvdG9jb2xHdWlkLA0KPj4g KyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmQ29tcG9uZW50TmFtZTINCj4+ICsgICAgICAg ICAgICAgICAgICApOw0KPj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgICAg Ly8NCj4+ICsgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBsYXRmb3JtIGxhbmd1YWdlIHNldHRpbmcN Cj4+ICsgICAgLy8NCj4+ICsgICAgaWYgKG1QbGF0Zm9ybUxhbmd1YWdlID09IE5VTEwpIHsNCj4+ ICsgICAgICBHZXRFZmlHbG9iYWxWYXJpYWJsZTIgKEwiUGxhdGZvcm1MYW5nIiwgKFZPSUQgKiop ICZtUGxhdGZvcm1MYW5ndWFnZSwgTlVMTCk7DQo+PiArICAgIH0NCj4+ICsgICAgaWYgKG1QbGF0 Zm9ybUxhbmd1YWdlICE9IE5VTEwpIHsNCj4+ICsgICAgICBTdGF0dXMgPSBDb21wb25lbnROYW1l Mi0+R2V0RHJpdmVyTmFtZSAoDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q29tcG9uZW50TmFtZTIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBs YXRmb3JtTGFuZ3VhZ2UgIT0gTlVMTCA/IG1QbGF0Zm9ybUxhbmd1YWdlIDogImVuLVVTIiwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RyaW5nUHRyDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPj4gKyAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQnVmZmVyU2l6 ZSAtIDEgJiYgU3RyaW5nUHRyW0luZGV4XSAhPSAwOyBJbmRleCsrKSB7DQo+PiArICAgICAgICAg IE5hbWVTdHJpbmdbSW5kZXhdID0gKENIQVI4KSBTdHJpbmdQdHJbSW5kZXhdOw0KPj4gKyAgICAg ICAgfQ0KPj4gKyAgICAgICAgTmFtZVN0cmluZ1tJbmRleF0gPSAwOw0KPj4gKyAgICAgICAgLy8N Cj4+ICsgICAgICAgIC8vIE1vZHVsZSBOYW1lIGlzIGdvdC4NCj4+ICsgICAgICAgIC8vDQo+PiAr ICAgICAgICBnb3RvIERvbmU7DQo+PiArICAgICAgfQ0KPj4gKyAgICB9DQo+PiArICB9DQo+PiAr DQo+PiArICBpZiAoTW9kdWxlR3VpZElzR2V0KSB7DQo+PiArICAgIC8vDQo+PiArICAgIC8vIE1l dGhvZCAzIFRyeSB0byBnZXQgdGhlIGltYWdlJ3MgRkZTIFVJIHNlY3Rpb24gYnkgaW1hZ2UgR1VJ RA0KPj4gKyAgICAvLw0KPj4gKyAgICBTdHJpbmdQdHIgID0gTlVMTDsNCj4+ICsgICAgU3RyaW5n U2l6ZSA9IDA7DQo+PiArICAgIFN0YXR1cyA9IEdldFNlY3Rpb25Gcm9tQW55RnYgKA0KPj4gKyAg ICAgICAgICAgICAgVGVtcEd1aWQsDQo+PiArICAgICAgICAgICAgICBFRklfU0VDVElPTl9VU0VS X0lOVEVSRkFDRSwNCj4+ICsgICAgICAgICAgICAgIDAsDQo+PiArICAgICAgICAgICAgICAoVk9J RCAqKikgJlN0cmluZ1B0ciwNCj4+ICsgICAgICAgICAgICAgICZTdHJpbmdTaXplDQo+PiArICAg ICAgICAgICAgICApOw0KPj4gKw0KPj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pj4gKyAgICAgIC8vDQo+PiArICAgICAgLy8gTWV0aG9kIDMuIEdldCB0aGUgbmFtZSBzdHJpbmcg ZnJvbSBGRlMgVUkgc2VjdGlvbg0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgQnVmZmVyU2l6ZSAtIDEgJiYgU3RyaW5nUHRyW0luZGV4XSAhPSAwOyBJbmRl eCsrKSB7DQo+PiArICAgICAgICBOYW1lU3RyaW5nW0luZGV4XSA9IChDSEFSOCkgU3RyaW5nUHRy W0luZGV4XTsNCj4+ICsgICAgICB9DQo+PiArICAgICAgTmFtZVN0cmluZ1tJbmRleF0gPSAwOw0K Pj4gKyAgICAgIEZyZWVQb29sIChTdHJpbmdQdHIpOw0KPj4gKyAgICB9DQo+PiArICB9DQo+PiAr DQo+PiArRG9uZToNCj4+ICsgIC8vDQo+PiArICAvLyBDb3B5IE1vZHVsZSBHdWlkDQo+PiArICAv Lw0KPj4gKyAgaWYgKE1vZHVsZUd1aWQgIT0gTlVMTCkgew0KPj4gKyAgICBDb3B5R3VpZCAoTW9k dWxlR3VpZCwgVGVtcEd1aWQpOw0KPj4gKyAgICBpZiAoSXNaZXJvR3VpZChUZW1wR3VpZCkgJiYg KEhhbmRsZSAhPSBOVUxMKSAmJiAhTW9kdWxlR3VpZElzR2V0KSB7DQo+PiArICAgICAgICAvLyBI YW5kbGUgaXMgR1VJRA0KPj4gKyAgICAgIENvcHlHdWlkIChNb2R1bGVHdWlkLCAoRUZJX0dVSUQg KikgSGFuZGxlKTsNCj4+ICsgICAgfQ0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8v IENhY2hlIHRoZSBIYW5kbGUgYW5kIEd1aWQgcGFpcnMuDQo+PiArICAvLw0KPj4gKyAgaWYgKG1D YWNoZVBhaXJDb3VudCA8IENBQ0hFX0hBTkRMRV9HVUlEX0NPVU5UKSB7DQo+PiArICAgIG1DYWNo ZUhhbmRsZUd1aWRUYWJsZVttQ2FjaGVQYWlyQ291bnRdLkhhbmRsZSA9IEhhbmRsZTsNCj4+ICsg ICAgQ29weUd1aWQgKCZtQ2FjaGVIYW5kbGVHdWlkVGFibGVbbUNhY2hlUGFpckNvdW50XS5Nb2R1 bGVHdWlkLCBNb2R1bGVHdWlkKTsNCj4+ICsgICAgQXNjaWlTdHJDcHlTIChtQ2FjaGVIYW5kbGVH dWlkVGFibGVbbUNhY2hlUGFpckNvdW50XS5OYW1lU3RyaW5nLCBFREtJSV9TVFJJTkdfRVZFTlRf UkVDT1JEX05BTUVfTEVOR1RILCBOYW1lU3RyaW5nKTsNCj4+ICsgICAgbUNhY2hlUGFpckNvdW50 ICsrOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiArDQo+ PiArLyoqDQo+PiArICBHZXQgdGhlIEZQRFQgcmVjb3JkIGluZm8uDQo+PiArDQo+PiArICBAcGFy YW0gIElzU3RhcnQgICAgICAgICAgICAgICAgIFRSVUUgaWYgdGhlIHBlcmZvcm1hbmNlIGxvZyBp cyBzdGFydCBsb2cuDQo+PiAgICBAcGFyYW0gIEhhbmRsZSAgICAgICAgICAgICAgICAgIFBvaW50 ZXIgdG8gZW52aXJvbm1lbnQgc3BlY2lmaWMgY29udGV4dCB1c2VkDQo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgYmVpbmcgbWVh c3VyZWQuDQo+PiAgICBAcGFyYW0gIFRva2VuICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g YSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoYXQgaWRlbnRpZmllcyB0aGUgY29tcG9uZW50IGJlaW5nIG1lYXN1cmVk Lg0KPj4gICAgQHBhcmFtICBNb2R1bGUgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgTnVs bC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGF0IGlkZW50aWZpZXMgdGhlIG1vZHVsZSBiZWluZyBtZWFzdXJlZC4NCj4+IC0g IEBwYXJhbSAgSWRlbnRpZmllciAgICAgICAgICAgICAgMzItYml0IGlkZW50aWZpZXIuDQo+PiAr ICBAcGFyYW0gIFJlY29yZEluZm8gICAgICAgICAgICAgIE9uIHJldHVybiwgcG9pbnRlciB0byB0 aGUgaW5mbyBvZiB0aGUgcmVjb3JkLg0KPj4gKyAgQHBhcmFtICBVc2VNb2R1bGVOYW1lICAgICAg ICAgICBPbmx5IHVzZWZ1bCBmb3IgRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRSwgaW5kaWNhdGUg dGhhdCB3aGV0aGVyIG5lZWQgdXNlDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1vZHVsZSBuYW1lIHRvIGZpbGwgdGhlIHN0cmluZyBmaWVsZCBpbiB0aGUgRFlOQU1JQ19T VFJJTkdfRVZFTlRfUkVDT1JELg0KPj4NCj4+IC0gIEByZXR2YWwgVGhlIGluZGV4IG9mIGdhdWdl IGVudHJ5IGluIHRoZSBhcnJheS4NCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg R2V0IHJlY29yZCBpbmZvIHN1Y2Nlc3NmdWxseS4NCj4+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9S VEVEICAgICAgTm8gbWF0Y2hlZCBGUERUIHJlY29yZC4NCj4+DQo+PiAgKiovDQo+PiAtVUlOVDMy DQo+PiAtSW50ZXJuYWxTZWFyY2hGb3JHYXVnZUVudHJ5ICgNCj4+IC0gIElOIENPTlNUIFZPSUQg ICAgICAgICAgICAgICAgICpIYW5kbGUsICBPUFRJT05BTA0KPj4gLSAgSU4gQ09OU1QgQ0hBUjgg ICAgICAgICAgICAgICAgKlRva2VuLCAgIE9QVElPTkFMDQo+PiAtICBJTiBDT05TVCBDSEFSOCAg ICAgICAgICAgICAgICAqTW9kdWxlLCAgIE9QVElPTkFMDQo+PiAtICBJTiBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICBJZGVudGlmaWVyDQo+PiArRUZJX1NUQVRVUw0KPj4gK0dldEZwZHRSZWNv cmRJbmZvICgNCj4+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICBJc1N0YXJ0LA0KPj4g KyAgSU4gQ09OU1QgVk9JRCAgICAgICAgICAgICAgICpIYW5kbGUsDQo+PiArICBJTiBDT05TVCBD SEFSOCAgICAgICAgICAgICAgKlRva2VuLA0KPj4gKyAgSU4gQ09OU1QgQ0hBUjggICAgICAgICAg ICAgICpNb2R1bGUsDQo+PiArICBPVVQgQkFTSUNfUkVDT1JEX0lORk8gICAgICAgKlJlY29yZElu Zm8sDQo+PiArICBJTiBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgKlVzZU1vZHVsZU5hbWUNCj4+ ICAgICkNCj4+ICB7DQo+PiAtICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPj4g LSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDI7DQo+PiAtICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIE51bWJlck9mRW50cmllczsNCj4+IC0gIEdBVUdFX0RBVEFfRU5UUllfRVgg ICAgICAgKkdhdWdlRW50cnlFeEFycmF5Ow0KPj4gKyAgVUlOVDE2ICAgICAgICAgICAgICBSZWNv cmRUeXBlOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICBTdHJpbmdTaXplOw0KPj4NCj4+IC0g IGlmIChUb2tlbiA9PSBOVUxMKSB7DQo+PiAtICAgIFRva2VuID0gIiI7DQo+PiAtICB9DQo+PiAt ICBpZiAoTW9kdWxlID09IE5VTEwpIHsNCj4+IC0gICAgTW9kdWxlID0gIiI7DQo+PiArICBSZWNv cmRUeXBlICAgID0gRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRTsNCj4+ICsNCj4+ICsgIC8vDQo+ PiArICAvLyBUb2tlbiB0byBUeXBlIGFuZCBJZC4NCj4+ICsgIC8vDQo+PiArICBpZiAoVG9rZW4g IT0gTlVMTCkgew0KPj4gKyAgICBpZiAoQXNjaWlTdHJDbXAgKFRva2VuLCBTVEFSVF9JTUFHRV9U T0spID09IDApIHsgICAgICAgICAgICAgICAgLy8gIlN0YXJ0SW1hZ2U6Ig0KPj4gKyAgICAgICpV c2VNb2R1bGVOYW1lID0gVFJVRTsNCj4+ICsgICAgICBSZWNvcmRUeXBlICAgICA9IEdVSURfRVZF TlRfVFlQRTsNCj4+ICsgICAgICBpZiAoSXNTdGFydCkgew0KPj4gKyAgICAgICAgUmVjb3JkSW5m by0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfU1RBUlRfSUQ7DQo+PiArICAgICAgfSBlbHNlIHsNCj4+ ICsgICAgICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0gTU9EVUxFX0VORF9JRDsNCj4+ICsg ICAgICB9DQo+PiArICAgIH0gZWxzZSBpZiAoQXNjaWlTdHJDbXAgKFRva2VuLCBMT0FEX0lNQUdF X1RPSykgPT0gMCkgeyAgICAgICAgICAvLyAiTG9hZEltYWdlOiINCj4+ICsgICAgICAqVXNlTW9k dWxlTmFtZSA9IFRSVUU7DQo+PiArICAgICAgUmVjb3JkVHlwZSA9IEdVSURfUVdPUkRfRVZFTlRf VFlQRTsNCj4+ICsgICAgICBpZiAoSXNTdGFydCkgew0KPj4gKyAgICAgICAgUmVjb3JkSW5mby0+ UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfTE9BRElNQUdFX1NUQVJUX0lEOw0KPj4gKyAgICAgIH0gZWxz ZSB7DQo+PiArICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICA9IE1PRFVMRV9MT0FESU1B R0VfRU5EX0lEOw0KPj4gKyAgICAgIH0NCj4+ICsgICAgfSBlbHNlIGlmIChBc2NpaVN0ckNtcCAo VG9rZW4sIERSSVZFUkJJTkRJTkdfU1RBUlRfVE9LKSA9PSAwKSB7ICAvLyAiREI6U3RhcnQ6Ig0K Pj4gKyAgICAgICpVc2VNb2R1bGVOYW1lID0gVFJVRTsNCj4+ICsgICAgICBpZiAoSXNTdGFydCkg ew0KPj4gKyAgICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfREJfU1RBUlRf SUQ7DQo+PiArICAgICAgICBSZWNvcmRUeXBlICAgPSBHVUlEX1FXT1JEX0VWRU5UX1RZUEU7DQo+ PiArICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0g TU9EVUxFX0RCX0VORF9JRDsNCj4+ICsgICAgICAgIFJlY29yZFR5cGUgICA9IEdVSURfUVdPUkRf U1RSSU5HX0VWRU5UX1RZUEU7DQo+PiArICAgICAgfQ0KPj4gKyAgICB9IGVsc2UgaWYgKEFzY2lp U3RyQ21wIChUb2tlbiwgRFJJVkVSQklORElOR19TVVBQT1JUX1RPSykgPT0gMCkgeyAvLyAiREI6 U3VwcG9ydDoiDQo+PiArICAgICAgKlVzZU1vZHVsZU5hbWUgPSBUUlVFOw0KPj4gKyAgICAgIGlm IChQY2RHZXRCb29sIChQY2RFZGtpaUZwZHRTdHJpbmdSZWNvcmRFbmFibGVPbmx5KSkgew0KPj4g KyAgICAgICAgcmV0dXJuIFJFVFVSTl9VTlNVUFBPUlRFRDsNCj4+ICsgICAgICB9DQo+PiArICAg ICAgUmVjb3JkVHlwZSAgICAgPSBHVUlEX1FXT1JEX0VWRU5UX1RZUEU7DQo+PiArICAgICAgaWYg KElzU3RhcnQpIHsNCj4+ICsgICAgICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0gTU9EVUxF X0RCX1NVUFBPUlRfU1RBUlRfSUQ7DQo+PiArICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgIFJl Y29yZEluZm8tPlByb2dyZXNzSUQgID0gTU9EVUxFX0RCX1NVUFBPUlRfRU5EX0lEOw0KPj4gKyAg ICAgIH0NCj4+ICsgICAgfSBlbHNlIGlmIChBc2NpaVN0ckNtcCAoVG9rZW4sIERSSVZFUkJJTkRJ TkdfU1RPUF9UT0spID09IDApIHsgICAgLy8gIkRCOlN0b3A6Ig0KPj4gKyAgICAgICpVc2VNb2R1 bGVOYW1lID0gVFJVRTsNCj4+ICsgICAgICBpZiAoUGNkR2V0Qm9vbCAoUGNkRWRraWlGcGR0U3Ry aW5nUmVjb3JkRW5hYmxlT25seSkpIHsNCj4+ICsgICAgICAgICByZXR1cm4gUkVUVVJOX1VOU1VQ UE9SVEVEOw0KPj4gKyAgICAgIH0NCj4+ICsgICAgICBSZWNvcmRUeXBlICAgICA9IEdVSURfUVdP UkRfRVZFTlRfVFlQRTsNCj4+ICsgICAgICBpZiAoSXNTdGFydCkgew0KPj4gKyAgICAgICAgUmVj b3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfREJfU1RPUF9TVEFSVF9JRDsNCj4+ICsgICAg ICB9IGVsc2Ugew0KPj4gKyAgICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVf REJfU1RPUF9FTkRfSUQ7DQo+PiArICAgICAgfQ0KPj4gKyAgICB9IGVsc2UgaWYgKEFzY2lpU3Ry Q21wIChUb2tlbiwgUEVJX1RPSykgPT0gMCB8fCAgICAgICAgICAgICAgICAgICAvLyAiUEVJIg0K Pj4gKyAgICAgICAgICAgICAgIEFzY2lpU3RyQ21wIChUb2tlbiwgRFhFX1RPSykgPT0gMCB8fCAg ICAgICAgICAgICAgICAgICAvLyAiRFhFIg0KPj4gKyAgICAgICAgICAgICAgIEFzY2lpU3RyQ21w IChUb2tlbiwgQkRTX1RPSykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvLyAiQkRTIg0KPj4g KyAgICAgIGlmIChJc1N0YXJ0KSB7DQo+PiArICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lE ICA9IFBFUkZfQ1JPU1NNT0RVTEVfU1RBUlRfSUQ7DQo+PiArICAgICAgfSBlbHNlIHsNCj4+ICsg ICAgICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0gUEVSRl9DUk9TU01PRFVMRV9FTkRfSUQ7 DQo+PiArICAgICAgfQ0KPj4gKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmIHVzZWQgaW4gTW9kdWxlcy4N Cj4+ICsgICAgICBpZiAoSXNTdGFydCkgew0KPj4gKyAgICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jl c3NJRCAgPSBQRVJGX0lOTU9EVUxFX1NUQVJUX0lEOw0KPj4gKyAgICAgIH0gZWxzZSB7DQo+PiAr ICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICA9IFBFUkZfSU5NT0RVTEVfRU5EX0lEOw0K Pj4gKyAgICAgIH0NCj4+ICsgICAgfQ0KPj4gKyAgfSBlbHNlIGlmIChIYW5kbGUhPSBOVUxMIHx8 IE1vZHVsZSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmIHVzZWQgaW4g TW9kdWxlcy4NCj4+ICsgICAgaWYgKElzU3RhcnQpIHsNCj4+ICsgICAgICBSZWNvcmRJbmZvLT5Q cm9ncmVzc0lEICAgID0gUEVSRl9JTk1PRFVMRV9TVEFSVF9JRDsNCj4+ICsgICAgfSBlbHNlIHsN Cj4+ICsgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICAgID0gUEVSRl9JTk1PRFVMRV9FTkRf SUQ7DQo+PiArICAgIH0NCj4+ICsgIH0gZWxzZSB7DQo+PiArICAgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+PiAgICB9DQo+Pg0KPj4gLSAgTnVtYmVyT2ZFbnRyaWVzID0gbUdhdWdlRGF0YS0+ TnVtYmVyT2ZFbnRyaWVzOw0KPj4gLSAgR2F1Z2VFbnRyeUV4QXJyYXkgPSAoR0FVR0VfREFUQV9F TlRSWV9FWCAqKSAobUdhdWdlRGF0YSArIDEpOw0KPj4gKyAgLy8NCj4+ICsgIC8vIEdldCBSZWNv cmQgc2l6ZSBiYWVzZWQgb24gdGhlIHJlY29yZCB0eXBlLg0KPj4gKyAgLy8gV2hlbiBQY2RFZGtp aUZwZHRTdHJpbmdSZWNvcmRFbmFibGVPbmx5IGlzIFRSVUUsIGFsbCByZWNvcmRzIGFyZSB3aXRo IHR5cGUgb2YgRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRS4NCj4+ICsgIC8vDQo+PiArICBpZiAo UGNkR2V0Qm9vbCAoUGNkRWRraWlGcGR0U3RyaW5nUmVjb3JkRW5hYmxlT25seSkpIHsNCj4+ICsg ICAgUmVjb3JkVHlwZSAgICAgICAgICAgICAgID0gRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRTsN Cj4+ICsgICAgUmVjb3JkSW5mby0+UmVjb3JkU2l6ZSAgID0gc2l6ZW9mIChEWU5BTUlDX1NUUklO R19FVkVOVF9SRUNPUkQpICsgU1RSSU5HX1NJWkU7DQo+PiArICB9IGVsc2Ugew0KPj4gKyAgICBz d2l0Y2ggKFJlY29yZFR5cGUpIHsNCj4+ICsgICAgY2FzZSBHVUlEX0VWRU5UX1RZUEU6DQo+PiAr ICAgICAgUmVjb3JkSW5mby0+UmVjb3JkU2l6ZSA9IHNpemVvZiAoR1VJRF9FVkVOVF9SRUNPUkQp Ow0KPj4gKyAgICAgIGJyZWFrOw0KPj4NCj4+IC0gIEluZGV4MiA9IDA7DQo+PiArICAgIGNhc2Ug RFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRToNCj4+ICsgICAgICBpZiAoKlVzZU1vZHVsZU5hbWUp IHsNCj4+ICsgICAgICAgIFN0cmluZ1NpemUgID0gU1RSSU5HX1NJWkU7DQo+PiArICAgICAgfSBl bHNlIGlmIChUb2tlbiAgIT0gTlVMTCkgew0KPj4gKyAgICAgICAgU3RyaW5nU2l6ZSAgPSBBc2Np aVN0clNpemUgKFRva2VuKTsNCj4+ICsgICAgICB9IGVsc2UgaWYgKE1vZHVsZSAhPSBOVUxMKSB7 DQo+PiArICAgICAgICBTdHJpbmdTaXplICA9IEFzY2lpU3RyU2l6ZSAoTW9kdWxlKTsNCj4+ICsg ICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgU3RyaW5nU2l6ZSAgPSBTVFJJTkdfU0laRTsNCj4+ ICsgICAgICB9DQo+PiArICAgICAgaWYgKFN0cmluZ1NpemUgPiBTVFJJTkdfU0laRSkgew0KPj4g KyAgICAgICAgU3RyaW5nU2l6ZSAgID0gU1RSSU5HX1NJWkU7DQo+PiArICAgICAgfQ0KPj4gKyAg ICAgIFJlY29yZEluZm8tPlJlY29yZFNpemUgPSAoVUlOVDgpKHNpemVvZiAoRFlOQU1JQ19TVFJJ TkdfRVZFTlRfUkVDT1JEKSArIFN0cmluZ1NpemUpOw0KPj4gKyAgICAgIGJyZWFrOw0KPj4NCj4+ IC0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mRW50cmllczsgSW5kZXgrKykgew0K Pj4gLSAgICBJbmRleDIgPSBOdW1iZXJPZkVudHJpZXMgLSAxIC0gSW5kZXg7DQo+PiAtICAgIGlm IChHYXVnZUVudHJ5RXhBcnJheVtJbmRleDJdLkVuZFRpbWVTdGFtcCA9PSAwICYmDQo+PiAtICAg ICAgICAoR2F1Z2VFbnRyeUV4QXJyYXlbSW5kZXgyXS5IYW5kbGUgPT0gKEVGSV9QSFlTSUNBTF9B RERSRVNTKSAoVUlOVE4pIEhhbmRsZSkgJiYNCj4+IC0gICAgICAgIEFzY2lpU3RybkNtcCAoR2F1 Z2VFbnRyeUV4QXJyYXlbSW5kZXgyXS5Ub2tlbiwgVG9rZW4sIERYRV9QRVJGT1JNQU5DRV9TVFJJ TkdfTEVOR1RIKSA9PSAwICYmDQo+PiAtICAgICAgICBBc2NpaVN0cm5DbXAgKEdhdWdlRW50cnlF eEFycmF5W0luZGV4Ml0uTW9kdWxlLCBNb2R1bGUsIERYRV9QRVJGT1JNQU5DRV9TVFJJTkdfTEVO R1RIKSA9PSAwKSB7DQo+PiAtICAgICAgSW5kZXggPSBJbmRleDI7DQo+PiArICAgIGNhc2UgR1VJ RF9RV09SRF9FVkVOVF9UWVBFOg0KPj4gKyAgICAgIFJlY29yZEluZm8tPlJlY29yZFNpemUgPSAo VUlOVDgpc2l6ZW9mIChHVUlEX1FXT1JEX0VWRU5UX1JFQ09SRCk7DQo+PiAgICAgICAgYnJlYWs7 DQo+PiArDQo+PiArICAgIGNhc2UgR1VJRF9RV09SRF9TVFJJTkdfRVZFTlRfVFlQRToNCj4+ICsg ICAgICBSZWNvcmRJbmZvLT5SZWNvcmRTaXplID0gKFVJTlQ4KXNpemVvZiAoR1VJRF9RV09SRF9T VFJJTkdfRVZFTlRfUkVDT1JEKTsNCj4+ICsgICAgICBicmVhazsNCj4+ICsNCj4+ICsgICAgZGVm YXVsdDoNCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIFJlY29yZCBpcyB1bnN1cHBvcnRlZCB5 ZXQsIHJldHVybiBFRklfVU5TVVBQT1JURUQNCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+PiAgICAgIH0NCj4+ICAgIH0NCj4+DQo+PiAtICByZXR1cm4g SW5kZXg7DQo+PiArICBSZWNvcmRJbmZvLT5UeXBlID0gUmVjb3JkVHlwZTsNCj4+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4+ICB9DQo+Pg0KPj4gIC8qKg0KPj4gLSAgQWRkcyBhIHJlY29yZCBh dCB0aGUgZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cNCj4+IC0gIHRoYXQg cmVjb3JkcyB0aGUgc3RhcnQgdGltZSBvZiBhIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50Lg0KPj4g LQ0KPj4gLSAgQWRkcyBhIHJlY29yZCB0byB0aGUgZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFz dXJlbWVudCBsb2cNCj4+IC0gIHRoYXQgY29udGFpbnMgdGhlIEhhbmRsZSwgVG9rZW4sIE1vZHVs ZSBhbmQgSWRlbnRpZmllci4NCj4+IC0gIFRoZSBlbmQgdGltZSBvZiB0aGUgbmV3IHJlY29yZCBt dXN0IGJlIHNldCB0byB6ZXJvLg0KPj4gLSAgSWYgVGltZVN0YW1wIGlzIG5vdCB6ZXJvLCB0aGVu IFRpbWVTdGFtcCBpcyB1c2VkIHRvIGZpbGwgaW4gdGhlIHN0YXJ0IHRpbWUgaW4gdGhlIHJlY29y ZC4NCj4+IC0gIElmIFRpbWVTdGFtcCBpcyB6ZXJvLCB0aGUgc3RhcnQgdGltZSBpbiB0aGUgcmVj b3JkIGlzIGZpbGxlZCBpbiB3aXRoIHRoZSB2YWx1ZQ0KPj4gLSAgcmVhZCBmcm9tIHRoZSBjdXJy ZW50IHRpbWUgc3RhbXAuDQo+PiArICBBZGQgcGVyZm9ybWFuY2UgbG9nIHRvIEZQRFQgYm9vdCBy ZWNvcmQgdGFibGUuDQo+Pg0KPj4gKyAgQHBhcmFtICBJc1N0YXJ0ICAgICAgICAgICAgICAgICBU UlVFIGlmIHRoZSBwZXJmb3JtYW5jZSBsb2cgaXMgc3RhcnQgbG9nLg0KPj4gICAgQHBhcmFtICBI YW5kbGUgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGVudmlyb25tZW50IHNwZWNpZmljIGNv bnRleHQgdXNlZA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpZGVu dGlmeSB0aGUgY29tcG9uZW50IGJlaW5nIG1lYXN1cmVkLg0KPj4gICAgQHBhcmFtICBUb2tlbiAg ICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmlu Zw0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlkZW50aWZpZXMg dGhlIGNvbXBvbmVudCBiZWluZyBtZWFzdXJlZC4NCj4+ICAgIEBwYXJhbSAgTW9kdWxlICAgICAg ICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIHRoZSBt b2R1bGUgYmVpbmcgbWVhc3VyZWQuDQo+PiAtICBAcGFyYW0gIFRpbWVTdGFtcCAgICAgICAgICAg ICAgIDY0LWJpdCB0aW1lIHN0YW1wLg0KPj4gKyAgQHBhcmFtICBUaWNrZXIgICAgICAgICAgICAg ICAgICA2NC1iaXQgdGltZSBzdGFtcC4NCj4+ICAgIEBwYXJhbSAgSWRlbnRpZmllciAgICAgICAg ICAgICAgMzItYml0IGlkZW50aWZpZXIuIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgY3JlYXRlZCBy ZWNvcmQNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgc2FtZSBhcyB0 aGUgb25lIGNyZWF0ZWQgYnkgU3RhcnRHYXVnZSBvZiBQRVJGT1JNQU5DRV9QUk9UT0NPTC4NCj4+ DQo+PiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBkYXRhIHdhcyByZWFk IGNvcnJlY3RseSBmcm9tIHRoZSBkZXZpY2UuDQo+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgIEFkZCBGUERUIGJvb3QgcmVjb3JkLg0KPj4gICAgQHJldHZhbCBFRklfT1VUX09G X1JFU09VUkNFUyAgICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gcmVjb3JkIHRo ZSBtZWFzdXJlbWVudC4NCj4+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgTm8g bWF0Y2hlZCBGUERUIHJlY29yZC4NCj4+DQo+PiAgKiovDQo+PiAgRUZJX1NUQVRVUw0KPj4gLUVG SUFQSQ0KPj4gLVN0YXJ0R2F1Z2VFeCAoDQo+PiArSW5zZXJ0RnBkdE1lYXN1cmVtZW50ICgNCj4+ ICsgIElOIEJPT0xFQU4gICAgICBJc1N0YXJ0LA0KPj4gICAgSU4gQ09OU1QgVk9JRCAgICpIYW5k bGUsICBPUFRJT05BTA0KPj4gICAgSU4gQ09OU1QgQ0hBUjggICpUb2tlbiwgICBPUFRJT05BTA0K Pj4gICAgSU4gQ09OU1QgQ0hBUjggICpNb2R1bGUsICBPUFRJT05BTA0KPj4gLSAgSU4gVUlOVDY0 ICAgICAgIFRpbWVTdGFtcCwNCj4+ICsgIElOIFVJTlQ2NCAgICAgICBUaWNrZXIsDQo+PiAgICBJ TiBVSU5UMzIgICAgICAgSWRlbnRpZmllcg0KPj4gICAgKQ0KPj4gIHsNCj4+IC0gIEdBVUdFX0RB VEFfRU5UUllfRVggICAgICAgKkdhdWdlRW50cnlFeEFycmF5Ow0KPj4gLSAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBHYXVnZURhdGFTaXplOw0KPj4gLSAgR0FVR0VfREFUQV9IRUFERVIgICAg ICAgICAqTmV3R2F1Z2VEYXRhOw0KPj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBPbGRH YXVnZURhdGFTaXplOw0KPj4gLSAgR0FVR0VfREFUQV9IRUFERVIgICAgICAgICAqT2xkR2F1Z2VE YXRhOw0KPj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+IC0gIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAg ICAgICAgICBNb2R1bGVHdWlkOw0KPj4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICBN b2R1bGVOYW1lW0VES0lJX1NUUklOR19FVkVOVF9SRUNPUkRfTkFNRV9MRU5HVEhdOw0KPj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICBGcGR0UmVjb3JkW01BWF9SRUNPUkRfU0laRV07 DQo+PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ICsgIEZQRFRf UkVDT1JEX1BUUiAgICAgICAgICAgICAgRnBkdFJlY29yZFB0cjsNCj4+ICsgIEJBU0lDX1JFQ09S RF9JTkZPICAgICAgICAgICAgUmVjb3JkSW5mbzsNCj4+ICsgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgICAgVGltZVN0YW1wOw0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBE ZXN0TWF4Ow0KPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBTdHJMZW5ndGg7DQo+ PiArICBDT05TVCBDSEFSOCAgICAgICAgICAgICAgICAgICpTdHJpbmdQdHI7DQo+PiArICBCT09M RUFOICAgICAgICAgICAgICAgICAgICAgIFVzZU1vZHVsZU5hbWU7DQo+PiArDQo+PiArICBTdHJp bmdQdHIgICAgID0gTlVMTDsNCj4+ICsgIFVzZU1vZHVsZU5hbWUgPSBGQUxTRTsNCj4+ICsgIFpl cm9NZW0gKE1vZHVsZU5hbWUsIHNpemVvZiAoTW9kdWxlTmFtZSkpOw0KPj4gKyAgWmVyb01lbSAo RnBkdFJlY29yZCwgc2l6ZW9mIChGcGR0UmVjb3JkKSk7DQo+Pg0KPj4gLSAgU3RhdHVzID0gRWZp QWNxdWlyZUxvY2tPckZhaWwgKCZtUGVyZlJlY29yZExvY2spOw0KPj4gKyAgLy8NCj4+ICsgIC8v IEdldCByZWNvcmQgaW5mbyAodHlwZSwgc2l6ZSwgUHJvZ3Jlc3NJRCBhbmQgTW9kdWxlIEd1aWQp Lg0KPj4gKyAgLy8NCj4+ICsgIFN0YXR1cyA9IEdldEZwZHRSZWNvcmRJbmZvIChJc1N0YXJ0LCBI YW5kbGUsIFRva2VuLCBNb2R1bGUsICZSZWNvcmRJbmZvLCAmVXNlTW9kdWxlTmFtZSk7DQo+PiAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiAgICAgIHJldHVybiBTdGF0dXM7DQo+PiAg ICB9DQo+Pg0KPj4gLSAgSW5kZXggPSBtR2F1Z2VEYXRhLT5OdW1iZXJPZkVudHJpZXM7DQo+PiAt ICBpZiAoSW5kZXggPj0gbU1heEdhdWdlUmVjb3Jkcykgew0KPj4gKyAgLy8NCj4+ICsgIC8vIElm IFBFUkZfU1RBUlQoKS9QRVJGX0VORCgpIGhhdmUgc3BlY2lmaWVkIHRoZSBQcm9ncmVzc0lELGl0 IGhhcyBoaWdoIHByaW9yaXR5Lg0KPj4gKyAgLy8gISEhIE5vdGU6IElmIHRoZSBQcmVmIGlzIG5v dCB0aGUga25vd24gVG9rZW4gdXNlZCBpbiB0aGUgY29yZSBidXQgaGF2ZSBzYW1lDQo+PiArICAv LyBJRCB3aXRoIHRoZSBjb3JlIFRva2VuLCB0aGlzIGNhc2Ugd2lsbCBub3QgYmUgc3VwcG9ydGVk Lg0KPj4gKyAgLy8gQW5kIGluIGN1cnJ0bnQgdXNhZ2UgbW9kZSwgZm9yIHRoZSB1bmtvd24gSUQs IHRoZXJlIGlzIGEgZ2VuZXJhbCBydWxlOg0KPj4gKyAgLy8gSWYgaXQgaXMgc3RhcnQgcHJlZjog dGhlIGxvd2VyIDQgYml0cyBvZiB0aGUgSUQgc2hvdWxkIGJlIDAuDQo+PiArICAvLyBJZiBpdCBp cyBlbmQgcHJlZjogdGhlIGxvd2VyIDQgYml0cyBvZiB0aGUgSUQgc2hvdWxkIG5vdCBiZSAwLg0K Pj4gKyAgLy8gSWYgaW5wdXQgSUQgZG9lc24ndCBmb2xsb3cgdGhlIHJ1bGUsIHdlIHdpbGwgYWRq dXN0IGl0Lg0KPj4gKyAgLy8NCj4+ICsgIGlmICgoSWRlbnRpZmllciAhPSAwKSAmJiAoSXNLbm93 bklEIChJZGVudGlmaWVyKSkgJiYgKCFJc0tub3duVG9rZW5zIChUb2tlbikpKSB7DQo+PiArICAg IHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiArICB9IGVsc2UgaWYgKChJZGVudGlmaWVyICE9 IDApICYmICghSXNLbm93bklEIChJZGVudGlmaWVyKSkgJiYgKCFJc0tub3duVG9rZW5zIChUb2tl bikpKSB7DQo+PiArICAgIGlmIChJc1N0YXJ0ICYmICgoSWRlbnRpZmllciAmIDB4MDAwRikgIT0g MCkpIHsNCj4+ICsgICAgICBJZGVudGlmaWVyICY9IDB4RkZGMDsNCj4+ICsgICAgfSBlbHNlIGlm ICgoIUlzU3RhcnQpICYmICgoSWRlbnRpZmllciAmIDB4MDAwRikgPT0gMCkpIHsNCj4+ICsgICAg ICBJZGVudGlmaWVyICs9IDE7DQo+PiArICAgIH0NCj4+ICsgICAgUmVjb3JkSW5mby5Qcm9ncmVz c0lEID0gKFVJTlQxNilJZGVudGlmaWVyOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgaWYgKG1GcGR0 QnVmZmVySXNSZXBvcnRlZCkgew0KPj4gKyAgICBGcGR0UmVjb3JkUHRyLlJlY29yZEhlYWRlciA9 IChFRklfQUNQSV81XzBfRlBEVF9QRVJGT1JNQU5DRV9SRUNPUkRfSEVBREVSICopRnBkdFJlY29y ZDsNCj4+ICsgIH0gZWxzZSB7DQo+PiArICAgIC8vDQo+PiArICAgIC8vIENoZWNrIGlmIHByZS1h bGxvY2F0ZWQgYnVmZmVyIGlzIGZ1bGwNCj4+ICAgICAgLy8NCj4+IC0gICAgLy8gVHJ5IHRvIGVu bGFyZ2UgdGhlIHNjYWxlIG9mIGdhdWdlIGFycmF5Lg0KPj4gKyAgICBpZiAobVBlcmZvcm1hbmNl TGVuZ3RoICsgUmVjb3JkSW5mby5SZWNvcmRTaXplID4gbU1heFBlcmZvcm1hbmNlTGVuZ3RoKSB7 DQo+PiArICAgICAgbVBlcmZvcm1hbmNlUG9pbnRlciA9IFJlYWxsb2NhdGVQb29sICgNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVyZm9ybWFuY2VMZW5ndGgsDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBlcmZvcm1hbmNlTGVuZ3RoICsgUmVjb3JkSW5m by5SZWNvcmRTaXplICsgRklSTVdBUkVfUkVDT1JEX0JVRkZFUiwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtUGVyZm9ybWFuY2VQb2ludGVyDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4+ICsNCj4+ICsgICAgICBpZiAobVBlcmZvcm1hbmNlUG9pbnRl ciA9PSBOVUxMKSB7DQo+PiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ PiArICAgICAgfQ0KPj4gKyAgICAgIG1NYXhQZXJmb3JtYW5jZUxlbmd0aCA9IG1QZXJmb3JtYW5j ZUxlbmd0aCArIFJlY29yZEluZm8uUmVjb3JkU2l6ZSArIEZJUk1XQVJFX1JFQ09SRF9CVUZGRVI7 DQo+PiArICAgIH0NCj4+ICAgICAgLy8NCj4+IC0gICAgT2xkR2F1Z2VEYXRhICAgICAgPSBtR2F1 Z2VEYXRhOw0KPj4gLSAgICBPbGRHYXVnZURhdGFTaXplICA9IHNpemVvZiAoR0FVR0VfREFUQV9I RUFERVIpICsgc2l6ZW9mIChHQVVHRV9EQVRBX0VOVFJZX0VYKSAqIG1NYXhHYXVnZVJlY29yZHM7 DQo+PiArICAgIC8vIENvdmVydCBidWZmZXIgdG8gRlBEVCBQdHIgVW5pb24gdHlwZS4NCj4+ICsg ICAgLy8NCj4+ICsgICAgRnBkdFJlY29yZFB0ci5SZWNvcmRIZWFkZXIgPSAoRUZJX0FDUElfNV8w X0ZQRFRfUEVSRk9STUFOQ0VfUkVDT1JEX0hFQURFUiAqKShtUGVyZm9ybWFuY2VQb2ludGVyICsg bVBlcmZvcm1hbmNlTGVuZ3RoKTsNCj4+ICsgIH0NCj4+ICsgIEZwZHRSZWNvcmRQdHIuUmVjb3Jk SGVhZGVyLT5MZW5ndGggPSAwOw0KPj4NCj4+IC0gICAgR2F1Z2VEYXRhU2l6ZSAgICAgPSBzaXpl b2YgKEdBVUdFX0RBVEFfSEVBREVSKSArIHNpemVvZiAoR0FVR0VfREFUQV9FTlRSWV9FWCkgKiBt TWF4R2F1Z2VSZWNvcmRzICogMjsNCj4+ICsgIC8vDQo+PiArICAvLyBHZXQgdGhlIFRpbWVTdGFt cC4NCj4+ICsgIC8vDQo+PiArICBpZiAoVGlja2VyID09IDApIHsNCj4+ICsgICAgVGlja2VyICAg ID0gR2V0UGVyZm9ybWFuY2VDb3VudGVyICgpOw0KPj4gKyAgICBUaW1lU3RhbXAgPSBHZXRUaW1l SW5OYW5vU2Vjb25kIChUaWNrZXIpOw0KPj4gKyAgfSBlbHNlIGlmIChUaWNrZXIgPT0gMSkgew0K Pj4gKyAgICBUaW1lU3RhbXAgPSAwOw0KPj4gKyAgfSBlbHNlIHsNCj4+ICsgICAgVGltZVN0YW1w ID0gR2V0VGltZUluTmFub1NlY29uZCAoVGlja2VyKTsNCj4+ICsgIH0NCj4+DQo+PiAtICAgIE5l d0dhdWdlRGF0YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKEdhdWdlRGF0YVNpemUpOw0KPj4gLSAgICBp ZiAoTmV3R2F1Z2VEYXRhID09IE5VTEwpIHsNCj4+IC0gICAgICBFZmlSZWxlYXNlTG9jayAoJm1Q ZXJmUmVjb3JkTG9jayk7DQo+PiAtICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K Pj4gKyAgLy8NCj4+ICsgIC8vIEdldCB0aGUgTW9kdWxlTmFtZSBhbmQgTW9kdWxlR3VpZCBmb3Jt IHRoZSBoYW5kbGUuDQo+PiArICAvLw0KPj4gKyAgR2V0TW9kdWxlSW5mb0Zyb21IYW5kbGUgKChF RklfSEFORExFICopSGFuZGxlLCBNb2R1bGVOYW1lLCBzaXplb2YgKE1vZHVsZU5hbWUpLCAmTW9k dWxlR3VpZCk7DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gRmlsbCBpbiB0aGUgcmVjb3JkIGlu Zm9ybWF0aW9uLg0KPj4gKyAgLy8NCj4+ICsgIHN3aXRjaCAoUmVjb3JkSW5mby5UeXBlKSB7DQo+ PiArICBjYXNlIEdVSURfRVZFTlRfVFlQRToNCj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlkRXZl bnQtPkhlYWRlci5UeXBlICAgICAgICAgICAgICAgID0gR1VJRF9FVkVOVF9UWVBFOw0KPj4gKyAg ICBGcGR0UmVjb3JkUHRyLkd1aWRFdmVudC0+SGVhZGVyLkxlbmd0aCAgICAgICAgICAgICAgPSBS ZWNvcmRJbmZvLlJlY29yZFNpemU7DQo+PiArICAgIEZwZHRSZWNvcmRQdHIuR3VpZEV2ZW50LT5I ZWFkZXIuUmV2aXNpb24gICAgICAgICAgICA9IFJFQ09SRF9SRVZJU0lPTl8xOw0KPj4gKyAgICBG cGR0UmVjb3JkUHRyLkd1aWRFdmVudC0+UHJvZ3Jlc3NJRCAgICAgICAgICAgICAgICAgPSBSZWNv cmRJbmZvLlByb2dyZXNzSUQ7DQo+PiArICAgIEZwZHRSZWNvcmRQdHIuR3VpZEV2ZW50LT5UaW1l c3RhbXAgICAgICAgICAgICAgICAgICA9IFRpbWVTdGFtcDsNCj4+ICsgICAgQ29weU1lbSAoJkZw ZHRSZWNvcmRQdHIuR3VpZEV2ZW50LT5HdWlkLCAmTW9kdWxlR3VpZCwgc2l6ZW9mIChGcGR0UmVj b3JkUHRyLkd1aWRFdmVudC0+R3VpZCkpOw0KPj4gKyAgICBicmVhazsNCj4+ICsNCj4+ICsgIGNh c2UgRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRToNCj4+ICsgICAgRnBkdFJlY29yZFB0ci5EeW5h bWljU3RyaW5nRXZlbnQtPkhlYWRlci5UeXBlICAgICAgID0gRFlOQU1JQ19TVFJJTkdfRVZFTlRf VFlQRTsNCj4+ICsgICAgRnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5nRXZlbnQtPkhlYWRlci5M ZW5ndGggICAgID0gUmVjb3JkSW5mby5SZWNvcmRTaXplOw0KPj4gKyAgICBGcGR0UmVjb3JkUHRy LkR5bmFtaWNTdHJpbmdFdmVudC0+SGVhZGVyLlJldmlzaW9uICAgPSBSRUNPUkRfUkVWSVNJT05f MTsNCj4+ICsgICAgRnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5nRXZlbnQtPlByb2dyZXNzSUQg ICAgICAgID0gUmVjb3JkSW5mby5Qcm9ncmVzc0lEOw0KPj4gKyAgICBGcGR0UmVjb3JkUHRyLkR5 bmFtaWNTdHJpbmdFdmVudC0+VGltZXN0YW1wICAgICAgICAgPSBUaW1lU3RhbXA7DQo+PiArICAg IENvcHlNZW0gKCZGcGR0UmVjb3JkUHRyLkR5bmFtaWNTdHJpbmdFdmVudC0+R3VpZCwgJk1vZHVs ZUd1aWQsIHNpemVvZiAoRnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5nRXZlbnQtPkd1aWQpKTsN Cj4+ICsNCj4+ICsgICAgaWYgKFVzZU1vZHVsZU5hbWUpIHsNCj4+ICsgICAgICBTdHJpbmdQdHIg ICAgID0gTW9kdWxlTmFtZTsNCj4+ICsgICAgfSBlbHNlIGlmIChUb2tlbiAhPSBOVUxMKSB7DQo+ PiArICAgICAgU3RyaW5nUHRyICAgICA9IFRva2VuOw0KPj4gKyAgICB9IGVsc2UgaWYgKE1vZHVs ZSAhPSBOVUxMKSB7DQo+PiArICAgICAgU3RyaW5nUHRyICAgICA9IE1vZHVsZTsNCj4+ICsgICAg fSBlbHNlIGlmIChNb2R1bGVOYW1lICE9IE5VTEwpIHsNCj4+ICsgICAgICBTdHJpbmdQdHIgICAg ID0gTW9kdWxlTmFtZTsNCj4+ICsgICAgfQ0KPj4gKyAgICBpZiAoU3RyaW5nUHRyICE9IE5VTEwg JiYgQXNjaWlTdHJMZW4gKFN0cmluZ1B0cikgIT0gMCkgew0KPj4gKyAgICAgIFN0ckxlbmd0aCAg ICAgPSBBc2NpaVN0ckxlbiAoU3RyaW5nUHRyKTsNCj4+ICsgICAgICBEZXN0TWF4ICAgICAgID0g KFJlY29yZEluZm8uUmVjb3JkU2l6ZSAtIHNpemVvZiAoRFlOQU1JQ19TVFJJTkdfRVZFTlRfUkVD T1JEKSkgLyBzaXplb2YgKENIQVI4KTsNCj4+ICsgICAgICBpZiAoU3RyTGVuZ3RoID49IERlc3RN YXgpIHsNCj4+ICsgICAgICAgIFN0ckxlbmd0aCAgID0gRGVzdE1heCAtMTsNCj4+ICsgICAgICB9 DQo+PiArICAgICAgQXNjaWlTdHJuQ3B5UyAoRnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5nRXZl bnQtPlN0cmluZywgRGVzdE1heCwgU3RyaW5nUHRyLCBTdHJMZW5ndGgpOw0KPj4gICAgICB9DQo+ PiArICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgY2FzZSBHVUlEX1FXT1JEX0VWRU5UX1RZUEU6DQo+ PiArICAgIEZwZHRSZWNvcmRQdHIuR3VpZFF3b3JkRXZlbnQtPkhlYWRlci5UeXBlICAgICAgICAg ICA9IEdVSURfUVdPUkRfRVZFTlRfVFlQRTsNCj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlkUXdv cmRFdmVudC0+SGVhZGVyLkxlbmd0aCAgICAgICAgID0gUmVjb3JkSW5mby5SZWNvcmRTaXplOw0K Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZEV2ZW50LT5IZWFkZXIuUmV2aXNpb24gICAg ICAgPSBSRUNPUkRfUkVWSVNJT05fMTsNCj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlkUXdvcmRF dmVudC0+UHJvZ3Jlc3NJRCAgICAgICAgICAgID0gUmVjb3JkSW5mby5Qcm9ncmVzc0lEOw0KPj4g KyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZEV2ZW50LT5UaW1lc3RhbXAgICAgICAgICAgICAg PSBUaW1lU3RhbXA7DQo+PiArICAgIENvcHlNZW0gKCZGcGR0UmVjb3JkUHRyLkd1aWRRd29yZEV2 ZW50LT5HdWlkLCAmTW9kdWxlR3VpZCwgc2l6ZW9mIChGcGR0UmVjb3JkUHRyLkd1aWRRd29yZEV2 ZW50LT5HdWlkKSk7DQo+PiArICAgIGlmICgoTU9EVUxFX0xPQURJTUFHRV9TVEFSVF9JRCA9PSBS ZWNvcmRJbmZvLlByb2dyZXNzSUQpICYmIEFzY2lpU3RyQ21wIChUb2tlbiwgTE9BRF9JTUFHRV9U T0spID09IDApIHsNCj4+ICsgICAgICBtTG9hZEltYWdlQ291bnQrKzsNCj4+ICsgICAgICBGcGR0 UmVjb3JkUHRyLkd1aWRRd29yZEV2ZW50LT5Rd29yZCAgICAgICAgICAgICAgID0gbUxvYWRJbWFn ZUNvdW50Ow0KPj4gKyAgICB9DQo+PiArICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgY2FzZSBHVUlE X1FXT1JEX1NUUklOR19FVkVOVF9UWVBFOg0KPj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29y ZFN0cmluZ0V2ZW50LT5IZWFkZXIuVHlwZSAgICAgPSBHVUlEX1FXT1JEX1NUUklOR19FVkVOVF9U WVBFOw0KPj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZFN0cmluZ0V2ZW50LT5IZWFkZXIu TGVuZ3RoICAgPSBSZWNvcmRJbmZvLlJlY29yZFNpemU7DQo+PiArICAgIEZwZHRSZWNvcmRQdHIu R3VpZFF3b3JkU3RyaW5nRXZlbnQtPkhlYWRlci5SZXZpc2lvbiA9IFJFQ09SRF9SRVZJU0lPTl8x Ow0KPj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZFN0cmluZ0V2ZW50LT5Qcm9ncmVzc0lE ICAgICAgPSBSZWNvcmRJbmZvLlByb2dyZXNzSUQ7DQo+PiArICAgIEZwZHRSZWNvcmRQdHIuR3Vp ZFF3b3JkU3RyaW5nRXZlbnQtPlRpbWVzdGFtcCAgICAgICA9IFRpbWVTdGFtcDsNCj4+ICsgICAg Q29weU1lbSAoJkZwZHRSZWNvcmRQdHIuR3VpZFF3b3JkU3RyaW5nRXZlbnQtPkd1aWQsICZNb2R1 bGVHdWlkLCBzaXplb2YgKEZwZHRSZWNvcmRQdHIuR3VpZFF3b3JkU3RyaW5nRXZlbnQtPkd1aWQp KTsNCj4+ICsgICAgYnJlYWs7DQo+PiArDQo+PiArICBkZWZhdWx0Og0KPj4gKyAgICAvLw0KPj4g KyAgICAvLyBSZWNvcmQgaXMgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IERYRSBwaGFzZSwgcmV0 dXJuIEVGSV9BQk9SVEVEDQo+PiArICAgIC8vDQo+PiArICAgIHJldHVybiBFRklfVU5TVVBQT1JU RUQ7DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gUmVwb3J0IHJlY29yZCBvbmUg Ynkgb25lIGFmdGVyIHJlY29yZHMgaGF2ZSBiZWVuIHJlcG9ydGVkIHRvZ2V0aGVyLg0KPj4gKyAg Ly8NCj4+ICsgIGlmIChtRnBkdEJ1ZmZlcklzUmVwb3J0ZWQpIHsNCj4+ICsgICAgICAvLw0KPj4g KyAgICAgIC8vIEFwcGVuZCBCb290IHJlY29yZHMgdG8gdGhlIGJvb3QgcGVyZm9ybWFuY2UgdGFi bGUuDQo+PiArICAgICAgLy8NCj4+ICsgICAgICBpZiAobUJvb3RSZWNvcmRTaXplICsgRnBkdFJl Y29yZFB0ci5SZWNvcmRIZWFkZXItPkxlbmd0aCA+IG1Cb290UmVjb3JkTWF4U2l6ZSkgew0KPj4g KyAgICAgICAgaWYgKCFtTGFja1NwYWNlSXNSZXBvcnRlZCkgew0KPj4gKyAgICAgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJEeGVDb3JlUGVyZm9ybWFuY2VMaWI6IE5vIGVub3VnaCBzcGFjZSB0 byBzYXZlIGJvb3QgcmVjb3Jkc1xuIikpOw0KPj4gKyAgICAgICAgICBtTGFja1NwYWNlSXNSZXBv cnRlZCA9IFRSVUU7DQo+PiArICAgICAgICB9DQo+PiArICAgICAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+PiArICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgIC8vDQo+PiArICAg ICAgICAvLyBTYXZlIGJvb3QgcmVjb3JkIGludG8gQm9vdFBlcmZvcm1hbmNlIHRhYmxlDQo+PiAr ICAgICAgICAvLw0KPj4gKyAgICAgICAgQ29weU1lbSAobUJvb3RSZWNvcmRCdWZmZXIgKyBtQm9v dFJlY29yZFNpemUsIEZwZHRSZWNvcmRQdHIuUmVjb3JkSGVhZGVyLCBGcGR0UmVjb3JkUHRyLlJl Y29yZEhlYWRlci0+TGVuZ3RoKTsNCj4+ICsgICAgICAgIG1Cb290UmVjb3JkU2l6ZSArPSBGcGR0 UmVjb3JkUHRyLlJlY29yZEhlYWRlci0+TGVuZ3RoOw0KPj4gKyAgICAgICAgbUFjcGlCb290UGVy Zm9ybWFuY2VUYWJsZS0+SGVhZGVyLkxlbmd0aCArPSBGcGR0UmVjb3JkUHRyLlJlY29yZEhlYWRl ci0+TGVuZ3RoOw0KPj4gKyAgICAgIH0NCj4+ICsgIH0gZWxzZSB7DQo+PiArICAgIC8vDQo+PiAr ICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGVkIEZQRFQgcmVjb3JkIGJ1ZmZlci4NCj4+ICsgICAgLy8N Cj4+ICsgICAgbVBlcmZvcm1hbmNlTGVuZ3RoICs9IEZwZHRSZWNvcmRQdHIuUmVjb3JkSGVhZGVy LT5MZW5ndGg7DQo+PiArICB9DQo+PiArDQo+PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+PiAr fQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgRHVtcHMgYWxsIHRoZSBQRUkgcGVyZm9ybWFuY2UuDQo+ PiArDQo+PiArICBAcGFyYW0gIEhvYlN0YXJ0ICAgICAgQSBwb2ludGVyIHRvIGEgR3VpZC4NCj4+ DQo+PiAtICAgIG1HYXVnZURhdGEgPSBOZXdHYXVnZURhdGE7DQo+PiAtICAgIG1NYXhHYXVnZVJl Y29yZHMgKj0gMjsNCj4+ICsgIFRoaXMgaW50ZXJuYWwgZnVuY3Rpb24gZHVtcHMgYWxsIHRoZSBQ RUkgcGVyZm9ybWFuY2UgbG9nIHRvIHRoZSBEWEUgcGVyZm9ybWFuY2UgZ2F1Z2UgYXJyYXkuDQo+ PiArICBJdCByZXRyaWV2ZXMgdGhlIG9wdGlvbmFsIEdVSUQgSE9CIGZvciBQRUkgcGVyZm9ybWFu Y2UgYW5kIHRoZW4gc2F2ZXMgdGhlIHBlcmZvcm1hbmNlIGRhdGENCj4+ICsgIHRvIERYRSBwZXJm b3JtYW5jZSBkYXRhIHN0cnVjdHVyZXMuDQo+Pg0KPj4gKyoqLw0KPj4gK1ZPSUQNCj4+ICtJbnRl cm5hbEdldFBlaVBlcmZvcm1hbmNlICgNCj4+ICsgIFZPSUQgICpIb2JTdGFydA0KPj4gKyAgKQ0K Pj4gK3sNCj4+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlybXdh cmVQZXJmb3JtYW5jZUhvYjsNCj4+ICsgIFBFSV9FWFRfRklSTVdBUkVfUEVSRl9IRUFERVIgICAg ICAgICAqUGVpUGVyZm9ybWFuY2VMb2dIZWFkZXI7DQo+PiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkV2ZW50UmVjOw0KPj4gKyAgRUZJX0hPQl9HVUlEX1RZUEUgICAg ICAgICAgICAgICAgICAgICpHdWlkSG9iOw0KPj4gKw0KPj4gKyAgR3VpZEhvYiA9IEdldE5leHRH dWlkSG9iICgmZ0Vka2lpRXh0ZW5kZWRGaXJtd2FyZVBlcmZvcm1hbmNlR3VpZCwgSG9iU3RhcnQp Ow0KPj4gKyAgd2hpbGUgKEd1aWRIb2IgIT0gTlVMTCkgew0KPj4gKyAgICBGaXJtd2FyZVBlcmZv cm1hbmNlSG9iICA9IEdFVF9HVUlEX0hPQl9EQVRBIChHdWlkSG9iKTsNCj4+ICsgICAgUGVpUGVy Zm9ybWFuY2VMb2dIZWFkZXIgPSAoUEVJX0VYVF9GSVJNV0FSRV9QRVJGX0hFQURFUiAqKUZpcm13 YXJlUGVyZm9ybWFuY2VIb2I7DQo+PiArDQo+PiArICAgIGlmIChtUGVyZm9ybWFuY2VMZW5ndGgg KyBQZWlQZXJmb3JtYW5jZUxvZ0hlYWRlci0+U2l6ZU9mQWxsRW50cmllcyA+IG1NYXhQZXJmb3Jt YW5jZUxlbmd0aCkgew0KPj4gKyAgICAgIG1QZXJmb3JtYW5jZVBvaW50ZXIgPSBSZWFsbG9jYXRl UG9vbCAoDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBlcmZvcm1hbmNlTGVu Z3RoLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QZXJmb3JtYW5jZUxlbmd0 aCArDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKVBlaVBlcmZvcm1h bmNlTG9nSGVhZGVyLT5TaXplT2ZBbGxFbnRyaWVzICsNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGSVJNV0FSRV9SRUNPUkRfQlVGRkVSLA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1QZXJmb3JtYW5jZVBvaW50ZXINCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPj4gKyAgICAgIEFTU0VSVCAobVBlcmZvcm1hbmNlUG9pbnRlciAhPSBO VUxMKTsNCj4+ICsgICAgICBtTWF4UGVyZm9ybWFuY2VMZW5ndGggPSBtUGVyZm9ybWFuY2VMZW5n dGggKw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikoUGVpUGVyZm9y bWFuY2VMb2dIZWFkZXItPlNpemVPZkFsbEVudHJpZXMpICsNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGSVJNV0FSRV9SRUNPUkRfQlVGRkVSOw0KPj4gKyAgICB9DQo+PiArDQo+ PiArICAgIEV2ZW50UmVjID0gbVBlcmZvcm1hbmNlUG9pbnRlciArIG1QZXJmb3JtYW5jZUxlbmd0 aDsNCj4+ICsgICAgQ29weU1lbSAoRXZlbnRSZWMsIEZpcm13YXJlUGVyZm9ybWFuY2VIb2IgKyBz aXplb2YgKFBFSV9FWFRfRklSTVdBUkVfUEVSRl9IRUFERVIpLCAoVUlOVE4pKFBlaVBlcmZvcm1h bmNlTG9nSGVhZGVyLT5TaXplT2ZBbGxFbnRyaWVzKSk7DQo+PiAgICAgIC8vDQo+PiAtICAgIC8v IEluaXRpYWxpemUgbmV3IGRhdGEgYXJyYXkgYW5kIG1pZ3JhdGUgb2xkIGRhdGEgb25lLg0KPj4g KyAgICAvLyBVcGRhdGUgdGhlIHVzZWQgYnVmZmVyIHNpemUuDQo+PiAgICAgIC8vDQo+PiAtICAg IG1HYXVnZURhdGEgPSBDb3B5TWVtIChtR2F1Z2VEYXRhLCBPbGRHYXVnZURhdGEsIE9sZEdhdWdl RGF0YVNpemUpOw0KPj4gKyAgICBtUGVyZm9ybWFuY2VMZW5ndGggKz0gKFVJTlROKShQZWlQZXJm b3JtYW5jZUxvZ0hlYWRlci0+U2l6ZU9mQWxsRW50cmllcyk7DQo+PiArICAgIG1Mb2FkSW1hZ2VD b3VudCAgICArPSBQZWlQZXJmb3JtYW5jZUxvZ0hlYWRlci0+TG9hZEltYWdlQ291bnQ7DQo+Pg0K Pj4gLSAgICBGcmVlUG9vbCAoT2xkR2F1Z2VEYXRhKTsNCj4+ICsgICAgLy8NCj4+ICsgICAgLy8g R2V0IG5leHQgcGVyZm9ybWFuY2UgZ3VpZCBob2INCj4+ICsgICAgLy8NCj4+ICsgICAgR3VpZEhv YiA9IEdldE5leHRHdWlkSG9iICgmZ0Vka2lpRXh0ZW5kZWRGaXJtd2FyZVBlcmZvcm1hbmNlR3Vp ZCwgR0VUX05FWFRfSE9CIChHdWlkSG9iKSk7DQo+PiAgICB9DQo+PiArfQ0KPj4NCj4+IC0gIEdh dWdlRW50cnlFeEFycmF5ICAgICAgICAgICAgICAgPSAoR0FVR0VfREFUQV9FTlRSWV9FWCAqKSAo bUdhdWdlRGF0YSArIDEpOw0KPj4gLSAgR2F1Z2VFbnRyeUV4QXJyYXlbSW5kZXhdLkhhbmRsZSA9 IChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBIYW5kbGU7DQo+PiArLyoqDQo+PiArICBS ZXBvcnQgQm9vdCBQZXJmb3JhbW5jZSB0YWJsZSBhZGRyZXNzIGFzIHJlcG9ydCBzdGF0dXMgY29k ZS4NCj4+DQo+PiAtICBpZiAoVG9rZW4gIT0gTlVMTCkgew0KPj4gLSAgICBBc2NpaVN0cm5DcHlT IChHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0uVG9rZW4sIERYRV9QRVJGT1JNQU5DRV9TVFJJTkdf U0laRSwgVG9rZW4sIERYRV9QRVJGT1JNQU5DRV9TVFJJTkdfTEVOR1RIKTsNCj4+IC0gIH0NCj4+ IC0gIGlmIChNb2R1bGUgIT0gTlVMTCkgew0KPj4gLSAgICBBc2NpaVN0cm5DcHlTIChHYXVnZUVu dHJ5RXhBcnJheVtJbmRleF0uTW9kdWxlLCBEWEVfUEVSRk9STUFOQ0VfU1RSSU5HX1NJWkUsIE1v ZHVsZSwgRFhFX1BFUkZPUk1BTkNFX1NUUklOR19MRU5HVEgpOw0KPj4gKyAgQHBhcmFtICBFdmVu dCAgICBUaGUgZXZlbnQgb2Ygbm90aWZ5IHByb3RvY29sLg0KPj4gKyAgQHBhcmFtICBDb250ZXh0 ICBOb3RpZnkgZXZlbnQgY29udGV4dC4NCj4+ICsNCj4+ICsqKi8NCj4+ICtWT0lEDQo+PiArRUZJ QVBJDQo+PiArUmVwb3J0RnBkdFJlY29yZEJ1ZmZlciAoDQo+PiArICBJTiBFRklfRVZFTlQgICAg IEV2ZW50LA0KPj4gKyAgSU4gVk9JRCAgICAgICAgICAqQ29udGV4dA0KPj4gKyAgKQ0KPj4gK3sN Cj4+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+PiArICBVSU5UNjQgICAgICAgICAgQlBE VEFkZHI7DQo+PiArDQo+PiArICBpZiAoIW1GcGR0QnVmZmVySXNSZXBvcnRlZCkgew0KPj4gKyAg ICBTdGF0dXMgPSBBbGxvY2F0ZUJvb3RQZXJmb3JtYW5jZVRhYmxlICgpOw0KPj4gKyAgICBpZiAo IUVGSV9FUlJPUihTdGF0dXMpKSB7DQo+PiArICAgICAgQlBEVEFkZHIgPSAoVUlOVDY0KShVSU5U TiltQWNwaUJvb3RQZXJmb3JtYW5jZVRhYmxlOw0KPj4gKyAgICAgIFJFUE9SVF9TVEFUVVNfQ09E RV9FWCAoDQo+PiArICAgICAgICAgIEVGSV9QUk9HUkVTU19DT0RFLA0KPj4gKyAgICAgICAgICBF RklfU09GVFdBUkVfRFhFX0JTX0RSSVZFUiwNCj4+ICsgICAgICAgICAgMCwNCj4+ICsgICAgICAg ICAgTlVMTCwNCj4+ICsgICAgICAgICAgJmdFZmlGaXJtd2FyZVBlcmZvcm1hbmNlR3VpZCwNCj4+ ICsgICAgICAgICAgJkJQRFRBZGRyLA0KPj4gKyAgICAgICAgICBzaXplb2YgKFVJTlQ2NCkNCj4+ ICsgICAgICAgICAgKTsNCj4+ICsgICAgfQ0KPj4gKyAgICAvLw0KPj4gKyAgICAvLyBGcmVlIENh Y2hlZCBGUERUIHJlY29yZCBCdWZmZXINCj4+ICsgICAgLy8NCj4+ICsgICAgaWYgKG1QZXJmb3Jt YW5jZVBvaW50ZXIgIT0gTlVMTCkgew0KPj4gKyAgICAgIEZyZWVQb29sIChtUGVyZm9ybWFuY2VQ b2ludGVyKTsNCj4+ICsgICAgICBtUGVyZm9ybWFuY2VQb2ludGVyICAgPSBOVUxMOw0KPj4gKyAg ICB9DQo+PiArICAgIG1QZXJmb3JtYW5jZUxlbmd0aCAgICA9IDA7DQo+PiArICAgIG1NYXhQZXJm b3JtYW5jZUxlbmd0aCA9IDA7DQo+PiArICAgIC8vDQo+PiArICAgIC8vIFNldCBGUERUIHJlcG9y dCBzdGF0ZSB0byBUUlVFLg0KPj4gKyAgICAvLw0KPj4gKyAgICBtRnBkdEJ1ZmZlcklzUmVwb3J0 ZWQgPSBUUlVFOw0KPj4gICAgfQ0KPj4gK30NCj4+DQo+PiAtICBHYXVnZUVudHJ5RXhBcnJheVtJ bmRleF0uRW5kVGltZVN0YW1wID0gMDsNCj4+IC0gIEdhdWdlRW50cnlFeEFycmF5W0luZGV4XS5J ZGVudGlmaWVyID0gSWRlbnRpZmllcjsNCj4+ICsvKioNCj4+ICsgIEFkZHMgYSByZWNvcmQgYXQg dGhlIGVuZCBvZiB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgbG9nDQo+PiArICB0aGF0IHJl Y29yZHMgdGhlIHN0YXJ0IHRpbWUgb2YgYSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudC4NCj4+DQo+ PiAtICBpZiAoVGltZVN0YW1wID09IDApIHsNCj4+IC0gICAgVGltZVN0YW1wID0gR2V0UGVyZm9y bWFuY2VDb3VudGVyICgpOw0KPj4gLSAgfQ0KPj4gLSAgR2F1Z2VFbnRyeUV4QXJyYXlbSW5kZXhd LlN0YXJ0VGltZVN0YW1wID0gVGltZVN0YW1wOw0KPj4gKyAgQWRkcyBhIHJlY29yZCB0byB0aGUg ZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cNCj4+ICsgIHRoYXQgY29udGFp bnMgdGhlIEhhbmRsZSwgVG9rZW4sIE1vZHVsZSBhbmQgSWRlbnRpZmllci4NCj4+ICsgIFRoZSBl bmQgdGltZSBvZiB0aGUgbmV3IHJlY29yZCBtdXN0IGJlIHNldCB0byB6ZXJvLg0KPj4gKyAgSWYg VGltZVN0YW1wIGlzIG5vdCB6ZXJvLCB0aGVuIFRpbWVTdGFtcCBpcyB1c2VkIHRvIGZpbGwgaW4g dGhlIHN0YXJ0IHRpbWUgaW4gdGhlIHJlY29yZC4NCj4+ICsgIElmIFRpbWVTdGFtcCBpcyB6ZXJv LCB0aGUgc3RhcnQgdGltZSBpbiB0aGUgcmVjb3JkIGlzIGZpbGxlZCBpbiB3aXRoIHRoZSB2YWx1 ZQ0KPj4gKyAgcmVhZCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgc3RhbXAuDQo+Pg0KPj4gLSAgbUdh dWdlRGF0YS0+TnVtYmVyT2ZFbnRyaWVzKys7DQo+PiArICBAcGFyYW0gIEhhbmRsZSAgICAgICAg ICAgICAgICAgIFBvaW50ZXIgdG8gZW52aXJvbm1lbnQgc3BlY2lmaWMgY29udGV4dCB1c2VkDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBjb21w b25lbnQgYmVpbmcgbWVhc3VyZWQuDQo+PiArICBAcGFyYW0gIFRva2VuICAgICAgICAgICAgICAg ICAgIFBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaWRlbnRpZmllcyB0aGUgY29tcG9uZW50 IGJlaW5nIG1lYXN1cmVkLg0KPj4gKyAgQHBhcmFtICBNb2R1bGUgICAgICAgICAgICAgICAgICBQ b2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlkZW50aWZpZXMgdGhlIG1vZHVsZSBiZWluZyBt ZWFzdXJlZC4NCj4+ICsgIEBwYXJhbSAgVGltZVN0YW1wICAgICAgICAgICAgICAgNjQtYml0IHRp bWUgc3RhbXAuDQo+PiArICBAcGFyYW0gIElkZW50aWZpZXIgICAgICAgICAgICAgIDMyLWJpdCBp ZGVudGlmaWVyLiBJZiB0aGUgdmFsdWUgaXMgMCwgdGhlIGNyZWF0ZWQgcmVjb3JkDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNhbWUgYXMgdGhlIG9uZSBjcmVhdGVk IGJ5IFN0YXJ0R2F1Z2Ugb2YgUEVSRk9STUFOQ0VfUFJPVE9DT0wuDQo+Pg0KPj4gLSAgRWZpUmVs ZWFzZUxvY2sgKCZtUGVyZlJlY29yZExvY2spOw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBUaGUgZGF0YSB3YXMgcmVhZCBjb3JyZWN0bHkgZnJvbSB0aGUgZGV2aWNlLg0K Pj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBUaGVyZSBhcmUgbm90IGVub3Vn aCByZXNvdXJjZXMgdG8gcmVjb3JkIHRoZSBtZWFzdXJlbWVudC4NCj4+DQo+PiAtICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+PiArKiovDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK1N0 YXJ0R2F1Z2VFeCAoDQo+PiArICBJTiBDT05TVCBWT0lEICAgKkhhbmRsZSwgIE9QVElPTkFMDQo+ PiArICBJTiBDT05TVCBDSEFSOCAgKlRva2VuLCAgIE9QVElPTkFMDQo+PiArICBJTiBDT05TVCBD SEFSOCAgKk1vZHVsZSwgIE9QVElPTkFMDQo+PiArICBJTiBVSU5UNjQgICAgICAgVGltZVN0YW1w LA0KPj4gKyAgSU4gVUlOVDMyICAgICAgIElkZW50aWZpZXINCj4+ICsgICkNCj4+ICt7DQo+PiAr ICByZXR1cm4gSW5zZXJ0RnBkdE1lYXN1cmVtZW50IChUUlVFLCBIYW5kbGUsIFRva2VuLCBNb2R1 bGUsIFRpbWVTdGFtcCwgSWRlbnRpZmllcik7DQo+PiAgfQ0KPj4NCj4+ICAvKioNCj4+ICAgIFNl YXJjaGVzIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZnJvbSB0aGUgYmVnaW5uaW5n IG9mIHRoZSBsb2cNCj4+ICAgIGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcgcmVjb3JkIHRoYXQgY29u dGFpbnMgYSB6ZXJvIGVuZCB0aW1lIGFuZCBmaWxscyBpbiBhIHZhbGlkIGVuZCB0aW1lLg0KPj4N Cj4+ICAgIFNlYXJjaGVzIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZnJvbSB0aGUg YmVnaW5uaW5nIG9mIHRoZSBsb2cNCj4+IC0gIGZvciB0aGUgZmlyc3QgcmVjb3JkIHRoYXQgbWF0 Y2hlcyBIYW5kbGUsIFRva2VuIGFuZCBNb2R1bGUgYW5kIGhhcyBhbiBlbmQgdGltZSB2YWx1ZSBv ZiB6ZXJvLg0KPj4gKyAgZm9yIHRoZSBmaXJzdCByZWNvcmQgdGhhdCBtYXRjaGVzIEhhbmRsZSwg VG9rZW4sIE1vZHVsZSBhbmQgSWRlbnRpZmllciBhbmQgaGFzIGFuIGVuZCB0aW1lIHZhbHVlIG9m IHplcm8uDQo+PiAgICBJZiB0aGUgcmVjb3JkIGNhbiBub3QgYmUgZm91bmQgdGhlbiByZXR1cm4g RUZJX05PVF9GT1VORC4NCj4+ICAgIElmIHRoZSByZWNvcmQgaXMgZm91bmQgYW5kIFRpbWVTdGFt cCBpcyBub3QgemVybywNCj4+ICAgIHRoZW4gdGhlIGVuZCB0aW1lIGluIHRoZSByZWNvcmQgaXMg ZmlsbGVkIGluIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZCBieSBUaW1lU3RhbXAuDQo+PiAgICBJ ZiB0aGUgcmVjb3JkIGlzIGZvdW5kIGFuZCBUaW1lU3RhbXAgaXMgemVybywgdGhlbiB0aGUgZW5k IHRpbWUgaW4gdGhlIG1hdGNoaW5nIHJlY29yZA0KPj4gICAgaXMgZmlsbGVkIGluIHdpdGggdGhl IGN1cnJlbnQgdGltZSBzdGFtcCB2YWx1ZS4NCj4+IEBAIC0yNjAsODkgKzExODgsMTkgQEAgRW5k R2F1Z2VFeCAoDQo+PiAgICBJTiBDT05TVCBDSEFSOCAgKk1vZHVsZSwgIE9QVElPTkFMDQo+PiAg ICBJTiBVSU5UNjQgICAgICAgVGltZVN0YW1wLA0KPj4gICAgSU4gVUlOVDMyICAgICAgIElkZW50 aWZpZXINCj4+ICAgICkNCj4+ICB7DQo+PiAtICBHQVVHRV9EQVRBX0VOVFJZX0VYICpHYXVnZUVu dHJ5RXhBcnJheTsNCj4+IC0gIFVJTlQzMiAgICAgICAgICAgICAgSW5kZXg7DQo+PiAtICBFRklf U1RBVFVTICAgICAgICAgIFN0YXR1czsNCj4+IC0NCj4+IC0gIFN0YXR1cyA9IEVmaUFjcXVpcmVM b2NrT3JGYWlsICgmbVBlcmZSZWNvcmRMb2NrKTsNCj4+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+IC0gICAgcmV0dXJuIFN0YXR1czsNCj4+IC0gIH0NCj4+IC0NCj4+IC0gIGlmIChU aW1lU3RhbXAgPT0gMCkgew0KPj4gLSAgICBUaW1lU3RhbXAgPSBHZXRQZXJmb3JtYW5jZUNvdW50 ZXIgKCk7DQo+PiAtICB9DQo+PiAtDQo+PiAtICBJbmRleCA9IEludGVybmFsU2VhcmNoRm9yR2F1 Z2VFbnRyeSAoSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBJZGVudGlmaWVyKTsNCj4+IC0gIGlmIChJ bmRleCA+PSBtR2F1Z2VEYXRhLT5OdW1iZXJPZkVudHJpZXMpIHsNCj4+IC0gICAgRWZpUmVsZWFz ZUxvY2sgKCZtUGVyZlJlY29yZExvY2spOw0KPj4gLSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4+IC0gIH0NCj4+IC0gIEdhdWdlRW50cnlFeEFycmF5ID0gKEdBVUdFX0RBVEFfRU5UUllfRVgg KikgKG1HYXVnZURhdGEgKyAxKTsNCj4+IC0gIEdhdWdlRW50cnlFeEFycmF5W0luZGV4XS5FbmRU aW1lU3RhbXAgPSBUaW1lU3RhbXA7DQo+PiAtDQo+PiAtICBFZmlSZWxlYXNlTG9jayAoJm1QZXJm UmVjb3JkTG9jayk7DQo+PiAtICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+PiArICByZXR1cm4gSW5z ZXJ0RnBkdE1lYXN1cmVtZW50IChGQUxTRSwgSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBUaW1lU3Rh bXAsIElkZW50aWZpZXIpOw0KPj4gIH0NCj4+DQo+PiAgLyoqDQo+PiAgICBSZXRyaWV2ZXMgYSBw cmV2aW91c2x5IGxvZ2dlZCBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudC4NCj4+ICAgIEl0IGNhbiBh bHNvIHJldHJpZXZlIHRoZSBsb2cgY3JlYXRlZCBieSBTdGFydEdhdWdlIGFuZCBFbmRHYXVnZSBv ZiBQRVJGT1JNQU5DRV9QUk9UT0NPTCwNCj4+ICAgIGFuZCB0aGVuIGFzc2lnbiB0aGUgSWRlbnRp ZmllciB3aXRoIDAuDQo+Pg0KPj4gLSAgUmV0cmlldmVzIHRoZSBwZXJmb3JtYW5jZSBsb2cgZW50 cnkgZnJvbSB0aGUgcGVyZm9ybWFuY2UgbG9nIHNwZWNpZmllZCBieSBMb2dFbnRyeUtleS4NCj4+ IC0gIElmIGl0IHN0YW5kcyBmb3IgYSB2YWxpZCBlbnRyeSwgdGhlbiBFRklfU1VDQ0VTUyBpcyBy ZXR1cm5lZCBhbmQNCj4+IC0gIEdhdWdlRGF0YUVudHJ5RXggc3RvcmVzIHRoZSBwb2ludGVyIHRv IHRoYXQgZW50cnkuDQo+PiAtDQo+PiAtICBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGlzIGFkZGVk IHRvIGF2b2lkIHJlbGVhc2luZyBsb2NrIGJlZm9yZSBlYWNoIHJldHVybiBzdGF0ZW1lbnQuDQo+ PiAtDQo+PiAtICBAcGFyYW0gIExvZ0VudHJ5S2V5ICAgICAgICAgICAgIFRoZSBrZXkgZm9yIHRo ZSBwcmV2aW91cyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZW50cnkuDQo+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIDAsIHRoZW4gdGhlIGZpcnN0IHBlcmZvcm1h bmNlIG1lYXN1cmVtZW50IGxvZyBlbnRyeSBpcyByZXRyaWV2ZWQuDQo+PiAtICBAcGFyYW0gIEdh dWdlRGF0YUVudHJ5RXggICAgICAgIFRoZSBpbmRpcmVjdCBwb2ludGVyIHRvIHRoZSBleHRlbmRl ZCBnYXVnZSBkYXRhIGVudHJ5IHNwZWNpZmllZCBieSBMb2dFbnRyeUtleQ0KPj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmV0cmlldmFsIGlzIHN1Y2Nlc3NmdWwu DQo+PiAtDQo+PiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBHdWFnZURh dGFFbnRyeUV4IGlzIHN1Y2Nlc3NmdWxseSBmb3VuZCBiYXNlZCBvbiBMb2dFbnRyeUtleS4NCj4+ IC0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIExvZ0VudHJ5S2V5IGlzIHRo ZSBsYXN0IGVudHJ5IChlcXVhbHMgdG8gdGhlIHRvdGFsIGVudHJ5IG51bWJlcikuDQo+PiAtICBA cmV0dmFsIEVGSV9JTlZBTElERV9QQVJBTUVURVIgIFRoZSBMb2dFbnRyeUtleSBpcyBub3QgYSB2 YWxpZCBlbnRyeSAoZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBlbnRyeSBudW1iZXIpLg0KPj4gLSAg QHJldHZhbCBFRklfSU5WQUxJREVfUEFSQU1FVEVSICBHYXVnZURhdGFFbnRyeUV4IGlzIE5VTEwu DQo+PiAtDQo+PiAtKiovDQo+PiAtRUZJX1NUQVRVUw0KPj4gLUVGSUFQSQ0KPj4gLUludGVybmFs R2V0R2F1Z2VFeCAoDQo+PiAtICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgIExvZ0VudHJ5S2V5 LA0KPj4gLSAgT1VUIEdBVUdFX0RBVEFfRU5UUllfRVggICAqKkdhdWdlRGF0YUVudHJ5RXgNCj4+ IC0gICkNCj4+IC17DQo+PiAtICBVSU5UTiAgICAgICAgICAgICAgIE51bWJlck9mRW50cmllczsN Cj4+IC0gIEdBVUdFX0RBVEFfRU5UUllfRVggKkdhdWdlRW50cnlFeEFycmF5Ow0KPj4gLQ0KPj4g LSAgTnVtYmVyT2ZFbnRyaWVzID0gKFVJTlROKSAobUdhdWdlRGF0YS0+TnVtYmVyT2ZFbnRyaWVz KTsNCj4+IC0gIGlmIChMb2dFbnRyeUtleSA+IE51bWJlck9mRW50cmllcykgew0KPj4gLSAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4gLSAgfQ0KPj4gLSAgaWYgKExvZ0VudHJ5 S2V5ID09IE51bWJlck9mRW50cmllcykgew0KPj4gLSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4+IC0gIH0NCj4+IC0NCj4+IC0gIEdhdWdlRW50cnlFeEFycmF5ID0gKEdBVUdFX0RBVEFfRU5U UllfRVggKikgKG1HYXVnZURhdGEgKyAxKTsNCj4+IC0NCj4+IC0gIGlmIChHYXVnZURhdGFFbnRy eUV4ID09IE5VTEwpIHsNCj4+IC0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+ IC0gIH0NCj4+IC0gICpHYXVnZURhdGFFbnRyeUV4ID0gJkdhdWdlRW50cnlFeEFycmF5W0xvZ0Vu dHJ5S2V5XTsNCj4+IC0NCj4+IC0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+IC19DQo+PiAtDQo+ PiAtLyoqDQo+PiAtICBSZXRyaWV2ZXMgYSBwcmV2aW91c2x5IGxvZ2dlZCBwZXJmb3JtYW5jZSBt ZWFzdXJlbWVudC4NCj4+IC0gIEl0IGNhbiBhbHNvIHJldHJpZXZlIHRoZSBsb2cgY3JlYXRlZCBi eSBTdGFydEdhdWdlIGFuZCBFbmRHYXVnZSBvZiBQRVJGT1JNQU5DRV9QUk9UT0NPTCwNCj4+IC0g IGFuZCB0aGVuIGFzc2lnbiB0aGUgSWRlbnRpZmllciB3aXRoIDAuDQo+PiArICAgICEhISBOb3Qg c3VwcG9ydCEhIQ0KPj4NCj4+ICAgIFJldHJpZXZlcyB0aGUgcGVyZm9ybWFuY2UgbG9nIGVudHJ5 IGZyb20gdGhlIHBlcmZvcm1hbmNlIGxvZyBzcGVjaWZpZWQgYnkgTG9nRW50cnlLZXkuDQo+PiAg ICBJZiBpdCBzdGFuZHMgZm9yIGEgdmFsaWQgZW50cnksIHRoZW4gRUZJX1NVQ0NFU1MgaXMgcmV0 dXJuZWQgYW5kDQo+PiAgICBHYXVnZURhdGFFbnRyeUV4IHN0b3JlcyB0aGUgcG9pbnRlciB0byB0 aGF0IGVudHJ5Lg0KPj4NCj4+IEBAIC0zNjIsMjIgKzEyMjAsMTEgQEAgRUZJQVBJDQo+PiAgR2V0 R2F1Z2VFeCAoDQo+PiAgICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgIExvZ0VudHJ5S2V5LA0K Pj4gICAgT1VUIEdBVUdFX0RBVEFfRU5UUllfRVggICAqKkdhdWdlRGF0YUVudHJ5RXgNCj4+ICAg ICkNCj4+ICB7DQo+PiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+IC0N Cj4+IC0gIFN0YXR1cyA9IEVmaUFjcXVpcmVMb2NrT3JGYWlsICgmbVBlcmZSZWNvcmRMb2NrKTsN Cj4+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+IC0gICAgcmV0dXJuIFN0YXR1czsN Cj4+IC0gIH0NCj4+IC0NCj4+IC0gIFN0YXR1cyA9IEludGVybmFsR2V0R2F1Z2VFeCAoTG9nRW50 cnlLZXksIEdhdWdlRGF0YUVudHJ5RXgpOw0KPj4gLQ0KPj4gLSAgRWZpUmVsZWFzZUxvY2sgKCZt UGVyZlJlY29yZExvY2spOw0KPj4gLQ0KPj4gLSAgcmV0dXJuIFN0YXR1czsNCj4+ICsgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+PiAgfQ0KPj4NCj4+ICAvKioNCj4+ICAgIEFkZHMgYSByZWNv cmQgYXQgdGhlIGVuZCBvZiB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgbG9nDQo+PiAgICB0 aGF0IHJlY29yZHMgdGhlIHN0YXJ0IHRpbWUgb2YgYSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudC4N Cj4+IEBAIC00NTIsMTAgKzEyOTksMTIgQEAgRW5kR2F1Z2UgKA0KPj4gIC8qKg0KPj4gICAgUmV0 cmlldmVzIGEgcHJldmlvdXNseSBsb2dnZWQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuDQo+PiAg ICBJdCBjYW4gYWxzbyByZXRyaWV2ZSB0aGUgbG9nIGNyZWF0ZWQgYnkgU3RhcnRHYXVnZUV4IGFu ZCBFbmRHYXVnZUV4IG9mIFBFUkZPUk1BTkNFX0VYX1BST1RPQ09MLA0KPj4gICAgYW5kIHRoZW4g ZWxpbWluYXRlIHRoZSBJZGVudGlmaWVyLg0KPj4NCj4+ICsgICAgISEhIE5vdCBzdXBwb3J0ISEh DQo+PiArDQo+PiAgICBSZXRyaWV2ZXMgdGhlIHBlcmZvcm1hbmNlIGxvZyBlbnRyeSBmcm9tIHRo ZSBwZXJmb3JtYW5jZSBsb2cgc3BlY2lmaWVkIGJ5IExvZ0VudHJ5S2V5Lg0KPj4gICAgSWYgaXQg c3RhbmRzIGZvciBhIHZhbGlkIGVudHJ5LCB0aGVuIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkIGFu ZA0KPj4gICAgR2F1Z2VEYXRhRW50cnkgc3RvcmVzIHRoZSBwb2ludGVyIHRvIHRoYXQgZW50cnku DQo+Pg0KPj4gICAgQHBhcmFtICBMb2dFbnRyeUtleSAgICAgICAgICAgICBUaGUga2V5IGZvciB0 aGUgcHJldmlvdXMgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgbG9nIGVudHJ5Lg0KPj4gQEAgLTQ3 NCw4MSArMTMyMywxMyBAQCBFRklBUEkNCj4+ICBHZXRHYXVnZSAoDQo+PiAgICBJTiAgVUlOVE4g ICAgICAgICAgICAgICBMb2dFbnRyeUtleSwNCj4+ICAgIE9VVCBHQVVHRV9EQVRBX0VOVFJZICAg ICoqR2F1Z2VEYXRhRW50cnkNCj4+ICAgICkNCj4+ICB7DQo+PiAtICBFRklfU1RBVFVTICAgICAg ICAgIFN0YXR1czsNCj4+IC0gIEdBVUdFX0RBVEFfRU5UUllfRVggKkdhdWdlRW50cnlFeDsNCj4+ IC0NCj4+IC0gIEdhdWdlRW50cnlFeCA9IE5VTEw7DQo+PiAtDQo+PiAtICBTdGF0dXMgPSBHZXRH YXVnZUV4IChMb2dFbnRyeUtleSwgJkdhdWdlRW50cnlFeCk7DQo+PiAtICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+PiAtICAgIHJldHVybiBTdGF0dXM7DQo+PiAtICB9DQo+PiAtDQo+PiAt ICBpZiAoR2F1Z2VEYXRhRW50cnkgPT0gTlVMTCkgew0KPj4gLSAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPj4gLSAgfQ0KPj4gLQ0KPj4gLSAgKkdhdWdlRGF0YUVudHJ5ID0gKEdB VUdFX0RBVEFfRU5UUlkgKikgR2F1Z2VFbnRyeUV4Ow0KPj4gLQ0KPj4gLSAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICB9DQo+Pg0KPj4gLS8q Kg0KPj4gLSAgRHVtcHMgYWxsIHRoZSBQRUkgcGVyZm9ybWFuY2UgbG9nIHRvIERYRSBwZXJmb3Jt YW5jZSBnYXVnZSBhcnJheS4NCj4+IC0NCj4+IC0gIFRoaXMgaW50ZXJuYWwgZnVuY3Rpb24gZHVt cHMgYWxsIHRoZSBQRUkgcGVyZm9ybWFuY2UgbG9nIHRvIHRoZSBEWEUgcGVyZm9ybWFuY2UgZ2F1 Z2UgYXJyYXkuDQo+PiAtICBJdCByZXRyaWV2ZXMgdGhlIG9wdGlvbmFsIEdVSUQgSE9CIGZvciBQ RUkgcGVyZm9ybWFuY2UgYW5kIHRoZW4gc2F2ZXMgdGhlIHBlcmZvcm1hbmNlIGRhdGENCj4+IC0g IHRvIERYRSBwZXJmb3JtYW5jZSBkYXRhIHN0cnVjdHVyZXMuDQo+PiAtDQo+PiAtKiovDQo+PiAt Vk9JRA0KPj4gLUludGVybmFsR2V0UGVpUGVyZm9ybWFuY2UgKA0KPj4gLSAgVk9JRA0KPj4gLSAg KQ0KPj4gLXsNCj4+IC0gIEVGSV9IT0JfR1VJRF9UWVBFICAgICAgICAgICAgICAgICAqR3VpZEhv YjsNCj4+IC0gIFBFSV9QRVJGT1JNQU5DRV9MT0dfSEVBREVSICAgICAgICAqTG9nSG9iOw0KPj4g LSAgUEVJX1BFUkZPUk1BTkNFX0xPR19FTlRSWSAgICAgICAgICpMb2dFbnRyeUFycmF5Ow0KPj4g LSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpMb2dJZEFycmF5Ow0KPj4gLSAg R0FVR0VfREFUQV9FTlRSWV9FWCAgICAgICAgICAgICAgICpHYXVnZUVudHJ5RXhBcnJheTsNCj4+ IC0gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+IC0gIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkVudHJpZXM7DQo+PiAtDQo+PiAt ICBOdW1iZXJPZkVudHJpZXMgPSAwOw0KPj4gLSAgR2F1Z2VFbnRyeUV4QXJyYXkgPSAoR0FVR0Vf REFUQV9FTlRSWV9FWCAqKSAobUdhdWdlRGF0YSArIDEpOw0KPj4gLQ0KPj4gLSAgLy8NCj4+IC0g IC8vIER1bXAgUEVJIExvZyBFbnRyaWVzIHRvIERYRSBHdWFnZSBEYXRhIHN0cnVjdHVyZS4NCj4+ IC0gIC8vDQo+PiAtICBHdWlkSG9iID0gR2V0Rmlyc3RHdWlkSG9iICgmZ1BlcmZvcm1hbmNlUHJv dG9jb2xHdWlkKTsNCj4+IC0gIGlmIChHdWlkSG9iICE9IE5VTEwpIHsNCj4+IC0gICAgTG9nSG9i ICAgICAgICAgID0gR0VUX0dVSURfSE9CX0RBVEEgKEd1aWRIb2IpOw0KPj4gLSAgICBMb2dFbnRy eUFycmF5ICAgPSAoUEVJX1BFUkZPUk1BTkNFX0xPR19FTlRSWSAqKSAoTG9nSG9iICsgMSk7DQo+ PiAtDQo+PiAtICAgIE51bWJlck9mRW50cmllcyA9IExvZ0hvYi0+TnVtYmVyT2ZFbnRyaWVzOw0K Pj4gLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkVudHJpZXM7IEluZGV4Kysp IHsNCj4+IC0gICAgICBHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0uSGFuZGxlICAgICAgICAgPSBM b2dFbnRyeUFycmF5W0luZGV4XS5IYW5kbGU7DQo+PiAtICAgICAgQXNjaWlTdHJDcHlTIChHYXVn ZUVudHJ5RXhBcnJheVtJbmRleF0uVG9rZW4sICBEWEVfUEVSRk9STUFOQ0VfU1RSSU5HX1NJWkUs IExvZ0VudHJ5QXJyYXlbSW5kZXhdLlRva2VuKTsNCj4+IC0gICAgICBBc2NpaVN0ckNweVMgKEdh dWdlRW50cnlFeEFycmF5W0luZGV4XS5Nb2R1bGUsIERYRV9QRVJGT1JNQU5DRV9TVFJJTkdfU0la RSwgTG9nRW50cnlBcnJheVtJbmRleF0uTW9kdWxlKTsNCj4+IC0gICAgICBHYXVnZUVudHJ5RXhB cnJheVtJbmRleF0uU3RhcnRUaW1lU3RhbXAgPSBMb2dFbnRyeUFycmF5W0luZGV4XS5TdGFydFRp bWVTdGFtcDsNCj4+IC0gICAgICBHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0uRW5kVGltZVN0YW1w ICAgPSBMb2dFbnRyeUFycmF5W0luZGV4XS5FbmRUaW1lU3RhbXA7DQo+PiAtICAgICAgR2F1Z2VF bnRyeUV4QXJyYXlbSW5kZXhdLklkZW50aWZpZXIgICAgID0gMDsNCj4+IC0gICAgfQ0KPj4gLQ0K Pj4gLSAgICBHdWlkSG9iID0gR2V0Rmlyc3RHdWlkSG9iICgmZ1BlcmZvcm1hbmNlRXhQcm90b2Nv bEd1aWQpOw0KPj4gLSAgICBpZiAoR3VpZEhvYiAhPSBOVUxMKSB7DQo+PiAtICAgICAgTG9nSWRB cnJheSAgICA9IEdFVF9HVUlEX0hPQl9EQVRBIChHdWlkSG9iKTsNCj4+IC0gICAgICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkVudHJpZXM7IEluZGV4KyspIHsNCj4+IC0gICAgICAg IEdhdWdlRW50cnlFeEFycmF5W0luZGV4XS5JZGVudGlmaWVyICAgPSBMb2dJZEFycmF5W0luZGV4 XTsNCj4+IC0gICAgICB9DQo+PiAtICAgIH0NCj4+IC0gIH0NCj4+IC0gIG1HYXVnZURhdGEtPk51 bWJlck9mRW50cmllcyA9IE51bWJlck9mRW50cmllczsNCj4+IC19DQo+Pg0KPj4gIC8qKg0KPj4g ICAgVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGluaXRpYWxpemVzIFBlcmZvcm1hbmNlIGluZnJh c3RydWN0dXJlIGZvciBEWEUgcGhhc2UuDQo+Pg0KPj4gICAgVGhlIGNvbnN0cnVjdG9yIGZ1bmN0 aW9uIHB1Ymxpc2hlcyBQZXJmb3JtYW5jZSBhbmQgUGVyZm9ybWFuY2VFeCBwcm90b2NvbCwgYWxs b2NhdGVzIG1lbW9yeSB0byBsb2cgRFhFIHBlcmZvcm1hbmNlDQo+PiBAQCAtNTY3LDQwICsxMzQ4 LDUzIEBAIER4ZUNvcmVQZXJmb3JtYW5jZUxpYkNvbnN0cnVjdG9yICgNCj4+ICAgIElOIEVGSV9I QU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPj4gICAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5 c3RlbVRhYmxlDQo+PiAgICApDQo+PiAgew0KPj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+PiArICBFRklfSEFORExFICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4+ICsg IEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgUmVhZHlUb0Jvb3RFdmVudDsNCj4+ICAgIFBFUkZP Uk1BTkNFX1BST1BFUlRZICAgICAgKlBlcmZvcm1hbmNlUHJvcGVydHk7DQo+Pg0KPj4gLQ0KPj4g ICAgaWYgKCFQZXJmb3JtYW5jZU1lYXN1cmVtZW50RW5hYmxlZCAoKSkgew0KPj4gICAgICAvLw0K Pj4gICAgICAvLyBEbyBub3QgaW5pdGlhbGl6ZSBwZXJmb3JtYW5jZSBpbmZyYXN0cnVjdHVyZSBp ZiBub3QgcmVxdWlyZWQuDQo+PiAgICAgIC8vDQo+PiAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4+ICAgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBEdW1wIG5vcm1hbCBQRUkgcGVyZm9y bWFuY2UgcmVjb3Jkcw0KPj4gKyAgLy8NCj4+ICsgIEludGVybmFsR2V0UGVpUGVyZm9ybWFuY2Ug KEdldEhvYkxpc3QoKSk7DQo+PiArDQo+PiAgICAvLw0KPj4gLSAgLy8gSW5zdGFsbCB0aGUgcHJv dG9jb2wgaW50ZXJmYWNlcy4NCj4+ICsgIC8vIEluc3RhbGwgdGhlIHByb3RvY29sIGludGVyZmFj ZXMgZm9yIERYRSBwZXJmb3JtYW5jZSBsaWJyYXJ5IGluc3RhbmNlLg0KPj4gICAgLy8NCj4+ICsg IEhhbmRsZSA9IE5VTEw7DQo+PiAgICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3Rv Y29sSW50ZXJmYWNlcyAoDQo+PiAtICAgICAgICAgICAgICAgICAgJm1IYW5kbGUsDQo+PiArICAg ICAgICAgICAgICAgICAgJkhhbmRsZSwNCj4+ICAgICAgICAgICAgICAgICAgICAmZ1BlcmZvcm1h bmNlUHJvdG9jb2xHdWlkLA0KPj4gICAgICAgICAgICAgICAgICAgICZtUGVyZm9ybWFuY2VJbnRl cmZhY2UsDQo+PiAgICAgICAgICAgICAgICAgICAgJmdQZXJmb3JtYW5jZUV4UHJvdG9jb2xHdWlk LA0KPj4gICAgICAgICAgICAgICAgICAgICZtUGVyZm9ybWFuY2VFeEludGVyZmFjZSwNCj4+ICAg ICAgICAgICAgICAgICAgICBOVUxMDQo+PiAgICAgICAgICAgICAgICAgICAgKTsNCj4+ICAgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+Pg0KPj4gLSAgbU1heEdhdWdlUmVjb3JkcyA9IElO SVRfRFhFX0dBVUdFX0RBVEFfRU5UUklFUyArIChVSU5UMTYpIChQY2RHZXQxNiAoUGNkTWF4UGVp UGVyZm9ybWFuY2VMb2dFbnRyaWVzMTYpICE9IDAgPw0KPj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQY2RHZXQxNiAoUGNkTWF4 UGVpUGVyZm9ybWFuY2VMb2dFbnRyaWVzMTYpIDoNCj4+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGNkR2V0OCAoUGNkTWF4UGVp UGVyZm9ybWFuY2VMb2dFbnRyaWVzKSk7DQo+PiAtDQo+PiAtICBtR2F1Z2VEYXRhID0gQWxsb2Nh dGVaZXJvUG9vbCAoc2l6ZW9mIChHQVVHRV9EQVRBX0hFQURFUikgKyAoc2l6ZW9mIChHQVVHRV9E QVRBX0VOVFJZX0VYKSAqIG1NYXhHYXVnZVJlY29yZHMpKTsNCj4+IC0gIEFTU0VSVCAobUdhdWdl RGF0YSAhPSBOVUxMKTsNCj4+ICsgIC8vDQo+PiArICAvLyBSZWdpc3RlciBSZWFkeVRvQm9vdCBl dmVudCB0byByZXBvcnQgU3RhdHVzQ29kZSBkYXRhDQo+PiArICAvLw0KPj4gKyAgU3RhdHVzID0g Z0JTLT5DcmVhdGVFdmVudEV4ICgNCj4+ICsgICAgICAgICAgICAgICAgICBFVlRfTk9USUZZX1NJ R05BTCwNCj4+ICsgICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+PiArICAgICAgICAg ICAgICAgICAgUmVwb3J0RnBkdFJlY29yZEJ1ZmZlciwNCj4+ICsgICAgICAgICAgICAgICAgICBO VUxMLA0KPj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRXZlbnRSZWFkeVRvQm9vdEd1aWQsDQo+ PiArICAgICAgICAgICAgICAgICAgJlJlYWR5VG9Cb290RXZlbnQNCj4+ICsgICAgICAgICAgICAg ICAgICApOw0KPj4NCj4+IC0gIEludGVybmFsR2V0UGVpUGVyZm9ybWFuY2UgKCk7DQo+PiArICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPj4NCj4+ICAgIFN0YXR1cyA9IEVmaUdldFN5c3Rl bUNvbmZpZ3VyYXRpb25UYWJsZSAoJmdQZXJmb3JtYW5jZVByb3RvY29sR3VpZCwgKFZPSUQgKiop ICZQZXJmb3JtYW5jZVByb3BlcnR5KTsNCj4+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4+ICAgICAgLy8NCj4+ICAgICAgLy8gSW5zdGFsbCBjb25maWd1cmF0aW9uIHRhYmxlIGZvciBw ZXJmb3JtYW5jZSBwcm9wZXJ0eS4NCj4+IEBAIC02NTEsMTkgKzE0NDUsMTkgQEAgU3RhcnRQZXJm b3JtYW5jZU1lYXN1cmVtZW50RXggKA0KPj4gICAgSU4gQ09OU1QgQ0hBUjggICpNb2R1bGUsICBP UFRJT05BTA0KPj4gICAgSU4gVUlOVDY0ICAgICAgIFRpbWVTdGFtcCwNCj4+ICAgIElOIFVJTlQz MiAgICAgICBJZGVudGlmaWVyDQo+PiAgICApDQo+PiAgew0KPj4gLSAgcmV0dXJuIChSRVRVUk5f U1RBVFVTKSBTdGFydEdhdWdlRXggKEhhbmRsZSwgVG9rZW4sIE1vZHVsZSwgVGltZVN0YW1wLCBJ ZGVudGlmaWVyKTsNCj4+ICsgIHJldHVybiBJbnNlcnRGcGR0TWVhc3VyZW1lbnQgKFRSVUUsIEhh bmRsZSwgVG9rZW4sIE1vZHVsZSwgVGltZVN0YW1wLCBJZGVudGlmaWVyKTsNCj4+ICB9DQo+Pg0K Pj4gIC8qKg0KPj4gICAgU2VhcmNoZXMgdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGxvZyBm cm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvZw0KPj4gICAgZm9yIHRoZSBmaXJzdCBtYXRjaGlu ZyByZWNvcmQgdGhhdCBjb250YWlucyBhIHplcm8gZW5kIHRpbWUgYW5kIGZpbGxzIGluIGEgdmFs aWQgZW5kIHRpbWUuDQo+Pg0KPj4gICAgU2VhcmNoZXMgdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVt ZW50IGxvZyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvZw0KPj4gLSAgZm9yIHRoZSBmaXJz dCByZWNvcmQgdGhhdCBtYXRjaGVzIEhhbmRsZSwgVG9rZW4gYW5kIE1vZHVsZSBhbmQgaGFzIGFu IGVuZCB0aW1lIHZhbHVlIG9mIHplcm8uDQo+PiArICBmb3IgdGhlIGZpcnN0IHJlY29yZCB0aGF0 IG1hdGNoZXMgSGFuZGxlLCBUb2tlbiwgTW9kdWxlIGFuZCBJZGVudGlmaWVyIGFuZCBoYXMgYW4g ZW5kIHRpbWUgdmFsdWUgb2YgemVyby4NCj4+ICAgIElmIHRoZSByZWNvcmQgY2FuIG5vdCBiZSBm b3VuZCB0aGVuIHJldHVybiBSRVRVUk5fTk9UX0ZPVU5ELg0KPj4gICAgSWYgdGhlIHJlY29yZCBp cyBmb3VuZCBhbmQgVGltZVN0YW1wIGlzIG5vdCB6ZXJvLA0KPj4gICAgdGhlbiB0aGUgZW5kIHRp bWUgaW4gdGhlIHJlY29yZCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5 IFRpbWVTdGFtcC4NCj4+ICAgIElmIHRoZSByZWNvcmQgaXMgZm91bmQgYW5kIFRpbWVTdGFtcCBp cyB6ZXJvLCB0aGVuIHRoZSBlbmQgdGltZSBpbiB0aGUgbWF0Y2hpbmcgcmVjb3JkDQo+PiAgICBp cyBmaWxsZWQgaW4gd2l0aCB0aGUgY3VycmVudCB0aW1lIHN0YW1wIHZhbHVlLg0KPj4gQEAgLTY5 MCwxOCArMTQ4NCwyMCBAQCBFbmRQZXJmb3JtYW5jZU1lYXN1cmVtZW50RXggKA0KPj4gICAgSU4g Q09OU1QgQ0hBUjggICpNb2R1bGUsICBPUFRJT05BTA0KPj4gICAgSU4gVUlOVDY0ICAgICAgIFRp bWVTdGFtcCwNCj4+ICAgIElOIFVJTlQzMiAgICAgICBJZGVudGlmaWVyDQo+PiAgICApDQo+PiAg ew0KPj4gLSAgcmV0dXJuIChSRVRVUk5fU1RBVFVTKSBFbmRHYXVnZUV4IChIYW5kbGUsIFRva2Vu LCBNb2R1bGUsIFRpbWVTdGFtcCwgSWRlbnRpZmllcik7DQo+PiArICByZXR1cm4gSW5zZXJ0RnBk dE1lYXN1cmVtZW50IChGQUxTRSwgSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBUaW1lU3RhbXAsIElk ZW50aWZpZXIpOw0KPj4gIH0NCj4+DQo+PiAgLyoqDQo+PiAgICBBdHRlbXB0cyB0byByZXRyaWV2 ZSBhIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGxvZyBlbnRyeSBmcm9tIHRoZSBwZXJmb3JtYW5j ZSBtZWFzdXJlbWVudCBsb2cuDQo+PiAgICBJdCBjYW4gYWxzbyByZXRyaWV2ZSB0aGUgbG9nIGNy ZWF0ZWQgYnkgU3RhcnRQZXJmb3JtYW5jZU1lYXN1cmVtZW50IGFuZCBFbmRQZXJmb3JtYW5jZU1l YXN1cmVtZW50LA0KPj4gICAgYW5kIHRoZW4gYXNzaWduIHRoZSBJZGVudGlmaWVyIHdpdGggMC4N Cj4+DQo+PiArICAgICEhISBOb3Qgc3VwcG9ydCEhIQ0KPj4gKw0KPj4gICAgQXR0ZW1wdHMgdG8g cmV0cmlldmUgdGhlIHBlcmZvcm1hbmNlIGxvZyBlbnRyeSBzcGVjaWZpZWQgYnkgTG9nRW50cnlL ZXkuICBJZiBMb2dFbnRyeUtleSBpcw0KPj4gICAgemVybyBvbiBlbnRyeSwgdGhlbiBhbiBhdHRl bXB0IGlzIG1hZGUgdG8gcmV0cmlldmUgdGhlIGZpcnN0IGVudHJ5IGZyb20gdGhlIHBlcmZvcm1h bmNlIGxvZywNCj4+ICAgIGFuZCB0aGUga2V5IGZvciB0aGUgc2Vjb25kIGVudHJ5IGluIHRoZSBs b2cgaXMgcmV0dXJuZWQuICBJZiB0aGUgcGVyZm9ybWFuY2UgbG9nIGlzIGVtcHR5LA0KPj4gICAg dGhlbiBubyBlbnRyeSBpcyByZXRyaWV2ZWQgYW5kIHplcm8gaXMgcmV0dXJuZWQuICBJZiBMb2dF bnRyeUtleSBpcyBub3QgemVybywgdGhlbiB0aGUgcGVyZm9ybWFuY2UNCj4+ICAgIGxvZyBlbnRy eSBhc3NvY2lhdGVkIHdpdGggTG9nRW50cnlLZXkgaXMgcmV0cmlldmVkLCBhbmQgdGhlIGtleSBm b3IgdGhlIG5leHQgZW50cnkgaW4gdGhlIGxvZyBpcw0KPj4gQEAgLTcyOSw2MyArMTUyNSwyOSBA QCBFbmRQZXJmb3JtYW5jZU1lYXN1cmVtZW50RXggKA0KPj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiZWluZyBtZWFzdXJlZC4NCj4+ICAgIEBwYXJhbSAgU3RhcnRUaW1lU3Rh bXAgICAgICAgICAgUG9pbnRlciB0byB0aGUgNjQtYml0IHRpbWUgc3RhbXAgdGhhdCB3YXMgcmVj b3JkZWQgd2hlbiB0aGUgbWVhc3VyZW1lbnQNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2FzIHN0YXJ0ZWQuDQo+PiAgICBAcGFyYW0gIEVuZFRpbWVTdGFtcCAgICAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIDY0LWJpdCB0aW1lIHN0YW1wIHRoYXQgd2FzIHJlY29yZGVkIHdo ZW4gdGhlIG1lYXN1cmVtZW50DQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdhcyBlbmRlZC4NCj4+IC0gIEBwYXJhbSAgSWRlbnRpZmllciAgICAgICAgICAgICAgUG9pbnRl ciB0byB0aGUgMzItYml0IGlkZW50aWZpZXIgdGhhdCB3YXMgcmVjb3JkZWQuDQo+PiArICBAcGFy YW0gIElkZW50aWZpZXIgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIDMyLWJpdCBpZGVudGlm aWVyIHRoYXQgd2FzIHJlY29yZGVkIHdoZW4gdGhlIG1lYXN1cmVtZW50DQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBlbmRlZC4NCj4+DQo+PiAgICBAcmV0dXJuIFRo ZSBrZXkgZm9yIHRoZSBuZXh0IHBlcmZvcm1hbmNlIGxvZyBlbnRyeSAoaW4gZ2VuZXJhbCBjYXNl KS4NCj4+DQo+PiAgKiovDQo+PiAgVUlOVE4NCj4+ICBFRklBUEkNCj4+ICBHZXRQZXJmb3JtYW5j ZU1lYXN1cmVtZW50RXggKA0KPj4gLSAgSU4gIFVJTlROICAgICAgIExvZ0VudHJ5S2V5LA0KPj4g KyAgSU4gIFVJTlROICAgICAgIExvZ0VudHJ5S2V5LA0KPj4gICAgT1VUIENPTlNUIFZPSUQgICoq SGFuZGxlLA0KPj4gICAgT1VUIENPTlNUIENIQVI4ICoqVG9rZW4sDQo+PiAgICBPVVQgQ09OU1Qg Q0hBUjggKipNb2R1bGUsDQo+PiAgICBPVVQgVUlOVDY0ICAgICAgKlN0YXJ0VGltZVN0YW1wLA0K Pj4gICAgT1VUIFVJTlQ2NCAgICAgICpFbmRUaW1lU3RhbXAsDQo+PiAgICBPVVQgVUlOVDMyICAg ICAgKklkZW50aWZpZXINCj4+ICAgICkNCj4+ICB7DQo+PiAtICBFRklfU1RBVFVTICAgICAgICAg ICBTdGF0dXM7DQo+PiAtICBHQVVHRV9EQVRBX0VOVFJZX0VYICAqR2F1Z2VEYXRhOw0KPj4gLQ0K Pj4gLSAgR2F1Z2VEYXRhID0gTlVMTDsNCj4+IC0NCj4+IC0gIEFTU0VSVCAoSGFuZGxlICE9IE5V TEwpOw0KPj4gLSAgQVNTRVJUIChUb2tlbiAhPSBOVUxMKTsNCj4+IC0gIEFTU0VSVCAoTW9kdWxl ICE9IE5VTEwpOw0KPj4gLSAgQVNTRVJUIChTdGFydFRpbWVTdGFtcCAhPSBOVUxMKTsNCj4+IC0g IEFTU0VSVCAoRW5kVGltZVN0YW1wICE9IE5VTEwpOw0KPj4gLSAgQVNTRVJUIChJZGVudGlmaWVy ICE9IE5VTEwpOw0KPj4gLQ0KPj4gLSAgU3RhdHVzID0gR2V0R2F1Z2VFeCAoTG9nRW50cnlLZXkr KywgJkdhdWdlRGF0YSk7DQo+PiAtDQo+PiAtICAvLw0KPj4gLSAgLy8gTWFrZSBzdXJlIHRoYXQg TG9nRW50cnlLZXkgaXMgYSB2YWxpZCBsb2cgZW50cnkga2V5LA0KPj4gLSAgLy8NCj4+IC0gIEFT U0VSVCAoU3RhdHVzICE9IEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+PiAtDQo+PiAtICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiAtICAgIC8vDQo+PiAtICAgIC8vIFRoZSBMb2dFbnRy eUtleSBpcyB0aGUgbGFzdCBlbnRyeSAoZXF1YWxzIHRvIHRoZSB0b3RhbCBlbnRyeSBudW1iZXIp Lg0KPj4gLSAgICAvLw0KPj4gLSAgICByZXR1cm4gMDsNCj4+IC0gIH0NCj4+IC0NCj4+IC0gIEFT U0VSVCAoR2F1Z2VEYXRhICE9IE5VTEwpOw0KPj4gLQ0KPj4gLSAgKkhhbmRsZSAgICAgICAgID0g KFZPSUQgKikgKFVJTlROKSBHYXVnZURhdGEtPkhhbmRsZTsNCj4+IC0gICpUb2tlbiAgICAgICAg ICA9IEdhdWdlRGF0YS0+VG9rZW47DQo+PiAtICAqTW9kdWxlICAgICAgICAgPSBHYXVnZURhdGEt Pk1vZHVsZTsNCj4+IC0gICpTdGFydFRpbWVTdGFtcCA9IEdhdWdlRGF0YS0+U3RhcnRUaW1lU3Rh bXA7DQo+PiAtICAqRW5kVGltZVN0YW1wICAgPSBHYXVnZURhdGEtPkVuZFRpbWVTdGFtcDsNCj4+ IC0gICpJZGVudGlmaWVyICAgICA9IEdhdWdlRGF0YS0+SWRlbnRpZmllcjsNCj4+IC0NCj4+IC0g IHJldHVybiBMb2dFbnRyeUtleTsNCj4+ICsgIHJldHVybiAwOw0KPj4gIH0NCj4+DQo+PiAgLyoq DQo+PiAgICBBZGRzIGEgcmVjb3JkIGF0IHRoZSBlbmQgb2YgdGhlIHBlcmZvcm1hbmNlIG1lYXN1 cmVtZW50IGxvZw0KPj4gICAgdGhhdCByZWNvcmRzIHRoZSBzdGFydCB0aW1lIG9mIGEgcGVyZm9y bWFuY2UgbWVhc3VyZW1lbnQuDQo+PiBAQCAtODE2LDExICsxNTc4LDExIEBAIFN0YXJ0UGVyZm9y bWFuY2VNZWFzdXJlbWVudCAoDQo+PiAgICBJTiBDT05TVCBDSEFSOCAgKlRva2VuLCAgIE9QVElP TkFMDQo+PiAgICBJTiBDT05TVCBDSEFSOCAgKk1vZHVsZSwgIE9QVElPTkFMDQo+PiAgICBJTiBV SU5UNjQgICAgICAgVGltZVN0YW1wDQo+PiAgICApDQo+PiAgew0KPj4gLSAgcmV0dXJuIFN0YXJ0 UGVyZm9ybWFuY2VNZWFzdXJlbWVudEV4IChIYW5kbGUsIFRva2VuLCBNb2R1bGUsIFRpbWVTdGFt cCwgMCk7DQo+PiArICByZXR1cm4gSW5zZXJ0RnBkdE1lYXN1cmVtZW50IChUUlVFLCBIYW5kbGUs IFRva2VuLCBNb2R1bGUsIFRpbWVTdGFtcCwgMCk7DQo+PiAgfQ0KPj4NCj4+ICAvKioNCj4+ICAg IFNlYXJjaGVzIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZnJvbSB0aGUgYmVnaW5u aW5nIG9mIHRoZSBsb2cNCj4+ICAgIGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcgcmVjb3JkIHRoYXQg Y29udGFpbnMgYSB6ZXJvIGVuZCB0aW1lIGFuZCBmaWxscyBpbiBhIHZhbGlkIGVuZCB0aW1lLg0K Pj4gQEAgLTg1MiwxOCArMTYxNCwyMCBAQCBFbmRQZXJmb3JtYW5jZU1lYXN1cmVtZW50ICgNCj4+ ICAgIElOIENPTlNUIENIQVI4ICAqVG9rZW4sICAgT1BUSU9OQUwNCj4+ICAgIElOIENPTlNUIENI QVI4ICAqTW9kdWxlLCAgT1BUSU9OQUwNCj4+ICAgIElOIFVJTlQ2NCAgICAgICBUaW1lU3RhbXAN Cj4+ICAgICkNCj4+ICB7DQo+PiAtICByZXR1cm4gRW5kUGVyZm9ybWFuY2VNZWFzdXJlbWVudEV4 IChIYW5kbGUsIFRva2VuLCBNb2R1bGUsIFRpbWVTdGFtcCwgMCk7DQo+PiArICByZXR1cm4gSW5z ZXJ0RnBkdE1lYXN1cmVtZW50IChGQUxTRSwgSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBUaW1lU3Rh bXAsIDApOw0KPj4gIH0NCj4+DQo+PiAgLyoqDQo+PiAgICBBdHRlbXB0cyB0byByZXRyaWV2ZSBh IHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGxvZyBlbnRyeSBmcm9tIHRoZSBwZXJmb3JtYW5jZSBt ZWFzdXJlbWVudCBsb2cuDQo+PiAgICBJdCBjYW4gYWxzbyByZXRyaWV2ZSB0aGUgbG9nIGNyZWF0 ZWQgYnkgU3RhcnRQZXJmb3JtYW5jZU1lYXN1cmVtZW50RXggYW5kIEVuZFBlcmZvcm1hbmNlTWVh c3VyZW1lbnRFeCwNCj4+ICAgIGFuZCB0aGVuIGVsaW1pbmF0ZSB0aGUgSWRlbnRpZmllci4NCj4+ DQo+PiArICAhISEgTm90IHN1cHBvcnQhISENCj4+ICsNCj4+ICAgIEF0dGVtcHRzIHRvIHJldHJp ZXZlIHRoZSBwZXJmb3JtYW5jZSBsb2cgZW50cnkgc3BlY2lmaWVkIGJ5IExvZ0VudHJ5S2V5LiAg SWYgTG9nRW50cnlLZXkgaXMNCj4+ICAgIHplcm8gb24gZW50cnksIHRoZW4gYW4gYXR0ZW1wdCBp cyBtYWRlIHRvIHJldHJpZXZlIHRoZSBmaXJzdCBlbnRyeSBmcm9tIHRoZSBwZXJmb3JtYW5jZSBs b2csDQo+PiAgICBhbmQgdGhlIGtleSBmb3IgdGhlIHNlY29uZCBlbnRyeSBpbiB0aGUgbG9nIGlz IHJldHVybmVkLiAgSWYgdGhlIHBlcmZvcm1hbmNlIGxvZyBpcyBlbXB0eSwNCj4+ICAgIHRoZW4g bm8gZW50cnkgaXMgcmV0cmlldmVkIGFuZCB6ZXJvIGlzIHJldHVybmVkLiAgSWYgTG9nRW50cnlL ZXkgaXMgbm90IHplcm8sIHRoZW4gdGhlIHBlcmZvcm1hbmNlDQo+PiAgICBsb2cgZW50cnkgYXNz b2NpYXRlZCB3aXRoIExvZ0VudHJ5S2V5IGlzIHJldHJpZXZlZCwgYW5kIHRoZSBrZXkgZm9yIHRo ZSBuZXh0IGVudHJ5IGluIHRoZSBsb2cgaXMNCj4+IEBAIC05MDUsMTIgKzE2NjksMTEgQEAgR2V0 UGVyZm9ybWFuY2VNZWFzdXJlbWVudCAoDQo+PiAgICBPVVQgQ09OU1QgQ0hBUjggKipNb2R1bGUs DQo+PiAgICBPVVQgVUlOVDY0ICAgICAgKlN0YXJ0VGltZVN0YW1wLA0KPj4gICAgT1VUIFVJTlQ2 NCAgICAgICpFbmRUaW1lU3RhbXANCj4+ICAgICkNCj4+ICB7DQo+PiAtICBVSU5UMzIgSWRlbnRp ZmllcjsNCj4+IC0gIHJldHVybiBHZXRQZXJmb3JtYW5jZU1lYXN1cmVtZW50RXggKExvZ0VudHJ5 S2V5LCBIYW5kbGUsIFRva2VuLCBNb2R1bGUsIFN0YXJ0VGltZVN0YW1wLCBFbmRUaW1lU3RhbXAs ICZJZGVudGlmaWVyKTsNCj4+ICsgIHJldHVybiAwOw0KPj4gIH0NCj4+DQo+PiAgLyoqDQo+PiAg ICBSZXR1cm5zIFRSVUUgaWYgdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IG1hY3JvcyBhcmUg ZW5hYmxlZC4NCj4+DQo+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ29y ZVBlcmZvcm1hbmNlTGliL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi5pbmYgYi9NZGVNb2R1bGVQa2cv TGlicmFyeS9EeGVDb3JlUGVyZm9ybWFuY2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliLmluZg0K Pj4gaW5kZXggNWI4OWNlMi4uNzFjMTgxZiAxMDA2NDQNCj4+IC0tLSBhL01kZU1vZHVsZVBrZy9M aWJyYXJ5L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi9EeGVDb3JlUGVyZm9ybWFuY2VMaWIuaW5mDQo+ PiArKysgYi9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFuY2VMaWIvRHhlQ29y ZVBlcmZvcm1hbmNlTGliLmluZg0KPj4gQEAgLTcsMTEgKzcsMTEgQEANCj4+ICAjICBJdCBpbml0 aWFsaXplcyBEWEUgcGhhc2UgcGVyZm9ybWFuY2UgbG9nZ2luZyBieSBwdWJsaXNoaW5nIHRoZSBQ ZXJmb3JtYW5jZSBhbmQgUGVyZm9ybWFuY2VFeCBQcm90b2NvbCwNCj4+ICAjICB3aGljaCBpcyBj b25zdW1lZCBieSBEeGVQZXJmb3JtYW5jZUxpYiB0byBsb2dnaW5nIHBlcmZvcm1hbmNlIGRhdGEg aW4gRFhFIHBoYXNlLg0KPj4gICMgIFRoaXMgbGlicmFyeSBpcyBtYWlubHkgdXNlZCBieSBEeGVD b3JlIHRvIHN0YXJ0IHBlcmZvcm1hbmNlIGxvZ2dpbmcgdG8gZW5zdXJlIHRoYXQNCj4+ICAjICBQ ZXJmb3JtYW5jZSBhbmQgUGVyZm9ybWFuY2VFeCBQcm90b2NvbCBhcmUgaW5zdGFsbGVkIGF0IHRo ZSB2ZXJ5IGJlZ2lubmluZyBvZiBEWEUgcGhhc2UuDQo+PiAgIw0KPj4gLSMgIENvcHlyaWdodCAo YykgMjAwNiAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4+ICsjICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+PiAgIyAoQykgQ29weXJpZ2h0IDIwMTYgSGV3bGV0 dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+PiAgIyAgVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPj4gICMgIGFyZSBsaWNlbnNlZCBh bmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBC U0QgTGljZW5zZQ0KPj4gICMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAg VGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4+ICAjICBodHRw Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+PiBAQCAtNDgsMjcg KzQ4LDM5IEBADQo+Pg0KPj4NCj4+ICBbTGlicmFyeUNsYXNzZXNdDQo+PiAgICBNZW1vcnlBbGxv Y2F0aW9uTGliDQo+PiAgICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4+ICsgIFVlZmlSdW50 aW1lU2VydmljZXNUYWJsZUxpYg0KPj4gICAgUGNkTGliDQo+PiAgICBUaW1lckxpYg0KPj4gICAg QmFzZU1lbW9yeUxpYg0KPj4gICAgQmFzZUxpYg0KPj4gICAgSG9iTGliDQo+PiAgICBEZWJ1Z0xp Yg0KPj4gICAgVWVmaUxpYg0KPj4gKyAgUmVwb3J0U3RhdHVzQ29kZUxpYg0KPj4gKyAgRHhlU2Vy dmljZXNMaWINCj4+ICsgIFBlQ29mZkdldEVudHJ5UG9pbnRMaWINCj4+ICsNCj4+ICtbUHJvdG9j b2xzXQ0KPj4gKyAgZ0VmaVNtbUNvbW11bmljYXRpb25Qcm90b2NvbEd1aWQgICAgICAgICAgICAg ICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPj4NCj4+DQo+PiAgW0d1aWRzXQ0KPj4gICAgIyMgU09N RVRJTUVTX0NPTlNVTUVTICAgIyMgSE9CDQo+PiAgICAjIyBQUk9EVUNFUyAgICAgICAgICAgICAj IyBVTkRFRklORUQgIyBJbnN0YWxsIHByb3RvY29sDQo+PiAgICAjIyBQUk9EVUNFUyAgICAgICAg ICAgICAjIyBTeXN0ZW1UYWJsZQ0KPj4gICAgZ1BlcmZvcm1hbmNlUHJvdG9jb2xHdWlkDQo+PiAg ICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBIT0INCj4+ICAgICMjIFBST0RVQ0VTICAgICAg ICAgICAgICMjIFVOREVGSU5FRCAjIEluc3RhbGwgcHJvdG9jb2wNCj4+ICAgIGdQZXJmb3JtYW5j ZUV4UHJvdG9jb2xHdWlkDQo+PiArICBnWmVyb0d1aWQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMjIEdVSUQNCj4+ICsgIGdFZmlGaXJt d2FyZVBlcmZvcm1hbmNlR3VpZCAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfUFJPRFVD RVMgIyMgVU5ERUZJTkVEICMgU3RhdHVzQ29kZSBEYXRhDQo+PiArICBnRWRraWlFeHRlbmRlZEZp cm13YXJlUGVyZm9ybWFuY2VHdWlkICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMjIEhP QiAjIFN0YXR1c0NvZGUgRGF0YQ0KPj4gKyAgZ0VmaUV2ZW50UmVhZHlUb0Jvb3RHdWlkICAgICAg ICAgICAgICAgICAgICAgICMjIENPTlNVTUVTICAgICAgICAgICAjIyBFdmVudA0KPj4gKyAgZ0Vk a2lpUGlTbW1Db21tdW5pY2F0aW9uUmVnaW9uVGFibGVHdWlkICAgICAgICMjIFNPTUVUSU1FU19D T05TVU1FUyAgICAjIyBTeXN0ZW1UYWJsZQ0KPj4NCj4+ICBbUGNkXQ0KPj4gLSAgZ0VmaU1kZU1v ZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFBlaVBlcmZvcm1hbmNlTG9nRW50cmllcyAgICMj IENPTlNVTUVTDQo+PiAtICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4UGVp UGVyZm9ybWFuY2VMb2dFbnRyaWVzMTYgIyMgQ09OU1VNRVMNCj4+IC0gIGdFZmlNZGVQa2dUb2tl blNwYWNlR3VpZC5QY2RQZXJmb3JtYW5jZUxpYnJhcnlQcm9wZXJ0eU1hc2sgICAgICAjIyBDT05T VU1FUw0KPj4gKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBlcmZvcm1hbmNlTGlicmFy eVByb3BlcnR5TWFzayAgICAgICAgICMjIENPTlNVTUVTDQo+PiArICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkRWRraWlGcGR0U3RyaW5nUmVjb3JkRW5hYmxlT25seSAgIyMgQ09O U1VNRVMNCj4+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFeHRGcGR0Qm9v dFJlY29yZFBhZFNpemUgICAgICAgICAjIyBDT05TVU1FUw0KPj4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9MaWJyYXJ5L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi9EeGVDb3JlUGVyZm9ybWFuY2VM aWJJbnRlcm5hbC5oIGIvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ29yZVBlcmZvcm1hbmNlTGli L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYkludGVybmFsLmgNCj4+IGluZGV4IGYxNTQwZDguLjdlNzk2 NzUgMTAwNjQ0DQo+PiAtLS0gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFu Y2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliSW50ZXJuYWwuaA0KPj4gKysrIGIvTWRlTW9kdWxl UGtnL0xpYnJhcnkvRHhlQ29yZVBlcmZvcm1hbmNlTGliL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYklu dGVybmFsLmgNCj4+IEBAIC0yLDExICsyLDExIEBADQo+PiAgICBNYXN0ZXIgaGVhZGVyIGZpbGVz IGZvciBEeGVDb3JlUGVyZm9ybWFuY2VMaWIgaW5zdGFuY2UuDQo+Pg0KPj4gICAgVGhpcyBoZWFk ZXIgZmlsZSBob2xkcyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgUGVyZm9ybWFuY2UgYW5kIFBlcmZv cm1hbmNlRXggUHJvdG9jb2wgcHVibGlzaGVkIGJ5IHRoaXMNCj4+ICAgIGxpYnJhcnkgaW5zdGFu Y2UgYXQgaXRzIGNvbnN0cnVjdG9yLg0KPj4NCj4+IC1Db3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE3 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+PiArQ29weXJp Z2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPj4gIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4+ICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4+ICB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5k IGF0DQo+PiAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0K Pj4NCj4+IEBAIC0yMCwyMSArMjAsMzYgQEAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4+DQo+Pg0K Pj4gICNpbmNsdWRlIDxQaUR4ZS5oPg0KPj4NCj4+ICAjaW5jbHVkZSA8R3VpZC9QZXJmb3JtYW5j ZS5oPg0KPj4gKyNpbmNsdWRlIDxHdWlkL0V4dGVuZGVkRmlybXdhcmVQZXJmb3JtYW5jZS5oPg0K Pj4gKyNpbmNsdWRlIDxHdWlkL1plcm9HdWlkLmg+DQo+PiArI2luY2x1ZGUgPEd1aWQvRXZlbnRH cm91cC5oPg0KPj4gKyNpbmNsdWRlIDxHdWlkL0Zpcm13YXJlUGVyZm9ybWFuY2UuaD4NCj4+ICsj aW5jbHVkZSA8R3VpZC9QaVNtbUNvbW11bmljYXRpb25SZWdpb25UYWJsZS5oPg0KPj4gKw0KPj4g KyNpbmNsdWRlIDxQcm90b2NvbC9Ecml2ZXJCaW5kaW5nLmg+DQo+PiArI2luY2x1ZGUgPFByb3Rv Y29sL0xvYWRlZEltYWdlLmg+DQo+PiArI2luY2x1ZGUgPFByb3RvY29sL0NvbXBvbmVudE5hbWUy Lmg+DQo+PiArI2luY2x1ZGUgPFByb3RvY29sL0RldmljZVBhdGhUb1RleHQuaD4NCj4+ICsjaW5j bHVkZSA8UHJvdG9jb2wvU21tQ29tbXVuaWNhdGlvbi5oPg0KPj4NCj4+ICAjaW5jbHVkZSA8TGli cmFyeS9QZXJmb3JtYW5jZUxpYi5oPg0KPj4gICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ DQo+PiAgI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQo+PiAgI2luY2x1ZGUgPExpYnJhcnkv QmFzZUxpYi5oPg0KPj4gICNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4+ICAj aW5jbHVkZSA8TGlicmFyeS9UaW1lckxpYi5oPg0KPj4gICNpbmNsdWRlIDxMaWJyYXJ5L1BjZExp Yi5oPg0KPj4gICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0K Pj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPj4g ICNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4+ICAjaW5jbHVkZSA8 TGlicmFyeS9VZWZpTGliLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvUmVwb3J0U3RhdHVzQ29k ZUxpYi5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0R4ZVNlcnZpY2VzTGliLmg+DQo+PiArI2lu Y2x1ZGUgPExpYnJhcnkvUGVDb2ZmR2V0RW50cnlQb2ludExpYi5oPg0KPj4NCj4+ICAvLw0KPj4g IC8vIEludGVyZmFjZSBkZWNsYXJhdGlvbnMgZm9yIFBlcmZvcm1hbmNlRXggUHJvdG9jb2wuDQo+ PiAgLy8NCj4+ICAvKioNCj4+IC0tDQo+PiAxLjkuNS5tc3lzZ2l0LjENCj4+DQo+PiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPj4gZWRrMi1kZXZlbCBt YWlsaW5nIGxpc3QNCj4+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+PiBodHRwczovL2xpc3Rz LjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCg==