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=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT, WEIRD_QUOTING 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 EAF95C2D0A8 for ; Mon, 28 Sep 2020 17:51:42 +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 45B5620739 for ; Mon, 28 Sep 2020 17:51:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="nOe4VxuE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 45B5620739 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:36320 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kMxJN-00041w-Er for qemu-devel@archiver.kernel.org; Mon, 28 Sep 2020 13:51:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kMwy2-00032X-WA for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:29:40 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:53863) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kMwxv-0007v8-9Z for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:29:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1601314171; x=1632850171; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jeBD+kFB84F5G7GFluKLnMsR3PQQ7/SknDkEd0Xw1ww=; b=nOe4VxuEJFSYw8/Pkz4fSVL2zkGNdHTDCsYkQz9v6AeqwmQk++gf4dln 7yLxP+t0bE5BHcgCr2X6Y5HrlOBSxTP3uf/UaClIdDd75NnGW2NOgnFB5 6xY8V6RQ/FkmmF+7Sv0tspGS4hKWx+miRSxMEgMjt6gJ+fk9yYTTbpDk5 U=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Sep 2020 10:29:04 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 28 Sep 2020 10:29:04 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 2FF261184; Mon, 28 Sep 2020 12:29:04 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v4 18/29] Hexagon (target/hexagon) generator phase 2 - generate header files Date: Mon, 28 Sep 2020 12:28:47 -0500 Message-Id: <1601314138-9930-19-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1601314138-9930-1-git-send-email-tsimpson@quicinc.com> References: <1601314138-9930-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/28 13:29:03 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.199, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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: ale@rev.ng, riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UHl0aG9uIHNjcmlwdHMgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBmaWxlcwogICAgaGVscGVyX3By b3Rvc19nZW5lcmF0ZWQuaAogICAgICAgIEZvciBlYWNoIGluc3RydWN0aW9uIHdlIGNyZWF0ZSBE RUZfSEVMUEVSIGZ1bmN0aW9uIHByb3RvdHlwZQogICAgaGVscGVyX2Z1bmNzX2dlbmVyYXRlZC5o CiAgICAgICAgRm9yIGVhY2ggaW5zdHJ1Y3Rpb24gd2UgY3JlYXRlIHRoZSBoZWxwZXIgZnVuY3Rp b24gZGVmaW5pdGlvbgogICAgdGNnX2Z1bmNzX2dlbmVyYXRlZC5oCiAgICAgICAgRm9yIGVhY2gg aW5zdHJ1Y3Rpb24gd2UgY3JlYXRlIFRDRyBjb2RlIHRvIGdlbmVyYXRlIGNhbGwgdG8gaGVscGVy CiAgICB0Y2dfZnVuY190YWJsZV9nZW5lcmF0ZWQuaAogICAgICAgIFRhYmxlIG9mIGZ1bmN0aW9u IHBvaW50ZXJzIGluZGV4ZWQgYnkgb3Bjb2RlCiAgICBzaG9ydGNvZGVfZ2VuZXJhdGVkLmgKICAg ICAgICBHZW5lcmF0ZSBhIHRhYmxlIG9mIGluc3RydWN0aW9uICJzaG9ydGNvZGUiIHNlbWFudGlj cwogICAgb3Bjb2Rlc19kZWZfZ2VuZXJhdGVkLmgKICAgICAgICBHaXZlcyBhIGxpc3Qgb2YgYWxs IHRoZSBvcGNvZGVzCiAgICBvcF9hdHRyaWJzX2dlbmVyYXRlZC5oCiAgICAgICAgTGlzdHMgYWxs IHRoZSBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGluc3RydWN0aW9uCiAgICBvcF9y ZWdzX2dlbmVyYXRlZC5oCiAgICAgICAgTGlzdHMgdGhlIHJlZ2lzdGVyIGFuZCBpbW1lZGlhdGUg b3BlcmFuZHMgZm9yIGVhY2ggaW5zdHJ1Y3Rpb24KICAgIHByaW50aW5zbl9nZW5lcmF0ZWQuaAog ICAgICAgIERhdGEgZm9yIHByaW50aW5nIChkaXNhc3NlbWJsaW5nKSBlYWNoIGluc3RydWN0aW9u IChmb3JtYXQKICAgICAgICBzdHJpbmcgKyBvcGVyYW5kcykKClNpZ25lZC1vZmYtYnk6IFRheWxv ciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5jLmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9nZW5f aGVscGVyX2Z1bmNzLnB5ICAgfCAyMjkgKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9n ZW5faGVscGVyX3Byb3Rvcy5weSAgfCAxNTggKysrKysrKysrKwogdGFyZ2V0L2hleGFnb24vZ2Vu X29wX2F0dHJpYnMucHkgICAgIHwgIDQ2ICsrKwogdGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3Mu cHkgICAgICAgIHwgMTE5ICsrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fb3Bjb2Rlc19kZWYu cHkgICAgfCAgNDMgKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5ICAgICAgfCAx ODUgKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5ICAgICAgfCAg NzEgKysrKysKIHRhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJsZS5weSB8ICA2NiArKysr KwogdGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weSAgICAgIHwgNTQzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9oZXhfY29tbW9uLnB5ICAg ICAgICAgfCAyMTYgKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDE2NzYgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfZnVu Y3MucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5faGVscGVyX3Byb3Rv cy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9vcF9hdHRyaWJzLnB5 CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3MucHkKIGNyZWF0 ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fb3Bjb2Rlc19kZWYucHkKIGNyZWF0ZSBt b2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5CiBjcmVhdGUgbW9kZSAx MDA3NTUgdGFyZ2V0L2hleGFnb24vZ2VuX3Nob3J0Y29kZS5weQogY3JlYXRlIG1vZGUgMTAwNzU1 IHRhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJsZS5weQogY3JlYXRlIG1vZGUgMTAwNzU1 IHRhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY3MucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJn ZXQvaGV4YWdvbi9oZXhfY29tbW9uLnB5CgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZ2Vu X2hlbHBlcl9mdW5jcy5weSBiL3RhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfZnVuY3MucHkKbmV3 IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg5ODE4YwotLS0gL2Rldi9udWxsCisr KyBiL3RhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfZnVuY3MucHkKQEAgLTAsMCArMSwyMjkgQEAK KyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIw IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBz eXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKwor ZnJvbSBoZXhfY29tbW9uIGltcG9ydCAqCisKKyMjCisjIyBIZWxwZXJzIGZvciBnZW5faGVscGVy X2Z1bmN0aW9uCisjIworZGVmIGdlbl9kZWNsX2VhKGYpOgorICAgIGYud3JpdGUoIiAgICB1aW50 MzJfdCBFQTtcbiIpCisKK2RlZiBnZW5faGVscGVyX3JldHVybl90eXBlKGYscmVndHlwZSxyZWdp ZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPiAxIDogZi53cml0ZSgiLCAiKQorICAgIGYud3JpdGUo ImludDMyX3QiKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1cm5fdHlwZV9wYWlyKGYscmVndHlwZSxy ZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPiAxIDogZi53cml0ZSgiLCAiKQorICAgIGYud3Jp dGUoImludDY0X3QiKQorCitkZWYgZ2VuX2hlbHBlcl9hcmcoZixyZWd0eXBlLHJlZ2lkLHJlZ25v KToKKyAgICBpZiByZWdubyA+IDAgOiBmLndyaXRlKCIsICIgKQorICAgIGYud3JpdGUoImludDMy X3QgJXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfbmV3KGYs cmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPj0gMCA6IGYud3JpdGUoIiwgIiAp CisgICAgZi53cml0ZSgiaW50MzJfdCAlcyVzTiIgJSAocmVndHlwZSxyZWdpZCkpCisKK2RlZiBn ZW5faGVscGVyX2FyZ19wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8g Pj0gMCA6IGYud3JpdGUoIiwgIikKKyAgICBmLndyaXRlKCJpbnQ2NF90ICVzJXNWIiAlIChyZWd0 eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfYXJnX29wbihmLHJlZ3R5cGUscmVnaWQsaSx0 YWcpOgorICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfYXJnX3Bh aXIoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAg ICAgIGlmIGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5f aGVscGVyX2FyZyhmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgZWxpZiBpc19uZXdfdmFsKHJl Z3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdfbmV3KGYscmVn dHlwZSxyZWdpZCxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdp c3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBlbHNlOgorICAg ICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1y ZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgi LCBpbnQzMl90ICVzIiAlIChpbW1fbmFtZShpbW1sZXR0KSkpCisKK2RlZiBnZW5faGVscGVyX2Rl c3RfZGVjbChmLHJlZ3R5cGUscmVnaWQscmVnbm8sc3ViZmllbGQ9IiIpOgorICAgIGYud3JpdGUo IiAgICBpbnQzMl90ICVzJXNWJXMgPSAwO1xuIiAlIFwKKyAgICAgICAgKHJlZ3R5cGUscmVnaWQs c3ViZmllbGQpKQorCitkZWYgZ2VuX2hlbHBlcl9kZXN0X2RlY2xfcGFpcihmLHJlZ3R5cGUscmVn aWQscmVnbm8sc3ViZmllbGQ9IiIpOgorICAgIGYud3JpdGUoIiAgICBpbnQ2NF90ICVzJXNWJXMg PSAwO1xuIiAlIFwKKyAgICAgICAgKHJlZ3R5cGUscmVnaWQsc3ViZmllbGQpKQorCitkZWYgZ2Vu X2hlbHBlcl9kZXN0X2RlY2xfb3BuKGYscmVndHlwZSxyZWdpZCxpKToKKyAgICBpZiAoaXNfcGFp cihyZWdpZCkpOgorICAgICAgICBnZW5faGVscGVyX2Rlc3RfZGVjbF9wYWlyKGYscmVndHlwZSxy ZWdpZCxpKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBnZW5faGVscGVy X2Rlc3RfZGVjbChmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgi QmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYg Z2VuX2hlbHBlcl9yZXR1cm4oZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCIg ICAgcmV0dXJuICVzJXNWO1xuIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJf cmV0dXJuX3BhaXIoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCIgICAgcmV0 dXJuICVzJXNWO1xuIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJu X29wbihmLCByZWd0eXBlLCByZWdpZCwgaSk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAg ICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fcGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlm IChpc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgZ2VuX2hlbHBlcl9yZXR1cm4oZixyZWd0eXBl LHJlZ2lkLGkpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTog IixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworIyMKKyMjIEdlbmVyYXRlIHRoZSBUQ0cg Y29kZSB0byBjYWxsIHRoZSBoZWxwZXIKKyMjICAgICBGb3IgQTJfYWRkOiBSZDMyPWFkZChSczMy LFJ0MzIpLCB7IFJkVj1Sc1YrUnRWO30KKyMjICAgICBXZSBwcm9kdWNlOgorIyMgICAgICAgaW50 MzJfdCBIRUxQRVIoQTJfYWRkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YsIGlu dDMyX3QgUnRWKQorIyMgICAgICAgeworIyMgICAgICAgICAgIHVpbnQzMl90IHNsb3QgX19hdHRy aWJ1dGVfXyh1bnVzZWQpKSA9IDQ7CisjIyAgICAgICAgICAgaW50MzJfdCBSZFYgPSAwOworIyMg ICAgICAgICAgIHsgUmRWPVJzVitSdFY7fQorIyMgICAgICAgICAgIENPVU5UX0hFTFBFUihBMl9h ZGQpOworIyMgICAgICAgICAgIHJldHVybiBSZFY7CisjIyAgICAgICB9CisjIworZGVmIGdlbl9o ZWxwZXJfZnVuY3Rpb24oZiwgdGFnLCB0YWdyZWdzLCB0YWdpbW1zKToKKyAgICByZWdzID0gdGFn cmVnc1t0YWddCisgICAgaW1tcyA9IHRhZ2ltbXNbdGFnXQorCisgICAgbnVtcmVzdWx0cyA9IDAK KyAgICBudW1zY2FsYXJyZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlYWR3cml0ZSA9IDAKKyAg ICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlz X3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIG51bXJlc3VsdHMgKz0gMQorICAgICAgICAg ICAgaWYgKGlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxh cnJlc3VsdHMgKz0gMQorICAgICAgICBpZiAoaXNfcmVhZHdyaXRlKHJlZ2lkKSk6CisgICAgICAg ICAgICBpZiAoaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2Nh bGFycmVhZHdyaXRlICs9IDEKKworICAgIGlmIChudW1zY2FsYXJyZXN1bHRzID4gMSk6CisgICAg ICAgICMjIFRoZSBoZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJl c3VsdAorICAgICAgICBmLndyaXRlKCJ2b2lkIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICpl bnYpIHsgQk9HVVNfSEVMUEVSKCVzKTsgfVxuIgorICAgICAgICAgICAgICAgICUgKHRhZywgdGFn KSkKKyAgICBlbHNlOgorICAgICAgICAjIyBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9u IGlzIHRoZSB0eXBlIG9mIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICAjIyByZWdpc3RlcgorICAg ICAgICBpPTAKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6 CisgICAgICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGlm IChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJu X3R5cGVfcGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgICAgICAgICBlbGlmIChpc19z aW5nbGUocmVnaWQpKToKKyAgICAgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fdHlw ZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxu dW1yZWdzKQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgaWYgKG51bXNjYWxhcnJlc3Vs dHMgPT0gMCk6CisgICAgICAgICAgICBmLndyaXRlKCJ2b2lkIikKKyAgICAgICAgZi53cml0ZSgi IEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICplbnYiICUgdGFnKQorCisgICAgICAgIGkgPSAx CisKKyAgICAgICAgIyMgQXJndW1lbnRzIHRvIHRoZSBoZWxwZXIgZnVuY3Rpb24gYXJlIHRoZSBz b3VyY2UgcmVncyBhbmQgaW1tZWRpYXRlcworICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3Nz LG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChpc19yZWFkKHJlZ2lkKSk6CisgICAg ICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdfb3BuKGYscmVndHlwZSxyZWdpZCxpLHRhZykKKyAg ICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBp biBpbW1zOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdfaW1tKGYsaW1tbGV0dCkKKyAgICAg ICAgICAgIGkgKz0gMQorICAgICAgICBpZiBuZWVkX3Nsb3QodGFnKToKKyAgICAgICAgICAgIGlm IGkgPiAwOiBmLndyaXRlKCIsICIpCisgICAgICAgICAgICBmLndyaXRlKCJ1aW50MzJfdCBzbG90 IikKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6CisgICAg ICAgICAgICBpZiBpID4gMDogZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZi53cml0ZSgidWlu dDMyX3QgcGFydDEiKQorICAgICAgICBmLndyaXRlKCIpXG57XG4iKQorICAgICAgICBpZiAobm90 IG5lZWRfc2xvdCh0YWcpKToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICB1aW50MzJfdCBzbG90 IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gNDtcbiIgKQorICAgICAgICBpZiBuZWVkX2VhKHRh Zyk6IGdlbl9kZWNsX2VhKGYpCisgICAgICAgICMjIERlY2xhcmUgdGhlIHJldHVybiB2YXJpYWJs ZQorICAgICAgICBpPTAKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGlu IHJlZ3M6CisgICAgICAgICAgICBpZiAoaXNfd3JpdGVvbmx5KHJlZ2lkKSk6CisgICAgICAgICAg ICAgICAgZ2VuX2hlbHBlcl9kZXN0X2RlY2xfb3BuKGYscmVndHlwZSxyZWdpZCxpKQorICAgICAg ICAgICAgaSArPSAxCisKKyAgICAgICAgaWYgJ0FfRlBPUCcgaW4gYXR0cmliZGljdFt0YWddOgor ICAgICAgICAgICAgZi53cml0ZSgnICAgIGZGUE9QX1NUQVJUKCk7XG4nKTsKKworICAgICAgICBm LndyaXRlKCIgICAgJXNcbiIgJSBzZW1kaWN0W3RhZ10pCisKKyAgICAgICAgaWYgJ0FfRlBPUCcg aW4gYXR0cmliZGljdFt0YWddOgorICAgICAgICAgICAgZi53cml0ZSgnICAgIGZGUE9QX0VORCgp O1xuJyk7CisKKyAgICAgICAgIyMgU2F2ZS9yZXR1cm4gdGhlIHJldHVybiB2YXJpYWJsZQorICAg ICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAg IGlmIChpc193cml0dGVuKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9yZXR1 cm5fb3BuKGYsIHJlZ3R5cGUsIHJlZ2lkLCBpKQorICAgICAgICBmLndyaXRlKCJ9XG5cbiIpCisg ICAgICAgICMjIEVuZCBvZiB0aGUgaGVscGVyIGRlZmluaXRpb24KKworZGVmIG1haW4oKToKKyAg ICByZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIHJlYWRfYXR0cmlic19maWxl KHN5cy5hcmd2WzJdKQorICAgIHJlYWRfb3ZlcnJpZGVzX2ZpbGUoc3lzLmFyZ3ZbM10pCisgICAg Y2FsY3VsYXRlX2F0dHJpYnMoKQorICAgIHRhZ3JlZ3MgPSBnZXRfdGFncmVncygpCisgICAgdGFn aW1tcyA9IGdldF90YWdpbW1zKCkKKworICAgIGYgPSBTdHJpbmdJTygpCisKKyAgICBmb3IgdGFn IGluIHRhZ3M6CisgICAgICAgICMjIFNraXAgdGhlIHByaXYgaW5zdHJ1Y3Rpb25zCisgICAgICAg IGlmICggIkFfUFJJViIgaW4gYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgY29udGlu dWUKKyAgICAgICAgIyMgU2tpcCB0aGUgZ3Vlc3QgaW5zdHJ1Y3Rpb25zCisgICAgICAgIGlmICgg IkFfR1VFU1QiIGluIGF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisg ICAgICAgICMjIFNraXAgdGhlIGRpYWcgaW5zdHJ1Y3Rpb25zCisgICAgICAgIGlmICggdGFnID09 ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICggdGFnID09 ICJZNl9kaWFnMCIgKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAoIHRhZyA9 PSAiWTZfZGlhZzEiICkgOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgKCBza2lw X3FlbXVfaGVscGVyKHRhZykgKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZ2Vu X2hlbHBlcl9mdW5jdGlvbihmLCB0YWcsIHRhZ3JlZ3MsIHRhZ2ltbXMpCisKKworICAgIHJlYWxm ID0gb3BlbihzeXMuYXJndls0XSwgJ3cnKQorICAgIHJlYWxmLndyaXRlKGYuZ2V0dmFsdWUoKSkK KyAgICByZWFsZi5jbG9zZSgpCisgICAgZi5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09ICJfX21h aW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5faGVscGVy X3Byb3Rvcy5weSBiL3RhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfcHJvdG9zLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwZTAwZTcKLS0tIC9kZXYvbnVsbAorKysgYi90 YXJnZXQvaGV4YWdvbi9nZW5faGVscGVyX3Byb3Rvcy5weQpAQCAtMCwwICsxLDE1OCBAQAorIyEv dXNyL2Jpbi9lbnYgcHl0aG9uMworCisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVh bGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisj IyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyMjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisjIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyMjCisjIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5cwor aW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworCitmcm9t IGhleF9jb21tb24gaW1wb3J0ICoKKworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl9oZWxwZXJfcHJv dG90eXBlCisjIworZGVmX2hlbHBlcl90eXBlcyA9IHsKKyAgICAnTicgOiAnczMyJywKKyAgICAn TycgOiAnczMyJywKKyAgICAnUCcgOiAnczMyJywKKyAgICAnTScgOiAnczMyJywKKyAgICAnQycg OiAnczMyJywKKyAgICAnUicgOiAnczMyJywKKyAgICAnVicgOiAncHRyJywKKyAgICAnUScgOiAn cHRyJworfQorCitkZWZfaGVscGVyX3R5cGVzX3BhaXIgPSB7CisgICAgJ1InIDogJ3M2NCcsCisg ICAgJ0MnIDogJ3M2NCcsCisgICAgJ1MnIDogJ3M2NCcsCisgICAgJ0cnIDogJ3M2NCcsCisgICAg J1YnIDogJ3B0cicsCisgICAgJ1EnIDogJ3B0cicKK30KKworZGVmIGdlbl9kZWZfaGVscGVyX29w bihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaXNf cGFpcihyZWdpZCkpOgorICAgICAgICBmLndyaXRlKCIsICVzIiAlIChkZWZfaGVscGVyX3R5cGVz X3BhaXJbcmVndHlwZV0pKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBm LndyaXRlKCIsICVzIiAlIChkZWZfaGVscGVyX3R5cGVzW3JlZ3R5cGVdKSkKKyAgICBlbHNlOgor ICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxu dW1yZWdzKQorCisjIworIyMgR2VuZXJhdGUgdGhlIERFRl9IRUxQRVIgcHJvdG90eXBlIGZvciBh biBpbnN0cnVjdGlvbgorIyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIsUnQzMikKKyMj ICAgICBXZSBwcm9kdWNlOgorIyMgICAgICAgICBERUZfSEVMUEVSXzMoQTJfYWRkLCBzMzIsIGVu diwgczMyLCBzMzIpCisjIworZGVmIGdlbl9oZWxwZXJfcHJvdG90eXBlKGYsIHRhZywgdGFncmVn cywgdGFnaW1tcyk6CisgICAgcmVncyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1z W3RhZ10KKworICAgIG51bXJlc3VsdHMgPSAwCisgICAgbnVtc2NhbGFycmVzdWx0cyA9IDAKKyAg ICBudW1zY2FsYXJyZWFkd3JpdGUgPSAwCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1y ZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChpc193cml0dGVuKHJlZ2lkKSk6CisgICAgICAgICAg ICBudW1yZXN1bHRzICs9IDEKKyAgICAgICAgICAgIGlmIChpc19zY2FsYXJfcmVnKHJlZ3R5cGUp KToKKyAgICAgICAgICAgICAgICBudW1zY2FsYXJyZXN1bHRzICs9IDEKKyAgICAgICAgaWYgKGlz X3JlYWR3cml0ZShyZWdpZCkpOgorICAgICAgICAgICAgaWYgKGlzX3NjYWxhcl9yZWcocmVndHlw ZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxhcnJlYWR3cml0ZSArPSAxCisKKyAgICBpZiAo bnVtc2NhbGFycmVzdWx0cyA+IDEpOgorICAgICAgICAjIyBUaGUgaGVscGVyIGlzIGJvZ3VzIHdo ZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByZXN1bHQKKyAgICAgICAgZi53cml0ZSgnREVGX0hF TFBFUl8xKCVzLCB2b2lkLCBlbnYpXG4nICUgdGFnKQorICAgIGVsc2U6CisgICAgICAgICMjIEZp Z3VyZSBvdXQgaG93IG1hbnkgYXJndW1lbnRzIHRoZSBoZWxwZXIgd2lsbCB0YWtlCisgICAgICAg IGlmIChudW1zY2FsYXJyZXN1bHRzID09IDApOgorICAgICAgICAgICAgZGVmX2hlbHBlcl9zaXpl ID0gbGVuKHJlZ3MpK2xlbihpbW1zKStudW1zY2FsYXJyZWFkd3JpdGUrMQorICAgICAgICAgICAg aWYgbmVlZF9wYXJ0MSh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQorICAgICAgICAgICAgaWYg bmVlZF9zbG90KHRhZyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAxCisgICAgICAgICAgICBmLndyaXRl KCdERUZfSEVMUEVSXyVzKCVzJyAlIChkZWZfaGVscGVyX3NpemUsIHRhZykpCisgICAgICAgICAg ICAjIyBUaGUgcmV0dXJuIHR5cGUgaXMgdm9pZAorICAgICAgICAgICAgZi53cml0ZSgnLCB2b2lk JyApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWZfaGVscGVyX3NpemUgPSBsZW4ocmVn cykrbGVuKGltbXMpK251bXNjYWxhcnJlYWR3cml0ZQorICAgICAgICAgICAgaWYgbmVlZF9wYXJ0 MSh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQorICAgICAgICAgICAgaWYgbmVlZF9zbG90KHRh Zyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAxCisgICAgICAgICAgICBmLndyaXRlKCdERUZfSEVMUEVS XyVzKCVzJyAlIChkZWZfaGVscGVyX3NpemUsIHRhZykpCisKKyAgICAgICAgIyMgR2VuZXJhdGUg dGhlIHFlbXUgREVGX0hFTFBFUiB0eXBlIGZvciBlYWNoIHJlc3VsdAorICAgICAgICBpPTAKKyAg ICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAg ICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9kZWZfaGVscGVy X29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICAg ICAgICAgIGkgKz0gMQorCisgICAgICAgICMjIFB1dCB0aGUgZW52IGJldHdlZW4gdGhlIG91dHB1 dHMgYW5kIGlucHV0cworICAgICAgICBmLndyaXRlKCcsIGVudicgKQorICAgICAgICBpICs9IDEK KworICAgICAgICAjIyBHZW5lcmF0ZSB0aGUgcWVtdSB0eXBlIGZvciBlYWNoIGlucHV0IG9wZXJh bmQgKHJlZ3MgYW5kIGltbWVkaWF0ZXMpCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGlzX3JlYWQocmVnaWQpKToKKyAgICAg ICAgICAgICAgICBnZW5fZGVmX2hlbHBlcl9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9z cywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZm9yIGltbWxl dHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICAgICAgZi53cml0ZSgiLCBzMzIiKQor CisgICAgICAgICMjIEFkZCB0aGUgYXJndW1lbnRzIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc2xvdCBh bmQgcGFydDEgKGlmIG5lZWRlZCkKKyAgICAgICAgaWYgbmVlZF9zbG90KHRhZyk6IGYud3JpdGUo JywgaTMyJyApCisgICAgICAgIGlmIG5lZWRfcGFydDEodGFnKTogZi53cml0ZSgnICwgaTMyJyAp CisgICAgICAgIGYud3JpdGUoJylcbicpCisKK2RlZiBtYWluKCk6CisgICAgcmVhZF9zZW1hbnRp Y3NfZmlsZShzeXMuYXJndlsxXSkKKyAgICByZWFkX2F0dHJpYnNfZmlsZShzeXMuYXJndlsyXSkK KyAgICByZWFkX292ZXJyaWRlc19maWxlKHN5cy5hcmd2WzNdKQorICAgIGNhbGN1bGF0ZV9hdHRy aWJzKCkKKyAgICB0YWdyZWdzID0gZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBnZXRfdGFn aW1tcygpCisKKyAgICBmID0gU3RyaW5nSU8oKQorCisgICAgZm9yIHRhZyBpbiB0YWdzOgorICAg ICAgICAjIyBTa2lwIHRoZSBwcml2IGluc3RydWN0aW9ucworICAgICAgICBpZiAoICJBX1BSSVYi IGluIGF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMj IFNraXAgdGhlIGd1ZXN0IGluc3RydWN0aW9ucworICAgICAgICBpZiAoICJBX0dVRVNUIiBpbiBh dHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIyBTa2lw IHRoZSBkaWFnIGluc3RydWN0aW9ucworICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6 CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzAiICkg OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcxIiAp IDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgKCBza2lwX3FlbXVfaGVscGVy KHRhZykgKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZ2VuX2hlbHBlcl9wcm90 b3R5cGUoZiwgdGFnLCB0YWdyZWdzLCB0YWdpbW1zKQorCisgICAgcmVhbGYgPSBvcGVuKHN5cy5h cmd2WzRdLCAndycpCisgICAgcmVhbGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxmLmNs b3NlKCkKKyAgICBmLmNsb3NlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBt YWluKCkKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9hdHRyaWJzLnB5IGIvdGFy Z2V0L2hleGFnb24vZ2VuX29wX2F0dHJpYnMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMC4uYWVmM2YxOQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl9v cF9hdHRyaWJzLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKwor IyMKKyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVy LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmlu ZworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSBoZXhfY29tbW9uIGltcG9ydCAqCisK K2RlZiBtYWluKCk6CisgICAgcmVhZF9zZW1hbnRpY3NfZmlsZShzeXMuYXJndlsxXSkKKyAgICBy ZWFkX2F0dHJpYnNfZmlsZShzeXMuYXJndlsyXSkKKyAgICBjYWxjdWxhdGVfYXR0cmlicygpCisK KyAgICAjIworICAgICMjIEdlbmVyYXRlIHRoZSBvcF9hdHRyaWJzX2dlbmVyYXRlZC5oIGZpbGUK KyAgICAjIyAgICAgTGlzdHMgYWxsIHRoZSBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNo IGluc3RydWN0aW9uCisgICAgIyMKKyAgICBmID0gU3RyaW5nSU8oKQorICAgIGZvciB0YWcgaW4g dGFnczoKKyAgICAgICAgZi53cml0ZSgnT1BfQVRUUklCKCVzLEFUVFJJQlMoJXMpKVxuJyAlIFwK KyAgICAgICAgICAgICh0YWcsICcsJy5qb2luKHNvcnRlZChhdHRyaWJkaWN0W3RhZ10pKSkpCisg ICAgcmVhbGYgPSBvcGVuKHN5cy5hcmd2WzNdLCAnd3QnKQorICAgIHJlYWxmLndyaXRlKGYuZ2V0 dmFsdWUoKSkKKyAgICByZWFsZi5jbG9zZSgpCisgICAgZi5jbG9zZSgpCisKK2lmIF9fbmFtZV9f ID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9n ZW5fb3BfcmVncy5weSBiL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9yZWdzLnB5Cm5ldyBmaWxlIG1v ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjZTNkZGYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJn ZXQvaGV4YWdvbi9nZW5fb3BfcmVncy5weQpAQCAtMCwwICsxLDExOSBAQAorIyEvdXNyL2Jpbi9l bnYgcHl0aG9uMworCisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5u b3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisjIyAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisjIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisj IyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5cworaW1wb3J0IHJl CitpbXBvcnQgc3RyaW5nCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworCitmcm9tIGhleF9jb21t b24gaW1wb3J0ICoKKworIyMKKyMjIEdlbmVyYXRlIHRoZSBvcF9yZWdzX2dlbmVyYXRlZC5oIGZp bGUKKyMjICAgICBMaXN0cyB0aGUgcmVnaXN0ZXIgYW5kIGltbWVkaWF0ZSBvcGVyYW5kcyBmb3Ig ZWFjaCBpbnN0cnVjdGlvbgorIyMKK2RlZiBjYWxjdWxhdGVfcmVnaWRfcmVnKHRhZyk6CisgICAg ZGVmIGxldHRlcl9pbmMoeCk6IHJldHVybiBjaHIob3JkKHgpKzEpCisgICAgb3JkZXJlZF9pbXBs cmVncyA9IFsgJ1NQJywnRlAnLCdMUicgXQorICAgIHNyY2RzdF9sZXR0ID0gJ1gnCisgICAgc3Jj X2xldHQgPSAnUycKKyAgICBkc3RfbGV0dCA9ICdEJworICAgIHJldHN0ciA9ICIiCisgICAgbWFw ZGljdCA9IHt9CisgICAgZm9yIHJlZyBpbiBvcmRlcmVkX2ltcGxyZWdzOgorICAgICAgICByZWdf cmQgPSAwCisgICAgICAgIHJlZ193ciA9IDAKKyAgICAgICAgaWYgKCdBX0lNUExJQ0lUX1dSSVRF U18nK3JlZykgaW4gYXR0cmliZGljdFt0YWddOiByZWdfd3IgPSAxCisgICAgICAgIGlmIHJlZ19y ZCBhbmQgcmVnX3dyOgorICAgICAgICAgICAgcmV0c3RyICs9IHNyY2RzdF9sZXR0CisgICAgICAg ICAgICBtYXBkaWN0W3NyY2RzdF9sZXR0XSA9IHJlZworICAgICAgICAgICAgc3JjZHN0X2xldHQg PSBsZXR0ZXJfaW5jKHNyY2RzdF9sZXR0KQorICAgICAgICBlbGlmIHJlZ19yZDoKKyAgICAgICAg ICAgIHJldHN0ciArPSBzcmNfbGV0dAorICAgICAgICAgICAgbWFwZGljdFtzcmNfbGV0dF0gPSBy ZWcKKyAgICAgICAgICAgIHNyY19sZXR0ID0gbGV0dGVyX2luYyhzcmNfbGV0dCkKKyAgICAgICAg ZWxpZiByZWdfd3I6CisgICAgICAgICAgICByZXRzdHIgKz0gZHN0X2xldHQKKyAgICAgICAgICAg IG1hcGRpY3RbZHN0X2xldHRdID0gcmVnCisgICAgICAgICAgICBkc3RfbGV0dCA9IGxldHRlcl9p bmMoZHN0X2xldHQpCisgICAgcmV0dXJuIHJldHN0cixtYXBkaWN0CisKK2RlZiBjYWxjdWxhdGVf cmVnaWRfbGV0dGVycyh0YWcpOgorICAgIHJldHN0cixtYXBkaWN0ID0gY2FsY3VsYXRlX3JlZ2lk X3JlZyh0YWcpCisgICAgcmV0dXJuIHJldHN0cgorCitkZWYgc3RyaXBfcmVnX3ByZWZpeCh4KToK KyAgICB5PXgucmVwbGFjZSgnVVJFRy4nLCcnKQorICAgIHk9eS5yZXBsYWNlKCdNUkVHLicsJycp CisgICAgcmV0dXJuIHkucmVwbGFjZSgnR1JFRy4nLCcnKQorCitkZWYgbWFpbigpOgorICAgIHJl YWRfc2VtYW50aWNzX2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgcmVhZF9hdHRyaWJzX2ZpbGUoc3lz LmFyZ3ZbMl0pCisgICAgdGFncmVncyA9IGdldF90YWdyZWdzKCkKKyAgICB0YWdpbW1zID0gZ2V0 X3RhZ2ltbXMoKQorCisgICAgZiA9IFN0cmluZ0lPKCkKKworICAgIGZvciB0YWcgaW4gdGFnczoK KyAgICAgICAgcmVncyA9IHRhZ3JlZ3NbdGFnXQorICAgICAgICBycmVncyA9IFtdCisgICAgICAg IHdyZWdzID0gW10KKyAgICAgICAgcmVnaWRzID0gIiIKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVn aWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAgICBpZiBpc19yZWFkKHJlZ2lkKToK KyAgICAgICAgICAgICAgICBpZiByZWdpZFswXSBub3QgaW4gcmVnaWRzOiByZWdpZHMgKz0gcmVn aWRbMF0KKyAgICAgICAgICAgICAgICBycmVncy5hcHBlbmQocmVndHlwZStyZWdpZCtudW1yZWdz KQorICAgICAgICAgICAgaWYgaXNfd3JpdHRlbihyZWdpZCk6CisgICAgICAgICAgICAgICAgd3Jl Z3MuYXBwZW5kKHJlZ3R5cGUrcmVnaWQrbnVtcmVncykKKyAgICAgICAgICAgICAgICBpZiByZWdp ZFswXSBub3QgaW4gcmVnaWRzOiByZWdpZHMgKz0gcmVnaWRbMF0KKyAgICAgICAgZm9yIGF0dHJp YiBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAgICBpZiBhdHRyaWJpbmZvW2F0dHJpYl1b J3JyZWcnXToKKyAgICAgICAgICAgICAgICBycmVncy5hcHBlbmQoc3RyaXBfcmVnX3ByZWZpeChh dHRyaWJpbmZvW2F0dHJpYl1bJ3JyZWcnXSkpCisgICAgICAgICAgICBpZiBhdHRyaWJpbmZvW2F0 dHJpYl1bJ3dyZWcnXToKKyAgICAgICAgICAgICAgICB3cmVncy5hcHBlbmQoc3RyaXBfcmVnX3By ZWZpeChhdHRyaWJpbmZvW2F0dHJpYl1bJ3dyZWcnXSkpCisgICAgICAgIHJlZ2lkcyArPSBjYWxj dWxhdGVfcmVnaWRfbGV0dGVycyh0YWcpCisgICAgICAgIGYud3JpdGUoJ1JFR0lORk8oJXMsIiVz IixcdC8qUkQ6Ki9cdCIlcyIsXHQvKldSOiovXHQiJXMiKVxuJyAlIFwKKyAgICAgICAgICAgICh0 YWcscmVnaWRzLCIsIi5qb2luKHJyZWdzKSwiLCIuam9pbih3cmVncykpKQorCisgICAgZm9yIHRh ZyBpbiB0YWdzOgorICAgICAgICBpbW1zID0gdGFnaW1tc1t0YWddCisgICAgICAgIGYud3JpdGUo ICdJTU1JTkZPKCVzJyAlIHRhZykKKyAgICAgICAgaWYgbm90IGltbXM6CisgICAgICAgICAgICBm LndyaXRlKCcnJywndScsMCwwLCdVJywwLDAnJycpCisgICAgICAgIGZvciBzaWduLHNpemUsc2hh bXQgaW4gaW1tczoKKyAgICAgICAgICAgIGlmIHNpZ24gPT0gJ3InOiBzaWduID0gJ3MnCisgICAg ICAgICAgICBpZiBub3Qgc2hhbXQ6CisgICAgICAgICAgICAgICAgc2hhbXQgPSAiMCIKKyAgICAg ICAgICAgIGYud3JpdGUoJycnLCclcycsJXMsJXMnJycgJSAoc2lnbixzaXplLHNoYW10KSkKKyAg ICAgICAgaWYgbGVuKGltbXMpID09IDE6CisgICAgICAgICAgICBpZiBzaWduLmlzdXBwZXIoKToK KyAgICAgICAgICAgICAgICBteXUgPSAndScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgbXl1ID0gJ1UnCisgICAgICAgICAgICBmLndyaXRlKCcnJywnJXMnLDAsMCcnJyAlIG15 dSkKKyAgICAgICAgZi53cml0ZSgnKVxuJykKKworICAgIHJlYWxmID0gb3BlbihzeXMuYXJndlsz XSwgJ3cnKQorICAgIHJlYWxmLndyaXRlKGYuZ2V0dmFsdWUoKSkKKyAgICByZWFsZi5jbG9zZSgp CisgICAgZi5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigp CmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5fb3Bjb2Rlc19kZWYucHkgYi90YXJnZXQv aGV4YWdvbi9nZW5fb3Bjb2Rlc19kZWYucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uM2M0NzI4NQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl9vcGNv ZGVzX2RlZi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMj CisjIyAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwg SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcK K2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gaGV4X2NvbW1vbiBpbXBvcnQgKgorCitk ZWYgbWFpbigpOgorICAgIHJlYWRfc2VtYW50aWNzX2ZpbGUoc3lzLmFyZ3ZbMV0pCisKKyAgICAj IworICAgICMjIEdlbmVyYXRlIHRoZSBvcGNvZGVzX2RlZl9nZW5lcmF0ZWQuaCBmaWxlCisgICAg IyMgICAgIEdpdmVzIGEgbGlzdCBvZiBhbGwgdGhlIG9wY29kZXMKKyAgICAjIworICAgIGYgPSBT dHJpbmdJTygpCisgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICBmLndyaXRlICggIk9QQ09E RSglcyksXG4iICUgKHRhZykgKQorICAgIHJlYWxmID0gb3BlbihzeXMuYXJndlszXSwgJ3d0JykK KyAgICByZWFsZi53cml0ZShmLmdldHZhbHVlKCkpCisgICAgcmVhbGYuY2xvc2UoKQorICAgIGYu Y2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0t Z2l0IGEvdGFyZ2V0L2hleGFnb24vZ2VuX3ByaW50aW5zbi5weSBiL3RhcmdldC9oZXhhZ29uL2dl bl9wcmludGluc24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ5ZmZi NAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl9wcmludGluc24ucHkKQEAg LTAsMCArMSwxODUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmln aHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBpbXBv cnQgU3RyaW5nSU8KKworZnJvbSBoZXhfY29tbW9uIGltcG9ydCAqCisKKyMjCisjIyBHZW5lcmF0 ZSB0aGUgcHJpbnRpbnNuX2dlbmVyYXRlZC5oIGZpbGUKKyMjICAgICBEYXRhIGZvciBwcmludGlu ZyBlYWNoIGluc3RydWN0aW9uIChmb3JtYXQgc3RyaW5nICsgb3BlcmFuZHMpCisjIworZGVmIHJl Z3ByaW50ZXIobSk6CisgICAgc3RyID0gbS5ncm91cCgxKQorICAgIHN0ciArPSAiOiIuam9pbihb IiVkIl0qbGVuKG0uZ3JvdXAoMikpKQorICAgIHN0ciArPSBtLmdyb3VwKDMpCisgICAgaWYgKCdT JyBpbiBtLmdyb3VwKDEpKSBhbmQgKGxlbihtLmdyb3VwKDIpKSA9PSAxKToKKyAgICAgICAgc3Ry ICs9ICIvJXMiCisgICAgZWxpZiAoJ0MnIGluIG0uZ3JvdXAoMSkpIGFuZCAobGVuKG0uZ3JvdXAo MikpID09IDEpOgorICAgICAgICBzdHIgKz0gIi8lcyIKKyAgICByZXR1cm4gc3RyCisKK2RlZiBz cGFjaWZ5KHMpOgorICAgICMgUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhbnkgb3Bl cmF0b3IgdGhhdCBjb250YWlucyAnPScgY2hhcmFjdGVyOgorICAgIG9wc3dpdGhlcXVhbF9yZSA9 ICdbLSteJnwhPD49XT89JworICAgICMgUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBh bnkgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICBhc3NpZ25tZW50X3JlID0gJ1stK14mfF0/PScK KworICAgICMgT3V0IG9mIHRoZSBvcGVyYXRvcnMgdGhhdCBjb250YWluIHRoZSA9IHNpZ24sIGlm IHRoZSBvcGVyYXRvciBpcyBhbHNvIGFuCisgICAgIyBhc3NpZ25tZW50LCBzcGFjZXMgd2lsbCBi ZSBhZGRlZCBhcm91bmQgaXQsIHVubGVzcyBpdCdzIGVuY2xvc2VkIHdpdGhpbgorICAgICMgcGFy ZW50aGVzZXMsIG9yIHNwYWNlcyBhcmUgYWxyZWFkeSBwcmVzZW50LgorCisgICAgZXF1YWxzID0g cmUuY29tcGlsZShvcHN3aXRoZXF1YWxfcmUpCisgICAgYXNzaWduID0gcmUuY29tcGlsZShhc3Np Z25tZW50X3JlKQorCisgICAgc2xlbiA9IGxlbihzKQorICAgIHBhcmVuX2NvdW50ID0ge30KKyAg ICBpID0gMAorICAgIHBjID0gMAorICAgIHdoaWxlIGkgPCBzbGVuOgorICAgICAgICBjID0gc1tp XQorICAgICAgICBpZiBjID09ICcoJzoKKyAgICAgICAgICAgIHBjICs9IDEKKyAgICAgICAgZWxp ZiBjID09ICcpJzoKKyAgICAgICAgICAgIHBjIC09IDEKKyAgICAgICAgcGFyZW5fY291bnRbaV0g PSBwYworICAgICAgICBpICs9IDEKKworICAgICMgSXRlcmF0ZSBvdmVyIGFsbCBvcGVyYXRvcnMg dGhhdCBjb250YWluIHRoZSBlcXVhbCBzaWduLiBJZiBhbnkKKyAgICAjIG1hdGNoIGlzIGFsc28g YW4gYXNzaWdubWVudCBvcGVyYXRvciwgYWRkIHNwYWNlcyBhcm91bmQgaXQgaWYKKyAgICAjIHRo ZSBwYXJlbnRoZXNpcyBjb3VudCBpcyAwLgorICAgIHBvcyA9IDAKKyAgICBvdXQgPSBbXQorICAg IGZvciBtIGluIGVxdWFscy5maW5kaXRlcihzKToKKyAgICAgICAgbXMgPSBtLnN0YXJ0KCkKKyAg ICAgICAgbWUgPSBtLmVuZCgpCisgICAgICAgICMgdCBpcyB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hl ZCBvcHN3aXRoZXF1YWxfcmUuCisgICAgICAgIHQgPSBtLnN0cmluZ1ttczptZV0KKyAgICAgICAg b3V0ICs9IHNbcG9zOm1zXQorICAgICAgICBwb3MgPSBtZQorICAgICAgICBpZiBwYXJlbl9jb3Vu dFttc10gPT0gMDoKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIGVudGlyZSBzdHJpbmcgdCBp cyBhbiBhc3NpZ25tZW50LgorICAgICAgICAgICAgYW0gPSBhc3NpZ24ubWF0Y2godCkKKyAgICAg ICAgICAgIGlmIGFtIGFuZCBsZW4oYW0uZ3JvdXAoMCkpID09IG1lLW1zOgorICAgICAgICAgICAg ICAgICMgRG9uJ3QgYWRkIHNwYWNlcyBpZiB0aGV5IGFyZSBhbHJlYWR5IHRoZXJlLgorICAgICAg ICAgICAgICAgIGlmIG1zID4gMCBhbmQgc1ttcy0xXSAhPSAnICc6CisgICAgICAgICAgICAgICAg ICAgIG91dC5hcHBlbmQoJyAnKQorICAgICAgICAgICAgICAgIG91dCArPSB0CisgICAgICAgICAg ICAgICAgaWYgbWUgPCBzbGVuIGFuZCBzW21lXSAhPSAnICc6CisgICAgICAgICAgICAgICAgICAg IG91dC5hcHBlbmQoJyAnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgSWYg dGhpcyBpcyBub3QgYW4gYXNzaWdubWVudCwganVzdCBhcHBlbmQgaXQgdG8gdGhlIG91dHB1dAor ICAgICAgICAjIHN0cmluZy4KKyAgICAgICAgb3V0ICs9IHQKKworICAgICMgQXBwZW5kIHRoZSBy ZW1haW5pbmcgcGFydCBvZiB0aGUgc3RyaW5nLgorICAgIG91dCArPSBzW3BvczpsZW4ocyldCisg ICAgcmV0dXJuICcnLmpvaW4ob3V0KQorCitkZWYgbWFpbigpOgorICAgIHJlYWRfc2VtYW50aWNz X2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgcmVhZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisK KyAgICBpbW1leHRfY2FzZXJlID0gcmUuY29tcGlsZShyJ0lNTUVYVFwoKFtBLVphLXpdKScpCisK KyAgICBmID0gU3RyaW5nSU8oKQorCisgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICBpZiBu b3QgYmVoZGljdFt0YWddOiBjb250aW51ZQorICAgICAgICBleHRlbmRhYmxlX3VwcGVyX2ltbSA9 IEZhbHNlCisgICAgICAgIGV4dGVuZGFibGVfbG93ZXJfaW1tID0gRmFsc2UKKyAgICAgICAgbSA9 IGltbWV4dF9jYXNlcmUuc2VhcmNoKHNlbWRpY3RbdGFnXSkKKyAgICAgICAgaWYgbToKKyAgICAg ICAgICAgIGlmIG0uZ3JvdXAoMSkuaXN1cHBlcigpOgorICAgICAgICAgICAgICAgIGV4dGVuZGFi bGVfdXBwZXJfaW1tID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBl eHRlbmRhYmxlX2xvd2VyX2ltbSA9IFRydWUKKyAgICAgICAgYmVoID0gYmVoZGljdFt0YWddCisg ICAgICAgIGJlaCA9IHJlZ3JlLnN1YihyZWdwcmludGVyLGJlaCkKKyAgICAgICAgYmVoID0gYWJz aW1tcmUuc3ViKHIiIyVzMHgleCIsYmVoKQorICAgICAgICBiZWggPSByZWxpbW1yZS5zdWIociJQ QyslcyVkIixiZWgpCisgICAgICAgIGJlaCA9IHNwYWNpZnkoYmVoKQorICAgICAgICAjIFByaW50 IG91dCBhIGxpdGVyYWwgIiVzIiBhdCB0aGUgZW5kLCB1c2VkIHRvIG1hdGNoIGVtcHR5IHN0cmlu ZworICAgICAgICAjIHNvIEMgd29uJ3QgY29tcGxhaW4gYXQgdXMKKyAgICAgICAgaWYgKCJBX1ZF Q1giIGluIGF0dHJpYmRpY3RbdGFnXSk6IG1hY25hbWUgPSAiREVGX1ZFQ1hfUFJJTlRJTkZPIgor ICAgICAgICBlbHNlOiBtYWNuYW1lID0gIkRFRl9QUklOVElORk8iCisgICAgICAgIGYud3JpdGUo JyVzKCVzLCIlcyUlcyInICUgKG1hY25hbWUsdGFnLGJlaCkpCisgICAgICAgIHJlZ3Nfb3JfaW1t cyA9IHJlZ19vcl9pbW1yZS5maW5kYWxsKGJlaGRpY3RbdGFnXSkKKyAgICAgICAgcmkgPSAwCisg ICAgICAgIHNlZW5yZWdzID0ge30KKyAgICAgICAgZm9yIGFsbHJlZ3MsYSxiLGMsZCxhbGxpbW0s aW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIHJlZ3Nfb3JfaW1tczoKKyAgICAgICAgICAgIGlmIGE6 CisgICAgICAgICAgICAgICAgI3JlZ2lzdGVyCisgICAgICAgICAgICAgICAgaWYgYiBpbiBzZWVu cmVnczoKKyAgICAgICAgICAgICAgICAgICAgcmVnbm8gPSBzZWVucmVnc1tiXQorICAgICAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlZ25vID0gcmkKKyAgICAgICAgICAg ICAgICBpZiBsZW4oYikgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCBpbnNu LT5yZWdub1slZF0nICUgcmVnbm8pCisgICAgICAgICAgICAgICAgICAgIGlmICdTJyBpbiBhOgor ICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCBzcmVnMnN0cihpbnNuLT5yZWdub1sl ZF0pJyAlIHJlZ25vKQorICAgICAgICAgICAgICAgICAgICBlbGlmICdDJyBpbiBhOgorICAgICAg ICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCBjcmVnMnN0cihpbnNuLT5yZWdub1slZF0pJyAl IHJlZ25vKQorICAgICAgICAgICAgICAgIGVsaWYgbGVuKGIpID09IDI6CisgICAgICAgICAgICAg ICAgICAgIGYud3JpdGUoJywgaW5zbi0+cmVnbm9bJWRdICsgMSwgaW5zbi0+cmVnbm9bJWRdJyAl IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZWdubyxyZWdubykpCisgICAgICAgICAgICAg ICAgZWxpZiBsZW4oYikgPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCBpbnNu LT5yZWdub1slZF0gXiAzLCBpbnNuLT5yZWdub1slZF0gXiAyLCAnICUgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChyZWdubywgcmVnbm8pKQorICAgICAgICAgICAgICAgICAgICBmLndy aXRlKCdpbnNuLT5yZWdub1slZF0gXiAxLCBpbnNuLT5yZWdub1slZF0nICUgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChyZWdubywgcmVnbm8pKQorICAgICAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJQdXQgc29tZSBzdHVmZiB0byBoYW5kbGUgcXVh ZHMgaGVyZSIpCisgICAgICAgICAgICAgICAgaWYgYiBub3QgaW4gc2VlbnJlZ3M6CisgICAgICAg ICAgICAgICAgICAgIHNlZW5yZWdzW2JdID0gcmkKKyAgICAgICAgICAgICAgICAgICAgcmkgKz0g MQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjaW1tZWRpYXRlCisgICAgICAg ICAgICAgICAgaWYgKGltbWxldHQuaXN1cHBlcigpKToKKyAgICAgICAgICAgICAgICAgICAgaWYg ZXh0ZW5kYWJsZV91cHBlcl9pbW06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbW1sZXR0 IGluICdyUic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4 dGVuc2lvbl92YWxpZD8iIyMiOiIiJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lvbl92YWxp ZD8iIyI6IiInKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg ICAgICAgZi53cml0ZSgnLCIiJykKKyAgICAgICAgICAgICAgICAgICAgaWkgPSAxCisgICAgICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXh0ZW5kYWJsZV9sb3dlcl9p bW06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbW1sZXR0IGluICdyUic6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lvbl92YWxpZD8iIyMi OiIiJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lvbl92YWxpZD8iIyI6IiInKQorICAgICAg ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCIi JykKKyAgICAgICAgICAgICAgICAgICAgaWkgPSAwCisgICAgICAgICAgICAgICAgZi53cml0ZSgn LCBpbnNuLT5pbW1lZFslZF0nICUgaWkpCisgICAgICAgICMgYXBwZW5kIGVtcHR5IHN0cmluZyBz byB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbW9yZSBhcmcKKyAgICAgICAgZi53cml0ZSgnLCIiKVxu JykKKworICAgIHJlYWxmID0gb3BlbihzeXMuYXJndlszXSwgJ3cnKQorICAgIHJlYWxmLndyaXRl KGYuZ2V0dmFsdWUoKSkKKyAgICByZWFsZi5jbG9zZSgpCisgICAgZi5jbG9zZSgpCisKK2lmIF9f bmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4 YWdvbi9nZW5fc2hvcnRjb2RlLnB5IGIvdGFyZ2V0L2hleGFnb24vZ2VuX3Nob3J0Y29kZS5weQpu ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYzdiNjExCi0tLSAvZGV2L251bGwK KysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX3Nob3J0Y29kZS5weQpAQCAtMCwwICsxLDcxIEBACisj IS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBR dWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMK KyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lz CitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zy b20gaGV4X2NvbW1vbiBpbXBvcnQgKgorCitkZWYgZ2VuX3Nob3J0Y29kZShmLCB0YWcpOgorICAg IGYud3JpdGUoJ0RFRl9TSE9SVENPREUoJXMsICVzKVxuJyAlICh0YWcsc2VtZGljdFt0YWddKSkK KworZGVmIG1haW4oKToKKyAgICByZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAg IHJlYWRfYXR0cmlic19maWxlKHN5cy5hcmd2WzJdKQorICAgIGNhbGN1bGF0ZV9hdHRyaWJzKCkK KyAgICB0YWdyZWdzID0gZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBnZXRfdGFnaW1tcygp CisKKyAgICAjIworICAgICMjIEdlbmVyYXRlIHRoZSBzaG9ydGNvZGVfZ2VuZXJhdGVkLmggZmls ZQorICAgICMjCisgICAgZiA9IFN0cmluZ0lPKCkKKworICAgIGYud3JpdGUoIiNpZm5kZWYgREVG X1NIT1JUQ09ERVxuIikKKyAgICBmLndyaXRlKCIjZGVmaW5lIERFRl9TSE9SVENPREUoVEFHLFNI T1JUQ09ERSkgICAgLyogTm90aGluZyAqL1xuIikKKyAgICBmLndyaXRlKCIjZW5kaWZcbiIpCisK KyAgICBmb3IgdGFnIGluIHRhZ3M6CisgICAgICAgICMjIFNraXAgdGhlIHByaXYgaW5zdHJ1Y3Rp b25zCisgICAgICAgIGlmICggIkFfUFJJViIgaW4gYXR0cmliZGljdFt0YWddICkgOgorICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgIyMgU2tpcCB0aGUgZ3Vlc3QgaW5zdHJ1Y3Rpb25zCisg ICAgICAgIGlmICggIkFfR1VFU1QiIGluIGF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAg IGNvbnRpbnVlCisgICAgICAgICMjIFNraXAgdGhlIGRpYWcgaW5zdHJ1Y3Rpb25zCisgICAgICAg IGlmICggdGFnID09ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg IGlmICggdGFnID09ICJZNl9kaWFnMCIgKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAg ICBpZiAoIHRhZyA9PSAiWTZfZGlhZzEiICkgOgorICAgICAgICAgICAgY29udGludWUKKworICAg ICAgICBnZW5fc2hvcnRjb2RlKGYsIHRhZykKKworICAgIGYud3JpdGUoIiN1bmRlZiBERUZfU0hP UlRDT0RFXG4iKQorCisgICAgcmVhbGYgPSBvcGVuKHN5cy5hcmd2WzNdLCAndycpCisgICAgcmVh bGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxmLmNsb3NlKCkKKyAgICBmLmNsb3NlKCkK KworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3Rh cmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJsZS5weSBiL3RhcmdldC9oZXhhZ29uL2dlbl90 Y2dfZnVuY190YWJsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzcx YWE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jX3RhYmxl LnB5CkBAIC0wLDAgKzEsNjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBD b3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBp byBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSBoZXhfY29tbW9uIGltcG9ydCAqCisKK2RlZiBtYWlu KCk6CisgICAgcmVhZF9zZW1hbnRpY3NfZmlsZShzeXMuYXJndlsxXSkKKyAgICByZWFkX2F0dHJp YnNfZmlsZShzeXMuYXJndlsyXSkKKyAgICBjYWxjdWxhdGVfYXR0cmlicygpCisgICAgdGFncmVn cyA9IGdldF90YWdyZWdzKCkKKyAgICB0YWdpbW1zID0gZ2V0X3RhZ2ltbXMoKQorCisgICAgZiA9 IFN0cmluZ0lPKCkKKworICAgIGYud3JpdGUoIiNpZm5kZWYgSEVYQUdPTl9GVU5DX1RBQkxFX0hc biIpCisgICAgZi53cml0ZSgiI2RlZmluZSBIRVhBR09OX0ZVTkNfVEFCTEVfSFxuXG4iKQorCisg ICAgZi53cml0ZSgiY29uc3Qgc2VtYW50aWNfaW5zbl90IG9wY29kZV9nZW5wdHJbWFhfTEFTVF9P UENPREVdID0ge1xuIikKKyAgICBmb3IgdGFnIGluIHRhZ3M6CisgICAgICAgICMjIFNraXAgdGhl IHByaXYgaW5zdHJ1Y3Rpb25zCisgICAgICAgIGlmICggIkFfUFJJViIgaW4gYXR0cmliZGljdFt0 YWddICkgOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyMgU2tpcCB0aGUgZ3Vlc3Qg aW5zdHJ1Y3Rpb25zCisgICAgICAgIGlmICggIkFfR1VFU1QiIGluIGF0dHJpYmRpY3RbdGFnXSAp IDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMjIFNraXAgdGhlIGRpYWcgaW5zdHJ1 Y3Rpb25zCisgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAgIGNv bnRpbnVlCisgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnMCIgKSA6CisgICAgICAgICAgICBj b250aW51ZQorICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzEiICkgOgorICAgICAgICAgICAg Y29udGludWUKKworICAgICAgICBmLndyaXRlKCIgICAgWyVzXSA9IGdlbmVyYXRlXyVzLFxuIiAl ICh0YWcsIHRhZykpCisgICAgZi53cml0ZSgifTtcblxuIikKKworICAgIGYud3JpdGUoIiNlbmRp ZiAgICAvKiBIRVhBR09OX0ZVTkNfVEFCTEVfSCAqL1xuIikKKworICAgIHJlYWxmID0gb3Blbihz eXMuYXJndlszXSwgJ3cnKQorICAgIHJlYWxmLndyaXRlKGYuZ2V0dmFsdWUoKSkKKyAgICByZWFs Zi5jbG9zZSgpCisgICAgZi5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Cisg ICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNzLnB5IGIv dGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl eCAwMDAwMDAwLi4xYzM1NDNlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2Vu X3RjZ19mdW5jcy5weQpAQCAtMCwwICsxLDU0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwor CisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgc3Ry aW5nCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworCitmcm9tIGhleF9jb21tb24gaW1wb3J0ICoK KworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl90Y2dfZnVuYworIyMKK2RlZiBnZW5fZGVjbF9lYV90 Y2coZiwgdGFnKToKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGF0dHJpYmRpY3RbdGFnXSk6Cisg ICAgICAgIGYud3JpdGUoIiAgICBUQ0d2IEVBID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7XG4iKQor ICAgIGVsc2U6CisgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2IEVBID0gdGNnX3RlbXBfbmV3KCk7 XG4iKQorCitkZWYgZ2VuX2ZyZWVfZWFfdGNnKGYpOgorICAgIGYud3JpdGUoIiAgICB0Y2dfdGVt cF9mcmVlKEVBKTtcbiIpCisKK2RlZiBnZW5wdHJfZGVjbF9wYWlyX3dyaXRlYmxlKGYsIHRhZywg cmVndHlwZSwgcmVnaWQsIHJlZ25vKToKKyAgICByZWdOPSIlcyVzTiIgJSAocmVndHlwZSxyZWdp ZCkKKyAgICBmLndyaXRlKCIgICAgVENHdl9pNjQgJXMlc1YgPSB0Y2dfdGVtcF9sb2NhbF9uZXdf aTY0KCk7XG4iICUgXAorICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgIGYud3JpdGUoIiAg ICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdub1slZF07XG4iICUgKHJlZ04sIHJlZ25vKSkKKyAg ICBpZiAoJ0FfQ09OREVYRUMnIGluIGF0dHJpYmRpY3RbdGFnXSk6CisgICAgICAgIGYud3JpdGUo IiAgICBpZiAoIWlzX3ByZWxvYWRlZChjdHgsICVzKSkge1xuIiAlIHJlZ04pCisgICAgICAgIGYu d3JpdGUoIiAgICAgICAgdGNnX2dlbl9tb3ZfdGwoaGV4X25ld192YWx1ZVslc10sIGhleF9ncHJb JXNdKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdOLCByZWdOKSkK KyAgICAgICAgZi53cml0ZSgiICAgIH1cbiIpCisgICAgICAgIGYud3JpdGUoIiAgICBpZiAoIWlz X3ByZWxvYWRlZChjdHgsICVzICsgMSkpIHtcbiIgJSByZWdOKQorICAgICAgICBmLndyaXRlKCIg ICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdfdmFsdWVbJXMgKyAxXSwgaGV4X2dwclslcyAr IDFdKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdOLCByZWdOKSkK KyAgICAgICAgZi53cml0ZSgiICAgIH1cbiIpCisKK2RlZiBnZW5wdHJfZGVjbF93cml0ZWJsZShm LCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCByZWdubyk6CisgICAgcmVnTj0iJXMlc04iICUgKHJlZ3R5 cGUscmVnaWQpCisgICAgZi53cml0ZSgiICAgIFRDR3YgJXMlc1YgPSB0Y2dfdGVtcF9sb2NhbF9u ZXcoKTtcbiIgJSBcCisgICAgICAgIChyZWd0eXBlLCByZWdpZCkpCisgICAgZi53cml0ZSgiICAg IGNvbnN0IGludCAlcyA9IGluc24tPnJlZ25vWyVkXTtcbiIgJSAocmVnTiwgcmVnbm8pKQorICAg IGlmICgnQV9DT05ERVhFQycgaW4gYXR0cmliZGljdFt0YWddKToKKyAgICAgICAgZi53cml0ZSgi ICAgIGlmICghaXNfcHJlbG9hZGVkKGN0eCwgJXMpKSB7XG4iICUgcmVnTikKKyAgICAgICAgZi53 cml0ZSgiICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlWyVzXSwgaGV4X2dwclsl c10pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ04sIHJlZ04pKQor ICAgICAgICBmLndyaXRlKCIgICAgfVxuIikKKworZGVmIGdlbnB0cl9kZWNsKGYsIHRhZywgcmVn dHlwZSwgcmVnaWQsIHJlZ25vKToKKyAgICByZWdOPSIlcyVzTiIgJSAocmVndHlwZSxyZWdpZCkK KyAgICBpZiAocmVndHlwZSA9PSAiUiIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJzcyIsICJ0 dCJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2X2k2NCAlcyVzViA9IHRjZ190ZW1w X2xvY2FsX25ld19pNjQoKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lk KSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdub1sl ZF07XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWdOLCByZWdubykpCisgICAgICAgIGVsaWYg KHJlZ2lkIGluIHsiZGQiLCAiZWUiLCAieHgiLCAieXkifSk6CisgICAgICAgICAgICBnZW5wdHJf ZGVjbF9wYWlyX3dyaXRlYmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAg ICBlbGlmIChyZWdpZCBpbiB7InMiLCAidCIsICJ1IiwgInYifSk6CisgICAgICAgICAgICBmLndy aXRlKCIgICAgVENHdiAlcyVzViA9IGhleF9ncHJbaW5zbi0+cmVnbm9bJWRdXTtcbiIgJSBcCisg ICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWdubykpCisgICAgICAgIGVsaWYgKHJl Z2lkIGluIHsiZCIsICJlIiwgIngiLCAieSJ9KToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsX3dy aXRlYmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisg ICAgZWxpZiAocmVndHlwZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJzIiwgInQi LCAidSIsICJ2In0pOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgJXMlc1YgPSBoZXhf cHJlZFtpbnNuLT5yZWdub1slZF1dO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwg cmVnaWQsIHJlZ25vKSkKKyAgICAgICAgZWxpZiAocmVnaWQgaW4geyJkIiwgImUiLCAieCJ9KToK KyAgICAgICAgICAgIGdlbnB0cl9kZWNsX3dyaXRlYmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQs IHJlZ25vKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBw YXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiQyIpOgorICAg ICAgICBpZiAocmVnaWQgPT0gInNzIik6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdl9p NjQgJXMlc1YgPSB0Y2dfdGVtcF9sb2NhbF9uZXdfaTY0KCk7XG4iICUgXAorICAgICAgICAgICAg ICAgIChyZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgY29uc3QgaW50 ICVzID0gaW5zbi0+cmVnbm9bJWRdO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVnTiwgcmVn bm8pKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAiZGQiKToKKyAgICAgICAgICAgIGdlbnB0cl9k ZWNsX3BhaXJfd3JpdGVibGUoZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8pCisgICAgICAg IGVsaWYgKHJlZ2lkID09ICJzIik6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdiAlcyVz ViA9IHRjZ190ZW1wX2xvY2FsX25ldygpO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlw ZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGludCAlcyVzTiA9IGlu c24tPnJlZ25vWyVkXTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCBy ZWdubykpCisgICAgICAgIGVsaWYgKHJlZ2lkID09ICJkIik6CisgICAgICAgICAgICBnZW5wdHJf ZGVjbF93cml0ZWJsZShmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCByZWdubykKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJl Z2lkKQorICAgIGVsaWYgKHJlZ3R5cGUgPT0gIk0iKToKKyAgICAgICAgaWYgKHJlZ2lkID09ICJ1 Iik6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgY29uc3QgaW50ICVzJXNOID0gaW5zbi0+cmVn bm9bJWRdO1xuIiUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVnbm8pKQor ICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgJXMlc1YgPSBoZXhfZ3ByWyVzJXNOICsgSEVY X1JFR19NMF07XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlw ZSwgcmVnaWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3Rl ciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJh ZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisKK2RlZiBnZW5wdHJfZGVjbF9u ZXcoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBpZiAocmVndHlwZSA9PSAiTiIpOgorICAg ICAgICBpZiAocmVnaWQgaW4geyJzIiwgInQifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAg Y29uc3QgaW50ICVzJXNYID0gaW5zbi0+cmVnbm9bJWRdO1xuIiAlIFwKKyAgICAgICAgICAgICAg ICAocmVndHlwZSwgcmVnaWQsIHJlZ25vKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2 ICVzJXNOID0gdGNnX2NvbnN0X3RsKCVzJXNYKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJl Z3R5cGUsIHJlZ2lkLCByZWd0eXBlLCByZWdpZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg ICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlm IChyZWd0eXBlID09ICJQIik6CisgICAgICAgIGlmIChyZWdpZCBpbiB7InQiLCAidSIsICJ2In0p OgorICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgJXMlc04gPSBoZXhfbmV3X3ByZWRfdmFs dWVbaW5zbi0+cmVnbm9bJWRdXTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJl Z2lkLCByZWdubykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lz dGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgi QmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKworZGVmIGdlbnB0cl9kZWNs X29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAo aXNfcGFpcihyZWdpZCkpOgorICAgICAgICBnZW5wdHJfZGVjbChmLCB0YWcsIHJlZ3R5cGUsIHJl Z2lkLCBpKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBpZiBpc19vbGRf dmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VucHRyX2RlY2woZix0YWcs IHJlZ3R5cGUsIHJlZ2lkLCBpKQorICAgICAgICBlbGlmIGlzX25ld192YWwocmVndHlwZSwgcmVn aWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZGVjbF9uZXcoZixyZWd0eXBlLHJlZ2lkLGkp CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJC YWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBn ZW5wdHJfZGVjbF9pbW0oZixpbW1sZXR0KToKKyAgICBpZiAoaW1tbGV0dC5pc3VwcGVyKCkpOgor ICAgICAgICBpID0gMQorICAgIGVsc2U6CisgICAgICAgIGkgPSAwCisgICAgZi53cml0ZSgiICAg IGludCAlcyA9IGluc24tPmltbWVkWyVkXTtcbiIgJSBcCisgICAgICAgIChpbW1fbmFtZShpbW1s ZXR0KSwgaSkpCisKK2RlZiBnZW5wdHJfZnJlZShmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAg IGlmIChyZWd0eXBlID09ICJSIik6CisgICAgICAgIGlmIChyZWdpZCBpbiB7ImRkIiwgInNzIiwg InR0IiwgInh4IiwgInl5In0pOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIHRjZ190ZW1wX2Zy ZWVfaTY0KCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICBlbGlmIChyZWdp ZCBpbiB7ImQiLCAiZSIsICJ4IiwgInkifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgdGNn X3RlbXBfZnJlZSglcyVzVik7XG4iICUgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxpZiAo cmVnaWQgbm90IGluIHsicyIsICJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIHByaW50KCJC YWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09 ICJQIik6CisgICAgICAgIGlmIChyZWdpZCBpbiB7ImQiLCAiZSIsICJ4In0pOgorICAgICAgICAg ICAgZi53cml0ZSgiICAgIHRjZ190ZW1wX2ZyZWUoJXMlc1YpO1xuIiAlIChyZWd0eXBlLCByZWdp ZCkpCisgICAgICAgIGVsaWYgKHJlZ2lkIG5vdCBpbiB7InMiLCAidCIsICJ1IiwgInYifSk6Cisg ICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQpCisg ICAgZWxpZiAocmVndHlwZSA9PSAiQyIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJkZCIsICJz cyJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICB0Y2dfdGVtcF9mcmVlX2k2NCglcyVzVik7 XG4iICUgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxpZiAocmVnaWQgaW4geyJkIiwgInMi fSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgdGNnX3RlbXBfZnJlZSglcyVzVik7XG4iICUg KHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQg cmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJN Iik6CisgICAgICAgIGlmIChyZWdpZCAhPSAidSIpOgorICAgICAgICAgICAgcHJpbnQoIkJhZCBy ZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxzZToKKyAgICAgICAgcHJp bnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisKK2RlZiBnZW5wdHJf ZnJlZV9uZXcoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBpZiAocmVndHlwZSA9PSAiTiIp OgorICAgICAgICBpZiAocmVnaWQgaW4geyJzIiwgInQifSk6CisgICAgICAgICAgICBmLndyaXRl KCIgICAgdGNnX3RlbXBfZnJlZSglcyVzTik7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0 eXBlLCByZWdpZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lz dGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJQIik6 CisgICAgICAgIGlmIChyZWdpZCBub3QgaW4geyJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAg IHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6 CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQor CitkZWYgZ2VucHRyX2ZyZWVfb3BuKGYscmVndHlwZSxyZWdpZCxpLHRhZyk6CisgICAgaWYgKGlz X3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VucHRyX2ZyZWUoZixyZWd0eXBlLHJlZ2lkLGkpCisg ICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlmIGlzX29sZF92YWwocmVndHlw ZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJlZShmLHJlZ3R5cGUscmVnaWQs aSkKKyAgICAgICAgZWxpZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAg ICAgICAgZ2VucHRyX2ZyZWVfbmV3KGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICBlbHNlOgor ICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNl OiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VucHRyX3NyY19yZWFkKGYs cmVndHlwZSxyZWdpZCk6CisgICAgaWYgKHJlZ3R5cGUgPT0gIlIiKToKKyAgICAgICAgaWYgKHJl Z2lkIGluIHsic3MiLCAidHQiLCAieHgiLCAieXkifSk6CisgICAgICAgICAgICBmLndyaXRlKCIg ICAgdGNnX2dlbl9jb25jYXRfaTMyX2k2NCglcyVzViwgaGV4X2dwclslcyVzTl0sXG4iICUgXAor ICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorICAgICAg ICAgICAgZi53cml0ZSgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2dwclsl cyVzTiArIDFdKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAg ICAgICAgZWxpZiAocmVnaWQgaW4geyJ4IiwgInkifSk6CisgICAgICAgICAgICBmLndyaXRlKCIg ICAgdGNnX2dlbl9tb3ZfdGwoJXMlc1YsIGhleF9ncHJbJXMlc05dKTtcbiIgJSBcCisgICAgICAg ICAgICAgICAgKHJlZ3R5cGUscmVnaWQscmVndHlwZSxyZWdpZCkpCisgICAgICAgIGVsaWYgKHJl Z2lkIG5vdCBpbiB7InMiLCAidCIsICJ1IiwgInYifSk6CisgICAgICAgICAgICBwcmludCgiQmFk IHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09 ICJQIik6CisgICAgICAgIGlmIChyZWdpZCA9PSAieCIpOgorICAgICAgICAgICAgZi53cml0ZSgi ICAgIHRjZ19nZW5fbW92X3RsKCVzJXNWLCBoZXhfcHJlZFslcyVzTl0pO1xuIiAlIFwKKyAgICAg ICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxp ZiAocmVnaWQgbm90IGluIHsicyIsICJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIHByaW50 KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYgKHJlZ3R5 cGUgPT0gIkMiKToKKyAgICAgICAgaWYgKHJlZ2lkID09ICJzcyIpOgorICAgICAgICAgICAgZi53 cml0ZSgiICAgIGlmICglcyVzTiArIEhFWF9SRUdfU0EwID09IEhFWF9SRUdfUDNfMCkge1xuIiAl IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCkpCisg ICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIFRDR3YgcDNfMCA9IHRjZ190ZW1wX25ldygpO1xu IikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgZ2VuX3JlYWRfcDNfMChwM18wKTtcbiIp CisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIHRjZ19nZW5fY29uY2F0X2kzMl9pNjQoJXMl c1YsIHAzXzAsXG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5 cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBoZXhfZ3ByWyVzJXNOICsgMV0pO1xuIiAlIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRl KCIgICAgICAgIHRjZ190ZW1wX2ZyZWUocDNfMCk7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgi ICAgIH0gZWxzZSB7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfZ2VuX2Nv bmNhdF9pMzJfaTY0KCVzJXNWLCBoZXhfZ3ByWyVzJXNOXSxcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAg ICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo ZXhfZ3ByWyVzJXNOICsgMV0pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChyZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgfVxuIikKKyAg ICAgICAgZWxpZiAocmVnaWQgPT0gInMiKToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBpZiAo JXMlc04gKyBIRVhfUkVHX1NBMCA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53 cml0ZSgiICAgICAgICBnZW5fcmVhZF9wM18wKCVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0 ZSgiICAgIH0gZWxzZSB7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfZ2Vu X21vdl90bCglcyVzViwgaGV4X2dwclslcyVzTiArIEhFWF9SRUdfU0EwXSk7XG4iICUgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBlLCBy ZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgfVxuIikKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQor ICAgIGVsaWYgKHJlZ3R5cGUgPT0gIk0iKToKKyAgICAgICAgaWYgKHJlZ2lkICE9ICJ1Iik6Cisg ICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkK KyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBl LCByZWdpZCkKKworZGVmIGdlbnB0cl9zcmNfcmVhZF9uZXcoZixyZWd0eXBlLHJlZ2lkKToKKyAg ICBpZiAocmVndHlwZSA9PSAiTiIpOgorICAgICAgICBpZiAocmVnaWQgbm90IGluIHsicyIsICJ0 In0pOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwg cmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVnaWQgbm90 IGluIHsidCIsICJ1IiwgInYifSk6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJl Z2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKworZGVmIGdlbnB0cl9zcmNfcmVhZF9v cG4oZixyZWd0eXBlLHJlZ2lkLHRhZyk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAg ICAgZ2VucHRyX3NyY19yZWFkKGYscmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChpc19zaW5nbGUo cmVnaWQpKToKKyAgICAgICAgaWYgaXNfb2xkX3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAg ICAgICAgICAgIGdlbnB0cl9zcmNfcmVhZChmLHJlZ3R5cGUscmVnaWQpCisgICAgICAgIGVsaWYg aXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGdlbnB0cl9zcmNf cmVhZF9uZXcoZixyZWd0eXBlLHJlZ2lkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJp bnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAg ICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVn aWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9jYWxsX29wbihmLCB0YWcsIHJlZ3R5 cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaSA+IDApOiBmLndyaXRlKCIs ICIpCisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZi53cml0ZSgiJXMlc1YiICUg KHJlZ3R5cGUscmVnaWQpKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBp ZiBpc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZi53cml0ZSgi JXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorICAgICAgICBlbGlmIGlzX25ld192YWwocmVndHlw ZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBmLndyaXRlKCIlcyVzTiIgJSAocmVndHlwZSxy ZWdpZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHBy aW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisK K2RlZiBnZW5faGVscGVyX2RlY2xfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgiICAgIFRD R3YgdGNndl8lcyA9IHRjZ19jb25zdF90bCglcyk7XG4iICUgXAorICAgICAgICAoaW1tX25hbWUo aW1tbGV0dCksIGltbV9uYW1lKGltbWxldHQpKSkKKworZGVmIGdlbl9oZWxwZXJfY2FsbF9pbW0o ZixpbW1sZXR0KToKKyAgICBmLndyaXRlKCIsIHRjZ3ZfJXMiICUgaW1tX25hbWUoaW1tbGV0dCkp CisKK2RlZiBnZW5faGVscGVyX2ZyZWVfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgiICAg IHRjZ190ZW1wX2ZyZWUodGNndl8lcyk7XG4iICUgaW1tX25hbWUoaW1tbGV0dCkpCisKK2RlZiBn ZW5wdHJfZHN0X3dyaXRlX3BhaXIoZiwgdGFnLCByZWd0eXBlLCByZWdpZCk6CisgICAgaWYgKCdB X0NPTkRFWEVDJyBpbiBhdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICBmLndyaXRlKCIgICAgZ2Vu X2xvZ19wcmVkaWNhdGVkX3JlZ193cml0ZV9wYWlyKCVzJXNOLCAlcyVzViwgaW5zbi0+c2xvdCk7 XG4iICUgXAorICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBlLCByZWdpZCkpCisg ICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIGdlbl9sb2dfcmVnX3dyaXRlX3BhaXIoJXMl c04sICVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUs IHJlZ2lkKSkKKyAgICBmLndyaXRlKCIgICAgY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCAlcyVzTik7 XG4iICUgXAorICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgIGYud3JpdGUoIiAgICBjdHhf bG9nX3JlZ193cml0ZShjdHgsICVzJXNOICsgMSk7XG4iICUgXAorICAgICAgICAocmVndHlwZSwg cmVnaWQpKQorCitkZWYgZ2VucHRyX2RzdF93cml0ZShmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkKToK KyAgICBpZiAocmVndHlwZSA9PSAiUiIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJkZCIsICJ4 eCIsICJ5eSJ9KToKKyAgICAgICAgICAgIGdlbnB0cl9kc3Rfd3JpdGVfcGFpcihmLCB0YWcsIHJl Z3R5cGUsIHJlZ2lkKQorICAgICAgICBlbGlmIChyZWdpZCBpbiB7ImQiLCAiZSIsICJ4IiwgInki fSk6CisgICAgICAgICAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGF0dHJpYmRpY3RbdGFnXSk6Cisg ICAgICAgICAgICAgICAgZi53cml0ZSgiICAgIGdlbl9sb2dfcHJlZGljYXRlZF9yZWdfd3JpdGUo JXMlc04sICVzJXNWLFxuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lk LCByZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5zbi0+c2xvdCk7XG4iKQorICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICBmLndyaXRlKCIgICAgZ2VuX2xvZ19yZWdfd3JpdGUoJXMlc04sICVz JXNWKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlw ZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgIGN0eF9sb2dfcmVnX3dyaXRlKGN0 eCwgJXMlc04pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAg ICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVn dHlwZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVn aWQgaW4geyJkIiwgImUiLCAieCJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBnZW5fbG9n X3ByZWRfd3JpdGUoJXMlc04sICVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5 cGUsIHJlZ2lkLCByZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgY3R4 X2xvZ19wcmVkX3dyaXRlKGN0eCwgJXMlc04pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVn dHlwZSwgcmVnaWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdp c3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiQyIp OgorICAgICAgICBpZiAocmVnaWQgPT0gImRkIik6CisgICAgICAgICAgICBmLndyaXRlKCIgICAg aWYgKCVzJXNOICsgSEVYX1JFR19TQTAgPT0gSEVYX1JFR19QM18wKSB7XG4iICUgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICAgICAgVENHdiB2YWwzMiA9IHRjZ190ZW1wX25ldygpO1xuIikKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICAgICAgdGNnX2dlbl9leHRybF9pNjRfaTMyKHZhbDMyLCAlcyVz Vik7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJl Z2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgZ2VuX3dyaXRlX3AzXzAodmFsMzIp O1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgdGNnX2dlbl9leHRyaF9pNjRfaTMy KHZhbDMyLCAlcyVzVik7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgZ2VuX2xvZ19y ZWdfd3JpdGUoJXMlc04gKyBIRVhfUkVHX1NBMCArIDEsIHZhbDMyKTtcbiIgJSBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAg Zi53cml0ZSgiICAgICAgICB0Y2dfdGVtcF9mcmVlKHZhbDMyKTtcbiIpCisgICAgICAgICAgICBm LndyaXRlKCIgICAgICAgIGN0eF9sb2dfcmVnX3dyaXRlKGN0eCwgJXMlc04gKyBIRVhfUkVHX1NB MCArIDEpO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd0eXBl LCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgfSBlbHNlIHtcbiIpCisgICAgICAg ICAgICBmLndyaXRlKCIgICAgICAgIGdlbl9sb2dfcmVnX3dyaXRlX3BhaXIoJXMlc04gKyBIRVhf UkVHX1NBMCwgJXMlc1YpO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgi ICAgICAgICBjdHhfbG9nX3JlZ193cml0ZShjdHgsICVzJXNOICsgSEVYX1JFR19TQTApO1xuIiAl IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCkpCisg ICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIGN0eF9sb2dfcmVnX3dyaXRlKGN0eCwgJXMlc04g KyBIRVhfUkVHX1NBMCArIDEpO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChyZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgfVxuIikKKyAg ICAgICAgZWxpZiAocmVnaWQgPT0gImQiKToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBpZiAo JXMlc04gKyBIRVhfUkVHX1NBMCA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53 cml0ZSgiICAgICAgICBnZW5fd3JpdGVfcDNfMCglcyVzVik7XG4iICUgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3Jp dGUoIiAgICB9IGVsc2Uge1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgZ2VuX2xv Z19yZWdfd3JpdGUoJXMlc04gKyBIRVhfUkVHX1NBMCwgJXMlc1YpO1xuIiAlIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVnaWQp KQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICBjdHhfbG9nX3JlZ193cml0ZShjdHgsICVz JXNOICsgSEVYX1JFR19TQTApO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChyZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgfVxuIikKKyAg ICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJl Z3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFy c2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorCitkZWYgZ2VucHRyX2RzdF93cml0ZV9vcG4oZixyZWd0 eXBlLCByZWdpZCwgdGFnKToKKyAgICBpZiAoaXNfcGFpcihyZWdpZCkpOgorICAgICAgICBnZW5w dHJfZHN0X3dyaXRlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQpCisgICAgZWxpZiAoaXNfc2luZ2xl KHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9kc3Rfd3JpdGUoZiwgdGFnLCByZWd0eXBlLCByZWdp ZCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5 cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCisjIworIyMgR2VuZXJhdGUgdGhlIFRDRyBjb2RlIHRv IGNhbGwgdGhlIGhlbHBlcgorIyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIsUnQzMiks IHsgUmRWPVJzVitSdFY7fQorIyMgICAgIFdlIHByb2R1Y2U6CisjIyAgICBzdGF0aWMgdm9pZCBn ZW5lcmF0ZV9BMl9hZGQoKQorIyMgICAgICAgICAgICAgICAgICAgIENQVUhleGFnb25TdGF0ZSAq ZW52CisjIyAgICAgICAgICAgICAgICAgICAgRGlzYXNDb250ZXh0ICpjdHgsCisjIyAgICAgICAg ICAgICAgICAgICAgaW5zbl90ICppbnNuLAorIyMgICAgICAgICAgICAgICAgICAgIHBhY2tldF90 ICpwa3QpCisjIyAgICAgICB7CisjIyAgICAgICAgICAgVENHdiBSZFYgPSB0Y2dfdGVtcF9sb2Nh bF9uZXcoKTsKKyMjICAgICAgICAgICBjb25zdCBpbnQgUmROID0gaW5zbi0+cmVnbm9bMF07Cisj IyAgICAgICAgICAgVENHdiBSc1YgPSBoZXhfZ3ByW2luc24tPnJlZ25vWzFdXTsKKyMjICAgICAg ICAgICBUQ0d2IFJ0ViA9IGhleF9ncHJbaW5zbi0+cmVnbm9bMl1dOworIyMgICAgICAgICAgIDxH RU4+CisjIyAgICAgICAgICAgZ2VuX2xvZ19yZWdfd3JpdGUoUmROLCBSZFYpOworIyMgICAgICAg ICAgIGN0eF9sb2dfcmVnX3dyaXRlKGN0eCwgUmROKTsKKyMjICAgICAgICAgICB0Y2dfdGVtcF9m cmVlKFJkVik7CisjIyAgICAgICB9CisjIworIyMgICAgICAgd2hlcmUgPEdFTj4gZGVwZW5kcyBv biBza2lwX3FlbXVfaGVscGVyKHRhZykKKyMjICAgICAgIGlmIHNraXBfcWVtdV9oZWxwZXIodGFn KSBpcyBUcnVlCisjIyAgICAgICA8R0VOPiAgaXMgZkdFTl9UQ0dfQTJfYWRkKHsgUmRWPVJzVitS dFY7fSk7CisjIyAgICAgICBpZiBza2lwX3FlbXVfaGVscGVyKHRhZykgaXMgRmFsc2UKKyMjICAg ICAgIDxHRU4+ICBpcyBnZW5faGVscGVyX0EyX2FkZChSZFYsIGNwdV9lbnYsIFJzViwgUnRWKTsK KyMjCitkZWYgZ2VuX3RjZ19mdW5jKGYsIHRhZywgcmVncywgaW1tcyk6CisgICAgZi53cml0ZSgi c3RhdGljIHZvaWQgZ2VuZXJhdGVfJXMoXG4iICV0YWcpCisgICAgZi53cml0ZSgiICAgICAgICAg ICAgICAgIENQVUhleGFnb25TdGF0ZSAqZW52LFxuIikKKyAgICBmLndyaXRlKCIgICAgICAgICAg ICAgICAgRGlzYXNDb250ZXh0ICpjdHgsXG4iKQorICAgIGYud3JpdGUoIiAgICAgICAgICAgICAg ICBpbnNuX3QgKmluc24sXG4iKQorICAgIGYud3JpdGUoIiAgICAgICAgICAgICAgICBwYWNrZXRf dCAqcGt0KVxuIikKKyAgICBmLndyaXRlKCd7XG4nKQorICAgIGlmIG5lZWRfZWEodGFnKTogZ2Vu X2RlY2xfZWFfdGNnKGYsIHRhZykKKyAgICBpPTAKKyAgICAjIyBEZWNsYXJlIGFsbCB0aGUgb3Bl cmFuZHMgKHJlZ3MgYW5kIGltbWVkaWF0ZXMpCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxu dW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGdlbnB0cl9kZWNsX29wbihmLCB0YWcsIHJlZ3R5cGUs IHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICBpICs9IDEKKyAgICBmb3IgaW1tbGV0 dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgIGdlbnB0cl9kZWNsX2ltbShmLGltbWxl dHQpCisKKyAgICBpZiAnQV9QUklWJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAgIGYud3Jp dGUoJyAgICBmQ0hFQ0tGT1JQUklWKCk7XG4nKQorICAgIGlmICdBX0dVRVNUJyBpbiBhdHRyaWJk aWN0W3RhZ106CisgICAgICAgIGYud3JpdGUoJyAgICBmQ0hFQ0tGT1JHVUVTVCgpO1xuJykKKyAg ICBpZiAnQV9GUE9QJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAgIGYud3JpdGUoJyAgICBm RlBPUF9TVEFSVCgpO1xuJyk7CisKKyAgICAjIyBSZWFkIGFsbCB0aGUgaW5wdXRzCisgICAgZm9y IHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChpc19yZWFk KHJlZ2lkKSk6CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWRfb3BuKGYscmVndHlwZSxyZWdp ZCx0YWcpCisKKyAgICBpZiAoIHNraXBfcWVtdV9oZWxwZXIodGFnKSApOgorICAgICAgICBmLndy aXRlKCIgICAgZkdFTl9UQ0dfJXMoJXMpO1xuIiAlICh0YWcsIHNlbWRpY3RbdGFnXSkpCisgICAg ZWxzZToKKyAgICAgICAgIyMgR2VuZXJhdGUgdGhlIGNhbGwgdG8gdGhlIGhlbHBlcgorICAgICAg ICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgICAgICBnZW5faGVs cGVyX2RlY2xfaW1tKGYsaW1tbGV0dCkKKyAgICAgICAgaWYgbmVlZF9wYXJ0MSh0YWcpOgorICAg ICAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgcGFydDEgPSB0Y2dfY29uc3RfdGwoaW5zbi0+cGFy dDEpO1xuIikKKyAgICAgICAgaWYgbmVlZF9zbG90KHRhZyk6CisgICAgICAgICAgICBmLndyaXRl KCIgICAgVENHdiBzbG90ID0gdGNnX2NvbnN0X3RsKGluc24tPnNsb3QpO1xuIikKKyAgICAgICAg Zi53cml0ZSgiICAgIGdlbl9oZWxwZXJfJXMoIiAlICh0YWcpKQorICAgICAgICBpPTAKKyAgICAg ICAgIyMgSWYgdGhlcmUgaXMgYSBzY2FsYXIgcmVzdWx0LCBpdCBpcyB0aGUgcmV0dXJuIHR5cGUK KyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAg ICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJf Y2FsbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAg ICAgICAgICAgICBpICs9IDEKKyAgICAgICAgaWYgKGkgPiAwKTogZi53cml0ZSgiLCAiKQorICAg ICAgICBmLndyaXRlKCJjcHVfZW52IikKKyAgICAgICAgaT0xCisgICAgICAgIGZvciByZWd0eXBl LHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGlzX3JlYWQocmVn aWQpKToKKyAgICAgICAgICAgICAgICBnZW5faGVscGVyX2NhbGxfb3BuKGYsIHRhZywgcmVndHlw ZSwgcmVnaWQsIHRvc3MsIG51bXJlZ3MsIGkpCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAg ICAgIGZvciBpbW1sZXR0LGJpdHMsaW1tc2hpZnQgaW4gaW1tczoKKyAgICAgICAgICAgIGdlbl9o ZWxwZXJfY2FsbF9pbW0oZixpbW1sZXR0KQorCisgICAgICAgIGlmIG5lZWRfc2xvdCh0YWcpOiBm LndyaXRlKCIsIHNsb3QiKQorICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6IGYud3JpdGUoIiwg cGFydDEiICkKKyAgICAgICAgZi53cml0ZSgiKTtcbiIpCisgICAgICAgIGlmIG5lZWRfc2xvdCh0 YWcpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIHRjZ190ZW1wX2ZyZWUoc2xvdCk7XG4iKQor ICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgdGNn X3RlbXBfZnJlZShwYXJ0MSk7XG4iKQorICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0 IGluIGltbXM6CisgICAgICAgICAgICBnZW5faGVscGVyX2ZyZWVfaW1tKGYsaW1tbGV0dCkKKwor ICAgICMjIFdyaXRlIGFsbCB0aGUgb3V0cHV0cworICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAg ICAgICAgZ2VucHRyX2RzdF93cml0ZV9vcG4oZixyZWd0eXBlLCByZWdpZCwgdGFnKQorCisgICAg aWYgJ0FfRlBPUCcgaW4gYXR0cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCcgICAgZkZQ T1BfRU5EKCk7XG4nKTsKKworCisgICAgIyMgRnJlZSBhbGwgdGhlIG9wZXJhbmRzIChyZWdzIGFu ZCBpbW1lZGlhdGVzKQorICAgIGlmIG5lZWRfZWEodGFnKTogZ2VuX2ZyZWVfZWFfdGNnKGYpCisg ICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGdlbnB0 cl9mcmVlX29wbihmLHJlZ3R5cGUscmVnaWQsaSx0YWcpCisgICAgICAgIGkgKz0gMQorCisgICAg Zi53cml0ZSgifVxuXG4iKQorCitkZWYgZ2VuX2RlZl90Y2dfZnVuYyhmLCB0YWcsIHRhZ3JlZ3Ms IHRhZ2ltbXMpOgorICAgIHJlZ3MgPSB0YWdyZWdzW3RhZ10KKyAgICBpbW1zID0gdGFnaW1tc1t0 YWddCisKKyAgICBnZW5fdGNnX2Z1bmMoZiwgdGFnLCByZWdzLCBpbW1zKQorCitkZWYgbWFpbigp OgorICAgIHJlYWRfc2VtYW50aWNzX2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgcmVhZF9hdHRyaWJz X2ZpbGUoc3lzLmFyZ3ZbMl0pCisgICAgcmVhZF9vdmVycmlkZXNfZmlsZShzeXMuYXJndlszXSkK KyAgICBjYWxjdWxhdGVfYXR0cmlicygpCisgICAgdGFncmVncyA9IGdldF90YWdyZWdzKCkKKyAg ICB0YWdpbW1zID0gZ2V0X3RhZ2ltbXMoKQorCisgICAgZiA9IFN0cmluZ0lPKCkKKworICAgIGYu d3JpdGUoIiNpZm5kZWYgSEVYQUdPTl9UQ0dfRlVOQ1NfSFxuIikKKyAgICBmLndyaXRlKCIjZGVm aW5lIEhFWEFHT05fVENHX0ZVTkNTX0hcblxuIikKKworICAgIGZvciB0YWcgaW4gdGFnczoKKyAg ICAgICAgIyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICAgICAgaWYgKCAiQV9QUklW IiBpbiBhdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAj IyBTa2lwIHRoZSBndWVzdCBpbnN0cnVjdGlvbnMKKyAgICAgICAgaWYgKCAiQV9HVUVTVCIgaW4g YXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyMgU2tp cCB0aGUgZGlhZyBpbnN0cnVjdGlvbnMKKyAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWciICkg OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiAp IDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnMSIg KSA6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGdlbl9kZWZfdGNnX2Z1bmMoZiwg dGFnLCB0YWdyZWdzLCB0YWdpbW1zKQorCisgICAgZi53cml0ZSgiI2VuZGlmICAgIC8qIEhFWEFH T05fVENHX0ZVTkNTX0ggKi9cbiIpCisKKyAgICByZWFsZiA9IG9wZW4oc3lzLmFyZ3ZbNF0sICd3 JykKKyAgICByZWFsZi53cml0ZShmLmdldHZhbHVlKCkpCisgICAgcmVhbGYuY2xvc2UoKQorICAg IGYuY2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vaGV4X2NvbW1vbi5weSBiL3RhcmdldC9oZXhhZ29uL2hl eF9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjZmOTYyNAot LS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hleF9jb21tb24ucHkKQEAgLTAsMCAr MSwyMTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykg MjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisK K2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBpbXBvcnQgU3Ry aW5nSU8KKworYmVoZGljdCA9IHt9ICAgICAgICAgICMgdGFnIC0+YmVoYXZpb3IKK3NlbWRpY3Qg PSB7fSAgICAgICAgICAjIHRhZyAtPiBzZW1hbnRpY3MKK2F0dHJpYmRpY3QgPSB7fSAgICAgICAj IHRhZyAtPiBhdHRyaWJ1dGVzCittYWNyb3MgPSB7fSAgICAgICAgICAgIyBtYWNybyAtPiBtYWNy byBpbmZvcm1hdGlvbi4uLgorYXR0cmliaW5mbyA9IHt9ICAgICAgICMgUmVnaXN0ZXIgaW5mb3Jt YXRpb24gYW5kIG1pc2MKK3RhZ3MgPSBbXSAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxsIHRhZ3MK K292ZXJyaWRlcyA9IHt9ICAgICAgICAjIHRhZ3Mgd2l0aCBoZWxwZXIgb3ZlcnJpZGVzCisKKyMg V2Ugc2hvdWxkIGRvIHRoaXMgYXMgYSBoYXNoIGZvciBwZXJmb3JtYW5jZSwKKyMgYnV0IHRvIGtl ZXAgb3JkZXIgbGV0J3Mga2VlcCBpdCBhcyBhIGxpc3QuCitkZWYgdW5pcXVpZnkoc2VxKToKKyAg ICBzZWVuID0gc2V0KCkKKyAgICBzZWVuX2FkZCA9IHNlZW4uYWRkCisgICAgcmV0dXJuIFt4IGZv ciB4IGluIHNlcSBpZiB4IG5vdCBpbiBzZWVuIGFuZCBub3Qgc2Vlbl9hZGQoeCldCisKK3JlZ3Jl ID0gcmUuY29tcGlsZSgKKyAgICByIigoPzwhRFVQKVtNTk9SQ1BRWFNHVlpBXSkoW3N0dXZ3eHl6 ZGVmZ10rKShbLl0/W0xsSGhdPykoXGQrUz8pIikKK2ltbXJlID0gcmUuY29tcGlsZShyIlsjXShb clJzU3VVbV0pKFxkKykoPzpbOl0oXGQrKSk/IikKK3JlZ19vcl9pbW1yZSA9IFwKKyAgICByZS5j b21waWxlKHIiKCgoPzwhRFVQKVtNTlJDT1BRWFNHVlpBXSkoW3N0dXZ3eHl6ZGVmZ10rKSIgKyBc CisgICAgICAgICAgICAgICAgIihbLl0/W0xsSGhdPykoXGQrUz8pKXwoWyNdKFtyUnNTdVVtXSko XGQrKVs6XT8oXGQrKT8pIikKK3JlbGltbXJlID0gcmUuY29tcGlsZShyIlsjXShbclJdKShcZCsp KD86WzpdKFxkKykpPyIpCithYnNpbW1yZSA9IHJlLmNvbXBpbGUociJbI10oW3NTdVVtXSkoXGQr KSg/Ols6XShcZCspKT8iKQorCitmaW5pc2hlZF9tYWNyb3MgPSBzZXQoKQorCitkZWYgZXhwYW5k X21hY3JvX2F0dHJpYnMobWFjcm8sYWxsbWFjX3JlKToKKyAgICBpZiBtYWNyby5rZXkgbm90IGlu IGZpbmlzaGVkX21hY3JvczoKKyAgICAgICAgIyBHZXQgYSBsaXN0IG9mIGFsbCB0aGluZ3MgdGhh dCBtaWdodCBiZSBtYWNyb3MKKyAgICAgICAgbCA9IGFsbG1hY19yZS5maW5kYWxsKG1hY3JvLmJl aCkKKyAgICAgICAgZm9yIHN1Ym1hY3JvIGluIGw6CisgICAgICAgICAgICBpZiBub3Qgc3VibWFj cm86IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgbWFjcm9zW3N1Ym1hY3JvXToKKyAgICAg ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkbid0IGZpbmQgbWFjcm86IDwlcz4iICUg bCkKKyAgICAgICAgICAgIG1hY3JvLmF0dHJpYnMgfD0gZXhwYW5kX21hY3JvX2F0dHJpYnMoCisg ICAgICAgICAgICAgICAgbWFjcm9zW3N1Ym1hY3JvXSwgYWxsbWFjX3JlKQorICAgICAgICAgICAg ZmluaXNoZWRfbWFjcm9zLmFkZChtYWNyby5rZXkpCisgICAgcmV0dXJuIG1hY3JvLmF0dHJpYnMK KworaW1tZXh0cmUgPSByZS5jb21waWxlKHInZihNVVNUXyk/SU1NRVhUWyhdKFtVdVNzUnJdKScp CitkZWYgY2FsY3VsYXRlX2F0dHJpYnMoKToKKyAgICAjIFJlY3Vyc2UgZG93biBtYWNyb3MsIGZp bmQgYXR0cmlidXRlcyBmcm9tIHN1Yi1tYWNyb3MKKyAgICBtYWNyb1ZhbHVlcyA9IGxpc3QobWFj cm9zLnZhbHVlcygpKQorICAgIGFsbG1hY3Jvc19yZXN0ciA9ICJ8Ii5qb2luKHNldChbIG0ucmUu cGF0dGVybiBmb3IgbSBpbiBtYWNyb1ZhbHVlcyBdKSkKKyAgICBhbGxtYWNyb3NfcmUgPSByZS5j b21waWxlKGFsbG1hY3Jvc19yZXN0cikKKyAgICBmb3IgbWFjcm8gaW4gbWFjcm9WYWx1ZXM6Cisg ICAgICAgIGV4cGFuZF9tYWNyb19hdHRyaWJzKG1hY3JvLGFsbG1hY3Jvc19yZSkKKyAgICAjIEFw cGVuZCBhdHRyaWJ1dGVzIHRvIGFsbCBpbnN0cnVjdGlvbnMKKyAgICBmb3IgdGFnIGluIHRhZ3M6 CisgICAgICAgIGZvciBtYWNuYW1lIGluIGFsbG1hY3Jvc19yZS5maW5kYWxsKHNlbWRpY3RbdGFn XSk6CisgICAgICAgICAgICBpZiBub3QgbWFjbmFtZTogY29udGludWUKKyAgICAgICAgICAgIG1h Y3JvID0gbWFjcm9zW21hY25hbWVdCisgICAgICAgICAgICBhdHRyaWJkaWN0W3RhZ10gfD0gc2V0 KG1hY3JvLmF0dHJpYnMpCisKK2RlZiBTRU1BTlRJQ1ModGFnLCBiZWgsIHNlbSk6CisgICAgI3By aW50IHRhZyxiZWgsc2VtCisgICAgYmVoZGljdFt0YWddID0gYmVoCisgICAgc2VtZGljdFt0YWdd ID0gc2VtCisgICAgYXR0cmliZGljdFt0YWddID0gc2V0KCkKKyAgICB0YWdzLmFwcGVuZCh0YWcp ICAgICAgICAjIGRpY3RzIGhhdmUgbm8gb3JkZXIsIHRoaXMgaXMgZm9yIG9yZGVyCisKK2RlZiBB VFRSSUJVVEVTKHRhZywgYXR0cmlic3RyaW5nKToKKyAgICBhdHRyaWJzdHJpbmcgPSBcCisgICAg ICAgIGF0dHJpYnN0cmluZy5yZXBsYWNlKCJBVFRSSUJTIiwiIikucmVwbGFjZSgiKCIsIiIpLnJl cGxhY2UoIikiLCIiKQorICAgIGlmIG5vdCBhdHRyaWJzdHJpbmc6CisgICAgICAgIHJldHVybgor ICAgIGF0dHJpYnMgPSBhdHRyaWJzdHJpbmcuc3BsaXQoIiwiKQorICAgIGZvciBhdHRyaWIgaW4g YXR0cmliczoKKyAgICAgICAgYXR0cmliZGljdFt0YWddLmFkZChhdHRyaWIuc3RyaXAoKSkKKwor Y2xhc3MgTWFjcm8ob2JqZWN0KToKKyAgICBfX3Nsb3RzX18gPSBbJ2tleScsJ25hbWUnLCAnYmVo JywgJ2F0dHJpYnMnLCAncmUnXQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiZWgsIGF0 dHJpYnMpOgorICAgICAgICBzZWxmLmtleSA9IG5hbWUKKyAgICAgICAgc2VsZi5uYW1lID0gbmFt ZQorICAgICAgICBzZWxmLmJlaCA9IGJlaAorICAgICAgICBzZWxmLmF0dHJpYnMgPSBzZXQoYXR0 cmlicykKKyAgICAgICAgc2VsZi5yZSA9IHJlLmNvbXBpbGUoIlxcYiIgKyBuYW1lICsgIlxcYiIp CisKK2RlZiBNQUNST0FUVFJJQihtYWNuYW1lLGJlaCxhdHRyaWJzdHJpbmcpOgorICAgIGF0dHJp YnN0cmluZyA9IGF0dHJpYnN0cmluZy5yZXBsYWNlKCIoIiwiIikucmVwbGFjZSgiKSIsIiIpCisg ICAgaWYgYXR0cmlic3RyaW5nOgorICAgICAgICBhdHRyaWJzID0gYXR0cmlic3RyaW5nLnNwbGl0 KCIsIikKKyAgICBlbHNlOgorICAgICAgICBhdHRyaWJzID0gW10KKyAgICBtYWNyb3NbbWFjbmFt ZV0gPSBNYWNybyhtYWNuYW1lLGJlaCxhdHRyaWJzKQorCitkZWYgY29tcHV0ZV90YWdfcmVncyh0 YWcpOgorICAgIHJldHVybiB1bmlxdWlmeShyZWdyZS5maW5kYWxsKGJlaGRpY3RbdGFnXSkpCisK K2RlZiBjb21wdXRlX3RhZ19pbW1lZGlhdGVzKHRhZyk6CisgICAgcmV0dXJuIHVuaXF1aWZ5KGlt bXJlLmZpbmRhbGwoYmVoZGljdFt0YWddKSkKKworIyMKKyMjICB0YWdyZWdzIGlzIHRoZSBtYWlu IGRhdGEgc3RydWN0dXJlIHdlJ2xsIHVzZQorIyMgIHRhZ3JlZ3NbdGFnXSB3aWxsIGNvbnRhaW4g dGhlIHJlZ2lzdGVycyB1c2VkIGJ5IGFuIGluc3RydWN0aW9uCisjIyAgV2l0aGluIGVhY2ggZW50 cnksIHdlJ2xsIHVzZSB0aGUgcmVndHlwZSBhbmQgcmVnaWQgZmllbGRzCisjIyAgICAgIHJlZ3R5 cGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisjIyAgICAgICAgICBDICAgICAgICAgICAg ICAgIGNvbnRyb2wgcmVnaXN0ZXIKKyMjICAgICAgICAgIE4gICAgICAgICAgICAgICAgbmV3IHJl Z2lzdGVyIHZhbHVlCisjIyAgICAgICAgICBQICAgICAgICAgICAgICAgIHByZWRpY2F0ZSByZWdp c3RlcgorIyMgICAgICAgICAgUiAgICAgICAgICAgICAgICBHUFIgcmVnaXN0ZXIKKyMjICAgICAg ICAgIE0gICAgICAgICAgICAgICAgbW9kaWZpZXIgcmVnaXN0ZXIKKyMjICAgICAgcmVnaWQgY2Fu IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisjIyAgICAgICAgICBkLCBlICAgICAgICAgICAgIGRl c3RpbmF0aW9uIHJlZ2lzdGVyCisjIyAgICAgICAgICBkZCAgICAgICAgICAgICAgIGRlc3RpbmF0 aW9uIHJlZ2lzdGVyIHBhaXIKKyMjICAgICAgICAgIHMsIHQsIHUsIHYsIHcgICAgc291cmNlIHJl Z2lzdGVyCisjIyAgICAgICAgICBzcywgdHQsIHV1LCB2diAgIHNvdXJjZSByZWdpc3RlciBwYWly CisjIyAgICAgICAgICB4LCB5ICAgICAgICAgICAgIHJlYWQtd3JpdGUgcmVnaXN0ZXIKKyMjICAg ICAgICAgIHh4LCB5eSAgICAgICAgICAgcmVhZC13cml0ZSByZWdpc3RlciBwYWlyCisjIworZGVm IGdldF90YWdyZWdzKCk6CisgICAgcmV0dXJuIGRpY3QoemlwKHRhZ3MsIGxpc3QobWFwKGNvbXB1 dGVfdGFnX3JlZ3MsIHRhZ3MpKSkpCisKK2RlZiBnZXRfdGFnaW1tcygpOgorICAgIHJldHVybiBk aWN0KHppcCh0YWdzLCBsaXN0KG1hcChjb21wdXRlX3RhZ19pbW1lZGlhdGVzLCB0YWdzKSkpKQor CitkZWYgaXNfcGFpcihyZWdpZCk6CisgICAgcmV0dXJuIGxlbihyZWdpZCkgPT0gMgorCitkZWYg aXNfc2luZ2xlKHJlZ2lkKToKKyAgICByZXR1cm4gbGVuKHJlZ2lkKSA9PSAxCisKK2RlZiBpc193 cml0dGVuKHJlZ2lkKToKKyAgICByZXR1cm4gcmVnaWRbMF0gaW4gImRleHkiCisKK2RlZiBpc193 cml0ZW9ubHkocmVnaWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAiZGUiCisKK2RlZiBpc19y ZWFkKHJlZ2lkKToKKyAgICByZXR1cm4gcmVnaWRbMF0gaW4gInN0dXZ3eHkiCisKK2RlZiBpc19y ZWFkd3JpdGUocmVnaWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAieHkiCisKK2RlZiBpc19z Y2FsYXJfcmVnKHJlZ3R5cGUpOgorICAgIHJldHVybiByZWd0eXBlIGluICJSUEMiCisKK2RlZiBp c19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgIHJldHVybiByZWd0eXBlK3JlZ2lk KydWJyBpbiBzZW1kaWN0W3RhZ10KKworZGVmIGlzX25ld192YWwocmVndHlwZSwgcmVnaWQsIHRh Zyk6CisgICAgcmV0dXJuIHJlZ3R5cGUrcmVnaWQrJ04nIGluIHNlbWRpY3RbdGFnXQorCitkZWYg bmVlZF9zbG90KHRhZyk6CisgICAgaWYgKCdBX0NPTkRFWEVDJyBpbiBhdHRyaWJkaWN0W3RhZ10g b3IKKyAgICAgICAgJ0FfU1RPUkUnIGluIGF0dHJpYmRpY3RbdGFnXSBvcgorICAgICAgICAnQV9M T0FEJyBpbiBhdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICByZXR1cm4gMQorICAgIGVsc2U6Cisg ICAgICAgIHJldHVybiAwCisKK2RlZiBuZWVkX3BhcnQxKHRhZyk6CisgICAgcmV0dXJuIHJlLmNv bXBpbGUociJmUEFSVDEiKS5zZWFyY2goc2VtZGljdFt0YWddKQorCitkZWYgbmVlZF9lYSh0YWcp OgorICAgIHJldHVybiByZS5jb21waWxlKHIiXGJFQVxiIikuc2VhcmNoKHNlbWRpY3RbdGFnXSkK KworZGVmIHNraXBfcWVtdV9oZWxwZXIodGFnKToKKyAgICByZXR1cm4gdGFnIGluIG92ZXJyaWRl cy5rZXlzKCkKKworZGVmIGltbV9uYW1lKGltbWxldHQpOgorICAgIHJldHVybiAiJXNpViIgJSBp bW1sZXR0CisKK2RlZiByZWFkX3NlbWFudGljc19maWxlKG5hbWUpOgorICAgIGV2YWxfbGluZSA9 ICIiCisgICAgZm9yIGxpbmUgaW4gb3BlbihuYW1lLCAncnQnKS5yZWFkbGluZXMoKToKKyAgICAg ICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgZXZhbF9saW5lICs9 IGxpbmUKKyAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoIlxcXG4iKToKKyAgICAgICAgICAg ICAgICBldmFsX2xpbmUucnN0cmlwKCJcXFxuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgZXZhbChldmFsX2xpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBldmFsX2xp bmUgPSAiIgorCitkZWYgcmVhZF9hdHRyaWJzX2ZpbGUobmFtZSk6CisgICAgYXR0cmlicmUgPSBy ZS5jb21waWxlKHInREVGX0FUVFJJQlwoKFtBLVphLXowLTlfXSspLCAoW14sXSopLCAnICsKKyAg ICAgICAgICAgIHInIihbQS1aYS16MC05X1wuXSopIiwgIihbQS1aYS16MC05X1wuXSopIlwpJykK KyAgICBmb3IgbGluZSBpbiBvcGVuKG5hbWUsICdydCcpLnJlYWRsaW5lcygpOgorICAgICAgICBp ZiBub3QgYXR0cmlicmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAg ICAoYXR0cmliX2Jhc2UsZGVzY3IscnJlZyx3cmVnKSA9IGF0dHJpYnJlLmZpbmRhbGwobGluZSlb MF0KKyAgICAgICAgYXR0cmliX2Jhc2UgPSAnQV8nICsgYXR0cmliX2Jhc2UKKyAgICAgICAgYXR0 cmliaW5mb1thdHRyaWJfYmFzZV0gPSB7J3JyZWcnOnJyZWcsICd3cmVnJzp3cmVnLCAnZGVzY3In OmRlc2NyfQorCitkZWYgcmVhZF9vdmVycmlkZXNfZmlsZShuYW1lKToKKyAgICBvdmVycmlkZXJl ID0gcmUuY29tcGlsZSgiI2RlZmluZSBmR0VOX1RDR18oW0EtWmEtejAtOV9dKylcKC4qIikKKyAg ICBmb3IgbGluZSBpbiBvcGVuKG5hbWUsICdydCcpLnJlYWRsaW5lcygpOgorICAgICAgICBpZiBu b3Qgb3ZlcnJpZGVyZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg IHRhZyA9IG92ZXJyaWRlcmUuZmluZGFsbChsaW5lKVswXQorICAgICAgICBvdmVycmlkZXNbdGFn XSA9IFRydWUKLS0gCjIuNy40Cgo=