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.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 99AAAC4727E for ; Wed, 30 Sep 2020 10:20:39 +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 20F5A20719 for ; Wed, 30 Sep 2020 10:20:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="OLiaRla1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 20F5A20719 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:57460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kNZDy-0004PY-4o for qemu-devel@archiver.kernel.org; Wed, 30 Sep 2020 06:20:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43880) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kNZ7e-0003lO-VW for qemu-devel@nongnu.org; Wed, 30 Sep 2020 06:14:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:28631) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kNZ7Z-00064D-Gy for qemu-devel@nongnu.org; Wed, 30 Sep 2020 06:14:03 -0400 Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1601460840; 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; bh=I5/OTmn8SVH9TX/MkpU5vfDIABKX3xmIgug5vtV0NIo=; b=OLiaRla1HcazsWE1EqXuRd5R52jpeJ72Rs9Mv5tBMtQIFAxq2lyFJy5S2GKr6MN+/JFMEC sFE6e14B2TVSMx8WLlei0r70MuF9B3qbkjoGnsANDQ6oOP11v3XB5T5pzLzFkw9liLBfFm yqWGplSPkc76hanxxPu8R6j9Hfegi/A= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-253-RFgjdlSlNN-ADP6WEfN2Xw-1; Wed, 30 Sep 2020 06:13:53 -0400 X-MC-Unique: RFgjdlSlNN-ADP6WEfN2Xw-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id AECD7185A0C3; Wed, 30 Sep 2020 10:13:51 +0000 (UTC) Received: from localhost (ovpn-114-33.ams2.redhat.com [10.36.114.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 251E77BE42; Wed, 30 Sep 2020 10:13:50 +0000 (UTC) From: Stefan Hajnoczi To: Peter Maydell , qemu-devel@nongnu.org Subject: [PULL 10/17] scripts: add block-coroutine-wrapper.py Date: Wed, 30 Sep 2020 11:12:58 +0100 Message-Id: <20200930101305.305302-11-stefanha@redhat.com> In-Reply-To: <20200930101305.305302-1-stefanha@redhat.com> References: <20200930101305.305302-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="US-ASCII" Received-SPF: pass client-ip=216.205.24.124; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/30 00:26:33 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.687, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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: Kevin Wolf , Fam Zheng , Vladimir Sementsov-Ogievskiy , Eduardo Habkost , qemu-block@nongnu.org, Max Reitz , Stefan Hajnoczi , Cleber Rosa Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" RnJvbTogVmxhZGltaXIgU2VtZW50c292LU9naWV2c2tpeSA8dnNlbWVudHNvdkB2aXJ0dW96em8u Y29tPgoKV2UgaGF2ZSBhIHZlcnkgZnJlcXVlbnQgcGF0dGVybiBvZiBjcmVhdGluZyBhIGNvcm91 dGluZSBmcm9tIGEgZnVuY3Rpb24Kd2l0aCBzZXZlcmFsIGFyZ3VtZW50czoKCiAgLSBjcmVhdGUg YSBzdHJ1Y3R1cmUgdG8gcGFjayBwYXJhbWV0ZXJzCiAgLSBjcmVhdGUgX2VudHJ5IGZ1bmN0aW9u IHRvIGNhbGwgb3JpZ2luYWwgZnVuY3Rpb24gdGFraW5nIHBhcmFtZXRlcnMKICAgIGZyb20gc3Ry dWN0CiAgLSBkbyBkaWZmZXJlbnQgbWFnaWMgdG8gaGFuZGxlIGNvbXBsZXRpb246IHNldCByZXQg dG8gTk9UX0RPTkUgb3IKICAgIEVJTlBST0dSRVNTIG9yIHVzZSBzZXBhcmF0ZSBib29sIGZpZWxk CiAgLSBmaWxsIHRoZSBzdHJ1Y3QgYW5kIGNyZWF0ZSBjb3JvdXRpbmUgZnJvbSBfZW50cnkgZnVu Y3Rpb24gd2l0aCB0aGlzCiAgICBzdHJ1Y3QgYXMgYSBwYXJhbWV0ZXIKICAtIGRvIGNvcm91dGlu ZSBlbnRlciBhbmQgQkRSVl9QT0xMX1dISUxFIGxvb3AKCkxldCdzIHJlZHVjZSBjb2RlIGR1cGxp Y2F0aW9uIGJ5IGdlbmVyYXRpbmcgY29yb3V0aW5lIHdyYXBwZXJzLgoKVGhpcyBwYXRjaCBhZGRz IHNjcmlwdHMvYmxvY2stY29yb3V0aW5lLXdyYXBwZXIucHkgdG9nZXRoZXIgd2l0aCBzb21lCmZy aWVuZHMsIHdoaWNoIHdpbGwgZ2VuZXJhdGUgZnVuY3Rpb25zIHdpdGggZGVjbGFyZWQgcHJvdG90 eXBlcyBtYXJrZWQKYnkgdGhlICdnZW5lcmF0ZWRfY29fd3JhcHBlcicgc3BlY2lmaWVyLgoKVGhl IHVzYWdlIG9mIG5ldyBjb2RlIGdlbmVyYXRpb24gaXMgYXMgZm9sbG93czoKCiAgICAxLiBkZWZp bmUgdGhlIGNvcm91dGluZSBmdW5jdGlvbiBzb21ld2hlcmUKCiAgICAgICAgaW50IGNvcm91dGlu ZV9mbiBiZHJ2X2NvX05BTUUoLi4uKSB7Li4ufQoKICAgIDIuIGRlY2xhcmUgaW4gc29tZSBoZWFk ZXIgZmlsZQoKICAgICAgICBpbnQgZ2VuZXJhdGVkX2NvX3dyYXBwZXIgYmRydl9OQU1FKC4uLik7 CgogICAgICAgd2l0aCBzYW1lIGxpc3Qgb2YgcGFyYW1ldGVycyAoZ2VuZXJhdGVkX2NvX3dyYXBw ZXIgaXMKICAgICAgIGRlZmluZWQgaW4gImluY2x1ZGUvYmxvY2svYmxvY2suaCIpLgoKICAgIDMu IE1ha2Ugc3VyZSB0aGUgYmxvY2tfZ2VuX2MgZGVjbGFyYXRpb24gaW4gYmxvY2svbWVzb24uYnVp bGQKICAgICAgIG1lbnRpb25zIHRoZSBmaWxlIHdpdGggeW91ciBtYXJrZXIgZnVuY3Rpb24uCgpT dGlsbCwgbm8gZnVuY3Rpb24gaXMgbm93IG1hcmtlZCwgdGhpcyB3b3JrIGlzIGZvciB0aGUgZm9s bG93aW5nCmNvbW1pdC4KClNpZ25lZC1vZmYtYnk6IFZsYWRpbWlyIFNlbWVudHNvdi1PZ2lldnNr aXkgPHZzZW1lbnRzb3ZAdmlydHVvenpvLmNvbT4KUmV2aWV3ZWQtYnk6IEVyaWMgQmxha2UgPGVi bGFrZUByZWRoYXQuY29tPgpNZXNzYWdlLUlkOiA8MjAyMDA5MjQxODU0MTQuMjg2NDItNS12c2Vt ZW50c292QHZpcnR1b3p6by5jb20+CltBZGRlZCBlbmNvZGluZz0ndXRmLTgnIHRvIG9wZW4oKSBj YWxscyBhcyByZXF1ZXN0ZWQgYnkgVmxhZGltaXIuIEZpeGVkCnR5cG8gYW5kIGdyYW1tYXIgaXNz dWVzIHBvaW50ZWQgb3V0IGJ5IEVyaWMgQmxha2UuCi0tU3RlZmFuXQpTaWduZWQtb2ZmLWJ5OiBT dGVmYW4gSGFqbm9jemkgPHN0ZWZhbmhhQHJlZGhhdC5jb20+Ci0tLQogYmxvY2svYmxvY2stZ2Vu LmggICAgICAgICAgICAgICAgICAgICAgfCAgNDkgKysrKysrKwogaW5jbHVkZS9ibG9jay9ibG9j ay5oICAgICAgICAgICAgICAgICAgfCAgMTAgKysKIGJsb2NrL21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICAgICAgIHwgICA4ICsrCiBkb2NzL2RldmVsL2Jsb2NrLWNvcm91dGluZS13cmFwcGVy LnJzdCB8ICA1NCArKysrKysrCiBkb2NzL2RldmVsL2luZGV4LnJzdCAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBzY3JpcHRzL2Jsb2NrLWNvcm91dGluZS13cmFwcGVyLnB5ICAgICB8IDE4OCAr KysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDMxMCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgYmxvY2svYmxvY2stZ2VuLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2NzL2RldmVsL2Jsb2NrLWNvcm91dGluZS13cmFwcGVyLnJzdAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNjcmlwdHMvYmxvY2stY29yb3V0aW5lLXdyYXBwZXIucHkKCmRpZmYgLS1naXQgYS9i bG9jay9ibG9jay1nZW4uaCBiL2Jsb2NrL2Jsb2NrLWdlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmY4MGNmNDg5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay9i bG9jay1nZW4uaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQmxvY2sgY29yb3V0aW5lIHdyYXBw aW5nIGNvcmUsIHVzZWQgYnkgYXV0by1nZW5lcmF0ZWQgYmxvY2svYmxvY2stZ2VuLmMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMDMgRmFicmljZSBCZWxsYXJkCisgKiBDb3B5cmlnaHQgKGMpIDIw MjAgVmlydHVvenpvIEludGVybmF0aW9uYWwgR21iSAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNv cHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJP TSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVm IEJMT0NLX0JMT0NLX0dFTl9ICisjZGVmaW5lIEJMT0NLX0JMT0NLX0dFTl9ICisKKyNpbmNsdWRl ICJibG9jay9ibG9ja19pbnQuaCIKKworLyogQmFzZSBzdHJ1Y3R1cmUgZm9yIGFyZ3VtZW50IHBh Y2tpbmcgc3RydWN0dXJlcyAqLwordHlwZWRlZiBzdHJ1Y3QgQmRydlBvbGxDbyB7CisgICAgQmxv Y2tEcml2ZXJTdGF0ZSAqYnM7CisgICAgYm9vbCBpbl9wcm9ncmVzczsKKyAgICBpbnQgcmV0Owor ICAgIENvcm91dGluZSAqY287IC8qIEtlZXAgcG9pbnRlciBoZXJlIGZvciBkZWJ1Z2dpbmcgKi8K K30gQmRydlBvbGxDbzsKKworc3RhdGljIGlubGluZSBpbnQgYmRydl9wb2xsX2NvKEJkcnZQb2xs Q28gKnMpCit7CisgICAgYXNzZXJ0KCFxZW11X2luX2Nvcm91dGluZSgpKTsKKworICAgIGJkcnZf Y29yb3V0aW5lX2VudGVyKHMtPmJzLCBzLT5jbyk7CisgICAgQkRSVl9QT0xMX1dISUxFKHMtPmJz LCBzLT5pbl9wcm9ncmVzcyk7CisKKyAgICByZXR1cm4gcy0+cmV0OworfQorCisjZW5kaWYgLyog QkxPQ0tfQkxPQ0tfR0VOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYmxvY2svYmxvY2suaCBi L2luY2x1ZGUvYmxvY2svYmxvY2suaAppbmRleCA4MWQ1OTFkZDRjLi4wZjBkZGM1MWI0IDEwMDY0 NAotLS0gYS9pbmNsdWRlL2Jsb2NrL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS9ibG9jay9ibG9jay5o CkBAIC0xMCw2ICsxMCwxNiBAQAogI2luY2x1ZGUgImJsb2NrL2Jsb2Nram9iLmgiCiAjaW5jbHVk ZSAicWVtdS9oYml0bWFwLmgiCiAKKy8qCisgKiBnZW5lcmF0ZWRfY29fd3JhcHBlcgorICoKKyAq IEZ1bmN0aW9uIHNwZWNpZmllciwgd2hpY2ggZG9lcyBub3RoaW5nIGJ1dCBtYXJrIGZ1bmN0aW9u cyB0byBiZQorICogZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvYmxvY2stY29yb3V0aW5lLXdyYXBwZXIu cHkKKyAqCisgKiBSZWFkIG1vcmUgaW4gZG9jcy9kZXZlbC9ibG9jay1jb3JvdXRpbmUtd3JhcHBl ci5yc3QKKyAqLworI2RlZmluZSBnZW5lcmF0ZWRfY29fd3JhcHBlcgorCiAvKiBibG9jay5jICov CiB0eXBlZGVmIHN0cnVjdCBCbG9ja0RyaXZlciBCbG9ja0RyaXZlcjsKIHR5cGVkZWYgc3RydWN0 IEJkcnZDaGlsZCBCZHJ2Q2hpbGQ7CmRpZmYgLS1naXQgYS9ibG9jay9tZXNvbi5idWlsZCBiL2Js b2NrL21lc29uLmJ1aWxkCmluZGV4IGEzZTU2YjdjZDEuLjg4YWQ3MzU4M2EgMTAwNjQ0Ci0tLSBh L2Jsb2NrL21lc29uLmJ1aWxkCisrKyBiL2Jsb2NrL21lc29uLmJ1aWxkCkBAIC0xMDcsNiArMTA3 LDE0IEBAIG1vZHVsZV9ibG9ja19oID0gY3VzdG9tX3RhcmdldCgnbW9kdWxlX2Jsb2NrLmgnLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFttb2R1bGVfYmxvY2tfcHks ICdAT1VUUFVUMEAnLCBtb2RzcmNdKQogYmxvY2tfc3MuYWRkKG1vZHVsZV9ibG9ja19oKQogCit3 cmFwcGVyX3B5ID0gZmluZF9wcm9ncmFtKCcuLi9zY3JpcHRzL2Jsb2NrLWNvcm91dGluZS13cmFw cGVyLnB5JykKK2Jsb2NrX2dlbl9jID0gY3VzdG9tX3RhcmdldCgnYmxvY2stZ2VuLmMnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dDogJ2Jsb2NrLWdlbi5jJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dDogZmlsZXMoJy4uL2luY2x1ZGUvYmxvY2svYmxvY2su aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3JvdXRpbmVz LmgnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBbd3JhcHBlcl9weSwg J0BPVVRQVVRAJywgJ0BJTlBVVEAnXSkKK2Jsb2NrX3NzLmFkZChibG9ja19nZW5fYykKKwogYmxv Y2tfc3MuYWRkKGZpbGVzKCdzdHJlYW0uYycpKQogCiBzb2Z0bW11X3NzLmFkZChmaWxlcygncWFw aS1zeXNlbXUuYycpKQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXZlbC9ibG9jay1jb3JvdXRpbmUtd3Jh cHBlci5yc3QgYi9kb2NzL2RldmVsL2Jsb2NrLWNvcm91dGluZS13cmFwcGVyLnJzdApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40MTI4NTE5ODZiCi0tLSAvZGV2L251bGwK KysrIGIvZG9jcy9kZXZlbC9ibG9jay1jb3JvdXRpbmUtd3JhcHBlci5yc3QKQEAgLTAsMCArMSw1 NCBAQAorPT09PT09PT09PT09PT09PT09PT09PT0KK2Jsb2NrLWNvcm91dGluZS13cmFwcGVyCis9 PT09PT09PT09PT09PT09PT09PT09PQorCitBIGxvdCBvZiBmdW5jdGlvbnMgaW4gUUVNVSBibG9j ayBsYXllciAoc2VlIGBgYmxvY2svKmBgKSBjYW4gb25seSBiZQorY2FsbGVkIGluIGNvcm91dGlu ZSBjb250ZXh0LiBTdWNoIGZ1bmN0aW9ucyBhcmUgbm9ybWFsbHkgbWFya2VkIGJ5IHRoZQorY29y b3V0aW5lX2ZuIHNwZWNpZmllci4gU3RpbGwsIHNvbWV0aW1lcyB3ZSBuZWVkIHRvIGNhbGwgdGhl bSBmcm9tCitub24tY29yb3V0aW5lIGNvbnRleHQ7IGZvciB0aGlzIHdlIG5lZWQgdG8gc3RhcnQg YSBjb3JvdXRpbmUsIHJ1biB0aGUKK25lZWRlZCBmdW5jdGlvbiBmcm9tIGl0IGFuZCB3YWl0IGZv ciB0aGUgY29yb3V0aW5lIHRvIGZpbmlzaCBpbiBhCitCRFJWX1BPTExfV0hJTEUoKSBsb29wLiBU byBydW4gYSBjb3JvdXRpbmUgd2UgbmVlZCBhIGZ1bmN0aW9uIHdpdGggb25lCit2b2lkKiBhcmd1 bWVudC4gU28gZm9yIGVhY2ggY29yb3V0aW5lX2ZuIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIGEKK25v bi1jb3JvdXRpbmUgaW50ZXJmYWNlLCB3ZSBzaG91bGQgZGVmaW5lIGEgc3RydWN0dXJlIHRvIHBh Y2sgdGhlCitwYXJhbWV0ZXJzLCBkZWZpbmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byB1bnBhY2sg dGhlIHBhcmFtZXRlcnMgYW5kCitjYWxsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBhbmQgZmluYWxs eSBkZWZpbmUgYSBuZXcgaW50ZXJmYWNlIGZ1bmN0aW9uCit3aXRoIHNhbWUgbGlzdCBvZiBhcmd1 bWVudHMgYXMgb3JpZ2luYWwgb25lLCB3aGljaCB3aWxsIHBhY2sgdGhlCitwYXJhbWV0ZXJzIGlu dG8gYSBzdHJ1Y3QsIGNyZWF0ZSBhIGNvcm91dGluZSwgcnVuIGl0IGFuZCB3YWl0IGluCitCRFJW X1BPTExfV0hJTEUoKSBsb29wLiBJdCdzIGJvcmluZyB0byBjcmVhdGUgc3VjaCB3cmFwcGVycyBi eSBoYW5kLAorc28gd2UgaGF2ZSBhIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGVtLgorCitVc2FnZQor PT09PT0KKworQXNzdW1lIHdlIGhhdmUgZGVmaW5lZCB0aGUgYGBjb3JvdXRpbmVfZm5gYCBmdW5j dGlvbgorYGBiZHJ2X2NvX2Zvbyg8c29tZSBhcmdzPilgYCBhbmQgbmVlZCBhIG5vbi1jb3JvdXRp bmUgaW50ZXJmYWNlIGZvciBpdCwKK2NhbGxlZCBgYGJkcnZfZm9vKDxzYW1lIGFyZ3M+KWBgLiBJ biB0aGlzIGNhc2UgdGhlIHNjcmlwdCBjYW4gaGVscC4gVG8KK3RyaWdnZXIgdGhlIGdlbmVyYXRp b246CisKKzEuIFlvdSBuZWVkIGBgYmRydl9mb29gYCBkZWNsYXJhdGlvbiBzb21ld2hlcmUgKGZv ciBleGFtcGxlLCBpbgorICAgYGBibG9jay9jb3JvdXRpbmVzLmhgYCkgd2l0aCB0aGUgYGBnZW5l cmF0ZWRfY29fd3JhcHBlcmBgIG1hcmssCisgICBsaWtlIHRoaXM6CisKKy4uIGNvZGUtYmxvY2s6 OiBjCisKKyAgICBpbnQgZ2VuZXJhdGVkX2NvX3dyYXBwZXIgYmRydl9mb28oPHNvbWUgYXJncz4p OworCisyLiBZb3UgbmVlZCB0byBmZWVkIHRoaXMgZGVjbGFyYXRpb24gdG8gYmxvY2stY29yb3V0 aW5lLXdyYXBwZXIgc2NyaXB0LgorICAgRm9yIHRoaXMsIGFkZCB0aGUgLmggKG9yIC5jKSBmaWxl IHdpdGggdGhlIGRlY2xhcmF0aW9uIHRvIHRoZQorICAgYGBpbnB1dDogZmlsZXMoLi4uKWBgIGxp c3Qgb2YgYGBibG9ja19nZW5fY2BgIHRhcmdldCBkZWNsYXJhdGlvbiBpbgorICAgYGBibG9jay9t ZXNvbi5idWlsZGBgCisKK1lvdSBhcmUgZG9uZS4gRHVyaW5nIHRoZSBidWlsZCwgY29yb3V0aW5l IHdyYXBwZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGluCitgYDxCVUlMRF9ESVI+L2Jsb2NrL2Jsb2Nr LWdlbi5jYGAuCisKK0xpbmtzCis9PT09PQorCisxLiBUaGUgc2NyaXB0IGxvY2F0aW9uIGlzIGBg c2NyaXB0cy9ibG9jay1jb3JvdXRpbmUtd3JhcHBlci5weWBgLgorCisyLiBHZW5lcmljIHBsYWNl IGZvciBwcml2YXRlIGBgZ2VuZXJhdGVkX2NvX3dyYXBwZXJgYCBkZWNsYXJhdGlvbnMgaXMKKyAg IGBgYmxvY2svY29yb3V0aW5lcy5oYGAsIGZvciBwdWJsaWMgZGVjbGFyYXRpb25zOgorICAgYGBp bmNsdWRlL2Jsb2NrL2Jsb2NrLmhgYAorCiszLiBUaGUgY29yZSBBUEkgb2YgZ2VuZXJhdGVkIGNv cm91dGluZSB3cmFwcGVycyBpcyBwbGFjZWQgaW4KKyAgIChub3QgZ2VuZXJhdGVkKSBgYGJsb2Nr L2Jsb2NrLWdlbi5oYGAKZGlmZiAtLWdpdCBhL2RvY3MvZGV2ZWwvaW5kZXgucnN0IGIvZG9jcy9k ZXZlbC9pbmRleC5yc3QKaW5kZXggMDQ3NzNjZTA3Ni4uY2IwYWJlMWU2OSAxMDA2NDQKLS0tIGEv ZG9jcy9kZXZlbC9pbmRleC5yc3QKKysrIGIvZG9jcy9kZXZlbC9pbmRleC5yc3QKQEAgLTMxLDMg KzMxLDQgQEAgQ29udGVudHM6CiAgICByZXNldAogICAgczM5MC1kYXNkLWlwbAogICAgY2xvY2tz CisgICBibG9jay1jb3JvdXRpbmUtd3JhcHBlcgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ibG9jay1j b3JvdXRpbmUtd3JhcHBlci5weSBiL3NjcmlwdHMvYmxvY2stY29yb3V0aW5lLXdyYXBwZXIucHkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmEzN2IwZmQzMAotLS0gL2Rl di9udWxsCisrKyBiL3NjcmlwdHMvYmxvY2stY29yb3V0aW5lLXdyYXBwZXIucHkKQEAgLTAsMCAr MSwxODggQEAKKyMhIC91c3IvYmluL2VudiBweXRob24zCisiIiJHZW5lcmF0ZSBjb3JvdXRpbmUg d3JhcHBlcnMgZm9yIGJsb2NrIHN1YnN5c3RlbS4KKworVGhlIHByb2dyYW0gcGFyc2VzIG9uZSBv ciBzZXZlcmFsIGNvbmNhdGVuYXRlZCBjIGZpbGVzIGZyb20gc3RkaW4sCitzZWFyY2hlcyBmb3Ig ZnVuY3Rpb25zIHdpdGggdGhlICdnZW5lcmF0ZWRfY29fd3JhcHBlcicgc3BlY2lmaWVyCithbmQg Z2VuZXJhdGVzIGNvcnJlc3BvbmRpbmcgd3JhcHBlcnMgb24gc3Rkb3V0LgorCitVc2FnZTogYmxv Y2stY29yb3V0aW5lLXdyYXBwZXIucHkgZ2VuZXJhdGVkLWZpbGUuYyBGSUxFLltjaF0uLi4KKwor Q29weXJpZ2h0IChjKSAyMDIwIFZpcnR1b3p6byBJbnRlcm5hdGlvbmFsIEdtYkguCisKK1RoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyIiIgorCitp bXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQganNvbgorZnJv bSB0eXBpbmcgaW1wb3J0IEl0ZXJhdG9yCisKKworZGVmIHByZXR0aWZ5KGNvZGU6IHN0cikgLT4g c3RyOgorICAgICIiIlByZXR0aWZ5IGNvZGUgdXNpbmcgY2xhbmctZm9ybWF0IGlmIGF2YWlsYWJs ZSIiIgorCisgICAgdHJ5OgorICAgICAgICBzdHlsZSA9IGpzb24uZHVtcHMoeworICAgICAgICAg ICAgJ0luZGVudFdpZHRoJzogNCwKKyAgICAgICAgICAgICdCcmFjZVdyYXBwaW5nJzogeydBZnRl ckZ1bmN0aW9uJzogVHJ1ZX0sCisgICAgICAgICAgICAnQnJlYWtCZWZvcmVCcmFjZXMnOiAnQ3Vz dG9tJywKKyAgICAgICAgICAgICdTb3J0SW5jbHVkZXMnOiBGYWxzZSwKKyAgICAgICAgICAgICdN YXhFbXB0eUxpbmVzVG9LZWVwJzogMiwKKyAgICAgICAgfSkKKyAgICAgICAgcCA9IHN1YnByb2Nl c3MucnVuKFsnY2xhbmctZm9ybWF0JywgZictc3R5bGU9e3N0eWxlfSddLCBjaGVjaz1UcnVlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JywgaW5wdXQ9Y29kZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAg ICAgIHJldHVybiBwLnN0ZG91dAorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAg ICAgcmV0dXJuIGNvZGUKKworCitkZWYgZ2VuX2hlYWRlcigpOgorICAgIGNvcHlyaWdodCA9IHJl LnN1YignXi4qQ29weXJpZ2h0JywgJ0NvcHlyaWdodCcsIF9fZG9jX18sIGZsYWdzPXJlLkRPVEFM TCkKKyAgICBjb3B5cmlnaHQgPSByZS5zdWIoJ14oPz0uKScsICcgKiAnLCBjb3B5cmlnaHQuc3Ry aXAoKSwgZmxhZ3M9cmUuTVVMVElMSU5FKQorICAgIGNvcHlyaWdodCA9IHJlLnN1YignXiQnLCAn IConLCBjb3B5cmlnaHQsIGZsYWdzPXJlLk1VTFRJTElORSkKKyAgICByZXR1cm4gZiIiIlwKKy8q CisgKiBGaWxlIGlzIGdlbmVyYXRlZCBieSBzY3JpcHRzL2Jsb2NrLWNvcm91dGluZS13cmFwcGVy LnB5CisgKgore2NvcHlyaWdodH0KKyAqLworCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2lu Y2x1ZGUgImJsb2NrL2Nvcm91dGluZXMuaCIKKyNpbmNsdWRlICJibG9jay9ibG9jay1nZW4uaCIK KyNpbmNsdWRlICJibG9jay9ibG9ja19pbnQuaCJcCisiIiIKKworCitjbGFzcyBQYXJhbURlY2w6 CisgICAgcGFyYW1fcmUgPSByZS5jb21waWxlKHInKD9QPGRlY2w+JworICAgICAgICAgICAgICAg ICAgICAgICAgICByJyg/UDx0eXBlPi4qWyAqXSknCisgICAgICAgICAgICAgICAgICAgICAgICAg IHInKD9QPG5hbWU+W2Etel1bYS16MC05X10qKScKKyAgICAgICAgICAgICAgICAgICAgICAgICAg cicpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbV9kZWNsOiBzdHIpIC0+IE5vbmU6 CisgICAgICAgIG0gPSBzZWxmLnBhcmFtX3JlLm1hdGNoKHBhcmFtX2RlY2wuc3RyaXAoKSkKKyAg ICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmJ1dyb25n IHBhcmFtZXRlciBkZWNsYXJhdGlvbjogIntwYXJhbV9kZWNsfSInKQorICAgICAgICBzZWxmLmRl Y2wgPSBtLmdyb3VwKCdkZWNsJykKKyAgICAgICAgc2VsZi50eXBlID0gbS5ncm91cCgndHlwZScp CisgICAgICAgIHNlbGYubmFtZSA9IG0uZ3JvdXAoJ25hbWUnKQorCisKK2NsYXNzIEZ1bmNEZWNs OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXR1cm5fdHlwZTogc3RyLCBuYW1lOiBzdHIsIGFy Z3M6IHN0cikgLT4gTm9uZToKKyAgICAgICAgc2VsZi5yZXR1cm5fdHlwZSA9IHJldHVybl90eXBl LnN0cmlwKCkKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZS5zdHJpcCgpCisgICAgICAgIHNlbGYu YXJncyA9IFtQYXJhbURlY2woYXJnLnN0cmlwKCkpIGZvciBhcmcgaW4gYXJncy5zcGxpdCgnLCcp XQorCisgICAgZGVmIGdlbl9saXN0KHNlbGYsIGZvcm1hdDogc3RyKSAtPiBzdHI6CisgICAgICAg IHJldHVybiAnLCAnLmpvaW4oZm9ybWF0LmZvcm1hdF9tYXAoYXJnLl9fZGljdF9fKSBmb3IgYXJn IGluIHNlbGYuYXJncykKKworICAgIGRlZiBnZW5fYmxvY2soc2VsZiwgZm9ybWF0OiBzdHIpIC0+ IHN0cjoKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihmb3JtYXQuZm9ybWF0X21hcChhcmcuX19k aWN0X18pIGZvciBhcmcgaW4gc2VsZi5hcmdzKQorCisKKyMgTWF0Y2ggd3JhcHBlcnMgZGVjbGFy ZWQgd2l0aCBhIGdlbmVyYXRlZF9jb193cmFwcGVyIG1hcmsKK2Z1bmNfZGVjbF9yZSA9IHJlLmNv bXBpbGUocideaW50XHMqZ2VuZXJhdGVkX2NvX3dyYXBwZXJccyonCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHInKD9QPHdyYXBwZXJfbmFtZT5bYS16XVthLXowLTlfXSopJworICAgICAgICAg ICAgICAgICAgICAgICAgICByJ1woKD9QPGFyZ3M+W14pXSopXCk7JCcsIHJlLk1VTFRJTElORSkK KworCitkZWYgZnVuY19kZWNsX2l0ZXIodGV4dDogc3RyKSAtPiBJdGVyYXRvcjoKKyAgICBmb3Ig bSBpbiBmdW5jX2RlY2xfcmUuZmluZGl0ZXIodGV4dCk6CisgICAgICAgIHlpZWxkIEZ1bmNEZWNs KHJldHVybl90eXBlPSdpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW0uZ3JvdXAo J3dyYXBwZXJfbmFtZScpLAorICAgICAgICAgICAgICAgICAgICAgICBhcmdzPW0uZ3JvdXAoJ2Fy Z3MnKSkKKworCitkZWYgc25ha2VfdG9fY2FtZWwoZnVuY19uYW1lOiBzdHIpIC0+IHN0cjoKKyAg ICAiIiIKKyAgICBDb252ZXJ0IHVuZGVyc2NvcmUgbmFtZXMgbGlrZSAnc29tZV9mdW5jdGlvbl9u YW1lJyB0byBjYW1lbC1jYXNlIGxpa2UKKyAgICAnU29tZUZ1bmN0aW9uTmFtZScKKyAgICAiIiIK KyAgICB3b3JkcyA9IGZ1bmNfbmFtZS5zcGxpdCgnXycpCisgICAgd29yZHMgPSBbd1swXS51cHBl cigpICsgd1sxOl0gZm9yIHcgaW4gd29yZHNdCisgICAgcmV0dXJuICcnLmpvaW4od29yZHMpCisK KworZGVmIGdlbl93cmFwcGVyKGZ1bmM6IEZ1bmNEZWNsKSAtPiBzdHI6CisgICAgYXNzZXJ0IGZ1 bmMubmFtZS5zdGFydHN3aXRoKCdiZHJ2XycpCisgICAgYXNzZXJ0IG5vdCBmdW5jLm5hbWUuc3Rh cnRzd2l0aCgnYmRydl9jb18nKQorICAgIGFzc2VydCBmdW5jLnJldHVybl90eXBlID09ICdpbnQn CisgICAgYXNzZXJ0IGZ1bmMuYXJnc1swXS50eXBlIGluIFsnQmxvY2tEcml2ZXJTdGF0ZSAqJywg J0JkcnZDaGlsZCAqJ10KKworICAgIG5hbWUgPSAnYmRydl9jb18nICsgZnVuYy5uYW1lWzU6XQor ICAgIGJzID0gJ2JzJyBpZiBmdW5jLmFyZ3NbMF0udHlwZSA9PSAnQmxvY2tEcml2ZXJTdGF0ZSAq JyBlbHNlICdjaGlsZC0+YnMnCisgICAgc3RydWN0X25hbWUgPSBzbmFrZV90b19jYW1lbChuYW1l KQorCisgICAgcmV0dXJuIGYiIiJcCisvKgorICogV3JhcHBlcnMgZm9yIHtuYW1lfQorICovCisK K3R5cGVkZWYgc3RydWN0IHtzdHJ1Y3RfbmFtZX0ge3sKKyAgICBCZHJ2UG9sbENvIHBvbGxfc3Rh dGU7Cit7IGZ1bmMuZ2VuX2Jsb2NrKCcgICAge2RlY2x9OycpIH0KK319IHtzdHJ1Y3RfbmFtZX07 CisKK3N0YXRpYyB2b2lkIGNvcm91dGluZV9mbiB7bmFtZX1fZW50cnkodm9pZCAqb3BhcXVlKQor e3sKKyAgICB7c3RydWN0X25hbWV9ICpzID0gb3BhcXVlOworCisgICAgcy0+cG9sbF9zdGF0ZS5y ZXQgPSB7bmFtZX0oeyBmdW5jLmdlbl9saXN0KCdzLT57bmFtZX0nKSB9KTsKKyAgICBzLT5wb2xs X3N0YXRlLmluX3Byb2dyZXNzID0gZmFsc2U7CisKKyAgICBhaW9fd2FpdF9raWNrKCk7Cit9fQor CitpbnQge2Z1bmMubmFtZX0oeyBmdW5jLmdlbl9saXN0KCd7ZGVjbH0nKSB9KQore3sKKyAgICBp ZiAocWVtdV9pbl9jb3JvdXRpbmUoKSkge3sKKyAgICAgICAgcmV0dXJuIHtuYW1lfSh7IGZ1bmMu Z2VuX2xpc3QoJ3tuYW1lfScpIH0pOworICAgIH19IGVsc2Uge3sKKyAgICAgICAge3N0cnVjdF9u YW1lfSBzID0ge3sKKyAgICAgICAgICAgIC5wb2xsX3N0YXRlLmJzID0ge2JzfSwKKyAgICAgICAg ICAgIC5wb2xsX3N0YXRlLmluX3Byb2dyZXNzID0gdHJ1ZSwKKworeyBmdW5jLmdlbl9ibG9jaygn ICAgICAgICAgICAgLntuYW1lfSA9IHtuYW1lfSwnKSB9CisgICAgICAgIH19OworCisgICAgICAg IHMucG9sbF9zdGF0ZS5jbyA9IHFlbXVfY29yb3V0aW5lX2NyZWF0ZSh7bmFtZX1fZW50cnksICZz KTsKKworICAgICAgICByZXR1cm4gYmRydl9wb2xsX2NvKCZzLnBvbGxfc3RhdGUpOworICAgIH19 Cit9fSIiIgorCisKK2RlZiBnZW5fd3JhcHBlcnMoaW5wdXRfY29kZTogc3RyKSAtPiBzdHI6Cisg ICAgcmVzID0gJycKKyAgICBmb3IgZnVuYyBpbiBmdW5jX2RlY2xfaXRlcihpbnB1dF9jb2RlKToK KyAgICAgICAgcmVzICs9ICdcblxuXG4nCisgICAgICAgIHJlcyArPSBnZW5fd3JhcHBlcihmdW5j KQorCisgICAgcmV0dXJuIHByZXR0aWZ5KHJlcykgICMgcHJldHRpZnkgdG8gd3JhcCBsb25nIGxp bmVzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpZiBsZW4oc3lzLmFyZ3Yp IDwgMzoKKyAgICAgICAgZXhpdChmJ1VzYWdlOiB7c3lzLmFyZ3ZbMF19IE9VVF9GSUxFLmMgSU5f RklMRS5bY2hdLi4uJykKKworICAgIHdpdGggb3BlbihzeXMuYXJndlsxXSwgJ3cnLCBlbmNvZGlu Zz0ndXRmLTgnKSBhcyBmX291dDoKKyAgICAgICAgZl9vdXQud3JpdGUoZ2VuX2hlYWRlcigpKQor ICAgICAgICBmb3IgZm5hbWUgaW4gc3lzLmFyZ3ZbMjpdOgorICAgICAgICAgICAgd2l0aCBvcGVu KGZuYW1lLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmX2luOgorICAgICAgICAgICAgICAgIGZfb3V0 LndyaXRlKGdlbl93cmFwcGVycyhmX2luLnJlYWQoKSkpCisgICAgICAgICAgICAgICAgZl9vdXQu d3JpdGUoJ1xuJykKLS0gCjIuMjYuMgoK