From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CB0F2C432C1 for ; Tue, 24 Sep 2019 16:28:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7DD3C2146E for ; Tue, 24 Sep 2019 16:28:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="SC2Vwbii"; dkim=pass (1024-bit key) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="cY6MiUDE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728728AbfIXQ2n (ORCPT ); Tue, 24 Sep 2019 12:28:43 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:30412 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725787AbfIXQ2m (ORCPT ); Tue, 24 Sep 2019 12:28:42 -0400 Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x8OGNuqX016420; Tue, 24 Sep 2019 09:28:22 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=CP0Y92PXhJXZ3FSxz7DFx5zrF+jRN1LnRFERMPAiEag=; b=SC2Vwbii+KIW/a37gm970QwXZK+i345B+HN8U6hnilfsxI3v+8NUfrQnrmbT8X8v3Yh/ vWXihPkQ+Uk0iXhXwEVPKBNwhxpPDnhEJMFh89C7pIU/aM5BQWLuzWLWVitxp2DnBe6c c9jWry00WGZOwgdoM+dJBXqLIpAsKoe8IvI= Received: from mail.thefacebook.com (mailout.thefacebook.com [199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2v77mac39k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 24 Sep 2019 09:28:21 -0700 Received: from prn-mbx03.TheFacebook.com (2620:10d:c081:6::17) by prn-hub06.TheFacebook.com (2620:10d:c081:35::130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Tue, 24 Sep 2019 09:28:20 -0700 Received: from prn-hub04.TheFacebook.com (2620:10d:c081:35::128) by prn-mbx03.TheFacebook.com (2620:10d:c081:6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Tue, 24 Sep 2019 09:28:20 -0700 Received: from NAM05-DM3-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5 via Frontend Transport; Tue, 24 Sep 2019 09:28:20 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y+VLsiGsP2En4qVT/+DiqFWD1x5Vjx2dxIHV6Da9csVR8VcJ2yDzHz5dfJNslE3CM4o+tdq5dDo615vdWtgb5Wp1iT9QNJz5+D0pu9F1Mo/WESYp/uW93Mui5BNS0CEqruC387qtBULmLSQgmHHuP+Vp0cWEFRBOver/w3Zafe3N61dnbB9RTVSAaBaL2VLYHvZu/Tkibrl7hmlVyAOiJV4oDb2lxnYHY7meF70fp5mmsnzL2z+51Sf98twoNb5bk93omZk+kv7n9VArkEX9mplYfxpf9aAFkmGa+99eSrAc5T+q6fEro37ukakiA5C6zMokCsWfJjh5DbLcRt9z6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CP0Y92PXhJXZ3FSxz7DFx5zrF+jRN1LnRFERMPAiEag=; b=G36nUzAitOSXsJ/45asYVSe/eg4/HtEWwyrvMPKDWKK9lJuLXzZ/JEuk7RDtkfXeKuCWtoeT9LqJ2rf/rI5zkL4gjJwPAJ4qD7bVylyUxd6FyJBeRyE7Uxp+9YJG2IPIJgh2mwHuaTulRZYz0hWJRt/vvOUaglyj/tyuEHOzzFv9IE9K7RiEvbz+eKjERFFYZimP7v7lpqqroAojFUTLnv85gCizpzU0XcFkbavkTBCxCIAQ1QG+aznGagiA1+htPEUokTt8ft5OJzngNepdiwdjIqFYdXYD0snpcU49/x1uqwCvL36+weJ0u+cbgnYOxZvTe+g2cTu0TJFg6NcdOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fb.com; dmarc=pass action=none header.from=fb.com; dkim=pass header.d=fb.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector2-fb-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CP0Y92PXhJXZ3FSxz7DFx5zrF+jRN1LnRFERMPAiEag=; b=cY6MiUDErBNnZLX8k26CQSw2R2TgdIm0A525ZBJpv4RSpI+fViuoh86Kvokr4cWrfm9oKrJ0vU2e4KmOY+h64/U6YrXH0YmxkBH4CPZzOmXa+XAzXOpmz1rDTYzqik1H/1FwFpAViDGGomtZex74IgWkahrwKFRlBk/k4GJcFpk= Received: from BYAPR15MB3384.namprd15.prod.outlook.com (20.179.60.27) by BYAPR15MB2853.namprd15.prod.outlook.com (20.178.206.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.22; Tue, 24 Sep 2019 16:28:18 +0000 Received: from BYAPR15MB3384.namprd15.prod.outlook.com ([fe80::95ab:61a0:29f4:e07e]) by BYAPR15MB3384.namprd15.prod.outlook.com ([fe80::95ab:61a0:29f4:e07e%6]) with mapi id 15.20.2284.023; Tue, 24 Sep 2019 16:28:18 +0000 From: Yonghong Song To: Brian Vazquez CC: Alexei Starovoitov , Daniel Borkmann , netdev , bpf , Kernel Team , Jakub Kicinski , "Brian Vazquez" , Stanislav Fomichev Subject: Re: [RFC PATCH bpf-next v2 1/2] bpf: adding map batch processing support Thread-Topic: [RFC PATCH bpf-next v2 1/2] bpf: adding map batch processing support Thread-Index: AQHVcmWVsUq+X5m/mUGqvu6TFOBZCac7BVUA Date: Tue, 24 Sep 2019 16:28:17 +0000 Message-ID: References: <20190906225434.3635421-1-yhs@fb.com> <20190906225434.3635421-2-yhs@fb.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MWHPR15CA0057.namprd15.prod.outlook.com (2603:10b6:301:4c::19) To BYAPR15MB3384.namprd15.prod.outlook.com (2603:10b6:a03:112::27) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2620:10d:c090:200::3:72dd] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6444d93c-9aa8-4d0f-3fa8-08d7410c34b4 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:BYAPR15MB2853; x-ms-traffictypediagnostic: BYAPR15MB2853: x-ms-exchange-purlcount: 5 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0170DAF08C x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(346002)(376002)(39860400002)(136003)(396003)(366004)(189003)(199004)(25786009)(71190400001)(71200400001)(4326008)(102836004)(386003)(476003)(7736002)(66476007)(36756003)(5660300002)(6246003)(6306002)(6486002)(54906003)(66946007)(30864003)(6512007)(6116002)(316002)(6436002)(76176011)(478600001)(81156014)(52116002)(229853002)(486006)(31686004)(66556008)(46003)(99286004)(14454004)(64756008)(66446008)(14444005)(8676002)(11346002)(256004)(186003)(2906002)(6916009)(81166006)(2616005)(305945005)(53546011)(31696002)(86362001)(6506007)(966005)(446003)(8936002)(579004);DIR:OUT;SFP:1102;SCL:1;SRVR:BYAPR15MB2853;H:BYAPR15MB3384.namprd15.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: fb.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: F0QYrH8MoN/5ECL1tRR3xYWZEQeP6YlZv+GThCeqFa5pdRxczUw/VAGP31UwgWtpBhu23hUbCvO+hzGDFpt8fpsFe4Eb+rh1gTiDmewt2HOc/7EaVID7vs84/kCl/rAcdDmLfNnDFHeBWFKYTi4oZvraUbtUT7sAGolfBBhDM7iB2Ik0wy8F2qhTVCsKnySU+QB7XHkUXEbRdKRMBtKHijCaXMHlayYw6P05EokmStdKsICOptb/31VPCPsgLS6uvwHjdKb5fHATWamzHbaQB20uhQSMnOF4k/9hzWfVrlkGbxysXNjiWyunAJj9VNaRLgdWQx0X6z3sMuK+0Y0GrEpWKcqEtfxzhOC2Le1Dp0LOWBZkjujDW0U6jDLoGGtgSb/QZsOVDWWqJ1A6umkNbmYdVdjbgbKYBiPnmcrLGLo= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 6444d93c-9aa8-4d0f-3fa8-08d7410c34b4 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Sep 2019 16:28:18.1552 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: p8WqufU5vioDduK0yq9EdQbW5ZAOwHQWuXeogcPSI45cDlGDTNzg0vtMJfq4u+Wg X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR15MB2853 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,1.0.8 definitions=2019-09-24_06:2019-09-23,2019-09-24 signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 lowpriorityscore=0 impostorscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 clxscore=1011 bulkscore=0 malwarescore=0 adultscore=0 suspectscore=0 spamscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1908290000 definitions=main-1909240148 X-FB-Internal: deliver Sender: bpf-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org DQoNCk9uIDkvMjMvMTkgNDoyMCBQTSwgQnJpYW4gVmF6cXVleiB3cm90ZToNCj4gSGkgWW9uZ2hv bmcsIHRoYW5rcyBmb3Igd29ya2luZyBvbiB0aGlzIQ0KPiANCj4gSSBoYXZlIHNvbWUgY29uY2Vy bnMgYWJvdXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBidXQgb3ZlcmFsbCBJIHRoaW5rDQo+IHRoaXMg bWlnaHQgd29yayBmb3Igb3VyIHVzZSBjYXNlIHRvbyENCg0KVGhhbmtzIGZvciByZXZpZXdpbmcg dGhlIHBhdGNoLiBJIHdpbGwgZ2V0IGJhY2sgdG8gdGhpcyB2ZXJ5IHNvb24uDQoNCj4gDQo+IE9u IFN1biwgU2VwIDgsIDIwMTkgYXQgMToxMSBBTSBZb25naG9uZyBTb25nIDx5aHNAZmIuY29tPiB3 cm90ZToNCj4+DQo+PiBCcmlhbiBWYXpxdWV6IGhhcyBwcm9wb3NlZCBCUEZfTUFQX0RVTVAgY29t bWFuZCB0byBsb29rIHVwIG1vcmUgdGhhbiBvbmUNCj4+IG1hcCBlbnRyaWVzIHBlciBzeXNjYWxs Lg0KPj4gICAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYnBmL0NBQkNncGFVM3h4WDZDTU14RCsx a25BcGl2dGMyakxCSHlzRFh3LTBFOWJRRUwwcUMzQUBtYWlsLmdtYWlsLmNvbS9ULyN0DQo+Pg0K Pj4gRHVyaW5nIGRpc2N1c3Npb24sIHdlIGZvdW5kIG1vcmUgdXNlIGNhc2VzIGNhbiBiZSBzdXBw b3J0ZWQgaW4gYSBzaW1pbGFyDQo+PiBtYXAgb3BlcmF0aW9uIGJhdGNoaW5nIGZyYW1ld29yay4g Rm9yIGV4YW1wbGUsIGJhdGNoZWQgbWFwIGxvb2t1cCBhbmQgZGVsZXRlLA0KPj4gd2hpY2ggY2Fu IGJlIHJlYWxseSBoZWxwZnVsIGZvciBiY2MuDQo+PiAgICBodHRwczovL2dpdGh1Yi5jb20vaW92 aXNvci9iY2MvYmxvYi9tYXN0ZXIvdG9vbHMvdGNwdG9wLnB5I0wyMzMtTDI0Mw0KPj4gICAgaHR0 cHM6Ly9naXRodWIuY29tL2lvdmlzb3IvYmNjL2Jsb2IvbWFzdGVyL3Rvb2xzL3NsYWJyYXRldG9w LnB5I0wxMjktTDEzOA0KPj4NCj4+IEFsc28sIGluIGJjYywgd2UgaGF2ZSBBUEkgdG8gZGVsZXRl IGFsbCBlbnRyaWVzIGluIGEgbWFwLg0KPj4gICAgaHR0cHM6Ly9naXRodWIuY29tL2lvdmlzb3Iv YmNjL2Jsb2IvbWFzdGVyL3NyYy9jYy9hcGkvQlBGVGFibGUuaCNMMjU3LUwyNjQNCj4+DQo+PiBG b3IgbWFwIHVwZGF0ZSwgYmF0Y2hlZCBvcGVyYXRpb25zIGFsc28gdXNlZnVsIGFzIHNvbWV0aW1l cyBhcHBsaWNhdGlvbnMgbmVlZA0KPj4gdG8gcG9wdWxhdGUgaW5pdGlhbCBtYXBzIHdpdGggbW9y ZSB0aGFuIG9uZSBlbnRyeS4gRm9yIGV4YW1wbGUsIHRoZSBiZWxvdw0KPj4gZXhhbXBsZSBpcyBm cm9tIGtlcm5lbC9zYW1wbGVzL2JwZi94ZHBfcmVkaXJlY3RfY3B1X3VzZXIuYzoNCj4+ICAgIGh0 dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rlci9zYW1wbGVzL2JwZi94 ZHBfcmVkaXJlY3RfY3B1X3VzZXIuYyNMNTQzLUw1NTANCj4+DQo+PiBUaGlzIHBhdGNoIGFkZHJl c3NlcyBhbGwgdGhlIGFib3ZlIHVzZSBjYXNlcy4gVG8gbWFrZSB1YXBpIHN0YWJsZSwgaXQgYWxz bw0KPj4gY292ZXJzIG90aGVyIHBvdGVudGlhbCB1c2UgY2FzZXMuIEZvciBicGYgc3lzY2FsbCBz dWJjb21tYW5kcyBhcmUgaW50cm9kdWNlZDoNCj4+ICAgICAgICAgIEJQRl9NQVBfTE9PS1VQX0JB VENIDQo+PiAgICAgICAgICBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIDQo+PiAgICAg ICAgICBCUEZfTUFQX1VQREFURV9CQVRDSA0KPj4gICAgICAgICAgQlBGX01BUF9ERUxFVEVfQkFU Q0gNCj4+DQo+PiBUaGUgVUFQSSBhdHRyaWJ1dGUgc3RydWN0dXJlIGxvb2tzIGxpa2U6DQo+Pg0K Pj4gICAgICBzdHJ1Y3QgeyAvKiBzdHJ1Y3QgdXNlZCBieSBCUEZfTUFQXypfQkFUQ0ggY29tbWFu ZHMgKi8NCj4+ICAgICAgICAgICAgICBfX3U2NCAgICAgICAgICAgYmF0Y2g7ICAvKiBpbnB1dC9v dXRwdXQ6DQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5wdXQ6 IHN0YXJ0IGJhdGNoLA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq ICAgICAgICAwIHRvIHN0YXJ0IGZyb20gYmVnaW5uaW5nLg0KPj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIG91dHB1dDogbmV4dCBzdGFydCBiYXRjaCwNCj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgIDAgdG8gZW5kIGJhdGNo aW5nLg0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPj4gICAg ICAgICAgICAgIF9fYWxpZ25lZF91NjQgICBrZXlzOw0KPj4gICAgICAgICAgICAgIF9fYWxpZ25l ZF91NjQgICB2YWx1ZXM7DQo+PiAgICAgICAgICAgICAgX191MzIgICAgICAgICAgIGNvdW50OyAg LyogaW5wdXQvb3V0cHV0Og0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIGlucHV0OiAjIG9mIGVsZW1lbnRzIGtleXMvdmFsdWVzLg0KPj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIG91dHB1dDogIyBvZiBmaWxsZWQgZWxlbWVudHMuDQo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQo+PiAgICAgICAgICAg ICAgX191MzIgICAgICAgICAgIG1hcF9mZDsNCj4+ICAgICAgICAgICAgICBfX3U2NCAgICAgICAg ICAgZWxlbV9mbGFnczsNCj4+ICAgICAgICAgICAgICBfX3U2NCAgICAgICAgICAgZmxhZ3M7DQo+ PiAgICAgIH0gYmF0Y2g7DQo+Pg0KPj4gQW4gb3BhcXVlIHZhbHVlICdiYXRjaCcgaXMgdXNlZCBm b3IgdXNlci9rZXJuZWwgc3BhY2UgY29tbXVuaWNhdGlvbg0KPj4gZm9yIHdoZXJlIGluIHRoZSBt YXAgdG8gc3RhcnQgdGhlIG9wZXJhdGlvbiBmb3IgbG9va3VwL2xvb2t1cF9hbmRfZGVsZXRlL2Rl bGV0ZS4NCj4+ICAgIGlucHV0ICdiYXRjaCcgPSAwOiB0byBzdGFydCB0aGUgb3BlcmF0aW9uIGZy b20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFwLg0KPj4gICAgb3V0cHV0ICdiYXRjaCc6IGlmIG5v dCAwLCB0aGUgbmV4dCBpbnB1dCBmb3IgYmF0Y2ggb3BlcmF0aW9uLg0KPj4NCj4+IEZvciBsb29r dXAvbG9va3VwX2FuZF9kZWxldGU6DQo+PiAgICBvcGVyYXRpb246IGxvb2t1cC9sb29rdXBfYW5k X2RlbGV0ZSBzdGFydGluZyBmcm9tIGEgcGFydGljdWxhciAnYmF0Y2gnLg0KPj4gICAgcmV0dXJu Og0KPj4gICAgICAgJ2JhdGNoJyAgICAgICAnY291bnQnICAgICByZXR1cm4gY29kZSAgICAgbWVh bmluZw0KPj4gICAgICAgIDAgICAgICAgICAgICAwICAgICAgICAgICAwICAgICAgICAgICAgICAg RG9uZS4gTm90aGluZyBsZWZ0DQo+PiAgICAgICAgMCAgICAgICAgICAgIDAgICAgICAgICAgIC1F Tk9TUEMgICAgICAgICBubyBzcGFjZSB0byBoYW5kbGUgYmF0Y2ggMA0KPj4gICAgICAgID4gMCAg ICAgICAgICAwICAgICAgICAgICAtRU5PU1BDICAgICAgICAgbm8gc3BhY2UgdG8gaGFuZGxlICdi YXRjaCcNCj4+ICAgICAgICA+IDAgICAgICAgICAgPiAwICAgICAgICAgMCAgICAgICAgICAgICAg IHN0b3BwZWQgcmlnaHQgYmVmb3JlICdiYXRjaCcNCj4+IE5vdGUgdGhhdDoNCj4+ICAgICgxKS4g RXZlbiBpZiByZXR1cm4gY29kZSBpcyAwIGFuZCByZXR1cm4gJ2NvdW50JyA+IDAsIHRoZSByZXR1 cm4gJ2NvdW50JyBtYXkNCj4+ICAgICAgICAgbm90IGJlIGVxdWFsIHRvIGlucHV0ICdjb3VudCcu IFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGlzIG5vIGVub3VnaCBzcGFjZQ0KPj4gICAgICAgICB0 byBoYW5kbGUgYSBiYXRjaC4NCj4+ICAgICgyKS4gSWYgdGhlIHJldHVybiBjb2RlIGlzIGFuIGVy cm9yIGFuZCBub3QgLUVGQVVMVCwNCj4+ICAgICAgICAgJ2JhdGNoJyBpbmRpY2F0ZXMgdGhlIGJh dGNoIGhhcyBpc3N1ZXMgYW5kICdjb3VudCcgaW5kaWNhdGVzIHRoZSBudW1iZXINCj4+ICAgICAg ICAgb2YgZWxlbWVudHMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZC4NCj4+DQo+PiBGb3IgZGVsZXRl Og0KPj4gICAgb3BlcmF0aW9uOiBkZWxldGlvbiBzdGFydGluZyBmcm9tIGEgcGFydGljdWxhciAn YmF0Y2gnLg0KPj4gICAgcmV0dXJuOiAwIG1lYW5zIGV2ZXJ5dGhpbmcgaXMgZGVsZXRlZCBmcm9t ICdiYXRjaCcuDQo+PiAgICAgICAgICAgIGVycm9yIGNvZGUgbWVhbnMgc29tZXRoaW5nIGRlbGV0 aW9uIG5vdCBoYXBwZW5pbmcuDQo+Pg0KPj4gRm9yIHVwZGF0ZToNCj4+ICAgIG9wZXJhdGlvbjog dXBkYXRlICdjb3VudCcgbnVtYmVyIG9mIGVsZW1lbnRzIGluICdrZXlzJy8ndmFsdWVzJy4NCj4+ ICAgIHJldHVybjogMCBtZWFucyBzdWNjZXNzZnVsIHVwZGF0ZXMgZm9yIGFsbCBlbGVtZW50cy4N Cj4+ICAgICAgICAgICAgZXJyb3IgY29kZSwgaWYgbm90IC1FRkFVTFQsICdjb3VudCcgaXMgdGhl IG51bWJlciBvZiBzdWNjZXNzZnVsIHVwZGF0ZXMuDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogWW9u Z2hvbmcgU29uZyA8eWhzQGZiLmNvbT4NCj4+IC0tLQ0KPj4gICBpbmNsdWRlL2xpbnV4L2JwZi5o ICAgICAgfCAgIDkgKysNCj4+ICAgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIHwgIDIyICsrKw0K Pj4gICBrZXJuZWwvYnBmL2hhc2h0YWIuYyAgICAgfCAzMjQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrDQo+PiAgIGtlcm5lbC9icGYvc3lzY2FsbC5jICAgICB8ICA2OCAr KysrKysrKw0KPj4gICA0IGZpbGVzIGNoYW5nZWQsIDQyMyBpbnNlcnRpb25zKCspDQo+Pg0KWy4u Ll0NCj4+ICtzdGF0aWMgaW50DQo+PiArX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRj aChzdHJ1Y3QgYnBmX21hcCAqbWFwLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0ciwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb19kZWxldGUsIGJvb2wgaXNfbHJ1X21h cCkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9v ZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsNCj4+ICsgICAgICAgdTMyIGJ1Y2tldF9jbnQs IHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZSwgcm91bmR1cF9rZXlfc2l6ZTsNCj4+ICsgICAg ICAgdm9pZCAqa2V5cyA9IE5VTEwsICp2YWx1ZXMgPSBOVUxMLCAqdmFsdWUsICpkc3Rfa2V5LCAq ZHN0X3ZhbDsNCj4+ICsgICAgICAgdTY0IGVsZW1fbWFwX2ZsYWdzLCBtYXBfZmxhZ3M7DQo+PiAr ICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkOw0KPj4gKyAgICAgICB2b2lkIF9f dXNlciAqdWtleXMsICp1dmFsdWVzOw0KPj4gKyAgICAgICBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9k ZSAqbjsNCj4+ICsgICAgICAgdTMyIGJhdGNoLCBtYXhfY291bnQ7DQo+PiArICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7DQo+PiArICAgICAgIHN0cnVjdCBodGFiX2VsZW0gKmw7DQo+PiArICAg ICAgIHN0cnVjdCBidWNrZXQgKmI7DQo+PiArICAgICAgIGludCByZXQgPSAwOw0KPj4gKw0KPj4g KyAgICAgICBtYXhfY291bnQgPSBhdHRyLT5iYXRjaC5jb3VudDsNCj4+ICsgICAgICAgaWYgKCFt YXhfY291bnQpDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+PiArDQo+PiArICAgICAg IGVsZW1fbWFwX2ZsYWdzID0gYXR0ci0+YmF0Y2guZWxlbV9mbGFnczsNCj4+ICsgICAgICAgaWYg KChlbGVtX21hcF9mbGFncyAmIH5CUEZfRl9MT0NLKSB8fA0KPj4gKyAgICAgICAgICAgKChlbGVt X21hcF9mbGFncyAmIEJQRl9GX0xPQ0spICYmICFtYXBfdmFsdWVfaGFzX3NwaW5fbG9jayhtYXAp KSkNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsgICAgICAg bWFwX2ZsYWdzID0gYXR0ci0+YmF0Y2guZmxhZ3M7DQo+PiArICAgICAgIGlmIChtYXBfZmxhZ3Mp DQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArICAgICAgIGJh dGNoID0gKHUzMilhdHRyLT5iYXRjaC5iYXRjaDsNCj4+ICsgICAgICAgaWYgKGJhdGNoID49IGh0 YWItPm5fYnVja2V0cykNCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ICsN Cj4+ICsgICAgICAgLyogV2UgY2Fubm90IGRvIGNvcHlfZnJvbV91c2VyIG9yIGNvcHlfdG9fdXNl ciBpbnNpZGUNCj4+ICsgICAgICAgICogdGhlIHJjdV9yZWFkX2xvY2suIEFsbG9jYXRlIGVub3Vn aCBzcGFjZSBoZXJlLg0KPj4gKyAgICAgICAgKi8NCj4+ICsgICAgICAga2V5X3NpemUgPSBodGFi LT5tYXAua2V5X3NpemU7DQo+PiArICAgICAgIHJvdW5kdXBfa2V5X3NpemUgPSByb3VuZF91cCho dGFiLT5tYXAua2V5X3NpemUsIDgpOw0KPj4gKyAgICAgICB2YWx1ZV9zaXplID0gaHRhYi0+bWFw LnZhbHVlX3NpemU7DQo+PiArICAgICAgIGtleXMgPSBrdm1hbGxvYyhrZXlfc2l6ZSAqIG1heF9j b3VudCwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pOw0KPj4gKyAgICAgICB2YWx1ZXMgPSBrdm1h bGxvYyh2YWx1ZV9zaXplICogbWF4X2NvdW50LCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7DQo+ PiArICAgICAgIGlmICgha2V5cyB8fCAhdmFsdWVzKSB7DQo+PiArICAgICAgICAgICAgICAgcmV0 ID0gLUVOT01FTTsNCj4+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsgICAgICAgfQ0K Pj4gKw0KPj4gKyAgICAgICBkc3Rfa2V5ID0ga2V5czsNCj4+ICsgICAgICAgZHN0X3ZhbCA9IHZh bHVlczsNCj4+ICsgICAgICAgdG90YWwgPSAwOw0KPj4gKw0KPj4gKyAgICAgICBwcmVlbXB0X2Rp c2FibGUoKTsNCj4+ICsgICAgICAgdGhpc19jcHVfaW5jKGJwZl9wcm9nX2FjdGl2ZSk7DQo+PiAr ICAgICAgIHJjdV9yZWFkX2xvY2soKTsNCj4+ICsNCj4+ICthZ2FpbjoNCj4+ICsgICAgICAgYiA9 ICZodGFiLT5idWNrZXRzW2JhdGNoXTsNCj4+ICsgICAgICAgaGVhZCA9ICZiLT5oZWFkOw0KPj4g KyAgICAgICByYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmItPmxvY2ssIGZsYWdzKTsNCj4+ICsNCj4g DQo+IFdvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGF2b2lkIHRoYXQgbG9jayB3aGVuIHdlJ3JlIG5v dCBkZWxldGluZyAoanVzdA0KPiBiYXRjaGluZyBsb29rdXApPyBUbyBiZSBob25lc3QgSSBkb24n dCBob3cgbXVjaCBpbXBhY3Qgd291bGQgaGF2ZSB0bw0KPiBncmFiIHRoYXQgbG9jayB3aGVuIGNv bmN1cnJlbnQgYWRkaXRpb25zIGFyZSBoYXBwZW5pbmcgaW4gYSBicGYNCj4gcHJvZ3JhbS4NCg0K WWVzLCBpdCBpcyBwb3NzaWJsZS4NCkFub3RoZXIgcmVhc29uIEkgdG9vayB0aGUgbG9jayB0byBl bnN1cmUgdGhhdCB3aGVuIEkgdGVzdGVkDQp0aGF0IGJ1Y2tldF9jbnQgaXMgc21hbGxlciBvciBl cXVhbCB0byB0aGUgcmVtYWluaW5nIGJ1ZmZlciBzaXplLA0KaXQgc2hvdWxkIHJlbWFpbiB0aGF0 IHdheSBkdXJpbmcgc3Vic2VxdWVudCBlbGVtIGNvcHlpbmcuDQpXaXRob3V0IGxvY2ssIGlmIGlu IHBhcmFsbGVsIHNvbWUgdXBkYXRlcyBhZGRlZCBzb21lDQplbGVtZW50cyBhbmQgdGhlcmUgd2ls bCBiZSBubyBlbm91Z2ggc3BhY2UgdG8gY29weS4NCg0KQnV0IG9uIHRoZSBvdGhlciBoYW5kLCBJ IHRoaW5rIGl0IGlzIG9rYXkgdG8ganVzdCBzdG9wDQp3aGVuIHRoZSBidWZmZXIgaXMgZnVsbCBh bmQgbWlzcyBhIGZldyBlbGVtZW50cy4NCg0KPiANCj4+ICsgICAgICAgYnVja2V0X2NudCA9IDA7 DQo+PiArICAgICAgIGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBo YXNoX25vZGUpDQo+PiArICAgICAgICAgICAgICAgYnVja2V0X2NudCsrOw0KPj4gKw0KPj4gKyAg ICAgICBpZiAoYnVja2V0X2NudCA+IChtYXhfY291bnQgLSB0b3RhbCkpIHsNCj4+ICsgICAgICAg ICAgICAgICBpZiAodG90YWwgPT0gMCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9 IC1FTk9TUEM7DQo+PiArICAgICAgICAgICAgICAgZ290byBhZnRlcl9sb29wOw0KPj4gKyAgICAg ICB9DQo+PiArDQo+PiArICAgICAgIGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBu LCBoZWFkLCBoYXNoX25vZGUpIHsNCj4+ICsgICAgICAgICAgICAgICBtZW1jcHkoZHN0X2tleSwg bC0+a2V5LCBrZXlfc2l6ZSk7DQo+PiArDQo+PiArICAgICAgICAgICAgICAgdmFsdWUgPSBsLT5r ZXkgKyByb3VuZHVwX2tleV9zaXplOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChlbGVtX21hcF9m bGFncyAmIEJQRl9GX0xPQ0spDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb3B5X21hcF92 YWx1ZV9sb2NrZWQobWFwLCBkc3RfdmFsLCB2YWx1ZSwgdHJ1ZSk7DQo+PiArICAgICAgICAgICAg ICAgZWxzZQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29weV9tYXBfdmFsdWUobWFwLCBk c3RfdmFsLCB2YWx1ZSk7DQo+PiArICAgICAgICAgICAgICAgY2hlY2tfYW5kX2luaXRfbWFwX2xv Y2sobWFwLCBkc3RfdmFsKTsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBkc3Rfa2V5ICs9IGtl eV9zaXplOw0KPj4gKyAgICAgICAgICAgICAgIGRzdF92YWwgKz0gdmFsdWVfc2l6ZTsNCj4+ICsg ICAgICAgICAgICAgICB0b3RhbCsrOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGlm IChkb19kZWxldGUpIHsNCj4+ICsgICAgICAgICAgICAgICBobGlzdF9udWxsc19mb3JfZWFjaF9l bnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICBobGlzdF9udWxsc19kZWxfcmN1KCZsLT5oYXNoX25vZGUpOw0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGlzX2xydV9tYXApDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJwZl9scnVfcHVzaF9mcmVlKCZodGFiLT5scnUsICZsLT5scnVfbm9kZSk7DQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyZWVfaHRhYl9lbGVtKGh0YWIsIGwpOw0KPj4gKyAgICAgICAgICAgICAgIH0NCj4+ ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICBiYXRjaCsrOw0KPj4gKyAgICAgICBpZiAoYmF0 Y2ggPj0gaHRhYi0+bl9idWNrZXRzKSB7DQo+PiArICAgICAgICAgICAgICAgYmF0Y2ggPSAwOw0K Pj4gKyAgICAgICAgICAgICAgIGdvdG8gYWZ0ZXJfbG9vcDsNCj4+ICsgICAgICAgfQ0KPj4gKw0K Pj4gKyAgICAgICByYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+bG9jaywgZmxhZ3MpOw0K Pj4gKyAgICAgICBnb3RvIGFnYWluOw0KPj4gKw0KPj4gK2FmdGVyX2xvb3A6DQo+PiArICAgICAg IHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5sb2NrLCBmbGFncyk7DQo+PiArDQo+PiAr ICAgICAgIHJjdV9yZWFkX3VubG9jaygpOw0KPj4gKyAgICAgICB0aGlzX2NwdV9kZWMoYnBmX3By b2dfYWN0aXZlKTsNCj4+ICsgICAgICAgcHJlZW1wdF9lbmFibGUoKTsNCj4+ICsNCj4+ICsgICAg ICAgLyogY29weSBkYXRhIGJhY2sgdG8gdXNlciAqLw0KPj4gKyAgICAgICB1a2V5cyA9IHU2NF90 b191c2VyX3B0cihhdHRyLT5iYXRjaC5rZXlzKTsNCj4+ICsgICAgICAgdXZhbHVlcyA9IHU2NF90 b191c2VyX3B0cihhdHRyLT5iYXRjaC52YWx1ZXMpOw0KPj4gKyAgICAgICBpZiAocHV0X3VzZXIo YmF0Y2gsICZ1YXR0ci0+YmF0Y2guYmF0Y2gpIHx8DQo+PiArICAgICAgICAgICBjb3B5X3RvX3Vz ZXIodWtleXMsIGtleXMsIHRvdGFsICoga2V5X3NpemUpIHx8DQo+PiArICAgICAgICAgICBjb3B5 X3RvX3VzZXIodXZhbHVlcywgdmFsdWVzLCB0b3RhbCAqIHZhbHVlX3NpemUpIHx8DQo+PiArICAg ICAgICAgICBwdXRfdXNlcih0b3RhbCwgJnVhdHRyLT5iYXRjaC5jb3VudCkpDQo+PiArICAgICAg ICAgICAgICAgcmV0ID0gLUVGQVVMVDsNCj4+ICsNCj4+ICtvdXQ6DQo+PiArICAgICAgIGt2ZnJl ZShrZXlzKTsNCj4+ICsgICAgICAga3ZmcmVlKHZhbHVlcyk7DQo+PiArICAgICAgIHJldHVybiBy ZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICtfX2h0YWJfbWFwX3VwZGF0ZV9i YXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsIGJv b2wgaXNfbHJ1X21hcCkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9 IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsNCj4+ICsgICAgICAgdTMy IGNvdW50LCBtYXhfY291bnQsIGtleV9zaXplLCByb3VuZHVwX2tleV9zaXplLCB2YWx1ZV9zaXpl Ow0KPj4gKyAgICAgICB1NjQgZWxlbV9tYXBfZmxhZ3MsIG1hcF9mbGFnczsNCj4+ICsgICAgICAg dm9pZCBfX3VzZXIgKnVrZXksICp1dmFsdWU7DQo+PiArICAgICAgIHZvaWQgKmtleSwgKnZhbHVl Ow0KPj4gKyAgICAgICBpbnQgcmV0ID0gMDsNCj4+ICsNCj4+ICsgICAgICAgbWF4X2NvdW50ID0g YXR0ci0+YmF0Y2guY291bnQ7DQo+PiArICAgICAgIGlmICghbWF4X2NvdW50KQ0KPj4gKyAgICAg ICAgICAgICAgIHJldHVybiAwOw0KPj4gKw0KPj4gKyAgICAgICBlbGVtX21hcF9mbGFncyA9IGF0 dHItPmJhdGNoLmVsZW1fZmxhZ3M7DQo+PiArICAgICAgIGlmICgoZWxlbV9tYXBfZmxhZ3MgJiBC UEZfRl9MT0NLKSAmJiAhbWFwX3ZhbHVlX2hhc19zcGluX2xvY2sobWFwKSkNCj4+ICsgICAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsgICAgICAgbWFwX2ZsYWdzID0gYXR0 ci0+YmF0Y2guZmxhZ3M7DQo+PiArICAgICAgIGlmIChtYXBfZmxhZ3MpDQo+PiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArICAgICAgIGtleV9zaXplID0gaHRhYi0+ bWFwLmtleV9zaXplOw0KPj4gKyAgICAgICByb3VuZHVwX2tleV9zaXplID0gcm91bmRfdXAoaHRh Yi0+bWFwLmtleV9zaXplLCA4KTsNCj4+ICsgICAgICAgdmFsdWVfc2l6ZSA9IGh0YWItPm1hcC52 YWx1ZV9zaXplOw0KPj4gKyAgICAgICBrZXkgPSBrbWFsbG9jKGtleV9zaXplLCBHRlBfVVNFUiB8 IF9fR0ZQX05PV0FSTik7DQo+PiArICAgICAgIHZhbHVlID0ga21hbGxvYyh2YWx1ZV9zaXplLCBH RlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7DQo+PiArICAgICAgIGlmICgha2V5IHx8ICF2YWx1ZSkg ew0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07DQo+PiArICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgdWtleSA9IHU2NF90b191 c2VyX3B0cihhdHRyLT5iYXRjaC5rZXlzKTsNCj4+ICsgICAgICAgdXZhbHVlID0gdTY0X3RvX3Vz ZXJfcHRyKGF0dHItPmJhdGNoLnZhbHVlcyk7DQo+PiArICAgICAgIGZvciAoY291bnQgPSAwOyBj b3VudCA8IG1heF9jb3VudDsgY291bnQrKykgew0KPj4gKyAgICAgICAgICAgICAgIGlmIChjb3B5 X2Zyb21fdXNlcihrZXksIHVrZXkgKyBjb3VudCAqIGtleV9zaXplLCBrZXlfc2l6ZSkgfHwNCj4+ ICsgICAgICAgICAgICAgICAgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHV2YWx1ZSArIGNvdW50 ICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IHJldCA9IC1FRkFVTFQ7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsg ICAgICAgICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAgICAgICAgcHJlZW1wdF9kaXNhYmxl KCk7DQo+PiArICAgICAgICAgICAgICAgX190aGlzX2NwdV9pbmMoYnBmX3Byb2dfYWN0aXZlKTsN Cj4+ICsgICAgICAgICAgICAgICByY3VfcmVhZF9sb2NrKCk7DQo+PiArICAgICAgICAgICAgICAg aWYgKGlzX2xydV9tYXApDQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBodGFiX2xy dV9tYXBfdXBkYXRlX2VsZW0obWFwLCBrZXksIHZhbHVlLCBlbGVtX21hcF9mbGFncyk7DQo+PiAr ICAgICAgICAgICAgICAgZWxzZQ0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gaHRh Yl9tYXBfdXBkYXRlX2VsZW0obWFwLCBrZXksIHZhbHVlLCBlbGVtX21hcF9mbGFncyk7DQo+PiAr ICAgICAgICAgICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7DQo+PiArICAgICAgICAgICAgICAgX190 aGlzX2NwdV9kZWMoYnBmX3Byb2dfYWN0aXZlKTsNCj4+ICsgICAgICAgICAgICAgICBwcmVlbXB0 X2VuYWJsZSgpOw0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlmIChwdXRfdXNlcihjb3VudCwgJnVhdHRyLT5iYXRjaC5jb3Vu dCkpDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgICAgICAgICB9DQo+ PiArICAgICAgIH0NCj4+ICsNCj4+ICtvdXQ6DQo+PiArICAgICAgIGtmcmVlKGtleSk7DQo+PiAr ICAgICAgIGtmcmVlKHZhbHVlKTsNCj4+ICsgICAgICAgcmV0dXJuIHJldDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGludA0KPj4gK19faHRhYl9tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZf bWFwICptYXAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0 ciAqYXR0ciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNl ciAqdWF0dHIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2xydV9tYXApDQo+ PiArew0KPj4gKyAgICAgICBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFw LCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7DQo+PiArICAgICAgIHU2NCBlbGVtX21hcF9mbGFncywg bWFwX2ZsYWdzOw0KPj4gKyAgICAgICBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDsNCj4+ ICsgICAgICAgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47DQo+PiArICAgICAgIHUzMiBiYXRj aCwgbWF4X2NvdW50Ow0KPj4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gKyAgICAg ICBzdHJ1Y3QgaHRhYl9lbGVtICpsOw0KPj4gKyAgICAgICBzdHJ1Y3QgYnVja2V0ICpiOw0KPj4g Kw0KPj4gKyAgICAgICBlbGVtX21hcF9mbGFncyA9IGF0dHItPmJhdGNoLmVsZW1fZmxhZ3M7DQo+ PiArICAgICAgIG1hcF9mbGFncyA9IGF0dHItPmJhdGNoLmZsYWdzOw0KPj4gKyAgICAgICBpZiAo ZWxlbV9tYXBfZmxhZ3MgfHwgbWFwX2ZsYWdzKQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOw0KPj4gKw0KPj4gKyAgICAgICBtYXhfY291bnQgPSBhdHRyLT5iYXRjaC5jb3VudDsN Cj4+ICsgICAgICAgYmF0Y2ggPSAodTMyKWF0dHItPmJhdGNoLmJhdGNoOw0KPj4gKyAgICAgICBp ZiAobWF4X2NvdW50IHx8IGJhdGNoID49IGh0YWItPm5fYnVja2V0cykNCj4+ICsgICAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsgICAgICAgcHJlZW1wdF9kaXNhYmxlKCk7 DQo+PiArICAgICAgIF9fdGhpc19jcHVfaW5jKGJwZl9wcm9nX2FjdGl2ZSk7DQo+PiArICAgICAg IHJjdV9yZWFkX2xvY2soKTsNCj4+ICsNCj4+ICthZ2FpbjoNCj4+ICsgICAgICAgYiA9ICZodGFi LT5idWNrZXRzW2JhdGNoXTsNCj4+ICsgICAgICAgaGVhZCA9ICZiLT5oZWFkOw0KPj4gKyAgICAg ICByYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmItPmxvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICsgICAg ICAgaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkg ew0KPj4gKyAgICAgICAgICAgICAgIGhsaXN0X251bGxzX2RlbF9yY3UoJmwtPmhhc2hfbm9kZSk7 DQo+PiArICAgICAgICAgICAgICAgaWYgKGlzX2xydV9tYXApDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICBicGZfbHJ1X3B1c2hfZnJlZSgmaHRhYi0+bHJ1LCAmbC0+bHJ1X25vZGUpOw0KPj4g KyAgICAgICAgICAgICAgIGVsc2UNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfaHRh Yl9lbGVtKGh0YWIsIGwpOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIGJhdGNoKys7 DQo+PiArICAgICAgIGlmIChiYXRjaCA+PSBodGFiLT5uX2J1Y2tldHMpDQo+PiArICAgICAgICAg ICAgICAgZ290byBvdXQ7DQo+PiArDQo+PiArICAgICAgIHJhd19zcGluX3VubG9ja19pcnFyZXN0 b3JlKCZiLT5sb2NrLCBmbGFncyk7DQo+PiArICAgICAgIGdvdG8gYWdhaW47DQo+PiArDQo+PiAr b3V0Og0KPj4gKyAgICAgICByYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+bG9jaywgZmxh Z3MpOw0KPj4gKyAgICAgICByY3VfcmVhZF91bmxvY2soKTsNCj4+ICsgICAgICAgX190aGlzX2Nw dV9kZWMoYnBmX3Byb2dfYWN0aXZlKTsNCj4+ICsgICAgICAgcHJlZW1wdF9lbmFibGUoKTsNCj4+ ICsNCj4+ICsgICAgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ ICtodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24g YnBmX2F0dHIgKmF0dHIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgdW5pb24gYnBmX2F0dHIg X191c2VyICp1YXR0cikNCj4+ICt7DQo+PiArICAgICAgIHJldHVybiBfX2h0YWJfbWFwX2xvb2t1 cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLA0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICtodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRj aChzdHJ1Y3QgYnBmX21hcCAqbWFwLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKQ0KPj4gK3sNCj4+ICsgICAg ICAgcmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1 YXR0ciwgdHJ1ZSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmFsc2UpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiAraHRhYl9t YXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRy ICphdHRyLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAq dWF0dHIpDQo+PiArew0KPj4gKyAgICAgICByZXR1cm4gX19odGFiX21hcF91cGRhdGVfYmF0Y2go bWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+ PiAraHRhYl9tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cikNCj4+ICt7DQo+PiArICAg ICAgIHJldHVybiBfX2h0YWJfbWFwX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxz ZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICtodGFiX2xydV9tYXBfbG9va3Vw X2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLA0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRy KQ0KPj4gK3sNCj4+ICsgICAgICAgcmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVf YmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50DQo+PiAraHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBi cGZfbWFwICptYXAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cikNCj4+ICt7DQo+PiArICAgICAg IHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0 dHIsIHRydWUsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRydWUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiAraHRhYl9scnVf bWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0 ciAqYXR0ciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gYnBmX2F0dHIgX191 c2VyICp1YXR0cikNCj4+ICt7DQo+PiArICAgICAgIHJldHVybiBfX2h0YWJfbWFwX3VwZGF0ZV9i YXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlu dA0KPj4gK2h0YWJfbHJ1X21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIp DQo+PiArew0KPj4gKyAgICAgICByZXR1cm4gX19odGFiX21hcF9kZWxldGVfYmF0Y2gobWFwLCBh dHRyLCB1YXR0ciwgdHJ1ZSk7DQo+PiArfQ0KPj4gKw0KPj4gICBjb25zdCBzdHJ1Y3QgYnBmX21h cF9vcHMgaHRhYl9tYXBfb3BzID0gew0KPj4gICAgICAgICAgLm1hcF9hbGxvY19jaGVjayA9IGh0 YWJfbWFwX2FsbG9jX2NoZWNrLA0KPj4gICAgICAgICAgLm1hcF9hbGxvYyA9IGh0YWJfbWFwX2Fs bG9jLA0KPj4gQEAgLTEyNDIsNiArMTU1OCwxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMg aHRhYl9tYXBfb3BzID0gew0KPj4gICAgICAgICAgLm1hcF9kZWxldGVfZWxlbSA9IGh0YWJfbWFw X2RlbGV0ZV9lbGVtLA0KPj4gICAgICAgICAgLm1hcF9nZW5fbG9va3VwID0gaHRhYl9tYXBfZ2Vu X2xvb2t1cCwNCj4+ICAgICAgICAgIC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9z aG93X2VsZW0sDQo+PiArICAgICAgIC5tYXBfbG9va3VwX2JhdGNoID0gaHRhYl9tYXBfbG9va3Vw X2JhdGNoLA0KPj4gKyAgICAgICAubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoID0gaHRhYl9t YXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gsDQo+PiArICAgICAgIC5tYXBfdXBkYXRlX2JhdGNo ID0gaHRhYl9tYXBfdXBkYXRlX2JhdGNoLA0KPj4gKyAgICAgICAubWFwX2RlbGV0ZV9iYXRjaCA9 IGh0YWJfbWFwX2RlbGV0ZV9iYXRjaCwNCj4+ICAgfTsNCj4+DQo+PiAgIGNvbnN0IHN0cnVjdCBi cGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0gew0KPj4gQEAgLTEyNTUsNiArMTU3NSwxMCBA QCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHsNCj4+ICAgICAg ICAgIC5tYXBfZGVsZXRlX2VsZW0gPSBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0sDQo+PiAgICAg ICAgICAubWFwX2dlbl9sb29rdXAgPSBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cCwNCj4+ICAgICAg ICAgIC5tYXBfc2VxX3Nob3dfZWxlbSA9IGh0YWJfbWFwX3NlcV9zaG93X2VsZW0sDQo+PiArICAg ICAgIC5tYXBfbG9va3VwX2JhdGNoID0gaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCwNCj4+ICsg ICAgICAgLm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCA9IGh0YWJfbHJ1X21hcF9sb29rdXBf YW5kX2RlbGV0ZV9iYXRjaCwNCj4+ICsgICAgICAgLm1hcF91cGRhdGVfYmF0Y2ggPSBodGFiX2xy dV9tYXBfdXBkYXRlX2JhdGNoLA0KPj4gKyAgICAgICAubWFwX2RlbGV0ZV9iYXRjaCA9IGh0YWJf bHJ1X21hcF9kZWxldGVfYmF0Y2gsDQo+PiAgIH07DQo+Pg0KPj4gICAvKiBDYWxsZWQgZnJvbSBl QlBGIHByb2dyYW0gKi8NCj4+IGRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tl cm5lbC9icGYvc3lzY2FsbC5jDQo+PiBpbmRleCBjYTYwZWFmYTY5MjIuLmU4M2JkZjdlZmJkOCAx MDA2NDQNCj4+IC0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jDQo+PiArKysgYi9rZXJuZWwvYnBm L3N5c2NhbGwuYw0KPj4gQEAgLTI4MTYsNiArMjgxNiw2MiBAQCBzdGF0aWMgaW50IGJwZl90YXNr X2ZkX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLA0KPj4gICAgICAgICAgcmV0dXJu IGVycjsNCj4+ICAgfQ0KPj4NCj4+ICsjZGVmaW5lIEJQRl9NQVBfQkFUQ0hfTEFTVF9GSUVMRCBi YXRjaC5mbGFncw0KPj4gKw0KPj4gKyNkZWZpbmUgQlBGX0RPX0JBVENIKGZuKSAgICAgICAgICAg ICAgICAgICAgICAgXA0KPj4gKyAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgICAgIGlmICghZm4pIHsgICAgICAgICAgICAgICAg ICAgICAgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT1RTVVBQOyAgICAg ICAgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfcHV0OyAgICAgICAgICAg XA0KPj4gKyAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K Pj4gKyAgICAgICAgICAgICAgIGVyciA9IGZuKG1hcCwgYXR0ciwgdWF0dHIpOyAgICAgXA0KPj4g KyAgICAgICB9IHdoaWxlKDApDQo+PiArDQo+PiArc3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNo KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGNtZCkNCj4+ICt7DQo+PiArICAgICAgIHN0cnVjdCBicGZfbWFwICptYXA7 DQo+PiArICAgICAgIGludCBlcnIsIHVmZDsNCj4+ICsgICAgICAgc3RydWN0IGZkIGY7DQo+PiAr DQo+PiArICAgICAgIGlmIChDSEVDS19BVFRSKEJQRl9NQVBfQkFUQ0gpKQ0KPj4gKyAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKyAgICAgICB1ZmQgPSBhdHRyLT5iYXRj aC5tYXBfZmQ7DQo+PiArICAgICAgIGYgPSBmZGdldCh1ZmQpOw0KPj4gKyAgICAgICBtYXAgPSBf X2JwZl9tYXBfZ2V0KGYpOw0KPj4gKyAgICAgICBpZiAoSVNfRVJSKG1hcCkpDQo+PiArICAgICAg ICAgICAgICAgcmV0dXJuIFBUUl9FUlIobWFwKTsNCj4+ICsNCj4+ICsgICAgICAgaWYgKChjbWQg PT0gQlBGX01BUF9MT09LVVBfQkFUQ0ggfHwNCj4+ICsgICAgICAgICAgICBjbWQgPT0gQlBGX01B UF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCkgJiYNCj4+ICsgICAgICAgICAgICEobWFwX2dldF9z eXNfcGVybXMobWFwLCBmKSAmIEZNT0RFX0NBTl9SRUFEKSkgew0KPj4gKyAgICAgICAgICAgICAg IGVyciA9IC1FUEVSTTsNCj4+ICsgICAgICAgICAgICAgICBnb3RvIGVycl9wdXQ7DQo+PiArICAg ICAgIH0NCj4+ICsNCj4+ICsgICAgICAgaWYgKGNtZCAhPSBCUEZfTUFQX0xPT0tVUF9CQVRDSCAm Jg0KPj4gKyAgICAgICAgICAgIShtYXBfZ2V0X3N5c19wZXJtcyhtYXAsIGYpICYgRk1PREVfQ0FO X1dSSVRFKSkgew0KPj4gKyAgICAgICAgICAgICAgIGVyciA9IC1FUEVSTTsNCj4+ICsgICAgICAg ICAgICAgICBnb3RvIGVycl9wdXQ7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgaWYg KGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9CQVRDSCkgew0KPj4gKyAgICAgICAgICAgICAgIEJQRl9E T19CQVRDSChtYXAtPm9wcy0+bWFwX2xvb2t1cF9iYXRjaCk7DQo+PiArICAgICAgIH0gZWxzZSBp ZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpIHsNCj4+ICsgICAgICAg ICAgICAgICBCUEZfRE9fQkFUQ0gobWFwLT5vcHMtPm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRj aCk7DQo+PiArICAgICAgIH0gZWxzZSBpZiAoY21kID09IEJQRl9NQVBfVVBEQVRFX0JBVENIKSB7 DQo+PiArICAgICAgICAgICAgICAgQlBGX0RPX0JBVENIKG1hcC0+b3BzLT5tYXBfdXBkYXRlX2Jh dGNoKTsNCj4+ICsgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICAgICBCUEZfRE9fQkFU Q0gobWFwLT5vcHMtPm1hcF9kZWxldGVfYmF0Y2gpOw0KPj4gKyAgICAgICB9DQo+PiArDQo+PiAr ZXJyX3B1dDoNCj4+ICsgICAgICAgZmRwdXQoZik7DQo+PiArICAgICAgIHJldHVybiBlcnI7DQo+ PiArfQ0KPj4gKw0KPj4gICBTWVNDQUxMX0RFRklORTMoYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBm X2F0dHIgX191c2VyICosIHVhdHRyLCB1bnNpZ25lZCBpbnQsIHNpemUpDQo+PiAgIHsNCj4+ICAg ICAgICAgIHVuaW9uIGJwZl9hdHRyIGF0dHIgPSB7fTsNCj4+IEBAIC0yOTEzLDYgKzI5NjksMTgg QEAgU1lTQ0FMTF9ERUZJTkUzKGJwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAq LCB1YXR0ciwgdW5zaWduZWQgaW50LCBzaXoNCj4+ICAgICAgICAgIGNhc2UgQlBGX01BUF9MT09L VVBfQU5EX0RFTEVURV9FTEVNOg0KPj4gICAgICAgICAgICAgICAgICBlcnIgPSBtYXBfbG9va3Vw X2FuZF9kZWxldGVfZWxlbSgmYXR0cik7DQo+PiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4g KyAgICAgICBjYXNlIEJQRl9NQVBfTE9PS1VQX0JBVENIOg0KPj4gKyAgICAgICAgICAgICAgIGVy ciA9IGJwZl9tYXBfZG9fYmF0Y2goJmF0dHIsIHVhdHRyLCBCUEZfTUFQX0xPT0tVUF9CQVRDSCk7 DQo+PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgQlBGX01BUF9MT09L VVBfQU5EX0RFTEVURV9CQVRDSDoNCj4+ICsgICAgICAgICAgICAgICBlcnIgPSBicGZfbWFwX2Rv X2JhdGNoKCZhdHRyLCB1YXR0ciwgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCk7DQo+ PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgIGNhc2UgQlBGX01BUF9VUERBVEVf QkFUQ0g6DQo+PiArICAgICAgICAgICAgICAgZXJyID0gYnBmX21hcF9kb19iYXRjaCgmYXR0ciwg dWF0dHIsIEJQRl9NQVBfVVBEQVRFX0JBVENIKTsNCj4+ICsgICAgICAgICAgICAgICBicmVhazsN Cj4+ICsgICAgICAgY2FzZSBCUEZfTUFQX0RFTEVURV9CQVRDSDoNCj4+ICsgICAgICAgICAgICAg ICBlcnIgPSBicGZfbWFwX2RvX2JhdGNoKCZhdHRyLCB1YXR0ciwgQlBGX01BUF9ERUxFVEVfQkFU Q0gpOw0KPj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gICAgICAgICAgZGVmYXVsdDoNCj4+ ICAgICAgICAgICAgICAgICAgZXJyID0gLUVJTlZBTDsNCj4+ICAgICAgICAgICAgICAgICAgYnJl YWs7DQo+PiAtLQ0KPj4gMi4xNy4xDQo+Pg0KPiANCj4gSW4gZ2VuZXJhbCBpdCdkIGJlIGdyZWF0 IGlmIHdlIGNvdWxkIGV4cHJlc3MgdGhlIG9sZCBmdW5jdGlvbnMNCj4gKGdldF9uZXh0X2tleSwg bG9va3VwLCBkZWxldGUpIGluIHRlcm1zIG9mIHRoaXMgbmV3IG9uZXMgc28gd2UgIGF2b2lkDQo+ IGhhdmluZyB0d2ljZSB0aGUgY29kZS4NCg0KVGhleSBkbyBzaGFyZSBzb21lIGluaXRpYWwgY2hl Y2tpbmdzIGF0IGxlYXN0LiBMZXQgbWUgY2hlY2sgaG93IEkgY2FuIGRvIA0KdGhpcy4NCg0KPiAN Cj4gQWxzbyB0byBiZSBob25lc3QgSSBkb24ndCBzZWUgaG93IGJhdGNoaW5nIHVwZGF0ZXMgd291 bGQgYmUgdXNlZnVsLA0KPiBtYXliZSBqdXN0IHRyeSB0byBkbyBiYXRjaGluZyBsb29rdXAgYW5k IGxvb2t1cF9hbmRfZGVsZXRlPw0KDQpXZSBkbyBoYXZlIGEgdXNlIGNhc2UgZm9yIGJhdGNoaW5n IHVwZGF0ZXMuDQpJbnRlcm5hbGx5IHdlIGhhdmUgYSBicGYgYmFzZWQgZmlyZXdhbGwuIGl0IHVz ZXMgbWFwLWluLW1hcC4NClRoZSBpbm5lciBtYXAgaXMgYSBoYXNoIHRhYmxlIHdpdGggdGhvdXNh bmRzIG9mIGVudHJpZXMuDQpQZXJpb2RpY2FsbHkgc29tZSB1c2VyIHNwYWNlIGFsZXJ0cyB3aWxs IHRyaWdnZXIgZmlyZXdhbGwNCnJ1bGUgY2hhbmdlcy4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IG1h cCBpcyBwcmVwYXJlZA0KYW5kIHRob3VzYW5kcyBvZiBicGYgdXBkYXRlIHN5c2NhbGxzIGFyZSBj YWxsZWQgdG8NCnVwZGF0ZSB0aGUgbmV3IG1hcC4gT25jZSB0aGUgbmV3IG1hcCBpcyByZWFkeSwN CmEgZmluYWwgdXBkYXRlIGludG8gb3V0ZXIgbWFwIHdpbGwgZW5hYmxlIHVzaW5nIHRoZQ0KbmV3 IG1hcC4NCg0KUmVwbGFjaW5nIHRoZXNlIHRob3VzYW5kcyBtYXAgdXBkYXRlIHN5c2NhbGxzIHdp dGgganVzdA0Kb25lIG1hcCBiYXRjaCB1cGRhdGUgaXMgc3RpbGwgYSB2ZXJ5IGdvb2Qgb3B0aW1p emF0aW9uLg0K