From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7B9633A6E9 for ; Wed, 3 Jun 2026 14:55:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780498523; cv=none; b=VYrmFig8STKxgZTXZ5UOLkvoC8go3w5u/3PVplZeF9wq2opyU9l9lyMuFa5vex5m5q89dlfaYSDRGjghaQXNSR2aTeD9tRTSUKhlUw3caRSHOaEyi4XOPTUq9qriLzIJ8jqagsufU8qntYlb8IbmtJoNWHW5bEj/MEfuUseHbUU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780498523; c=relaxed/simple; bh=3e2DPdYlIxHHUR0Qs7FnikU9dqf3qjC7QRs3ZmxPOsc=; h=Message-ID:Subject:From:To:Date:In-Reply-To:References: Content-Type:MIME-Version; b=k0lU55RGgCEA3HKcNJeFRqovuz9xRC6iSSoht+FxCLfRBl5vwqOnzBeQervDCB9WWpxeOzn4259eK2vP54EKppQbeBf/Fg+XIX0srN+d87Lq3tRI/9iwSkU4Jamw1wEq0sK/IV9c0l2XKapBmiIqe/MO2BWO2iVf7vzPAwqboUM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=bBFp4iKs; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=ZQxLUrFf; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bBFp4iKs"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZQxLUrFf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780498520; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3e2DPdYlIxHHUR0Qs7FnikU9dqf3qjC7QRs3ZmxPOsc=; b=bBFp4iKsvJQWiV7A2MgfEZITEOmjjFdBEI0roxaktH9niQa8zE2G1C9xNZCRjg4zdfxzK2 AVilELq4kRdDuEdewPpKoigfvVOnLWtg+e6GGblf5Z9JqEj+Ispg9s/6DbT+ybrQ3SVH14 P2/mn+gHszw7MtVuNBzvM8P8eowcASQ= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-55-oZgpPGLuOHGK4ayibHO3pg-1; Wed, 03 Jun 2026 10:55:19 -0400 X-MC-Unique: oZgpPGLuOHGK4ayibHO3pg-1 X-Mimecast-MFC-AGG-ID: oZgpPGLuOHGK4ayibHO3pg_1780498518 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-490b61243easo10040845e9.2 for ; Wed, 03 Jun 2026 07:55:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1780498518; x=1781103318; darn=vger.kernel.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:to:from:subject:message-id:from:to:cc:subject:date :message-id:reply-to; bh=3e2DPdYlIxHHUR0Qs7FnikU9dqf3qjC7QRs3ZmxPOsc=; b=ZQxLUrFfgzuEulrh/pR0BGXzcQU3bKaiAUjBpXNE6VcvoYgdv/OhnLIQFQgLZ0l/jR yvEV8V7nplha6p4yTI0I4XgzidIzlCByY8zm4wkvRF8rBlOEr0Oii+1pXDhbG+6kr4sU nRjbKj9P2dked1IkfZStALOtU5rS2UdKSr9dgFceLAIU48UUVdYngAgDjC6cA78ES2qj USFYEJjrZwGHXGoMfspDlLf9dH+zwOzAX2dLZNxp3Ryn1lp+e3ESXc3WI656tIGR9iir o6wCzLPsa2aGyRoiEF8baTY0kZK+1S0jZmx4UMAi50ncsAksF0B3KKBwVh35+RD+Vn4C ij9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780498518; x=1781103318; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3e2DPdYlIxHHUR0Qs7FnikU9dqf3qjC7QRs3ZmxPOsc=; b=St1bjQKuDxREwx2hRbeEyfU84wR2PJrymdn3tAM2bR7yLSkU/SWfnd4HwmXv/6BILm R5bD0g+d2sIvVm7dyRlZZ5FVtXXgu/E2rm/P7U2EoYZd/NoSmmFp/8uCxKEILtwLKDJ6 f8BHoPlrHS8UUX6hwwbNyWJf1+rqBtH15gdeH2Fils2n/qpU/HOPnwnnONMnDnCX5Fkq JhTCU29veldc11jSsyu1aE/eVfjT/Kh2M9Mhcn5ZoleyDIHLLsIm/awMwNERPUqLrFG/ RtndmfLr82Hshva5dzGgLFrDgTPBkEg0yJF4uQXbDbVB3QZpg18LL1HbnbPgCzmFoWNT e7JA== X-Forwarded-Encrypted: i=1; AFNElJ9zPKbmTc1mYjAuELt/Pz66HHxAnhF15Er4X5kxQYgCcAl2RWWMNkkC30cez6g4pq/mtUylZDS5+kRKp4U=@vger.kernel.org X-Gm-Message-State: AOJu0YyapEBRr0h6F4Ns/z7jpglNwNEnw+wA9OUxfuutXqbqwLNjI4lJ yErSsqt69r1c+NoFYdWcR0FIGdBGcXepQQdg8HmjEszL6gtrkpe1fNWOCVRpghUYC+49tXFuDVS m5qBS3mEMNET/IxT0Fn1W1GrvqEJESdXSK7o2dgPHT8ZlZe78qJlOQ0LdnZIbBnYCGA== X-Gm-Gg: Acq92OFy+TCz3X5+XPrgEk71k2QuL5q+Pl+Snj0jTtCO9RiAs+BxijzwRmZZxRfiIXA QThnC3OT5in/n2HISo3zdJOX+I6+SOfM2HY1nM7q5l/qU63+NQWLuP+18iT0cnIR3i0yElIQ6c6 CBgoveuJTcTpRpjX9sy7X4xeusQl3jnnZyI9uVCZQI8Z1c4RoKY/Xig1nj8/lZWhGrkAnavTyOf MhiXJoUuggh43v1CV4js3v05yJArhK7//lJ+SpvLMJASoFFmUQqDYC1w2mjy9hDIEiqmmas4lPt NQIb38xTLKgR3BYDiXUp1rXebp4fW9YXoAzwa1lhHn4qYBkLzUULtBnKieI/APREVpZu4CcQnT/ TuhqaVJIPAvj2ad0bOdCES0w2N46DvLw75Cdo X-Received: by 2002:a05:600c:810c:b0:490:b11f:2560 with SMTP id 5b1f17b1804b1-490b5e6ef66mr67021495e9.9.1780498518196; Wed, 03 Jun 2026 07:55:18 -0700 (PDT) X-Received: by 2002:a05:600c:810c:b0:490:b11f:2560 with SMTP id 5b1f17b1804b1-490b5e6ef66mr67020815e9.9.1780498517642; Wed, 03 Jun 2026 07:55:17 -0700 (PDT) Received: from [192.168.1.167] ([185.168.96.228]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b63d8102sm65314835e9.10.2026.06.03.07.55.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 07:55:17 -0700 (PDT) Message-ID: Subject: Re: [PATCH v2 02/13] verification/rvgen: Introduce a parse tree for automata using Lark From: Gabriele Monaco To: Nam Cao , Wander Lairson Costa , Steven Rostedt , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Date: Wed, 03 Jun 2026 16:55:16 +0200 In-Reply-To: <13a2f241b74e02b13efa7fe188be3fa7e6148b4a.1779956342.git.namcao@linutronix.de> References: <13a2f241b74e02b13efa7fe188be3fa7e6148b4a.1779956342.git.namcao@linutronix.de> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.60.1 (3.60.1-1.fc44) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gVGh1LCAyMDI2LTA1LTI4IGF0IDEwOjI3ICswMjAwLCBOYW0gQ2FvIHdyb3RlOgo+IFRoZSBE T1QgcGFyc2luZyBzY3JpcHRzIGRpcmVjdGx5IHBhcnNlIHRoZSByYXcgdGV4dCBhbmQgdGhleSBh cmUKPiBxdWl0ZQo+IGZyYWdpbGUuIElmIHRoZSBpbnB1dCBkb3QgZmlsZXMnIGZvcm1hdHMgYXJl IHNsaWdodGx5IGNoYW5nZWQgKGZvcgo+IGluc3RhbmNlLCBieSBicmVha2luZyBsb25nIHNvbWUg bGluZXMgd2hpY2ggaXMgYWxsb3dlZCBieSB0aGUgRE9UCj4gbGFuZ3VhZ2UKPiBkZWZpbmVkIGJ5 IGdyYXBodml6KSwgdGhlIHNjcmlwdHMgd291bGQgZmFpbC4KPiAKPiBUbyBtYWtlIHRoZSBzY3Jp cHRzIHJvYnVzdCwgdGhlIHBhcnNlciBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYmFzZWQgb24KPiB0 aGUKPiBkb3QgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiwgbm90IGJhc2VkIG9uIGhvdyB0aGUgZXhp c3RpbmcgZG90IGZpbGVzCj4gbG9vay4KPiAKPiBBcyBhIGZpcnN0IHN0ZXAsIHVzZSBMYXJrIHRv IGltcGxlbWVudCBhIFBhcnNlciBiYXNlZCBvbiB0aGUgZ3JhcGh2aXoKPiBkb3QKPiBsYW5ndWFn ZSBzcGVjaWZpY2F0aW9uLiBUaGUgcmVzdWx0aW5nIHBhcnNlIHRyZWUgaXMgbm90IHVzZWQgeWV0 LCBidXQKPiB0aGUKPiBleGlzdGluZyBzY3JpcHRzIHdpbGwgYmUgY29udmVydGVkIG9uZSBieSBv bmUgdG8gdXNlIHRoaXMgbmV3IHBhcnNlCj4gdHJlZSBpbgo+IHRoZSBmb2xsb3ctdXAgY29tbWl0 cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBOYW0gQ2FvIDxuYW1jYW9AbGludXRyb25peC5kZT4KPiAt LS0KClJldmlld2VkLWJ5OiBHYWJyaWVsZSBNb25hY28gPGdtb25hY29AcmVkaGF0LmNvbT4KCj4g djI6Cj4gwqAgLSBzd2l0Y2ggdG8gdXNlIExhcmsncyBDTkFNRSBmb3IgaWRlbnRpZmllciBbV2Fu ZGVyXQo+IMKgIC0gc3dpdGNoIHRvIHVzZSBMYXJrJ3MgRVNDQVBFRF9TVFJJTkcgZm9yIHN0cmlu ZyBbU2FzaGlrb10KPiDCoCAtIGNsZWFuIHVwIHZhcmlhYmxlIG5hbWUgc2hhZG93aW5nIFtTYXNo aWtvXQo+IMKgIC0gUHJvcGVybHkgY2F0Y2ggTGFyayBleGNlcHRpb24KPiAtLS0KPiDCoHRvb2xz L3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0YS5weSB8IDE4Ngo+ICsrKysrKysrKysr KysrKysrKysrKwo+IMKgMSBmaWxlIGNoYW5nZWQsIDE4NiBpbnNlcnRpb25zKCspCj4gCj4gZGlm ZiAtLWdpdCBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0YS5weQo+IGIv dG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2F1dG9tYXRhLnB5Cj4gaW5kZXggYjlmODE0 OWY3MTE4Li44NjQ5ZDk4MjM4M2QgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvdmVyaWZpY2F0aW9uL3J2 Z2VuL3J2Z2VuL2F1dG9tYXRhLnB5Cj4gKysrIGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2 Z2VuL2F1dG9tYXRhLnB5Cj4gQEAgLTEzLDYgKzEzLDE5MSBAQCBpbXBvcnQgcmUKPiDCoGZyb20g dHlwaW5nIGltcG9ydCBJdGVyYXRvcgo+IMKgZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZQo+ IMKgCj4gK2ltcG9ydCBsYXJrCj4gKwo+ICtjbGFzcyBQYXJzZVRyZWU6Cj4gK8KgwqDCoCAjIGJh c2VkIG9uIGh0dHBzOi8vZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2xhbmcuaHRtbAo+ICvCoMKgwqAg IyB3aXRoIHRoZSBpcnJlbGV2YW50IHN0dWZmcyAocG9ydCBhbmQgY29tcGFzcykgcmVtb3ZlZAo+ ICvCoMKgwqAgZ3JhbW1hciA9IHInJycKPiArwqDCoMKgIHN0YXJ0OiAic3RyaWN0Ij8gKCJncmFw aCIgfCAiZGlncmFwaCIpIElEPyAieyIgc3RtdF9saXN0ICJ9Igo+ICsKPiArwqDCoMKgIHN0bXRf bGlzdDogKHN0bXQgIjsiPyBzdG10X2xpc3QpPwo+ICsKPiArwqDCoMKgIHN0bXQ6IG5vZGVfc3Rt dAo+ICvCoMKgwqDCoMKgwqDCoCB8IGVkZ2Vfc3RtdAo+ICvCoMKgwqDCoMKgwqDCoCB8IGF0dHJf c3RtdAo+ICvCoMKgwqDCoMKgwqDCoCB8IElEICI9IiBJRAo+ICvCoMKgwqDCoMKgwqDCoCB8IHN1 YmdyYXBoCj4gKwo+ICvCoMKgwqAgYXR0cl9zdG10OiBhdHRyX3R5cGUgYXR0cl9saXN0Cj4gKwo+ ICvCoMKgwqAgYXR0cl90eXBlOiAiZ3JhcGgiIC0+IGdyYXBoCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfCAibm9kZSLCoCAtPiBub2RlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAiZWRn ZSLCoCAtPiBlZGdlCj4gKwo+ICvCoMKgwqAgYXR0cl9saXN0OiAiWyIgYV9saXN0PyAiXSIgYXR0 cl9saXN0Pwo+ICsKPiArwqDCoMKgIGFfbGlzdDogSUQgIj0iIElEICgiOyIgfCAiLCIpPyBhX2xp c3Q/Cj4gKwo+ICvCoMKgwqAgZWRnZV9zdG10OiAobm9kZV9pZCB8IHN1YmdyYXBoKSBlZGdlcmhz IGF0dHJfbGlzdD8KPiArCj4gK8KgwqDCoCBlZGdlcmhzOiBlZGdlb3AgKG5vZGVfaWQgfCBzdWJn cmFwaCkgZWRnZXJocz8KPiArCj4gK8KgwqDCoCBlZGdlb3A6ICItPiIgfCAiLS0iCj4gKwo+ICvC oMKgwqAgbm9kZV9zdG10OiBub2RlX2lkIGF0dHJfbGlzdD8KPiArCj4gK8KgwqDCoCBub2RlX2lk OiBJRAo+ICsKPiArwqDCoMKgIHN1YmdyYXBoOiAoInN1YmdyYXBoIiBJRD8pPyAieyIgc3RtdF9s aXN0ICJ9Igo+ICsKPiArwqDCoMKgIElEOiBDTkFNRQo+ICvCoMKgwqDCoMKgIHwgLy0/KFwuWzAt OV0rfFswLTldKyhcLlswLTldKikpLwo+ICvCoMKgwqDCoMKgIHwgRVNDQVBFRF9TVFJJTkcKPiAr Cj4gK8KgwqDCoCAlaW1wb3J0IGNvbW1vbi5DTkFNRQo+ICvCoMKgwqAgJWltcG9ydCBjb21tb24u RVNDQVBFRF9TVFJJTkcKPiArwqDCoMKgICVpbXBvcnQgY29tbW9uLldTCj4gK8KgwqDCoCAlaWdu b3JlIFdTCj4gK8KgwqDCoCAnJycKPiArCj4gK8KgwqDCoCBAc3RhdGljbWV0aG9kCj4gK8KgwqDC oCBkZWYgcGFyc2VfZWRnZSh0cmVlOiBsYXJrLlRyZWUpIC0+IHR1cGxlW3N0ciwgc3RyXToKPiAr wqDCoMKgwqDCoMKgwqAgIyBvbmx5IHN1cHBvcnQgYSBzaW1wbGUgbm9kZS10by1ub2RlIGVkZ2UK PiArwqDCoMKgwqDCoMKgwqAgbm9kZXMgPSBbXQo+ICvCoMKgwqDCoMKgwqDCoCBmb3Igbm9kZSBp biB0cmVlLml0ZXJfc3VidHJlZXNfdG9wZG93bigpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIG5vZGUuZGF0YSA9PSAibm9kZV9pZCI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBub2Rlcy5hcHBlbmQobm9kZS5jaGlsZHJlblswXS5zdHJpcCgnIicpKQo+ICsKPiArwqDC oMKgwqDCoMKgwqAgaWYgbGVuKG5vZGVzKSAhPSAyOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJhaXNlIEF1dG9tYXRhRXJyb3IoIk9ubHkgc3RhdGUtdG8tc3RhdGUgdHJhbnNpdGlvbiBpcwo+ IHN1cHBvcnRlZCIpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHVwbGUobm9kZXMpCj4g Kwo+ICvCoMKgwqAgY2xhc3MgUGFyc2VOb2RlcyhsYXJrLnZpc2l0b3JzLlZpc2l0b3IpOgo+ICvC oMKgwqDCoMKgwqDCoCBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLm5vZGVzID0gc2V0KCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKPiArCj4gK8KgwqDCoMKg wqDCoMKgIGRlZiBub2RlX3N0bXQoc2VsZiwgdHJlZSk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbm9kZV9pZCA9IHRyZWUuY2hpbGRyZW5bMF0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBu b2RlID0gbm9kZV9pZC5jaGlsZHJlblswXS5zdHJpcCgnIicpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2VsZi5ub2Rlcy5hZGQobm9kZSkKPiArCj4gK8KgwqDCoCBjbGFzcyBQYXJzZUVkZ2Vz KGxhcmsudmlzaXRvcnMuVmlzaXRvcik6Cj4gK8KgwqDCoMKgwqDCoMKgIGRlZiBfX2luaXRfXyhz ZWxmLCAqYXJncywgKiprd2FyZ3MpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuZWRn ZXMgPSBzZXQoKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN1cGVyKCkuX19pbml0X18oKmFy Z3MsICoqa3dhcmdzKQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgZGVmIGVkZ2Vfc3RtdChzZWxmLCB0 cmVlKToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlZGdlID0gUGFyc2VUcmVlLnBhcnNlX2Vk Z2UodHJlZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmVkZ2VzLmFkZChlZGdlKQo+ ICsKPiArwqDCoMKgIGNsYXNzIFBhcnNlQXR0cmlidXRlcyhsYXJrLnZpc2l0b3JzLkludGVycHJl dGVyKToKPiArwqDCoMKgwqDCoMKgwqAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn cyk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJycnCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgU3RhY2tzIG9mIGRlZmF1bHQgYXR0cmlidXRlcy4gWzBdIGlzIHRoZSBkZWZhdWx0Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXR0cmlidXRlcyBmb3IgdGhlIG91dGVybW9zdCBzY29wZSwg d2hpbGUgWy0xXSBpcyB0aGUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZWZhdWx0IGF0dHJp YnV0ZXMgZm9yIHRoZSBjdXJyZW50IHNjb3BlLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICcn Jwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuZGVmYXVsdF9ub2RlX2F0dHJzID0gW3t9 XQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuZGVmYXVsdF9lZGdlX2F0dHJzID0gW3t9 XQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLm5vZGVfYXR0cnMgPSB7fQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuZWRnZV9hdHRycyA9IHt9Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQo+ICsKPiAr wqDCoMKgwqDCoMKgwqAgQHN0YXRpY21ldGhvZAo+ICvCoMKgwqDCoMKgwqDCoCBkZWYgX19nZXRf YXR0cnMoc3RtdDogbGFyay5UcmVlKSAtPiBkaWN0W3N0ciwgc3RyXToKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdHRycyA9IHt9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciBu b2RlIGluIHN0bXQuaXRlcl9zdWJ0cmVlcygpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgbm9kZS5kYXRhID09ICJhX2xpc3QiOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhdHRyc1tub2RlLmNoaWxkcmVuWzBdXSA9Cj4gbm9kZS5jaGlsZHJl blsxXS5zdHJpcCgnIicpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBhdHRy cwo+ICsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGRlZiBzdWJncmFwaChzZWxmLCB0cmVlKToKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAjIFdlIGFyZSBlbnRlcmluZyBhIG5ldyBzY29wZSwgaW5o ZXJpdCB0aGUgZGVmYXVsdAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgYXR0cmlidXRlcyBv ZiB0aGUgb3V0ZXIgc2NvcGUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmRlZmF1bHRf bm9kZV9hdHRycy5hcHBlbmQoc2VsZi5kZWZhdWx0X25vZGVfYXR0cnNbLQo+IDFdLmNvcHkoKSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmRlZmF1bHRfZWRnZV9hdHRycy5hcHBlbmQo c2VsZi5kZWZhdWx0X2VkZ2VfYXR0cnNbLQo+IDFdLmNvcHkoKSkKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2hpbGRyZW4gPSBzZWxmLnZpc2l0X2NoaWxkcmVuKHRyZWUpCj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgRXhpdGluZyB0aGUgc2NvcGUKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkZWwgc2VsZi5kZWZhdWx0X25vZGVfYXR0cnNbLTFdCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGVsIHNlbGYuZGVmYXVsdF9lZGdlX2F0dHJzWy0xXQo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gY2hpbGRyZW4KPiArCj4gK8KgwqDCoMKgwqDCoMKgIGRl ZiBub2RlX3N0bXQoc2VsZiwgdHJlZSk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9kZV9p ZCA9IHRyZWUuY2hpbGRyZW5bMF0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBub2RlID0gbm9k ZV9pZC5jaGlsZHJlblswXS5zdHJpcCgnIicpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF0dHJzID0gc2VsZi5kZWZhdWx0X25vZGVfYXR0cnNbLTFdLmNvcHkoKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGF0dHJzIHw9IHNlbGYuX19nZXRfYXR0cnModHJlZSkKPiArCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgYXR0cnM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiBub2RlIGluIHNlbGYubm9kZV9hdHRyczoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5ub2RlX2F0dHJzW25vZGVdID0gYXR0cnMgfAo+IHNlbGYu bm9kZV9hdHRyc1tub2RlXQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZToK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5ub2RlX2F0dHJz W25vZGVdID0gYXR0cnMKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNlbGYu dmlzaXRfY2hpbGRyZW4odHJlZSkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGRlZiBlZGdlX3N0bXQo c2VsZiwgdHJlZSk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWRnZSA9IFBhcnNlVHJlZS5w YXJzZV9lZGdlKHRyZWUpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF0dHJzID0gc2Vs Zi5kZWZhdWx0X2VkZ2VfYXR0cnNbLTFdLmNvcHkoKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF0dHJzIHw9IHNlbGYuX19nZXRfYXR0cnModHJlZSkKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgYXR0cnM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBlZGdl IGluIHNlbGYuZWRnZV9hdHRyczoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2VsZi5lZGdlX2F0dHJzW2VkZ2VdID0gYXR0cnMgfAo+IHNlbGYuZWRnZV9hdHRyc1tl ZGdlXQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZToKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5lZGdlX2F0dHJzW2VkZ2VdID0gYXR0 cnMKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNlbGYudmlzaXRfY2hpbGRy ZW4odHJlZSkKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGRlZiBhdHRyX3N0bXQoc2VsZiwgdHJlZSk6 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXR0cl90eXBlID0gdHJlZS5jaGlsZHJlblswXS5k YXRhCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXR0cnMgPSBzZWxmLl9fZ2V0X2F0dHJzKHRy ZWUpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIGF0dHJfdHlwZSA9PSAibm9kZSI6 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmRlZmF1bHRfbm9kZV9hdHRy c1stMV0gfD0gYXR0cnMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbGlmIGF0dHJfdHlwZSA9 PSAiZWRnZSI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmRlZmF1bHRf ZWRnZV9hdHRyc1stMV0gfD0gYXR0cnMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlOgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBncmFwaCBhdHRyaWJ1dGVzIGFyZSBp cnJlbGV2YW50Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXNzCj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYudmlzaXRfY2hpbGRyZW4odHJlZSkKPiArCj4gK8Kg wqDCoCBkZWYgX19pbml0X18oc2VsZiwgZG90X2ZpbGUpOgo+ICvCoMKgwqDCoMKgwqDCoCBwYXJz ZXIgPSBsYXJrLkxhcmsoc2VsZi5ncmFtbWFyLCBwYXJzZXI9J2xhbHInKQo+ICvCoMKgwqDCoMKg wqDCoCBub2RlX3BhcnNlciA9IHNlbGYuUGFyc2VOb2RlcygpCj4gK8KgwqDCoMKgwqDCoMKgIGVk Z2VfcGFyc2VyID0gc2VsZi5QYXJzZUVkZ2VzKCkKPiArwqDCoMKgwqDCoMKgwqAgYXR0cmlidXRl c19wYXJzZXIgPSBzZWxmLlBhcnNlQXR0cmlidXRlcygpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCB0 cnk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2l0aCBvcGVuKGRvdF9maWxlLCAiciIpIGFz IGY6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cmVlID0gcGFyc2VyLnBhcnNl KGYucmVhZCgpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXR0cmlidXRlc19w YXJzZXIudmlzaXQodHJlZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vZGVf cGFyc2VyLnZpc2l0KHRyZWUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlZGdl X3BhcnNlci52aXNpdCh0cmVlKQo+ICvCoMKgwqDCoMKgwqDCoCBleGNlcHQgT1NFcnJvciBhcyBl eGM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFpc2UgQXV0b21hdGFFcnJvcihleGMuc3Ry ZXJyb3IpIGZyb20gZXhjCj4gK8KgwqDCoMKgwqDCoMKgIGV4Y2VwdCBsYXJrLmV4Y2VwdGlvbnMu VW5leHBlY3RlZElucHV0IGFzIGV4YzoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBB dXRvbWF0YUVycm9yKHN0cihleGMpKQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5ub2RlcyA9 IG5vZGVfcGFyc2VyLm5vZGVzCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYuZWRnZXMgPSBlZGdlX3Bh cnNlci5lZGdlcwo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLm5vZGVfYXR0cnMgPSBhdHRyaWJ1dGVz X3BhcnNlci5ub2RlX2F0dHJzCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYuZWRnZV9hdHRycyA9IGF0 dHJpYnV0ZXNfcGFyc2VyLmVkZ2VfYXR0cnMKPiArCj4gwqBjbGFzcyBfQ29uc3RyYWludEtleToK PiDCoMKgwqDCoCAiIiJCYXNlIGNsYXNzIGZvciBjb25zdHJhaW50IGtleXMuIiIiCj4gwqAKPiBA QCAtNjYsNiArMjUxLDcgQEAgY2xhc3MgQXV0b21hdGE6Cj4gwqDCoMKgwqDCoMKgwqDCoCBzZWxm Ll9fZG90X3BhdGggPSBmaWxlX3BhdGgKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYubmFtZSA9IG1v ZGVsX25hbWUgb3Igc2VsZi5fX2dldF9tb2RlbF9uYW1lKCkKPiDCoMKgwqDCoMKgwqDCoMKgIHNl bGYuX19kb3RfbGluZXMgPSBzZWxmLl9fb3Blbl9kb3QoKQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxm Ll9fcGFyc2VfdHJlZSA9IFBhcnNlVHJlZShmaWxlX3BhdGgpCj4gwqDCoMKgwqDCoMKgwqDCoCBz ZWxmLnN0YXRlcywgc2VsZi5pbml0aWFsX3N0YXRlLCBzZWxmLmZpbmFsX3N0YXRlcyA9Cj4gc2Vs Zi5fX2dldF9zdGF0ZV92YXJpYWJsZXMoKQo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5lbnZfdHlw ZXMgPSB7fQo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5lbnZfc3RvcmVkID0gc2V0KCkK