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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 B62F2C433E6 for ; Wed, 20 Jan 2021 03:50:34 +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 EC6A422B42 for ; Wed, 20 Jan 2021 03:50:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EC6A422B42 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]:38852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l24Vs-0005jT-R0 for qemu-devel@archiver.kernel.org; Tue, 19 Jan 2021 22:50:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l24CE-0007xv-UY for qemu-devel@nongnu.org; Tue, 19 Jan 2021 22:30:18 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:9632) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l24C8-0007VI-Tu for qemu-devel@nongnu.org; Tue, 19 Jan 2021 22:30:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1611113408; x=1642649408; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=O7td99ivTBnsYnGC0OQNkyo6QuGX3SAjEdRfUZFf93U=; b=k5fBJtModfAayNOJKrgEw0wOLOeRljCFFfwbuG9y7BGJH+KSRtHGC74P eVl3K7UwGgntIKuPFQXeC8Adg02OA+udhGdj/zy8xXOmqVxk9OobbFkck /f8mEWset1FEupI1nAlC+8Xp69LZ2gLFWLk6R+5mhw56Sxs+Igv8BhSgP s=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 19 Jan 2021 19:29:27 -0800 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; 19 Jan 2021 19:29:26 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 97047295E; Tue, 19 Jan 2021 21:29:26 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v7 20/35] Hexagon (target/hexagon) generator phase 2 - generate header files Date: Tue, 19 Jan 2021 21:28:53 -0600 Message-Id: <1611113349-24906-21-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1611113349-24906-1-git-send-email-tsimpson@quicinc.com> References: <1611113349-24906-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-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.248, 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, bcain@quicinc.com, philmd@redhat.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, alex.bennee@linaro.org 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 aGVscGVyX2Z1bmNzLnB5ICAgfCAyMjAgKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9n ZW5faGVscGVyX3Byb3Rvcy5weSAgfCAxNTAgKysrKysrKysrKwogdGFyZ2V0L2hleGFnb24vZ2Vu X29wX2F0dHJpYnMucHkgICAgIHwgIDQwICsrKwogdGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3Mu cHkgICAgICAgIHwgMTExICsrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fb3Bjb2Rlc19kZWYu cHkgICAgfCAgMzcgKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5ICAgICAgfCAx NzQgKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5ICAgICAgfCAg NjMgKysrKysKIHRhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJsZS5weSB8ICA1OCArKysr CiB0YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNzLnB5ICAgICAgfCA1MzIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHRhcmdldC9oZXhhZ29uL2hleF9jb21tb24ucHkgICAg ICAgICB8IDIxNSArKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMTYwMCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9mdW5j cy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfcHJvdG9z LnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZ2VuX29wX2F0dHJpYnMucHkK IGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fb3BfcmVncy5weQogY3JlYXRl IG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9vcGNvZGVzX2RlZi5weQogY3JlYXRlIG1v ZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9wcmludGluc24ucHkKIGNyZWF0ZSBtb2RlIDEw MDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUg dGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jX3RhYmxlLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUg dGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdl dC9oZXhhZ29uL2hleF9jb21tb24ucHkKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5f aGVscGVyX2Z1bmNzLnB5IGIvdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9mdW5jcy5weQpuZXcg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjFjNWQ4Ci0tLSAvZGV2L251bGwKKysr IGIvdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9mdW5jcy5weQpAQCAtMCwwICsxLDIyMCBAQAor IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjEg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMj CisjIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyMjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyMjCisjIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5 cworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgaGV4X2NvbW1vbgorCisjIworIyMg SGVscGVycyBmb3IgZ2VuX2hlbHBlcl9mdW5jdGlvbgorIyMKK2RlZiBnZW5fZGVjbF9lYShmKToK KyAgICBmLndyaXRlKCIgICAgdWludDMyX3QgRUE7XG4iKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1 cm5fdHlwZShmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID4gMSA6IGYud3Jp dGUoIiwgIikKKyAgICBmLndyaXRlKCJpbnQzMl90IikKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJu X3R5cGVfcGFpcihmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID4gMSA6IGYu d3JpdGUoIiwgIikKKyAgICBmLndyaXRlKCJpbnQ2NF90IikKKworZGVmIGdlbl9oZWxwZXJfYXJn KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPiAwIDogZi53cml0ZSgiLCAi ICkKKyAgICBmLndyaXRlKCJpbnQzMl90ICVzJXNWIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVm IGdlbl9oZWxwZXJfYXJnX25ldyhmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25v ID49IDAgOiBmLndyaXRlKCIsICIgKQorICAgIGYud3JpdGUoImludDMyX3QgJXMlc04iICUgKHJl Z3R5cGUscmVnaWQpKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfcGFpcihmLHJlZ3R5cGUscmVnaWQs cmVnbm8pOgorICAgIGlmIHJlZ25vID49IDAgOiBmLndyaXRlKCIsICIpCisgICAgZi53cml0ZSgi aW50NjRfdCAlcyVzViIgJSAocmVndHlwZSxyZWdpZCkpCisKK2RlZiBnZW5faGVscGVyX2FyZ19v cG4oZixyZWd0eXBlLHJlZ2lkLGksdGFnKToKKyAgICBpZiAoaGV4X2NvbW1vbi5pc19wYWlyKHJl Z2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfYXJnX3BhaXIoZixyZWd0eXBlLHJlZ2lkLGkpCisg ICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaGV4X2Nv bW1vbi5pc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hl bHBlcl9hcmcoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgIGVsaWYgaGV4X2NvbW1vbi5pc19u ZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdf bmV3KGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQo IkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBl bHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQs dG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfaW1tKGYsaW1tbGV0dCk6CisgICAg Zi53cml0ZSgiLCBpbnQzMl90ICVzIiAlIChoZXhfY29tbW9uLmltbV9uYW1lKGltbWxldHQpKSkK KworZGVmIGdlbl9oZWxwZXJfZGVzdF9kZWNsKGYscmVndHlwZSxyZWdpZCxyZWdubyxzdWJmaWVs ZD0iIik6CisgICAgZi53cml0ZSgiICAgIGludDMyX3QgJXMlc1YlcyA9IDA7XG4iICUgXAorICAg ICAgICAocmVndHlwZSxyZWdpZCxzdWJmaWVsZCkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVj bF9wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyxzdWJmaWVsZD0iIik6CisgICAgZi53cml0ZSgi ICAgIGludDY0X3QgJXMlc1YlcyA9IDA7XG4iICUgXAorICAgICAgICAocmVndHlwZSxyZWdpZCxz dWJmaWVsZCkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVjbF9vcG4oZixyZWd0eXBlLHJlZ2lk LGkpOgorICAgIGlmIChoZXhfY29tbW9uLmlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VuX2hl bHBlcl9kZXN0X2RlY2xfcGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChoZXhfY29t bW9uLmlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBnZW5faGVscGVyX2Rlc3RfZGVjbChmLHJl Z3R5cGUscmVnaWQsaSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1 cm4oZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCIgICAgcmV0dXJuICVzJXNW O1xuIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuX3BhaXIoZixy ZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndyaXRlKCIgICAgcmV0dXJuICVzJXNWO1xuIiAl IChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuX29wbihmLCByZWd0eXBl LCByZWdpZCwgaSk6CisgICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgorICAgICAg ICBnZW5faGVscGVyX3JldHVybl9wYWlyKGYscmVndHlwZSxyZWdpZCxpKQorICAgIGVsaWYgKGhl eF9jb21tb24uaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJuKGYs cmVndHlwZSxyZWdpZCxpKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIg cGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKKyMjCisjIyBHZW5lcmF0ZSB0 aGUgVENHIGNvZGUgdG8gY2FsbCB0aGUgaGVscGVyCisjIyAgICAgRm9yIEEyX2FkZDogUmQzMj1h ZGQoUnMzMixSdDMyKSwgeyBSZFY9UnNWK1J0Vjt9CisjIyAgICAgV2UgcHJvZHVjZToKKyMjICAg ICAgIGludDMyX3QgSEVMUEVSKEEyX2FkZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDMyX3Qg UnNWLCBpbnQzMl90IFJ0VikKKyMjICAgICAgIHsKKyMjICAgICAgICAgICB1aW50MzJfdCBzbG90 IF9fYXR0cmlidXRlX18odW51c2VkKSkgPSA0OworIyMgICAgICAgICAgIGludDMyX3QgUmRWID0g MDsKKyMjICAgICAgICAgICB7IFJkVj1Sc1YrUnRWO30KKyMjICAgICAgICAgICBDT1VOVF9IRUxQ RVIoQTJfYWRkKTsKKyMjICAgICAgICAgICByZXR1cm4gUmRWOworIyMgICAgICAgfQorIyMKK2Rl ZiBnZW5faGVscGVyX2Z1bmN0aW9uKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6CisgICAgcmVn cyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIG51bXJlc3Vs dHMgPSAwCisgICAgbnVtc2NhbGFycmVzdWx0cyA9IDAKKyAgICBudW1zY2FsYXJyZWFkd3JpdGUg PSAwCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAg IGlmIChoZXhfY29tbW9uLmlzX3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIG51bXJlc3Vs dHMgKz0gMQorICAgICAgICAgICAgaWYgKGhleF9jb21tb24uaXNfc2NhbGFyX3JlZyhyZWd0eXBl KSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVzdWx0cyArPSAxCisgICAgICAgIGlmICho ZXhfY29tbW9uLmlzX3JlYWR3cml0ZShyZWdpZCkpOgorICAgICAgICAgICAgaWYgKGhleF9jb21t b24uaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVh ZHdyaXRlICs9IDEKKworICAgIGlmIChudW1zY2FsYXJyZXN1bHRzID4gMSk6CisgICAgICAgICMj IFRoZSBoZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlc3VsdAor ICAgICAgICBmLndyaXRlKCJ2b2lkIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICplbnYpIHsg Qk9HVVNfSEVMUEVSKCVzKTsgfVxuIgorICAgICAgICAgICAgICAgICUgKHRhZywgdGFnKSkKKyAg ICBlbHNlOgorICAgICAgICAjIyBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGlzIHRo ZSB0eXBlIG9mIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICAjIyByZWdpc3RlcgorICAgICAgICBp PTAKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAg ICAgICAgICBpZiAoaGV4X2NvbW1vbi5pc193cml0dGVuKHJlZ2lkKSk6CisgICAgICAgICAgICAg ICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgorICAgICAgICAgICAgICAgICAgICBn ZW5faGVscGVyX3JldHVybl90eXBlX3BhaXIoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgICAg ICAgICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgICAgICAg ICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fdHlwZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAg ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgICAgICAgICAgaSArPSAxCisK KyAgICAgICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPT0gMCk6CisgICAgICAgICAgICBmLndyaXRl KCJ2b2lkIikKKyAgICAgICAgZi53cml0ZSgiIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICpl bnYiICUgdGFnKQorCisgICAgICAgIGkgPSAxCisKKyAgICAgICAgIyMgQXJndW1lbnRzIHRvIHRo ZSBoZWxwZXIgZnVuY3Rpb24gYXJlIHRoZSBzb3VyY2UgcmVncyBhbmQgaW1tZWRpYXRlcworICAg ICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAg IGlmIChoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5faGVs cGVyX2FyZ19vcG4oZixyZWd0eXBlLHJlZ2lkLGksdGFnKQorICAgICAgICAgICAgICAgIGkgKz0g MQorICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgICAg ICBnZW5faGVscGVyX2FyZ19pbW0oZixpbW1sZXR0KQorICAgICAgICAgICAgaSArPSAxCisgICAg ICAgIGlmIGhleF9jb21tb24ubmVlZF9zbG90KHRhZyk6CisgICAgICAgICAgICBpZiBpID4gMDog Zi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZi53cml0ZSgidWludDMyX3Qgc2xvdCIpCisgICAg ICAgICAgICBpICs9IDEKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3BhcnQxKHRhZyk6Cisg ICAgICAgICAgICBpZiBpID4gMDogZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZi53cml0ZSgi dWludDMyX3QgcGFydDEiKQorICAgICAgICBmLndyaXRlKCIpXG57XG4iKQorICAgICAgICBpZiAo bm90IGhleF9jb21tb24ubmVlZF9zbG90KHRhZykpOgorICAgICAgICAgICAgZi53cml0ZSgiICAg IHVpbnQzMl90IHNsb3QgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSA0O1xuIiApCisgICAgICAg IGlmIGhleF9jb21tb24ubmVlZF9lYSh0YWcpOiBnZW5fZGVjbF9lYShmKQorICAgICAgICAjIyBE ZWNsYXJlIHRoZSByZXR1cm4gdmFyaWFibGUKKyAgICAgICAgaT0wCisgICAgICAgIGZvciByZWd0 eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21t b24uaXNfd3JpdGVvbmx5KHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9kZXN0 X2RlY2xfb3BuKGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAg ICAgaWYgJ0FfRlBPUCcgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAg ICBmLndyaXRlKCcgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7XG4nKTsKKworICAgICAgICBmLndy aXRlKCIgICAgJXNcbiIgJSBoZXhfY29tbW9uLnNlbWRpY3RbdGFnXSkKKworICAgICAgICBpZiAn QV9GUE9QJyBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXToKKyAgICAgICAgICAgIGYud3Jp dGUoJyAgICBhcmNoX2Zwb3BfZW5kKGVudik7XG4nKTsKKworICAgICAgICAjIyBTYXZlL3JldHVy biB0aGUgcmV0dXJuIHZhcmlhYmxlCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVt cmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21tb24uaXNfd3JpdHRlbihyZWdp ZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJuX29wbihmLCByZWd0eXBlLCBy ZWdpZCwgaSkKKyAgICAgICAgZi53cml0ZSgifVxuXG4iKQorICAgICAgICAjIyBFbmQgb2YgdGhl IGhlbHBlciBkZWZpbml0aW9uCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2NvbW1vbi5yZWFkX3Nl bWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVhZF9hdHRyaWJzX2Zp bGUoc3lzLmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5yZWFkX292ZXJyaWRlc19maWxlKHN5cy5h cmd2WzNdKQorICAgIGhleF9jb21tb24uY2FsY3VsYXRlX2F0dHJpYnMoKQorICAgIHRhZ3JlZ3Mg PSBoZXhfY29tbW9uLmdldF90YWdyZWdzKCkKKyAgICB0YWdpbW1zID0gaGV4X2NvbW1vbi5nZXRf dGFnaW1tcygpCisKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbNF0sICd3JykgYXMgZjoKKyAgICAg ICAgZm9yIHRhZyBpbiBoZXhfY29tbW9uLnRhZ3M6CisgICAgICAgICAgICAjIyBTa2lwIHRoZSBw cml2IGluc3RydWN0aW9ucworICAgICAgICAgICAgaWYgKCAiQV9QUklWIiBpbiBoZXhfY29tbW9u LmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg ICAgIyMgU2tpcCB0aGUgZ3Vlc3QgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICBpZiAoICJBX0dV RVNUIiBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgICAgICBj b250aW51ZQorICAgICAgICAgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0cnVjdGlvbnMKKyAgICAg ICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiApIDoKKyAgICAgICAgICAgICAg ICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcxIiApIDoKKyAgICAg ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCBoZXhfY29tbW9uLnNraXBfcWVt dV9oZWxwZXIodGFnKSApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg IGdlbl9oZWxwZXJfZnVuY3Rpb24oZiwgdGFnLCB0YWdyZWdzLCB0YWdpbW1zKQorCitpZiBfX25h bWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZ2VuX2hlbHBlcl9wcm90b3MucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5faGVscGVyX3Byb3Rv cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYTQxMDA3Ci0tLSAvZGV2 L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9wcm90b3MucHkKQEAgLTAsMCAr MSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykg MjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisK K2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGhleF9jb21tb24K KworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl9oZWxwZXJfcHJvdG90eXBlCisjIworZGVmX2hlbHBl cl90eXBlcyA9IHsKKyAgICAnTicgOiAnczMyJywKKyAgICAnTycgOiAnczMyJywKKyAgICAnUCcg OiAnczMyJywKKyAgICAnTScgOiAnczMyJywKKyAgICAnQycgOiAnczMyJywKKyAgICAnUicgOiAn czMyJywKKyAgICAnVicgOiAncHRyJywKKyAgICAnUScgOiAncHRyJworfQorCitkZWZfaGVscGVy X3R5cGVzX3BhaXIgPSB7CisgICAgJ1InIDogJ3M2NCcsCisgICAgJ0MnIDogJ3M2NCcsCisgICAg J1MnIDogJ3M2NCcsCisgICAgJ0cnIDogJ3M2NCcsCisgICAgJ1YnIDogJ3B0cicsCisgICAgJ1En IDogJ3B0cicKK30KKworZGVmIGdlbl9kZWZfaGVscGVyX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJl Z2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaGV4X2NvbW1vbi5pc19wYWlyKHJlZ2lk KSk6CisgICAgICAgIGYud3JpdGUoIiwgJXMiICUgKGRlZl9oZWxwZXJfdHlwZXNfcGFpcltyZWd0 eXBlXSkpCisgICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAg Zi53cml0ZSgiLCAlcyIgJSAoZGVmX2hlbHBlcl90eXBlc1tyZWd0eXBlXSkpCisgICAgZWxzZToK KyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncykKKworIyMKKyMjIEdlbmVyYXRlIHRoZSBERUZfSEVMUEVSIHByb3RvdHlwZSBmb3Ig YW4gaW5zdHJ1Y3Rpb24KKyMjICAgICBGb3IgQTJfYWRkOiBSZDMyPWFkZChSczMyLFJ0MzIpCisj IyAgICAgV2UgcHJvZHVjZToKKyMjICAgICAgICAgREVGX0hFTFBFUl8zKEEyX2FkZCwgczMyLCBl bnYsIHMzMiwgczMyKQorIyMKK2RlZiBnZW5faGVscGVyX3Byb3RvdHlwZShmLCB0YWcsIHRhZ3Jl Z3MsIHRhZ2ltbXMpOgorICAgIHJlZ3MgPSB0YWdyZWdzW3RhZ10KKyAgICBpbW1zID0gdGFnaW1t c1t0YWddCisKKyAgICBudW1yZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlc3VsdHMgPSAwCisg ICAgbnVtc2NhbGFycmVhZHdyaXRlID0gMAorICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVt cmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaGV4X2NvbW1vbi5pc193cml0dGVuKHJlZ2lkKSk6 CisgICAgICAgICAgICBudW1yZXN1bHRzICs9IDEKKyAgICAgICAgICAgIGlmIChoZXhfY29tbW9u LmlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxhcnJlc3Vs dHMgKz0gMQorICAgICAgICBpZiAoaGV4X2NvbW1vbi5pc19yZWFkd3JpdGUocmVnaWQpKToKKyAg ICAgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAg ICAgICAgICAgIG51bXNjYWxhcnJlYWR3cml0ZSArPSAxCisKKyAgICBpZiAobnVtc2NhbGFycmVz dWx0cyA+IDEpOgorICAgICAgICAjIyBUaGUgaGVscGVyIGlzIGJvZ3VzIHdoZW4gdGhlcmUgaXMg bW9yZSB0aGFuIG9uZSByZXN1bHQKKyAgICAgICAgZi53cml0ZSgnREVGX0hFTFBFUl8xKCVzLCB2 b2lkLCBlbnYpXG4nICUgdGFnKQorICAgIGVsc2U6CisgICAgICAgICMjIEZpZ3VyZSBvdXQgaG93 IG1hbnkgYXJndW1lbnRzIHRoZSBoZWxwZXIgd2lsbCB0YWtlCisgICAgICAgIGlmIChudW1zY2Fs YXJyZXN1bHRzID09IDApOgorICAgICAgICAgICAgZGVmX2hlbHBlcl9zaXplID0gbGVuKHJlZ3Mp K2xlbihpbW1zKStudW1zY2FsYXJyZWFkd3JpdGUrMQorICAgICAgICAgICAgaWYgaGV4X2NvbW1v bi5uZWVkX3BhcnQxKHRhZyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAxCisgICAgICAgICAgICBpZiBo ZXhfY29tbW9uLm5lZWRfc2xvdCh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQorICAgICAgICAg ICAgZi53cml0ZSgnREVGX0hFTFBFUl8lcyglcycgJSAoZGVmX2hlbHBlcl9zaXplLCB0YWcpKQor ICAgICAgICAgICAgIyMgVGhlIHJldHVybiB0eXBlIGlzIHZvaWQKKyAgICAgICAgICAgIGYud3Jp dGUoJywgdm9pZCcgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmX2hlbHBlcl9zaXpl ID0gbGVuKHJlZ3MpK2xlbihpbW1zKStudW1zY2FsYXJyZWFkd3JpdGUKKyAgICAgICAgICAgIGlm IGhleF9jb21tb24ubmVlZF9wYXJ0MSh0YWcpOiBkZWZfaGVscGVyX3NpemUgKz0gMQorICAgICAg ICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3Nsb3QodGFnKTogZGVmX2hlbHBlcl9zaXplICs9IDEK KyAgICAgICAgICAgIGYud3JpdGUoJ0RFRl9IRUxQRVJfJXMoJXMnICUgKGRlZl9oZWxwZXJfc2l6 ZSwgdGFnKSkKKworICAgICAgICAjIyBHZW5lcmF0ZSB0aGUgcWVtdSBERUZfSEVMUEVSIHR5cGUg Zm9yIGVhY2ggcmVzdWx0CisgICAgICAgIGk9MAorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0 b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3dyaXR0 ZW4ocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5fZGVmX2hlbHBlcl9vcG4oZiwgdGFnLCBy ZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEK KworICAgICAgICAjIyBQdXQgdGhlIGVudiBiZXR3ZWVuIHRoZSBvdXRwdXRzIGFuZCBpbnB1dHMK KyAgICAgICAgZi53cml0ZSgnLCBlbnYnICkKKyAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyMg R2VuZXJhdGUgdGhlIHFlbXUgdHlwZSBmb3IgZWFjaCBpbnB1dCBvcGVyYW5kIChyZWdzIGFuZCBp bW1lZGlhdGVzKQorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVn czoKKyAgICAgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQpKToKKyAgICAgICAg ICAgICAgICBnZW5fZGVmX2hlbHBlcl9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywg bnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZm9yIGltbWxldHQs Yml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICAgICAgZi53cml0ZSgiLCBzMzIiKQorCisg ICAgICAgICMjIEFkZCB0aGUgYXJndW1lbnRzIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc2xvdCBhbmQg cGFydDEgKGlmIG5lZWRlZCkKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3Nsb3QodGFnKTog Zi53cml0ZSgnLCBpMzInICkKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVkX3BhcnQxKHRhZyk6 IGYud3JpdGUoJyAsIGkzMicgKQorICAgICAgICBmLndyaXRlKCcpXG4nKQorCitkZWYgbWFpbigp OgorICAgIGhleF9jb21tb24ucmVhZF9zZW1hbnRpY3NfZmlsZShzeXMuYXJndlsxXSkKKyAgICBo ZXhfY29tbW9uLnJlYWRfYXR0cmlic19maWxlKHN5cy5hcmd2WzJdKQorICAgIGhleF9jb21tb24u cmVhZF9vdmVycmlkZXNfZmlsZShzeXMuYXJndlszXSkKKyAgICBoZXhfY29tbW9uLmNhbGN1bGF0 ZV9hdHRyaWJzKCkKKyAgICB0YWdyZWdzID0gaGV4X2NvbW1vbi5nZXRfdGFncmVncygpCisgICAg dGFnaW1tcyA9IGhleF9jb21tb24uZ2V0X3RhZ2ltbXMoKQorCisgICAgd2l0aCBvcGVuKHN5cy5h cmd2WzRdLCAndycpIGFzIGY6CisgICAgICAgIGZvciB0YWcgaW4gaGV4X2NvbW1vbi50YWdzOgor ICAgICAgICAgICAgIyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgIGlm ICggIkFfUFJJViIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgICAgICMjIFNraXAgdGhlIGd1ZXN0IGluc3RydWN0aW9u cworICAgICAgICAgICAgaWYgKCAiQV9HVUVTVCIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3Rh Z10gKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMjIFNraXAgdGhl IGRpYWcgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6 CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9k aWFnMCIgKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFn ID09ICJZNl9kaWFnMSIgKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg ICAgaWYgKCBoZXhfY29tbW9uLnNraXBfcWVtdV9oZWxwZXIodGFnKSApOgorICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGdlbl9oZWxwZXJfcHJvdG90eXBlKGYsIHRhZywg dGFncmVncywgdGFnaW1tcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWlu KCkKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9hdHRyaWJzLnB5IGIvdGFyZ2V0 L2hleGFnb24vZ2VuX29wX2F0dHJpYnMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uYTJkNTc5OAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9h dHRyaWJzLnB5CkBAIC0wLDAgKzEsNDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMK KyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZwor aW1wb3J0IGhleF9jb21tb24KKworZGVmIG1haW4oKToKKyAgICBoZXhfY29tbW9uLnJlYWRfc2Vt YW50aWNzX2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgaGV4X2NvbW1vbi5yZWFkX2F0dHJpYnNfZmls ZShzeXMuYXJndlsyXSkKKyAgICBoZXhfY29tbW9uLmNhbGN1bGF0ZV9hdHRyaWJzKCkKKworICAg ICMjCisgICAgIyMgR2VuZXJhdGUgdGhlIG9wX2F0dHJpYnNfZ2VuZXJhdGVkLmggZmlsZQorICAg ICMjICAgICBMaXN0cyBhbGwgdGhlIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggaW5z dHJ1Y3Rpb24KKyAgICAjIworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgor ICAgICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgIGYud3JpdGUo J09QX0FUVFJJQiglcyxBVFRSSUJTKCVzKSlcbicgJSBcCisgICAgICAgICAgICAgICAgKHRhZywg JywnLmpvaW4oc29ydGVkKGhleF9jb21tb24uYXR0cmliZGljdFt0YWddKSkpKQorCitpZiBfX25h bWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vZ2VuX29wX3JlZ3MucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5fb3BfcmVncy5weQpuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjI0Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIv dGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3MucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9i aW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21t IElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj IworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9y dCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGhleF9jb21tb24KKworIyMKKyMjIEdlbmVyYXRl IHRoZSBvcF9yZWdzX2dlbmVyYXRlZC5oIGZpbGUKKyMjICAgICBMaXN0cyB0aGUgcmVnaXN0ZXIg YW5kIGltbWVkaWF0ZSBvcGVyYW5kcyBmb3IgZWFjaCBpbnN0cnVjdGlvbgorIyMKK2RlZiBjYWxj dWxhdGVfcmVnaWRfcmVnKHRhZyk6CisgICAgZGVmIGxldHRlcl9pbmMoeCk6IHJldHVybiBjaHIo b3JkKHgpKzEpCisgICAgb3JkZXJlZF9pbXBscmVncyA9IFsgJ1NQJywnRlAnLCdMUicgXQorICAg IHNyY2RzdF9sZXR0ID0gJ1gnCisgICAgc3JjX2xldHQgPSAnUycKKyAgICBkc3RfbGV0dCA9ICdE JworICAgIHJldHN0ciA9ICIiCisgICAgbWFwZGljdCA9IHt9CisgICAgZm9yIHJlZyBpbiBvcmRl cmVkX2ltcGxyZWdzOgorICAgICAgICByZWdfcmQgPSAwCisgICAgICAgIHJlZ193ciA9IDAKKyAg ICAgICAgaWYgKCdBX0lNUExJQ0lUX1dSSVRFU18nK3JlZykgaW4gaGV4X2NvbW1vbi5hdHRyaWJk aWN0W3RhZ106IHJlZ193ciA9IDEKKyAgICAgICAgaWYgcmVnX3JkIGFuZCByZWdfd3I6CisgICAg ICAgICAgICByZXRzdHIgKz0gc3JjZHN0X2xldHQKKyAgICAgICAgICAgIG1hcGRpY3Rbc3JjZHN0 X2xldHRdID0gcmVnCisgICAgICAgICAgICBzcmNkc3RfbGV0dCA9IGxldHRlcl9pbmMoc3JjZHN0 X2xldHQpCisgICAgICAgIGVsaWYgcmVnX3JkOgorICAgICAgICAgICAgcmV0c3RyICs9IHNyY19s ZXR0CisgICAgICAgICAgICBtYXBkaWN0W3NyY19sZXR0XSA9IHJlZworICAgICAgICAgICAgc3Jj X2xldHQgPSBsZXR0ZXJfaW5jKHNyY19sZXR0KQorICAgICAgICBlbGlmIHJlZ193cjoKKyAgICAg ICAgICAgIHJldHN0ciArPSBkc3RfbGV0dAorICAgICAgICAgICAgbWFwZGljdFtkc3RfbGV0dF0g PSByZWcKKyAgICAgICAgICAgIGRzdF9sZXR0ID0gbGV0dGVyX2luYyhkc3RfbGV0dCkKKyAgICBy ZXR1cm4gcmV0c3RyLG1hcGRpY3QKKworZGVmIGNhbGN1bGF0ZV9yZWdpZF9sZXR0ZXJzKHRhZyk6 CisgICAgcmV0c3RyLG1hcGRpY3QgPSBjYWxjdWxhdGVfcmVnaWRfcmVnKHRhZykKKyAgICByZXR1 cm4gcmV0c3RyCisKK2RlZiBzdHJpcF9yZWdfcHJlZml4KHgpOgorICAgIHk9eC5yZXBsYWNlKCdV UkVHLicsJycpCisgICAgeT15LnJlcGxhY2UoJ01SRUcuJywnJykKKyAgICByZXR1cm4geS5yZXBs YWNlKCdHUkVHLicsJycpCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2NvbW1vbi5yZWFkX3NlbWFu dGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVhZF9hdHRyaWJzX2ZpbGUo c3lzLmFyZ3ZbMl0pCisgICAgdGFncmVncyA9IGhleF9jb21tb24uZ2V0X3RhZ3JlZ3MoKQorICAg IHRhZ2ltbXMgPSBoZXhfY29tbW9uLmdldF90YWdpbW1zKCkKKworICAgIHdpdGggb3BlbihzeXMu YXJndlszXSwgJ3cnKSBhcyBmOgorICAgICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoK KyAgICAgICAgICAgIHJlZ3MgPSB0YWdyZWdzW3RhZ10KKyAgICAgICAgICAgIHJyZWdzID0gW10K KyAgICAgICAgICAgIHdyZWdzID0gW10KKyAgICAgICAgICAgIHJlZ2lkcyA9ICIiCisgICAgICAg ICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAg ICAgICBpZiBoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQpOgorICAgICAgICAgICAgICAgICAgICBp ZiByZWdpZFswXSBub3QgaW4gcmVnaWRzOiByZWdpZHMgKz0gcmVnaWRbMF0KKyAgICAgICAgICAg ICAgICAgICAgcnJlZ3MuYXBwZW5kKHJlZ3R5cGUrcmVnaWQrbnVtcmVncykKKyAgICAgICAgICAg ICAgICBpZiBoZXhfY29tbW9uLmlzX3dyaXR0ZW4ocmVnaWQpOgorICAgICAgICAgICAgICAgICAg ICB3cmVncy5hcHBlbmQocmVndHlwZStyZWdpZCtudW1yZWdzKQorICAgICAgICAgICAgICAgICAg ICBpZiByZWdpZFswXSBub3QgaW4gcmVnaWRzOiByZWdpZHMgKz0gcmVnaWRbMF0KKyAgICAgICAg ICAgIGZvciBhdHRyaWIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAg ICAgICAgaWYgaGV4X2NvbW1vbi5hdHRyaWJpbmZvW2F0dHJpYl1bJ3JyZWcnXToKKyAgICAgICAg ICAgICAgICAgICAgcnJlZ3MuYXBwZW5kKHN0cmlwX3JlZ19wcmVmaXgoYXR0cmliaW5mb1thdHRy aWJdWydycmVnJ10pKQorICAgICAgICAgICAgICAgIGlmIGhleF9jb21tb24uYXR0cmliaW5mb1th dHRyaWJdWyd3cmVnJ106CisgICAgICAgICAgICAgICAgICAgIHdyZWdzLmFwcGVuZChzdHJpcF9y ZWdfcHJlZml4KGF0dHJpYmluZm9bYXR0cmliXVsnd3JlZyddKSkKKyAgICAgICAgICAgIHJlZ2lk cyArPSBjYWxjdWxhdGVfcmVnaWRfbGV0dGVycyh0YWcpCisgICAgICAgICAgICBmLndyaXRlKCdS RUdJTkZPKCVzLCIlcyIsXHQvKlJEOiovXHQiJXMiLFx0LypXUjoqL1x0IiVzIilcbicgJSBcCisg ICAgICAgICAgICAgICAgKHRhZyxyZWdpZHMsIiwiLmpvaW4ocnJlZ3MpLCIsIi5qb2luKHdyZWdz KSkpCisKKyAgICAgICAgZm9yIHRhZyBpbiBoZXhfY29tbW9uLnRhZ3M6CisgICAgICAgICAgICBp bW1zID0gdGFnaW1tc1t0YWddCisgICAgICAgICAgICBmLndyaXRlKCAnSU1NSU5GTyglcycgJSB0 YWcpCisgICAgICAgICAgICBpZiBub3QgaW1tczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcn JywndScsMCwwLCdVJywwLDAnJycpCisgICAgICAgICAgICBmb3Igc2lnbixzaXplLHNoYW10IGlu IGltbXM6CisgICAgICAgICAgICAgICAgaWYgc2lnbiA9PSAncic6IHNpZ24gPSAncycKKyAgICAg ICAgICAgICAgICBpZiBub3Qgc2hhbXQ6CisgICAgICAgICAgICAgICAgICAgIHNoYW10ID0gIjAi CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJycsJyVzJywlcywlcycnJyAlIChzaWduLHNpemUs c2hhbXQpKQorICAgICAgICAgICAgaWYgbGVuKGltbXMpID09IDE6CisgICAgICAgICAgICAgICAg aWYgc2lnbi5pc3VwcGVyKCk6CisgICAgICAgICAgICAgICAgICAgIG15dSA9ICd1JworICAgICAg ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG15dSA9ICdVJworICAgICAgICAg ICAgICAgIGYud3JpdGUoJycnLCclcycsMCwwJycnICUgbXl1KQorICAgICAgICAgICAgZi53cml0 ZSgnKVxuJykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAt LWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcGNvZGVzX2RlZi5weSBiL3RhcmdldC9oZXhhZ29u L2dlbl9vcGNvZGVzX2RlZi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43 NTM3YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX29wY29kZXNfZGVm LnB5CkBAIC0wLDAgKzEsMzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBD b3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0 IGhleF9jb21tb24KKworZGVmIG1haW4oKToKKyAgICBoZXhfY29tbW9uLnJlYWRfc2VtYW50aWNz X2ZpbGUoc3lzLmFyZ3ZbMV0pCisKKyAgICAjIworICAgICMjIEdlbmVyYXRlIHRoZSBvcGNvZGVz X2RlZl9nZW5lcmF0ZWQuaCBmaWxlCisgICAgIyMgICAgIEdpdmVzIGEgbGlzdCBvZiBhbGwgdGhl IG9wY29kZXMKKyAgICAjIworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgor ICAgICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgIGYud3JpdGUg KCAiT1BDT0RFKCVzKSxcbiIgJSAodGFnKSApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6 CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5 IGIvdGFyZ2V0L2hleGFnb24vZ2VuX3ByaW50aW5zbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwLi45ZGNhMDNlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24v Z2VuX3ByaW50aW5zbi5weQpAQCAtMCwwICsxLDE3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u MworCisjIworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjEgUXVhbGNvbW0gSW5ub3ZhdGlvbiBD ZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMj ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQg c3RyaW5nCitpbXBvcnQgaGV4X2NvbW1vbgorCisjIworIyMgR2VuZXJhdGUgdGhlIHByaW50aW5z bl9nZW5lcmF0ZWQuaCBmaWxlCisjIyAgICAgRGF0YSBmb3IgcHJpbnRpbmcgZWFjaCBpbnN0cnVj dGlvbiAoZm9ybWF0IHN0cmluZyArIG9wZXJhbmRzKQorIyMKK2RlZiByZWdwcmludGVyKG0pOgor ICAgIHN0ciA9IG0uZ3JvdXAoMSkKKyAgICBzdHIgKz0gIjoiLmpvaW4oWyIlZCJdKmxlbihtLmdy b3VwKDIpKSkKKyAgICBzdHIgKz0gbS5ncm91cCgzKQorICAgIGlmICgnUycgaW4gbS5ncm91cCgx KSkgYW5kIChsZW4obS5ncm91cCgyKSkgPT0gMSk6CisgICAgICAgIHN0ciArPSAiLyVzIgorICAg IGVsaWYgKCdDJyBpbiBtLmdyb3VwKDEpKSBhbmQgKGxlbihtLmdyb3VwKDIpKSA9PSAxKToKKyAg ICAgICAgc3RyICs9ICIvJXMiCisgICAgcmV0dXJuIHN0cgorCitkZWYgc3BhY2lmeShzKToKKyAg ICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYW55IG9wZXJhdG9yIHRoYXQgY29u dGFpbnMgJz0nIGNoYXJhY3RlcjoKKyAgICBvcHN3aXRoZXF1YWxfcmUgPSAnWy0rXiZ8ITw+PV0/ PScKKyAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYW55IGFzc2lnbm1lbnQg b3BlcmF0b3IuCisgICAgYXNzaWdubWVudF9yZSA9ICdbLSteJnxdPz0nCisKKyAgICAjIE91dCBv ZiB0aGUgb3BlcmF0b3JzIHRoYXQgY29udGFpbiB0aGUgPSBzaWduLCBpZiB0aGUgb3BlcmF0b3Ig aXMgYWxzbyBhbgorICAgICMgYXNzaWdubWVudCwgc3BhY2VzIHdpbGwgYmUgYWRkZWQgYXJvdW5k IGl0LCB1bmxlc3MgaXQncyBlbmNsb3NlZCB3aXRoaW4KKyAgICAjIHBhcmVudGhlc2VzLCBvciBz cGFjZXMgYXJlIGFscmVhZHkgcHJlc2VudC4KKworICAgIGVxdWFscyA9IHJlLmNvbXBpbGUob3Bz d2l0aGVxdWFsX3JlKQorICAgIGFzc2lnbiA9IHJlLmNvbXBpbGUoYXNzaWdubWVudF9yZSkKKwor ICAgIHNsZW4gPSBsZW4ocykKKyAgICBwYXJlbl9jb3VudCA9IHt9CisgICAgaSA9IDAKKyAgICBw YyA9IDAKKyAgICB3aGlsZSBpIDwgc2xlbjoKKyAgICAgICAgYyA9IHNbaV0KKyAgICAgICAgaWYg YyA9PSAnKCc6CisgICAgICAgICAgICBwYyArPSAxCisgICAgICAgIGVsaWYgYyA9PSAnKSc6Cisg ICAgICAgICAgICBwYyAtPSAxCisgICAgICAgIHBhcmVuX2NvdW50W2ldID0gcGMKKyAgICAgICAg aSArPSAxCisKKyAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgb3BlcmF0b3JzIHRoYXQgY29udGFpbiB0 aGUgZXF1YWwgc2lnbi4gSWYgYW55CisgICAgIyBtYXRjaCBpcyBhbHNvIGFuIGFzc2lnbm1lbnQg b3BlcmF0b3IsIGFkZCBzcGFjZXMgYXJvdW5kIGl0IGlmCisgICAgIyB0aGUgcGFyZW50aGVzaXMg Y291bnQgaXMgMC4KKyAgICBwb3MgPSAwCisgICAgb3V0ID0gW10KKyAgICBmb3IgbSBpbiBlcXVh bHMuZmluZGl0ZXIocyk6CisgICAgICAgIG1zID0gbS5zdGFydCgpCisgICAgICAgIG1lID0gbS5l bmQoKQorICAgICAgICAjIHQgaXMgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgb3Bzd2l0aGVxdWFs X3JlLgorICAgICAgICB0ID0gbS5zdHJpbmdbbXM6bWVdCisgICAgICAgIG91dCArPSBzW3Bvczpt c10KKyAgICAgICAgcG9zID0gbWUKKyAgICAgICAgaWYgcGFyZW5fY291bnRbbXNdID09IDA6Cisg ICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBlbnRpcmUgc3RyaW5nIHQgaXMgYW4gYXNzaWdubWVu dC4KKyAgICAgICAgICAgIGFtID0gYXNzaWduLm1hdGNoKHQpCisgICAgICAgICAgICBpZiBhbSBh bmQgbGVuKGFtLmdyb3VwKDApKSA9PSBtZS1tczoKKyAgICAgICAgICAgICAgICAjIERvbid0IGFk ZCBzcGFjZXMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGVyZS4KKyAgICAgICAgICAgICAgICBpZiBt cyA+IDAgYW5kIHNbbXMtMV0gIT0gJyAnOgorICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5k KCcgJykKKyAgICAgICAgICAgICAgICBvdXQgKz0gdAorICAgICAgICAgICAgICAgIGlmIG1lIDwg c2xlbiBhbmQgc1ttZV0gIT0gJyAnOgorICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKCcg JykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIElmIHRoaXMgaXMgbm90IGFu IGFzc2lnbm1lbnQsIGp1c3QgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQKKyAgICAgICAgIyBzdHJp bmcuCisgICAgICAgIG91dCArPSB0CisKKyAgICAjIEFwcGVuZCB0aGUgcmVtYWluaW5nIHBhcnQg b2YgdGhlIHN0cmluZy4KKyAgICBvdXQgKz0gc1twb3M6bGVuKHMpXQorICAgIHJldHVybiAnJy5q b2luKG91dCkKKworZGVmIG1haW4oKToKKyAgICBoZXhfY29tbW9uLnJlYWRfc2VtYW50aWNzX2Zp bGUoc3lzLmFyZ3ZbMV0pCisgICAgaGV4X2NvbW1vbi5yZWFkX2F0dHJpYnNfZmlsZShzeXMuYXJn dlsyXSkKKworICAgIGltbWV4dF9jYXNlcmUgPSByZS5jb21waWxlKHInSU1NRVhUXCgoW0EtWmEt el0pJykKKworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgorICAgICAgICBm b3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgIGlmIG5vdCBoZXhfY29tbW9u LmJlaGRpY3RbdGFnXTogY29udGludWUKKyAgICAgICAgICAgIGV4dGVuZGFibGVfdXBwZXJfaW1t ID0gRmFsc2UKKyAgICAgICAgICAgIGV4dGVuZGFibGVfbG93ZXJfaW1tID0gRmFsc2UKKyAgICAg ICAgICAgIG0gPSBpbW1leHRfY2FzZXJlLnNlYXJjaChoZXhfY29tbW9uLnNlbWRpY3RbdGFnXSkK KyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgaWYgbS5ncm91cCgxKS5pc3VwcGVy KCk6CisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGFibGVfdXBwZXJfaW1tID0gVHJ1ZQorICAg ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGFibGVfbG93ZXJf aW1tID0gVHJ1ZQorICAgICAgICAgICAgYmVoID0gaGV4X2NvbW1vbi5iZWhkaWN0W3RhZ10KKyAg ICAgICAgICAgIGJlaCA9IGhleF9jb21tb24ucmVncmUuc3ViKHJlZ3ByaW50ZXIsYmVoKQorICAg ICAgICAgICAgYmVoID0gaGV4X2NvbW1vbi5hYnNpbW1yZS5zdWIociIjJXMweCV4IixiZWgpCisg ICAgICAgICAgICBiZWggPSBoZXhfY29tbW9uLnJlbGltbXJlLnN1YihyIlBDKyVzJWQiLGJlaCkK KyAgICAgICAgICAgIGJlaCA9IHNwYWNpZnkoYmVoKQorICAgICAgICAgICAgIyBQcmludCBvdXQg YSBsaXRlcmFsICIlcyIgYXQgdGhlIGVuZCwgdXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcKKyAg ICAgICAgICAgICMgc28gQyB3b24ndCBjb21wbGFpbiBhdCB1cworICAgICAgICAgICAgaWYgKCJB X1ZFQ1giIGluIGhleF9jb21tb24uYXR0cmliZGljdFt0YWddKToKKyAgICAgICAgICAgICAgICBt YWNuYW1lID0gIkRFRl9WRUNYX1BSSU5USU5GTyIKKyAgICAgICAgICAgIGVsc2U6IG1hY25hbWUg PSAiREVGX1BSSU5USU5GTyIKKyAgICAgICAgICAgIGYud3JpdGUoJyVzKCVzLCIlcyUlcyInICUg KG1hY25hbWUsdGFnLGJlaCkpCisgICAgICAgICAgICByZWdzX29yX2ltbXMgPSBcCisgICAgICAg ICAgICAgICAgaGV4X2NvbW1vbi5yZWdfb3JfaW1tcmUuZmluZGFsbChoZXhfY29tbW9uLmJlaGRp Y3RbdGFnXSkKKyAgICAgICAgICAgIHJpID0gMAorICAgICAgICAgICAgc2VlbnJlZ3MgPSB7fQor ICAgICAgICAgICAgZm9yIGFsbHJlZ3MsYSxiLGMsZCxhbGxpbW0saW1tbGV0dCxiaXRzLGltbXNo aWZ0IGluIHJlZ3Nfb3JfaW1tczoKKyAgICAgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAg ICAgICAgICAjcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgYiBpbiBzZWVucmVnczoK KyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ25vID0gc2VlbnJlZ3NbYl0KKyAgICAgICAgICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ25vID0gcmkKKyAgICAg ICAgICAgICAgICAgICAgaWYgbGVuKGIpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBm LndyaXRlKCcsIGluc24tPnJlZ25vWyVkXScgJSByZWdubykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICdTJyBpbiBhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJywg c3JlZzJzdHIoaW5zbi0+cmVnbm9bJWRdKScgJSByZWdubykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGVsaWYgJ0MnIGluIGE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgn LCBjcmVnMnN0cihpbnNuLT5yZWdub1slZF0pJyAlIHJlZ25vKQorICAgICAgICAgICAgICAgICAg ICBlbGlmIGxlbihiKSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLCBp bnNuLT5yZWdub1slZF0gKyAxLCBpbnNuLT5yZWdub1slZF0nICUgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyZWdubyxyZWdubykpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiUHV0IHNvbWUgc3R1ZmYgdG8gaGFuZGxlIHF1 YWRzIGhlcmUiKQorICAgICAgICAgICAgICAgICAgICBpZiBiIG5vdCBpbiBzZWVucmVnczoKKyAg ICAgICAgICAgICAgICAgICAgICAgIHNlZW5yZWdzW2JdID0gcmkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJpICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg ICAjaW1tZWRpYXRlCisgICAgICAgICAgICAgICAgICAgIGlmIChpbW1sZXR0LmlzdXBwZXIoKSk6 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHRlbmRhYmxlX3VwcGVyX2ltbToKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiBpbW1sZXR0IGluICdyUic6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRlbnNpb25fdmFsaWQ/IiMjIjoi IicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lvbl92YWxpZD8iIyI6IiInKQor ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmLndyaXRlKCcsIiInKQorICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSAxCisgICAgICAg ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHRlbmRhYmxl X2xvd2VyX2ltbToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbW1sZXR0IGluICdy Uic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRl bnNpb25fdmFsaWQ/IiMjIjoiIicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLGluc24tPmV4dGVuc2lv bl92YWxpZD8iIyI6IiInKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcsIiInKQorICAgICAgICAgICAgICAgICAgICAg ICAgaWkgPSAwCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJywgaW5zbi0+aW1tZWRbJWRd JyAlIGlpKQorICAgICAgICAgICAgIyBhcHBlbmQgZW1wdHkgc3RyaW5nIHNvIHRoZXJlIGlzIGF0 IGxlYXN0IG9uZSBtb3JlIGFyZworICAgICAgICAgICAgZi53cml0ZSgnLCIiKVxuJykKKworaWYg X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3RhcmdldC9o ZXhhZ29uL2dlbl9zaG9ydGNvZGUucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2MmY3ZTkKLS0tIC9kZXYvbnVs bAorKysgYi90YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5CkBAIC0wLDAgKzEsNjMgQEAK KyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykgMjAxOS0yMDIx IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyMgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBz eXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGhleF9jb21tb24KKworZGVmIGdl bl9zaG9ydGNvZGUoZiwgdGFnKToKKyAgICBmLndyaXRlKCdERUZfU0hPUlRDT0RFKCVzLCAlcylc bicgJSAodGFnLCBoZXhfY29tbW9uLnNlbWRpY3RbdGFnXSkpCisKK2RlZiBtYWluKCk6CisgICAg aGV4X2NvbW1vbi5yZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21t b24ucmVhZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5jYWxjdWxh dGVfYXR0cmlicygpCisgICAgdGFncmVncyA9IGhleF9jb21tb24uZ2V0X3RhZ3JlZ3MoKQorICAg IHRhZ2ltbXMgPSBoZXhfY29tbW9uLmdldF90YWdpbW1zKCkKKworICAgICMjCisgICAgIyMgR2Vu ZXJhdGUgdGhlIHNob3J0Y29kZV9nZW5lcmF0ZWQuaCBmaWxlCisgICAgIyMKKyAgICB3aXRoIG9w ZW4oc3lzLmFyZ3ZbM10sICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgiI2lmbmRlZiBERUZf U0hPUlRDT0RFXG4iKQorICAgICAgICBmLndyaXRlKCIjZGVmaW5lIERFRl9TSE9SVENPREUoVEFH LFNIT1JUQ09ERSkgICAgLyogTm90aGluZyAqL1xuIikKKyAgICAgICAgZi53cml0ZSgiI2VuZGlm XG4iKQorCisgICAgICAgIGZvciB0YWcgaW4gaGV4X2NvbW1vbi50YWdzOgorICAgICAgICAgICAg IyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgIGlmICggIkFfUFJJViIg aW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAgICAgICAgY29udGlu dWUKKyAgICAgICAgICAgICMjIFNraXAgdGhlIGd1ZXN0IGluc3RydWN0aW9ucworICAgICAgICAg ICAgaWYgKCAiQV9HVUVTVCIgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10gKSA6CisgICAg ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMjIFNraXAgdGhlIGRpYWcgaW5zdHJ1 Y3Rpb25zCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6CisgICAgICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnMCIgKSA6Cisg ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFn MSIgKSA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZ2VuX3Nob3J0 Y29kZShmLCB0YWcpCisKKyAgICAgICAgZi53cml0ZSgiI3VuZGVmIERFRl9TSE9SVENPREVcbiIp CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90 YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNfdGFibGUucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5f dGNnX2Z1bmNfdGFibGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDgw OWQzMgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY190YWJs ZS5weQpAQCAtMCwwICsxLDU4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAg Q29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBB bGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor IyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2ltcG9y dCBoZXhfY29tbW9uCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2NvbW1vbi5yZWFkX3NlbWFudGlj c19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVhZF9hdHRyaWJzX2ZpbGUoc3lz LmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5jYWxjdWxhdGVfYXR0cmlicygpCisgICAgdGFncmVn cyA9IGhleF9jb21tb24uZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBoZXhfY29tbW9uLmdl dF90YWdpbW1zKCkKKworICAgIHdpdGggb3BlbihzeXMuYXJndlszXSwgJ3cnKSBhcyBmOgorICAg ICAgICBmLndyaXRlKCIjaWZuZGVmIEhFWEFHT05fRlVOQ19UQUJMRV9IXG4iKQorICAgICAgICBm LndyaXRlKCIjZGVmaW5lIEhFWEFHT05fRlVOQ19UQUJMRV9IXG5cbiIpCisKKyAgICAgICAgZi53 cml0ZSgiY29uc3QgU2VtYW50aWNJbnNuIG9wY29kZV9nZW5wdHJbWFhfTEFTVF9PUENPREVdID0g e1xuIikKKyAgICAgICAgZm9yIHRhZyBpbiBoZXhfY29tbW9uLnRhZ3M6CisgICAgICAgICAgICAj IyBTa2lwIHRoZSBwcml2IGluc3RydWN0aW9ucworICAgICAgICAgICAgaWYgKCAiQV9QUklWIiBp biBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICAgICAgIyMgU2tpcCB0aGUgZ3Vlc3QgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAg ICBpZiAoICJBX0dVRVNUIiBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAg ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0cnVj dGlvbnMKKyAgICAgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnIiApIDoKKyAgICAgICAgICAg ICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiApIDoKKyAg ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcx IiApIDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmLndyaXRlKCIg ICAgWyVzXSA9IGdlbmVyYXRlXyVzLFxuIiAlICh0YWcsIHRhZykpCisgICAgICAgIGYud3JpdGUo In07XG5cbiIpCisKKyAgICAgICAgZi53cml0ZSgiI2VuZGlmICAgIC8qIEhFWEFHT05fRlVOQ19U QUJMRV9IICovXG4iKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpk aWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weSBiL3RhcmdldC9oZXhh Z29uL2dlbl90Y2dfZnVuY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u MzNhMDFjNwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl90Y2dfZnVuY3Mu cHkKQEAgLTAsMCArMSw1MzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBD b3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj IworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0 IGhleF9jb21tb24KKworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl90Y2dfZnVuYworIyMKK2RlZiBn ZW5fZGVjbF9lYV90Y2coZiwgdGFnKToKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGhleF9jb21t b24uYXR0cmliZGljdFt0YWddIG9yCisgICAgICAgICdBX0xPQUQnIGluIGhleF9jb21tb24uYXR0 cmliZGljdFt0YWddKToKKyAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgRUEgPSB0Y2dfdGVtcF9s b2NhbF9uZXcoKTtcbiIpCisgICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgRUEg PSB0Y2dfdGVtcF9uZXcoKTtcbiIpCisKK2RlZiBnZW5fZnJlZV9lYV90Y2coZik6CisgICAgZi53 cml0ZSgiICAgIHRjZ190ZW1wX2ZyZWUoRUEpO1xuIikKKworZGVmIGdlbnB0cl9kZWNsX3BhaXJf d3JpdGVibGUoZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8pOgorICAgIHJlZ049IiVzJXNO IiAlIChyZWd0eXBlLHJlZ2lkKQorICAgIGYud3JpdGUoIiAgICBUQ0d2X2k2NCAlcyVzViA9IHRj Z190ZW1wX2xvY2FsX25ld19pNjQoKTtcbiIgJSBcCisgICAgICAgIChyZWd0eXBlLCByZWdpZCkp CisgICAgaWYgKHJlZ3R5cGUgPT0gIkMiKToKKyAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGlu dCAlcyA9IGluc24tPnJlZ25vWyVkXSArIEhFWF9SRUdfU0EwO1xuIiAlIFwKKyAgICAgICAgICAg IChyZWdOLCByZWdubykpCisgICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGlu dCAlcyA9IGluc24tPnJlZ25vWyVkXTtcbiIgJSAocmVnTiwgcmVnbm8pKQorICAgIGlmICgnQV9D T05ERVhFQycgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICBmLndyaXRl KCIgICAgaWYgKCFpc19wcmVsb2FkZWQoY3R4LCAlcykpIHtcbiIgJSByZWdOKQorICAgICAgICBm LndyaXRlKCIgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdfdmFsdWVbJXNdLCBoZXhfZ3By WyVzXSk7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnTiwgcmVnTikp CisgICAgICAgIGYud3JpdGUoIiAgICB9XG4iKQorICAgICAgICBmLndyaXRlKCIgICAgaWYgKCFp c19wcmVsb2FkZWQoY3R4LCAlcyArIDEpKSB7XG4iICUgcmVnTikKKyAgICAgICAgZi53cml0ZSgi ICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlWyVzICsgMV0sIGhleF9ncHJbJXMg KyAxXSk7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnTiwgcmVnTikp CisgICAgICAgIGYud3JpdGUoIiAgICB9XG4iKQorCitkZWYgZ2VucHRyX2RlY2xfd3JpdGVibGUo ZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8pOgorICAgIHJlZ049IiVzJXNOIiAlIChyZWd0 eXBlLHJlZ2lkKQorICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNWID0gdGNnX3RlbXBfbG9jYWxf bmV3KCk7XG4iICUgXAorICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgIGlmIChyZWd0eXBl ID09ICJDIik6CisgICAgICAgIGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdu b1slZF0gKyBIRVhfUkVHX1NBMDtcbiIgJSBcCisgICAgICAgICAgICAocmVnTiwgcmVnbm8pKQor ICAgIGVsc2U6CisgICAgICAgIGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdu b1slZF07XG4iICUgKHJlZ04sIHJlZ25vKSkKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGhleF9j b21tb24uYXR0cmliZGljdFt0YWddKToKKyAgICAgICAgZi53cml0ZSgiICAgIGlmICghaXNfcHJl bG9hZGVkKGN0eCwgJXMpKSB7XG4iICUgcmVnTikKKyAgICAgICAgZi53cml0ZSgiICAgICAgICB0 Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlWyVzXSwgaGV4X2dwclslc10pO1xuIiAlIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ04sIHJlZ04pKQorICAgICAgICBmLndyaXRl KCIgICAgfVxuIikKKworZGVmIGdlbnB0cl9kZWNsKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJl Z25vKToKKyAgICByZWdOPSIlcyVzTiIgJSAocmVndHlwZSxyZWdpZCkKKyAgICBpZiAocmVndHlw ZSA9PSAiUiIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJzcyIsICJ0dCJ9KToKKyAgICAgICAg ICAgIGYud3JpdGUoIiAgICBUQ0d2X2k2NCAlcyVzViA9IHRjZ190ZW1wX2xvY2FsX25ld19pNjQo KTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICBjb25zdCBpbnQgJXMgPSBpbnNuLT5yZWdub1slZF07XG4iICUgXAorICAg ICAgICAgICAgICAgIChyZWdOLCByZWdubykpCisgICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZGQi LCAiZWUiLCAieHgiLCAieXkifSk6CisgICAgICAgICAgICBnZW5wdHJfZGVjbF9wYWlyX3dyaXRl YmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAgICBlbGlmIChyZWdpZCBp biB7InMiLCAidCIsICJ1IiwgInYifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdiAl cyVzViA9IGhleF9ncHJbaW5zbi0+cmVnbm9bJWRdXTtcbiIgJSBcCisgICAgICAgICAgICAgICAg KHJlZ3R5cGUsIHJlZ2lkLCByZWdubykpCisgICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZCIsICJl IiwgIngiLCAieSJ9KToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsX3dyaXRlYmxlKGYsIHRhZywg cmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQo IkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlw ZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVnaWQgaW4geyJzIiwgInQiLCAidSIsICJ2In0pOgor ICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3YgJXMlc1YgPSBoZXhfcHJlZFtpbnNuLT5yZWdu b1slZF1dO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ25vKSkK KyAgICAgICAgZWxpZiAocmVnaWQgaW4geyJkIiwgImUiLCAieCJ9KToKKyAgICAgICAgICAgIGdl bnB0cl9kZWNsX3dyaXRlYmxlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHJlZ25vKQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlw ZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiQyIpOgorICAgICAgICBpZiAocmVnaWQg PT0gInNzIik6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdl9pNjQgJXMlc1YgPSB0Y2df dGVtcF9sb2NhbF9uZXdfaTY0KCk7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCBy ZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgY29uc3QgaW50ICVzID0gaW5zbi0+cmVn bm9bJWRdICsgSEVYX1JFR19TQTA7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWdOLCByZWdu bykpCisgICAgICAgIGVsaWYgKHJlZ2lkID09ICJkZCIpOgorICAgICAgICAgICAgZ2VucHRyX2Rl Y2xfcGFpcl93cml0ZWJsZShmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCByZWdubykKKyAgICAgICAg ZWxpZiAocmVnaWQgPT0gInMiKToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNW ID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBl LCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgY29uc3QgaW50ICVzJXNOID0gaW5z bi0+cmVnbm9bJWRdICsgSEVYX1JFR19TQTA7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0 eXBlLCByZWdpZCwgcmVnbm8pKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAiZCIpOgorICAgICAg ICAgICAgZ2VucHRyX2RlY2xfd3JpdGVibGUoZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgcmVnbm8p CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJNIik6CisgICAgICAgIGlm IChyZWdpZCA9PSAidSIpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIGNvbnN0IGludCAlcyVz TiA9IGluc24tPnJlZ25vWyVkXTtcbiIlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVn aWQsIHJlZ25vKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNWID0gaGV4X2dw clslcyVzTiArIEhFWF9SRUdfTTBdO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSwg cmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50 KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6CisgICAg ICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorCitkZWYg Z2VucHRyX2RlY2xfbmV3KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgKHJlZ3R5cGUg PT0gIk4iKToKKyAgICAgICAgaWYgKHJlZ2lkIGluIHsicyIsICJ0In0pOgorICAgICAgICAgICAg Zi53cml0ZSgiICAgIFRDR3YgJXMlc04gPSBoZXhfbmV3X3ZhbHVlW2luc24tPnJlZ25vWyVkXV07 XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVnbm8pKQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlw ZSwgcmVnaWQpCisgICAgZWxpZiAocmVndHlwZSA9PSAiUCIpOgorICAgICAgICBpZiAocmVnaWQg aW4geyJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBUQ0d2ICVzJXNO ID0gaGV4X25ld19wcmVkX3ZhbHVlW2luc24tPnJlZ25vWyVkXV07XG4iICUgXAorICAgICAgICAg ICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVnbm8pKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxz ZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQp CisKK2RlZiBnZW5wdHJfZGVjbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVt cmVncywgaSk6CisgICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgorICAgICAgICBn ZW5wdHJfZGVjbChmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCBpKQorICAgIGVsaWYgKGhleF9jb21t b24uaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlmIGhleF9jb21tb24uaXNfb2xkX3ZhbChy ZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsKGYsdGFnLCByZWd0 eXBlLCByZWdpZCwgaSkKKyAgICAgICAgZWxpZiBoZXhfY29tbW9uLmlzX25ld192YWwocmVndHlw ZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZGVjbF9uZXcoZixyZWd0eXBlLHJl Z2lkLGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBh cnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHBy aW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisK K2RlZiBnZW5wdHJfZGVjbF9pbW0oZixpbW1sZXR0KToKKyAgICBpZiAoaW1tbGV0dC5pc3VwcGVy KCkpOgorICAgICAgICBpID0gMQorICAgIGVsc2U6CisgICAgICAgIGkgPSAwCisgICAgZi53cml0 ZSgiICAgIGludCAlcyA9IGluc24tPmltbWVkWyVkXTtcbiIgJSBcCisgICAgICAgIChoZXhfY29t bW9uLmltbV9uYW1lKGltbWxldHQpLCBpKSkKKworZGVmIGdlbnB0cl9mcmVlKGYscmVndHlwZSxy ZWdpZCxyZWdubyk6CisgICAgaWYgKHJlZ3R5cGUgPT0gIlIiKToKKyAgICAgICAgaWYgKHJlZ2lk IGluIHsiZGQiLCAic3MiLCAidHQiLCAieHgiLCAieXkifSk6CisgICAgICAgICAgICBmLndyaXRl KCIgICAgdGNnX3RlbXBfZnJlZV9pNjQoJXMlc1YpO1xuIiAlIChyZWd0eXBlLCByZWdpZCkpCisg ICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZCIsICJlIiwgIngiLCAieSJ9KToKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICB0Y2dfdGVtcF9mcmVlKCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQp KQorICAgICAgICBlbGlmIChyZWdpZCBub3QgaW4geyJzIiwgInQiLCAidSIsICJ2In0pOgorICAg ICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkKQorICAg IGVsaWYgKHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lkIGluIHsiZCIsICJlIiwg IngifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgdGNnX3RlbXBfZnJlZSglcyVzVik7XG4i ICUgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxpZiAocmVnaWQgbm90IGluIHsicyIsICJ0 IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIs cmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJDIik6CisgICAgICAgIGlmIChy ZWdpZCBpbiB7ImRkIiwgInNzIn0pOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIHRjZ190ZW1w X2ZyZWVfaTY0KCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICBlbGlmIChy ZWdpZCBpbiB7ImQiLCAicyJ9KToKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICB0Y2dfdGVtcF9m cmVlKCVzJXNWKTtcbiIgJSAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkKQorICAgIGVs aWYgKHJlZ3R5cGUgPT0gIk0iKToKKyAgICAgICAgaWYgKHJlZ2lkICE9ICJ1Iik6CisgICAgICAg ICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBl bHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdp ZCkKKworZGVmIGdlbnB0cl9mcmVlX25ldyhmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlm IChyZWd0eXBlID09ICJOIik6CisgICAgICAgIGlmIChyZWdpZCBub3QgaW4geyJzIiwgInQifSk6 CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdp ZCkKKyAgICBlbGlmIChyZWd0eXBlID09ICJQIik6CisgICAgICAgIGlmIChyZWdpZCBub3QgaW4g eyJ0IiwgInUiLCAidiJ9KToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6 ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0 ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorCitkZWYgZ2VucHRyX2ZyZWVfb3BuKGYscmVn dHlwZSxyZWdpZCxpLHRhZyk6CisgICAgaWYgKGhleF9jb21tb24uaXNfcGFpcihyZWdpZCkpOgor ICAgICAgICBnZW5wdHJfZnJlZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChoZXhfY29t bW9uLmlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBpZiBoZXhfY29tbW9uLmlzX29sZF92YWwo cmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJlZShmLHJlZ3R5cGUs cmVnaWQsaSkKKyAgICAgICAgZWxpZiBoZXhfY29tbW9uLmlzX25ld192YWwocmVndHlwZSwgcmVn aWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJlZV9uZXcoZixyZWd0eXBlLHJlZ2lkLGkp CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJC YWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBn ZW5wdHJfc3JjX3JlYWQoZixyZWd0eXBlLHJlZ2lkKToKKyAgICBpZiAocmVndHlwZSA9PSAiUiIp OgorICAgICAgICBpZiAocmVnaWQgaW4geyJzcyIsICJ0dCIsICJ4eCIsICJ5eSJ9KToKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICB0Y2dfZ2VuX2NvbmNhdF9pMzJfaTY0KCVzJXNWLCBoZXhfZ3By WyVzJXNOXSxcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBl LCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBoZXhfZ3ByWyVzJXNOICsgMV0pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVn dHlwZSwgcmVnaWQpKQorICAgICAgICBlbGlmIChyZWdpZCBpbiB7IngiLCAieSJ9KToKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICB0Y2dfZ2VuX21vdl90bCglcyVzViwgaGV4X2dwclslcyVzTl0p O1xuIiAlIFwKKyAgICAgICAgICAgICAgICAocmVndHlwZSxyZWdpZCxyZWd0eXBlLHJlZ2lkKSkK KyAgICAgICAgZWxpZiAocmVnaWQgbm90IGluIHsicyIsICJ0IiwgInUiLCAidiJ9KToKKyAgICAg ICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAg IGVsaWYgKHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lkID09ICJ4Iik6CisgICAg ICAgICAgICBmLndyaXRlKCIgICAgdGNnX2dlbl9tb3ZfdGwoJXMlc1YsIGhleF9wcmVkWyVzJXNO XSk7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVn aWQpKQorICAgICAgICBlbGlmIChyZWdpZCBub3QgaW4geyJzIiwgInQiLCAidSIsICJ2In0pOgor ICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQp CisgICAgZWxpZiAocmVndHlwZSA9PSAiQyIpOgorICAgICAgICBpZiAocmVnaWQgPT0gInNzIik6 CisgICAgICAgICAgICBmLndyaXRlKCIgICAgaWYgKCVzJXNOID09IEhFWF9SRUdfUDNfMCkge1xu IiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCkp CisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIFRDR3YgcDNfMCA9IHRjZ190ZW1wX25ldygp O1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgZ2VuX3JlYWRfcDNfMChwM18wKTtc biIpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIHRjZ19nZW5fY29uY2F0X2kzMl9pNjQo JXMlc1YsXG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUs IHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgICAgIHAzXzAsXG4iKQorICAg ICAgICAgICAgZi53cml0ZSgiICAgICAgICAgICAgaGV4X2dwclslcyVzTiArIDFdKTtcbiIgJSBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAg ICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfdGVtcF9mcmVlKHAzXzApO1xuIikKKyAgICAg ICAgICAgIGYud3JpdGUoIiAgICB9IGVsc2Uge1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAg ICAgICAgdGNnX2dlbl9jb25jYXRfaTMyX2k2NCglcyVzVixcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0 ZSgiICAgICAgICAgICAgaGV4X2dwclslcyVzTl0sXG4iICUgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAg ICAgICAgICAgIGhleF9ncHJbJXMlc04gKyAxXSk7XG4iICUgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAg ICB9XG4iKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAicyIpOgorICAgICAgICAgICAgZi53cml0 ZSgiICAgIGlmICglcyVzTiA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0 ZSgiICAgICAgICBnZW5fcmVhZF9wM18wKCVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgi ICAgIH0gZWxzZSB7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfZ2VuX21v dl90bCglcyVzViwgaGV4X2dwclslcyVzTl0pO1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorICAgICAgICAg ICAgZi53cml0ZSgiICAgIH1cbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgi QmFkIHJlZ2lzdGVyIHBhcnNlOiAiLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlmIChyZWd0eXBl ID09ICJNIik6CisgICAgICAgIGlmIChyZWdpZCAhPSAidSIpOgorICAgICAgICAgICAgcHJpbnQo IkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAgZWxzZToKKyAgICAg ICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisKK2RlZiBn ZW5wdHJfc3JjX3JlYWRfbmV3KGYscmVndHlwZSxyZWdpZCk6CisgICAgaWYgKHJlZ3R5cGUgPT0g Ik4iKToKKyAgICAgICAgaWYgKHJlZ2lkIG5vdCBpbiB7InMiLCAidCJ9KToKKyAgICAgICAgICAg IHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYg KHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lkIG5vdCBpbiB7InQiLCAidSIsICJ2 In0pOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwg cmVnaWQpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwg cmVndHlwZSwgcmVnaWQpCisKK2RlZiBnZW5wdHJfc3JjX3JlYWRfb3BuKGYscmVndHlwZSxyZWdp ZCx0YWcpOgorICAgIGlmIChoZXhfY29tbW9uLmlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2Vu cHRyX3NyY19yZWFkKGYscmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChoZXhfY29tbW9uLmlzX3Np bmdsZShyZWdpZCkpOgorICAgICAgICBpZiBoZXhfY29tbW9uLmlzX29sZF92YWwocmVndHlwZSwg cmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWQoZixyZWd0eXBlLHJlZ2lk KQorICAgICAgICBlbGlmIGhleF9jb21tb24uaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFn KToKKyAgICAgICAgICAgIGdlbnB0cl9zcmNfcmVhZF9uZXcoZixyZWd0eXBlLHJlZ2lkKQorICAg ICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0 eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJl Z2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hl bHBlcl9jYWxsX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToK KyAgICBpZiAoaSA+IDApOiBmLndyaXRlKCIsICIpCisgICAgaWYgKGhleF9jb21tb24uaXNfcGFp cihyZWdpZCkpOgorICAgICAgICBmLndyaXRlKCIlcyVzViIgJSAocmVndHlwZSxyZWdpZCkpCisg ICAgZWxpZiAoaGV4X2NvbW1vbi5pc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaGV4X2Nv bW1vbi5pc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZi53cml0 ZSgiJXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorICAgICAgICBlbGlmIGhleF9jb21tb24uaXNf bmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGYud3JpdGUoIiVzJXNO IiAlIChyZWd0eXBlLHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJC YWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgZWxz ZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncykKKworZGVmIGdlbl9oZWxwZXJfZGVjbF9pbW0oZixpbW1sZXR0KToKKyAgICBm LndyaXRlKCIgICAgVENHdiB0Y2d2XyVzID0gdGNnX2NvbnN0X3RsKCVzKTtcbiIgJSBcCisgICAg ICAgIChoZXhfY29tbW9uLmltbV9uYW1lKGltbWxldHQpLCBoZXhfY29tbW9uLmltbV9uYW1lKGlt bWxldHQpKSkKKworZGVmIGdlbl9oZWxwZXJfY2FsbF9pbW0oZixpbW1sZXR0KToKKyAgICBmLndy aXRlKCIsIHRjZ3ZfJXMiICUgaGV4X2NvbW1vbi5pbW1fbmFtZShpbW1sZXR0KSkKKworZGVmIGdl bl9oZWxwZXJfZnJlZV9pbW0oZixpbW1sZXR0KToKKyAgICBmLndyaXRlKCIgICAgdGNnX3RlbXBf ZnJlZSh0Y2d2XyVzKTtcbiIgJSBoZXhfY29tbW9uLmltbV9uYW1lKGltbWxldHQpKQorCitkZWYg Z2VucHRyX2RzdF93cml0ZV9wYWlyKGYsIHRhZywgcmVndHlwZSwgcmVnaWQpOgorICAgIGlmICgn QV9DT05ERVhFQycgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10pOgorICAgICAgICBmLndy aXRlKCIgICAgZ2VuX2xvZ19wcmVkaWNhdGVkX3JlZ193cml0ZV9wYWlyKCVzJXNOLCAlcyVzViwg aW5zbi0+c2xvdCk7XG4iICUgXAorICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBl LCByZWdpZCkpCisgICAgZWxzZToKKyAgICAgICAgZi53cml0ZSgiICAgIGdlbl9sb2dfcmVnX3dy aXRlX3BhaXIoJXMlc04sICVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAocmVndHlwZSwgcmVn aWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICBmLndyaXRlKCIgICAgY3R4X2xvZ19yZWdfd3JpdGVf cGFpcihjdHgsICVzJXNOKTtcbiIgJSBcCisgICAgICAgIChyZWd0eXBlLCByZWdpZCkpCisKK2Rl ZiBnZW5wdHJfZHN0X3dyaXRlKGYsIHRhZywgcmVndHlwZSwgcmVnaWQpOgorICAgIGlmIChyZWd0 eXBlID09ICJSIik6CisgICAgICAgIGlmIChyZWdpZCBpbiB7ImRkIiwgInh4IiwgInl5In0pOgor ICAgICAgICAgICAgZ2VucHRyX2RzdF93cml0ZV9wYWlyKGYsIHRhZywgcmVndHlwZSwgcmVnaWQp CisgICAgICAgIGVsaWYgKHJlZ2lkIGluIHsiZCIsICJlIiwgIngiLCAieSJ9KToKKyAgICAgICAg ICAgIGlmICgnQV9DT05ERVhFQycgaW4gaGV4X2NvbW1vbi5hdHRyaWJkaWN0W3RhZ10pOgorICAg ICAgICAgICAgICAgIGYud3JpdGUoIiAgICBnZW5fbG9nX3ByZWRpY2F0ZWRfcmVnX3dyaXRlKCVz JXNOLCAlcyVzVixcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgIChyZWd0eXBlLCByZWdpZCwg cmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc24tPnNsb3QpO1xuIikKKyAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgZi53cml0ZSgiICAgIGdlbl9sb2dfcmVnX3dyaXRlKCVzJXNOLCAlcyVz Vik7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUs IHJlZ2lkKSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICBjdHhfbG9nX3JlZ193cml0ZShjdHgs ICVzJXNOKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIsIHJlZ3R5 cGUsIHJlZ2lkKQorICAgIGVsaWYgKHJlZ3R5cGUgPT0gIlAiKToKKyAgICAgICAgaWYgKHJlZ2lk IGluIHsiZCIsICJlIiwgIngifSk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgZ2VuX2xvZ19w cmVkX3dyaXRlKCVzJXNOLCAlcyVzVik7XG4iICUgXAorICAgICAgICAgICAgICAgIChyZWd0eXBl LCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgIGN0eF9s b2dfcHJlZF93cml0ZShjdHgsICVzJXNOKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgKHJlZ3R5 cGUsIHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0 ZXIgcGFyc2U6ICIsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYgKHJlZ3R5cGUgPT0gIkMiKToK KyAgICAgICAgaWYgKHJlZ2lkID09ICJkZCIpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIGlm ICglcyVzTiA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAg ICBUQ0d2IHZhbDMyID0gdGNnX3RlbXBfbmV3KCk7XG4iKQorICAgICAgICAgICAgZi53cml0ZSgi ICAgICAgICB0Y2dfZ2VuX2V4dHJsX2k2NF9pMzIodmFsMzIsICVzJXNWKTtcbiIgJSBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAg ICAgZi53cml0ZSgiICAgICAgICBnZW5fd3JpdGVfcDNfMCh2YWwzMik7XG4iKQorICAgICAgICAg ICAgZi53cml0ZSgiICAgICAgICB0Y2dfZ2VuX2V4dHJoX2k2NF9pMzIodmFsMzIsICVzJXNWKTtc biIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQp KQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICBnZW5fbG9nX3JlZ193cml0ZSglcyVzTiAr IDEsIHZhbDMyKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVn dHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICB0Y2dfdGVtcF9mcmVl KHZhbDMyKTtcbiIpCisgICAgICAgICAgICBmLndyaXRlKCIgICAgICAgIGN0eF9sb2dfcmVnX3dy aXRlKGN0eCwgJXMlc04gKyAxKTtcbiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAgICAgICAgZi53cml0ZSgiICAgIH0gZWxzZSB7 XG4iKQorICAgICAgICAgICAgZi53cml0ZSgiICAgICAgICBnZW5fbG9nX3JlZ193cml0ZV9wYWly KCVzJXNOLCAlcyVzVik7XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHJlZ3R5cGUsIHJlZ2lkLCByZWd0eXBlLCByZWdpZCkpCisgICAgICAgICAgICBmLndyaXRlKCIg ICAgICAgIGN0eF9sb2dfcmVnX3dyaXRlX3BhaXIoY3R4LCAlcyVzTik7XG4iICUgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAgICAg IGYud3JpdGUoIiAgICB9XG4iKQorICAgICAgICBlbGlmIChyZWdpZCA9PSAiZCIpOgorICAgICAg ICAgICAgZi53cml0ZSgiICAgIGlmICglcyVzTiA9PSBIRVhfUkVHX1AzXzApIHtcbiIgJSBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQpKQorICAgICAg ICAgICAgZi53cml0ZSgiICAgICAgICBnZW5fd3JpdGVfcDNfMCglcyVzVik7XG4iICUgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lkKSkKKyAgICAgICAg ICAgIGYud3JpdGUoIiAgICB9IGVsc2Uge1xuIikKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICAg ICAgZ2VuX2xvZ19yZWdfd3JpdGUoJXMlc04sICVzJXNWKTtcbiIgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKyAg ICAgICAgICAgIGYud3JpdGUoIiAgICAgICAgY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCAlcyVzTik7 XG4iICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3R5cGUsIHJlZ2lk KSkKKyAgICAgICAgICAgIGYud3JpdGUoIiAgICB9XG4iKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVnaWQpCisgICAg ZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIiwgcmVndHlwZSwgcmVn aWQpCisKK2RlZiBnZW5wdHJfZHN0X3dyaXRlX29wbihmLHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgor ICAgIGlmIChoZXhfY29tbW9uLmlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VucHRyX2RzdF93 cml0ZShmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkKQorICAgIGVsaWYgKGhleF9jb21tb24uaXNfc2lu Z2xlKHJlZ2lkKSk6CisgICAgICAgIGdlbnB0cl9kc3Rfd3JpdGUoZiwgdGFnLCByZWd0eXBlLCBy ZWdpZCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJl Z3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCisjIworIyMgR2VuZXJhdGUgdGhlIFRDRyBjb2Rl IHRvIGNhbGwgdGhlIGhlbHBlcgorIyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIsUnQz MiksIHsgUmRWPVJzVitSdFY7fQorIyMgICAgIFdlIHByb2R1Y2U6CisjIyAgICBzdGF0aWMgdm9p ZCBnZW5lcmF0ZV9BMl9hZGQoKQorIyMgICAgICAgICAgICAgICAgICAgIENQVUhleGFnb25TdGF0 ZSAqZW52CisjIyAgICAgICAgICAgICAgICAgICAgRGlzYXNDb250ZXh0ICpjdHgsCisjIyAgICAg ICAgICAgICAgICAgICAgSW5zbiAqaW5zbiwKKyMjICAgICAgICAgICAgICAgICAgICBQYWNrZXQg KnBrdCkKKyMjICAgICAgIHsKKyMjICAgICAgICAgICBUQ0d2IFJkViA9IHRjZ190ZW1wX2xvY2Fs X25ldygpOworIyMgICAgICAgICAgIGNvbnN0IGludCBSZE4gPSBpbnNuLT5yZWdub1swXTsKKyMj ICAgICAgICAgICBUQ0d2IFJzViA9IGhleF9ncHJbaW5zbi0+cmVnbm9bMV1dOworIyMgICAgICAg ICAgIFRDR3YgUnRWID0gaGV4X2dwcltpbnNuLT5yZWdub1syXV07CisjIyAgICAgICAgICAgPEdF Tj4KKyMjICAgICAgICAgICBnZW5fbG9nX3JlZ193cml0ZShSZE4sIFJkVik7CisjIyAgICAgICAg ICAgY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCBSZE4pOworIyMgICAgICAgICAgIHRjZ190ZW1wX2Zy ZWUoUmRWKTsKKyMjICAgICAgIH0KKyMjCisjIyAgICAgICB3aGVyZSA8R0VOPiBkZXBlbmRzIG9u IGhleF9jb21tb24uc2tpcF9xZW11X2hlbHBlcih0YWcpCisjIyAgICAgICBpZiBoZXhfY29tbW9u LnNraXBfcWVtdV9oZWxwZXIodGFnKSBpcyBUcnVlCisjIyAgICAgICA8R0VOPiAgaXMgZkdFTl9U Q0dfQTJfYWRkKHsgUmRWPVJzVitSdFY7fSk7CisjIyAgICAgICBpZiBoZXhfY29tbW9uLnNraXBf cWVtdV9oZWxwZXIodGFnKSBpcyBGYWxzZQorIyMgICAgICAgPEdFTj4gIGlzIGdlbl9oZWxwZXJf QTJfYWRkKFJkViwgY3B1X2VudiwgUnNWLCBSdFYpOworIyMKK2RlZiBnZW5fdGNnX2Z1bmMoZiwg dGFnLCByZWdzLCBpbW1zKToKKyAgICBmLndyaXRlKCJzdGF0aWMgdm9pZCBnZW5lcmF0ZV8lcyhc biIgJXRhZykKKyAgICBmLndyaXRlKCIgICAgICAgICAgICAgICAgQ1BVSGV4YWdvblN0YXRlICpl bnYsXG4iKQorICAgIGYud3JpdGUoIiAgICAgICAgICAgICAgICBEaXNhc0NvbnRleHQgKmN0eCxc biIpCisgICAgZi53cml0ZSgiICAgICAgICAgICAgICAgIEluc24gKmluc24sXG4iKQorICAgIGYu d3JpdGUoIiAgICAgICAgICAgICAgICBQYWNrZXQgKnBrdClcbiIpCisgICAgZi53cml0ZSgne1xu JykKKyAgICBpZiBoZXhfY29tbW9uLm5lZWRfZWEodGFnKTogZ2VuX2RlY2xfZWFfdGNnKGYsIHRh ZykKKyAgICBpPTAKKyAgICAjIyBEZWNsYXJlIGFsbCB0aGUgb3BlcmFuZHMgKHJlZ3MgYW5kIGlt bWVkaWF0ZXMpCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6Cisg ICAgICAgIGdlbnB0cl9kZWNsX29wbihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1y ZWdzLCBpKQorICAgICAgICBpICs9IDEKKyAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGlu IGltbXM6CisgICAgICAgIGdlbnB0cl9kZWNsX2ltbShmLGltbWxldHQpCisKKyAgICBpZiAnQV9Q UklWJyBpbiBoZXhfY29tbW9uLmF0dHJpYmRpY3RbdGFnXToKKyAgICAgICAgZi53cml0ZSgnICAg IGZDSEVDS0ZPUlBSSVYoKTtcbicpCisgICAgaWYgJ0FfR1VFU1QnIGluIGhleF9jb21tb24uYXR0 cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCcgICAgZkNIRUNLRk9SR1VFU1QoKTtcbicp CisKKyAgICAjIyBSZWFkIGFsbCB0aGUgaW5wdXRzCisgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9z cyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChoZXhfY29tbW9uLmlzX3JlYWQocmVnaWQp KToKKyAgICAgICAgICAgIGdlbnB0cl9zcmNfcmVhZF9vcG4oZixyZWd0eXBlLHJlZ2lkLHRhZykK KworICAgIGlmICggaGV4X2NvbW1vbi5za2lwX3FlbXVfaGVscGVyKHRhZykgKToKKyAgICAgICAg Zi53cml0ZSgiICAgIGZHRU5fVENHXyVzKCVzKTtcbiIgJSAodGFnLCBoZXhfY29tbW9uLnNlbWRp Y3RbdGFnXSkpCisgICAgZWxzZToKKyAgICAgICAgIyMgR2VuZXJhdGUgdGhlIGNhbGwgdG8gdGhl IGhlbHBlcgorICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAg ICAgICAgICBnZW5faGVscGVyX2RlY2xfaW1tKGYsaW1tbGV0dCkKKyAgICAgICAgaWYgaGV4X2Nv bW1vbi5uZWVkX3BhcnQxKHRhZyk6CisgICAgICAgICAgICBmLndyaXRlKCIgICAgVENHdiBwYXJ0 MSA9IHRjZ19jb25zdF90bChpbnNuLT5wYXJ0MSk7XG4iKQorICAgICAgICBpZiBoZXhfY29tbW9u Lm5lZWRfc2xvdCh0YWcpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIFRDR3Ygc2xvdCA9IHRj Z19jb25zdF90bChpbnNuLT5zbG90KTtcbiIpCisgICAgICAgIGYud3JpdGUoIiAgICBnZW5faGVs cGVyXyVzKCIgJSAodGFnKSkKKyAgICAgICAgaT0wCisgICAgICAgICMjIElmIHRoZXJlIGlzIGEg c2NhbGFyIHJlc3VsdCwgaXQgaXMgdGhlIHJldHVybiB0eXBlCisgICAgICAgIGZvciByZWd0eXBl LHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21tb24u aXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY2FsbF9vcG4o ZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAg ICBpICs9IDEKKyAgICAgICAgaWYgKGkgPiAwKTogZi53cml0ZSgiLCAiKQorICAgICAgICBmLndy aXRlKCJjcHVfZW52IikKKyAgICAgICAgaT0xCisgICAgICAgIGZvciByZWd0eXBlLHJlZ2lkLHRv c3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICAgICAgaWYgKGhleF9jb21tb24uaXNfcmVhZChy ZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0 eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAg ICAgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICAgICAgZ2Vu X2hlbHBlcl9jYWxsX2ltbShmLGltbWxldHQpCisKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVk X3Nsb3QodGFnKTogZi53cml0ZSgiLCBzbG90IikKKyAgICAgICAgaWYgaGV4X2NvbW1vbi5uZWVk X3BhcnQxKHRhZyk6IGYud3JpdGUoIiwgcGFydDEiICkKKyAgICAgICAgZi53cml0ZSgiKTtcbiIp CisgICAgICAgIGlmIGhleF9jb21tb24ubmVlZF9zbG90KHRhZyk6CisgICAgICAgICAgICBmLndy aXRlKCIgICAgdGNnX3RlbXBfZnJlZShzbG90KTtcbiIpCisgICAgICAgIGlmIGhleF9jb21tb24u bmVlZF9wYXJ0MSh0YWcpOgorICAgICAgICAgICAgZi53cml0ZSgiICAgIHRjZ190ZW1wX2ZyZWUo cGFydDEpO1xuIikKKyAgICAgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBpbW1zOgor ICAgICAgICAgICAgZ2VuX2hlbHBlcl9mcmVlX2ltbShmLGltbWxldHQpCisKKyAgICAjIyBXcml0 ZSBhbGwgdGhlIG91dHB1dHMKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4g cmVnczoKKyAgICAgICAgaWYgKGhleF9jb21tb24uaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAg ICAgICAgZ2VucHRyX2RzdF93cml0ZV9vcG4oZixyZWd0eXBlLCByZWdpZCwgdGFnKQorCisgICAg IyMgRnJlZSBhbGwgdGhlIG9wZXJhbmRzIChyZWdzIGFuZCBpbW1lZGlhdGVzKQorICAgIGlmIGhl eF9jb21tb24ubmVlZF9lYSh0YWcpOiBnZW5fZnJlZV9lYV90Y2coZikKKyAgICBmb3IgcmVndHlw ZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgZ2VucHRyX2ZyZWVfb3BuKGYs cmVndHlwZSxyZWdpZCxpLHRhZykKKyAgICAgICAgaSArPSAxCisKKyAgICBmLndyaXRlKCJ9XG5c biIpCisKK2RlZiBnZW5fZGVmX3RjZ19mdW5jKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6Cisg ICAgcmVncyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIGdl bl90Y2dfZnVuYyhmLCB0YWcsIHJlZ3MsIGltbXMpCisKK2RlZiBtYWluKCk6CisgICAgaGV4X2Nv bW1vbi5yZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIGhleF9jb21tb24ucmVh ZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisgICAgaGV4X2NvbW1vbi5yZWFkX292ZXJyaWRl c19maWxlKHN5cy5hcmd2WzNdKQorICAgIGhleF9jb21tb24uY2FsY3VsYXRlX2F0dHJpYnMoKQor ICAgIHRhZ3JlZ3MgPSBoZXhfY29tbW9uLmdldF90YWdyZWdzKCkKKyAgICB0YWdpbW1zID0gaGV4 X2NvbW1vbi5nZXRfdGFnaW1tcygpCisKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbNF0sICd3Jykg YXMgZjoKKyAgICAgICAgZi53cml0ZSgiI2lmbmRlZiBIRVhBR09OX1RDR19GVU5DU19IXG4iKQor ICAgICAgICBmLndyaXRlKCIjZGVmaW5lIEhFWEFHT05fVENHX0ZVTkNTX0hcblxuIikKKworICAg ICAgICBmb3IgdGFnIGluIGhleF9jb21tb24udGFnczoKKyAgICAgICAgICAgICMjIFNraXAgdGhl IHByaXYgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgICBpZiAoICJBX1BSSVYiIGluIGhleF9jb21t b24uYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg ICAgICAjIyBTa2lwIHRoZSBndWVzdCBpbnN0cnVjdGlvbnMKKyAgICAgICAgICAgIGlmICggIkFf R1VFU1QiIGluIGhleF9jb21tb24uYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgICAg IGNvbnRpbnVlCisgICAgICAgICAgICAjIyBTa2lwIHRoZSBkaWFnIGluc3RydWN0aW9ucworICAg ICAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWciICkgOgorICAgICAgICAgICAgICAgIGNvbnRp bnVlCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzAiICkgOgorICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzEiICkgOgorICAg ICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGdlbl9kZWZfdGNnX2Z1bmMoZiwg dGFnLCB0YWdyZWdzLCB0YWdpbW1zKQorCisgICAgICAgIGYud3JpdGUoIiNlbmRpZiAgICAvKiBI RVhBR09OX1RDR19GVU5DU19IICovXG4iKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgor ICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vaGV4X2NvbW1vbi5weSBiL3Rh cmdldC9oZXhhZ29uL2hleF9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uMjM2MDc3MgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hleF9jb21t b24ucHkKQEAgLTAsMCArMSwyMTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMj ICBDb3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMu IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworCiti ZWhkaWN0ID0ge30gICAgICAgICAgIyB0YWcgLT5iZWhhdmlvcgorc2VtZGljdCA9IHt9ICAgICAg ICAgICMgdGFnIC0+IHNlbWFudGljcworYXR0cmliZGljdCA9IHt9ICAgICAgICMgdGFnIC0+IGF0 dHJpYnV0ZXMKK21hY3JvcyA9IHt9ICAgICAgICAgICAjIG1hY3JvIC0+IG1hY3JvIGluZm9ybWF0 aW9uLi4uCithdHRyaWJpbmZvID0ge30gICAgICAgIyBSZWdpc3RlciBpbmZvcm1hdGlvbiBhbmQg bWlzYwordGFncyA9IFtdICAgICAgICAgICAgICMgbGlzdCBvZiBhbGwgdGFncworb3ZlcnJpZGVz ID0ge30gICAgICAgICMgdGFncyB3aXRoIGhlbHBlciBvdmVycmlkZXMKKworIyBXZSBzaG91bGQg ZG8gdGhpcyBhcyBhIGhhc2ggZm9yIHBlcmZvcm1hbmNlLAorIyBidXQgdG8ga2VlcCBvcmRlciBs ZXQncyBrZWVwIGl0IGFzIGEgbGlzdC4KK2RlZiB1bmlxdWlmeShzZXEpOgorICAgIHNlZW4gPSBz ZXQoKQorICAgIHNlZW5fYWRkID0gc2Vlbi5hZGQKKyAgICByZXR1cm4gW3ggZm9yIHggaW4gc2Vx IGlmIHggbm90IGluIHNlZW4gYW5kIG5vdCBzZWVuX2FkZCh4KV0KKworcmVncmUgPSByZS5jb21w aWxlKAorICAgIHIiKCg/PCFEVVApW01OT1JDUFFYU0dWWkFdKShbc3R1dnd4eXpkZWZnXSspKFsu XT9bTGxIaF0/KShcZCtTPykiKQoraW1tcmUgPSByZS5jb21waWxlKHIiWyNdKFtyUnNTdVVtXSko XGQrKSg/Ols6XShcZCspKT8iKQorcmVnX29yX2ltbXJlID0gXAorICAgIHJlLmNvbXBpbGUociIo KCg/PCFEVVApW01OUkNPUFFYU0dWWkFdKShbc3R1dnd4eXpkZWZnXSspIiArIFwKKyAgICAgICAg ICAgICAgICAiKFsuXT9bTGxIaF0/KShcZCtTPykpfChbI10oW3JSc1N1VW1dKShcZCspWzpdPyhc ZCspPykiKQorcmVsaW1tcmUgPSByZS5jb21waWxlKHIiWyNdKFtyUl0pKFxkKykoPzpbOl0oXGQr KSk/IikKK2Fic2ltbXJlID0gcmUuY29tcGlsZShyIlsjXShbc1N1VW1dKShcZCspKD86WzpdKFxk KykpPyIpCisKK2ZpbmlzaGVkX21hY3JvcyA9IHNldCgpCisKK2RlZiBleHBhbmRfbWFjcm9fYXR0 cmlicyhtYWNybyxhbGxtYWNfcmUpOgorICAgIGlmIG1hY3JvLmtleSBub3QgaW4gZmluaXNoZWRf bWFjcm9zOgorICAgICAgICAjIEdldCBhIGxpc3Qgb2YgYWxsIHRoaW5ncyB0aGF0IG1pZ2h0IGJl IG1hY3JvcworICAgICAgICBsID0gYWxsbWFjX3JlLmZpbmRhbGwobWFjcm8uYmVoKQorICAgICAg ICBmb3Igc3VibWFjcm8gaW4gbDoKKyAgICAgICAgICAgIGlmIG5vdCBzdWJtYWNybzogY29udGlu dWUKKyAgICAgICAgICAgIGlmIG5vdCBtYWNyb3Nbc3VibWFjcm9dOgorICAgICAgICAgICAgICAg IHJhaXNlIEV4Y2VwdGlvbigiQ291bGRuJ3QgZmluZCBtYWNybzogPCVzPiIgJSBsKQorICAgICAg ICAgICAgbWFjcm8uYXR0cmlicyB8PSBleHBhbmRfbWFjcm9fYXR0cmlicygKKyAgICAgICAgICAg ICAgICBtYWNyb3Nbc3VibWFjcm9dLCBhbGxtYWNfcmUpCisgICAgICAgICAgICBmaW5pc2hlZF9t YWNyb3MuYWRkKG1hY3JvLmtleSkKKyAgICByZXR1cm4gbWFjcm8uYXR0cmlicworCitpbW1leHRy ZSA9IHJlLmNvbXBpbGUocidmKE1VU1RfKT9JTU1FWFRbKF0oW1V1U3NScl0pJykKK2RlZiBjYWxj dWxhdGVfYXR0cmlicygpOgorICAgICMgUmVjdXJzZSBkb3duIG1hY3JvcywgZmluZCBhdHRyaWJ1 dGVzIGZyb20gc3ViLW1hY3JvcworICAgIG1hY3JvVmFsdWVzID0gbGlzdChtYWNyb3MudmFsdWVz KCkpCisgICAgYWxsbWFjcm9zX3Jlc3RyID0gInwiLmpvaW4oc2V0KFsgbS5yZS5wYXR0ZXJuIGZv ciBtIGluIG1hY3JvVmFsdWVzIF0pKQorICAgIGFsbG1hY3Jvc19yZSA9IHJlLmNvbXBpbGUoYWxs bWFjcm9zX3Jlc3RyKQorICAgIGZvciBtYWNybyBpbiBtYWNyb1ZhbHVlczoKKyAgICAgICAgZXhw YW5kX21hY3JvX2F0dHJpYnMobWFjcm8sYWxsbWFjcm9zX3JlKQorICAgICMgQXBwZW5kIGF0dHJp YnV0ZXMgdG8gYWxsIGluc3RydWN0aW9ucworICAgIGZvciB0YWcgaW4gdGFnczoKKyAgICAgICAg Zm9yIG1hY25hbWUgaW4gYWxsbWFjcm9zX3JlLmZpbmRhbGwoc2VtZGljdFt0YWddKToKKyAgICAg ICAgICAgIGlmIG5vdCBtYWNuYW1lOiBjb250aW51ZQorICAgICAgICAgICAgbWFjcm8gPSBtYWNy b3NbbWFjbmFtZV0KKyAgICAgICAgICAgIGF0dHJpYmRpY3RbdGFnXSB8PSBzZXQobWFjcm8uYXR0 cmlicykKKworZGVmIFNFTUFOVElDUyh0YWcsIGJlaCwgc2VtKToKKyAgICAjcHJpbnQgdGFnLGJl aCxzZW0KKyAgICBiZWhkaWN0W3RhZ10gPSBiZWgKKyAgICBzZW1kaWN0W3RhZ10gPSBzZW0KKyAg ICBhdHRyaWJkaWN0W3RhZ10gPSBzZXQoKQorICAgIHRhZ3MuYXBwZW5kKHRhZykgICAgICAgICMg ZGljdHMgaGF2ZSBubyBvcmRlciwgdGhpcyBpcyBmb3Igb3JkZXIKKworZGVmIEFUVFJJQlVURVMo dGFnLCBhdHRyaWJzdHJpbmcpOgorICAgIGF0dHJpYnN0cmluZyA9IFwKKyAgICAgICAgYXR0cmli c3RyaW5nLnJlcGxhY2UoIkFUVFJJQlMiLCIiKS5yZXBsYWNlKCIoIiwiIikucmVwbGFjZSgiKSIs IiIpCisgICAgaWYgbm90IGF0dHJpYnN0cmluZzoKKyAgICAgICAgcmV0dXJuCisgICAgYXR0cmli cyA9IGF0dHJpYnN0cmluZy5zcGxpdCgiLCIpCisgICAgZm9yIGF0dHJpYiBpbiBhdHRyaWJzOgor ICAgICAgICBhdHRyaWJkaWN0W3RhZ10uYWRkKGF0dHJpYi5zdHJpcCgpKQorCitjbGFzcyBNYWNy byhvYmplY3QpOgorICAgIF9fc2xvdHNfXyA9IFsna2V5JywnbmFtZScsICdiZWgnLCAnYXR0cmli cycsICdyZSddCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJlaCwgYXR0cmlicyk6Cisg ICAgICAgIHNlbGYua2V5ID0gbmFtZQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAg IHNlbGYuYmVoID0gYmVoCisgICAgICAgIHNlbGYuYXR0cmlicyA9IHNldChhdHRyaWJzKQorICAg ICAgICBzZWxmLnJlID0gcmUuY29tcGlsZSgiXFxiIiArIG5hbWUgKyAiXFxiIikKKworZGVmIE1B Q1JPQVRUUklCKG1hY25hbWUsYmVoLGF0dHJpYnN0cmluZyk6CisgICAgYXR0cmlic3RyaW5nID0g YXR0cmlic3RyaW5nLnJlcGxhY2UoIigiLCIiKS5yZXBsYWNlKCIpIiwiIikKKyAgICBpZiBhdHRy aWJzdHJpbmc6CisgICAgICAgIGF0dHJpYnMgPSBhdHRyaWJzdHJpbmcuc3BsaXQoIiwiKQorICAg IGVsc2U6CisgICAgICAgIGF0dHJpYnMgPSBbXQorICAgIG1hY3Jvc1ttYWNuYW1lXSA9IE1hY3Jv KG1hY25hbWUsYmVoLGF0dHJpYnMpCisKK2RlZiBjb21wdXRlX3RhZ19yZWdzKHRhZyk6CisgICAg cmV0dXJuIHVuaXF1aWZ5KHJlZ3JlLmZpbmRhbGwoYmVoZGljdFt0YWddKSkKKworZGVmIGNvbXB1 dGVfdGFnX2ltbWVkaWF0ZXModGFnKToKKyAgICByZXR1cm4gdW5pcXVpZnkoaW1tcmUuZmluZGFs bChiZWhkaWN0W3RhZ10pKQorCisjIworIyMgIHRhZ3JlZ3MgaXMgdGhlIG1haW4gZGF0YSBzdHJ1 Y3R1cmUgd2UnbGwgdXNlCisjIyAgdGFncmVnc1t0YWddIHdpbGwgY29udGFpbiB0aGUgcmVnaXN0 ZXJzIHVzZWQgYnkgYW4gaW5zdHJ1Y3Rpb24KKyMjICBXaXRoaW4gZWFjaCBlbnRyeSwgd2UnbGwg dXNlIHRoZSByZWd0eXBlIGFuZCByZWdpZCBmaWVsZHMKKyMjICAgICAgcmVndHlwZSBjYW4gYmUg b25lIG9mIHRoZSBmb2xsb3dpbmcKKyMjICAgICAgICAgIEMgICAgICAgICAgICAgICAgY29udHJv bCByZWdpc3RlcgorIyMgICAgICAgICAgTiAgICAgICAgICAgICAgICBuZXcgcmVnaXN0ZXIgdmFs dWUKKyMjICAgICAgICAgIFAgICAgICAgICAgICAgICAgcHJlZGljYXRlIHJlZ2lzdGVyCisjIyAg ICAgICAgICBSICAgICAgICAgICAgICAgIEdQUiByZWdpc3RlcgorIyMgICAgICAgICAgTSAgICAg ICAgICAgICAgICBtb2RpZmllciByZWdpc3RlcgorIyMgICAgICByZWdpZCBjYW4gYmUgb25lIG9m IHRoZSBmb2xsb3dpbmcKKyMjICAgICAgICAgIGQsIGUgICAgICAgICAgICAgZGVzdGluYXRpb24g cmVnaXN0ZXIKKyMjICAgICAgICAgIGRkICAgICAgICAgICAgICAgZGVzdGluYXRpb24gcmVnaXN0 ZXIgcGFpcgorIyMgICAgICAgICAgcywgdCwgdSwgdiwgdyAgICBzb3VyY2UgcmVnaXN0ZXIKKyMj ICAgICAgICAgIHNzLCB0dCwgdXUsIHZ2ICAgc291cmNlIHJlZ2lzdGVyIHBhaXIKKyMjICAgICAg ICAgIHgsIHkgICAgICAgICAgICAgcmVhZC13cml0ZSByZWdpc3RlcgorIyMgICAgICAgICAgeHgs IHl5ICAgICAgICAgICByZWFkLXdyaXRlIHJlZ2lzdGVyIHBhaXIKKyMjCitkZWYgZ2V0X3RhZ3Jl Z3MoKToKKyAgICByZXR1cm4gZGljdCh6aXAodGFncywgbGlzdChtYXAoY29tcHV0ZV90YWdfcmVn cywgdGFncykpKSkKKworZGVmIGdldF90YWdpbW1zKCk6CisgICAgcmV0dXJuIGRpY3QoemlwKHRh Z3MsIGxpc3QobWFwKGNvbXB1dGVfdGFnX2ltbWVkaWF0ZXMsIHRhZ3MpKSkpCisKK2RlZiBpc19w YWlyKHJlZ2lkKToKKyAgICByZXR1cm4gbGVuKHJlZ2lkKSA9PSAyCisKK2RlZiBpc19zaW5nbGUo cmVnaWQpOgorICAgIHJldHVybiBsZW4ocmVnaWQpID09IDEKKworZGVmIGlzX3dyaXR0ZW4ocmVn aWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAiZGV4eSIKKworZGVmIGlzX3dyaXRlb25seShy ZWdpZCk6CisgICAgcmV0dXJuIHJlZ2lkWzBdIGluICJkZSIKKworZGVmIGlzX3JlYWQocmVnaWQp OgorICAgIHJldHVybiByZWdpZFswXSBpbiAic3R1dnd4eSIKKworZGVmIGlzX3JlYWR3cml0ZShy ZWdpZCk6CisgICAgcmV0dXJuIHJlZ2lkWzBdIGluICJ4eSIKKworZGVmIGlzX3NjYWxhcl9yZWco cmVndHlwZSk6CisgICAgcmV0dXJuIHJlZ3R5cGUgaW4gIlJQQyIKKworZGVmIGlzX29sZF92YWwo cmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgcmV0dXJuIHJlZ3R5cGUrcmVnaWQrJ1YnIGluIHNl bWRpY3RbdGFnXQorCitkZWYgaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICBy ZXR1cm4gcmVndHlwZStyZWdpZCsnTicgaW4gc2VtZGljdFt0YWddCisKK2RlZiBuZWVkX3Nsb3Qo dGFnKToKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGF0dHJpYmRpY3RbdGFnXSBvcgorICAgICAg ICAnQV9TVE9SRScgaW4gYXR0cmliZGljdFt0YWddIG9yCisgICAgICAgICdBX0xPQUQnIGluIGF0 dHJpYmRpY3RbdGFnXSk6CisgICAgICAgIHJldHVybiAxCisgICAgZWxzZToKKyAgICAgICAgcmV0 dXJuIDAKKworZGVmIG5lZWRfcGFydDEodGFnKToKKyAgICByZXR1cm4gcmUuY29tcGlsZShyImZQ QVJUMSIpLnNlYXJjaChzZW1kaWN0W3RhZ10pCisKK2RlZiBuZWVkX2VhKHRhZyk6CisgICAgcmV0 dXJuIHJlLmNvbXBpbGUociJcYkVBXGIiKS5zZWFyY2goc2VtZGljdFt0YWddKQorCitkZWYgc2tp cF9xZW11X2hlbHBlcih0YWcpOgorICAgIHJldHVybiB0YWcgaW4gb3ZlcnJpZGVzLmtleXMoKQor CitkZWYgaW1tX25hbWUoaW1tbGV0dCk6CisgICAgcmV0dXJuICIlc2lWIiAlIGltbWxldHQKKwor ZGVmIHJlYWRfc2VtYW50aWNzX2ZpbGUobmFtZSk6CisgICAgZXZhbF9saW5lID0gIiIKKyAgICBm b3IgbGluZSBpbiBvcGVuKG5hbWUsICdydCcpLnJlYWRsaW5lcygpOgorICAgICAgICBpZiBub3Qg bGluZS5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICBldmFsX2xpbmUgKz0gbGluZQorICAg ICAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgiXFxcbiIpOgorICAgICAgICAgICAgICAgIGV2YWxf bGluZS5yc3RyaXAoIlxcXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBl dmFsKGV2YWxfbGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGV2YWxfbGluZSA9ICIiCisK K2RlZiByZWFkX2F0dHJpYnNfZmlsZShuYW1lKToKKyAgICBhdHRyaWJyZSA9IHJlLmNvbXBpbGUo cidERUZfQVRUUklCXCgoW0EtWmEtejAtOV9dKyksIChbXixdKiksICcgKworICAgICAgICAgICAg ciciKFtBLVphLXowLTlfXC5dKikiLCAiKFtBLVphLXowLTlfXC5dKikiXCknKQorICAgIGZvciBs aW5lIGluIG9wZW4obmFtZSwgJ3J0JykucmVhZGxpbmVzKCk6CisgICAgICAgIGlmIG5vdCBhdHRy aWJyZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIChhdHRyaWJf YmFzZSxkZXNjcixycmVnLHdyZWcpID0gYXR0cmlicmUuZmluZGFsbChsaW5lKVswXQorICAgICAg ICBhdHRyaWJfYmFzZSA9ICdBXycgKyBhdHRyaWJfYmFzZQorICAgICAgICBhdHRyaWJpbmZvW2F0 dHJpYl9iYXNlXSA9IHsncnJlZyc6cnJlZywgJ3dyZWcnOndyZWcsICdkZXNjcic6ZGVzY3J9CisK K2RlZiByZWFkX292ZXJyaWRlc19maWxlKG5hbWUpOgorICAgIG92ZXJyaWRlcmUgPSByZS5jb21w aWxlKCIjZGVmaW5lIGZHRU5fVENHXyhbQS1aYS16MC05X10rKVwoLioiKQorICAgIGZvciBsaW5l IGluIG9wZW4obmFtZSwgJ3J0JykucmVhZGxpbmVzKCk6CisgICAgICAgIGlmIG5vdCBvdmVycmlk ZXJlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdGFnID0gb3Zl cnJpZGVyZS5maW5kYWxsKGxpbmUpWzBdCisgICAgICAgIG92ZXJyaWRlc1t0YWddID0gVHJ1ZQot LSAKMi43LjQKCg==