Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp8370782rwl; Tue, 10 Jan 2023 12:34:55 -0800 (PST) X-Google-Smtp-Source: AMrXdXssD9gcinaFCRzslQ5w3YT6T3NfdpWD6HN8p20FYfBdQlMYxb+MDeVib7wUJNz0VViK5PZs X-Received: by 2002:a17:906:dff5:b0:7ef:b60e:cb02 with SMTP id lc21-20020a170906dff500b007efb60ecb02mr60297713ejc.48.1673382895141; Tue, 10 Jan 2023 12:34:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673382895; cv=none; d=google.com; s=arc-20160816; b=jRLSsdAMZykz/9CV6auNV8/zyHwHezCdZCDrWxALabpoMqYZKwFB5p9XcuoUfRneeD lgF3F+Mk12LKuzYQn9qzTy1pSgQ089D6668FNTAqfo0XeZcf8DUuj69M2LZE/JnVQkpd 3Rqetr2G39/3dpQW0lAV8WC1bM4IvJb8Pj7w1irtHG7qM+JL47iPS55kH6EPD2wFg1Z4 aooPLQ3DbxSSk4MMAtV011bNqv0a7gPwbbCerzOwakO4nDW+xdXjEUPOMNmCl/iuuD9f ltxKnwZzruKT7rTXqJe1TzUZibxcINuaKPswRrH1ANeSl0Aou4SUZApKfnJpgNM3G4r+ ChEw== 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; bh=cLh0/hcsOhyE/DTZrDrzQJ2+iQP9+lhj6kJ+ny2vHEo=; b=NUnb8SC+GWJHgj/OnyvINujhQlrr9ofF14pTmEuXdiOoCPQkn79ZoeJ3ABT5/VrNvi 9GSk9OWW2YXmUNC2Oyu0VsJBXRm+7rn45CXKRQpnYAQM1ALo/pYMgwQuVAVZvIXat4ng JnK1pm8YsnepwQ6ygSy512BzU+Nb0X4BSnnr6ig2+Z4sqxV7wAX6Tyyfp4ohuPu8dHPu bK9zh9FOzUwmNWdwfPWTKwKzf9qbK/OPsXoLvi2mnBHml2OuvWB1ii0VwFTcZgaU8RJo Y4S5N68GKyBhvkz6F8NMMORJywLHNPracvsQMkgxAvA5TWYEcrN6yC4n4sE3KNhj+Ub7 eMSg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a20-20020a17090680d400b007c07ba730c1si10254056ejx.375.2023.01.10.12.34.20; Tue, 10 Jan 2023 12:34:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-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; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231136AbjAJUeS (ORCPT + 99 others); Tue, 10 Jan 2023 15:34:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45280 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232670AbjAJUd5 (ORCPT ); Tue, 10 Jan 2023 15:33:57 -0500 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CED76B840 for ; Tue, 10 Jan 2023 12:33:50 -0800 (PST) Received: by mail-qt1-f176.google.com with SMTP id fd15so2070196qtb.9 for ; Tue, 10 Jan 2023 12:33:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=cLh0/hcsOhyE/DTZrDrzQJ2+iQP9+lhj6kJ+ny2vHEo=; b=w1uS+xfEOFnGTIycJmcuARBaQpOBFPcs/ju4FfwYCYPuEffR8kdCoG7zZ7r74TU/AX xBQ4Je9Y7bP45wu1UheIEBwVWmnX2f3qqFjLryEhTkZsJ09+7LD9L9S/Tna2p6nL9gQT GXch0PHAz2gavvFUk+HM5+twBEaBmcx6cal+E90nELmU4TbttkB0ya4bCohFzPgtBjiZ MCbwAFvK2Q6d+mktfYAGs0EtlwCxEdGdyoOI60KG1xTddNDz+5f4V6+Lrb6ApDSmFyYM DmmNDL+gDHO3Gjh5NCJK3o+EJxennYuFZle9odet6pJEQ3S6kkSB1FUOJ5GsxLuNYxzs kNwA== X-Gm-Message-State: AFqh2kpfQ/W1EcjKY1s4jfb8hbhYzpZ1zaanSpKpcAzQtYVaknHeBr/4 2uamuqkwG1teTMje+kmU/w== X-Received: by 2002:ac8:6ecd:0:b0:3a8:18d3:8525 with SMTP id f13-20020ac86ecd000000b003a818d38525mr94903930qtv.13.1673382829652; Tue, 10 Jan 2023 12:33:49 -0800 (PST) Received: from [192.168.75.138] (c-68-32-72-208.hsd1.mi.comcast.net. [68.32.72.208]) by smtp.gmail.com with ESMTPSA id b20-20020ac85414000000b003ac83b7f5d4sm4411945qtq.29.2023.01.10.12.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 12:33:48 -0800 (PST) Message-ID: <1e7be6f936af17f4f2316be66ecc127a1cf360a2.camel@kernel.org> Subject: Re: [PATCH v1 1/2] NFS: add IO_ADVISE operation From: Trond Myklebust To: Jorge Mora , linux-nfs@vger.kernel.org Cc: trond.myklebust@hammerspace.com, Anna.Schumaker@netapp.com Date: Tue, 10 Jan 2023 15:33:47 -0500 In-Reply-To: <20230110184641.13334-2-mora@netapp.com> References: <20230110184641.13334-1-mora@netapp.com> <20230110184641.13334-2-mora@netapp.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.3 (3.46.3-1.fc37) MIME-Version: 1.0 X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no 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-nfs@vger.kernel.org T24gVHVlLCAyMDIzLTAxLTEwIGF0IDExOjQ2IC0wNzAwLCBKb3JnZSBNb3JhIHdyb3RlOgo+IEFk ZHMgc3VwcG9ydCBmb3IgdXNpbmcgdGhlIE5GUyB2NC4yIG9wZXJhdGlvbiBJT19BRFZJU0UgdG8K PiBzZW5kIGNsaWVudCBJL08gYWNjZXNzIHBhdHRlcm4gaGludHMgdG8gdGhlIHNlcnZlci4KPiAK PiBUaGVyZSBpcyBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgYWR2aWNl Cj4gKFBPU0lYX0ZBRFZfKikgZ2l2ZW4gaW4gZmFkdmlzZTY0KCkgYW5kIHRoZSBiaXRtYXAgbWFz ayBzZW50Cj4gdG8gdGhlIHNlcnZlci4gQW55IG90aGVyIGFkdmljZSBnaXZlbiByZXN1bHRzIGlu IGp1c3QKPiBjYWxsaW5nIGdlbmVyaWNfZmFkdmlzZSgpLgo+IAo+IFRoZSBiaXRtYXAgbWFzayBn aXZlbiBieSB0aGUgc2VydmVyIHJlcGx5IGlzIGp1c3QgaWdub3JlZAo+IHNpbmNlIHRoZSBmYWR2 aXNlNjQoKSByZXR1cm5zIDAgb24gc3VjY2Vzcy4gSWYgc2VydmVyCj4gcmVwbGllcyB3aXRoIG1v cmUgdGhhbiBvbmUgYml0bWFwIHdvcmQsIG9ubHkgdGhlIGZpcnN0IHdvcmQKPiBpcyBzdG9yZWQg b24gdGhlIG5mczQyX2lvX2FkdmlzZV9yZXMgc3RydWN0IGFuZCBhbGwgb3RoZXIKPiB3b3JkcyBh cmUgaWdub3JlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKb3JnZSBNb3JhIDxtb3JhQG5ldGFwcC5j b20+Cj4gLS0tCj4gwqBmcy9uZnMvbmZzNDIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDEg Kwo+IMKgZnMvbmZzL25mczQycHJvYy5jwqDCoMKgwqDCoMKgwqAgfCA2NyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gwqBmcy9uZnMvbmZzNDJ4ZHIuY8KgwqDCoMKgwqDCoMKgwqAg fCA4NAo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IMKgZnMvbmZz L25mczRmaWxlLmPCoMKgwqDCoMKgwqDCoMKgIHwgMzcgKysrKysrKysrKysrKysrKysKPiDCoGZz L25mcy9uZnM0cHJvYy5jwqDCoMKgwqDCoMKgwqDCoCB8wqAgMSArCj4gwqBmcy9uZnMvbmZzNHhk ci5jwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxICsKPiDCoGluY2x1ZGUvbGludXgvbmZzNC5owqDC oMKgwqDCoCB8wqAgMSArCj4gwqBpbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIHzCoCAxICsKPiDC oGluY2x1ZGUvbGludXgvbmZzX3hkci5owqDCoCB8IDI4ICsrKysrKysrKysrKysKPiDCoDkgZmls ZXMgY2hhbmdlZCwgMjIxIGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25m czQyLmggYi9mcy9uZnMvbmZzNDIuaAo+IGluZGV4IDBmZTVhYWNiY2ZkZi4uYzNlOWZjZDU0Yzcy IDEwMDY0NAo+IC0tLSBhL2ZzL25mcy9uZnM0Mi5oCj4gKysrIGIvZnMvbmZzL25mczQyLmgKPiBA QCAtMjAsNiArMjAsNyBAQCBpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqLCBs b2ZmX3QsCj4gbG9mZl90KTsKPiDCoHNzaXplX3QgbmZzNDJfcHJvY19jb3B5KHN0cnVjdCBmaWxl ICosIGxvZmZfdCwgc3RydWN0IGZpbGUgKiwKPiBsb2ZmX3QsIHNpemVfdCwKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbmw0X3NlcnZlciAq LCBuZnM0X3N0YXRlaWQgKiwgYm9vbCk7Cj4gwqBpbnQgbmZzNDJfcHJvY19kZWFsbG9jYXRlKHN0 cnVjdCBmaWxlICosIGxvZmZfdCwgbG9mZl90KTsKPiAraW50IG5mczQyX3Byb2NfaW9fYWR2aXNl KHN0cnVjdCBmaWxlICosIGxvZmZfdCwgdTY0LCB1MzIpOwo+IMKgbG9mZl90IG5mczQyX3Byb2Nf bGxzZWVrKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKPiDCoGludCBuZnM0Ml9wcm9jX2xh eW91dHN0YXRzX2dlbmVyaWMoc3RydWN0IG5mc19zZXJ2ZXIgKiwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgbmZzNDJfbGF5b3V0c3RhdF9kYXRhICopOwo+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNDJw cm9jLmMgYi9mcy9uZnMvbmZzNDJwcm9jLmMKPiBpbmRleCBlY2I0Mjg1MTJmZTEuLmFmNDBmNzA1 Mzg2YSAxMDA2NDQKPiAtLS0gYS9mcy9uZnMvbmZzNDJwcm9jLmMKPiArKysgYi9mcy9uZnMvbmZz NDJwcm9jLmMKPiBAQCAtMTcyLDYgKzE3Miw3MyBAQCBpbnQgbmZzNDJfcHJvY19kZWFsbG9jYXRl KHN0cnVjdCBmaWxlICpmaWxlcCwKPiBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQo+IMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+IMKgfQo+IMKgCj4gK3N0YXRpYyBsb2ZmX3QgX25mczQy X3Byb2NfaW9fYWR2aXNlKHN0cnVjdCBmaWxlICpmaWxlcCwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IG5mc19sb2NrX2NvbnRleHQgKmxvY2ssIGxvZmZfdCBvZmZzZXQs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCBjb3VudCwgdTMyIGhpbnRzKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmls ZXApOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnM0Ml9pb19hZHZpc2VfYXJncyBhcmdzID0g ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZmjCoMKgwqDCoMKgPSBORlNfRkgo aW5vZGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAub2Zmc2V0wqA9IG9mZnNl dCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNvdW50wqDCoD0gY291bnQsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5oaW50c8KgwqA9IGhpbnRzLAo+ICvCoMKg wqDCoMKgwqDCoH07Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5mczQyX2lvX2FkdmlzZV9yZXMg cmVzOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5ycGNfcHJvYyA9Cj4gJm5mczRfcHJvY2VkdXJlc1tO RlNQUk9DNF9DTE5UX0lPX0FEVklTRV0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC5ycGNfYXJncCA9ICZhcmdzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnBj X3Jlc3AgPSAmcmVzLAo+ICvCoMKgwqDCoMKgwqDCoH07Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwo+ICvCoMKgwqDCoMKgwqDC oGludCBzdGF0dXM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghbmZzX3NlcnZlcl9jYXBhYmxl KGlub2RlLCBORlNfQ0FQX0lPX0FEVklTRSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRU5PVFNVUFA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IG5mczRf c2V0X3J3X3N0YXRlaWQoJmFyZ3Muc3RhdGVpZCwgbG9jay0KPiA+b3Blbl9jb250ZXh0LAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbG9jaywgRk1PREVf UkVBRCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoc3RhdHVzID09IC1FQUdBSU4pCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgPSAtTkZTNEVSUl9CQURfU1RBVEVJ RDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHN0YXR1czsKPiArwqDC oMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IG5mczRfY2FsbF9zeW5j KHNlcnZlci0+Y2xpZW50LCBzZXJ2ZXIsICZtc2csCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJmFyZ3Muc2VxX2FyZ3MsICZy ZXMuc2VxX3JlcywgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cyA9PSAtRU5PVFNVUFAp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcnZlci0+Y2FwcyAmPSB+TkZTX0NB UF9JT19BRFZJU0U7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHN0YXR1czsKPiArfQo+ICsKPiAr aW50IG5mczQyX3Byb2NfaW9fYWR2aXNlKHN0cnVjdCBmaWxlICpmaWxlcCwgbG9mZl90IG9mZnNl dCwgdTY0Cj4gY291bnQsIHUzMiBoaW50cykKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBu ZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGZpbGVfaW5vZGUoZmlsZXApKTsKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9Owo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpsb2NrOwo+ICvCoMKgwqDCoMKgwqDC oGxvZmZfdCBlcnI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxvY2sgPSBuZnNfZ2V0X2xvY2tfY29u dGV4dChuZnNfZmlsZV9vcGVuX2NvbnRleHQoZmlsZXApKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAo SVNfRVJSKGxvY2spKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRS X0VSUihsb2NrKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZXhjZXB0aW9uLmlub2RlID0gZmlsZV9p bm9kZShmaWxlcCk7Cj4gK8KgwqDCoMKgwqDCoMKgZXhjZXB0aW9uLnN0YXRlID0gbG9jay0+b3Bl bl9jb250ZXh0LT5zdGF0ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZG8gewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBfbmZzNDJfcHJvY19pb19hZHZpc2UoZmlsZXAsIGxv Y2ssIG9mZnNldCwKPiBjb3VudCwgaGludHMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoZXJyID49IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVy ciA9PSAtRU5PVFNVUFApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGVyciA9IC1FT1BOT1RTVVBQOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gbmZzNF9oYW5kbGVf ZXhjZXB0aW9uKHNlcnZlciwgZXJyLCAmZXhjZXB0aW9uKTsKPiArwqDCoMKgwqDCoMKgwqB9IHdo aWxlIChleGNlcHRpb24ucmV0cnkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBuZnNfcHV0X2xvY2tf Y29udGV4dChsb2NrKTsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+IMKg c3RhdGljIGludCBoYW5kbGVfYXN5bmNfY29weShzdHJ1Y3QgbmZzNDJfY29weV9yZXMgKnJlcywK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgbmZzX3NlcnZlciAqZHN0X3NlcnZlciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbmZzX3NlcnZlciAqc3Jj X3NlcnZlciwKPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyeGRyLmMgYi9mcy9uZnMvbmZzNDJ4 ZHIuYwo+IGluZGV4IGQ4MGVlODhjYTk5Ni4uMWUzMDcyOWIwZWQ1IDEwMDY0NAo+IC0tLSBhL2Zz L25mcy9uZnM0Mnhkci5jCj4gKysrIGIvZnMvbmZzL25mczQyeGRyLmMKPiBAQCAtNDUsNiArNDUs MTQgQEAKPiDCoCNkZWZpbmUgZW5jb2RlX2RlYWxsb2NhdGVfbWF4c3rCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoChvcF9lbmNvZGVfaGRyX21heHN6Cj4gKyBcCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZW5jb2RlX2ZhbGxvY2F0ZV9tYXhzeikKPiDCoCNkZWZpbmUgZGVjb2RlX2Rl YWxsb2NhdGVfbWF4c3rCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChvcF9kZWNvZGVf aGRyX21heHN6KQo+ICsjZGVmaW5lIG5mczQyX2lvX2FkdmlzZV9iaXRtYXBfbWF4c3rCoMKgwqAy IC8qIGJpdG1hcCBsZW5ndGggYW5kIGhpbnRzCj4gbWFzayAqLwo+ICsjZGVmaW5lIGVuY29kZV9p b19hZHZpc2VfbWF4c3rCoMKgwqDCoMKgwqDCoMKgwqAob3BfZW5jb2RlX2hkcl9tYXhzeiArIFwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuY29kZV9zdGF0ZWlkX21heHN6ICsgXAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMiAvKiBvZmZzZXQgKi8gKyBcCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAyIC8qIGNvdW50ICovwqAgKyBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZnM0Ml9p b19hZHZpc2VfYml0bWFwX21heHN6Cj4gLyogaGludHMgKi8pCj4gKyNkZWZpbmUgZGVjb2RlX2lv X2FkdmlzZV9tYXhzesKgwqDCoMKgwqDCoMKgwqDCoChvcF9kZWNvZGVfaGRyX21heHN6ICsgXAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmZzNDJfaW9fYWR2aXNlX2JpdG1hcF9tYXhzego+IC8q IGhpbnRzICovKQo+IMKgI2RlZmluZSBlbmNvZGVfcmVhZF9wbHVzX21heHN6wqDCoMKgwqDCoMKg wqDCoMKgKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZW5jb2RlX3N0YXRlaWRfbWF4c3ogKyAzKQo+IMKgI2RlZmluZSBORlM0Ml9SRUFEX1BMVVNfREFU QV9TRUdNRU5UX1NJWkUgXAo+IEBAIC0xMzgsNiArMTQ2LDE0IEBACj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZGVjb2RlX3B1dGZoX21heHN6ICsgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRlY29kZV9kZWFsbG9jYXRlX21heHN6ICsgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRl Y29kZV9nZXRhdHRyX21heHN6KQo+ICsjZGVmaW5lIE5GUzRfZW5jX2lvX2FkdmlzZV9zesKgwqDC oMKgwqDCoMKgwqDCoMKgKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKwo+IFwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVuY29kZV9zZXF1ZW5jZV9tYXhzeiArIFwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVuY29kZV9wdXRmaF9tYXhzeiArIFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGVuY29kZV9pb19hZHZpc2VfbWF4c3opCj4gKyNkZWZpbmUgTkZTNF9kZWNfaW9fYWR2aXNlX3N6 wqDCoMKgwqDCoMKgwqDCoMKgwqAoY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzeiArCj4gXAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVjb2RlX3NlcXVlbmNlX21heHN6ICsgXAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZGVjb2RlX3B1dGZoX21heHN6ICsgXAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGVjb2RlX2lvX2FkdmlzZV9tYXhzeikKPiDCoCNkZWZpbmUgTkZTNF9lbmNfcmVhZF9w bHVzX3N6wqDCoMKgwqDCoMKgwqDCoMKgwqAoY29tcG91bmRfZW5jb2RlX2hkcl9tYXhzeiArCj4g XAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuY29kZV9zZXF1ZW5jZV9tYXhzeiArIFwKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCj4gQEAgLTM0Miw2 ICszNTgsMTcgQEAgc3RhdGljIHZvaWQgZW5jb2RlX2RlYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJl YW0KPiAqeGRyLAo+IMKgwqDCoMKgwqDCoMKgwqBlbmNvZGVfZmFsbG9jYXRlKHhkciwgYXJncyk7 Cj4gwqB9Cj4gwqAKPiArc3RhdGljIHZvaWQgZW5jb2RlX2lvX2FkdmlzZShzdHJ1Y3QgeGRyX3N0 cmVhbSAqeGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29uc3Qgc3RydWN0IG5mczQyX2lvX2FkdmlzZV9hcmdzICphcmdzLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGNvbXBvdW5kX2hkciAq aGRyKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgZW5jb2RlX29wX2hkcih4ZHIsIE9QX0lPX0FEVklT RSwgZGVjb2RlX2lvX2FkdmlzZV9tYXhzeiwKPiBoZHIpOwo+ICvCoMKgwqDCoMKgwqDCoGVuY29k ZV9uZnM0X3N0YXRlaWQoeGRyLCAmYXJncy0+c3RhdGVpZCk7Cj4gK8KgwqDCoMKgwqDCoMKgZW5j b2RlX3VpbnQ2NCh4ZHIsIGFyZ3MtPm9mZnNldCk7Cj4gK8KgwqDCoMKgwqDCoMKgZW5jb2RlX3Vp bnQ2NCh4ZHIsIGFyZ3MtPmNvdW50KTsKPiArwqDCoMKgwqDCoMKgwqB4ZHJfZW5jb2RlX2JpdG1h cDQoeGRyLCAmYXJncy0+aGludHMsIDEpOwo+ICt9Cj4gKwo+IMKgc3RhdGljIHZvaWQgZW5jb2Rl X3JlYWRfcGx1cyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBuZnNfcGdp b19hcmdzICphcmdzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKPiBAQCAtNzY0LDYgKzc5 MSwyNSBAQCBzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfZGVhbGxvY2F0ZShzdHJ1Y3QKPiBycGNf cnFzdCAqcmVxLAo+IMKgwqDCoMKgwqDCoMKgwqBlbmNvZGVfbm9wcygmaGRyKTsKPiDCoH0KPiDC oAo+ICsvKgo+ICsgKiBFbmNvZGUgSU9fQURWSVNFIHJlcXVlc3QKPiArICovCj4gK3N0YXRpYyB2 b2lkIG5mczRfeGRyX2VuY19pb19hZHZpc2Uoc3RydWN0IHJwY19ycXN0ICpyZXEsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgdm9pZCAqZGF0 YSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBuZnM0Ml9pb19hZHZpc2VfYXJn cyAqYXJncyA9IGRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNvbXBvdW5kX2hkciBoZHIg PSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5taW5vcnZlcnNpb24gPSBuZnM0 X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtCj4gPnNlcV9hcmdzKSwKPiArwqDCoMKgwqDCoMKgwqB9 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBlbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRy KTsKPiArwqDCoMKgwqDCoMKgwqBlbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3Ms ICZoZHIpOwo+ICvCoMKgwqDCoMKgwqDCoGVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZoLCAmaGRy KTsKPiArwqDCoMKgwqDCoMKgwqBlbmNvZGVfaW9fYWR2aXNlKHhkciwgYXJncywgJmhkcik7Cj4g K8KgwqDCoMKgwqDCoMKgZW5jb2RlX25vcHMoJmhkcik7Cj4gK30KPiArCj4gwqAvKgo+IMKgICog RW5jb2RlIFJFQURfUExVUyByZXF1ZXN0Cj4gwqAgKi8KPiBAQCAtMTAzNCw2ICsxMDgwLDE5IEBA IHN0YXRpYyBpbnQgZGVjb2RlX2RlYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0KPiAqeGRyLCBz dHJ1Y3QgbmZzNDJfZmFsbG9jX3JlcyAqcmUKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRlY29k ZV9vcF9oZHIoeGRyLCBPUF9ERUFMTE9DQVRFKTsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW50IGRl Y29kZV9pb19hZHZpc2Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0Cj4gbmZzNDJfaW9f YWR2aXNlX3JlcyAqcmVzKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHN0YXR1czsKPiArCj4g K8KgwqDCoMKgwqDCoMKgc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0lPX0FEVklTRSk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHN0YXR1czsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KGRl Y29kZV9iaXRtYXA0KHhkciwgJnJlcy0+aGludHMsIDEpIDwgMCkpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlPOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ ICt9Cj4gKwo+IMKgc3RydWN0IHJlYWRfcGx1c19zZWdtZW50IHsKPiDCoMKgwqDCoMKgwqDCoMKg ZW51bSBkYXRhX2NvbnRlbnQ0IHR5cGU7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IG9mZnNl dDsKPiBAQCAtMTMzNyw2ICsxMzk2LDMxIEBAIHN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2RlYWxs b2NhdGUoc3RydWN0Cj4gcnBjX3Jxc3QgKnJxc3RwLAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g c3RhdHVzOwo+IMKgfQo+IMKgCj4gKy8qCj4gKyAqIERlY29kZSBJT19BRFZJU0UgcmVzcG9uc2UK PiArICovCj4gK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2lvX2FkdmlzZShzdHJ1Y3QgcnBjX3Jx c3QgKnJxc3RwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dm9pZCAqZGF0YSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnM0Ml9pb19hZHZpc2Vf cmVzICpyZXMgPSBkYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjb21wb3VuZF9oZHIgaGRy Owo+ICvCoMKgwqDCoMKgwqDCoGludCBzdGF0dXM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN0YXR1 cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAo c3RhdHVzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiArwqDC oMKgwqDCoMKgwqBzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBy cXN0cCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cykKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RhdHVzID0gZGVjb2RlX3B1 dGZoKHhkcik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cykKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RhdHVzID0gZGVjb2Rl X2lvX2FkdmlzZSh4ZHIsIHJlcyk7Cj4gK291dDoKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc3Rh dHVzOwo+ICt9Cj4gKwo+IMKgLyoKPiDCoCAqIERlY29kZSBSRUFEX1BMVVMgcmVxdWVzdAo+IMKg ICovCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZS5jIGIvZnMvbmZzL25mczRmaWxlLmMK PiBpbmRleCAyNTYzZWQ4NTgwZjMuLjVmNmU0YjVmMTU1OSAxMDA2NDQKPiAtLS0gYS9mcy9uZnMv bmZzNGZpbGUuYwo+ICsrKyBiL2ZzL25mcy9uZnM0ZmlsZS5jCj4gQEAgLTcsNiArNyw3IEBACj4g wqAjaW5jbHVkZSA8bGludXgvZnMuaD4KPiDCoCNpbmNsdWRlIDxsaW51eC9maWxlLmg+Cj4gwqAj aW5jbHVkZSA8bGludXgvZmFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mYWR2aXNlLmg+Cj4g wqAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KPiDCoCNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4K PiDCoCNpbmNsdWRlIDxsaW51eC9uZnNfc3NjLmg+Cj4gQEAgLTIzNiw2ICsyMzcsNDEgQEAgc3Rh dGljIGxvbmcgbmZzNDJfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlcCwKPiBpbnQgbW9kZSwg bG9mZl90IG9mZnNldCwgbG9mZl90Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBuZnM0Ml9wcm9j X2FsbG9jYXRlKGZpbGVwLCBvZmZzZXQsIGxlbik7Cj4gwqB9Cj4gwqAKPiArc3RhdGljIGludCBu ZnM0Ml9maWxlX2ZhZHZpc2Uoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgc3RhcnQsCj4gbG9m Zl90IGxlbiwgaW50IGFkdmljZSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gK8Kg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGhpbnRzID0gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKg c3dpdGNoIChhZHZpY2UpIHsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIFBPU0lYX0ZBRFZfTk9STUFM Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoaW50cyA9IE5GU19JT19BRFZJU0U0 X05PUk1BTDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDC oMKgwqDCoMKgY2FzZSBQT1NJWF9GQURWX1JBTkRPTToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaGludHMgPSBORlNfSU9fQURWSVNFNF9SQU5ET007Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgUE9TSVhfRkFEVl9T RVFVRU5USUFMOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoaW50cyA9IE5GU19J T19BRFZJU0U0X1NFUVVFTlRJQUw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgUE9TSVhfRkFEVl9XSUxMTkVFRDoKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaGludHMgPSBORlNfSU9fQURWSVNFNF9XSUxMTkVFRDsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKg Y2FzZSBQT1NJWF9GQURWX0RPTlRORUVEOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBoaW50cyA9IE5GU19JT19BRFZJU0U0X0RPTlRORUVEOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIFBPU0lYX0ZBRFZfTk9SRVVT RToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaGludHMgPSBORlNfSU9fQURWSVNF NF9OT1JFVVNFOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDC oMKgwqDCoMKgwqBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IG91dDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG5mczQy X3Byb2NfaW9fYWR2aXNlKGZpbGVwLCBzdGFydCwgbGVuLCBoaW50cyk7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7CgpObyEgV2Ugc2hvdWxkIG5ldmVyIHJldHVybiBhbnkgc2VydmVyIGVycm9ycyBmb3IgdGhp cyBmdW5jdGlvbi4gSWYgdGhlCnNlcnZlciBkb2Vzbid0IGxpa2Ugd2hhdCB3ZSBzZW5kLCB0aGVu IHRoYXQgaXMganVzdCB0b28gYmFkLiBFaXRoZXIKd2F5LCB3ZSB3YW50IHRoZSBwYWdlIGNhY2hl IG9uIHRoZSBjbGllbnQgdG8gYmUgY2hhbmdlZCB0byBiZWhhdmUgdGhlCndheSBpdCBpcyBzdXBw b3NlZCB0by4KCklPVzogTm90aWZ5aW5nIHRoZSBzZXJ2ZXIgaXMsIHF1aXRlIGZyYW5rbHksIGEg c2Vjb25kYXJ5IGZ1bmN0aW9uIGhlcmUuClRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgZmFkdmlzZSgp IGlzIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIHRoZQpjbGllbnQuCgpOb3RlOiBXaXRoIHRo aXMgaW4gbWluZCwgaXQgbWlnaHQgbm90IGJlIGEgYmFkIGlkZWEgdG8ganVzdCBtYWtlIHRoZQpS UEMgY2FsbCBhc3luY2hyb25vdXMsIHNvIHRoYXQgaXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCBh bmQgZG9lc24ndAppbnRlcnJ1cHQgdGhlIGNsaWVudC4KCj4gK291dDoKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gZ2VuZXJpY19mYWR2aXNlKGZpbGVwLCBzdGFydCwgbGVuLCBhZHZpY2UpOwo+ICt9 Cj4gKwo+IMKgc3RhdGljIGxvZmZfdCBuZnM0Ml9yZW1hcF9maWxlX3JhbmdlKHN0cnVjdCBmaWxl ICpzcmNfZmlsZSwgbG9mZl90Cj4gc3JjX29mZiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgbG9mZl90IGRzdF9vZmYsIGxvZmZfdCBjb3Vu dCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCByZW1hcF9m bGFncykKPiBAQCAtNDYyLDYgKzQ5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg bmZzNF9maWxlX29wZXJhdGlvbnMKPiA9IHsKPiDCoMKgwqDCoMKgwqDCoMKgLmNvcHlfZmlsZV9y YW5nZSA9IG5mczRfY29weV9maWxlX3JhbmdlLAo+IMKgwqDCoMKgwqDCoMKgwqAubGxzZWVrwqDC oMKgwqDCoMKgwqDCoMKgPSBuZnM0X2ZpbGVfbGxzZWVrLAo+IMKgwqDCoMKgwqDCoMKgwqAuZmFs bG9jYXRlwqDCoMKgwqDCoMKgPSBuZnM0Ml9mYWxsb2NhdGUsCj4gK8KgwqDCoMKgwqDCoMKgLmZh ZHZpc2XCoMKgwqDCoMKgwqDCoMKgPSBuZnM0Ml9maWxlX2ZhZHZpc2UsCj4gwqDCoMKgwqDCoMKg wqDCoC5yZW1hcF9maWxlX3JhbmdlID0gbmZzNDJfcmVtYXBfZmlsZV9yYW5nZSwKPiDCoCNlbHNl Cj4gwqDCoMKgwqDCoMKgwqDCoC5sbHNlZWvCoMKgwqDCoMKgwqDCoMKgwqA9IG5mc19maWxlX2xs c2VlaywKPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2Mu Ywo+IGluZGV4IDQwZDc0OWYyOWVkMy4uODliMjFiOTRmOTQ4IDEwMDY0NAo+IC0tLSBhL2ZzL25m cy9uZnM0cHJvYy5jCj4gKysrIGIvZnMvbmZzL25mczRwcm9jLmMKPiBAQCAtMTA1MjksNiArMTA1 MjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mczRfbWlub3JfdmVyc2lvbl9vcHMKPiBuZnNf djRfMl9taW5vcl9vcHMgPSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IE5G U19DQVBfT0ZGTE9BRF9DQU5DRUwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwg TkZTX0NBUF9DT1BZX05PVElGWQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCBO RlNfQ0FQX0RFQUxMT0NBVEUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCBORlNf Q0FQX0lPX0FEVklTRQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCBORlNfQ0FQ X1NFRUsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgTkZTX0NBUF9MQVlPVVRT VEFUUwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCBORlNfQ0FQX0NMT05FCj4g ZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCj4gaW5kZXgg ZGVlYzc2Y2Y1YWZlLi45NjJjNWIwMjM3NjkgMTAwNjQ0Cj4gLS0tIGEvZnMvbmZzL25mczR4ZHIu Ywo+ICsrKyBiL2ZzL25mcy9uZnM0eGRyLmMKPiBAQCAtNzY5OCw2ICs3Njk4LDcgQEAgY29uc3Qg c3RydWN0IHJwY19wcm9jaW5mbyBuZnM0X3Byb2NlZHVyZXNbXSA9IHsKPiDCoMKgwqDCoMKgwqDC oMKgUFJPQzQyKFNFRUsswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5jX3NlZWsswqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVjX3NlZWspLAo+IMKgwqDCoMKgwqDCoMKgwqBQUk9DNDIo QUxMT0NBVEUswqDCoMKgwqDCoMKgwqDCoGVuY19hbGxvY2F0ZSzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGVjX2FsbG9jYXRlKQo+ICwKPiDCoMKgwqDCoMKgwqDCoMKgUFJPQzQyKERFQUxMT0NBVEUs wqDCoMKgwqDCoMKgZW5jX2RlYWxsb2NhdGUswqDCoMKgwqDCoMKgwqDCoMKgZGVjX2RlYWxsb2Nh dAo+IGUpLAo+ICvCoMKgwqDCoMKgwqDCoFBST0M0MihJT19BRFZJU0UswqDCoMKgwqDCoMKgwqBl bmNfaW9fYWR2aXNlLMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVjX2lvX2FkdmlzZQo+ICksCj4gwqDC oMKgwqDCoMKgwqDCoFBST0M0MihMQVlPVVRTVEFUUyzCoMKgwqDCoMKgZW5jX2xheW91dHN0YXRz LMKgwqDCoMKgwqDCoMKgwqBkZWNfbGF5b3V0c3RhCj4gdHMpLAo+IMKgwqDCoMKgwqDCoMKgwqBQ Uk9DNDIoQ0xPTkUswqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuY19jbG9uZSzCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGVjX2Nsb25lKSwKPiDCoMKgwqDCoMKgwqDCoMKgUFJPQzQyKENPUFks wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5jX2NvcHkswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGVjX2NvcHkpLAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2lu Y2x1ZGUvbGludXgvbmZzNC5oCj4gaW5kZXggOGQwNGI2YTU5NjRjLi5hMWQ5MjViMWYwNmIgMTAw NjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L25m czQuaAo+IEBAIC01NTcsNiArNTU3LDcgQEAgZW51bSB7Cj4gwqDCoMKgwqDCoMKgwqDCoE5GU1BS T0M0X0NMTlRfTElTVFhBVFRSUywKPiDCoMKgwqDCoMKgwqDCoMKgTkZTUFJPQzRfQ0xOVF9SRU1P VkVYQVRUUiwKPiDCoMKgwqDCoMKgwqDCoMKgTkZTUFJPQzRfQ0xOVF9SRUFEX1BMVVMsCj4gK8Kg wqDCoMKgwqDCoMKgTkZTUFJPQzRfQ0xOVF9JT19BRFZJU0UsCj4gwqB9Owo+IMKgCj4gwqAvKiBu ZnM0MSB0eXBlcyAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIv aW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAo+IGluZGV4IGVhMmY3ZTZiMWIwYi4uMzhlYjBjZDg2 OTc5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKPiArKysgYi9pbmNs dWRlL2xpbnV4L25mc19mc19zYi5oCj4gQEAgLTI3MCw2ICsyNzAsNyBAQCBzdHJ1Y3QgbmZzX3Nl cnZlciB7Cj4gwqAjZGVmaW5lIE5GU19DQVBfTEdPUEVOwqDCoMKgwqDCoMKgwqDCoMKgKDFVIDw8 IDUpCj4gwqAjZGVmaW5lIE5GU19DQVBfQ0FTRV9JTlNFTlNJVElWRcKgwqDCoMKgwqDCoMKgKDFV IDw8IDYpCj4gwqAjZGVmaW5lIE5GU19DQVBfQ0FTRV9QUkVTRVJWSU5HwqDCoMKgwqDCoMKgwqDC oCgxVSA8PCA3KQo+ICsjZGVmaW5lIE5GU19DQVBfSU9fQURWSVNFwqDCoMKgwqDCoMKgKDFVIDw8 IDEzKQo+IMKgI2RlZmluZSBORlNfQ0FQX1BPU0lYX0xPQ0vCoMKgwqDCoMKgKDFVIDw8IDE0KQo+ IMKgI2RlZmluZSBORlNfQ0FQX1VJREdJRF9OT01BUMKgwqDCoCgxVSA8PCAxNSkKPiDCoCNkZWZp bmUgTkZTX0NBUF9TVEFURUlEX05GU1Y0McKgKDFVIDw8IDE2KQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCj4gaW5kZXggZTg2 Y2Y2NjQyZDIxLi4zYTUyZTVkYzJmZWEgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9uZnNf eGRyLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAo+IEBAIC0xNyw2ICsxNywxOCBA QAo+IMKgCj4gwqAjZGVmaW5lIE5GU19CSVRNQVNLX1NawqDCoMKgwqDCoMKgwqDCoMKgMwo+IMKg Cj4gKyNkZWZpbmUgTkZTX0lPX0FEVklTRTRfTk9STUFMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKDFVIDw8IDApCj4gKyNkZWZpbmUgTkZTX0lPX0FEVklTRTRfU0VRVUVOVElB TMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMVUgPDwgMSkKPiArI2RlZmluZSBORlNfSU9f QURWSVNFNF9TRVFVRU5USUFMX0JBQ0tXQVJEU8KgwqDCoMKgKDFVIDw8IDIpCj4gKyNkZWZpbmUg TkZTX0lPX0FEVklTRTRfUkFORE9NwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg KDFVIDw8IDMpCj4gKyNkZWZpbmUgTkZTX0lPX0FEVklTRTRfV0lMTE5FRUTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMVUgPDwgNCkKPiArI2RlZmluZSBO RlNfSU9fQURWSVNFNF9XSUxMTkVFRF9PUFBPUlRVTklTVElDwqDCoCgxVSA8PCA1KQo+ICsjZGVm aW5lIE5GU19JT19BRFZJU0U0X0RPTlRORUVEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKDFVIDw8IDYpCj4gKyNkZWZpbmUgTkZTX0lPX0FEVklTRTRfTk9S RVVTRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMVUgPDwgNykKPiArI2RlZmlu ZSBORlNfSU9fQURWSVNFNF9SRUFEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCgxVSA8PCA4KQo+ICsjZGVmaW5lIE5GU19JT19BRFZJU0U0X1dSSVRFwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMVUgPDwgOSkKPiArI2RlZmluZSBORlNfSU9fQURW SVNFNF9JTklUX1BST1hJTUlUWcKgwqDCoMKgwqDCoMKgwqDCoMKgKDFVIDw8IDEwKQo+ICsKPiDC oHN0cnVjdCBuZnM0X3N0cmluZyB7Cj4gwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBsZW47 Cj4gwqDCoMKgwqDCoMKgwqDCoGNoYXIgKmRhdGE7Cj4gQEAgLTE0NDksNiArMTQ2MSwyMiBAQCBz dHJ1Y3QgbmZzNDJfZmFsbG9jX3JlcyB7Cj4gwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBu ZnNfc2VydmVywqDCoMKgwqDCoMKgwqDCoMKgKmZhbGxvY19zZXJ2ZXI7Cj4gwqB9Owo+IMKgCj4g K3N0cnVjdCBuZnM0Ml9pb19hZHZpc2VfYXJncyB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5m czRfc2VxdWVuY2VfYXJnc8KgwqDCoMKgwqDCoMKgc2VxX2FyZ3M7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBuZnNfZmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpm aDsKPiArwqDCoMKgwqDCoMKgwqBuZnM0X3N0YXRlaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RhdGVpZDsKPiArwqDCoMKgwqDCoMKgwqBsb2ZmX3TCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zmc2V0Owo+ICvCoMKg wqDCoMKgwqDCoHU2NMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjb3VudDsKPiArwqDCoMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaGludHM7Cj4gK307Cj4g Kwo+ICtzdHJ1Y3QgbmZzNDJfaW9fYWR2aXNlX3JlcyB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IG5mczRfc2VxdWVuY2VfcmVzwqDCoMKgwqDCoMKgwqDCoHNlcV9yZXM7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBoaW50czsKPiArfTsKPiArCj4gwqBzdHJ1Y3QgbmZzNDJfY29weV9hcmdzIHsK PiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mczRfc2VxdWVuY2VfYXJnc8KgwqDCoMKgwqDCoMKg c2VxX2FyZ3M7Cj4gwqAKCi0tIApUcm9uZCBNeWtsZWJ1c3QKTGludXggTkZTIGNsaWVudCBtYWlu dGFpbmVyLCBIYW1tZXJzcGFjZQp0cm9uZC5teWtsZWJ1c3RAaGFtbWVyc3BhY2UuY29tCgoK