From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 127DCC3A5A7 for ; Sun, 4 Dec 2022 19:24:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230433AbiLDTYj (ORCPT ); Sun, 4 Dec 2022 14:24:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229949AbiLDTYi (ORCPT ); Sun, 4 Dec 2022 14:24:38 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13AD910B48; Sun, 4 Dec 2022 11:24:36 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 66CEB5FD03; Sun, 4 Dec 2022 22:24:34 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1670181874; bh=CoowoPIuXbSDgd8CXW+eOK6R1DPBai/bTdt2wwkOrpE=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version; b=d2AQbL44MFn6f5yJLLJkUJwHJOVGqFHDGx67jGRUHxMvMf4ehIj00MBfM0b5DEn2a Iwn68siSkkubA4jIF7AdhwnQbqa6J9W9dmzKUBANpdh4rGlAFwDGfEf8CvgQ24QhgP OKPok5W1r21hM0QZPosIO2vWwNtE+Ygcr+NuV7CLT6S6eQrZtOV0R+LZqS9bx/+Mca 2PNOEXhjNbN64L5rX2yPnqXbezpQvHRWNX0jlCLHFxklQuaQa2FB7U/HYRdU60eNpm PVo+Mp81uncrlmDEfyo5Uq4bzk2YEd3lgorOnNcqJy9DJNwppcxdlId9fluQOWJygK 6yUE9GVfsVBCQ== Received: from S-MS-EXCH02.sberdevices.ru (S-MS-EXCH02.sberdevices.ru [172.16.1.5]) by mx.sberdevices.ru (Postfix) with ESMTP; Sun, 4 Dec 2022 22:24:34 +0300 (MSK) From: Arseniy Krasnov To: Stefano Garzarella , "edumazet@google.com" , Jakub Kicinski , Paolo Abeni , "David S. Miller" CC: Bobby Eshleman , Krasnov Arseniy , Arseniy Krasnov , "linux-kernel@vger.kernel.org" , "virtualization@lists.linux-foundation.org" , "netdev@vger.kernel.org" , kernel Subject: [RFC PATCH v3 4/4] test/vsock: vsock_perf utility Thread-Topic: [RFC PATCH v3 4/4] test/vsock: vsock_perf utility Thread-Index: AQHZCBYK/cvwOp5740W2DR5unQsb0A== Date: Sun, 4 Dec 2022 19:24:33 +0000 Message-ID: <9cc7610f-bcf5-6f77-96fe-4239efb67ca7@sberdevices.ru> In-Reply-To: <6bd77692-8388-8693-f15f-833df1fa6afd@sberdevices.ru> Accept-Language: en-US, ru-RU Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.1.12] Content-Type: text/plain; charset="utf-8" Content-ID: <4AC60EEB2284A14EBE3C65D2F0456A84@sberdevices.ru> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2022/12/04 13:44:00 #20647742 X-KSMG-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhpcyBhZGRzIHV0aWxpdHkgdG8gY2hlY2sgdnNvY2sgcngvdHggcGVyZm9ybWFuY2UuDQoNClVz YWdlIGFzIHNlbmRlcjoNCi4vdnNvY2tfcGVyZiAtLXBvcnQgPHBvcnQ+IC0tbWIgPGJ5dGVzIHRv IHNlbmQpDQpVc2FnZSBhcyByZWNlaXZlcjoNCi4vdnNvY2tfcGVyZiAtLWNpZCA8Y2lkPiAtLXBv cnQgPHBvcnQ+IC0tc29fcmN2bG93YXQgPFNPX1JDVkxPV0FUPg0KDQpTaWduZWQtb2ZmLWJ5OiBB cnNlbml5IEtyYXNub3YgPEFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4NCi0tLQ0KIHRvb2xzL3Rl c3RpbmcvdnNvY2svTWFrZWZpbGUgICAgIHwgICAxICsNCiB0b29scy90ZXN0aW5nL3Zzb2NrL1JF QURNRSAgICAgICB8ICAzNCArKysNCiB0b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3BlcmYuYyB8 IDQ0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2VkLCA0 ODQgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3Zzb2Nr L3Zzb2NrX3BlcmYuYw0KDQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92c29jay9NYWtlZmls ZSBiL3Rvb2xzL3Rlc3RpbmcvdnNvY2svTWFrZWZpbGUNCmluZGV4IGY4MjkzYzY5MTBjOS4uZDM2 ZmRkNTlmZTJlIDEwMDY0NA0KLS0tIGEvdG9vbHMvdGVzdGluZy92c29jay9NYWtlZmlsZQ0KKysr IGIvdG9vbHMvdGVzdGluZy92c29jay9NYWtlZmlsZQ0KQEAgLTMsNiArMyw3IEBAIGFsbDogdGVz dA0KIHRlc3Q6IHZzb2NrX3Rlc3QgdnNvY2tfZGlhZ190ZXN0DQogdnNvY2tfdGVzdDogdnNvY2tf dGVzdC5vIHRpbWVvdXQubyBjb250cm9sLm8gdXRpbC5vDQogdnNvY2tfZGlhZ190ZXN0OiB2c29j a19kaWFnX3Rlc3QubyB0aW1lb3V0Lm8gY29udHJvbC5vIHV0aWwubw0KK3Zzb2NrX3BlcmY6IHZz b2NrX3BlcmYubw0KIA0KIENGTEFHUyArPSAtZyAtTzIgLVdlcnJvciAtV2FsbCAtSS4gLUkuLi8u Li9pbmNsdWRlIC1JLi4vLi4vLi4vdXNyL2luY2x1ZGUgLVduby1wb2ludGVyLXNpZ24gLWZuby1z dHJpY3Qtb3ZlcmZsb3cgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gLU1NRCAtVV9G T1JUSUZZX1NPVVJDRSAtRF9HTlVfU09VUkNFDQogLlBIT05ZOiBhbGwgdGVzdCBjbGVhbg0KZGlm ZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svUkVBRE1FIGIvdG9vbHMvdGVzdGluZy92c29j ay9SRUFETUUNCmluZGV4IDRkNTA0NWU3ZDJjMy4uNjRjNTc1N2I3ZWNjIDEwMDY0NA0KLS0tIGEv dG9vbHMvdGVzdGluZy92c29jay9SRUFETUUNCisrKyBiL3Rvb2xzL3Rlc3RpbmcvdnNvY2svUkVB RE1FDQpAQCAtMzUsMyArMzUsMzcgQEAgSW52b2tlIHRlc3QgYmluYXJpZXMgaW4gYm90aCBkaXJl Y3Rpb25zIGFzIGZvbGxvd3M6DQogICAgICAgICAgICAgICAgICAgICAgICAtLWNvbnRyb2wtcG9y dD0kR1VFU1RfSVAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgLS1jb250cm9sLXBvcnQ9MTIz NCBcDQogICAgICAgICAgICAgICAgICAgICAgICAtLXBlZXItY2lkPTMNCisNCit2c29ja19wZXJm IHV0aWxpdHkNCistLS0tLS0tLS0tLS0tLS0tLS0tDQorJ3Zzb2NrX3BlcmYnIGlzIGEgc2ltcGxl IHRvb2wgdG8gbWVhc3VyZSB2c29jayBwZXJmb3JtYW5jZS4gSXQgd29ya3MgaW4NCitzZW5kZXIv cmVjZWl2ZXIgbW9kZXM6IHNlbmRlciB3YWl0cyBmb3IgY29ubmVjdGlvbiBhdCBzcGVjaWZpZWQg cG9ydCwNCithbmQgYWZ0ZXIgYWNjZXB0aW5nIGl0LCBzdGFydHMgZGF0YSB0cmFuc21pc3Npb24g dG8gdGhlIHJlY2VpdmVyLiBBZnRlciBkYXRhDQorcHJvY2Vzc2luZyBpcyBkb25lLCBpdCBwcmlu dHMgc2V2ZXJhbCBtZXRyaWNzKHNlZSBiZWxvdykuDQorDQorVXNhZ2U6DQorIyBydW4gYXMgc2Vu ZGVyDQorIyBsaXN0ZW4gcG9ydCAxMjM0LCB0eCBidWZmZXIgc2l6ZSBpcyAxTUIsIHNlbmQgb2Yg MUcgZGF0YQ0KKy4vdnNvY2tfcGVyZiAtLXNlbmRlciAtLXBvcnQgMTIzNCAtLWJ1Zi1zaXplIDFN QiAtLW1iIDFHDQorDQorT3V0cHV0Og0KK3R4IHBlcmZvcm1hbmNlOiBBIEdiL3MNCisNCitPdXRw dXQgZXhwbGFuYXRpb246DQorQSBpcyBjYWxjdWxhdGVkIGFzICJudW1iZXIgb2YgYnl0ZXMgdG8g c2VuZCIgLyAidGltZSBpbiB0eCBsb29wIg0KKw0KKyMgcnVuIGFzIHJlY2VpdmVyDQorIyBjb25u ZWN0IHRvIENJRCAyLCBwb3J0IDEyMzQsIHJ4IGJ1ZmZlciBzaXplIGlzIDFNQiwgcGVlciBidWYg aXMgMUcsIFNPX1JDVkxPV0FUIGlzIDY1NTM2DQorLi92c29ja19wZXJmIC0tY2lkIDIgLS1wb3J0 IDEyMzQgLS1idWYtc2l6ZSAxTUIgLS12c2stc2l6ZSAxRyAtc29fcmN2bG93YXQgNjU1MzYNCisN CitPdXRwdXQ6DQorcnggcGVyZm9ybWFuY2U6IEEgR2Ivcw0KK3RvdGFsIGluICdyZWFkKCknOiBC IHNlYw0KK1BPTExJTiB3YWtldXBzOiBDDQorYXZlcmFnZSBpbiAncmVhZCgpJzogRCBucw0KKw0K K091dHB1dCBleHBsYW5hdGlvbjoNCitBIGlzIGNhbGN1bGF0ZWQgYXMgIm51bWJlciBvZiByZWNl aXZlZCBieXRlcyIgLyAidGltZSBpbiByeCBsb29wIi4NCitCIGlzIHRpbWUsIHNwZW50IGluICdy ZWFkKCknIHN5c3RlbSBjYWxsKGV4Y2x1ZGluZyAncG9sbCgpJykNCitDIGlzIG51bWJlciBvZiAn cG9sbCgpJyB3YWtlIHVwcyB3aXRoIFBPTExJTiBiaXQgc2V0Lg0KK0QgaXMgQiAvIEMsIGUuZy4g YXZlcmFnZSBhbW91bnQgb2YgdGltZSwgc3BlbnQgaW4gc2luZ2xlICdyZWFkKCknLg0KZGlmZiAt LWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfcGVyZi5jIGIvdG9vbHMvdGVzdGluZy92 c29jay92c29ja19wZXJmLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw MDAuLjY5ZTNiMjQ4NjhkNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvdG9vbHMvdGVzdGluZy92c29j ay92c29ja19wZXJmLmMNCkBAIC0wLDAgKzEsNDQ5IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQ0KKy8qDQorICogdnNvY2tfcGVyZiAtIGJlbmNobWFyayB1dGls aXR5IGZvciB2c29jay4NCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMiBTYmVyRGV2aWNlcy4N CisgKg0KKyAqIEF1dGhvcjogQXJzZW5peSBLcmFzbm92IDxBVktyYXNub3ZAc2JlcmRldmljZXMu cnU+DQorICovDQorI2luY2x1ZGUgPGdldG9wdC5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNp bmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlIDxzdHJp bmcuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1 ZGUgPHRpbWUuaD4NCisjaW5jbHVkZSA8c3lzL21tYW4uaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+ DQorI2luY2x1ZGUgPHBvbGwuaD4NCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KKyNpbmNsdWRl IDxsaW51eC92bV9zb2NrZXRzLmg+DQorDQorI2RlZmluZSBERUZBVUxUX0JVRl9TSVpFX0JZVEVT CSgxMjggKiAxMDI0KQ0KKyNkZWZpbmUgREVGQVVMVF9UT19TRU5EX0JZVEVTCSg2NCAqIDEwMjQp DQorI2RlZmluZSBERUZBVUxUX1ZTT0NLX0JVRl9CWVRFUyAoMjU2ICogMTAyNCkNCisjZGVmaW5l IERFRkFVTFRfUkNWTE9XQVRfQllURVMJMQ0KKyNkZWZpbmUgREVGQVVMVF9QT1JUCQkxMjM0DQor I2RlZmluZSBERUZBVUxUX0NJRAkJMg0KKw0KKyNkZWZpbmUgQllURVNfUEVSX0dCCQkoMTAyNCAq IDEwMjQgKiAxMDI0VUxMKQ0KKyNkZWZpbmUgTlNFQ19QRVJfU0VDCQkoMTAwMDAwMDAwMFVMTCkN CisNCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnQgPSBERUZBVUxUX1BPUlQ7DQorc3RhdGljIHVu c2lnbmVkIGxvbmcgYnVmX3NpemVfYnl0ZXMgPSBERUZBVUxUX0JVRl9TSVpFX0JZVEVTOw0KK3N0 YXRpYyB1bnNpZ25lZCBsb25nIHZzb2NrX2J1Zl9ieXRlcyA9IERFRkFVTFRfVlNPQ0tfQlVGX0JZ VEVTOw0KKw0KK3N0YXRpYyBpbmxpbmUgdGltZV90IGN1cnJlbnRfbnNlYyh2b2lkKQ0KK3sNCisJ c3RydWN0IHRpbWVzcGVjIHRzOw0KKw0KKwlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElN RSwgJnRzKSkgew0KKwkJcGVycm9yKCJjbG9ja19nZXR0aW1lIik7DQorCQlleGl0KEVYSVRfRkFJ TFVSRSk7DQorCX0NCisNCisJcmV0dXJuICh0cy50dl9zZWMgKiBOU0VDX1BFUl9TRUMpICsgdHMu dHZfbnNlYzsNCit9DQorDQorLyogRnJvbSBsaWIvY21kbGluZS5jLiAqLw0KK3N0YXRpYyB1bnNp Z25lZCBsb25nIG1lbXBhcnNlKGNvbnN0IGNoYXIgKnB0cikNCit7DQorCWNoYXIgKmVuZHB0cjsN CisNCisJdW5zaWduZWQgbG9uZyBsb25nIHJldCA9IHN0cnRvdWxsKHB0ciwgJmVuZHB0ciwgMCk7 DQorDQorCXN3aXRjaCAoKmVuZHB0cikgew0KKwljYXNlICdFJzoNCisJY2FzZSAnZSc6DQorCQly ZXQgPDw9IDEwOw0KKwljYXNlICdQJzoNCisJY2FzZSAncCc6DQorCQlyZXQgPDw9IDEwOw0KKwlj YXNlICdUJzoNCisJY2FzZSAndCc6DQorCQlyZXQgPDw9IDEwOw0KKwljYXNlICdHJzoNCisJY2Fz ZSAnZyc6DQorCQlyZXQgPDw9IDEwOw0KKwljYXNlICdNJzoNCisJY2FzZSAnbSc6DQorCQlyZXQg PDw9IDEwOw0KKwljYXNlICdLJzoNCisJY2FzZSAnayc6DQorCQlyZXQgPDw9IDEwOw0KKwkJZW5k cHRyKys7DQorCWRlZmF1bHQ6DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30N CisNCitzdGF0aWMgdm9pZCB2c29ja19pbmNyZWFzZV9idWZfc2l6ZShpbnQgZmQpDQorew0KKwlp ZiAoc2V0c29ja29wdChmZCwgQUZfVlNPQ0ssIFNPX1ZNX1NPQ0tFVFNfQlVGRkVSX01BWF9TSVpF LA0KKwkJICAgICAgICZ2c29ja19idWZfYnl0ZXMsIHNpemVvZih2c29ja19idWZfYnl0ZXMpKSkg ew0KKwkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7DQorCQlleGl0KEVYSVRfRkFJTFVSRSk7DQorCX0N CisNCisJaWYgKHNldHNvY2tvcHQoZmQsIEFGX1ZTT0NLLCBTT19WTV9TT0NLRVRTX0JVRkZFUl9T SVpFLA0KKwkJICAgICAgICZ2c29ja19idWZfYnl0ZXMsIHNpemVvZih2c29ja19idWZfYnl0ZXMp KSkgew0KKwkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7DQorCQlleGl0KEVYSVRfRkFJTFVSRSk7DQor CX0NCit9DQorDQorc3RhdGljIGludCB2c29ja19jb25uZWN0KHVuc2lnbmVkIGludCBjaWQsIHVu c2lnbmVkIGludCBwb3J0KQ0KK3sNCisJdW5pb24gew0KKwkJc3RydWN0IHNvY2thZGRyIHNhOw0K KwkJc3RydWN0IHNvY2thZGRyX3ZtIHN2bTsNCisJfSBhZGRyID0gew0KKwkJLnN2bSA9IHsNCisJ CQkuc3ZtX2ZhbWlseSA9IEFGX1ZTT0NLLA0KKwkJCS5zdm1fcG9ydCA9IHBvcnQsDQorCQkJLnN2 bV9jaWQgPSBjaWQsDQorCQl9LA0KKwl9Ow0KKwlpbnQgZmQ7DQorDQorCWZkID0gc29ja2V0KEFG X1ZTT0NLLCBTT0NLX1NUUkVBTSwgMCk7DQorDQorCWlmIChmZCA8IDApDQorCQlyZXR1cm4gLTE7 DQorDQorCXZzb2NrX2luY3JlYXNlX2J1Zl9zaXplKGZkKTsNCisNCisJaWYgKGNvbm5lY3QoZmQs ICZhZGRyLnNhLCBzaXplb2YoYWRkci5zdm0pKSA8IDApIHsNCisJCWNsb3NlKGZkKTsNCisJCXJl dHVybiAtMTsNCisJfQ0KKw0KKwlyZXR1cm4gZmQ7DQorfQ0KKw0KK3N0YXRpYyBmbG9hdCBnZXRf Z2Jwcyh1bnNpZ25lZCBsb25nIGJ5dGVzLCB0aW1lX3QgbnNfZGVsdGEpDQorew0KKwlyZXR1cm4g KChmbG9hdClieXRlcyAvIEJZVEVTX1BFUl9HQikgLw0KKwkgICAgICAgKChmbG9hdCluc19kZWx0 YSAvIE5TRUNfUEVSX1NFQyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJ1bl9zZW5kZXIodW5zaWdu ZWQgbG9uZyB0b19zZW5kX2J5dGVzKQ0KK3sNCisJdGltZV90IHR4X2JlZ2luX25zOw0KKwlzaXpl X3QgdG90YWxfc2VuZDsNCisJaW50IGNsaWVudF9mZDsNCisJY2hhciAqZGF0YTsNCisJaW50IGZk Ow0KKwl1bmlvbiB7DQorCQlzdHJ1Y3Qgc29ja2FkZHIgc2E7DQorCQlzdHJ1Y3Qgc29ja2FkZHJf dm0gc3ZtOw0KKwl9IGFkZHIgPSB7DQorCQkuc3ZtID0gew0KKwkJCS5zdm1fZmFtaWx5ID0gQUZf VlNPQ0ssDQorCQkJLnN2bV9wb3J0ID0gcG9ydCwNCisJCQkuc3ZtX2NpZCA9IFZNQUREUl9DSURf QU5ZLA0KKwkJfSwNCisJfTsNCisJdW5pb24gew0KKwkJc3RydWN0IHNvY2thZGRyIHNhOw0KKwkJ c3RydWN0IHNvY2thZGRyX3ZtIHN2bTsNCisJfSBjbGllbnRhZGRyOw0KKw0KKwlzb2NrbGVuX3Qg Y2xpZW50YWRkcl9sZW4gPSBzaXplb2YoY2xpZW50YWRkci5zdm0pOw0KKw0KKwlwcmludGYoIlJ1 biBhcyBzZW5kZXJcbiIpOw0KKwlwcmludGYoIkxpc3RlbiBwb3J0ICV1XG4iLCBwb3J0KTsNCisJ cHJpbnRmKCJTZW5kICVsdSBieXRlc1xuIiwgdG9fc2VuZF9ieXRlcyk7DQorCXByaW50ZigiVFgg YnVmZmVyICVsdSBieXRlc1xuIiwgYnVmX3NpemVfYnl0ZXMpOw0KKwlwcmludGYoIlBlZXIgYnVm ZmVyICVsdSBieXRlc1xuIiwgdnNvY2tfYnVmX2J5dGVzKTsNCisNCisJZmQgPSBzb2NrZXQoQUZf VlNPQ0ssIFNPQ0tfU1RSRUFNLCAwKTsNCisNCisJaWYgKGZkIDwgMCkgew0KKwkJcGVycm9yKCJz b2NrZXQiKTsNCisJCWV4aXQoRVhJVF9GQUlMVVJFKTsNCisJfQ0KKw0KKwlpZiAoYmluZChmZCwg JmFkZHIuc2EsIHNpemVvZihhZGRyLnN2bSkpIDwgMCkgew0KKwkJcGVycm9yKCJiaW5kIik7DQor CQlleGl0KEVYSVRfRkFJTFVSRSk7DQorCX0NCisNCisJaWYgKGxpc3RlbihmZCwgMSkgPCAwKSB7 DQorCQlwZXJyb3IoImxpc3RlbiIpOw0KKwkJZXhpdChFWElUX0ZBSUxVUkUpOw0KKwl9DQorDQor CWNsaWVudF9mZCA9IGFjY2VwdChmZCwgJmNsaWVudGFkZHIuc2EsICZjbGllbnRhZGRyX2xlbik7 DQorDQorCWlmIChjbGllbnRfZmQgPCAwKSB7DQorCQlwZXJyb3IoImFjY2VwdCIpOw0KKwkJZXhp dChFWElUX0ZBSUxVUkUpOw0KKwl9DQorDQorCXZzb2NrX2luY3JlYXNlX2J1Zl9zaXplKGNsaWVu dF9mZCk7DQorDQorCWRhdGEgPSBtYWxsb2MoYnVmX3NpemVfYnl0ZXMpOw0KKw0KKwlpZiAoIWRh dGEpIHsNCisJCXByaW50ZigibWFsbG9jIGZhaWxlZFxuIik7DQorCQlleGl0KEVYSVRfRkFJTFVS RSk7DQorCX0NCisNCisJbWVtc2V0KGRhdGEsIDAsIGJ1Zl9zaXplX2J5dGVzKTsNCisJdG90YWxf c2VuZCA9IDA7DQorCXR4X2JlZ2luX25zID0gY3VycmVudF9uc2VjKCk7DQorDQorCXdoaWxlICh0 b3RhbF9zZW5kIDwgdG9fc2VuZF9ieXRlcykgew0KKwkJc3NpemVfdCBzZW50Ow0KKw0KKwkJc2Vu dCA9IHdyaXRlKGNsaWVudF9mZCwgZGF0YSwgYnVmX3NpemVfYnl0ZXMpOw0KKw0KKwkJaWYgKHNl bnQgPD0gMCkgew0KKwkJCXBlcnJvcigid3JpdGUiKTsNCisJCQlleGl0KEVYSVRfRkFJTFVSRSk7 DQorCQl9DQorDQorCQl0b3RhbF9zZW5kICs9IHNlbnQ7DQorCX0NCisNCisJcHJpbnRmKCJ0eCBw ZXJmb3JtYW5jZTogJWYgR2Ivc1xuIiwNCisJICAgICAgIGdldF9nYnBzKHRvdGFsX3NlbmQsIGN1 cnJlbnRfbnNlYygpIC0gdHhfYmVnaW5fbnMpKTsNCisNCisJY2xvc2UoY2xpZW50X2ZkKTsNCisJ Y2xvc2UoZmQpOw0KKw0KKwlmcmVlKGRhdGEpOw0KK30NCisNCitzdGF0aWMgdm9pZCBydW5fcmVj ZWl2ZXIoaW50IHBlZXJfY2lkLCB1bnNpZ25lZCBsb25nIHJjdmxvd2F0X2J5dGVzKQ0KK3sNCisJ dW5zaWduZWQgaW50IHJlYWRfY250Ow0KKwl0aW1lX3QgcnhfYmVnaW5fbnM7DQorCXRpbWVfdCBp bl9yZWFkX25zOw0KKwlzaXplX3QgdG90YWxfcmVjdjsNCisJdm9pZCAqZGF0YTsNCisJaW50IGZk Ow0KKw0KKwlwcmludGYoIlJ1biBhcyByZWNlaXZlclxuIik7DQorCXByaW50ZigiQ29ubmVjdCB0 byAlaToldVxuIiwgcGVlcl9jaWQsIHBvcnQpOw0KKwlwcmludGYoIlJYIGJ1ZmZlciAlbHUgYnl0 ZXNcbiIsIGJ1Zl9zaXplX2J5dGVzKTsNCisJcHJpbnRmKCJQZWVyIGJ1ZmZlciAlbHUgYnl0ZXNc biIsIHZzb2NrX2J1Zl9ieXRlcyk7DQorCXByaW50ZigiU09fUkNWTE9XQVQgJWx1IGJ5dGVzXG4i LCByY3Zsb3dhdF9ieXRlcyk7DQorDQorCWZkID0gdnNvY2tfY29ubmVjdChwZWVyX2NpZCwgcG9y dCk7DQorDQorCWlmIChmZCA8IDApIHsNCisJCXBlcnJvcigic29ja2V0Iik7DQorCQlleGl0KEVY SVRfRkFJTFVSRSk7DQorCX0NCisNCisJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNP X1JDVkxPV0FULA0KKwkJICAgICAgICZyY3Zsb3dhdF9ieXRlcywNCisJCSAgICAgICBzaXplb2Yo cmN2bG93YXRfYnl0ZXMpKSkgew0KKwkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7DQorCQlleGl0KEVY SVRfRkFJTFVSRSk7DQorCX0NCisNCisJZGF0YSA9IG1tYXAoTlVMTCwgYnVmX3NpemVfYnl0ZXMs IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsDQorCQkgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklW QVRFIHwgTUFQX1BPUFVMQVRFLCAtMSwgMCk7DQorDQorCWlmIChkYXRhID09IE1BUF9GQUlMRUQp IHsNCisJCXBlcnJvcigibW1hcCIpOw0KKwkJZXhpdChFWElUX0ZBSUxVUkUpOw0KKwl9DQorDQor CXJlYWRfY250ID0gMDsNCisJaW5fcmVhZF9ucyA9IDA7DQorCXRvdGFsX3JlY3YgPSAwOw0KKwly eF9iZWdpbl9ucyA9IGN1cnJlbnRfbnNlYygpOw0KKw0KKwl3aGlsZSAoMSkgew0KKwkJc3RydWN0 IHBvbGxmZCBmZHMgPSB7IDAgfTsNCisNCisJCWZkcy5mZCA9IGZkOw0KKwkJZmRzLmV2ZW50cyA9 IFBPTExJTiB8IFBPTExFUlIgfCBQT0xMSFVQIHwNCisJCQkgICAgIFBPTExSREhVUCB8IFBPTExO VkFMOw0KKw0KKwkJaWYgKHBvbGwoJmZkcywgMSwgLTEpIDwgMCkgew0KKwkJCXBlcnJvcigicG9s bCIpOw0KKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsNCisJCX0NCisNCisJCWlmIChmZHMucmV2ZW50 cyAmIFBPTExFUlIpIHsNCisJCQlwcmludGYoIidwb2xsKCknIGVycm9yXG4iKTsNCisJCQlleGl0 KEVYSVRfRkFJTFVSRSk7DQorCQl9DQorDQorCQlpZiAoZmRzLnJldmVudHMgJiBQT0xMSU4pIHsN CisJCQlzc2l6ZV90IGJ5dGVzX3JlYWQ7DQorCQkJdGltZV90IHQ7DQorDQorCQkJdCA9IGN1cnJl bnRfbnNlYygpOw0KKwkJCWJ5dGVzX3JlYWQgPSByZWFkKGZkLCBkYXRhLCBidWZfc2l6ZV9ieXRl cyk7DQorCQkJaW5fcmVhZF9ucyArPSAoY3VycmVudF9uc2VjKCkgLSB0KTsNCisJCQlyZWFkX2Nu dCsrOw0KKw0KKwkJCWlmICghYnl0ZXNfcmVhZCkNCisJCQkJYnJlYWs7DQorDQorCQkJaWYgKGJ5 dGVzX3JlYWQgPCAwKSB7DQorCQkJCXBlcnJvcigicmVjdiIpOw0KKwkJCQlleGl0KEVYSVRfRkFJ TFVSRSk7DQorCQkJfQ0KKw0KKwkJCXRvdGFsX3JlY3YgKz0gYnl0ZXNfcmVhZDsNCisJCX0NCisN CisJCWlmIChmZHMucmV2ZW50cyAmIChQT0xMSFVQIHwgUE9MTFJESFVQKSkNCisJCQlicmVhazsN CisJfQ0KKw0KKwlwcmludGYoInJ4IHBlcmZvcm1hbmNlOiAlZiBHYi9zXG4iLA0KKwkgICAgICAg Z2V0X2dicHModG90YWxfcmVjdiwgY3VycmVudF9uc2VjKCkgLSByeF9iZWdpbl9ucykpOw0KKwlw cmludGYoInRvdGFsIHRpbWUgaW4gJ3JlYWQoKSc6ICVmIHNlY1xuIiwgKGZsb2F0KWluX3JlYWRf bnMgLyBOU0VDX1BFUl9TRUMpOw0KKwlwcmludGYoIlBPTExJTiB3YWtldXBzOiAlaVxuIiwgcmVh ZF9jbnQpOw0KKwlwcmludGYoImF2ZXJhZ2UgdGltZSBpbiAncmVhZCgpJzogJWYgbnNcbiIsIChm bG9hdClpbl9yZWFkX25zIC8gcmVhZF9jbnQpOw0KKw0KKwltdW5tYXAoZGF0YSwgYnVmX3NpemVf Ynl0ZXMpOw0KKwljbG9zZShmZCk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBjaGFyIG9wdHN0cmlu Z1tdID0gIiI7DQorc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsNCisJ ew0KKwkJLm5hbWUgPSAiaGVscCIsDQorCQkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LA0KKwkJLnZh bCA9ICdIJywNCisJfSwNCisJew0KKwkJLm5hbWUgPSAic2VuZGVyIiwNCisJCS5oYXNfYXJnID0g bm9fYXJndW1lbnQsDQorCQkudmFsID0gJ1MnLA0KKwl9LA0KKwl7DQorCQkubmFtZSA9ICJwb3J0 IiwNCisJCS5oYXNfYXJnID0gcmVxdWlyZWRfYXJndW1lbnQsDQorCQkudmFsID0gJ1AnLA0KKwl9 LA0KKwl7DQorCQkubmFtZSA9ICJjaWQiLA0KKwkJLmhhc19hcmcgPSByZXF1aXJlZF9hcmd1bWVu dCwNCisJCS52YWwgPSAnQycsDQorCX0sDQorCXsNCisJCS5uYW1lID0gIm1iIiwNCisJCS5oYXNf YXJnID0gcmVxdWlyZWRfYXJndW1lbnQsDQorCQkudmFsID0gJ00nLA0KKwl9LA0KKwl7DQorCQku bmFtZSA9ICJidWYtc2l6ZSIsDQorCQkuaGFzX2FyZyA9IHJlcXVpcmVkX2FyZ3VtZW50LA0KKwkJ LnZhbCA9ICdCJywNCisJfSwNCisJew0KKwkJLm5hbWUgPSAidnNrLXNpemUiLA0KKwkJLmhhc19h cmcgPSByZXF1aXJlZF9hcmd1bWVudCwNCisJCS52YWwgPSAnVicsDQorCX0sDQorCXsNCisJCS5u YW1lID0gInNvX3Jjdmxvd2F0IiwNCisJCS5oYXNfYXJnID0gcmVxdWlyZWRfYXJndW1lbnQsDQor CQkudmFsID0gJ1InLA0KKwl9LA0KKwl7fSwNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIHVzYWdlKHZv aWQpDQorew0KKwlwcmludGYoIkhlbHA6XG4iDQorCSAgICAgICAiXG4iDQorCSAgICAgICAiVGhp cyBpcyBiZW5jaG1hcmtpbmcgdXRpbGl0eSwgdG8gdGVzdCB2c29jayBwZXJmb3JtYW5jZS5cbiIN CisJICAgICAgICJJdCBydW5zIGluIHR3byBtb2Rlczogc2VuZGVyIG9yIHJlY2VpdmVyLiBJbiBz ZW5kZXIgbW9kZSwgaXQgd2FpdHNcbiINCisJICAgICAgICJjb25uZWN0aW9uIGZyb20gcmVjZWl2 ZXIsIGFuZCB3aGVuIGVzdGFibGlzaGVkLCBzZW5kZXIgc3RhcnRzIGRhdGFcbiINCisJICAgICAg ICJ0cmFuc21pc3Npb24uXG4iDQorCSAgICAgICAiXG4iDQorCSAgICAgICAiT3B0aW9uczpcbiIN CisJICAgICAgICIgIC0taGVscAkJCVRoaXMgaGVscCBtZXNzYWdlXG4iDQorCSAgICAgICAiICAt LXNlbmRlcgkJCVNlbmRlciBtb2RlKHJlY2VpdmVyIGRlZmF1bHQpXG4iDQorCSAgICAgICAiICAt LXBvcnQgPHBvcnQ+CQkJUG9ydCAoJWQpXG4iDQorCSAgICAgICAiICAtLWNpZCA8Y2lkPgkJCUNJ RCBvZiB0aGUgcGVlciAoJWQpXG4iDQorCSAgICAgICAiICAtLW1iIDxieXRlcyB0byBzZW5kPgkJ Qnl0ZXMgdG8gc2VuZCAoJWQpXG4iDQorCSAgICAgICAiICAtLWJ1Zi1zaXplIDxidWZmZXIgc2l6 ZT4JUngvVHggYnVmZmVyIHNpemUgKCVkKS4gSW4gc2VuZGVyIG1vZGVcbiINCisJICAgICAgICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHNpemUgb2YgYnVmZmVyIHBhc3Nl ZCB0byAnd3JpdGUoKScuXG4iDQorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbiByZWNlaXZlciBtb2RlIGl0IGlzIHNpemUgb2YgYnVmZmVyIHBhc3NlZFxuIg0KKwkg ICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gJ3JlYWQoKScuXG4iDQor CSAgICAgICAiICAtLXZzay1zaXplIDxwZWVyIGJ1ZmZlciBzaXplPglTb2NrZXQgYnVmZmVyIHNp emUgKCVkKVxuIg0KKwkgICAgICAgIiAgLS1zb19yY3Zsb3dhdCA8U09fUkNWTE9XQVQ+CVNPX1JD VkxPV0FUICglZClcbiINCisJICAgICAgICJcbiIsIERFRkFVTFRfUE9SVCwgREVGQVVMVF9DSUQs IERFRkFVTFRfVE9fU0VORF9CWVRFUywNCisJICAgICAgIERFRkFVTFRfQlVGX1NJWkVfQllURVMs IERFRkFVTFRfVlNPQ0tfQlVGX0JZVEVTLA0KKwkgICAgICAgREVGQVVMVF9SQ1ZMT1dBVF9CWVRF Uyk7DQorCWV4aXQoRVhJVF9GQUlMVVJFKTsNCit9DQorDQorc3RhdGljIGxvbmcgc3RydG9seChj b25zdCBjaGFyICphcmcpDQorew0KKwlsb25nIHZhbHVlOw0KKwljaGFyICplbmQ7DQorDQorCXZh bHVlID0gc3RydG9sKGFyZywgJmVuZCwgMTApOw0KKw0KKwlpZiAoZW5kICE9IGFyZyArIHN0cmxl bihhcmcpKQ0KKwkJdXNhZ2UoKTsNCisNCisJcmV0dXJuIHZhbHVlOw0KK30NCisNCitpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQorew0KKwl1bnNpZ25lZCBsb25nIHRvX3NlbmRfYnl0 ZXMgPSBERUZBVUxUX1RPX1NFTkRfQllURVM7DQorCXVuc2lnbmVkIGxvbmcgcmN2bG93YXRfYnl0 ZXMgPSBERUZBVUxUX1JDVkxPV0FUX0JZVEVTOw0KKwlib29sIHJlY2VpdmVyX21vZGUgPSB0cnVl Ow0KKwlpbnQgcGVlcl9jaWQgPSBERUZBVUxUX0NJRDsNCisNCisJd2hpbGUgKDEpIHsNCisJCWlu dCBvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBOVUxM KTsNCisNCisJCWlmIChvcHQgPT0gLTEpDQorCQkJYnJlYWs7DQorDQorCQlzd2l0Y2ggKG9wdCkg ew0KKwkJY2FzZSAnVic6IC8qIFBlZXIgYnVmZmVyIHNpemUuICovDQorCQkJdnNvY2tfYnVmX2J5 dGVzID0gbWVtcGFyc2Uob3B0YXJnKTsNCisJCQlicmVhazsNCisJCWNhc2UgJ1InOiAvKiBTT19S Q1ZMT1dBVCB2YWx1ZS4gKi8NCisJCQlyY3Zsb3dhdF9ieXRlcyA9IG1lbXBhcnNlKG9wdGFyZyk7 DQorCQkJYnJlYWs7DQorCQljYXNlICdDJzogLyogQ0lEIHRvIGNvbm5lY3QgdG8uICovDQorCQkJ cGVlcl9jaWQgPSBzdHJ0b2x4KG9wdGFyZyk7DQorCQkJYnJlYWs7DQorCQljYXNlICdQJzogLyog UG9ydCB0byBjb25uZWN0IHRvLiAqLw0KKwkJCXBvcnQgPSBzdHJ0b2x4KG9wdGFyZyk7DQorCQkJ YnJlYWs7DQorCQljYXNlICdNJzogLyogQnl0ZXMgdG8gc2VuZC4gKi8NCisJCQl0b19zZW5kX2J5 dGVzID0gbWVtcGFyc2Uob3B0YXJnKTsNCisJCQlicmVhazsNCisJCWNhc2UgJ0InOiAvKiBTaXpl IG9mIHJ4L3R4IGJ1ZmZlci4gKi8NCisJCQlidWZfc2l6ZV9ieXRlcyA9IG1lbXBhcnNlKG9wdGFy Zyk7DQorCQkJYnJlYWs7DQorCQljYXNlICdTJzogLyogU2VuZGVyIG1vZGUuICovDQorCQkJcmVj ZWl2ZXJfbW9kZSA9IGZhbHNlOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSAnSCc6IC8qIEhlbHAuICov DQorCQkJdXNhZ2UoKTsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJdXNhZ2UoKTsNCisJ CX0NCisJfQ0KKw0KKwlpZiAocmVjZWl2ZXJfbW9kZSkNCisJCXJ1bl9yZWNlaXZlcihwZWVyX2Np ZCwgcmN2bG93YXRfYnl0ZXMpOw0KKwllbHNlDQorCQlydW5fc2VuZGVyKHRvX3NlbmRfYnl0ZXMp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQotLSANCjIuMjUuMQ0K