Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp356125ybj; Mon, 4 May 2020 23:18:52 -0700 (PDT) X-Google-Smtp-Source: APiQypKfBOCB2y4fFmniH6IUYzL7Qh3v6dlb1vcqLObDZs1VW2Gk+4Yf2qjAuGO0LXeb56DVN07Z X-Received: by 2002:a17:906:2b43:: with SMTP id b3mr1100125ejg.231.1588659532039; Mon, 04 May 2020 23:18:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588659532; cv=none; d=google.com; s=arc-20160816; b=kQtVhGkvHeIW3h70R5SCQ+avXWrVlDmRrXpT1d0hBlPFo6cZWMOUUlCMX428NFYkp2 s6NJipATxUJ6OTvBeiFyIZoAoFrKXBA0se2zLMfv0dIbAyC12mkWiTtgXniicSzik0a9 D6l9POu1Gz3U08pn1v+wpV/Hy8LVMVClto/ERHQMLxLY8StP0ct1xesQ7BbUYHOYOIcX BPwTyBuZ3SYMZ7nal7STBbXIaGhYlqcijkMiuQr7cKoJb+rhTY8MokpxCMomR28JgXB5 oEzBHKMewzsLlumtV3fzdvkiHkWV58d3LDWH3j55KwDUezSQARq5vpyR6z7csomJBCA0 L87g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=VKNUluASAtDOmlGxFtv2v28wJKqzlOwdEg4Q81ivViI=; b=zBeivZF04Tpb9ZrM7z6F4HsLtjnAVA0Hy7EFElOQOmsiKctqpfhHMelmyjRVAR+rH2 WDX7Ikiwv6usYSqO2zrqLmqr7fxjm2emM0ylKwuEF4l/fsk57Nvj5F5Z34Lqtnw9eBwk 40AoQoOT17KvPMchPy9JxPi0G3zitwpY19sNc7kCs/xB3pZBQuDOND7xJK0+v9J9jkKF gV+LxfH3cAk1VN3hBXRDFfmNYO/5fD2dYZLdr94vEXYYmjQQS6lFm6FXdOYD5TPXm+Le 9uz6cGheQMprWNlYMVpkaktquoTXHjdBDPvY0kYlupkzFBEiW3ZdH1lwyv5Pu46XYD8t cC0A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 35si654523edm.560.2020.05.04.23.18.29; Mon, 04 May 2020 23:18:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728043AbgEEGQE (ORCPT + 99 others); Tue, 5 May 2020 02:16:04 -0400 Received: from mailgate1.rohmeurope.com ([87.129.152.131]:51412 "EHLO mailgate1.rohmeurope.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725766AbgEEGQE (ORCPT ); Tue, 5 May 2020 02:16:04 -0400 X-AuditID: c0a8fbf4-489ff70000004419-0c-5eb104a005bf Received: from smtp.reu.rohmeu.com (will-cas001.reu.rohmeu.com [192.168.251.177]) by mailgate1.rohmeurope.com (Symantec Messaging Gateway) with SMTP id CA.BA.17433.0A401BE5; Tue, 5 May 2020 08:16:00 +0200 (CEST) Received: from WILL-MAIL001.REu.RohmEu.com ([fe80::2915:304f:d22c:c6ba]) by WILL-CAS001.REu.RohmEu.com ([fe80::d57e:33d0:7a5d:f0a6%16]) with mapi id 14.03.0487.000; Tue, 5 May 2020 08:15:55 +0200 From: "Vaittinen, Matti" To: "brendanhiggins@google.com" CC: "mturquette@baylibre.com" , "linux-clk@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "davidgow@google.com" , "sboyd@kernel.org" , "kunit-dev@googlegroups.com" Subject: Re: [PATCH/RFC] clk: gate: Add some kunit test suites Thread-Topic: [PATCH/RFC] clk: gate: Add some kunit test suites Thread-Index: AQHWDVm00wvp7tx1MEWH9xzyZOyZGKh4aF6AgBcVE4CAB/c2gIAA8dUAgACmh4A= Date: Tue, 5 May 2020 06:15:55 +0000 Message-ID: <54a4870dc740f83a9fc92f9ef7c66b08b0a13a74.camel@fi.rohmeurope.com> References: <20200408035637.110858-1-sboyd@kernel.org> <300c532bba46f4f963c3a6d80bf8f22261e44f56.camel@fi.rohmeurope.com> In-Reply-To: Accept-Language: en-US, de-DE Content-Language: de-DE X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [62.78.225.252] Content-Type: text/plain; charset="utf-8" Content-ID: <87F71FBF8E770A4FAA5D9977DD3E2661@de.rohmeurope.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIJsWRmVeSWpSXmKPExsVyYMXvjboLWDbGGXRMlLC4eGMys8WJjRtY LJbM2Mhm8bHnHqvF5V1z2CwunnK1+HdtI4sDu8f7G63sHgs2lXrsmXiSzWPTqk42j8+b5AJY o7htkhJLyoIz0/P07RK4M87fecxY8OojY8WNey3MDYwXXjN2MXJySAiYSDzfeZ2pi5GLQ0jg GqPEz3vv2CCc44wSRz5dZeli5OBgE7CR6LrJDtIgImAt8aehhwWkhlngGJPE5vmtYAlhATuJ Dy8uMUMU2UssOL2DDcL2k5iwdjlYnEVAReLOjE1gNi9Q/PCZTmaIZZeYJD6v/gfWwCkQKLFz x2mwIkYBWYnOhndMIDazgLjEpmffWSHOFpBYsuc8M4QtKvHy8T+ouKLE9u/rwI5mFtCUWL9L H6LVQeL04pfsELaixJTuh+wQNwhKnJz5hGUCo9gsJBtmIXTPQtI9C0n3LCTdCxhZVzFK5CZm 5qQnlqQa6hWlluoV5WfkAqnk/NxNjJBo/bKD8f8hz0OMTByMhxglOZiURHmXfNsQJ8SXlJ9S mZFYnBFfVJqTWnyIUYKDWUmEd9kPoBxvSmJlVWpRPkxKmoNFSZxX/eHEWCEBkF3ZqakFqUUw WRkODiUJ3ptMG+OEBItS01Mr0jJzShDSTBycIMO5pESKU/NSUosSS0sy4kFJJL4YmEZAUjxA exmYgdp5iwsSc4GiEK2nGM05Jrycu4iZY+nRxUDy5KolQPLI3KWLmIVY8vLzUqXEeeNBtgqA tGWU5sEtfcUozsGoJMxrBjKUB5jO4Wa+AlrHBLRO6986kHUliQgpqQZGL8NDEjI6Ne5/e+bc 0H383Y6Hs9hB6f2d24wWh4+alF/f8eAob+ekz5JNRXwvMpcrituxPBBO5ReaYa/1YF+NgEH2 dZntK95t6wvU2Jj3cMVjKcbyUL3f+2ItsxmnJ3MkpCzI3C+c8slbxUVzfXnE9L8xmruVYqKm KfZti9Teat6XttDvpI8SS3FGoqEWc1FxIgAGks7/pAMAAA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQpPbiBNb24sIDIwMjAtMDUtMDQgYXQgMTM6MTkgLTA3MDAsIEJyZW5kYW4gSGlnZ2lucyB3cm90 ZToNCj4gT24gU3VuLCBNYXkgMywgMjAyMCBhdCAxMDo1NCBQTSBWYWl0dGluZW4sIE1hdHRpDQo+ IDxNYXR0aS5WYWl0dGluZW5AZmkucm9obWV1cm9wZS5jb20+IHdyb3RlOg0KPiA+IE9uIFdlZCwg MjAyMC0wNC0yOSBhdCAxMjoxNSArMDgwMCwgRGF2aWQgR293IHdyb3RlOg0KPiA+ID4gT24gVHVl LCBBcHIgMTQsIDIwMjAgYXQgNzo0NiBQTSBWYWl0dGluZW4sIE1hdHRpDQo+ID4gPiA8TWF0dGku VmFpdHRpbmVuQGZpLnJvaG1ldXJvcGUuY29tPiB3cm90ZToNCj4gPiA+ID4gSGVsbG8gU3RlcGhl biAmIEFsbCwNCj4gPiA+ID4gDQo+ID4gPiA+IFByb2xvZ3VlOg0KPiA+ID4gPiANCj4gPiA+ID4g SSBoYXZlIGJlZW4gdHJhdW1hdGl6ZWQgaW4gdGhlIHBhc3QgLSBieSB1bml0IHRlc3RzIDopIFRo dXMgSQ0KPiA+ID4gPiBhbQ0KPiA+ID4gPiBhbHdheXMNCj4gPiA+ID4gYSBiaXQganVtcHkgd2hl biBJIHNlZSBwZW9wbGUgYWRkaW5nIFVUcy4gSSBhbHdheXMgc2VlIHRoZQ0KPiA+ID4gPiBpbmVy dGlhDQo+ID4gPiA+IFVUcw0KPiA+ID4gPiBhZGQgdG8gZGV2ZWxvcG1lbnQgLSB3aGVuIHBlb3Bs ZSBjaGFuZ2UgYW55dGhpbmcgdGhleSBtdXN0IGFsc28NCj4gPiA+ID4gY2hhbmdlDQo+ID4gPiA+ IGltcGFjdGVkIFVUcyAtIGFuZCBldmVyeSB1bm5lY2Vzc2FyeSBVVCBjYXNlIGlzIGFjdHVhbGx5 DQo+ID4gPiA+IGJ1cmRlbi4gSQ0KPiA+ID4gPiB3YXMNCj4gPiA+ID4gb25jZSBidXJpZWQgdW5k ZXIgc3VjaCBidXJkZW4uLiBCYWNrIGF0IHRob3NlIHRpbWVzIEkgcXVpdGUNCj4gPiA+ID4gb2Z0 ZW4NCj4gPiA+ID4gZm91bmQNCj4gPiA+ID4gbXlzZWxmIHdvbmRlcmluZyB3aHkgSSBzcGVuZCB0 d28gZGF5cyBmaXhpbmcgVVQgY2FzZXMgYWZ0ZXIgSQ0KPiA+ID4gPiBkaWQgYQ0KPiA+ID4gPiBu ZWNlc3NhcnkgY29kZSBjaGFuZ2Ugd2hpY2ggdG9vayBtYXliZSAxMCBtaW51dGVzLiBQbGVhc2Ug c2VlDQo+ID4gPiA+IG15DQo+ID4gPiA+IGNvbW1lbnRzIGtub3dpbmcgdGhpcyBoaXN0b3J5IGFu ZCBkbyB5b3VyIGRlY2lzaW9ucyBiYXNlZCBvbg0KPiA+ID4gPiBsZXNzDQo+ID4gPiA+IGJpYXNl ZCAtIGJyaWdodGVyIHVuZGVyc3RhbmRpbmcgOl0NCj4gPiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4g DQo+ID4gPiBIZXkgTWF0dGksDQo+ID4gPiANCj4gPiA+IEFzIHNvbWVvbmUgd2hvJ3MgZGVmaW5p dGVseSB3YXN0ZWQgYSBsb3Qgb2YgdGltZSBmaXhpbmcNCj4gPiA+IHBvb3JseS10aG91Z2h0LXRo cm91Z2ggdGVzdHMsIGJ1dCB3aG8gaXMgbmV2ZXJ0aGVsZXNzIHdvcmtpbmcNCj4gPiA+IGVudGh1 c2lhc3RpY2FsbHkgb24gS1VuaXQsIEkgd2FudGVkIHRvIHJlc3BvbmQgcXVpY2tseSBoZXJlLg0K PiA+IA0KPiA+IEkgYXBwcmVjaWF0ZSB5b3VyIHJlcGx5LiBBbmQgSSBhcHByZWNpYXRlIHlvdXIg KGFuZCBvdGhlcnMpIHdvcmsgb24NCj4gPiBLVWluaXQuIEkgZG9uJ3QgdGhpbmsgVVRzIGFyZSBi YWQuIEkgYmVsaWV2ZSBVVHMgYXJlIGdyZWF0IGFuZA0KPiA+IHBvd2VyZnVsbCB0b29sIC0gd2hl biB1c2VkIG9uIHNwZWNpZmljIG9jY2FzaW9ucy4gQnV0IFVUcw0KPiA+IGRlZmluaXRlbHkNCj4g PiBhcmUgImRvdWJsZS1lZGdlZCBzd29yZCIgLSB5b3UgY2FuIGhpdCB5b3VyIG93biBsZWcuDQo+ IA0KPiBTdXJlLCBJIHNhdyB5b3UganVzdCBhZGRlZCBhIHVuaXQgdGVzdCwgc28gSSB3b3VsZCBh c3N1bWUgdGhhdCB5b3UNCj4gZG9uJ3QgdGhpbmsgdGhhdCBVVHMgYXJlIGluaGVyZW50bHkgYmFk IDotKQ0KPiANCj4gPiA+IENlcnRhaW5seSwgdGhlIGdvYWwgaXMgbm90IHRvIHJlZHVjZSBkZXZl bG9wbWVudCB2ZWxvY2l0eSwgdGhvdWdoDQo+ID4gPiBpdA0KPiA+ID4gaXMgcmVkaXN0cmlidXRl ZCBhIGJpdDogaG9wZWZ1bGx5IHRoZSBleHRyYSB0aW1lIHNwZW50IHVwZGF0aW5nDQo+ID4gPiB0 ZXN0cw0KPiA+ID4gd2lsbCBiZSBtb3JlIHRoYW4gcGFpZCBiYWNrIGluIGlkZW50aWZ5aW5nIGFu ZCBmaXhpbmcgYnVncw0KPiA+ID4gZWFybGllciwNCj4gPiA+IGFzDQo+ID4gPiB3ZWxsIGFzIG1h a2luZyB0ZXN0aW5nIG9uZSdzIG93biBjaGFuZ2VzIHNpbXBsZXIuIE9ubHkgdGltZSB3aWxsDQo+ ID4gPiB0ZWxsDQo+ID4gPiBpZiB3ZSdyZSByaWdodCBvciBub3QsIGJ1dCBpZiB0aGV5IHR1cm4g b3V0IHRvIGNhdXNlIG1vcmUNCj4gPiA+IHByb2JsZW1zDQo+ID4gPiB0aGFuIHRoZXkgc29sdmUg d2UgY2FuIGFsd2F5cyBhZGp1c3Qgb3IgcmVtb3ZlIHRoZW0uIEkgcmVtYWluDQo+ID4gPiBvcHRp bWlzdGljLCB0aG91Z2guDQo+ID4gDQo+ID4gRml4aW5nIGFuZCBpZGVudGlmeWluZyBidWdzIGlz IGRlZmluaXRlbHkgInRoZSB0aGluZyIgaW4gVVRzLiBCdXQNCj4gPiB3aGF0DQo+ID4gY29tZXMg dG8gd2VpZ2hpbmcgdGhlIGJlbmVmaXRzIG9mIFVUcyBWcy4gZG93bnNpZGVzIC0gdGhhdCdzIGhh cmQuDQo+ID4gRmlyc3QgdGhpbmcgb24gdGhhdCBmcm9udCBpcyB0byB1bmRlcnN0YW5kIHRoZSBj b3N0IG9mIFVUcy4gQW5kIGluDQo+ID4gbXkNCj4gPiBleHBlcmllbmNlIC0gbWFueSBwZW9wbGUg dW5kZXJlc3RpbWF0ZSB0aGF0LiBJdCdzIGVhc3kgdG9vIHNlZQ0KPiA+IHRoaW5ncw0KPiA+IGJs YWNrICYgd2hpdGUgYW5kIHRoaW5rIFVUcyBhcmUgb25seSBnb29kIC0gd2hpY2ggaXMgbm90IHRy dWUuDQo+ID4gDQo+ID4gVVQgY2FzZXMgYXJlIGNvZGUgd2hpY2ggbXVzdCBiZSBtYWludGFpbmVk IGFzIGFueSBjb2RlLiBBbmQgd2UgbXVzdA0KPiA+IG5ldmVyIGFkZCBjb2RlIHdoaWNoIGlzIG5v dCBiZW5lZmljaWFsIGFzIG1haW50YWluaW5nIGl0IGlzIHdvcmsuDQo+ID4gV2UgZG8NCj4gPiBj b25zdGFudGx5IHdvcmsgdG8gZGVjcmVhc2UgYW1vdW50IG9mIGNvZGUgdG8gYmUgbWFpbnRhbmVk IC0gVVRzDQo+ID4gYXJlIG5vDQo+ID4gZXhjZXB0aW9uIC0gYWxsIGNvZGUgaXMgYSBidXJkZW4u IFVubmVjZXNzYXJ5IGNvZGUgaXMgYnVyZGVuIHdpdGgNCj4gPiBubw0KPiA+IHB1cnBvc2UuIEFu ZCBVVHMgaGF2ZSBubyBvdGhlciBwdXJwb3NlIGJ1dCB0byBwb2ludCBvdXQgbWlzdGFrZXMuDQo+ ID4gT25seQ0KPiANCj4gSSBhbSBpbiBhZ3JlZW1lbnQgd2l0aCBldmVyeXRoaW5nIHlvdSBzYWlk IHNvIGZhci4NCj4gDQo+ID4gZ29vZCB0ZXN0IGlzIGEgdGVzdCB0aGF0IGlzIGZhaWxpbmcgYW5k IHBvaW50aW5nIG91dCBhIGJ1ZyB3aGljaA0KPiA+IHdvdWxkDQo+ID4gaGF2ZSBvdGhlcndpc2Ug Z29uZSB1bm5vdGljZWQuIFBhc3NpbmcgdGVzdCBpcyBhIHdhc3RlLg0KPiANCj4gTm90IHRvIGJl IHVuY2hhcml0YWJsZSBpbiBob3cgSSByZWFkIHRoaXMsIGJ1dCBJIGRvbid0IHRoaW5rIHRoaXMg aXMNCj4gcXVpdGUgcmlnaHQuIEkgdGhpbmsgd2Ugd291bGQgYWxsIGFncmVlIHRoYXQgYSB0ZXN0 IHRoYXQgKmNhbm5vdCoNCj4gZmFpbA0KPiBpcyBhIHdhc3RlLCBidXQgb24gdGhlIG90aGVyIGhh bmQsIHlvdSBzaG91bGQgbmV2ZXIgc3VibWl0IGNvZGUgdGhhdA0KPiBkb2Vzbid0IHBhc3MgKmdv b2QgdGVzdHMqLCByaWdodD8gTGlrZSB5b3Ugd3JvdGUgdGVzdHMgZm9yIHlvdXINCj4gbGluZWFy DQo+IHJhbmdlIHN0dWZmIHRvIHZlcmlmeSB0aGF0IGl0IHdvcmtlZCBhcyBleHBlY3RlZDsgSSBk b24ndCBrbm93IGlmDQo+IHNvbWUNCj4gb2YgdGhlIHRlc3RzIGRpZG4ndCBwYXNzIG9uIHRoZSBm aXJzdCB0cnksIGJ1dCB5b3UgZGlkIHVsdGltYXRlbHkgZml4DQo+IGFsbCB0aGUgaXNzdWVzLCBh bmQgc3VibWl0dGVkIG9ubHkgdGVzdHMgdGhhdCBwYXNzLCByaWdodD8gSSBhbQ0KPiBwcmV0dHkN Cj4gc3VyZSBubyBvbmUgd291bGQgYWNjZXB0IGNvZGUgYWNjb21wYW5pZWQgd2l0aCB0ZXN0cyB0 aGF0IGRvbid0IHBhc3MuDQo+IA0KPiBTbyB3b3VsZCBhIGJldHRlciB3YXkgdG8gcGhyYXNlIHRo aXMgYmU6ICJ0ZXN0cyB0aGF0IGNhbiBvbmx5IHBhc3MNCj4gYXJlDQo+IGEgd2FzdGUiPyBPciBt YXliZSwgInRlc3RzIHRoYXQgZG9uJ3QgcHJvdmlkZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gYQ0K PiBmYWlsdXJlIGFyZSBhIHdhc3RlIj8NCg0KV2hhdCBJIG1lYW4gaXMgcmVhbGx5IHRoYXQgYSB0 ZXN0IHRoYXQgaXMgbm90IGZhaWxpbmcgaXMgYSB3YXN0ZS4gVG8NCm1ha2UgaXQgbW9yZSBhY2N1 cmF0ZSB0aG91Z2ggLSBhIHRlc3QgdGhhdCBpcyBub3QgZmFpbGluZyBhdCBzb21lIHBvaW50DQpk dXJpbmcgZGV2ZWxvcG1lbnQgaXMgYSB3YXN0ZS4NCg0KPiA+IFNvIGtleSB0aGluZyB3aGVuIGNv bnNpZGVyaW5nIGlmIGFkZGluZyBhIHRlc3QgaXMgYmVuZWZpY2lhbCBpcw0KPiA+IHdoZXRoZXIN Cj4gPiB0aGUgdGVzdCBpcyBsaWtlbHkgdG8gcG9pbnQgb3V0IGEgYnVnIChpbiBlYXJseSBwaGFz ZSkuIEEgYnVnIHRoYXQNCj4gPiB3b3VsZCBvdGhlcndpc2UgaGF2ZSBnb25lIHRocm91Z2ggdW5u b3RpY2VkLg0KPiANCj4gV2h5IG5vdCBhIGJ1ZyBsYXRlciBvbj8gT24gYW5vdGhlciBwcm9qZWN0 LCBJIG5vdGljZWQgYSBwaWVjZSBvZiBjb2RlDQo+IHRoYXQga2VwdCBicmVha2luZywgc28gSSBh ZGRlZCBhIHRlc3QgZm9yIHRoYXQgcGllY2Ugb2YgY29kZSwgYW5kDQo+IHBlb3BsZSBzdG9wcGVk IGJyZWFraW5nIGl0OiBtaXNzaW9uIGFjY29tcGxpc2hlZCwgcmlnaHQ/DQoNCllvdSBhcmUgcmln aHQuICJMYXRlciBvbiIgaXMgZmluZSA6KSBBcyBpcyAib24gYW5vdGhlciBwcm9qZWN0Ii4NCg0K PiA+ID4gSSBkbyB0aGluayB0aGF0IHRoZXNlIHRlc3RzIGFyZSB1bmxpa2VseSB0byBpbmNyZWFz ZSB0aGUgYnVyZGVuDQo+ID4gPiBvbg0KPiA+ID4gZGV2ZWxvcGVycyBtdWNoOg0KPiA+IA0KPiA+ IEFsbCBjb2RlIHdoaWNoIHVzZXMga2VybmVsIEFQSXMgaXMgaW5jcmVhc2luZyBidXJkZW4gZm9y IHNvbWVvbmUNCj4gPiB3aG8NCj4gPiBuZWVkcyB0byBjaGFuZ2UgdGhlIEFQSS4gTXVjaCBjYW4g YmUgZGlzY3Vzc2VkIDspDQo+ID4gDQo+ID4gPiAgdGhleSBzZWVtIG1vc3RseSB0byB0ZXN0IGlu dGVyZmFjZXMgYW5kIGJlaGF2aW91cg0KPiA+ID4gd2hpY2ggaXMgdXNlZCBxdWl0ZSBhIGJpdCBl bHNld2hlcmUgaW4gdGhlIGtlcm5lbDogY2hhbmdlcyB0aGF0DQo+ID4gPiBicmVhaw0KPiA+ID4g dGhlbSBzZWVtIGxpa2VseSB0byBiZSByZWFzb25hYmx5IGRpc3J1cHRpdmUgYW55d2F5LCBzbyB0 aGVzZQ0KPiA+ID4gdGVzdHMNCj4gPiA+IGFyZW4ndCBnb2luZyB0byBhZGQgdG9vIG11Y2ggdG8g dGhhdCBvdmVyYWxsLA0KPiA+IA0KPiA+IFRoaXMgc3RhdGVtZW50IGlzIHZhbGlkIGZvciBhbG1v c3QgYWxsIGV4cG9ydGVkIGtlcm5lbCBBUElzIC0geWV0DQo+ID4gYWRkaW5nIHRlc3RzIGZvciBh bGwgQVBJcyBpcyBkZWZpbml0ZWx5IGEgYmFkIGlkZWEuIFRoZSBlZmZvcnQgaXMNCj4gDQo+IEkg ZG9uJ3QgdW5kZXJzdGFuZCwgY2FuIHlvdSBlbGFib3JhdGU/IEZyb20gbXkgZXhwZXJpZW5jZSwg QVBJcyBhcmUNCj4gZnJlcXVlbnRseSBvbmUgb2YgdGhlIG1vc3QgdmFsdWFibGUgcGxhY2VzIHRv IHRlc3QuDQoNClllcy4gQVBJcyBhcmUgd2hhdCB3ZSBzaG91bGQgZm9jdXMuIEJ1dCBub3QgX2Fs bF8gQVBJcy4gQVBJcyB0byB0ZXN0DQpzaG91bGQgYmUgY2FyZWZ1bGx5IHNlbGVjdGVkLiANCg0K DQoxLiBJIHdvdWxkIG5vdCBhZGQgdGVzdHMgdG8gQVBJcyB3aGljaCBoYXZlIHNpbXBsZSBpbXBs ZW1lbnRhdGlvbi4gSQ0Ka25vdyB5b3Ugc2FpZCAic2ltcGxlIiBpcyBzdWJqZWN0aXZlLiBJJ2xs IGRvIHNvbWUgcHNldWRvIGNvZGUgdG8NCmVsYWJvcmF0ZToNCg0KSSB0aGluayB3ZSBjYW4gYWdy ZWUgdGhhdCBmb3IgZXhhbXBsZSBBUElzIGxpa2UNCg0KYm9vbCBpc19mb28oc29tZXR5cGUgbWF5 YmVmb28pIHsNCiAgICByZXR1cm4gISFtYXliZWZvby5mb287DQp9DQoNCmFyZSBzaW1wbGUgYW5k IG5vdCBsaWtlbHkgdG8gYnJlYWsuIEFkZGluZyB0ZXN0DQoNCnNvbWV0eXBlIHllc2ZvbyA9IHsg LmZvbyA9IDEgfTsNCnNvbWV0eXBlIG5vZm9vID0geyAuZm9vID0gMCB9Ow0KZm9vdGVzdCgpDQp7 DQoJVEVTVF9BU1NFUlQoaXNfZm9vKHllc2ZvbykpOw0KCVRFU1RfQVNTRVJUKCFpc19mb28obm9m b28pKTsNCn0NCg0KaXMgdW5saWtlbHkgdG8gYnJpbmcgYW55IHZhbHVlIC0gYnV0IGlzIGxpa2Vs eSB0byBjYXVzZSBleHRyYSB3b3JrIHdoZW4NCnNvbWV0eXBlIGlzIHJlcGxhY2VkIHdpdGggbmV3 IGNvb2xlciBjb25zdHJ1Y3QgLSBvciBmb28gaXMgcmVuYW1lZCBvcg0KYW55dGhpbmcgZWxzZSBj aGFuZ2VzIHRoaXMuDQoNClRoaXMgaXMganVzdCBhbiBleHRyZW1lIGV4YW1wbGUgLSBmcm9tIG15 IHBlcnNwZWN0aXZlIHRoZSBhbW91bnQgb2YNCndvcmsgcmVxdWlyZWQgdG8gd3JpdGUgYW5kIG1h aW50YWluIGEgdGVzdCB3aWxsIGVhc2lseSBleGNlZWQgdGhlDQpiZW5lZml0cyBldmVuIGZvciBf bXVjaF8gbW9yZSBjb21wbGV4IGNvbnN0cnVjdHMuIEJ1dCBhcyB5b3Ugc2FpZCwNCiJzaW1wbGlj aXR5IiBpcyBzdWJqZWN0aXZlIGFuZCBJIG5lZWQgdG8gdHJ1c3QgdGhlIG1haW50YWluZXJzIHRv DQp1bmRlcnN0YW5kIHdoZXJlIHRvIGRyYXcgdGhlIGxpbmUgOikNCg0KQW5vdGhlciBleGFtcGxl IG9mIEFQSXMgZm9yIHdoaWNoIEkgd291bGQgb21pdCB0ZXN0cyBhcmUgQVBJcyB3aG9zZQ0KZnVu Y3Rpb25hbGl0eSBpcyB0ZXN0ZWQgYnkgc29tZSBvdGhlciB0ZXN0cy4gSWYgd2Ugc3RpY2sgdG8g Y2xrIGRvbWFpbg0Kd2UgY2FuIGxvb2sgZm9sbG93aW5nIGV4YW1wbGU6DQoNCkNsayBoYXMgZmV3 ICdidWxrJyBBUElzIHRoYXQgcmVwZWF0IHNvbWUgb3BlcmF0aW9uIGZvciBtYW55IGNsaw0KZW50 aXRpZXMuDQoNCmh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y1LjctcmM0L3NvdXJj ZS9kcml2ZXJzL2Nsay9jbGstYnVsay5jDQoNCkxldCdzIGFzc3VtZSBzb21lb25lIHdyb3RlIHRl c3QocykgZm9yOg0KY2xrX2J1bGtfcHV0KCk6DQoNCnZvaWQgY2xrX2J1bGtfcHV0KGludCBudW1f Y2xrcywgc3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3MpDQp7DQoJd2hpbGUgKC0tbnVtX2Nsa3Mg Pj0gMCkgew0KCQljbGtfcHV0KGNsa3NbbnVtX2Nsa3NdLmNsayk7DQoJCWNsa3NbbnVtX2Nsa3Nd LmNsayA9IE5VTEw7DQoJfQ0KfQ0KDQpUaGVuIEknZCBhcmd1ZSB0aGF0IHdyaXRpbmcgdGVzdHMg Zm9yIGNsa19wdXQoKSB3ZXJlIG5vdCBicmluZ2luZyBtdWNoDQpvZiBhZGRpdGlvbmFsIHZhbHVl Lg0KDQpTbyAtIEkgd291bGQgc3RyYWlnaHQgYXdheSBkcm9wIGF0IGxlYXN0IHRoZSB0ZXN0cyBm b3Igc2ltcGxlIEFQSXMgYW5kDQpBUElzIHRoYXQgYXJlIHRlc3RlZCBieSBvdGhlciB0ZXN0cy4N Cg0KPiANCj4gPiBjdW11bGF0aXZlLiBXZSBzaG91bGQgbmV2ZXIgYWRkIG5ldyBjb2RlIGp1c3Qg YmVjYXVzZSBtYWludGVuYW5jZQ0KPiA+IGVmZm9ydCBpcyByZWxhdGl2ZWx5IHNtYWxsLiBXZSBt dXN0IG9ubHkgYWRkIGNvZGUgaWYgaXQgYWRkcyB2YWx1ZS4NCj4gDQo+IEkgYWdyZWUgd2l0aCB0 aGlzIHN0YXRlbWVudCwgYnV0IEkgZG9uJ3Qgc2VlIGhvdyBpdCBzaG93cyB0aGF0IEFQSQ0KPiB0 ZXN0aW5nIGlzIGluaGVyZW50bHkgYmFkLg0KDQpNeSBpbnRlbnRpb24gd2FzIG5vdCB0byBzYXkg QVBJIHRlc3RpbmcgaXMgaW5oZXJlbnRseSBiYWQuIE15IHB1cnBvc2UNCndhcyB0byBzYXkgdGhh dCBub3QgX2FsbF8gQVBJcyBzaG91bGQgYmUgdGVzdGVkIC0gZXZlbiB0aG91Z2ggYWxsDQpleHBv cnRlZCBBUElzIHVzdWFsbHkgZnVsZmlsbCB0aGUgRGF2aWQncyBjcml0ZXJpYSBvZiBiZWluZyBh bHNvIHVzZWQNCmluIG1hbnkgb3RoZXIgcGxhY2VzIGJ1dCB0ZXN0cy4gU28sIEkgd2FzIGp1c3Qg c2F5aW5nIHRoYXQgd2Ugc2hvdWxkDQpkZWZpbml0ZWx5IGRyb3AgdGhlICJ0aGlzIGlzIHVzZWQg Ynkgb3RoZXIgY29kZSBzbyBhZGRpbmcgdGVzdCBkb2Vzbid0DQptYXR0ZXIiIC0gYXJndW1lbnQu IFRoYXQgYXJndW1lbnQgbGVhZHMgdG8gdGhlIGRhcmsgc2lkZSA6XQ0KDQo+ICBJIGtub3cgeW91 IGFyZSBjb3VudGVyaW5nIERhdmlkJ3Mgc3RhdGVtZW50DQo+IHRoYXQgaXQgZG9lc24ndCBhZGQg bXVjaCBjb3N0OyBob3dldmVyLCBJIHRoaW5rIHRoYXQgQVBJIHRlc3Rpbmcgbm90DQo+IG9ubHkg ZG9lc24ndCBhZGQgbXVjaCBjb3N0LCBpZiBkb25lIHByb3Blcmx5LCBJIHRoaW5rIGl0IGFjdHVh bGx5DQo+IHJlZHVjZXMgZnV0dXJlIGVmZm9ydCBpbiBjaGFuZ2luZyB0aG9zZSBBUElzLg0KDQpZ ZXMuIEkgYWdyZWUuIEEgZ29vZCB0ZXN0IGNhbiByZWR1Y2UgZWZmb3J0IHdoZW4gaXQgaXMgd3Jp dHRlbiBmb3IgYQ0KY29tcGxleCwgZXJyb3IgcHJvbmUgaW1wbGVtZW50YXRpb24uIEJ1dCBmb3Ig bWFueSBBUElzIHRoZSBleGlzdGluZw0KdGVzdCBsb2FkIHdvdWxkIChpbiBteSBvcGluaW9uKSBq dXN0IGhpbmRlciB0aGUgY2hhbmdlcy4NCg0KPiANCj4gPiA+ICBhbmQgbWF5IHVsdGltYXRlbHkg bWFrZQ0KPiA+ID4gdGhpbmdzIGEgYml0IHNpbXBsZXIgYnkgaGVscGluZyB0byBkb2N1bWVudCBh bmQgdmVyaWZ5IHRoZQ0KPiA+ID4gY2hhbmdlcy4NCj4gPiANCj4gPiBZZXMuIERlZmluaXRlbHku IEJ1dCB3ZSBtdXN0IG5ldmVyIGRlbnkgdGhhdCBhbGwgYWRkZWQgKHRlc3QpIGNvZGUNCj4gPiBh ZGRzDQo+ID4gd29yay4gQW5kIGRvIHdlaWdoaW5nIHByb3MgYW4gY29ucyBvbmx5IGFmdGVyIHRo YXQuIERhbmdlciBvZiBVVHMNCj4gPiBpcw0KPiA+IHRoYXQgd2UgZG9uJ3QgYWRtaXQgdGhlIGNv bnMuDQo+IA0KPiBUcnVlLiBUaGVyZSBpcyBubyBtYWdpYyBidWxsZXQgaGVyZS4gVVRzIGFyZSBi dXQgb25lIHRvb2wgaW4gYQ0KPiB0b29sYm94OyB0aGVyZSBhcmUgb3RoZXIgdG9vbHMgYmV0dGVy IHN1aXRlZCB0byBzb2x2ZSBzb21lIHByb2JsZW1zLA0KPiBhbmQgbm8gcHJvYmxlbSBpcyBsaWtl bHkgdG8gYmUgc29sdmVkIHdlbGwgaWYgdGhlIHBlcnNvbiB1c2luZyB0aGUNCj4gdG9vbCB1c2Vz IHRoZSB0b29sIGltcHJvcGVybHkuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGhlcmUgdGhpbmtzIHRo YXQNCj4gVVRzIGFyZSBpbmhlcmVudGx5IGdvb2QgYW5kIGFsbCBVVHMgbWFrZSBhbGwgY29kZSBi ZXR0ZXIuDQoNCllvdSBvcHRpbWlzdCA6cCBYRA0KDQo+ID4gPiBBIGZldyBvdGhlciBub3RlcyBp bmxpbmU6DQo+ID4gPiANCj4gPiA+ID4gT24gVHVlLCAyMDIwLTA0LTA3IGF0IDIwOjU2IC0wNzAw LCBTdGVwaGVuIEJveWQgd3JvdGU6DQo+ID4gPiA+ID4gVGVzdCB2YXJpb3VzIHBhcnRzIG9mIHRo ZSBjbGsgZ2F0ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZQ0KPiA+ID4gPiA+IGt1bml0DQo+ID4g PiA+ID4gdGVzdGluZw0KPiA+ID4gPiA+IGZyYW1ld29yay4NCj4gPiA+ID4gPiANCj4gPiA+ID4g PiBDYzogQnJlbmRhbiBIaWdnaW5zIDxicmVuZGFuaGlnZ2luc0Bnb29nbGUuY29tPg0KPiA+ID4g PiA+IENjOiA8a3VuaXQtZGV2QGdvb2dsZWdyb3Vwcy5jb20+DQo+ID4gPiA+ID4gU2lnbmVkLW9m Zi1ieTogU3RlcGhlbiBCb3lkIDxzYm95ZEBrZXJuZWwub3JnPg0KPiA+ID4gPiA+IC0tLQ0KPiA+ ID4gPiA+IA0KPiA+ID4gPiA+IFRoaXMgcGF0Y2ggaXMgb24gdG9wIG9mIHRoaXMgc2VyaWVzWzFd IHRoYXQgYWxsb3dzIHRoZSBjbGsNCj4gPiA+ID4gPiBmcmFtZXdvcmsgdG8gYmUgc2VsZWN0ZWQg YnkgS2NvbmZpZyBsYW5ndWFnZS4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBbMV0NCj4gPiA+ID4g PiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjAwNDA1MDI1MTIzLjE1NDY4OC0xLXNib3lk QGtlcm5lbC5vcmcNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiAgZHJpdmVycy9jbGsvS2NvbmZpZyAg ICAgICAgIHwgICA4ICsNCj4gPiA+ID4gPiAgZHJpdmVycy9jbGsvTWFrZWZpbGUgICAgICAgIHwg ICAxICsNCj4gPiA+ID4gPiAgZHJpdmVycy9jbGsvY2xrLWdhdGUtdGVzdC5jIHwgNDgxDQo+ID4g PiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ID4gIDMg ZmlsZXMgY2hhbmdlZCwgNDkwIGluc2VydGlvbnMoKykNCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvY2xrL2Nsay1nYXRlLXRlc3QuYw0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9LY29uZmlnIGIvZHJpdmVycy9jbGsvS2NvbmZpZw0K PiA+ID4gPiA+IGluZGV4IDZlYTA2MzFlMzk1Ni4uNjYxOTM2NzNiY2RmIDEwMDY0NA0KPiA+ID4g PiA+IC0tLSBhL2RyaXZlcnMvY2xrL0tjb25maWcNCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2Ns ay9LY29uZmlnDQo+ID4gPiA+ID4gQEAgLTM3Nyw0ICszNzcsMTIgQEAgc291cmNlICJkcml2ZXJz L2Nsay90aS9LY29uZmlnIg0KPiA+ID4gPiA+ICBzb3VyY2UgImRyaXZlcnMvY2xrL3VuaXBoaWVy L0tjb25maWciDQo+ID4gPiA+ID4gIHNvdXJjZSAiZHJpdmVycy9jbGsvenlucW1wL0tjb25maWci DQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gKyMgS3VuaXQgdGVzdCBjYXNlcw0KPiA+ID4gPiA+ICtj b25maWcgQ0xLX0dBVEVfVEVTVA0KPiA+ID4gPiA+ICsgICAgIHRyaXN0YXRlICJCYXNpYyBnYXRl IHR5cGUgS3VuaXQgdGVzdCINCj4gPiA+ID4gPiArICAgICBkZXBlbmRzIG9uIEtVTklUDQo+ID4g PiA+ID4gKyAgICAgZGVmYXVsdCBLVU5JVA0KPiA+ID4gPiA+ICsgICAgIGhlbHANCj4gPiA+ID4g PiArICAgICAgIEt1bml0IHRlc3QgZm9yIHRoZSBiYXNpYyBjbGsgZ2F0ZSB0eXBlLg0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiAgZW5kaWYNCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9j bGsvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay9NYWtlZmlsZQ0KPiA+ID4gPiA+IGluZGV4IGY0MTY5 Y2MyZmQzMS4uMDc4NTA5Mjg4MGZkIDEwMDY0NA0KPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvY2xr L01ha2VmaWxlDQo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9jbGsvTWFrZWZpbGUNCj4gPiA+ID4g PiBAQCAtNyw2ICs3LDcgQEAgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEspICAgICAgKz0gY2xrLQ0K PiA+ID4gPiA+IGRpdmlkZXIubw0KPiA+ID4gPiA+ICBvYmotJChDT05GSUdfQ09NTU9OX0NMSykg ICAgICs9IGNsay1maXhlZC1mYWN0b3Iubw0KPiA+ID4gPiA+ICBvYmotJChDT05GSUdfQ09NTU9O X0NMSykgICAgICs9IGNsay1maXhlZC1yYXRlLm8NCj4gPiA+ID4gPiAgb2JqLSQoQ09ORklHX0NP TU1PTl9DTEspICAgICArPSBjbGstZ2F0ZS5vDQo+ID4gPiA+ID4gK29iai0kKENPTkZJR19DTEtf R0FURV9URVNUKSAgKz0gY2xrLWdhdGUtdGVzdC5vDQo+ID4gPiA+ID4gIG9iai0kKENPTkZJR19D T01NT05fQ0xLKSAgICAgKz0gY2xrLW11bHRpcGxpZXIubw0KPiA+ID4gPiA+ICBvYmotJChDT05G SUdfQ09NTU9OX0NMSykgICAgICs9IGNsay1tdXgubw0KPiA+ID4gPiA+ICBvYmotJChDT05GSUdf Q09NTU9OX0NMSykgICAgICs9IGNsay1jb21wb3NpdGUubw0KPiA+ID4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2Nsay9jbGstZ2F0ZS10ZXN0LmMgYi9kcml2ZXJzL2Nsay9jbGstDQo+ID4gPiA+ ID4gZ2F0ZS0NCj4gPiA+ID4gPiB0ZXN0LmMNCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiA+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjFkNmMyMWU5Njk4DQo+ID4gPiA+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvY2xrL2Nsay1nYXRlLXRlc3Qu Yw0KPiA+ID4gPiA+IEBAIC0wLDAgKzEsNDgxIEBADQo+ID4gPiA+ID4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gKyAqIEtVbml0 IHRlc3QgZm9yIGNsayBnYXRlIGJhc2ljIHR5cGUNCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1w cm92aWRlci5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8a3VuaXQvdGVzdC5oPg0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIHZvaWQgY2xrX2dhdGVfcmVnaXN0ZXJfdGVzdF9kZXYo c3RydWN0IGt1bml0ICp0ZXN0KQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICAgc3RydWN0 IGNsa19odyAqcmV0Ow0KPiA+ID4gPiA+ICsgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXY7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgIHBkZXYgPQ0KPiA+ID4gPiA+IHBsYXRm b3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInRlc3RfZ2F0ZV9kZXZpY2UiLA0KPiA+ID4gPiA+ IC0xLA0KPiA+ID4gPiA+IE5VTEwsIDApOw0KPiA+ID4gPiA+ICsgICAgIEtVTklUX0FTU0VSVF9O T1RfRVJSX09SX05VTEwodGVzdCwgcGRldik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg IHJldCA9IGNsa19od19yZWdpc3Rlcl9nYXRlKCZwZGV2LT5kZXYsICJ0ZXN0X2dhdGUiLA0KPiA+ ID4gPiA+IE5VTEwsDQo+ID4gPiA+ID4gMCwNCj4gPiA+ID4gPiBOVUxMLA0KPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIE5VTEwpOw0KPiA+ID4gPiA+ICsg ICAgIEtVTklUX0VYUEVDVF9OT1RfRVJSX09SX05VTEwodGVzdCwgcmV0KTsNCj4gPiA+ID4gPiAr ICAgICBLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgInRlc3RfZ2F0ZSIsDQo+ID4gPiA+ID4gY2xr X2h3X2dldF9uYW1lKHJldCkpOw0KPiA+ID4gPiA+ICsgICAgIEtVTklUX0VYUEVDVF9FUSh0ZXN0 LCAwVUwsIGNsa19od19nZXRfZmxhZ3MocmV0KSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsg ICAgIGNsa19od191bnJlZ2lzdGVyX2dhdGUocmV0KTsNCj4gPiA+ID4gPiArICAgICBwbGF0Zm9y bV9kZXZpY2VfcHV0KHBkZXYpOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICtzdGF0aWMgdm9pZCBjbGtfZ2F0ZV9yZWdpc3Rlcl90ZXN0X3BhcmVudF9uYW1lcyhzdHJ1Y3Qg a3VuaXQNCj4gPiA+ID4gPiAqdGVzdCkNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgIHN0 cnVjdCBjbGtfaHcgKnBhcmVudDsNCj4gPiA+ID4gPiArICAgICBzdHJ1Y3QgY2xrX2h3ICpyZXQ7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgIHBhcmVudCA9IGNsa19od19yZWdpc3Rlcl9m aXhlZF9yYXRlKE5VTEwsDQo+ID4gPiA+ID4gInRlc3RfcGFyZW50IiwNCj4gPiA+ID4gPiBOVUxM LA0KPiA+ID4gPiA+IDAsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTAwMDAwMCk7DQo+ID4gPiA+ID4gKyAgICAgS1VOSVRfQVNTRVJUX05PVF9F UlJfT1JfTlVMTCh0ZXN0LCBwYXJlbnQpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgICBy ZXQgPSBjbGtfaHdfcmVnaXN0ZXJfZ2F0ZShOVUxMLCAidGVzdF9nYXRlIiwNCj4gPiA+ID4gPiAi dGVzdF9wYXJlbnQiLCAwLA0KPiA+ID4gPiA+IE5VTEwsDQo+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTlVMTCk7DQo+ID4gPiA+ID4gKyAgICAgS1VOSVRf QVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCByZXQpOw0KPiA+ID4gPiA+ICsgICAgIEtVTklU X0VYUEVDVF9QVFJfRVEodGVzdCwgcGFyZW50LA0KPiA+ID4gPiA+IGNsa19od19nZXRfcGFyZW50 KHJldCkpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgICBjbGtfaHdfdW5yZWdpc3Rlcl9n YXRlKHJldCk7DQo+ID4gPiA+ID4gKyAgICAgY2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShw YXJlbnQpOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdm9p ZCBjbGtfZ2F0ZV9yZWdpc3Rlcl90ZXN0X3BhcmVudF9kYXRhKHN0cnVjdCBrdW5pdA0KPiA+ID4g PiA+ICp0ZXN0KQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICAgc3RydWN0IGNsa19odyAq cGFyZW50Ow0KPiA+ID4gPiA+ICsgICAgIHN0cnVjdCBjbGtfaHcgKnJldDsNCj4gPiA+ID4gPiAr ICAgICBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIHBkYXRhID0geyB9Ow0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgICBwYXJlbnQgPSBjbGtfaHdfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLA0K PiA+ID4gPiA+ICJ0ZXN0X3BhcmVudCIsDQo+ID4gPiA+ID4gTlVMTCwNCj4gPiA+ID4gPiAwLA0K PiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAw MDApOw0KPiA+ID4gPiA+ICsgICAgIEtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwg cGFyZW50KTsNCj4gPiA+ID4gPiArICAgICBwZGF0YS5odyA9IHBhcmVudDsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKyAgICAgcmV0ID0gY2xrX2h3X3JlZ2lzdGVyX2dhdGVfcGFyZW50X2RhdGEo TlVMTCwNCj4gPiA+ID4gPiAidGVzdF9nYXRlIiwNCj4gPiA+ID4gPiAmcGRhdGEsIDAsDQo+ID4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg MCwgMCwNCj4gPiA+ID4gPiBOVUxMKTsNCj4gPiA+ID4gPiArICAgICBLVU5JVF9BU1NFUlRfTk9U X0VSUl9PUl9OVUxMKHRlc3QsIHJldCk7DQo+ID4gPiA+ID4gKyAgICAgS1VOSVRfRVhQRUNUX1BU Ul9FUSh0ZXN0LCBwYXJlbnQsDQo+ID4gPiA+ID4gY2xrX2h3X2dldF9wYXJlbnQocmV0KSk7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgIGNsa19od191bnJlZ2lzdGVyX2dhdGUocmV0KTsN Cj4gPiA+ID4gPiArICAgICBjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBhcmVudCk7DQo+ ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGNsa19nYXRl X3JlZ2lzdGVyX3Rlc3RfcGFyZW50X2RhdGFfbGVnYWN5KHN0cnVjdA0KPiA+ID4gPiA+IGt1bml0 DQo+ID4gPiA+ID4gKnRlc3QpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgICBzdHJ1Y3Qg Y2xrX2h3ICpwYXJlbnQ7DQo+ID4gPiA+ID4gKyAgICAgc3RydWN0IGNsa19odyAqcmV0Ow0KPiA+ ID4gPiA+ICsgICAgIHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgcGRhdGEgPSB7IH07DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgIHBhcmVudCA9IGNsa19od19yZWdpc3Rlcl9maXhlZF9yYXRl KE5VTEwsDQo+ID4gPiA+ID4gInRlc3RfcGFyZW50IiwNCj4gPiA+ID4gPiBOVUxMLA0KPiA+ID4g PiA+IDAsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTAwMDAwMCk7DQo+ID4gPiA+ID4gKyAgICAgS1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVM TCh0ZXN0LCBwYXJlbnQpOw0KPiA+ID4gPiA+ICsgICAgIHBkYXRhLm5hbWUgPSAidGVzdF9wYXJl bnQiOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgICByZXQgPSBjbGtfaHdfcmVnaXN0ZXJf Z2F0ZV9wYXJlbnRfZGF0YShOVUxMLA0KPiA+ID4gPiA+ICJ0ZXN0X2dhdGUiLA0KPiA+ID4gPiA+ ICZwZGF0YSwgMCwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCAwLCAwLA0KPiA+ID4gPiA+IE5VTEwpOw0KPiA+ID4gPiA+ICsgICAg IEtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgcmV0KTsNCj4gPiA+ID4gPiArICAg ICBLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIHBhcmVudCwNCj4gPiA+ID4gPiBjbGtfaHdfZ2V0 X3BhcmVudChyZXQpKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAgY2xrX2h3X3VucmVn aXN0ZXJfZ2F0ZShyZXQpOw0KPiA+ID4gPiA+ICsgICAgIGNsa19od191bnJlZ2lzdGVyX2ZpeGVk X3JhdGUocGFyZW50KTsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3Rh dGljIHZvaWQgY2xrX2dhdGVfcmVnaXN0ZXJfdGVzdF9wYXJlbnRfaHcoc3RydWN0IGt1bml0DQo+ ID4gPiA+ID4gKnRlc3QpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgICBzdHJ1Y3QgY2xr X2h3ICpwYXJlbnQ7DQo+ID4gPiA+ID4gKyAgICAgc3RydWN0IGNsa19odyAqcmV0Ow0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArICAgICBwYXJlbnQgPSBjbGtfaHdfcmVnaXN0ZXJfZml4ZWRfcmF0 ZShOVUxMLA0KPiA+ID4gPiA+ICJ0ZXN0X3BhcmVudCIsDQo+ID4gPiA+ID4gTlVMTCwNCj4gPiA+ ID4gPiAwLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEwMDAwMDApOw0KPiA+ID4gPiA+ICsgICAgIEtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05V TEwodGVzdCwgcGFyZW50KTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAgcmV0ID0gY2xr X2h3X3JlZ2lzdGVyX2dhdGVfcGFyZW50X2h3KE5VTEwsICJ0ZXN0X2dhdGUiLA0KPiA+ID4gPiA+ IHBhcmVudCwNCj4gPiA+ID4gPiAwLCBOVUxMLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBOVUxMKTsNCj4gPiA+ID4gPiArICAgICBL VU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIHJldCk7DQo+ID4gPiA+ID4gKyAgICAg S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBwYXJlbnQsDQo+ID4gPiA+ID4gY2xrX2h3X2dldF9w YXJlbnQocmV0KSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgIGNsa19od191bnJlZ2lz dGVyX2dhdGUocmV0KTsNCj4gPiA+ID4gPiArICAgICBjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9y YXRlKHBhcmVudCk7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRp YyB2b2lkIGNsa19nYXRlX3JlZ2lzdGVyX3Rlc3RfaGl3b3JkX2ludmFsaWQoc3RydWN0DQo+ID4g PiA+ID4ga3VuaXQNCj4gPiA+ID4gPiAqdGVzdCkNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsg ICAgIHN0cnVjdCBjbGtfaHcgKnJldDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAgcmV0 ID0gY2xrX2h3X3JlZ2lzdGVyX2dhdGUoTlVMTCwgInRlc3RfZ2F0ZSIsIE5VTEwsIDAsDQo+ID4g PiA+ID4gTlVMTCwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy MCwgQ0xLX0dBVEVfSElXT1JEX01BU0ssDQo+ID4gPiA+ID4gTlVMTCk7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsgICAgIEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIElTX0VSUihyZXQpKTsNCj4g PiA+ID4gPiArfQ0KPiA+ID4gPiANCj4gPiA+ID4gRG8gd2UgcmVhbGx5IG5lZWQgYWxsIHRoZXNl IHJlZ2lzdHJhdGlvbiB0ZXN0cz8gSSBndWVzcyBtb3N0IG9mDQo+ID4gPiA+IHRoZQ0KPiA+ID4g PiBjb2RlIHBhdGggd291bGQgYmUgdGVzdGVkIGJ5IGp1c3Qgb25lIG9mIHRoZXNlIC0gaG93IG11 Y2ggdmFsdWUNCj4gPiA+ID4gd2UNCj4gPiA+ID4gYWRkDQo+ID4gPiA+IGJ5IGFkZGluZyByZXN0 IG9mIHRoZSByZWdpc3RyYXRpb24gY2FzZXM/IChqdXN0IHdvbmRlcmluZykNCj4gPiA+ID4gDQo+ ID4gPiANCj4gPiA+IFRoZSBhZHZhbnRhZ2Ugb2YgaGF2aW5nIG11bHRpcGxlIHRlc3RzIGhlcmUg aXMgdGhhdCBpdCdzIHJlYWxseQ0KPiA+ID4gb2J2aW91cyBpZiBqdXN0IG9uZSBvZiB0aGVzZSBm dW5jdGlvbiBicmVha3M6IHRoYXQncyBwcm9iYWJseSBub3QNCj4gPiA+IGVub3Jtb3VzbHkgbGlr ZWx5LA0KPiA+IA0KPiA+IE15IHBvaW50IGV4YWN0bHkuDQo+IA0KPiBJIGhvbmVzdGx5IGRvbid0 IGtub3cuIFRCSCwgSSB0aGluayBJIGhhdmUgYSBnb29kIGlkZWEgd2hhdCBhIGdvb2QNCj4gdGVz dCBjYXNlIHNob3VsZCBsb29rIGxpa2UsIGFzIGZvciBtZWFzdXJpbmcgaG93IHVzZWZ1bCBhIHRl c3QgY2FzZQ0KPiBpcywgdGhhdCdzIGhhcmRlciBhbmQgSSBhbSBub3Qgc3VyZSBhbnlvbmUgcmVh bGx5IGhhcyBhIGdyZWF0IGFuc3dlcg0KPiBmb3IgdGhpcy4gSSBqdXN0IHJlYWQgYSBsaXRlcmF0 dXJlIHJldmlldyBvbiBtZWFzdXJpbmcgY29kZSBxdWFsaXR5DQo+IGFuZCB0aGV5IGNvbmNsdWRl ZCB0aGF0IGNvdmVyYWdlIHByb3ZpZGVkIG9ubHkgYSB3ZWFrIHNpZ25hbCBhdCBiZXN0DQo+IGFu ZCB0aGUgYmVzdCBzaWduYWwgY2FtZSBmcm9tICJlbmdpbmVlcnMnIHBlcmNlcHRpb24gb2YgY29k ZQ0KPiBxdWFsaXR5Ii4NCj4gDQo+IFRoZSB3YXkgSSB1c3VhbGx5IHdyaXRlIHRlc3RzIGlzOiBJ IHdyaXRlIG15IGNvZGUgZmlyc3QuIEkgdGhlbiB3cml0ZQ0KPiBzb21lIHVuaXQgdGVzdHMgdG8g ZXhlcmNpc2Ugc29tZSBiYXNpYyBmZWF0dXJlcyBvZiBteSBjb2RlLiBUaGVuIEkNCj4gd3JpdGUg c29tZSBpbnRlZ3JhdGlvbiBvciBlbmQtdG8tZW5kIHRlc3RzIHRvIG1ha2Ugc3VyZSBteSBjb2Rl DQo+ICJmaXRzIg0KPiBpbiB0aGUgam9iIGl0J3Mgc3VwcG9zZWQgdG8gZG8uIElmIGV2ZXJ5dGhp bmcgd29ya3MsIEkgYW0gZG9uZS4gSWYNCj4gbm90LCB0aGVuIEkgc3RhcnQgd3JpdGluZyB0ZXN0 cyB0byBuYXJyb3cgZG93biB3aGF0IGRvZXNuJ3Qgd29yayB0aGUNCj4gd2F5IEkgZXhwZWN0LiBF dmVudHVhbGx5IEkgd3JpdGUgYSB0ZXN0IHRoYXQgY2xlYXJseSBleHBvc2VzIHRoZQ0KPiBpc3N1 ZS4gSSBmaXggdGhlIGlzc3VlLCBhbmQgSSByZXJ1biB0aGUgdGVzdHMgdG8gbWFrZSBzdXJlIHRo ZXkgZmxpcA0KPiBmcm9tIGZhaWwgdG8gcGFzcy4gSSB0aGVuIGxvb2sgdGhyb3VnaCBhbGwgdGhl IG5ldyB0ZXN0cyBJIHdyb3RlIGFuZA0KPiB0cnkgdG8gbWFrZSBhIGp1ZGdlbWVudCBjYWxsIGFi b3V0IGhvdyB1c2VmdWwgSSB0aGluayB0aGUgdGVzdCB3aWxsDQo+IGJlDQo+IGluIHRoZSBmdXR1 cmUuIChJIGFtIGN1cmlvdXMgd2hhdCBvdGhlciBwZW9wbGUncyB0aG91Z2h0cyBhcmUgb24gdGhp cw0KPiBhcHByb2FjaC4pDQoNCkkgbGlrZSB0aGlzIGFwcHJvYWNoLiBJIGtub3cgY29sbGVhZ3Vl cyB3aG8gY2xhaW0gdGhhdCB3cml0aW5nIHRoZSB0ZXN0DQpmaXJzdCBpcyB0aGUgb25seSB3YXkg dG8gZ28uIEkgYWxzbyBrbm93IGNvbGxlYWd1ZXMgd2hvIHJlbHkgb25seSBvbg0KVVRzIGF0IHNv bWUgc2ltdWxhdGVkIGVudmlyb25tZW50LiBBbmQgSSBrbm93IGNvbGxlYWd1ZXMgd2hvIGhhcmRs eQ0KdGVzdCBhdCBhbGwuDQoNCkFuZCBJIHVzdWFsbHkgaGF2ZSBhbiBvcGluaW9uIG9uIHRoZSBj b2xsZWFndWVzIGFzIGVuZ2luZWVycy4gSSBrbm93DQp3aGF0IHRvIHRoaW5rIHdoZW4gSSBhc2sg ZnJvbSBteXNlbGYgd2hldGhlciBJIHdvdWxkIGhpcmUgdGhpcyBvciB0aGF0DQpjb2xsZWFndWUg Zm9yIG15IG93biBjb21wYW55IG9yIHRha2UgaGltL2hlciBvbiBteSBwcm9qZWN0LiAoQW5kIGZv cg0KYWxsIG9mIHRoZSBqZWFsb3VzIHBlcnNvbnMgb3IgcGVyc29ucyB3aG8gc3RhcnRlZCB0byB0 aGluayBob3cgdG8NCnV0aWxpemUgbXkgbW9uZXkgYW5kIHBvc2l0aW9uOiBObyAtIEkgZG9uJ3Qg aGF2ZSBhIGNvbXBhbnksIEkgYW0gbm90DQpyaWNoIGFuZCBJIGFtIG5vdCBpbiBhIHBvc2l0aW9u IHdoZXJlIEkgcGljayBjby13b3JrZXJzLiBTbyBqdXN0IGZvcmdldA0KaXQuIFhEICkuIEFuZCBJ IG11c3Qgc2F5IHRoYXQgdGhlaXIgcHJlZmVycmVkIHdheSBvZiB0ZXN0aW5nIGRvZXMgbm90DQpj b3JyZWxhdGUgd2l0aCB0aGlzLiBTbyBJJ2Qgc2F5IHRoZXJlIGlzIG5vIHNpbmdsZSBnb29kIGFw cHJvYWNoIHRvDQptYWtlIHlvdSBhIGJldHRlciBlbmdpbmVlci4NCg0KSSBkbyBhbHNvIHdyaXRl IHRoZSBjb2RlIGZpcnN0LiBUaGVuIEkgcmFuIGl0IGluIGl0J3MgcmVhbCBlbnZpcm9ubWVudA0K YW5kIGRvIHNvbWUgdGVzdHMgd2hpY2ggdmVyaWZ5IHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5 LiBBdCB0aGF0DQpwaGFzZSBJIHVzdWFsbHkgZml4IHRoZSBjb2RlLiBUaGVuIEkgZXZhbHVhdGUg dGhlIGNvbXBsZXhpdHkgYW5kIGFkZA0KVVRzIGZvciBwb3J0aW9ucyB3aGljaCBJIHRoaW5rIGFy ZSBlcnJvciBwcm9uZS4gQW5kIGFmdGVyIHRoZQ0KcmVsZWFzZS9zdWJtaXNzaW9uIEkgdHJ5IHRv IGFkZHJlc3MgdGhlIHF1ZXN0aW9ucy9lcnJvciByZXBvcnRzDQpxdWlja2x5Lg0KDQo+IFdoZW4g aXQgY29tZXMgZG93biB0byBpdCwgSSBkb24ndCBrbm93IHRoaXMgY29kZSBiYXNlIHdlbGwgZW5v dWdoIHRvDQo+IGtub3cgd2hldGhlciBhbGwgdGhlc2UgcmVnaXN0cmF0aW9uIHRlc3RzIGFyZSB1 c2VmdWwsIGJ1dCBJIHRoaW5rLCBhcw0KPiB0aGV5IGFyZSB3cml0dGVuLCB0aGV5IGFyZSBlYXN5 IHRvIHVuZGVyc3RhbmQsIGFuZCB0aGF0IGlzIHdoYXQgSSB3YXMNCj4gcmV2aWV3aW5nLg0KDQpJ IHRoaW5rIHdlIGNhbid0IGRlbWFuZCBtb3JlIGZyb20geW91LiBJIGhvcGUgc29tZW9uZSB3aWxs IGJlIHRoZXJlDQpxdWVzdGlvbmluZyBpZiB0ZXN0cyBhcmUgdXNlZnVsbCBvciBjb3VsZCBiZSBz aHJpbmtlZCAtIGJ1dCBJIGRvbid0DQp0aGluayB3ZSBjYW4gZGVtYW5kIHRoYXQgZnJvbSB5b3Uu IFByb2JsZW0gaXMgdGhhdCBtYW55IHBlb3BsZSBzZWUgdGVzdA0KY29kZSBhcyBhIHNlY29uZGFy eSwgbGVzcyBpbnRlcmVzdGluZyB0aGluZyBhbmQgdGVuZCB0byBza2lwIHJldmlld2luZw0KaXQg LSBidXQgYXMgSSBzYWlkIGluIG1hbnkgcGxhY2VzIC0gdGVzdCBjb2RlIGhhcyBwb3RlbnRpYWxs eSBodWdlDQppbXBhY3QgdG8gY29kZSBtYWludGVuYW5jZS4gSGVuY2Ugd2UgZG8gbmVlZCBleHBl cnRzIG9mIHRoYXQgcGFydGljdWxhcg0KYXJlYSB0byBwYXkgYXR0ZW50aW9uIG9uIHRlc3QgY29k ZSB0b28uIEFuZCBJIHRoaW5rIEkgaGF2ZSBub3cgZG9uZSBteQ0Kc2hhcmUgb24gdHJ5aW5nIHRv IGVuc3VyZSBpdCBoYXBwZW5zLiBSYWlzZWQgYXdhcmVuZXNzIGlzIHRoZSB0ZXJtLiBBbmQNCm5v IGRvdWJ0IG1hbnkgcGVvcGxlIHRoaW5rIEkndmUgbm93IGRvbmUgbXVjaCBtb3JlIHRoYW4gSSBz aG91bGQgOnANCg0KPiANCj4gVGhpcyBpcyBhbGwgYSB2ZXJ5IGxvbmcgd2F5IG9mIHNheWluZzog IkkgdGhpbmsgdGhpcyBpcyBhIHF1ZXN0aW9uDQo+IGZvcg0KPiBTdGVwaGVuIiA6LSkNCg0KWWVz LiBJIHRoaW5rIFN0ZXBoZW4gaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGVjaWRpbmcgaWYgdGVz dHMgYXJlIGdvb2QNCmFzIHRoZXkgd2VyZSBvciBpZiBoZSB0aGlua3Mgc29tZSBvZiBteSBjb21t ZW50cyB3ZXJlIHJlbGV2YW50Lg0KDQo+IA0KPiA+ID4gIGJ1dCB0aGVyZSdzIGFsc28gbm90IG11 Y2ggb2YgYSBjb3N0IHRvIGhhdmluZyB0aGVtDQo+ID4gDQo+ID4gQW5kIHRoaXMgaXMgdGhlIG90 aGVyIHNpZGUgb2YgdGhlIGVxdWF0aW9uLiBBbmQgSSBsZWF2ZSB0aGlzDQo+ID4gZXN0aW1hdGlv bg0KPiA+IHRvIG90aGVycyAtIEkganVzdCB3YW50IHRvIHBvaW50IG91dCB0aGF0IGltYmFsYW5j ZSBpbiB0aGlzDQo+ID4gZXF1YXRpb24gaXMNCj4gPiB3aGF0IHVzdWFsbHkgbGVhZHMgdG8gd3Jp dGluZyBleGNlc3NpdmUgYW1vdW50cyBvZiB0ZXN0cyAtIHdoaWNoDQo+ID4gZXZlbnR1YWxseSBq dXN0IGhpbmRlcnMgZGV2ZWxvcG1lbnQgd2l0aCBsaXR0bGUgb3Igbm8gYmVuZWZpdHMuIEJ1dA0K PiA+IGFzDQo+ID4gSSBzYWlkLCBJIHdpbGwgbGVhdmUgdGhpcyB0byBzbWFydGVyIGd1eXMgdG8g ZXZhbHVhdGUuIEp1c3Qgd2FudGVkDQo+ID4gdG8NCj4gPiBwb2ludCBvdXQgdGhhdCB0aGlzIHNo b3VsZCBiZSBjb25zaWRlcmVkIDopDQo+IA0KPiBGYWlyIGVub3VnaC4gQW5kIEkgdGhpbmsgdGhh dCdzIGdyZWF0ISBVbml0IHRlc3RpbmcgaXMgIm5ldyIgdG8gdGhlDQo+IExpbnV4IGtlcm5lbCBh bmQgSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyBpdCB0aGUgcmlnaHQgd2F5LiBGcm9tIG15DQo+ IGV4cGVyaWVuY2UsIEkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGJyaW5nIGFib3V0IGEgIm5ldyIg dGhpbmcgbGlrZQ0KPiB0aGlzIGlzIHRvIGdldCBzb21lb25lIHdobyBpcyBvdmVybHkgbGliZXJh bCBpbiBhZG9wdGluZyB0aGUgbmV3DQo+IHRoaW5nLCBzb21lb25lIHdobyBpcyBtb3JlIGNvbnNl cnZhdGl2ZSwgYW5kIG1heWJlIHNvbWUgaW52ZXN0ZWQsIGJ1dA0KPiBsZXNzIG9waW5pb25hdGVk IGJ5c3RhbmRlcnMgYW5kIG1ha2UgdGhlbSBhbGwgdHJ5IHRvIGFncmVlLg0KDQpZb3UgZGlkbid0 IHdyaXRlIG92ZXJseSBjb25zZXJ2YXRpdmUsIHRoYW5rcyBmb3IgdGhhdCA7KSAoSSdtIHVzaW5n IHZpbQ0Kbm90IHZpIGFmdGVyIGFsbC4gQW5kIHRoYXQncyByZWxlYXNlZCBhdCA5MCdzIHdoaWNo IG1ha2VzIG1lIHByZXR0eQ0KbW9kZXJuLCByaWdodD8pDQoNCj4gT25jZSB3ZSBoYXZlIGRlYmF0 ZWQgb3ZlciBhIG51bWJlciBvZiB0ZXN0cywgaXQgc2hvdWxkIHN0YXJ0IGdldHRpbmcNCj4gZWFz aWVyLiBIb3BlZnVsbHksIGEgZ29vZCBwYXR0ZXJuIHdpbGwgZW1lcmdlIGFuZCBwZW9wbGUgd2ls bCBzdGFydA0KPiBmb2xsb3dpbmcgdGhhdCBwYXR0ZXJuLg0KDQpJIGxpa2UgeW91ciB2aWV3IDop IFdlbGwgc2FpZC4NCg0KQmVzdCBSZWdhcmRzDQogICAgLS1NYXR0aQ0KDQoNCg==