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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF42AC83F17 for ; Wed, 23 Jul 2025 17:42:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ueh3yeoqoYfRb8MB5NFwW53wntreVFpZ5dGwQ2Ii2RQ=; b=1gnFVxn5h6B0F1KwaBu8zCCf1S 0Tp4yOAxpD65dcQFLhvyQg+/SFidNeACMjmqB2yXrmQYpVsBTZjCmuF7djlHYfMDjtMtk8McPBgy7 Wezxg2NHsksv9mKECRAPo1UOn6BGn2c0V7WyQwzcrgLqg+dR6r6bBZ8WPK1y2agDXi4rqHgpoZPoz 6RIiqEPLuTC/t/9pnp0ZtohqUXMUg0Ieg/4eSYoHC9UAe0Ws3xP3xCf+6fxTCVrVKGdNxSMSw8IC3 5CUvM33lvJruMc4bKvDEuiGandFURUkClop81Y62IqFAtMMakOnJAk6Awq2xwMcGNW2dA6yhM30qM OlZ2bUsQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uedUD-00000005dvT-32Zx; Wed, 23 Jul 2025 17:42:37 +0000 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uedDL-00000005b18-3sQv for linux-riscv@lists.infradead.org; Wed, 23 Jul 2025 17:25:13 +0000 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-7426c44e014so160412b3a.3 for ; Wed, 23 Jul 2025 10:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1753291511; x=1753896311; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=X+VZ6bOqfIsvyoBiNaeSEwo0qAyk/xUKjl/MAZ3e+JM=; b=JzT3bFNah4mk0Vf0o6lgwkvCzx7FU3zbF8iOPQWWnlcX7rRS9ovmJ24Ls+loE0bsYA 2d8rfE489Yr53O0MF+vA/GvpGWsvdKFu/h4su07wkAVB5h/R/AtA0X6/YIbfgkWrlePj Hps6jlPr3xkvGYr7fOLXQzLF5NqIt2k/WsgjZbDzkTILSHur0BOxncxfHb+2rrcjO/fd DZvkKIUCMaIezDKVbN4NJyVQAopwLVW8qVOCRpVRxAK9A7wPGnFi1XzP4j+1F8PHUj17 16X/RgHxqtM/++MCQZvZYEij/F7rXPCydLXHz6R2ZWn0TbAUqxj3TeZgW27pd7ZT4UkI zaog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753291511; x=1753896311; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=X+VZ6bOqfIsvyoBiNaeSEwo0qAyk/xUKjl/MAZ3e+JM=; b=gw4/ht5l4g97sgrgLOmbeQi4UX7EjFAGdvgwDZIFU7OC/VULDNE07jqw4xC0qSvetZ JjrPQpwce1rPkRfIZeLkFfjpuTD/8IgnmYlZIvHIBLyGDr/JNn8dCHftyd66Edm031/v EVtKkiLskSWLmf+EDWW+3zdT43TKYK9vrNtstB3Tw+6g5M4JCI1S7tDBLdhi19rjJIt7 P/ZfeHobaG78ugVlWHd+bOmEj5GWINDvxWhJC1RTdZUMSWIwouzyzFekLmrt0G154/QQ ymrwNI6r9lkgp9BWZfITY1SQG8EFAA3z+jlfVh+J4h/yT2+S4GdtUR/k1lZs6gh6lmYJ WcKA== X-Gm-Message-State: AOJu0YwWNy5864q3qDJdfKcPf7jiYxXpsqlyQN+lSwiWCE1Kuo9l2X4N Y9UPpeYiJhi9jWvL+enur/d6USvVc74f0cTekx/TmBAf5/HhkEyD2yECnGaZw3ll9U4= X-Gm-Gg: ASbGncuwje064ID0vRHrDocRLZHVQB9+CdKL4KhY/AUO32/hA8Dknborh0txFH6Zb8d vBmDrcH1Uj+NxThgfVf/UWh6r6qMLSQ7+OOFsLTxdAnaq1QBRZLeDkIfKpMbHdJ+fH/y69U5POa Bdzgt9quSYZSwWl8qfUfr1TqxlN+3kWVg6DcoNyzx2U7ubT3n+yFBFmJxqZ6UCiPCCmCKjpKkoy DURlirmWutAVlrMwhtxx4+ZxqXh83qzUsPDg7rljaBrVZjLE2rc5wm6j/+OdwmRh5QHcJv8BJ4o A8e1qiByuLE7jOwAzGfD6QvHyEXnsfWFnIWyr/x6haUR937A/WX1wAG+RxFa5FERj6gtVdsAmRY Zrrd6O9zZjHKMLbX1dbAZzAX5cEDgtXUD X-Google-Smtp-Source: AGHT+IEUS/1a2l6roHuYe1CBGOwQ4a1v7X10dtZ34tFW+6hoXDRqlQaKvWG+aw1SIblgUmwhriud0g== X-Received: by 2002:a05:6a20:1584:b0:232:ddc1:f22b with SMTP id adf61e73a8af0-23d4906fab6mr5924155637.19.1753291510117; Wed, 23 Jul 2025 10:25:10 -0700 (PDT) Received: from debug.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-75f24cea21fsm3728917b3a.32.2025.07.23.10.25.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Jul 2025 10:25:09 -0700 (PDT) Date: Wed, 23 Jul 2025 10:25:06 -0700 From: Deepak Gupta To: Jesse Taube Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Oleg Nesterov , Himanshu Chauhan , Charlie Jenkins , Samuel Holland , Andrew Jones , Atish Patra , Anup Patel , Mayuresh Chitale , Conor Dooley , WangYuli , Huacai Chen , Nam Cao , Andrew Morton , "Mike Rapoport (Microsoft)" , Luis Chamberlain , Yunhui Cui , Joel Granados , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , Celeste Liu , Evan Green , Nylon Chen Subject: Re: [RFC PATCH 4/6] riscv: Introduce support for hardware break/watchpoints Message-ID: References: <20250722173829.984082-1-jesse@rivosinc.com> <20250722173829.984082-5-jesse@rivosinc.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250723_102511_996509_CD48B0E8 X-CRM114-Status: GOOD ( 15.78 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gV2VkLCBKdWwgMjMsIDIwMjUgYXQgMTA6MDI6MzRBTSAtMDcwMCwgSmVzc2UgVGF1YmUgd3Jv dGU6Cj5PbiBUdWUsIEp1bCAyMiwgMjAyNSBhdCA3OjQ54oCvUE0gRGVlcGFrIEd1cHRhIDxkZWJ1 Z0ByaXZvc2luYy5jb20+IHdyb3RlOgo+Pgo+PiBPbiBUdWUsIEp1bCAyMiwgMjAyNSBhdCAxMDoz ODoyN0FNIC0wNzAwLCBKZXNzZSBUYXViZSB3cm90ZToKPj4gPkZyb206IEhpbWFuc2h1IENoYXVo YW4gPGhjaGF1aGFuQHZlbnRhbmFtaWNyby5jb20+Cj4+ID4KPj4gPlJJU0MtViBoYXJkd2FyZSBi cmVha3BvaW50IGZyYW1ld29yayBpcyBidWlsdCBvbiB0b3Agb2YgcGVyZiBzdWJzeXN0ZW0gYW5k IHVzZXMKPj4gPlNCSSBkZWJ1ZyB0cmlnZ2VyIGV4dGVuc2lvbiB0byBpbnN0YWxsL3VuaW5zdGFs bC91cGRhdGUvZW5hYmxlL2Rpc2FibGUgaGFyZHdhcmUKPj4gPnRyaWdnZXJzIGFzIHNwZWNpZmll ZCBpbiBTZHRyaWcgSVNBIGV4dGVuc2lvbi4KPj4gPgo+PiA+U2lnbmVkLW9mZi1ieTogSGltYW5z aHUgQ2hhdWhhbiA8aGNoYXVoYW5AdmVudGFuYW1pY3JvLmNvbT4KPj4gPlNpZ25lZC1vZmYtYnk6 IEplc3NlIFRhdWJlIDxqZXNzZUByaXZvc2luYy5jb20+Cj4+ID4tLS0KPj4gPiBhcmNoL3Jpc2N2 L0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4+ID4gYXJjaC9yaXNjdi9pbmNs dWRlL2FzbS9od19icmVha3BvaW50LmggfCAgNjAgKysrCj4+ID4gYXJjaC9yaXNjdi9pbmNsdWRl L2FzbS9rZGVidWcuaCAgICAgICAgfCAgIDMgKy0KPj4gPiBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNt L3NiaS5oICAgICAgICAgICB8ICAgNCArLQo+PiA+IGFyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxl ICAgICAgICAgICAgIHwgICAxICsKPj4gPiBhcmNoL3Jpc2N2L2tlcm5lbC9od19icmVha3BvaW50 LmMgICAgICB8IDYyMCArKysrKysrKysrKysrKysrKysrKysrKysrCj4+ID4gYXJjaC9yaXNjdi9r ZXJuZWwvdHJhcHMuYyAgICAgICAgICAgICAgfCAgIDYgKwo+PiA+IDcgZmlsZXMgY2hhbmdlZCwg NjkzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0 IGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCj4+ID4gY3JlYXRlIG1vZGUg MTAwNjQ0IGFyY2gvcmlzY3Yva2VybmVsL2h3X2JyZWFrcG9pbnQuYwo+PiA+Cj4+ID5kaWZmIC0t Z2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnCj4+ID5pbmRleCBi YmVjODdiNzkzMDkuLjk1ZDMwNDdjYWIxMCAxMDA2NDQKPj4gPi0tLSBhL2FyY2gvcmlzY3YvS2Nv bmZpZwo+PiA+KysrIGIvYXJjaC9yaXNjdi9LY29uZmlnCj4+ID5AQCAtMTYzLDYgKzE2Myw3IEBA IGNvbmZpZyBSSVNDVgo+PiA+ICAgICAgIHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0VSUk9SX0lOSkVD VElPTgo+PiA+ICAgICAgIHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TCj4+ID4gICAgICAgc2VsZWN0 IEhBVkVfR0VORVJJQ19WRFNPIGlmIE1NVSAmJiA2NEJJVAo+PiA+KyAgICAgIHNlbGVjdCBIQVZF X0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFMgJiYgUklTQ1ZfU0JJCj4+ID4gICAgICAgc2Vs ZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElORwo+PiA+ICAgICAgIHNlbGVjdCBIQVZFX0tFUk5F TF9CWklQMiBpZiAhWElQX0tFUk5FTCAmJiAhRUZJX1pCT09UCj4+ID4gICAgICAgc2VsZWN0IEhB VkVfS0VSTkVMX0daSVAgaWYgIVhJUF9LRVJORUwgJiYgIUVGSV9aQk9PVAo+PiA+ZGlmZiAtLWdp dCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oIGIvYXJjaC9yaXNjdi9p bmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKPj4gPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ID5p bmRleCAwMDAwMDAwMDAwMDAuLjhlZmEzOTIxYzUzNQo+PiA+LS0tIC9kZXYvbnVsbAo+PiA+Kysr IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKPj4gPkBAIC0wLDAgKzEs NjAgQEAKPj4gPisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4+ ID4rLyoKPj4gPisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVmVudGFuYSBNaWNybyBTeXN0ZW1zIElu Yy4KPj4gPisgKi8KPj4gPisKPj4gPisjaWZuZGVmIF9fUklTQ1ZfSFdfQlJFQUtQT0lOVF9ICj4+ ID4rI2RlZmluZSBfX1JJU0NWX0hXX0JSRUFLUE9JTlRfSAo+PiA+Kwo+PiA+K3N0cnVjdCB0YXNr X3N0cnVjdDsKPj4gPisKPj4gPisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAo+PiA+ Kwo+PiA+KyNpbmNsdWRlIDx1YXBpL2xpbnV4L2h3X2JyZWFrcG9pbnQuaD4KPj4gPisKPj4gPisj aWYgX19yaXNjdl94bGVuID09IDY0Cj4+ID4rI2RlZmluZSBjcHVfdG9fbGUgY3B1X3RvX2xlNjQK Pj4gPisjZGVmaW5lIGxlX3RvX2NwdSBsZTY0X3RvX2NwdQo+PiA+KyNlbGlmIF9fcmlzY3ZfeGxl biA9PSAzMgo+PiA+KyNkZWZpbmUgY3B1X3RvX2xlIGNwdV90b19sZTMyCj4+ID4rI2RlZmluZSBs ZV90b19jcHUgbGUzMl90b19jcHUKPj4gPisjZWxzZQo+PiA+KyNlcnJvciAiVW5leHBlY3RlZCBf X3Jpc2N2X3hsZW4iCj4+ID4rI2VuZGlmCj4+ID4rCj4+ID4rc3RydWN0IGFyY2hfaHdfYnJlYWtw b2ludCB7Cj4+ID4rICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzOwo+PiA+KyAgICAgIHVuc2ln bmVkIGxvbmcgbGVuOwo+PiA+Kwo+PiA+KyAgICAgIC8qIENhbGxiYWNrIGluZm8gKi8KPj4gPisg ICAgICB1bnNpZ25lZCBsb25nIG5leHRfYWRkcjsKPj4gPisgICAgICBib29sIGluX2NhbGxiYWNr Owo+PiA+Kwo+PiA+Kwo+PiA+KyAgICAgIC8qIFRyaWdnZXIgY29uZmlndXJhdGlvbiBkYXRhICov Cj4+ID4rICAgICAgdW5zaWduZWQgbG9uZyB0ZGF0YTE7Cj4+ID4rICAgICAgdW5zaWduZWQgbG9u ZyB0ZGF0YTI7Cj4+ID4rICAgICAgdW5zaWduZWQgbG9uZyB0ZGF0YTM7Cj4+ID4rfTsKPj4gPisK Pj4gPisvKiBNYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBicmVha3BvaW50cyBzdXBwb3J0ZWQg Ki8KPj4gPisjZGVmaW5lIFJWX01BWF9UUklHR0VSUyAzMgo+PiA+Kwo+PiA+K3N0cnVjdCBwZXJm X2V2ZW50X2F0dHI7Cj4+ID4rc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwo+PiA+K3N0cnVjdCBwZXJm X2V2ZW50Owo+PiA+K3N0cnVjdCBwdF9yZWdzOwo+PiA+Kwo+PiA+K2ludCBod19icmVha3BvaW50 X3Nsb3RzKGludCB0eXBlKTsKPj4gPitpbnQgYXJjaF9jaGVja19icF9pbl9rZXJuZWxzcGFjZShz dHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICpodyk7Cj4+ID4raW50IGh3X2JyZWFrcG9pbnRfYXJj aF9wYXJzZShzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsCj4+ID4rICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKPj4gPisgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICpodyk7Cj4+ID4raW50 IGh3X2JyZWFrcG9pbnRfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1 bnVzZWQsCj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgdmFsLCB2b2lkICpkYXRhKTsKPj4gPitpbnQgYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQo c3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKPj4gPit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFr cG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKPj4gPit2b2lkIGh3X2JyZWFrcG9pbnRfcG11 X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKPj4gPisKPj4gPisjZW5kaWYgLyogQ09ORklH X0hBVkVfSFdfQlJFQUtQT0lOVCAqLwo+PiA+KyNlbmRpZiAvKiBfX1JJU0NWX0hXX0JSRUFLUE9J TlRfSCAqLwo+PiA+ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va2RlYnVnLmgg Yi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCj4+ID5pbmRleCA4NWFjMDA0MTFmNmUu LjUzZTk4OTc4MWFhMSAxMDA2NDQKPj4gPi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va2Rl YnVnLmgKPj4gPisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va2RlYnVnLmgKPj4gPkBAIC02 LDcgKzYsOCBAQAo+PiA+IGVudW0gZGllX3ZhbCB7Cj4+ID4gICAgICAgRElFX1VOVVNFRCwKPj4g PiAgICAgICBESUVfVFJBUCwKPj4gPi0gICAgICBESUVfT09QUwo+PiA+KyAgICAgIERJRV9PT1BT LAo+PiA+KyAgICAgIERJRV9ERUJVRwo+PiA+IH07Cj4+ID4KPj4gPiAjZW5kaWYKPj4gPmRpZmYg LS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NiaS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRl L2FzbS9zYmkuaAo+PiA+aW5kZXggYmUyY2E4ZThhNDllLi42NGZhN2E4MmFhNDUgMTAwNjQ0Cj4+ ID4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NiaS5oCj4+ID4rKysgYi9hcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL3NiaS5oCj4+ID5AQCAtMjgyLDcgKzI4Miw5IEBAIHN0cnVjdCBzYmlfc3Rh X3N0cnVjdCB7Cj4+ID4gICAgICAgdTggcGFkWzQ3XTsKPj4gPiB9IF9fcGFja2VkOwo+PiA+Cj4+ ID4tI2RlZmluZSBTQklfU0hNRU1fRElTQUJMRSAgICAgICAgICAgICAtMQo+PiA+KyNkZWZpbmUg U0JJX1NITUVNX0RJU0FCTEUgICAgICgtMVVMKQo+PiA+KyNkZWZpbmUgU0JJX1NITUVNX0xPKHBh KSAgICAgICgodW5zaWduZWQgbG9uZylsb3dlcl8zMl9iaXRzKHBhKSkKPj4gPisjZGVmaW5lIFNC SV9TSE1FTV9ISShwYSkgICAgICAoKHVuc2lnbmVkIGxvbmcpdXBwZXJfMzJfYml0cyhwYSkpCj4+ ID4KPj4gPiBlbnVtIHNiaV9leHRfbmFjbF9maWQgewo+PiA+ICAgICAgIFNCSV9FWFRfTkFDTF9Q Uk9CRV9GRUFUVVJFID0gMHgwLAo+PiA+ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL01h a2VmaWxlIGIvYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZpbGUKPj4gPmluZGV4IDRmNzE5YjA5ZTVh ZC4uM2U3MjUwNTczNGJkIDEwMDY0NAo+PiA+LS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZp bGUKPj4gPisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxlCj4+ID5AQCAtOTksNiArOTks NyBAQCBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpICs9IG1jb3VudC1keW4ubwo+PiA+Cj4+ ID4gb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSAgICAgKz0gcGVyZl9jYWxsY2hhaW4ubwo+PiA+ IG9iai0kKENPTkZJR19IQVZFX1BFUkZfUkVHUykgICs9IHBlcmZfcmVncy5vCj4+ID4rb2JqLSQo Q09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkgICAgICArPSBod19icmVha3BvaW50Lm8KPj4gPiBv YmotJChDT05GSUdfUklTQ1ZfU0JJKSAgICAgICAgICAgICAgICs9IHNiaS5vIHNiaV9lY2FsbC5v Cj4+ID4gaWZlcSAoJChDT05GSUdfUklTQ1ZfU0JJKSwgeSkKPj4gPiBvYmotJChDT05GSUdfU01Q KSAgICAgICAgICAgICArPSBzYmktaXBpLm8KPj4gPmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tl cm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9od19icmVha3BvaW50LmMK Pj4gPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ID5pbmRleCAwMDAwMDAwMDAwMDAuLjllM2EzYjgy ZDMwMAo+PiA+LS0tIC9kZXYvbnVsbAo+PiA+KysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvaHdfYnJl YWtwb2ludC5jCj4+ID5AQCAtMCwwICsxLDYyMCBAQAo+PiA+Ky8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKPj4gPisvKgo+PiA+KyAqIENvcHlyaWdodCAoQykgMjAyNCBW ZW50YW5hIE1pY3JvIFN5c3RlbXMgSW5jLgo+PiA+KyAqLwo+PiA+Kwo+PiA+KyNpbmNsdWRlIDxs aW51eC9od19icmVha3BvaW50Lmg+Cj4+ID4rI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4K Pj4gPisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KPj4gPisjaW5jbHVkZSA8bGludXgvcGVy Y3B1Lmg+Cj4+ID4rI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgo+PiA+KyNpbmNsdWRlIDxsaW51 eC9iaXRvcHMuaD4KPj4gPisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4gPisjaW5jbHVk ZSA8bGludXgvY3B1Lmg+Cj4+ID4rI2luY2x1ZGUgPGxpbnV4L2NwdWhvdHBsdWcuaD4KPj4gPisK Pj4gPisjaW5jbHVkZSA8YXNtL2luc24uaD4KPj4gPisjaW5jbHVkZSA8YXNtL3NiaS5oPgo+PiA+ Kwo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfVFlQRV9TSElGVCAgICAgICAgICAgICAgICAoX19y aXNjdl94bGVuIC0gNCkKPj4gPisjZGVmaW5lIERCVFJfVERBVEExX0RNT0RFICAgICAgICAgICAg IEJJVF9VTChfX3Jpc2N2X3hsZW4gLSA1KQo+PiA+Kwo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFf VFlQRV9NQ09OVFJPTCAgICAgKDJVTCA8PCBEQlRSX1REQVRBMV9UWVBFX1NISUZUKQo+PiA+KyNk ZWZpbmUgREJUUl9UREFUQTFfVFlQRV9NQ09OVFJPTDYgICAgKDZVTCA8PCBEQlRSX1REQVRBMV9U WVBFX1NISUZUKQo+PiA+Kwo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0w2X0xPQUQg ICAgICAgICAgICBCSVQoMCkKPj4gPisjZGVmaW5lIERCVFJfVERBVEExX01DT05UUk9MNl9TVE9S RSAgICAgICAgICAgQklUKDEpCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTDZfRVhF Q1VURSAgICAgICAgIEJJVCgyKQo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0w2X1Ug ICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNP TlRST0w2X1MgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQo+PiA+KyNkZWZpbmUgREJUUl9U REFUQTFfTUNPTlRST0w2X00gICAgICAgICAgICAgICAgICAgICAgIEJJVCg2KQo+PiA+KyNkZWZp bmUgREJUUl9UREFUQTFfTUNPTlRST0w2X1NJWkVfRklFTEQgICAgICBHRU5NQVNLKDE4LCAxNikK Pj4gPisjZGVmaW5lIERCVFJfVERBVEExX01DT05UUk9MNl9TRUxFQ1QgICAgICAgICAgQklUKDIx KQo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0w2X1ZVICAgICAgICAgICAgICBCSVQo MjMpCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTDZfVlMgICAgICAgICAgICAgIEJJ VCgyNCkKPj4gPisKPj4gPisjZGVmaW5lIERCVFJfVERBVEExX01DT05UUk9MNl9TSVpFXzhCSVQg ICAgICAgICAgICAgICAxCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTDZfU0laRV8x NkJJVCAgICAgIDIKPj4gPisjZGVmaW5lIERCVFJfVERBVEExX01DT05UUk9MNl9TSVpFXzMyQklU ICAgICAgMwo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0w2X1NJWkVfNjRCSVQgICAg ICA1Cj4+ID4rCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTF9MT0FEICAgICAgICAg ICAgIEJJVCgwKQo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0xfU1RPUkUgICAgICAg ICAgICBCSVQoMSkKPj4gPisjZGVmaW5lIERCVFJfVERBVEExX01DT05UUk9MX0VYRUNVVEUgICAg ICAgICAgQklUKDIpCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTF9VICAgICAgICAg ICAgICAgICAgICAgICAgQklUKDMpCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTF9T ICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9N Q09OVFJPTF9NICAgICAgICAgICAgICAgICAgICAgICAgQklUKDYpCj4+ID4rI2RlZmluZSBEQlRS X1REQVRBMV9NQ09OVFJPTF9TSVpFTE9fRklFTEQgICAgIEdFTk1BU0soMTcsIDE2KQo+PiA+KyNk ZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0xfU0VMRUNUICAgICAgICAgICBCSVQoMTkpCj4+ID4r I2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTF9TSVpFSElfRklFTEQgICAgIEdFTk1BU0soMjIs IDIxKQo+PiA+Kwo+PiA+KyNkZWZpbmUgREJUUl9UREFUQTFfTUNPTlRST0xfU0laRUxPXzhCSVQg ICAgICAxCj4+ID4rI2RlZmluZSBEQlRSX1REQVRBMV9NQ09OVFJPTF9TSVpFTE9fMTZCSVQgICAg IDIKPj4gPisjZGVmaW5lIERCVFJfVERBVEExX01DT05UUk9MX1NJWkVMT18zMkJJVCAgICAgMwo+ PiA+Ky8qIHZhbHVlIG9mIDUgc3BsaXQgYWNyb3NzIEhJIGFuZCBMTyAqLwo+PiA+KyNkZWZpbmUg REJUUl9UREFUQTFfTUNPTlRST0xfU0laRUxPXzY0QklUICAgICAxCj4+ID4rI2RlZmluZSBEQlRS X1REQVRBMV9NQ09OVFJPTF9TSVpFSElfNjRCSVQgICAgIDEKPj4gPisKPj4gPisvKiBSZWdpc3Rl cmVkIHBlci1jcHUgYnAvd3AgKi8KPj4gPitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBl cmZfZXZlbnQgKiwgcGNwdV9od19icF9ldmVudHNbUlZfTUFYX1RSSUdHRVJTXSk7Cj4+ID4rc3Rh dGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGVjYWxsX2xvY2tfZmxhZ3MpOwo+PiA+ K3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZWNhbGxfbG9jayk7Cj4+ID4r Cj4+ID4rLyogUGVyLWNwdSBzaGFyZWQgbWVtb3J5IGJldHdlZW4gUyBhbmQgTSBtb2RlICovCj4+ ID4rc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIHNiaV9kYnRyX3NobWVtX2VudHJ5LCBzYmlf ZGJ0cl9zaG1lbSk7Cj4+ID4rCj4+ID4rLyogbnVtYmVyIG9mIGRlYnVnIHRyaWdnZXJzIG9uIHRo aXMgY3B1IC4gKi8KPj4gPitzdGF0aWMgaW50IGRidHJfdG90YWxfbnVtIF9fcm9fYWZ0ZXJfaW5p dDsKPj4gPitzdGF0aWMgdW5zaWduZWQgbG9uZyBkYnRyX3R5cGUgX19yb19hZnRlcl9pbml0Owo+ PiA+K3N0YXRpYyB1bnNpZ25lZCBsb25nIGRidHJfaW5pdCBfX3JvX2FmdGVyX2luaXQ7Cj4+ID4r Cj4+ID4rc3RhdGljIGludCBhcmNoX3NtcF9zZXR1cF9zYmlfc2htZW0odW5zaWduZWQgaW50IGNw dSkKPj4gPit7Cj4+ID4rICAgICAgdW5pb24gc2JpX2RidHJfc2htZW1fZW50cnkgKmRidHJfc2ht ZW07Cj4+ID4rICAgICAgdW5zaWduZWQgbG9uZyBzaG1lbV9wYTsKPj4gPisgICAgICBzdHJ1Y3Qg c2JpcmV0IHJldDsKPj4gPisgICAgICBpbnQgcmM7Cj4+ID4rCj4+ID4rICAgICAgZGJ0cl9zaG1l bSA9IHBlcl9jcHVfcHRyKCZzYmlfZGJ0cl9zaG1lbSwgY3B1KTsKPj4gPisgICAgICBpZiAoIWRi dHJfc2htZW0pIHsKPj4gPisgICAgICAgICAgICAgIHByX2VycigiSW52YWxpZCBwZXItY3B1IHNo YXJlZCBtZW1vcnkgZm9yIGRlYnVnIHRyaWdnZXJzXG4iKTsKPj4gPisgICAgICAgICAgICAgIHJl dHVybiAtRU5PREVWOwo+PiA+KyAgICAgIH0KPj4gPisKPj4gPisgICAgICBzaG1lbV9wYSA9IHZp cnRfdG9fcGh5cyhkYnRyX3NobWVtKTsKPj4gPisKPj4gPisgICAgICByZXQgPSBzYmlfZWNhbGwo U0JJX0VYVF9EQlRSLCBTQklfRVhUX0RCVFJfU0VUVVBfU0hNRU0sCj4+ID4rICAgICAgICAgICAg ICAgICAgICAgIFNCSV9TSE1FTV9MTyhzaG1lbV9wYSksIFNCSV9TSE1FTV9ISShzaG1lbV9wYSks IDAsIDAsIDAsIDApOwo+PiA+Kwo+PiA+KyAgICAgIGlmIChyZXQuZXJyb3IpIHsKPj4gPisgICAg ICAgICAgICAgIHN3aXRjaCAocmV0LmVycm9yKSB7Cj4+ID4rICAgICAgICAgICAgICBjYXNlIFNC SV9FUlJfREVOSUVEOgo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBwcl93YXJuKCIlczogQWNj ZXNzIGRlbmllZCBmb3Igc2hhcmVkIG1lbW9yeSBhdCAlbHhcbiIsCj4+ID4rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHNobWVtX3BhKTsKPj4gPisgICAgICAgICAgICAg ICAgICAgICAgcmMgPSAtRVBFUk07Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ PiA+Kwo+PiA+KyAgICAgICAgICAgICAgY2FzZSBTQklfRVJSX0lOVkFMSURfUEFSQU06Cj4+ID4r ICAgICAgICAgICAgICBjYXNlIFNCSV9FUlJfSU5WQUxJRF9BRERSRVNTOgo+PiA+KyAgICAgICAg ICAgICAgICAgICAgICBwcl93YXJuKCIlczogSW52YWxpZCBhZGRyZXNzIHBhcmFtZXRlciAoJWxk KVxuIiwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmV0LmVy cm9yKTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwo+PiA+KyAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKPj4gPisKPj4gPisgICAgICAgICAgICAgIGNhc2UgU0JJ X0VSUl9BTFJFQURZX0FWQUlMQUJMRToKPj4gPisgICAgICAgICAgICAgICAgICAgICAgcHJfd2Fy bigiJXM6IFNoYXJlZCBtZW1vcnkgaXMgYWxyZWFkeSBzZXRcbiIsCj4+ID4rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mdW5jX18pOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBy YyA9IC1FQUREUklOVVNFOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gPisK Pj4gPisgICAgICAgICAgICAgIGNhc2UgU0JJX0VSUl9GQUlMVVJFOgo+PiA+KyAgICAgICAgICAg ICAgICAgICAgICBwcl9lcnIoIiVzOiBJbnRlcm5hbCBzZHRyaWcgc3RhdGUgZXJyb3JcbiIsCj4+ ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7Cj4+ID4rICAgICAgICAg ICAgICAgICAgICAgIHJjID0gLUVOWElPOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBicmVh azsKPj4gPisKPj4gPisgICAgICAgICAgICAgIGRlZmF1bHQ6Cj4+ID4rICAgICAgICAgICAgICAg ICAgICAgIHByX3dhcm4oIiVzOiBVbmtub3duIGVycm9yICVsdVxuIiwgX19mdW5jX18sIHJldC5l cnJvcik7Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOWElPOwo+PiA+KyAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICAgICAgICAgIH0KPj4gPisgICAgICB9 Cj4+ID4rCj4+ID4rICAgICAgcHJfZGVidWcoIkNQVSAlZDogSFcgQnJlYWtwb2ludCBzaGFyZWQg bWVtb3J5IHJlZ2lzdGVyZWQuXG4iLCBjcHUpOwo+PiA+Kwo+PiA+KyAgICAgIHJldHVybiByYzsK Pj4gPit9Cj4+ID4rCj4+ID4rc3RhdGljIGludCBhcmNoX3NtcF90ZWFyZG93bl9zYmlfc2htZW0o dW5zaWduZWQgaW50IGNwdSkKPj4gPit7Cj4+ID4rICAgICAgc3RydWN0IHNiaXJldCByZXQ7Cj4+ ID4rCj4+ID4rICAgICAgLyogRGlzYWJsZSBzaGFyZWQgbWVtb3J5ICovCj4+ID4rICAgICAgcmV0 ID0gc2JpX2VjYWxsKFNCSV9FWFRfREJUUiwgU0JJX0VYVF9EQlRSX1NFVFVQX1NITUVNLAo+PiA+ KyAgICAgICAgICAgICAgICAgICAgICBTQklfU0hNRU1fRElTQUJMRSwgU0JJX1NITUVNX0RJU0FC TEUsIDAsIDAsIDAsIDApOwo+PiA+Kwo+PiA+KyAgICAgIGlmIChyZXQuZXJyb3IpIHsKPj4gPisg ICAgICAgICAgICAgIHN3aXRjaCAocmV0LmVycm9yKSB7Cj4+ID4rICAgICAgICAgICAgICBjYXNl IFNCSV9FUlJfREVOSUVEOgo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBB Y2Nlc3MgZGVuaWVkIGZvciBzaGFyZWQgbWVtb3J5LlxuIiwKPj4gPisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZnVuY19fKTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4+ID4rCj4+ID4rICAgICAgICAgICAgICBjYXNlIFNCSV9FUlJfSU5WQUxJRF9QQVJBTToKPj4g PisgICAgICAgICAgICAgIGNhc2UgU0JJX0VSUl9JTlZBTElEX0FERFJFU1M6Cj4+ID4rICAgICAg ICAgICAgICAgICAgICAgIHByX2VycigiJXM6IEludmFsaWQgYWRkcmVzcyBwYXJhbWV0ZXIgKCVs dSlcbiIsCj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmV0LmVy cm9yKTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4rCj4+ID4rICAgICAg ICAgICAgICBjYXNlIFNCSV9FUlJfQUxSRUFEWV9BVkFJTEFCTEU6Cj4+ID4rICAgICAgICAgICAg ICAgICAgICAgIHByX2VycigiJXM6IFNoYXJlZCBtZW1vcnkgaXMgYWxyZWFkeSBzZXRcbiIsCj4+ ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7Cj4+ID4rICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwo+PiA+KyAgICAgICAgICAgICAgY2FzZSBTQklfRVJSX0ZBSUxV UkU6Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IEludGVybmFsIHNkdHJp ZyBzdGF0ZSBlcnJvclxuIiwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVu Y19fKTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4rICAgICAgICAgICAg ICBkZWZhdWx0Ogo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBVbmtub3du IGVycm9yICVsdVxuIiwgX19mdW5jX18sIHJldC5lcnJvcik7Cj4+ID4rICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+PiA+KyAgICAgICAgICAgICAgfQo+PiA+KyAgICAgIH0KPj4gPisKPj4g PisgICAgICBwcl9kZWJ1ZygiQ1BVICVkOiBIVyBCcmVha3BvaW50IHNoYXJlZCBtZW1vcnkgZGlz YWJsZWQuXG4iLCBjcHUpOwo+PiA+Kwo+PiA+KyAgICAgIHJldHVybiAwOwo+PiA+K30KPj4gPisK Pj4gPitzdGF0aWMgdm9pZCBpbml0X3NiaV9kYnRyKHZvaWQpCj4+ID4rewo+PiA+KyAgICAgIHN0 cnVjdCBzYmlyZXQgcmV0Owo+PiA+Kwo+PiA+KyAgICAgIC8qCj4+ID4rICAgICAgICogQ2FsbGVk IGJ5IGh3X2JyZWFrcG9pbnRfc2xvdHMgYW5kIGFyY2hfaHdfYnJlYWtwb2ludF9pbml0Lgo+PiA+ KyAgICAgICAqIE9ubHkgcHJvY2VlZCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBDUFUgdG8gcmVhY2gg dGhpcyBjb2RlLgo+PiA+KyAgICAgICAqLwo+PiA+KyAgICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0 KDAsICZkYnRyX2luaXQpKQo+PiA+KyAgICAgICAgICAgICAgcmV0dXJuOwo+PiA+Kwo+PiA+KyAg ICAgIGlmIChzYmlfcHJvYmVfZXh0ZW5zaW9uKFNCSV9FWFRfREJUUikgPD0gMCkgewo+PiA+KyAg ICAgICAgICAgICAgcHJfZGVidWcoIiVzOiBTQklfRVhUX0RCVFIgaXMgbm90IHN1cHBvcnRlZFxu IiwgX19mdW5jX18pOwo+PiA+KyAgICAgICAgICAgICAgZGJ0cl90b3RhbF9udW0gPSAwOwo+PiA+ KyAgICAgICAgICAgICAgcmV0dXJuOwo+PiA+KyAgICAgIH0KPj4gPisKPj4gPisgICAgICByZXQg PSBzYmlfZWNhbGwoU0JJX0VYVF9EQlRSLCBTQklfRVhUX0RCVFJfTlVNX1RSSUdHRVJTLAo+PiA+ KyAgICAgICAgICAgICAgICAgICAgICBEQlRSX1REQVRBMV9UWVBFX01DT05UUk9MNiwgMCwgMCwg MCwgMCwgMCk7Cj4+ID4rICAgICAgaWYgKHJldC5lcnJvcikgewo+PiA+KyAgICAgICAgICAgICAg cHJfd2FybigiJXM6IGZhaWxlZCB0byBkZXRlY3QgbWNvbnRyb2w2IHRyaWdnZXJzLiBlcnJvcjog JWxkLlxuIiwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJldC5lcnJvcik7 Cj4+ID4rICAgICAgfSBlbHNlIGlmICghcmV0LnZhbHVlKSB7Cj4+ID4rICAgICAgICAgICAgICBw cl93YXJuKCIlczogTm8gbWNvbnRyb2w2IHRyaWdnZXJzIGF2YWlsYWJsZS5cbiIsIF9fZnVuY19f KTsKPj4gPisgICAgICB9IGVsc2Ugewo+PiA+KyAgICAgICAgICAgICAgZGJ0cl90b3RhbF9udW0g PSByZXQudmFsdWU7Cj4+ID4rICAgICAgICAgICAgICBkYnRyX3R5cGUgPSBEQlRSX1REQVRBMV9U WVBFX01DT05UUk9MNjsKPj4gPisgICAgICAgICAgICAgIHJldHVybjsKPj4gPisgICAgICB9Cj4+ ID4rCj4+ID4rICAgICAgLyogZmFsbGJhY2sgdG8gbGVnYWN5IG1jb250cm9sIHRyaWdnZXJzIGlm IG1jb250cm9sNiBpcyBub3QgYXZhaWxhYmxlICovCj4+ID4rICAgICAgcmV0ID0gc2JpX2VjYWxs KFNCSV9FWFRfREJUUiwgU0JJX0VYVF9EQlRSX05VTV9UUklHR0VSUywKPj4gPisgICAgICAgICAg ICAgICAgICAgICAgREJUUl9UREFUQTFfVFlQRV9NQ09OVFJPTCwgMCwgMCwgMCwgMCwgMCk7Cj4+ ID4rICAgICAgaWYgKHJldC5lcnJvcikgewo+PiA+KyAgICAgICAgICAgICAgcHJfd2FybigiJXM6 IGZhaWxlZCB0byBkZXRlY3QgbWNvbnRyb2wgdHJpZ2dlcnMuIGVycm9yOiAlbGQuXG4iLAo+PiA+ KyAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmV0LmVycm9yKTsKPj4gPisgICAgICB9 IGVsc2UgaWYgKCFyZXQudmFsdWUpIHsKPj4gPisgICAgICAgICAgICAgIHByX2VycigiJXM6IE5v IG1jb250cm9sIHRyaWdnZXJzIGF2YWlsYWJsZS5cbiIsIF9fZnVuY19fKTsKPj4gPisgICAgICAg ICAgICAgIGRidHJfdG90YWxfbnVtID0gMDsKPj4gPisgICAgICB9IGVsc2Ugewo+PiA+KyAgICAg ICAgICAgICAgZGJ0cl90b3RhbF9udW0gPSByZXQudmFsdWU7Cj4+ID4rICAgICAgICAgICAgICBk YnRyX3R5cGUgPSBEQlRSX1REQVRBMV9UWVBFX01DT05UUk9MOwo+PiA+KyAgICAgIH0KPj4gPit9 Cj4+Cj4+IGBkYnRyX3RvdGFsX251bWAgaXMgc3RhdGljIGFuZCB0aHVzIHdvdWxkIGJlIGluaXRp YWxpemVkIHRvIHplcm8uCj4+IEFsdGhvdWdoIGFib3ZlIGNvZGUgaXMgc2V0dGluZyBpdCB0byB6 ZXJvIGluIHNvbWUgZXJyb3IgY29uZGl0aW9ucy4KPj4gQW5kIG5vdCBzZXR0aW5nIHRvIHplcm8g aW4gb3RoZXIgZXJyb3IgY29uZGl0aW9ucy4KPj4KPj4gSXQnbGwgYmUgYmV0dGVyIGlmIGZ1bmN0 aW9uIHN0YXJ0cyBvdXQgc2V0dGluZyBgZGJ0cl90b3RhbF9udW1gIGFzIHNldHRpbmcgdG8gMC4K Pj4gVGhlbiBzZXQgY29ycmVjdCB2YWx1ZSBpbiBzdWNjZXNzIGNvbmRpdGlvbnMuCj4KPkkgd291 bGQgZG8gdGhhdCwgYnV0IGBkYnRyX3RvdGFsX251bWAgaXMgbWFya2VkIGFzIGBfX3JvX2FmdGVy X2luaXRgCj5hbmQgSSBkb24ndCB3YW50IHRvCj53cml0ZSB0byBpdCB0d2ljZSwgYW5kIGkgd2Fu dGVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0IHRvIHplcm8gYXMgdGhhdAo+bWVhbnMgYnJlYWtwb2lu dHMgYXJlIGRpc2FibGVkLgo+SSBjYW4ganVzdCByZW1vdmUgdGhlIGFzc2lnbm1lbnRzIHRvIHpl cm8gdGhvdWdoLgoKTWFrZSBzZW5zZS4KCj4KPj4KPj4gPisKPj4gPitpbnQgaHdfYnJlYWtwb2lu dF9zbG90cyhpbnQgdHlwZSkKPj4gPit7Cj4+ID4rICAgICAgLyoKPj4gPisgICAgICAgKiBXZSBj YW4gYmUgY2FsbGVkIGVhcmx5LCBzbyBkb24ndCByZWx5IG9uCj4+ID4rICAgICAgICogc3RhdGlj IHZhcmlhYmxlcyBiZWluZyBpbml0aWFsaXNlZC4KPj4gPisgICAgICAgKi8KPj4gPisgICAgICBp bml0X3NiaV9kYnRyKCk7Cj4+ID4rCj4+ID4rICAgICAgcmV0dXJuIGRidHJfdG90YWxfbnVtOwo+ PiA+K30KPj4gPisKPj4gPitpbnQgYXJjaF9jaGVja19icF9pbl9rZXJuZWxzcGFjZShzdHJ1Y3Qg YXJjaF9od19icmVha3BvaW50ICpodykKPj4gPit7Cj4+ID4rICAgICAgdW5zaWduZWQgaW50IGxl bjsKPj4gPisgICAgICB1bnNpZ25lZCBsb25nIHZhOwo+PiA+Kwo+PiA+KyAgICAgIHZhID0gaHct PmFkZHJlc3M7Cj4+ID4rICAgICAgbGVuID0gaHctPmxlbjsKPj4gPisKPj4gPisgICAgICByZXR1 cm4gKHZhID49IFRBU0tfU0laRSkgJiYgKCh2YSArIGxlbiAtIDEpID49IFRBU0tfU0laRSk7Cj4+ ID4rfQo+PiA+Kwo+PiA+K3N0YXRpYyBpbnQgcnZfaW5pdF9tY29udHJvbF90cmlnZ2VyKGNvbnN0 IHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCj4+ID4rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmh3KQo+PiA+K3sKPj4gPisg ICAgICB1bnNpZ25lZCBsb25nIHRkYXRhMSA9IERCVFJfVERBVEExX1RZUEVfTUNPTlRST0w7Cj4+ ID4rCj4+ID4rICAgICAgc3dpdGNoIChhdHRyLT5icF90eXBlKSB7Cj4+ID4rICAgICAgY2FzZSBI V19CUkVBS1BPSU5UX1g6Cj4+ID4rICAgICAgICAgICAgICB0ZGF0YTEgfD0gREJUUl9UREFUQTFf TUNPTlRST0xfRVhFQ1VURTsKPj4gPisgICAgICAgICAgICAgIGJyZWFrOwo+PiA+KyAgICAgIGNh c2UgSFdfQlJFQUtQT0lOVF9SOgo+PiA+KyAgICAgICAgICAgICAgdGRhdGExIHw9IERCVFJfVERB VEExX01DT05UUk9MX0xPQUQ7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICBj YXNlIEhXX0JSRUFLUE9JTlRfVzoKPj4gPisgICAgICAgICAgICAgIHRkYXRhMSB8PSBEQlRSX1RE QVRBMV9NQ09OVFJPTF9TVE9SRTsKPj4gPisgICAgICAgICAgICAgIGJyZWFrOwo+PiA+KyAgICAg IGNhc2UgSFdfQlJFQUtQT0lOVF9SVzoKPj4gPisgICAgICAgICAgICAgIHRkYXRhMSB8PSBEQlRS X1REQVRBMV9NQ09OVFJPTF9TVE9SRSB8IERCVFJfVERBVEExX01DT05UUk9MX0xPQUQ7Cj4+ID4r ICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICBkZWZhdWx0Ogo+PiA+KyAgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4rICAgICAgfQo+PiA+Kwo+PiA+KyAgICAgIHN3aXRjaCAo YXR0ci0+YnBfbGVuKSB7Cj4+ID4rICAgICAgY2FzZSBIV19CUkVBS1BPSU5UX0xFTl8xOgo+PiA+ KyAgICAgICAgICAgICAgaHctPmxlbiA9IDE7Cj4+ID4rICAgICAgICAgICAgICB0ZGF0YTEgfD0g RklFTERfUFJFUChEQlRSX1REQVRBMV9NQ09OVFJPTF9TSVpFTE9fRklFTEQsCj4+ID4rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlRSX1REQVRBMV9NQ09OVFJPTF9TSVpFTE9f OEJJVCk7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICBjYXNlIEhXX0JSRUFL UE9JTlRfTEVOXzI6Cj4+ID4rICAgICAgICAgICAgICBody0+bGVuID0gMjsKPj4gPisgICAgICAg ICAgICAgIHRkYXRhMSB8PSBGSUVMRF9QUkVQKERCVFJfVERBVEExX01DT05UUk9MX1NJWkVMT19G SUVMRCwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVFJfVERBVEEx X01DT05UUk9MX1NJWkVMT18xNkJJVCk7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisg ICAgICBjYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzQ6Cj4+ID4rICAgICAgICAgICAgICBody0+bGVu ID0gNDsKPj4gPisgICAgICAgICAgICAgIHRkYXRhMSB8PSBGSUVMRF9QUkVQKERCVFJfVERBVEEx X01DT05UUk9MX1NJWkVMT19GSUVMRCwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERCVFJfVERBVEExX01DT05UUk9MX1NJWkVMT18zMkJJVCk7Cj4+ID4rICAgICAgICAg ICAgICBicmVhazsKPj4gPisjaWYgX19yaXNjdl94bGVuID49IDY0Cj4+ID4rICAgICAgY2FzZSBI V19CUkVBS1BPSU5UX0xFTl84Ogo+PiA+KyAgICAgICAgICAgICAgaHctPmxlbiA9IDg7Cj4+ID4r ICAgICAgICAgICAgICB0ZGF0YTEgfD0gRklFTERfUFJFUChEQlRSX1REQVRBMV9NQ09OVFJPTF9T SVpFTE9fRklFTEQsCj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlRS X1REQVRBMV9NQ09OVFJPTF9TSVpFTE9fNjRCSVQpIHwKPj4gPisgICAgICAgICAgICAgICAgICAg ICAgICBGSUVMRF9QUkVQKERCVFJfVERBVEExX01DT05UUk9MX1NJWkVISV9GSUVMRCwKPj4gPisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVFJfVERBVEExX01DT05UUk9MX1NJ WkVISV82NEJJVCk7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisjZW5kaWYKPj4gPisg ICAgICBkZWZhdWx0Ogo+PiA+KyAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4rICAg ICAgfQo+PiA+Kwo+PiA+KyAgICAgIHRkYXRhMSB8PSBEQlRSX1REQVRBMV9NQ09OVFJPTF9VOwo+ Pgo+PiBBc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIHJlLXVzZWQgZm9yIGtlcm5lbCBk YXRhIGJyZWFrcG9pbnRzIHRvbwo+PiBTaG91bGRuJ3QgdGhpcyBiZSBiYXNlZCBvbiBzb21lIGZs YWcgdG8gc2VsZWN0IFUgdi9zIFMuCj4+IFNhbWUgY29tbWVudCBmb3Igc2V0dGluZyB1cCB0ZGF0 YTEgd2l0aCBtY29udHJvbDYuCj4KPlllcyBJIGNhbiBhZGQgYSBtb2RlIGZsYWcsIHNvIHdoZW4g a2VybmVsIGJyZWFrcG9pbnRzIG9yIHZpcnR1YWxpemVkIGJyZWFrcG9pbnRzCj5hcmUgYWRkZWQg aXQgd2lsbCBiZSBlYXNpZXIuCj4KPlRoYW5rcywKPkplc3NlIFRhdWJlCj4KPj4KPj4gPisKPj4g PisgICAgICBody0+dGRhdGExID0gdGRhdGExOwo+PiA+Kwo+PiA+KyAgICAgIHJldHVybiAwOwo+ PiA+K30KPj4gPisKPj4gPitzdGF0aWMgaW50IHJ2X2luaXRfbWNvbnRyb2w2X3RyaWdnZXIoY29u c3Qgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKPj4gPisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmh3KQo+PiA+K3sKPj4g PisgICAgICB1bnNpZ25lZCBsb25nIHRkYXRhMSA9IERCVFJfVERBVEExX1RZUEVfTUNPTlRST0w7 Cj4+ID4rCj4+ID4rICAgICAgc3dpdGNoIChhdHRyLT5icF90eXBlKSB7Cj4+ID4rICAgICAgY2Fz ZSBIV19CUkVBS1BPSU5UX1g6Cj4+ID4rICAgICAgICAgICAgICB0ZGF0YTEgfD0gREJUUl9UREFU QTFfTUNPTlRST0w2X0VYRUNVVEU7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAg ICBjYXNlIEhXX0JSRUFLUE9JTlRfUjoKPj4gPisgICAgICAgICAgICAgIHRkYXRhMSB8PSBEQlRS X1REQVRBMV9NQ09OVFJPTDZfTE9BRDsKPj4gPisgICAgICAgICAgICAgIGJyZWFrOwo+PiA+KyAg ICAgIGNhc2UgSFdfQlJFQUtQT0lOVF9XOgo+PiA+KyAgICAgICAgICAgICAgdGRhdGExIHw9IERC VFJfVERBVEExX01DT05UUk9MNl9TVE9SRTsKPj4gPisgICAgICAgICAgICAgIGJyZWFrOwo+PiA+ KyAgICAgIGNhc2UgSFdfQlJFQUtQT0lOVF9SVzoKPj4gPisgICAgICAgICAgICAgIHRkYXRhMSB8 PSBEQlRSX1REQVRBMV9NQ09OVFJPTDZfU1RPUkUgfCBEQlRSX1REQVRBMV9NQ09OVFJPTDZfTE9B RDsKPj4gPisgICAgICAgICAgICAgIGJyZWFrOwo+PiA+KyAgICAgIGRlZmF1bHQ6Cj4+ID4rICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gPisgICAgICB9Cj4+ID4rCj4+ID4rICAgICAg c3dpdGNoIChhdHRyLT5icF9sZW4pIHsKPj4gPisgICAgICBjYXNlIEhXX0JSRUFLUE9JTlRfTEVO XzE6Cj4+ID4rICAgICAgICAgICAgICBody0+bGVuID0gMTsKPj4gPisgICAgICAgICAgICAgIHRk YXRhMSB8PSBGSUVMRF9QUkVQKERCVFJfVERBVEExX01DT05UUk9MNl9TSVpFX0ZJRUxELAo+PiA+ KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJUUl9UREFUQTFfTUNPTlRST0w2 X1NJWkVfOEJJVCk7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICBjYXNlIEhX X0JSRUFLUE9JTlRfTEVOXzI6Cj4+ID4rICAgICAgICAgICAgICBody0+bGVuID0gMjsKPj4gPisg ICAgICAgICAgICAgIHRkYXRhMSB8PSBGSUVMRF9QUkVQKERCVFJfVERBVEExX01DT05UUk9MNl9T SVpFX0ZJRUxELAo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJUUl9U REFUQTFfTUNPTlRST0w2X1NJWkVfMTZCSVQpOwo+PiA+KyAgICAgICAgICAgICAgYnJlYWs7Cj4+ ID4rICAgICAgY2FzZSBIV19CUkVBS1BPSU5UX0xFTl80Ogo+PiA+KyAgICAgICAgICAgICAgaHct PmxlbiA9IDQ7Cj4+ID4rICAgICAgICAgICAgICB0ZGF0YTEgfD0gRklFTERfUFJFUChEQlRSX1RE QVRBMV9NQ09OVFJPTDZfU0laRV9GSUVMRCwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERCVFJfVERBVEExX01DT05UUk9MNl9TSVpFXzMyQklUKTsKPj4gPisgICAgICAg ICAgICAgIGJyZWFrOwo+PiA+KyAgICAgIGNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fODoKPj4gPisg ICAgICAgICAgICAgIGh3LT5sZW4gPSA4Owo+PiA+KyAgICAgICAgICAgICAgdGRhdGExIHw9IEZJ RUxEX1BSRVAoREJUUl9UREFUQTFfTUNPTlRST0w2X1NJWkVfRklFTEQsCj4+ID4rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEQlRSX1REQVRBMV9NQ09OVFJPTDZfU0laRV82NEJJ VCk7Cj4+ID4rICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICBkZWZhdWx0Ogo+PiA+KyAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4rICAgICAgfQo+PiA+Kwo+PiA+KyAgICAg IHRkYXRhMSB8PSBEQlRSX1REQVRBMV9NQ09OVFJPTDZfVTsKPj4gPisKPj4gPisgICAgICBody0+ dGRhdGExID0gdGRhdGExOwo+PiA+Kwo+PiA+KyAgICAgIHJldHVybiAwOwo+PiA+K30KPj4gPisK Pj4gPitpbnQgaHdfYnJlYWtwb2ludF9hcmNoX3BhcnNlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwK Pj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9h dHRyICphdHRyLAo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhcmNoX2h3 X2JyZWFrcG9pbnQgKmh3KQo+PiA+K3sKPj4gPisgICAgICBpbnQgcmV0Owo+PiA+Kwo+PiA+KyAg ICAgIC8qIEJyZWFrcG9pbnQgYWRkcmVzcyAqLwo+PiA+KyAgICAgIGh3LT5hZGRyZXNzID0gYXR0 ci0+YnBfYWRkcjsKPj4gPisgICAgICBody0+dGRhdGEyID0gYXR0ci0+YnBfYWRkcjsKPj4gPisg ICAgICBody0+dGRhdGEzID0gMHgwOwo+PiA+KyAgICAgIGh3LT5uZXh0X2FkZHIgPSAweDA7Cj4+ ID4rICAgICAgaHctPmluX2NhbGxiYWNrID0gZmFsc2U7Cj4+ID4rCj4+ID4rICAgICAgc3dpdGNo IChkYnRyX3R5cGUpIHsKPj4gPisgICAgICBjYXNlIERCVFJfVERBVEExX1RZUEVfTUNPTlRST0w6 Cj4+ID4rICAgICAgICAgICAgICByZXQgPSBydl9pbml0X21jb250cm9sX3RyaWdnZXIoYXR0ciwg aHcpOwo+PiA+KyAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4rICAgICAgY2FzZSBEQlRSX1REQVRB MV9UWVBFX01DT05UUk9MNjoKPj4gPisgICAgICAgICAgICAgIHJldCA9IHJ2X2luaXRfbWNvbnRy b2w2X3RyaWdnZXIoYXR0ciwgaHcpOwo+PiA+KyAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4rICAg ICAgZGVmYXVsdDoKPj4gPisgICAgICAgICAgICAgIHByX3dhcm4oIlVuc3VwcG9ydGVkIHRyaWdn ZXIgdHlwZSAlbHUuXG4iLCBkYnRyX3R5cGUgPj4gREJUUl9UREFUQTFfVFlQRV9TSElGVCk7Cj4+ ID4rICAgICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKPj4gPisgICAgICAgICAgICAgIGJy ZWFrOwo+PiA+KyAgICAgIH0KPj4gPisKPj4gPisgICAgICByZXR1cm4gcmV0Owo+PiA+K30KPj4g PisKPj4gPisvKgo+PiA+KyAqIFNldCBicmVha3BvaW50IHRvIG5leHQgaW5zcnVjdGlvbiBhZnRl ciBicmVha3BvaW50Lgo+PiA+KyAqIFJldHVybnMgMCBpZiBzdWNjZXNzCj4+ID4rICogUmV0dXJu cyA8IDAgb24gZXJyb3IKPj4gPisgKi8KPj4gPitzdGF0aWMgaW50IHNldHVwX3NpbmdsZXN0ZXAo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKPj4gPit7Cj4+ ID4rICAgICAgc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqYnAgPSBjb3VudGVyX2FyY2hfYnAo ZXZlbnQpOwo+PiA+KyAgICAgIHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgb2xkX2h3X2JwOwo+ PiA+KyAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYnBfaW5zbjsKPj4gPisgICAgICB1bnNp Z25lZCBsb25nIG5leHRfYWRkciwgaW5zbjsKPj4gPisgICAgICBpbnQgcmV0Owo+PiA+Kwo+PiA+ KyAgICAgIC8qIFJlbW92ZSBicmVha3BvaW50IGV2ZW4gaWYgcmV0dXJuIGVycm9yIGFzIG5vdCB0 byBsb29wICovCj4+ID4rICAgICAgYXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChldmVudCk7 Cj4+ID4rCj4+ID4rICAgICAgcmV0ID0gZ2V0X2luc24ocmVncywgcmVncy0+ZXBjLCAmaW5zbik7 Cj4+ID4rICAgICAgaWYgKHJldCA8IDApCj4+ID4rICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ PiA+Kwo+PiA+KyAgICAgIG5leHRfYWRkciA9IGdldF9zdGVwX2FkZHJlc3MocmVncywgaW5zbik7 Cj4+ID4rCj4+ID4rICAgICAgcmV0ID0gZ2V0X2luc24ocmVncywgbmV4dF9hZGRyLCAmaW5zbik7 Cj4+ID4rICAgICAgaWYgKHJldCA8IDApCj4+ID4rICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ PiA+Kwo+PiA+KyAgICAgIGJwX2luc24uYnBfdHlwZSA9IEhXX0JSRUFLUE9JTlRfWDsKPj4gPisg ICAgICBicF9pbnNuLmJwX2FkZHIgPSBuZXh0X2FkZHI7Cj4+ID4rICAgICAgLyogR2V0IHRoZSBz aXplIG9mIHRoZSBpbnRydWN0aW9uICovCj4+ID4rICAgICAgYnBfaW5zbi5icF9sZW4gPSBHRVRf SU5TTl9MRU5HVEgoaW5zbik7Cj4+ID4rCj4+ID4rICAgICAgcmV0ID0gaHdfYnJlYWtwb2ludF9h cmNoX3BhcnNlKE5VTEwsICZicF9pbnNuLCBicCk7Cj4+ID4rICAgICAgaWYgKHJldCkKPj4gPisg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ID4rCj4+ID4rICAgICAgcmV0ID0gYXJjaF9pbnN0 YWxsX2h3X2JyZWFrcG9pbnQoZXZlbnQpOwo+PiA+KyAgICAgIGlmIChyZXQpCj4+ID4rICAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+PiA+Kwo+PiA+KyAgICAgIGJwLT5pbl9jYWxsYmFjayA9IHRy dWU7Cj4+ID4rICAgICAgYnAtPm5leHRfYWRkciA9IG5leHRfYWRkcjsKPj4gPisgICAgICByZXR1 cm4gMDsKPj4gPit9Cj4+ID4rCj4+ID4rLyoKPj4gPisgKiBIVyBCcmVha3BvaW50L3dhdGNocG9p bnQgaGFuZGxlcgo+PiA+KyAqLwo+PiA+K3N0YXRpYyBpbnQgaHdfYnJlYWtwb2ludF9oYW5kbGVy KHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+PiA+K3sKPj4gPisgICAgICBzdHJ1Y3QgcGVyZl9ldmVu dCAqZXZlbnQ7Cj4+ID4rICAgICAgc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqYnA7Cj4+ID4r ICAgICAgaW50IHJldCwgaTsKPj4gPisKPj4gPisgICAgICBmb3IgKGkgPSAwOyBpIDwgZGJ0cl90 b3RhbF9udW07IGkrKykgewo+PiA+KyAgICAgICAgICAgICAgZXZlbnQgPSB0aGlzX2NwdV9yZWFk KHBjcHVfaHdfYnBfZXZlbnRzW2ldKTsKPj4gPisgICAgICAgICAgICAgIGlmICghZXZlbnQpCj4+ ID4rICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiA+Kwo+PiA+KyAgICAgICAgICAg ICAgYnAgPSBjb3VudGVyX2FyY2hfYnAoZXZlbnQpOwo+PiA+KyAgICAgICAgICAgICAgaWYgKGJw LT5pbl9jYWxsYmFjaykgewo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBjaGFu Z2VkIGJyZWFrcG9pbnQgZGF0YSAqLwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBicC0+aW5f Y2FsbGJhY2sgPSBmYWxzZTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPmVw YyA9PSBicC0+bmV4dF9hZGRyKSB7Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChldmVudCk7Cj4+ID4rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBicmVha3BvaW50ICovCj4+ID4rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh3X2JyZWFrcG9pbnRfYXJjaF9wYXJzZShO VUxMLCAmZXZlbnQtPmF0dHIsIGJwKSkKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBOT1RJRllfRE9ORTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoZXZlbnQpKQo+PiA+KyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVElGWV9ET05FOwo+PiA+ KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RJRllfU1RPUDsKPj4gPisg ICAgICAgICAgICAgICAgICAgICAgfQo+PiA+Kwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBw cl9lcnIoIiVzOiBpbl9jYWxsYmFjayB3YXMgc2V0LCBidXQgZXBjKCVseCkgd2FzIG5vdCBuZXh0 ICIKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MoJWx4KS5cbiIs IF9fZnVuY19fLCByZWdzLT5lcGMsIGJwLT5uZXh0X2FkZHIpOwo+PiA+KyAgICAgICAgICAgICAg ICAgICAgICBicC0+bmV4dF9hZGRyID0gMHgwOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gTk9USUZZX0RPTkU7Cj4+ID4rICAgICAgICAgICAgICB9Cj4+ID4rCj4+ID4rICAgICAg ICAgICAgICBzd2l0Y2ggKGV2ZW50LT5hdHRyLmJwX3R5cGUpIHsKPj4gPisgICAgICAgICAgICAg IC8qIEJyZWFrcG9pbnQgKi8KPj4gPisgICAgICAgICAgICAgIGNhc2UgSFdfQlJFQUtQT0lOVF9Y Ogo+PiA+KyAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmF0dHIuYnBfYWRkciA9PSBy ZWdzLT5lcGMpIHsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzZXR1 cF9zaW5nbGVzdGVwKGV2ZW50LCByZWdzKTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocmV0IDwgMCkgewo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJfZXJyKCIlczogc2V0dXBfc2luZ2xlc3RlcCBmYWlsZWQgJWQuXG4iLCBfX2Z1bmNf XywgcmV0KTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBOT1RJRllfRE9ORTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4+ID4r Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZl9icF9ldmVudChldmVudCwg cmVncyk7Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVElGWV9T VE9QOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICB9Cj4+ID4rICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwo+PiA+Kwo+PiA+KyAgICAgICAgICAgICAgLyogV2F0Y2hwb2ludCAqLwo+PiA+ KyAgICAgICAgICAgICAgY2FzZSBIV19CUkVBS1BPSU5UX1c6Cj4+ID4rICAgICAgICAgICAgICBj YXNlIEhXX0JSRUFLUE9JTlRfUjoKPj4gPisgICAgICAgICAgICAgIGNhc2UgSFdfQlJFQUtQT0lO VF9SVzoKPj4gPisgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5hdHRyLmJwX2FkZHIg PT0gcmVncy0+YmFkYWRkcikgewo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dCA9IHNldHVwX3NpbmdsZXN0ZXAoZXZlbnQsIHJlZ3MpOwo+PiA+KyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBzZXR1cF9zaW5nbGVzdGVwIGZhaWxlZCAlZC5cbiIs IF9fZnVuY19fLCByZXQpOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE5PVElGWV9ET05FOwo+PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KPj4gPisKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmX2JwX2V2ZW50 KGV2ZW50LCByZWdzKTsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g Tk9USUZZX1NUT1A7Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgIH0KPj4gPisgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4+ID4rCj4+ID4rICAgICAgICAgICAgICBkZWZhdWx0Ogo+PiA+ KyAgICAgICAgICAgICAgICAgICAgICBwcl93YXJuKCIlczogVW5rbm93biB0eXBlOiAldVxuIiwg X19mdW5jX18sIGV2ZW50LT5hdHRyLmJwX3R5cGUpOwo+PiA+KyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKPj4gPisgICAgICAgICAgICAgIH0KPj4gPisgICAgICB9Cj4+ID4rCj4+ID4rICAg ICAgcmV0dXJuIE5PVElGWV9ET05FOwo+PiA+K30KPj4gPisKPj4gPitpbnQgaHdfYnJlYWtwb2lu dF9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKPj4gPisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQg KmRhdGEpCj4+ID4rewo+PiA+KyAgICAgIHN0cnVjdCBkaWVfYXJncyAqYXJncyA9IGRhdGE7Cj4+ ID4rCj4+ID4rICAgICAgaWYgKHZhbCAhPSBESUVfREVCVUcpCj4+ID4rICAgICAgICAgICAgICBy ZXR1cm4gTk9USUZZX0RPTkU7Cj4+ID4rCj4+ID4rICAgICAgcmV0dXJuIGh3X2JyZWFrcG9pbnRf aGFuZGxlcihhcmdzLT5yZWdzKTsKPj4gPit9Cj4+ID4rCj4+ID4rLyogYXRvbWljOiBjb3VudGVy LT5jdHgtPmxvY2sgaXMgaGVsZCAqLwo+PiA+K2ludCBhcmNoX2luc3RhbGxfaHdfYnJlYWtwb2lu dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+ID4rewo+PiA+KyAgICAgIHN0cnVjdCBhcmNo X2h3X2JyZWFrcG9pbnQgKmJwID0gY291bnRlcl9hcmNoX2JwKGV2ZW50KTsKPj4gPisgICAgICB1 bmlvbiBzYmlfZGJ0cl9zaG1lbV9lbnRyeSAqc2htZW0gPSB0aGlzX2NwdV9wdHIoJnNiaV9kYnRy X3NobWVtKTsKPj4gPisgICAgICBzdHJ1Y3Qgc2JpX2RidHJfZGF0YV9tc2cgKnhtaXQ7Cj4+ID4r ICAgICAgc3RydWN0IHNiaV9kYnRyX2lkX21zZyAqcmVjdjsKPj4gPisgICAgICBzdHJ1Y3QgcGVy Zl9ldmVudCAqKnNsb3Q7Cj4+ID4rICAgICAgdW5zaWduZWQgbG9uZyBpZHg7Cj4+ID4rICAgICAg c3RydWN0IHNiaXJldCByZXQ7Cj4+ID4rICAgICAgaW50IGVyciA9IDA7Cj4+ID4rCj4+ID4rICAg ICAgcmF3X3NwaW5fbG9ja19pcnFzYXZlKHRoaXNfY3B1X3B0cigmZWNhbGxfbG9jayksCj4+ID4r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzX2NwdV9wdHIoJmVjYWxsX2xvY2tfZmxh Z3MpKTsKPj4gPisKPj4gPisgICAgICB4bWl0ID0gJnNobWVtLT5kYXRhOwo+PiA+KyAgICAgIHJl Y3YgPSAmc2htZW0tPmlkOwo+PiA+KyAgICAgIHhtaXQtPnRkYXRhMSA9IGNwdV90b19sZShicC0+ dGRhdGExKTsKPj4gPisgICAgICB4bWl0LT50ZGF0YTIgPSBjcHVfdG9fbGUoYnAtPnRkYXRhMik7 Cj4+ID4rICAgICAgeG1pdC0+dGRhdGEzID0gY3B1X3RvX2xlKGJwLT50ZGF0YTMpOwo+PiA+Kwo+ PiA+KyAgICAgIHJldCA9IHNiaV9lY2FsbChTQklfRVhUX0RCVFIsIFNCSV9FWFRfREJUUl9UUklH X0lOU1RBTEwsCj4+ID4rICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsIDApOwo+ PiA+Kwo+PiA+KyAgICAgIGlmIChyZXQuZXJyb3IpIHsKPj4gPisgICAgICAgICAgICAgIHByX3dh cm4oIiVzOiBmYWlsZWQgdG8gaW5zdGFsbCB0cmlnZ2VyLiBlcnJvcjogJWxkXG4iLCBfX2Z1bmNf XywgcmV0LmVycm9yKTsKPj4gPisgICAgICAgICAgICAgIGVyciA9IHNiaV9lcnJfbWFwX2xpbnV4 X2Vycm5vKHJldC5lcnJvcik7Cj4+ID4rICAgICAgICAgICAgICBnb3RvIGRvbmU7Cj4+ID4rICAg ICAgfQo+PiA+Kwo+PiA+KyAgICAgIGlkeCA9IGxlX3RvX2NwdShyZWN2LT5pZHgpOwo+PiA+KyAg ICAgIGlmIChpZHggPj0gZGJ0cl90b3RhbF9udW0pIHsKPj4gPisgICAgICAgICAgICAgIHByX3dh cm4oIiVzOiBpbnZhbGlkIHRyaWdnZXIgaW5kZXggJWx1XG4iLCBfX2Z1bmNfXywgaWR4KTsKPj4g PisgICAgICAgICAgICAgIGVyciA9IC1FSU5WQUw7Cj4+ID4rICAgICAgICAgICAgICBnb3RvIGRv bmU7Cj4+ID4rICAgICAgfQo+PiA+Kwo+PiA+KyAgICAgIHNsb3QgPSB0aGlzX2NwdV9wdHIoJnBj cHVfaHdfYnBfZXZlbnRzW2lkeF0pOwo+PiA+KyAgICAgIGlmICgqc2xvdCkgewo+PiA+KyAgICAg ICAgICAgICAgcHJfd2FybigiJXM6IHNsb3QgJWx1IGlzIGluIHVzZVxuIiwgX19mdW5jX18sIGlk eCk7Cj4+ID4rICAgICAgICAgICAgICBlcnIgPSAtRUJVU1k7Cj4+ID4rICAgICAgICAgICAgICBn b3RvIGRvbmU7Cj4+ID4rICAgICAgfQo+PiA+Kwo+PiA+KyAgICAgIHByX2RlYnVnKCJUcmlnZ2Vy IDB4JWx4IGluc3RhbGxlZCBhdCBpbmRleCAweCVseFxuIiwgYnAtPnRkYXRhMiwgaWR4KTsKPj4g PisKPj4gPisgICAgICAvKiBTYXZlIHRoZSBldmVudCAtIHRvIGJlIGxvb2tlZCB1cCBpbiBoYW5k bGVyICovCj4+ID4rICAgICAgKnNsb3QgPSBldmVudDsKPj4gPisKPj4gPitkb25lOgo+PiA+KyAg ICAgIHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKHRoaXNfY3B1X3B0cigmZWNhbGxfbG9jayks Cj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoaXNfY3B1X3B0cigmZWNh bGxfbG9ja19mbGFncykpOwo+PiA+KyAgICAgIHJldHVybiBlcnI7Cj4+ID4rfQo+PiA+Kwo+PiA+ Ky8qIGF0b21pYzogY291bnRlci0+Y3R4LT5sb2NrIGlzIGhlbGQgKi8KPj4gPit2b2lkIGFyY2hf dW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiA+K3sK Pj4gPisgICAgICBzdHJ1Y3Qgc2JpcmV0IHJldDsKPj4gPisgICAgICBpbnQgaTsKPj4gPisKPj4g PisgICAgICBmb3IgKGkgPSAwOyBpIDwgZGJ0cl90b3RhbF9udW07IGkrKykgewo+PiA+KyAgICAg ICAgICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKipzbG90ID0gdGhpc19jcHVfcHRyKCZwY3B1X2h3 X2JwX2V2ZW50c1tpXSk7Cj4+ID4rCj4+ID4rICAgICAgICAgICAgICBpZiAoKnNsb3QgPT0gZXZl bnQpIHsKPj4gPisgICAgICAgICAgICAgICAgICAgICAgKnNsb3QgPSBOVUxMOwo+PiA+KyAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKPj4gPisgICAgICAgICAgICAgIH0KPj4gPisgICAgICB9 Cj4+ID4rCj4+ID4rCj4+ID4rICAgICAgaWYgKGkgPT0gZGJ0cl90b3RhbF9udW0pIHsKPj4gPisg ICAgICAgICAgICAgIHByX3dhcm4oIiVzOiBCcmVha3BvaW50IG5vdCBpbnN0YWxsZWQuXG4iLCBf X2Z1bmNfXyk7Cj4+ID4rICAgICAgICAgICAgICByZXR1cm47Cj4+ID4rICAgICAgfQo+PiA+Kwo+ PiA+KyAgICAgIHJldCA9IHNiaV9lY2FsbChTQklfRVhUX0RCVFIsIFNCSV9FWFRfREJUUl9UUklH X1VOSU5TVEFMTCwKPj4gPisgICAgICAgICAgICAgICAgICAgICAgaSwgMSwgMCwgMCwgMCwgMCk7 Cj4+ID4rICAgICAgaWYgKHJldC5lcnJvcikKPj4gPisgICAgICAgICAgICAgIHByX3dhcm4oIiVz OiBGYWlsZWQgdG8gdW5pbnN0YWxsIHRyaWdnZXIgJWQuIGVycm9yOiAlbGRcbiIsIF9fZnVuY19f LCBpLCByZXQuZXJyb3IpOwo+PiA+K30KPj4gPisKPj4gPit2b2lkIGZsdXNoX3B0cmFjZV9od19i cmVha3BvaW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KPj4gPisKPj4gPit2b2lkIGh3 X2JyZWFrcG9pbnRfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKSB7IH0KPj4gPisKPj4g PitzdGF0aWMgaW50IF9faW5pdCBhcmNoX2h3X2JyZWFrcG9pbnRfaW5pdCh2b2lkKQo+PiA+K3sK Pj4gPisgICAgICB1bnNpZ25lZCBpbnQgY3B1Owo+PiA+KyAgICAgIGludCByYyA9IDA7Cj4+ID4r Cj4+ID4rICAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKPj4gPisgICAgICAgICAgICAg IHJhd19zcGluX2xvY2tfaW5pdCgmcGVyX2NwdShlY2FsbF9sb2NrLCBjcHUpKTsKPj4gPisKPj4g PisgICAgICBpbml0X3NiaV9kYnRyKCk7Cj4+ID4rCj4+ID4rICAgICAgaWYgKGRidHJfdG90YWxf bnVtKSB7Cj4+ID4rICAgICAgICAgICAgICBwcl9kZWJ1ZygiJXM6IHRvdGFsIG51bWJlciBvZiB0 eXBlICVsdSB0cmlnZ2VyczogJXVcbiIsCj4+ID4rICAgICAgICAgICAgICAgICAgICAgIF9fZnVu Y19fLCBkYnRyX3R5cGUgPj4gREJUUl9UREFUQTFfVFlQRV9TSElGVCwgZGJ0cl90b3RhbF9udW0p Owo+PiA+KyAgICAgIH0gZWxzZSB7Cj4+ID4rICAgICAgICAgICAgICBwcl9kZWJ1ZygiJXM6IE5v IGhhcmR3YXJlIHRyaWdnZXJzIGF2YWlsYWJsZVxuIiwgX19mdW5jX18pOwo+PiA+KyAgICAgICAg ICAgICAgcmV0dXJuIHJjOwo+PiA+KyAgICAgIH0KPj4gPisKPj4gPisgICAgICAvKiBIb3RwbHVn IGhhbmRsZXIgdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciBzaGFyZWQgbWVtb3J5IHdpdGggU0JJICov Cj4+ID4rICAgICAgcmMgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLAo+ PiA+KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJpc2N2L2h3X2JyZWFrcG9pbnQ6cHJl cGFyZSIsCj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoX3NtcF9zZXR1cF9z Ymlfc2htZW0sCj4+ID4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoX3NtcF90ZWFy ZG93bl9zYmlfc2htZW0pOwo+PiA+Kwo+PiA+KyAgICAgIGlmIChyYyA8IDApCj4+ID4rICAgICAg ICAgICAgICBwcl93YXJuKCIlczogRmFpbGVkIHRvIHNldHVwIENQVSBob3RwbHVnIHN0YXRlXG4i LCBfX2Z1bmNfXyk7Cj4+ID4rCj4+ID4rICAgICAgcmV0dXJuIHJjOwo+PiA+K30KPj4gPithcmNo X2luaXRjYWxsKGFyY2hfaHdfYnJlYWtwb2ludF9pbml0KTsKPj4gPmRpZmYgLS1naXQgYS9hcmNo L3Jpc2N2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvdHJhcHMuYwo+PiA+aW5k ZXggOTM4YThiODQxZjk0Li4yYWM0NzFlYzc5YTggMTAwNjQ0Cj4+ID4tLS0gYS9hcmNoL3Jpc2N2 L2tlcm5lbC90cmFwcy5jCj4+ID4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC90cmFwcy5jCj4+ID5A QCAtMjg5LDYgKzI4OSwxMiBAQCB2b2lkIGhhbmRsZV9icmVhayhzdHJ1Y3QgcHRfcmVncyAqcmVn cykKPj4gPiAgICAgICBpZiAocHJvYmVfYnJlYWtwb2ludF9oYW5kbGVyKHJlZ3MpKQo+PiA+ICAg ICAgICAgICAgICAgcmV0dXJuOwo+PiA+Cj4+ID4rI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFL UE9JTlQKPj4gPisgICAgICBpZiAobm90aWZ5X2RpZShESUVfREVCVUcsICJFQlJFQUsiLCByZWdz LCAwLCByZWdzLT5jYXVzZSwgU0lHVFJBUCkKPj4gPisgICAgICAgICAgPT0gTk9USUZZX1NUT1Ap Cj4+ID4rICAgICAgICAgICAgICByZXR1cm47Cj4+ID4rI2VuZGlmCj4+ID4rCj4+ID4gICAgICAg Y3VycmVudC0+dGhyZWFkLmJhZF9jYXVzZSA9IHJlZ3MtPmNhdXNlOwo+PiA+Cj4+ID4gICAgICAg aWYgKHVzZXJfbW9kZShyZWdzKSkKPj4gPi0tCj4+ID4yLjQzLjAKPj4gPgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBs aXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=