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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id ED284C4332F for ; Fri, 16 Dec 2022 20:51:03 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p6HeJ-0002t0-1K; Fri, 16 Dec 2022 15:49:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p6HeB-0002r7-Ef for qemu-devel@nongnu.org; Fri, 16 Dec 2022 15:49:36 -0500 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p6He4-0004Q8-29 for qemu-devel@nongnu.org; Fri, 16 Dec 2022 15:49:35 -0500 Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2BGGlkRE009351; Fri, 16 Dec 2022 20:49:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=qcppdkim1; bh=a0YzA4peuL06SyePgur/w6Dfu8KuR9zU4bxwbRtfvgc=; b=LnmXiS6lSt2ae5STCl/nFZJotoKK8GEsDhTCR0ta7Ipgn4W9R6NkL6NvrtU2g0rCAbxk L6nowPE0EGD8dcor3UTFzzsP5YwtgaTYW4VzRhsYiXUaNpKroEITYrIkYEbhO4W+5oKg 5co0LiOIqK/0RN4SWP2jtHlx9REGgCHPSSQ6r3GwPMIMXtrx8mfIcCT/qS25GmQtDxgD W8rC92lL060JKURAxEQOB/naEh5JWrMxX6ihBZumG5Y2LwNfHA7qpfa+NNT1zC8wP1Y1 1/GiOg50/MuJiTr8ctKpnXC0EUmedEhAENeJk359SjsXXz9UD4iszXvjlSMcH2nqQX/g 7g== Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3mg8e6bpq9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 16 Dec 2022 20:49:15 +0000 Received: from pps.filterd (NALASPPMTA05.qualcomm.com [127.0.0.1]) by NALASPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTP id 2BGKfq9J019837; Fri, 16 Dec 2022 20:49:14 GMT Received: from pps.reinject (localhost [127.0.0.1]) by NALASPPMTA05.qualcomm.com (PPS) with ESMTP id 3mgwb1gmps-1; Fri, 16 Dec 2022 20:49:14 +0000 Received: from NALASPPMTA05.qualcomm.com (NALASPPMTA05.qualcomm.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 2BGKg3rA019961; Fri, 16 Dec 2022 20:49:14 GMT Received: from hu-devc-lv-u18-c.qualcomm.com (hu-tsimpson-lv.qualcomm.com [10.47.235.220]) by NALASPPMTA05.qualcomm.com (PPS) with ESMTP id 2BGKnDBw028291; Fri, 16 Dec 2022 20:49:14 +0000 Received: by hu-devc-lv-u18-c.qualcomm.com (Postfix, from userid 47164) id 16354500120; Fri, 16 Dec 2022 12:49:13 -0800 (PST) From: Taylor Simpson To: qemu-devel@nongnu.org Cc: tsimpson@quicinc.com, richard.henderson@linaro.org, philmd@linaro.org, peter.maydell@linaro.org, bcain@quicinc.com, quic_mathbern@quicinc.com, stefanha@redhat.com, Anton Johansson , Alessandro Di Federico , Paolo Montesel Subject: [PULL 19/21] target/hexagon: import parser for idef-parser Date: Fri, 16 Dec 2022 12:48:43 -0800 Message-Id: <20221216204845.19290-20-tsimpson@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221216204845.19290-1-tsimpson@quicinc.com> References: <20221216204845.19290-1-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: xSA5BYKtZSxZKaHMtRcnTXk7tw4aWD9k X-Proofpoint-ORIG-GUID: xSA5BYKtZSxZKaHMtRcnTXk7tw4aWD9k X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.923,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-12-16_14,2022-12-15_02,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 mlxlogscore=544 priorityscore=1501 lowpriorityscore=0 spamscore=0 suspectscore=0 clxscore=1015 phishscore=0 mlxscore=0 adultscore=0 bulkscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2212160185 Received-SPF: pass client-ip=205.220.168.131; envelope-from=tsimpson@qualcomm.com; helo=mx0a-0031df01.pphosted.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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.25, RCVD_IN_DNSWL_LOW=-0.7, 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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org RnJvbTogQW50b24gSm9oYW5zc29uIDxhbmpvQHJldi5uZz4KClNpZ25lZC1vZmYtYnk6IEFsZXNz YW5kcm8gRGkgRmVkZXJpY28gPGFsZUByZXYubmc+ClNpZ25lZC1vZmYtYnk6IFBhb2xvIE1vbnRl c2VsIDxiYWJ1c2hAcmV2Lm5nPgpTaWduZWQtb2ZmLWJ5OiBBbnRvbiBKb2hhbnNzb24gPGFuam9A cmV2Lm5nPgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5j b20+ClJldmlld2VkLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5jb20+Ck1l c3NhZ2UtSWQ6IDwyMDIyMDkyMzE3MzgzMS4yMjc1NTEtMTAtYW5qb0ByZXYubmc+Ci0tLQogdGFy Z2V0L2hleGFnb24vaWRlZi1wYXJzZXIvcGFyc2VyLWhlbHBlcnMuaCB8ICAzNzYgKysrCiB0YXJn ZXQvaGV4YWdvbi9pZGVmLXBhcnNlci9wYXJzZXItaGVscGVycy5jIHwgMjM2MCArKysrKysrKysr KysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9pZGVmLXBhcnNlci9pZGVmLXBhcnNlci55ICAgIHwg IDk2NSArKysrKysrKwogdGFyZ2V0L2hleGFnb24vbWVzb24uYnVpbGQgICAgICAgICAgICAgICAg ICB8ICAgMjkgKwogNCBmaWxlcyBjaGFuZ2VkLCAzNzMwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9pZGVmLXBhcnNlci9wYXJzZXItaGVscGVycy5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vaWRlZi1wYXJzZXIvcGFyc2VyLWhlbHBl cnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2lkZWYtcGFyc2VyL2lkZWYt cGFyc2VyLnkKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9pZGVmLXBhcnNlci9wYXJzZXIt aGVscGVycy5oIGIvdGFyZ2V0L2hleGFnb24vaWRlZi1wYXJzZXIvcGFyc2VyLWhlbHBlcnMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yNzY2Mjk2NDE3Ci0tLSAvZGV2 L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vaWRlZi1wYXJzZXIvcGFyc2VyLWhlbHBlcnMuaApA QCAtMCwwICsxLDM3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIyIHJldi5uZyBM YWJzIFNybC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgUEFSU0VSX0hFTFBFUlNfSAorI2RlZmlu ZSBQQVJTRVJfSEVMUEVSU19ICisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxpbnR0 eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAidGNn L3RjZy1jb25kLmgiCisKKyNpbmNsdWRlICJpZGVmLXBhcnNlci50YWIuaCIKKyNpbmNsdWRlICJp ZGVmLXBhcnNlci55eS5oIgorI2luY2x1ZGUgImlkZWYtcGFyc2VyLmgiCisKKy8qIERlY29tbWVu dCB0aGlzIHRvIGRpc2FibGUgeXlhc3NlcnRzICovCisvKiAjZGVmaW5lIE5ERUJVRyAqLworCisj ZGVmaW5lIEVSUl9MSU5FX0NPTlRFWFQgNDAKKworI2RlZmluZSBTVEFSVF9DT01NRU5UICIvIiAi KiIKKyNkZWZpbmUgRU5EX0NPTU1FTlQgIioiICIvIgorCit2b2lkIHl5ZXJyb3IoWVlMVFlQRSAq bG9jcCwKKyAgICAgICAgICAgICB5eXNjYW5fdCBzY2FubmVyIF9fYXR0cmlidXRlX18oKHVudXNl ZCkpLAorICAgICAgICAgICAgIENvbnRleHQgKmMsCisgICAgICAgICAgICAgY29uc3QgY2hhciAq cyk7CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIHl5YXNzZXJ0KGNvbnRleHQsIGxvY3AsIGNv bmRpdGlvbiwgbXNnKSAgICAgICAgICAgICAgXAorICAgIGlmICghKGNvbmRpdGlvbikpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXllcnJvcihsb2Nw LCAoY29udGV4dCktPnNjYW5uZXIsIChjb250ZXh0KSwgKG1zZykpOyBcCisgICAgfQorI2VuZGlm CisKK2Jvb2wgaXNfZGlyZWN0X3ByZWRpY2F0ZShIZXhWYWx1ZSAqdmFsdWUpOworCitib29sIGlz X2luc2lkZV90ZXJuYXJ5KENvbnRleHQgKmMpOworCisvKioKKyAqIFByaW50IGZ1bmN0aW9ucwor ICovCisKK3ZvaWQgc3RyX3ByaW50KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIGNvbnN0IGNo YXIgKnN0cmluZyk7CisKK3ZvaWQgdWludDhfcHJpbnQoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9j cCwgdWludDhfdCAqbnVtKTsKKwordm9pZCB1aW50NjRfcHJpbnQoQ29udGV4dCAqYywgWVlMVFlQ RSAqbG9jcCwgdWludDY0X3QgKm51bSk7CisKK3ZvaWQgaW50X3ByaW50KENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3AsIGludCAqbnVtKTsKKwordm9pZCB1aW50X3ByaW50KENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3AsIHVuc2lnbmVkICpudW0pOworCit2b2lkIHRtcF9wcmludChDb250ZXh0ICpj LCBZWUxUWVBFICpsb2NwLCBIZXhUbXAgKnRtcCk7CisKK3ZvaWQgcHJlZF9wcmludChDb250ZXh0 ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhQcmVkICpwcmVkLCBib29sIGlzX2RvdG5ldyk7CisKK3Zv aWQgcmVnX2NvbXBvc2UoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4UmVnICpyZWcsIGNo YXIgcmVnX2lkWzVdKTsKKwordm9pZCByZWdfcHJpbnQoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9j cCwgSGV4UmVnICpyZWcpOworCit2b2lkIGltbV9wcmludChDb250ZXh0ICpjLCBZWUxUWVBFICps b2NwLCBIZXhJbW0gKmltbSk7CisKK3ZvaWQgdmFyX3ByaW50KENvbnRleHQgKmMsIFlZTFRZUEUg KmxvY3AsIEhleFZhciAqdmFyKTsKKwordm9pZCBydmFsdWVfcHJpbnQoQ29udGV4dCAqYywgWVlM VFlQRSAqbG9jcCwgdm9pZCAqcG9pbnRlcik7CisKK3ZvaWQgb3V0X2Fzc2VydChDb250ZXh0ICpj LCBZWUxUWVBFICpsb2NwLCB2b2lkICpkdW1teSk7CisKKy8qKgorICogQ29waWVzIG91dHB1dCBj b2RlIGJ1ZmZlciBpbnRvIHN0ZG91dAorICovCit2b2lkIGNvbW1pdChDb250ZXh0ICpjKTsKKwor I2RlZmluZSBPVVRfSU1QTChjLCBsb2NwLCB4KSAgICAgICAgICAgICAgICAgICAgXAorICAgIF9H ZW5lcmljKCooeCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjaGFy OiAgICAgIHN0cl9wcmludCwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1aW50OF90OiAg IHVpbnQ4X3ByaW50LCAgICAgICAgICAgICAgICAgXAorICAgICAgICB1aW50NjRfdDogIHVpbnQ2 NF9wcmludCwgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQ6ICAgICAgIGludF9wcmludCwg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZDogIHVpbnRfcHJpbnQsICAgICAg ICAgICAgICAgICAgXAorICAgICAgICBIZXhWYWx1ZTogIHJ2YWx1ZV9wcmludCwgICAgICAgICAg ICAgICAgXAorICAgICAgICBkZWZhdWx0OiAgIG91dF9hc3NlcnQgICAgICAgICAgICAgICAgICAg XAorICAgICkoYywgbG9jcCwgeCk7CisKKy8qIEZPUkVBQ0ggbWFjcm8gKi8KKyNkZWZpbmUgRkVf MShjLCBsb2NwLCBXSEFULCBYKSBXSEFUKGMsIGxvY3AsIFgpCisjZGVmaW5lIEZFXzIoYywgbG9j cCwgV0hBVCwgWCwgLi4uKSBcCisgICAgV0hBVChjLCBsb2NwLCBYKUZFXzEoYywgbG9jcCwgV0hB VCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEZFXzMoYywgbG9jcCwgV0hBVCwgWCwgLi4uKSBcCisg ICAgV0hBVChjLCBsb2NwLCBYKUZFXzIoYywgbG9jcCwgV0hBVCwgX19WQV9BUkdTX18pCisjZGVm aW5lIEZFXzQoYywgbG9jcCwgV0hBVCwgWCwgLi4uKSBcCisgICAgV0hBVChjLCBsb2NwLCBYKUZF XzMoYywgbG9jcCwgV0hBVCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEZFXzUoYywgbG9jcCwgV0hB VCwgWCwgLi4uKSBcCisgICAgV0hBVChjLCBsb2NwLCBYKUZFXzQoYywgbG9jcCwgV0hBVCwgX19W QV9BUkdTX18pCisjZGVmaW5lIEZFXzYoYywgbG9jcCwgV0hBVCwgWCwgLi4uKSBcCisgICAgV0hB VChjLCBsb2NwLCBYKUZFXzUoYywgbG9jcCwgV0hBVCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEZF XzcoYywgbG9jcCwgV0hBVCwgWCwgLi4uKSBcCisgICAgV0hBVChjLCBsb2NwLCBYKUZFXzYoYywg bG9jcCwgV0hBVCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEZFXzgoYywgbG9jcCwgV0hBVCwgWCwg Li4uKSBcCisgICAgV0hBVChjLCBsb2NwLCBYKUZFXzcoYywgbG9jcCwgV0hBVCwgX19WQV9BUkdT X18pCisjZGVmaW5lIEZFXzkoYywgbG9jcCwgV0hBVCwgWCwgLi4uKSBcCisgICAgV0hBVChjLCBs b2NwLCBYKUZFXzgoYywgbG9jcCwgV0hBVCwgX19WQV9BUkdTX18pCisvKiByZXBlYXQgYXMgbmVl ZGVkICovCisKKyNkZWZpbmUgR0VUX01BQ1JPKF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBf OCwgXzksIE5BTUUsIC4uLikgTkFNRQorCisjZGVmaW5lIEZPUl9FQUNIKGMsIGxvY3AsIGFjdGlv biwgLi4uKSAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgR0VUX01BQ1JPKF9fVkFfQVJHU19fLCAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgIEZFXzksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgIEZFXzgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgIEZFXzcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgIEZFXzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZF XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZFXzQsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZFXzMsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZFXzIsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIEZFXzEpKGMsIGxvY3AsIGFjdGlvbiwgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIF9fVkFfQVJHU19fKSAgICAgICAgICAgICAg ICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgT1VUKGMsIGxvY3AsIC4uLikgRk9SX0VBQ0go KGMpLCAobG9jcCksIE9VVF9JTVBMLCBfX1ZBX0FSR1NfXykKKworY29uc3QgY2hhciAqY21wX3N3 YXAoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgY29uc3QgY2hhciAqdHlwZSk7CisKKy8qKgor ICogVGVtcG9yYXJ5IHZhbHVlcyBjcmVhdGlvbgorICovCisKK0hleFZhbHVlIGdlbl90bXAoQ29u dGV4dCAqYywKKyAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAg ICAgdW5zaWduZWQgYml0X3dpZHRoLAorICAgICAgICAgICAgICAgICBIZXhTaWduZWRuZXNzIHNp Z25lZG5lc3MpOworCitIZXhWYWx1ZSBnZW5fdG1wX3ZhbHVlKENvbnRleHQgKmMsCisgICAgICAg ICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxvY3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRfd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcyk7CisK K0hleFZhbHVlIGdlbl9pbW1fdmFsdWUoQ29udGV4dCAqYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQp KSwKKyAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAg ICAgICAgICAgaW50IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRf d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcyk7 CisKK0hleFZhbHVlIGdlbl9pbW1fcWVtdV90bXAoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwg dW5zaWduZWQgYml0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIZXhTaWduZWRu ZXNzIHNpZ25lZG5lc3MpOworCit2b2lkIGdlbl9ydmFsdWVfZnJlZShDb250ZXh0ICpjLCBZWUxU WVBFICpsb2NwLCBIZXhWYWx1ZSAqcnZhbHVlKTsKKworSGV4VmFsdWUgcnZhbHVlX21hdGVyaWFs aXplKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpydmFsdWUpOworCitIZXhW YWx1ZSBnZW5fcnZhbHVlX2V4dGVuZChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhWYWx1 ZSAqcnZhbHVlKTsKKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV90cnVuY2F0ZShDb250ZXh0ICpjLCBZ WUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqcnZhbHVlKTsKKwordm9pZCBnZW5fdmFyaWRfYWxsb2Nh dGUoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxvY3AsCisg ICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqdmFyaWQsCisgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBiaXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBIZXhT aWduZWRuZXNzIHNpZ25lZG5lc3MpOworCisvKioKKyAqIENvZGUgZ2VuZXJhdGlvbiBmdW5jdGlv bnMKKyAqLworCitIZXhWYWx1ZSBnZW5fYmluX2NtcChDb250ZXh0ICpjLAorICAgICAgICAgICAg ICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgIFRDR0NvbmQgdHlw ZSwKKyAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpvcDEsCisgICAgICAgICAgICAgICAg ICAgICBIZXhWYWx1ZSAqb3AyKTsKKworSGV4VmFsdWUgZ2VuX2Jpbl9vcChDb250ZXh0ICpjLAor ICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICAgICBP cFR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKm9wMSwKKyAgICAgICAg ICAgICAgICAgICAgSGV4VmFsdWUgKm9wMik7CisKK0hleFZhbHVlIGdlbl9jYXN0X29wKENvbnRl eHQgKmMsCisgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAg ICAgICAgICAgSGV4VmFsdWUgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRh cmdldF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVz cyk7CisKKy8qKgorICogZ2VuX2V4dGVuZF9vcCBleHRlbmRzIGEgcmVnaW9uIG9mIHNyY193aWR0 aF9wdHIgYml0cyBzdG9yZWQgaW4gYQorICogdmFsdWVfcHRyIHRvIHRoZSBzaXplIG9mIGRzdF93 aWR0aC4gTm90ZTogc3JjX3dpZHRoX3B0ciBpcyBhCisgKiBIZXhWYWx1ZSAqIHRvIGhhbmRsZSB0 aGUgc3BlY2lhbCBjYXNlIHdoZXJlIGl0IGlzIHVua25vd24gYXQKKyAqIHRyYW5zbGF0aW9uIHRp bWUuCisgKi8KK0hleFZhbHVlIGdlbl9leHRlbmRfb3AoQ29udGV4dCAqYywKKyAgICAgICAgICAg ICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFs dWUgKnNyY193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZHN0X3dpZHRo LAorICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqdmFsdWUsCisgICAgICAgICAgICAg ICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcyk7CisKK3ZvaWQgZ2VuX3JkZXBvc2l0 X29wKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAg ICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgIEhl eFZhbHVlICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpiZWdpbiwKKyAg ICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp3aWR0aCk7CisKK3ZvaWQgZ2VuX2RlcG9zaXRf b3AoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAg ICAgICAgICAgICAgICAgSGV4VmFsdWUgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgSGV4VmFs dWUgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqaW5kZXgsCisgICAgICAg ICAgICAgICAgICAgIEhleENhc3QgKmNhc3QpOworCitIZXhWYWx1ZSBnZW5fcmV4dHJhY3Rfb3Ao Q29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAg ICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpzcmMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg d2lkdGgpOworCitIZXhWYWx1ZSBnZW5fZXh0cmFjdF9vcChDb250ZXh0ICpjLAorICAgICAgICAg ICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhl eFZhbHVlICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqaW5kZXgsCisg ICAgICAgICAgICAgICAgICAgICAgICBIZXhFeHRyYWN0ICpleHRyYWN0KTsKKworSGV4VmFsdWUg Z2VuX3JlYWRfcmVnKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpyZWcpOwor Cit2b2lkIGdlbl93cml0ZV9yZWcoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUg KnJlZywgSGV4VmFsdWUgKnZhbHVlKTsKKwordm9pZCBnZW5fYXNzaWduKENvbnRleHQgKmMsCisg ICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICBIZXhWYWx1ZSAq ZHN0LAorICAgICAgICAgICAgICAgIEhleFZhbHVlICp2YWx1ZSk7CisKK0hleFZhbHVlIGdlbl9j b252cm91bmQoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9j cCwKKyAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnNyYyk7CisKK0hleFZhbHVlIGdl bl9yb3VuZChDb250ZXh0ICpjLAorICAgICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxvY3AsCisg ICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnNyYywKKyAgICAgICAgICAgICAgICAgICBIZXhW YWx1ZSAqcG9zaXRpb24pOworCitIZXhWYWx1ZSBnZW5fY29udnJvdW5kX24oQ29udGV4dCAqYywK KyAgICAgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAg ICAgICAgICAgIEhleFZhbHVlICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFs dWUgKnBvcyk7CisKKy8qKgorICogQ2lyY3VsYXIgYWRkcmVzc2luZyBtb2RlIHdpdGggYXV0by1p bmNyZW1lbnQKKyAqLwordm9pZCBnZW5fY2lyY19vcChDb250ZXh0ICpjLAorICAgICAgICAgICAg ICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqYWRkciwKKyAg ICAgICAgICAgICAgICAgSGV4VmFsdWUgKmluY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgSGV4 VmFsdWUgKm1vZGlmaWVyKTsKKworSGV4VmFsdWUgZ2VuX2xvY250X29wKENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3AsIEhleFZhbHVlICpzcmMpOworCitIZXhWYWx1ZSBnZW5fY3Rwb3Bfb3AoQ29u dGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKnNyYyk7CisKK0hleFZhbHVlIGdlbl9y b3RsKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpzcmMsIEhleFZhbHVlICpu KTsKKworSGV4VmFsdWUgZ2VuX2RlaW50ZXJsZWF2ZShDb250ZXh0ICpjLCBZWUxUWVBFICpsb2Nw LCBIZXhWYWx1ZSAqbWl4ZWQpOworCitIZXhWYWx1ZSBnZW5faW50ZXJsZWF2ZShDb250ZXh0ICpj LAorICAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAg ICAgICAgICAgIEhleFZhbHVlICpvZGQsCisgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1 ZSAqZXZlbik7CisKK0hleFZhbHVlIGdlbl9jYXJyeV9mcm9tX2FkZChDb250ZXh0ICpjLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxvY3AsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSGV4VmFsdWUgKm9wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBI ZXhWYWx1ZSAqb3AyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpvcDMp OworCit2b2lkIGdlbl9hZGRzYXQ2NChDb250ZXh0ICpjLAorICAgICAgICAgICAgICAgICAgWVlM VFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpkc3QsCisgICAgICAgICAg ICAgICAgICBIZXhWYWx1ZSAqb3AxLAorICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKm9wMik7 CisKK3ZvaWQgZ2VuX2luc3QoQ29udGV4dCAqYywgR1N0cmluZyAqaW5hbWUpOworCit2b2lkIGdl bl9pbnN0X2luaXRfYXJncyhDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwKTsKKwordm9pZCBnZW5f aW5zdF9jb2RlKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3ApOworCit2b2lkIGdlbl9wcmVkX2Fz c2lnbihDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqbGVmdF9wcmVkLAorICAg ICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnJpZ2h0X3ByZWQpOworCit2b2lkIGdlbl9jYW5j ZWwoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCk7CisKK3ZvaWQgZ2VuX2xvYWRfY2FuY2VsKENv bnRleHQgKmMsIFlZTFRZUEUgKmxvY3ApOworCit2b2lkIGdlbl9sb2FkKENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3AsIEhleFZhbHVlICpzaXplLAorICAgICAgICAgICAgICBIZXhTaWduZWRuZXNz IHNpZ25lZG5lc3MsIEhleFZhbHVlICplYSwgSGV4VmFsdWUgKmRzdCk7CisKK3ZvaWQgZ2VuX3N0 b3JlKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpzaXplLCBIZXhWYWx1ZSAq ZWEsCisgICAgICAgICAgICAgICBIZXhWYWx1ZSAqc3JjKTsKKwordm9pZCBnZW5fc2V0aGFsZihD b250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhDYXN0ICpzaCwgSGV4VmFsdWUgKm4sCisgICAg ICAgICAgICAgICAgIEhleFZhbHVlICpkc3QsIEhleFZhbHVlICp2YWx1ZSk7CisKK3ZvaWQgZ2Vu X3NldGJpdHMoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKmhpLCBIZXhWYWx1 ZSAqbG8sCisgICAgICAgICAgICAgICAgIEhleFZhbHVlICpkc3QsIEhleFZhbHVlICp2YWx1ZSk7 CisKK3Vuc2lnbmVkIGdlbl9pZl9jb25kKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZh bHVlICpjb25kKTsKKwordW5zaWduZWQgZ2VuX2lmX2Vsc2UoQ29udGV4dCAqYywgWVlMVFlQRSAq bG9jcCwgdW5zaWduZWQgaW5kZXgpOworCitIZXhWYWx1ZSBnZW5fcnZhbHVlX3ByZWQoQ29udGV4 dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKnByZWQpOworCitIZXhWYWx1ZSBnZW5fcnZh bHVlX3ZhcihDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqdmFyKTsKKworSGV4 VmFsdWUgZ2VuX3J2YWx1ZV9tcHkoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4TXB5ICpt cHksIEhleFZhbHVlICpvcDEsCisgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqb3Ay KTsKKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV9ub3QoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwg SGV4VmFsdWUgKnZhbHVlKTsKKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV9ub3RsKENvbnRleHQgKmMs IFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICp2YWx1ZSk7CisKK0hleFZhbHVlIGdlbl9ydmFsdWVf c2F0KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFNhdCAqc2F0LCBIZXhWYWx1ZSAqbiwK KyAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp2YWx1ZSk7CisKK0hleFZhbHVlIGdl bl9ydmFsdWVfZnNjcihDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqdmFsdWUp OworCitIZXhWYWx1ZSBnZW5fcnZhbHVlX2FicyhDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBI ZXhWYWx1ZSAqdmFsdWUpOworCitIZXhWYWx1ZSBnZW5fcnZhbHVlX25lZyhDb250ZXh0ICpjLCBZ WUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqdmFsdWUpOworCitIZXhWYWx1ZSBnZW5fcnZhbHVlX2Jy ZXYoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKnZhbHVlKTsKKworSGV4VmFs dWUgZ2VuX3J2YWx1ZV90ZXJuYXJ5KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVl ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp0cnVlX2JyYW5j aCwgSGV4VmFsdWUgKmZhbHNlX2JyYW5jaCk7CisKK2NvbnN0IGNoYXIgKmNvbmRfdG9fc3RyKFRD R0NvbmQgY29uZCk7CisKK3ZvaWQgZW1pdF9oZWFkZXIoQ29udGV4dCAqYyk7CisKK3ZvaWQgZW1p dF9hcmcoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKmFyZyk7CisKK3ZvaWQg ZW1pdF9mb290ZXIoQ29udGV4dCAqYyk7CisKK3ZvaWQgdHJhY2tfc3RyaW5nKENvbnRleHQgKmMs IEdTdHJpbmcgKnMpOworCit2b2lkIGZyZWVfdmFyaWFibGVzKENvbnRleHQgKmMsIFlZTFRZUEUg KmxvY3ApOworCit2b2lkIGZyZWVfaW5zdHJ1Y3Rpb24oQ29udGV4dCAqYyk7CisKK3ZvaWQgYXNz ZXJ0X3NpZ25lZG5lc3MoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQ RSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNz KTsKKworI2VuZGlmIC8qIFBBUlNFUl9IRUxQRVJTX2ggKi8KZGlmZiAtLWdpdCBhL3RhcmdldC9o ZXhhZ29uL2lkZWYtcGFyc2VyL3BhcnNlci1oZWxwZXJzLmMgYi90YXJnZXQvaGV4YWdvbi9pZGVm LXBhcnNlci9wYXJzZXItaGVscGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjgxMTA2ODZjNTEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9pZGVm LXBhcnNlci9wYXJzZXItaGVscGVycy5jCkBAIC0wLDAgKzEsMjM2MCBAQAorLyoKKyAqICBDb3B5 cmlnaHQoYykgMjAxOS0yMDIyIHJldi5uZyBMYWJzIFNybC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K KyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNs dWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiaWRlZi1wYXJzZXIuaCIKKyNpbmNsdWRlICJwYXJz ZXItaGVscGVycy5oIgorI2luY2x1ZGUgImlkZWYtcGFyc2VyLnRhYi5oIgorI2luY2x1ZGUgImlk ZWYtcGFyc2VyLnl5LmgiCisKK3ZvaWQgeXllcnJvcihZWUxUWVBFICpsb2NwLAorICAgICAgICAg ICAgIHl5c2Nhbl90IHNjYW5uZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisgICAgICAgICAg ICAgQ29udGV4dCAqYywKKyAgICAgICAgICAgICBjb25zdCBjaGFyICpzKQoreworICAgIGNvbnN0 IGNoYXIgKmNvZGVfcHRyID0gYy0+aW5wdXRfYnVmZmVyOworCisgICAgZnByaW50ZihzdGRlcnIs ICJXQVJOSU5HICglcyk6ICclcydcbiIsIGMtPmluc3QubmFtZS0+c3RyLCBzKTsKKworICAgIGZw cmludGYoc3RkZXJyLCAiUHJvYmxlbWF0aWMgcmFuZ2U6ICIpOworICAgIGZvciAoaW50IGkgPSBs b2NwLT5maXJzdF9jb2x1bW47IGkgPCBsb2NwLT5sYXN0X2NvbHVtbjsgaSsrKSB7CisgICAgICAg IGlmIChjb2RlX3B0cltpXSAhPSAnXG4nKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVjIiwgY29kZV9wdHJbaV0pOworICAgICAgICB9CisgICAgfQorICAgIGZwcmludGYoc3RkZXJy LCAiXG4iKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7CisgICAgICAgICBpIDwgODAgJiYK KyAgICAgICAgIGNvZGVfcHRyW2xvY3AtPmZpcnN0X2NvbHVtbiAtIDEwICsgaV0gIT0gJ1wwJyAm JgorICAgICAgICAgY29kZV9wdHJbbG9jcC0+Zmlyc3RfY29sdW1uIC0gMTAgKyBpXSAhPSAnXG4n OworICAgICAgICAgaSsrKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWMiLCBjb2RlX3B0 cltsb2NwLT5maXJzdF9jb2x1bW4gLSAxMCArIGldKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRl cnIsICJcbiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA5OyBpKyspIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICIgIik7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiXiIp OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGxvY3AtPmxhc3RfY29sdW1uIC0gbG9jcC0+Zmly c3RfY29sdW1uKSAtIDE7IGkrKykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIn4iKTsKKyAg ICB9CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIGMtPmluc3QuZXJyb3JfY291bnQr KzsKK30KKworYm9vbCBpc19kaXJlY3RfcHJlZGljYXRlKEhleFZhbHVlICp2YWx1ZSkKK3sKKyAg ICByZXR1cm4gdmFsdWUtPnByZWQuaWQgPj0gJzAnICYmIHZhbHVlLT5wcmVkLmlkIDw9ICczJzsK K30KKworYm9vbCBpc19pbnNpZGVfdGVybmFyeShDb250ZXh0ICpjKQoreworICAgIHJldHVybiBj LT50ZXJuYXJ5LT5sZW4gPiAwOworfQorCisvKiBQcmludCBmdW5jdGlvbnMgKi8KK3ZvaWQgc3Ry X3ByaW50KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sK KyAgICAodm9pZCkgbG9jcDsKKyAgICBFTUlUKGMsICIlcyIsIHN0cmluZyk7Cit9CisKK3ZvaWQg dWludDhfcHJpbnQoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgdWludDhfdCAqbnVtKQorewor ICAgICh2b2lkKSBsb2NwOworICAgIEVNSVQoYywgIiV1IiwgKm51bSk7Cit9CisKK3ZvaWQgdWlu dDY0X3ByaW50KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIHVpbnQ2NF90ICpudW0pCit7Cisg ICAgKHZvaWQpIGxvY3A7CisgICAgRU1JVChjLCAiJSIgUFJJdTY0LCAqbnVtKTsKK30KKwordm9p ZCBpbnRfcHJpbnQoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgaW50ICpudW0pCit7CisgICAg KHZvaWQpIGxvY3A7CisgICAgRU1JVChjLCAiJWQiLCAqbnVtKTsKK30KKwordm9pZCB1aW50X3By aW50KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIHVuc2lnbmVkICpudW0pCit7CisgICAgKHZv aWQpIGxvY3A7CisgICAgRU1JVChjLCAiJXUiLCAqbnVtKTsKK30KKwordm9pZCB0bXBfcHJpbnQo Q29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VG1wICp0bXApCit7CisgICAgKHZvaWQpIGxv Y3A7CisgICAgRU1JVChjLCAidG1wXyVkIiwgdG1wLT5pbmRleCk7Cit9CisKK3ZvaWQgcHJlZF9w cmludChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhQcmVkICpwcmVkLCBib29sIGlzX2Rv dG5ldykKK3sKKyAgICAodm9pZCkgbG9jcDsKKyAgICBjaGFyIHN1ZmZpeCA9IGlzX2RvdG5ldyA/ ICdOJyA6ICdWJzsKKyAgICBFTUlUKGMsICJQJWMlYyIsIHByZWQtPmlkLCBzdWZmaXgpOworfQor Cit2b2lkIHJlZ19jb21wb3NlKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFJlZyAqcmVn LCBjaGFyIHJlZ19pZFs1XSkKK3sKKyAgICBtZW1zZXQocmVnX2lkLCAwLCA1ICogc2l6ZW9mKGNo YXIpKTsKKyAgICBzd2l0Y2ggKHJlZy0+dHlwZSkgeworICAgIGNhc2UgR0VORVJBTF9QVVJQT1NF OgorICAgICAgICByZWdfaWRbMF0gPSAnUic7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ09O VFJPTDoKKyAgICAgICAgcmVnX2lkWzBdID0gJ0MnOworICAgICAgICBicmVhazsKKyAgICBjYXNl IE1PRElGSUVSOgorICAgICAgICByZWdfaWRbMF0gPSAnTSc7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgRE9UTkVXOgorICAgICAgICByZWdfaWRbMF0gPSAnTic7CisgICAgICAgIHJlZ19pZFsx XSA9IHJlZy0+aWQ7CisgICAgICAgIHJlZ19pZFsyXSA9ICdOJzsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKyAgICBzd2l0Y2ggKHJlZy0+Yml0X3dpZHRoKSB7CisgICAgY2FzZSAzMjoKKyAgICAg ICAgcmVnX2lkWzFdID0gcmVnLT5pZDsKKyAgICAgICAgcmVnX2lkWzJdID0gJ1YnOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIDY0OgorICAgICAgICByZWdfaWRbMV0gPSByZWctPmlkOworICAg ICAgICByZWdfaWRbMl0gPSByZWctPmlkOworICAgICAgICByZWdfaWRbM10gPSAnVic7CisgICAg ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHl5YXNzZXJ0KGMsIGxvY3AsIGZhbHNl LCAiVW5oYW5kbGVkIHJlZ2lzdGVyIGJpdCB3aWR0aCFcbiIpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgcmVnX2FyZ19wcmludChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhSZWcgKnJl ZykKK3sKKyAgICBjaGFyIHJlZ19pZFs1XTsKKyAgICByZWdfY29tcG9zZShjLCBsb2NwLCByZWcs IHJlZ19pZCk7CisgICAgRU1JVChjLCAiJXMiLCByZWdfaWQpOworfQorCit2b2lkIHJlZ19wcmlu dChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhSZWcgKnJlZykKK3sKKyAgICAodm9pZCkg bG9jcDsKKyAgICBFTUlUKGMsICJoZXhfZ3ByWyV1XSIsIHJlZy0+aWQpOworfQorCit2b2lkIGlt bV9wcmludChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhJbW0gKmltbSkKK3sKKyAgICBz d2l0Y2ggKGltbS0+dHlwZSkgeworICAgIGNhc2UgSToKKyAgICAgICAgRU1JVChjLCAiaSIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIFZBUklBQkxFOgorICAgICAgICBFTUlUKGMsICIlY2lW IiwgaW1tLT5pZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVkFMVUU6CisgICAgICAgIEVN SVQoYywgIigoaW50NjRfdCkgJSIgUFJJdTY0ICJVTEwpIiwgKGludDY0X3QpIGltbS0+dmFsdWUp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFTVVfVE1QOgorICAgICAgICBFTUlUKGMsICJx ZW11X3RtcF8lIiBQUkl1NjQsIGltbS0+aW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IElNTV9QQzoKKyAgICAgICAgRU1JVChjLCAiY3R4LT5iYXNlLnBjX25leHQiKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBJTU1fTlBDOgorICAgICAgICBFTUlUKGMsICJjdHgtPm5wYyIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIElNTV9DT05TVEVYVDoKKyAgICAgICAgRU1JVChjLCAi aW5zbi0+ZXh0ZW5zaW9uX3ZhbGlkIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAgIHl5YXNzZXJ0KGMsIGxvY3AsIGZhbHNlLCAiQ2Fubm90IHByaW50IHRoaXMgZXhwcmVz c2lvbiEiKTsKKyAgICB9Cit9CisKK3ZvaWQgdmFyX3ByaW50KENvbnRleHQgKmMsIFlZTFRZUEUg KmxvY3AsIEhleFZhciAqdmFyKQoreworICAgICh2b2lkKSBsb2NwOworICAgIEVNSVQoYywgIiVz IiwgdmFyLT5uYW1lLT5zdHIpOworfQorCit2b2lkIHJ2YWx1ZV9wcmludChDb250ZXh0ICpjLCBZ WUxUWVBFICpsb2NwLCB2b2lkICpwb2ludGVyKQoreworICBIZXhWYWx1ZSAqcnZhbHVlID0gKEhl eFZhbHVlICopIHBvaW50ZXI7CisgIHN3aXRjaCAocnZhbHVlLT50eXBlKSB7CisgIGNhc2UgUkVH SVNURVI6CisgICAgICByZWdfcHJpbnQoYywgbG9jcCwgJnJ2YWx1ZS0+cmVnKTsKKyAgICAgIGJy ZWFrOworICBjYXNlIFJFR0lTVEVSX0FSRzoKKyAgICAgIHJlZ19hcmdfcHJpbnQoYywgbG9jcCwg JnJ2YWx1ZS0+cmVnKTsKKyAgICAgIGJyZWFrOworICBjYXNlIFRFTVA6CisgICAgICB0bXBfcHJp bnQoYywgbG9jcCwgJnJ2YWx1ZS0+dG1wKTsKKyAgICAgIGJyZWFrOworICBjYXNlIElNTUVESUFU RToKKyAgICAgIGltbV9wcmludChjLCBsb2NwLCAmcnZhbHVlLT5pbW0pOworICAgICAgYnJlYWs7 CisgIGNhc2UgVkFSSUQ6CisgICAgICB2YXJfcHJpbnQoYywgbG9jcCwgJnJ2YWx1ZS0+dmFyKTsK KyAgICAgIGJyZWFrOworICBjYXNlIFBSRURJQ0FURToKKyAgICAgIHByZWRfcHJpbnQoYywgbG9j cCwgJnJ2YWx1ZS0+cHJlZCwgcnZhbHVlLT5pc19kb3RuZXcpOworICAgICAgYnJlYWs7CisgIGRl ZmF1bHQ6CisgICAgICB5eWFzc2VydChjLCBsb2NwLCBmYWxzZSwgIkNhbm5vdCBwcmludCB0aGlz IGV4cHJlc3Npb24hIik7CisgIH0KK30KKwordm9pZCBvdXRfYXNzZXJ0KENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3AsCisgICAgICAgICAgICAgICAgdm9pZCAqZHVtbXkgX19hdHRyaWJ1dGVfXygo dW51c2VkKSkpCit7CisgICAgeXlhc3NlcnQoYywgbG9jcCwgZmFsc2UsICJVbmhhbmRsZWQgcHJp bnQgdHlwZSEiKTsKK30KKworLyogQ29weSBvdXRwdXQgY29kZSBidWZmZXIgKi8KK3ZvaWQgY29t bWl0KENvbnRleHQgKmMpCit7CisgICAgLyogRW1pdCBpbnN0cnVjdGlvbiBwc2V1ZG9jb2RlICov CisgICAgRU1JVF9TSUcoYywgIlxuIiBTVEFSVF9DT01NRU5UICIgIik7CisgICAgZm9yIChjaGFy ICp4ID0gYy0+aW5zdC5jb2RlX2JlZ2luOyB4IDwgYy0+aW5zdC5jb2RlX2VuZDsgeCsrKSB7Cisg ICAgICAgIEVNSVRfU0lHKGMsICIlYyIsICp4KTsKKyAgICB9CisgICAgRU1JVF9TSUcoYywgIiAi IEVORF9DT01NRU5UICJcbiIpOworCisgICAgLyogQ29tbWl0IGluc3RydWN0aW9uIGNvZGUgdG8g b3V0cHV0IGZpbGUgKi8KKyAgICBmd3JpdGUoYy0+c2lnbmF0dXJlX3N0ci0+c3RyLCBzaXplb2Yo Y2hhciksIGMtPnNpZ25hdHVyZV9zdHItPmxlbiwKKyAgICAgICAgICAgYy0+b3V0cHV0X2ZpbGUp OworICAgIGZ3cml0ZShjLT5oZWFkZXJfc3RyLT5zdHIsIHNpemVvZihjaGFyKSwgYy0+aGVhZGVy X3N0ci0+bGVuLAorICAgICAgICAgICBjLT5vdXRwdXRfZmlsZSk7CisgICAgZndyaXRlKGMtPm91 dF9zdHItPnN0ciwgc2l6ZW9mKGNoYXIpLCBjLT5vdXRfc3RyLT5sZW4sCisgICAgICAgICAgIGMt Pm91dHB1dF9maWxlKTsKKworICAgIGZ3cml0ZShjLT5zaWduYXR1cmVfc3RyLT5zdHIsIHNpemVv ZihjaGFyKSwgYy0+c2lnbmF0dXJlX3N0ci0+bGVuLAorICAgICAgICAgICBjLT5kZWZpbmVzX2Zp bGUpOworICAgIGZwcmludGYoYy0+ZGVmaW5lc19maWxlLCAiO1xuIik7Cit9CisKK3N0YXRpYyB2 b2lkIGdlbl9jX2ludF90eXBlKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIHVuc2lnbmVkIGJp dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVk bmVzcykKK3sKKyAgICBjb25zdCBjaGFyICpzaWduc3RyID0gKHNpZ25lZG5lc3MgPT0gVU5TSUdO RUQpID8gInUiIDogIiI7CisgICAgT1VUKGMsIGxvY3AsIHNpZ25zdHIsICJpbnQiLCAmYml0X3dp ZHRoLCAiX3QiKTsKK30KKworc3RhdGljIEhleFZhbHVlIGdlbl9jb25zdGFudChDb250ZXh0ICpj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgYml0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBIZXhTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit7CisgICAgSGV4VmFsdWUgcnZhbHVlOwor ICAgIGFzc2VydChiaXRfd2lkdGggPT0gMzIgfHwgYml0X3dpZHRoID09IDY0KTsKKyAgICBtZW1z ZXQoJnJ2YWx1ZSwgMCwgc2l6ZW9mKEhleFZhbHVlKSk7CisgICAgcnZhbHVlLnR5cGUgPSBURU1Q OworICAgIHJ2YWx1ZS5iaXRfd2lkdGggPSBiaXRfd2lkdGg7CisgICAgcnZhbHVlLnNpZ25lZG5l c3MgPSBzaWduZWRuZXNzOworICAgIHJ2YWx1ZS5pc19kb3RuZXcgPSBmYWxzZTsKKyAgICBydmFs dWUuaXNfbWFudWFsID0gdHJ1ZTsKKyAgICBydmFsdWUudG1wLmluZGV4ID0gYy0+aW5zdC50bXBf Y291bnQ7CisgICAgT1VUKGMsIGxvY3AsICJUQ0d2X2kiLCAmYml0X3dpZHRoLCAiIHRtcF8iLCAm Yy0+aW5zdC50bXBfY291bnQsCisgICAgICAgICIgPSB0Y2dfY29uc3RhbnRfaSIsICZiaXRfd2lk dGgsICIoIiwgdmFsdWUsICIpO1xuIik7CisgICAgYy0+aW5zdC50bXBfY291bnQrKzsKKyAgICBy ZXR1cm4gcnZhbHVlOworfQorCisvKiBUZW1wb3JhcnkgdmFsdWVzIGNyZWF0aW9uICovCitIZXhW YWx1ZSBnZW5fdG1wKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxvY3As CisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAg SGV4U2lnbmVkbmVzcyBzaWduZWRuZXNzKQoreworICAgIEhleFZhbHVlIHJ2YWx1ZTsKKyAgICBh c3NlcnQoYml0X3dpZHRoID09IDMyIHx8IGJpdF93aWR0aCA9PSA2NCk7CisgICAgbWVtc2V0KCZy dmFsdWUsIDAsIHNpemVvZihIZXhWYWx1ZSkpOworICAgIHJ2YWx1ZS50eXBlID0gVEVNUDsKKyAg ICBydmFsdWUuYml0X3dpZHRoID0gYml0X3dpZHRoOworICAgIHJ2YWx1ZS5zaWduZWRuZXNzID0g c2lnbmVkbmVzczsKKyAgICBydmFsdWUuaXNfZG90bmV3ID0gZmFsc2U7CisgICAgcnZhbHVlLmlz X21hbnVhbCA9IGZhbHNlOworICAgIHJ2YWx1ZS50bXAuaW5kZXggPSBjLT5pbnN0LnRtcF9jb3Vu dDsKKyAgICBPVVQoYywgbG9jcCwgIlRDR3ZfaSIsICZiaXRfd2lkdGgsICIgdG1wXyIsICZjLT5p bnN0LnRtcF9jb3VudCwKKyAgICAgICAgIiA9IHRjZ190ZW1wX25ld19pIiwgJmJpdF93aWR0aCwg IigpO1xuIik7CisgICAgYy0+aW5zdC50bXBfY291bnQrKzsKKyAgICByZXR1cm4gcnZhbHVlOwor fQorCitIZXhWYWx1ZSBnZW5fdG1wX2xvY2FsKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAg ICAgICAgIFlZTFRZUEUgKmxvY3AsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJp dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNz KQoreworICAgIEhleFZhbHVlIHJ2YWx1ZTsKKyAgICBhc3NlcnQoYml0X3dpZHRoID09IDMyIHx8 IGJpdF93aWR0aCA9PSA2NCk7CisgICAgbWVtc2V0KCZydmFsdWUsIDAsIHNpemVvZihIZXhWYWx1 ZSkpOworICAgIHJ2YWx1ZS50eXBlID0gVEVNUDsKKyAgICBydmFsdWUuYml0X3dpZHRoID0gYml0 X3dpZHRoOworICAgIHJ2YWx1ZS5zaWduZWRuZXNzID0gc2lnbmVkbmVzczsKKyAgICBydmFsdWUu aXNfZG90bmV3ID0gZmFsc2U7CisgICAgcnZhbHVlLmlzX21hbnVhbCA9IGZhbHNlOworICAgIHJ2 YWx1ZS50bXAuaW5kZXggPSBjLT5pbnN0LnRtcF9jb3VudDsKKyAgICBPVVQoYywgbG9jcCwgIlRD R3ZfaSIsICZiaXRfd2lkdGgsICIgdG1wXyIsICZjLT5pbnN0LnRtcF9jb3VudCwKKyAgICAgICAg IiA9IHRjZ190ZW1wX2xvY2FsX25ld19pIiwgJmJpdF93aWR0aCwgIigpO1xuIik7CisgICAgYy0+ aW5zdC50bXBfY291bnQrKzsKKyAgICByZXR1cm4gcnZhbHVlOworfQorCitIZXhWYWx1ZSBnZW5f dG1wX3ZhbHVlKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxv Y3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlLAorICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg IEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3sKKyAgICBIZXhWYWx1ZSBydmFsdWU7CisgICAg YXNzZXJ0KGJpdF93aWR0aCA9PSAzMiB8fCBiaXRfd2lkdGggPT0gNjQpOworICAgIG1lbXNldCgm cnZhbHVlLCAwLCBzaXplb2YoSGV4VmFsdWUpKTsKKyAgICBydmFsdWUudHlwZSA9IFRFTVA7Cisg ICAgcnZhbHVlLmJpdF93aWR0aCA9IGJpdF93aWR0aDsKKyAgICBydmFsdWUuc2lnbmVkbmVzcyA9 IHNpZ25lZG5lc3M7CisgICAgcnZhbHVlLmlzX2RvdG5ldyA9IGZhbHNlOworICAgIHJ2YWx1ZS5p c19tYW51YWwgPSBmYWxzZTsKKyAgICBydmFsdWUudG1wLmluZGV4ID0gYy0+aW5zdC50bXBfY291 bnQ7CisgICAgT1VUKGMsIGxvY3AsICJUQ0d2X2kiLCAmYml0X3dpZHRoLCAiIHRtcF8iLCAmYy0+ aW5zdC50bXBfY291bnQsCisgICAgICAgICIgPSB0Y2dfY29uc3RfaSIsICZiaXRfd2lkdGgsICIo IiwgdmFsdWUsICIpO1xuIik7CisgICAgYy0+aW5zdC50bXBfY291bnQrKzsKKyAgICByZXR1cm4g cnZhbHVlOworfQorCitzdGF0aWMgSGV4VmFsdWUgZ2VuX3RtcF92YWx1ZV9mcm9tX2ltbShDb250 ZXh0ICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAq bG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp2 YWx1ZSkKK3sKKyAgICBIZXhWYWx1ZSBydmFsdWU7CisgICAgYXNzZXJ0KHZhbHVlLT50eXBlID09 IElNTUVESUFURSk7CisgICAgbWVtc2V0KCZydmFsdWUsIDAsIHNpemVvZihIZXhWYWx1ZSkpOwor ICAgIHJ2YWx1ZS50eXBlID0gVEVNUDsKKyAgICBydmFsdWUuYml0X3dpZHRoID0gdmFsdWUtPmJp dF93aWR0aDsKKyAgICBydmFsdWUuc2lnbmVkbmVzcyA9IHZhbHVlLT5zaWduZWRuZXNzOworICAg IHJ2YWx1ZS5pc19kb3RuZXcgPSBmYWxzZTsKKyAgICBydmFsdWUuaXNfbWFudWFsID0gZmFsc2U7 CisgICAgcnZhbHVlLnRtcC5pbmRleCA9IGMtPmluc3QudG1wX2NvdW50OworICAgIC8qCisgICAg ICogSGVyZSB3ZSBvdXRwdXQgdGhlIGNhbGwgdG8gYHRjZ19jb25zdF9pPHdpZHRoPmAgaW4KKyAg ICAgKiBvcmRlciB0byBjcmVhdGUgdGhlIHRlbXBvcmFyeSB2YWx1ZS4gTm90ZSwgdGhhdCB3ZQor ICAgICAqIGFkZCBhIGNhc3QKKyAgICAgKgorICAgICAqICAgYHRjZ19jb25zdF9pPHdpZHRoPmAo KGludDx3aWR0aD5fdCkgLi4uKWAKKyAgICAgKgorICAgICAqIFRoaXMgY2FzdCBpcyByZXF1aXJl ZCB0byBhdm9pZCBpbXBsaWNpdCBpbnRlZ2VyCisgICAgICogY29udmVyc2lvbiB3YXJuaW5ncyBz aW5jZSBhbGwgaW1tZWRpYXRlcyBhcmUKKyAgICAgKiBvdXRwdXQgYXMgYCgoaW50NjRfdCkgMTIz VUxMKWAsIGV2ZW4gaWYgdGhlCisgICAgICogaW50ZWdlciBpcyAzMi1iaXQuCisgICAgICovCisg ICAgT1VUKGMsIGxvY3AsICJUQ0d2X2kiLCAmcnZhbHVlLmJpdF93aWR0aCwgIiB0bXBfIiwgJmMt Pmluc3QudG1wX2NvdW50KTsKKyAgICBPVVQoYywgbG9jcCwgIiA9IHRjZ19jb25zdF9pIiwgJnJ2 YWx1ZS5iaXRfd2lkdGgsCisgICAgICAgICIoKGludCIsICZydmFsdWUuYml0X3dpZHRoLCAiX3Qp ICgiLCB2YWx1ZSwgIikpO1xuIik7CisKKyAgICBjLT5pbnN0LnRtcF9jb3VudCsrOworICAgIHJl dHVybiBydmFsdWU7Cit9CisKK0hleFZhbHVlIGdlbl9pbW1fdmFsdWUoQ29udGV4dCAqYyBfX2F0 dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9j cCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlLAorICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBiaXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25l ZG5lc3Mgc2lnbmVkbmVzcykKK3sKKyAgICAodm9pZCkgbG9jcDsKKyAgICBIZXhWYWx1ZSBydmFs dWU7CisgICAgYXNzZXJ0KGJpdF93aWR0aCA9PSAzMiB8fCBiaXRfd2lkdGggPT0gNjQpOworICAg IG1lbXNldCgmcnZhbHVlLCAwLCBzaXplb2YoSGV4VmFsdWUpKTsKKyAgICBydmFsdWUudHlwZSA9 IElNTUVESUFURTsKKyAgICBydmFsdWUuYml0X3dpZHRoID0gYml0X3dpZHRoOworICAgIHJ2YWx1 ZS5zaWduZWRuZXNzID0gc2lnbmVkbmVzczsKKyAgICBydmFsdWUuaXNfZG90bmV3ID0gZmFsc2U7 CisgICAgcnZhbHVlLmlzX21hbnVhbCA9IGZhbHNlOworICAgIHJ2YWx1ZS5pbW0udHlwZSA9IFZB TFVFOworICAgIHJ2YWx1ZS5pbW0udmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gcnZhbHVlOwor fQorCitIZXhWYWx1ZSBnZW5faW1tX3FlbXVfdG1wKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3As IHVuc2lnbmVkIGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSGV4U2lnbmVk bmVzcyBzaWduZWRuZXNzKQoreworICAgICh2b2lkKSBsb2NwOworICAgIEhleFZhbHVlIHJ2YWx1 ZTsKKyAgICBhc3NlcnQoYml0X3dpZHRoID09IDMyIHx8IGJpdF93aWR0aCA9PSA2NCk7CisgICAg bWVtc2V0KCZydmFsdWUsIDAsIHNpemVvZihIZXhWYWx1ZSkpOworICAgIHJ2YWx1ZS50eXBlID0g SU1NRURJQVRFOworICAgIHJ2YWx1ZS5pc19kb3RuZXcgPSBmYWxzZTsKKyAgICBydmFsdWUuaXNf bWFudWFsID0gZmFsc2U7CisgICAgcnZhbHVlLmJpdF93aWR0aCA9IGJpdF93aWR0aDsKKyAgICBy dmFsdWUuc2lnbmVkbmVzcyA9IHNpZ25lZG5lc3M7CisgICAgcnZhbHVlLmltbS50eXBlID0gUUVN VV9UTVA7CisgICAgcnZhbHVlLmltbS5pbmRleCA9IGMtPmluc3QucWVtdV90bXBfY291bnQrKzsK KyAgICByZXR1cm4gcnZhbHVlOworfQorCit2b2lkIGdlbl9ydmFsdWVfZnJlZShDb250ZXh0ICpj LCBZWUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqcnZhbHVlKQoreworICAgIGlmIChydmFsdWUtPnR5 cGUgPT0gVEVNUCAmJiAhcnZhbHVlLT5pc19tYW51YWwpIHsKKyAgICAgICAgY29uc3QgY2hhciAq Yml0X3N1ZmZpeCA9IChydmFsdWUtPmJpdF93aWR0aCA9PSA2NCkgPyAiaTY0IiA6ICJpMzIiOwor ICAgICAgICBPVVQoYywgbG9jcCwgInRjZ190ZW1wX2ZyZWVfIiwgYml0X3N1ZmZpeCwgIigiLCBy dmFsdWUsICIpO1xuIik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnZW5fcnZhbHVlX2ZyZWVf bWFudWFsKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpydmFsdWUpCit7Cisg ICAgcnZhbHVlLT5pc19tYW51YWwgPSBmYWxzZTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9j cCwgcnZhbHVlKTsKK30KKworSGV4VmFsdWUgcnZhbHVlX21hdGVyaWFsaXplKENvbnRleHQgKmMs IFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpydmFsdWUpCit7CisgICAgaWYgKHJ2YWx1ZS0+dHlw ZSA9PSBJTU1FRElBVEUpIHsKKyAgICAgICAgSGV4VmFsdWUgcmVzID0gZ2VuX3RtcF92YWx1ZV9m cm9tX2ltbShjLCBsb2NwLCBydmFsdWUpOworICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9j cCwgcnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcmV0dXJuICpydmFs dWU7Cit9CisKK0hleFZhbHVlIGdlbl9ydmFsdWVfZXh0ZW5kKENvbnRleHQgKmMsIFlZTFRZUEUg KmxvY3AsIEhleFZhbHVlICpydmFsdWUpCit7CisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywgbG9j cCwgcnZhbHVlLT5zaWduZWRuZXNzKTsKKyAgICBpZiAocnZhbHVlLT5iaXRfd2lkdGggPiAzMikg eworICAgICAgICByZXR1cm4gKnJ2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAocnZhbHVlLT50eXBl ID09IElNTUVESUFURSkgeworICAgICAgICBIZXhWYWx1ZSByZXMgPSBnZW5faW1tX3FlbXVfdG1w KGMsIGxvY3AsIDY0LCBydmFsdWUtPnNpZ25lZG5lc3MpOworICAgICAgICBib29sIGlzX3Vuc2ln bmVkID0gKHJ2YWx1ZS0+c2lnbmVkbmVzcyA9PSBVTlNJR05FRCk7CisgICAgICAgIGNvbnN0IGNo YXIgKnNpZ25fc3VmZml4ID0gaXNfdW5zaWduZWQgPyAidSIgOiAiIjsKKyAgICAgICAgZ2VuX2Nf aW50X3R5cGUoYywgbG9jcCwgNjQsIHJ2YWx1ZS0+c2lnbmVkbmVzcyk7CisgICAgICAgIE9VVChj LCBsb2NwLCAiICIsICZyZXMsICIgPSAiKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICIoIiwgc2ln bl9zdWZmaXgsICJpbnQ2NF90KSAiKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICIoIiwgc2lnbl9z dWZmaXgsICJpbnQzMl90KSAiKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsIHJ2YWx1ZSwgIjtcbiIp OworICAgICAgICByZXR1cm4gcmVzOworICAgIH0gZWxzZSB7CisgICAgICAgIEhleFZhbHVlIHJl cyA9IGdlbl90bXAoYywgbG9jcCwgNjQsIHJ2YWx1ZS0+c2lnbmVkbmVzcyk7CisgICAgICAgIGJv b2wgaXNfdW5zaWduZWQgPSAocnZhbHVlLT5zaWduZWRuZXNzID09IFVOU0lHTkVEKTsKKyAgICAg ICAgY29uc3QgY2hhciAqc2lnbl9zdWZmaXggPSBpc191bnNpZ25lZCA/ICJ1IiA6ICIiOworICAg ICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fZXh0Iiwgc2lnbl9zdWZmaXgsCisgICAgICAgICAg ICAiX2kzMl9pNjQoIiwgJnJlcywgIiwgIiwgcnZhbHVlLCAiKTtcbiIpOworICAgICAgICBnZW5f cnZhbHVlX2ZyZWUoYywgbG9jcCwgcnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9 Cit9CisKK0hleFZhbHVlIGdlbl9ydmFsdWVfdHJ1bmNhdGUoQ29udGV4dCAqYywgWVlMVFlQRSAq bG9jcCwgSGV4VmFsdWUgKnJ2YWx1ZSkKK3sKKyAgICBpZiAocnZhbHVlLT50eXBlID09IElNTUVE SUFURSkgeworICAgICAgICBIZXhWYWx1ZSByZXMgPSAqcnZhbHVlOworICAgICAgICByZXMuYml0 X3dpZHRoID0gMzI7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAg aWYgKHJ2YWx1ZS0+Yml0X3dpZHRoID09IDY0KSB7CisgICAgICAgICAgICBIZXhWYWx1ZSByZXMg PSBnZW5fdG1wKGMsIGxvY3AsIDMyLCBydmFsdWUtPnNpZ25lZG5lc3MpOworICAgICAgICAgICAg T1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3RydW5jX2k2NF90bCgiLCAmcmVzLCAiLCAiLCBydmFsdWUs ICIpO1xuIik7CisgICAgICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgcnZhbHVlKTsK KyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICpy dmFsdWU7Cit9CisKKy8qCisgKiBBdHRlbXB0cyB0byBsb29rdXAgdGhlIGBWYXJgIHN0cnVjdCBh c3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGB2YXJpZGAuCisgKiBUaGUgYGRzdGAgYXJndW1lbnQg aXMgcG9wdWxhdGVkIHdpdGggdGhlIGZvdW5kIG5hbWUsIGJpdF93aWR0aCwgYW5kCisgKiBzaWdu ZWRuZXNzLCBnaXZlbiB0aGF0IGBkc3RgIGlzIG5vbi1OVUxMLiBSZXR1cm5zIHRydWUgaWYgdGhl IGxvb2t1cAorICogc3VjY2VlZGVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBi b29sIHRyeV9maW5kX3ZhcmlhYmxlKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqZHN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSGV4VmFsdWUgKnZhcmlkKQoreworICAgIHl5YXNzZXJ0KGMsIGxvY3AsIHZh cmlkLCAidmFyaWQgdG8gbG9va3VwIGlzIE5VTEwiKTsKKyAgICB5eWFzc2VydChjLCBsb2NwLCB2 YXJpZC0+dHlwZSA9PSBWQVJJRCwKKyAgICAgICAgICAgICAiQ2FuIG9ubHkgbG9va3VwIHZhcmlh YmxlcyBieSB2YXJpZCIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjLT5pbnN0LmFs bG9jYXRlZC0+bGVuOyBpKyspIHsKKyAgICAgICAgVmFyICpjdXJyID0gJmdfYXJyYXlfaW5kZXgo Yy0+aW5zdC5hbGxvY2F0ZWQsIFZhciwgaSk7CisgICAgICAgIGlmIChnX3N0cmluZ19lcXVhbCh2 YXJpZC0+dmFyLm5hbWUsIGN1cnItPm5hbWUpKSB7CisgICAgICAgICAgICBpZiAoZHN0KSB7Cisg ICAgICAgICAgICAgICAgZHN0LT52YXIubmFtZSA9IGN1cnItPm5hbWU7CisgICAgICAgICAgICAg ICAgZHN0LT5iaXRfd2lkdGggPSBjdXJyLT5iaXRfd2lkdGg7CisgICAgICAgICAgICAgICAgZHN0 LT5zaWduZWRuZXNzID0gY3Vyci0+c2lnbmVkbmVzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K KworLyogQ2FsbHMgYHRyeV9maW5kX3ZhcmlhYmxlYCBhbmQgYXNzZXJ0cyBzdWNjY2Vzcy4gKi8K K3N0YXRpYyB2b2lkIGZpbmRfdmFyaWFibGUoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKmRzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgSGV4VmFsdWUgKnZhcmlkKQoreworICAgIGJvb2wgZm91bmQgPSB0cnlfZmluZF92 YXJpYWJsZShjLCBsb2NwLCBkc3QsIHZhcmlkKTsKKyAgICB5eWFzc2VydChjLCBsb2NwLCBmb3Vu ZCwgIlVzZSBvZiB1bmRlY2xhcmVkIHZhcmlhYmxlIVxuIik7Cit9CisKKy8qIEhhbmRsZSBzaWdu ZWRuZXNzLCBpZiBib3RoIHVuc2lnbmVkIC0+IHJlc3VsdCBpcyB1bnNpZ25lZCwgZWxzZSBzaWdu ZWQgKi8KK3N0YXRpYyBpbmxpbmUgSGV4U2lnbmVkbmVzcyBiaW5fb3Bfc2lnbmVkbmVzcyhDb250 ZXh0ICpjLCBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbjEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSGV4U2lnbmVkbmVzcyBzaWduMikKK3sKKyAgICBhc3Nl cnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBzaWduMSk7CisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywg bG9jcCwgc2lnbjIpOworICAgIHJldHVybiAoc2lnbjEgPT0gVU5TSUdORUQgJiYgc2lnbjIgPT0g VU5TSUdORUQpID8gVU5TSUdORUQgOiBTSUdORUQ7Cit9CisKK3ZvaWQgZ2VuX3ZhcmlkX2FsbG9j YXRlKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAor ICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnZhcmlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgYml0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgSGV4 U2lnbmVkbmVzcyBzaWduZWRuZXNzKQoreworICAgIGNvbnN0IGNoYXIgKmJpdF9zdWZmaXggPSAo Yml0X3dpZHRoID09IDY0KSA/ICJpNjQiIDogImkzMiI7CisgICAgYm9vbCBmb3VuZCA9IHRyeV9m aW5kX3ZhcmlhYmxlKGMsIGxvY3AsIE5VTEwsIHZhcmlkKTsKKyAgICBWYXIgbmV3X3ZhcjsKKwor ICAgIG1lbXNldCgmbmV3X3ZhciwgMCwgc2l6ZW9mKFZhcikpOworCisgICAgeXlhc3NlcnQoYywg bG9jcCwgIWZvdW5kLCAiUmVkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZXMgbm90IGFsbG93ZWQhIik7 CisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywgbG9jcCwgc2lnbmVkbmVzcyk7CisKKyAgICAvKiBg dmFyaWRgIG9ubHkgY2FycmllcyBuYW1lIGluZm9ybWF0aW9uICovCisgICAgbmV3X3Zhci5uYW1l ID0gdmFyaWQtPnZhci5uYW1lOworICAgIG5ld192YXIuYml0X3dpZHRoID0gYml0X3dpZHRoOwor ICAgIG5ld192YXIuc2lnbmVkbmVzcyA9IHNpZ25lZG5lc3M7CisKKyAgICBFTUlUX0hFQUQoYywg IlRDR3ZfJXMgJXMiLCBiaXRfc3VmZml4LCB2YXJpZC0+dmFyLm5hbWUtPnN0cik7CisgICAgRU1J VF9IRUFEKGMsICIgPSB0Y2dfdGVtcF9sb2NhbF9uZXdfJXMoKTtcbiIsIGJpdF9zdWZmaXgpOwor ICAgIGdfYXJyYXlfYXBwZW5kX3ZhbChjLT5pbnN0LmFsbG9jYXRlZCwgbmV3X3Zhcik7Cit9CisK K2VudW0gT3BUeXBlcyB7CisgICAgSU1NX0lNTSA9IDAsCisgICAgSU1NX1JFRyA9IDEsCisgICAg UkVHX0lNTSA9IDIsCisgICAgUkVHX1JFRyA9IDMsCit9OworCitIZXhWYWx1ZSBnZW5fYmluX2Nt cChDb250ZXh0ICpjLAorICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAg ICAgICAgICAgICAgICAgIFRDR0NvbmQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIEhleFZh bHVlICpvcDEsCisgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqb3AyKQoreworICAgIEhl eFZhbHVlIG9wMV9tID0gKm9wMTsKKyAgICBIZXhWYWx1ZSBvcDJfbSA9ICpvcDI7CisgICAgZW51 bSBPcFR5cGVzIG9wX3R5cGVzID0gKG9wMV9tLnR5cGUgIT0gSU1NRURJQVRFKSA8PCAxCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAob3AyX20udHlwZSAhPSBJTU1FRElBVEUpOworCisg ICAgYm9vbCBvcF9pczY0Yml0ID0gb3AxX20uYml0X3dpZHRoID09IDY0IHx8IG9wMl9tLmJpdF93 aWR0aCA9PSA2NDsKKyAgICBjb25zdCBjaGFyICpiaXRfc3VmZml4ID0gb3BfaXM2NGJpdCA/ICJp NjQiIDogImkzMiI7CisgICAgdW5zaWduZWQgYml0X3dpZHRoID0gKG9wX2lzNjRiaXQpID8gNjQg OiAzMjsKKyAgICBIZXhWYWx1ZSByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIGJpdF93aWR0aCwgVU5T SUdORUQpOworCisgICAgLyogRXh0ZW5kIHRvIDY0LWJpdHMsIGlmIHJlcXVpcmVkICovCisgICAg aWYgKG9wX2lzNjRiaXQpIHsKKyAgICAgICAgb3AxX20gPSBnZW5fcnZhbHVlX2V4dGVuZChjLCBs b2NwLCAmb3AxX20pOworICAgICAgICBvcDJfbSA9IGdlbl9ydmFsdWVfZXh0ZW5kKGMsIGxvY3As ICZvcDJfbSk7CisgICAgfQorCisgICAgc3dpdGNoIChvcF90eXBlcykgeworICAgIGNhc2UgSU1N X0lNTToKKyAgICBjYXNlIElNTV9SRUc6CisgICAgICAgIHl5YXNzZXJ0KGMsIGxvY3AsIGZhbHNl LCAiQmluYXJ5IGNvbXBhcmlzb25zIGJldHdlZW4gSU1NIG9wIElNTSBhbmQiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiSU1NIG9wIFJFRyBub3QgaGFuZGxlZCEiKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBSRUdfSU1NOgorICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19n ZW5fc2V0Y29uZGlfIiwgYml0X3N1ZmZpeCwgIigiKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsIGNv bmRfdG9fc3RyKHR5cGUpLCAiLCAiLCAmcmVzLCAiLCAiLCAmb3AxX20sICIsICIsICZvcDJfbSwK KyAgICAgICAgICAgICIpO1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVHX1JFRzoK KyAgICAgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3NldGNvbmRfIiwgYml0X3N1ZmZpeCwgIigi KTsKKyAgICAgICAgT1VUKGMsIGxvY3AsIGNvbmRfdG9fc3RyKHR5cGUpLCAiLCAiLCAmcmVzLCAi LCAiLCAmb3AxX20sICIsICIsICZvcDJfbSwKKyAgICAgICAgICAgICIpO1xuIik7CisgICAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW4g ZXZhbHV0YXRpbmcgaW1tZWRpYXRlbmVzcyEiKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisK KyAgICAvKiBGcmVlIG9wZXJhbmRzICovCisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZv cDFfbSk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZvcDJfbSk7CisKKyAgICByZXR1 cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBnZW5fc2ltcGxlX29wKENvbnRleHQgKmMsIFlZTFRZ UEUgKmxvY3AsIHVuc2lnbmVkIGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqYml0X3N1ZmZpeCwgSGV4VmFsdWUgKnJlcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSBPcFR5cGVzIG9wX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBIZXhWYWx1ZSAqb3AxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqb3Ay LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbW1faW1tLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbW1fcmVnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpyZWdfaW1tLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpyZWdfcmVnKQoreworICAgIHN3aXRjaCAob3BfdHlwZXMpIHsKKyAgICBj YXNlIElNTV9JTU06IHsKKyAgICAgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNzID0gYmluX29w X3NpZ25lZG5lc3MoYywgbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3AxLT5zaWduZWRuZXNzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDItPnNpZ25lZG5lc3MpOworICAgICAg ICBnZW5fY19pbnRfdHlwZShjLCBsb2NwLCBiaXRfd2lkdGgsIHNpZ25lZG5lc3MpOworICAgICAg ICBPVVQoYywgbG9jcCwgIiAiLCByZXMsCisgICAgICAgICAgICAiID0gIiwgb3AxLCBpbW1faW1t LCBvcDIsICI7XG4iKTsKKyAgICB9IGJyZWFrOworICAgIGNhc2UgSU1NX1JFRzoKKyAgICAgICAg T1VUKGMsIGxvY3AsIGltbV9yZWcsIGJpdF9zdWZmaXgsCisgICAgICAgICAgICAiKCIsIHJlcywg IiwgIiwgb3AyLCAiLCAiLCBvcDEsICIpO1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug UkVHX0lNTToKKyAgICAgICAgT1VUKGMsIGxvY3AsIHJlZ19pbW0sIGJpdF9zdWZmaXgsCisgICAg ICAgICAgICAiKCIsIHJlcywgIiwgIiwgb3AxLCAiLCAiLCBvcDIsICIpO1xuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgUkVHX1JFRzoKKyAgICAgICAgT1VUKGMsIGxvY3AsIHJlZ19yZWcs IGJpdF9zdWZmaXgsCisgICAgICAgICAgICAiKCIsIHJlcywgIiwgIiwgb3AxLCAiLCAiLCBvcDIs ICIpO1xuIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywg bG9jcCwgb3AxKTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgb3AyKTsKK30KKworc3Rh dGljIHZvaWQgZ2VuX3N1Yl9vcChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCB1bnNpZ25lZCBi aXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJpdF9zdWZmaXgs IEhleFZhbHVlICpyZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGVudW0gT3BUeXBlcyBvcF90 eXBlcywgSGV4VmFsdWUgKm9wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKm9w MikKK3sKKyAgICBzd2l0Y2ggKG9wX3R5cGVzKSB7CisgICAgY2FzZSBJTU1fSU1NOiB7CisgICAg ICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcyA9IGJpbl9vcF9zaWduZWRuZXNzKGMsIGxvY3As CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w MS0+c2lnbmVkbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3AyLT5zaWduZWRuZXNzKTsKKyAgICAgICAgZ2VuX2NfaW50X3R5cGUoYywg bG9jcCwgYml0X3dpZHRoLCBzaWduZWRuZXNzKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICIgIiwg cmVzLAorICAgICAgICAgICAgIiA9ICIsIG9wMSwgIiAtICIsIG9wMiwgIjtcbiIpOworICAgIH0g YnJlYWs7CisgICAgY2FzZSBJTU1fUkVHOiB7CisgICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9zdWJmaV8iLCBiaXRfc3VmZml4LAorICAgICAgICAgICAgIigiLCByZXMsICIsICIsIG9wMSwg IiwgIiwgb3AyLCAiKTtcbiIpOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBSRUdfSU1NOiB7Cisg ICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9zdWJpXyIsIGJpdF9zdWZmaXgsCisgICAgICAg ICAgICAiKCIsIHJlcywgIiwgIiwgb3AxLCAiLCAiLCBvcDIsICIpO1xuIik7CisgICAgfSBicmVh azsKKyAgICBjYXNlIFJFR19SRUc6IHsKKyAgICAgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3N1 Yl8iLCBiaXRfc3VmZml4LAorICAgICAgICAgICAgIigiLCByZXMsICIsICIsIG9wMSwgIiwgIiwg b3AyLCAiKTtcbiIpOworICAgIH0gYnJlYWs7CisgICAgfQorICAgIGdlbl9ydmFsdWVfZnJlZShj LCBsb2NwLCBvcDEpOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCBvcDIpOworfQorCitz dGF0aWMgdm9pZCBnZW5fYXNsX29wKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIHVuc2lnbmVk IGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvcF9pczY0Yml0LCBjb25z dCBjaGFyICpiaXRfc3VmZml4LAorICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqcmVz LCBlbnVtIE9wVHlwZXMgb3BfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVl ICpvcDEsIEhleFZhbHVlICpvcDIpCit7CisgICAgSGV4VmFsdWUgb3AxX20gPSAqb3AxOworICAg IEhleFZhbHVlIG9wMl9tID0gKm9wMjsKKyAgICBzd2l0Y2ggKG9wX3R5cGVzKSB7CisgICAgY2Fz ZSBJTU1fSU1NOiB7CisgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcyA9IGJpbl9vcF9z aWduZWRuZXNzKGMsIGxvY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wMS0+c2lnbmVkbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AyLT5zaWduZWRuZXNzKTsKKyAgICAgICAg Z2VuX2NfaW50X3R5cGUoYywgbG9jcCwgYml0X3dpZHRoLCBzaWduZWRuZXNzKTsKKyAgICAgICAg T1VUKGMsIGxvY3AsICIgIiwgcmVzLAorICAgICAgICAgICAgIiA9ICIsIG9wMSwgIiA8PCAiLCBv cDIsICI7XG4iKTsKKyAgICB9IGJyZWFrOworICAgIGNhc2UgUkVHX0lNTTogeworICAgICAgICBP VVQoYywgbG9jcCwgImlmICgiLCBvcDIsICIgPj0gIiwgJmJpdF93aWR0aCwgIikge1xuIik7Cisg ICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9tb3ZpXyIsIGJpdF9zdWZmaXgsICIoIiwgcmVz LCAiLCAwKTtcbiIpOworICAgICAgICBPVVQoYywgbG9jcCwgIn0gZWxzZSB7XG4iKTsKKyAgICAg ICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3NobGlfIiwgYml0X3N1ZmZpeCwKKyAgICAgICAgICAg ICAgICAiKCIsIHJlcywgIiwgIiwgb3AxLCAiLCAiLCBvcDIsICIpO1xuIik7CisgICAgICAgIE9V VChjLCBsb2NwLCAifVxuIik7CisgICAgfSBicmVhazsKKyAgICBjYXNlIElNTV9SRUc6CisgICAg ICAgIG9wMV9tLmJpdF93aWR0aCA9IGJpdF93aWR0aDsKKyAgICAgICAgb3AxX20gPSBydmFsdWVf bWF0ZXJpYWxpemUoYywgbG9jcCwgJm9wMV9tKTsKKyAgICAgICAgLyogZmFsbHRocm91Z2ggKi8K KyAgICBjYXNlIFJFR19SRUc6IHsKKyAgICAgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3NobF8i LCBiaXRfc3VmZml4LAorICAgICAgICAgICAgIigiLCByZXMsICIsICIsICZvcDFfbSwgIiwgIiwg b3AyLCAiKTtcbiIpOworICAgIH0gYnJlYWs7CisgICAgfQorICAgIGlmIChvcF90eXBlcyA9PSBJ TU1fUkVHIHx8IG9wX3R5cGVzID09IFJFR19SRUcpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICog SGFuZGxlIGxlZnQgc2hpZnQgYnkgNjQvMzIgd2hpY2ggaGV4YWdvbi1zaW0gZXhwZWN0cyB0byBj bGVhciBvdXQKKyAgICAgICAgICogcmVnaXN0ZXIKKyAgICAgICAgICovCisgICAgICAgIEhleFZh bHVlIHplcm8gPSBnZW5fY29uc3RhbnQoYywgbG9jcCwgIjAiLCBiaXRfd2lkdGgsIFVOU0lHTkVE KTsKKyAgICAgICAgSGV4VmFsdWUgZWRnZSA9IGdlbl9pbW1fdmFsdWUoYywgbG9jcCwgYml0X3dp ZHRoLCBiaXRfd2lkdGgsIFVOU0lHTkVEKTsKKyAgICAgICAgZWRnZSA9IHJ2YWx1ZV9tYXRlcmlh bGl6ZShjLCBsb2NwLCAmZWRnZSk7CisgICAgICAgIGlmIChvcF9pczY0Yml0KSB7CisgICAgICAg ICAgICBvcDJfbSA9IGdlbl9ydmFsdWVfZXh0ZW5kKGMsIGxvY3AsICZvcDJfbSk7CisgICAgICAg IH0KKyAgICAgICAgb3AxX20gPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgJm9wMV9tKTsK KyAgICAgICAgb3AyX20gPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgJm9wMl9tKTsKKyAg ICAgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX21vdmNvbmRfaSIsICZiaXRfd2lkdGgpOworICAg ICAgICBPVVQoYywgbG9jcCwgIihUQ0dfQ09ORF9HRVUsICIsIHJlcywgIiwgIiwgJm9wMl9tLCAi LCAiLCAmZWRnZSk7CisgICAgICAgIE9VVChjLCBsb2NwLCAiLCAiLCAmemVybywgIiwgIiwgcmVz LCAiKTtcbiIpOworICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJmVkZ2UpOworICAg IH0KKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJm9wMV9tKTsKKyAgICBnZW5fcnZhbHVl X2ZyZWUoYywgbG9jcCwgJm9wMl9tKTsKK30KKworc3RhdGljIHZvaWQgZ2VuX2Fzcl9vcChDb250 ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCB1bnNpZ25lZCBiaXRfd2lkdGgsCisgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgb3BfaXM2NGJpdCwgY29uc3QgY2hhciAqYml0X3N1ZmZpeCwKKyAgICAg ICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnJlcywgZW51bSBPcFR5cGVzIG9wX3R5cGVzLAor ICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqb3AxLCBIZXhWYWx1ZSAqb3AyKQorewor ICAgIEhleFZhbHVlIG9wMV9tID0gKm9wMTsKKyAgICBIZXhWYWx1ZSBvcDJfbSA9ICpvcDI7Cisg ICAgc3dpdGNoIChvcF90eXBlcykgeworICAgIGNhc2UgSU1NX0lNTToKKyAgICBjYXNlIElNTV9S RUc6CisgICAgICAgIHl5YXNzZXJ0KGMsIGxvY3AsIGZhbHNlLCAiQVNSIGJldHdlZW4gSU1NIG9w IElNTSwgYW5kIElNTSBvcCBSRUciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi IG5vdCBoYW5kbGVkISIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJFR19JTU06IHsKKyAg ICAgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNzID0gYmluX29wX3NpZ25lZG5lc3MoYywgbG9j cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3AxLT5zaWduZWRuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvcDItPnNpZ25lZG5lc3MpOworICAgICAgICBPVVQoYywgbG9jcCwgIntc biIpOworICAgICAgICBnZW5fY19pbnRfdHlwZShjLCBsb2NwLCBiaXRfd2lkdGgsIHNpZ25lZG5l c3MpOworICAgICAgICBPVVQoYywgbG9jcCwgIiBzaGlmdCA9ICIsIG9wMiwgIjtcbiIpOworICAg ICAgICBPVVQoYywgbG9jcCwgImlmICgiLCBvcDIsICIgPj0gIiwgJmJpdF93aWR0aCwgIikge1xu Iik7CisgICAgICAgIE9VVChjLCBsb2NwLCAiICAgIHNoaWZ0ID0gIiwgJmJpdF93aWR0aCwgIiAt IDE7XG4iKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICJ9XG4iKTsKKyAgICAgICAgT1VUKGMsIGxv Y3AsICJ0Y2dfZ2VuX3NhcmlfIiwgYml0X3N1ZmZpeCwKKyAgICAgICAgICAgICIoIiwgcmVzLCAi LCAiLCBvcDEsICIsIHNoaWZ0KTtcbn1cbiIpOworICAgIH0gYnJlYWs7CisgICAgY2FzZSBSRUdf UkVHOgorICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fc2FyXyIsIGJpdF9zdWZmaXgsCisg ICAgICAgICAgICAiKCIsIHJlcywgIiwgIiwgJm9wMV9tLCAiLCAiLCBvcDIsICIpO1xuIik7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAob3BfdHlwZXMgPT0gUkVHX1JFRykgeworICAg ICAgICAvKiBIYW5kbGUgcmlnaHQgc2hpZnQgYnkgdmFsdWVzID49IGJpdF93aWR0aCAqLworICAg ICAgICBjb25zdCBjaGFyICpvZmZzZXQgPSBvcF9pczY0Yml0ID8gIjYzIiA6ICIzMSI7CisgICAg ICAgIEhleFZhbHVlIHRtcCA9IGdlbl90bXAoYywgbG9jcCwgYml0X3dpZHRoLCBTSUdORUQpOwor ICAgICAgICBIZXhWYWx1ZSB6ZXJvID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIwIiwgYml0X3dp ZHRoLCBTSUdORUQpOworICAgICAgICBIZXhWYWx1ZSBlZGdlID0gZ2VuX2ltbV92YWx1ZShjLCBs b2NwLCBiaXRfd2lkdGgsIGJpdF93aWR0aCwgVU5TSUdORUQpOworCisgICAgICAgIGVkZ2UgPSBy dmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgJmVkZ2UpOworICAgICAgICBpZiAob3BfaXM2NGJp dCkgeworICAgICAgICAgICAgb3AyX20gPSBnZW5fcnZhbHVlX2V4dGVuZChjLCBsb2NwLCAmb3Ay X20pOworICAgICAgICB9CisgICAgICAgIG9wMV9tID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxv Y3AsICZvcDFfbSk7CisgICAgICAgIG9wMl9tID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxvY3As ICZvcDJfbSk7CisKKyAgICAgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2V4dHJhY3RfIiwgYml0 X3N1ZmZpeCwgIigiLAorICAgICAgICAgICAgJnRtcCwgIiwgIiwgJm9wMV9tLCAiLCAiLCBvZmZz ZXQsICIsIDEpO1xuIik7CisgICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9zdWJfIiwgYml0 X3N1ZmZpeCwgIigiLAorICAgICAgICAgICAgJnRtcCwgIiwgIiwgJnplcm8sICIsICIsICZ0bXAs ICIpO1xuIik7CisgICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9tb3Zjb25kX2kiLCAmYml0 X3dpZHRoKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICIoVENHX0NPTkRfR0VVLCAiLCByZXMsICIs ICIsICZvcDJfbSwgIiwgIiwgJmVkZ2UpOworICAgICAgICBPVVQoYywgbG9jcCwgIiwgIiwgJnRt cCwgIiwgIiwgcmVzLCAiKTtcbiIpOworICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwg JmVkZ2UpOworICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJnRtcCk7CisgICAgfQor ICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmb3AxX20pOworICAgIGdlbl9ydmFsdWVfZnJl ZShjLCBsb2NwLCAmb3AyX20pOworfQorCitzdGF0aWMgdm9pZCBnZW5fbHNyX29wKENvbnRleHQg KmMsIFlZTFRZUEUgKmxvY3AsIHVuc2lnbmVkIGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBvcF9pczY0Yml0LCBjb25zdCBjaGFyICpiaXRfc3VmZml4LAorICAgICAgICAg ICAgICAgICAgICAgICBIZXhWYWx1ZSAqcmVzLCBlbnVtIE9wVHlwZXMgb3BfdHlwZXMsCisgICAg ICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpvcDEsIEhleFZhbHVlICpvcDIpCit7CisgICAg SGV4VmFsdWUgb3AxX20gPSAqb3AxOworICAgIEhleFZhbHVlIG9wMl9tID0gKm9wMjsKKyAgICBz d2l0Y2ggKG9wX3R5cGVzKSB7CisgICAgY2FzZSBJTU1fSU1NOgorICAgIGNhc2UgSU1NX1JFRzoK KyAgICAgICAgeXlhc3NlcnQoYywgbG9jcCwgZmFsc2UsICJMU1IgYmV0d2VlbiBJTU0gb3AgSU1N LCBhbmQgSU1NIG9wIFJFRyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbm90 IGhhbmRsZWQhIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVHX0lNTToKKyAgICAgICAg T1VUKGMsIGxvY3AsICJpZiAoIiwgb3AyLCAiID49ICIsICZiaXRfd2lkdGgsICIpIHtcbiIpOwor ICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fbW92aV8iLCBiaXRfc3VmZml4LCAiKCIsIHJl cywgIiwgMCk7XG4iKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICJ9IGVsc2Uge1xuIik7CisgICAg ICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9zaHJpXyIsIGJpdF9zdWZmaXgsCisgICAgICAgICAg ICAiKCIsIHJlcywgIiwgIiwgb3AxLCAiLCAiLCBvcDIsICIpO1xuIik7CisgICAgICAgIE9VVChj LCBsb2NwLCAifVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVHX1JFRzoKKyAgICAg ICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3Nocl8iLCBiaXRfc3VmZml4LAorICAgICAgICAgICAg IigiLCByZXMsICIsICIsICZvcDFfbSwgIiwgIiwgb3AyLCAiKTtcbiIpOworICAgICAgICBicmVh azsKKyAgICB9CisgICAgaWYgKG9wX3R5cGVzID09IFJFR19SRUcpIHsKKyAgICAgICAgLyogSGFu ZGxlIHJpZ2h0IHNoaWZ0IGJ5IHZhbHVlcyA+PSBiaXRfd2lkdGggKi8KKyAgICAgICAgSGV4VmFs dWUgemVybyA9IGdlbl9jb25zdGFudChjLCBsb2NwLCAiMCIsIGJpdF93aWR0aCwgVU5TSUdORUQp OworICAgICAgICBIZXhWYWx1ZSBlZGdlID0gZ2VuX2ltbV92YWx1ZShjLCBsb2NwLCBiaXRfd2lk dGgsIGJpdF93aWR0aCwgVU5TSUdORUQpOworICAgICAgICBlZGdlID0gcnZhbHVlX21hdGVyaWFs aXplKGMsIGxvY3AsICZlZGdlKTsKKyAgICAgICAgaWYgKG9wX2lzNjRiaXQpIHsKKyAgICAgICAg ICAgIG9wMl9tID0gZ2VuX3J2YWx1ZV9leHRlbmQoYywgbG9jcCwgJm9wMl9tKTsKKyAgICAgICAg fQorICAgICAgICBvcDFfbSA9IHJ2YWx1ZV9tYXRlcmlhbGl6ZShjLCBsb2NwLCAmb3AxX20pOwor ICAgICAgICBvcDJfbSA9IHJ2YWx1ZV9tYXRlcmlhbGl6ZShjLCBsb2NwLCAmb3AyX20pOworICAg ICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fbW92Y29uZF9pIiwgJmJpdF93aWR0aCk7CisgICAg ICAgIE9VVChjLCBsb2NwLCAiKFRDR19DT05EX0dFVSwgIiwgcmVzLCAiLCAiLCAmb3AyX20sICIs ICIsICZlZGdlKTsKKyAgICAgICAgT1VUKGMsIGxvY3AsICIsICIsICZ6ZXJvLCAiLCAiLCByZXMs ICIpO1xuIik7CisgICAgICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmZWRnZSk7CisgICAg fQorICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmb3AxX20pOworICAgIGdlbl9ydmFsdWVf ZnJlZShjLCBsb2NwLCAmb3AyX20pOworfQorCisvKgorICogTm90ZTogVGhpcyBpbXBsZW1lbnRh dGlvbiBvZiBsb2dpY2FsIGBhbmRgIGRvZXMgbm90IG1pcnJvciB0aGF0IGluIEMuCisgKiBXZSBk byBub3Qgc2hvcnQtY2lyY3VpdCBsb2dpY2FsIGV4cHJlc3Npb25zIQorICovCitzdGF0aWMgdm9p ZCBnZW5fYW5kbF9vcChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCB1bnNpZ25lZCBiaXRfd2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiaXRfc3VmZml4LCBIZXhW YWx1ZSAqcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBPcFR5cGVzIG9wX3R5cGVz LCBIZXhWYWx1ZSAqb3AxLAorICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKm9wMikK K3sKKyAgICAodm9pZCkgYml0X3dpZHRoOworICAgIEhleFZhbHVlIHRtcDEsIHRtcDI7CisgICAg SGV4VmFsdWUgemVybyA9IGdlbl9jb25zdGFudChjLCBsb2NwLCAiMCIsIDMyLCBVTlNJR05FRCk7 CisgICAgbWVtc2V0KCZ0bXAxLCAwLCBzaXplb2YoSGV4VmFsdWUpKTsKKyAgICBtZW1zZXQoJnRt cDIsIDAsIHNpemVvZihIZXhWYWx1ZSkpOworICAgIHN3aXRjaCAob3BfdHlwZXMpIHsKKyAgICBj YXNlIElNTV9JTU06CisgICAgY2FzZSBJTU1fUkVHOgorICAgIGNhc2UgUkVHX0lNTToKKyAgICAg ICAgeXlhc3NlcnQoYywgbG9jcCwgZmFsc2UsICJBTkRMIGJldHdlZW4gSU1NIG9wIElNTSwgSU1N IG9wIFJFRywgYW5kIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBSRUcgb3Ag SU1NLCBub3QgaGFuZGxlZCEiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSRUdfUkVHOgor ICAgICAgICB0bXAxID0gZ2VuX2Jpbl9jbXAoYywgbG9jcCwgVENHX0NPTkRfTkUsIG9wMSwgJnpl cm8pOworICAgICAgICB0bXAyID0gZ2VuX2Jpbl9jbXAoYywgbG9jcCwgVENHX0NPTkRfTkUsIG9w MiwgJnplcm8pOworICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fYW5kXyIsIGJpdF9zdWZm aXgsCisgICAgICAgICAgICAiKCIsIHJlcywgIiwgIiwgJnRtcDEsICIsICIsICZ0bXAyLCAiKTtc biIpOworICAgICAgICBnZW5fcnZhbHVlX2ZyZWVfbWFudWFsKGMsIGxvY3AsICZ6ZXJvKTsKKyAg ICAgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZ0bXAxKTsKKyAgICAgICAgZ2VuX3J2YWx1 ZV9mcmVlKGMsIGxvY3AsICZ0bXAyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZCBnZW5fbWlubWF4X29wKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIHVuc2lnbmVk IGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnJlcywgZW51 bSBPcFR5cGVzIG9wX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAq b3AxLCBIZXhWYWx1ZSAqb3AyLCBib29sIG1pbm1heCkKK3sKKyAgICBjb25zdCBjaGFyICptbTsK KyAgICBIZXhWYWx1ZSBvcDFfbSA9ICpvcDE7CisgICAgSGV4VmFsdWUgb3AyX20gPSAqb3AyOwor ICAgIGJvb2wgaXNfdW5zaWduZWQ7CisKKyAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBy ZXMtPnNpZ25lZG5lc3MpOworICAgIGlzX3Vuc2lnbmVkID0gcmVzLT5zaWduZWRuZXNzID09IFVO U0lHTkVEOworCisgICAgaWYgKG1pbm1heCkgeworICAgICAgICAvKiBNYXggKi8KKyAgICAgICAg bW0gPSBpc191bnNpZ25lZCA/ICJ0Y2dfZ2VuX3VtYXgiIDogInRjZ19nZW5fc21heCI7CisgICAg fSBlbHNlIHsKKyAgICAgICAgLyogTWluICovCisgICAgICAgIG1tID0gaXNfdW5zaWduZWQgPyAi dGNnX2dlbl91bWluIiA6ICJ0Y2dfZ2VuX3NtaW4iOworICAgIH0KKyAgICBzd2l0Y2ggKG9wX3R5 cGVzKSB7CisgICAgY2FzZSBJTU1fSU1NOgorICAgICAgICB5eWFzc2VydChjLCBsb2NwLCBmYWxz ZSwgIk1JTk1BWCBiZXR3ZWVuIElNTSBvcCBJTU0sIG5vdCBoYW5kbGVkISIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIElNTV9SRUc6CisgICAgICAgIG9wMV9tLmJpdF93aWR0aCA9IGJpdF93 aWR0aDsKKyAgICAgICAgb3AxX20gPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgJm9wMV9t KTsKKyAgICAgICAgT1VUKGMsIGxvY3AsIG1tLCAiX2kiLCAmYml0X3dpZHRoLCAiKCIpOworICAg ICAgICBPVVQoYywgbG9jcCwgcmVzLCAiLCAiLCAmb3AxX20sICIsICIsIG9wMiwgIik7XG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSRUdfSU1NOgorICAgICAgICBvcDJfbS5iaXRfd2lk dGggPSBiaXRfd2lkdGg7CisgICAgICAgIG9wMl9tID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxv Y3AsICZvcDJfbSk7CisgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2FzZSBSRUdfUkVH OgorICAgICAgICBPVVQoYywgbG9jcCwgbW0sICJfaSIsICZiaXRfd2lkdGgsICIoIik7CisgICAg ICAgIE9VVChjLCBsb2NwLCByZXMsICIsICIsIG9wMSwgIiwgIiwgJm9wMl9tLCAiKTtcbiIpOwor ICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZvcDFf bSk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZvcDJfbSk7Cit9CisKKy8qIENvZGUg Z2VuZXJhdGlvbiBmdW5jdGlvbnMgKi8KK0hleFZhbHVlIGdlbl9iaW5fb3AoQ29udGV4dCAqYywK KyAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAg T3BUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpvcDEsCisgICAgICAg ICAgICAgICAgICAgIEhleFZhbHVlICpvcDIpCit7CisgICAgLyogUmVwbGljYXRlIG9wZXJhbmRz IHRvIGF2b2lkIHNpZGUgZWZmZWN0cyAqLworICAgIEhleFZhbHVlIG9wMV9tID0gKm9wMTsKKyAg ICBIZXhWYWx1ZSBvcDJfbSA9ICpvcDI7CisgICAgZW51bSBPcFR5cGVzIG9wX3R5cGVzOworICAg IGJvb2wgb3BfaXM2NGJpdDsKKyAgICBIZXhTaWduZWRuZXNzIHNpZ25lZG5lc3M7CisgICAgdW5z aWduZWQgYml0X3dpZHRoOworICAgIGNvbnN0IGNoYXIgKmJpdF9zdWZmaXg7CisgICAgSGV4VmFs dWUgcmVzOworCisgICAgbWVtc2V0KCZyZXMsIDAsIHNpemVvZihIZXhWYWx1ZSkpOworCisgICAg LyoKKyAgICAgKiBJZiB0aGUgb3BlcmFuZHMgYXJlIFZBUklEJ3Mgd2UgbmVlZCB0byBsb29rIHVw IHRoZQorICAgICAqIHR5cGUgaW5mb3JtYXRpb24uCisgICAgICovCisgICAgaWYgKG9wMV9tLnR5 cGUgPT0gVkFSSUQpIHsKKyAgICAgICAgZmluZF92YXJpYWJsZShjLCBsb2NwLCAmb3AxX20sICZv cDFfbSk7CisgICAgfQorICAgIGlmIChvcDJfbS50eXBlID09IFZBUklEKSB7CisgICAgICAgIGZp bmRfdmFyaWFibGUoYywgbG9jcCwgJm9wMl9tLCAmb3AyX20pOworICAgIH0KKworICAgIG9wX3R5 cGVzID0gKG9wMV9tLnR5cGUgIT0gSU1NRURJQVRFKSA8PCAxCisgICAgICAgICAgICAgICB8IChv cDJfbS50eXBlICE9IElNTUVESUFURSk7CisgICAgb3BfaXM2NGJpdCA9IG9wMV9tLmJpdF93aWR0 aCA9PSA2NCB8fCBvcDJfbS5iaXRfd2lkdGggPT0gNjQ7CisgICAgLyogU2hpZnQgZ3JlYXRlciB0 aGFuIDMyIGFyZSA2NCBiaXRzIHdpZGUgKi8KKworICAgIGlmICh0eXBlID09IEFTTF9PUCAmJiBv cDJfbS50eXBlID09IElNTUVESUFURSAmJgorICAgICAgICBvcDJfbS5pbW0udHlwZSA9PSBWQUxV RSAmJiBvcDJfbS5pbW0udmFsdWUgPj0gMzIpIHsKKyAgICAgICAgb3BfaXM2NGJpdCA9IHRydWU7 CisgICAgfQorCisgICAgYml0X3dpZHRoID0gKG9wX2lzNjRiaXQpID8gNjQgOiAzMjsKKyAgICBi aXRfc3VmZml4ID0gb3BfaXM2NGJpdCA/ICJpNjQiIDogImkzMiI7CisKKyAgICAvKiBFeHRlbmQg dG8gNjQtYml0cywgaWYgcmVxdWlyZWQgKi8KKyAgICBpZiAob3BfaXM2NGJpdCkgeworICAgICAg ICBvcDFfbSA9IGdlbl9ydmFsdWVfZXh0ZW5kKGMsIGxvY3AsICZvcDFfbSk7CisgICAgICAgIG9w Ml9tID0gZ2VuX3J2YWx1ZV9leHRlbmQoYywgbG9jcCwgJm9wMl9tKTsKKyAgICB9CisKKyAgICBz aWduZWRuZXNzID0gYmluX29wX3NpZ25lZG5lc3MoYywgbG9jcCwgb3AxX20uc2lnbmVkbmVzcywg b3AyX20uc2lnbmVkbmVzcyk7CisgICAgaWYgKG9wX3R5cGVzICE9IElNTV9JTU0pIHsKKyAgICAg ICAgcmVzID0gZ2VuX3RtcChjLCBsb2NwLCBiaXRfd2lkdGgsIHNpZ25lZG5lc3MpOworICAgIH0g ZWxzZSB7CisgICAgICAgIHJlcyA9IGdlbl9pbW1fcWVtdV90bXAoYywgbG9jcCwgYml0X3dpZHRo LCBzaWduZWRuZXNzKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEFE RF9PUDoKKyAgICAgICAgZ2VuX3NpbXBsZV9vcChjLCBsb2NwLCBiaXRfd2lkdGgsIGJpdF9zdWZm aXgsICZyZXMsCisgICAgICAgICAgICAgICAgICAgICAgb3BfdHlwZXMsICZvcDFfbSwgJm9wMl9t LAorICAgICAgICAgICAgICAgICAgICAgICIgKyAiLAorICAgICAgICAgICAgICAgICAgICAgICJ0 Y2dfZ2VuX2FkZGlfIiwKKyAgICAgICAgICAgICAgICAgICAgICAidGNnX2dlbl9hZGRpXyIsCisg ICAgICAgICAgICAgICAgICAgICAgInRjZ19nZW5fYWRkXyIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFNVQl9PUDoKKyAgICAgICAgZ2VuX3N1Yl9vcChjLCBsb2NwLCBiaXRfd2lkdGgsIGJp dF9zdWZmaXgsICZyZXMsIG9wX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICZvcDFfbSwgJm9w Ml9tKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNVUxfT1A6CisgICAgICAgIGdlbl9zaW1w bGVfb3AoYywgbG9jcCwgYml0X3dpZHRoLCBiaXRfc3VmZml4LCAmcmVzLAorICAgICAgICAgICAg ICAgICAgICAgIG9wX3R5cGVzLCAmb3AxX20sICZvcDJfbSwKKyAgICAgICAgICAgICAgICAgICAg ICAiICogIiwKKyAgICAgICAgICAgICAgICAgICAgICAidGNnX2dlbl9tdWxpXyIsCisgICAgICAg ICAgICAgICAgICAgICAgInRjZ19nZW5fbXVsaV8iLAorICAgICAgICAgICAgICAgICAgICAgICJ0 Y2dfZ2VuX211bF8iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBU0xfT1A6CisgICAgICAg IGdlbl9hc2xfb3AoYywgbG9jcCwgYml0X3dpZHRoLCBvcF9pczY0Yml0LCBiaXRfc3VmZml4LCAm cmVzLCBvcF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAmb3AxX20sICZvcDJfbSk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgQVNSX09QOgorICAgICAgICBnZW5fYXNyX29wKGMsIGxvY3As IGJpdF93aWR0aCwgb3BfaXM2NGJpdCwgYml0X3N1ZmZpeCwgJnJlcywgb3BfdHlwZXMsCisgICAg ICAgICAgICAgICAgICAgJm9wMV9tLCAmb3AyX20pOworICAgICAgICBicmVhazsKKyAgICBjYXNl IExTUl9PUDoKKyAgICAgICAgZ2VuX2xzcl9vcChjLCBsb2NwLCBiaXRfd2lkdGgsIG9wX2lzNjRi aXQsIGJpdF9zdWZmaXgsICZyZXMsIG9wX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICZvcDFf bSwgJm9wMl9tKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTkRCX09QOgorICAgICAgICBn ZW5fc2ltcGxlX29wKGMsIGxvY3AsIGJpdF93aWR0aCwgYml0X3N1ZmZpeCwgJnJlcywKKyAgICAg ICAgICAgICAgICAgICAgICBvcF90eXBlcywgJm9wMV9tLCAmb3AyX20sCisgICAgICAgICAgICAg ICAgICAgICAgIiAmICIsCisgICAgICAgICAgICAgICAgICAgICAgInRjZ19nZW5fYW5kaV8iLAor ICAgICAgICAgICAgICAgICAgICAgICJ0Y2dfZ2VuX2FuZGlfIiwKKyAgICAgICAgICAgICAgICAg ICAgICAidGNnX2dlbl9hbmRfIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1JCX09QOgor ICAgICAgICBnZW5fc2ltcGxlX29wKGMsIGxvY3AsIGJpdF93aWR0aCwgYml0X3N1ZmZpeCwgJnJl cywKKyAgICAgICAgICAgICAgICAgICAgICBvcF90eXBlcywgJm9wMV9tLCAmb3AyX20sCisgICAg ICAgICAgICAgICAgICAgICAgIiB8ICIsCisgICAgICAgICAgICAgICAgICAgICAgInRjZ19nZW5f b3JpXyIsCisgICAgICAgICAgICAgICAgICAgICAgInRjZ19nZW5fb3JpXyIsCisgICAgICAgICAg ICAgICAgICAgICAgInRjZ19nZW5fb3JfIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWE9S Ql9PUDoKKyAgICAgICAgZ2VuX3NpbXBsZV9vcChjLCBsb2NwLCBiaXRfd2lkdGgsIGJpdF9zdWZm aXgsICZyZXMsCisgICAgICAgICAgICAgICAgICAgICAgb3BfdHlwZXMsICZvcDFfbSwgJm9wMl9t LAorICAgICAgICAgICAgICAgICAgICAgICIgXiAiLAorICAgICAgICAgICAgICAgICAgICAgICJ0 Y2dfZ2VuX3hvcmlfIiwKKyAgICAgICAgICAgICAgICAgICAgICAidGNnX2dlbl94b3JpXyIsCisg ICAgICAgICAgICAgICAgICAgICAgInRjZ19nZW5feG9yXyIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEFORExfT1A6CisgICAgICAgIGdlbl9hbmRsX29wKGMsIGxvY3AsIGJpdF93aWR0aCwg Yml0X3N1ZmZpeCwgJnJlcywgb3BfdHlwZXMsICZvcDFfbSwKKyAgICAgICAgICAgICAgICAgICAg Jm9wMl9tKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNSU5JX09QOgorICAgICAgICBnZW5f bWlubWF4X29wKGMsIGxvY3AsIGJpdF93aWR0aCwgJnJlcywgb3BfdHlwZXMsICZvcDFfbSwgJm9w Ml9tLAorICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBNQVhJX09QOgorICAgICAgICBnZW5fbWlubWF4X29wKGMsIGxvY3AsIGJpdF93aWR0aCwg JnJlcywgb3BfdHlwZXMsICZvcDFfbSwgJm9wMl9tLCB0cnVlKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK0hleFZhbHVlIGdlbl9jYXN0X29wKENvbnRleHQg KmMsCisgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAg ICAgICAgSGV4VmFsdWUgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykK K3sKKyAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBzcmMtPnNpZ25lZG5lc3MpOworICAg IGlmIChzcmMtPmJpdF93aWR0aCA9PSB0YXJnZXRfd2lkdGgpIHsKKyAgICAgICAgcmV0dXJuICpz cmM7CisgICAgfSBlbHNlIGlmIChzcmMtPnR5cGUgPT0gSU1NRURJQVRFKSB7CisgICAgICAgIEhl eFZhbHVlIHJlcyA9ICpzcmM7CisgICAgICAgIHJlcy5iaXRfd2lkdGggPSB0YXJnZXRfd2lkdGg7 CisgICAgICAgIHJlcy5zaWduZWRuZXNzID0gc2lnbmVkbmVzczsKKyAgICAgICAgcmV0dXJuIHJl czsKKyAgICB9IGVsc2UgeworICAgICAgICBIZXhWYWx1ZSByZXMgPSBnZW5fdG1wKGMsIGxvY3As IHRhcmdldF93aWR0aCwgc2lnbmVkbmVzcyk7CisgICAgICAgIC8qIFRydW5jYXRlICovCisgICAg ICAgIGlmIChzcmMtPmJpdF93aWR0aCA+IHRhcmdldF93aWR0aCkgeworICAgICAgICAgICAgT1VU KGMsIGxvY3AsICJ0Y2dfZ2VuX3RydW5jX2k2NF90bCgiLCAmcmVzLCAiLCAiLCBzcmMsICIpO1xu Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBs b2NwLCBzcmMtPnNpZ25lZG5lc3MpOworICAgICAgICAgICAgaWYgKHNyYy0+c2lnbmVkbmVzcyA9 PSBVTlNJR05FRCkgeworICAgICAgICAgICAgICAgIC8qIEV4dGVuZCB1bnNpZ25lZCAqLworICAg ICAgICAgICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9leHR1X2kzMl9pNjQoIiwKKyAgICAg ICAgICAgICAgICAgICAgJnJlcywgIiwgIiwgc3JjLCAiKTtcbiIpOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAvKiBFeHRlbmQgc2lnbmVkICovCisgICAgICAgICAgICAg ICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2V4dF9pMzJfaTY0KCIsCisgICAgICAgICAgICAgICAg ICAgICZyZXMsICIsICIsIHNyYywgIik7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgc3JjKTsKKyAgICAgICAgcmV0dXJuIHJl czsKKyAgICB9Cit9CisKKworLyoKKyAqIEltcGxlbWVudHMgYW4gZXh0ZW5zaW9uIHdoZW4gdGhl IGBzcmNfd2lkdGhgIGlzIGFuIGltbWVkaWF0ZS4KKyAqIElmIHRoZSBgdmFsdWVgIHRvIGV4dGVu ZCBpcyBhbHNvIGFuIGltbWVkaWF0ZSB3ZSB1c2UgYGV4dHJhY3Qvc2V4dHJhY3RgCisgKiBmcm9t IFFFTVUgYGJpdG9wcy5oYC4gSWYgYHZhbHVlYCBpcyBhIFRDR3YgdGhlbiB3ZSByZWx5IG9uCisg KiBgdGNnX2dlbl9leHRyYWN0L3RjZ19nZW5fc2V4dHJhY3RgLgorICovCitzdGF0aWMgSGV4VmFs dWUgZ2VuX2V4dGVuZF9pbW1fd2lkdGhfb3AoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpzcmNfd2lkdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZHN0X3dpZHRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp2YWx1ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXhTaWduZWRuZXNzIHNpZ25lZG5lc3Mp Cit7CisgICAgLyoKKyAgICAgKiBJZiB0aGUgc291cmNlIHdpZHRoIGlzIG5vdCBhbiBpbW1lZGlh dGUgdmFsdWUsIHdlIG5lZWQgdG8gZ3VhcmQKKyAgICAgKiBvdXIgZXh0ZW5kIG9wIHdpdGggaWYg c3RhdGVtZW50cyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUKKyAgICAgKiBgc3JjX3dpZHRoX21g IGlzIDAuCisgICAgICovCisgICAgY29uc3QgY2hhciAqc2lnbl9wcmVmaXg7CisgICAgYm9vbCBu ZWVkX2d1YXJkaW5nOworCisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywgbG9jcCwgc2lnbmVkbmVz cyk7CisgICAgYXNzZXJ0KGRzdF93aWR0aCA9PSA2NCB8fCBkc3Rfd2lkdGggPT0gMzIpOworICAg IGFzc2VydChzcmNfd2lkdGgtPnR5cGUgPT0gSU1NRURJQVRFKTsKKworICAgIHNpZ25fcHJlZml4 ID0gKHNpZ25lZG5lc3MgPT0gVU5TSUdORUQpID8gIiIgOiAicyI7CisgICAgbmVlZF9ndWFyZGlu ZyA9IChzcmNfd2lkdGgtPmltbS50eXBlICE9IFZBTFVFKTsKKworICAgIGlmIChzcmNfd2lkdGgt PmltbS50eXBlID09IFZBTFVFICYmCisgICAgICAgIHNyY193aWR0aC0+aW1tLnZhbHVlID09IDAp IHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2UgY2FuIGJhaWwgb3V0IGVhcmx5IGlmIHRoZSBz b3VyY2Ugd2lkdGggaXMga25vd24gdG8gYmUgemVybworICAgICAgICAgKiBhdCB0cmFuc2xhdGlv biB0aW1lLgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIGdlbl9pbW1fdmFsdWUoYywgbG9j cCwgMCwgZHN0X3dpZHRoLCBzaWduZWRuZXNzKTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUtPnR5 cGUgPT0gSU1NRURJQVRFKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIGJvdGggdGhlIHZh bHVlIGFuZCBzb3VyY2Ugd2lkdGggYXJlIGltbWVkaWF0ZXMsCisgICAgICAgICAqIHdlIGNhbiBw ZXJmb3JtIHRoZSBleHRlbnNpb24gYXQgdHJhbnNsYXRpb24gdGltZQorICAgICAgICAgKiB1c2lu ZyBRRU1VcyBiaXRvcHMuCisgICAgICAgICAqLworICAgICAgICBIZXhWYWx1ZSByZXMgPSBnZW5f aW1tX3FlbXVfdG1wKGMsIGxvY3AsIGRzdF93aWR0aCwgc2lnbmVkbmVzcyk7CisgICAgICAgIGdl bl9jX2ludF90eXBlKGMsIGxvY3AsIGRzdF93aWR0aCwgc2lnbmVkbmVzcyk7CisgICAgICAgIE9V VChjLCBsb2NwLCAiICIsICZyZXMsICIgPSAwO1xuIik7CisgICAgICAgIGlmIChuZWVkX2d1YXJk aW5nKSB7CisgICAgICAgICAgICBPVVQoYywgbG9jcCwgImlmICgiLCBzcmNfd2lkdGgsICIgIT0g MCkge1xuIik7CisgICAgICAgIH0KKyAgICAgICAgT1VUKGMsIGxvY3AsICZyZXMsICIgPSAiLCBz aWduX3ByZWZpeCwgImV4dHJhY3QiLCAmZHN0X3dpZHRoKTsKKyAgICAgICAgT1VUKGMsIGxvY3As ICIoIiwgdmFsdWUsICIsIDAsICIsIHNyY193aWR0aCwgIik7XG4iKTsKKyAgICAgICAgaWYgKG5l ZWRfZ3VhcmRpbmcpIHsKKyAgICAgICAgICAgIE9VVChjLCBsb2NwLCAifVxuIik7CisgICAgICAg IH0KKworICAgICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgdmFsdWUpOworICAgICAgICBy ZXR1cm4gcmVzOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHRoZSBz b3VyY2Ugd2lkdGggaXMgYW4gaW1tZWRpYXRlIGFuZCB0aGUgdmFsdWUgdG8KKyAgICAgICAgICog ZXh0ZW5kIGlzIGEgVENHdiwgdGhlbiB1c2UgdGNnX2dlbl9leHRyYWN0L3RjZ19nZW5fc2V4dHJh Y3QKKyAgICAgICAgICovCisgICAgICAgIEhleFZhbHVlIHJlcyA9IGdlbl90bXAoYywgbG9jcCwg ZHN0X3dpZHRoLCBzaWduZWRuZXNzKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZiB0aGUg d2lkdGggaXMgYW4gaW1tZWRpYXRlIHZhbHVlIHdlIGtub3cgaXQgaXMgbm9uLXplcm8KKyAgICAg ICAgICogYXQgdGhpcyBwb2ludCwgb3RoZXJ3aXNlIHdlIG5lZWQgYW4gaWYtc3RhdGVtZW50Cisg ICAgICAgICAqLworICAgICAgICBpZiAobmVlZF9ndWFyZGluZykgeworICAgICAgICAgICAgT1VU KGMsIGxvY3AsICJpZiAoIiwgc3JjX3dpZHRoLCAiICE9IDApIHtcbiIpOworICAgICAgICB9Cisg ICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl8iLCBzaWduX3ByZWZpeCwgImV4dHJhY3RfaSIs ICZkc3Rfd2lkdGgpOworICAgICAgICBPVVQoYywgbG9jcCwgIigiLCAmcmVzLCAiLCAiLCB2YWx1 ZSwgIiwgMCwgIiwgc3JjX3dpZHRoLAorICAgICAgICAgICAgIik7XG4iKTsKKyAgICAgICAgaWYg KG5lZWRfZ3VhcmRpbmcpIHsKKyAgICAgICAgICAgIE9VVChjLCBsb2NwLCAifSBlbHNlIHtcbiIp OworICAgICAgICAgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX21vdmlfaSIsICZkc3Rfd2lkdGgs ICIoIiwgJnJlcywKKyAgICAgICAgICAgICAgICAiLCAwKTtcbiIpOworICAgICAgICAgICAgT1VU KGMsIGxvY3AsICJ9XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGdlbl9ydmFsdWVfZnJlZShj LCBsb2NwLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorfQorCisvKgorICog SW1wbGVtZW50cyBhbiBleHRlbnNpb24gd2hlbiB0aGUgYHNyY193aWR0aGAgaXMgZ2l2ZW4gYnkK KyAqIGEgVENHdi4gSGVyZSB3ZSBuZWVkIHRvIHJlaW1wbGVtZW50IHRoZSBiZWhhdmlvdXIgb2YK KyAqIGB0Y2dfZ2VuX2V4dHJhY3RgIGFuZCB0aGUgbGlrZSB1c2luZyBzaGlmdHMgYW5kIG1hc2tz LgorICovCitzdGF0aWMgSGV4VmFsdWUgZ2VuX2V4dGVuZF90Y2dfd2lkdGhfb3AoQ29udGV4dCAq YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2Nw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpzcmNf d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg ZHN0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZh bHVlICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXhT aWduZWRuZXNzIHNpZ25lZG5lc3MpCit7CisgICAgSGV4VmFsdWUgc3JjX3dpZHRoX20gPSBydmFs dWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgc3JjX3dpZHRoKTsKKyAgICBIZXhWYWx1ZSB6ZXJvID0g Z2VuX2NvbnN0YW50KGMsIGxvY3AsICIwIiwgZHN0X3dpZHRoLCBVTlNJR05FRCk7CisgICAgSGV4 VmFsdWUgc2hpZnQgPSBnZW5fdG1wKGMsIGxvY3AsIGRzdF93aWR0aCwgVU5TSUdORUQpOworICAg IEhleFZhbHVlIHJlczsKKworICAgIGFzc2VydF9zaWduZWRuZXNzKGMsIGxvY3AsIHNpZ25lZG5l c3MpOworICAgIGFzc2VydChkc3Rfd2lkdGggPT0gNjQgfHwgZHN0X3dpZHRoID09IDMyKTsKKyAg ICBhc3NlcnQoc3JjX3dpZHRoLT50eXBlICE9IElNTUVESUFURSk7CisKKyAgICByZXMgPSBnZW5f dG1wKGMsIGxvY3AsIGRzdF93aWR0aCwgc2lnbmVkbmVzcyk7CisKKyAgICBPVVQoYywgbG9jcCwg InRjZ19nZW5fc3ViZmlfaSIsICZkc3Rfd2lkdGgpOworICAgIE9VVChjLCBsb2NwLCAiKCIsICZz aGlmdCwgIiwgIiwgJmRzdF93aWR0aCwgIiwgIiwgJnNyY193aWR0aF9tLCAiKTtcbiIpOworICAg IGlmIChzaWduZWRuZXNzID09IFVOU0lHTkVEKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1hc2tf c3RyID0gKGRzdF93aWR0aCA9PSAzMikKKyAgICAgICAgICAgID8gIjB4ZmZmZmZmZmYiCisgICAg ICAgICAgICA6ICIweGZmZmZmZmZmZmZmZmZmZmYiOworICAgICAgICBIZXhWYWx1ZSBtYXNrID0g Z2VuX3RtcF92YWx1ZShjLCBsb2NwLCBtYXNrX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkc3Rfd2lkdGgsIFVOU0lHTkVEKTsKKyAgICAgICAgT1VUKGMsIGxvY3As ICJ0Y2dfZ2VuX3Nocl9pIiwgJmRzdF93aWR0aCwgIigiLAorICAgICAgICAgICAgJm1hc2ssICIs ICIsICZtYXNrLCAiLCAiLCAmc2hpZnQsICIpO1xuIik7CisgICAgICAgIE9VVChjLCBsb2NwLCAi dGNnX2dlbl9hbmRfaSIsICZkc3Rfd2lkdGgsICIoIiwKKyAgICAgICAgICAgICZyZXMsICIsICIs IHZhbHVlLCAiLCAiLCAmbWFzaywgIik7XG4iKTsKKyAgICAgICAgZ2VuX3J2YWx1ZV9mcmVlKGMs IGxvY3AsICZtYXNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19n ZW5fc2hsX2kiLCAmZHN0X3dpZHRoLCAiKCIsCisgICAgICAgICAgICAmcmVzLCAiLCAiLCB2YWx1 ZSwgIiwgIiwgJnNoaWZ0LCAiKTtcbiIpOworICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5f c2FyX2kiLCAmZHN0X3dpZHRoLCAiKCIsCisgICAgICAgICAgICAmcmVzLCAiLCAiLCAmcmVzLCAi LCAiLCAmc2hpZnQsICIpO1xuIik7CisgICAgfQorICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9t b3Zjb25kX2kiLCAmZHN0X3dpZHRoLCAiKFRDR19DT05EX0VRLCAiLCAmcmVzLAorICAgICAgICAi LCAiKTsKKyAgICBPVVQoYywgbG9jcCwgJnNyY193aWR0aF9tLCAiLCAiLCAmemVybywgIiwgIiwg Jnplcm8sICIsICIsICZyZXMsCisgICAgICAgICIpO1xuIik7CisKKyAgICBnZW5fcnZhbHVlX2Zy ZWUoYywgbG9jcCwgJnNyY193aWR0aF9tKTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwg dmFsdWUpOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmc2hpZnQpOworCisgICAgcmV0 dXJuIHJlczsKK30KKworSGV4VmFsdWUgZ2VuX2V4dGVuZF9vcChDb250ZXh0ICpjLAorICAgICAg ICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICAgICAgICBI ZXhWYWx1ZSAqc3JjX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkc3Rf d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp2YWx1ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNzKQoreworICAgIHVuc2lnbmVk IGJpdF93aWR0aCA9IChkc3Rfd2lkdGggPSA2NCkgPyA2NCA6IDMyOworICAgIEhleFZhbHVlIHZh bHVlX20gPSAqdmFsdWU7CisgICAgSGV4VmFsdWUgc3JjX3dpZHRoX20gPSAqc3JjX3dpZHRoOwor CisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywgbG9jcCwgc2lnbmVkbmVzcyk7CisgICAgeXlhc3Nl cnQoYywgbG9jcCwgdmFsdWVfbS5iaXRfd2lkdGggPD0gYml0X3dpZHRoICYmCisgICAgICAgICAg ICAgICAgICAgICAgc3JjX3dpZHRoX20uYml0X3dpZHRoIDw9IGJpdF93aWR0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAiRXh0ZW5kaW5nIHRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gdGhlIGN1cnJl bnQgc2l6ZSIKKyAgICAgICAgICAgICAgICAgICAgICAiIG1ha2VzIG5vIHNlbnNlIik7CisKKyAg ICBpZiAodmFsdWVfbS5iaXRfd2lkdGggPCBiaXRfd2lkdGgpIHsKKyAgICAgICAgdmFsdWVfbSA9 IGdlbl9ydmFsdWVfZXh0ZW5kKGMsIGxvY3AsICZ2YWx1ZV9tKTsKKyAgICB9CisKKyAgICBpZiAo c3JjX3dpZHRoX20uYml0X3dpZHRoIDwgYml0X3dpZHRoKSB7CisgICAgICAgIHNyY193aWR0aF9t ID0gZ2VuX3J2YWx1ZV9leHRlbmQoYywgbG9jcCwgJnNyY193aWR0aF9tKTsKKyAgICB9CisKKyAg ICBpZiAoc3JjX3dpZHRoX20udHlwZSA9PSBJTU1FRElBVEUpIHsKKyAgICAgICAgcmV0dXJuIGdl bl9leHRlbmRfaW1tX3dpZHRoX29wKGMsIGxvY3AsICZzcmNfd2lkdGhfbSwgYml0X3dpZHRoLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlX20sIHNpZ25lZG5l c3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBnZW5fZXh0ZW5kX3RjZ193aWR0aF9v cChjLCBsb2NwLCAmc3JjX3dpZHRoX20sIGJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ2YWx1ZV9tLCBzaWduZWRuZXNzKTsKKyAgICB9Cit9CisKKy8q CisgKiBJbXBsZW1lbnRzIGByZGVwb3NpdGAgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgYHdp ZHRoYAorICogaXMgb2YgVENHdiB0eXBlLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byByZWltcGxl bWVudCB0aGUgYmVoYXZpb3VyCisgKiBvZiBgdGNnX2dlbl9kZXBvc2l0KmAgdXNpbmcgYmluYXJ5 IG9wZXJhdGlvbnMgYW5kIG1hc2tzL3NoaWZ0cy4KKyAqCisgKiBOb3RlOiB0aGlzIGlzIHRoZSBv bmx5IHR5cGUgb2YgYHJkZXBvc2l0YCB0aGF0IG9jY3VycywgbWVhbmluZyB0aGUKKyAqIGB3aWR0 aGAgaXMgX05FVkVSXyBvZiBJTU1FRElBVEUgdHlwZS4KKyAqLwordm9pZCBnZW5fcmRlcG9zaXRf b3AoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgICAgIFlZTFRZUEUgKmxvY3AsCisgICAg ICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgSGV4 VmFsdWUgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKmJlZ2luLAorICAg ICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKndpZHRoKQoreworICAgIC8qCisgICAgICogT3Ro ZXJ3aXNlIGlmIHRoZSB3aWR0aCBpcyBub3Qga25vd24sIHdlIGZhbGxiYWNrIG9uIHJlaW1wbGVt ZW50aW5nCisgICAgICogZGVzcG9zaXQgaW4gVENHLgorICAgICAqLworICAgIEhleFZhbHVlIGJl Z2luX20gPSAqYmVnaW47CisgICAgSGV4VmFsdWUgdmFsdWVfbSA9ICp2YWx1ZTsKKyAgICBIZXhW YWx1ZSB3aWR0aF9tID0gKndpZHRoOworICAgIGNvbnN0IGNoYXIgKm1hc2tfc3RyID0gKGRzdC0+ Yml0X3dpZHRoID09IDMyKQorICAgICAgICA/ICIweGZmZmZmZmZmVUwiCisgICAgICAgIDogIjB4 ZmZmZmZmZmZmZmZmZmZmZlVMIjsKKyAgICBIZXhWYWx1ZSBtYXNrID0gZ2VuX2NvbnN0YW50KGMs IGxvY3AsIG1hc2tfc3RyLCBkc3QtPmJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVOU0lHTkVEKTsKKyAgICBjb25zdCBjaGFyICpkc3Rfd2lkdGhfc3RyID0gKGRz dC0+Yml0X3dpZHRoID09IDMyKSA/ICIzMiIgOiAiNjQiOworICAgIEhleFZhbHVlIGs2NCA9IGdl bl9jb25zdGFudChjLCBsb2NwLCBkc3Rfd2lkdGhfc3RyLCBkc3QtPmJpdF93aWR0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5TSUdORUQpOworICAgIEhleFZhbHVlIHJlczsK KyAgICBIZXhWYWx1ZSB6ZXJvOworCisgICAgYXNzZXJ0KGRzdC0+Yml0X3dpZHRoID49IHZhbHVl LT5iaXRfd2lkdGgpOworICAgIGFzc2VydChiZWdpbi0+dHlwZSA9PSBJTU1FRElBVEUgJiYgYmVn aW4tPmltbS50eXBlID09IFZBTFVFKTsKKyAgICBhc3NlcnQoZHN0LT50eXBlID09IFJFR0lTVEVS X0FSRyk7CisKKyAgICB5eWFzc2VydChjLCBsb2NwLCB3aWR0aC0+dHlwZSAhPSBJTU1FRElBVEUs CisgICAgICAgICAgICAgIkltbWVkaWF0ZSBpbmRleCB0byByZGVwb3NpdCBub3QgaGFuZGxlZCEi KTsKKworICAgIHl5YXNzZXJ0KGMsIGxvY3AsIHZhbHVlX20uYml0X3dpZHRoID09IGRzdC0+Yml0 X3dpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgYmVnaW5fbS5iaXRfd2lkdGggPT0gZHN0 LT5iaXRfd2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICB3aWR0aF9tLmJpdF93aWR0aCA9 PSBkc3QtPmJpdF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAiRXh0ZW5zaW9uL3RydW5j YXRpb24gc2hvdWxkIGJlIHRha2VuIGNhcmUgb2YiCisgICAgICAgICAgICAgICAgICAgICAgIiBi ZWZvcmUgcmRlcG9zaXQhIik7CisKKyAgICB3aWR0aF9tID0gcnZhbHVlX21hdGVyaWFsaXplKGMs IGxvY3AsICZ3aWR0aF9tKTsKKworICAgIC8qCisgICAgICogbWFzayA9IDB4ZmZmZmZmZmZmZmZm ZmZmZiA+PiAoNjQgLSB3aWR0aCkKKyAgICAgKiBtYXNrID0gbWFzayA8PCBiZWdpbgorICAgICAq IHZhbHVlID0gKHZhbHVlIDw8IGJlZ2luKSAmIG1hc2sKKyAgICAgKiByZXMgPSBkc3QgJiB+bWFz aworICAgICAqIHJlcyA9IHJlcyB8IHZhbHVlCisgICAgICogZHN0ID0gKHdpZHRoICE9IDApID8g cmVzIDogZHN0CisgICAgICovCisgICAgazY0ID0gZ2VuX2Jpbl9vcChjLCBsb2NwLCBTVUJfT1As ICZrNjQsICZ3aWR0aF9tKTsKKyAgICBtYXNrID0gZ2VuX2Jpbl9vcChjLCBsb2NwLCBMU1JfT1As ICZtYXNrLCAmazY0KTsKKyAgICBiZWdpbl9tLmlzX21hbnVhbCA9IHRydWU7CisgICAgbWFzayA9 IGdlbl9iaW5fb3AoYywgbG9jcCwgQVNMX09QLCAmbWFzaywgJmJlZ2luX20pOworICAgIG1hc2su aXNfbWFudWFsID0gdHJ1ZTsKKyAgICB2YWx1ZV9tID0gZ2VuX2Jpbl9vcChjLCBsb2NwLCBBU0xf T1AsICZ2YWx1ZV9tLCAmYmVnaW5fbSk7CisgICAgdmFsdWVfbSA9IGdlbl9iaW5fb3AoYywgbG9j cCwgQU5EQl9PUCwgJnZhbHVlX20sICZtYXNrKTsKKworICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9ub3RfaSIsICZkc3QtPmJpdF93aWR0aCwgIigiLCAmbWFzaywgIiwgIiwKKyAgICAgICAgJm1h c2ssICIpO1xuIik7CisgICAgbWFzay5pc19tYW51YWwgPSBmYWxzZTsKKyAgICByZXMgPSBnZW5f YmluX29wKGMsIGxvY3AsIEFOREJfT1AsIGRzdCwgJm1hc2spOworICAgIHJlcyA9IGdlbl9iaW5f b3AoYywgbG9jcCwgT1JCX09QLCAmcmVzLCAmdmFsdWVfbSk7CisKKyAgICAvKgorICAgICAqIFdl IGRvbid0IG5lZWQgdG8gdHJ1bmNhdGUgYHJlc2AgaGVyZSwgc2luY2UgYWxsIG9wZXJhdGlvbnMg aW52b2x2ZWQgdXNlCisgICAgICogdGhlIHNhbWUgYml0IHdpZHRoLgorICAgICAqLworCisgICAg LyogSWYgdGhlIHdpZHRoIGlzIHplcm8sIHRoZW4gcmV0dXJuIHRoZSBpZGVudGl0eSBkc3QgPSBk c3QgKi8KKyAgICB6ZXJvID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIwIiwgcmVzLmJpdF93aWR0 aCwgVU5TSUdORUQpOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9tb3Zjb25kX2kiLCAmcmVz LmJpdF93aWR0aCwgIihUQ0dfQ09ORF9ORSwgIiwKKyAgICAgICAgZHN0KTsKKyAgICBPVVQoYywg bG9jcCwgIiwgIiwgJndpZHRoX20sICIsICIsICZ6ZXJvLCAiLCAiLCAmcmVzLCAiLCAiLCBkc3Qs CisgICAgICAgICIpO1xuIik7CisKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgd2lkdGgp OworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmcmVzKTsKK30KKwordm9pZCBnZW5fZGVw b3NpdF9vcChDb250ZXh0ICpjLAorICAgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAor ICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqZHN0LAorICAgICAgICAgICAgICAgICAgICBI ZXhWYWx1ZSAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICppbmRleCwKKyAg ICAgICAgICAgICAgICAgICAgSGV4Q2FzdCAqY2FzdCkKK3sKKyAgICBIZXhWYWx1ZSB2YWx1ZV9t ID0gKnZhbHVlOworICAgIHVuc2lnbmVkIGJpdF93aWR0aCA9IChkc3QtPmJpdF93aWR0aCA9PSA2 NCkgPyA2NCA6IDMyOworICAgIHVuc2lnbmVkIHdpZHRoID0gY2FzdC0+Yml0X3dpZHRoOworCisg ICAgeXlhc3NlcnQoYywgbG9jcCwgaW5kZXgtPnR5cGUgPT0gSU1NRURJQVRFLAorICAgICAgICAg ICAgICJEZXBvc2l0IGluZGV4IG11c3QgYmUgaW1tZWRpYXRlIVxuIik7CisKKyAgICAvKgorICAg ICAqIFVzaW5nIHRjZ19nZW5fZGVwb3NpdF9pKiooZHN0LCBkc3QsIC4uLikgcmVxdWlyZXMgZHN0 IHRvIGJlCisgICAgICogaW5pdGlhbGl6ZWQuCisgICAgICovCisgICAgZ2VuX2luc3RfaW5pdF9h cmdzKGMsIGxvY3ApOworCisgICAgLyogSWYgdGhlIGRlc3RpbmF0aW9uIHZhbHVlIGlzIDMyLCB0 cnVuY2F0ZSB0aGUgdmFsdWUsIG90aGVyd2lzZSBleHRlbmQgKi8KKyAgICBpZiAoZHN0LT5iaXRf d2lkdGggIT0gdmFsdWUtPmJpdF93aWR0aCkgeworICAgICAgICBpZiAoYml0X3dpZHRoID09IDMy KSB7CisgICAgICAgICAgICB2YWx1ZV9tID0gZ2VuX3J2YWx1ZV90cnVuY2F0ZShjLCBsb2NwLCAm dmFsdWVfbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZV9tID0gZ2VuX3J2 YWx1ZV9leHRlbmQoYywgbG9jcCwgJnZhbHVlX20pOworICAgICAgICB9CisgICAgfQorICAgIHZh bHVlX20gPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgJnZhbHVlX20pOworICAgIE9VVChj LCBsb2NwLCAidGNnX2dlbl9kZXBvc2l0X2kiLCAmYml0X3dpZHRoLCAiKCIsIGRzdCwgIiwgIiwg ZHN0LCAiLCAiKTsKKyAgICBPVVQoYywgbG9jcCwgJnZhbHVlX20sICIsICIsIGluZGV4LCAiICog IiwgJndpZHRoLCAiLCAiLCAmd2lkdGgsICIpO1xuIik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMs IGxvY3AsIGluZGV4KTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJnZhbHVlX20pOwor fQorCitIZXhWYWx1ZSBnZW5fcmV4dHJhY3Rfb3AoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZh bHVlICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYmVnaW4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgpCit7CisgICAgdW5zaWduZWQgYml0 X3dpZHRoID0gKHNyYy0+Yml0X3dpZHRoID09IDY0KSA/IDY0IDogMzI7CisgICAgSGV4VmFsdWUg cmVzID0gZ2VuX3RtcChjLCBsb2NwLCBiaXRfd2lkdGgsIFVOU0lHTkVEKTsKKyAgICBPVVQoYywg bG9jcCwgInRjZ19nZW5fZXh0cmFjdF9pIiwgJmJpdF93aWR0aCwgIigiLCAmcmVzKTsKKyAgICBP VVQoYywgbG9jcCwgIiwgIiwgc3JjLCAiLCAiLCAmYmVnaW4sICIsICIsICZ3aWR0aCwgIik7XG4i KTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgc3JjKTsKKyAgICByZXR1cm4gcmVzOwor fQorCitIZXhWYWx1ZSBnZW5fZXh0cmFjdF9vcChDb250ZXh0ICpjLAorICAgICAgICAgICAgICAg ICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVl ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqaW5kZXgsCisgICAgICAg ICAgICAgICAgICAgICAgICBIZXhFeHRyYWN0ICpleHRyYWN0KQoreworICAgIHVuc2lnbmVkIGJp dF93aWR0aCA9IChzcmMtPmJpdF93aWR0aCA9PSA2NCkgPyA2NCA6IDMyOworICAgIHVuc2lnbmVk IHdpZHRoID0gZXh0cmFjdC0+Yml0X3dpZHRoOworICAgIGNvbnN0IGNoYXIgKnNpZ25fcHJlZml4 OworICAgIEhleFZhbHVlIHJlczsKKworICAgIHl5YXNzZXJ0KGMsIGxvY3AsIGluZGV4LT50eXBl ID09IElNTUVESUFURSwKKyAgICAgICAgICAgICAiRXh0cmFjdCBpbmRleCBtdXN0IGJlIGltbWVk aWF0ZSFcbiIpOworICAgIGFzc2VydF9zaWduZWRuZXNzKGMsIGxvY3AsIGV4dHJhY3QtPnNpZ25l ZG5lc3MpOworCisgICAgc2lnbl9wcmVmaXggPSAoZXh0cmFjdC0+c2lnbmVkbmVzcyA9PSBVTlNJ R05FRCkgPyAiIiA6ICJzIjsKKyAgICByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIGJpdF93aWR0aCwg ZXh0cmFjdC0+c2lnbmVkbmVzcyk7CisKKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fIiwgc2ln bl9wcmVmaXgsICJleHRyYWN0X2kiLCAmYml0X3dpZHRoLAorICAgICAgICAiKCIsICZyZXMsICIs ICIsIHNyYyk7CisgICAgT1VUKGMsIGxvY3AsICIsICIsIGluZGV4LCAiICogIiwgJndpZHRoLCAi LCAiLCAmd2lkdGgsICIpO1xuIik7CisKKyAgICAvKiBTb21lIGV4dHJhY3Qgb3BlcmF0aW9ucyBo YXZlIGJpdF93aWR0aCAhPSBzdG9yYWdlX2JpdF93aWR0aCAqLworICAgIGlmIChleHRyYWN0LT5z dG9yYWdlX2JpdF93aWR0aCA+IGJpdF93aWR0aCkgeworICAgICAgICBIZXhWYWx1ZSB0bXAgPSBn ZW5fdG1wKGMsIGxvY3AsIGV4dHJhY3QtPnN0b3JhZ2VfYml0X3dpZHRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGV4dHJhY3QtPnNpZ25lZG5lc3MpOworICAgICAgICBjb25zdCBj aGFyICpzaWduX3N1ZmZpeCA9IChleHRyYWN0LT5zaWduZWRuZXNzID09IFVOU0lHTkVEKSA/ICJ1 IiA6ICIiOworICAgICAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fZXh0Iiwgc2lnbl9zdWZmaXgs ICJfaTMyX2k2NCgiLAorICAgICAgICAgICAgJnRtcCwgIiwgIiwgJnJlcywgIik7XG4iKTsKKyAg ICAgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZyZXMpOworICAgICAgICByZXMgPSB0bXA7 CisgICAgfQorCisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHNyYyk7CisgICAgZ2VuX3J2 YWx1ZV9mcmVlKGMsIGxvY3AsIGluZGV4KTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkIGdl bl93cml0ZV9yZWcoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKnJlZywgSGV4 VmFsdWUgKnZhbHVlKQoreworICAgIEhleFZhbHVlIHZhbHVlX20gPSAqdmFsdWU7CisgICAgeXlh c3NlcnQoYywgbG9jcCwgcmVnLT50eXBlID09IFJFR0lTVEVSLCAicmVnIG11c3QgYmUgYSByZWdp c3RlciEiKTsKKyAgICB2YWx1ZV9tID0gZ2VuX3J2YWx1ZV90cnVuY2F0ZShjLCBsb2NwLCAmdmFs dWVfbSk7CisgICAgdmFsdWVfbSA9IHJ2YWx1ZV9tYXRlcmlhbGl6ZShjLCBsb2NwLCAmdmFsdWVf bSk7CisgICAgT1VUKGMsCisgICAgICAgIGxvY3AsCisgICAgICAgICJnZW5fbG9nX3JlZ193cml0 ZSgiLCAmcmVnLT5yZWcuaWQsICIsICIsCisgICAgICAgICZ2YWx1ZV9tLCAiKTtcbiIpOworICAg IE9VVChjLAorICAgICAgICBsb2NwLAorICAgICAgICAiY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCAi LCAmcmVnLT5yZWcuaWQsCisgICAgICAgICIpO1xuIik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMs IGxvY3AsIHJlZyk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZ2YWx1ZV9tKTsKK30K Kwordm9pZCBnZW5fYXNzaWduKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAgWVlMVFlQRSAq bG9jcCwKKyAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqZHN0LAorICAgICAgICAgICAgICAgIEhl eFZhbHVlICp2YWx1ZSkKK3sKKyAgICBIZXhWYWx1ZSB2YWx1ZV9tID0gKnZhbHVlOworICAgIHVu c2lnbmVkIGJpdF93aWR0aDsKKworICAgIHl5YXNzZXJ0KGMsIGxvY3AsICFpc19pbnNpZGVfdGVy bmFyeShjKSwKKyAgICAgICAgICAgICAiQXNzaWduIGluIHRlcm5hcnkgbm90IGFsbG93ZWQhIik7 CisKKyAgICBpZiAoZHN0LT50eXBlID09IFJFR0lTVEVSKSB7CisgICAgICAgIGdlbl93cml0ZV9y ZWcoYywgbG9jcCwgZHN0LCAmdmFsdWVfbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg ICBpZiAoZHN0LT50eXBlID09IFZBUklEKSB7CisgICAgICAgIGZpbmRfdmFyaWFibGUoYywgbG9j cCwgZHN0LCBkc3QpOworICAgIH0KKyAgICBiaXRfd2lkdGggPSBkc3QtPmJpdF93aWR0aCA9PSA2 NCA/IDY0IDogMzI7CisKKyAgICBpZiAoYml0X3dpZHRoICE9IHZhbHVlX20uYml0X3dpZHRoKSB7 CisgICAgICAgIGlmIChiaXRfd2lkdGggPT0gNjQpIHsKKyAgICAgICAgICAgIHZhbHVlX20gPSBn ZW5fcnZhbHVlX2V4dGVuZChjLCBsb2NwLCAmdmFsdWVfbSk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICB2YWx1ZV9tID0gZ2VuX3J2YWx1ZV90cnVuY2F0ZShjLCBsb2NwLCAmdmFsdWVf bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyICppbW1fc3VmZml4ID0gKHZh bHVlX20udHlwZSA9PSBJTU1FRElBVEUpID8gImkiIDogIiI7CisgICAgT1VUKGMsIGxvY3AsICJ0 Y2dfZ2VuX21vdiIsIGltbV9zdWZmaXgsICJfaSIsICZiaXRfd2lkdGgsCisgICAgICAgICIoIiwg ZHN0LCAiLCAiLCAmdmFsdWVfbSwgIik7XG4iKTsKKworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBs b2NwLCAmdmFsdWVfbSk7Cit9CisKK0hleFZhbHVlIGdlbl9jb252cm91bmQoQ29udGV4dCAqYywK KyAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAg ICAgICAgSGV4VmFsdWUgKnNyYykKK3sKKyAgICBIZXhWYWx1ZSBzcmNfbSA9ICpzcmM7CisgICAg dW5zaWduZWQgYml0X3dpZHRoID0gc3JjX20uYml0X3dpZHRoOworICAgIGNvbnN0IGNoYXIgKnNp emUgPSAoYml0X3dpZHRoID09IDMyKSA/ICIzMiIgOiAiNjQiOworICAgIEhleFZhbHVlIHJlcyA9 IGdlbl90bXAoYywgbG9jcCwgYml0X3dpZHRoLCBzcmMtPnNpZ25lZG5lc3MpOworICAgIEhleFZh bHVlIG1hc2sgPSBnZW5fY29uc3RhbnQoYywgbG9jcCwgIjB4MyIsIGJpdF93aWR0aCwgVU5TSUdO RUQpOworICAgIEhleFZhbHVlIG9uZSA9IGdlbl9jb25zdGFudChjLCBsb2NwLCAiMSIsIGJpdF93 aWR0aCwgVU5TSUdORUQpOworICAgIEhleFZhbHVlIGFuZDsKKyAgICBIZXhWYWx1ZSBzcmNfcDE7 CisKKyAgICBzcmNfbS5pc19tYW51YWwgPSB0cnVlOworCisgICAgYW5kID0gZ2VuX2Jpbl9vcChj LCBsb2NwLCBBTkRCX09QLCAmc3JjX20sICZtYXNrKTsKKyAgICBzcmNfcDEgPSBnZW5fYmluX29w KGMsIGxvY3AsIEFERF9PUCwgJnNyY19tLCAmb25lKTsKKworICAgIE9VVChjLCBsb2NwLCAidGNn X2dlbl9tb3Zjb25kX2kiLCBzaXplLCAiKFRDR19DT05EX0VRLCAiLCAmcmVzKTsKKyAgICBPVVQo YywgbG9jcCwgIiwgIiwgJmFuZCwgIiwgIiwgJm1hc2ssICIsICIpOworICAgIE9VVChjLCBsb2Nw LCAmc3JjX3AxLCAiLCAiLCAmc3JjX20sICIpO1xuIik7CisKKyAgICAvKiBGcmVlIHNyYyBidXQg dXNlIHRoZSBvcmlnaW5hbCBgaXNfbWFudWFsYCB2YWx1ZSAqLworICAgIGdlbl9ydmFsdWVfZnJl ZShjLCBsb2NwLCBzcmMpOworCisgICAgLyogRnJlZSB0aGUgcmVzdCBvZiB0aGUgdmFsdWVzICov CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZzcmNfcDEpOworCisgICAgcmV0dXJuIHJl czsKK30KKworc3RhdGljIEhleFZhbHVlIGdlbl9jb252cm91bmRfbl9iKENvbnRleHQgKmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqYSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqbikKK3sKKyAgICBIZXhWYWx1ZSBvbmUgPSBnZW5f Y29uc3RhbnQoYywgbG9jcCwgIjEiLCAzMiwgVU5TSUdORUQpOworICAgIEhleFZhbHVlIHJlcyA9 IGdlbl90bXAoYywgbG9jcCwgNjQsIFVOU0lHTkVEKTsKKyAgICBIZXhWYWx1ZSB0bXAgPSBnZW5f dG1wKGMsIGxvY3AsIDMyLCBVTlNJR05FRCk7CisgICAgSGV4VmFsdWUgdG1wXzY0ID0gZ2VuX3Rt cChjLCBsb2NwLCA2NCwgVU5TSUdORUQpOworCisgICAgYXNzZXJ0KG4tPnR5cGUgIT0gSU1NRURJ QVRFKTsKKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fZXh0X2kzMl9pNjQoIiwgJnJlcywgIiwg IiwgYSwgIik7XG4iKTsKKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fc2hsX2kzMigiLCAmdG1w KTsKKyAgICBPVVQoYywgbG9jcCwgIiwgIiwgJm9uZSwgIiwgIiwgbiwgIik7XG4iKTsKKyAgICBP VVQoYywgbG9jcCwgInRjZ19nZW5fYW5kX2kzMigiLCAmdG1wKTsKKyAgICBPVVQoYywgbG9jcCwg IiwgIiwgJnRtcCwgIiwgIiwgYSwgIik7XG4iKTsKKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5f c2hyaV9pMzIoIiwgJnRtcCk7CisgICAgT1VUKGMsIGxvY3AsICIsICIsICZ0bXAsICIsIDEpO1xu Iik7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2V4dF9pMzJfaTY0KCIsICZ0bXBfNjQsICIs ICIsICZ0bXAsICIpO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2FkZF9pNjQoIiwg JnJlcyk7CisgICAgT1VUKGMsIGxvY3AsICIsICIsICZyZXMsICIsICIsICZ0bXBfNjQsICIpO1xu Iik7CisKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJnRtcCk7CisgICAgZ2VuX3J2YWx1 ZV9mcmVlKGMsIGxvY3AsICZ0bXBfNjQpOworCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGlj IEhleFZhbHVlIGdlbl9jb252cm91bmRfbl9jKENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIZXhWYWx1ZSAqYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIZXhWYWx1ZSAqbikKK3sKKyAgICBIZXhWYWx1ZSByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIDY0 LCBVTlNJR05FRCk7CisgICAgSGV4VmFsdWUgb25lID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIx IiwgMzIsIFVOU0lHTkVEKTsKKyAgICBIZXhWYWx1ZSB0bXAgPSBnZW5fdG1wKGMsIGxvY3AsIDMy LCBVTlNJR05FRCk7CisgICAgSGV4VmFsdWUgdG1wXzY0ID0gZ2VuX3RtcChjLCBsb2NwLCA2NCwg VU5TSUdORUQpOworCisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2V4dF9pMzJfaTY0KCIsICZy ZXMsICIsICIsIGEsICIpO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3N1YmlfaTMy KCIsICZ0bXApOworICAgIE9VVChjLCBsb2NwLCAiLCAiLCBuLCAiLCAxKTtcbiIpOworICAgIE9V VChjLCBsb2NwLCAidGNnX2dlbl9zaGxfaTMyKCIsICZ0bXApOworICAgIE9VVChjLCBsb2NwLCAi LCAiLCAmb25lLCAiLCAiLCAmdG1wLCAiKTtcbiIpOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9leHRfaTMyX2k2NCgiLCAmdG1wXzY0LCAiLCAiLCAmdG1wLCAiKTtcbiIpOworICAgIE9VVChj LCBsb2NwLCAidGNnX2dlbl9hZGRfaTY0KCIsICZyZXMpOworICAgIE9VVChjLCBsb2NwLCAiLCAi LCAmcmVzLCAiLCAiLCAmdG1wXzY0LCAiKTtcbiIpOworCisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMs IGxvY3AsICZvbmUpOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmdG1wKTsKKyAgICBn ZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJnRtcF82NCk7CisKKyAgICByZXR1cm4gcmVzOworfQor CitIZXhWYWx1ZSBnZW5fY29udnJvdW5kX24oQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVl ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKnBvcykKK3sKKyAgICBI ZXhWYWx1ZSB6ZXJvID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIwIiwgNjQsIFVOU0lHTkVEKTsK KyAgICBIZXhWYWx1ZSBsXzMyID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIxIiwgMzIsIFVOU0lH TkVEKTsKKyAgICBIZXhWYWx1ZSBjb25kID0gZ2VuX3RtcChjLCBsb2NwLCAzMiwgVU5TSUdORUQp OworICAgIEhleFZhbHVlIGNvbmRfNjQgPSBnZW5fdG1wKGMsIGxvY3AsIDY0LCBVTlNJR05FRCk7 CisgICAgSGV4VmFsdWUgbWFzayA9IGdlbl90bXAoYywgbG9jcCwgMzIsIFVOU0lHTkVEKTsKKyAg ICBIZXhWYWx1ZSBuXzY0ID0gZ2VuX3RtcChjLCBsb2NwLCA2NCwgVU5TSUdORUQpOworICAgIEhl eFZhbHVlIHJlcyA9IGdlbl90bXAoYywgbG9jcCwgNjQsIFVOU0lHTkVEKTsKKyAgICAvKiBJZiBp bnB1dCBpcyA2NCBiaXQgY2FzdCBpdCB0byAzMiAqLworICAgIEhleFZhbHVlIHNyY19jYXN0ZWQg PSBnZW5fY2FzdF9vcChjLCBsb2NwLCBzcmMsIDMyLCBzcmMtPnNpZ25lZG5lc3MpOworICAgIEhl eFZhbHVlIHBvc19jYXN0ZWQgPSBnZW5fY2FzdF9vcChjLCBsb2NwLCBwb3MsIDMyLCBwb3MtPnNp Z25lZG5lc3MpOworICAgIEhleFZhbHVlIHIxOworICAgIEhleFZhbHVlIHIyOworICAgIEhleFZh bHVlIHIzOworCisgICAgc3JjX2Nhc3RlZCA9IHJ2YWx1ZV9tYXRlcmlhbGl6ZShjLCBsb2NwLCAm c3JjX2Nhc3RlZCk7CisgICAgcG9zX2Nhc3RlZCA9IHJ2YWx1ZV9tYXRlcmlhbGl6ZShjLCBsb2Nw LCAmcG9zX2Nhc3RlZCk7CisKKyAgICAvKgorICAgICAqIHIxLCByMiwgYW5kIHIzIHJlcHJlc2Vu dCB0aGUgcmVzdWx0cyBvZiB0aHJlZSBkaWZmZXJlbnQgYnJhbmNoZXMuCisgICAgICogICAtIHIx IHBpY2tlZCBpZiBwb3NfY2FzdGVkID09IDAKKyAgICAgKiAgIC0gcjIgcGlja2VkIGlmIChzcmNf Y2FzdGVkICYgKCgxIDw8IChwb3NfY2FzdGVkIC0gMSkpIC0gMSkpID09IDApLAorICAgICAqICAg ICB0aGF0IGlzIGlmIGJpdHMgMCwgLi4uLCBwb3NfY2FzdGVkLTEgYXJlIGFsbCAwLgorICAgICAq ICAgLSByMyBwaWNrZWQgb3RoZXJ3aXNlLgorICAgICAqLworICAgIHIxID0gZ2VuX3J2YWx1ZV9l eHRlbmQoYywgbG9jcCwgJnNyY19jYXN0ZWQpOworICAgIHIyID0gZ2VuX2NvbnZyb3VuZF9uX2Io YywgbG9jcCwgJnNyY19jYXN0ZWQsICZwb3NfY2FzdGVkKTsKKyAgICByMyA9IGdlbl9jb252cm91 bmRfbl9jKGMsIGxvY3AsICZzcmNfY2FzdGVkLCAmcG9zX2Nhc3RlZCk7CisKKyAgICAvKgorICAg ICAqIENhbGN1bGF0ZSB0aGUgY29uZGl0aW9uCisgICAgICogICAoc3JjX2Nhc3RlZCAmICgoMSA8 PCAocG9zX2Nhc3RlZCAtIDEpKSAtIDEpKSA9PSAwKSwKKyAgICAgKiB3aGljaCBjaGVja3MgaWYg dGhlIGJpdHMgMCwuLi4scG9zLTEgYXJlIGFsbCAwLgorICAgICAqLworICAgIE9VVChjLCBsb2Nw LCAidGNnX2dlbl9zdWJfaTMyKCIsICZtYXNrKTsKKyAgICBPVVQoYywgbG9jcCwgIiwgIiwgJnBv c19jYXN0ZWQsICIsICIsICZsXzMyLCAiKTtcbiIpOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9zaGxfaTMyKCIsICZtYXNrKTsKKyAgICBPVVQoYywgbG9jcCwgIiwgIiwgJmxfMzIsICIsICIs ICZtYXNrLCAiKTtcbiIpOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9zdWJfaTMyKCIsICZt YXNrKTsKKyAgICBPVVQoYywgbG9jcCwgIiwgIiwgJm1hc2ssICIsICIsICZsXzMyLCAiKTtcbiIp OworICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9hbmRfaTMyKCIsICZjb25kKTsKKyAgICBPVVQo YywgbG9jcCwgIiwgIiwgJnNyY19jYXN0ZWQsICIsICIsICZtYXNrLCAiKTtcbiIpOworICAgIE9V VChjLCBsb2NwLCAidGNnX2dlbl9leHR1X2kzMl9pNjQoIiwgJmNvbmRfNjQsICIsICIsICZjb25k LCAiKTtcbiIpOworCisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2V4dF9pMzJfaTY0KCIsICZu XzY0LCAiLCAiLCAmcG9zX2Nhc3RlZCwgIik7XG4iKTsKKworICAgIC8qCisgICAgICogaWYgdGhl IGJpdHMgMCwgLi4uLCBwb3NfY2FzdGVkLTEgYXJlIGFsbCAwLCB0aGVuIHBpY2sgcjIgb3RoZXJ3 aXNlLAorICAgICAqIHBpY2sgcjMuCisgICAgICovCisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2Vu X21vdmNvbmRfaTY0Iik7CisgICAgT1VUKGMsIGxvY3AsICIoVENHX0NPTkRfRVEsICIsICZyZXMs ICIsICIsICZjb25kXzY0LCAiLCAiLCAmemVybyk7CisgICAgT1VUKGMsIGxvY3AsICIsICIsICZy MiwgIiwgIiwgJnIzLCAiKTtcbiIpOworCisgICAgLyogTGFzdGx5LCBpZiB0aGUgcG9zX2Nhc3Rl ZCA9PSAwLCB0aGVuIHBpY2sgcjEgKi8KKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fbW92Y29u ZF9pNjQiKTsKKyAgICBPVVQoYywgbG9jcCwgIihUQ0dfQ09ORF9FUSwgIiwgJnJlcywgIiwgIiwg Jm5fNjQsICIsICIsICZ6ZXJvKTsKKyAgICBPVVQoYywgbG9jcCwgIiwgIiwgJnIxLCAiLCAiLCAm cmVzLCAiKTtcbiIpOworCisgICAgLyogRmluYWxseSBzaGlmdCBiYWNrIHZhbCA+Pj0gbiAqLwor ICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9zaHJfaTY0KCIsICZyZXMpOworICAgIE9VVChjLCBs b2NwLCAiLCAiLCAmcmVzLCAiLCAiLCAmbl82NCwgIik7XG4iKTsKKworICAgIGdlbl9ydmFsdWVf ZnJlZShjLCBsb2NwLCAmc3JjX2Nhc3RlZCk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3As ICZwb3NfY2FzdGVkKTsKKworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmcjEpOworICAg IGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmcjIpOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBs b2NwLCAmcjMpOworCisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZjb25kKTsKKyAgICBn ZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJmNvbmRfNjQpOworICAgIGdlbl9ydmFsdWVfZnJlZShj LCBsb2NwLCAmbWFzayk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZuXzY0KTsKKwor ICAgIHJlcyA9IGdlbl9ydmFsdWVfdHJ1bmNhdGUoYywgbG9jcCwgJnJlcyk7CisgICAgcmV0dXJu IHJlczsKK30KKworSGV4VmFsdWUgZ2VuX3JvdW5kKENvbnRleHQgKmMsCisgICAgICAgICAgICAg ICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqc3JjLAor ICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpwb3MpCit7CisgICAgSGV4VmFsdWUgemVybyA9 IGdlbl9jb25zdGFudChjLCBsb2NwLCAiMCIsIDY0LCBVTlNJR05FRCk7CisgICAgSGV4VmFsdWUg b25lID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIxIiwgNjQsIFVOU0lHTkVEKTsKKyAgICBIZXhW YWx1ZSByZXM7CisgICAgSGV4VmFsdWUgbl9tMTsKKyAgICBIZXhWYWx1ZSBzaGlmdGVkOworICAg IEhleFZhbHVlIHN1bTsKKyAgICBIZXhWYWx1ZSBzcmNfd2lkdGg7CisgICAgSGV4VmFsdWUgYTsK KyAgICBIZXhWYWx1ZSBiOworCisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywgbG9jcCwgc3JjLT5z aWduZWRuZXNzKTsKKyAgICB5eWFzc2VydChjLCBsb2NwLCBzcmMtPmJpdF93aWR0aCA8PSAzMiwK KyAgICAgICAgICAgICAiZlJORE4gbm90IGltcGxlbWVudGVkIGZvciBiaXQgd2lkdGhzID4gMzIh Iik7CisKKyAgICByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIDY0LCBzcmMtPnNpZ25lZG5lc3MpOwor CisgICAgc3JjX3dpZHRoID0gZ2VuX2ltbV92YWx1ZShjLCBsb2NwLCBzcmMtPmJpdF93aWR0aCwg MzIsIFVOU0lHTkVEKTsKKyAgICBhID0gZ2VuX2V4dGVuZF9vcChjLCBsb2NwLCAmc3JjX3dpZHRo LCA2NCwgc3JjLCBTSUdORUQpOworICAgIGEgPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwg JmEpOworCisgICAgc3JjX3dpZHRoID0gZ2VuX2ltbV92YWx1ZShjLCBsb2NwLCA1LCAzMiwgVU5T SUdORUQpOworICAgIGIgPSBnZW5fZXh0ZW5kX29wKGMsIGxvY3AsICZzcmNfd2lkdGgsIDY0LCBw b3MsIFVOU0lHTkVEKTsKKyAgICBiID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxvY3AsICZiKTsK KworICAgIC8qIERpc2FibGUgYXV0by1mcmVlIG9mIHZhbHVlcyB1c2VkIG1vcmUgdGhhbiBvbmNl ICovCisgICAgYS5pc19tYW51YWwgPSB0cnVlOworICAgIGIuaXNfbWFudWFsID0gdHJ1ZTsKKwor ICAgIG5fbTEgPSBnZW5fYmluX29wKGMsIGxvY3AsIFNVQl9PUCwgJmIsICZvbmUpOworICAgIHNo aWZ0ZWQgPSBnZW5fYmluX29wKGMsIGxvY3AsIEFTTF9PUCwgJm9uZSwgJm5fbTEpOworICAgIHN1 bSA9IGdlbl9iaW5fb3AoYywgbG9jcCwgQUREX09QLCAmc2hpZnRlZCwgJmEpOworCisgICAgT1VU KGMsIGxvY3AsICJ0Y2dfZ2VuX21vdmNvbmRfaTY0Iik7CisgICAgT1VUKGMsIGxvY3AsICIoVENH X0NPTkRfRVEsICIsICZyZXMsICIsICIsICZiLCAiLCAiLCAmemVybyk7CisgICAgT1VUKGMsIGxv Y3AsICIsICIsICZhLCAiLCAiLCAmc3VtLCAiKTtcbiIpOworCisgICAgZ2VuX3J2YWx1ZV9mcmVl X21hbnVhbChjLCBsb2NwLCAmYSk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlX21hbnVhbChjLCBsb2Nw LCAmYik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZzdW0pOworCisgICAgcmV0dXJu IHJlczsKK30KKworLyogQ2lyY3VsYXIgYWRkcmVzc2luZyBtb2RlIHdpdGggYXV0by1pbmNyZW1l bnQgKi8KK3ZvaWQgZ2VuX2NpcmNfb3AoQ29udGV4dCAqYywKKyAgICAgICAgICAgICAgICAgWVlM VFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKmFkZHIsCisgICAgICAgICAg ICAgICAgIEhleFZhbHVlICppbmNyZW1lbnQsCisgICAgICAgICAgICAgICAgIEhleFZhbHVlICpt b2RpZmllcikKK3sKKyAgICBIZXhWYWx1ZSBjcyA9IGdlbl90bXAoYywgbG9jcCwgMzIsIFVOU0lH TkVEKTsKKyAgICBIZXhWYWx1ZSBpbmNyZW1lbnRfbSA9ICppbmNyZW1lbnQ7CisgICAgaW5jcmVt ZW50X20gPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgJmluY3JlbWVudF9tKTsKKyAgICBP VVQoYywgbG9jcCwgImdlbl9yZWFkX3JlZygiLCAmY3MsICIsIEhFWF9SRUdfQ1MwICsgTXVOKTtc biIpOworICAgIE9VVChjLAorICAgICAgICBsb2NwLAorICAgICAgICAiZ2VuX2hlbHBlcl9mY2ly Y2FkZCgiLAorICAgICAgICBhZGRyLAorICAgICAgICAiLCAiLAorICAgICAgICBhZGRyLAorICAg ICAgICAiLCAiLAorICAgICAgICAmaW5jcmVtZW50X20sCisgICAgICAgICIsICIsCisgICAgICAg IG1vZGlmaWVyKTsKKyAgICBPVVQoYywgbG9jcCwgIiwgIiwgJmNzLCAiKTtcbiIpOworICAgIGdl bl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmaW5jcmVtZW50X20pOworICAgIGdlbl9ydmFsdWVfZnJl ZShjLCBsb2NwLCBtb2RpZmllcik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZjcyk7 Cit9CisKK0hleFZhbHVlIGdlbl9sb2NudF9vcChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBI ZXhWYWx1ZSAqc3JjKQoreworICAgIGNvbnN0IGNoYXIgKmJpdF9zdWZmaXggPSBzcmMtPmJpdF93 aWR0aCA9PSA2NCA/ICI2NCIgOiAiMzIiOworICAgIEhleFZhbHVlIHNyY19tID0gKnNyYzsKKyAg ICBIZXhWYWx1ZSByZXM7CisKKyAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBzcmMtPnNp Z25lZG5lc3MpOworICAgIHJlcyA9IGdlbl90bXAoYywgbG9jcCwgc3JjLT5iaXRfd2lkdGggPT0g NjQgPyA2NCA6IDMyLCBzcmMtPnNpZ25lZG5lc3MpOworICAgIHNyY19tID0gcnZhbHVlX21hdGVy aWFsaXplKGMsIGxvY3AsICZzcmNfbSk7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX25vdF9p IiwgYml0X3N1ZmZpeCwgIigiLAorICAgICAgICAmcmVzLCAiLCAiLCAmc3JjX20sICIpO1xuIik7 CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2NsemlfaSIsIGJpdF9zdWZmaXgsICIoIiwgJnJl cywgIiwgIiwgJnJlcywgIiwgIik7CisgICAgT1VUKGMsIGxvY3AsIGJpdF9zdWZmaXgsICIpO1xu Iik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZzcmNfbSk7CisgICAgcmV0dXJuIHJl czsKK30KKworSGV4VmFsdWUgZ2VuX2N0cG9wX29wKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3As IEhleFZhbHVlICpzcmMpCit7CisgICAgY29uc3QgY2hhciAqYml0X3N1ZmZpeCA9IHNyYy0+Yml0 X3dpZHRoID09IDY0ID8gIjY0IiA6ICIzMiI7CisgICAgSGV4VmFsdWUgc3JjX20gPSAqc3JjOwor ICAgIEhleFZhbHVlIHJlczsKKyAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBzcmMtPnNp Z25lZG5lc3MpOworICAgIHJlcyA9IGdlbl90bXAoYywgbG9jcCwgc3JjLT5iaXRfd2lkdGggPT0g NjQgPyA2NCA6IDMyLCBzcmMtPnNpZ25lZG5lc3MpOworICAgIHNyY19tID0gcnZhbHVlX21hdGVy aWFsaXplKGMsIGxvY3AsICZzcmNfbSk7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2N0cG9w X2kiLCBiaXRfc3VmZml4LAorICAgICAgICAiKCIsICZyZXMsICIsICIsICZzcmNfbSwgIik7XG4i KTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgJnNyY19tKTsKKyAgICByZXR1cm4gcmVz OworfQorCitIZXhWYWx1ZSBnZW5fcm90bChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhW YWx1ZSAqc3JjLCBIZXhWYWx1ZSAqd2lkdGgpCit7CisgICAgY29uc3QgY2hhciAqc3VmZml4ID0g c3JjLT5iaXRfd2lkdGggPT0gNjQgPyAiaTY0IiA6ICJpMzIiOworICAgIEhleFZhbHVlIGFtb3Vu dCA9ICp3aWR0aDsKKyAgICBIZXhWYWx1ZSByZXM7CisgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywg bG9jcCwgc3JjLT5zaWduZWRuZXNzKTsKKyAgICByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIHNyYy0+ Yml0X3dpZHRoLCBzcmMtPnNpZ25lZG5lc3MpOworICAgIGlmIChhbW91bnQuYml0X3dpZHRoIDwg c3JjLT5iaXRfd2lkdGgpIHsKKyAgICAgICAgYW1vdW50ID0gZ2VuX3J2YWx1ZV9leHRlbmQoYywg bG9jcCwgJmFtb3VudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW1vdW50ID0gZ2VuX3J2YWx1 ZV90cnVuY2F0ZShjLCBsb2NwLCAmYW1vdW50KTsKKyAgICB9CisgICAgYW1vdW50ID0gcnZhbHVl X21hdGVyaWFsaXplKGMsIGxvY3AsICZhbW91bnQpOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9yb3RsXyIsIHN1ZmZpeCwgIigiLAorICAgICAgICAmcmVzLCAiLCAiLCBzcmMsICIsICIsICZh bW91bnQsICIpO1xuIik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHNyYyk7CisgICAg Z2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsICZhbW91bnQpOworCisgICAgcmV0dXJuIHJlczsKK30K KworSGV4VmFsdWUgZ2VuX2NhcnJ5X2Zyb21fYWRkKENvbnRleHQgKmMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgWVlMVFlQRSAqbG9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIZXhWYWx1ZSAqb3AxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpv cDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgKm9wMykKK3sKKyAgICBI ZXhWYWx1ZSB6ZXJvID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIwIiwgNjQsIFVOU0lHTkVEKTsK KyAgICBIZXhWYWx1ZSByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIDY0LCBVTlNJR05FRCk7CisgICAg SGV4VmFsdWUgY2YgPSBnZW5fdG1wKGMsIGxvY3AsIDY0LCBVTlNJR05FRCk7CisgICAgSGV4VmFs dWUgb3AxX20gPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgb3AxKTsKKyAgICBIZXhWYWx1 ZSBvcDJfbSA9IHJ2YWx1ZV9tYXRlcmlhbGl6ZShjLCBsb2NwLCBvcDIpOworICAgIEhleFZhbHVl IG9wM19tID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxvY3AsIG9wMyk7CisgICAgb3AzX20gPSBn ZW5fcnZhbHVlX2V4dGVuZChjLCBsb2NwLCAmb3AzX20pOworCisgICAgT1VUKGMsIGxvY3AsICJ0 Y2dfZ2VuX2FkZDJfaTY0KCIsICZyZXMsICIsICIsICZjZiwgIiwgIiwgJm9wMV9tLCAiLCAiLAor ICAgICAgICAmemVybyk7CisgICAgT1VUKGMsIGxvY3AsICIsICIsICZvcDNfbSwgIiwgIiwgJnpl cm8sICIpO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2FkZDJfaTY0KCIsICZyZXMs ICIsICIsICZjZiwgIiwgIiwgJnJlcywgIiwgIiwgJmNmKTsKKyAgICBPVVQoYywgbG9jcCwgIiwg IiwgJm9wMl9tLCAiLCAiLCAmemVybywgIik7XG4iKTsKKworICAgIGdlbl9ydmFsdWVfZnJlZShj LCBsb2NwLCAmb3AxX20pOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmb3AyX20pOwor ICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmb3AzX20pOworICAgIGdlbl9ydmFsdWVfZnJl ZShjLCBsb2NwLCAmcmVzKTsKKyAgICByZXR1cm4gY2Y7Cit9CisKK3ZvaWQgZ2VuX2FkZHNhdDY0 KENvbnRleHQgKmMsCisgICAgICAgICAgICAgICAgICBZWUxUWVBFICpsb2NwLAorICAgICAgICAg ICAgICAgICAgSGV4VmFsdWUgKmRzdCwKKyAgICAgICAgICAgICAgICAgIEhleFZhbHVlICpvcDEs CisgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqb3AyKQoreworICAgIEhleFZhbHVlIG9wMV9t ID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxvY3AsIG9wMSk7CisgICAgSGV4VmFsdWUgb3AyX20g PSBydmFsdWVfbWF0ZXJpYWxpemUoYywgbG9jcCwgb3AyKTsKKyAgICBPVVQoYywgbG9jcCwgImdl bl9hZGRfc2F0X2k2NCgiLCBkc3QsICIsICIsICZvcDFfbSwgIiwgIiwgJm9wMl9tLCAiKTtcbiIp OworfQorCit2b2lkIGdlbl9pbnN0KENvbnRleHQgKmMsIEdTdHJpbmcgKmluYW1lKQoreworICAg IGMtPnRvdGFsX2luc24rKzsKKyAgICBjLT5pbnN0Lm5hbWUgPSBpbmFtZTsKKyAgICBjLT5pbnN0 LmFsbG9jYXRlZCA9IGdfYXJyYXlfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKFZhcikpOworICAg IGMtPmluc3QuaW5pdF9saXN0ID0gZ19hcnJheV9uZXcoRkFMU0UsIEZBTFNFLCBzaXplb2YoSGV4 VmFsdWUpKTsKKyAgICBjLT5pbnN0LnN0cmluZ3MgPSBnX2FycmF5X25ldyhGQUxTRSwgRkFMU0Us IHNpemVvZihHU3RyaW5nICopKTsKKyAgICBFTUlUX1NJRyhjLCAidm9pZCBlbWl0XyVzKERpc2Fz Q29udGV4dCAqY3R4LCBJbnNuICppbnNuLCBQYWNrZXQgKnBrdCIsCisgICAgICAgICAgICAgYy0+ aW5zdC5uYW1lLT5zdHIpOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIGRlY2xhcmVkIGJ1dCB1 bmluaXRpYWxpemVkIHJlZ2lzdGVycywgYnV0IG9ubHkgZm9yCisgKiBub24tY29uZGl0aW9uYWwg aW5zdHJ1Y3Rpb25zCisgKi8KK3ZvaWQgZ2VuX2luc3RfaW5pdF9hcmdzKENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3ApCit7CisgICAgaWYgKCFjLT5pbnN0LmluaXRfbGlzdCkgeworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGMtPmluc3QuaW5p dF9saXN0LT5sZW47IGkrKykgeworICAgICAgICBIZXhWYWx1ZSAqdmFsID0gJmdfYXJyYXlfaW5k ZXgoYy0+aW5zdC5pbml0X2xpc3QsIEhleFZhbHVlLCBpKTsKKyAgICAgICAgaWYgKHZhbC0+dHlw ZSA9PSBSRUdJU1RFUl9BUkcpIHsKKyAgICAgICAgICAgIGNoYXIgcmVnX2lkWzVdOworICAgICAg ICAgICAgcmVnX2NvbXBvc2UoYywgbG9jcCwgJnZhbC0+cmVnLCByZWdfaWQpOworICAgICAgICAg ICAgRU1JVF9IRUFEKGMsICJ0Y2dfZ2VuX21vdmlfaSV1KCVzLCAwKTtcbiIsIHZhbC0+Yml0X3dp ZHRoLCByZWdfaWQpOworICAgICAgICB9IGVsc2UgaWYgKHZhbC0+dHlwZSA9PSBQUkVESUNBVEUp IHsKKyAgICAgICAgICAgIGNoYXIgc3VmZml4ID0gdmFsLT5pc19kb3RuZXcgPyAnTicgOiAnVic7 CisgICAgICAgICAgICBFTUlUX0hFQUQoYywgInRjZ19nZW5fbW92aV9pJXUoUCVjJWMsIDApO1xu IiwgdmFsLT5iaXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgdmFsLT5wcmVkLmlkLCBz dWZmaXgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeXlhc3NlcnQoYywgbG9jcCwg ZmFsc2UsICJJbnZhbGlkIGFyZyB0eXBlISIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyog RnJlZSBhcmd1bWVudCBpbml0IGxpc3Qgb25jZSB3ZSBoYXZlIGluaXRpYWxpemVkIGV2ZXJ5dGhp bmcgKi8KKyAgICBnX2FycmF5X2ZyZWUoYy0+aW5zdC5pbml0X2xpc3QsIFRSVUUpOworICAgIGMt Pmluc3QuaW5pdF9saXN0ID0gTlVMTDsKK30KKwordm9pZCBnZW5faW5zdF9jb2RlKENvbnRleHQg KmMsIFlZTFRZUEUgKmxvY3ApCit7CisgICAgaWYgKGMtPmluc3QuZXJyb3JfY291bnQgIT0gMCkg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiUGFyc2luZyBvZiBp bnN0cnVjdGlvbiAlcyBnZW5lcmF0ZWQgJWQgZXJyb3JzIVxuIiwKKyAgICAgICAgICAgICAgICBj LT5pbnN0Lm5hbWUtPnN0ciwKKyAgICAgICAgICAgICAgICBjLT5pbnN0LmVycm9yX2NvdW50KTsK KyAgICB9IGVsc2UgeworICAgICAgICBmcmVlX3ZhcmlhYmxlcyhjLCBsb2NwKTsKKyAgICAgICAg Yy0+aW1wbGVtZW50ZWRfaW5zbisrOworICAgICAgICBmcHJpbnRmKGMtPmVuYWJsZWRfZmlsZSwg IiVzXG4iLCBjLT5pbnN0Lm5hbWUtPnN0cik7CisgICAgICAgIGVtaXRfZm9vdGVyKGMpOworICAg ICAgICBjb21taXQoYyk7CisgICAgfQorICAgIGZyZWVfaW5zdHJ1Y3Rpb24oYyk7Cit9CisKK3Zv aWQgZ2VuX3ByZWRfYXNzaWduKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICps ZWZ0X3ByZWQsCisgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqcmlnaHRfcHJlZCkKK3sK KyAgICBjaGFyIHByZWRfaWRbMl0gPSB7bGVmdF9wcmVkLT5wcmVkLmlkLCAwfTsKKyAgICBib29s IGlzX2RpcmVjdCA9IGlzX2RpcmVjdF9wcmVkaWNhdGUobGVmdF9wcmVkKTsKKyAgICBIZXhWYWx1 ZSByID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxvY3AsIHJpZ2h0X3ByZWQpOworICAgIHIgPSBn ZW5fcnZhbHVlX3RydW5jYXRlKGMsIGxvY3AsICZyKTsKKyAgICB5eWFzc2VydChjLCBsb2NwLCAh aXNfaW5zaWRlX3Rlcm5hcnkoYyksCisgICAgICAgICAgICAgIlByZWRpY2F0ZSBhc3NpZ24gbm90 IGFsbG93ZWQgaW4gdGVybmFyeSEiKTsKKyAgICAvKiBFeHRyYWN0IHByZWRpY2F0ZSBUQ0d2ICov CisgICAgaWYgKGlzX2RpcmVjdCkgeworICAgICAgICAqbGVmdF9wcmVkID0gZ2VuX3RtcF92YWx1 ZShjLCBsb2NwLCAiMCIsIDMyLCBVTlNJR05FRCk7CisgICAgfQorICAgIC8qIEV4dHJhY3QgZmly c3QgOCBiaXRzLCBhbmQgc3RvcmUgbmV3IHByZWRpY2F0ZSB2YWx1ZSAqLworICAgIE9VVChjLCBs b2NwLCAidGNnX2dlbl9tb3ZfaTMyKCIsIGxlZnRfcHJlZCwgIiwgIiwgJnIsICIpO1xuIik7Cisg ICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2FuZGlfaTMyKCIsIGxlZnRfcHJlZCwgIiwgIiwgbGVm dF9wcmVkLAorICAgICAgICAiLCAweGZmKTtcbiIpOworICAgIGlmIChpc19kaXJlY3QpIHsKKyAg ICAgICAgT1VUKGMsIGxvY3AsICJnZW5fbG9nX3ByZWRfd3JpdGUoY3R4LCAiLCBwcmVkX2lkLCAi LCAiLCBsZWZ0X3ByZWQsCisgICAgICAgICAgICAiKTtcbiIpOworICAgICAgICBPVVQoYywgbG9j cCwgImN0eF9sb2dfcHJlZF93cml0ZShjdHgsICIsIHByZWRfaWQsICIpO1xuIik7CisgICAgICAg IGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCBsZWZ0X3ByZWQpOworICAgIH0KKyAgICAvKiBGcmVl IHRlbXBvcmFyeSB2YWx1ZSAqLworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmcik7Cit9 CisKK3ZvaWQgZ2VuX2NhbmNlbChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwKQoreworICAgIE9V VChjLCBsb2NwLCAiZ2VuX2NhbmNlbChpbnNuLT5zbG90KTtcbiIpOworfQorCit2b2lkIGdlbl9s b2FkX2NhbmNlbChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwKQoreworICAgIGdlbl9jYW5jZWwo YywgbG9jcCk7CisgICAgT1VUKGMsIGxvY3AsICJpZiAoaW5zbi0+c2xvdCA9PSAwICYmIHBrdC0+ cGt0X2hhc19zdG9yZV9zMSkge1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJjdHgtPnMxX3N0b3Jl X3Byb2Nlc3NlZCA9IGZhbHNlO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJwcm9jZXNzX3N0b3Jl KGN0eCwgMSk7XG4iKTsKKyAgICBPVVQoYywgbG9jcCwgIn1cbiIpOworfQorCit2b2lkIGdlbl9s b2FkKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICp3aWR0aCwKKyAgICAgICAg ICAgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBIZXhWYWx1ZSAqZWEsIEhleFZhbHVlICpk c3QpCit7CisgICAgY2hhciBzaXplX3N1ZmZpeFs0XSA9IHswfTsKKyAgICBjb25zdCBjaGFyICpz aWduX3N1ZmZpeDsKKyAgICAvKiBNZW1vcCB3aWR0aCBpcyBzcGVjaWZpZWQgaW4gdGhlIGxvYWQg bWFjcm8gKi8KKyAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBzaWduZWRuZXNzKTsKKyAg ICBzaWduX3N1ZmZpeCA9ICh3aWR0aC0+aW1tLnZhbHVlID4gNCkKKyAgICAgICAgICAgICAgICAg ICA/ICIiCisgICAgICAgICAgICAgICAgICAgOiAoKHNpZ25lZG5lc3MgPT0gVU5TSUdORUQpID8g InUiIDogInMiKTsKKyAgICAvKiBJZiBkc3QgaXMgYSB2YXJpYWJsZSwgYXNzZXJ0IHRoYXQgaXMg ZGVjbGFyZWQgYW5kIGxvYWQgdGhlIHR5cGUgaW5mbyAqLworICAgIGlmIChkc3QtPnR5cGUgPT0g VkFSSUQpIHsKKyAgICAgICAgZmluZF92YXJpYWJsZShjLCBsb2NwLCBkc3QsIGRzdCk7CisgICAg fQorCisgICAgc25wcmludGYoc2l6ZV9zdWZmaXgsIDQsICIlIiBQUkl1NjQsIHdpZHRoLT5pbW0u dmFsdWUgKiA4KTsKKyAgICAvKiBMb29rdXAgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIEVBICovCisg ICAgZmluZF92YXJpYWJsZShjLCBsb2NwLCBlYSwgZWEpOworICAgIE9VVChjLCBsb2NwLCAiaWYg KGluc24tPnNsb3QgPT0gMCAmJiBwa3QtPnBrdF9oYXNfc3RvcmVfczEpIHtcbiIpOworICAgIE9V VChjLCBsb2NwLCAicHJvYmVfbm9zaHVmX2xvYWQoIiwgZWEsICIsICIsIHdpZHRoLCAiLCBjdHgt Pm1lbV9pZHgpO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJwcm9jZXNzX3N0b3JlKGN0eCwgMSk7 XG4iKTsKKyAgICBPVVQoYywgbG9jcCwgIn1cbiIpOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9xZW11X2xkIiwgc2l6ZV9zdWZmaXgsIHNpZ25fc3VmZml4KTsKKyAgICBPVVQoYywgbG9jcCwg IigiKTsKKyAgICBpZiAoZHN0LT5iaXRfd2lkdGggPiB3aWR0aC0+aW1tLnZhbHVlICogOCkgewor ICAgICAgICAvKgorICAgICAgICAgKiBDYXN0IHRvIHRoZSBjb3JyZWN0IFRDRyB0eXBlIGlmIG5l Y2Vzc2FyeSwgdG8gYXZvaWQgaW1wbGljdCBjYXN0CisgICAgICAgICAqIHdhcm5pbmdzLiBUaGlz IGlzIG5lZWRlZCB3aGVuIHRoZSB3aWR0aCBvZiB0aGUgZGVzdGluYXRpb24gdmFyIGlzCisgICAg ICAgICAqIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgbG9hZC4KKyAgICAg ICAgICovCisgICAgICAgIE9VVChjLCBsb2NwLCAiKFRDR3YpICIpOworICAgIH0KKyAgICBPVVQo YywgbG9jcCwgZHN0LCAiLCAiLCBlYSwgIiwgY3R4LT5tZW1faWR4KTtcbiIpOworICAgIC8qIElm IHRoZSB2YXIgaW4gRUEgd2FzIHRydW5jYXRlZCBpdCBpcyBub3cgYSB0bXAgSGV4VmFsdWUsIHNv IGZyZWUgaXQuICovCisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIGVhKTsKK30KKwordm9p ZCBnZW5fc3RvcmUoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKndpZHRoLCBI ZXhWYWx1ZSAqZWEsCisgICAgICAgICAgICAgICBIZXhWYWx1ZSAqc3JjKQoreworICAgIEhleFZh bHVlIHNyY19tID0gKnNyYzsKKyAgICAvKiBNZW1vcCB3aWR0aCBpcyBzcGVjaWZpZWQgaW4gdGhl IHN0b3JlIG1hY3JvICovCisgICAgdW5zaWduZWQgbWVtX3dpZHRoID0gd2lkdGgtPmltbS52YWx1 ZTsKKyAgICAvKiBMb29rdXAgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIEVBICovCisgICAgZmluZF92 YXJpYWJsZShjLCBsb2NwLCBlYSwgZWEpOworICAgIHNyY19tID0gcnZhbHVlX21hdGVyaWFsaXpl KGMsIGxvY3AsICZzcmNfbSk7CisgICAgT1VUKGMsIGxvY3AsICJnZW5fc3RvcmUiLCAmbWVtX3dp ZHRoLCAiKGNwdV9lbnYsICIsIGVhLCAiLCAiLCAmc3JjX20pOworICAgIE9VVChjLCBsb2NwLCAi LCBpbnNuLT5zbG90KTtcbiIpOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAmc3JjX20p OworICAgIC8qIElmIHRoZSB2YXIgaW4gZWEgd2FzIHRydW5jYXRlZCBpdCBpcyBub3cgYSB0bXAg SGV4VmFsdWUsIHNvIGZyZWUgaXQuICovCisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIGVh KTsKK30KKwordm9pZCBnZW5fc2V0aGFsZihDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhD YXN0ICpzaCwgSGV4VmFsdWUgKm4sCisgICAgICAgICAgICAgICAgIEhleFZhbHVlICpkc3QsIEhl eFZhbHVlICp2YWx1ZSkKK3sKKyAgICB5eWFzc2VydChjLCBsb2NwLCBuLT50eXBlID09IElNTUVE SUFURSwKKyAgICAgICAgICAgICAiRGVwb3NpdCBpbmRleCBtdXN0IGJlIGltbWVkaWF0ZSFcbiIp OworICAgIGlmIChkc3QtPnR5cGUgPT0gVkFSSUQpIHsKKyAgICAgICAgZmluZF92YXJpYWJsZShj LCBsb2NwLCBkc3QsIGRzdCk7CisgICAgfQorCisgICAgZ2VuX2RlcG9zaXRfb3AoYywgbG9jcCwg ZHN0LCB2YWx1ZSwgbiwgc2gpOworfQorCit2b2lkIGdlbl9zZXRiaXRzKENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3AsIEhleFZhbHVlICpoaSwgSGV4VmFsdWUgKmxvLAorICAgICAgICAgICAgICAg ICBIZXhWYWx1ZSAqZHN0LCBIZXhWYWx1ZSAqdmFsdWUpCit7CisgICAgdW5zaWduZWQgbGVuOwor ICAgIEhleFZhbHVlIHRtcDsKKworICAgIHl5YXNzZXJ0KGMsIGxvY3AsIGhpLT50eXBlID09IElN TUVESUFURSAmJgorICAgICAgICAgICAgIGhpLT5pbW0udHlwZSA9PSBWQUxVRSAmJgorICAgICAg ICAgICAgIGxvLT50eXBlID09IElNTUVESUFURSAmJgorICAgICAgICAgICAgIGxvLT5pbW0udHlw ZSA9PSBWQUxVRSwKKyAgICAgICAgICAgICAiUmFuZ2UgZGVwb3NpdCBuZWVkcyBpbW1lZGlhdGUg dmFsdWVzIVxuIik7CisKKyAgICAqdmFsdWUgPSBnZW5fcnZhbHVlX3RydW5jYXRlKGMsIGxvY3As IHZhbHVlKTsKKyAgICBsZW4gPSBoaS0+aW1tLnZhbHVlICsgMSAtIGxvLT5pbW0udmFsdWU7Cisg ICAgdG1wID0gZ2VuX3RtcChjLCBsb2NwLCAzMiwgdmFsdWUtPnNpZ25lZG5lc3MpOworICAgIC8q IEVtaXQgYW4gYGFuZGAgdG8gZW5zdXJlIGB2YWx1ZWAgaXMgZWl0aGVyIDAgb3IgMS4gKi8KKyAg ICBPVVQoYywgbG9jcCwgInRjZ19nZW5fYW5kaV9pMzIoIiwgJnRtcCwgIiwgIiwgdmFsdWUsICIs IDEpO1xuIik7CisgICAgLyogVXNlIGBuZWdgIHRvIG1hcCAwIC0+IDAgYW5kIDEgLT4gMHhmZmZm Li4uICovCisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX25lZ19pMzIoIiwgJnRtcCwgIiwgIiwg JnRtcCwgIik7XG4iKTsKKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5fZGVwb3NpdF9pMzIoIiwg ZHN0LCAiLCAiLCBkc3QsCisgICAgICAgICIsICIsICZ0bXAsICIsICIpOworICAgIE9VVChjLCBs b2NwLCBsbywgIiwgIiwgJmxlbiwgIik7XG4iKTsKKworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBs b2NwLCAmdG1wKTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgaGkpOworICAgIGdlbl9y dmFsdWVfZnJlZShjLCBsb2NwLCBsbyk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHZh bHVlKTsKK30KKwordW5zaWduZWQgZ2VuX2lmX2NvbmQoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9j cCwgSGV4VmFsdWUgKmNvbmQpCit7CisgICAgY29uc3QgY2hhciAqYml0X3N1ZmZpeDsKKyAgICAv KiBHZW5lcmF0ZSBhbiBlbmQgbGFiZWwsIGlmIGZhbHNlIGJyYW5jaCB0byB0aGF0IGxhYmVsICov CisgICAgT1VUKGMsIGxvY3AsICJUQ0dMYWJlbCAqaWZfbGFiZWxfIiwgJmMtPmluc3QuaWZfY291 bnQsCisgICAgICAgICIgPSBnZW5fbmV3X2xhYmVsKCk7XG4iKTsKKyAgICAqY29uZCA9IHJ2YWx1 ZV9tYXRlcmlhbGl6ZShjLCBsb2NwLCBjb25kKTsKKyAgICBiaXRfc3VmZml4ID0gKGNvbmQtPmJp dF93aWR0aCA9PSA2NCkgPyAiaTY0IiA6ICJpMzIiOworICAgIE9VVChjLCBsb2NwLCAidGNnX2dl bl9icmNvbmRpXyIsIGJpdF9zdWZmaXgsICIoVENHX0NPTkRfRVEsICIsIGNvbmQsCisgICAgICAg ICIsIDAsIGlmX2xhYmVsXyIsICZjLT5pbnN0LmlmX2NvdW50LCAiKTtcbiIpOworICAgIGdlbl9y dmFsdWVfZnJlZShjLCBsb2NwLCBjb25kKTsKKyAgICByZXR1cm4gYy0+aW5zdC5pZl9jb3VudCsr OworfQorCit1bnNpZ25lZCBnZW5faWZfZWxzZShDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCB1 bnNpZ25lZCBpbmRleCkKK3sKKyAgICB1bnNpZ25lZCBpZl9pbmRleCA9IGMtPmluc3QuaWZfY291 bnQrKzsKKyAgICAvKiBHZW5lcmF0ZSBsYWJlbCB0byBqdW1wIGlmIGVsc2UgaXMgbm90IHZlcmlm aWVkICovCisgICAgT1VUKGMsIGxvY3AsICJUQ0dMYWJlbCAqaWZfbGFiZWxfIiwgJmlmX2luZGV4 LAorICAgICAgICAiID0gZ2VuX25ld19sYWJlbCgpO1xuIik7CisgICAgLyogSnVtcCBvdXQgb2Yg dGhlIGVsc2Ugc3RhdGVtZW50ICovCisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX2JyKGlmX2xh YmVsXyIsICZpZl9pbmRleCwgIik7XG4iKTsKKyAgICAvKiBGaXggdGhlIGVsc2UgbGFiZWwgKi8K KyAgICBPVVQoYywgbG9jcCwgImdlbl9zZXRfbGFiZWwoaWZfbGFiZWxfIiwgJmluZGV4LCAiKTtc biIpOworICAgIHJldHVybiBpZl9pbmRleDsKK30KKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV9wcmVk KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICpwcmVkKQoreworICAgIC8qIFBy ZWRpY3RlZCBpbnN0cnVjdGlvbnMgbmVlZCB0byB6ZXJvIG91dCByZXN1bHQgYXJncyAqLworICAg IGdlbl9pbnN0X2luaXRfYXJncyhjLCBsb2NwKTsKKworICAgIGlmIChpc19kaXJlY3RfcHJlZGlj YXRlKHByZWQpKSB7CisgICAgICAgIGJvb2wgaXNfZG90bmV3ID0gcHJlZC0+aXNfZG90bmV3Owor ICAgICAgICBjaGFyIHByZWRpY2F0ZV9pZFsyXSA9IHsgcHJlZC0+cHJlZC5pZCwgJ1wwJyB9Owor ICAgICAgICBjaGFyICpwcmVkX3N0ciA9IChjaGFyICopICZwcmVkaWNhdGVfaWQ7CisgICAgICAg ICpwcmVkID0gZ2VuX3RtcF92YWx1ZShjLCBsb2NwLCAiMCIsIDMyLCBVTlNJR05FRCk7CisgICAg ICAgIGlmIChpc19kb3RuZXcpIHsKKyAgICAgICAgICAgIE9VVChjLCBsb2NwLCAidGNnX2dlbl9t b3ZfaTMyKCIsIHByZWQsCisgICAgICAgICAgICAgICAgIiwgaGV4X25ld19wcmVkX3ZhbHVlWyIp OworICAgICAgICAgICAgT1VUKGMsIGxvY3AsIHByZWRfc3RyLCAiXSk7XG4iKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIE9VVChjLCBsb2NwLCAiZ2VuX3JlYWRfcHJlZygiLCBwcmVk LCAiLCAiLCBwcmVkX3N0ciwgIik7XG4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy biAqcHJlZDsKK30KKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV92YXIoQ29udGV4dCAqYywgWVlMVFlQ RSAqbG9jcCwgSGV4VmFsdWUgKnZhcikKK3sKKyAgICBmaW5kX3ZhcmlhYmxlKGMsIGxvY3AsIHZh ciwgdmFyKTsKKyAgICByZXR1cm4gKnZhcjsKK30KKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV9tcHko Q29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4TXB5ICptcHksCisgICAgICAgICAgICAgICAg ICAgICAgICBIZXhWYWx1ZSAqb3AxLCBIZXhWYWx1ZSAqb3AyKQoreworICAgIEhleFZhbHVlIHJl czsKKyAgICBtZW1zZXQoJnJlcywgMCwgc2l6ZW9mKEhleFZhbHVlKSk7CisKKyAgICBhc3NlcnRf c2lnbmVkbmVzcyhjLCBsb2NwLCBtcHktPmZpcnN0X3NpZ25lZG5lc3MpOworICAgIGFzc2VydF9z aWduZWRuZXNzKGMsIGxvY3AsIG1weS0+c2Vjb25kX3NpZ25lZG5lc3MpOworCisgICAgKm9wMSA9 IGdlbl9jYXN0X29wKGMsIGxvY3AsIG9wMSwgbXB5LT5maXJzdF9iaXRfd2lkdGggKiAyLAorICAg ICAgICAgICAgICAgICAgICAgbXB5LT5maXJzdF9zaWduZWRuZXNzKTsKKyAgICAvKiBIYW5kbGUg Zk1QVFkzMjE2Li4gKi8KKyAgICBpZiAobXB5LT5maXJzdF9iaXRfd2lkdGggPT0gMzIpIHsKKyAg ICAgICAgKm9wMiA9IGdlbl9jYXN0X29wKGMsIGxvY3AsIG9wMiwgNjQsIG1weS0+c2Vjb25kX3Np Z25lZG5lc3MpOworICAgIH0gZWxzZSB7CisgICAgICAgICpvcDIgPSBnZW5fY2FzdF9vcChjLCBs b2NwLCBvcDIsIG1weS0+c2Vjb25kX2JpdF93aWR0aCAqIDIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgbXB5LT5zZWNvbmRfc2lnbmVkbmVzcyk7CisgICAgfQorICAgIHJlcyA9IGdlbl9iaW5f b3AoYywgbG9jcCwgTVVMX09QLCBvcDEsIG9wMik7CisgICAgLyogSGFuZGxlIHNwZWNpYWwgY2Fz ZXMgcmVxdWlyZWQgYnkgdGhlIGxhbmd1YWdlICovCisgICAgaWYgKG1weS0+Zmlyc3RfYml0X3dp ZHRoID09IDE2ICYmIG1weS0+c2Vjb25kX2JpdF93aWR0aCA9PSAxNikgeworICAgICAgICBIZXhW YWx1ZSBzcmNfd2lkdGggPSBnZW5faW1tX3ZhbHVlKGMsIGxvY3AsIDMyLCAzMiwgVU5TSUdORUQp OworICAgICAgICBIZXhTaWduZWRuZXNzIHNpZ25lZG5lc3MgPSBiaW5fb3Bfc2lnbmVkbmVzcyhj LCBsb2NwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtcHktPmZpcnN0X3NpZ25lZG5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1weS0+c2Vjb25kX3NpZ25lZG5lc3MpOworICAgICAg ICByZXMgPSBnZW5fZXh0ZW5kX29wKGMsIGxvY3AsICZzcmNfd2lkdGgsIDY0LCAmcmVzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZG5lc3MpOworICAgIH0KKyAgICByZXR1cm4g cmVzOworfQorCitzdGF0aWMgaW5saW5lIEhleFZhbHVlIGdlbl9ydmFsdWVfc2ltcGxlX3VuYXJ5 KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhleFZhbHVlICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY19jb2RlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0Y2dfY29k ZSkKK3sKKyAgICB1bnNpZ25lZCBiaXRfd2lkdGggPSAodmFsdWUtPmJpdF93aWR0aCA9PSA2NCkg PyA2NCA6IDMyOworICAgIEhleFZhbHVlIHJlczsKKyAgICBpZiAodmFsdWUtPnR5cGUgPT0gSU1N RURJQVRFKSB7CisgICAgICAgIHJlcyA9IGdlbl9pbW1fcWVtdV90bXAoYywgbG9jcCwgYml0X3dp ZHRoLCB2YWx1ZS0+c2lnbmVkbmVzcyk7CisgICAgICAgIGdlbl9jX2ludF90eXBlKGMsIGxvY3As IHZhbHVlLT5iaXRfd2lkdGgsIHZhbHVlLT5zaWduZWRuZXNzKTsKKyAgICAgICAgT1VUKGMsIGxv Y3AsICIgIiwgJnJlcywgIiA9ICIsIGNfY29kZSwgIigiLCB2YWx1ZSwgIik7XG4iKTsKKyAgICB9 IGVsc2UgeworICAgICAgICByZXMgPSBnZW5fdG1wKGMsIGxvY3AsIGJpdF93aWR0aCwgdmFsdWUt PnNpZ25lZG5lc3MpOworICAgICAgICBPVVQoYywgbG9jcCwgdGNnX2NvZGUsICJfaSIsICZiaXRf d2lkdGgsICIoIiwgJnJlcywgIiwgIiwgdmFsdWUsCisgICAgICAgICAgICAiKTtcbiIpOworICAg ICAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4g cmVzOworfQorCisKK0hleFZhbHVlIGdlbl9ydmFsdWVfbm90KENvbnRleHQgKmMsIFlZTFRZUEUg KmxvY3AsIEhleFZhbHVlICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gZ2VuX3J2YWx1ZV9zaW1wbGVf dW5hcnkoYywgbG9jcCwgdmFsdWUsICJ+IiwgInRjZ19nZW5fbm90Iik7Cit9CisKK0hleFZhbHVl IGdlbl9ydmFsdWVfbm90bChDb250ZXh0ICpjLCBZWUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqdmFs dWUpCit7CisgICAgdW5zaWduZWQgYml0X3dpZHRoID0gKHZhbHVlLT5iaXRfd2lkdGggPT0gNjQp ID8gNjQgOiAzMjsKKyAgICBIZXhWYWx1ZSByZXM7CisgICAgaWYgKHZhbHVlLT50eXBlID09IElN TUVESUFURSkgeworICAgICAgICByZXMgPSBnZW5faW1tX3FlbXVfdG1wKGMsIGxvY3AsIGJpdF93 aWR0aCwgdmFsdWUtPnNpZ25lZG5lc3MpOworICAgICAgICBnZW5fY19pbnRfdHlwZShjLCBsb2Nw LCB2YWx1ZS0+Yml0X3dpZHRoLCB2YWx1ZS0+c2lnbmVkbmVzcyk7CisgICAgICAgIE9VVChjLCBs b2NwLCAiICIsICZyZXMsICIgPSAhKCIsIHZhbHVlLCAiKTtcbiIpOworICAgIH0gZWxzZSB7Cisg ICAgICAgIEhleFZhbHVlIHplcm8gPSBnZW5fY29uc3RhbnQoYywgbG9jcCwgIjAiLCBiaXRfd2lk dGgsIFVOU0lHTkVEKTsKKyAgICAgICAgSGV4VmFsdWUgb25lID0gZ2VuX2NvbnN0YW50KGMsIGxv Y3AsICIweGZmIiwgYml0X3dpZHRoLCBVTlNJR05FRCk7CisgICAgICAgIHJlcyA9IGdlbl90bXAo YywgbG9jcCwgYml0X3dpZHRoLCB2YWx1ZS0+c2lnbmVkbmVzcyk7CisgICAgICAgIE9VVChjLCBs b2NwLCAidGNnX2dlbl9tb3Zjb25kX2kiLCAmYml0X3dpZHRoKTsKKyAgICAgICAgT1VUKGMsIGxv Y3AsICIoVENHX0NPTkRfRVEsICIsICZyZXMsICIsICIsIHZhbHVlLCAiLCAiLCAmemVybyk7Cisg ICAgICAgIE9VVChjLCBsb2NwLCAiLCAiLCAmb25lLCAiLCAiLCAmemVybywgIik7XG4iKTsKKyAg ICAgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJu IHJlczsKK30KKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV9zYXQoQ29udGV4dCAqYywgWVlMVFlQRSAq bG9jcCwgSGV4U2F0ICpzYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSAqd2lk dGgsIEhleFZhbHVlICp2YWx1ZSkKK3sKKyAgICBjb25zdCBjaGFyICp1bnNpZ25lZF9zdHI7Cisg ICAgY29uc3QgY2hhciAqYml0X3N1ZmZpeCA9ICh2YWx1ZS0+Yml0X3dpZHRoID09IDY0KSA/ICJp NjQiIDogImkzMiI7CisgICAgSGV4VmFsdWUgcmVzOworICAgIEhleFZhbHVlIG92Zmw7CisgICAg LyoKKyAgICAgKiBOb3RlOiBhbGwgc2F0dXJhdGVzIGFyZSBhc3N1bWVkIHRvIGltcGxpY2l0bHkg c2V0IG92ZXJmbG93LgorICAgICAqIFRoaXMgYXNzdW1wdGlvbiBob2xkcyBmb3IgdGhlIGluc3Ry dWN0aW9ucyBjdXJyZW50bHkgcGFyc2VkCisgICAgICogYnkgaWRlZi1wYXJzZXIuCisgICAgICov CisgICAgeXlhc3NlcnQoYywgbG9jcCwgd2lkdGgtPmltbS52YWx1ZSA8IHZhbHVlLT5iaXRfd2lk dGgsCisgICAgICAgICAgICAgIlRvIGNvbXB1dGUgb3ZlcmZsb3csIHNvdXJjZSB3aWR0aCBtdXN0 IGJlIGdyZWF0ZXIgdGhhbiIKKyAgICAgICAgICAgICAiIHNhdHVyYXRpb24gd2lkdGghIik7Cisg ICAgeXlhc3NlcnQoYywgbG9jcCwgIWlzX2luc2lkZV90ZXJuYXJ5KGMpLAorICAgICAgICAgICAg ICJTYXR1cmF0aW5nIGZyb20gd2l0aGluIGEgdGVybmFyeSBpcyBub3QgYWxsb3dlZCEiKTsKKyAg ICBhc3NlcnRfc2lnbmVkbmVzcyhjLCBsb2NwLCBzYXQtPnNpZ25lZG5lc3MpOworCisgICAgdW5z aWduZWRfc3RyID0gKHNhdC0+c2lnbmVkbmVzcyA9PSBVTlNJR05FRCkgPyAidSIgOiAiIjsKKyAg ICByZXMgPSBnZW5fdG1wX2xvY2FsKGMsIGxvY3AsIHZhbHVlLT5iaXRfd2lkdGgsIHNhdC0+c2ln bmVkbmVzcyk7CisgICAgb3ZmbCA9IGdlbl90bXBfbG9jYWwoYywgbG9jcCwgMzIsIHNhdC0+c2ln bmVkbmVzcyk7CisgICAgT1VUKGMsIGxvY3AsICJnZW5fc2F0IiwgdW5zaWduZWRfc3RyLCAiXyIs IGJpdF9zdWZmaXgsICJfb3ZmbCgiKTsKKyAgICBPVVQoYywgbG9jcCwgJm92ZmwsICIsICIsICZy ZXMsICIsICIsIHZhbHVlLCAiLCAiLCAmd2lkdGgtPmltbS52YWx1ZSwKKyAgICAgICAgIik7XG4i KTsKKyAgICBPVVQoYywgbG9jcCwgImdlbl9zZXRfdXNyX2ZpZWxkX2lmKFVTUl9PVkYsIiwgJm92 ZmwsICIpO1xuIik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHZhbHVlKTsKKworICAg IHJldHVybiByZXM7Cit9CisKK0hleFZhbHVlIGdlbl9ydmFsdWVfZnNjcihDb250ZXh0ICpjLCBZ WUxUWVBFICpsb2NwLCBIZXhWYWx1ZSAqdmFsdWUpCit7CisgICAgSGV4VmFsdWUga2V5ID0gZ2Vu X3RtcChjLCBsb2NwLCA2NCwgVU5TSUdORUQpOworICAgIEhleFZhbHVlIHJlcyA9IGdlbl90bXAo YywgbG9jcCwgNjQsIFVOU0lHTkVEKTsKKyAgICBIZXhWYWx1ZSBmcmFtZV9rZXkgPSBnZW5fdG1w KGMsIGxvY3AsIDMyLCBVTlNJR05FRCk7CisgICAgKnZhbHVlID0gZ2VuX3J2YWx1ZV9leHRlbmQo YywgbG9jcCwgdmFsdWUpOworICAgIE9VVChjLCBsb2NwLCAiZ2VuX3JlYWRfcmVnKCIsICZmcmFt ZV9rZXksICIsIEhFWF9SRUdfRlJBTUVLRVkpO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2df Z2VuX2NvbmNhdF9pMzJfaTY0KCIsCisgICAgICAgICZrZXksICIsICIsICZmcmFtZV9rZXksICIs ICIsICZmcmFtZV9rZXksICIpO1xuIik7CisgICAgT1VUKGMsIGxvY3AsICJ0Y2dfZ2VuX3hvcl9p NjQoIiwgJnJlcywgIiwgIiwgdmFsdWUsICIsICIsICZrZXksICIpO1xuIik7CisgICAgZ2VuX3J2 YWx1ZV9mcmVlKGMsIGxvY3AsICZrZXkpOworICAgIGdlbl9ydmFsdWVfZnJlZShjLCBsb2NwLCAm ZnJhbWVfa2V5KTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgdmFsdWUpOworICAgIHJl dHVybiByZXM7Cit9CisKK0hleFZhbHVlIGdlbl9ydmFsdWVfYWJzKENvbnRleHQgKmMsIFlZTFRZ UEUgKmxvY3AsIEhleFZhbHVlICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gZ2VuX3J2YWx1ZV9zaW1w bGVfdW5hcnkoYywgbG9jcCwgdmFsdWUsICJhYnMiLCAidGNnX2dlbl9hYnMiKTsKK30KKworSGV4 VmFsdWUgZ2VuX3J2YWx1ZV9uZWcoQ29udGV4dCAqYywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUg KnZhbHVlKQoreworICAgIHJldHVybiBnZW5fcnZhbHVlX3NpbXBsZV91bmFyeShjLCBsb2NwLCB2 YWx1ZSwgIi0iLCAidGNnX2dlbl9uZWciKTsKK30KKworSGV4VmFsdWUgZ2VuX3J2YWx1ZV9icmV2 KENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICp2YWx1ZSkKK3sKKyAgICBIZXhW YWx1ZSByZXM7CisgICAgeXlhc3NlcnQoYywgbG9jcCwgdmFsdWUtPmJpdF93aWR0aCA8PSAzMiwK KyAgICAgICAgICAgICAiZmJyZXYgbm90IGltcGxlbWVudGVkIGZvciA2NC1iaXQgaW50ZWdlcnMh Iik7CisgICAgcmVzID0gZ2VuX3RtcChjLCBsb2NwLCB2YWx1ZS0+Yml0X3dpZHRoLCB2YWx1ZS0+ c2lnbmVkbmVzcyk7CisgICAgKnZhbHVlID0gcnZhbHVlX21hdGVyaWFsaXplKGMsIGxvY3AsIHZh bHVlKTsKKyAgICBPVVQoYywgbG9jcCwgImdlbl9oZWxwZXJfZmJyZXYoIiwgJnJlcywgIiwgIiwg dmFsdWUsICIpO1xuIik7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHZhbHVlKTsKKyAg ICByZXR1cm4gcmVzOworfQorCitIZXhWYWx1ZSBnZW5fcnZhbHVlX3Rlcm5hcnkoQ29udGV4dCAq YywgWVlMVFlQRSAqbG9jcCwgSGV4VmFsdWUgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSGV4VmFsdWUgKnRydWVfYnJhbmNoLCBIZXhWYWx1ZSAqZmFsc2VfYnJhbmNoKQorewor ICAgIGJvb2wgaXNfNjRiaXQgPSAodHJ1ZV9icmFuY2gtPmJpdF93aWR0aCA9PSA2NCkgfHwKKyAg ICAgICAgICAgICAgICAgICAgKGZhbHNlX2JyYW5jaC0+Yml0X3dpZHRoID09IDY0KTsKKyAgICB1 bnNpZ25lZCBiaXRfd2lkdGggPSAoaXNfNjRiaXQpID8gNjQgOiAzMjsKKyAgICBIZXhWYWx1ZSB6 ZXJvID0gZ2VuX2NvbnN0YW50KGMsIGxvY3AsICIwIiwgYml0X3dpZHRoLCBVTlNJR05FRCk7Cisg ICAgSGV4VmFsdWUgcmVzID0gZ2VuX3RtcChjLCBsb2NwLCBiaXRfd2lkdGgsIFVOU0lHTkVEKTsK KyAgICBUZXJuYXJ5ICp0ZXJuYXJ5ID0gTlVMTDsKKworICAgIGlmIChpc182NGJpdCkgeworICAg ICAgICAqY29uZCA9IGdlbl9ydmFsdWVfZXh0ZW5kKGMsIGxvY3AsIGNvbmQpOworICAgICAgICAq dHJ1ZV9icmFuY2ggPSBnZW5fcnZhbHVlX2V4dGVuZChjLCBsb2NwLCB0cnVlX2JyYW5jaCk7Cisg ICAgICAgICpmYWxzZV9icmFuY2ggPSBnZW5fcnZhbHVlX2V4dGVuZChjLCBsb2NwLCBmYWxzZV9i cmFuY2gpOworICAgIH0gZWxzZSB7CisgICAgICAgICpjb25kID0gZ2VuX3J2YWx1ZV90cnVuY2F0 ZShjLCBsb2NwLCBjb25kKTsKKyAgICB9CisgICAgKmNvbmQgPSBydmFsdWVfbWF0ZXJpYWxpemUo YywgbG9jcCwgY29uZCk7CisgICAgKnRydWVfYnJhbmNoID0gcnZhbHVlX21hdGVyaWFsaXplKGMs IGxvY3AsIHRydWVfYnJhbmNoKTsKKyAgICAqZmFsc2VfYnJhbmNoID0gcnZhbHVlX21hdGVyaWFs aXplKGMsIGxvY3AsIGZhbHNlX2JyYW5jaCk7CisKKyAgICBPVVQoYywgbG9jcCwgInRjZ19nZW5f bW92Y29uZF9pIiwgJmJpdF93aWR0aCk7CisgICAgT1VUKGMsIGxvY3AsICIoVENHX0NPTkRfTkUs ICIsICZyZXMsICIsICIsIGNvbmQsICIsICIsICZ6ZXJvKTsKKyAgICBPVVQoYywgbG9jcCwgIiwg IiwgdHJ1ZV9icmFuY2gsICIsICIsIGZhbHNlX2JyYW5jaCwgIik7XG4iKTsKKworICAgIGFzc2Vy dChjLT50ZXJuYXJ5LT5sZW4gPiAwKTsKKyAgICB0ZXJuYXJ5ID0gJmdfYXJyYXlfaW5kZXgoYy0+ dGVybmFyeSwgVGVybmFyeSwgYy0+dGVybmFyeS0+bGVuIC0gMSk7CisgICAgZ2VuX3J2YWx1ZV9m cmVlX21hbnVhbChjLCBsb2NwLCAmdGVybmFyeS0+Y29uZCk7CisgICAgZ19hcnJheV9yZW1vdmVf aW5kZXgoYy0+dGVybmFyeSwgYy0+dGVybmFyeS0+bGVuIC0gMSk7CisKKyAgICBnZW5fcnZhbHVl X2ZyZWUoYywgbG9jcCwgY29uZCk7CisgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsIGxvY3AsIHRydWVf YnJhbmNoKTsKKyAgICBnZW5fcnZhbHVlX2ZyZWUoYywgbG9jcCwgZmFsc2VfYnJhbmNoKTsKKyAg ICByZXR1cm4gcmVzOworfQorCitjb25zdCBjaGFyICpjb25kX3RvX3N0cihUQ0dDb25kIGNvbmQp Cit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBUQ0dfQ09ORF9ORVZFUjoKKyAgICAg ICAgcmV0dXJuICJUQ0dfQ09ORF9ORVZFUiI7CisgICAgY2FzZSBUQ0dfQ09ORF9BTFdBWVM6Cisg ICAgICAgIHJldHVybiAiVENHX0NPTkRfQUxXQVlTIjsKKyAgICBjYXNlIFRDR19DT05EX0VROgor ICAgICAgICByZXR1cm4gIlRDR19DT05EX0VRIjsKKyAgICBjYXNlIFRDR19DT05EX05FOgorICAg ICAgICByZXR1cm4gIlRDR19DT05EX05FIjsKKyAgICBjYXNlIFRDR19DT05EX0xUOgorICAgICAg ICByZXR1cm4gIlRDR19DT05EX0xUIjsKKyAgICBjYXNlIFRDR19DT05EX0dFOgorICAgICAgICBy ZXR1cm4gIlRDR19DT05EX0dFIjsKKyAgICBjYXNlIFRDR19DT05EX0xFOgorICAgICAgICByZXR1 cm4gIlRDR19DT05EX0xFIjsKKyAgICBjYXNlIFRDR19DT05EX0dUOgorICAgICAgICByZXR1cm4g IlRDR19DT05EX0dUIjsKKyAgICBjYXNlIFRDR19DT05EX0xUVToKKyAgICAgICAgcmV0dXJuICJU Q0dfQ09ORF9MVFUiOworICAgIGNhc2UgVENHX0NPTkRfR0VVOgorICAgICAgICByZXR1cm4gIlRD R19DT05EX0dFVSI7CisgICAgY2FzZSBUQ0dfQ09ORF9MRVU6CisgICAgICAgIHJldHVybiAiVENH X0NPTkRfTEVVIjsKKyAgICBjYXNlIFRDR19DT05EX0dUVToKKyAgICAgICAgcmV0dXJuICJUQ0df Q09ORF9HVFUiOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFib3J0KCk7CisgICAgfQorfQorCit2 b2lkIGVtaXRfYXJnKENvbnRleHQgKmMsIFlZTFRZUEUgKmxvY3AsIEhleFZhbHVlICphcmcpCit7 CisgICAgc3dpdGNoIChhcmctPnR5cGUpIHsKKyAgICBjYXNlIFJFR0lTVEVSX0FSRzoKKyAgICAg ICAgaWYgKGFyZy0+cmVnLnR5cGUgPT0gRE9UTkVXKSB7CisgICAgICAgICAgICBFTUlUX1NJRyhj LCAiLCBUQ0d2IE4lY04iLCBhcmctPnJlZy5pZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBib29sIGlzNjQgPSAoYXJnLT5iaXRfd2lkdGggPT0gNjQpOworICAgICAgICAgICAgY29u c3QgY2hhciAqdHlwZSA9IGlzNjQgPyAiVENHdl9pNjQiIDogIlRDR3ZfaTMyIjsKKyAgICAgICAg ICAgIGNoYXIgcmVnX2lkWzVdOworICAgICAgICAgICAgcmVnX2NvbXBvc2UoYywgbG9jcCwgJihh cmctPnJlZyksIHJlZ19pZCk7CisgICAgICAgICAgICBFTUlUX1NJRyhjLCAiLCAlcyAlcyIsIHR5 cGUsIHJlZ19pZCk7CisgICAgICAgICAgICAvKiBNdVYgcmVnaXN0ZXIgcmVxdWlyZXMgYWxzbyBN dU4gdG8gcHJvdmlkZSBpdHMgaW5kZXggKi8KKyAgICAgICAgICAgIGlmIChhcmctPnJlZy50eXBl ID09IE1PRElGSUVSKSB7CisgICAgICAgICAgICAgICAgRU1JVF9TSUcoYywgIiwgaW50IE11TiIp OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJF RElDQVRFOgorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHN1ZmZpeCA9IGFyZy0+aXNfZG90 bmV3ID8gJ04nIDogJ1YnOworICAgICAgICAgICAgRU1JVF9TSUcoYywgIiwgVENHdiBQJWMlYyIs IGFyZy0+cHJlZC5pZCwgc3VmZml4KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVtaXRfYXJn IGdvdCB1bnN1cHBvcnRlZCBhcmd1bWVudCEiKTsKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAg ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZW1pdF9mb290ZXIoQ29udGV4dCAqYykKK3sKKyAgICBF TUlUKGMsICJ9XG4iKTsKKyAgICBFTUlUKGMsICJcbiIpOworfQorCit2b2lkIHRyYWNrX3N0cmlu ZyhDb250ZXh0ICpjLCBHU3RyaW5nICpzKQoreworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbChjLT5p bnN0LnN0cmluZ3MsIHMpOworfQorCit2b2lkIGZyZWVfdmFyaWFibGVzKENvbnRleHQgKmMsIFlZ TFRZUEUgKmxvY3ApCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGMtPmluc3QuYWxs b2NhdGVkLT5sZW47ICsraSkgeworICAgICAgICBWYXIgKnZhciA9ICZnX2FycmF5X2luZGV4KGMt Pmluc3QuYWxsb2NhdGVkLCBWYXIsIGkpOworICAgICAgICBjb25zdCBjaGFyICpzdWZmaXggPSB2 YXItPmJpdF93aWR0aCA9PSA2NCA/ICJpNjQiIDogImkzMiI7CisgICAgICAgIE9VVChjLCBsb2Nw LCAidGNnX3RlbXBfZnJlZV8iLCBzdWZmaXgsICIoIiwgdmFyLT5uYW1lLT5zdHIsICIpO1xuIik7 CisgICAgfQorfQorCit2b2lkIGZyZWVfaW5zdHJ1Y3Rpb24oQ29udGV4dCAqYykKK3sKKyAgICBh c3NlcnQoIWlzX2luc2lkZV90ZXJuYXJ5KGMpKTsKKyAgICAvKiBGcmVlIHRoZSBzdHJpbmdzICov CisgICAgZ19zdHJpbmdfdHJ1bmNhdGUoYy0+c2lnbmF0dXJlX3N0ciwgMCk7CisgICAgZ19zdHJp bmdfdHJ1bmNhdGUoYy0+b3V0X3N0ciwgMCk7CisgICAgZ19zdHJpbmdfdHJ1bmNhdGUoYy0+aGVh ZGVyX3N0ciwgMCk7CisgICAgLyogRnJlZSBzdHJpbmdzIGFsbG9jYXRlZCBieSB0aGUgaW5zdHJ1 Y3Rpb24gKi8KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYy0+aW5zdC5zdHJpbmdzLT5s ZW47IGkrKykgeworICAgICAgICBnX3N0cmluZ19mcmVlKGdfYXJyYXlfaW5kZXgoYy0+aW5zdC5z dHJpbmdzLCBHU3RyaW5nKiwgaSksIFRSVUUpOworICAgIH0KKyAgICBnX2FycmF5X2ZyZWUoYy0+ aW5zdC5zdHJpbmdzLCBUUlVFKTsKKyAgICAvKiBGcmVlIElOQU1FIHRva2VuIHZhbHVlICovCisg ICAgZ19zdHJpbmdfZnJlZShjLT5pbnN0Lm5hbWUsIFRSVUUpOworICAgIC8qIEZyZWUgdmFyaWFi bGVzIGFuZCByZWdpc3RlcnMgKi8KKyAgICBnX2FycmF5X2ZyZWUoYy0+aW5zdC5hbGxvY2F0ZWQs IFRSVUUpOworICAgIC8qIEluaXRpYWxpemUgaW5zdHJ1Y3Rpb24tc3BlY2lmaWMgcG9ydGlvbiBv ZiB0aGUgY29udGV4dCAqLworICAgIG1lbXNldCgmKGMtPmluc3QpLCAwLCBzaXplb2YoSW5zdCkp OworfQorCit2b2lkIGFzc2VydF9zaWduZWRuZXNzKENvbnRleHQgKmMsCisgICAgICAgICAgICAg ICAgICAgICAgIFlZTFRZUEUgKmxvY3AsCisgICAgICAgICAgICAgICAgICAgICAgIEhleFNpZ25l ZG5lc3Mgc2lnbmVkbmVzcykKK3sKKyAgICB5eWFzc2VydChjLCBsb2NwLAorICAgICAgICAgICAg IHNpZ25lZG5lc3MgIT0gVU5LTk9XTl9TSUdORURORVNTLAorICAgICAgICAgICAgICJVbnNwZWNp ZmllZCBzaWduZWRuZXNzIik7Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9pZGVmLXBh cnNlci9pZGVmLXBhcnNlci55IGIvdGFyZ2V0L2hleGFnb24vaWRlZi1wYXJzZXIvaWRlZi1wYXJz ZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44YmU0NGEwYWQxCi0t LSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vaWRlZi1wYXJzZXIvaWRlZi1wYXJzZXIu eQpAQCAtMCwwICsxLDk2NSBAQAorJXsKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMiBy ZXYubmcgTGFicyBTcmwuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5j bHVkZSAiaWRlZi1wYXJzZXIuaCIKKyNpbmNsdWRlICJwYXJzZXItaGVscGVycy5oIgorI2luY2x1 ZGUgImlkZWYtcGFyc2VyLnRhYi5oIgorI2luY2x1ZGUgImlkZWYtcGFyc2VyLnl5LmgiCisKKy8q IFVuY29tbWVudCB0aGlzIHRvIGRpc2FibGUgeXlhc3NlcnRzICovCisvKiAjZGVmaW5lIE5ERUJV RyAqLworCisjZGVmaW5lIEVSUl9MSU5FX0NPTlRFWFQgNDAKKworJX0KKworJWxleC1wYXJhbSB7 dm9pZCAqc2Nhbm5lcn0KKyVwYXJzZS1wYXJhbSB7dm9pZCAqc2Nhbm5lcn0KKyVwYXJzZS1wYXJh bSB7Q29udGV4dCAqY30KKworJWRlZmluZSBwYXJzZS5lcnJvciB2ZXJib3NlCislZGVmaW5lIHBh cnNlLmxhYyBmdWxsCislZGVmaW5lIGFwaS5wdXJlIGZ1bGwKKworJWxvY2F0aW9ucworCisldW5p b24geworICAgIEdTdHJpbmcgKnN0cmluZzsKKyAgICBIZXhWYWx1ZSBydmFsdWU7CisgICAgSGV4 U2F0IHNhdDsKKyAgICBIZXhDYXN0IGNhc3Q7CisgICAgSGV4RXh0cmFjdCBleHRyYWN0OworICAg IEhleE1weSBtcHk7CisgICAgSGV4U2lnbmVkbmVzcyBzaWduZWRuZXNzOworICAgIGludCBpbmRl eDsKK30KKworLyogVG9rZW5zICovCislc3RhcnQgaW5wdXQKKworJWV4cGVjdCAxCisKKyV0b2tl biBJTiBJTkFNRSBWQVIKKyV0b2tlbiBBQlMgQ1JPVU5EIFJPVU5EIENJUkNBREQgQ09VTlRPTkVT IElOQyBERUMgQU5EQSBPUkEgWE9SQSBQTFVTUExVUyBBU0wKKyV0b2tlbiBBU1IgTFNSIEVRIE5F USBMVEUgR1RFIE1JTiBNQVggQU5ETCBGT1IgSUNJUkMgSUYgTVVOIEZTQ1IgRkNISyBTWFQKKyV0 b2tlbiBaWFQgQ09OU1RFWFQgTE9DTlQgQlJFViBTSUdOIExPQUQgU1RPUkUgUEMgTlBDIExQQ0ZH CisldG9rZW4gTE9BRF9DQU5DRUwgQ0FOQ0VMIElERU5USVRZIFBBUlQxIFJPVEwgSU5TQklUUyBT RVRCSVRTIEVYVFJBTkdFCisldG9rZW4gQ0FTVDRfOFUgRkFJTCBDQVJSWV9GUk9NX0FERCBBRERT QVQ2NCBMU0JORVcKKyV0b2tlbiBUWVBFX1NJWkVfVCBUWVBFX0lOVCBUWVBFX1NJR05FRCBUWVBF X1VOU0lHTkVEIFRZUEVfTE9ORworCisldG9rZW4gPHJ2YWx1ZT4gUkVHIElNTSBQUkVECisldG9r ZW4gPGluZGV4PiBFTFNFCisldG9rZW4gPG1weT4gTVBZCisldG9rZW4gPHNhdD4gU0FUCisldG9r ZW4gPGNhc3Q+IENBU1QgREVQT1NJVCBTRVRIQUxGCisldG9rZW4gPGV4dHJhY3Q+IEVYVFJBQ1QK KyV0eXBlIDxzdHJpbmc+IElOQU1FCisldHlwZSA8cnZhbHVlPiBydmFsdWUgbHZhbHVlIFZBUiBh c3NpZ25fc3RhdGVtZW50IHZhciB2YXJfZGVjbCB2YXJfdHlwZQorJXR5cGUgPHJ2YWx1ZT4gRkFJ TAorJXR5cGUgPHJ2YWx1ZT4gVFlQRV9TSUdORUQgVFlQRV9VTlNJR05FRCBUWVBFX0lOVCBUWVBF X0xPTkcgVFlQRV9TSVpFX1QKKyV0eXBlIDxpbmRleD4gaWZfc3RtdCBJRgorJXR5cGUgPHNpZ25l ZG5lc3M+IFNJR04KKworLyogT3BlcmF0b3IgUHJlY2VkZW5jZXMgKi8KKyVsZWZ0IE1JTiBNQVgK KyVsZWZ0ICcoJworJWxlZnQgJywnCislbGVmdCAnPScKKyVyaWdodCBDSVJDQURECislcmlnaHQg SU5DIERFQyBBTkRBIE9SQSBYT1JBCislbGVmdCAnPycgJzonCislbGVmdCBBTkRMCislbGVmdCAn fCcKKyVsZWZ0ICdeJyBBTkRPUgorJWxlZnQgJyYnCislbGVmdCBFUSBORVEKKyVsZWZ0ICc8JyAn PicgTFRFIEdURQorJWxlZnQgQVNMIEFTUiBMU1IKKyVyaWdodCBBQlMKKyVsZWZ0ICctJyAnKycK KyVsZWZ0ICcqJyAnLycgJyUnIE1QWQorJXJpZ2h0ICd+JyAnIScKKyVsZWZ0ICdbJworJXJpZ2h0 IENBU1QKKyVyaWdodCBMT0NOVCBCUkVWCisKKy8qIEJpc29uIEdyYW1tYXIgKi8KKyUlCisKKy8q IElucHV0IGZpbGUgY29udGFpbmluZyB0aGUgZGVzY3JpcHRpb24gb2YgZWFjaCBoZXhhZ29uIGlu c3RydWN0aW9uICovCitpbnB1dCA6IGluc3RydWN0aW9ucworICAgICAgeworICAgICAgICAgIFlZ QUNDRVBUOworICAgICAgfQorICAgICAgOworCitpbnN0cnVjdGlvbnMgOiBpbnN0cnVjdGlvbiBp bnN0cnVjdGlvbnMKKyAgICAgICAgICAgICB8ICVlbXB0eQorICAgICAgICAgICAgIDsKKworaW5z dHJ1Y3Rpb24gOiBJTkFNRQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBnZW5f aW5zdChjLCAkMSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYXJndW1lbnRzCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIEVNSVRfU0lHKGMsICIpIik7CisgICAg ICAgICAgICAgICAgICBFTUlUX0hFQUQoYywgIntcbiIpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIGNvZGUKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZ2VuX2lu c3RfY29kZShjLCAmQDEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB8IGVycm9yIC8q IFJlY292ZXIgZ3JhY2VmdWxseSBhZnRlciBpbnN0cnVjdGlvbiBjb21waWxhdGlvbiBlcnJvciAq LworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBmcmVlX2luc3RydWN0aW9uKGMp OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICA7CisKK2FyZ3VtZW50cyA6ICcoJyAnKScK KyAgICAgICAgICB8ICcoJyBhcmd1bWVudF9saXN0ICcpJzsKKworYXJndW1lbnRfbGlzdCA6IGFy Z3VtZW50X2RlY2wgJywnIGFyZ3VtZW50X2xpc3QKKyAgICAgICAgICAgICAgfCBhcmd1bWVudF9k ZWNsCisgICAgICAgICAgICAgIDsKKwordmFyIDogVkFSCisgICAgICB7CisgICAgICAgICAgdHJh Y2tfc3RyaW5nKGMsICQxLnZhci5uYW1lKTsKKyAgICAgICAgICAkJCA9ICQxOworICAgICAgfQor ICAgIDsKKworLyoKKyAqIEhlcmUgdGhlIGludGVnZXIgdHlwZXMgYXJlIGRlZmluZWQgZnJvbSB2 YWxpZCBjb21iaW5hdGlvbnMgb2YKKyAqIGBzaWduZWRgLCBgdW5zaWduZWRgLCBgaW50YCwgYW5k IGBsb25nYCB0b2tlbnMuIFRoZSBgc2lnbmVkYAorICogYW5kIGB1bnNpZ25lZGAgdG9rZW5zIGFy ZSBoZXJlIGFzc3VtZWQgdG8gYWx3YXlzIGJlIHBsYWNlZAorICogZmlyc3QgaW4gdGhlIHR5cGUg ZGVjbGFyYXRpb24sIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBpbgorICogbm9ybWFsIEMuIFNpbWls YXJseSwgYGludGAgaXMgYXNzdW1lZCB0byBhbHdheXMgYmUgcGxhY2VkCisgKiBsYXN0IGluIHRo ZSB0eXBlLgorICovCit0eXBlX2ludCA6IFRZUEVfSU5UCisgICAgICAgICB8IFRZUEVfU0lHTkVE CisgICAgICAgICB8IFRZUEVfU0lHTkVEIFRZUEVfSU5UOwordHlwZV91aW50IDogVFlQRV9VTlNJ R05FRAorICAgICAgICAgIHwgVFlQRV9VTlNJR05FRCBUWVBFX0lOVDsKK3R5cGVfdWxvbmdsb25n IDogVFlQRV9VTlNJR05FRCBUWVBFX0xPTkcgVFlQRV9MT05HCisgICAgICAgICAgICAgICB8IFRZ UEVfVU5TSUdORUQgVFlQRV9MT05HIFRZUEVfTE9ORyBUWVBFX0lOVDsKKworLyoKKyAqIEhlcmUg dGhlIHZhcmlvdXMgdmFsaWQgaW50IHR5cGVzIGRlZmluZWQgYWJvdmUgc3BlY2lmeQorICogdGhl aXIgYHNpZ25lZG5lc3NgIGFuZCBgYml0X3dpZHRoYC4gVGhlIExQNjQgY29udmVudGlvbgorICog aXMgYXNzdW1lZCB3aGVyZSBsb25ncyBhcmUgNjQtYml0LCBsb25nIGxvbmdzIGFyZSB0aGVuCisg KiBhc3N1bWVkIHRvIGFsc28gYmUgNjQtYml0LgorICovCit2YXJfdHlwZSA6IFRZUEVfU0laRV9U CisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeXlhc3NlcnQoYywgJkAxLCAkMS5iaXRfd2lk dGggPD0gNjQsCisgICAgICAgICAgICAgICAgICAgICAgICJWYXJpYWJsZXMgd2l0aCBzaXplID4g NjQtYml0IGFyZSBub3Qgc3VwcG9ydGVkISIpOworICAgICAgICAgICAgICAkJCA9ICQxOworICAg ICAgICAgICB9CisgICAgICAgICB8IHR5cGVfaW50CisgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgJCQuc2lnbmVkbmVzcyA9IFNJR05FRDsKKyAgICAgICAgICAgICAgJCQuYml0X3dpZHRoICA9 IDMyOworICAgICAgICAgICB9CisgICAgICAgICB8IHR5cGVfdWludAorICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICQkLnNpZ25lZG5lc3MgPSBVTlNJR05FRDsKKyAgICAgICAgICAgICAgJCQu Yml0X3dpZHRoICA9IDMyOworICAgICAgICAgICB9CisgICAgICAgICB8IHR5cGVfdWxvbmdsb25n CisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgJCQuc2lnbmVkbmVzcyA9IFVOU0lHTkVEOwor ICAgICAgICAgICAgICAkJC5iaXRfd2lkdGggID0gNjQ7CisgICAgICAgICAgIH0KKyAgICAgICAg IDsKKworLyogUnVsZSB0byBjYXB0dXJlIGRlY2xhcmF0aW9ucyBvZiBWQVJzICovCit2YXJfZGVj bCA6IHZhcl90eXBlIElNTQorICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgICAqIFJ1bGUgdG8gY2FwdHVyZSAiaW50IGk7IiBkZWNsYXJhdGlvbnMgc2luY2UgImki IGlzIHNwZWNpYWwKKyAgICAgICAgICAgICAgICogYW5kIGFzc3VtZWQgdG8gYmUgYWx3YXlzIGJl IElNTS4gTW9yZW92ZXIsICJpIiBpcyBvbmx5CisgICAgICAgICAgICAgICAqIGFzc3VtZWQgdG8g YmUgdXNlZCBpbiBmb3ItbG9vcHMuCisgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAq IFRoZXJlZm9yZSB3ZSB3YW50IHRvIE5PUCB0aGVzZSBkZWNsYXJhdGlvbnMuCisgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICB5eWFzc2VydChjLCAmQDIsICQyLmltbS50eXBlID09IEks CisgICAgICAgICAgICAgICAgICAgICAgICJWYXJpYWJsZSBkZWNsYXJhdGlvbiB3aXRoIGltbWVk YXRpZXMgb25seSBhbGxvd2VkIgorICAgICAgICAgICAgICAgICAgICAgICAiIGZvciB0aGUgbG9v cCBpbmR1Y3Rpb24gdmFyaWFibGUgXCJpXCIiKTsKKyAgICAgICAgICAgICAgJCQgPSAkMjsKKyAg ICAgICAgICAgfQorICAgICAgICAgfCB2YXJfdHlwZSB2YXIKKyAgICAgICAgICAgeworICAgICAg ICAgICAgICAvKgorICAgICAgICAgICAgICAgKiBBbGxvY2F0ZSBuZXcgdmFyaWFibGUsIHRoaXMg Y2hlY2tzIHRoYXQgaXQgaGFzbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICogYmVlbiBkZWNs YXJlZC4KKyAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGdlbl92YXJpZF9hbGxvY2F0 ZShjLCAmQDEsICYkMiwgJDEuYml0X3dpZHRoLCAkMS5zaWduZWRuZXNzKTsKKyAgICAgICAgICAg ICAgLyogQ29weSB2YXIgZm9yIHZhcmlhYmxlIG5hbWUgKi8KKyAgICAgICAgICAgICAgJCQgPSAk MjsKKyAgICAgICAgICAgICAgLyogQ29weSB0eXBlIGluZm8gZnJvbSB2YXJfdHlwZSAqLworICAg ICAgICAgICAgICAkJC5zaWduZWRuZXNzID0gJDEuc2lnbmVkbmVzczsKKyAgICAgICAgICAgICAg JCQuYml0X3dpZHRoICA9ICQxLmJpdF93aWR0aDsKKyAgICAgICAgICAgfQorICAgICAgICAgOwor CisvKiBSZXR1cm4gdGhlIG1vZGlmaWVkIHJlZ2lzdGVycyBsaXN0ICovCitjb2RlIDogJ3snIHN0 YXRlbWVudHMgJ30nCisgICAgICAgeworICAgICAgICAgICBjLT5pbnN0LmNvZGVfYmVnaW4gPSBj LT5pbnB1dF9idWZmZXIgKyBAMi5maXJzdF9jb2x1bW4gLSAxOworICAgICAgICAgICBjLT5pbnN0 LmNvZGVfZW5kID0gYy0+aW5wdXRfYnVmZmVyICsgQDIubGFzdF9jb2x1bW4gLSAxOworICAgICAg IH0KKyAgICAgfCAneycKKyAgICAgICB7CisgICAgICAgICAgIC8qIE5vcCAqLworICAgICAgIH0K KyAgICAgICAnfScKKyAgICAgOworCithcmd1bWVudF9kZWNsIDogUkVHCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBlbWl0X2FyZyhjLCAmQDEsICYkMSk7CisgICAgICAg ICAgICAgICAgICAgIC8qIEVucXVldWUgcmVnaXN0ZXIgaW50byBpbml0aWFsaXphdGlvbiBsaXN0 ICovCisgICAgICAgICAgICAgICAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbChjLT5pbnN0LmluaXRf bGlzdCwgJDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfCBQUkVECisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbWl0X2FyZyhjLCAmQDEsICYkMSk7 CisgICAgICAgICAgICAgICAgICAgIC8qIEVucXVldWUgcHJlZGljYXRlIGludG8gaW5pdGlhbGl6 YXRpb24gbGlzdCAqLworICAgICAgICAgICAgICAgICAgICBnX2FycmF5X2FwcGVuZF92YWwoYy0+ aW5zdC5pbml0X2xpc3QsICQxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHwg SU4gUkVHCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbWl0X2FyZyhj LCAmQDIsICYkMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB8IElOIFBSRUQK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRfYXJnKGMsICZAMiwg JiQyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHwgSU1NCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBFTUlUX1NJRyhjLCAiLCBpbnQgJWNpViIsICQx LmltbS5pZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICA7CisKK2NvZGVfYmxv Y2sgOiAneycgc3RhdGVtZW50cyAnfScKKyAgICAgICAgICAgfCAneycgJ30nCisgICAgICAgICAg IDsKKworLyogQSBsaXN0IG9mIG9uZSBvciBtb3JlIHN0YXRlbWVudHMgKi8KK3N0YXRlbWVudHMg OiBzdGF0ZW1lbnRzIHN0YXRlbWVudAorICAgICAgICAgICB8IHN0YXRlbWVudAorICAgICAgICAg ICA7CisKKy8qIFN0YXRlbWVudHMgY2FuIGJlIGFzc2lnbm1lbnQgKHJ2YWx1ZSAnOycpLCBjb250 cm9sIG9yIG1lbW9yeSBzdGF0ZW1lbnRzICovCitzdGF0ZW1lbnQgOiBjb250cm9sX3N0YXRlbWVu dAorICAgICAgICAgIHwgdmFyX2RlY2wgJzsnCisgICAgICAgICAgfCBydmFsdWUgJzsnCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsICZAMSwgJiQxKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB8IGNvZGVfYmxvY2sKKyAgICAgICAgICB8ICc7Jwor ICAgICAgICAgIDsKKworYXNzaWduX3N0YXRlbWVudCA6IGx2YWx1ZSAnPScgcnZhbHVlCisgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9 IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICAgICAgICAgICBnZW5fYXNzaWduKGMsICZA MSwgJiQxLCAmJDMpOworICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfCB2YXJfZGVjbCAnPScgcnZhbHVlCisgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9 IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICAgICAgICAgICBnZW5fYXNzaWduKGMsICZA MSwgJiQxLCAmJDMpOworICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfCBsdmFsdWUgSU5DIHJ2YWx1ZQorICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgQDEubGFzdF9jb2x1bW4gPSBA My5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgdG1wID0gZ2Vu X2Jpbl9vcChjLCAmQDEsIEFERF9PUCwgJiQxLCAmJDMpOworICAgICAgICAgICAgICAgICAgICAg ICBnZW5fYXNzaWduKGMsICZAMSwgJiQxLCAmdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAg JCQgPSAkMTsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHwgbHZhbHVl IERFQyBydmFsdWUKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg IEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgICAgICAgICAg IEhleFZhbHVlIHRtcCA9IGdlbl9iaW5fb3AoYywgJkAxLCBTVUJfT1AsICYkMSwgJiQzKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgZ2VuX2Fzc2lnbihjLCAmQDEsICYkMSwgJnRtcCk7CisgICAg ICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICB8IGx2YWx1ZSBBTkRBIHJ2YWx1ZQorICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgQDEubGFzdF9jb2x1bW4gPSBAMy5sYXN0X2NvbHVtbjsKKyAg ICAgICAgICAgICAgICAgICAgICAgSGV4VmFsdWUgdG1wID0gZ2VuX2Jpbl9vcChjLCAmQDEsIEFO REJfT1AsICYkMSwgJiQzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2Fzc2lnbihjLCAm QDEsICYkMSwgJnRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB8IGx2YWx1ZSBPUkEgcnZhbHVlCisgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9 IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICAgICAgICAgICBIZXhWYWx1ZSB0bXAgPSBn ZW5fYmluX29wKGMsICZAMSwgT1JCX09QLCAmJDEsICYkMyk7CisgICAgICAgICAgICAgICAgICAg ICAgIGdlbl9hc3NpZ24oYywgJkAxLCAmJDEsICZ0bXApOworICAgICAgICAgICAgICAgICAgICAg ICAkJCA9ICQxOworICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfCBsdmFs dWUgWE9SQSBydmFsdWUKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgICAgICAg ICAgIEhleFZhbHVlIHRtcCA9IGdlbl9iaW5fb3AoYywgJkAxLCBYT1JCX09QLCAmJDEsICYkMyk7 CisgICAgICAgICAgICAgICAgICAgICAgIGdlbl9hc3NpZ24oYywgJkAxLCAmJDEsICZ0bXApOwor ICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgfCBQUkVEICc9JyBydmFsdWUKKyAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47Cisg ICAgICAgICAgICAgICAgICAgICAgIGdlbl9wcmVkX2Fzc2lnbihjLCAmQDEsICYkMSwgJiQzKTsK KyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHwgSU1NICc9JyBydmFsdWUK KyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIEAxLmxhc3RfY29s dW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgICAgICAgICAgIHl5YXNzZXJ0KGMs ICZAMSwgJDMudHlwZSA9PSBJTU1FRElBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJDYW5ub3QgYXNzaWduIG5vbi1pbW1lZGlhdGUgdG8gaW1tZWRpYXRlISIpOworICAgICAg ICAgICAgICAgICAgICAgICB5eWFzc2VydChjLCAmQDEsICQxLmltbS50eXBlID09IFZBUklBQkxF LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGFzc2lnbiB0byBub24t dmFyaWFibGUhIik7CisgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc2lnbiB0byB0aGUgZnVu Y3Rpb24gYXJndW1lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgT1VUKGMsICZAMSwgJiQx LCAiID0gIiwgJiQzLCAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Cisg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB8IFBDICc9JyBydmFsdWUKKyAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1u ID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgICAgICAgICAgIHl5YXNzZXJ0KGMsICZA MSwgIWlzX2luc2lkZV90ZXJuYXJ5KGMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiQXNzaWdubWVudCBzaWRlLWVmZmVjdCBub3QgbW9kZWxlZCEiKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgJDMgPSBnZW5fcnZhbHVlX3RydW5jYXRlKGMsICZAMSwgJiQzKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgJDMgPSBydmFsdWVfbWF0ZXJpYWxpemUoYywgJkAxLCAmJDMpOworICAg ICAgICAgICAgICAgICAgICAgICBPVVQoYywgJkAxLCAiZ2VuX3dyaXRlX25ld19wYygiLCAmJDMs ICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ydmFsdWVfZnJlZShjLCAmQDEs ICYkMyk7IC8qIEZyZWUgdGVtcG9yYXJ5IHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICB8IExPQUQgJygnIElNTSAnLCcgSU1NICcsJyBTSUdOICcsJyB2YXIg JywnIGx2YWx1ZSAnKScKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgIEAxLmxhc3RfY29sdW1uID0gQDEyLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICAgICAg ICAgICB5eWFzc2VydChjLCAmQDEsICFpc19pbnNpZGVfdGVybmFyeShjKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkFzc2lnbm1lbnQgc2lkZS1lZmZlY3Qgbm90IG1vZGVsZWQh Iik7CisgICAgICAgICAgICAgICAgICAgICAgIHl5YXNzZXJ0KGMsICZAMSwgJDMuaW1tLnZhbHVl ID09IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT0FEIG9mIGFycmF5cyBu b3Qgc3VwcG9ydGVkISIpOworICAgICAgICAgICAgICAgICAgICAgICBnZW5fbG9hZChjLCAmQDEs ICYkNSwgJDcsICYkOSwgJiQxMSk7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICB8IFNUT1JFICcoJyBJTU0gJywnIElNTSAnLCcgdmFyICcsJyBydmFsdWUgJyknCisgICAg ICAgICAgICAgICAgICAgLyogU3RvcmUgcHJpbWl0aXZlICovCisgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAxMC5sYXN0X2NvbHVt bjsKKyAgICAgICAgICAgICAgICAgICAgICAgeXlhc3NlcnQoYywgJkAxLCAhaXNfaW5zaWRlX3Rl cm5hcnkoYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3NpZ25tZW50IHNp ZGUtZWZmZWN0IG5vdCBtb2RlbGVkISIpOworICAgICAgICAgICAgICAgICAgICAgICB5eWFzc2Vy dChjLCAmQDEsICQzLmltbS52YWx1ZSA9PSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU1RPUkUgb2YgYXJyYXlzIG5vdCBzdXBwb3J0ZWQhIik7CisgICAgICAgICAgICAgICAg ICAgICAgIGdlbl9zdG9yZShjLCAmQDEsICYkNSwgJiQ3LCAmJDkpOworICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgfCBMUENGRyAnPScgcnZhbHVlCisgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3Rf Y29sdW1uOworICAgICAgICAgICAgICAgICAgICAgICB5eWFzc2VydChjLCAmQDEsICFpc19pbnNp ZGVfdGVybmFyeShjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2lnbm1l bnQgc2lkZS1lZmZlY3Qgbm90IG1vZGVsZWQhIik7CisgICAgICAgICAgICAgICAgICAgICAgICQz ID0gZ2VuX3J2YWx1ZV90cnVuY2F0ZShjLCAmQDEsICYkMyk7CisgICAgICAgICAgICAgICAgICAg ICAgICQzID0gcnZhbHVlX21hdGVyaWFsaXplKGMsICZAMSwgJiQzKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgT1VUKGMsICZAMSwgIlNFVF9VU1JfRklFTEQoVVNSX0xQQ0ZHLCAiLCAmJDMsICIp O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ydmFsdWVfZnJlZShjLCAmQDEsICYk Myk7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB8IERFUE9TSVQgJygn IHJ2YWx1ZSAnLCcgcnZhbHVlICcsJyBydmFsdWUgJyknCisgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEA4Lmxhc3RfY29sdW1uOwor ICAgICAgICAgICAgICAgICAgICAgICB5eWFzc2VydChjLCAmQDEsICFpc19pbnNpZGVfdGVybmFy eShjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2lnbm1lbnQgc2lkZS1l ZmZlY3Qgbm90IG1vZGVsZWQhIik7CisgICAgICAgICAgICAgICAgICAgICAgIGdlbl9kZXBvc2l0 X29wKGMsICZAMSwgJiQ1LCAmJDcsICYkMywgJiQxKTsKKyAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgIHwgU0VUSEFMRiAnKCcgcnZhbHVlICcsJyBsdmFsdWUgJywnIHJ2YWx1 ZSAnKScKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIEAxLmxh c3RfY29sdW1uID0gQDgubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgICAgICAgICAgIHl5YXNz ZXJ0KGMsICZAMSwgIWlzX2luc2lkZV90ZXJuYXJ5KGMpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiQXNzaWdubWVudCBzaWRlLWVmZmVjdCBub3QgbW9kZWxlZCEiKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgZ2VuX3NldGhhbGYoYywgJkAxLCAmJDEsICYkMywgJiQ1LCAmJDcp OworICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfCBTRVRCSVRTICcoJyBy dmFsdWUgJywnIHJ2YWx1ZSAnLCcgcnZhbHVlICcsJyBydmFsdWUgJyknCisgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAxMC5sYXN0 X2NvbHVtbjsKKyAgICAgICAgICAgICAgICAgICAgICAgeXlhc3NlcnQoYywgJkAxLCAhaXNfaW5z aWRlX3Rlcm5hcnkoYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3NpZ25t ZW50IHNpZGUtZWZmZWN0IG5vdCBtb2RlbGVkISIpOworICAgICAgICAgICAgICAgICAgICAgICBn ZW5fc2V0Yml0cyhjLCAmQDEsICYkMywgJiQ1LCAmJDcsICYkOSk7CisgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICB8IElOU0JJVFMgJygnIGx2YWx1ZSAnLCcgcnZhbHVlICcs JyBydmFsdWUgJywnIHJ2YWx1ZSAnKScKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDEwLmxhc3RfY29sdW1uOworICAgICAgICAg ICAgICAgICAgICAgICB5eWFzc2VydChjLCAmQDEsICFpc19pbnNpZGVfdGVybmFyeShjKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2lnbm1lbnQgc2lkZS1lZmZlY3Qgbm90 IG1vZGVsZWQhIik7CisgICAgICAgICAgICAgICAgICAgICAgIGdlbl9yZGVwb3NpdF9vcChjLCAm QDEsICYkMywgJiQ5LCAmJDcsICYkNSk7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICB8IElERU5USVRZICcoJyBydmFsdWUgJyknCisgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEA0Lmxhc3RfY29sdW1uOwor ICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQzOworICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgOworCitjb250cm9sX3N0YXRlbWVudCA6IGZyYW1lX2NoZWNrCisgICAg ICAgICAgICAgICAgICB8IGNhbmNlbF9zdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgIHwgaWZf c3RhdGVtZW50CisgICAgICAgICAgICAgICAgICB8IGZvcl9zdGF0ZW1lbnQKKyAgICAgICAgICAg ICAgICAgIHwgZnBhcnQxX3N0YXRlbWVudAorICAgICAgICAgICAgICAgICAgOworCitmcmFtZV9j aGVjayA6IEZDSEsgJygnIHJ2YWx1ZSAnLCcgcnZhbHVlICcpJyAnOycKKyAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgZ2VuX3J2YWx1ZV9mcmVlKGMsICZAMSwgJiQzKTsKKyAgICAg ICAgICAgICAgICAgIGdlbl9ydmFsdWVfZnJlZShjLCAmQDEsICYkNSk7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIDsKKworY2FuY2VsX3N0YXRlbWVudCA6IExPQURfQ0FOQ0VMCisgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBnZW5fbG9hZF9jYW5jZWwo YywgJkAxKTsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHwgQ0FOQ0VM CisgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBnZW5fY2FuY2Vs KGMsICZAMSk7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICA7CisKK2lm X3N0YXRlbWVudCA6IGlmX3N0bXQKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAvKiBGaXggZWxzZSBsYWJlbCAqLworICAgICAgICAgICAgICAgICAgIE9VVChjLCAmQDEsICJn ZW5fc2V0X2xhYmVsKGlmX2xhYmVsXyIsICYkMSwgIik7XG4iKTsKKyAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICB8IGlmX3N0bXQgRUxTRQorICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDIubGFzdF9jb2x1bW47CisgICAgICAgICAgICAg ICAgICAgJDIgPSBnZW5faWZfZWxzZShjLCAmQDEsICQxKTsKKyAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgIHN0YXRlbWVudAorICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgIE9VVChjLCAmQDEsICJnZW5fc2V0X2xhYmVsKGlmX2xhYmVsXyIsICYkMiwgIik7XG4iKTsK KyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICA7CisKK2Zvcl9zdGF0ZW1lbnQgOiBGT1Ig JygnIElNTSAnPScgSU1NICc7JyBJTU0gJzwnIElNTSAnOycgSU1NIFBMVVNQTFVTICcpJworICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeXlhc3NlcnQoYywgJkAzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAkMy5pbW0udHlwZSA9PSBJICYmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICQ3LmltbS50eXBlID09IEkgJiYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJDExLmltbS50eXBlID09IEksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJMb29wIGluZHVjdGlvbiB2YXJpYWJsZSBtdXN0IGJlIFwiaVwiIik7CisgICAgICAgICAg ICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDEzLmxhc3RfY29sdW1uOworICAgICAgICAgICAg ICAgICAgICBPVVQoYywgJkAxLCAiZm9yIChpbnQgIiwgJiQzLCAiID0gIiwgJiQ1LCAiOyAiLAor ICAgICAgICAgICAgICAgICAgICAgICAgJiQ3LCAiIDwgIiwgJiQ5KTsKKyAgICAgICAgICAgICAg ICAgICAgT1VUKGMsICZAMSwgIjsgIiwgJiQxMSwgIisrKSB7XG4iKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgY29kZV9ibG9jaworICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgT1VUKGMsICZAMSwgIn1cbiIpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgOworCitmcGFydDFfc3RhdGVtZW50IDogUEFSVDEKKyAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIE9VVChjLCAmQDEsICJpZiAoaW5zbi0+cGFy dDEpIHtcbiIpOworICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAnKCcg c3RhdGVtZW50cyAnKScKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgICAgICAg ICAgIE9VVChjLCAmQDEsICJyZXR1cm47IH1cbiIpOworICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgOworCitpZl9zdG10IDogSUYgJygnIHJ2YWx1ZSAnKScKKyAgICAgICAg ICB7CisgICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAg ICAgICAgICAgICQxID0gZ2VuX2lmX2NvbmQoYywgJkAxLCAmJDMpOworICAgICAgICAgIH0KKyAg ICAgICAgICBzdGF0ZW1lbnQKKyAgICAgICAgICB7CisgICAgICAgICAgICAgICQkID0gJDE7Cisg ICAgICAgICAgfQorICAgICAgICA7CisKK3J2YWx1ZSA6IEZBSUwKKyAgICAgICAgIHsKKyAgICAg ICAgICAgICB5eWFzc2VydChjLCAmQDEsIGZhbHNlLCAiRW5jb3VudGVyZWQgYSBGQUlMIHRva2Vu IGFzIHJ2YWx1ZS5cbiIpOworICAgICAgICAgfQorICAgICAgIHwgYXNzaWduX3N0YXRlbWVudAor ICAgICAgIHwgUkVHCisgICAgICAgICB7CisgICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAg IH0KKyAgICAgICB8IElNTQorICAgICAgICAgeworICAgICAgICAgICAgICQkID0gJDE7CisgICAg ICAgICB9CisgICAgICAgfCBQUkVECisgICAgICAgICB7CisgICAgICAgICAgICAgJCQgPSBnZW5f cnZhbHVlX3ByZWQoYywgJkAxLCAmJDEpOworICAgICAgICAgfQorICAgICAgIHwgUEMKKyAgICAg ICAgIHsKKyAgICAgICAgICAgICAvKiBSZWFkIFBDIGZyb20gdGhlIENSICovCisgICAgICAgICAg ICAgSGV4VmFsdWUgcnZhbHVlOworICAgICAgICAgICAgIG1lbXNldCgmcnZhbHVlLCAwLCBzaXpl b2YoSGV4VmFsdWUpKTsKKyAgICAgICAgICAgICBydmFsdWUudHlwZSA9IElNTUVESUFURTsKKyAg ICAgICAgICAgICBydmFsdWUuaW1tLnR5cGUgPSBJTU1fUEM7CisgICAgICAgICAgICAgcnZhbHVl LmJpdF93aWR0aCA9IDMyOworICAgICAgICAgICAgIHJ2YWx1ZS5zaWduZWRuZXNzID0gVU5TSUdO RUQ7CisgICAgICAgICAgICAgJCQgPSBydmFsdWU7CisgICAgICAgICB9CisgICAgICAgfCBOUEMK KyAgICAgICAgIHsKKyAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAqIE5QQyBpcyBvbmx5 IHJlYWQgZnJvbSBDQUxMcywgc28gd2UgY2FuIGhhcmRjb2RlIGl0CisgICAgICAgICAgICAgICog YXQgdHJhbnNsYXRpb24gdGltZQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgIEhleFZh bHVlIHJ2YWx1ZTsKKyAgICAgICAgICAgICBtZW1zZXQoJnJ2YWx1ZSwgMCwgc2l6ZW9mKEhleFZh bHVlKSk7CisgICAgICAgICAgICAgcnZhbHVlLnR5cGUgPSBJTU1FRElBVEU7CisgICAgICAgICAg ICAgcnZhbHVlLmltbS50eXBlID0gSU1NX05QQzsKKyAgICAgICAgICAgICBydmFsdWUuYml0X3dp ZHRoID0gMzI7CisgICAgICAgICAgICAgcnZhbHVlLnNpZ25lZG5lc3MgPSBVTlNJR05FRDsKKyAg ICAgICAgICAgICAkJCA9IHJ2YWx1ZTsKKyAgICAgICAgIH0KKyAgICAgICB8IENPTlNURVhUCisg ICAgICAgICB7CisgICAgICAgICAgICAgSGV4VmFsdWUgcnZhbHVlOworICAgICAgICAgICAgIG1l bXNldCgmcnZhbHVlLCAwLCBzaXplb2YoSGV4VmFsdWUpKTsKKyAgICAgICAgICAgICBydmFsdWUu dHlwZSA9IElNTUVESUFURTsKKyAgICAgICAgICAgICBydmFsdWUuaW1tLnR5cGUgPSBJTU1fQ09O U1RFWFQ7CisgICAgICAgICAgICAgcnZhbHVlLnNpZ25lZG5lc3MgPSBVTlNJR05FRDsKKyAgICAg ICAgICAgICBydmFsdWUuaXNfZG90bmV3ID0gZmFsc2U7CisgICAgICAgICAgICAgcnZhbHVlLmlz X21hbnVhbCA9IGZhbHNlOworICAgICAgICAgICAgICQkID0gcnZhbHVlOworICAgICAgICAgfQor ICAgICAgIHwgdmFyCisgICAgICAgICB7CisgICAgICAgICAgICAgJCQgPSBnZW5fcnZhbHVlX3Zh cihjLCAmQDEsICYkMSk7CisgICAgICAgICB9CisgICAgICAgfCBNUFkgJygnIHJ2YWx1ZSAnLCcg cnZhbHVlICcpJworICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDYu bGFzdF9jb2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fcnZhbHVlX21weShjLCAmQDEsICYk MSwgJiQzLCAmJDUpOworICAgICAgICAgfQorICAgICAgIHwgcnZhbHVlICcrJyBydmFsdWUKKyAg ICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOwor ICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9vcChjLCAmQDEsIEFERF9PUCwgJiQxLCAmJDMpOwor ICAgICAgICAgfQorICAgICAgIHwgcnZhbHVlICctJyBydmFsdWUKKyAgICAgICAgIHsKKyAgICAg ICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQk ID0gZ2VuX2Jpbl9vcChjLCAmQDEsIFNVQl9PUCwgJiQxLCAmJDMpOworICAgICAgICAgfQorICAg ICAgIHwgcnZhbHVlICcqJyBydmFsdWUKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0 X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9vcChj LCAmQDEsIE1VTF9PUCwgJiQxLCAmJDMpOworICAgICAgICAgfQorICAgICAgIHwgcnZhbHVlIEFT TCBydmFsdWUKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxh c3RfY29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9vcChjLCAmQDEsIEFTTF9PUCwg JiQxLCAmJDMpOworICAgICAgICAgfQorICAgICAgIHwgcnZhbHVlIEFTUiBydmFsdWUKKyAgICAg ICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworICAg ICAgICAgICAgIGFzc2VydF9zaWduZWRuZXNzKGMsICZAMSwgJDEuc2lnbmVkbmVzcyk7CisgICAg ICAgICAgICAgaWYgKCQxLnNpZ25lZG5lc3MgPT0gVU5TSUdORUQpIHsKKyAgICAgICAgICAgICAg ICAgJCQgPSBnZW5fYmluX29wKGMsICZAMSwgTFNSX09QLCAmJDEsICYkMyk7CisgICAgICAgICAg ICAgfSBlbHNlIGlmICgkMS5zaWduZWRuZXNzID09IFNJR05FRCkgeworICAgICAgICAgICAgICAg ICAkJCA9IGdlbl9iaW5fb3AoYywgJkAxLCBBU1JfT1AsICYkMSwgJiQzKTsKKyAgICAgICAgICAg ICB9CisgICAgICAgICB9CisgICAgICAgfCBydmFsdWUgTFNSIHJ2YWx1ZQorICAgICAgICAgewor ICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAg ICAgJCQgPSBnZW5fYmluX29wKGMsICZAMSwgTFNSX09QLCAmJDEsICYkMyk7CisgICAgICAgICB9 CisgICAgICAgfCBydmFsdWUgJyYnIHJ2YWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIEAx Lmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fYmlu X29wKGMsICZAMSwgQU5EQl9PUCwgJiQxLCAmJDMpOworICAgICAgICAgfQorICAgICAgIHwgcnZh bHVlICd8JyBydmFsdWUKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9 IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9vcChjLCAmQDEsIE9S Ql9PUCwgJiQxLCAmJDMpOworICAgICAgICAgfQorICAgICAgIHwgcnZhbHVlICdeJyBydmFsdWUK KyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1u OworICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9vcChjLCAmQDEsIFhPUkJfT1AsICYkMSwgJiQz KTsKKyAgICAgICAgIH0KKyAgICAgICB8IHJ2YWx1ZSBBTkRMIHJ2YWx1ZQorICAgICAgICAgewor ICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisgICAgICAgICAg ICAgJCQgPSBnZW5fYmluX29wKGMsICZAMSwgQU5ETF9PUCwgJiQxLCAmJDMpOworICAgICAgICAg fQorICAgICAgIHwgTUlOICcoJyBydmFsdWUgJywnIHJ2YWx1ZSAnKScKKyAgICAgICAgIHsKKyAg ICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAg ICQkID0gZ2VuX2Jpbl9vcChjLCAmQDEsIE1JTklfT1AsICYkMywgJiQ1KTsKKyAgICAgICAgIH0K KyAgICAgICB8IE1BWCAnKCcgcnZhbHVlICcsJyBydmFsdWUgJyknCisgICAgICAgICB7CisgICAg ICAgICAgICAgQDEubGFzdF9jb2x1bW4gPSBAMy5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAgICAk JCA9IGdlbl9iaW5fb3AoYywgJkAxLCBNQVhJX09QLCAmJDMsICYkNSk7CisgICAgICAgICB9Cisg ICAgICAgfCAnficgcnZhbHVlCisgICAgICAgICB7CisgICAgICAgICAgICAgQDEubGFzdF9jb2x1 bW4gPSBAMi5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAgICAkJCA9IGdlbl9ydmFsdWVfbm90KGMs ICZAMSwgJiQyKTsKKyAgICAgICAgIH0KKyAgICAgICB8ICchJyBydmFsdWUKKyAgICAgICAgIHsK KyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAyLmxhc3RfY29sdW1uOworICAgICAgICAg ICAgICQkID0gZ2VuX3J2YWx1ZV9ub3RsKGMsICZAMSwgJiQyKTsKKyAgICAgICAgIH0KKyAgICAg ICB8IFNBVCAnKCcgSU1NICcsJyBydmFsdWUgJyknCisgICAgICAgICB7CisgICAgICAgICAgICAg QDEubGFzdF9jb2x1bW4gPSBANi5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAgICAkJCA9IGdlbl9y dmFsdWVfc2F0KGMsICZAMSwgJiQxLCAmJDMsICYkNSk7CisgICAgICAgICB9CisgICAgICAgfCBD QVNUIHJ2YWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDIu bGFzdF9jb2x1bW47CisgICAgICAgICAgICAgLyogQXNzaWduIHRhcmdldCBzaWduZWRuZXNzICov CisgICAgICAgICAgICAgJDIuc2lnbmVkbmVzcyA9ICQxLnNpZ25lZG5lc3M7CisgICAgICAgICAg ICAgJCQgPSBnZW5fY2FzdF9vcChjLCAmQDEsICYkMiwgJDEuYml0X3dpZHRoLCAkMS5zaWduZWRu ZXNzKTsKKyAgICAgICAgIH0KKyAgICAgICB8IHJ2YWx1ZSBFUSBydmFsdWUKKyAgICAgICAgIHsK KyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworICAgICAgICAg ICAgICQkID0gZ2VuX2Jpbl9jbXAoYywgJkAxLCBUQ0dfQ09ORF9FUSwgJiQxLCAmJDMpOworICAg ICAgICAgfQorICAgICAgIHwgcnZhbHVlIE5FUSBydmFsdWUKKyAgICAgICAgIHsKKyAgICAgICAg ICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQkID0g Z2VuX2Jpbl9jbXAoYywgJkAxLCBUQ0dfQ09ORF9ORSwgJiQxLCAmJDMpOworICAgICAgICAgfQor ICAgICAgIHwgcnZhbHVlICc8JyBydmFsdWUKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5s YXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworCisgICAgICAgICAgICAgYXNzZXJ0X3NpZ25l ZG5lc3MoYywgJkAxLCAkMS5zaWduZWRuZXNzKTsKKyAgICAgICAgICAgICBhc3NlcnRfc2lnbmVk bmVzcyhjLCAmQDEsICQzLnNpZ25lZG5lc3MpOworICAgICAgICAgICAgIGlmICgkMS5zaWduZWRu ZXNzID09IFVOU0lHTkVEIHx8ICQzLnNpZ25lZG5lc3MgPT0gVU5TSUdORUQpIHsKKyAgICAgICAg ICAgICAgICAgJCQgPSBnZW5fYmluX2NtcChjLCAmQDEsIFRDR19DT05EX0xUVSwgJiQxLCAmJDMp OworICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9j bXAoYywgJkAxLCBUQ0dfQ09ORF9MVCwgJiQxLCAmJDMpOworICAgICAgICAgICAgIH0KKyAgICAg ICAgIH0KKyAgICAgICB8IHJ2YWx1ZSAnPicgcnZhbHVlCisgICAgICAgICB7CisgICAgICAgICAg ICAgQDEubGFzdF9jb2x1bW4gPSBAMy5sYXN0X2NvbHVtbjsKKworICAgICAgICAgICAgIGFzc2Vy dF9zaWduZWRuZXNzKGMsICZAMSwgJDEuc2lnbmVkbmVzcyk7CisgICAgICAgICAgICAgYXNzZXJ0 X3NpZ25lZG5lc3MoYywgJkAxLCAkMy5zaWduZWRuZXNzKTsKKyAgICAgICAgICAgICBpZiAoJDEu c2lnbmVkbmVzcyA9PSBVTlNJR05FRCB8fCAkMy5zaWduZWRuZXNzID09IFVOU0lHTkVEKSB7Cisg ICAgICAgICAgICAgICAgICQkID0gZ2VuX2Jpbl9jbXAoYywgJkAxLCBUQ0dfQ09ORF9HVFUsICYk MSwgJiQzKTsKKyAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAkJCA9IGdl bl9iaW5fY21wKGMsICZAMSwgVENHX0NPTkRfR1QsICYkMSwgJiQzKTsKKyAgICAgICAgICAgICB9 CisgICAgICAgICB9CisgICAgICAgfCBydmFsdWUgTFRFIHJ2YWx1ZQorICAgICAgICAgeworICAg ICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDMubGFzdF9jb2x1bW47CisKKyAgICAgICAgICAg ICBhc3NlcnRfc2lnbmVkbmVzcyhjLCAmQDEsICQxLnNpZ25lZG5lc3MpOworICAgICAgICAgICAg IGFzc2VydF9zaWduZWRuZXNzKGMsICZAMSwgJDMuc2lnbmVkbmVzcyk7CisgICAgICAgICAgICAg aWYgKCQxLnNpZ25lZG5lc3MgPT0gVU5TSUdORUQgfHwgJDMuc2lnbmVkbmVzcyA9PSBVTlNJR05F RCkgeworICAgICAgICAgICAgICAgICAkJCA9IGdlbl9iaW5fY21wKGMsICZAMSwgVENHX0NPTkRf TEVVLCAmJDEsICYkMyk7CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg JCQgPSBnZW5fYmluX2NtcChjLCAmQDEsIFRDR19DT05EX0xFLCAmJDEsICYkMyk7CisgICAgICAg ICAgICAgfQorICAgICAgICAgfQorICAgICAgIHwgcnZhbHVlIEdURSBydmFsdWUKKyAgICAgICAg IHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAzLmxhc3RfY29sdW1uOworCisgICAg ICAgICAgICAgYXNzZXJ0X3NpZ25lZG5lc3MoYywgJkAxLCAkMS5zaWduZWRuZXNzKTsKKyAgICAg ICAgICAgICBhc3NlcnRfc2lnbmVkbmVzcyhjLCAmQDEsICQzLnNpZ25lZG5lc3MpOworICAgICAg ICAgICAgIGlmICgkMS5zaWduZWRuZXNzID09IFVOU0lHTkVEIHx8ICQzLnNpZ25lZG5lc3MgPT0g VU5TSUdORUQpIHsKKyAgICAgICAgICAgICAgICAgJCQgPSBnZW5fYmluX2NtcChjLCAmQDEsIFRD R19DT05EX0dFVSwgJiQxLCAmJDMpOworICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICQkID0gZ2VuX2Jpbl9jbXAoYywgJkAxLCBUQ0dfQ09ORF9HRSwgJiQxLCAmJDMpOwor ICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICB8IHJ2YWx1ZSAnPycKKyAgICAgICAg IHsKKyAgICAgICAgICAgICAkMS5pc19tYW51YWwgPSB0cnVlOworICAgICAgICAgICAgIFRlcm5h cnkgdCA9IHsgMCB9OworICAgICAgICAgICAgIHQuc3RhdGUgPSBJTl9MRUZUOworICAgICAgICAg ICAgIHQuY29uZCA9ICQxOworICAgICAgICAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbChjLT50ZXJu YXJ5LCB0KTsKKyAgICAgICAgIH0KKyAgICAgICAgIHJ2YWx1ZSAnOicKKyAgICAgICAgIHsKKyAg ICAgICAgICAgICBUZXJuYXJ5ICp0ID0gJmdfYXJyYXlfaW5kZXgoYy0+dGVybmFyeSwgVGVybmFy eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+dGVybmFyeS0+ bGVuIC0gMSk7CisgICAgICAgICAgICAgdC0+c3RhdGUgPSBJTl9SSUdIVDsKKyAgICAgICAgIH0K KyAgICAgICAgIHJ2YWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1u ID0gQDUubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fcnZhbHVlX3Rlcm5hcnko YywgJkAxLCAmJDEsICYkNCwgJiQ3KTsKKyAgICAgICAgIH0KKyAgICAgICB8IEZTQ1IgJygnIHJ2 YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEA0Lmxh c3RfY29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX3J2YWx1ZV9mc2NyKGMsICZAMSwgJiQz KTsKKyAgICAgICAgIH0KKyAgICAgICB8IFNYVCAnKCcgcnZhbHVlICcsJyBJTU0gJywnIHJ2YWx1 ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEA4Lmxhc3Rf Y29sdW1uOworICAgICAgICAgICAgIHl5YXNzZXJ0KGMsICZAMSwgJDUudHlwZSA9PSBJTU1FRElB VEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAkNS5pbW0udHlwZSA9PSBWQUxVRSwKKyAgICAg ICAgICAgICAgICAgICAgICAiU1hUIGV4cGVjdHMgaW1tZWRpYXRlIHZhbHVlc1xuIik7CisgICAg ICAgICAgICAgJCQgPSBnZW5fZXh0ZW5kX29wKGMsICZAMSwgJiQzLCAkNS5pbW0udmFsdWUsICYk NywgU0lHTkVEKTsKKyAgICAgICAgIH0KKyAgICAgICB8IFpYVCAnKCcgcnZhbHVlICcsJyBJTU0g JywnIHJ2YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9 IEA4Lmxhc3RfY29sdW1uOworICAgICAgICAgICAgIHl5YXNzZXJ0KGMsICZAMSwgJDUudHlwZSA9 PSBJTU1FRElBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAkNS5pbW0udHlwZSA9PSBWQUxV RSwKKyAgICAgICAgICAgICAgICAgICAgICAiWlhUIGV4cGVjdHMgaW1tZWRpYXRlIHZhbHVlc1xu Iik7CisgICAgICAgICAgICAgJCQgPSBnZW5fZXh0ZW5kX29wKGMsICZAMSwgJiQzLCAkNS5pbW0u dmFsdWUsICYkNywgVU5TSUdORUQpOworICAgICAgICAgfQorICAgICAgIHwgJygnIHJ2YWx1ZSAn KScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICAgfQorICAgICAg IHwgQUJTIHJ2YWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0g QDIubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fcnZhbHVlX2FicyhjLCAmQDEs ICYkMik7CisgICAgICAgICB9CisgICAgICAgfCBDUk9VTkQgJygnIHJ2YWx1ZSAnLCcgcnZhbHVl ICcpJworICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDYubGFzdF9j b2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fY29udnJvdW5kX24oYywgJkAxLCAmJDMsICYk NSk7CisgICAgICAgICB9CisgICAgICAgfCBDUk9VTkQgJygnIHJ2YWx1ZSAnKScKKyAgICAgICAg IHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEA0Lmxhc3RfY29sdW1uOworICAgICAg ICAgICAgICQkID0gZ2VuX2NvbnZyb3VuZChjLCAmQDEsICYkMyk7CisgICAgICAgICB9CisgICAg ICAgfCBST1VORCAnKCcgcnZhbHVlICcsJyBydmFsdWUgJyknCisgICAgICAgICB7CisgICAgICAg ICAgICAgQDEubGFzdF9jb2x1bW4gPSBANi5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAgICAkJCA9 IGdlbl9yb3VuZChjLCAmQDEsICYkMywgJiQ1KTsKKyAgICAgICAgIH0KKyAgICAgICB8ICctJyBy dmFsdWUKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEAyLmxhc3Rf Y29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX3J2YWx1ZV9uZWcoYywgJkAxLCAmJDIpOwor ICAgICAgICAgfQorICAgICAgIHwgSUNJUkMgJygnIHJ2YWx1ZSAnKScgQVNMIElNTQorICAgICAg ICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDYubGFzdF9jb2x1bW47CisgICAg ICAgICAgICAgJCQgPSBnZW5fdG1wKGMsICZAMSwgMzIsIFVOU0lHTkVEKTsKKyAgICAgICAgICAg ICBPVVQoYywgJkAxLCAiZ2VuX3JlYWRfaXJlZygiLCAmJCQsICIsICIsICYkMywgIiwgIiwgJiQ2 LCAiKTtcbiIpOworICAgICAgICAgICAgIGdlbl9ydmFsdWVfZnJlZShjLCAmQDEsICYkMyk7Cisg ICAgICAgICB9CisgICAgICAgfCBDSVJDQUREICcoJyBydmFsdWUgJywnIHJ2YWx1ZSAnLCcgcnZh bHVlICcpJworICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29sdW1uID0gQDgubGFz dF9jb2x1bW47CisgICAgICAgICAgICAgZ2VuX2NpcmNfb3AoYywgJkAxLCAmJDMsICYkNSwgJiQ3 KTsKKyAgICAgICAgIH0KKyAgICAgICB8IExPQ05UICcoJyBydmFsdWUgJyknCisgICAgICAgICB7 CisgICAgICAgICAgICAgQDEubGFzdF9jb2x1bW4gPSBANC5sYXN0X2NvbHVtbjsKKyAgICAgICAg ICAgICAvKiBMZWFkaW5nIG9uZXMgY291bnQgKi8KKyAgICAgICAgICAgICAkJCA9IGdlbl9sb2Nu dF9vcChjLCAmQDEsICYkMyk7CisgICAgICAgICB9CisgICAgICAgfCBDT1VOVE9ORVMgJygnIHJ2 YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVtbiA9IEA0Lmxh c3RfY29sdW1uOworICAgICAgICAgICAgIC8qIE9uZXMgY291bnQgKi8KKyAgICAgICAgICAgICAk JCA9IGdlbl9jdHBvcF9vcChjLCAmQDEsICYkMyk7CisgICAgICAgICB9CisgICAgICAgfCBMUENG RworICAgICAgICAgeworICAgICAgICAgICAgICQkID0gZ2VuX3RtcF92YWx1ZShjLCAmQDEsICIw IiwgMzIsIFVOU0lHTkVEKTsKKyAgICAgICAgICAgICBPVVQoYywgJkAxLCAiR0VUX1VTUl9GSUVM RChVU1JfTFBDRkcsICIsICYkJCwgIik7XG4iKTsKKyAgICAgICAgIH0KKyAgICAgICB8IEVYVFJB Q1QgJygnIHJ2YWx1ZSAnLCcgcnZhbHVlICcpJworICAgICAgICAgeworICAgICAgICAgICAgIEAx Lmxhc3RfY29sdW1uID0gQDYubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fZXh0 cmFjdF9vcChjLCAmQDEsICYkNSwgJiQzLCAmJDEpOworICAgICAgICAgfQorICAgICAgIHwgRVhU UkFOR0UgJygnIHJ2YWx1ZSAnLCcgcnZhbHVlICcsJyBydmFsdWUgJyknCisgICAgICAgICB7Cisg ICAgICAgICAgICAgQDEubGFzdF9jb2x1bW4gPSBAOC5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAg ICB5eWFzc2VydChjLCAmQDEsICQ1LnR5cGUgPT0gSU1NRURJQVRFICYmCisgICAgICAgICAgICAg ICAgICAgICAgJDUuaW1tLnR5cGUgPT0gVkFMVUUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAk Ny50eXBlID09IElNTUVESUFURSAmJgorICAgICAgICAgICAgICAgICAgICAgICQ3LmltbS50eXBl ID09IFZBTFVFLAorICAgICAgICAgICAgICAgICAgICAgICJSYW5nZSBleHRyYWN0IG5lZWRzIGlt bWVkaWF0ZSB2YWx1ZXMhXG4iKTsKKyAgICAgICAgICAgICAkJCA9IGdlbl9yZXh0cmFjdF9vcChj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZAMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJDcuaW1tLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ1Lmlt bS52YWx1ZSAtICQ3LmltbS52YWx1ZSArIDEpOworICAgICAgICAgfQorICAgICAgIHwgQ0FTVDRf OFUgJygnIHJ2YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBAMS5sYXN0X2NvbHVt biA9IEA0Lmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX3J2YWx1ZV90cnVuY2F0 ZShjLCAmQDEsICYkMyk7CisgICAgICAgICAgICAgJCQuc2lnbmVkbmVzcyA9IFVOU0lHTkVEOwor ICAgICAgICAgICAgICQkID0gcnZhbHVlX21hdGVyaWFsaXplKGMsICZAMSwgJiQkKTsKKyAgICAg ICAgICAgICAkJCA9IGdlbl9ydmFsdWVfZXh0ZW5kKGMsICZAMSwgJiQkKTsKKyAgICAgICAgIH0K KyAgICAgICB8IEJSRVYgJygnIHJ2YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBA MS5sYXN0X2NvbHVtbiA9IEA0Lmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQkID0gZ2VuX3J2 YWx1ZV9icmV2KGMsICZAMSwgJiQzKTsKKyAgICAgICAgIH0KKyAgICAgICB8IFJPVEwgJygnIHJ2 YWx1ZSAnLCcgcnZhbHVlICcpJworICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3RfY29s dW1uID0gQDYubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgJCQgPSBnZW5fcm90bChjLCAmQDEs ICYkMywgJiQ1KTsKKyAgICAgICAgIH0KKyAgICAgICB8IEFERFNBVDY0ICcoJyBydmFsdWUgJywn IHJ2YWx1ZSAnLCcgcnZhbHVlICcpJworICAgICAgICAgeworICAgICAgICAgICAgIEAxLmxhc3Rf Y29sdW1uID0gQDgubGFzdF9jb2x1bW47CisgICAgICAgICAgICAgZ2VuX2FkZHNhdDY0KGMsICZA MSwgJiQzLCAmJDUsICYkNyk7CisgICAgICAgICB9CisgICAgICAgfCBDQVJSWV9GUk9NX0FERCAn KCcgcnZhbHVlICcsJyBydmFsdWUgJywnIHJ2YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAg ICAgICBAMS5sYXN0X2NvbHVtbiA9IEA4Lmxhc3RfY29sdW1uOworICAgICAgICAgICAgICQkID0g Z2VuX2NhcnJ5X2Zyb21fYWRkKGMsICZAMSwgJiQzLCAmJDUsICYkNyk7CisgICAgICAgICB9Cisg ICAgICAgfCBMU0JORVcgJygnIHJ2YWx1ZSAnKScKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBA MS5sYXN0X2NvbHVtbiA9IEA0Lmxhc3RfY29sdW1uOworICAgICAgICAgICAgIEhleFZhbHVlIG9u ZSA9IGdlbl9pbW1fdmFsdWUoYywgJkAxLCAxLCAzMiwgVU5TSUdORUQpOworICAgICAgICAgICAg ICQkID0gZ2VuX2Jpbl9vcChjLCAmQDEsIEFOREJfT1AsICYkMywgJm9uZSk7CisgICAgICAgICB9 CisgICAgICAgOworCitsdmFsdWUgOiBGQUlMCisgICAgICAgICB7CisgICAgICAgICAgICAgQDEu bGFzdF9jb2x1bW4gPSBAMS5sYXN0X2NvbHVtbjsKKyAgICAgICAgICAgICB5eWFzc2VydChjLCAm QDEsIGZhbHNlLCAiRW5jb3VudGVyZWQgYSBGQUlMIHRva2VuIGFzIGx2YWx1ZS5cbiIpOworICAg ICAgICAgfQorICAgICAgIHwgUkVHCisgICAgICAgICB7CisgICAgICAgICAgICAgJCQgPSAkMTsK KyAgICAgICAgIH0KKyAgICAgICB8IHZhcgorICAgICAgICAgeworICAgICAgICAgICAgICQkID0g JDE7CisgICAgICAgICB9CisgICAgICAgOworCislJQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCit7CisgICAgaWYgKGFyZ2MgIT0gNSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwKKyAgICAgICAgICAgICAgICAiU2VtYW50aWNzOiBIZXhhZ29uIElTQSB0byB0aW55Y29kZSBn ZW5lcmF0b3IgY29tcGlsZXJcblxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAg ICAgICAgICAgICJVc2FnZTogLi9zZW1hbnRpY3MgSURFRlMgRU1JVFRFUl9DIEVNSVRURVJfSCAi CisgICAgICAgICAgICAgICAgIkVOQUJMRURfSU5TVFJVQ1RJT05TX0xJU1RcbiIpOworICAgICAg ICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBlbnVtIHsKKyAgICAgICAgQVJHX0lOREVYX0FSR1Yw ID0gMCwKKyAgICAgICAgQVJHX0lOREVYX0lERUZTLAorICAgICAgICBBUkdfSU5ERVhfRU1JVFRF Ul9DLAorICAgICAgICBBUkdfSU5ERVhfRU1JVFRFUl9ILAorICAgICAgICBBUkdfSU5ERVhfRU5B QkxFRF9JTlNUUlVDVElPTlNfTElTVAorICAgIH07CisKKyAgICBGSUxFICplbmFibGVkX2ZpbGUg PSBmb3Blbihhcmd2W0FSR19JTkRFWF9FTkFCTEVEX0lOU1RSVUNUSU9OU19MSVNUXSwgInciKTsK KworICAgIEZJTEUgKm91dHB1dF9maWxlID0gZm9wZW4oYXJndltBUkdfSU5ERVhfRU1JVFRFUl9D XSwgInciKTsKKyAgICBmcHV0cygiI2luY2x1ZGUgXCJxZW11L29zZGVwLmhcIlxuIiwgb3V0cHV0 X2ZpbGUpOworICAgIGZwdXRzKCIjaW5jbHVkZSBcInFlbXUvbG9nLmhcIlxuIiwgb3V0cHV0X2Zp bGUpOworICAgIGZwdXRzKCIjaW5jbHVkZSBcImNwdS5oXCJcbiIsIG91dHB1dF9maWxlKTsKKyAg ICBmcHV0cygiI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiIsIG91dHB1dF9maWxlKTsKKyAgICBm cHV0cygiI2luY2x1ZGUgXCJ0Y2cvdGNnLW9wLmhcIlxuIiwgb3V0cHV0X2ZpbGUpOworICAgIGZw dXRzKCIjaW5jbHVkZSBcImluc24uaFwiXG4iLCBvdXRwdXRfZmlsZSk7CisgICAgZnB1dHMoIiNp bmNsdWRlIFwib3Bjb2Rlcy5oXCJcbiIsIG91dHB1dF9maWxlKTsKKyAgICBmcHV0cygiI2luY2x1 ZGUgXCJ0cmFuc2xhdGUuaFwiXG4iLCBvdXRwdXRfZmlsZSk7CisgICAgZnB1dHMoIiNkZWZpbmUg UUVNVV9HRU5FUkFURVxuIiwgb3V0cHV0X2ZpbGUpOworICAgIGZwdXRzKCIjaW5jbHVkZSBcImdl bnB0ci5oXCJcbiIsIG91dHB1dF9maWxlKTsKKyAgICBmcHV0cygiI2luY2x1ZGUgXCJ0Y2cvdGNn LmhcIlxuIiwgb3V0cHV0X2ZpbGUpOworICAgIGZwdXRzKCIjaW5jbHVkZSBcIm1hY3Jvcy5oXCJc biIsIG91dHB1dF9maWxlKTsKKyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiI2luY2x1ZGUgXCIl c1wiXG4iLCBhcmd2W0FSR19JTkRFWF9FTUlUVEVSX0hdKTsKKworICAgIEZJTEUgKmRlZmluZXNf ZmlsZSA9IGZvcGVuKGFyZ3ZbQVJHX0lOREVYX0VNSVRURVJfSF0sICJ3Iik7CisgICAgYXNzZXJ0 KGRlZmluZXNfZmlsZSAhPSBOVUxMKTsKKyAgICBmcHV0cygiI2lmbmRlZiBIRVhfRU1JVFRFUl9I XG4iLCBkZWZpbmVzX2ZpbGUpOworICAgIGZwdXRzKCIjZGVmaW5lIEhFWF9FTUlUVEVSX0hcbiIs IGRlZmluZXNfZmlsZSk7CisgICAgZnB1dHMoIlxuIiwgZGVmaW5lc19maWxlKTsKKyAgICBmcHV0 cygiI2luY2x1ZGUgXCJpbnNuLmhcIlxuXG4iLCBkZWZpbmVzX2ZpbGUpOworCisgICAgLyogUGFy c2VyIGlucHV0IGZpbGUgKi8KKyAgICBDb250ZXh0IGNvbnRleHQgPSB7IDAgfTsKKyAgICBjb250 ZXh0LmRlZmluZXNfZmlsZSA9IGRlZmluZXNfZmlsZTsKKyAgICBjb250ZXh0Lm91dHB1dF9maWxl ID0gb3V0cHV0X2ZpbGU7CisgICAgY29udGV4dC5lbmFibGVkX2ZpbGUgPSBlbmFibGVkX2ZpbGU7 CisgICAgLyogSW5pdGlhbGl6ZSBidWZmZXJzICovCisgICAgY29udGV4dC5vdXRfc3RyID0gZ19z dHJpbmdfbmV3KE5VTEwpOworICAgIGNvbnRleHQuc2lnbmF0dXJlX3N0ciA9IGdfc3RyaW5nX25l dyhOVUxMKTsKKyAgICBjb250ZXh0LmhlYWRlcl9zdHIgPSBnX3N0cmluZ19uZXcoTlVMTCk7Cisg ICAgY29udGV4dC50ZXJuYXJ5ID0gZ19hcnJheV9uZXcoRkFMU0UsIFRSVUUsIHNpemVvZihUZXJu YXJ5KSk7CisgICAgLyogUmVhZCBpbnB1dCBmaWxlICovCisgICAgRklMRSAqaW5wdXRfZmlsZSA9 IGZvcGVuKGFyZ3ZbQVJHX0lOREVYX0lERUZTXSwgInIiKTsKKyAgICBmc2VlayhpbnB1dF9maWxl LCAwTCwgU0VFS19FTkQpOworICAgIGxvbmcgaW5wdXRfc2l6ZSA9IGZ0ZWxsKGlucHV0X2ZpbGUp OworICAgIGNvbnRleHQuaW5wdXRfYnVmZmVyID0gKGNoYXIgKikgY2FsbG9jKGlucHV0X3NpemUg KyAxLCBzaXplb2YoY2hhcikpOworICAgIGZzZWVrKGlucHV0X2ZpbGUsIDBMLCBTRUVLX1NFVCk7 CisgICAgc2l6ZV90IHJlYWRfY2hhcnMgPSBmcmVhZChjb250ZXh0LmlucHV0X2J1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFyKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9maWxlKTsKKyAgICBpZiAocmVhZF9jaGFycyAhPSAoc2l6ZV90KSBpbnB1dF9zaXpl KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGFuIGVycm9yIG9jY3VycmVkIHdo aWxlIHJlYWRpbmcgaW5wdXQgZmlsZSFcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor ICAgIHl5bGV4X2luaXQoJmNvbnRleHQuc2Nhbm5lcik7CisgICAgWVlfQlVGRkVSX1NUQVRFIGJ1 ZmZlcjsKKyAgICBidWZmZXIgPSB5eV9zY2FuX3N0cmluZyhjb250ZXh0LmlucHV0X2J1ZmZlciwg Y29udGV4dC5zY2FubmVyKTsKKyAgICAvKiBTdGFydCB0aGUgcGFyc2luZyBwcm9jZWR1cmUgKi8K KyAgICB5eXBhcnNlKGNvbnRleHQuc2Nhbm5lciwgJmNvbnRleHQpOworICAgIGlmIChjb250ZXh0 LmltcGxlbWVudGVkX2luc24gIT0gY29udGV4dC50b3RhbF9pbnNuKSB7CisgICAgICAgIGZwcmlu dGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJXYXJuaW5nOiAlZC8lZCBtZXRhIGluc3RydWN0 aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQhXG4iLAorICAgICAgICAgICAgICAgIGNvbnRleHQu aW1wbGVtZW50ZWRfaW5zbiwKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRvdGFsX2luc24pOwor ICAgIH0KKyAgICBmcHV0cygiI2VuZGlmICIgU1RBUlRfQ09NTUVOVCAiIEhFWF9FTUlUVEVSX2gg IiBFTkRfQ09NTUVOVCAiXG4iLAorICAgICAgICAgIGRlZmluZXNfZmlsZSk7CisgICAgLyogQ2xl YW51cCAqLworICAgIHl5X2RlbGV0ZV9idWZmZXIoYnVmZmVyLCBjb250ZXh0LnNjYW5uZXIpOwor ICAgIHl5bGV4X2Rlc3Ryb3koY29udGV4dC5zY2FubmVyKTsKKyAgICBmcmVlKGNvbnRleHQuaW5w dXRfYnVmZmVyKTsKKyAgICBnX3N0cmluZ19mcmVlKGNvbnRleHQub3V0X3N0ciwgVFJVRSk7Cisg ICAgZ19zdHJpbmdfZnJlZShjb250ZXh0LnNpZ25hdHVyZV9zdHIsIFRSVUUpOworICAgIGdfc3Ry aW5nX2ZyZWUoY29udGV4dC5oZWFkZXJfc3RyLCBUUlVFKTsKKyAgICBnX2FycmF5X2ZyZWUoY29u dGV4dC50ZXJuYXJ5LCBUUlVFKTsKKyAgICBmY2xvc2Uob3V0cHV0X2ZpbGUpOworICAgIGZjbG9z ZShpbnB1dF9maWxlKTsKKyAgICBmY2xvc2UoZGVmaW5lc19maWxlKTsKKyAgICBmY2xvc2UoZW5h YmxlZF9maWxlKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFn b24vbWVzb24uYnVpbGQgYi90YXJnZXQvaGV4YWdvbi9tZXNvbi5idWlsZAppbmRleCA1YWYwYTZm NDE5Li5kNzgyMDQxMDY5IDEwMDY0NAotLS0gYS90YXJnZXQvaGV4YWdvbi9tZXNvbi5idWlsZAor KysgYi90YXJnZXQvaGV4YWdvbi9tZXNvbi5idWlsZApAQCAtMjAzLDYgKzIwMywzNSBAQCBpZiBp ZGVmX3BhcnNlcl9lbmFibGVkIGFuZCAnaGV4YWdvbi1saW51eC11c2VyJyBpbiB0YXJnZXRfZGly cwogICAgICAgICBvdXRwdXQ6IFsnQEJBU0VOQU1FQC55eS5jJywgJ0BCQVNFTkFNRUAueXkuaCdd LAogICAgICAgICBhcmd1bWVudHM6IFsnLW8nLCAnQE9VVFBVVDBAJywgJy0taGVhZGVyLWZpbGU9 QE9VVFBVVDFAJywgJ0BJTlBVVEAnXQogICAgICkKKworICAgIGJpc29uID0gZ2VuZXJhdG9yKAor ICAgICAgICBmaW5kX3Byb2dyYW0oJ2Jpc29uJyksCisgICAgICAgIG91dHB1dDogWydAQkFTRU5B TUVALnRhYi5jJywgJ0BCQVNFTkFNRUAudGFiLmgnXSwKKyAgICAgICAgYXJndW1lbnRzOiBbJ0BJ TlBVVEAnLCAnLS1kZWZpbmVzPUBPVVRQVVQxQCcsICctLW91dHB1dD1AT1VUUFVUMEAnXQorICAg ICkKKworICAgIGdsaWJfZGVwID0gZGVwZW5kZW5jeSgnZ2xpYi0yLjAnLCBuYXRpdmU6IHRydWUp CisKKyAgICBpZGVmX3BhcnNlciA9IGV4ZWN1dGFibGUoCisgICAgICAgICdpZGVmLXBhcnNlcics CisgICAgICAgIFtmbGV4LnByb2Nlc3MoaWRlZl9wYXJzZXJfZGlyIC8gJ2lkZWYtcGFyc2VyLmxl eCcpLAorICAgICAgICAgYmlzb24ucHJvY2VzcyhpZGVmX3BhcnNlcl9kaXIgLyAnaWRlZi1wYXJz ZXIueScpLAorICAgICAgICAgaWRlZl9wYXJzZXJfZGlyIC8gJ3BhcnNlci1oZWxwZXJzLmMnXSwK KyAgICAgICAgaW5jbHVkZV9kaXJlY3RvcmllczogWydpZGVmLXBhcnNlcicsICcuLi8uLi9pbmNs dWRlLyddLAorICAgICAgICBkZXBlbmRlbmNpZXM6IFtnbGliX2RlcF0sCisgICAgICAgIGNfYXJn czogWyctV2V4dHJhJ10sCisgICAgICAgIG5hdGl2ZTogdHJ1ZQorICAgICkKKworICAgIGlkZWZf Z2VuZXJhdGVkX3RjZyA9IGN1c3RvbV90YXJnZXQoCisgICAgICAgICdpZGVmLWdlbmVyYXRlZC10 Y2cnLAorICAgICAgICBvdXRwdXQ6IFsnaWRlZi1nZW5lcmF0ZWQtZW1pdHRlci5jJywKKyAgICAg ICAgICAgICAgICAgJ2lkZWYtZ2VuZXJhdGVkLWVtaXR0ZXIuaC5pbmMnLAorICAgICAgICAgICAg ICAgICAnaWRlZi1nZW5lcmF0ZWQtZW5hYmxlZC1pbnN0cnVjdGlvbnMnXSwKKyAgICAgICAgaW5w dXQ6IHByZXByb2Nlc3NlZF9pZGVmX3BhcnNlcl9pbnB1dF9nZW5lcmF0ZWQsCisgICAgICAgIGRl cGVuZF9maWxlczogW2hleF9jb21tb25fcHldLAorICAgICAgICBjb21tYW5kOiBbaWRlZl9wYXJz ZXIsICdASU5QVVRAJywgJ0BPVVRQVVQwQCcsICdAT1VUUFVUMUAnLCAnQE9VVFBVVDJAJ10KKyAg ICApCiBlbmRpZgogCiB0YXJnZXRfYXJjaCArPSB7J2hleGFnb24nOiBoZXhhZ29uX3NzfQotLSAK Mi4xNy4xCgo=