Received: by 2002:a05:6358:51dd:b0:131:369:b2a3 with SMTP id 29csp1016169rwl; Thu, 10 Aug 2023 05:22:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFeDIIAGlgSR8RF3FJwRC0595wDQqtputmylmjyPFOUQAsvhNcIq21L19UvODoxfeXWG5Dl X-Received: by 2002:a05:6a20:13d8:b0:13b:a016:465b with SMTP id ho24-20020a056a2013d800b0013ba016465bmr1950078pzc.19.1691670159717; Thu, 10 Aug 2023 05:22:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691670159; cv=none; d=google.com; s=arc-20160816; b=UiSJmyrK2rXHNSHBa6zWSeWDKEW1Ro1/Ax3UmBOQ8xQAGIFELMLZrMLFpu3buyrXvt eRybUJ4BrOiH0iaccMcb9LDO+APyraDNlVneacDZZb+E5eak2Fdisj63cVd8ZY/UVCNP tD74lZjriAJw+mVtBoNXv8p/EZogr/fAmpe4LBbg8fEl1txlUyt4oqtoZ9GYH1ojxzFY /TZoV1C5bIVR/ElkB8mUwR9Y5GzsM0UJGua4HC5a35QD3jDijRh2a0VzCd5wrB6ZTJyF 4lNWVSpA0/QwytJ6BVk9ygPMSEgVNo/1qZV4qKWtxzUZufNpO3MSvphh6z42u3HlmdAP xfCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id:dkim-signature; bh=Fwl5NAaPffoJTRwdtS4YJGgR7AGg3pv0TtTN4DBJaSs=; fh=5MSCtqiPr7+XtPn8EHUFPbOYZFXLC9T3IEnPlXK1dqc=; b=bSNTMeI7RValX4lwsu6WcNukBGq+4/Oji05d2rRcOqTvL5YBOHSvPmv7gfUyoHoFxQ oVgqjo3AK0avfpXKeMWs2kS0+kG4KBHArqIUtLuogTvbFtZIQdLriNcUOeVE499vDAKl awTFC7UCdnkS2gtoRcu6Ju9WL3bcfjQR5oKuWAHq/NFQAVRK6Z1mLfm2V4DW9yZyjxg0 veIb29+MG5sL5ZUPpf/uX+eqACIMVfBpDT+r3HZqrUojQmpT3vSEYGedvPFrYl7ecPlZ OfAqosmFdrfPXgF4JRkDh8S5mRxRXNAUpaKWZvWtRiTjEJzqzxiMbzDatMenWd/Wt24e qZgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=LHojkpn2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e69-20020a636948000000b00563ea86ad93si1483287pgc.148.2023.08.10.05.22.26; Thu, 10 Aug 2023 05:22:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=LHojkpn2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233325AbjHJL5K (ORCPT + 99 others); Thu, 10 Aug 2023 07:57:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51382 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232242AbjHJL5J (ORCPT ); Thu, 10 Aug 2023 07:57:09 -0400 Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 05AB11BD; Thu, 10 Aug 2023 04:57:06 -0700 (PDT) Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-523b066d7ceso445734a12.2; Thu, 10 Aug 2023 04:57:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691668624; x=1692273424; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=Fwl5NAaPffoJTRwdtS4YJGgR7AGg3pv0TtTN4DBJaSs=; b=LHojkpn2ZozuPSFyxiYLwvfhiFkFWVQ57cYZBzREx3NnAcIGLJCQAfJ6jtrRHkdQbX Z0DsDCXCGdzs7/WmM+EteqsjrHYegq3ZWlswnAjOXMtv3Cfya0WwpQbG9aXLD5I4ZhzT kQD5xAYaGIMv+ie7MveC8WZsPSsynKHyytScI68tjvPJgEAV6yw3j3h9Mth4Tx4XzFfL jmq78hPuwI/vQ7nMM40NE2A3RT6ZSG1yNbpqfMbA2U/9QSBLQw0mEDg4Y7+OA33pqaGd A4U/bQ630Xg2fXDa9OmDFOgpDPX9V/cIyT8nr3w8IXONzPZ7CYuTjeg3BbcHwJ7jt6nI oD4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691668624; x=1692273424; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Fwl5NAaPffoJTRwdtS4YJGgR7AGg3pv0TtTN4DBJaSs=; b=AvKHSZw4CjA3VJCVCT7ISdwTpW4BpsdAezNSPbo6+UVlEoYvq/EV1gVYaPJDAJEUf1 b9N0cqpg2pjwHfNZykEz8SANyvAEahzy9ZZmlshrVj9iLxXPw3latf0q/h1Z0V+t6xCT cNKzA4rnuC2L+GSZIQglb3pO7EBpAfTJzEh34gU0Byr6eUXLgp1bEf4B/YTiDvlHt+pu Pmnse4wQTVTutyiiV43M0c4VeWvTHZFzWddavWIc4SQc9s4oEDyy5x10TVtFvcAi2mYy x4BUtRLphGfYJrt/s5pGWa7aE3GiSVgDWzn+pS0V4QK8Xl2Vp5o37ZMQihrPHHKFX+QQ 8xcQ== X-Gm-Message-State: AOJu0Yz3W/UnTeQviNR/+MiIjJdrqxxRy5Emsy39n/t5C/m0y3R8dD2E rJAah6P7X1+bQ2l0L5naj2A= X-Received: by 2002:a17:906:31c7:b0:99c:ae00:f869 with SMTP id f7-20020a17090631c700b0099cae00f869mr1891631ejf.41.1691668623883; Thu, 10 Aug 2023 04:57:03 -0700 (PDT) Received: from ?IPv6:2001:a61:3488:8a01:c631:bde5:1eff:9b66? ([2001:a61:3488:8a01:c631:bde5:1eff:9b66]) by smtp.gmail.com with ESMTPSA id ju14-20020a17090798ae00b0099bc038eb2bsm833518ejc.58.2023.08.10.04.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Aug 2023 04:57:03 -0700 (PDT) Message-ID: <34f5e2118a4714048231e6ee9a8f244248616bd0.camel@gmail.com> Subject: Re: [PATCH 2/2] iio: adc: ad717x: add AD717X driver From: Nuno =?ISO-8859-1?Q?S=E1?= To: Dumitru Ceclan Cc: Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Andy Shevchenko , Arnd Bergmann , Cosmin Tanislav , Alexander Sverdlin , Hugo Villeneuve , Okan Sahin , Niklas Schnelle , ChiYuan Huang , Ramona Bolboaca , Ibrahim Tilki , ChiaEn Wu , William Breathitt Gray , Lee Jones , Haibo Chen , Mike Looijmans , Leonard =?ISO-8859-1?Q?G=F6hrs?= , Ceclan Dumitru , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Date: Thu, 10 Aug 2023 13:57:02 +0200 In-Reply-To: <20230810093322.593259-2-mitrutzceclan@gmail.com> References: <20230810093322.593259-1-mitrutzceclan@gmail.com> <20230810093322.593259-2-mitrutzceclan@gmail.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRHVtaXRydSwKClRoYW5rcyBmb3IgdGFraW5nIGNhcmUgb2YgdGhpcyBkcml2ZXIgd2hpY2gg aXMgb3V0IG9mIHRyZWUgZm9yIGEgbG9uZyB0aW1lLi4uIFNvbWUKY29tbWVudHMgYmVsb3cuCgpP biBUaHUsIDIwMjMtMDgtMTAgYXQgMTI6MzMgKzAzMDAsIER1bWl0cnUgQ2VjbGFuIHdyb3RlOgo+ IFRoZSBBRDcxN3ggZmFtaWx5IG9mZmVyIGEgY29tcGxldGUgaW50ZWdyYXRlZCBTaWdtYS1EZWx0 YSBBREMgc29sdXRpb24KPiB3aGljaCBjYW4gYmUgdXNlZCBpbiBoaWdoIHByZWNpc2lvbiwgbG93 IG5vaXNlIHNpbmdsZSBjaGFubmVsCj4gYXBwbGljYXRpb25zIG9yIGhpZ2hlciBzcGVlZCBtdWx0 aXBsZXhlZCBhcHBsaWNhdGlvbnMuIFRoZSBTaWdtYS1EZWx0YQo+IEFEQyBpcyBpbnRlbmRlZCBw cmltYXJpbHkgZm9yIG1lYXN1cmVtZW50IG9mIHNpZ25hbHMgY2xvc2UgdG8gREMgYnV0IGFsc28K PiBkZWxpdmVycyBvdXRzdGFuZGluZyBwZXJmb3JtYW5jZSB3aXRoIGlucHV0IGJhbmR3aWR0aHMg b3V0IHRvIH4xMGtIei4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEdW1pdHJ1IENlY2xhbiA8bWl0cnV0 emNlY2xhbkBnbWFpbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2lpby9hZGMvS2NvbmZpZ8KgIHzC oMKgIDcgKwo+IMKgZHJpdmVycy9paW8vYWRjL01ha2VmaWxlIHzCoMKgIDEgKwo+IMKgZHJpdmVy cy9paW8vYWRjL2FkNzE3eC5jIHwgOTk5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAxMDA3IGluc2VydGlvbnMoKykKPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lpby9hZGMvYWQ3MTd4LmMKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9paW8vYWRjL0tjb25maWcgYi9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZwo+IGluZGV4 IGRjMTRiZGUzMWFjMS4uMjk0YTQ4YjA1NzY5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaWlvL2Fk Yy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9paW8vYWRjL0tjb25maWcKPiBAQCAtNTQsNiArNTQs MTMgQEAgY29uZmlnIEFENzEyNAo+IMKgwqDCoMKgwqDCoMKgwqDCoCBUbyBjb21waWxlIHRoaXMg ZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKPiDC oMKgwqDCoMKgwqDCoMKgwqAgY2FsbGVkIGFkNzEyNC4KPiDCoAo+ICtjb25maWcgQUQ3MTdYCj4g K8KgwqDCoMKgwqDCoMKgdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFENzE3eCBkcml2ZXIiCj4g K8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBTUElfTUFTVEVSCj4gK8KgwqDCoMKgwqDCoMKgc2Vs ZWN0IEFEX1NJR01BX0RFTFRBCj4gK8KgwqDCoMKgwqDCoMKgaGVscAo+ICvCoMKgwqDCoMKgwqDC oMKgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRDcx N3ggQURDLgo+ICsKPiDCoGNvbmZpZyBBRDcxOTIKPiDCoMKgwqDCoMKgwqDCoMKgdHJpc3RhdGUg IkFuYWxvZyBEZXZpY2VzIEFENzE5MCBBRDcxOTIgQUQ3MTkzIEFENzE5NSBBREMgZHJpdmVyIgo+ IMKgwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIFNQSQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lp by9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUKPiBpbmRleCBlYjZlODkx NzkwZmIuLmU5NDkxZTRlZmY4ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2lpby9hZGMvTWFrZWZp bGUKPiArKysgYi9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUKPiBAQCAtOSw2ICs5LDcgQEAgb2Jq LSQoQ09ORklHX0FEX1NJR01BX0RFTFRBKSArPSBhZF9zaWdtYV9kZWx0YS5vCj4gwqBvYmotJChD T05GSUdfQUQ0MTMwKSArPSBhZDQxMzAubwo+IMKgb2JqLSQoQ09ORklHX0FENzA5MVI1KSArPSBh ZDcwOTFyNS5vIGFkNzA5MXItYmFzZS5vCj4gwqBvYmotJChDT05GSUdfQUQ3MTI0KSArPSBhZDcx MjQubwo+ICtvYmotJChDT05GSUdfQUQ3MTdYKSArPSBhZDcxN3gubwo+IMKgb2JqLSQoQ09ORklH X0FENzE5MikgKz0gYWQ3MTkyLm8KPiDCoG9iai0kKENPTkZJR19BRDcyNjYpICs9IGFkNzI2Ni5v Cj4gwqBvYmotJChDT05GSUdfQUQ3MjgwKSArPSBhZDcyODBhLm8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9paW8vYWRjL2FkNzE3eC5jIGIvZHJpdmVycy9paW8vYWRjL2FkNzE3eC5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQxNGEzZTBlMmQ5Mwo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2lpby9hZGMvYWQ3MTd4LmMKPiBAQCAtMCwwICsxLDk5 OSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArLyoKPiArICog QUQ3MTcyLTIvQUQ3MTczLTgvQUQ3MTc1LTIvQUQ3MTc2LTIgU1BJIEFEQyBkcml2ZXIKPiArICog Q29weXJpZ2h0IChDKSAyMDIzIEFuYWxvZyBEZXZpY2VzLCBJbmMuCj4gKyAqLwo+ICsKPiArI2lu Y2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5j bHVkZSA8bGludXgvc3BpL3NwaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3VuaXRzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2RyaXZlci5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKwo+ICsjaW5jbHVkZSA8 bGludXgvaWlvL2lpby5oPgo+ICsjaW5jbHVkZSA8bGludXgvaWlvL2J1ZmZlci5oPgo+ICsjaW5j bHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9paW8vdHJpZ2dlci5o Pgo+ICsjaW5jbHVkZSA8bGludXgvaWlvL3RyaWdnZXJfY29uc3VtZXIuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lpby90cmlnZ2VyZWRfYnVmZmVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9paW8vYWRj L2FkX3NpZ21hX2RlbHRhLmg+Cj4gKwo+ICsjZGVmaW5lIEFENzE3WF9SRUdfQ09NTVPCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwCj4gKyNkZWZpbmUgQUQ3MTdYX1JFR19BRENfTU9E RcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDEKPiArI2RlZmluZSBBRDcxN1hfUkVHX0lOVEVS RkFDRV9NT0RFwqDCoMKgwqDCoMKgMHgwMgo+ICsjZGVmaW5lIEFENzE3WF9SRUdfQ1JDwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDMKPiArI2RlZmluZSBBRDcxN1hfUkVHX0RB VEHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA0Cj4g KyNkZWZpbmUgQUQ3MTdYX1JFR19HUElPwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgwNgo+ICsjZGVmaW5lIEFENzE3WF9SRUdfSUTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA3Cj4gKyNkZWZpbmUgQUQ3MTdYX1JFR19DSCh4KcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgweDEwICsgKHgpKQo+ICsjZGVmaW5lIEFENzE3 WF9SRUdfU0VUVVAoeCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgyMCArICh4KSkKPiArI2Rl ZmluZSBBRDcxN1hfUkVHX0ZJTFRFUih4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgyOCArICh4 KSkKPiArI2RlZmluZSBBRDcxN1hfUkVHX09GRlNFVCh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAo MHgzMCArICh4KSkKPiArI2RlZmluZSBBRDcxN1hfUkVHX0dBSU4oeCnCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCgweDM4ICsgKHgpKQo+ICsKPiArI2RlZmluZSBBRDcxN1hfQ0hfRU5BQkxFwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDE1KQo+ICsjZGVmaW5lIEFENzE3WF9DSF9T RVRVUF9TRUwoeCnCoMKgwqDCoMKgwqDCoMKgwqAoKHgpIDw8IDEyKQo+ICsjZGVmaW5lIEFENzE3 WF9DSF9TRVRVUF9BSU5QT1MoeCnCoMKgwqDCoMKgwqAoKHgpIDw8IDUpCj4gKyNkZWZpbmUgQUQ3 MTdYX0NIX1NFVFVQX0FJTk5FRyh4KcKgwqDCoMKgwqDCoCh4KQo+ICsKPiArI2RlZmluZSBBRDcx N1hfQ0hfQUREUkVTUyhwb3MsIG5lZykgXAo+ICvCoMKgwqDCoMKgwqDCoChBRDcxN1hfQ0hfU0VU VVBfQUlOUE9TKHBvcykgfCBBRDcxN1hfQ0hfU0VUVVBfQUlOTkVHKG5lZykpCj4gKwo+ICsjZGVm aW5lIEFENzE3Ml9JRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgwMGQwCj4gKyNkZWZpbmUgQUQ3MTczX0lEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDMwZDAKPiArI2RlZmluZSBBRDcxNzVfSUTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MGNkMAo+ICsjZGVmaW5lIEFENzE3Nl9JRMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwYzkwCj4gKyNkZWZp bmUgQUQ3MTdYX0lEX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHhmZmYw Cj4gKwo+ICsjZGVmaW5lIEFENzE3WF9BRENfTU9ERV9SRUZfRU7CoMKgwqDCoMKgwqDCoMKgwqBC SVQoMTUpCj4gKyNkZWZpbmUgQUQ3MTdYX0FEQ19NT0RFX1NJTkdfQ1lDwqDCoMKgwqDCoMKgwqBC SVQoMTMpCj4gKyNkZWZpbmUgQUQ3MTdYX0FEQ19NT0RFX01PREVfTUFTS8KgwqDCoMKgwqDCoDB4 NzAKPiArI2RlZmluZSBBRDcxN1hfQURDX01PREVfTU9ERSh4KcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKCh4KSA8PCA0KQo+ICsjZGVmaW5lIEFENzE3WF9BRENfTU9ERV9DTE9DS1NF TF9NQVNLwqDCoDB4Ywo+ICsjZGVmaW5lIEFENzE3WF9BRENfTU9ERV9DTE9DS1NFTCh4KcKgwqDC oMKgKCh4KSA8PCAyKQo+ICsKPiArI2RlZmluZSBBRDcxN1hfR1BJT19QRFNXwqDCoMKgwqDCoMKg wqBCSVQoMTQpCj4gKyNkZWZpbmUgQUQ3MTdYX0dQSU9fT1BfRU4yXzPCoMKgwqBCSVQoMTMpCj4g KyNkZWZpbmUgQUQ3MTdYX0dQSU9fTVVYX0lPwqDCoMKgwqDCoEJJVCgxMikKPiArI2RlZmluZSBB RDcxN1hfR1BJT19TWU5DX0VOwqDCoMKgwqBCSVQoMTEpCj4gKyNkZWZpbmUgQUQ3MTdYX0dQSU9f RVJSX0VOwqDCoMKgwqDCoEJJVCgxMCkKPiArI2RlZmluZSBBRDcxN1hfR1BJT19FUlJfREFUwqDC oMKgwqBCSVQoOSkKPiArI2RlZmluZSBBRDcxN1hfR1BJT19HUF9EQVRBM8KgwqDCoEJJVCg3KQo+ ICsjZGVmaW5lIEFENzE3WF9HUElPX0dQX0RBVEEywqDCoMKgQklUKDYpCj4gKyNkZWZpbmUgQUQ3 MTdYX0dQSU9fSVBfRU4xwqDCoMKgwqDCoEJJVCg1KQo+ICsjZGVmaW5lIEFENzE3WF9HUElPX0lQ X0VOMMKgwqDCoMKgwqBCSVQoNCkKPiArI2RlZmluZSBBRDcxN1hfR1BJT19PUF9FTjHCoMKgwqDC oMKgQklUKDMpCj4gKyNkZWZpbmUgQUQ3MTdYX0dQSU9fT1BfRU4wwqDCoMKgwqDCoEJJVCgyKQo+ ICsjZGVmaW5lIEFENzE3WF9HUElPX0dQX0RBVEExwqDCoMKgQklUKDEpCj4gKyNkZWZpbmUgQUQ3 MTdYX0dQSU9fR1BfREFUQTDCoMKgwqBCSVQoMCkKPiArCj4gKyNkZWZpbmUgQUQ3MTdYX0lOVEVS RkFDRV9EQVRBX1NUQVTCoMKgwqDCoMKgQklUKDYpCj4gKyNkZWZpbmUgQUQ3MTdYX0lOVEVSRkFD RV9EQVRBX1NUQVRfRU4oeClcCj4gK8KgwqDCoMKgwqDCoMKgRklFTERfUFJFUChBRDcxN1hfSU5U RVJGQUNFX0RBVEFfU1RBVCwgeCkKPiArCj4gKyNkZWZpbmUgQUQ3MTdYX1NFVFVQX0JJUE9MQVLC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEyKQo+ICsjZGVmaW5lIEFENzE3WF9TRVRVUF9BUkVG X0JVRsKgwqDCoMKgwqDCoMKgwqDCoMKgKDB4MyA8PCAxMCkKPiArI2RlZmluZSBBRDcxN1hfU0VU VVBfQUlOX0JVRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgzIDw8IDgpCj4gKyNkZWZpbmUgQUQ3 MTdYX1NFVFVQX1JFRl9TRUxfTUFTS8KgwqDCoMKgwqDCoDB4MzAKPiArI2RlZmluZSBBRDcxN1hf U0VUVVBfUkVGX1NFTF9BVkREMV9BVlNTwqDCoMKgwqDCoMKgwqDCoDB4MzAKPiArI2RlZmluZSBB RDcxN1hfU0VUVVBfUkVGX1NFTF9JTlRfUkVGwqDCoMKgMHgyMAo+ICsjZGVmaW5lIEFENzE3WF9T RVRVUF9SRUZfU0VMX0VYVF9SRUYywqDCoDB4MTAKPiArI2RlZmluZSBBRDcxN1hfU0VUVVBfUkVG X1NFTF9FWFRfUkVGwqDCoMKgMHgwMAo+ICsKPiArI2RlZmluZSBBRDcxN1hfRklMVEVSX09EUjBf TUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxZgo+ICsjZGVmaW5lIEFENzE3 WF9NQVhfQ09ORklHU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgOAo+ICsKPiArZW51bSBhZDcx N3hfaWRzIHsKPiArwqDCoMKgwqDCoMKgwqBJRF9BRDcxNzJfMiwKPiArwqDCoMKgwqDCoMKgwqBJ RF9BRDcxNzNfOCwKPiArwqDCoMKgwqDCoMKgwqBJRF9BRDcxNzVfMiwKPiArwqDCoMKgwqDCoMKg wqBJRF9BRDcxNzZfMiwKPiArfTsKPiArCj4gK3N0cnVjdCBhZDcxN3hfZGV2aWNlX2luZm8gewo+ ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBpZDsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25l ZCBpbnQgbnVtX2lucHV0czsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbnVtX2NoYW5u ZWxzOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBudW1fY29uZmlnczsKPiArwqDCoMKg wqDCoMKgwqBib29sIGhhc19ncDIzOwo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgaGFzX3RlbXA7Cj4g K8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGNsb2NrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBj b25zdCB1bnNpZ25lZCBpbnQgKnNpbmM1X2RhdGFfcmF0ZXM7Cj4gK8KgwqDCoMKgwqDCoMKgdW5z aWduZWQgaW50IG51bV9zaW5jNV9kYXRhX3JhdGVzOwo+ICt9Owo+ICsKPiArc3RydWN0IGFkNzE3 eF9jaGFubmVsX2NvbmZpZyB7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBsaXZlOwo+ICvCoMKgwqDC oMKgwqDCoHVuc2lnbmVkIGNoYXIgY2ZnX3Nsb3Q7Cj4gK8KgwqDCoMKgwqDCoMKgLyogRmllbGRz IGZyb20gdGhpcyBwb2ludCBhcmUgdXNlZCB0byBjb21wYXJlIGVxdWFsaXR5IG9mIGNvbmZpZ3Mg Ki8KPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBjaGFyIG9kcjsKPiArwqDCoMKgwqDCoMKgwqBi b29sIGJpcG9sYXI7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBpbnB1dF9idWY7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgYWQ3MTd4X2NoYW5uZWwgewo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBj aGFuX3JlZzsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ3MTd4X2NoYW5uZWxfY29uZmlnIGNm ZzsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgYWluOwo+ICt9Owo+ICsKPiArc3RydWN0 IGFkNzE3eF9zdGF0ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFkNzE3eF9kZXZp Y2VfaW5mbyAqaW5mbzsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWRfc2lnbWFfZGVsdGEgc2Q7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNzE3eF9jaGFubmVsICpjaGFubmVsczsKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcmVndWxhdG9yICpyZWc7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWdu ZWQgaW50IGFkY19tb2RlOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBpbnRlcmZhY2Vf bW9kZTsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbnVtX2NoYW5uZWxzOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBtdXRleCBjZmdzX2xvY2s7IC8qIGxvY2sgZm9yIGNvbmZpZ3MgYWNj ZXNzICovCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBjZmdfc2xvdHNfc3RhdHVzOyAv KiBzbG90cyB1c2FnZSBzdGF0dXMgYml0bWFwKi8KPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBs b25nIGxvbmcgY29uZmlnX3VzYWdlX2NvdW50ZXI7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQg bG9uZyBsb25nICpjb25maWdfY250czsKPiArCj4gKyNpZmRlZiBDT05GSUdfR1BJT0xJQgo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBncGlvX2NoaXAgZ3Bpb2NoaXA7Cj4gK8KgwqDCoMKgwqDCoMKg dW5zaWduZWQgaW50IGdwaW9fcmVnOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBncGlv XzIzX21hc2s7Cj4gKyNlbmRpZgo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu dCBhZDcxNzNfc2luYzVfZGF0YV9yYXRlc1tdID0gewo+ICvCoMKgwqDCoMKgwqDCoDYyMTEwMDAs IDYyMTEwMDAsIDYyMTEwMDAsIDYyMTEwMDAsIDYyMTEwMDAsIDYyMTEwMDAsIDUxODEwMDAsIDQ0 NDQwMDAsCj4gK8KgwqDCoMKgwqDCoMKgMzExNTAwMCwgMjU5NzAwMCwgMTAwNzAwMCwgNTAzODAw LMKgIDM4MTAwMCzCoCAyMDAzMDAswqAgMTAwNTAwLMKgIDU5NTIwLAo+ICvCoMKgwqDCoMKgwqDC oDQ5NjgwLMKgwqAgMjAwMTAswqDCoCAxNjMzMyzCoMKgIDEwMDAwLMKgwqAgNTAwMCzCoMKgwqAg MjUwMCzCoMKgwqAgMTI1MCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg YWQ3MTc1X3NpbmM1X2RhdGFfcmF0ZXNbXSA9IHsKPiArwqDCoMKgwqDCoMKgwqA1MDAwMDAwMCwg NDE2NjcwMDAsIDMxMjUwMDAwLCAyNzc3ODAwMCwgMjA4MzMwMDAsIDE3ODU3MDAwLCAxMjUwMDAw MCwKPiArwqDCoMKgwqDCoMKgwqAxMDAwMDAwMCwgNTAwMDAwMCzCoCAyNTAwMDAwLMKgIDEwMDAw MDAswqDCoDUwMDAwMCzCoMKgIDM5NzUwMCzCoMKgIDIwMDAwMCwKPiArwqDCoMKgwqDCoMKgwqAx MDAwMDAswqDCoCA1OTkyMCzCoMKgwqAgNDk5NjAswqDCoMKgIDIwMDAwLMKgwqDCoMKgMTY2NjYs wqDCoMKgIDEwMDAwLMKgwqDCoCA1MDAwLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBhZDcxN3hfZGV2aWNlX2luZm8gYWQ3MTd4X2RldmljZV9pbmZvW10gPSB7Cj4gK8KgwqDCoMKg wqDCoMKgW0lEX0FENzE3Ml8yXSA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LmlkID0gQUQ3MTcyX0lELAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubnVtX2lu cHV0cyA9IDUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5udW1fY2hhbm5lbHMg PSA0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubnVtX2NvbmZpZ3MgPSA0LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaGFzX2dwMjMgPSBmYWxzZSwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmhhc190ZW1wID0gdHJ1ZSwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNsb2NrID0gMjAwMDAwMCwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLnNpbmM1X2RhdGFfcmF0ZXMgPSBhZDcxNzNfc2luYzVfZGF0YV9yYXRl cywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm51bV9zaW5jNV9kYXRhX3JhdGVz ID0gQVJSQVlfU0laRShhZDcxNzNfc2luYzVfZGF0YV9yYXRlcyksCj4gK8KgwqDCoMKgwqDCoMKg fSwKPiArwqDCoMKgwqDCoMKgwqBbSURfQUQ3MTczXzhdID0gewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuaWQgPSBBRDcxNzNfSUQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5udW1faW5wdXRzID0gMTcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC5udW1fY2hhbm5lbHMgPSAxNiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm51 bV9jb25maWdzID0gOCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmhhc19ncDIz ID0gdHJ1ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmhhc190ZW1wID0gdHJ1 ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNsb2NrID0gMjAwMDAwMCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnNpbmM1X2RhdGFfcmF0ZXMgPSBhZDcxNzNf c2luYzVfZGF0YV9yYXRlcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm51bV9z aW5jNV9kYXRhX3JhdGVzID0gQVJSQVlfU0laRShhZDcxNzNfc2luYzVfZGF0YV9yYXRlcyksCj4g K8KgwqDCoMKgwqDCoMKgfSwKPiArwqDCoMKgwqDCoMKgwqBbSURfQUQ3MTc1XzJdID0gewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaWQgPSBBRDcxNzVfSUQsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5udW1faW5wdXRzID0gNSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLm51bV9jaGFubmVscyA9IDQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5udW1fY29uZmlncyA9IDQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5oYXNfZ3AyMyA9IGZhbHNlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu aGFzX3RlbXAgPSB0cnVlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY2xvY2sg PSAxNjAwMDAwMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnNpbmM1X2RhdGFf cmF0ZXMgPSBhZDcxNzVfc2luYzVfZGF0YV9yYXRlcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLm51bV9zaW5jNV9kYXRhX3JhdGVzID0gQVJSQVlfU0laRShhZDcxNzVfc2luYzVf ZGF0YV9yYXRlcyksCj4gK8KgwqDCoMKgwqDCoMKgfSwKPiArwqDCoMKgwqDCoMKgwqBbSURfQUQ3 MTc2XzJdID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaWQgPSBBRDcxNzZf SUQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5udW1faW5wdXRzID0gNSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm51bV9jaGFubmVscyA9IDQsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5udW1fY29uZmlncyA9IDQsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5oYXNfZ3AyMyA9IGZhbHNlLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuaGFzX3RlbXAgPSBmYWxzZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLmNsb2NrID0gMTYwMDAwMDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5zaW5jNV9kYXRhX3JhdGVzID0gYWQ3MTc1X3NpbmM1X2RhdGFfcmF0ZXMsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5udW1fc2luYzVfZGF0YV9yYXRlcyA9IEFSUkFZX1NJ WkUoYWQ3MTc1X3NpbmM1X2RhdGFfcmF0ZXMpLAo+ICvCoMKgwqDCoMKgwqDCoH0sCj4gK307Cj4g Kwo+ICsjaWZkZWYgQ09ORklHX0dQSU9MSUIKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYWQ3MTd4X3N0 YXRlICpncGlvY2hpcF90b19hZDcxN3goc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKPiArewo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFkNzE3eF9zdGF0 ZSwgZ3Bpb2NoaXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkNzE3eF9ncGlvX2dldChzdHJ1 Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCA9IGdwaW9jaGlwX3RvX2FkNzE3eChjaGlwKTsKPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbWFzazsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25l ZCBpbnQgdmFsdWU7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiArCj4gK8KgwqDCoMKgwqDC oMKgc3dpdGNoIChvZmZzZXQpIHsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIDA6Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1hc2sgPSBBRDcxN1hfR1BJT19HUF9EQVRBMDsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSAx Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrID0gQUQ3MTdYX0dQSU9fR1Bf REFUQTE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDC oMKgwqDCoGRlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWRf c2RfcmVhZF9yZWcoJnN0LT5zZCwgQUQ3MTdYX1JFR19HUElPLCAyLCAmdmFsdWUpOwo+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAoYm9vbCkodmFsdWUgJiBtYXNrKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBhZDcxN3hfZ3Bpb191cGRhdGUoc3RydWN0IGFkNzE3eF9z dGF0ZSAqc3QsIHVuc2lnbmVkIGludCBzZXRfbWFzaywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGNscl9tYXNr KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmdwaW9fcmVnIHw9IHNldF9tYXNrOwo+ICvCoMKg wqDCoMKgwqDCoHN0LT5ncGlvX3JlZyAmPSB+Y2xyX21hc2s7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oHJldHVybiBhZF9zZF93cml0ZV9yZWcoJnN0LT5zZCwgQUQ3MTdYX1JFR19HUElPLCAyLCBzdC0+ Z3Bpb19yZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZDcxN3hfZ3Bpb19zZXQoc3RydWN0 IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCA9IGdwaW9jaGlwX3RvX2FkNzE3eChj aGlwKTsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbWFzaywgc2V0X21hc2ssIGNscl9t YXNrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKG9mZnNldCkgewo+ICvCoMKgwqDCoMKg wqDCoGNhc2UgMDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFzayA9IEFENzE3 WF9HUElPX0dQX0RBVEEwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiArwqDCoMKgwqDCoMKgwqBjYXNlIDE6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1hc2sgPSBBRDcxN1hfR1BJT19HUF9EQVRBMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSAyOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBtYXNrID0gQUQ3MTdYX0dQSU9fR1BfREFUQTI7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMzoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFzayA9IEFENzE3WF9HUElPX0dQX0RBVEEzOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqBk ZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAodmFsdWUpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0X21hc2sgPSBtYXNrOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjbHJfbWFzayA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0X21hc2sgPSAwOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjbHJfbWFzayA9IG1hc2s7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqBhZDcxN3hfZ3Bpb191cGRhdGUoc3QsIHNldF9tYXNrLCBjbHJf bWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWQ3MTd4X2dwaW9fZGlyZWN0aW9uX2lucHV0 KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKPiArewo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBhZDcxN3hfc3RhdGUgKnN0ID0gZ3Bpb2NoaXBfdG9fYWQ3MTd4KGNoaXAp Owo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBtYXNrOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBzd2l0Y2ggKG9mZnNldCkgewo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMDoKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFzayA9IEFENzE3WF9HUElPX0lQX0VOMDsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSAxOgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrID0gQUQ3MTdYX0dQSU9fSVBfRU4x Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKg wqBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZB TDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBhZDcxN3hf Z3Bpb191cGRhdGUoc3QsIG1hc2ssIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkNzE3eF9n cGlvX2RpcmVjdGlvbl9vdXRwdXQKPiArwqDCoMKgwqDCoMKgwqAoc3RydWN0IGdwaW9fY2hpcCAq Y2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCA9IGdwaW9jaGlwX3RvX2FkNzE3eChjaGlwKTsKPiArwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgc2V0X21hc2ssIGNscl9tYXNrLCB2YWxfbWFzazsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChvZmZzZXQpIHsKPiArwqDCoMKgwqDCoMKgwqBjYXNl IDA6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNldF9tYXNrID0gQUQ3MTdYX0dQ SU9fT1BfRU4wOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWxfbWFzayA9IEFE NzE3WF9HUElPX0dQX0RBVEEwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIDE6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHNldF9tYXNrID0gQUQ3MTdYX0dQSU9fT1BfRU4xOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2YWxfbWFzayA9IEFENzE3WF9HUElPX0dQX0RBVEExOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAvKiBHUDIgYW5kIEdQ MyBjYW4gbm90IGJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSAqLwo+ICvCoMKgwqDCoMKgwqDCoGNh c2UgMjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3QtPmdwaW9fMjNfbWFzayB8 PSAoMSA8PCAyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0X21hc2sgPSBB RDcxN1hfR1BJT19PUF9FTjJfMzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFs X21hc2sgPSBBRDcxN1hfR1BJT19HUF9EQVRBMjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSAzOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdC0+Z3Bpb18yM19tYXNrIHw9ICgxIDw8IDMpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzZXRfbWFzayA9IEFENzE3WF9HUElPX09QX0VOMl8zOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWxfbWFzayA9IEFENzE3WF9HUElPX0dQX0RB VEEzOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDC oMKgwqBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJ TlZBTDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICh2YWx1ZSkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXRfbWFzayB8PSB2YWxfbWFzazsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xyX21hc2sgPSAwOwo+ICvCoMKgwqDC oMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNscl9tYXNr ID0gdmFsX21hc2s7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gYWQ3MTd4X2dwaW9fdXBkYXRlKHN0LCBzZXRfbWFzaywgY2xyX21hc2spOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBhZDcxN3hfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVu c2lnbmVkIG9mZnNldCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDcxN3hfc3RhdGUg KnN0ID0gZ3Bpb2NoaXBfdG9fYWQ3MTd4KGNoaXApOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVk IGludCBtYXNrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKG9mZnNldCkgewo+ICvCoMKg wqDCoMKgwqDCoGNhc2UgMDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFzayA9 IEFENzE3WF9HUElPX09QX0VOMCB8IEFENzE3WF9HUElPX0lQX0VOMDsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSAxOgo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrID0gQUQ3MTdYX0dQSU9fT1BfRU4xIHwgQUQ3 MTdYX0dQSU9fSVBfRU4xOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiArwqDCoMKgwqDCoMKgwqBjYXNlIDI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0LT5ncGlvXzIzX21hc2sgJj0gfigxIDw8IG9mZnNldCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChzdC0+Z3Bpb18yM19tYXNrICE9IDApCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1hc2sgPSBBRDcxN1hfR1BJT19PUF9FTjJfMzsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ICvCoMKgwqDCoMKgwqDCoH0K PiArCj4gK8KgwqDCoMKgwqDCoMKgYWQ3MTd4X2dwaW9fdXBkYXRlKHN0LCAwLCBtYXNrKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBhZDcxN3hfZ3Bpb19pbml0KHN0cnVjdCBhZDcxN3hfc3RhdGUg KnN0KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmdwaW9jaGlwLmxhYmVsID0gZGV2X25hbWUo JnN0LT5zZC5zcGktPmRldik7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmdwaW9jaGlwLmJhc2UgPSAt MTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoc3QtPmluZm8tPmhhc19ncDIzKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdC0+Z3Bpb2NoaXAubmdwaW8gPSA0Owo+ICvCoMKgwqDCoMKg wqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3QtPmdwaW9jaGlwLm5n cGlvID0gMjsKPiArwqDCoMKgwqDCoMKgwqBzdC0+Z3Bpb2NoaXAucGFyZW50ID0gJnN0LT5zZC5z cGktPmRldjsKPiArwqDCoMKgwqDCoMKgwqBzdC0+Z3Bpb2NoaXAuY2FuX3NsZWVwID0gdHJ1ZTsK PiArwqDCoMKgwqDCoMKgwqBzdC0+Z3Bpb2NoaXAuZGlyZWN0aW9uX2lucHV0ID0gYWQ3MTd4X2dw aW9fZGlyZWN0aW9uX2lucHV0Owo+ICvCoMKgwqDCoMKgwqDCoHN0LT5ncGlvY2hpcC5kaXJlY3Rp b25fb3V0cHV0ID0gYWQ3MTd4X2dwaW9fZGlyZWN0aW9uX291dHB1dDsKPiArwqDCoMKgwqDCoMKg wqBzdC0+Z3Bpb2NoaXAuZ2V0ID0gYWQ3MTd4X2dwaW9fZ2V0Owo+ICvCoMKgwqDCoMKgwqDCoHN0 LT5ncGlvY2hpcC5zZXQgPSBhZDcxN3hfZ3Bpb19zZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmdw aW9jaGlwLmZyZWUgPSBhZDcxN3hfZ3Bpb19mcmVlOwo+ICvCoMKgwqDCoMKgwqDCoHN0LT5ncGlv Y2hpcC5vd25lciA9IFRISVNfTU9EVUxFOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2 bV9ncGlvY2hpcF9hZGRfZGF0YSgmc3QtPnNkLnNwaS0+ZGV2LCAmc3QtPmdwaW9jaGlwLCBOVUxM KTsKPiArfQo+ICsKPiArI2Vsc2UKPiArCj4gK3N0YXRpYyBpbnQgYWQ3MTd4X2dwaW9faW5pdChz dHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCkgeyByZXR1cm4gMCB9Owo+ICtzdGF0aWMgdm9pZCBhZDcx N3hfZ3Bpb19jbGVhbnVwKHN0cnVjdCBhZDcxN3hfc3RhdGUgKnN0KSB7fTsKCklzIGFkNzE3eF9n cGlvX2NsZWFudXAoKSBiZWluZyB1c2VkIGFueXdoZXJlPyBNb3Jlb3ZlciBJIHdvdWxkIG1heWJl IGp1c3QgZ2V0IHJpZCBvZgp0aGUgI2lmZGVmIHdyYXBwZXIgYW5kIGp1c3Qgc2VsZWN0IEdQSU9M SUIuIEhvdyBvZnRlbiB3aWxsIGl0IGJlIGRpc2FibGVkIGFueXdheXM/CgpBbHRlcm5hdGl2ZWx5 LCB5b3UgY2FuIGp1c3Qgd3JhcCBhZDcxN3hfZ3Bpb19pbml0KCkgYW5kIG9ubHkgY2FsbHMgaXQg J2lmCihJU19FTkFCTEVEKENPTkZJR19HUElPTElCKSkuLi4gVGhlbiwgdGhlIGNvbXBpbGVyIGNh biBmaWd1cmUgdGhlIHJlc3QuIE9mIGNvdXJzZSB5b3UKd291bGQgc3RpbGwgaGF2ZSBzb21lIGV4 dHJhIGJ5dGVzIGluIHlvdXIgc3RydWN0LiBBbnl3YXlzLCBJIGp1c3QgbGlrZSB0byBhdm9pZCB0 aGlzCiNpZmRlZmVyeS4KCj4gKwo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYWQ3MTd4 X3N0YXRlICphZF9zaWdtYV9kZWx0YV90b19hZDcxN3goc3RydWN0IGFkX3NpZ21hX2RlbHRhICpz ZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBh ZDcxN3hfc3RhdGUsIHNkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWQ3MTd4X3Jlc2V0X3Vz YWdlX2NudHMoc3RydWN0IGFkNzE3eF9zdGF0ZSAqc3QpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBp bnQgaTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHN0LT5pbmZvLT5udW1f Y29uZmlnczsgaSsrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoc3QtPmNvbmZp Z19jbnRzKVtpXSA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN0LT5jb25maWdfdXNhZ2VfY291 bnRlciA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYWQ3MTd4X2NoYW5uZWxfY29uZmln ICphZDcxN3hfZmluZF9saXZlX2NvbmZpZwo+ICvCoMKgwqDCoMKgwqDCoChzdHJ1Y3QgYWQ3MTd4 X3N0YXRlICpzdCwgc3RydWN0IGFkNzE3eF9jaGFubmVsX2NvbmZpZyAqY2ZnKQo+ICt7Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGFkNzE3eF9jaGFubmVsX2NvbmZpZyAqY2ZnX2F1eDsKPiArwqDC oMKgwqDCoMKgwqBwdHJkaWZmX3QgY21wX3NpemUsIG9mZnNldDsKPiArwqDCoMKgwqDCoMKgwqBp bnQgaTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGFkNzE3 eF9jaGFubmVsX2NvbmZpZywgY2ZnX3Nsb3QpICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNpemVvZihjZmctPmNmZ19zbG90KTsKPiArwqDCoMKgwqDCoMKgwqBjbXBfc2l6ZSA9 IHNpemVvZigqY2ZnKSAtIG9mZnNldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsg aSA8IHN0LT5udW1fY2hhbm5lbHM7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjZmdfYXV4ID0gJnN0LT5jaGFubmVsc1tpXS5jZmc7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoY2ZnX2F1eC0+bGl2ZSAmJiAhbWVtY21wKCgodm9pZCAqKWNm ZykgKyBvZmZzZXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKHZvaWQgKiljZmdf YXV4KSArIG9mZnNldCwgY21wX3NpemUpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGNmZ19hdXg7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkNzE3eF9m cmVlX2NvbmZpZ19zbG90X2xydShzdHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCkKPiArewo+ICvCoMKg wqDCoMKgwqDCoGludCBpLCBscnVfcG9zaXRpb24gPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBm b3IgKGkgPSAxOyBpIDwgc3QtPmluZm8tPm51bV9jb25maWdzOyBpKyspCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdC0+Y29uZmlnX2NudHNbaV0gPCBzdC0+Y29uZmlnX2Nu dHNbbHJ1X3Bvc2l0aW9uXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGxydV9wb3NpdGlvbiA9IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9 IDA7IGkgPCBzdC0+bnVtX2NoYW5uZWxzOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChzdC0+Y2hhbm5lbHNbaV0uY2ZnLmNmZ19zbG90ID09IGxydV9wb3NpdGlvbikK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0LT5jaGFu bmVsc1tpXS5jZmcubGl2ZSA9IGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBhc3NpZ25fYml0 KGxydV9wb3NpdGlvbiwgJnN0LT5jZmdfc2xvdHNfc3RhdHVzLCAwKTsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gbHJ1X3Bvc2l0aW9uOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkNzE3eF9sb2Fk X2NvbmZpZyhzdHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFkNzE3eF9jaGFubmVs X2NvbmZpZyAqY2ZnKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGNvbmZpZzsK PiArwqDCoMKgwqDCoMKgwqBpbnQgZnJlZV9jZmdfc2xvdCwgcmV0Owo+ICsKPiArwqDCoMKgwqDC oMKgwqBmcmVlX2NmZ19zbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmc3QtPmNmZ19zbG90c19z dGF0dXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdC0+aW5mby0+bnVtX2NvbmZp Z3MpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChmcmVlX2NmZ19zbG90ID09IHN0LT5pbmZvLT5udW1f Y29uZmlncykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZnJlZV9jZmdfc2xvdCA9 IGFkNzE3eF9mcmVlX2NvbmZpZ19zbG90X2xydShzdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGFz c2lnbl9iaXQoZnJlZV9jZmdfc2xvdCwgJnN0LT5jZmdfc2xvdHNfc3RhdHVzLCAxKTsKPiArwqDC oMKgwqDCoMKgwqBjZmctPmNmZ19zbG90ID0gZnJlZV9jZmdfc2xvdDsKPiArCj4gK8KgwqDCoMKg wqDCoMKgY29uZmlnID0gQUQ3MTdYX1NFVFVQX1JFRl9TRUxfSU5UX1JFRjsKPiArCj4gK8KgwqDC oMKgwqDCoMKgaWYgKGNmZy0+Ymlwb2xhcikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29uZmlnIHw9IEFENzE3WF9TRVRVUF9CSVBPTEFSOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBp ZiAoY2ZnLT5pbnB1dF9idWYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbmZp ZyB8PSBBRDcxN1hfU0VUVVBfQUlOX0JVRjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWRf c2Rfd3JpdGVfcmVnKCZzdC0+c2QsIEFENzE3WF9SRUdfU0VUVVAoZnJlZV9jZmdfc2xvdCksIDIs IGNvbmZpZyk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY29uZmlnID0gQUQ3 MTdYX0ZJTFRFUl9PRFIwX01BU0sgJiBjZmctPm9kcjsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g YWRfc2Rfd3JpdGVfcmVnKCZzdC0+c2QsIEFENzE3WF9SRUdfRklMVEVSKGZyZWVfY2ZnX3Nsb3Qp LCAyLAo+IGNvbmZpZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWQ3MTd4X2NvbmZpZ19jaGFu bmVsKHN0cnVjdCBhZDcxN3hfc3RhdGUgKnN0LCBpbnQgYWRkcikKPiArewo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhZDcxN3hfY2hhbm5lbF9jb25maWcgKmNmZyA9ICZzdC0+Y2hhbm5lbHNbYWRk cl0uY2ZnOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDcxN3hfY2hhbm5lbF9jb25maWcgKmxp dmVfY2ZnOwo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBpZiAoIWNmZy0+bGl2ZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXZl X2NmZyA9IGFkNzE3eF9maW5kX2xpdmVfY29uZmlnKHN0LCBjZmcpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIWxpdmVfY2ZnKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhZDcxN3hfbG9hZF9jb25maWcoc3QsIGNm Zyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgY2ZnLT5jZmdfc2xvdCA9IGxpdmVfY2ZnLT5jZmdfc2xvdDsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgY2ZnLT5saXZlID0gdHJ1ZTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoc3QtPmNvbmZpZ191c2Fn ZV9jb3VudGVyID09IFU2NF9NQVgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFk NzE3eF9yZXNldF91c2FnZV9jbnRzKHN0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgc3QtPmNvbmZp Z191c2FnZV9jb3VudGVyKys7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmNvbmZpZ19jbnRzW2NmZy0+ Y2ZnX3Nsb3RdID0gc3QtPmNvbmZpZ191c2FnZV9jb3VudGVyOwo+ICsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gMDsKPiArfQoKSSBndWVzcyB5b3UgYmFzZWQgeW91cnNlbGYgaW4gdGhlIGFkNzEy NCBkcml2ZXIgZm9yIHRoZSBhYm92ZT8gTWlnaHQgYmUgd29ydGh5IGxvb2sKYXQgaXQgbW9yZSBj YXJlZnVsbHkgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG5pY2Ugd2F5IHRvIHB1c2ggaW50byB0aGUg bGliIHNvIGNvZGUgY2FuCmJlIHNoYXJlZCAoanVzdCBzb21lIHRob3VnaHRzIGZvciBmdXR1cmUg d29yayBpZiB0aGF0IHNwYXJrcyBhbnkgaW50ZXJlc3QgOikpLgoKPiArCj4gK3N0YXRpYyBpbnQg YWQ3MTd4X3NldF9jaGFubmVsKHN0cnVjdCBhZF9zaWdtYV9kZWx0YSAqc2QsIHVuc2lnbmVkIGlu dCBjaGFubmVsKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNzE3eF9zdGF0ZSAqc3Qg PSBhZF9zaWdtYV9kZWx0YV90b19hZDcxN3goc2QpOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVk IGludCB2YWw7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gYWQ3MTd4X2NvbmZpZ19jaGFubmVsKHN0LCBjaGFubmVsKTsKPiArwqDCoMKgwqDCoMKg wqBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgdmFsID0gQUQ3MTdYX0NIX0VOQUJMRSB8Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBBRDcxN1hfQ0hfU0VUVVBfU0VMKHN0LT5jaGFubmVsc1tjaGFu bmVsXS5jZmcuY2ZnX3Nsb3QpIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0LT5jaGFu bmVsc1tjaGFubmVsXS5haW47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBhZF9zZF93cml0 ZV9yZWcoJnN0LT5zZCwgQUQ3MTdYX1JFR19DSChjaGFubmVsKSwgMiwgdmFsKTsKPiArfQo+ICsK PiArc3RhdGljIGludCBhZDcxN3hfc2V0X21vZGUoc3RydWN0IGFkX3NpZ21hX2RlbHRhICpzZCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51 bSBhZF9zaWdtYV9kZWx0YV9tb2RlIG1vZGUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg YWQ3MTd4X3N0YXRlICpzdCA9IGFkX3NpZ21hX2RlbHRhX3RvX2FkNzE3eChzZCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoHN0LT5hZGNfbW9kZSAmPSB+QUQ3MTdYX0FEQ19NT0RFX01PREVfTUFTSzsK PiArwqDCoMKgwqDCoMKgwqBzdC0+YWRjX21vZGUgfD0gQUQ3MTdYX0FEQ19NT0RFX01PREUobW9k ZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBhZF9zZF93cml0ZV9yZWcoJnN0LT5zZCwg QUQ3MTdYX1JFR19BRENfTU9ERSwgMiwgc3QtPmFkY19tb2RlKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBhZDcxN3hfYXBwZW5kX3N0YXR1cyhzdHJ1Y3QgYWRfc2lnbWFfZGVsdGEgKnNkLCBib29s IGFwcGVuZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDcxN3hfc3RhdGUgKnN0ID0g Y29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYWQ3MTd4X3N0YXRlLCBzZCk7Cj4gK8KgwqDCoMKgwqDC oMKgdW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlID0gc3QtPmludGVyZmFjZV9tb2RlOwo+ICvC oMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGludGVyZmFjZV9tb2Rl IHw9IEFENzE3WF9JTlRFUkZBQ0VfREFUQV9TVEFUX0VOKGFwcGVuZCk7Cj4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gYWRfc2Rfd3JpdGVfcmVnKCZzdC0+c2QsIEFENzE3WF9SRUdfSU5URVJGQUNFX01P REUsIDIsCj4gaW50ZXJmYWNlX21vZGUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKg wqDCoMKgwqBzdC0+aW50ZXJmYWNlX21vZGUgPSBpbnRlcmZhY2VfbW9kZTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWQ3MTd4X2Rpc2FibGVf YWxsKHN0cnVjdCBhZF9zaWdtYV9kZWx0YSAqc2QpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgYWQ3MTd4X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkNzE3eF9zdGF0 ZSwgc2QpOwo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBzdC0+bnVtX2NoYW5uZWxzOyBp KyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWRfc2Rfd3JpdGVf cmVnKHNkLCBBRDcxN1hfUkVHX0NIKGkpLCAyLCAwKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYWRfc2lnbWFfZGVs dGFfaW5mbyBhZDcxN3hfc2lnbWFfZGVsdGFfaW5mbyA9IHsKPiArwqDCoMKgwqDCoMKgwqAuc2V0 X2NoYW5uZWwgPSBhZDcxN3hfc2V0X2NoYW5uZWwsCj4gK8KgwqDCoMKgwqDCoMKgLmFwcGVuZF9z dGF0dXMgPSBhZDcxN3hfYXBwZW5kX3N0YXR1cywKPiArwqDCoMKgwqDCoMKgwqAuZGlzYWJsZV9h bGwgPSBhZDcxN3hfZGlzYWJsZV9hbGwsCj4gK8KgwqDCoMKgwqDCoMKgLnNldF9tb2RlID0gYWQ3 MTd4X3NldF9tb2RlLAo+ICvCoMKgwqDCoMKgwqDCoC5oYXNfcmVnaXN0ZXJzID0gdHJ1ZSwKPiAr wqDCoMKgwqDCoMKgwqAuYWRkcl9zaGlmdCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgLnJlYWRfbWFz ayA9IEJJVCg2KSwKPiArwqDCoMKgwqDCoMKgwqAuc3RhdHVzX2NoX21hc2sgPSBHRU5NQVNLKDMs IDApLAo+ICvCoMKgwqDCoMKgwqDCoC5kYXRhX3JlZyA9IEFENzE3WF9SRUdfREFUQSwKPiArwqDC oMKgwqDCoMKgwqAuaXJxX2ZsYWdzID0gSVJRRl9UUklHR0VSX0ZBTExJTkcKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgYWQ3MTd4X3NldHVwKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gK3sK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlv X2Rldik7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGlkOwo+ICvCoMKgwqDCoMKgwqDC oHU4ICpidWY7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKg LyogcmVzZXQgdGhlIHNlcmlhbCBpbnRlcmZhY2UgKi8KPiArwqDCoMKgwqDCoMKgwqBidWYgPSBr Y2FsbG9jKDgsIHNpemVvZigqYnVmKSwgR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFidWYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBtZW1zZXQoYnVmLCAweGZmLCA4KTsKPiArwqDCoMKgwqDCoMKg wqByZXQgPSBzcGlfd3JpdGUoc3QtPnNkLnNwaSwgYnVmLCA4KTsKPiArwqDCoMKgwqDCoMKgwqBr ZnJlZShidWYpOwoKSG1tLCB3aHkgYWxsb2NhdGluZyB0aGUgYnVmZmVyPyBJIGd1ZXNzIG9uZSBj b3VsZCBhcmd1ZSB0aGF0IHdlJ2xsIGdldCBETUEgc2FmZQphbGlnbm1lbnQgYnV0IHRoZW4gbWF5 YmUgdXNlIHNvbWUgZGVmaW5lIGluc3RlYWQgb2YgdGhlIG1hZ2ljIDguCgo+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBkYXRhc2hlZXQgcmVjb21tZW5kcyBhIGRlbGF5 IG9mIGF0IGxlYXN0IDUwMHVzIGFmdGVyIHJlc2V0ICovCj4gK8KgwqDCoMKgwqDCoMKgdXNsZWVw X3JhbmdlKDUwMCwgMTAwMCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFkX3NkX3JlYWRf cmVnKCZzdC0+c2QsIEFENzE3WF9SRUdfSUQsIDIsICZpZCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArCj4g K8KgwqDCoMKgwqDCoMKgaWQgJj0gQUQ3MTdYX0lEX01BU0s7Cj4gK8KgwqDCoMKgwqDCoMKgaWYg KGlkICE9IHN0LT5pbmZvLT5pZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X3dhcm4oJnN0LT5zZC5zcGktPmRldiwgIlVuZXhwZWN0ZWQgZGV2aWNlIGlkOiAleCwgZXhwZWN0 ZWQ6Cj4gJXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZCwgc3QtPmluZm8t PmlkKTsKPiArCgpTaG91bGRuJ3Qgd2UgZXJyb3Igb3V0PwoKCj4gK8KgwqDCoMKgwqDCoMKgbXV0 ZXhfaW5pdCgmc3QtPmNmZ3NfbG9jayk7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmFkY19tb2RlIHw9 IEFENzE3WF9BRENfTU9ERV9SRUZfRU4gfCBBRDcxN1hfQURDX01PREVfU0lOR19DWUM7Cj4gK8Kg wqDCoMKgwqDCoMKgc3QtPmludGVyZmFjZV9tb2RlID0gMHgwOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBzdC0+Y29uZmlnX3VzYWdlX2NvdW50ZXIgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoHN0LT5jb25m aWdfY250cyA9IGRldm1fa3phbGxvYygmaW5kaW9fZGV2LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0LT5pbmZvLT5udW1fY29uZmlncyAqIHNpemVvZih1NjQpLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBHRlBfS0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXN0LT5jb25maWdfY250cykK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoC8qIEFsbCBjaGFubmVscyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGFmdGVy IGEgcmVzZXQgKi8KPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZDcxN3hfZGlzYWJsZV9hbGwoJnN0 LT5zZCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwoKSnVzdCByZXR1cm4gYWQ3MTd4X2Rpc2FibGVf YWxsKCk7Cgo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGFkNzE3eF9yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLCBpbnQgKnZhbCwgaW50ICp2YWwy LCBsb25nIGluZm8pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ3MTd4X3N0YXRlICpz dCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHJl ZzsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBzd2l0Y2gg KGluZm8pIHsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIElJT19DSEFOX0lORk9fUkFXOgo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhZF9zaWdtYV9kZWx0YV9zaW5nbGVfY29u dmVyc2lvbihpbmRpb19kZXYsIGNoYW4sIHZhbCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qIGRpc2FibGUgY2hhbm5lbCBhZnRlciBzaW5nbGUgY29udmVyc2lvbiAqLwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhZF9zZF93cml0ZV9yZWcoJnN0LT5zZCwg QUQ3MTdYX1JFR19DSChjaGFuLT5hZGRyZXNzKSwgMiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDApOwoK SG1tLCBzaW5jZSB5b3UncmUgaGVyZS4uLiBJIHRoaW5rIHdlIHNob3VsZCBicmluZyB0aGlzIGlu dG8gdGhlIHNpZ21hIGRlbHRhIGxpYi4gU28sCndoZW4gc2VxdWVuY2VyIGlzIHN1cHBvcnRlZCwg dGhlIGRldmljZSBzYW1wbGVzIGFsbCBlbmFibGVkIGNoYW5uZWxzIG9uZSBieSBvbmUgc28gSQpn ZXQgd2h5IHlvdSdyZSBkb2luZyB0aGlzIGZvciBhIHNpbmdsZSBjb252ZXJzaW9uLiBIb3dldmVy LCBub3RlIHRoYXQKYWRfc2lnbWFfZGVsdGFfc2luZ2xlX2NvbnZlcnNpb24oKSBpcyBhbHJlYWR5 IHRha2luZyBjYXJlIG9mIGNhbGxpbmcgYSBjYWxsYmFjayBzbwp0aGUgY2hhbm5lbCBjYW4gYmUg cHJlcGFyZWQgYW5kIGVuYWJsZWQgZm9yIHRoZSBjb252ZXJzaW9uLiBTbywgaXQncyBvbmx5IG5h dHVyYWwgdG8KZGlzYWJsZSB0aGF0IGNoYW5uZWwgaW5zaWRlIGFkX3NpZ21hX2RlbHRhX3Npbmds ZV9jb252ZXJzaW9uKCkuIFdlIGFscmVhZHkgaGF2ZSBhCi5kaXNhYmxlX2FsbCgpIG9wdGlvbiBz byBhZGRpbmcgb25lIG9ubHkgd2l0aCAuZGlzYWJsZSgpIHdvdWxkIG1ha2Ugc2Vuc2UuIE9yIGFu CmV4dHJhIHBhcmFtZXRlciBpbiAuc2V0X2NoYW5uZWwoKSBjYWxsYmFjayBidXQgdGhhdCB3b3Vs ZCBiZSBtb3JlIHdvcmsgYW5kIEltIG5vdApzdXJlIGlmIGl0IGJyaW5ncyBhbnkgYmVuZWZpdC4K CklmIHlvdSB0YWtlIGNhcmUgb2YgdGhlIGFib3ZlLCBhbm90aGVyIHRoaW5nIHRvIHJlbWVtYmVy IGlzIHRvIHVwZGF0ZSB0aGUgYWQ3MTI0LmMKZHJpdmVyIHdoaWNoIGlzIGRvaW5nIHRoZSBzYW1l IHRoaW5nLgoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIElJT19WQUxfSU5U Owo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgSUlPX0NIQU5fSU5GT19TQ0FMRToKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoYW4tPnR5cGUgPT0gSUlPX1RFTVApIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2YWwgPSAyNTAwMDAw MDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqdmFs MiA9IDgwMDI3MzIwMzsgLyogKDIqKjI0ICogNDc3KSAvIDEwICovCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gSUlPX1ZBTF9GUkFDVElPTkFM Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnZhbCA9IDI1MDA7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hhbi0+ZGlmZmVy ZW50aWFsKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCp2YWwyID0gMjM7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnZhbDIgPSAyNDsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBJSU9fVkFMX0ZSQUNU SU9OQUxfTE9HMjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDC oMKgwqDCoGNhc2UgSUlPX0NIQU5fSU5GT19PRkZTRVQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChjaGFuLT50eXBlID09IElJT19URU1QKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqdmFsID0gLTg3NDM3OTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjaGFuLT5kaWZmZXJlbnRpYWwpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg KnZhbCA9IC0oMSA8PCAoY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzIC0gMSkpOwoKbml0OiBJIGRv bid0IGV4cGVjdCB0aGUgZHJpdmVyIHRvIHJlYWxseSBiZSB1cGRhdGVkIHdpdGggbW9yZSBkZXZp Y2VzIChpdCdzIGxpa2UgdGhpcwpmb3IgYSBsb25nIHRpbWUpIGJ1dCB0aGUgYWJvdmUgaXMgbm90 IHZlcnkgZXh0ZW5zaWJsZS4uLiBJbWFnaW5lIHdlIGFkZCBhIGRldmljZSB3aXRoCjMyYml0IGNo YW5uZWxzPyBXZSB3b3VsZCBlbnRlciBzaGFkeSB3YXRlcnMgSWYgSSdtIG5vdCBtaXNzaW5nIGFu eXRoaW5nLgoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAqdmFsID0gMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gSUlPX1ZBTF9JTlQ7Cj4g K8KgwqDCoMKgwqDCoMKgY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnID0gc3QtPmNoYW5uZWxzW2NoYW4tPmFkZHJlc3NdLmNm Zy5vZHI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqdmFsID0gc3QtPmlu Zm8tPnNpbmM1X2RhdGFfcmF0ZXNbcmVnXSAvIE1JTExJOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAqdmFsMiA9IChzdC0+aW5mby0+c2luYzVfZGF0YV9yYXRlc1tyZWddICUgTUlM TEkpICogTUlMTEk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g SUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWQ3MTd4X3dyaXRlX3Jh dyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpaW9f Y2hhbl9zcGVjIGNvbnN0ICpjaGFuLCBpbnQgdmFsLCBpbnQgdmFsMiwgbG9uZyBpbmZvKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNzE3eF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRp b19kZXYpOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDcxN3hfY2hhbm5lbF9jb25maWcgKmNm ZzsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgZnJlcSwgaSwgcmVnOwo+ICvCoMKgwqDC oMKgwqDCoGludCByZXQgPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBtdXRleF9sb2NrKCZzdC0+ Y2Znc19sb2NrKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoaWlvX2J1ZmZlcl9lbmFibGVkKGluZGlv X2RldikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZz dC0+Y2Znc19sb2NrKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F QlVTWTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwoKaWlvX2RldmljZV9jbGFpbV9kaXJlY3RfbW9k ZSgpCgo+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAoaW5mbykgewo+ICvCoMKgwqDCoMKgwqDCoGNh c2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGZyZXEgPSB2YWwgKiBNSUxMSSArIHZhbDIgLyBNSUxMSTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBzdC0+aW5mby0+bnVtX3NpbmM1X2Rh dGFfcmF0ZXMgLSAxOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChmcmVxID49IHN0LT5pbmZvLT5zaW5jNV9kYXRhX3JhdGVzW2ldKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjZmcgPSAmc3QtPmNoYW5uZWxzW2NoYW4tPmFk ZHJlc3NdLmNmZzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2ZnLT5vZHIgPSBp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNmZy0+bGl2ZSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWRf c2RfcmVhZF9yZWcoJnN0LT5zZCwgQUQ3MTdYX1JFR19GSUxURVIoY2ZnLQo+ID5jZmdfc2xvdCks IDIsICZyZWcpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJlZyAmPSB+QUQ3MTdYX0ZJTFRFUl9PRFIwX01BU0s7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWcgfD0gaTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFkX3Nk X3dyaXRlX3JlZygmc3QtPnNkLCBBRDcxN1hfUkVHX0ZJTFRFUihjZmctCj4gPmNmZ19zbG90KSwg MiwgcmVnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRUlOVkFMOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoG11dGV4X3VubG9jaygmc3QtPmNmZ3NfbG9jayk7Cj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZDcxN3hfd3JpdGVfcmF3X2dldF9m bXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlpb19j aGFuX3NwZWMgY29uc3QgKmNoYW4sIGxvbmcgbWFzaykKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkNzE3 eF91cGRhdGVfc2Nhbl9tb2RlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjb25zdCB1bnNpZ25lZCBsb25nICpzY2FuX21hc2spCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgYWQ3MTd4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gK8KgwqDCoMKg wqDCoMKgYm9vbCBiaXRfc2V0Owo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gK8KgwqDCoMKg wqDCoMKgaW50IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJnN0LT5jZmdzX2xv Y2spOwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBzdC0+bnVtX2NoYW5uZWxzOyBp KyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYml0X3NldCA9IHRlc3RfYml0 KGksIHNjYW5fbWFzayk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChiaXRf c2V0KQoKd2h5IG5vdCB0ZXN0X2JpdCgpIGRpcmVjdGx5PwoKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFkNzE3eF9zZXRfY2hhbm5lbCgmc3Qt PnNkLCBpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWRfc2Rfd3JpdGVf cmVnKCZzdC0+c2QsIEFENzE3WF9SRUdfQ0goaSksIDIsIDApOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmc3QtPmNmZ3NfbG9jayk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJnN0LT5jZmdzX2xvY2spOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZDcxN3hfZGVi dWcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgdW5zaWduZWQgaW50IHJlZywKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCB3cml0 ZXZhbCwgdW5zaWduZWQgaW50ICpyZWFkdmFsKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGFkNzE3eF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ICvCoMKgwqDCoMKgwqDC oHU4IHJlZ19zaXplID0gMjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlZyA9PSAwKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdfc2l6ZSA9IDE7Cj4gK8KgwqDCoMKgwqDC oMKgZWxzZSBpZiAocmVnID09IEFENzE3WF9SRUdfQ1JDIHx8IHJlZyA9PSBBRDcxN1hfUkVHX0RB VEEgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZyA+PSBBRDcxN1hfUkVH X09GRlNFVCgwKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnX3NpemUgPSAz Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmVhZHZhbCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGFkX3NkX3JlYWRfcmVnKCZzdC0+c2QsIHJlZywgcmVnX3NpemUs IHJlYWR2YWwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gYWRfc2Rfd3JpdGVfcmVnKCZz dC0+c2QsIHJlZywgcmVnX3NpemUsIHdyaXRldmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBpaW9faW5mbyBhZDcxN3hfaW5mbyA9IHsKPiArwqDCoMKgwqDCoMKgwqAucmVhZF9y YXcgPSAmYWQ3MTd4X3JlYWRfcmF3LAo+ICvCoMKgwqDCoMKgwqDCoC53cml0ZV9yYXcgPSAmYWQ3 MTd4X3dyaXRlX3JhdywKPiArwqDCoMKgwqDCoMKgwqAud3JpdGVfcmF3X2dldF9mbXQgPSAmYWQ3 MTd4X3dyaXRlX3Jhd19nZXRfZm10LAo+ICvCoMKgwqDCoMKgwqDCoC5kZWJ1Z2ZzX3JlZ19hY2Nl c3MgPSAmYWQ3MTd4X2RlYnVnLAo+ICvCoMKgwqDCoMKgwqDCoC52YWxpZGF0ZV90cmlnZ2VyID0g YWRfc2RfdmFsaWRhdGVfdHJpZ2dlciwKPiArwqDCoMKgwqDCoMKgwqAudXBkYXRlX3NjYW5fbW9k ZSA9IGFkNzE3eF91cGRhdGVfc2Nhbl9tb2RlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBpaW9fY2hhbl9zcGVjIGFkNzE3eF9jaGFubmVsX3RlbXBsYXRlID0gewo+ICvCoMKgwqDC oMKgwqDCoC50eXBlID0gSUlPX1ZPTFRBR0UsCj4gK8KgwqDCoMKgwqDCoMKgLmluZGV4ZWQgPSAx LAo+ICvCoMKgwqDCoMKgwqDCoC5jaGFubmVsID0gMCwKPiArwqDCoMKgwqDCoMKgwqAuYWRkcmVz cyA9IEFENzE3WF9DSF9BRERSRVNTKDAsIDApLAo+ICvCoMKgwqDCoMKgwqDCoC5pbmZvX21hc2tf c2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgQklUKElJT19DSEFOX0lORk9fU0NBTEUpLAo+ICvCoMKgwqDCoMKgwqDCoC5p bmZvX21hc2tfc2hhcmVkX2J5X2FsbCA9IEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSksCj4g K8KgwqDCoMKgwqDCoMKgLnNjYW5faW5kZXggPSAwLAo+ICvCoMKgwqDCoMKgwqDCoC5zY2FuX3R5 cGUgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zaWduID0gJ3UnLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVhbGJpdHMgPSAyNCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0b3JhZ2ViaXRzID0gMzIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5zaGlmdCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5lbmRpYW5uZXNzID0gSUlPX0JFLAo+ICvCoMKgwqDCoMKgwqDCoH0sCj4gK307Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgYWQ3MTd4X3RlbXBfaWlvX2NoYW5u ZWxfdGVtcGxhdGUgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgLnR5cGUgPSBJSU9fVEVNUCwKPiArwqDC oMKgwqDCoMKgwqAuaW5kZXhlZCA9IDEsCj4gK8KgwqDCoMKgwqDCoMKgLmNoYW5uZWwgPSAxNywK PiArwqDCoMKgwqDCoMKgwqAuY2hhbm5lbDIgPSAxOCwKPiArwqDCoMKgwqDCoMKgwqAuYWRkcmVz cyA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hB Tl9JTkZPX1JBVykgfAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoSUlPX0NI QU5fSU5GT19TQ0FMRSkgfCBCSVQoSUlPX0NIQU5fSU5GT19PRkZTRVQpLAo+ICvCoMKgwqDCoMKg wqDCoC5pbmZvX21hc2tfc2hhcmVkX2J5X2FsbCA9IEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJF USksCj4gK8KgwqDCoMKgwqDCoMKgLnNjYW5faW5kZXggPSAwLAo+ICvCoMKgwqDCoMKgwqDCoC5z Y2FuX3R5cGUgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zaWduID0gJ3Un LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVhbGJpdHMgPSAyNCwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0b3JhZ2ViaXRzID0gMzIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zaGlmdCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5lbmRpYW5uZXNzID0gSUlPX0JFLAo+ICvCoMKgwqDCoMKgwqDCoH0sCj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IGFkNzE3eF9vZl9wYXJzZV9jaGFubmVsX2NvbmZpZyhzdHJ1Y3Qg aWlvX2RldiAqaW5kaW9fZGV2KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNzE3eF9z dGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBh ZDcxN3hfY2hhbm5lbCAqY2hhbm5lbHNfc3RfcHJpdjsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg Zndub2RlX2hhbmRsZSAqY2hpbGQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2 ID0gaW5kaW9fZGV2LT5kZXYucGFyZW50Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpaW9fY2hh bl9zcGVjICpjaGFuOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBudW1fY2hhbm5lbHMg PSAwOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBhaW5bMl0sIGNoYW5faW5kZXggPSAw Owo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgdXNlX3RlbXAgPSBmYWxzZTsKPiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBudW1fY2hhbm5lbHMgPSBkZXZpY2VfZ2V0 X2NoaWxkX25vZGVfY291bnQoZGV2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRldmljZV9w cm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAiYWRpLHRlbXAtY2hhbm5lbCIpKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc3QtPmluZm8tPmhhc190ZW1wKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGluZGlvX2Rl di0+ZGV2LnBhcmVudCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiQ3VycmVudCBjaGlwIGRvZXMgbm90IHN1cHBvcnQgdGVt cGVyYXR1cmUKPiBjaGFubmVsIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbnVtX2NoYW5uZWxz Kys7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVzZV90ZW1wID0gdHJ1ZTsKPiAr wqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN0LT5udW1fY2hhbm5lbHMgPSBu dW1fY2hhbm5lbHM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChudW1fY2hhbm5lbHMgPT0gMCkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGNoYW4gPSBkZXZtX2tjYWxsb2MoaW5kaW9fZGV2LT5kZXYucGFyZW50LCBzaXplb2Yo KmNoYW4pLCBudW1fY2hhbm5lbHMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFj aGFuKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgY2hhbm5lbHNfc3RfcHJpdiA9IGRldm1fa2NhbGxvYyhpbmRpb19k ZXYtPmRldi5wYXJlbnQsIG51bV9jaGFubmVscywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6 ZW9mKCpjaGFubmVsc19zdF9wcml2KSwgR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFjaGFubmVsc19zdF9wcml2KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVOT01FTTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaW5kaW9fZGV2LT5jaGFubmVscyA9IGNo YW47Cj4gK8KgwqDCoMKgwqDCoMKgaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBudW1fY2hhbm5l bHM7Cj4gK8KgwqDCoMKgwqDCoMKgc3QtPmNoYW5uZWxzID0gY2hhbm5lbHNfc3RfcHJpdjsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHVzZV90ZW1wKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNoYW5bY2hhbl9pbmRleF0gPSBhZDcxN3hfdGVtcF9paW9fY2hhbm5lbF90ZW1w bGF0ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbm5lbHNfc3RfcHJpdltj aGFuX2luZGV4XS5haW4gPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgQUQ3MTdYX0NIX0FERFJFU1MoY2hhbltjaGFuX2luZGV4XS5jaGFubmVsLAo+IGNo YW5bY2hhbl9pbmRleF0uY2hhbm5lbDIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjaGFubmVsc19zdF9wcml2W2NoYW5faW5kZXhdLmNmZy5iaXBvbGFyID0gZmFsc2U7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5uZWxzX3N0X3ByaXZbY2hhbl9pbmRleF0u Y2ZnLmlucHV0X2J1ZiA9IHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNo YW5faW5kZXgrKzsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRldmlj ZV9mb3JfZWFjaF9jaGlsZF9ub2RlKGRldiwgY2hpbGQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGNoaWxkLCAi ZGlmZi1jaGFubmVscyIsIGFpbiwKPiAyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZndub2RlX2hhbmRsZV9wdXQoY2hpbGQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFp blswXSA+PSBzdC0+aW5mby0+bnVtX2lucHV0cyB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYWluWzFdID49IHN0LT5pbmZvLT5udW1faW5wdXRzKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGluZGlvX2Rl di0+ZGV2LnBhcmVudCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiSW5wdXQgcGluIG51bWJlciBvdXQgb2YgcmFuZ2UgZm9y IHBhaXIgKCVkICVkKS4iLAo+IGFpblswXSwgYWluWzFdKTsKCmRldl9lcnJfcHJvYmUoKSBpbiBh bGwgdGhlIGVycm9yIHBhdGhzIGR1cmluZyBwcm9iZS4gTW9yZW92ZXIsIGp1c3QgdXNlICdkZXYn IGFzIHlvdQphcmUgZGVjbGFyaW5nIGl0IGFib3ZlLgoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZ3bm9kZV9oYW5kbGVfcHV0KGNoaWxkKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjaGFuW2NoYW5faW5kZXhdID0gYWQ3MTd4X2NoYW5uZWxfdGVtcGxh dGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5bY2hhbl9pbmRleF0uYWRk cmVzcyA9IGNoYW5faW5kZXg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5b Y2hhbl9pbmRleF0uc2Nhbl9pbmRleCA9IGNoYW5faW5kZXg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNoYW5bY2hhbl9pbmRleF0uY2hhbm5lbCA9IGFpblswXTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbltjaGFuX2luZGV4XS5jaGFubmVsMiA9IGFpblsx XTsKCkkgdGhpbmsgJ2NoYW5uZWwyJyBvbmx5IG1ha2VzIHNlbnNlIGZvciBkaWZmZXJlbnRpYWwg Y2hhbm5lbHMuIEkgYXNzdW1lIHRoZSBjb3JlIHdpbGwKZGlzY2FyZCBpdCBpZiAnZGlmZmVyZW50 aWFsJyBpcyBub3Qgc2V0IGJ1dCBmb3IgcmVhZGFiaWxpdHkgSSB3b3VsZCBzZXQgaXQgb25seSBi ZWxvdwppbnNpZGUgdGhlIGlmIGJsb2NrLiBUaGUgJ2RpZmYtY2hhbm5lbHMnIGlzIGFsc28gbm90 IHBlcmZlY3QgYXMgd2UgbWlnaHQgYWN0dWFsbHkKaGF2ZSBhIHNpbmdsZSBlbmRlZCBjaGFubmVs IGRlZmluZWQgaW4gaXQuIEJ1dCBtYXliZSB0aGF0J3MgYWN0dWFsbHkgZXhwZWN0ZWQuLi4KCj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFubmVsc19zdF9wcml2W2NoYW5f aW5kZXhdLmFpbiA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBBRDcxN1hfQ0hfQUREUkVTUyhhaW5bMF0sIGFpblsxXSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNoYW5uZWxzX3N0X3ByaXZbY2hhbl9pbmRleF0uY2hhbl9yZWcgPSBj aGFuX2luZGV4Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFubmVsc19zdF9w cml2W2NoYW5faW5kZXhdLmNmZy5pbnB1dF9idWYgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjaGFubmVsc19zdF9wcml2W2NoYW5faW5kZXhdLmNmZy5vZHIgPSAwOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbltjaGFuX2luZGV4XS5kaWZm ZXJlbnRpYWwgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGNoaWxkLAo+ICJhZGksYmlwb2xh ciIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hhbltjaGFuX2luZGV4 XS5kaWZmZXJlbnRpYWwpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNoYW5bY2hhbl9pbmRleF0uaW5mb19tYXNrX3NlcGFyYXRlIHw9Cj4gQklUKElJ T19DSEFOX0lORk9fT0ZGU0VUKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNoYW5uZWxzX3N0X3ByaXZbY2hhbl9pbmRleF0uY2ZnLmJpcG9sYXIgPSB0 cnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFuX2luZGV4Kys7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsK PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZDcxN3hf cHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBhZDcxN3hfc3RhdGUgKnN0Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpaW9fZGV2ICppbmRp b19kZXY7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFzcGktPmlycSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZz cGktPmRldiwgIk5vIElSUSBzcGVjaWZpZWRcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVOT0RFVjsKPiArwqDCoMKgwqDCoMKgwqB9CgpEcm9wIHRoZSBhYm92 ZS4uLgoKPiArCj4gK8KgwqDCoMKgwqDCoMKgaW5kaW9fZGV2ID0gZGV2bV9paW9fZGV2aWNlX2Fs bG9jKCZzcGktPmRldiwgc2l6ZW9mKCpzdCkpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghaW5kaW9f ZGV2KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ICvCoMKgwqDCoMKg wqDCoHN0LT5pbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZzcGktPmRldik7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKCFzdC0+aW5mbykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FTk9ERVY7Cj4gKwoKc3BpX2dldF9kZXZpY2VfbWF0Y2hfZGF0YSgpIChub3QgcmVh bGx5IHN1cmUgaWYgdGhpcyBpcyBzdGlsbCBhcHBsaWNhYmxlIHNpbmNlIHNvbWUKd29yayByZWxh dGVkIHRvIHRoaXMgaXMgYmVpbmcgZG9uZSBmb3IgaTJjIC0gYW5kIGV2ZW50dWFsbHkgaW4gc3Bp IEkgZ3Vlc3MpLgoKPiArwqDCoMKgwqDCoMKgwqBpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3Bp LT5kZXY7Cgpkcm9wIHRoaXMuLi4KCj4gK8KgwqDCoMKgwqDCoMKgaW5kaW9fZGV2LT5uYW1lID0g c3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKPiArwqDCoMKgwqDCoMKgwqBpbmRpb19kZXYt Pm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Cj4gK8KgwqDCoMKgwqDCoMKgaW5kaW9fZGV2LT5p bmZvID0gJmFkNzE3eF9pbmZvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBhZDcxN3hfc2lnbWFfZGVs dGFfaW5mby5udW1fc2xvdHMgPSBzdC0+aW5mby0+bnVtX2NvbmZpZ3M7Cj4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gYWRfc2RfaW5pdCgmc3QtPnNkLCBpbmRpb19kZXYsIHNwaSwgJmFkNzE3eF9zaWdt YV9kZWx0YV9pbmZvKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgc3Bp X3NldF9kcnZkYXRhKHNwaSwgaW5kaW9fZGV2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g YWQ3MTd4X29mX3BhcnNlX2NoYW5uZWxfY29uZmlnKGluZGlvX2Rldik7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsK PiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2bV9hZF9zZF9zZXR1cF9idWZmZXJfYW5kX3Ry aWdnZXIoJnNwaS0+ZGV2LCBpbmRpb19kZXYpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAw KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXQgPSBhZDcxN3hfc2V0dXAoaW5kaW9fZGV2KTsKPiArwqDCoMKgwqDCoMKg wqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZtX2lpb19kZXZpY2VfcmVnaXN0ZXIoJnNwaS0+ ZGV2LCBpbmRpb19kZXYpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVy biBhZDcxN3hfZ3Bpb19pbml0KHN0KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgYWQ3MTd4X29mX21hdGNoW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgeyAuY29t cGF0aWJsZSA9ICJhZGksYWQ3MTcyLTIiLAo+ICvCoMKgwqDCoMKgwqDCoMKgIC5kYXRhID0gJmFk NzE3eF9kZXZpY2VfaW5mb1tJRF9BRDcxNzJfMl0gfSwKPiArwqDCoMKgwqDCoMKgwqB7IC5jb21w YXRpYmxlID0gImFkaSxhZDcxNzMtOCIsCj4gK8KgwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAmYWQ3 MTd4X2RldmljZV9pbmZvW0lEX0FENzE3M184XSB9LAo+ICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBh dGlibGUgPSAiYWRpLGFkNzE3NS0yIiwKPiArwqDCoMKgwqDCoMKgwqDCoCAuZGF0YSA9ICZhZDcx N3hfZGV2aWNlX2luZm9bSURfQUQ3MTc1XzJdIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0 aWJsZSA9ICJhZGksYWQ3MTc2LTIiLAo+ICvCoMKgwqDCoMKgwqDCoMKgIC5kYXRhID0gJmFkNzE3 eF9kZXZpY2VfaW5mb1tJRF9BRDcxNzZfMl0gfSwKPiArwqDCoMKgwqDCoMKgwqB7fQo+ICt9Cj4g K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFkNzE3eF9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgYWQ3MTd4X2lkX3RhYmxlW10gPSB7Cj4gK8KgwqDC oMKgwqDCoMKgeyAiYWQ3MTcyLTIiLCB9LAo+ICvCoMKgwqDCoMKgwqDCoHsgImFkNzE3My04Iiwg fSwKPiArwqDCoMKgwqDCoMKgwqB7ICJhZDcxNzUtMiIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAi YWQ3MTc2LTIiLCB9LAo+ICvCoMKgwqDCoMKgwqDCoHt9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUoc3BpLCBhZDcxN3hfaWRfdGFibGUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBzcGlfZHJp dmVyIGFkNzE3eF9kcml2ZXIgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgLmRyaXZlciA9IHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5hbWXCoMKgwqA9ICJhZDcxN3giLAoKSSB3b3Vs ZCBrZWVwIHRoZSBuYW1lIGFzIHdlIGhhdmUgb3V0IG9mIHRyZWUgd2hpY2ggaXMgYWQ3MTczLmMu IEknbSBub3Qgc3VyZSBpZgp0aGVyZSdzIGFueSBwb2xpY3kgaW4gaGVyZSBidXQgSSB0aGluayB0 eXBpY2FsbHkgeW91IGp1c3QgbmFtZSB5b3VyIGRyaXZlciBmcm9tIHRoZQpmaXJzdCBzdXBwb3J0 ZWQgZGV2aWNlIGFuZCB0aGVuIGV4dGVuZCBpdCBmcm9tIHRoZXJlLiBTaW5jZSBoZXJlIHlvdSBh cmUganVzdCBhZGRpbmcKbW9yZSB0aGFuIG9uZSBkZXZpY2UgYXQgb25jZSwgaXQgd291bGQgYmUg bmljZSBpZiB5b3UgY291bGQga2VlcCB0aGUgbmFtZSBvZiB0aGUKZHJpdmVyIExhcnMgb3JpZ2lu YWxseSBkZXZlbG9wZWQuLi4KCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vd25l csKgwqA9IFRISVNfTU9EVUxFLAoKTm8gbmVlZCBmb3IgdGhlIGFib3ZlCgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYWQ3MTd4 X29mX21hdGNoKSwKCkRyb3Agb2ZfbWF0Y2hfcHRyKCkKCi0gTnVubyBTw6EKCg==