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=-8.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 991C5C32771 for ; Mon, 20 Jan 2020 06:17:48 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 515492073A for ; Mon, 20 Jan 2020 06:17:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=bushare.onmicrosoft.com header.i=@bushare.onmicrosoft.com header.b="IEBvsIn4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 515492073A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bu.edu Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:59168 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQNf-0000FL-1m for qemu-devel@archiver.kernel.org; Mon, 20 Jan 2020 01:17:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35283) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1Z-00076G-MA for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1X-0006OI-8k for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:57 -0500 Received: from mail-bn7nam10on2139.outbound.protection.outlook.com ([40.107.92.139]:29665 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1X-0006O5-3E for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:55 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gls42UdY5XeYoUcZv5AMmY9Q4TCu/ua4eGelN6h9/G6fgHV4jkHFvsvpRjxzfPj5TdfWkKy4+FZgcmQStoyb9RBh1RzjqJ+tcv1fGK8aH/Dfz0afCyLkel4BkejhNUUgcByWLOrZdqRRdNajzfrn13+RmhD69QtGAPEa6CSj6wnsXrgLTabFDn8ht3Qh8blix8Bnz2eLzz36BpZsIbodjzmzLV5uCLutDe8v7n5KrmQmGXYGs4HOBuaZstDXmhZ499r86w+25TewcVS4AF0JtS+kkQPHdA4JLl1+I+XoAqcqmvscX9wvp4Dtz9b91ne2UbiqUmFDwM+c7NmOdOjf5A== 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=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=euwZNbzrqXV5c2IlbEJdauc1eJRVSxeer55D2oO9zgTUOpkf2dIk48nnd1Y9cJ1A4PKPqlijN0Us3dA9xLTWcSJzw/wmuzHmwHKvKfAkB35W7yj8gkrG9vH1svnvbPQnalVlzBkyaSXiWVpqspl/mxmJ5uRahQtBTb4UxlM5Ed4ddryRPpP2ZYbpfht2IxdpCbDx3gefunohtDmSot4kOeu2a2XXPsSDqYw8x0vSfQdqa/yXVdCARSTSeZhIhNzner0qNl6GvAXZTuCR9hMWkV3k0ets8mtjsyTrU9Qy++B30ATQOhce4jsMUIfaMFQ5fT6vQk8F+7Qbu2Bf/TYnPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=IEBvsIn4u3TS/6zyULrQrmWWnz2TjZMCkwoiS9/pqAglM3qgpHAdl+UKJYMv8/85O10XxGQvOfhNwidFx5qmFBjyk2inMRAmCuwcEQbMzRHOn6MCweXF+FC5zL33LgoU/KNAohu9M8WFfU7t6HYch9zbAoZqHyCyiLdif182/yY= Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:54 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:54 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:52 +0000 From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 09/20] libqos: move useful qos-test funcs to qos_external Thread-Topic: [PATCH v7 09/20] libqos: move useful qos-test funcs to qos_external Thread-Index: AQHVz1Yir2myrnXFdkqc+v/+c4EMnw== Date: Mon, 20 Jan 2020 05:54:53 +0000 Message-ID: <20200120055410.22322-13-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6716bba8-73d8-4b1c-9975-08d79d6d4509 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2887; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(30864003)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4T0OiKlKjKCg1zaZ4Q84IM7pZ+n7/KnhZ2kCecWZgfoTT88om80zGvkFrYYj3OGy/0jqUILUt1x1xoxCQKstbLsPd7rowXe7Fhx821yq8YLlp7cY7uuZWOWCSAIxoqtaEkp+LdYczEJd0tFoKmujw0HOc7kXSk3Yw0dcZWa3JV7uvGZwL3VRM81PhvyH09IYOqpVbLQlSBKfkztUq3saSrCQO7t2+NSAE1vK9EQS6aKUN7a8y4Us9o+vgQWwwcdOndnUsNJMEITO0qne/8tveNbBHkFgIIJM15hUyOuz2BzsjNN/pYkZwiNUrt1407Kza/MMugYDbKg5v2kuPHm1DAIa+Auq91gI0gnMtT3oUWeB6XDbGRQMJ7TvvnuHIaOwp+VDT13lccADyX9ip6+MSEnnkLrUFzg2UM02qrf2P0HB0bcUNWoZqXLNJ/oKVi+Wro362Y7P5l19/DyO0OT1FNRW6mpNMp5hFBnlSlxoBgGDqtMZ3sHBHrS8b84BNSjH+xb8Ty8Bakf48vTHIW9BoTZPFXecAwqbXN+nxMB3sjVj6v/vvp3hV6xVtuJfRq7h Content-Type: text/plain; charset="utf-8" Content-ID: <09A44B2CC2F18D44A3F66577DA2FDF82@namprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 6716bba8-73d8-4b1c-9975-08d79d6d4509 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:53.5115 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xjOo7zhpvsJOesf90DbK2i/GvYmkO2QiDZJhFkbIPUWpDw2H2KuKfAgZ6VwqoLhT X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.139 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIG1vdmVkIGZ1bmN0aW9ucyBhcmUgbm90IHNwZWNpZmljIHRvIHFvcy10ZXN0IGFuZCBtaWdo dCBiZSB1c2VmdWwNCmVsc2V3aGVyZS4gRm9yIGV4YW1wbGUgdGhlIHZpcnR1YWwtZGV2aWNlIGZ1 enplciBtYWtlcyB1c2Ugb2YgdGhlbSBmb3INCnFvcy1hc3Npc3RlZCBmdXp6LXRhcmdldHMuDQoN ClNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBCdWxla292IDxhbHhuZHJAYnUuZWR1Pg0KUmV2aWV3 ZWQtYnk6IFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0LmNvbT4NClJldmlld2VkLWJ5 OiBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqSA8cGhpbG1kQHJlZGhhdC5jb20+DQotLS0NCiB0ZXN0 cy9xdGVzdC9NYWtlZmlsZS5pbmNsdWRlICAgICAgfCAgIDEgKw0KIHRlc3RzL3F0ZXN0L2xpYnFv cy9xb3NfZXh0ZXJuYWwuYyB8IDE2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiB0 ZXN0cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmggfCAgMjggKysrKysNCiB0ZXN0cy9xdGVz dC9xb3MtdGVzdC5jICAgICAgICAgICAgfCAxMzIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiA0 IGZpbGVzIGNoYW5nZWQsIDE5OCBpbnNlcnRpb25zKCspLCAxMzEgZGVsZXRpb25zKC0pDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3F0ZXN0L2xpYnFvcy9xb3NfZXh0ZXJuYWwuYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmgNCg0KZGlmZiAt LWdpdCBhL3Rlc3RzL3F0ZXN0L01ha2VmaWxlLmluY2x1ZGUgYi90ZXN0cy9xdGVzdC9NYWtlZmls ZS5pbmNsdWRlDQppbmRleCAwOGE0OGMxMjUyLi5iZGM5M2QzODY2IDEwMDY0NA0KLS0tIGEvdGVz dHMvcXRlc3QvTWFrZWZpbGUuaW5jbHVkZQ0KKysrIGIvdGVzdHMvcXRlc3QvTWFrZWZpbGUuaW5j bHVkZQ0KQEAgLTE3Miw2ICsxNzIsNyBAQCBsaWJxb3MtdXNiLW9iai15ID0gJChsaWJxb3Mtc3Bh cHItb2JqLXkpICQobGlicW9zLXBjLW9iai15KSB0ZXN0cy9xdGVzdC9saWJxb3MvdQ0KICMgcW9z IGRldmljZXM6DQogbGlicW9zLW9iai15ID0gICQobGlicWdyYXBoLW9iai15KQ0KIGxpYnFvcy1v YmoteSArPSAkKGxpYnFvcy1wYy1vYmoteSkgJChsaWJxb3Mtc3BhcHItb2JqLXkpDQorbGlicW9z LW9iai15ICs9IHRlc3RzL3F0ZXN0L2xpYnFvcy9xb3NfZXh0ZXJuYWwubw0KIGxpYnFvcy1vYmot eSArPSB0ZXN0cy9xdGVzdC9saWJxb3MvZTEwMDBlLm8NCiBsaWJxb3Mtb2JqLXkgKz0gdGVzdHMv cXRlc3QvbGlicW9zL2kyYy5vDQogbGlicW9zLW9iai15ICs9IHRlc3RzL3F0ZXN0L2xpYnFvcy9p MmMtaW14Lm8NCmRpZmYgLS1naXQgYS90ZXN0cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmMg Yi90ZXN0cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwLi4zOTg1NTZkZGUwDQotLS0gL2Rldi9udWxsDQorKysgYi90ZXN0 cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmMNCkBAIC0wLDAgKzEsMTY4IEBADQorLyoNCisg KiBsaWJxb3MgZHJpdmVyIGZyYW1ld29yaw0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDE4IEVt YW51ZWxlIEdpdXNlcHBlIEVzcG9zaXRvIDxlLmVtYW51ZWxlZ2l1c2VwcGVAZ21haWwuY29tPg0K KyAqDQorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisgKg0KKyAqIFRoaXMgbGlicmFyeSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUNCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0 aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPg0K KyAqLw0KKw0KKyNpbmNsdWRlICJxZW11L29zZGVwLmgiDQorI2luY2x1ZGUgPGdldG9wdC5oPg0K KyNpbmNsdWRlICJsaWJxdGVzdC5oIg0KKyNpbmNsdWRlICJxYXBpL3FtcC9xZGljdC5oIg0KKyNp bmNsdWRlICJxYXBpL3FtcC9xYm9vbC5oIg0KKyNpbmNsdWRlICJxYXBpL3FtcC9xc3RyaW5nLmgi DQorI2luY2x1ZGUgInFlbXUvbW9kdWxlLmgiDQorI2luY2x1ZGUgInFhcGkvcW1wL3FsaXN0Lmgi DQorI2luY2x1ZGUgImxpYnFvcy9tYWxsb2MuaCINCisjaW5jbHVkZSAibGlicW9zL3FncmFwaC5o Ig0KKyNpbmNsdWRlICJsaWJxb3MvcWdyYXBoX2ludGVybmFsLmgiDQorI2luY2x1ZGUgImxpYnFv cy9xb3NfZXh0ZXJuYWwuaCINCisNCisNCisNCit2b2lkIGFwcGx5X3RvX25vZGUoY29uc3QgY2hh ciAqbmFtZSwgYm9vbCBpc19tYWNoaW5lLCBib29sIGlzX2Fic3RyYWN0KQ0KK3sNCisgICAgY2hh ciAqbWFjaGluZV9uYW1lID0gTlVMTDsNCisgICAgaWYgKGlzX21hY2hpbmUpIHsNCisgICAgICAg IGNvbnN0IGNoYXIgKmFyY2ggPSBxdGVzdF9nZXRfYXJjaCgpOw0KKyAgICAgICAgbWFjaGluZV9u YW1lID0gZ19zdHJjb25jYXQoYXJjaCwgIi8iLCBuYW1lLCBOVUxMKTsNCisgICAgICAgIG5hbWUg PSBtYWNoaW5lX25hbWU7DQorICAgIH0NCisgICAgcW9zX2dyYXBoX25vZGVfc2V0X2F2YWlsYWJp bGl0eShuYW1lLCB0cnVlKTsNCisgICAgaWYgKGlzX2Fic3RyYWN0KSB7DQorICAgICAgICBxb3Nf ZGVsZXRlX2NtZF9saW5lKG5hbWUpOw0KKyAgICB9DQorICAgIGdfZnJlZShtYWNoaW5lX25hbWUp Ow0KK30NCisNCisvKioNCisgKiBhcHBseV90b19xbGlzdCgpOiB1c2luZyBRTVAgcXVlcmllcyBR RU1VIGZvciBhIGxpc3Qgb2YNCisgKiBtYWNoaW5lcyBhbmQgZGV2aWNlcyBhdmFpbGFibGUsIGFu ZCBzZXRzIHRoZSByZXNwZWN0aXZlIG5vZGUNCisgKiBhcyB0cnVlLiBJZiBhIG5vZGUgaXMgZm91 bmQsIGFsc28gYWxsIGl0cyBwcm9kdWNlZCBhbmQgY29udGFpbmVkDQorICogY2hpbGQgYXJlIG1h cmtlZCBhdmFpbGFibGUuDQorICoNCisgKiBTZWUgcW9zX2dyYXBoX25vZGVfc2V0X2F2YWlsYWJp bGl0eSgpIGZvciBtb3JlIGluZm8NCisgKi8NCit2b2lkIGFwcGx5X3RvX3FsaXN0KFFMaXN0ICps aXN0LCBib29sIGlzX21hY2hpbmUpDQorew0KKyAgICBjb25zdCBRTGlzdEVudHJ5ICpwOw0KKyAg ICBjb25zdCBjaGFyICpuYW1lOw0KKyAgICBib29sIGFic3RyYWN0Ow0KKyAgICBRRGljdCAqbWlu Zm87DQorICAgIFFPYmplY3QgKnFvYmo7DQorICAgIFFTdHJpbmcgKnFzdHI7DQorICAgIFFCb29s ICpxYm9vbDsNCisNCisgICAgZm9yIChwID0gcWxpc3RfZmlyc3QobGlzdCk7IHA7IHAgPSBxbGlz dF9uZXh0KHApKSB7DQorICAgICAgICBtaW5mbyA9IHFvYmplY3RfdG8oUURpY3QsIHFsaXN0X2Vu dHJ5X29iaihwKSk7DQorICAgICAgICBxb2JqID0gcWRpY3RfZ2V0KG1pbmZvLCAibmFtZSIpOw0K KyAgICAgICAgcXN0ciA9IHFvYmplY3RfdG8oUVN0cmluZywgcW9iaik7DQorICAgICAgICBuYW1l ID0gcXN0cmluZ19nZXRfc3RyKHFzdHIpOw0KKw0KKyAgICAgICAgcW9iaiA9IHFkaWN0X2dldCht aW5mbywgImFic3RyYWN0Iik7DQorICAgICAgICBpZiAocW9iaikgew0KKyAgICAgICAgICAgIHFi b29sID0gcW9iamVjdF90byhRQm9vbCwgcW9iaik7DQorICAgICAgICAgICAgYWJzdHJhY3QgPSBx Ym9vbF9nZXRfYm9vbChxYm9vbCk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGFi c3RyYWN0ID0gZmFsc2U7DQorICAgICAgICB9DQorDQorICAgICAgICBhcHBseV90b19ub2RlKG5h bWUsIGlzX21hY2hpbmUsIGFic3RyYWN0KTsNCisgICAgICAgIHFvYmogPSBxZGljdF9nZXQobWlu Zm8sICJhbGlhcyIpOw0KKyAgICAgICAgaWYgKHFvYmopIHsNCisgICAgICAgICAgICBxc3RyID0g cW9iamVjdF90byhRU3RyaW5nLCBxb2JqKTsNCisgICAgICAgICAgICBuYW1lID0gcXN0cmluZ19n ZXRfc3RyKHFzdHIpOw0KKyAgICAgICAgICAgIGFwcGx5X3RvX25vZGUobmFtZSwgaXNfbWFjaGlu ZSwgYWJzdHJhY3QpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK1FHdWVzdEFsbG9jYXRv ciAqZ2V0X21hY2hpbmVfYWxsb2NhdG9yKFFPU0dyYXBoT2JqZWN0ICpvYmopDQorew0KKyAgICBy ZXR1cm4gb2JqLT5nZXRfZHJpdmVyKG9iaiwgIm1lbW9yeSIpOw0KK30NCisNCisvKioNCisgKiBh bGxvY2F0ZV9vYmplY3RzKCk6IGdpdmVuIGFuIGFycmF5IG9mIG5vZGVzIEBhcmcsDQorICogd2Fs a3MgdGhlIHBhdGggaW52b2tpbmcgYWxsIGNvbnN0cnVjdG9ycyBhbmQNCisgKiBwYXNzaW5nIHRo ZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBpbiBvcmRlciB0bw0KKyAqIGNvbnRpbnVlIHRoZSBv YmplY3RzIGFsbG9jYXRpb24uDQorICogT25jZSB0aGUgdGVzdCBpcyByZWFjaGVkLCByZXR1cm4g dGhlIG9iamVjdCBpdCBjb25zdW1lcy4NCisgKg0KKyAqIFNpbmNlIHRoZSBtYWNoaW5lIGFuZCBR RURHRV9DT05TVU1FRF9CWSBub2RlcyBhbGxvY2F0ZQ0KKyAqIG1lbW9yeSBpbiB0aGUgY29uc3Ry dWN0b3IsIGdfdGVzdF9xdWV1ZV9kZXN0cm95IGlzIHVzZWQgc28NCisgKiB0aGF0IGFmdGVyIGV4 ZWN1dGlvbiB0aGV5IGNhbiBiZSBzYWZlbHkgZnJlZSdkLiAgKFRoZSB0ZXN0J3MNCisgKiAtPmJl Zm9yZSBjYWxsYmFjayBpcyBhbHNvIHdlbGNvbWUgdG8gdXNlIGdfdGVzdF9xdWV1ZV9kZXN0cm95 KS4NCisgKg0KKyAqIE5vdGU6IGFzIHNwZWNpZmllZCBpbiB3YWxrX3BhdGgoKSB0b28sIEBhcmcg aXMgYW4gYXJyYXkgb2YNCisgKiBjaGFyICosIHdoZXJlIGFyZ1swXSBpcyBhIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgbGluZQ0KKyAqIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBwcm9wZXJs eSBzdGFydCBRRU1VIHdoZW4gZXhlY3V0aW5nDQorICogdGhlIHRlc3QsIGFuZCB0aGUgcmVtYWlu aW5nIGVsZW1lbnRzIHJlcHJlc2VudCB0aGUgYWN0dWFsIG9iamVjdHMNCisgKiB0aGF0IHdpbGwg YmUgYWxsb2NhdGVkLg0KKyAqLw0KK3ZvaWQgKmFsbG9jYXRlX29iamVjdHMoUVRlc3RTdGF0ZSAq cXRzLCBjaGFyICoqcGF0aCwgUUd1ZXN0QWxsb2NhdG9yICoqcF9hbGxvYykNCit7DQorICAgIGlu dCBjdXJyZW50ID0gMDsNCisgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxvYzsNCisgICAgUU9TR3Jh cGhPYmplY3QgKnBhcmVudCA9IE5VTEw7DQorICAgIFFPU0dyYXBoRWRnZSAqZWRnZTsNCisgICAg UU9TR3JhcGhOb2RlICpub2RlOw0KKyAgICB2b2lkICplZGdlX2FyZzsNCisgICAgdm9pZCAqb2Jq Ow0KKw0KKyAgICBub2RlID0gcW9zX2dyYXBoX2dldF9ub2RlKHBhdGhbY3VycmVudF0pOw0KKyAg ICBnX2Fzc2VydChub2RlLT50eXBlID09IFFOT0RFX01BQ0hJTkUpOw0KKw0KKyAgICBvYmogPSBx b3NfbWFjaGluZV9uZXcobm9kZSwgcXRzKTsNCisgICAgcW9zX29iamVjdF9xdWV1ZV9kZXN0cm95 KG9iaik7DQorDQorICAgIGFsbG9jID0gZ2V0X21hY2hpbmVfYWxsb2NhdG9yKG9iaik7DQorICAg IGlmIChwX2FsbG9jKSB7DQorICAgICAgICAqcF9hbGxvYyA9IGFsbG9jOw0KKyAgICB9DQorDQor ICAgIGZvciAoOzspIHsNCisgICAgICAgIGlmIChub2RlLT50eXBlICE9IFFOT0RFX0lOVEVSRkFD RSkgew0KKyAgICAgICAgICAgIHFvc19vYmplY3Rfc3RhcnRfaHcob2JqKTsNCisgICAgICAgICAg ICBwYXJlbnQgPSBvYmo7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBmb2xsb3cgZWRnZSBh bmQgZ2V0IG9iamVjdCBmb3IgbmV4dCBub2RlIGNvbnN0cnVjdG9yICovDQorICAgICAgICBjdXJy ZW50Kys7DQorICAgICAgICBlZGdlID0gcW9zX2dyYXBoX2dldF9lZGdlKHBhdGhbY3VycmVudCAt IDFdLCBwYXRoW2N1cnJlbnRdKTsNCisgICAgICAgIG5vZGUgPSBxb3NfZ3JhcGhfZ2V0X25vZGUo cGF0aFtjdXJyZW50XSk7DQorDQorICAgICAgICBpZiAobm9kZS0+dHlwZSA9PSBRTk9ERV9URVNU KSB7DQorICAgICAgICAgICAgZ19hc3NlcnQocW9zX2dyYXBoX2VkZ2VfZ2V0X3R5cGUoZWRnZSkg PT0gUUVER0VfQ09OU1VNRURfQlkpOw0KKyAgICAgICAgICAgIHJldHVybiBvYmo7DQorICAgICAg ICB9DQorDQorICAgICAgICBzd2l0Y2ggKHFvc19ncmFwaF9lZGdlX2dldF90eXBlKGVkZ2UpKSB7 DQorICAgICAgICBjYXNlIFFFREdFX1BST0RVQ0VTOg0KKyAgICAgICAgICAgIG9iaiA9IHBhcmVu dC0+Z2V0X2RyaXZlcihwYXJlbnQsIHBhdGhbY3VycmVudF0pOw0KKyAgICAgICAgICAgIGJyZWFr Ow0KKw0KKyAgICAgICAgY2FzZSBRRURHRV9DT05TVU1FRF9CWToNCisgICAgICAgICAgICBlZGdl X2FyZyA9IHFvc19ncmFwaF9lZGdlX2dldF9hcmcoZWRnZSk7DQorICAgICAgICAgICAgb2JqID0g cW9zX2RyaXZlcl9uZXcobm9kZSwgb2JqLCBhbGxvYywgZWRnZV9hcmcpOw0KKyAgICAgICAgICAg IHFvc19vYmplY3RfcXVldWVfZGVzdHJveShvYmopOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0K KyAgICAgICAgY2FzZSBRRURHRV9DT05UQUlOUzoNCisgICAgICAgICAgICBvYmogPSBwYXJlbnQt PmdldF9kZXZpY2UocGFyZW50LCBwYXRoW2N1cnJlbnRdKTsNCisgICAgICAgICAgICBicmVhazsN CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCmRpZmYgLS1naXQgYS90ZXN0cy9xdGVzdC9saWJx b3MvcW9zX2V4dGVybmFsLmggYi90ZXN0cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmgNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi43YjQ0OTMwYzU1DQotLS0gL2Rl di9udWxsDQorKysgYi90ZXN0cy9xdGVzdC9saWJxb3MvcW9zX2V4dGVybmFsLmgNCkBAIC0wLDAg KzEsMjggQEANCisvKg0KKyAqIGxpYnFvcyBkcml2ZXIgZnJhbWV3b3JrDQorICoNCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTggRW1hbnVlbGUgR2l1c2VwcGUgRXNwb3NpdG8gPGUuZW1hbnVlbGVnaXVz ZXBwZUBnbWFpbC5jb20+DQorICoNCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqDQor ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+DQorICovDQorDQorI2lmbmRlZiBRT1NfRVhURVJOQUxfSA0KKyNkZWZp bmUgUU9TX0VYVEVSTkFMX0gNCisjaW5jbHVkZSAibGlicW9zL3FncmFwaC5oIg0KKw0KK3ZvaWQg YXBwbHlfdG9fbm9kZShjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX21hY2hpbmUsIGJvb2wgaXNf YWJzdHJhY3QpOw0KK3ZvaWQgYXBwbHlfdG9fcWxpc3QoUUxpc3QgKmxpc3QsIGJvb2wgaXNfbWFj aGluZSk7DQorUUd1ZXN0QWxsb2NhdG9yICpnZXRfbWFjaGluZV9hbGxvY2F0b3IoUU9TR3JhcGhP YmplY3QgKm9iaik7DQordm9pZCAqYWxsb2NhdGVfb2JqZWN0cyhRVGVzdFN0YXRlICpxdHMsIGNo YXIgKipwYXRoLCBRR3Vlc3RBbGxvY2F0b3IgKipwX2FsbG9jKTsNCisNCisjZW5kaWYNCmRpZmYg LS1naXQgYS90ZXN0cy9xdGVzdC9xb3MtdGVzdC5jIGIvdGVzdHMvcXRlc3QvcW9zLXRlc3QuYw0K aW5kZXggZmQ3MGQ3M2VhNS4uYWQxOTNmNDNhNSAxMDA2NDQNCi0tLSBhL3Rlc3RzL3F0ZXN0L3Fv cy10ZXN0LmMNCisrKyBiL3Rlc3RzL3F0ZXN0L3Fvcy10ZXN0LmMNCkBAIC0yNyw2NSArMjcsMTEg QEANCiAjaW5jbHVkZSAibGlicW9zL21hbGxvYy5oIg0KICNpbmNsdWRlICJsaWJxb3MvcWdyYXBo LmgiDQogI2luY2x1ZGUgImxpYnFvcy9xZ3JhcGhfaW50ZXJuYWwuaCINCisjaW5jbHVkZSAibGli cW9zL3Fvc19leHRlcm5hbC5oIg0KIA0KIHN0YXRpYyBjaGFyICpvbGRfcGF0aDsNCiANCi1zdGF0 aWMgdm9pZCBhcHBseV90b19ub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfbWFjaGluZSwg Ym9vbCBpc19hYnN0cmFjdCkNCi17DQotICAgIGNoYXIgKm1hY2hpbmVfbmFtZSA9IE5VTEw7DQot ICAgIGlmIChpc19tYWNoaW5lKSB7DQotICAgICAgICBjb25zdCBjaGFyICphcmNoID0gcXRlc3Rf Z2V0X2FyY2goKTsNCi0gICAgICAgIG1hY2hpbmVfbmFtZSA9IGdfc3RyY29uY2F0KGFyY2gsICIv IiwgbmFtZSwgTlVMTCk7DQotICAgICAgICBuYW1lID0gbWFjaGluZV9uYW1lOw0KLSAgICB9DQot ICAgIHFvc19ncmFwaF9ub2RlX3NldF9hdmFpbGFiaWxpdHkobmFtZSwgdHJ1ZSk7DQotICAgIGlm IChpc19hYnN0cmFjdCkgew0KLSAgICAgICAgcW9zX2RlbGV0ZV9jbWRfbGluZShuYW1lKTsNCi0g ICAgfQ0KLSAgICBnX2ZyZWUobWFjaGluZV9uYW1lKTsNCi19DQogDQotLyoqDQotICogYXBwbHlf dG9fcWxpc3QoKTogdXNpbmcgUU1QIHF1ZXJpZXMgUUVNVSBmb3IgYSBsaXN0IG9mDQotICogbWFj aGluZXMgYW5kIGRldmljZXMgYXZhaWxhYmxlLCBhbmQgc2V0cyB0aGUgcmVzcGVjdGl2ZSBub2Rl DQotICogYXMgdHJ1ZS4gSWYgYSBub2RlIGlzIGZvdW5kLCBhbHNvIGFsbCBpdHMgcHJvZHVjZWQg YW5kIGNvbnRhaW5lZA0KLSAqIGNoaWxkIGFyZSBtYXJrZWQgYXZhaWxhYmxlLg0KLSAqDQotICog U2VlIHFvc19ncmFwaF9ub2RlX3NldF9hdmFpbGFiaWxpdHkoKSBmb3IgbW9yZSBpbmZvDQotICov DQotc3RhdGljIHZvaWQgYXBwbHlfdG9fcWxpc3QoUUxpc3QgKmxpc3QsIGJvb2wgaXNfbWFjaGlu ZSkNCi17DQotICAgIGNvbnN0IFFMaXN0RW50cnkgKnA7DQotICAgIGNvbnN0IGNoYXIgKm5hbWU7 DQotICAgIGJvb2wgYWJzdHJhY3Q7DQotICAgIFFEaWN0ICptaW5mbzsNCi0gICAgUU9iamVjdCAq cW9iajsNCi0gICAgUVN0cmluZyAqcXN0cjsNCi0gICAgUUJvb2wgKnFib29sOw0KLQ0KLSAgICBm b3IgKHAgPSBxbGlzdF9maXJzdChsaXN0KTsgcDsgcCA9IHFsaXN0X25leHQocCkpIHsNCi0gICAg ICAgIG1pbmZvID0gcW9iamVjdF90byhRRGljdCwgcWxpc3RfZW50cnlfb2JqKHApKTsNCi0gICAg ICAgIHFvYmogPSBxZGljdF9nZXQobWluZm8sICJuYW1lIik7DQotICAgICAgICBxc3RyID0gcW9i amVjdF90byhRU3RyaW5nLCBxb2JqKTsNCi0gICAgICAgIG5hbWUgPSBxc3RyaW5nX2dldF9zdHIo cXN0cik7DQotDQotICAgICAgICBxb2JqID0gcWRpY3RfZ2V0KG1pbmZvLCAiYWJzdHJhY3QiKTsN Ci0gICAgICAgIGlmIChxb2JqKSB7DQotICAgICAgICAgICAgcWJvb2wgPSBxb2JqZWN0X3RvKFFC b29sLCBxb2JqKTsNCi0gICAgICAgICAgICBhYnN0cmFjdCA9IHFib29sX2dldF9ib29sKHFib29s KTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYWJzdHJhY3QgPSBmYWxzZTsNCi0g ICAgICAgIH0NCi0NCi0gICAgICAgIGFwcGx5X3RvX25vZGUobmFtZSwgaXNfbWFjaGluZSwgYWJz dHJhY3QpOw0KLSAgICAgICAgcW9iaiA9IHFkaWN0X2dldChtaW5mbywgImFsaWFzIik7DQotICAg ICAgICBpZiAocW9iaikgew0KLSAgICAgICAgICAgIHFzdHIgPSBxb2JqZWN0X3RvKFFTdHJpbmcs IHFvYmopOw0KLSAgICAgICAgICAgIG5hbWUgPSBxc3RyaW5nX2dldF9zdHIocXN0cik7DQotICAg ICAgICAgICAgYXBwbHlfdG9fbm9kZShuYW1lLCBpc19tYWNoaW5lLCBhYnN0cmFjdCk7DQotICAg ICAgICB9DQotICAgIH0NCi19DQogDQogLyoqDQogICogcW9zX3NldF9tYWNoaW5lc19kZXZpY2Vz X2F2YWlsYWJsZSgpOiBzZXRzIGF2YWlsYWJpbGl0eSBvZiBxZ3JhcGgNCkBAIC0xMjksMTAgKzc1 LDYgQEAgc3RhdGljIHZvaWQgcW9zX3NldF9tYWNoaW5lc19kZXZpY2VzX2F2YWlsYWJsZSh2b2lk KQ0KICAgICBxb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsNCiB9DQogDQotc3RhdGljIFFHdWVzdEFs bG9jYXRvciAqZ2V0X21hY2hpbmVfYWxsb2NhdG9yKFFPU0dyYXBoT2JqZWN0ICpvYmopDQotew0K LSAgICByZXR1cm4gb2JqLT5nZXRfZHJpdmVyKG9iaiwgIm1lbW9yeSIpOw0KLX0NCiANCiBzdGF0 aWMgdm9pZCByZXN0YXJ0X3FlbXVfb3JfY29udGludWUoY2hhciAqcGF0aCkNCiB7DQpAQCAtMTU5 LDc4ICsxMDEsNiBAQCB2b2lkIHFvc19pbnZhbGlkYXRlX2NvbW1hbmRfbGluZSh2b2lkKQ0KICAg ICBvbGRfcGF0aCA9IE5VTEw7DQogfQ0KIA0KLS8qKg0KLSAqIGFsbG9jYXRlX29iamVjdHMoKTog Z2l2ZW4gYW4gYXJyYXkgb2Ygbm9kZXMgQGFyZywNCi0gKiB3YWxrcyB0aGUgcGF0aCBpbnZva2lu ZyBhbGwgY29uc3RydWN0b3JzIGFuZA0KLSAqIHBhc3NpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcGFy YW1ldGVyIGluIG9yZGVyIHRvDQotICogY29udGludWUgdGhlIG9iamVjdHMgYWxsb2NhdGlvbi4N Ci0gKiBPbmNlIHRoZSB0ZXN0IGlzIHJlYWNoZWQsIHJldHVybiB0aGUgb2JqZWN0IGl0IGNvbnN1 bWVzLg0KLSAqDQotICogU2luY2UgdGhlIG1hY2hpbmUgYW5kIFFFREdFX0NPTlNVTUVEX0JZIG5v ZGVzIGFsbG9jYXRlDQotICogbWVtb3J5IGluIHRoZSBjb25zdHJ1Y3RvciwgZ190ZXN0X3F1ZXVl X2Rlc3Ryb3kgaXMgdXNlZCBzbw0KLSAqIHRoYXQgYWZ0ZXIgZXhlY3V0aW9uIHRoZXkgY2FuIGJl IHNhZmVseSBmcmVlJ2QuICAoVGhlIHRlc3Qncw0KLSAqIC0+YmVmb3JlIGNhbGxiYWNrIGlzIGFs c28gd2VsY29tZSB0byB1c2UgZ190ZXN0X3F1ZXVlX2Rlc3Ryb3kpLg0KLSAqDQotICogTm90ZTog YXMgc3BlY2lmaWVkIGluIHdhbGtfcGF0aCgpIHRvbywgQGFyZyBpcyBhbiBhcnJheSBvZg0KLSAq IGNoYXIgKiwgd2hlcmUgYXJnWzBdIGlzIGEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBsaW5lDQot ICogc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHByb3Blcmx5IHN0YXJ0IFFFTVUgd2hlbiBl eGVjdXRpbmcNCi0gKiB0aGUgdGVzdCwgYW5kIHRoZSByZW1haW5pbmcgZWxlbWVudHMgcmVwcmVz ZW50IHRoZSBhY3R1YWwgb2JqZWN0cw0KLSAqIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQuDQotICov DQotc3RhdGljIHZvaWQgKmFsbG9jYXRlX29iamVjdHMoUVRlc3RTdGF0ZSAqcXRzLCBjaGFyICoq cGF0aCwgUUd1ZXN0QWxsb2NhdG9yICoqcF9hbGxvYykNCi17DQotICAgIGludCBjdXJyZW50ID0g MDsNCi0gICAgUUd1ZXN0QWxsb2NhdG9yICphbGxvYzsNCi0gICAgUU9TR3JhcGhPYmplY3QgKnBh cmVudCA9IE5VTEw7DQotICAgIFFPU0dyYXBoRWRnZSAqZWRnZTsNCi0gICAgUU9TR3JhcGhOb2Rl ICpub2RlOw0KLSAgICB2b2lkICplZGdlX2FyZzsNCi0gICAgdm9pZCAqb2JqOw0KLQ0KLSAgICBu b2RlID0gcW9zX2dyYXBoX2dldF9ub2RlKHBhdGhbY3VycmVudF0pOw0KLSAgICBnX2Fzc2VydChu b2RlLT50eXBlID09IFFOT0RFX01BQ0hJTkUpOw0KLQ0KLSAgICBvYmogPSBxb3NfbWFjaGluZV9u ZXcobm9kZSwgcXRzKTsNCi0gICAgcW9zX29iamVjdF9xdWV1ZV9kZXN0cm95KG9iaik7DQotDQot ICAgIGFsbG9jID0gZ2V0X21hY2hpbmVfYWxsb2NhdG9yKG9iaik7DQotICAgIGlmIChwX2FsbG9j KSB7DQotICAgICAgICAqcF9hbGxvYyA9IGFsbG9jOw0KLSAgICB9DQotDQotICAgIGZvciAoOzsp IHsNCi0gICAgICAgIGlmIChub2RlLT50eXBlICE9IFFOT0RFX0lOVEVSRkFDRSkgew0KLSAgICAg ICAgICAgIHFvc19vYmplY3Rfc3RhcnRfaHcob2JqKTsNCi0gICAgICAgICAgICBwYXJlbnQgPSBv Ymo7DQotICAgICAgICB9DQotDQotICAgICAgICAvKiBmb2xsb3cgZWRnZSBhbmQgZ2V0IG9iamVj dCBmb3IgbmV4dCBub2RlIGNvbnN0cnVjdG9yICovDQotICAgICAgICBjdXJyZW50Kys7DQotICAg ICAgICBlZGdlID0gcW9zX2dyYXBoX2dldF9lZGdlKHBhdGhbY3VycmVudCAtIDFdLCBwYXRoW2N1 cnJlbnRdKTsNCi0gICAgICAgIG5vZGUgPSBxb3NfZ3JhcGhfZ2V0X25vZGUocGF0aFtjdXJyZW50 XSk7DQotDQotICAgICAgICBpZiAobm9kZS0+dHlwZSA9PSBRTk9ERV9URVNUKSB7DQotICAgICAg ICAgICAgZ19hc3NlcnQocW9zX2dyYXBoX2VkZ2VfZ2V0X3R5cGUoZWRnZSkgPT0gUUVER0VfQ09O U1VNRURfQlkpOw0KLSAgICAgICAgICAgIHJldHVybiBvYmo7DQotICAgICAgICB9DQotDQotICAg ICAgICBzd2l0Y2ggKHFvc19ncmFwaF9lZGdlX2dldF90eXBlKGVkZ2UpKSB7DQotICAgICAgICBj YXNlIFFFREdFX1BST0RVQ0VTOg0KLSAgICAgICAgICAgIG9iaiA9IHBhcmVudC0+Z2V0X2RyaXZl cihwYXJlbnQsIHBhdGhbY3VycmVudF0pOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAg ICAgY2FzZSBRRURHRV9DT05TVU1FRF9CWToNCi0gICAgICAgICAgICBlZGdlX2FyZyA9IHFvc19n cmFwaF9lZGdlX2dldF9hcmcoZWRnZSk7DQotICAgICAgICAgICAgb2JqID0gcW9zX2RyaXZlcl9u ZXcobm9kZSwgb2JqLCBhbGxvYywgZWRnZV9hcmcpOw0KLSAgICAgICAgICAgIHFvc19vYmplY3Rf cXVldWVfZGVzdHJveShvYmopOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2Fz ZSBRRURHRV9DT05UQUlOUzoNCi0gICAgICAgICAgICBvYmogPSBwYXJlbnQtPmdldF9kZXZpY2Uo cGFyZW50LCBwYXRoW2N1cnJlbnRdKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0N Ci0gICAgfQ0KLX0NCiANCiAvKiBUaGUgYXJndW1lbnQgdG8gcnVuX29uZV90ZXN0LCB3aGljaCBp cyB0aGUgdGVzdCBmdW5jdGlvbiB0aGF0IGlzIHJlZ2lzdGVyZWQNCiAgKiB3aXRoIEdUZXN0LCBp cyBhIHZlY3RvciBvZiBzdHJpbmdzLiAgVGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGluaXRpYWwgY29t bWFuZA0KLS0gDQoyLjIzLjANCg0K