From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Azkpretf; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTP id C3DF25A061C for ; Tue, 26 Nov 2024 16:41:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1732635678; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=acx3RhjOtVF0oz5CrInWh2J6H00rHanoJsz7iGIwiUQ=; b=AzkpretfP8E9MCeQ5TUY3v0ilSuAXgs7DPk06ZVooj/gq3+6WJ4BBqGShCex076X755wrB 5W2gi9NcXMqY49AyoJUbzdayao5fn7Yv44BgK50FLW1mRppa72r6g+3x5+UMjp7nT7yM/k 42zLJGpptLweCBvCfB+IFcdFMvmDxgA= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-684-QVE_HlobPZ2PawYk471qyw-1; Tue, 26 Nov 2024 10:41:17 -0500 X-MC-Unique: QVE_HlobPZ2PawYk471qyw-1 X-Mimecast-MFC-AGG-ID: QVE_HlobPZ2PawYk471qyw Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-4668d3833a4so46208091cf.1 for ; Tue, 26 Nov 2024 07:41:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732635676; x=1733240476; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=acx3RhjOtVF0oz5CrInWh2J6H00rHanoJsz7iGIwiUQ=; b=bxLhHWG35kU2Pp71xL49PTtvw7EfAke1D2/0yPWRQUs7WX81x5WypKgTphU0HM33kd gqQIUKLquy88QwMf07Ae2FkUCrwwi0buO/8dRr1JRHeLIDvZ9CnQpsJBM3wwrZ0qcAAm Y55Yn0gLqItiAt6PV29ln1VnxmLCIlyhfTFSvnWHTqO2RVw2zdMggP5KPvQM5upSpjT8 RcAtEYpUoETxe7lv70EZdS18KqXWe1qohPDMBG0vsYUG9uV5VvcL4faGYZTLBUJ1SOHy 2bXBxJJtYlQ2DV9qDiUkG5PpIyK4WQwynze4r1YNbqEolQaJsKg0rMdOa9pVo6/9FYv7 SM4A== X-Gm-Message-State: AOJu0YwHzRaMwlnhHRhhe+CntAh11ACa2mx7+xp0Ea6SV+Ig5CUhs652 CQiEQBH4m7hCRz+g5Cm36GUWclx5mE5wK0HgDk0LmPDuXkYZKLSGY6upQ6utY/+D8UzoSyfKlKi ze4jOhR1yTDmUqevpaSnce0sPesteip7P/bAsuv66f77Ufe12MQ== X-Gm-Gg: ASbGncucjselfNjuhk5G4R2evbSgC7NPDUxUV8Y1udm2ATEmEt2ukpy2kCRfaA3Zc30 ESSEVxBHQBrhVya0A2kHGzOFFLZ6URlVkJfP0yRCC68iKQoyJIcuq5eRlcMZU1wALgO9OnRrl2D S+8uL5VwWE5ZTYqwy/DbcmowBny14VUBnuwX8SJTYCSTeokWkk09zDsMMzsM9QiGv0lKXqUxANs MXw22tpsWQFfTMJ9f4DeqRaM+MuwSijyQFDyUI3OSuWIM+gIkQWMkn2150EzDdmeiVvbZXwc7jW qvmeo0hCiuhx X-Received: by 2002:a05:622a:1346:b0:466:a4f4:8957 with SMTP id d75a77b69052e-466a4f48be0mr34827141cf.21.1732635676616; Tue, 26 Nov 2024 07:41:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IHDn8BAKEzumdIRZFCTFtsyzzktAOjc5gJGcyw7jvaDvbA74NKDYaOkBelcBm6vM1bkKLTrqg== X-Received: by 2002:a05:622a:1346:b0:466:a4f4:8957 with SMTP id d75a77b69052e-466a4f48be0mr34826841cf.21.1732635676140; Tue, 26 Nov 2024 07:41:16 -0800 (PST) Received: from ?IPV6:2a01:e0a:e10:ef90:343a:68f:2e91:95c? ([2a01:e0a:e10:ef90:343a:68f:2e91:95c]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4653c47f55esm60576261cf.68.2024.11.26.07.41.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 Nov 2024 07:41:15 -0800 (PST) Message-ID: <1113d539-447a-41fb-95fb-166d0349a1fb@redhat.com> Date: Tue, 26 Nov 2024 16:41:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v14 7/9] vhost-user: add vhost-user To: Stefano Brivio References: <20241122164337.3377854-1-lvivier@redhat.com> <20241122164337.3377854-8-lvivier@redhat.com> <20241126061443.3287f86d@elisabeth> <20241126145334.13d2301b@elisabeth> <50e95450-620c-47b3-bc70-168d1659fdb5@redhat.com> <20241126162005.004ae713@elisabeth> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= xsFNBFYFJhkBEAC2me7w2+RizYOKZM+vZCx69GTewOwqzHrrHSG07MUAxJ6AY29/+HYf6EY2 WoeuLWDmXE7A3oJoIsRecD6BXHTb0OYS20lS608anr3B0xn5g0BX7es9Mw+hV/pL+63EOCVm SUVTEQwbGQN62guOKnJJJfphbbv82glIC/Ei4Ky8BwZkUuXd7d5NFJKC9/GDrbWdj75cDNQx UZ9XXbXEKY9MHX83Uy7JFoiFDMOVHn55HnncflUncO0zDzY7CxFeQFwYRbsCXOUL9yBtqLer Ky8/yjBskIlNrp0uQSt9LMoMsdSjYLYhvk1StsNPg74+s4u0Q6z45+l8RAsgLw5OLtTa+ePM JyS7OIGNYxAX6eZk1+91a6tnqfyPcMbduxyBaYXn94HUG162BeuyBkbNoIDkB7pCByed1A7q q9/FbuTDwgVGVLYthYSfTtN0Y60OgNkWCMtFwKxRaXt1WFA5ceqinN/XkgA+vf2Ch72zBkJL RBIhfOPFv5f2Hkkj0MvsUXpOWaOjatiu0fpPo6Hw14UEpywke1zN4NKubApQOlNKZZC4hu6/ 8pv2t4HRi7s0K88jQYBRPObjrN5+owtI51xMaYzvPitHQ2053LmgsOdN9EKOqZeHAYG2SmRW LOxYWKX14YkZI5j/TXfKlTpwSMvXho+efN4kgFvFmP6WT+tPnwARAQABzSNMYXVyZW50IFZp dmllciA8bHZpdmllckByZWRoYXQuY29tPsLBeAQTAQIAIgUCVgVQgAIbAwYLCQgHAwIGFQgC CQoLBBYCAwECHgECF4AACgkQ8ww4vT8vvjwpgg//fSGy0Rs/t8cPFuzoY1cex4limJQfReLr SJXCANg9NOWy/bFK5wunj+h/RCFxIFhZcyXveurkBwYikDPUrBoBRoOJY/BHK0iZo7/WQkur 6H5losVZtrotmKOGnP/lJYZ3H6OWvXzdz8LL5hb3TvGOP68K8Bn8UsIaZJoeiKhaNR0sOJyI YYbgFQPWMHfVwHD/U+/gqRhD7apVysxv5by/pKDln1I5v0cRRH6hd8M8oXgKhF2+rAOL7gvh jEHSSWKUlMjC7YwwjSZmUkL+TQyE18e2XBk85X8Da3FznrLiHZFHQ/NzETYxRjnOzD7/kOVy gKD/o7asyWQVU65mh/ECrtjfhtCBSYmIIVkopoLaVJ/kEbVJQegT2P6NgERC/31kmTF69vn8 uQyW11Hk8tyubicByL3/XVBrq4jZdJW3cePNJbTNaT0d/bjMg5zCWHbMErUib2Nellnbg6bc 2HLDe0NLVPuRZhHUHM9hO/JNnHfvgiRQDh6loNOUnm9Iw2YiVgZNnT4soUehMZ7au8PwSl4I KYE4ulJ8RRiydN7fES3IZWmOPlyskp1QMQBD/w16o+lEtY6HSFEzsK3o0vuBRBVp2WKnssVH qeeV01ZHw0bvWKjxVNOksP98eJfWLfV9l9e7s6TaAeySKRRubtJ+21PRuYAxKsaueBfUE7ZT 7zfOwU0EVgUmGQEQALxSQRbl/QOnmssVDxWhHM5TGxl7oLNJms2zmBpcmlrIsn8nNz0rRyxT 460k2niaTwowSRK8KWVDeAW6ZAaWiYjLlTunoKwvF8vP3JyWpBz0diTxL5o+xpvy/Q6YU3BN efdq8Vy3rFsxgW7mMSrI/CxJ667y8ot5DVugeS2NyHfmZlPGE0Nsy7hlebS4liisXOrN3jFz asKyUws3VXek4V65lHwB23BVzsnFMn/bw/rPliqXGcwl8CoJu8dSyrCcd1Ibs0/Inq9S9+t0 VmWiQWfQkz4rvEeTQkp/VfgZ6z98JRW7S6l6eophoWs0/ZyRfOm+QVSqRfFZdxdP2PlGeIFM C3fXJgygXJkFPyWkVElr76JTbtSHsGWbt6xUlYHKXWo+xf9WgtLeby3cfSkEchACrxDrQpj+ Jt/JFP+q997dybkyZ5IoHWuPkn7uZGBrKIHmBunTco1+cKSuRiSCYpBIXZMHCzPgVDjk4viP brV9NwRkmaOxVvye0vctJeWvJ6KA7NoAURplIGCqkCRwg0MmLrfoZnK/gRqVJ/f6adhU1oo6 z4p2/z3PemA0C0ANatgHgBb90cd16AUxpdEQmOCmdNnNJF/3Zt3inzF+NFzHoM5Vwq6rc1JP jfC3oqRLJzqAEHBDjQFlqNR3IFCIAo4SYQRBdAHBCzkM4rWyRhuVABEBAAHCwV8EGAECAAkF AlYFJhkCGwwACgkQ8ww4vT8vvjwg9w//VQrcnVg3TsjEybxDEUBm8dBmnKqcnTBFmxN5FFtI WlEuY8+YMiWRykd8Ln9RJ/98/ghABHz9TN8TRo2b6WimV64FmlVn17Ri6FgFU3xNt9TTEChq AcNg88eYryKsYpFwegGpwUlaUaaGh1m9OrTzcQy+klVfZWaVJ9Nw0keoGRGb8j4XjVpL8+2x OhXKrM1fzzb8JtAuSbuzZSQPDwQEI5CKKxp7zf76J21YeRrEW4WDznPyVcDTa+tz++q2S/Bp P4W98bXCBIuQgs2m+OflERv5c3Ojldp04/S4NEjXEYRWdiCxN7ca5iPml5gLtuvhJMSy36gl U6IW9kn30IWuSoBpTkgV7rLUEhh9Ms82VWW/h2TxL8enfx40PrfbDtWwqRID3WY8jLrjKfTd R3LW8BnUDNkG+c4FzvvGUs8AvuqxxyHbXAfDx9o/jXfPHVRmJVhSmd+hC3mcQ+4iX5bBPBPM oDqSoLt5w9GoQQ6gDVP2ZjTWqwSRMLzNr37rJjZ1pt0DCMMTbiYIUcrhX8eveCJtY7NGWNyx FCRkhxRuGcpwPmRVDwOl39MB3iTsRighiMnijkbLXiKoJ5CDVvX5yicNqYJPKh5MFXN1bvsB kmYiStMRbrD0HoY1kx5/VozBtc70OU0EB8Wrv9hZD+Ofp0T3KOr1RUHvCZoLURfFhSQ= In-Reply-To: <20241126162005.004ae713@elisabeth> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: SF-UQdD82UPVianiTo98DVaL1CaMNEcSuJKoJzpxAP4_1732635677 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: YY3VSWVVPLFSL7PWCWYWUENHT4S7YEGH X-Message-ID-Hash: YY3VSWVVPLFSL7PWCWYWUENHT4S7YEGH X-MailFrom: lvivier@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: T24gMjYvMTEvMjAyNCAxNjoyMCwgU3RlZmFubyBCcml2aW8gd3JvdGU6DQo+IE9uIFR1ZSwgMjYg Tm92IDIwMjQgMTU6MTE6MjUgKzAxMDANCj4gTGF1cmVudCBWaXZpZXIgPGx2aXZpZXJAcmVkaGF0 LmNvbT4gd3JvdGU6DQo+IA0KPj4gT24gMjYvMTEvMjAyNCAxNDo1MywgU3RlZmFubyBCcml2aW8g d3JvdGU6DQo+Pj4gT24gVHVlLCAyNiBOb3YgMjAyNCAwNjoxNDo0MyArMDEwMA0KPj4+IFN0ZWZh bm8gQnJpdmlvIDxzYnJpdmlvQHJlZGhhdC5jb20+IHdyb3RlOg0KPj4+ICAgIA0KPj4+PiBPbiBG cmksIDIyIE5vdiAyMDI0IDE3OjQzOjM0ICswMTAwDQo+Pj4+IExhdXJlbnQgVml2aWVyIDxsdml2 aWVyQHJlZGhhdC5jb20+IHdyb3RlOg0KPj4+PiAgIA0KPj4+Pj4gKy8qKg0KPj4+Pj4gKyAqIHRj cF92dV9kYXRhX2Zyb21fc29jaygpIC0gSGFuZGxlIG5ldyBkYXRhIGZyb20gc29ja2V0LCBxdWV1 ZSB0byB2aG9zdC11c2VyLA0KPj4+Pj4gKyAqCQkJICAgICBpbiB3aW5kb3cNCj4+Pj4+ICsgKiBA YzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+Pj4+PiArICogQGNvbm46CUNvbm5lY3Rpb24gcG9pbnRl cg0KPj4+Pj4gKyAqDQo+Pj4+PiArICogUmV0dXJuOiBOZWdhdGl2ZSBvbiBjb25uZWN0aW9uIHJl c2V0LCAwIG90aGVyd2lzZQ0KPj4+Pj4gKyAqLw0KPj4+Pj4gK2ludCB0Y3BfdnVfZGF0YV9mcm9t X3NvY2soY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubikNCj4+ Pj4+ICt7DQo+Pj4+PiArCXVpbnQzMl90IHduZF9zY2FsZWQgPSBjb25uLT53bmRfZnJvbV90YXAg PDwgY29ubi0+d3NfZnJvbV90YXA7DQo+Pj4+PiArCXN0cnVjdCB2dV9kZXYgKnZkZXYgPSBjLT52 ZGV2Ow0KPj4+Pj4gKwlzdHJ1Y3QgdnVfdmlydHEgKnZxID0gJnZkZXYtPnZxW1ZIT1NUX1VTRVJf UlhfUVVFVUVdOw0KPj4+Pj4gKwljb25zdCBzdHJ1Y3QgZmxvd3NpZGUgKnRhcHNpZGUgPSBUQVBG TE9XKGNvbm4pOw0KPj4+Pj4gKwlzaXplX3QgZmlsbHNpemUsIGhkcmxlbjsNCj4+Pj4+ICsJaW50 IHY2ID0gQ09OTl9WNihjb25uKTsNCj4+Pj4+ICsJdWludDMyX3QgYWxyZWFkeV9zZW50Ow0KPj4+ Pj4gKwljb25zdCB1aW50MTZfdCAqY2hlY2s7DQo+Pj4+PiArCWludCBpLCBpb3ZfY250Ow0KPj4+ Pj4gKwlzc2l6ZV90IGxlbjsNCj4+Pj4+ICsNCj4+Pj4+ICsJaWYgKCF2dV9xdWV1ZV9lbmFibGVk KHZxKSB8fCAhdnVfcXVldWVfc3RhcnRlZCh2cSkpIHsNCj4+Pj4+ICsJCWRlYnVnKCJHb3QgcGFj a2V0LCBidXQgUlggdmlydHF1ZXVlIG5vdCB1c2FibGUgeWV0Iik7DQo+Pj4+PiArCQlyZXR1cm4g MDsNCj4+Pj4+ICsJfQ0KPj4+Pj4gKw0KPj4+Pj4gKwlhbHJlYWR5X3NlbnQgPSBjb25uLT5zZXFf dG9fdGFwIC0gY29ubi0+c2VxX2Fja19mcm9tX3RhcDsNCj4+Pj4+ICsNCj4+Pj4+ICsJaWYgKFNF UV9MVChhbHJlYWR5X3NlbnQsIDApKSB7DQo+Pj4+PiArCQkvKiBSRkMgNzYxLCBzZWN0aW9uIDIu MS4gKi8NCj4+Pj4+ICsJCWZsb3dfdHJhY2UoY29ubiwgIkFDSyBzZXF1ZW5jZSBnYXA6IEFDSyBm b3IgJXUsIHNlbnQ6ICV1IiwNCj4+Pj4+ICsJCQkgICBjb25uLT5zZXFfYWNrX2Zyb21fdGFwLCBj b25uLT5zZXFfdG9fdGFwKTsNCj4+Pj4+ICsJCWNvbm4tPnNlcV90b190YXAgPSBjb25uLT5zZXFf YWNrX2Zyb21fdGFwOw0KPj4+Pj4gKwkJYWxyZWFkeV9zZW50ID0gMDsNCj4+Pj4+ICsJCWlmICh0 Y3Bfc2V0X3BlZWtfb2Zmc2V0KGNvbm4tPnNvY2ssIDApKSB7DQo+Pj4+PiArCQkJdGNwX3JzdChj LCBjb25uKTsNCj4+Pj4+ICsJCQlyZXR1cm4gLTE7DQo+Pj4+PiArCQl9DQo+Pj4+PiArCX0NCj4+ Pj4+ICsNCj4+Pj4+ICsJaWYgKCF3bmRfc2NhbGVkIHx8IGFscmVhZHlfc2VudCA+PSB3bmRfc2Nh bGVkKSB7DQo+Pj4+PiArCQljb25uX2ZsYWcoYywgY29ubiwgU1RBTExFRCk7DQo+Pj4+PiArCQlj b25uX2ZsYWcoYywgY29ubiwgQUNLX0ZST01fVEFQX0RVRSk7DQo+Pj4+PiArCQlyZXR1cm4gMDsN Cj4+Pj4+ICsJfQ0KPj4+Pj4gKw0KPj4+Pj4gKwkvKiBTZXQgdXAgYnVmZmVyIGRlc2NyaXB0b3Jz IHdlJ2xsIGZpbGwgY29tcGxldGVseSBhbmQgcGFydGlhbGx5LiAqLw0KPj4+Pj4gKw0KPj4+Pj4g KwlmaWxsc2l6ZSA9IHduZF9zY2FsZWQgLSBhbHJlYWR5X3NlbnQ7DQo+Pj4+PiArDQo+Pj4+PiAr CS8qIGNvbGxlY3QgdGhlIGJ1ZmZlcnMgZnJvbSB2aG9zdC11c2VyIGFuZCBmaWxsIHRoZW0gd2l0 aCB0aGUNCj4+Pj4+ICsJICogZGF0YSBmcm9tIHRoZSBzb2NrZXQNCj4+Pj4+ICsJICovDQo+Pj4+ PiArCWxlbiA9IHRjcF92dV9zb2NrX3JlY3YoYywgY29ubiwgdjYsIGFscmVhZHlfc2VudCwgZmls bHNpemUsICZpb3ZfY250KTsNCj4+Pj4+ICsJaWYgKGxlbiA8IDApIHsNCj4+Pj4+ICsJCWlmIChs ZW4gIT0gLUVBR0FJTiAmJiBsZW4gIT0gLUVXT1VMREJMT0NLKSB7DQo+Pj4+PiArCQkJdGNwX3Jz dChjLCBjb25uKTsNCj4+Pj4+ICsJCQlyZXR1cm4gbGVuOw0KPj4+Pj4gKwkJfQ0KPj4+Pj4gKwkJ cmV0dXJuIDA7DQo+Pj4+PiArCX0NCj4+Pj4+ICsNCj4+Pj4+ICsJaWYgKCFsZW4pIHsNCj4+Pj4+ ICsJCWlmIChhbHJlYWR5X3NlbnQpIHsNCj4+Pj4+ICsJCQljb25uX2ZsYWcoYywgY29ubiwgU1RB TExFRCk7DQo+Pj4+PiArCQl9IGVsc2UgaWYgKChjb25uLT5ldmVudHMgJiAoU09DS19GSU5fUkNW RCB8IFRBUF9GSU5fU0VOVCkpID09DQo+Pj4+PiArCQkJICAgU09DS19GSU5fUkNWRCkgew0KPj4+ Pj4gKwkJCWludCByZXQgPSB0Y3BfdnVfc2VuZF9mbGFnKGMsIGNvbm4sIEZJTiB8IEFDSyk7DQo+ Pj4+PiArCQkJaWYgKHJldCkgew0KPj4+Pj4gKwkJCQl0Y3BfcnN0KGMsIGNvbm4pOw0KPj4+Pj4g KwkJCQlyZXR1cm4gcmV0Ow0KPj4+Pj4gKwkJCX0NCj4+Pj4+ICsNCj4+Pj4+ICsJCQljb25uX2V2 ZW50KGMsIGNvbm4sIFRBUF9GSU5fU0VOVCk7DQo+Pj4+PiArCQl9DQo+Pj4+PiArDQo+Pj4+PiAr CQlyZXR1cm4gMDsNCj4+Pj4+ICsJfQ0KPj4+Pj4gKw0KPj4+Pj4gKwljb25uX2ZsYWcoYywgY29u biwgflNUQUxMRUQpOw0KPj4+Pj4gKw0KPj4+Pj4gKwkvKiBMaWtlbHksIHNvbWUgbmV3IGRhdGEg d2FzIGFja2VkIHRvby4gKi8NCj4+Pj4+ICsJdGNwX3VwZGF0ZV9zZXFhY2tfd25kKGMsIGNvbm4s IGZhbHNlLCBOVUxMKTsNCj4+Pj4+ICsNCj4+Pj4+ICsJLyogaW5pdGlhbGl6ZSBoZWFkZXJzICov DQo+Pj4+PiArCS8qIGlvdl92dSBpcyBhbiBhcnJheSBvZiBidWZmZXJzIGFuZCB0aGUgYnVmZmVy IHNpemUgY2FuIGJlDQo+Pj4+PiArCSAqIHNtYWxsZXIgdGhhbiB0aGUgZnJhbWUgc2l6ZSB3ZSB3 YW50IHRvIHVzZSBidXQgd2l0aA0KPj4+Pj4gKwkgKiBudW1fYnVmZmVyIHdlIGNhbiBtZXJnZSBz ZXZlcmFsIHZpcnRpbyBpb3YgYnVmZmVycyBpbiBvbmUgcGFja2V0DQo+Pj4+PiArCSAqIHdlIG5l ZWQgb25seSB0byBzZXQgdGhlIHBhY2tldCBoZWFkZXJzIGluIHRoZSBmaXJzdCBpb3YgYW5kDQo+ Pj4+PiArCSAqIG51bV9idWZmZXIgdG8gdGhlIG51bWJlciBvZiBpb3YgZW50cmllcw0KPj4+Pj4g KwkgKi8NCj4+Pj4+ICsNCj4+Pj4+ICsJaGRybGVuID0gdGNwX3Z1X2hkcmxlbih2Nik7DQo+Pj4+ PiArCWZvciAoaSA9IDAsIGNoZWNrID0gTlVMTDsgaSA8IGhlYWRfY250OyBpKyspIHsNCj4+Pj4+ ICsJCXN0cnVjdCBpb3ZlYyAqaW92ID0gJmVsZW1baGVhZFtpXV0uaW5fc2dbMF07DQo+Pj4+PiAr CQlpbnQgYnVmX2NudCA9IGhlYWRbaSArIDFdIC0gaGVhZFtpXTsNCj4+Pj4+ICsJCWludCBkbGVu ID0gaW92X3NpemUoaW92LCBidWZfY250KSAtIGhkcmxlbjsNCj4+Pj4NCj4+Pj4gVW5sZXNzIEkn bSBtaXNzaW5nIHNvbWV0aGluZywgdG8gbWUgdGhpcyBsb29rcyBsaWtlIGEgZmFsc2UgcG9zaXRp dmUsDQo+Pj4+IGJ1dCBDb3Zlcml0eSBub3cgcmVwb3J0cywgZm9yIHRoaXMgbGluZToNCj4+Pj4N Cj4+Pj4gKDE3KSBFdmVudCBmdW5jdGlvbl9yZXR1cm46IAlGdW5jdGlvbiAiaW92X3NpemUoaW92 LCBidWZfY250KSIgcmV0dXJucyAwLg0KPj4+PiAoMTgpIEV2ZW50IG92ZXJmbG93X2NvbnN0OiAJ RXhwcmVzc2lvbiAiaW92X3NpemUoaW92LCBidWZfY250KSAtIGhkcmxlbiIsIHdoaWNoIGlzIGVx dWFsIHRvIDE4NDQ2NzQ0MDczNzA5NTUxNTUwLCB3aGVyZSAiaW92X3NpemUoaW92LCBidWZfY250 KSIgaXMga25vd24gdG8gYmUgZXF1YWwgdG8gMCwgYW5kICJoZHJsZW4iIGlzIGtub3duIHRvIGJl IGVxdWFsIHRvIDY2LCB1bmRlcmZsb3dzIHRoZSB0eXBlIHRoYXQgcmVjZWl2ZXMgaXQsIGFuIHVu c2lnbmVkIGludGVnZXIgNjQgYml0cyB3aWRlLg0KPj4+Pg0KPj4+PiAuLi5JIGRvbid0IHRoaW5r IGlvdl9zaXplKCkgY2FuIGV2ZXIgcmV0dXJuIDAgaWYgd2UgcmVhY2ggdGhpcyBwb2ludCwNCj4+ Pj4gYnV0IEkgd291bGQgdHJ5IHRvIGNvdmVyIHRoaXMgYnkgZWl0aGVyLCBpbiBvcmRlciBvZiBw cmVmZXJlbmNlOg0KPj4+Pg0KPj4+PiAxLiBub3Qgc2VuZGluZyB0aGlzIGZyYW1lIGlmIGlvdl9z aXplKGlvdiwgYnVmX2NudCkgPCBoZHJsZW4NCj4+Pj4NCj4+Pj4gMi4gYW4gQVNTRVJUKGlvdl9z aXplKGlvdiwgYnVmX2NudCkgPj0gaGRybGVuKQ0KPj4+Pg0KPj4+PiBJdCBjYW4gYmUgYSBmb2xs b3ctdXAgcGF0Y2gsIHRoZXJlJ3Mgbm8gbmVlZCB0byByZS1wb3N0IHRoZSB3aG9sZSB0aGluZw0K Pj4+PiAoYXQgbGVhc3Qgbm90IGp1c3QgZm9yIHRoaXMpLCB1bmxlc3MgeW91IHNlZSBzb21ldGhp bmcgdGhhdCBhY3R1YWxseQ0KPj4+PiBuZWVkcyB0byBiZSBmaXhlZC4NCj4+Pg0KPj4+IC4uLm5v dGhpbmcgdG8gYmUgZml4ZWQgaW4geW91ciBvcGluaW9uLCBJIHN1cHBvc2U/DQo+Pg0KPj4gVGhl cmUgaXMgYW4gQVNTRVJUKCkgaW4gdGNwX3Z1X3NvY2tfcmVjdigpIHRoYXQgZW5zdXJlIHNpemUg b2YgdGhlIGZpcnN0IGlvdmVjIG9mIHNlZ21lbnQNCj4+IGlzIGF0IGxlYXN0IGhkcmxlbi4NCj4g DQo+IE9oLCBJIGRpZG4ndCBzZWUgdGhhdC4gSW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBoZXJl LCB0dXJuaW5nICdkbGVuJw0KPiB0byBzc2l6ZV90IGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgd2Fy bmluZy4gUHJvYmFibHkgc2l6ZV90IHdvdWxkIGJlIGENCj4gYmV0dGVyIGZpdCwgYnV0IHNzaXpl X3QgaXMgYW55d2F5IGhhcm1sZXNzLiBJIGNhbiBjaGFuZ2UgdGhhdCBpbiBhDQo+IGZvbGxvdy11 cCBwYXRjaCB0b28uDQoNCmRsZW4gaXMgbGltaXRlZCBieSBNVFUgc2l6ZSwgc28gYW55IHR5cGUg YmlnZ2VyIHRoZW4gdW5zaWduZWQgc2hvcnQgaXMgT0suLi4NCg0KPiANCj4gQnkgdGhlIHdheSwg SSBidWlsdCB0aGUgc2VyaWVzIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBDDQo+IGxp YnJhcmllcywgdGhlcmUgYXJlIGEgZmV3ICJmb3JtYWwiIGlzc3Vlcywgd2hpY2ggSSBjYW4gYWxz byBmaXggdXAgb24NCj4gbWVyZ2Ugb3IgYXMgZm9sbG93LXVwLg0KPiANCj4gVGhhdCBpcywgaWYg eW91IHdhbnQgdG8gcmUtcG9zdCBJJ20gYWxzbyBmaW5lIHdpdGggaXQgb2YgY291cnNlLCBidXQg SQ0KPiBkb24ndCBzZWUgYSByZWFzb24gdG8gZGVsYXkgdGhpcyBiZWNhdXNlIG9mIHRob3NlLiBJ IHdvdWxkIHdhaXQgYSBiaXQNCj4gdG8gc2VlIGlmIERhdmlkIGhhcyBmdXJ0aGVyIGNvbW1lbnRz LCBhbmQgaWYgbm90LCBJIHdvdWxkIG1ha2UgYQ0KPiAoZnVydGhlcikgcmVsZWFzZSAqZmlyc3Qq LCBzbyB0aGF0IHdlIGhhdmUgb25lIGp1c3QgYmVmb3JlIHRoZXNlDQo+IGNoYW5nZXMsIHRoZW4g bWVyZ2UgKHdpdGggZml4LXVwcykuDQoNCllvdSBjYW4gZml4IHNvbWUgb2YgdGhlbSBvbiBtZXJn ZSBpZiB5b3Ugd2FudCwgSSB3aWxsIGZpeCBhbGwgdGhlIHJlbWFpbmluZyBvbmVzIG9uY2UgbWVy Z2VkLg0KDQpUaGFua3MsDQpMYXVyZW50DQoNCj4gDQo+IC0gRGViaWFuIGk2ODY6DQo+IA0KPiAt LQ0KPiBJbiBmaWxlIGluY2x1ZGVkIGZyb20gdXRpbC5oOjIxLA0KPiAgICAgICAgICAgICAgICAg ICBmcm9tIHBhY2tldC5jOjIyOg0KPiBwYWNrZXQuYzogSW4gZnVuY3Rpb24g4oCYcGFja2V0X2No ZWNrX3Jhbmdl4oCZOg0KPiBwYWNrZXQuYzo1NzoyMzogd2FybmluZzogZm9ybWF0IOKAmCVsdeKA mSBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUg4oCYbG9uZyB1bnNpZ25lZCBpbnTigJksIGJ1dCBh cmd1bWVudCA1IGhhcyB0eXBlIOKAmHNpemVfdOKAmSB7YWthIOKAmHVuc2lnbmVkIGludOKAmX0g Wy1XZm9ybWF0PV0NCj4gICAgIDU3IHwgICAgICAgICAgICAgICAgIHRyYWNlKCJwYWNrZXQgb2Zm c2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAiDQo+ICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fg0KPiAgICAgNTggfCAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVpIiwgc3RhcnQgLSBw LT5idWYgKyBsZW4gKyBvZmZzZXQsDQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgICAgICAg fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IHtha2EgdW5zaWduZWQgaW50fQ0KPiBsb2cuaDoyNTo2Njogbm90ZTogaW4gZGVmaW5pdGlv biBvZiBtYWNybyDigJhkZWJ1Z+KAmQ0KPiAgICAgMjUgfCAjZGVmaW5lIGRlYnVnKC4uLikgICAg ICAgICAgICAgIGxvZ21zZyh0cnVlLCBmYWxzZSwgTE9HX0RFQlVHLCAgIF9fVkFfQVJHU19fKQ0K PiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+IHBhY2tldC5jOjU3OjE3OiBub3RlOiBp biBleHBhbnNpb24gb2YgbWFjcm8g4oCYdHJhY2XigJkNCj4gICAgIDU3IHwgICAgICAgICAgICAg ICAgIHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAi DQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICBefn5+fg0KPiBwYWNrZXQuYzo1Nzo1Mjogbm90 ZTogZm9ybWF0IHN0cmluZyBpcyBkZWZpbmVkIGhlcmUNCj4gICAgIDU3IHwgICAgICAgICAgICAg ICAgIHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAi DQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB+fl4NCj4gICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfA0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVuc2lnbmVkIGludA0KPiAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXUNCj4gcGFja2V0 LmM6NTc6MjM6IHdhcm5pbmc6IGZvcm1hdCDigJglbHXigJkgZXhwZWN0cyBhcmd1bWVudCBvZiB0 eXBlIOKAmGxvbmcgdW5zaWduZWQgaW504oCZLCBidXQgYXJndW1lbnQgNiBoYXMgdHlwZSDigJhz aXplX3TigJkge2FrYSDigJh1bnNpZ25lZCBpbnTigJl9IFstV2Zvcm1hdD1dDQo+ICAgICA1NyB8 ICAgICAgICAgICAgICAgICB0cmFjZSgicGFja2V0IG9mZnNldCBwbHVzIGxlbmd0aCAlbHUgZnJv bSBzaXplICVsdSwgIg0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gICAgIDU4IHwgICAgICAg ICAgICAgICAgICAgICAgICIlczolaSIsIHN0YXJ0IC0gcC0+YnVmICsgbGVuICsgb2Zmc2V0LA0K PiAgICAgNTkgfCAgICAgICAgICAgICAgICAgICAgICAgcC0+YnVmX3NpemUsIGZ1bmMsIGxpbmUp Ow0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn4NCj4gICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IHtha2EgdW5zaWduZWQgaW50fQ0KPiBsb2cuaDoyNTo2Njogbm90ZTogaW4g ZGVmaW5pdGlvbiBvZiBtYWNybyDigJhkZWJ1Z+KAmQ0KPiAgICAgMjUgfCAjZGVmaW5lIGRlYnVn KC4uLikgICAgICAgICAgICAgIGxvZ21zZyh0cnVlLCBmYWxzZSwgTE9HX0RFQlVHLCAgIF9fVkFf QVJHU19fKQ0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+IHBhY2tldC5jOjU3OjE3 OiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8g4oCYdHJhY2XigJkNCj4gICAgIDU3IHwgICAg ICAgICAgICAgICAgIHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNp emUgJWx1LCAiDQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICBefn5+fg0KPiBwYWNrZXQuYzo1 Nzo2Njogbm90ZTogZm9ybWF0IHN0cmluZyBpcyBkZWZpbmVkIGhlcmUNCj4gICAgIDU3IHwgICAg ICAgICAgICAgICAgIHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNp emUgJWx1LCAiDQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5+Xg0KPiAgICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4g ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsb25nIHVuc2lnbmVkIGludA0KPiAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAldQ0K PiB2aG9zdF91c2VyLmM6IEluIGZ1bmN0aW9uIOKAmHF2YV90b192YeKAmToNCj4gdmhvc3RfdXNl ci5jOjEzOTozMjogd2FybmluZzogY2FzdCB0byBwb2ludGVyIGZyb20gaW50ZWdlciBvZiBkaWZm ZXJlbnQgc2l6ZSBbLVdpbnQtdG8tcG9pbnRlci1jYXN0XQ0KPiAgICAxMzkgfCAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKHZvaWQgKikocWVtdV9hZGRyIC0gci0+cXZhICsgci0+bW1h cF9hZGRyICsNCj4gICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4g dmhvc3RfdXNlci5jOiBJbiBmdW5jdGlvbiDigJh2dV9zZXRfbWVtX3RhYmxlX2V4ZWPigJk6DQo+ IHZob3N0X3VzZXIuYzo0Mzk6MzI6IHdhcm5pbmc6IGNhc3QgdG8gcG9pbnRlciBmcm9tIGludGVn ZXIgb2YgZGlmZmVyZW50IHNpemUgWy1XaW50LXRvLXBvaW50ZXItY2FzdF0NCj4gICAgNDM5IHwg ICAgICAgICAgICAgICAgICAgICAgICAgbXVubWFwKCh2b2lkICopci0+bW1hcF9hZGRyLCByLT5z aXplICsgci0+bW1hcF9vZmZzZXQpOw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXg0KPiB2aG9zdF91c2VyLmM6IEluIGZ1bmN0aW9uIOKAmHZ1X2NsZWFudXDigJk6 DQo+IHZob3N0X3VzZXIuYzo5MDA6MzI6IHdhcm5pbmc6IGNhc3QgdG8gcG9pbnRlciBmcm9tIGlu dGVnZXIgb2YgZGlmZmVyZW50IHNpemUgWy1XaW50LXRvLXBvaW50ZXItY2FzdF0NCj4gICAgOTAw IHwgICAgICAgICAgICAgICAgICAgICAgICAgbXVubWFwKCh2b2lkICopci0+bW1hcF9hZGRyLCBy LT5zaXplICsgci0+bW1hcF9vZmZzZXQpOw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXg0KPiB2aXJ0aW8uYzogSW4gZnVuY3Rpb24g4oCYdnVfZ3BhX3RvX3Zh4oCZ Og0KPiB2aXJ0aW8uYzoxMTE6MzI6IHdhcm5pbmc6IGNhc3QgdG8gcG9pbnRlciBmcm9tIGludGVn ZXIgb2YgZGlmZmVyZW50IHNpemUgWy1XaW50LXRvLXBvaW50ZXItY2FzdF0NCj4gICAgMTExIHwg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopKGd1ZXN0X2FkZHIgLSByLT5n cGEgKyByLT5tbWFwX2FkZHIgKw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXg0KPiB2dV9jb21tb24uYzogSW4gZnVuY3Rpb24g4oCYdnVfcGFja2V0X2NoZWNrX3Jh bmdl4oCZOg0KPiB2dV9jb21tb24uYzozNzoyNzogd2FybmluZzogY2FzdCB0byBwb2ludGVyIGZy b20gaW50ZWdlciBvZiBkaWZmZXJlbnQgc2l6ZSBbLVdpbnQtdG8tcG9pbnRlci1jYXN0XQ0KPiAg ICAgMzcgfCAgICAgICAgICAgICAgICAgY2hhciAqbSA9IChjaGFyICopZGV2X3JlZ2lvbi0+bW1h cF9hZGRyOw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4gLS0NCj4g DQo+IC0gQWxwaW5lIChtdXNsKSB4ODY6DQo+IA0KPiAtLQ0KPiBJbiBmaWxlIGluY2x1ZGVkIGZy b20gcGFzc3QuaDoxODUsDQo+ICAgICAgICAgICAgICAgICAgIGZyb20gdGNwX3Z1LmM6MjE6DQo+ IC91c3IvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmg6MTE1Ojg6IGVycm9yOiByZWRlZmluaXRp b24gb2YgJ3N0cnVjdCBldGhoZHInDQo+ICAgIDExNSB8IHN0cnVjdCBldGhoZHIgew0KPiAgICAg ICAgfCAgICAgICAgXn5+fn5+DQo+IEluIGZpbGUgaW5jbHVkZWQgZnJvbSAvdXNyL2luY2x1ZGUv bGludXgvdmlydGlvX25ldC5oOjMyLA0KPiAgICAgICAgICAgICAgICAgICBmcm9tIHRjcF92dS5j OjE3Og0KPiAvdXNyL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaDoxNzM6ODogbm90ZTogb3JpZ2lu YWxseSBkZWZpbmVkIGhlcmUNCj4gICAgMTczIHwgc3RydWN0IGV0aGhkciB7DQo+ICAgICAgICB8 ICAgICAgICBefn5+fn4NCj4gSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHBhc3N0Lmg6MTg1LA0KPiAg ICAgICAgICAgICAgICAgICBmcm9tIHZ1X2NvbW1vbi5jOjE0Og0KPiAvdXNyL2luY2x1ZGUvbmV0 aW5ldC9pZl9ldGhlci5oOjExNTo4OiBlcnJvcjogcmVkZWZpbml0aW9uIG9mICdzdHJ1Y3QgZXRo aGRyJw0KPiAgICAxMTUgfCBzdHJ1Y3QgZXRoaGRyIHsNCj4gICAgICAgIHwgICAgICAgIF5+fn5+ fg0KPiBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL3Vzci9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQu aDozMiwNCj4gICAgICAgICAgICAgICAgICAgZnJvbSB2dV9jb21tb24uYzoxMToNCj4gL3Vzci9p bmNsdWRlL2xpbnV4L2lmX2V0aGVyLmg6MTczOjg6IG5vdGU6IG9yaWdpbmFsbHkgZGVmaW5lZCBo ZXJlDQo+ICAgIDE3MyB8IHN0cnVjdCBldGhoZHIgew0KPiAgICAgICAgfCAgICAgICAgXn5+fn5+ DQo+IG1ha2U6ICoqKiBbTWFrZWZpbGU6ODc6IHBhc3N0XSBFcnJvciAxDQo+IC0tDQo+IA0KPiAt IERlYmlhbiBhcm1oZiAoc2FtZSBpc3N1ZXMgYXMgaTY4Nik6DQo+IA0KPiAtLQ0KPiBJbiBmaWxl IGluY2x1ZGVkIGZyb20gdXRpbC5oOjIxLA0KPiAgICAgICAgICAgICAgICAgICBmcm9tIHBhY2tl dC5jOjIyOg0KPiBwYWNrZXQuYzogSW4gZnVuY3Rpb24g4oCYcGFja2V0X2NoZWNrX3Jhbmdl4oCZ Og0KPiBwYWNrZXQuYzo1NzoyMzogd2FybmluZzogZm9ybWF0IOKAmCVsdeKAmSBleHBlY3RzIGFy Z3VtZW50IG9mIHR5cGUg4oCYbG9uZyB1bnNpZ25lZCBpbnTigJksIGJ1dCBhcmd1bWVudCA1IGhh cyB0eXBlIOKAmHNpemVfdOKAmSB7YWthIOKAmHVuc2lnbmVkIGludOKAmX0gWy1XZm9ybWF0PV0N Cj4gICAgIDU3IHwgICAgICAgICAgICAgICAgIHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVu Z3RoICVsdSBmcm9tIHNpemUgJWx1LCAiDQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAgICAg NTggfCAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVpIiwgc3RhcnQgLSBwLT5idWYgKyBsZW4g KyBvZmZzZXQsDQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHtha2EgdW5z aWduZWQgaW50fQ0KPiBsb2cuaDoyNTo2Njogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyDi gJhkZWJ1Z+KAmQ0KPiAgICAgMjUgfCAjZGVmaW5lIGRlYnVnKC4uLikgICAgICAgICAgICAgIGxv Z21zZyh0cnVlLCBmYWxzZSwgTE9HX0RFQlVHLCAgIF9fVkFfQVJHU19fKQ0KPiAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF5+fn5+fn5+fn5+DQo+IHBhY2tldC5jOjU3OjE3OiBub3RlOiBpbiBleHBhbnNpb24g b2YgbWFjcm8g4oCYdHJhY2XigJkNCj4gICAgIDU3IHwgICAgICAgICAgICAgICAgIHRyYWNlKCJw YWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAiDQo+ICAgICAgICB8 ICAgICAgICAgICAgICAgICBefn5+fg0KPiBwYWNrZXQuYzo1Nzo1Mjogbm90ZTogZm9ybWF0IHN0 cmluZyBpcyBkZWZpbmVkIGhlcmUNCj4gICAgIDU3IHwgICAgICAgICAgICAgICAgIHRyYWNlKCJw YWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAiDQo+ICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+fl4NCj4g ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfA0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb25nIHVuc2lnbmVkIGludA0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXUNCj4gcGFja2V0LmM6NTc6MjM6IHdh cm5pbmc6IGZvcm1hdCDigJglbHXigJkgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlIOKAmGxvbmcg dW5zaWduZWQgaW504oCZLCBidXQgYXJndW1lbnQgNiBoYXMgdHlwZSDigJhzaXplX3TigJkge2Fr YSDigJh1bnNpZ25lZCBpbnTigJl9IFstV2Zvcm1hdD1dDQo+ICAgICA1NyB8ICAgICAgICAgICAg ICAgICB0cmFjZSgicGFja2V0IG9mZnNldCBwbHVzIGxlbmd0aCAlbHUgZnJvbSBzaXplICVsdSwg Ig0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gICAgIDU4IHwgICAgICAgICAgICAgICAgICAg ICAgICIlczolaSIsIHN0YXJ0IC0gcC0+YnVmICsgbGVuICsgb2Zmc2V0LA0KPiAgICAgNTkgfCAg ICAgICAgICAgICAgICAgICAgICAgcC0+YnVmX3NpemUsIGZ1bmMsIGxpbmUpOw0KPiAgICAgICAg fCAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn4NCj4gICAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICB8DQo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IHtha2EgdW5zaWduZWQgaW50fQ0KPiBsb2cuaDoyNTo2Njogbm90ZTogaW4gZGVmaW5pdGlvbiBv ZiBtYWNybyDigJhkZWJ1Z+KAmQ0KPiAgICAgMjUgfCAjZGVmaW5lIGRlYnVnKC4uLikgICAgICAg ICAgICAgIGxvZ21zZyh0cnVlLCBmYWxzZSwgTE9HX0RFQlVHLCAgIF9fVkFfQVJHU19fKQ0KPiAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+IHBhY2tldC5jOjU3OjE3OiBub3RlOiBpbiBl eHBhbnNpb24gb2YgbWFjcm8g4oCYdHJhY2XigJkNCj4gICAgIDU3IHwgICAgICAgICAgICAgICAg IHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAiDQo+ ICAgICAgICB8ICAgICAgICAgICAgICAgICBefn5+fg0KPiBwYWNrZXQuYzo1Nzo2Njogbm90ZTog Zm9ybWF0IHN0cmluZyBpcyBkZWZpbmVkIGhlcmUNCj4gICAgIDU3IHwgICAgICAgICAgICAgICAg IHRyYWNlKCJwYWNrZXQgb2Zmc2V0IHBsdXMgbGVuZ3RoICVsdSBmcm9tIHNpemUgJWx1LCAiDQo+ ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH5+Xg0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb25nIHVuc2lnbmVkIGludA0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAldQ0KPiB2aG9zdF91c2Vy LmM6IEluIGZ1bmN0aW9uIOKAmHF2YV90b192YeKAmToNCj4gdmhvc3RfdXNlci5jOjEzOTozMjog d2FybmluZzogY2FzdCB0byBwb2ludGVyIGZyb20gaW50ZWdlciBvZiBkaWZmZXJlbnQgc2l6ZSBb LVdpbnQtdG8tcG9pbnRlci1jYXN0XQ0KPiAgICAxMzkgfCAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKHZvaWQgKikocWVtdV9hZGRyIC0gci0+cXZhICsgci0+bW1hcF9hZGRyICsNCj4g ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4gdmhvc3RfdXNlci5j OiBJbiBmdW5jdGlvbiDigJh2dV9zZXRfbWVtX3RhYmxlX2V4ZWPigJk6DQo+IHZob3N0X3VzZXIu Yzo0Mzk6MzI6IHdhcm5pbmc6IGNhc3QgdG8gcG9pbnRlciBmcm9tIGludGVnZXIgb2YgZGlmZmVy ZW50IHNpemUgWy1XaW50LXRvLXBvaW50ZXItY2FzdF0NCj4gICAgNDM5IHwgICAgICAgICAgICAg ICAgICAgICAgICAgbXVubWFwKCh2b2lkICopci0+bW1hcF9hZGRyLCByLT5zaXplICsgci0+bW1h cF9vZmZzZXQpOw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0K PiB2aG9zdF91c2VyLmM6IEluIGZ1bmN0aW9uIOKAmHZ1X2NsZWFudXDigJk6DQo+IHZob3N0X3Vz ZXIuYzo5MDA6MzI6IHdhcm5pbmc6IGNhc3QgdG8gcG9pbnRlciBmcm9tIGludGVnZXIgb2YgZGlm ZmVyZW50IHNpemUgWy1XaW50LXRvLXBvaW50ZXItY2FzdF0NCj4gICAgOTAwIHwgICAgICAgICAg ICAgICAgICAgICAgICAgbXVubWFwKCh2b2lkICopci0+bW1hcF9hZGRyLCByLT5zaXplICsgci0+ bW1hcF9vZmZzZXQpOw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Xg0KPiB2aXJ0aW8uYzogSW4gZnVuY3Rpb24g4oCYdnVfZ3BhX3RvX3Zh4oCZOg0KPiB2aXJ0aW8u YzoxMTE6MzI6IHdhcm5pbmc6IGNhc3QgdG8gcG9pbnRlciBmcm9tIGludGVnZXIgb2YgZGlmZmVy ZW50IHNpemUgWy1XaW50LXRvLXBvaW50ZXItY2FzdF0NCj4gICAgMTExIHwgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuICh2b2lkICopKGd1ZXN0X2FkZHIgLSByLT5ncGEgKyByLT5tbWFw X2FkZHIgKw0KPiAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiB2 dV9jb21tb24uYzogSW4gZnVuY3Rpb24g4oCYdnVfcGFja2V0X2NoZWNrX3Jhbmdl4oCZOg0KPiB2 dV9jb21tb24uYzozNzoyNzogd2FybmluZzogY2FzdCB0byBwb2ludGVyIGZyb20gaW50ZWdlciBv ZiBkaWZmZXJlbnQgc2l6ZSBbLVdpbnQtdG8tcG9pbnRlci1jYXN0XQ0KPiAgICAgMzcgfCAgICAg ICAgICAgICAgICAgY2hhciAqbSA9IChjaGFyICopZGV2X3JlZ2lvbi0+bW1hcF9hZGRyOw0KPiAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4gLS0NCj4gDQoNCg==