From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4EC4FC77B75 for ; Mon, 15 May 2023 10:31:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238179AbjEOKbx (ORCPT ); Mon, 15 May 2023 06:31:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240485AbjEOKbv (ORCPT ); Mon, 15 May 2023 06:31:51 -0400 Received: from forward501b.mail.yandex.net (forward501b.mail.yandex.net [178.154.239.145]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B6C331720; Mon, 15 May 2023 03:31:43 -0700 (PDT) Received: from mail-nwsmtp-smtp-production-main-36.iva.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-36.iva.yp-c.yandex.net [IPv6:2a02:6b8:c0c:a716:0:640:8b36:0]) by forward501b.mail.yandex.net (Yandex) with ESMTP id 70A9F5ED36; Mon, 15 May 2023 13:31:41 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-36.iva.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id eVXIbIpWx8c0-Qg0f65Wv; Mon, 15 May 2023 13:31:40 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maquefel.me; s=mail; t=1684146700; bh=Byt5vFELXhKL0zjGDptN7wCDvyfyf98clrk5FAb0l0U=; h=References:Date:In-Reply-To:Cc:To:From:Subject:Message-ID; b=i4fqvfi+81lKqBCspt2Td6wrb8gOguOhtl5hWvtFy82tU53otV7E4MXKLJyrqP5U0 /7cSqnfhuFODJpUJS0OMdZKeouNB4BOFdfoteu7XSOegUg28tauwQWmXLmAeqVZ3Hc CX7KPqgMzfx2VCNkxNUb2ejAYFtSqHxOxs31JAxA= Authentication-Results: mail-nwsmtp-smtp-production-main-36.iva.yp-c.yandex.net; dkim=pass header.i=@maquefel.me Message-ID: Subject: Re: [PATCH 12/43] clk: ep93xx: add DT support for Cirrus EP93xx From: Nikita Shubin To: Stephen Boyd Cc: Arnd Bergmann , Linus Walleij , Alexander Sverdlin , Michael Turquette , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org Date: Mon, 15 May 2023 16:31:41 +0300 In-Reply-To: References: <20230424123522.18302-1-nikita.shubin@maquefel.me> <20230424123522.18302-13-nikita.shubin@maquefel.me> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.3 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org SGVsbG8gU3RlcGhlbiEKClRoYW5rIHlvdSBmb3IgeW91ciByZXZpZXcuCgpBY2tub3dsZWRnZWQg YWxsIHJlbWFya3MsIGhvd2V2ZXIsIGkgZGlkbid0IGZ1bGx5IHVuZGVyc3Rvb2Qgc29tZSBvZgp0 aGUgcmVxdWlyZW1lbnRzOgoKPiBBbmQgbWF5YmUgdGhpcyBjYW4gYmUgcmVnaXN0ZXJlZCBmcm9t IHdoZXJldmVyIHRoZSByZWdtYXAgaXMgY3JlYXRlZD8KCkFyZSB5b3Ugc3VnZ2VzdGluZyB0aGF0 IGFsbCBjbG9jayBmcm9tIGluaXQsIGkuZS4gInBsbDEiLCAicGxsMiIsCiJoY2xrIiwgImZjbGsi LCAicGNsayIKClNob3VsZCBiZSBtb3ZlZCB0b8KgU29DIGRyaXZlciBpbnN0ZWFkOgoKaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjMwNDI0MTIzNTIyLjE4MzAyLTMtbmlraXRhLnNodWJp bkBtYXF1ZWZlbC5tZS8KCj8KCj4gRG9lcyBzb21lIGludGVycnVwdCBvciB0aW1lciBkcml2ZXIg dXNlIGRtYT8gV2h5IGFyZSB0aGVzZSByZWdpc3RlcmVkCj4gZWFybHk/CgplcDkzeHhfZG1hIHVz ZXMgc3Vic3lzX2luaXRjYWxsKGVwOTN4eF9kbWFfbW9kdWxlX2luaXQpCgpodHRwczovL2VsaXhp ci5ib290bGluLmNvbS9saW51eC92Ni4zLjIvc291cmNlL2RyaXZlcnMvZG1hL2VwOTN4eF9kbWEu YyNMMTQzMAoKSSBjYW4gbW92ZSBjbGsgdG8gdXNpbmcgYXJjaF9pbml0Y2FsbCBhbmQgbW92ZSBh bGwgc3R1ZmYgdG8gcHJvYmUsIGkKdGhpbmsuLi4KCj4gV2h5IGlzIHRoaXMgaW4gYXJtLyBkaXJl Y3Rvcnk/IElzbid0IGl0IGEgY2xvY2sgY29udHJvbGxlcj8KCmVwOTN4eCBjbG9ja3MsIHJlYm9v dCwgcGluY3RybCB1c2Ugc3lzY29uIHJlZ21hcCBhbmQgc29tZSBzcGVjaWFsCmZ1bmN0aW9ucyBm cm9tIFNvQywgaS5lLiAiU3lzY29uIFNvZnR3YXJlIExvY2sgUmVnaXN0ZXIiIC0gc28gd2UgYXJl CmFibGUgdG8gd3JpdGUgdG8gc29tZSByZWdpc3RlcnMgb25seSBhZnRlciB3cml0aW5nIHNvbWUg bWFnaWsgdmFsdWUKdGhlcmUuCgpTbyBhbGwgYWJvdmUgdXNlIHJlZ21hcCBmcm9tIFNvQy4KClNo b3VsZCBtYWtlIGEgc2VwYXJhdGUgY2xvY2sgY29udHJvbGxlciBsaWtlIG9uZSBpIGRpZCBmb3Ig cGluY3RybCA/ClRoZW4gaXQgc2hvdWxkIGxvb2sgbGlrZToKCnN5c2NvbkA4MDkzMDAwMCB7CiAg Y29tcGF0aWJsZSA9ICJjaXJydXMsZXA5MzAxLXN5c2NvbiIsCiAgICAgICAgICAgICAgICJzeXNj b24iLCAic2ltcGxlLW1mZCI7CiAgcmVnID0gPDB4ODA5MzAwMDAgMHgxMDAwPjsKICAjcmVzZXQt Y2VsbHMgPSA8MT47CiAgICAgIAogIGNsb2NrcyB7CiAgICB4dGFsaTogb3NjaWxsYXRvciB7CiAg ICAgIGNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwogICAgICAjY2xvY2stY2VsbHMgPSA8MD47 CiAgICAgIGNsb2NrLWZyZXF1ZW5jeSA9IDwxNDc0NTYwMD47CiAgICB9OwogIH07CiAgICAgIAog IGNsb2NrLWNvbnRyb2xsZXIgewogICAgI2Nsb2NrLWNlbGxzID0gPDE+OwogICAgY29tcGF0aWJs ZSA9ICJjaXJydXMsZXA5MzAxLWNsayI7CiAgICBjbG9ja3MgPSA8Jnh0YWxpPjsKICB9Owp9OwoK T3IgZXZlbiBzaW1wbHk6CgpjbG9ja3MgewogIHh0YWxpOiBvc2NpbGxhdG9yIHsKICAgIGNvbXBh dGlibGUgPSAiZml4ZWQtY2xvY2siOwogICAgI2Nsb2NrLWNlbGxzID0gPDA+OwogICAgY2xvY2st ZnJlcXVlbmN5ID0gPDE0NzQ1NjAwPjsKICB9Owp9OwogICAgICAKY2xvY2stY29udHJvbGxlciB7 CiAgI2Nsb2NrLWNlbGxzID0gPDE+OwogIGNvbXBhdGlibGUgPSAiY2lycnVzLGVwOTMwMS1jbGsi OwogIGNsb2NrcyA9IDwmeHRhbGk+Owp9OwoKT24gRnJpLCAyMDIzLTA0LTI4IGF0IDE3OjU4IC0w NzAwLCBTdGVwaGVuIEJveWQgd3JvdGU6Cj4gUXVvdGluZyBOaWtpdGEgU2h1YmluICgyMDIzLTA0 LTI0IDA1OjM0OjI4KQo+ID4gVGhpcyBpcyBhIHJld3JpdGUgb2YgRVA5M3h4IHRpbWVyIGRyaXZl ciBpbgo+ID4gYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyB0cnlpbmcgdG8gZG8gZXZlcnl0 aGluZwo+ID4gdGhlIGRldmljZSB0cmVlIHdheToKPiA+IAo+ID4gLSBjb252ZXJ0IHRvIHN5c2Nv biBkcml2ZXIKPiA+IC0gcHJvdmlkZSBjbG9jayBhY2NlcyB2aWEgb2YKPiAKPiBCdXQgY2xrZGV2 IGlzIHN0aWxsIGFyb3VuZD8KPiAKPiA+IAo+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBBbGV4YW5kZXIg U3ZlcmRsaW4gPGFsZXhhbmRlci5zdmVyZGxpbkBnbWFpbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5 OiBBbGV4YW5kZXIgU3ZlcmRsaW4gPGFsZXhhbmRlci5zdmVyZGxpbkBnbWFpbC5jb20+Cj4gPiBT aWduZWQtb2ZmLWJ5OiBOaWtpdGEgU2h1YmluIDxuaWtpdGEuc2h1YmluQG1hcXVlZmVsLm1lPgo+ ID4gLS0tCj4gPiAKPiA+IE5vdGVzOgo+ID4gwqDCoMKgIHJmYy0+djAKPiA+IMKgwqDCoCBMaW51 cyBXYWxsZWlqOgo+ID4gwqDCoMKgIC0gcmVuYW1lZCBhbGwgX191bmRlcnNjb3JlCj4gPiDCoMKg wqAgCj4gPiDCoMKgwqAgQWxleGFuZGVyIFN2ZXJkbGluOgo+ID4gwqDCoMKgIC0gIkxvZ2ljayIg LT4gIkxvZ2ljIgo+ID4gwqDCoMKgIAo+ID4gwqDCoMKgIENoYW5nZXMgYnkgQWxleGFuZGVyIFN2 ZXJkbGluOgo+ID4gwqDCoMKgIC0gcmVtb3ZlIHByX2luZm8KPiA+IMKgwqDCoCAtIERJVl9ST1VO RF9VUF9VTEwgLT4gRElWX1JPVU5EX0NMT1NFU1QKPiA+IMKgwqDCoCAtIGZpeCB6ZXJvaW5nIGJp dGZpZWxkIGluIGVwOTN4eF9kaXZfc2V0X3JhdGUKPiA+IMKgwqDCoCAtIGFkZCBzYW5pdHkgY2hl Y2sgZm9yIEVQOTNYWF9TWVNDT05fQ0hJUElEX0lECj4gPiDCoMKgwqAgLSB1c2UgYml0IGluZGV4 IGZvciBETUEgY2xvY2sncwo+ID4gwqDCoMKgIC0gZXA5M3h4X2Nsa19yZWdpc3Rlcl9nYXRlKCkg dGFrZXMgYml0IGluZGV4LCBub3QgbWFzawo+ID4gwqDCoMKgIC0gcmVtb3ZlIHJlZHVuZGFudCBk ZWZpbmUKPiA+IMKgwqDCoCAtIHVzZSBESVZfUk9VTkRfQ0xPU0VTVCgpIGV2ZXJ5d2hlcmUgdG8g YWNoaWV2ZSBmcmVxdWVuY2llcwo+ID4gY2xvc2VyIHRvIHRob3NlCj4gPiDCoMKgwqDCoMKgIHJl cXVlc3RlZAo+ID4gwqDCoMKgIC0gQWRkIHRoZSBmb3Jnb3R0ZW4gY29uZmlndXJhdGlvbiBmcm9t IHRoZSBkZWxldGVkCj4gPiDCoMKgwqDCoMKgIGFyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwo+ ID4gCj4gPiDCoGRyaXZlcnMvY2xrL0tjb25maWfCoMKgwqDCoMKgIHzCoMKgIDggKwo+ID4gwqBk cml2ZXJzL2Nsay9NYWtlZmlsZcKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gwqBkcml2ZXJzL2Nsay9j bGstZXA5M3h4LmMgfCA4ODAKPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ID4gwqAzIGZpbGVzIGNoYW5nZWQsIDg4OSBpbnNlcnRpb25zKCspCj4gPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2Nsay9jbGstZXA5M3h4LmMKPiA+IAo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvY2xrL0tjb25maWcgYi9kcml2ZXJzL2Nsay9LY29uZmlnCj4gPiBpbmRleCAx ZWVmMDViYjFmOTkuLmQzYWQ5NzViNjg4ZSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvY2xrL0tj b25maWcKPiA+ICsrKyBiL2RyaXZlcnMvY2xrL0tjb25maWcKPiA+IEBAIC00MzYsNiArNDM2LDE0 IEBAIGNvbmZpZyBDT01NT05fQ0xLX0syMTAKPiA+IMKgwqDCoMKgwqDCoMKgIGhlbHAKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoCBTdXBwb3J0IGZvciB0aGUgQ2FuYWFuIEtlbmRyeXRlIEsyMTAgUklT Qy1WIFNvQyBjbG9ja3MuCj4gPiDCoAo+ID4gK2NvbmZpZyBDT01NT05fQ0xLX0VQOTNYWAo+IAo+ IEtlZXAgdGhpcyBzb3J0ZWQgYmFzZWQgb24gS2NvbmZpZyBzeW1ib2wuCj4gCj4gPiArwqDCoMKg wqDCoMKgIGJvb2wgIkNsb2NrIGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGVwOTN4eCBTb0MiCj4g PiArwqDCoMKgwqDCoMKgIGRlcGVuZHMgb24gQVJDSF9FUDkzWFggfHwgQ09NUElMRV9URVNUCj4g PiArwqDCoMKgwqDCoMKgIHNlbGVjdCBNRkRfU1lTQ09OCj4gPiArwqDCoMKgwqDCoMKgIHNlbGVj dCBSRUdNQVAKPiA+ICvCoMKgwqDCoMKgwqAgaGVscAo+ID4gK8KgwqDCoMKgwqDCoMKgIFRoaXMg ZHJpdmVyIHN1cHBvcnRzIHRoZSBTb0MgY2xvY2tzIG9uIHRoZSBDaXJydXMgTG9naWMKPiA+IGVw OTN4eC4KPiA+ICsKPiA+IMKgc291cmNlICJkcml2ZXJzL2Nsay9hY3Rpb25zL0tjb25maWciCj4g PiDCoHNvdXJjZSAiZHJpdmVycy9jbGsvYW5hbG9nYml0cy9LY29uZmlnIgo+ID4gwqBzb3VyY2Ug ImRyaXZlcnMvY2xrL2JhaWthbC10MS9LY29uZmlnIgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL01ha2VmaWxlIGIvZHJpdmVycy9jbGsvTWFrZWZpbGUKPiA+IGluZGV4IGUzY2EwZDA1OGEy NS4uZGVlYzI1ZmZkMDA0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9jbGsvTWFrZWZpbGUKPiA+ ICsrKyBiL2RyaXZlcnMvY2xrL01ha2VmaWxlCj4gPiBAQCAtMjksNiArMjksNyBAQCBvYmotJChD T05GSUdfQ09NTU9OX0NMS19DRENFNzA2KcKgwqDCoMKgwqAgKz0gY2xrLQo+ID4gY2RjZTcwNi5v Cj4gPiDCoG9iai0kKENPTkZJR19DT01NT05fQ0xLX0NEQ0U5MjUpwqDCoMKgwqDCoMKgICs9IGNs ay1jZGNlOTI1Lm8KPiA+IMKgb2JqLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCArPSBjbGstY2xwczcxMXgubwo+ID4gwqBvYmotJChDT05GSUdfQ09NTU9OX0NM S19DUzIwMDBfQ1ApwqDCoMKgwqAgKz0gY2xrLWNzMjAwMC1jcC5vCj4gPiArb2JqLSQoQ09ORklH X0NPTU1PTl9DTEtfRVA5M1hYKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBjbGst ZXA5M3h4Lm8KPiA+IMKgb2JqLSQoQ09ORklHX0FSQ0hfU1BBUlg1KcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICs9IGNsay1zcGFyeDUubwo+ID4gwqBvYmotJChDT05GSUdfQ09NTU9OX0NMS19F Tjc1MjMpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGNsay1lbjc1MjMubwo+ID4g wqBvYmotJChDT05GSUdfQ09NTU9OX0NMS19GSVhFRF9NTUlPKcKgwqDCoCArPSBjbGstZml4ZWQt bW1pby5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWVwOTN4eC5jIGIvZHJpdmVy cy9jbGsvY2xrLWVwOTN4eC5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi5lNTkxM2ZjNGMzOWIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZl cnMvY2xrL2Nsay1lcDkzeHguYwo+ID4gQEAgLTAsMCArMSw4ODAgQEAKPiA+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ID4gKy8qCj4gPiArICogQ2xvY2sg Y29udHJvbCBmb3IgQ2lycnVzIEVQOTN4eCBjaGlwcy4KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MjEgTmlraXRhIFNodWJpbiA8bmlraXRhLnNodWJpbkBtYXF1ZWZlbC5tZT4KPiA+ICsgKgo+ID4g KyAqIEJhc2VkIG9uIGEgcmV3cml0ZSBvZiBhcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jOgo+ ID4gKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50 c3RvZmx5Lm9yZz4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIHByX2ZtdChmbXQpICJlcDkzeHggIiBL QlVJTERfTU9ETkFNRSAiOiAiIGZtdAo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc3Ry aW5nLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Nw aW5sb2NrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9jbGstcHJvdmlkZXIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29u Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ID4gKyNpbmNsdWRl IDxsaW51eC9yZWdtYXAuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc29jL2NpcnJ1cy9lcDkzeHgu aD4KPiA+ICsjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svY2lycnVzLGVwOTN4eC1jbG9jay5o Pgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KPiA+ICsKPiA+ICsjZGVmaW5lIEVQ OTNYWF9FWFRfQ0xLX1JBVEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDE0NzQ1NjAwCj4gPiArI2Rl ZmluZSBFUDkzWFhfRVhUX1JUQ19SQVRFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAzMjc2OAo+ID4g Kwo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QT1dFUl9TVEFURcKgwqDCoMKgwqAgMHgwMAo+ ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlTCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA0 Cj4gPiArI2RlZmluZSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VQVJUQkFVRMKgIEJJVCgyOSkKPiA+ ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UX1VTSF9FTsKgwqDCoCAyOAo+ID4gKyNkZWZp bmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yTTHCoCAyNwo+ID4gKyNkZWZpbmUgRVA5M1hY X1NZU0NPTl9QV1JDTlRfRE1BX00yTTDCoCAyNgo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9Q V1JDTlRfRE1BX00yUDjCoCAyNQo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1B X00yUDnCoCAyNAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDbCoCAy Mwo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDfCoCAyMgo+ID4gKyNk ZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDTCoCAyMQo+ID4gKyNkZWZpbmUgRVA5 M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDXCoCAyMAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NP Tl9QV1JDTlRfRE1BX00yUDLCoCAxOQo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRf RE1BX00yUDPCoCAxOAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDDC oCAxNwo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDHCoCAxNgo+ID4g KyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQxwqDCoMKgwqDCoMKgwqDCoMKgIDB4MjAKPiA+ ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMV9OQllQMcKgwqDCoCBCSVQoMjMpCj4gPiAr I2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS1NFVDLCoMKgwqDCoMKgwqDCoMKgwqAgMHgyNAo+ID4g KyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX05CWVAywqDCoMKgIEJJVCgxOSkKPiA+ICsj ZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMl9QTEwyX0VOwqAgQklUKDE4KQo+ID4gKyNkZWZp bmUgRVA5M1hYX1NZU0NPTl9ERVZDRkfCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDgwCj4gPiArI2Rl ZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VM0VOwqDCoMKgwqDCoCAyNAo+ID4gKyNkZWZpbmUg RVA5M1hYX1NZU0NPTl9ERVZDRkdfVTJFTsKgwqDCoMKgwqAgMjAKPiA+ICsjZGVmaW5lIEVQOTNY WF9TWVNDT05fREVWQ0ZHX1UxRU7CoMKgwqDCoMKgIDE4Cj4gPiArI2RlZmluZSBFUDkzWFhfU1lT Q09OX1ZJRENMS0RJVsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDg0Cj4gPiArI2Rl ZmluZSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FTkFCTEXCoMKgwqAgMTUKPiA+ICsjZGVmaW5lIEVQ OTNYWF9TWVNDT05fQ0xLRElWX0VTRUzCoMKgwqDCoMKgIEJJVCgxNCkKPiA+ICsjZGVmaW5lIEVQ OTNYWF9TWVNDT05fQ0xLRElWX1BTRUzCoMKgwqDCoMKgIEJJVCgxMykKPiA+ICsjZGVmaW5lIEVQ OTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlTCoMKgwqDCoMKgwqDCoCA4Cj4gPiArI2RlZmlu ZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAw eDhjCj4gPiArI2RlZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9TRU5BwqDCoCAzMQo+ID4g KyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9JMlNDTEtESVZfT1JJREXCoCBCSVQoMjkpCj4gPiArI2Rl ZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9TUE9MwqDCoCBCSVQoMTkpCj4gPiArI2RlZmlu ZSBFUDkzWFhfSTJTQ0xLRElWX1NESVbCoMKgwqDCoMKgwqDCoMKgwqAgKDEgPDwgMTYpCj4gPiAr I2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWMzLCoMKgwqDCoMKgwqAgKDAgPDwgMTcpCj4g PiArI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWNjTCoMKgwqDCoMKgwqAgKDEgPDwgMTcp Cj4gPiArI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWMTI4wqDCoMKgwqDCoCAoMiA8PCAx NykKPiA+ICsjZGVmaW5lIEVQOTNYWF9JMlNDTEtESVZfTFJESVZfTUFTS8KgwqDCoCAoMyA8PCAx NykKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWwqDCoMKgwqAgMHg5MAo+ ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfVFNFTsKgwqDCoMKgwqDCoMKg IDMxCj4gPiArI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9BRElWwqDCoMKgwqDC oMKgwqAgMTYKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTiAxNQo+ ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0RJVsKgwqDCoMKgwqDCoMKg IDAKPiA+ICsjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0hJUElEwqDCoMKgwqDCoMKgwqDCoMKgwqAg MHg5NAo+ID4gKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DSElQSURfSUTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgMHg5MjEzCj4gPiArCj4gPiArc3RhdGljIERFRklORV9TUElOTE9DSyhj bGtfbG9jayk7Cj4gCj4gVGhpcyBuYW1lIGlzIG5vdCB1bmlxdWUuIFBsZWFzZSBtYWtlIGl0IHVu aXF1ZSBieSBwcmVmaXhpbmcgd2l0aAo+IGVwOTN4eC4KPiAKPiA+ICtzdGF0aWMgc3RydWN0IHJl Z21hcCAqZXA5M3h4X21hcDsKPiAKPiBEbyB0aGVzZSBuZWVkIHRvIGJlIHN0YXRpYyBnbG9iYWxz PyBEb2luZyBhIHJ1bnRpbWUgYWxsb2NhdGlvbgo+IHJlZHVjZXMKPiB0aGUgc2l6ZSBvdmVyaGVh ZCBmb3Iga2VybmVsIGltYWdlcyB0aGF0IGRvbid0IGhhdmUgdGhpcyBoYXJkd2FyZSBidXQKPiBj b21waWxlIGluIHRoaXMgZHJpdmVyLCBpLmUuIGRpc3Ryb3MuCj4gCj4gPiArI2RlZmluZSBlcDkz eHhfcmVnbWFwX3JlYWQocmVnLCB2YWwpIHJlZ21hcF9yZWFkKGVwOTN4eF9tYXAsIHJlZywKPiA+ IHZhbCkKPiA+ICsKPiA+ICsvKiBLZWVwcyB0cmFjayBvZiBhbGwgY2xvY2tzICovCj4gPiArc3Rh dGljIHN0cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRhICplcDkzeHhfY2xrX2RhdGE7Cj4gCj4gU2Ft ZSBzdGF0aWMgZ2xvYmFsIHF1ZXN0aW9uLgo+IAo+ID4gKwo+ID4gK3N0YXRpYyBjaGFyIGZjbGtf ZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgOCwgMTYsIDEsIDEsIDEgfTsKPiA+ICtzdGF0aWMgY2hh ciBoY2xrX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDUsIDYsIDgsIDE2LCAzMiB9Owo+ID4gK3N0 YXRpYyBjaGFyIHBjbGtfZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgOCB9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjaGFyIGFkY19kaXZpc29yc1tdID0geyAxNiwgNCB9Owo+ID4gK3N0YXRpYyBjaGFyIHNj bGtfZGl2aXNvcnNbXSA9IHsgMiwgNCB9Owo+ID4gK3N0YXRpYyBjaGFyIGxyY2xrX2Rpdmlzb3Jz W10gPSB7IDMyLCA2NCwgMTI4IH07Cj4gCj4gY29uc3Q/Cj4gCj4gPiArCj4gPiArc3RhdGljIGNv bnN0IGNoYXIgKiBjb25zdCBtdXhfcGFyZW50c1tdID0gewo+ID4gK8KgwqDCoMKgwqDCoCAieHRh bGkiLAo+ID4gK8KgwqDCoMKgwqDCoCAicGxsMSIsCj4gPiArwqDCoMKgwqDCoMKgICJwbGwyIgo+ ID4gK307Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBQTEwgcmF0ZSA9IDE0Ljc0NTYgTUh6ICogKFgx RkJEICsgMSkgKiAoWDJGQkQgKyAxKSAvIChYMklQRCArCj4gPiAxKSAvIDJeUFMKPiA+ICsgKi8K PiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjX3BsbF9yYXRlKHVuc2lnbmVkIGxvbmcgbG9u ZyByYXRlLCB1MzIKPiA+IGNvbmZpZ193b3JkKQo+IAo+IHU2NCByYXRlCj4gCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoCBpbnQgaTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmF0ZSAqPSAoKGNv bmZpZ193b3JkID4+IDExKSAmIDB4MWYpICsgMTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qCj4gPiBYMUZCRCAqLwo+ID4gK8KgwqDCoMKgwqDCoCByYXRlICo9ICgoY29uZmlnX3dvcmQg Pj4gNSkgJiAweDNmKSArIDE7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiBY MkZCRCAqLwo+ID4gK8KgwqDCoMKgwqDCoCBkb19kaXYocmF0ZSwgKGNvbmZpZ193b3JkICYgMHgx ZikgKyAxKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4gWDJJUEQgKi8K PiA+ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8ICgoY29uZmlnX3dvcmQgPj4gMTYpICYg Myk7IGkrKynCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiBQUyAqLwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmF0ZSA+Pj0gMTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJu ICh1bnNpZ25lZCBsb25nKXJhdGU7Cj4gCj4gRHJvcCB1c2VsZXNzIGNhc3QuCj4gCj4gPiArfQo+ ID4gKwo+ID4gK3N0cnVjdCBjbGtfcHNjIHsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19o dyBodzsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHJlZzsKPiA+ICvCoMKgwqDCoMKg wqAgdTggYml0X2lkeDsKPiA+ICvCoMKgwqDCoMKgwqAgdTMyIG1hc2s7Cj4gPiArwqDCoMKgwqDC oMKgIHU4IHNoaWZ0Owo+ID4gK8KgwqDCoMKgwqDCoCB1OCB3aWR0aDsKPiA+ICvCoMKgwqDCoMKg wqAgY2hhciAqZGl2Owo+ID4gK8KgwqDCoMKgwqDCoCB1OCBudW1fZGl2Owo+ID4gK8KgwqDCoMKg wqDCoCBzcGlubG9ja190ICpsb2NrOwo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSB0b19jbGtf cHNjKF9odykgY29udGFpbmVyX29mKF9odywgc3RydWN0IGNsa19wc2MsIGh3KQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZXA5M3h4X2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9IHRvX2Nsa19wc2MoaHcp Owo+ID4gK8KgwqDCoMKgwqDCoCB1MzIgdmFsOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkz eHhfcmVnbWFwX3JlYWQocHNjLT5yZWcsICZ2YWwpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBy ZXR1cm4gKHZhbCAmIEJJVChwc2MtPmJpdF9pZHgpKSA/IDEgOiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGVwOTN4eF9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9IHRvX2Nsa19wc2MoaHcpOwo+ ID4gK8KgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPiA+ICvCoMKgwqDCoMKg wqAgdTMyIHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHBzYy0+bG9jaykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKHBzYy0+bG9jaywg ZmxhZ3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3JlYWQocHNjLT5y ZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgfD0gQklUKHBzYy0+Yml0X2lkeCk7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsLCBw c2MtPnJlZyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmIChwc2MtPmxvY2spCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKHBzYy0+bG9j aywgZmxhZ3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgZXA5M3h4X2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9IHRvX2Nsa19wc2Mo aHcpOwo+ID4gK8KgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPiA+ICvCoMKg wqDCoMKgwqAgdTMyIHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHBzYy0+bG9jaykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKHBzYy0+ bG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3JlYWQo cHNjLT5yZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgJj0gfkJJVChwc2MtPmJpdF9p ZHgpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRl KHZhbCwgcHNjLT5yZWcpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAocHNjLT5sb2NrKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShw c2MtPmxvY2ssIGZsYWdzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBj bGtfb3BzIGNsa19lcDkzeHhfZ2F0ZV9vcHMgPSB7Cj4gPiArwqDCoMKgwqDCoMKgIC5lbmFibGUg PSBlcDkzeHhfY2xrX2VuYWJsZSwKPiA+ICvCoMKgwqDCoMKgwqAgLmRpc2FibGUgPSBlcDkzeHhf Y2xrX2Rpc2FibGUsCj4gPiArwqDCoMKgwqDCoMKgIC5pc19lbmFibGVkID0gZXA5M3h4X2Nsa19p c19lbmFibGVkLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBjbGtfaHcgKmVwOTN4 eF9jbGtfcmVnaXN0ZXJfZ2F0ZShjb25zdCBjaGFyICpuYW1lLAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnN0IGNoYXIgKnBhcmVudF9uYW1lLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCByZWcs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdTggYml0X2lkeCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0 cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBjbGtfcHNj ICpwc2M7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBjbGsgKmNsazsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqAgcHNjID0ga3phbGxvYyhzaXplb2YoKnBzYyksIEdGUF9LRVJORUwpOwo+ID4gK8Kg wqDCoMKgwqDCoCBpZiAoIXBzYykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm5hbWUg PSBuYW1lOwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm9wcyA9ICZjbGtfZXA5M3h4X2dhdGVfb3Bz Owo+ID4gK8KgwqDCoMKgwqDCoCBpbml0LmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVDsKPiA+ ICvCoMKgwqDCoMKgwqAgaW5pdC5wYXJlbnRfbmFtZXMgPSAocGFyZW50X25hbWUgPyAmcGFyZW50 X25hbWUgOiBOVUxMKTsKPiA+ICvCoMKgwqDCoMKgwqAgaW5pdC5udW1fcGFyZW50cyA9IChwYXJl bnRfbmFtZSA/IDEgOiAwKTsKPiAKPiBQbGVhc2UgdXNlIHBhcmVudF9kYXRhIG9yIHBhcmVudF9o dyBpbnN0ZWFkLgo+IAo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBwc2MtPnJlZyA9IHJlZzsKPiA+ ICvCoMKgwqDCoMKgwqAgcHNjLT5iaXRfaWR4ID0gYml0X2lkeDsKPiA+ICvCoMKgwqDCoMKgwqAg cHNjLT5ody5pbml0ID0gJmluaXQ7Cj4gPiArwqDCoMKgwqDCoMKgIHBzYy0+bG9jayA9ICZjbGtf bG9jazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgY2xrID0gY2xrX3JlZ2lzdGVyKE5VTEwsICZw c2MtPmh3KTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKElTX0VSUihjbGspKSB7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrZnJlZShwc2MpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9DQVNUKGNsayk7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuICZwc2MtPmh3Owo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdTggZXA5M3h4X211eF9nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9IHRvX2Nsa19wc2MoaHcpOwo+ ID4gK8KgwqDCoMKgwqDCoCB1MzIgdmFsOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhf cmVnbWFwX3JlYWQocHNjLT5yZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoISh2YWwg JiBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FU0VMKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoISh2YWwgJiBFUDkz WFhfU1lTQ09OX0NMS0RJVl9QU0VMKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiAxOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMjsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBlcDkzeHhfbXV4X3NldF9wYXJlbnRfbG9jayhzdHJ1Y3QgY2xrX2h3 ICpodywgdTggaW5kZXgpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX3BzYyAq cHNjID0gdG9fY2xrX3BzYyhodyk7Cj4gPiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxh Z3MgPSAwOwo+ID4gK8KgwqDCoMKgwqDCoCB1MzIgdmFsOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCBpZiAoaW5kZXggPj0gQVJSQVlfU0laRShtdXhfcGFyZW50cykpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg aWYgKHBzYy0+bG9jaykKPiAKPiBDYW4geW91IHNpbXBseSBsb2NrIGFsbCB0aGUgdGltZT8KPiAK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKHBzYy0+ bG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3JlYWQo cHNjLT5yZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgJj0gfihFUDkzWFhfU1lTQ09O X0NMS0RJVl9FU0VMIHwKPiA+IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BTRUwpOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoCBpZiAoaW5kZXggIT0gMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdmFsIHw9IEVQOTNYWF9TWVNDT05fQ0xLRElWX0VTRUw7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgfD0gKGluZGV4IC0gMSkgPyBFUDkzWFhfU1lTQ09OX0NM S0RJVl9QU0VMIDogMDsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCBlcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbCwgcHNjLT5yZWcpOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoCBpZiAocHNjLT5sb2NrKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwc2MtPmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIGlz X2Jlc3QodW5zaWduZWQgbG9uZyByYXRlLCB1bnNpZ25lZCBsb25nIG5vdywKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGJlc3QpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gYWJzKHJhdGUgLSBub3cpIDwgYWJzKHJhdGUgLSBi ZXN0KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBlcDkzeHhfbXV4X2RldGVybWluZV9y YXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX3JhdGVfcmVxdWVzdCAq cmVxKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyByYXRlID0gcmVxLT5y YXRlOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrICpwYXJlbnRfYmVzdCA9IE5VTEw7Cj4g PiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Cj4gPiArwqDCoMKgwqDC oMKgIHVuc2lnbmVkIGxvbmcgYmVzdF9yYXRlID0gMCwgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZTsK PiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZV9iZXN0Owo+ID4gK8Kg wqDCoMKgwqDCoCBpbnQgZGl2LCBwZGl2Owo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgaTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqAgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFRyeSB0aGUgdHdvIHBs bCdzIGFuZCB0aGUgZXh0ZXJuYWwgY2xvY2sKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIEJlY2F1c2Ug dGhlIHZhbGlkIHByZWRpdmlkZXJzIGFyZSAyLCAyLjUgYW5kIDMsIHdlCj4gPiBtdWx0aXBseQo+ ID4gK8KgwqDCoMKgwqDCoMKgICogYWxsIHRoZSBjbG9ja3MgYnkgMiB0byBhdm9pZCBmbG9hdGlu ZyBwb2ludCBtYXRoLgo+ID4gK8KgwqDCoMKgwqDCoMKgICoKPiA+ICvCoMKgwqDCoMKgwqDCoCAq IFRoaXMgaXMgYmFzZWQgb24gdGhlIGFsZ29yaXRobSBpbiB0aGUgZXA5M3h4IHJhc3Rlcgo+ID4g Z3VpZGU6Cj4gPiArwqDCoMKgwqDCoMKgwqAgKiBodHRwOi8vYmUtYS1tYXZlcmljay5jb20vZW4v cHVicy9hcHBOb3RlL0FOMjY5UkVWMS5wZGYKPiA+ICvCoMKgwqDCoMKgwqDCoCAqCj4gPiArwqDC oMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUobXV4X3BhcmVudHMpOyBpKyspIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBjbGsgKnBhcmVudCA9IGNsa19nZXRfc3lzKG11eF9wYXJlbnRzW2ldLAo+ID4gTlVM TCk7Cj4gCj4gVGhlIHBvc3NpYmxlIHBhcmVudHMgY2FuIGJlIGhhZCB3aXRoIGNsa19od19nZXRf cGFyZW50X2J5X2luZGV4KCkuCj4gVXNlCj4gdGhhdCBzbyB5b3UgY2FuIHN0b3AgbGVha2luZyAu Cj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXJlbnRfcmF0ZSA9 IGNsa19nZXRfcmF0ZShwYXJlbnQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bWNsa19yYXRlID0gcGFyZW50X3JhdGUgKiAyOwo+IAo+IFRoZSBwYXJlbnRfcmF0ZSBpcyBhdmFp bGFibGUgdmlhIGNsa19od19nZXRfcmF0ZSgpIG9yIGJ5IGxvb2tpbmcgYXQKPiB0aGUKPiBjbGtf cmF0ZV9yZXF1ZXN0IHN0cnVjdHVyZSAncmVxJyBpZiB0aGUgcGFyZW50IGlzIHRoZSBjdXJyZW50 IHBhcmVudCwKPiBvcgo+IGJ5IGNhbGxpbmcgY2xrX2h3X3JvdW5kX3JhdGUoKSBvciB0aGUgcG9v cmx5IG5hbWVkCj4gX19jbGtfZGV0ZXJtaW5lX3JhdGUoKS4gSW4gdGhpcyBjYXNlIGl0IGxvb2tz IGxpa2UgdGhlIHBhcmVudHMgYXJlbid0Cj4gZXhwZWN0ZWQgdG8gY2hhbmdlIHJhdGUsIHNvIGNs a19od19nZXRfcmF0ZSgpIHdpbGwgd29yay4KPiAKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAocGRpdiA9IDQ7IHBkaXYgPD0gNjsgcGRpdisrKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGl2ID0g RElWX1JPVU5EX0NMT1NFU1QobWNsa19yYXRlLCByYXRlICoKPiA+IHBkaXYpOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkaXYgPCAxIHx8IGRp diA+IDEyNykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWN0dWFsX3JhdGUgPSBESVZfUk9VTkRfQ0xPU0VT VChtY2xrX3JhdGUsCj4gPiBwZGl2ICogZGl2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaXNfYmVzdChyYXRlLCBhY3R1YWxfcmF0 ZSwgYmVzdF9yYXRlKSkKPiA+IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmVzdF9yYXRlID0gYWN0dWFsX3JhdGU7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBhcmVudF9yYXRlX2Jlc3QgPSBwYXJlbnRfcmF0ZTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFyZW50X2Jl c3QgPSBwYXJlbnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKg wqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmICghcGFyZW50X2Jlc3QpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqAgcmVxLT5iZXN0X3BhcmVudF9yYXRlID0gcGFyZW50X3JhdGVfYmVzdDsKPiA+ICvC oMKgwqDCoMKgwqAgcmVxLT5iZXN0X3BhcmVudF9odyA9IF9fY2xrX2dldF9odyhwYXJlbnRfYmVz dCk7Cj4gPiArwqDCoMKgwqDCoMKgIHJlcS0+cmF0ZSA9IGJlc3RfcmF0ZTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBs b25nIGVwOTN4eF9kZGl2X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcKPiA+IHBhcmVudF9y YXRlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9IHRvX2Ns a19wc2MoaHcpOwo+ID4gK8KgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHJhdGUgPSAwOwo+ID4g K8KgwqDCoMKgwqDCoCB1MzIgdmFsOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgcGRpdiwgZGl2Owo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3JlYWQocHNjLT5yZWcsICZ2YWwp Owo+ID4gK8KgwqDCoMKgwqDCoCBwZGl2ID0gKCh2YWwgPj4gRVA5M1hYX1NZU0NPTl9DTEtESVZf UERJVl9TSElGVCkgJiAweDAzKTsKPiA+ICvCoMKgwqDCoMKgwqAgZGl2ID0gdmFsICYgMHg3ZjsK PiA+ICvCoMKgwqDCoMKgwqAgaWYgKGRpdiA+IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByYXRlID0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUgKiAyLCAocGRpdiAr Cj4gPiAzKSAqIGRpdik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiByYXRlOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGVwOTN4eF9kZGl2X3NldF9yYXRlKHN0cnVjdCBjbGtf aHcgKmh3LCB1bnNpZ25lZCBsb25nCj4gPiByYXRlLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9 IHRvX2Nsa19wc2MoaHcpOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgcGRpdiwgZGl2LCBucGRpdiwg bmRpdjsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBhY3R1YWxfcmF0ZSwgbWNsa19y YXRlLCByYXRlX2VyciA9IC0xOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgZm91bmQgPSAwOwo+ID4g K8KgwqDCoMKgwqDCoCB1MzIgdmFsOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVn bWFwX3JlYWQocHNjLT5yZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCBtY2xrX3JhdGUgPSBw YXJlbnRfcmF0ZSAqIDI7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGZvciAocGRpdiA9IDQ7IHBk aXYgPD0gNjsgcGRpdisrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkaXYg PSBESVZfUk9VTkRfQ0xPU0VTVChtY2xrX3JhdGUsIHJhdGUgKiBwZGl2KTsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkaXYgPCAxIHx8IGRpdiA+IDEyNykKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjdHVhbF9yYXRlID0gRElWX1JPVU5E X0NMT1NFU1QobWNsa19yYXRlLCBwZGl2ICoKPiA+IGRpdik7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWZvdW5kIHx8IGFicyhhY3R1YWxfcmF0ZSAtIHJhdGUp IDwgcmF0ZV9lcnIpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBucGRpdiA9IHBkaXYgLSAzOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5kaXYgPSBkaXY7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmF0ZV9lcnIgPSBhYnMoYWN0dWFsX3JhdGUgLSByYXRl KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3Vu ZCA9IDE7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gPiArwqDCoMKgwqDC oMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKCFmb3VuZCkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCAvKiBDbGVhciBvbGQgZGl2aWRlcnMgKi8KPiA+ICvCoMKgwqDCoMKgwqAgdmFsICY9IH4weDM3 ZjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyogU2V0IHRoZSBuZXcgcGRpdiBhbmQgZGl2IGJp dHMgZm9yIHRoZSBuZXcgY2xvY2sgcmF0ZSAqLwo+ID4gK8KgwqDCoMKgwqDCoCB2YWwgfD0gKG5w ZGl2IDw8IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlQpIHwgbmRpdjsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqAgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWwsIHBzYy0+cmVn KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBjbGtfZGRpdl9vcHMgPSB7Cj4gPiArwqDCoMKgwqDC oMKgIC5lbmFibGUgPSBlcDkzeHhfY2xrX2VuYWJsZSwKPiA+ICvCoMKgwqDCoMKgwqAgLmRpc2Fi bGUgPSBlcDkzeHhfY2xrX2Rpc2FibGUsCj4gPiArwqDCoMKgwqDCoMKgIC5pc19lbmFibGVkID0g ZXA5M3h4X2Nsa19pc19lbmFibGVkLAo+ID4gK8KgwqDCoMKgwqDCoCAuZ2V0X3BhcmVudCA9IGVw OTN4eF9tdXhfZ2V0X3BhcmVudCwKPiA+ICvCoMKgwqDCoMKgwqAgLnNldF9wYXJlbnQgPSBlcDkz eHhfbXV4X3NldF9wYXJlbnRfbG9jaywKPiA+ICvCoMKgwqDCoMKgwqAgLmRldGVybWluZV9yYXRl ID0gZXA5M3h4X211eF9kZXRlcm1pbmVfcmF0ZSwKPiA+ICvCoMKgwqDCoMKgwqAgLnJlY2FsY19y YXRlID0gZXA5M3h4X2RkaXZfcmVjYWxjX3JhdGUsCj4gPiArwqDCoMKgwqDCoMKgIC5zZXRfcmF0 ZSA9IGVwOTN4eF9kZGl2X3NldF9yYXRlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVj dCBjbGtfaHcgKmNsa19od19yZWdpc3Rlcl9kZGl2KGNvbnN0IGNoYXIgKm5hbWUsCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHJlZywKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1OCBiaXRfaWR4KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNs a19pbml0X2RhdGEgaW5pdDsKPiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYzsK PiA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGNsayAqY2xrOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCBwc2MgPSBremFsbG9jKHNpemVvZigqcHNjKSwgR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDC oMKgIGlmICghcHNjKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGluaXQubmFtZSA9IG5hbWU7 Cj4gPiArwqDCoMKgwqDCoMKgIGluaXQub3BzID0gJmNsa19kZGl2X29wczsKPiA+ICvCoMKgwqDC oMKgwqAgaW5pdC5mbGFncyA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgIGluaXQucGFyZW50X25hbWVz ID0gbXV4X3BhcmVudHM7Cj4gPiArwqDCoMKgwqDCoMKgIGluaXQubnVtX3BhcmVudHMgPSBBUlJB WV9TSVpFKG11eF9wYXJlbnRzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcHNjLT5yZWcgPSBy ZWc7Cj4gPiArwqDCoMKgwqDCoMKgIHBzYy0+Yml0X2lkeCA9IGJpdF9pZHg7Cj4gPiArwqDCoMKg wqDCoMKgIHBzYy0+bG9jayA9ICZjbGtfbG9jazsKPiA+ICvCoMKgwqDCoMKgwqAgcHNjLT5ody5p bml0ID0gJmluaXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGNsayA9IGNsa19yZWdpc3RlcihO VUxMLCAmcHNjLT5odyk7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChJU19FUlIoY2xrKSkgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga2ZyZWUocHNjKTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfQ0FTVChjbGspOwo+ID4gK8KgwqDCoMKgwqDC oCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJldHVybiAmcHNjLT5odzsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZXA5M3h4X2Rpdl9yZWNhbGNfcmF0ZShzdHJ1Y3Qg Y2xrX2h3ICpodywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9u Zwo+ID4gcGFyZW50X3JhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX3Bz YyAqcHNjID0gdG9fY2xrX3BzYyhodyk7Cj4gPiArwqDCoMKgwqDCoMKgIHUzMiB2YWw7Cj4gPiAr wqDCoMKgwqDCoMKgIHU4IGluZGV4Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVn bWFwX3JlYWQocHNjLT5yZWcsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoCBpbmRleCA9ICh2YWwg JiBwc2MtPm1hc2spID4+IHBzYy0+c2hpZnQ7Cj4gPiArwqDCoMKgwqDCoMKgIGlmIChpbmRleCA+ IHBzYy0+bnVtX2RpdikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAw Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50 X3JhdGUsIHBzYy0+ZGl2W2luZGV4XSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBsb25nIGVw OTN4eF9kaXZfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZwo+ID4g cmF0ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX3BzYyAqcHNjID0gdG9fY2xrX3BzYyhodyk7Cj4g PiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgYmVzdCA9IDAsIG5vdzsKPiA+ICvCoMKgwqDC oMKgwqAgYm9vbCBhc3NpZ25lZCA9IGZhbHNlOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgaTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IHBzYy0+bnVtX2RpdjsgaSsrKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKHJhdGUgKiBwc2MtPmRpdltp XSkgPT0gKnBhcmVudF9yYXRlKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiByYXRlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbm93ID0gRElWX1JPVU5EX0NMT1NFU1QoKnBhcmVudF9yYXRlLCBwc2MtPmRpdltp XSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWFzc2lnbmVk IHx8IGlzX2Jlc3QocmF0ZSwgbm93LCBiZXN0KSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiZXN0ID0gbm93Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXNzaWduZWQgPSB0cnVlOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgIHJldHVybiBiZXN0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IGVwOTN4eF9kaXZfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcKPiA+ IHJhdGUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ID4gK3sKPiA+ICvCoMKg wqDCoMKgwqAgc3RydWN0IGNsa19wc2MgKnBzYyA9IHRvX2Nsa19wc2MoaHcpOwo+ID4gK8KgwqDC oMKgwqDCoCB1MzIgdmFsOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgaTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqAgZXA5M3h4X3JlZ21hcF9yZWFkKHBzYy0+cmVnLCAmdmFsKTsKPiA+ICvCoMKgwqDC oMKgwqAgdmFsICY9IH5wc2MtPm1hc2s7Cj4gPiArwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkg PCBwc2MtPm51bV9kaXY7IGkrKykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChyYXRlID09IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBwc2MtCj4gPiA+ZGl2W2ld KSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZh bCB8PSBpIDw8IHBzYy0+c2hpZnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmIChpID09IHBzYy0+bnVtX2RpdikKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoCBlcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbCwgcHNjLT5yZWcpOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBjbGtfb3BzIGVwOTN4eF9kaXZfb3BzID0gewo+ID4gK8KgwqDCoMKgwqDCoCAu ZW5hYmxlID0gZXA5M3h4X2Nsa19lbmFibGUsCj4gPiArwqDCoMKgwqDCoMKgIC5kaXNhYmxlID0g ZXA5M3h4X2Nsa19kaXNhYmxlLAo+ID4gK8KgwqDCoMKgwqDCoCAuaXNfZW5hYmxlZCA9IGVwOTN4 eF9jbGtfaXNfZW5hYmxlZCwKPiA+ICvCoMKgwqDCoMKgwqAgLnJlY2FsY19yYXRlID0gZXA5M3h4 X2Rpdl9yZWNhbGNfcmF0ZSwKPiA+ICvCoMKgwqDCoMKgwqAgLnJvdW5kX3JhdGUgPSBlcDkzeHhf ZGl2X3JvdW5kX3JhdGUsCj4gPiArwqDCoMKgwqDCoMKgIC5zZXRfcmF0ZSA9IGVwOTN4eF9kaXZf c2V0X3JhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGNsa19odyAqY2xrX2h3 X3JlZ2lzdGVyX2Rpdihjb25zdCBjaGFyICpuYW1lLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGludCByZWcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggZW5hYmxl X2JpdCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1OCBzaGlmdCwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1OCB3aWR0aCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj aGFyICpjbGtfZGl2aXNvcnMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggbnVtX2Rp dikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7Cj4g PiArwqDCoMKgwqDCoMKgIHN0cnVjdCBjbGtfcHNjICpwc2M7Cj4gPiArwqDCoMKgwqDCoMKgIHN0 cnVjdCBjbGsgKmNsazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgcHNjID0ga3phbGxvYyhzaXpl b2YoKnBzYyksIEdGUF9LRVJORUwpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIXBzYykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoCBpbml0Lm5hbWUgPSBuYW1lOwo+ID4gK8KgwqDCoMKgwqDCoCBp bml0Lm9wcyA9ICZlcDkzeHhfZGl2X29wczsKPiA+ICvCoMKgwqDCoMKgwqAgaW5pdC5mbGFncyA9 IDA7Cj4gPiArwqDCoMKgwqDCoMKgIGluaXQucGFyZW50X25hbWVzID0gKHBhcmVudF9uYW1lID8g JnBhcmVudF9uYW1lIDogTlVMTCk7Cj4gPiArwqDCoMKgwqDCoMKgIGluaXQubnVtX3BhcmVudHMg PSAxOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBwc2MtPnJlZyA9IHJlZzsKPiA+ICvCoMKgwqDC oMKgwqAgcHNjLT5iaXRfaWR4ID0gZW5hYmxlX2JpdDsKPiA+ICvCoMKgwqDCoMKgwqAgcHNjLT5t YXNrID0gR0VOTUFTSyhzaGlmdCArIHdpZHRoIC0gMSwgc2hpZnQpOwo+ID4gK8KgwqDCoMKgwqDC oCBwc2MtPnNoaWZ0ID0gc2hpZnQ7Cj4gPiArwqDCoMKgwqDCoMKgIHBzYy0+ZGl2ID0gY2xrX2Rp dmlzb3JzOwo+ID4gK8KgwqDCoMKgwqDCoCBwc2MtPm51bV9kaXYgPSBudW1fZGl2Owo+ID4gK8Kg wqDCoMKgwqDCoCBwc2MtPmxvY2sgPSAmY2xrX2xvY2s7Cj4gPiArwqDCoMKgwqDCoMKgIHBzYy0+ aHcuaW5pdCA9ICZpbml0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBjbGsgPSBjbGtfcmVnaXN0 ZXIoTlVMTCwgJnBzYy0+aHcpOwo+IAo+IFVzZSBjbGtfaHdfcmVnaXN0ZXIoKQo+IAo+ID4gK8Kg wqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNsaykpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGtmcmVlKHBzYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gRVJSX0NBU1QoY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoCByZXR1cm4gJnBzYy0+aHc7Cj4gPiArfQo+ID4gKwo+ID4gK3N0cnVjdCBlcDkzeHhfZ2F0 ZSB7Cj4gPiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBpZHg7Cj4gPiArwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGludCBiaXQ7Cj4gPiArwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKmRldl9pZDsK PiA+ICvCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqY29uX2lkOwo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIHN0cnVjdCBlcDkzeHhfZ2F0ZSBlcDkzeHhfdWFydHNbXSA9IHsKPiA+ICvCoMKgwqDC oMKgwqAge0VQOTNYWF9DTEtfVUFSVDEsIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UxRU4sICJhcGI6 dWFydDEiLAo+ID4gTlVMTH0sCj4gPiArwqDCoMKgwqDCoMKgIHtFUDkzWFhfQ0xLX1VBUlQyLCBF UDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOLCAiYXBiOnVhcnQyIiwKPiA+IE5VTEx9LAo+ID4gK8Kg wqDCoMKgwqDCoCB7RVA5M1hYX0NMS19VQVJUMywgRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTNFTiwg ImFwYjp1YXJ0MyIsCj4gPiBOVUxMfSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGVw OTN4eF91YXJ0X2Nsb2NrX2luaXQodm9pZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIHVuc2ln bmVkIGludCBpOwo+ID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX2h3ICpodzsKPiA+ICvCoMKg wqDCoMKgwqAgdTMyIHZhbDsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGNsa191YXJ0 X2RpdjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgZXA5M3h4X3JlZ21hcF9yZWFkKEVQOTNYWF9T WVNDT05fUFdSQ05ULCAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHZhbCAmIEVQOTNYWF9T WVNDT05fUFdSQ05UX1VBUlRCQVVEKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y2xrX3VhcnRfZGl2ID0gMTsKPiA+ICvCoMKgwqDCoMKgwqAgZWxzZQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY2xrX3VhcnRfZGl2ID0gMjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqAgaHcgPSBjbGtfaHdfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKE5VTEwsICJ1YXJ0IiwgInh0YWxp IiwgMCwKPiA+IDEsIGNsa191YXJ0X2Rpdik7Cj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9jbGtf ZGF0YS0+aHdzW0VQOTNYWF9DTEtfVUFSVF0gPSBodzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAg LyogcGFyZW50aW5nIHVhcnQgZ2F0ZSBjbG9ja3MgdG8gdWFydCBjbG9jayAqLwo+ID4gK8KgwqDC oMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlcDkzeHhfdWFydHMpOyBpKyspIHsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3ID0KPiA+IGVwOTN4eF9jbGtfcmVn aXN0ZXJfZ2F0ZShlcDkzeHhfdWFydHNbaV0uZGV2X2lkLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgInVhcnQiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX1NZU0NPTl9ERVZDRkcs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcDkzeHhfdWFydHNbaV0uYml0KTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVwOTN4eF9jbGtfZGF0YS0+aHdzW2VwOTN4 eF91YXJ0c1tpXS5pZHhdID0gaHc7Cj4gPiArwqDCoMKgwqDCoMKgIH0KPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHN0cnVjdCBlcDkzeHhfZ2F0ZSBlcDkzeHhfZG1hc1tdID0gewo+IAo+IGNvbnN0 Pwo+IAo+ID4gK8KgwqDCoMKgwqDCoCB7RVA5M1hYX0NMS19NMlAwLCBFUDkzWFhfU1lTQ09OX1BX UkNOVF9ETUFfTTJQMCwgTlVMTCwKPiA+ICJtMnAwIn0sCj4gCj4gUHV0IHNwYWNlIGFmdGVyIHsg YW5kIGJlZm9yZSB9Cj4gCj4gPiArwqDCoMKgwqDCoMKgIHtFUDkzWFhfQ0xLX00yUDEsIEVQOTNY WF9TWVNDT05fUFdSQ05UX0RNQV9NMlAxLCBOVUxMLAo+ID4gIm0ycDEifSwKPiA+ICvCoMKgwqDC oMKgwqAge0VQOTNYWF9DTEtfTTJQMiwgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDIsIE5V TEwsCj4gPiAibTJwMiJ9LAo+ID4gK8KgwqDCoMKgwqDCoCB7RVA5M1hYX0NMS19NMlAzLCBFUDkz WFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMywgTlVMTCwKPiA+ICJtMnAzIn0sCj4gPiArwqDCoMKg wqDCoMKgIHtFUDkzWFhfQ0xLX00yUDQsIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA0LCBO VUxMLAo+ID4gIm0ycDQifSwKPiA+ICvCoMKgwqDCoMKgwqAge0VQOTNYWF9DTEtfTTJQNSwgRVA5 M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDUsIE5VTEwsCj4gPiAibTJwNSJ9LAo+ID4gK8KgwqDC oMKgwqDCoCB7RVA5M1hYX0NMS19NMlA2LCBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNiwg TlVMTCwKPiA+ICJtMnA2In0sCj4gPiArwqDCoMKgwqDCoMKgIHtFUDkzWFhfQ0xLX00yUDcsIEVQ OTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA3LCBOVUxMLAo+ID4gIm0ycDcifSwKPiA+ICvCoMKg wqDCoMKgwqAge0VQOTNYWF9DTEtfTTJQOCwgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDgs IE5VTEwsCj4gPiAibTJwOCJ9LAo+ID4gK8KgwqDCoMKgwqDCoCB7RVA5M1hYX0NMS19NMlA5LCBF UDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQOSwgTlVMTCwKPiA+ICJtMnA5In0sCj4gPiArwqDC oMKgwqDCoMKgIHtFUDkzWFhfQ0xLX00yTTAsIEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMk0w LCBOVUxMLAo+ID4gIm0ybTAifSwKPiA+ICvCoMKgwqDCoMKgwqAge0VQOTNYWF9DTEtfTTJNMSwg RVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yTTEsIE5VTEwsCj4gPiAibTJtMSJ9LAo+ID4gK307 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZXA5M3h4X2RtYV9jbG9ja19pbml0KHZvaWQgX19pb21l bSAqYmFzZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgIGludCBpOwo+ID4gK8KgwqDCoMKgwqDC oCBzdHJ1Y3QgY2xrX2h3ICpodzsKPiA+ICvCoMKgwqDCoMKgwqAgaW50IHJldDsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2RtYXMpOyBp KyspIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3ID0gY2xrX2h3X3JlZ2lz dGVyX2dhdGUoTlVMTCwKPiA+IGVwOTN4eF9kbWFzW2ldLmNvbl9pZCwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICJoY2xrIiwgMCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2UgKwo+ID4g RVA5M1hYX1NZU0NPTl9QV1JDTlQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcDkzeHhfZG1h c1tpXS5iaXQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJmNsa19sb2NrKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldCA9IGNsa19od19yZWdpc3Rlcl9jbGtkZXYoaHcsCj4gPiBlcDkzeHhfZG1hc1tpXS5jb25f aWQsIE5VTEwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2Vycigi JXM6IGZhaWxlZCB0byByZWdpc3RlciBsb29rdXAKPiA+ICVzXG4iLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18s IGVwOTN4eF9kbWFzW2ldLmNvbl9pZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcDkzeHhfY2xr X2RhdGEtPmh3c1tlcDkzeHhfZG1hc1tpXS5pZHhdID0gaHc7Cj4gPiArwqDCoMKgwqDCoMKgIH0K PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBlcDkzeHhfY2xrX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoCB2b2lkIF9faW9tZW0g KmJhc2U7Cj4gPiArwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBjbGtfdXNiX2RpdjsKPiA+ICvC oMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBjbGtfc3BpX2RpdjsKPiA+ICvCoMKgwqDCoMKgwqAg c3RydWN0IGNsa19odyAqaHc7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgIHUzMiB2YWx1ZTsKPiA+ICvCoMKgwqDCoMKg wqAgc3RydWN0IHJlc291cmNlICpyZXM7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIHJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gPiArwqDCoMKg wqDCoMKgIGJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ID4gK8KgwqDC oMKgwqDCoCBpZiAoSVNfRVJSKGJhc2UpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIFBUUl9FUlIoYmFzZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9y ZWdtYXBfcmVhZChFUDkzWFhfU1lTQ09OX0NMS1NFVDIsICZ2YWx1ZSk7Cj4gPiArwqDCoMKgwqDC oMKgIGNsa191c2JfZGl2ID0gKCgodmFsdWUgPj4gMjgpICYgMHhmKSArIDEpOwo+ID4gK8KgwqDC oMKgwqDCoCBodyA9IGNsa19od19yZWdpc3Rlcl9maXhlZF9mYWN0b3IoTlVMTCwgInVzYl9jbGsi LCAicGxsMiIsCj4gPiAwLCAxLCBjbGtfdXNiX2Rpdik7Cj4gPiArwqDCoMKgwqDCoMKgIGh3ID0g Y2xrX2h3X3JlZ2lzdGVyX2dhdGUoTlVMTCwgIm9oY2ktcGxhdGZvcm0iLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAidXNi X2NsayIsIDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJhc2UgKyBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg RVA5M1hYX1NZU0NPTl9QV1JDTlRfVVNIX0VOLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY2xrX2xv Y2spOwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfaHdfcmVnaXN0ZXJfY2xrZGV2KGh3LCBOVUxMLCAi b2hjaS1wbGF0Zm9ybSIpOwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfY2xrX2RhdGEtPmh3c1tF UDkzWFhfQ0xLX1VTQl0gPSBodzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyoKPiA+ICvCoMKg wqDCoMKgwqDCoCAqIEVQOTN4eCBTU1AgY2xvY2sgcmF0ZSB3YXMgZG91YmxlZCBpbiB2ZXJzaW9u IEUyLiBGb3IKPiA+IG1vcmUgaW5mb3JtYXRpb24KPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHNlZToK PiA+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAgaHR0cDovL3d3dy5jaXJydXMuY29tL2VuL3B1 YnMvYXBwTm90ZS9BTjI3M1JFVjQucGRmCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKg wqDCoMKgwqAgY2xrX3NwaV9kaXYgPSAxOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoZXA5M3h4X2No aXBfcmV2aXNpb24oKSA8IEVQOTNYWF9DSElQX1JFVl9FMikKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNsa19zcGlfZGl2ID0gMjsKPiA+ICvCoMKgwqDCoMKgwqAgaHcgPSBjbGtf aHdfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKE5VTEwsICJlcDkzeHgtc3BpLjAiLAo+ID4gInh0YWxp IiwgMCwgMSwgY2xrX3NwaV9kaXYpOwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfaHdfcmVnaXN0ZXJf Y2xrZGV2KGh3LCBOVUxMLCAiZXA5M3h4LXNwaS4wIik7Cj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4 eF9jbGtfZGF0YS0+aHdzW0VQOTNYWF9DTEtfU1BJXSA9IGh3Owo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoCAvKiBwd20gY2xvY2sgKi8KPiA+ICvCoMKgwqDCoMKgwqAgaHcgPSBjbGtfaHdfcmVnaXN0 ZXJfZml4ZWRfZmFjdG9yKE5VTEwsICJwd21fY2xrIiwgInh0YWxpIiwKPiA+IDAsIDEsIDEpOwo+ ID4gK8KgwqDCoMKgwqDCoCBjbGtfaHdfcmVnaXN0ZXJfY2xrZGV2KGh3LCAicHdtX2NsayIsIE5V TEwpOwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfY2xrX2RhdGEtPmh3c1tFUDkzWFhfQ0xLX1BX TV0gPSBodzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgZXA5M3h4X3VhcnRfY2xvY2tfaW5pdCgp Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCAvKiB0b3VjaHNjcmVlbi9hZGMgY2xvY2sgKi8KPiA+ ICvCoMKgwqDCoMKgwqAgaHcgPSBjbGtfaHdfcmVnaXN0ZXJfZGl2KCJlcDkzeHgtYWRjIiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgInh0YWxpIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVYsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX1RTRU4sCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVQOTNYWF9TWVND T05fS0VZVENIQ0xLRElWX0FESVYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkY19kaXZpc29ycywK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQVJSQVlfU0laRShhZGNfZGl2aXNvcnMpKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqAgY2xrX2h3X3JlZ2lzdGVyX2Nsa2RldihodywgTlVMTCwgImVwOTN4eC1hZGMiKTsKPiA+ICvC oMKgwqDCoMKgwqAgZXA5M3h4X2Nsa19kYXRhLT5od3NbRVA5M1hYX0NMS19BRENdID0gaHc7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgIC8qIGtleXBhZCBjbG9jayAqLwo+ID4gK8KgwqDCoMKgwqDC oCBodyA9IGNsa19od19yZWdpc3Rlcl9kaXYoImVwOTN4eC1rZXlwYWQiLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAieHRh bGkiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hY X1NZU0NPTl9LRVlUQ0hDTEtESVZfS0VOLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFUDkzWFhfU1lTQ09OX0tFWVRDSENM S0RJVl9LRElWLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGNfZGl2aXNvcnMsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFS UkFZX1NJWkUoYWRjX2Rpdmlzb3JzKSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGNsa19od19y ZWdpc3Rlcl9jbGtkZXYoaHcsIE5VTEwsICJlcDkzeHgta2V5cGFkIik7Cj4gPiArwqDCoMKgwqDC oMKgIGVwOTN4eF9jbGtfZGF0YS0+aHdzW0VQOTNYWF9DTEtfS0VZUEFEXSA9IGh3Owo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoCAvKiBPbiByZXNldCBQRElWIGFuZCBWRElWIGlzIHNldCB0byB6ZXJv LCB3aGlsZSBQRElWIHplcm8KPiAKPiBUaGUgLyogaXMgb24gYSBsaW5lIGJ5IGl0c2VsZi4KPiAK PiA+ICvCoMKgwqDCoMKgwqDCoCAqIG1lYW5zIGNsb2NrIGRpc2FibGUsIFZESVYgc2hvdWxkbid0 IGJlIHplcm8uCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBTbyBpIHNldCBib3RoIGRpdmlkZXJzIHRv IG1pbmltdW0uCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqAgLyogRU5B IC0gRW5hYmxlIENMSyBkaXZpZGVyLiAqLwo+ID4gK8KgwqDCoMKgwqDCoCAvKiBQRElWIC0gMDAg LSBEaXNhYmxlIGNsb2NrICovCj4gPiArwqDCoMKgwqDCoMKgIC8qIFZESVYgLSBhdCBsZWFzdCAy ICovCj4gPiArwqDCoMKgwqDCoMKgIC8qIENoZWNrIGFuZCBlbmFibGUgdmlkZW8gY2xrIHJlZ2lz dGVycyAqLwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3JlYWQoRVA5M1hYX1NZU0NP Tl9WSURDTEtESVYsICZ2YWx1ZSk7Cj4gPiArwqDCoMKgwqDCoMKgIHZhbHVlIHw9ICgxIDw8IEVQ OTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlQpIHwgMjsKPiA+ICvCoMKgwqDCoMKgwqAgZXA5 M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwKPiA+IEVQOTNYWF9TWVNDT05fVklEQ0xL RElWKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyogY2hlY2sgYW5kIGVuYWJsZSBpMnMgY2xr IHJlZ2lzdGVycyAqLwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3JlYWQoRVA5M1hY X1NZU0NPTl9JMlNDTEtESVYsICZ2YWx1ZSk7Cj4gPiArwqDCoMKgwqDCoMKgIHZhbHVlIHw9ICgx IDw8IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlQpIHwgMjsKPiA+ICvCoMKgwqDCoMKg wqAgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIE92ZXJyaWRlIHRoZSBTQUlfTVNUUl9DTEtfQ0ZH IGZyb20gdGhlIEkyUyBibG9jayBhbmQgdXNlCj4gPiB0aGUKPiA+ICvCoMKgwqDCoMKgwqDCoCAq IEkyU0Nsa0RpdiBSZWdpc3RlciBzZXR0aW5ncy4gTFJDTEsgdHJhbnNpdGlvbnMgb24gdGhlCj4g PiBmYWxsaW5nIFNDTEsKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIGVkZ2UuCj4gPiArwqDCoMKgwqDC oMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqAgdmFsdWUgfD0gRVA5M1hYX1NZU0NPTl9JMlNDTEtE SVZfT1JJREUgfAo+ID4gRVA5M1hYX1NZU0NPTl9JMlNDTEtESVZfU1BPTDsKPiA+ICvCoMKgwqDC oMKgwqAgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwKPiA+IEVQOTNYWF9TWVND T05fSTJTQ0xLRElWKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgLyogdmlkZW8gY2xrICovCj4g PiArwqDCoMKgwqDCoMKgIGh3ID0gY2xrX2h3X3JlZ2lzdGVyX2RkaXYoImVwOTN4eC1mYiIsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEVQOTNYWF9TWVNDT05fVklEQ0xLRElWLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFUDkzWFhfU1lTQ09OX0NM S0RJVl9FTkFCTEUpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfaHdfcmVnaXN0ZXJfY2xr ZGV2KGh3LCBOVUxMLCAiZXA5M3h4LWZiIik7Cj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9jbGtf ZGF0YS0+aHdzW0VQOTNYWF9DTEtfVklERU9dID0gaHc7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg IC8qIGkycyBjbGsgKi8KPiA+ICvCoMKgwqDCoMKgwqAgaHcgPSBjbGtfaHdfcmVnaXN0ZXJfZGRp digibWNsayIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFUDkz WFhfU1lTQ09OX0NMS0RJVl9FTkFCTEUpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfaHdf cmVnaXN0ZXJfY2xrZGV2KGh3LCAibWNsayIsICJlcDkzeHgtaTJzIik7Cj4gPiArwqDCoMKgwqDC oMKgIGVwOTN4eF9jbGtfZGF0YS0+aHdzW0VQOTNYWF9DTEtfSTJTX01DTEtdID0gaHc7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgIC8qIGkycyBzY2xrICovCj4gPiArI2RlZmluZSBFUDkzWFhfSTJT Q0xLRElWX1NESVZfU0hJRlTCoMKgwqAgMTYKPiA+ICsjZGVmaW5lIEVQOTNYWF9JMlNDTEtESVZf U0RJVl9XSURUSMKgwqDCoCAxCj4gPiArwqDCoMKgwqDCoMKgIGh3ID0gY2xrX2h3X3JlZ2lzdGVy X2Rpdigic2NsayIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICJtY2xrIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX1NZU0NPTl9JMlND TEtESVYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWX1NFTkEsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVQ OTNYWF9JMlNDTEtESVZfU0RJVl9TSElGVCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX0kyU0NMS0RJVl9TRElW X1dJRFRILAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzY2xrX2Rpdmlzb3JzLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBUlJBWV9TSVpFKHNjbGtf ZGl2aXNvcnMpKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqAgY2xrX2h3X3JlZ2lzdGVyX2Nsa2Rl dihodywgInNjbGsiLCAiZXA5M3h4LWkycyIpOwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfY2xr X2RhdGEtPmh3c1tFUDkzWFhfQ0xLX0kyU19TQ0xLXSA9IGh3Owo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoCAvKiBpMnMgbHJjbGsgKi8KPiA+ICsjZGVmaW5lIEVQOTNYWF9JMlNDTEtESVZfTFJESVYz Ml9TSElGVCAxNwo+ID4gKyNkZWZpbmUgRVA5M1hYX0kyU0NMS0RJVl9MUkRJVjMyX1dJRFRIIDIK PiAKPiBQbGVhc2UganVzdCBpbmxpbmUgdGhlc2UgZGVmaW5lcyBhcyB0aGV5J3JlIG9ubHkgdXNl ZCBvbiBwbGFjZS4KPiAKPiA+ICvCoMKgwqDCoMKgwqAgaHcgPSBjbGtfaHdfcmVnaXN0ZXJfZGl2 KCJscmNsayIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICJzY2xrIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX1NZU0NPTl9JMlNDTEtE SVYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWX1NFTkEsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVQOTNY WF9JMlNDTEtESVZfTFJESVYzMl9TSElGVCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX0kyU0NMS0RJVl9MUkRJ VjMyX1dJRFRILAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBscmNsa19kaXZpc29ycywKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVJSQVlfU0laRShs cmNsa19kaXZpc29ycykpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfaHdfcmVnaXN0ZXJf Y2xrZGV2KGh3LCAibHJjbGsiLCAiZXA5M3h4LWkycyIpOwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkz eHhfY2xrX2RhdGEtPmh3c1tFUDkzWFhfQ0xLX0kyU19MUkNMS10gPSBodzsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqAgLyogSXJEYSBjbGsgdXNlcyBzYW1lIHBhdHRlcm4gYnV0IG5vIGluaXQgY29k ZSBwcmVzZW50cyBpbgo+ID4gb3JpZ2luYWwgY2xvY2sgZHJpdmVyICovCj4gPiArwqDCoMKgwqDC oMKgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBlcDkzeHhfY2xrX2R0X2lkc1tdID0gewo+ID4gK8KgwqDCoMKgwqDCoCB7IC5jb21w YXRpYmxlID0gImNpcnJ1cyxlcDkzMDEtc3lzY29uIiwgfSwKPiA+ICvCoMKgwqDCoMKgwqAgeyAv KiBzZW50aW5lbCAqLyB9LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgZXA5M3h4X2Nsa19kcml2ZXIgPSB7Cj4gPiArwqDCoMKgwqDCoMKgIC5wcm9iZcKg ID0gZXA5M3h4X2Nsa19wcm9iZSwKPiA+ICvCoMKgwqDCoMKgwqAgLmRyaXZlciA9IHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5uYW1lID0gImVwOTN4eC1jbGsiLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLm9mX21hdGNoX3RhYmxlID0gZXA5M3h4X2Nsa19k dF9pZHMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuc3VwcHJlc3NfYmluZF9h dHRycyA9IHRydWUsCj4gPiArwqDCoMKgwqDCoMKgIH0sCj4gPiArfTsKPiA+ICtidWlsdGluX3Bs YXRmb3JtX2RyaXZlcihlcDkzeHhfY2xrX2RyaXZlcik7Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg X19pbml0IGVwOTN4eF9jbG9ja19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoCB2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPiArwqDCoMKgwqDCoMKgIGlu dCBpOwo+ID4gK8KgwqDCoMKgwqDCoCBpbnQgcmV0Owo+ID4gK8KgwqDCoMKgwqDCoCB1MzIgdmFs dWU7Cj4gPiArwqDCoMKgwqDCoMKgIHN0cnVjdCBjbGtfaHcgKmh3Owo+ID4gK8KgwqDCoMKgwqDC oCB1bnNpZ25lZCBsb25nIGNsa19wbGwxX3JhdGU7Cj4gPiArwqDCoMKgwqDCoMKgIHVuc2lnbmVk IGxvbmcgY2xrX2ZfcmF0ZTsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBjbGtfaF9y YXRlOwo+ID4gK8KgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGNsa19wX3JhdGU7Cj4gPiArwqDC oMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgY2xrX3BsbDJfcmF0ZTsKPiA+ICvCoMKgwqDCoMKgwqAg dW5zaWduZWQgaW50IGNsa19mX2RpdjsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGNs a19oX2RpdjsKPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGNsa19wX2RpdjsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqAgZXA5M3h4X2Nsa19kYXRhID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShl cDkzeHhfY2xrX2RhdGEsIGh3cywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVA5M1hYX05VTV9DTEtTKSwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg R0ZQX0tFUk5FTCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGlmICghZXA5M3h4X2Nsa19kYXRh KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoCAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogVGhpcyB3YXkgYWxsIGNsb2NrIGZl dGNoZWQgYmVmb3JlIHRoZSBwbGF0Zm9ybSBkZXZpY2UKPiA+IHByb2JlcywKPiA+ICvCoMKgwqDC oMKgwqDCoCAqIGV4Y2VwdCB0aG9zZSB3ZSBhc3NpZ24gaGVyZSBmb3IgZWFybHkgdXNlLCB3aWxs IGJlCj4gPiBkZWZlcnJlZC4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDC oCBmb3IgKGkgPSAwOyBpIDwgRVA5M1hYX05VTV9DTEtTOyBpKyspCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlcDkzeHhfY2xrX2RhdGEtPmh3c1tpXSA9IEVSUl9QVFIoLUVQUk9C RV9ERUZFUik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGJhc2UgPSBvZl9pb21hcChucCwgMCk7 Cj4gPiArwqDCoMKgwqDCoMKgIC8qIFJlbWFwIHRoZSBzeXN0ZW0gY29udHJvbGxlciBmb3IgdGhl IGV4Y2x1c2l2ZSByZWdpc3Rlcgo+ID4gKi8KPiA+ICvCoMKgwqDCoMKgwqAgaWYgKElTX0VSUihi YXNlKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJmYWlsZWQg dG8gbWFwIGJhc2VcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9tYXAg PSBzeXNjb25fbm9kZV90b19yZWdtYXAobnApOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAoSVNfRVJS KGVwOTN4eF9tYXApKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIo Im5vIHN5c2NvbiByZWdtYXBcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIC8qCj4g PiArwqDCoMKgwqDCoMKgwqAgKiBXZSBjaGVjayB0aGF0IHRoZSByZWdtYXAgd29ya3Mgb24gdGhp cyB2ZXJ5IGZpcnN0Cj4gPiBhY2Nlc3MsCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBidXQgYXMgdGhp cyBpcyBhbiBNTUlPLWJhY2tlZCByZWdtYXAsIHN1YnNlcXVlbnQgcmVnbWFwCj4gPiArwqDCoMKg wqDCoMKgwqAgKiBhY2Nlc3MgaXMgbm90IGdvaW5nIHRvIGZhaWwgYW5kIHdlIHNraXAgZXJyb3Ig Y2hlY2tzCj4gPiBmcm9tCj4gPiArwqDCoMKgwqDCoMKgwqAgKiB0aGlzIHBvaW50Lgo+ID4gK8Kg wqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDCoMKgIHJldCA9IGVwOTN4eF9yZWdtYXBfcmVh ZChFUDkzWFhfU1lTQ09OX0NISVBJRCwgJnZhbHVlKTsKPiA+ICvCoMKgwqDCoMKgwqAgaWYgKHJl dCB8fCAodmFsdWUgJiAweGZmZmYpICE9IEVQOTNYWF9TWVNDT05fQ0hJUElEX0lEKSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIoImZhaWxlZCB0byByZWFkIGdsb2Jh bCBzdGF0dXMgcmVnaXN0ZXJcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuOwo+ID4gK8KgwqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGh3ID0g Y2xrX2h3X3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgInh0YWxpIiwgTlVMTCwgMCwKPiA+IEVQ OTNYWF9FWFRfQ0xLX1JBVEUpOwo+IAo+IE1heWJlIHRoaXMgY2FuIGJlIHJlZ2lzdGVyZWQgZnJv bSBEVCBpdHNlbGYuCj4gCj4gPiArwqDCoMKgwqDCoMKgIGNsa19od19yZWdpc3Rlcl9jbGtkZXYo aHcsIE5VTEwsICJ4dGFsaSIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCAvKiBEZXRlcm1pbmUg dGhlIGJvb3Rsb2FkZXIgY29uZmlndXJlZCBwbGwxIHJhdGUgKi8KPiA+ICvCoMKgwqDCoMKgwqAg ZXA5M3h4X3JlZ21hcF9yZWFkKEVQOTNYWF9TWVNDT05fQ0xLU0VUMSwgJnZhbHVlKTsKPiA+ICvC oMKgwqDCoMKgwqAgaWYgKCEodmFsdWUgJiBFUDkzWFhfU1lTQ09OX0NMS1NFVDFfTkJZUDEpKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2xrX3BsbDFfcmF0ZSA9IEVQOTNYWF9F WFRfQ0xLX1JBVEU7Cj4gPiArwqDCoMKgwqDCoMKgIGVsc2UKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNsa19wbGwxX3JhdGUgPSBjYWxjX3BsbF9yYXRlKEVQOTNYWF9FWFRfQ0xL X1JBVEUsCj4gPiB2YWx1ZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGh3ID0gY2xrX2h3X3Jl Z2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgInBsbDEiLCAieHRhbGkiLCAwLAo+ID4gY2xrX3BsbDFf cmF0ZSk7Cj4gCj4gQW5kIG1heWJlIHRoaXMgY2FuIGJlIHJlZ2lzdGVyZWQgZnJvbSB3aGVyZXZl ciB0aGUgcmVnbWFwIGlzIGNyZWF0ZWQ/Cj4gCj4gPiArwqDCoMKgwqDCoMKgIGNsa19od19yZWdp c3Rlcl9jbGtkZXYoaHcsIE5VTEwsICJwbGwxIik7Cj4gCj4gRG8geW91IG5lZWQgdG8gdXNlIGNs a2Rldj8KPiAKPiA+ICvCoMKgwqDCoMKgwqAgZXA5M3h4X2Nsa19kYXRhLT5od3NbRVA5M1hYX0NM S19QTEwxXSA9IGh3Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCAvKiBJbml0aWFsaXplIHRoZSBw bGwxIGRlcml2ZWQgY2xvY2tzICovCj4gPiArwqDCoMKgwqDCoMKgIGNsa19mX2RpdiA9IGZjbGtf ZGl2aXNvcnNbKHZhbHVlID4+IDI1KSAmIDB4N107Cj4gPiArwqDCoMKgwqDCoMKgIGNsa19oX2Rp diA9IGhjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDIwKSAmIDB4N107Cj4gPiArwqDCoMKgwqDCoMKg IGNsa19wX2RpdiA9IHBjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDE4KSAmIDB4M107Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgIGh3ID0gY2xrX2h3X3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihOVUxMLCAi ZmNsayIsICJwbGwxIiwgMCwKPiA+IDEsIGNsa19mX2Rpdik7Cj4gPiArwqDCoMKgwqDCoMKgIGNs a19mX3JhdGUgPSBjbGtfZ2V0X3JhdGUoaHctPmNsayk7Cj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4 eF9jbGtfZGF0YS0+aHdzW0VQOTNYWF9DTEtfRkNMS10gPSBodzsKPiA+ICvCoMKgwqDCoMKgwqAg aHcgPSBjbGtfaHdfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKE5VTEwsICJoY2xrIiwgInBsbDEiLCAw LAo+ID4gMSwgY2xrX2hfZGl2KTsKPiA+ICvCoMKgwqDCoMKgwqAgY2xrX2hfcmF0ZSA9IGNsa19n ZXRfcmF0ZShody0+Y2xrKTsKPiA+ICvCoMKgwqDCoMKgwqAgZXA5M3h4X2Nsa19kYXRhLT5od3Nb RVA5M1hYX0NMS19IQ0xLXSA9IGh3Owo+ID4gK8KgwqDCoMKgwqDCoCBodyA9IGNsa19od19yZWdp c3Rlcl9maXhlZF9mYWN0b3IoTlVMTCwgInBjbGsiLCAiaGNsayIsIDAsCj4gPiAxLCBjbGtfcF9k aXYpOwo+ID4gK8KgwqDCoMKgwqDCoCBjbGtfcF9yYXRlID0gY2xrX2dldF9yYXRlKGh3LT5jbGsp Owo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfY2xrX2RhdGEtPmh3c1tFUDkzWFhfQ0xLX1BDTEtd ID0gaHc7Cj4gCj4gVHJ5IHRvIG5vdCB1c2UgY2xrIGNvbnN1bWVyIEFQSXMgZnJvbSBhIGNsayBw cm92aWRlci4gSW4gdGhpcyBjYXNlLAo+IGl0Cj4gbG9va3MgbGlrZSBzb21lIGRlYnVnIG1lc3Nh Z2UsIHNvIGp1c3QgZHJvcCB0aGVzZSBjbGtfZ2V0X3JhdGUoKQo+IGNhbGxzCj4gYW5kIHRoZSBh c3NvY2lhdGVkIHByaW50a3MuCj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGNsa19od19yZWdp c3Rlcl9jbGtkZXYoaHcsICJhcGJfcGNsayIsIE5VTEwpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oCBlcDkzeHhfZG1hX2Nsb2NrX2luaXQoYmFzZSk7Cj4gCj4gRG9lcyBzb21lIGludGVycnVwdCBv ciB0aW1lciBkcml2ZXIgdXNlIGRtYT8gV2h5IGFyZSB0aGVzZSByZWdpc3RlcmVkCj4gZWFybHk/ Cj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIC8qIERldGVybWluZSB0aGUgYm9vdGxvYWRlciBj b25maWd1cmVkIHBsbDIgcmF0ZSAqLwo+ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfcmVnbWFwX3Jl YWQoRVA5M1hYX1NZU0NPTl9DTEtTRVQyLCAmdmFsdWUpOwo+ID4gK8KgwqDCoMKgwqDCoCBpZiAo ISh2YWx1ZSAmIEVQOTNYWF9TWVNDT05fQ0xLU0VUMl9OQllQMikpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjbGtfcGxsMl9yYXRlID0gRVA5M1hYX0VYVF9DTEtfUkFURTsKPiA+ ICvCoMKgwqDCoMKgwqAgZWxzZSBpZiAodmFsdWUgJiBFUDkzWFhfU1lTQ09OX0NMS1NFVDJfUExM Ml9FTikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19wbGwyX3JhdGUgPSBj YWxjX3BsbF9yYXRlKEVQOTNYWF9FWFRfQ0xLX1JBVEUsCj4gPiB2YWx1ZSk7Cj4gPiArwqDCoMKg wqDCoMKgIGVsc2UKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19wbGwyX3Jh dGUgPSAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoCBodyA9IGNsa19od19yZWdpc3Rlcl9maXhl ZF9yYXRlKE5VTEwsICJwbGwyIiwgInh0YWxpIiwgMCwKPiA+IGNsa19wbGwyX3JhdGUpOwo+IAo+ IEluc3RlYWQgb2YgcmVnaXN0ZXJpbmcgYSBmaXhlZCByYXRlIGNsayBoZXJlIHlvdSBjYW4gaW1w bGVtZW50ZWQKPiByZWNhbGNfcmF0ZSBhbmQgbG9vayBhdCB0aGUgcmVnbWFwIHZhbHVlLgo+IAo+ ID4gK8KgwqDCoMKgwqDCoCBlcDkzeHhfY2xrX2RhdGEtPmh3c1tFUDkzWFhfQ0xLX1BMTDJdID0g aHc7Cj4gPiArwqDCoMKgwqDCoMKgIGNsa19od19yZWdpc3Rlcl9jbGtkZXYoaHcsIE5VTEwsICJw bGwyIik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgIGVwOTN4eF9jbGtfZGF0YS0+bnVtID0gRVA5 M1hYX05VTV9DTEtTOwo+ID4gK8KgwqDCoMKgwqDCoCBvZl9jbGtfYWRkX2h3X3Byb3ZpZGVyKG5w LCBvZl9jbGtfaHdfb25lY2VsbF9nZXQsCj4gPiBlcDkzeHhfY2xrX2RhdGEpOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoCBwcl9pbmZvKCJQTEwxIHJ1bm5pbmcgYXQgJWxkIE1IeiwgUExMMiBhdCAl bGQgTUh6XG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2xrX3BsbDFfcmF0 ZSAvIDEwMDAwMDAsIGNsa19wbGwyX3JhdGUgLyAxMDAwMDAwKTsKPiA+ICvCoMKgwqDCoMKgwqAg cHJfaW5mbygiRkNMSyAlbGQgTUh6LCBIQ0xLICVsZCBNSHosIFBDTEsgJWxkIE1IelxuIiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19mX3JhdGUgLyAxMDAwMDAwLCBjbGtf aF9yYXRlIC8gMTAwMDAwMCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19w X3JhdGUgLyAxMDAwMDAwKTsKPiA+ICt9Cj4gPiArQ0xLX09GX0RFQ0xBUkVfRFJJVkVSKGVwOTN4 eF9jYywgImNpcnJ1cyxlcDkzMDEtc3lzY29uIiwKPiA+IGVwOTN4eF9jbG9ja19pbml0KTsKCg==