Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oSY3N-0001i9-BP for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Aug 2022 06:15:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oSY3L-0007wd-6v for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Aug 2022 06:15:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oSY3K-0007wT-EQ for pgsql-hackers@lists.postgresql.org; Mon, 29 Aug 2022 06:15:18 +0000 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oSY3D-0000jA-Fz for pgsql-hackers@lists.postgresql.org; Mon, 29 Aug 2022 06:15:17 +0000 Received: by mail-lf1-x12b.google.com with SMTP id br21so3981992lfb.0 for ; Sun, 28 Aug 2022 23:15:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=o+gxfM/RWIjWy+KFOxZH5J9I6DNOX+zX2O1hABaLNoM=; b=OeGLLP7HZt84cdl36L7LqesHq4+hmor8I/oqcv1oyZbHTO/6VZPNpriqiPW261nd+m HTly8SquUBGpcW8H7aUyVg83kfZCI1QFkL1z6nTKaqTDMhVSwzYWX+fQgIIa3TAuJsrQ IWpc52Oi3iDa6hq6w6O8BStiyD/VUsx2chSyyPnM73/zgRagAOFBslF3qL7OEBIOWVxt KLou/zLI2aIgu5IQx0DMmX+xOJuflVlZrWG6uU9pMWNwlFAeebjdtW9V6Nl+CoOWWVHs Ev4D+4nD9qiCJBI4ctkvfmz+FP42j5HaL+o8X/81GIHvrEeLNwsTaFmmcX3BM/Iczr5M 5nUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=o+gxfM/RWIjWy+KFOxZH5J9I6DNOX+zX2O1hABaLNoM=; b=0TFgks2XYtwfVb8C9k0jiKLvw34wHTaHAtX3ajoLvW5pnnYWxREftKLJjqOHjYdQH/ RVbNJLWxg2+ngTpNgmza+JdL42hpsPUrvfsGimntyJCd/p61QB6bBKC1d4IjUQlFkles U3rPAZWz8vEwfOt74mD2bPI31oKRjJvcbjWQreAv1BSoV2DjG/BneQK/3PBMkzK7X7Nf Pfeylzd2/DWqJ5wK4td+mvtLwNZ3MakMegVKEuLhHmWGac9SVyJ5AMNDKgNGaT7/MOtW LdPWGR5bcl6rNPhLiUCR9d1NdOEmnLzYFYBhJv+Oe0UgQtUbNqpBQFcuE8JhHiPAMksN Ccww== X-Gm-Message-State: ACgBeo1LI0l+Guq6lzE84KCIsxSGvsTE1/u14ni3ARcCDXrgANEyVxqf BCx1Jc4Ok/w8NZxeG351fK9EDpXfEyCLb+TP/6c= X-Google-Smtp-Source: AA6agR47mauZP5NmOYcZ2YvqbvGPVrwAznd4961hqByZoNbNwuCb2qi5SlipfS/bG5SOhLwc2kdACeBdIpuhll0EWdk= X-Received: by 2002:a05:6512:3da5:b0:494:5f6d:8985 with SMTP id k37-20020a0565123da500b004945f6d8985mr2939490lfv.59.1661753709768; Sun, 28 Aug 2022 23:15:09 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Mon, 29 Aug 2022 16:14:57 +1000 Message-ID: Subject: Re: Support logical replication of DDLs To: "houzj.fnst@fujitsu.com" Cc: Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Content-Type: multipart/mixed; boundary="00000000000093c3cd05e75b2f40" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000093c3cd05e75b2f40 Content-Type: text/plain; charset="UTF-8" On Tue, Aug 16, 2022 at 9:57 PM houzj.fnst@fujitsu.com wrote: > > On Saturday, August 13, 2022 11:27 PM Ajin Cherian wrote: > > > > On Fri, Aug 5, 2022 at 4:03 PM Peter Smith wrote: > > > > > > Hi Hou-san, here are my review comments for the patch v15-0001: > > > ... > > fixed these. > > Attach the new version patch set which added support for > CRAETE/ALTER/DROP DOMAIN and > CREATE/ALTER/DROP TYPE. > Attaching a new version patchset which added support for CREATE/ALTER/DROP CONVERSION. regards, Ajin Cherian Fujitsu Australia --00000000000093c3cd05e75b2f40 Content-Type: application/octet-stream; name="v19-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v19-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7ed8awm2 RnJvbSA1YTcxMDBkOTVkY2M4ODc0NmVjNGI0NzAxZGYwOTU4MzRjZTZmYWJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgMjggQXVnIDIwMjIgMjM6MzU6MTIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOSAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi4wZDgwYzZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggMWZmMjA3Mi4uODg1ZGI2NyAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC02MjM0LDYgKzYyMzQsMjcgQEAgZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQogfQogCiAvKgorICogRGVwYXJz ZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8g dGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisg KiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2Jq ZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf Q3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKKy8qCiAgKiBIYW5k bGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNo b3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCkBAIC02 NDYyLDYgKzY0ODMsOSBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQogCQljYXNlIFNDVF9BbHRlclRhYmxlOgogCQkJdHJl ZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9D cmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsK KwkJCWJyZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2Vf QWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggNzJjZjliNS4uMDRkYTg5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVu dFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9 IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQor CQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNn KCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENy ZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRl IHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9k cm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAg fHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkK IAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJ ZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBA IC01ODUsNyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVl LAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9 PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8 fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAor CQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFn X2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBj b21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2 ICs4NzEsMTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9p ZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQog CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFy ZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFu ZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50 IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYg KCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNv bW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5 cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGlu Z19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRk cmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBh cnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5k CisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29t bWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2li aWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdo LiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmln Z2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBp ZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVu dCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKwor CXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2Ug dGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ Y2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFz c2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBs b2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRh YmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFi bGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQg YWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2li bGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNv bWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgor CSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQg V0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmlu ZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3Ry aW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmlu Zywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICov Cit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2Vy RGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBT ZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5 IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJ ICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNv IGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUg aWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUg c3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0 aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVz ZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBk aWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBp ZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdn ZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUlu aXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJp Z2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSBy ZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQt PmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRy ZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2Vy SW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJl ZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmln Z2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8K KwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZl bnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyAr MTMwOSw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4g KEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVM b29rdXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChF VlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENv bW1hbmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdy aXRlKSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJp Z2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BG YW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0Nv bmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICpp ZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2 ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0g Y21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NU X0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJ CQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0g Y21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2Fz IGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDQwZmQ5MzkuLjQ4NjVlYjggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05OTYsNiArOTk2LDExIEBAIENyZWF0ZVB1Ymxp Y2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQog CQkJQ01EVEFHX0FMVEVSX0lOREVYCiAJCX07CiAKKwkJQ29tbWFuZFRhZwlpbml0X2NvbW1hbmRz W10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01EVEFHX1NFTEVDVF9JTlRP CisJCX07CisKIAkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciAq LwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9lbmQiLCBlbmRf Y29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJv aWQpOwpAQCAtMTAwNyw2ICsxMDEyLDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkvKiBDcmVhdGUgdGhlIHRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmln Z2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhv ZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUg dGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVu dFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxl bmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJfQogCiAJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggYWEwMDgxNS4uZmI1 ZTY3OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2NSwxMCBAQCBQcm9jZXNzVXRpbGl0 eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfQ3JlYXRl VGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChwYXJzZXRy ZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcyhwc3RhdGUsIChDcmVhdGVUYWJs ZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBhcmFtcywgcXVlcnlFbnYsIHFjKTsK KwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgpOwogCQkJCWJyZWFrOwogCiAJCQlj YXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKaW5k ZXggZjdmNzE2NS4uN2ZiOGNiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0x NjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdnZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBF VlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIp ID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJld3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChl dnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJ bml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApp bmRleCBhYjI5MGRkLi4xMzY3MzcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExOTA5 LDQgKzExOTA5LDcgQEAKIHsgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCiAgIHByb25hbWUgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXIn LAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlv bl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmlu ZGV4IGZkMmVlN2YuLmE5ZTBmNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK QEAgLTU1LDYgKzU1LDEwIEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQo Tm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAq cGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpw YXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lk IEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVz cyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZv aWQpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7 CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJu IGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2Vf dXRpbGl0eS5oCmluZGV4IGI1MzI5NGIuLjNkMjk0YTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0 aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5 cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlT Q1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmln LAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAt MTAxLDYgKzEwMiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJ CU9iamVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJ CQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJ Y3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdo ZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkZGI2N2E2Li4xZTY0ODMxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENv bW1hbmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFi bGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZl bnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0Ci0tIAoxLjguMy4xCgo= --00000000000093c3cd05e75b2f40 Content-Type: application/octet-stream; name="v19-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v19-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7ed8awl1 RnJvbSA1MjYwNGZjY2E3YTFlOGI4MWZmYTI1ZDNlYzZmMzgyYzkwOGI4OGIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgMjggQXVnIDIwMjIgMjM6MzI6MDggLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOSAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVw YXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FM IGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQg ZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4u KSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoK Tm90ZSB0aGF0IHRoZSByZXBsaWNhdGlvbiBmb3IgQUxURVIgSU5ERVggY29tbWFuZCBpcyBzdGls bCB1bmRlcgpwcm9ncmVzcy4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2NvbW1hbmQgc3RhcnQn IGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUg dGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0 KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0 aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExh dGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9w IG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2Vu ZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxp ZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMg YmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBl bmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBh cyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBm b3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZl cmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3Qu IFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRv IHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBj b3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFz IHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMg Zm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0 YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQURE IENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFy c2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlz aGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0 ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQg dGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpj b25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwg bXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlz IHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gK ZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRv IGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byBy ZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcK cmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8g a2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3Vs ZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhl IGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5k IHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0 YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBs b2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2Ug bWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdy aXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3Jp dGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUg dGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFy c2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRp bmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIHwgIDUyICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYyAgICAgICAgICAgIHwgMjMwICsrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgICB8IDEzMCArKysrKysrKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2ICsr KysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgICAgfCAg NDEgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICB8 ICA5MyArKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAg ICAgIHwgIDQ4ICsrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMgfCAxMzYgKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jICAgICAgICB8IDIzMiArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggICAgICAgICAgICB8ICA2MCArKysrCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICB8ICAgNyArLQogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMjcgKysKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDM5ICsrKwog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICAgIHwgMzg4ICsr KysrKysrKysrKy0tLS0tLS0tLS0tLQogMzEgZmlsZXMgY2hhbmdlZCwgMTYyNSBpbnNlcnRpb25z KCspLCAyMTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmLi5iOGUyOWU4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2Mu byBcCiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCisJbG9naWNhbGRkbG1zZ2Rl c2MubyBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRlc2MubyBcCiAJcmVsbWFwZGVzYy5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkZWU1MgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAg KzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMK KyAqCSAgcm1nciBkZXNjcmlwdG9yIHJvdXRpbmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2Rk bG1lc3NhZ2UuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19k ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAg ICpyZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dl dEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJ Q0FMX0RETF9NRVNTQUdFKQorCXsKKwkJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAo eGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSByZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVj LT5tZXNzYWdlOworCQljaGFyCSAgICptZXNzYWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+ cHJlZml4X3NpemU7CisJCWNoYXIJICAgKnNlcCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxy ZWMtPnByZWZpeF9zaXplXSAhPSAnXDAnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInBy ZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6dSBieXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJl Yy0+bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0 eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJlYy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3Nh Z2UgcGF5bG9hZCBhcyBhIHNlcmllcyBvZiBoZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0g MDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAodW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsK KwkJCXNlcCA9ICIgIjsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNn X2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09 IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwly ZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA2YWYz NTcwLi5iZGY0MmE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1 LDYgKzEwMDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25z LnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9 IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3Jt LT5wdWJkZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJl bGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4 IDYzNWQwNTQuLjcyY2Y5YjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAg LTM3LDggKzM3LDExIEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2Vy L3BhcnNlX2Z1bmMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1 ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisj aW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAg LTE1MzcsNiArMTU0MCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJz ZXRyZWUpCiAKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRp b25JZDsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNv bW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRh YmxlLnN1YmNtZHMgPSBOSUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJz ZXRyZWUpOwogCkBAIC0xNTcwLDcgKzE1NzQsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVs aWQoT2lkIG9iamVjdElkKQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMg Y29kZSBuZWVkcyB0byBoYW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MpCitFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQs IE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQg b2xkY3h0OwogCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBA QCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+ cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAlj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3Vi Y21kcyA9CiAJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyMjYg QEAgc3RyaW5naWZ5X2FkZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJl dHVybiAiPz8/IjsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRk bCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAq dHJpZ2RhdGE7CisJY2hhcgkJKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5k IHN0YXJ0Iik7CisJRHJvcFN0bXQJKnN0bXQ7CisJTGlzdENlbGwJKmNlbGwxOworCisJaWYgKCFD QUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVk IGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2Vy RGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEt PnBhcnNldHJlZTsKKworCS8qIGV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUg Ki8KKwlmb3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcglyZWxwZXJzaXN0 OworCQlOb2RlCSpvYmplY3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJl c3M7CisJCVJlbGF0aW9uIHJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVj dF9hZGRyZXNzKHN0bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJ ICZyZWxhdGlvbiwKKwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRy dWUpOworCisJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3 aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAq IFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVu bG9nZ2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0 bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyBy ZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlm IChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2FsRERM TWVzc2FnZSgiZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwK KwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9u KQorCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jl d3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBs b2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFu ZCAgICpjbWQ7CisJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VW RU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0 cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3Vy cmVudENvbW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUp OworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUu b2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFu ZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkg KiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1 bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3Rs eSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3 cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJl bHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRv IGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91 dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkK KwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmpl Y3RJZCwgRENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9z dHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgor ICogcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRo ZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsK KwlzbGlzdF9pdGVyICBpdGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQgcmVs aWQ7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJS T1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxj LCBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJCQly ZWxwZXJzaXN0ID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5k ICAgKmNtZCA9IGxmaXJzdChsYyk7CisJCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwkJLyog UmV3cml0ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8K KwkJaWYgKGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJl bmFtZVN0bXQgPSAoUmVuYW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1l U3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVs YXRpb25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChj bWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NU X0FsdGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7 CisJCQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5 IFNDVF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mu b2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVs X3JlbGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVs aWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3 aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAq IFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVu bG9nZ2VkIHRhYmxlcworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0 bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiBy ZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlm IChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkv KgorCQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBk ZWNvZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJz ZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5V TEwpCisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJl bGlkLCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEp OworCX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PlNRTERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJv cFN0bXQJCQkgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQlj aGFyCQkJCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCisJ CXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlzdG10 CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2Nv bnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisKKwkJaWYgKHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJv cEVuZDsKKwkJZWxzZSBpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiaW5kZXgiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJmdW5jdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlw ZSwgIm9wZXJhdG9yIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3Bl cmF0b3IgY2xhc3MiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVy YXRvciBmYW1pbHkiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjYXN0 IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHlwZSIpID09IDAgfHwK KwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImRvbWFpbiIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgInRyaWdnZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJjb252ZXJzaW9uIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0 RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9j b21tYW5kKG9iai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCSAgIHN0 bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQs IGNtZHR5cGUsCisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKwor CXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jCmluZGV4IDhiNTc0YjguLjQwZmQ5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMv bm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05 NSw2ICs5Nyw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRl ID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+ cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAK IAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDEsNiArMTQ0LDggQEAgcGFyc2VfcHVibGljYXRp b25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0 ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9 PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAo c3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRs ID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzQ5LDYgKzc1NCw1MyBAQCBDaGVja1B1YlJlbGF0 aW9uQ29sdW1uTGlzdChMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogfQog CiAvKgorICogQ3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxp Y2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihj aGFyICpldmVudG5hbWUsIENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1h bmRzLCBPYmplY3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJ aW50CQkJCQlpOworCUxpc3QJCQkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQkJCXRyaWdnZXJfaWQ7 CisJT2JqZWN0QWRkcmVzcwkJcmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxf dHJpZ2dlcjsKKwljaGFyCQkJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJCQl0 cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJp Z2dlcl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25z dCBjaGFyICAgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7 CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25w cmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3By ZWZpeCwKKwkJCSBldmVudG5hbWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25h bWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkg ZXZlbnRuYW1lKTsKKworCWRkbF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9u YW1lKTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2Vy LT5mdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAo aSA9IDA7IGkgPCBuY29tbWFuZHM7IGkrKykKKwl7CisJCVN0cmluZyAqdGFnID0gbWFrZVN0cmlu Zyhwc3RyZHVwKEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCQl0YWdzID0gbGFw cGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9t YWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJf aWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3Rl ciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlCisJICog cHVibGljYXRpb24uCisJICovCisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRy aWdnZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVy ZW5jZWQsICZwdWJhZGRyZXNzLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKworLyoKICAqIENy ZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KIE9iamVjdEFkZHJlc3MKQEAgLTgyMCw2ICs4NzIs OCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0 aW9uU3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2 YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERh dHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3B1YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1 ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0o cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04ODIsNiArOTM2LDc5IEBAIENyZWF0 ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpz dG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxv dyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVlZCB0byBm aW5kIGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0 ZW1lbnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBs aWNhdGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRv IGVuaGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGljYXRpb24g aXMgZmluYWxpemVkLgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1h bmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRU YWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFu ZFRhZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwKKwkJ CUNNRFRBR19BTFRFUl9DT05WRVJTSU9OLAorCQkJQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwKKwkJ CUNNRFRBR19DUkVBVEVfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0RPTUFJTiwKKwkJCUNNRFRB R19EUk9QX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19DUkVBVEVf VFlQRSwKKwkJCUNNRFRBR19EUk9QX1RZUEUsCisJCQlDTURUQUdfQUxURVJfVFlQRSwKKwkJCUNN RFRBR19DUkVBVEVfQ0FTVCwKKwkJCUNNRFRBR19BTFRFUl9DQVNULAorCQkJQ01EVEFHX0RST1Bf Q0FTVCwKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1IsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJB VE9SX0NMQVNTLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdf QUxURVJfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLAor CQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1IsCisJCQlD TURUQUdfRFJPUF9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0ZBTUlM WSwKKwkJCUNNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0FMVEVSX1BST0NFRFVS RSwKKwkJCUNNRFRBR19EUk9QX1BST0NFRFVSRSwKKwkJCUNNRFRBR19DUkVBVEVfRlVOQ1RJT04s CisJCQlDTURUQUdfQUxURVJfRlVOQ1RJT04sCisJCQlDTURUQUdfRFJPUF9GVU5DVElPTiwKKwkJ CUNNRFRBR19DUkVBVEVfVFJJR0dFUiwKKwkJCUNNRFRBR19BTFRFUl9UUklHR0VSLAorCQkJQ01E VEFHX0RST1BfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFLAorCQkJQ01EVEFHX0FMVEVS X1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9TRVFVRU5DRSwKKwkJCUNNRFRBR19BTFRFUl9TRVFV RU5DRSwKKwkJCUNNRFRBR19EUk9QX1NFUVVFTkNFLAorCQkJQ01EVEFHX0NSRUFURV9TQ0hFTUEs CisJCQlDTURUQUdfQUxURVJfU0NIRU1BLAorCQkJQ01EVEFHX0RST1BfU0NIRU1BLAorCQkJQ01E VEFHX0NSRUFURV9JTkRFWCwKKwkJCUNNRFRBR19EUk9QX0lOREVYLAorCQkJQ01EVEFHX0FMVEVS X0lOREVYCisJCX07CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJp Z2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9lbmQi LCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRzKSwgbXlzZWxm LCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfc3RhcnQgZXZlbnQgdHJp Z2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9zdGFy dCIsIHN0YXJ0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHN0YXJ0X2NvbW1hbmRzKSwg bXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfcmV3cml0ZSBldmVudCB0 cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX3Jld3JpdGUi LCByZXdyaXRlX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHJld3JpdGVfY29tbWFuZHMp LCBteXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0aW9uUmVsYXRpb25J ZCwgcHVib2lkLCAwKTsKQEAgLTEwMjIsNiArMTE0OSw5IEBAIEFsdGVyUHVibGljYXRpb25PcHRp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJ dmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1 bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlv bl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlv bl9wdWJkZGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJCXJlcGxh Y2VzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSB0cnVlOwogCX0KIAogCWlmIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK aW5kZXggZGFjYzk4OS4uMmQ0ZjQyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTUy NTMsNyArNTI1Myw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZv ICp0YWIsCiAJICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQgZXZlbnQgdHJp Z2dlcnMuCiAJICovCiAJaWYgKGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVT dWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzKTsKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoK IAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1h bmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmls ZQppbmRleCBjNGUyZmRlLi5mM2VlYjY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNy Y2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKIAlkZWNvZGUubyBcCisJZGRsbWVzc2FnZS5v XAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwubyBcCiAJbG9naWNhbGZ1bmNzLm8gXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi41MDkzNTIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NiBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1l c3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9n aWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmlu Z3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIElu IG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisg KiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2 ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1vZGUuTm90ZSBieSBkZWZhdWx0IERETHMgaW4gUG9z dGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBUaGVzZSBtZXNzYWdlcyBhcmUgcGFy dCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJlIHNlbnQgdG8KKyAqIGRlY29kaW5n IHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBvcGVyYXRpb25zLgorICoKKyAqIEV2 ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3RzIGJldHdlZW4gZGlm ZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1Z2luIGF1dGhvcnMgbXVzdCB0YWtl IGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisgKiBnb29kIG9wdGlvbnMgc2VlbXMg dG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24uCisgKgor ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisj aW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInV0aWxz L21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdl IGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3Qg Y2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXplKQoreworCXhsX2xvZ2ljYWxfZGRs X21lc3NhZ2UgeGxyZWM7CisKKwkvKgorCSAqIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNh Y3Rpb24gaWQuCisJICovCisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJy ZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiB0 cmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxy ZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXpl ID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBl OworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxy ZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3Rp ZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0 YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogYWxsb3cgb3JpZ2lu IGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsK KworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9E RExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9y IGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNn X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVj R2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xP R0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVu a25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5n IGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAxNjY3ZDcyLi42NjY2ZDU3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNp bmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9s LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2lu LmgiCkBAIC02MDQsNiArNjA1LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogfQogCiAvKgorICogSGFuZGxl IHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNvcmRJbnRvUmVvcmRl ckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlTbmFwQnVpbGQgICpi dWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFkZXJTdGF0ZSAqciA9IGJ1 Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhpZChyKTsKKwl1aW50 OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01BU0s7CisJUmVwT3JpZ2lu SWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9sb2dpY2FsX2RkbF9tZXNz YWdlICptZXNzYWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQor CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNHX0lEIHJlY29yZCB0eXBl OiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9yZGVyLCBY TG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBo YXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGluZywgdGhlcmUgaXMgbm8K KwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICovCisJaWYgKFNuYXBCdWls ZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NOQVBTSE9UIHx8CisJCWN0 eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0gKHhsX2xvZ2ljYWxfZGRs X21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVzc2FnZS0+ZGJJZCAhPSBj dHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmlnaW4oY3R4LCBvcmlnaW5f aWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0NoYW5nZShidWlsZGVyLCB4 aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoY3R4LT5y ZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UsIC8q IGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJCQkJCSBtZXNzYWdlLT5t ZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZp eF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdlLT5jbWR0eXBlKTsKK30K KworLyoKICAqIENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRsaW5nIGJldHdlZW4gdGhl IGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KICAqCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3ZjQuLjk4OTY5YzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBA CiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMg dm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9p ZCBkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBjb25zdCBjaGFy ICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwog CiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICovCiBzdGF0aWMgdm9pZCBzdHJlYW1fc3RhcnRfY2Jf d3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLApAQCAt OTAsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRpYyB2b2lkIHN0cmVh bV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2Fj dGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9kZGxtZXNzYWdlX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwog c3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25zLCBS ZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIApAQCAt MjE4LDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdp bl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0cnVuY2F0ZV9jYl93 cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+ ZGRsbWVzc2FnZSA9IGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAogCS8qCiAJICogVG8gc3VwcG9y dCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9jb21taXQvY2hhbmdlCkBA IC0yMzQsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1 Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29tbWl0X2NiICE9IE5VTEwp IHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9IE5VTEwpIHx8CiAJCShj dHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAorCQkoY3R4LT5jYWxs YmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tz LnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0yNTEsNiArMjYzLDcgQEAg U3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0 eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAlj dHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsK KwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGxtZXNzYWdlID0gc3RyZWFtX2RkbG1lc3NhZ2VfY2Jf d3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90cnVuY2F0 ZV9jYl93cmFwcGVyOwogCiAKQEAgLTEyMjEsNiArMTIzNCw0NCBAQCBtZXNzYWdlX2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3Rh dGljIHZvaWQKK2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICBjb25zdCBjaGFyICptZXNz YWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2Rh dGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxs YmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJaWYg KGN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyog UHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0 ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJkZGxtZXNzYWdlIjsKKwlzdGF0 ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9 IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQg KikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsK KwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBz dGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0 eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0 ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxs IGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVz c2FnZV9sc24sIHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdlX3NpemUs IG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3Jf Y29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAog c3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQogewpAQCAtMTUzNiw2ICsx NTg3LDQ4IEBAIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxtZXNz YWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29uc3QgY2hhciAq cHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkg U2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2Fs RXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxi YWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdyZSBvbmx5IHN1 cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQuICovCisJQXNz ZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgKi8K KwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0 dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3Rh Y2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJlYW1f ZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJy Y2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNh bGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVy cm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsK KworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOwor CWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2Fj dGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRo ZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9k ZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwKKwkJCQkJ CQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJv ciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnBy ZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVv cmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCSAgIGludCBu cmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKIAkJCQkJCSAgIFJlb3JkZXJCdWZmZXJD aGFuZ2UgKmNoYW5nZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRl eCBmZjg1MTNlLi5mMzU0MDYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jCkBAIC02NjMsNiArNjYzLDUyIEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJ bmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogfQogCiAvKgorICog UmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQorICovCitjaGFyICoKK2xvZ2ljYWxyZXBfcmVh ZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwKKwkJCQkJCSAgIGNv bnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkgICBTaXplICpzeikKK3sKKwl1aW50OCBmbGFnczsK KwljaGFyICptc2c7CisKKwkvL1RPRE8gZG91YmxlIGNoZWNrIHdoZW4gZG8gd2UgbmVlZCB0byBn ZXQgVHJhbnNhY3Rpb25JZC4KKworCWZsYWdzID0gcHFfZ2V0bXNnaW50KGluLCAxKTsKKwlpZiAo ZmxhZ3MgIT0gMCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBmbGFncyAldSBpbiBkZGwg bWVzc2FnZSIsIGZsYWdzKTsKKwkqbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCSpwcmVmaXgg PSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJbXNn ID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpzeik7CisKKwlyZXR1cm4gbXNnOworfQor CisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8gc3RyZWFtCisgKi8KK3ZvaWQKK2xvZ2ljYWxy ZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgbHNuLAorCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3Qg Y2hhciAqbWVzc2FnZSkKK3sKKwl1aW50OAkJZmxhZ3MgPSAwOworCisJcHFfc2VuZGJ5dGUob3V0 LCBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRSk7CisKKwkvKiB0cmFuc2FjdGlvbiBJRCAoaWYg bm90IHZhbGlkLCB3ZSdyZSBub3Qgc3RyZWFtaW5nKSAqLworCWlmIChUcmFuc2FjdGlvbklkSXNW YWxpZCh4aWQpKQorCQlwcV9zZW5kaW50MzIob3V0LCB4aWQpOworCisJcHFfc2VuZGludDgob3V0 LCBmbGFncyk7CisJcHFfc2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwg cHJlZml4KTsKKwlwcV9zZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwgbWVz c2FnZSwgc3opOworfQorCisvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhl IG91dHB1dCBzdHJlYW0uCiAgKi8KIHZvaWQKQEAgLTEyMTgsNiArMTI2NCw4IEBAIGxvZ2ljYWxy ZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAiVFlQ RSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NBR0Ui OworCQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJcmV0dXJuICJEREwiOwog CQljYXNlIExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFOgogCQkJcmV0dXJuICJCRUdJTiBQ UkVQQVJFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRToKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggODljZjlmOS4uZWJj ZmUxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVy YnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3QuaCIKQEAgLTUxNSw2ICs1MTYsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBm cmVlKGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1F U1NBR0U6CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggIT0gTlVMTCkKKwkJCQlw ZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlICE9IE5V TEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZh bGlkYXRpb25zKQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKTsK QEAgLTg3MCw2ICs4NzksMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiB9CiAKIC8qCisgKiBBIHRyYW5zYWN0aW9uYWwg RERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJlIHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwor dm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJh bnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJ CQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNz ZXJ0KHhpZCAhPSBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHJiLT5jb250ZXh0KTsKKworCWNoYW5nZSA9IFJlb3JkZXJCdWZmZXJH ZXRDaGFuZ2UocmIpOworCWNoYW5nZS0+YWN0aW9uID0gUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RE TE1FU1NBR0U7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBwc3RyZHVwKHByZWZpeCk7 CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCA9IHJlbGlkOworCWNoYW5nZS0+ZGF0YS5kZGxt c2cuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUg PSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlID0gcGFsbG9jKG1l c3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSwgbWVzc2Fn ZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShyYiwgeGlkLCBs c24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworfQorCisvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNOIG9yZGVyaW5n IG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCiAgKgpAQCAtMTk2OSw2 ICsyMDA4LDI5IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3Ig UmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAq Lworc3RhdGljIGlubGluZSB2b2lkCitSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3Jk ZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCit7CisJaWYgKHN0cmVhbWluZykKKwkJ cmItPnN0cmVhbV9kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkJCSAgY2hh bmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnJl bGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkJCSAgY2hh bmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2UpOworCWVsc2UKKwkJcmItPmRkbG1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLT5s c24sCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkgICBjaGFuZ2Ut PmRhdGEuZGRsbXNnLnJlbGlkLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUs CisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkgICBjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworfQorCisvKgogICogRnVuY3Rpb24gdG8gc3RvcmUg dGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQKICAq IHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5kaW5nIHRoZSBu ZXh0IHN0cmVhbS4KICAqLwpAQCAtMjM0OCw2ICsyNDEwLDEwIEBAIFJlb3JkZXJCdWZmZXJQcm9j ZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCVJl b3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOwogCQkJ CQlicmVhazsKIAorCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJ CQkJCVJlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1p bmcpOworCQkJCQlicmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFM SURBVElPTjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2Fs bHkgKi8KIAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0 YS5pbnZhbC5uaW52YWxpZGF0aW9ucywKQEAgLTM3NzMsNiArMzgzOSw0MCBAQCBSZW9yZGVyQnVm ZmVyU2VyaWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERM TUVTU0FHRToKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXByZWZpeF9zaXpl ID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBw cmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6 ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihTaXplKTsKKwkJ CQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJZGF0YSA9ICgo Y2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSk7CisK KwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRpc2sg PSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCS8qIHdyaXRl IHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLworCQkJ CW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBz aXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlk LCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoZGF0 YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJl Zml4LAorCQkJCQkgICBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKwor CQkJCS8qIHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLworCQkJCW1lbWNw eShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsIHNpemVvZihTaXplKSk7 CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0 YS5kZGxtc2cubWVzc2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3Np emUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemU7CisKKwkJ CQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9O OgogCQkJewogCQkJCWNoYXIJICAgKmRhdGE7CkBAIC00MDg3LDYgKzQxODcsMTUgQEAgUmVvcmRl ckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKQogCiAJCQkJYnJl YWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7 CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVm aXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2Yo T2lkKSArIHNpemVvZihpbnQpOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQlzeiArPSBzaXplb2YoU2hhcmVk SW52YWxpZGF0aW9uTWVzc2FnZSkgKgpAQCAtNDM2Miw2ICs0NDcxLDMzIEBAIFJlb3JkZXJCdWZm ZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVT U0FHRToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgcHJlZml4 ICovCisJCQkJbWVtY3B5KCZwcmVmaXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlk YXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cucmVs aWQsIGRhdGEsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1l bWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBkYXRhLCBzaXplb2YoaW50KSk7CisJ CQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9 IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNw eShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFz c2VydChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcp OworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICov CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9m KFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJ CQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vf c2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKworCQkJ CWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CiAJCQl7CiAJCQkJU2l6ZQkJaW52YWxfc2l6ZSA9IHNpemVvZihTaGFyZWRJbnZhbGlkYXRpb25N ZXNzYWdlKSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA1 ZjhjNTQxLi40NDNhM2MyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg Im5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNp bmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUg InBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5o IgpAQCAtMTc5LDcgKzE4MCwxMCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5j bHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAjaW5j bHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2luY2x1 ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAi dXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTI0NjMsNiArMjQ2NywyMzAgQEAgYXBwbHlfaGFuZGxlX3Ry dW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQogCisvKiBS ZW1vdmUgdGhlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCitzdGF0aWMgdm9p ZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5k VGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAq KWNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JF QVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlDcmVh dGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQtPnN0 bXQ7CisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCQkJeworCQkJ CQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0 YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20g dGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJY2FzdG10LT5p bnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ01E VEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9IChTZWxlY3RTdG10ICop IGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9DbGF1c2UgIT0gTlVMTCkKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBh dm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0 ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQlz c3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFr OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBDUkVBVEUgVEFC TEUgY29tbWFuZAorICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUgZm9yIENSRUFU RSBUQUJFTCBjb21tYW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJFTF9TVEFURV9S RUFEWSBzbyBETUwgY2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3 aXRob3V0CisgKiBoYXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3JpcHRpb24gLi4u IHJlZnJlc2ggcHVibGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfY3JlYXRlX3Rh YmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCVJhbmdl VmFyCSAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9pZAkJCXJlbG5hbWVzcGFjZSA9IElu dmFsaWRPaWQ7CisJY2hhciAJCSAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkJICpyZWxuYW1l ID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1h bmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JFQVRFX1RB QkxFOgorCQkJeworCQkJCUNyZWF0ZVN0bXQgKmNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29tbWFu ZC0+c3RtdDsKKwkJCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwkJCX0KKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJaWYgKCFydikKKwkJcmV0dXJuOworCisJc2NoZW1h bmFtZSA9IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChz Y2hlbWFuYW1lICE9IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNj aGVtYW5hbWUsIGZhbHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJ cmVsaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UK KwkJcmVsaWQgPSBSZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisKKwlpZiAocmVsaWQgIT0gSW52 YWxpZE9pZCkKKwl7CisJCUFkZFN1YnNjcmlwdGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5v aWQsIHJlbGlkLAorCQkJCQkJCQlTVUJSRUxfU1RBVEVfUkVBRFksCisJCQkJCQkJCUludmFsaWRY TG9nUmVjUHRyKTsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgidGFi bGUgXCIlc1wiIGFkZGVkIHRvIHN1YnNjcmlwdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkgcmVsbmFt ZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXBwbHlf aGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0ciBsc247CisJY29uc3QgY2hh ciAqcHJlZml4ID0gTlVMTDsKKwljaGFyICptZXNzYWdlID0gTlVMTDsKKwljaGFyCSAgICpkZGxf Y29tbWFuZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2Vs bCAgICpwYXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOworCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZyA9 IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRsbWVz c2FnZShzLCAmbHNuLCAmcHJlZml4LCAmc3opOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBpbiBh IHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwlk ZGxfY29tbWFuZCA9IGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKG1lc3NhZ2UpOworCWRlYnVn X3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOworCisJLyogRGVzdE5vbmUgZm9yIGxvZ2ljYWwg cmVwbGljYXRpb24gKi8KKwlyZWNlaXZlciA9IENyZWF0ZURlc3RSZWNlaXZlcihEZXN0Tm9uZSk7 CisJcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxfY29tbWFuZCk7CisKKwlmb3Jl YWNoKHBhcnNldHJlZV9pdGVtLCBwYXJzZXRyZWVfbGlzdCkKKwl7CisJCUxpc3QJICAgKnBsYW50 cmVlX2xpc3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0OworCQlSYXdTdG10CSAgICpjb21t YW5kID0gKFJhd1N0bXQgKikgbGZpcnN0KHBhcnNldHJlZV9pdGVtKTsKKwkJQ29tbWFuZFRhZwlj b21tYW5kVGFnOworCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4dCA9IE5VTEw7 CisJCVBvcnRhbAkJcG9ydGFsOworCQlib29sCQkgc25hcHNob3Rfc2V0ID0gZmFsc2U7CisKKwkJ Y29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwkJLyog SWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNvbW1hbmQsIHF1 aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUgZGF0YSBwb3B1 bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoY29t bWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2UgYW5hbHlzaXMv cGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChhbmFseXplX3JlcXVpcmVzX3Nu YXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rp b25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7CisJCX0KKworCQkvKgorCQkg KiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBjb250 ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFueSBj b21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9jb250ZXh0ID0K KwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ ICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJCSAg QUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2Fu YWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCWRk bF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJcGxhbnRyZWVf bGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAsIE5V TEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFu bmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwor CQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0cnVlLCB0cnVl KTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcgaW50byB0aGUg cG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJlIHBhc3NpbmcgaGVyZSBpcyBp biBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRleHQs IGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLworCQlQb3J0YWxE ZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9jb21tYW5kLAor CQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJCQkJICBOVUxM KTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVycyBoZXJlLgor CQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25hcHNob3QpOwor CisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1 dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQko dm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1ZSwK KwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJ IE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29tbWFuZENvdW50 ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERETCByZXBsaWNh dGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRkZWQgdG8gdGhl IHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJsZShjb21tYW5k KTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29udGV4dCwgaWYg b25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9wYXJzZXRyZWVf Y29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9z dHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KKwogCiAvKgogICogTG9naWNhbCBy ZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0yNTI4LDYgKzI3NTYs MTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlicmVhazsKIAor CQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJYXBwbHlfaGFuZGxlX2RkbChz KTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKIAkJ CWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDYyZTBmZmUuLjRlMjRhYjIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtNTMsNiAr NTMsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgs CiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgcGdv dXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJl b3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29u c3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMg Ym9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0 X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1Niw2 ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAq Y2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2Ig PSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7 CisJY2ItPmRkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5jb21taXRf Y2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291 dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgsNyBAQCBfUEdfb3V0cHV0X3Bs dWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRf Y2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0gcGdv dXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7 CisJY2ItPnN0cmVhbV9kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+ c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24g c3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9 IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBAQCBwZ291dHB1 dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9u cyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wuICovCiAJb3B0 LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09VVFBVVDsKKwlvcHQtPnJlY2Vp dmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0aW9uIHN0YXJ0 IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBAQCBwZ291dHB1 dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9u cyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUuICovCiAJCWRhdGEtPnB1Ymxp Y2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJCXB1YmxpY2F0 aW9uc192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhQVUJM SUNBVElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52YWxpZGF0aW9uX2NiLApAQCAt MTM4MSw5ICsxMzkwLDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZSBh Y3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3QgPSBOVUxM OwogCVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJYm9vbAkJCXRhYmxlX3Jld3Jp dGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjdHgsIGZhbHNlKTsK IAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8gcmVwbGljYXRl IHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdyaXRlIGRkbCBt ZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlIGFuZAorCSAqIGNoZWNrIHRo ZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3Jp dGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBSZWxhdGlvbklk R2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRhcmdldHJlbCA9 IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24ocmVsYXRpb24p KQogCQlyZXR1cm47CiAKQEAgLTE0MTcsNiArMTQzOSwxMyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQlBc3Nl cnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJsZSByZXdyaXRl IGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBtZXNzYWdlLgor CSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwp CisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5nIGFuZCByZXNl dHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGRh dGEtPmNvbnRleHQpOwogCkBAIC0xNDQ2LDggKzE0NzUsOCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQl9CiAK IAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93X2ZpbHRlcih0 YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkgJmFjdGlvbikp CisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJn ZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJCWJyZWFrOwog CiAJCQkvKgpAQCAtMTQ2Nyw4ICsxNDk2LDE5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1heWJlX3NlbmRf c2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlPdXRwdXRQbHVn aW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0 eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRhLT5iaW5hcnks IHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhlIHJld3JpdGUg aW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAqIGNhbiByZXBs YXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3ZWVuCisJCQkg KiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYg KHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhp ZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJ CQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2ljYWxyZXBfd3Jp dGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJCQkJCQkJCQkJ ZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShj dHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFU RToKQEAgLTE1OTgsNiArMTYzOCw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3IgPSBOVUxMOwog CX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwog CS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlNZW1vcnlDb250 ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNjc1LDggKzE3MTgsOCBAQCBwZ291dHB1dF90 cnVuY2F0ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAogc3RhdGljIHZvaWQKIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCi0JCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAotCQkJ CSBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29s IHRyYW5zYWN0aW9uYWwsCisJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3Qg Y2hhciAqbWVzc2FnZSkKIHsKIAlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICop IGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOwogCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CkBAIC0xNzE2LDYgKzE3NTksMTM3IEBAIHBnb3V0cHV0X21lc3NhZ2Uo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJT3V0 cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIH0KIAorc3RhdGljIHZvaWQKK3Bnb3V0cHV0X2Rk bG1lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNoYXIgKnByZWZp eCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCVNpemUgc3os IGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0 RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4bkRhdGEgKnR4 bmRhdGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOwor CVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOworCVJlbGF0aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsKKworCS8qCisJICog UmVtZW1iZXIgdGhlIHhpZCBmb3IgdGhlIG1lc3NhZ2UgaW4gc3RyZWFtaW5nIG1vZGUuIFNlZQor CSAqIHBnb3V0cHV0X2NoYW5nZS4KKwkgKi8KKwlpZiAoaW5fc3RyZWFtaW5nKQorCQl4aWQgPSB0 eG4tPnhpZDsKKworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2UgRENUX1RhYmxlRHJvcFN0 YXJ0OgorCQkJLyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQgdG8gYSBkZWxl dGVkX3JlbGlkIGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRp b24gdGhhdCBzdXBwb3J0cyBkZGwgcHVibGljYXRpb24uIFdlCisJCQkgKiBuZWVkIHRoaXMgYmVj YXVzZSBvbiBEUk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJCQkgKiB2YWxp ZC4gTGF0ZXIgb24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZvciBhIHJlbGlk CisJCQkgKiB0aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25seSB0aGVuIHNl bmQgdGhlIGRkbAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlv bklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOworCQkJcmVsZW50 cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAocmVsZW50 cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGFwcGVu ZF9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRpb25DbG9zZShy ZWxhdGlvbik7CisJCQlyZXR1cm47CisJCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoKKwkJCWlmICgh bGlzdF9tZW1iZXJfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCkpCisJCQkJcmV0dXJu OworCQkJZWxzZQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGlzdF9kZWxldGVfb2lkKGRh dGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisJCQlicmVhazsKKwkJY2FzZSBEQ1RfVGFibGVB bHRlcjoKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNlbmQg dGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlIHRvCisJCQkgKiBzdWJzY3JpYmVyLCB0aGVuIGNvbnZl cnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvIFVQREFURSBhbmQKKwkJCSAqIHNlbmQg dGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5k CisJCQkgKiBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJCSAqCisJCQkg KiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgorCQkJICogKDEp IFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJl bnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRo ZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIKKwkJCSAqIHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4g cHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBsZXQKKwkJCSAqIHRoZSBz dWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3JpdGUgYWxs IHRoZQorCQkJICogZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhlIGRhdGEgYWZ0 ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9uZworCQkJICog cHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJh dG9ycyB1c2VkCisJCQkgKiBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRl IHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcAorCQkJICogdGhlIGRhdGEgY29uc2lzdGVudC4K KwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0dGlu ZyB0aGUgc3Vic2NyaWJlciBvbmx5CisJCQkgKiByZXdyaXRlIHRoZSBleHRyYSBkYXRhIGluc3Rl YWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQgdXNlIHRoZQorCQkJICogdXBjb21pbmcgcmV3 cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4gQmVzaWRlcywgd2UgbWF5CisJ CQkgKiBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3 cml0ZSBkZGwsIGZvcgorCQkJICogZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRp bmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgorCQkJICogVEFCTEUgU0VUIExPR0dFRCBhcyB0 aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZQorCQkJICogY2hhbmdlZC4K KwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCQkJ QXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0 YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlmIHdl IGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlIGRkbAorCQkJICogbmVlZCB0byBiZSBw dWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAoIXJlbGVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9 IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsK KwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJlbGF0aW9uID0g UmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9uID09IE5VTEwp CisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJl bGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQl7CisJ CQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVh azsKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUgJWQiLCBjbWR0 eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2ZW4ndCB5ZXQg Ki8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJCXBnb3V0cHV0 X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwg dHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKGN0eC0+b3V0LAorCQkJCQkJCQl4 aWQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAor CQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYg KHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoKICAqIFJldHVy biB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1 c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmln aW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE5OTcsNyArMjE3MSw4IEBAIGdldF9yZWxfc3luY19l bnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2No ZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0J CQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVu Y2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFs c2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7 CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkp OwpAQCAtMjA1NSw2ICsyMjMwLDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAq ZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9 IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnkt PnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJl IHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIxNjgsNiArMjM0NCw3IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwog CQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRkbDsKIAogCQkJCS8qCiAJCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRoZSBj aGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpAQCAtMjM1Myw2ICsyNTMwLDcgQEAgcmVs X3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWludDMy IGhhc2h2YWx1ZSkKIAl7CiAJCWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxzZTsKIAl9CisK IH0KIAogLyogU2VuZCBSZXBsaWNhdGlvbiBvcmlnaW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCmluZGV4IDAwZGMwZjIuLmYxYjRkMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYwpAQCAtNTY4Myw2ICs1NjgzLDcgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhS ZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5w dWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1 YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+ cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRsOwogCiAJCS8qCiAJCSAqIENoZWNr IGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uIGFyZSBw YXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuYwppbmRleCBkMjU3MDlhLi4zZDZkYzU3IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTM4 OTYsNiArMzg5Niw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1 YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRlbGV0ZTsKIAlp bnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRsOwogCWludAkJCWlfcHVidmlhcm9v dDsKIAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzkxMSwyMyArMzkxMiwyOSBAQCBnZXRQdWJs aWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJcmVzZXRQUUV4 cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1YmxpY2F0aW9ucy4gKi8KLQlpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0g MTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRh Ymxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJ CQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0 ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBw LnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCSAgIkZST00gcGdfcHVibGljYXRpb24gcCIp OworCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTMwMDAwKQorCQlhcHBlbmRQUUV4 cEJ1ZmZlcihxdWVyeSwKKwkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJu YW1lLCAiCisJCQkJCQkgICJwLnB1Ym93bmVyLCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxlcywg cC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFs c2UgYXMgcC5wdWJkZGwsIHAucHVidmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0 aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBw ZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQs IHAucHVibmFtZSwgIgogCQkJCQkJICAicC5wdWJvd25lciwgIgotCQkJCQkJICAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNh dGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHVi aW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFz IHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCSAgIkZST00gcGdfcHVibGlj YXRpb24gcCIpOwogCWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCQkgICJT RUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJICAicC5wdWJvd25l ciwgIgotCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwg cC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIK KwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHVi ZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFT IHB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMg PSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBA IC0zOTQzLDYgKzM5NTAsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpu dW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRl Iik7CiAJaV9wdWJkZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0 cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFm bnVtYmVyKHJlcywgInB1YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJw dWJ2aWFyb290Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1Ymxp Y2F0aW9uSW5mbykpOwpAQCAtMzk2Niw2ICszOTc0LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hp dmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJl cywgaSwgaV9wdWJkZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRl ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09 IDApOworCQlwdWJpbmZvW2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBp LCBpX3B1YmRkbCksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQko c3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBA IC00MDQ1LDYgKzQwNTUsMTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0 IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAo cHViaW5mby0+cHViZGRsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiLCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIp OworCQlmaXJzdCA9IGZhbHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi JyIpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCA2OWVlOTM5 Li42YzU1ZGUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYyMCw2ICs2MjAsNyBAQCB0eXBlZGVmIHN0cnVj dCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRl OwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlvbkluZm87 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9i aW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMxN2IuLjc5MmY0MzggMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVt cC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVu Y2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9k ZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggMzI3YTY5NC4uNzdjNDcx MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKQEAgLTYxNTksNyArNjE1OSw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsK IAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRy YW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1u c1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5 NCw2ICs2MTk0LDEwIEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVz XCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJz aW9uID49IDE0MDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAg cHViZGRsIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uXG4iKTsKQEAgLTYyODQsNiArNjI4OCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25z KGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0 cnVuY2F0ZTsKIAlib29sCQloYXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJ UFFFeHBCdWZmZXJEYXRhIHRpdGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAw LDYgKzYzMDUsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQog CiAJaGFzX3B1YnRydW5jYXRlID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVi dmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNl dC5zdmVyc2lvbiA+PSAxNTAwMDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02 MzEzLDYgKzYzMTksOSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJu KQogCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJ CQkJCQkgIiwgcHVidmlhcm9vdCIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmYnVmLAorCQkJCQkJCSAiLCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAK QEAgLTYzNjQsNiArNjM3Myw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBh dHRlcm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOwor CQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRs ZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVi bmFtZSk7CkBAIC02Mzc4LDYgKzYzODksOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBj aGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29w KCJUcnVuY2F0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlw cmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUs IGFsaWduKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250 LCBnZXR0ZXh0X25vb3AoIkRETHMiKSwgdHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRD ZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50 VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7 CkBAIC02Mzg4LDYgKzY0MDEsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpw YXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3 KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFk ZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYg KGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMs IGksIDkpLCBmYWxzZSwgZmFsc2UpOwogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9ybWdybGlzdC5oCmluZGV4IDlhNzQ3MjEuLjlkZTNiOGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5o CkBAIC00NywzICs0Nyw0IEBAIFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBj b21taXRfdHNfcmVkbywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JF UExPUklHSU5fSUQsICJSZXBsaWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9y aWdpbl9kZXNjLCByZXBsb3JpZ2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQog UEdfUk1HUihSTV9HRU5FUklDX0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19k ZXNjLCBnZW5lcmljX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQ R19STUdSKFJNX0xPR0lDQUxNU0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVk bywgbG9naWNhbG1zZ19kZXNjLCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxM LCBsb2dpY2FsbXNnX2RlY29kZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2lj YWxERExNZXNzYWdlIiwgbG9naWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxv Z2ljYWxkZGxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVj b2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggM2U3ZjM2NC4uYWIyOTBkZCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTkwMCw0ICsxMTkwMCwxMyBAQAogeyBvaWQgPT4gJzQ2 NDMnLCBkZXNjciA9PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21t YW5kJywKICAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0 eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJp Z2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcics CisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRs X2NvbW1hbmRfZW5kJyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywK KyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxf Y29tbWFuZF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9y IGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1Ymxp Y2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdn ZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNl X3RhYmxlX3Jld3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5k ZXggYzI5ODMyNy4uYWEyYjBjNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApA QCAtNTQsNiArNTQsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25S ZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVk IHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYg dGFibGUgY3JlYXRpb25zIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1E YXRhX3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsK IAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwog fSBQdWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzMuLmZkMmVlN2YgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAgZXh0ZXJu IHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRy ZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNl dHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVj dElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5v ZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJCQkJ CQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwog ZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hOGRjYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRs bWVzc2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNz YWdlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5o CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdF X0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3Mv eGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94 bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9y dCBmb3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBl bnVtIERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURy b3BTdGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmpl Y3RDcmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoK KyAqIEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICov Cit0eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJCQkJZGJJ ZDsJCQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJCQkJcHJlZml4X3Np emU7CS8qIGxlbmd0aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJCQkvKiBpZCBvZiB0 aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJLyogdHlwZSBvZiBz cWwgY29tbWFuZCAqLworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBzaXplIG9mIHRoZSBt ZXNzYWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0ZWQg cHJlZml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmluZSBT aXplT2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSwg bWVzc2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0 IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJ CQkJCQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisvKiBS TUdSIEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lkCQls b2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9naWNh bGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Citj b25zdCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NS4uNDI3YTdiOSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJfZGVj b2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsK IGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29y ZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZv aWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggYTc3MWFiOC4uMmFiY2NiOCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVt IExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxP R0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00n LAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19C RUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxP R0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yMjksNyArMjMwLDExIEBA IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShT dHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29sICpyZXN0YXJ0X3Nl cXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJCQkJCQkgYm9vbCB0cmFu c2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAor CQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9n aWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhp ZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6 LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRs bWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipwcmVm aXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0bWFw c2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVh ZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2lu LmgKaW5kZXggYjdkMjhkNy4uNzYzZTQzZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaApAQCAtOTEsNiArOTEsMTggQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29k ZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJ CQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2Fs IGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29k ZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJ CQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJ CSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hh ciAqbWVzc2FnZSk7CisKKy8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KIHR5 cGVkZWYgYm9vbCAoKkxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCKSAoc3RydWN0IExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTIwMiw2ICsyMTQsMTkgQEAgdHlwZWRlZiB2b2lk ICgqTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAq IENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJv bSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJ CQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1p bmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCiB0eXBlZGVm IHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yMjEsNiArMjQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0 cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7 CiAJTG9naWNhbERlY29kZUNvbW1pdENCIGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2Fn ZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2Ni OwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJ TG9naWNhbERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBA QCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3Ry ZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdl Q0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVh bV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2Rk bG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5j YXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oCmluZGV4IDAyMDI3NTUuLjgzZTBiMWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRw dXQuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50 MzIJCXByb3RvY29sX3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlz dAkgICAqcHVibGljYXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJp bmFyeTsKIAlib29sCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggODY5NTkwMS4uMmM0ZWY5YiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5j bHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2lu Y2x1ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5o IgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5o IgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYg ZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNF UlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFO R0VfREVMRVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJf QlVGRkVSX0NIQU5HRV9NRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJ T04sCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYg KzEzMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAg ICptZXNzYWdlOwogCQl9CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QK KwkJeworCQkJY2hhcgkgICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hh cgkgICAqbWVzc2FnZTsKKwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQlj bWR0eXBlOworCQl9CQkJZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0 aW9uID09ICpfSU5URVJOQUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAg LTQzNSw2ICs0NDgsMTYgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikg KFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBz eiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2Fs bGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2Fn ZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAg Y29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkg ICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJ CQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxs YmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBh cmVDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAq dHhuKTsKQEAgLTUwMSw2ICs1MjQsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0 cmVhbU1lc3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBz eiwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBt ZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZl clN0cmVhbURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAor CQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVj UHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVz c2FnZSk7CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVk ZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAg IFJlb3JkZXJCdWZmZXIgKnJiLApAQCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVm ZmVyCiAJUmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9y ZGVyQnVmZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2Fn ZTsKKwlSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENh bGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVw YXJlIHRpbWUuCkBAIC01NzEsNiArNjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9y ZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3Ry ZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNC IHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFt X2RkbG1lc3NhZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5j YXRlOwogCiAJLyoKQEAgLTY0Niw2ICs2ODIsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVy UXVldWVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLAogZXh0ZXJuIHZvaWQg UmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQs IFNuYXBzaG90IHNuYXBzaG90LCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFu c2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1 ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxz biwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJ CQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVm ZmVyICosIFRyYW5zYWN0aW9uSWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExv Z1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3Jp Z2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQKaW5kZXggYTdmNTcwMC4uYmZjNzNjMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0CkBAIC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3Mp CiAKIFxkUnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1Y2guc3Vic2Ny aXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBl NmUwODJkLi42ZDFiNzQzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50 IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAg ICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0 ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJf ZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisg ICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxk UnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAg IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0t IGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJs aWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgQUxMIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2No ZW1hczoKQEAgLTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxk IGJlIGFibGUgdG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0 IHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3J0YWJsZSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QiCiAKQEAgLTEzNCwxMCArMTM0LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRl c3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUg YWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRS cCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJf dGVzdC50ZXN0cHViX25vcGsiCiAKQEAgLTE1OSwxMCArMTU5LDEwIEBAIFB1YmxpY2F0aW9uczoK ICAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVz Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFs bHRhYmxlcwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxs dGFibGVzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7 CkBAIC0xNzQsMTkgKzE3NCwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRB QkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUg T05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVz dHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJw dWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogCkBAIC0yMDcsMTAgKzIwNywxMCBAQCBVUERBVEUg dGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBi ZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9ycGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3Rw dWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfcGFydGVkIgogCkBAIC0yMjUsMTAgKzIyNSwxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3Bh cnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3Bh cnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VU IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3Jw YXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IHQgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0 ZWQiCiAKQEAgLTI1NywxMCArMjU3LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VS Uk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90 YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAo cHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0 ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFO RCAoZCA8IDUpKQpAQCAtMjczLDEwICsyNzMsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBB TkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAo KGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI5MiwxMCArMjkyLDEwIEBAIFB1 YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0 cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgo ZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzAzLDEwICszMDMsMTAgQEAgVGFibGVzOgog LS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAo YW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VU IFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJw KyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMi IFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzM5LDEwICszMzksMTAgQEAg U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZf dGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3Rw dWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNTIsMTAgKzM1MiwxMCBAQCBTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9z eW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0 cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBS RVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3Rw dWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAtNjc4LDEw ICs2NzgsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1 Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3Ri bDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTgyMywxMCArODIz LDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGlu dCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2Jv dGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQURE IFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxk UnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEp CiAKQEAgLTEwMzEsMTAgKzEwMzEsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90Ymwx IiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJS T1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0 ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3Rw dWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEwNzIsMTAgKzEwNzIsMTAg QEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9k ZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf ZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9w ayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNTMsMTAgKzExNTMsMTAgQEAgUkVW T0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJf dGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAt LSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTE2NiwyMCArMTE2Niwy MCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0 CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBU TyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtl ZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUg VE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9X TkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJs aWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBh bmQgdGFibGVzCkBAIC0xMTk1LDE5ICsxMTk1LDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9T Q0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2Vz ID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIEFM TCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyMjEsNDQgKzEyMjEsNDQgQEAgQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg IkNVUlJFTlRfU0NIRU1BIiwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZP UiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VS UkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1Ymxp YyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJDVVJSRU5U X1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTI5MiwxMCArMTI5MiwxMCBAQCBFUlJPUjog IHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcgdGhlIHNj aGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9QIFNDSEVN QSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTMwMywyMCArMTMwMywyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRF UiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1B IHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMyNCwxMCArMTMyNCwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMz NiwxMCArMTMzNiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRf c2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4 aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM0OCwx MCArMTM0OCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJP UjogIHNjaGVtYSAicHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAi dGVzdHB1YjFfZm9yc2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90 ZXN0MiIKQEAgLTEzNTksMTAgKzEzNTksMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFs dGVyIHB1YmxpY2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIApAQCAtMTM3MCwxMCArMTM3MCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hl bWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90 ZXN0MiIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAKQEAgLTEzODEsMjkgKzEzODEsMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NI RU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3Nj aGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9w IGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBB TEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24gc2V0IG11 bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBB TEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDEyLDEwICsxNDEyLDEwIEBAIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VU IEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVt YSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVi X3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI0LDEwICsxNDI0LDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTUwNiwx OCArMTUwNiwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQog CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTI3LDIw ICsxNTI3LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJs ZSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxCiBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBBTEwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6Ci0tIAoxLjguMy4xCgo= --00000000000093c3cd05e75b2f40 Content-Type: application/octet-stream; name="v19-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v19-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7ed8awn3 RnJvbSAwOWQyYTQ5MGNmM2I4NTM2MDA0YTkyYjFkMGE0Y2Y5MDhkYjg2YmQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgMjggQXVnIDIwMjIgMjM6NTI6MzIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOSA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlv bi5wbCB8IDQ2NSArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjZkY2IwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9k ZGxfcmVwbGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3Rz IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwg PSAiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFy LCB2YWx1ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGRkbCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15 cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZSwgZGRsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUg dGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJl aW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0g MCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4g KCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgy LCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBE Uk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBB TFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUg ZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUu Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0 Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0 LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBk b24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5n IHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAg c3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVy ciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24g XCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1Ag Tk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVm b3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1 bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQi KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsn KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citp cygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwg Q2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ TkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRh dGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxl IGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dF RCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJs ZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dl ZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEg dG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2 ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2Nl ZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0 ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0 IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlk IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVS RSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0 aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0 aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50 cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51 bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNv bnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCBy ZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2Ft ZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hl Y2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3 aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVz IHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZ Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdi YXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcg Z2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAo JzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1 c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBS SU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZF UlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJs ZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRF IHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hv dWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBG Uk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0 ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9U IERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0 bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVS UkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBu YW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNo ZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRl IGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7 CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBj aGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZl bHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRl ZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFn ZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBn X2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEg dGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMg Zm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0 YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOwor JHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3Bh Y2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNl ZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFz ZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBM T0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRi bHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQ RSBteXR5cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx LCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJM RSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlw ZSBBUyBFTlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCduZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBP RiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhf cmFuZ2UgQVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1p KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwg ZmxvYXQ4X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJpbnNlcnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2Uz JykpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICog ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRF IFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNF IERBVEEgVFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZV TkNUSU9OIGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGlu JworICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElP TiBpbnQ0Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0Jwor ICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQy ICgKKyAgIGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRw dXQgPSBpbnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAor ICAgcGFzc2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VS VCBJTlRPIHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0Miks ICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERM IHJlcGxpY2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwor JG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjEuOC4zLjEKCg== --00000000000093c3cd05e75b2f40 Content-Type: application/octet-stream; name="v19-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v19-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7ed8awc0 RnJvbSBkNDA2ZDAyMzhkYjEzMjA2MmMyMjgyNTExZmYzMjM2OTAxNDRmNzc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgMjggQXVnIDIwMjIgMjM6Mjg6MDIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYxOSAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCgooTm90ZSAjMSkgTm90ZSB0aGF0IHNvbWUgcmVjZW50bHkgaW50cm9k dWNlZCBERExzKGUuZy4gRERMcyByZWxhdGVkIHRvClBBUlRJVElPTkVEIFRBQkxFKSBhcmUgdW5z dXBwb3J0ZWQuIFdlIGNhbiBleHRlbmQgaXQgYXMgd2UgbmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkg Zm9yIERETCByZXBsaWNhdGlvbi4KCihOb3RlICMyKSBOb3RlIHRoYXQsIGZvciBBVFRBQ0gvREVU QUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgpzdWJzY3JpYmVy IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gcHVibGlzaGVyIGlzIGEgUEFS VElUSU9ORUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0YWJsZSBvbiBzdWJjcmliZXIgc2lkZSBp cyBOT1JNQUwgdGFibGUuIFdlIHdpbGwKcmVzZWFyY2ggdGhpcyBtb3JlIGFuZCBpbXByb3ZlIHRo aXMgbGF0ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAgfCAgICAy ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgIHwgNjQ5NSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24u YyAgICAgfCAgNzYzICsrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgICAgIHwg ICAzMyArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyB8ICAgIDMgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgICAgIHwgICA1MiArCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMgICB8ICAxNDkgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQgICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAg ICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgfCAgIDIzICsK IHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggIHwgICAgMSArCiBzcmMvaW5jbHVk ZS91dGlscy9idWlsdGlucy5oICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcnVs ZXV0aWxzLmggICAgICAgfCAgIDEzICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgIHwgICAgNCArCiAxNCBmaWxlcyBjaGFuZ2VkLCA3NDc3IGluc2VydGlvbnMoKyksIDcwIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4Li4xNzFkZmIyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtl ZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAljcmVhdGVhcy5v IFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29uLm8gXAogCWRl ZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZmMjA3MgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTAs MCArMSw2NDk1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5jCisg KgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGluZS1wYXJz ZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUg SlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAqIGxhdGVy IGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmlu dGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5IHJlcGxh Y2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNoIG9mIHRo ZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0 ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBp cyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQg Y29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICogZXRjKSBs b29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICogSURFTlRJRklDQVRJT04KKyAq CSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBh cnNlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxl LmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1l c3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nv bnZlcnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29w Y2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVt LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90 YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5o IgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRl L3Jld3JpdGVIYW5kbGVyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0 aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9y dWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQg bGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VT VElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNP TkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4g b2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0eXBlZGVmIGVudW0K K3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5 cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVj dAorfSBPYmpUeXBlOworCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xpc3RfaGVhZAlw YXJhbXM7CisJaW50CQkJbnVtUGFyYW1zOworCVN0cmluZ0luZm8JZm10aW5mbzsKKwlib29sCQlw cmVzZW50OworfSBPYmpUcmVlOworCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJY2hhcgkg ICAqbmFtZTsKKwlPYmpUeXBlCQlvYmp0eXBlOworCisJdW5pb24KKwl7CisJCWJvb2wJCWJvb2xl YW47CisJCWNoYXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0OAkJZmx0 OworCQlPYmpUcmVlCSAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0gdmFsdWU7CisJ c2xpc3Rfbm9kZQlub2RlOworfSBPYmpFbGVtOworCitib29sIHZlcmJvc2UgPSB0cnVlOworCitz dGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUs IExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgZmxvYXQ4IHZhbHVlKTsKK3N0YXRpYyB2 b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lKTsKK3N0YXRp YyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIE9i alRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJp bmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJl bWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0aWMgdm9pZCBh cHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1 ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMy IHR5cGVtb2QsCisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5 cGVtb2RzdHIsCisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rp b25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3 X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9iakVsZW0gKm5ld19v YmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJl ZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgT2JqRWxlbSAqbmV3X3N0 cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOworc3RhdGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9f anNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpOworc3RhdGlj IHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJCQkJ IGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCQkJ CSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJ CQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3RhdGljIGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1u RGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJCQkgIExpc3Qg KmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJpbmdpZnlf b2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpOworCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3Np dGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipl eHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVs aWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOworc3RhdGljIE9i alRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQpOworc3RhdGljIE9ialRyZWUg KmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNo YXIgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29t bWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25z KEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNs ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlk LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFf UmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBh cmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5 cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9BbmFseXplKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlv bnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVs YXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJ CQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOworCisvKiBBcHBlbmQgYW4gYXJy YXkgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9hcnJheV9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpCit7CisJT2JqRWxl bQkqcGFyYW07CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlp ZiAobGlzdF9sZW5ndGgoYXJyYXkpID09IDApCisJCXJldHVybjsKKworCWlmICghdmVyYm9zZSkK Kwl7CisJCUxpc3RDZWxsICpsYzsKKworCQkvKiBFeHRyYWN0IHRoZSBPYmpFbGVtcyB3aG9zZSBw cmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJT2Jq RWxlbSAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChlbGVtLT5v Ymp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBlID09IE9ialR5 cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2VudCAmJgorCQkJ CWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZvcmVhY2hfZGVs ZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJb2JqZWN0X25hbWUgPSBhcHBl bmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5l d19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5 ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyog QXBwZW5kIGEgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBw ZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUp Cit7CisJT2JqRWxlbSAgKnBhcmFtOworCWNoYXIJICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJ Ym9vbAkgIGlzX3ByZXNlbnRfZmxhZyA9IGZhbHNlOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJ LyogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMgcGFydCBvZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQg c3RvcmUgdGhlIGJvb2xlYW4gdmFsdWUqLworCWlmIChzdHJjbXAoc3ViX2ZtdCwgInByZXNlbnQi KSA9PSAwKQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJlZS0+cHJlc2VudCA9 IHZhbHVlOworCX0KKworCWlmICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2VudCkKKwkJcmV0dXJu OworCisJaWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0 KE9ialR5cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJvb2xlYW4gPSB2YWx1 ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBw ZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBl bmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1 ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFz c2VydChzdWJfZm10KTsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRf c3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVGbG9h dCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJl bWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIHRoZSBpbnB1dCBm b3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zv cm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlpbnQJCQkJbGVu OworCWNoYXIJCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCWxlbiA9IHRyZWUtPmZtdGluZm8t PmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobGVuID4g MCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKHRyZWUt PmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyh0cmVlLT5mbXRpbmZvLCBz dWJfZm10KTsKK30KKworLyogQXBwZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQp Cit7CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZl cmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3Jt YXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUs IG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qIEFwcGVuZCBh biBvYmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9vYmpl Y3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKQor eworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3Vi X2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1cm47CisK KwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJf Zm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3RfbmFtZSk7 CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0 cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdoaWNoIGlz IGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxlIHN0cmlu Zy4gQW5kIGFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAq Lworc3RhdGljIGNoYXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEJb2JqZWN0X25hbWU7CisJ Y29uc3QgY2hhcgkgICAqZW5kX3B0cjsKKwljb25zdCBjaGFyCSAgICpjcDsKKwlib29sCQkJc3Rh cnRfY29weSA9IGZhbHNlOworCisJaWYgKHN1Yl9mbXQgPT0gTlVMTCB8fCB0cmVlLT5mbXRpbmZv ID09IE5VTEwpCisJCXJldHVybiBzdWJfZm10OworCisJaW5pdFN0cmluZ0luZm8oJm9iamVjdF9u YW1lKTsKKwllbmRfcHRyID0gc3ViX2ZtdCArIHN0cmxlbihzdWJfZm10KTsKKworCWZvciAoY3Ag PSBzdWJfZm10OyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQlpZiAoKmNwID09ICd7JykKKwkJ eworCQkJc3RhcnRfY29weSA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3Rh cnRfY29weSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqY3AgPT0gJzonIHx8ICpjcCA9PSAnfScp CisJCQlicmVhazsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZvYmplY3RfbmFtZSwg KmNwKTsKKwl9CisKKwlpZiAob2JqZWN0X25hbWUubGVuID09IDApCisJCWVsb2coRVJST1IsICJv YmplY3QgbmFtZSBub3QgZm91bmQiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1 Yl9mbXQpOworCisJcmV0dXJuIG9iamVjdF9uYW1lLmRhdGE7Cit9CisKKy8qIEFwcGVuZCBhIHBy ZWFsbG9jYXRlZCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2Fw cGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKQoreworCXNs aXN0X3B1c2hfaGVhZCgmdHJlZS0+cGFyYW1zLCAmZWxlbS0+bm9kZSk7CisJdHJlZS0+bnVtUGFy YW1zKys7Cit9CisKKy8qIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitz dGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3Vi X2ZtdCwgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJY2hhcgkgICAqb2Jq ZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZhbHVl ID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1l ID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFy YW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFs dWUuc3RyaW5nID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSBy ZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgorICogLSBu c3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0eXBlcyB3 aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFsaWRPaWQ7 IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFsaWZ5IHRoZSBuYW1l IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNlLgorICoKKyAqIC0g dHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwgd2l0aG91dCBxdW90ZXMKKyAqCisgKiAt IHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5nIHdp dGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVzdCBi ZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0aGVp ciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2YgdHlw ZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF90 eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNw aWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGFy cmF5KQoreworCUhlYXBUdXBsZQkJdHVwbGU7CisJRm9ybV9wZ190eXBlCXR5cGVmb3JtOworCU9p ZAkJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lE LCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0 eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7 CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJsZSBsZW5ndGgpIGFy cmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkgdHlwZXMgc3VjaCBh cyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLworCWFycmF5X2Jhc2Vf dHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGFycmF5ID0gKElzVHJ1ZUFycmF5VHlw ZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RPUkFHRV9QTEFJTik7 CisKKwlpZiAoKnR5cGFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhl IGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBs ZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2Vf dHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZv cm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5 X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMg d2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBtb2QgYXQgdGhl IG1pZGRsZSBvZiBuYW1lKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUgem9uZSApLiBXZSBjYW5ub3QK KwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRo ZXNlIGNhc2VzLgorCSAqLworCWlmICh0eXBlX29pZCA9PSBJTlRFUlZBTE9JRCB8fAorCQl0eXBl X29pZCA9PSBUSU1FU1RBTVBPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QVFpPSUQgfHwK KwkJdHlwZV9vaWQgPT0gVElNRU9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FVFpPSUQpCisJewor CQlzd2l0Y2ggKHR5cGVfb2lkKQorCQl7CisJCQljYXNlIElOVEVSVkFMT0lEOgorCQkJCSp0eXBu YW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1Q VFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJ TUVTVEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBX SVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJU SU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJCSp0eXBu YW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVUWk9J RDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSBX SVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlz IGFkZGVkIGJ5IHR5cG1vZGUuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FT0lEOgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElN RSIpOworCQkJCWJyZWFrOworCQl9CisJCSpuc3BpZCA9IEludmFsaWRPaWQ7CisJfQorCWVsc2UK Kwl7CisJCS8qCisJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBmb3Ig b3RoZXIgdHlwZXMsIHNvIGdldCB0aGUgdHlwZQorCQkgKiBuYW1lIGFuZCBzY2hlbWEgZGlyZWN0 bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJICovCisJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1l c3BhY2U7CisJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5cGVmb3JtLT50eXBuYW1lKSk7 CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5cGVtb2RzdHIgPSBwcmludFR5cG1vZCgi IiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJZWxzZQorCQkqdHlwZW1vZHN0ciA9 IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKK30KKworLyoKKyAqIFJl dHVybiB0aGUgZGVmYXVsdHMgdmFsdWVzIG9mIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLCBhcyBh IGxpc3Qgb2YKKyAqIGRlcGFyc2VkIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgTGlzdCAqCitG dW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKQoreworCUxpc3QgICAqbm9k ZWRlZnM7CisJTGlzdCAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICpjZWxsOworCisJbm9k ZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhwcm9hcmdk ZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBMaXN0KSkKKwkJZWxvZyhFUlJPUiwgInBy b2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZWRlZnMp CisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsKKworCQlzdHJkZWZzID0gbGFw cGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVmLCBOSUwsIGZhbHNlLCBmYWxz ZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVlLgorICov CitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7 CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoK KwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDoK KwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoK KwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBl cnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBt YWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0 ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpu YW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpF bGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKwor CXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHBhcmFtZXRlciAq Lworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpCit7 CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwg TlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOwor fQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVy IHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWUoY2hhciAqZm10KQor eworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUp KTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBhcmFtcy0+cGFyYW1z KTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtlU3RyaW5nSW5mbygp OworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywgZm10KTsKKwl9CisK KwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAl e31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVsZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQg Im9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMg dG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAicGdfdGVtcCIuCisgKgorICogVGhlIGRp ZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBv YmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVudGlmaWVyIG9yIG5vdCwgd2hpY2gg aXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGluZQorICogY29uY2VybnMgaXRzZWxmIHdp dGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1bmN0aW9uLgorICovCitzdGF0aWMg T2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoT2lkIG5zcGlkLCBjaGFyICpuYW1l KQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFyCSAgICpuYW1lc3BhY2U7CisKKwlpZiAo aXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNwYWNlID0gcHN0cmR1cCgicGdfdGVt cCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKG5zcGlkKTsKKwor CXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkJICAic2NoZW1hbmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICJvYmpuYW1lIiwgT2JqVHlw ZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgor ICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLCB3aXRo IHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lkL29iaklkLgorICoKKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBP aWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCVJlbGF0aW9uCWNhdGFsb2c7 CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2JqbnNwOworCURhdHVtCQlvYmpuYW1lOwor CUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0 ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29s CQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVt X29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJ ZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdldF9v YmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0 X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpuc3AgPSBoZWFwX2dldGF0dHIoY2F0 b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAg JmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBu YW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUs IFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNu dWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWUiKTsKKworCXF1YWxpZmll ZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJ CQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpuYW1lKSkpOworCXRhYmxlX2Nsb3Nl KGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisv KgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfdHlwZShPaWQgdHlwZUlkLCBpbnQzMiB0eXBt b2QpCit7CisJT2JqVHJlZQkqdHlwZVBhcmFtOworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJICAg KnR5cG5zcDsKKwljaGFyCSAgICp0eXBlbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9kc3Ry OworCWJvb2wJCXR5cGFycmF5OworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlkLCB0eXBt b2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZW5hbWUsICZ0eXBtb2RzdHIsICZ0eXBhcnJheSk7 CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3BpZCkpCisJCXR5cG5zcCA9IGdldF9uYW1lc3BhY2Vf bmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsKKwllbHNlCisJCXR5cG5zcCA9IHBzdHJkdXAoIiIpOwor CisJdHlwZVBhcmFtID0gbmV3X29ianRyZWVfVkEoTlVMTCwgNCwKKwkJCQkJCQkgICAic2NoZW1h bmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cG5zcCwKKwkJCQkJCQkgICAidHlwZW5hbWUiLCBPYmpU eXBlU3RyaW5nLCB0eXBlbmFtZSwKKwkJCQkJCQkgICAidHlwbW9kIiwgT2JqVHlwZVN0cmluZywg dHlwbW9kc3RyLAorCQkJCQkJCSAgICJ0eXBhcnJheSIsIE9ialR5cGVCb29sLCB0eXBhcnJheSk7 CisKKwlyZXR1cm4gdHlwZVBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0 IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisgKgor ICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVu dCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9m IGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChzdHJp bmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBs aWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFu Y2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmluZyBy ZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAqIE9i akVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4gIEVh Y2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVy IGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9kZXBh cnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBs dXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9ybWVk IGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9WQShj aGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSAgICp0cmVlOworCXZhX2xp c3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFu ZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBwcm9j ZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJZm9y IChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9ialR5 cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdzLCBj aGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3X29i amVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFtIHR5cGVz IHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2ggaXQgYW5k IGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVjdC4KKwkJ ICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBO dWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsK KwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhh cmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0t PnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlz dCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFs dWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9i alR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91YmxlKTsK KwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1ZS5vYmpl Y3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0eXBlKTsK KwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJl ZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQorCisvKiBB bGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfc3Ry aW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFzc2Vy dCh2YWx1ZSk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVMTCk7CisJ cGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgor ICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBp bnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJl ZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0 cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYgKHRyZWUt PmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCB0aGUga2V5IGZpcnN0ICov CisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0gImZtdCI7CisJ a2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7CisJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJvY2VzcyB0aGUg cHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmluZzsKKwl2YWwu dmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisJdmFsLnZhbC5zdHJpbmcudmFs ID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxV RSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBKU09OQiByZXByZXNlbnRhdGlvbiBmcm9t IGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29uYiAqCitvYmp0cmVlX3RvX2pzb25iKE9ialRy ZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwl2YWx1ZSA9IG9ianRyZWVfdG9f anNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYih2YWx1ZSk7 Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmI6IHByb2Nlc3MgYW4gaW5k aXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0IG9yCisgKiBhbiBhcnJheSBpbnRvIHRoZSBv dXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX3RvX2pzb25iX2Vs ZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAorCQkJCQkJIEpz b25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQoreworCUxpc3RDZWxsICAgKmNlbGw7CisJSnNv bmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT2Jq VHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlU3RyaW5n OgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4gPSBzdHJs ZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0gb2JqZWN0 LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50eXBlID0g amJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0 TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlv YmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90 b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCXZhbC50 eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURh dHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAorCQkJCQkJ CQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJvb2w6CisJ CQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3QtPnZhbHVl LmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZlbHkgYWRk IHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9ianRyZWVf dG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVhazsKKwor CQljYXNlIE9ialR5cGVBcnJheToKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X0FSUkFZLCBOVUxMKTsKKwkJCWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJ CXsKKwkJCQlPYmpFbGVtICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0cmVlX3Rv X2pzb25iX2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1c2hKc29u YlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVj dC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVy IGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVl X3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQorewor CXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09C SkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVl KTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0J Km9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpz b25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9 IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7 CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFj Y29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUs IG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVB VEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBP SUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0g dG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1 cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVz LCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0 cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29u c3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7 CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2Fu OworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlCSpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBt YXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFs aWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFs bCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJ Y29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7 CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZrZXksCisJ CQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJ CQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2ggY29u c3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIEluCisJ ICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0 aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRpY2F0 ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4K KwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQo c2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJICAg KmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVD VCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQljYXNl IENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJLyogbm90IGhlcmUgKi8K KwkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFyeSBrZXki OworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250eXBlID0g InVuaXF1ZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVFJJR0dFUjoKKwkJCQlj b250eXBlID0gInRyaWdnZXIiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xV U0lPTjoKKwkJCQljb250eXBlID0gImV4Y2x1c2lvbiI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29uc3RyYWludCB0eXBlIik7CisJCX0K KworCQkvKgorCQkgKiAidHlwZSIgYW5kICJjb250eXBlIiBhcmUgbm90IHBhcnQgb2YgdGhlIHBy aW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUKKwkJICogdXNlZnVsIHRvIHByb2dyYW1tYXRpY2FsbHkg ZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBjb2x1bW5zIGFuZCBhbW9uZworCQkgKiBkaWZmZXJlbnQg Y29uc3RyYWludCB0eXBlcy4KKwkJICoKKwkJICogWFhYIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBh bHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1lcyBpbiBhIFBLLCBldGMuCisJCSAqLworCQljb25zdHIg PSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsCisJ CQkJCQkJCTQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbnN0cmFpbnQiLAor CQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcsIGNvbnR5cGUsCisJCQkJCQkJCSJuYW1l IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJCQkJCQkJ ImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVu ZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlv biwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91bnQgb2YgY29k ZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1dAorICogY29u dHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNlZW0gd29ydGgg a2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQKK3BnX2dldF9pbmRl eGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJ CQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJ CQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKQoreworCUhl YXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVwbGUJaHRfYW07 CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxyZWM7CisJRm9y bV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxpc3QJICAgKmlu ZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpjb250ZXh0Owor CU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xsRGF0dW07CisJ RGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOworCWJvb2wJCWlz bnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7 CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmluaXRpb25CdWY7 CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBp bmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJ ZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhy ZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOworCisJ aW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlkeHJl Yy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNzLCBh bmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kY29s bGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0gKG9p ZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNzRGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9w Z19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNsYXNz ID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlpbmRv cHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsK KwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0 dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJl bGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0 SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJl bCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIs IGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRf aWR4cmVsKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2FtIHR1cGxlIG9mIHRoZSBpbmRleCcg YWNjZXNzIG1ldGhvZAorCSAqLworCWh0X2FtID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmpl Y3RJZEdldERhdHVtKGlkeHJlbHJlYy0+cmVsYW0pKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo aHRfYW0pKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1l dGhvZCAldSIsCisJCQkgaWR4cmVscmVjLT5yZWxhbSk7CisJYW1yZWMgPSAoRm9ybV9wZ19hbSkg R0VUU1RSVUNUKGh0X2FtKTsKKworCS8qCisJICogR2V0IHRoZSBpbmRleCBleHByZXNzaW9ucywg aWYgYW55LiAgKE5PVEU6IHdlIGRvIG5vdCB1c2UgdGhlIHJlbGNhY2hlCisJICogdmVyc2lvbnMg b2YgdGhlIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGUsIGJlY2F1c2Ugd2Ugd2FudCB0byBkaXNw bGF5CisJICogbm9uLWNvbnN0LWZvbGRlZCBleHByZXNzaW9ucy4pCisJICovCisJaWYgKCFoZWFw X2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsIE5VTEwpKQorCXsKKwkJ RGF0dW0JCWV4cHJzRGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqZXhwcnNTdHJp bmc7CisKKwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgs CisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCgh aXNudWxsKTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0p OworCQlpbmRleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBm cmVlKGV4cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4 cHJfaXRlbSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250 ZXh0X2ZvcihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5n SW5mbygmZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhf YW0gPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOwor CisJLyogRmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdl dEluZGV4QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5k ZXggZGVmaW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5 CisJICogY2FsbGVyLgorCSAqLworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJlYy0+aW5k bmF0dHM7IGtleW5vKyspCisJeworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+aW5ka2V5 LnZhbHVlc1trZXlub107CisJCWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1trZXlub107 CisJCU9pZAkJCWtleWNvbHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJT2lkCQkJ aW5kY29sbDsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBrZXlu byA9PSAwID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJCS8qIFNp bXBsZSBpbmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAgKmF0dG5hbWU7CisJCQlpbnQzMgkJa2V5 Y29sdHlwbW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoaW5kcmVsaWQsIGF0dG51bSwg ZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgcXVvdGVf aWRlbnRpZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoaW5kcmVsaWQs IGF0dG51bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwgJmtleWNvbHR5cG1vZCwKKwkJCQkJCQkJ ICAma2V5Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEV4cHJlc3Npb25h bCBpbmRleCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7CisJCQljaGFyCSAgICpzdHI7CisKKwkJ CWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAidG9vIGZldyBlbnRy aWVzIGluIGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4a2V5ID0gKE5vZGUgKikgbGZpcnN0KGlu ZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChpbmRleHBycywgaW5kZXhwcl9p dGVtKTsKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRl eGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMgaWYgaXQn cyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJc0EoaW5k ZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9y bWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVm aW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5cGUoaW5k ZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtleSk7CisJ CX0KKworCQkvKiBBZGQgY29sbGF0aW9uLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaW5kY29sbCA9 IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJaWYgKE9pZElzVmFsaWQoaW5kY29sbCkp CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMiLAorCQkJ CQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkvKiBBZGQgdGhl IG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlnZXRfb3BjbGFzc19u YW1lKGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBJbnZhbGlkT2lkLCAmZGVmaW5pdGlvbkJ1Zik7 CisKKwkJLyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJaWYgKGFtcm91dGluZS0+YW1j YW5vcmRlcikKKwkJeworCQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywgcmVwb3J0 IERFU0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVTQykKKwkJ CXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERFU0MiKTsK KwkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8KKwkJCQlp ZiAoIShvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIEZJUlNUIik7CisJCQl9CisJCX0K KworCQkvKiBYWFggZXhjbHVkZU9wcyB0aGluZ3kgd2FzIGhlcmU7IGRvIHdlIG5lZWQgYW55dGhp bmc/ICovCisJfQorCSpkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJLyogT3V0 cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9ucyhpbmRl eHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0YmxzcGM7 CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlpZiAoT2lk SXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZp ZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJCWVsc2UKKwkJCSp0YWJsZXNwYWNl ID0gTlVMTDsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkgKi8KKwlp ZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkK Kwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWJvb2wJCWlzbnVs bDsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQkvKiBDb252ZXJ0IHRleHQgc3RyaW5nIHRv IG5vZGUgdHJlZSAqLworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwg aHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRwcmVkLCAmaXNudWxsKTsKKwkJQXNz ZXJ0KCFpc251bGwpOworCQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwcmVkRGF0 dW0pOworCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKHByZWRTdHJpbmcpOworCQlwZnJl ZShwcmVkU3RyaW5nKTsKKworCQkvKiBEZXBhcnNlICovCisJCSp3aGVyZUNsYXVzZSA9CisJCQlk ZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisJZWxz ZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyogQ2xlYW4gdXAgKi8KKwlSZWxlYXNlU3lz Q2FjaGUoaHRfaWR4KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4cmVsKTsKKwlSZWxlYXNlU3lz Q2FjaGUoaHRfYW0pOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZh bHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBDYWxs ZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitzdGF0aWMg Y2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVy IGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQoreworCU5vZGUg KmRlZnZhbDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVs dChyZWwsIGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBkcGNv bnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZvciBs YXRlciByZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhwcnMg PSBsYXBwZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisg KiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9uIGZvciB0aGUg Z2l2ZW4gdGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFydGl0aW9uQm91 bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91bmREYXR1bTsK Kwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBTZWFyY2hTeXND YWNoZTEoUkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwKKwkJCSBy ZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJ CQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251bGwpOwor CisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkg ICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1bSkpLAor CQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJu IFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogUmV0dXJuIHRoZSBn aXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgor c3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQoreworCXN3aXRjaCAob2JqdHlw ZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVHQVRFIjsK KwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JKRUNUX0NP TFVNTjoKKwkJCXJldHVybiAiQ09MVU1OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJ cmV0dXJuICJDT0xMQVRJT04iOworCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQkJcmV0dXJu ICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCQlyZXR1cm4gIkRBVEFC QVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJcmV0dXJuICJET01BSU4iOworCQljYXNl IE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJuICJFVkVOVCBUUklHR0VSIjsKKwkJY2Fz ZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJFWFRFTlNJT04iOworCQljYXNlIE9CSkVD VF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJY2FzZSBPQkpFQ1Rf Rk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gIlNFUlZFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJ R05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFCTEUiOworCQljYXNlIE9CSkVDVF9GVU5D VElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJCXJl dHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCXJldHVybiAiTEFOR1VB R0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCXJldHVybiAiTEFSR0UgT0JKRUNU IjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJldHVybiAiTUFURVJJQUxJWkVEIFZJRVci OworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0dXJuICJPUEVSQVRPUiBDTEFTUyI7CisJ CWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuICJPUEVSQVRPUiI7CisJCWNhc2UgT0JK RUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRPUiBGQU1JTFkiOworCQljYXNlIE9CSkVD VF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVy biAiUlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJ Y2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpF Q1RfVEFCTEU6CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToK KwkJCXJldHVybiAiVEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1 cm4gIlRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4g IlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJ R19NQVBQSU5HOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkci OworCQkqLworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VB UkNIIERJQ1RJT05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVY VCBTRUFSQ0ggUEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAi VEVYVCBTRUFSQ0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJU WVBFIjsKKwkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJ TkciOworCQljYXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7 CisJfQorfQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09O IHJlcHJlc2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1 bGx5LCBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFj ZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNv bihQR19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0 ZWRDb21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOwor CisJY29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAo Y29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChDU3RyaW5nR2V0VGV4dERhdHVtKGNvbW1hbmQp KTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRnVu Y3Rpb25TdG10IChBTFRFUiBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBh bmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxv YiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQWx0ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlBbHRlckZ1bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRy ZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJGdW5jOworCU9ialRyZWUJICAgKnNpZ247CisJSGVhcFR1 cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFtcyA9 IE5JTDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJ CWk7CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0 aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFM VEVSIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAqLworCWFsdGVy RnVuYyA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJLyoKKwkgKiBB TFRFUiBGVU5DVElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0 YWxvZworCSAqIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChpID0gMDsgaSA8 IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAidHlwZSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWUoIiIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJIG9iamVjdElkKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRz OiwgfXMpIiwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7 c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7 CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVl CSAgICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xh dGlsaXR5IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoc3RyVmFsKGRl ZmVsLT5hcmcpLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJz dHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVm ZWwtPmFyZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJ CQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAo ZGVmZWwtPmRlZm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5F UiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09GIiA6ICJOT1Qg TEVBS1BST09GIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi Y29zdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29z dH1uIiwgMSwKKwkJCQkJCQkJICJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkgZGVmR2V0 TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InJvd3MiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDAp OworCQkJaWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0 X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVs KSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkK KwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVm ZWwtPmFyZzsKKwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7 CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5u YW1lLCB2YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vw cG9ydCIpID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQp OworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24n cyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhl IGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxP SUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJ CSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJ CQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJ CQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIgKmZtdCA9IHBzcHJpbnRm KCJQQVJBTExFTCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZShmbXQpOworCQl9CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyRnVuYywgIiV7 ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisK KwlyZXR1cm4gYWx0ZXJGdW5jOworfQorCisvKgorICogZGVwYXJzZSBhbiBBTFRFUiAuLi4gU0VU IFNDSEVNQSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2Jq ZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJ CQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkc2NoZW1hKQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3Rt dCAqbm9kZSA9IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ ICAgKmFsdGVyU3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisJY2hh cgkgICAqbmV3c2NoZW1hOworCWNoYXIJICAgKm9sZHNjaG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7 CisKKwluZXdzY2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVt YX1JCisJICovCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzIiwgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqZWN0VHlwZSkpOworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkv KgorCSAqIFNpbmNlIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhl IHBvaW50IG9mIHZpZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJu cyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAg VGhlIG91dHB1dCBvZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAq IHNjaGVtYSBuYW1lIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1lIG9mZiB0aGUg aWRlbnRpdHkgc3RyaW5nCisJICogYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVkIHNjaGVtYSBu YW1lLgorCSAqCisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdlIGRvIGJldHRl cj8KKwkgKi8KKwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7 CisJb2xkc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2JqZWN0SWQpOwor CWlmICghb2xkc2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHNjaGVtYSB3aXRoIE9JRCAldSIsCisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50 ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUpLAorCQkJCQkg aWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7CisJYXBwZW5k X3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiJXtpZGVudGl0eX1zIiwgaWRlbnQpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwg bmV3c2NoZW1hKTsKKworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9y U3RtdCAqbm9kZSA9IChBbHRlck9wZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJ ICAgKmFsdGVyb3A7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpj ZWxsOworCUxpc3QJCSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUx KE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9w ZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVy YXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBBTFRFUiBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRf dHlwZX1UKSBTRVQKKwkgKiAoJXtlbGVtczosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w ckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3By bmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJs ZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwll bHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJO T05FIik7CisKKwkvKiBSSUdIVEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9 VCkiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkp OworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKwor CQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+ b3BycmVzdCkpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsK KwkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7 CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5v cHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOwor CQl9CisKKwkJQXNzZXJ0KHRtcG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwg IlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7 CisKKwlyZXR1cm4gYWx0ZXJvcDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFU T1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAq YWx0ZXJPcEZhbTsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBT ZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21k LT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWls eSAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAo Rm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7 YW1uYW1lfUkgQUREL0RST1AKKwkgKiAle2l0ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJ CQkJCQkiVVNJTkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJ CQkJImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklM OworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5 TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJ LyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29w ZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0i LCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9y IG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5p c0Ryb3ApCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9 TyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRo ZSB0eXBlcyAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9S IFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJ CWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZh bGlkT2lkKQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwg IkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOwor CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVh Y2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAq cHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCki LCAzLAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJ CQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUo cHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8q IEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNu J3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJ cHJvY1R1cDsKKwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5 cGVzOworCQkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmpl Y3QpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsK KwkJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlw cm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAw OyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJn OworCisJCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsK KwkJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsK KwkJCX0KKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwK KwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBvYmosICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQor CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0K KworCWlmIChzdG10LT5pc0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0s ICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQURE Iik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBs aXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAu Li4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVj dEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpu b2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJT dG10OworCWNoYXIJCSAgICpmbXQ7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRl bnRpdHl9cyBPV05FUiBUTyAlJXtuZXdvd25lcn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5vYmplY3RUeXBlKSk7CisKKwlvd25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRP YmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIp KTsKKworCXJldHVybiBvd25lclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2Vx U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBt b2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIg Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9i alRyZWUJCSp0bXBvYmo7CisJUmVsYXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2Vf ZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJ c2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICop IHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRw dXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1 cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJ CXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQp OworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2sp OworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAg IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2Vx dHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ug JXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VU U1RSVUNUKHNlcXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVF TkNFIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJk X3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1E IiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVl KS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisJCU9iakVsZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJj YWNoZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2Vx Zm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3Jt LCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0s IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVs c2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxz ZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVm bmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3QoYWx0ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJ dGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBh IHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyVHlwZVNldFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3Rt dCAqYWx0ZXJUeXBlU2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSph bHRlclR5cGU7CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVh cFR1cGxlICAgdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3Jt X3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUo IkFMVEVSIFRZUEUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50 aXR5fUQgU0VUIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5 cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAq KSBsZmlyc3QocGwpOworCQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3Jh Z2UoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJl Y2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBl LCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1NlbmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1R5cGVfVHlwbW9kX0luKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAo ZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9UeXBtb2RfT3V0KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFs eXplKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJz dWJzY3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRl clR5cGUsIHR5cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9w dGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5l d2VsbSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0 aW9uOiB9cykiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVy biBhbHRlclR5cGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENS RUFURSBUWVBFIEFTKQorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0 ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5 cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl CSAgICpjb21wb3NpdGU7CisJSGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9y bTsKKwlSZWxhdGlvbgl0eXBlcmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0 YWJsZWVsdHMgPSBOSUw7CisKKwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRo ZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZ UEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHlwdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUg JXUiLCBvYmplY3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0 dXApOworCXR5cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NT aGFyZUxvY2spOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJl bCkpOworCisJY29tcG9zaXRlID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29tcG9zaXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IG9iamVjdElkKSk7CisKKwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJl bCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5v dCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVlKTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGNvbXBvc2l0ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJs ZWVsdHMpOworCisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxl YXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJldHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBjb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlG b3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7 CisKKwljb252cmVsID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwljb25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFu dW1fcGdfY29udmVyc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo Y29uVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNp b24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNp b24pIEdFVFNUUlVDVChjb25UdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJj ZX1MIFRPICV7ZGVzdH1MIAorCSAqIEZST00gJXtmdW5jdGlvbn1ECisJICovCisJY2NTdG10ID0g bmV3X29ianRyZWUoIkNSRUFURSIpOworCisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICov CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiZGVmYXVsdCIsCisJCQkJCQkgY29uRm9y bS0+Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCXRtcE9iaiA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2UsIE5hbWVTdHIoY29uRm9ybS0+Y29u bmFtZSkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkNPTlZFUlNJT04gJXtpZGVu dGl0eX1EIiwgdG1wT2JqKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJGT1IgJXtz b3VyY2V9TCIsIChjaGFyICopCisJCQkJCQkgcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5j b25mb3JlbmNvZGluZykpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIlRPICV7ZGVz dH1MIiwgKGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbnRv ZW5jb2RpbmcpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjY1N0bXQsICJGUk9NICV7ZnVuY3Rp b259RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxlX2Nsb3Nl KGNvbnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY2NTdG10OworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoKKyAq IEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1T dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1 ZXM7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWVudW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFU RSBUWVBFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXZhbHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGws IG5vZGUtPnZhbHMpCisJeworCQlTdHJpbmcgICAqdmFsID0gbGZpcnN0X25vZGUoU3RyaW5nLCBj ZWxsKTsKKworCQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3Ry VmFsKHZhbCkpKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGVudW10eXBlLCAiQVMgRU5V TSAoJXt2YWx1ZXM6LCB9TCkiLCB2YWx1ZXMpOworCXJldHVybiBlbnVtdHlwZTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZl biBhIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkgICAqcmFuZ2U7CisJT2JqVHJlZQkgICAqdG1wOwor CUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1 cGxlCXJhbmdlVHVwOworCUZvcm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtl eVsxXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdl UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAor CQkJCUFudW1fcGdfcmFuZ2Vfcm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBG X09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0 YWJsZV9iZWdpbnNjYW4ocGdfcmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJ CSAgTlVMTCwgMSwga2V5KTsKKworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcmFuZ2Ugd2l0aCB0eXBlIG9pZCAldSIsCisJCQkgb2JqZWN0SWQp OworCisJcmFuZ2VGb3JtID0gKEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisK KwlyYW5nZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCXRtcCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJhbmdlLCAiJXtpZGVudGl0eX1EIEFTIFJBTkdFIiwgdG1wKTsKKwor CS8qIFNVQlRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3VidHlwZSk7CisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlNVQlRZUEUgPSAle3R5cGV9RCIsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9i amVjdCwgdG1wKTsKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlk KHJhbmdlRm9ybS0+cm5nc3Vib3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChPcGVyYXRvckNsYXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+ cm5nc3Vib3BjKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7 b3BjbGFzc31EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJvcGNsYXNzIiwKKwkJCQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlk ZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwkvKiBDT0xMQVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nv bGxhdGlvbikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKTsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLAorCQkJCQkJ CSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJ CQkJICJjb2xsYXRpb24iLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFw cGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5P TklDQUwgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKTsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkNBTk9OSUNBTCA9ICV7Y2Fub25pY2FsfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwi LCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9u LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlp ZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICBy YW5nZUZvcm0tPnJuZ3N1YmRpZmYpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9E SUZGID0gJXtzdWJ0eXBlX2RpZmZ9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAic3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9i alR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmFuZ2Us ICIoJXtkZWZpbml0aW9uOiwgfXMpIiwgZGVmaW5pdGlvbik7CisKKwlzeXN0YWJsZV9lbmRzY2Fu KHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJl dHVybiByYW5nZTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisg KiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRlckVudW07CisKKwlhbHRlckVudW0gPQluZXdfb2Jq dHJlZV9WQSgiQUxURVIgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRW51 bSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5 cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYgKCFub2RlLT5v bGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckVudW0sICJBREQgVkFMVUUi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZl9ub3RfZXhpc3RzfXMi LAorCQkJCQkJCW5vZGUtPnNraXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIi KTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle3ZhbHVlfUwiLCBub2Rl LT5uZXdWYWwpOworCisJCWlmIChub2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXthZnRlcl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJ CW5vZGUtPm5ld1ZhbElzQWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtuZWlnaGJvdXJ9TCIsIG5vZGUtPm5ld1ZhbE5laWdo Ym9yKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVu dW0sICJSRU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFsKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtuZXd2YWx1ZX1MIiwKKwkJCQkJ CQkgbm9kZS0+bmV3VmFsKTsKKwl9CisKKwlyZXR1cm4gYWx0ZXJFbnVtOworfQorCisvKgorICog RGVwYXJzZSBhbiBDcmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBh bmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChDcmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRyZWU7CisJ UmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVwbGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nhc3QgY2Fz dEZvcm07CisJT2JqVHJlZQkgICAqY3JlYXRlQ2FzdDsKKwljaGFyCSAgICpjb250ZXh0OworCisJ Y2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ Y2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0 X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9wZ19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0 eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpICV7bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMKKwkgKi8K KwljcmVhdGVDYXN0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9 VCBBUyAle3RhcmdldHR5cGV9VCkiLAorCQkJCQkJCQkyLCAic291cmNldHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNl LCAtMSksCisJCQkJCQkJCSJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9k ZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlz bX1zIiwgIldJVEggSU5PVVQiKTsKKwllbHNlIGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEhPVVQg RlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisJCVN0cmluZ0lu Zm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zv cm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBj YXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0lu Zm8oJmZ1bmMsICIlcygiLAorCQkJCQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25h bWVzcGFjZV9uYW1lKGZ1bmNGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJICAgTmFt ZVN0cihmdW5jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZm9yIChpID0gMDsgaSA8IGZ1bmNGb3JtLT5w cm9uYXJnczsgaSsrKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJ ICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNb aV0pKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcpJyk7CisKKwkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJ CQkJICJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVDYXN0LCAiJXttZWNoYW5pc219cyIsIHRtcG9iaik7CisKKwkJ UmVsZWFzZVN5c0NhY2hlKGZ1bmNUdXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkK Kwl7CisJCWNhc2UgQ09FUkNJT05fSU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lU IjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0g IkFTIEFTU0lHTk1FTlQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJ CQljb250ZXh0ID0gIiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIGNvZXJjaW9uIGNvZGUgJWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxM OwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUNhc3QsICIle2NvbnRleHR9cyIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVDYXN0OworfQorCisvKgorICog RGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBzdWJjb21tYW5kcyBhbmQgcmV0dXJuIGFuIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclRhYmxlU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T2JqVHJlZQkgICAqYWx0ZXJUYWJsZVN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCU9ialRy ZWUJICAgKnRtcG9iajI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlM aXN0CSAgICpzdWJjbWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10 c3RyOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlz dAkgICAqZXhwcnMgPSBOSUw7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxl KTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4oY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQpOworCisJc3dpdGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lO RF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlw ZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJF TEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFr OworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsK KwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJ CWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6 CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBz dXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCByZWxraW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCX0K KworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIHJlbHR5cGUgJXtpZGVu dGl0eX1EICV7c3ViY21kczosIH1zCisJICovCisJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVz IiwgcmVsdHlwZSk7CisJYWx0ZXJUYWJsZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJ dG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3Bh Y2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKwor CWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3Rl ZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlB bHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsK KwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNt ZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENv bHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1uUmVjdXJzZToKKwkJCQkvKiBYWFggbmVlZCB0byBz ZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eoc3ViY21k LT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihyZWwsIGRw Y29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWYsIHRy dWUsICZleHBycyk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFERCAlcyAlJXtkZWZpbml0aW9u fXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVP YmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3Ry YWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7 CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhT dG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYm IGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4 T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4 CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90 eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICogJWluZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAl e2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8KKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkFERCBDT05TVFJBSU5UICV7bmFtZX1JIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIs IE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSk7CisKKwkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb25zdHJhaW50X3R5cGV9cyIsIGlzdG10 LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxF Iik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIlVTSU5HIElOREVYICV7aW5k ZXhfbmFtZX1JIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KSk7CisJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmZXJyYWJsZX1zIiwgaXN0bXQt PmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUi KTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpbml0X2RlZmVycmVkfXMi LCBpc3RtdC0+aW5pdGRlZmVycmVkID8KKwkJCQkJCQkJCQkgIklOSVRJQUxMWSBERUZFUlJFRCIg OiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlk eCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVB ZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9SZUFkZENv bW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRpb25zOgorCQkJCS8qIFN1YnR5cGVzIHVz ZWQgZm9yIGludGVybmFsIG9wZXJhdGlvbnM7IG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0FkZENvbHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1IgUkVQ TEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJewor CQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJP UCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBk ZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUxpc3QJICAgKmRwY29udGV4dDsKKwkJ CQkJSGVhcFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZBVUxU IiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAor CQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJ CQlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCksCisJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0cnR1 cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+ bmFtZSk7CisJCQkJCWF0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0 dXApKS0+YXR0bnVtOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmlu aXRpb259cyIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWwsIGF0dG5v LCBkcGNvbnRleHQsIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJ CX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIE5PVCBOVUxM IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwK KwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkgImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRHJvcEV4cHJlc3Npb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5n X29rID8gIklGIEVYSVNUUyI6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRT dGF0aXN0aWNzOgorCQkJCXsKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikp OworCQkJCQlpZiAoc3ViY21kLT5uYW1lKQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwK KwkJCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg c3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lLAorCQkJCQkJCQkJCQkgInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJ CQkJCQkJIGludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNlCisJCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4gU0VUIFNU QVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1 bW4iLCBPYmpUeXBlSW50ZWdlciwgc3ViY21kLT5udW0sCisJCQkJCQkJCQkJCSAic3RhdGlzdGlj cyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNt ZC0+ZGVmKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRPcHRpb25z OgorCQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkgIGRlcGFyc2VfQ29sdW1uU2V0T3B0aW9u cyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAz LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJCQkJ CQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJICJz dG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJj bWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgor CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04gJXtjb21w cmVzc2lvbl9tZXRob2R9cyIsCisJCQkJCQkJCQkgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJCWNhc2Ug QVRfRHJvcENvbHVtbjoKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtjb2x1bW59 SSIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRyb3AgY29sdW1uIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUi LCAxLAorCQkJCQkJCQkJICAicHJlc2VudCIsIE9ialR5cGVCb29sLCBzdWJjbWQtPmJlaGF2aW9y KTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIsIHRtcG9i ajIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJ CQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAg KmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJ CQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRl eFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJ CWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9IHJl bGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRp b25fY29uc3RyYWludF9vaWQoCisJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgaWR4 bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RS QUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9p ZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFU X0FkZENvbnN0cmFpbnRSZWN1cnNlOgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRo ZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3Vi LT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0 dXA7CisJCQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9ICBjYXN0 Tm9kZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBf dmFsaWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9J RCwgT2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlz VmFsaWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkv KiBGZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJ CQl2YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFu dW1fcGdfY29uc3RyYWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwp CisJCQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJ CQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJ CQkJCX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisK KwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7 ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRk IGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25z dHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShj b25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29u c3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVj dElkOworCQkJCQlDb25zdHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisK KwkJCQkJLyogSWYgbm8gY29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAq LworCQkJCQlpZiAoIU9pZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJ CUFzc2VydChJc0EoYywgQ29uc3RyYWludCkpOworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJy ZWR9cyIsCisJCQkJCQkJCQkJIDQsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdl dF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmVycmFibGUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBjLT5kZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDog Ik5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkgImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCSBjLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6 ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX1ZhbGlkYXRlQ29u c3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09OU1RSQUlO VCAle2NvbnN0cmFpbnR9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi dmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25z dHJhaW50UmVjdXJzZToKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkRST1AgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb25zdHJhaW50IiwKKwkJCQkJCQkJ CSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBlOgorCQkJCXsKKwkJCQkJVHVwbGVEZXNj IHR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRl IGF0dDsKKwkJCQkJQ29sdW1uRGVmCSAgICpkZWY7CisKKwkJCQkJYXR0ID0gJih0dXBkZXNjLT5h dHRyc1tzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQgLSAxXSk7CisJCQkJCWRlZiA9IChDb2x1bW5E ZWYgKikgc3ViY21kLT5kZWY7CisJCQkJCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKwor CQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBDb21wb3Np dGUgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJCQkJCSAq ICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIEFUVFJJQlVURSAle2Nhc2NhZGV9cworCQkJCQkg KgorCQkJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBTRVQgREFU QSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIENPTFVNTiAle3VzaW5n fXMKKwkJCQkJICovCisJCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtjb2x1bW59 SSBTRVQgREFUQSBUWVBFIiwKKwkJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09M VU1OIik7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJ CQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCQkvKiBBZGQg dGhlIFRZUEUgY2xhdXNlICovCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7 ZGF0YXR5cGV9VCIsCisJCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGF0dC0+YXR0dHlw aWQsCisJCQkJCQkJCQkJCQkJCQkgIGF0dC0+YXR0dHlwbW9kKSk7CisKKwkJCQkJLyogQWRkIGEg Q09MTEFURSBjbGF1c2UsIGlmIG5lZWRlZCAqLworCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUo IkNPTExBVEUiKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pKQorCQkJ CQl7CisJCQkJCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CSAgIGF0dC0+YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i ajIsICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmoyKTsKKworCQkJCQkv KiBJZiBub3QgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwkJCQkJ aWYgKCFpc3R5cGUpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJ TkcgY2xhdXNlLCB0cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAorCQkJCQkJICogcmFuIGl0IHRocm91 Z2ggdHJhbnNmb3JtRXhwciBhbmQgc3RvcmVkIHRoZQorCQkJCQkJICogcmVzdWx0aW5nIG5vZGUg aW4gY29va2VkX2RlZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhlcmUuCisJCQkJ CQkgKi8KKwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwkJCQkJCWlmIChk ZWYtPnJhd19kZWZhdWx0KQorCQkJCQkJeworCQkJCQkJCURhdHVtCWRlcGFyc2VkOworCQkJCQkJ CWNoYXIgICAqZGVmZXhwcjsKKworCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgZGVmLT5j b29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVmZXhwciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tl ZF9kZWZhdWx0KTsKKwkJCQkJCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0 X2V4cHIsCisJCQkJCQkJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJ CQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqMiwgIiV7ZXhwcmVzc2lvbn1zIiwKKwkJCQkJCQkJCQkJCSBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt1c2luZ31zIiwgdG1wb2JqMik7CisJCQkJCX0K KworCQkJCQkvKiBJZiBpdCdzIGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgQ0FTQ0FERSBjbGF1 c2UgKi8KKwkJCQkJaWYgKGlzdHlwZSkKKwkJCQkJeworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0 cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhhdmlvciAhPSBEUk9QX0NBU0NB REUpCisJCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2Up OworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBv YmoyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRPRE9MSVNU CisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wb2JqID0gZGVw YXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCSBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJCQkg Im93bmVyIiwgIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUoc3Vi Y21kLT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJPbjoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUkiLCAyLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJCQkJCQkJ ICJpbmRleCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNF VCBXSVRIT1VUIENMVVNURVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRM b2dnZWQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJz ZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lkczoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgT0lEUyIsIDEsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgb2lkcyIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhvZH1JIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1ldGhvZCIsCisJCQkJCQkJCQkg ImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAorCQkJCQkJCQkJICJ0YWJsZXNwYWNl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkgIGRl cGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIg JXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJs ZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzVHJpZzoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBUUklHR0VSICV7dHJpZ2dl cn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlz IHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdn ZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxp Y2EgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIsCisJCQkJ CQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdBbGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkVOQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRGlzYWJsZVRyaWdBbGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUg VFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2Fi bGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmln VXNlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIs IDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNl ciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnVXNlcjoKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRU5BQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3 YXlzUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBSVUxF ICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUg YWx3YXlzIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhUnVsZToKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVs ZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJESVNBQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRpc2FibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZElu aGVyaXQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJ CQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRy ZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9RCIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwKKwkJCQkJ CQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT0YgJXt0eXBlX29mfVQiLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBvZiIsCisJCQkJCQkJCQkgInR5cGVfb2YiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+YWRkcmVz cy5vYmplY3RJZCwgLTEpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2Y6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf UmVwbGljYUlkZW50aXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVBMSUNBIElE RU5USVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJyZXBsaWNhIGlk ZW50aXR5Iik7CisJCQkJc3dpdGNoICgoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5k ZWYpLT5pZGVudGl0eV90eXBlKQorCQkJCXsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0RF RkFVTFQ6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAi REVGQVVMVCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9GVUxM OgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIkZVTEwi KTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJOT1RISU5HIik7 CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lOREVYOgorCQkJCQkJ dG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAle2luZGV4fUkiLCAxLAorCQkJ CQkJCQkJCQkgICJpbmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCSAgKChSZXBsaWNh SWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCB0bXBvYmoyKTsKKwkJCQkJCWJyZWFrOworCQkJ CX0KKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dTZWN1cml0eToKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJvdyBzZWN1cml0eSIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSb3dTZWN1cml0eToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgcm93IHNlY3VyaXR5Iik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfR2VuZXJpY09wdGlvbnM6 CisJCQkJdG1wb2JqID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLCBO VUxMKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFUVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRp b25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYXR0 YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJ CQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK KwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtwYXJ0aXRpb25fYm91bmR9cyIs CisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9iamVj dElkKSk7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lk ZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBw YXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZToKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIEZJ TkFMSVpFIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkZXRhY2ggcGFy dGl0aW9uIGZpbmFsaXplIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKwkJCWNhc2UgQVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJCQlBdHRyTnVt YmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVlCSpzZXFkZWY7 CisJCQkJCUNvbHVtbkRlZiAgKmNvbGRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisK KwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIEFE RCAle2lkZW50aXR5X2NvbHVtbn1zIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJl bGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2Vx dWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYg PSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgZmFs c2UpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgImlkZW50aXR5X2NvbHVt biIsIHNlcWRlZik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRJZGVu dGl0eToKKwkJCQl7CisJCQkJCURlZkVsZW0JKmRlZmVsOworCQkJCQljaGFyCQlpZGVudGl0eSA9 IDA7CisJCQkJCU9ialRyZWUJICAgKnNlcWRlZjsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJ CQkJCU9pZAkJCXNlcV9yZWxpZDsKKworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCBpZGVudGl0eSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChzdWJjbWQtPmRlZikKKwkJCQkJeworCQkJCQkJ TGlzdAkgICAqZGVmID0gKExpc3QgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJCUFzc2VydChJc0Eo c3ViY21kLT5kZWYsIExpc3QpKTsKKworCQkJCQkJZGVmZWwgPSBsaW5pdGlhbF9ub2RlKERlZkVs ZW0sIGRlZik7CisJCQkJCQlpZGVudGl0eSA9IGRlZkdldEludDMyKGRlZmVsKTsKKwkJCQkJfQor CisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQt Pm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0 UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5J ZGVudGl0eShzZXFfcmVsaWQsIGlkZW50aXR5LCB0cnVlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIsIHNlcWRlZik7CisKKwkJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCWNhc2UgQVRfRHJvcElkZW50aXR5OgorCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIElERU5USVRZIiwgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGlkZW50aXR5IiwKKwkJCQkJCQkJ CSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJj bWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0 eXBlICVkIiwKKwkJCQkJIHN1YmNtZC0+c3VidHlwZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQkv KgorCQkgKiBXZSBkb24ndCBzdXBwb3J0IHJlcGxpY2F0aW5nIEFMVEVSIFRBQkxFIHdoaWNoIGNv bnRhaW5zIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9ucyBiZWNhdXNlIEl0J3MgcG9zc2libGUgdGhl IGZ1bmN0aW9ucyBjb250YWluIERETC9ETUwgaW4KKwkJICogd2hpY2ggY2FzZSB0aGVzZSBvcGVy dGlvbnMgd2lsbCBiZSBleGVjdXRlZCB0d2ljZSBhbmQgY2F1c2UKKwkJICogZHVwbGljYXRlIGRh dGEuIEluIGFkZGl0aW9uLCB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHRhYmxlcyBiZWluZwor CQkgKiBhY2Nlc3NlZCBieSB0aGVzZSBEREwvRE1MIGFyZSBwdWJsaXNoZWQgb3Igbm90LiBTbyBi bGluZGx5IGFsbG93aW5nCisJCSAqIHN1Y2ggZnVuY3Rpb25zIGNhbiBhbGxvdyB1bmludGVuZGVk IGNsYXVzZXMgbGlrZSB0aGUgdGFibGVzIGFjY2Vzc2VkCisJCSAqIGluIHRob3NlIGZ1bmN0aW9u cyBtYXkgbm90IGV2ZW4gZXhpc3Qgb24gdGhlIHN1YnNjcmliZXItc2lkZS4KKwkJICovCisJCWlm IChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCSBlcnJtc2coIkFMVEVSIFRBQkxFIGNvbW1hbmQgdXNpbmcgdm9sYXRpbGUgZnVuY3Rpb24g Y2Fubm90IGJlIHJlcGxpY2F0ZWQiKSkpOworCisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0IGFz IHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJlIGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9u LgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJzKTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJdGFi bGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNt ZHMpID09IDApCisJCXJldHVybiBOVUxMOworCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclRh YmxlU3RtdCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21kcyk7CisKKwlyZXR1cm4gYWx0ZXJUYWJs ZVN0bXQ7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5n LgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFyIChub24g dHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGluIHRo ZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAqIGNvbHVt biBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVzdCBiZSBl bWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlzIGluY29t cGxldGUgYW55d2F5LikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVm KFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJ CSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykKK3sKKwlP YmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCU9pZAkJCXJlbGlkID0g UmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlP aWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2Vs bDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0aW9u cyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1heWJlIGl0IGlzIHVzZWZ1bCB0 byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBzb21lIHN1Y2g/CisJICovCisJ aWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0dHJUdXAgPSBTZWFy Y2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUg ZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29s bmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1Qo YXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRu dW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNz aW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zCisJICogJXtjb2xsYXRpb259cworCSAqLwor CWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9VCIsIDMsCisJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5 cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCQkiY29sdHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1vZCkpOworCisJLyog VVNJTkcgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTVBSRVNTSU9OIik7CisJ aWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg IiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwllbHNlCisJ eworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wb2JqKTsK KworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlw Y29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CSAgIHR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFt ZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29s bGF0aW9ufXMiLCB0bXBvYmopOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJc2VxcmVs aWQgPSBJbnZhbGlkT2lkOworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlv biBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgY2Fubm90IHRydXN0CisJCSAqIHBnX2F0dHJp YnV0ZS5hdHRub3RudWxsIGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQgd2hlbgor CQkgKiBwcmltYXJ5IGtleXMgYXJlIHNwZWNpZmllZDsgYW5kIHdlIG11c3Qgbm90IGVtaXQgYSBO T1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0ZWx5 IHNwZWNpZmllZC4gIFRoZXJlZm9yZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBjb25zdHJh aW50cyBhdHRhY2hlZCB0byB0aGlzIGNvbHVtbiB0byBkZXRlcm1pbmUKKwkJICogd2hldGhlciB3 ZSBuZWVkIHRvIGVtaXQgYW55dGhpbmcuCisJCSAqIChGb3J0dW5hdGVseSwgTk9UIE5VTEwgY29u c3RyYWludHMgY2Fubm90IGJlIHRhYmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICogSW4gdGhl IEFMVEVSIFRBQkxFIGNhc2VzLCB3ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYg aXMKKwkJICogbWFya2VkIGlzX25vdF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwgPSBmYWxz ZTsKKwkJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlDb25zdHJh aW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChjb25z dHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCQkJc2F3X25vdG51bGwgPSB0cnVlOwor CQl9CisJCWlmIChpc19hbHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51 bGwgPSB0cnVlOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9 cyIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0bXBvYmog PSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJ eworCQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1 bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBl eHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwg ZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0 fXMiLCB0bXBvYmopOworCisJCS8qIElERU5USVRZIENPTFVNTiAqLworCQlpZiAoY29sZGVmLT5p ZGVudGl0eSkKKwkJeworCQkJT2lkCWF0dG5vID0gZ2V0X2F0dG51bShyZWxpZCwgY29sZGVmLT5j b2xuYW1lKTsKKwkJCXNlcXJlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0bm8s IGZhbHNlKTsKKwkJfQorCisJCXRtcG9iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVs aWQsIGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo Y29sdW1uLCAiJXtpZGVudGl0eV9jb2x1bW59cyIsIHRtcG9iaik7CisKKwkJLyogR0VORVJBVEVE IENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJHRU5FUkFURUQg QUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJB VEVEX1NUT1JFRCkKKwkJeworCQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlv bkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJ CSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29i amVjdF9vYmplY3QoY29sdW1uLCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBvYmopOworCX0K KworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8q CisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5nLgorICoKKyAqIERl cGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBjcmVhdGlvbi4JVGhp cyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1c2Ugd2UgZG9uJ3Qg aGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xhcmF0aW9uLAorICogY29sbGF0aW9uLCBvciBkZWZh dWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWlu ZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYs IGFueSBvdGhlciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9uLCBM aXN0ICpkcGNvbnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUJKmNvbHVtbiA9 IE5VTEw7CisJT2JqVHJlZQkqdG1wb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxp ZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0 ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRp b247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAg PSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg Y2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRl Zi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkv KgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2Vf Q29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNv bHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUg aXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxsID0gZmFs c2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWlu dCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChjb25zdHIt PmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsK KwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0 dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkgV0lUSCBP UFRJT05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cy4KKwkgKi8KKwljb2x1bW4gPSBuZXdfb2Jq dHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TIiwgMiwKKwkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVm LT5jb2xuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9 cyIsCisJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJdG1wb2JqID0g bmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJ CWNoYXIgKmRlZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVs YXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOwor CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsK Kwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNl KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7 CisKKwkvKgorCSAqIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHR5cGVk IHRhYmxlcywgc28gd2UgYXJlIGRvbmUuCisJICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1 cCk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlv biBvZiBjb2x1bW4gaWRlbnRpdHkuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29s dW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxl KQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICppZGVudG9iajsKKwlMaXN0 CSAgICplbGVtcyA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOwor CUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0 YTsKKwljaGFyCSAgICppZGVudGZtdDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwljb2x1bW4gPSBu ZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoIU9pZElzVmFsaWQoc2VxcmVsaWQpKQorCXsKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KGNvbHVtbiwgInByZXNlbnQiLCBmYWxzZSk7CisJCXJldHVybiBjb2x1 bW47CisJfQorCisJaWYgKGFsdGVyX3RhYmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VUIEdFTkVS QVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJCWlkZW50 Zm10ID0gIkdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVOVElUWSI7 CisJfQorCisJaWRlbnRvYmogPSBuZXdfb2JqdHJlZShpZGVudGZtdCk7CisKKwlpZiAoaWRlbnRp dHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo aWRlbnRvYmosIG9iamZtdCwgIkFMV0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09ICBBVFRS SUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRv YmosIG9iamZtdCwgIkJZIERFRkFVTFQiKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChp ZGVudG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1 bW4sICIle2lkZW50aXR5X3R5cGV9cyIsIGlkZW50b2JqKTsKKworCXJlbCA9IHRhYmxlX29wZW4o U2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJj aFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsIHNlcXJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2Vx dWVuY2UgJXUiLAorCQkJIHNlcXJlbGlkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5j ZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhz ZXFyZWxpZCk7CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2VxZm9ybSwg YWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3Jl bWVudEJ5KE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwgc2VxZm9y bSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0 YXJ0d2l0aChOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogV2UgcHVycG9z ZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkK KwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4sICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVs ZW1zKTsKKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiKCAle3NlcV9kZWZp bml0aW9uOiB9cyApIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4u LiBTRVQvUkVTRVQgKC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5T ZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZQkgICAqY29sc2V0OworCWNoYXIJICAgKmZt dDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldE9wdGlvbnM7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorCSAqLworCWlmIChpc19yZXNldCkKKwkJ Zm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUICI7CisJZWxzZQorCQlmbXQgPSAi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUICI7CisKKwljb2xzZXQgPSBuZXdfb2JqdHJlZV9W QShmbXQsIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJZm9y ZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07 CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFw cGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7 CisJYXBwZW5kX2FycmF5X29iamVjdChjb2xzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7 CisKKwlyZXR1cm4gY29sc2V0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRFIERPTUFJ TgorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVEb21haW4o T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkgICAqY3JlYXRlRG9t YWluOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdf dHlwZSB0eXBGb3JtOworCUxpc3QJICAgKmNvbnN0cmFpbnRzOworCisJdHlwVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlw VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNU KHR5cFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgRE9N QUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJhaW50c31z CisJICogJXtjb2xsYXRpb259cworCSAqLworCWNyZWF0ZURvbWFpbiA9IG5ld19vYmp0cmVlKCJD UkVBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwKKwkJCQkJCSAi RE9NQUlOICV7aWRlbnRpdHl9RCBBUyIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwKKwkJCQkJCSAiJXt0eXBlfVQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJhc2V0eXBlLCB0eXBGb3JtLT50eXB0eXBt b2QpKTsKKworCWlmICh0eXBGb3JtLT50eXBub3RudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dChjcmVhdGVEb21haW4sICIle25vdF9udWxsfXMiLCAiTk9UIE5VTEwiKTsKKwllbHNlCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICIiKTsKKwor CWNvbnN0cmFpbnRzID0gb2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lkLCBvYmplY3RJ ZCk7CisJaWYgKGNvbnN0cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVl KCIiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJ fQorCWVsc2UKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEs CisJCQkJCQkJICJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29uc3RyYWludHN9cyIsIHRtcG9iaik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQljb2xs bmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkgICB0eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBvYmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVEb21haW4sICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCVJlbGVhc2VT eXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIGNyZWF0ZURvbWFpbjsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDcmVhdGVGdW5jdGlvblN0bXQgKENSRUFURSBGVU5DVElPTikKKyAqCisgKiBHaXZl biBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0gKENyZWF0 ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY3JlYXRlRnVuYzsKKwlP YmpUcmVlCSAgICp0bXBvYmo7CisJRGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsK KwljaGFyCSAgICpwcm9iaW47CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRlZmF1bHRz OworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJTGlzdENl bGwgICAqY2VsbDsKKwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFibGVfcGFy YW1zID0gTlVMTDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07 CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkgICAqdHJm dHlwZXM7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWludAkJCXR5 cG51bTsKKwlpbnQJCQludHlwZXM7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVuY3Rpb247 CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBP SUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNU UlVDVChwcm9jVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0 dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zvcm0tPnBy b2xhbmcpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJv Y0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVD VChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3Ny YyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxM IG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1f cGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJu dWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2Ug PSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1 bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09J RCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlp ZiAoaXNudWxsKQorCQlwcm9iaW4gPSBOVUxMOworCWVsc2UKKwl7CisJCXByb2JpbiA9IFRleHRE YXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3Ry Y21wKHByb2JpbiwgIi0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04g JXtzaWduYXR1cmV9cyBSRVRVUk5TICV7cmV0dXJuX3R5cGV9cworCSAqIExBTkdVQUdFICV7dHJh bnNmb3JtX3R5cGV9cyAle2xhbmd1YWdlfUkgJXt3aW5kb3d9cyAle3ZvbGF0aWxpdHl9cworCSAq ICV7cGFyYWxsZWxfc2FmZXR5fXMgJXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlf ZGVmaW5lcn1zCisJICogJXtjb3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9u czogfXMgQVMgJXtvYmpmaWxlfUwsCisJICogJXtzeW1ib2x9TAorCSAqLworCWNyZWF0ZUZ1bmMg PSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVG dW5jLCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFD RSIgOiAiIik7CisKKwkvKgorCSAqIFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFycmF5LCBl eHRyYWN0IHRoZSB0eXBlIE9JRHMgZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3Byb2MgZW50 cnkuICBJZiBwcm9uYXJncyBlcXVhbHMgdGhlIHBhcmFtZXRlciBsaXN0IGxlbmd0aCwKKwkgKiB0 aGVyZSBhcmUgbm8gT1VUIHBhcmFtZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5 cGUgT0lEIGZyb20KKwkgKiBwcm9hcmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2Rl IHByb2FsbGFyZ3R5cGVzLCB3aGljaCBpcworCSAqIGEgYml0IG1vcmUgaW52b2x2ZWQuCisJICov CisJdHlwYXJyYXkgPSBwYWxsb2MobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgKiBzaXpl b2YoT2lkKSk7CisJaWYgKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpID4gcHJvY0Zvcm0t PnByb25hcmdzKQorCXsKKwkJYm9vbAlpc251bGw7CisJCURhdHVtCWFsbHR5cGVzOworCQlEYXR1 bSAgKnZhbHVlczsKKwkJYm9vbCAgICpudWxsczsKKwkJaW50CQluZWxlbXM7CisKKwkJYWxsdHlw ZXMgPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9w Z19wcm9jX3Byb2FsbGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2co RVJST1IsICJOVUxMIHByb2FsbGFyZ3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJzIHRoYW4gYXJn cyIpOworCQlkZWNvbnN0cnVjdF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAor CQkJCQkJICBPSURPSUQsIDQsICd0JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZu ZWxlbXMpOworCQlpZiAobmVsZW1zICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpKQor CQkJZWxvZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAoaSA9 IDA7IGkgPCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJdHlwYXJyYXlb aV0gPSB2YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xl bmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJIHR5cGFycmF5W2ldID0gcHJvY0Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkg ZGVmYXVsdCBleHByZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lvbiBhcwor CSAqIGEgbGlzdCBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3VtZW50Lgor CSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJ CQkJICAgQW51bV9wZ19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVs bCkKKwl7CisJCWRlZmF1bHRzID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRleHRQKHRt cGRhdHVtKSk7CisJCWN1cmRlZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVsc2UKKwl7 CisJCWRlZmF1bHRzID0gTklMOworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJICogTm93 IGl0ZXJhdGUgb3ZlciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgcGFyc2V0cmVlIHRvIGNyZWF0ZSB0 aGUKKwkgKiBwYXJhbWV0ZXJzIGFycmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0g PSAwOworCWZvcmVhY2goY2VsbCwgbm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFy YW1ldGVyICpwYXJhbSA9IChGdW5jdGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9i alRyZWUJICAgKnBhcmFtb2JqOworCQlPYmpUcmVlCSAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVl CSAgICpuYW1lOworCisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRl cyBlbmQgb2YgaW5wdXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMg YXJlIHBhcnQgb2YgdGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwg YnV0IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhh dAorCQkgKiB3ZSBjYW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkg Ki8KKwkJaWYgKHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxl X3BhcmFtcyA9IGNlbGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3lu dGF4IGZvciBwYXJhbWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UICV7ZGVmYXVsdH1z CisJCSAqCisJCSAqIE5vdGUgdGhhdCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJlLCBub3QgYW4g aWRlbnRpZmllcjsgdGhlIHJlYXNvbgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFuIGFic2VudCBw YXJhbWV0ZXIgbmFtZSBtdXN0IHByb2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5nLCBub3QgIiIs IHdoaWNoIGlzIHdoYXQgd291bGQgaGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJCSAqICV7bmFt ZX1JIGhlcmUuICBTbyB3ZSBhZGQgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0byBhbGxv dyB1cworCQkgKiB0byBpbmplY3QgYSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkgKi8KKwkJcGFy YW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2Jq LCAiJXttb2RlfXMiLAorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOID8gIklO IiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIgOgorCQkJ CQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJCQkJCQkJ IHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJ CQkgIklOIik7CisKKwkJLyogT3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9uIG9mICJuYW1l IiBvY2N1cnMgaGVyZSAqLworCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KG5hbWUsICIle25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5uYW1lID8gcGFy YW0tPm5hbWUgOiAiTlVMTCIpOworCisJCWFwcGVuZF9ib29sX29iamVjdChuYW1lLCAicHJlc2Vu dCIsCisJCQkJCQkgICBwYXJhbS0+bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocGFyYW1vYmosICIle25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwg PSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRl ZmV4cHIpKQorCQl7CisJCQljaGFyICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJ CQkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHBy ID0gbGZpcnN0KGN1cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWws ICIle3ZhbHVlfXMiLCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYp OworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFsLCAicHJlc2Vu dCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1U IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkp OworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZh dWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3Qo cGFyYW1vYmopKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1E IiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ ICBvYmplY3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFw cGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd1bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9j Rm9ybS0+cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIkZVTkNUSU9OICV7c2lnbmF0dXJl fXMiLCB0bXBvYmopOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywg IlBST0NFRFVSRSAle3NpZ25hdHVyZX1zIiwgdG1wb2JqKTsKKworCS8qCisJICogQSByZXR1cm4g dHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5 cGUsIG9yCisJICogYSBUQUJMRShsaXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNv bmQgZm9ybSBiZWNhdXNlIHdlIHNhdyBhCisJICogdGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nh bm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxM KQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJyZXR1cm5f Zm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmosICIle3NldG9mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcmV0c2V0ID8gIlNFVE9G IiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZXR0eXBlfVQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsK Kwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRyZWUJICAg KnBhcmFtb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRSIsIDEsCisJCQkJ CQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0YWJsZSIpOworCQlmb3IgKDsgdGFi bGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxuZXh0KG5vZGUtPnBhcmFtZXRlcnMs IHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IGxmaXJz dCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfUkiLCBwYXJhbS0+bmFtZSk7CisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKwkJCXJldHR5cGVz ID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsKKwkJfQor CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cmV0dHlwZXM6LCB9cykiLCByZXR0 eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZUZ1bmMsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRtcG9iaik7CisKKwkvKiBUUkFO U0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVFJBTlNGT1JNIik7CisK KwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlwZXMpOworCWZvciAo aSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJG T1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVzID0g bGFwcGVuZCh0eXBlcywgdG1wb2JqKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wb2JqLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wb2JqKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xhbmd1YWdlfUki LAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9u KQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2luZG93fXMiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDog IiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xhdGlsaXR5fXMi LAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUg PworCQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09 IFBST1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVUQUJMRSIpOwor CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3BhcmFsbGVsX3NhZmV0eX1z IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPwor CQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwg PT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVE IiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVG dW5jLCAiJXtsZWFrcHJvb2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAi TEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7 c3RyaWN0fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAiUkVU VVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVU Iik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c2VjdXJpdHlfZGVm aW5lcn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJICJTRUNVUklU WSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlRnVuYywgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNPU1Qg JXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJ CQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUk9XUyIp OworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQllbHNlCisJCQlhcHBlbmRfZmxvYXRfb2JqZWN0 KHRtcG9iaiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVGdW5jLCAiJXtyb3dzfXMiLCB0bXBvYmopOworCisJCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJvc3VwcG9y dCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQg cXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJ CSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAq LworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJv Y0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJ CQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOwor CQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1cHBvcnR9cyIs IHRtcG9iaik7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRt cG9iajsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJewor CQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFy ZzsKKwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJ CXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2 YWx1ZSk7CisJCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3NldF9vcHRp b25zOiB9cyIsIHNldHMpOworCisJLyogQWRkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uICovCisJ KHZvaWQpIFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLCBBbnVtX3BnX3Byb2NfcHJv c3FsYm9keSwgJmlzbnVsbCk7CisJaWYgKHByb2NGb3JtLT5wcm9sYW5nID09IFNRTGxhbmd1YWdl SWQgJiYgIWlzbnVsbCkKKwl7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQlpbml0U3RyaW5n SW5mbygmYnVmKTsKKwkJcHJpbnRfZnVuY3Rpb25fc3FsYm9keSgmYnVmLCBwcm9jVHVwKTsKKwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtkZWZpbml0aW9ufXMiLCBidWYu ZGF0YSk7CisJfQorCWVsc2UgaWYgKHByb2JpbiA9PSBOVUxMKQorCXsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlRnVuYywgIkFTICV7ZGVmaW5pdGlvbn1MIiwKKwkJCQkJCQkgc291cmNl KTsKKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkFT ICV7b2JqZmlsZX1MIiwgcHJvYmluKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVu YywgIiwgJXtzeW1ib2x9TCIsIHNvdXJjZSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdU dXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiBjcmVhdGVGdW5jOwor fQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBPUEVSQVRPUiBDTEFTUyBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENv bW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mu b2JqZWN0SWQ7CisJSGVhcFR1cGxlICAgb3BjVHVwOworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlG b3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07CisJT2Jq VHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJTGlzdAkgICAqbGlzdDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQg JXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3Bj VHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+ b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIs IG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1Qob3BmVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBl fVQgVVNJTkcKKwkgKiAle2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1zOiwgfXMKKwkg Ki8KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRl bnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQgdGhlIERFRkFV TFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVmYXVsdH1zIiwK KwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJLyogQWRk IHRoZSBGT1IgVFlQRSBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiRk9S IFRZUEUgJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9w Y2ludHlwZSwgLTEpKTsKKworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJYXBwZW5kX3N0 cmluZ19vYmplY3Qoc3RtdCwgIlVTSU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFtZShvcGNGb3Jt LT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlOyBidXQgaWYg aXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0 aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgZmFp bHVyZQorCSAqIGlmIHRoZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5LgorCSAqLwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJ CSAib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9y bS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwg TmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3Bh Y2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle29w ZmFtaWx5fXMiLCAgdG1wb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlz dC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVu IGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2tleXR5 cGUgIT0gSW52YWxpZE9pZCA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9w Y0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2Ux KG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVy YXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsK KwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRt cG9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biAle29w ZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwKKwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51 bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJICJvcGVyYXRvciIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv clJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpLAorCQkJCQkJCSJsdHlw ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZP UiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFtaWx5 ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBv c2V9cyIsICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkgICAqdG1wb2Jq MjsKKworCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtvcGZhbWls eX1EIiwgMCk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3BmYW1pbHkiLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9CisKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJLyog QWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2goY2VsbCwgY21k LT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJSGVhcFR1cGxlCXByb2NUdXA7 CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxp c3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9u fUQiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51 bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAt MSksCisJCQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAg TmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFy Z3M7IGkrKykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJl ZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJn bGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0 eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIiki KTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3Bm VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQor ICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlIZWFw VHVwbGUgICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbSAg YW1Gb3JtOworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE9QRkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9 IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNo U3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2Qp OworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29wZlN0bXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJ TkcgJXthbW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJ CQkJCQkJICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkp OworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsK KworCXJldHVybiBjb3BmU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFT dG10LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9u IGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVt YVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1hU3Rt dCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkJICpj cmVhdGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXth dXRob3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF IFNDSEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtpZl9u b3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNU UyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle25hbWV9 SSIsIG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJWkFU SU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRo LCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5v ZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIl e2F1dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwgInBy ZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVtYSwg IiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQor CisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0 aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7CisJRGF0dW0J ZGVmOworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJvb2wJaXNudWxsOwor CisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5 cGRlZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJS T1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIiwKKwkJCSBO YW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5hbWUpKTsKKwlk ZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIg PSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8sCisJCQkJ CQkJCQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERl cGFyc2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJT2Jq ZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUgPSAo QWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZvcm1f cGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNoYXIJICAgKmZtdDsK Kwljb25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1AgQ09OU1RSQUlOVCBp cyBoYW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChub2RlLT5zdWJ0eXBl ID09ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQ RU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXAp OworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkvKiBTRVQg REVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxMKQorCQkJ eworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJvcCBkZWZhdWx0IjsK KwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRp dHl9RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShk b21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+ dHlwbmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlO IjsKKwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCIsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXREZWZhdWx0KGRvbVR1 cCkpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBOVUxM ICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJvcCBub3QgbnVsbCI7 CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0 eX1EIERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRv bUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5 cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwgKi8K KwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90IG51bGwiOworCQkJ YWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg dHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBT RVQgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0t PnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUp KSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RSQUlOVC4gIE9ubHkg Q0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICovCisJCQlmbXQgPSAi QUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOworCQkJYWx0ZXJEb20g PSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8qIGEgbmV3IGNvbnN0 cmFpbnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoYWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwKKwkJCQkJ CQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkg cGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFkZHIub2JqZWN0 SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQg Ki8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxpZGF0ZSBjb25zdHJh aW50IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBW YWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8K KwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJp bmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5 fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlh cHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25z dHJhaW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisK KwkvKiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gYWx0ZXJE b207Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBh IHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXBvYmo7CisJ UmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9u CXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3Rt dCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9y IElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJ ICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2Vx U3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2Vx dWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmpl Y3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkx KFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0g KEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWRl bnRpdHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkg Z2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOwor CisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJl bG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24p KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lkZW50aXR5 fUQiLCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRlU2VxLCBz ZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5j cmVtZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRlU2VxLCBz ZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxl bXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisKKwkvKiBXZSBw dXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVuZF9hcnJheV9v YmplY3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICogRGVwYXJz ZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQg YW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICog cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ Q3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgly ZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlz dAkgICAqZHBjb250ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZQkqdG1wb2Jq OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtp Zl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlwZX1UIHwgUEFSVElU SU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworCSAqICV7aW5o ZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9 cworCSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwljcmVhdGVTdG10ID0g bmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3Rt dCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlv bi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3Jl YXRlU3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAi JXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9U IEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVs YXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2Zv cihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7 CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBk aWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVu dHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2Ug aWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBiZSBlbWl0dGVkOyBh bmQKKwkgKiBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4K KwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlM aXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRh YmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAq IHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxk IGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJl Y3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUg bm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJdG1w b2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBlLCAt MSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0YgJXtvZl90eXBlfVQi LCB0bXBvYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBhcmVudHM7CisJCQlP YmpFbGVtICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVj dElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNz ZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmlu ZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVl Lm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVs YXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgICAg ICAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29tcG9z aXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0 SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7CisJCQl0bXBv YmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi KCV7ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5 LCB0YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3Rh YmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlMaXN0ICAgICAgICp0 YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNz IExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBiZWVuIHRy YW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJCS8qCisJ CSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgY29uc3Ry YWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZy b20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRzIHdlIHJl bHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBtaWdodCBi ZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnRz LgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBu b2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLCAgICAgLyogbm90 IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUg Ki8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwg SW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFi bGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0 YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJ CSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0 aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4g IFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5m b3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUg YW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1w b2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2RlLT5p bmhSZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cGFy ZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJ eworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOwor CX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRh Ymxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3Bh Y2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9v YmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNlX09uQ29tbWl0Q2xh dXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChu b2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5k LiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0cmVlIGRpcmVjdGx5 IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJCSAqIHdoaWNoIGhh dmVuJ3QgYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0 aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8K Kwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRfcGFydGtleWRlZl9z aW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2Jq LCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3Bh cnRpdGlvbl9ieX1zIiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgbm9kZS0+YWNjZXNz TWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXthY2Nl c3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBm YWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2FjY2Vzc19t ZXRob2R9cyIsIHRtcG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlP YmpUcmVlICAgICp0bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJdG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikpOworCX0KKworCWlm IChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dpdGg6LCB9cykiLCBs aXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9 cyIsIHRtcG9iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0 bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVm aW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAg KmRlZlN0bXQgPSBOVUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNlIE9C SkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Io b2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJ ZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCQkJ YnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qg a2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERl ZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFu ZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVm aW5lKQoreworCUhlYXBUdXBsZSAgIG9wclR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRy ZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Ig b3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJU dXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0 eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJICJwcm9jZWR1 cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb2RlKSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBM RUZUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChv cHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBl fVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkv KiBSSUdIVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNW YWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3Bycmln aHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIs IGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09NTVVU QVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29tbXV0YXRvciIp OworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkv KiBORUdBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNWYWxp ZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogUkVTVFJJQ1Qg Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9y bS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwllbHNlCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSk9JTiAqLworCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCisJLyogTUVSR0VTICovCisJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIk1FUkdFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJnZXMi KTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGFzaGVz Iik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1z OiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiBz dG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBE ZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCU9ialRyZWUJICAg KnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJY2hhcgkgICAqc3Ry OworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsK KworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qIFNob3J0 Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNk ZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0 bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1 cm4gc3RtdDsKKwl9CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7 CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQs ICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJ bGlzdCA9IE5JTDsKKworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIihJTlBV VD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQVVQ9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlW RT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNl aXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNl KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5 cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg dHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBN T0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0 Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOVEVSTkFM TEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0KKwllbHNlCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBsZW59biIsIDEsCisJ CQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlwbGVuKTsKKwl9CisK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBB U1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYg KCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiKTsKKwkvKiBY WFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQg dHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJeworCQljYXNlICdk JzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6 CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJ CXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3Ry ID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24pOworCX0KKwlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FsaWdufXMiLCBzdHIpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0gbmV3X29ianRyZWVf VkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3Jh Z2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJ CXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJu YWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJy ZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3Jt LT50eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtzdG9yYWdl fXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5Iik7CisJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMi LCB0eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJl ZmVycmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hl R2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVs dCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFp c251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgVGV4dERh dHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAi cHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVO VD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxl bSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElNSVRFUj0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBG b3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xM QVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxl Iik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAi JXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwly ZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAo Li4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwlPYmpUcmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jl c2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICov CisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJTRVQg IjsKKworCXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0 ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAq c2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFy c2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19v YmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiByZWxz ZXQ7Cit9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKgorICogRGVw YXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRy aWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBw YXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlG b3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZQkgICAqdHJpZ2dlcjsKKwlPYmpUcmVl CSAgICp0bXBvYmo7CisJaW50CQkJdGduYXJnczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3QJICAg KmV2ZW50czsKKworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQo cGdfdHJpZ2dlciwgQW51bV9wZ190cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRyaWdGb3JtID0g KEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkg JXt0aW1lfXMgJXtldmVudHM6IE9SIH1zCisJICogT04gJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJs ZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMKKwkgKiBGT1IgRUFDSCAle2Zvcl9lYWNofXMgJXt3 aGVufXMgRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zCisJICovCisJdHJpZ2dlciA9IG5l d19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIl e2NvbnN0cmFpbnR9cyIsCisJCQkJCQkgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJTlQi IDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIlRSSUdHRVIgJXtuYW1l fUkiLCBub2RlLT50cmlnbmFtZSk7CisKKwlpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQ RV9CRUZPUkUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJC RUZPUkUiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0FGVEVSKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiQUZURVIiKTsKKwll bHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJJTlNURUFEIE9GIik7CisJZWxzZQor CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHRyaWdnZXIgdGltaW5nIHR5cGUgJWQiLCBub2Rl LT50aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2Vy IGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBsaXN0OworCSAqIGluIG1vc3QgY2FzZXMgaXQg d2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJICog dGhlcmUncyBhbiBVUERBVEUgd2l0aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEgSlNP TiBvYmplY3QuCisJICovCisJZXZlbnRzID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBUUklH R0VSX1RZUEVfSU5TRVJUKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19v YmplY3QoIklOU0VSVCIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RFTEVU RSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUi KSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZlbnRz ID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlpZiAo bm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5jb2x1 bW5zID09IE5JTCkKKwkJeworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdf b2JqZWN0KCJVUERBVEUiKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlCSAgICp1cGRh dGU7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJ LyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0aGUg b3V0cHV0IEpTT04sIGJ1dAorCQkJICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhhdCB1 c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2ZW50 IHR5cGVzLgorCQkJICovCisJCQl1cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9GIiwg MSwKKwkJCQkJCQkJCSJraW5kIiwgT2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJCQlm b3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVtbnMpCisJCQl7CisJCQkJY2hhciAgICpjb2xuYW1lID0g c3RyVmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3Ry aW5nX29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBk YXRlLCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVu dHMsIG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9v YmplY3QodHJpZ2dlciwgIiV7ZXZlbnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ ICB0cmlnRm9ybS0+dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIk9O ICV7cmVsYXRpb259RCIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlJP TSIsIDApOworCWlmICh0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCkKKwl7CisJCU9ialRyZWUJICAg KnJlbDsKKworCQlyZWwgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7CisKKwlsaXN0 ID0gTklMOworCWlmIChub2RlLT5kZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAor CQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAobm9kZS0+aW5p dGRlZmVycmVkKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29i amVjdCgiSU5JVElBTExZIERFRkVSUkVEIikpOworCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dl ciwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRyaWdnZXIsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLAorCQkJCQkJIG5vZGUtPnJvdyA/ ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldIRU4i LCAwKTsKKwlpZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7 CisJCURhdHVtCQl2YWx1ZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0 dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERl c2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1Is ICJib2d1cyBOVUxMIHRncXVhbCIpOworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdUb05vZGUoVGV4 dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIoJXtjbGF1c2V9cykiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdG b3JtLAorCQkJCQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2Up KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXt3aGVufXMiLCB0bXBvYmop OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkg ImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRnZm9p ZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlmICh0 Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhICAqdGdhcmdzOworCQljaGFyICAgKmFyZ3N0cjsKKwkJ Ym9vbAlpc251bGw7CisJCWludAkJZmluZHg7CisJCWludAkJbGVudGdhcmdzOworCQljaGFyICAg KnA7CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJ CQkJCQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXRE ZXNjcihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCB0Z2FyZ3MiKTsKKwkJYXJnc3RyID0gKGNoYXIg KikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2Fy Z3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7 IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAl0bGVuOworCisJCQkvKiBWZXJpZnkgdGhhdCB0aGUg YXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxlbihwKTsKKwkJ CWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiaW52YWxpZCBhcmd1bWVudCBzdHJpbmcgKCVzKSBmb3IgdHJpZ2dlciBcIiVzXCIi LAorCQkJCQkJCQlhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpKSk7CisKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJcCArPSB0bGVu ICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CQkvKiBtaWdo dCBiZSBOSUwgKi8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1z IiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVz ZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qgb2YgU0VUCisgKiAo Li4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUJ ICAgKnNldDsKKwlPYmpUcmVlCSAgICpvcHRuYW1lOworCisJc2V0ID0gbmV3X29ianRyZWUoIiIp OworCW9wdG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNwYWNl ICE9IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1JLiIs IGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAi JXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzZXQs ICIle2xhYmVsfXMiLCBvcHRuYW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHNldCwgIiA9ICV7dmFsdWV9TCIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdl dFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAi RkFMU0UiKTsKKworCXJldHVybiBzZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9m IERST1AgY29tbWFuZHMuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3Qg Y2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9wQmVo YXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKwljaGFyCQkgICAqY29t bWFuZDsKKwljaGFyCQkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwljaGFy CQkgICAqZm10OworCU9ialRyZWUJCSpzdG10LCAqc3RtdDI7CisJSnNvbmIJCSAgKmpzb25iOwor CisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCAlcyBJRiBF WElTVFMgJSV7b2JqaWRlbnRpdHl9cyIsIG9iamVjdHR5cGUpOworCisJc3RtdCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOwor CXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJICAgInByZXNlbnQi LCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHN0bXQsICIle2Nhc2NhZGV9cyIsIHN0bXQyKTsKKworCWpzb25iID0gb2JqdHJl ZV90b19qc29uYihzdG10KTsKKwljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25i LT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQorCisv KgorICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIg Km5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUJICAgKm9iajsKKworCWlmIChraW5kID09 IFZBUl9SRVNFVF9BTEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxMIik7CisJ fQorCWVsc2UgaWYgKHZhbHVlICE9IE5VTEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZV9WQSgi U0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkgICAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5n LCBuYW1lKTsKKworCQkvKgorCQkgKiBTb21lIEdVQyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJU1Qn IHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAqIHF1b3RlZC4KKwkJICovCisJCWlmIChH ZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJYXBw ZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9cyIsIHZhbHVlKTsKKwkJZWxz ZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9TCIsIHZhbHVl KTsKKwl9CisJZWxzZQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIik7CisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KG9iaiwgIiV7c2V0X25hbWV9SSIsIG5hbWUpOworCX0KKworCXJldHVy biBvYmo7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBh biBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIElm IHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUluZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlCSAgICppbmRleFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOwor CVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2Ft OworCWNoYXIJICAgKmRlZmluaXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAg ICp0YWJsZXNwYWNlOworCWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1h cnkgfHwgbm9kZS0+aXNjb25zdHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJ TUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVs eTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhy ZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwg PSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5k ZXhfYW0sICZkZWZpbml0aW9uLCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3 aGVyZUNsYXVzZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUg JXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFt ZX1JIE9OCisJICogJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMp ICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisJICogJXt3aGVyZV9jbGF1c2V9cworCSAqLworCWlu ZGV4U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGluZGV4U3RtdCwgIiV7dW5pcXVlfXMiLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUi IDogIiIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoaW5kZXhTdG10LCAiSU5ERVgiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJ CQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2Rl LT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoaW5kZXhTdG10LCAiJXtuYW1lfUkiLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKGlkeHJlbCkpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiT04g JXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRf cmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJl bCkpKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5kZXhf YW19cyIsIGluZGV4X2FtKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIigl e2RlZmluaXRpb259cykiLCBkZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBvYmosICIoJXtvcHRzfXMpIiwgcmVsb3B0aW9ucyk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChpbmRleFN0bXQsICIle3dpdGh9cyIsIHRtcG9iaik7CisKKwkvKiB0YWJsZXNw YWNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVz cGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCB0 YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7dGFibGVzcGFj ZX1zIiwgdG1wb2JqKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXt3aGVyZX1zIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo aW5kZXhTdG10LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShp ZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBpbmRleFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJ TkhFUklUUyByZWxhdGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNj aGVtYSBxdWFsaWZpZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFi bGVzLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0 SWQpCit7CisJTGlzdAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lz U2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJ aW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJp dHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkK Kwl7CisJCU9ialRyZWUJKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZv cm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1J bmgtPmluaHBhcmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rf b2JqZWN0KHBhcmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVf Y2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQor CisvKgorICogRGVwYXJzZSB0aGUgT04gQ09NTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4u IFRFTVBPUkFSWSAuLi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENs YXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pCit7CisJT2JqVHJlZQkgICAqb25jb21taXQ7CisK KwlvbmNvbW1pdCA9IG5ld19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikK Kwl7CisJCWNhc2UgT05DT01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29t bWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJEUk9QIik7CisJCQlicmVhazsKKworCQljYXNl IE9OQ09NTUlUX0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQs ICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQlj YXNlIE9OQ09NTUlUX1BSRVNFUlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNv bW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPTkNPTU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KG9uY29tbWl0 LCAiJXtvbl9jb21taXRfdmFsdWV9cyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KG9uY29tbWl0 LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBvbmNvbW1pdDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCSAgICpyZW5hbWVTdG10OworCWNoYXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFyICpv Ymp0eXBlOworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJLyoKKwkg KiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2lu YWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5jZSB3ZSBp bnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRoZSBvbGQg bmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJvbQorCSAq IHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEgbmFtZSBm cm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBwYXJz ZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdheS4KKwkg Ki8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToK KwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCisJCQkvKgor CQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31z ICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCQkJb2JqdHlwZSA9 IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOworCQkJZm10c3RyID0gcHNwcmlu dGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRk cmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25H ZXROYW1lc3BhY2UocmVsYXRpb24pOworCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZt dHN0ciwgMCk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlz dHN9cyIsCisJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBu b2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1l U3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsK KwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQly ZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJCQkv KgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBDb21wb3NpdGUgdHlwZXM6IEFM VEVSIG9ianR5cGUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUKKwkJCSAqICV7Y29sbmFt ZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisJCQkgKgorCQkJICogTm9ybWFsIHR5cGVz OiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUKKwkJCSAq IENPTFVNTiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQorCQkJICovCisKKwkJCWlmIChub2Rl LT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQl7CisJCQkJcmVuYW1lU3RtdCA9 IG5ld19vYmp0cmVlKCJBTFRFUiBUWVBFIik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkp OworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQVRUUklCVVRFICUle2NvbG5hbWV9SSIp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShu b2RlLT5yZWxhdGlvblR5cGUpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9i anR5cGUpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJCQkJLyog Q29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChub2Rl LT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQlub2RlLT5taXNzaW5nX29r ID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVT dG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo c2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJ CQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBDT0xVTU4gJSV7Y29sbmFtZX1JIik7CisJCQl9 CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsIGZtdHN0ciwgbm9kZS0+c3Vi bmFtZSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiVE8gJXtuZXduYW1l fUkiLCBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNU X0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtjYXNj YWRlfXMiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJ CQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2aW9y ID09IERST1BfQ0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNz U2hhcmVMb2NrKTsKKworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJewor CQkJCWNoYXIJKmlkZW50OworCQkJCUhlYXBUdXBsZSBwcm9jdHVwOworCQkJCUZvcm1fcGdfcHJv YyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICppZGVudGl0eTsKKworCQkJCUFzc2VydChJc0Eobm9k ZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykpOworCQkJCWlkZW50aXR5ID0gKChPYmplY3RXaXRo QXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpuYW1lOworCisJCQkJcHJvY3R1cCA9IFNlYXJjaFN5 c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9i amVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwKKwkJCQkJCSBh ZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VChwcm9jdHVwKTsKKworCQkJCS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Igb3JkZXJlZC1zZXQg YWdncmVnYXRlcz8gKi8KKwkJCQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwKKwkJCQkJCQkJIHF1 b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jZm9ybS0+cHJv bmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVudGl0eSkpKSwKKwkJ CQkJCQkJIGZvcm1hdF9wcm9jZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElkLCB0cnVlKSk7CisK KwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUgVE8g JSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVU eXBlKSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJ CQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJCQkJCQkJCSJuZXdu YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2Fj aGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUENMQVNTOgor CQkJeworCQkJCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwkJCQlGb3JtX3BnX29wY2xhc3Mgb3BjRm9y bTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJ CWNoYXIJICAgKm9wY25hbWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNwcmlu dGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1F IFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVu YW1lVHlwZSkpOworCisJCQkJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0 SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNs YXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCW9wY0Zv cm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCQkJCW9sZG5hbWVz ID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRl Y29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUo b2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3 X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkJCQkgb3BjbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRo b2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNt ZXRob2QpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25h bWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVhazsKKwor CQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGZUdXA7CisJ CQkJSGVhcFR1cGxlICAgYW1UdXA7CisJCQkJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCQkJ CUZvcm1fcGdfYW0gIGFtRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAg ICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7CisJCQkJY2hhcgkgICAqZm10Owor CisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5k ZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJCQkJb3BmVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7 CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKwor CQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZv cm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCQkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwK KwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3JtID0gKEZvcm1fcGdfYW0p IEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0 ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0 ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwg Jm9wZm5hbWUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJ CQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJ IG9wZm5hbWUpLAorCQkJCQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkJTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoYW1U dXApOworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmVuYW1lU3RtdCA9CisJCQkJbmV3X29ianRyZWVfVkEo IkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJ CQkgICAxLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5h bWUsCisJCQkJCQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQl7CisJCQkJSGVhcFR1cGxl CXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCQkJCVJlbGF0aW9uCXBn X3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2VyID0gcmVsYXRpb25fb3BlbihUcmlnZ2VyUmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0 X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lk KSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBH RVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkidHJpZ2dlcm5hbWUiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRncmVsaWQpLAorCQkJCQkJ CQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJcmVs YXRpb25fY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFr OworCisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCWNh c2UgT0JKRUNUX0RPTUFJTjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJCVJlbGF0 aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7CisJCQkJ QXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9IGNhc3RO b2RlKExpc3QsIG5vZGUtPm9iamVjdCk7CisJCQkJY2hhcgkgICAqZm10c3RyaW5nOworCisJCQkJ Lyogb2J0YWluIG9iamVjdCB0dXBsZSAqLworCQkJCWNhdGFsb2cgPSByZWxhdGlvbl9vcGVuKGFk ZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlvYmpUdXAgPSBnZXRfY2F0YWxv Z19vYmplY3RfYnlfb2lkKGNhdGFsb2csIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNs YXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCS8qIG9idGFpbiBuYW1lc3BhY2UgKi8K KwkJCQlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShhZGRyZXNz LmNsYXNzSWQpOworCQkJCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihvYmpUdXAsIEFudW1fbmFtZXNw YWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLCAmaXNudWxsKTsKKwkJ CQlpZiAoaXNudWxsKQorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIG5hbWVzcGFjZSIp OworCisJCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOwor CQkJCWZtdHN0cmluZyA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCisJCQkJcmVu YW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0cmluZywKKwkJCQkJCQkJCQkwKTsKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJ CW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJ CQkJCQkJCQkJCQkgIHN0clZhbChsbGFzdChpZGVudGl0eSkpKSk7CisKKwkJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJ CSBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJl dHVybiByZW5hbWVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyT2JqZWN0RGVwZW5k c1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3REZXBlbmRzU3Rt dCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyRGVwZW5kZVN0bXQgPSBOVUxMOwor CisKKwlpZiAobm9kZS0+b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJeworCQlSZWxhdGlv biAgICAgICAgcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxv Y2spOworCQlPYmpUcmVlICpxdWFsaWZpZWQ7CisKKwkJYWx0ZXJEZXBlbmRlU3RtdCA9IG5ld19v Ymp0cmVlKCJBTFRFUiBJTkRFWCIpOworCisJCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCSBub2Rl LT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRGVwZW5k ZVN0bXQsICIle2lkZW50aXR5fUQiLCBxdWFsaWZpZWQpOworCQlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRl cGVuZGVTdG10LCAiJXtOT31zIiwKKwkJCQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDogIiIpOwor CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyRGVwZW5kZVN0bXQsICJERVBFTkRTIE9OIEVY VEVOU0lPTiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtu ZXduYW1lfUkiLCBzdHJWYWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVsb2coTE9H LCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCSAo aW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCisJcmV0dXJuIGFsdGVyRGVwZW5kZVN0bXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRpb24uCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAg ICpjYWNoZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJdG1wc3RyID0g cHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisKKwlpZiAoYWx0ZXJf dGFibGUpCisJCWZtdCA9ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJD QUNIRSAle3ZhbHVlfXMiOworCisJY2FjaGUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJ CQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICAidmFsdWUiLCBP YmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGNhY2hl KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4KKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRy ZWUJICAgKmN5Y2xlOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10 ID0gIlNFVCAle25vfXMgQ1lDTEUiOworCWVsc2UKKwkJZm10ID0gIiV7bm99cyBDWUNMRSI7CisK KwljeWNsZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICAgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSAgIHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QoY3ljbGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgSU5DUkVNRU5U IEJZIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0lu Y3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29s IGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmluY3JlbWVudGFsYnk7CisJY2hhcgkgICAq dG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNF VCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJJTkNSRU1FTlQgQlkg JXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+ c2VxaW5jcmVtZW50KTsKKwlpbmNyZW1lbnRhbGJ5ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAor CQkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJ CQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KGluY3JlbWVudGFsYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgTUFYVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWF4dmFsdWU7CisJY2hhcgkgICAq dG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNF VCBNQVhWQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1BWFZBTFVFICV7dmFsdWV9 cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1heCk7 CisJbWF4dmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1heHZhbHVlKTsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJ ICAgKm1pbnZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAo YWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNlCisJ CWZtdCA9ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRf Rk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworCW1pbnZhbHVlID0gbmV3X29ianRyZWVfVkEoZm10 LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtaW52YWx1ZSIsCisJCQkJ CQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChtaW52YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05F RCBCWSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5 KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJ T2JqVHJlZQkgICAqb3duZWRieSA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5c1NjYW5E ZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUgICB0dXBsZTsKKwor CWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJl bGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAorCQkJCUFudW1fcGdf ZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlP YmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1syXSwKKwkJ CQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf SU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEws IDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklkOworCQlGb3JtX3BnX2RlcGVuZCBkZXBm b3JtOworCQlPYmpUcmVlCSp0bXBvYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9y bSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNp ZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0 eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVm Y2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZv cm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9y bS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5y ZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7 CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRp b25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgImF0dHJuYW1l IiwgY29sbmFtZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25l cn1EIiwKKwkJCQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93 bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcG9iaik7CisJfQorCisJ c3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWwsIEFjY2Vzc1No YXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1uLCBlbWl0IGFu IGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQgd29uJ3QgcHJp bnQgYW55dGhpbmcuCisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFggdGhpcyBzaG91bGRu J3QgaGFwcGVuIC4uLiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7 b3duZXJ9RCIsCisJCQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkJICJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChv d25lZGJ5KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RBUlQgb3B0aW9u LgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFydChPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQoreworCU9ialRyZWUJ ICAgKnJlc3RhcnQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5U NjRfRk9STUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXN0YXJ0ID0gbmV3X29ianRyZWVf VkEoIlJFU1RBUlQgJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJyZXN0YXJ0IiwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVzdGFydCk7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2Vx dWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpzdGFydHdp dGg7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJs ZSkKKwkJZm10ID0gIlNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAi U1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFU LCBzZXFkYXRhLT5zZXFzdGFydCk7CisJc3RhcnR3aXRoID0gbmV3X29ianRyZWVfVkEoZm10LCAy LAorCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJCSAg ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KHN0YXJ0d2l0aCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNUT1JBR0Ugb3B0 aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N0b3JhZ2Uo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICpz dG9yYWdlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqc3Ry OworCisJc3dpdGNoICh0eXBGb3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2FzZSAncCc6CisJCQlz dHIgPSAicGxhaW4iOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3RyID0gImV4dGVybmFs IjsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRlZCI7CisJCQlicmVh azsKKwkJY2FzZSAnbSc6CisJCQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVjIiwgdHlwRm9ybS0+ dHlwc3RvcmFnZSk7CisJfQorCisJdG1wc3RyID0gcHNwcmludGYoIiVzIiwgc3RyKTsKKworCWZt dCA9ICJTVE9SQUdFID0gJXt2YWx1ZX1zIjsKKworCXN0b3JhZ2UgPSBuZXdfb2JqdHJlZV9WQShm bXQsIDIsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJ CQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3Qoc3RvcmFnZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFJFQ0VJVkUg b3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1JlY2Vp dmUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAg ICpyZWNlaXZlOworCisJcmVjZWl2ZSA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlY2VpdmUs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocmVjZWl2ZSwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVjZWl2ZSk7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSB0eXBlIFNFTkQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgor ZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkK K3sKKwlPYmpUcmVlCSAgICpzZW5kOworCisJc2VuZCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElz VmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNlbmQsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qoc2VuZCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3Qoc2VuZCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBl IHR5cG1vZF9pbiBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNl X1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7 CisJT2JqVHJlZQkgICAqdHlwbW9kaW47CisKKwl0eXBtb2RpbiA9IG5ld19vYmp0cmVlX1ZBKCJU WVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9p biIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodHlwbW9kaW4sICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1vZGluLCAi cHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBtb2Rpbik7 Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX291dCBvcHRpb24uCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX091dChPYmpUcmVl ICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cG1vZG91 dDsKKworCXR5cG1vZG91dCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwbW9kb3V0 LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kb3V0LCAicHJlc2VudCIsIGZhbHNl KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBtb2RvdXQpOworfQorCisKKy8qCisg KiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5 cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBhbmFseXplOworCisJdHlwYW5hbHl6ZSA9 IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodHlwYW5hbHl6ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QodHlwYW5hbHl6ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1 YnNjcmlwdCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5 cGVfU3Vic2NyaXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJ T2JqVHJlZQkgICAqdHlwc3Vic2NyaXB0OworCisJdHlwc3Vic2NyaXB0ID0gbmV3X29ianRyZWVf VkEoIlNVQlNDUklQVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Vi c2NyaXB0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2NyaXB0KSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodHlwc3Vic2NyaXB0LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdCh0eXBzdWJzY3JpcHQpOworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBv ZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxs IGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlP aWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWFu ZDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBj bWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJ ZDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJv Y2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKKwl7 CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRl U2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9B bHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRvbWFpblN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9i amVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlj YXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVUcmlnU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTZXFT dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0RlZmluZVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmpl Y3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0NyZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZU9wRmFt aWx5KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0luZGV4U3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGdW5jdGlvblN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVy RnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUmVu YW1lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0RGVw ZW5kc1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPYmplY3RTY2hlbWFTdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KGNtZC0+ZC5zaW1w bGUuYWRkcmVzcywKKwkJCQkJCQkJCQkJCQlwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJY21kLT5k LnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3du ZXJTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBs ZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0 b3JTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJUeXBlU3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgRU5VTSAqLworCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBS QU5HRSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJY29tbWFuZCA9IE5VTEw7CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5 cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVl KSk7CisJfQorCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBD UkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlYWwgd2l0aCBhbGwgdGhlIHRhYmxlIGVs ZW1lbnRzIChjb2x1bW5zIGFuZCBjb25zdHJhaW50cykuCisgKgorICogTm90ZSB3ZSBpZ25vcmUg Y29uc3RyYWludHMgaW4gdGhlIHBhcnNlIG5vZGUgaGVyZTsgdGhleSBhcmUgZXh0cmFjdGVkIGZy b20KKyAqIHN5c3RlbSBjYXRhbG9ncyBpbnN0ZWFkLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBh cnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMs IExpc3QgKmRwY29udGV4dCwKKwkJCQkJICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSkKK3sK KwlMaXN0CSAgICplbGVtZW50cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2go bGMsIHRhYmxlRWxlbWVudHMpCisJeworCQlOb2RlCSAgICplbHQgPSAoTm9kZSAqKSBsZmlyc3Qo bGMpOworCisJCXN3aXRjaCAobm9kZVRhZyhlbHQpKQorCQl7CisJCQljYXNlIFRfQ29sdW1uRGVm OgorCQkJCXsKKwkJCQkJT2JqVHJlZQkgICAqdHJlZTsKKworCQkJCQl0cmVlID0gdHlwZWQgPwor CQkJCQkJZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJ CQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KSA6CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihyZWxh dGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAqKSBl bHQsCisJCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlpZiAodHJlZSAhPSBOVUxMKQor CQkJCQl7CisJCQkJCQlPYmpFbGVtCSpjb2x1bW47CisKKwkJCQkJCWNvbHVtbiA9IG5ld19vYmpl Y3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1lbnRzLCBjb2x1 bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBUX0NvbnN0cmFpbnQ6CisJ CQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIG5vZGUgdHlw ZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisK Ky8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3RlZENvbW1hbmQuCisgKi8KK2No YXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29s IHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRlUGF0aDsKKwlN ZW1vcnlDb250ZXh0CW9sZGN4dDsKKwlNZW1vcnlDb250ZXh0CXRtcGN4dDsKKwlPYmpUcmVlCQkg ICAqdHJlZTsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlTdHJpbmdJbmZvRGF0YSAgc3RyOworCisJ LyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0aW5l cyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmtsZSB0 aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGU7IGJ1dCBhbGxvY2F0ZQorCSAqIHRoZSBvdXRw dXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZz dHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVM VF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJ CQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcgdGhp cyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAqIGluIG9yZGVy IHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2ggcmVz dWx0cywKKwkgKiB3ZSB3YW50IGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBzbyB0 aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIKKwkgKiB0byBlbnZpcm9ubWVudHMgd2l0aCBkaWZm ZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKKwkgKiB3aGF0 IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxsIG92 ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqLworCW92ZXJy aWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJ b3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9 IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92ZXJyaWRlU2Vh cmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKworCXN3 aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRlcGFy c2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRhYmxl OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlj YXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShj bWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0cmVlID0gZGVw YXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7 CisJfQorCisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJCUpz b25iICpqc29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNvbW1h bmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9M RU4pOworCX0KKwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJLyoKKwkgKiBDbGVhbiB1cC4g IE5vdGUgdGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIn cworCSAqIGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJ ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0 ZSh0bXBjeHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJlYjA1Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpAQCAtMCwwICsxLDc2MyBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2pzb24uYworICoJICBKU09OIGNvZGUgcmVs YXRlZCB0byBEREwgY29tbWFuZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2pzb24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorCisKKy8qCisgKiBDb252ZXJz aW9uIHNwZWNpZmllciwgaXQgZGV0ZXJtaW5lcyBob3cgd2UgZXhwYW5kIHRoZSBqc29uIGVsZW1l bnQgaW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlTcGVjVHlwZW5hbWUs CisJU3BlY09wZXJhdG9ybmFtZSwKKwlTcGVjRG90dGVkTmFtZSwKKwlTcGVjU3RyaW5nLAorCVNw ZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lkZW50aWZpZXIsCisJU3BlY1Jv bGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFyeSB2YWx1ZSB3aGljaCByZXBy ZXNlbnRzIGEgYm9vbGVhbiB0eXBlIEpzb25iVmFsdWUuCisgKi8KK3R5cGVkZWYgZW51bQorewor CXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9IGpzb25fdHJpdmFsdWU7CisKK3N0 YXRpYyBib29sIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAq cGFyYW0sCisJCQkJCQkgSnNvbmJWYWx1ZSAqanNvbnZhbCwgY29udlNwZWNpZmllciBzcGVjaWZp ZXIsCisJCQkJCQkgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGV4cGFuZF9qc29uYl9h cnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNv bmFyciwgY2hhciAqYXJyYXlzZXAsCisJCQkJICAgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNv bnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9pZCAq YXJnKTsKK2NoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKKwor LyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0 aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFu IGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9lc24ndAorICogZXhpc3QsIHR2 X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0aGUgYWN0dWFsIGpzb25fdHJp dmFsdWUuCisgKi8KK3N0YXRpYyBqc29uX3RyaXZhbHVlCitmaW5kX2Jvb2xfaW5fanNvbmJjb250 YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSkKK3sKKwlKc29u YlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlqc29uX3RyaXZhbHVlCXJlc3VsdDsK KworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7 CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpz b25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAm a2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2X2Fic2VudDsKKwlpZiAodmFs dWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNc IiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5hbWUpKSk7CisJcmVzdWx0ID0g dmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZhbHVlKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBm aW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYg aXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNlZC4g IElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNzIG1pc3Np bmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMgYW5kIGlz IGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisgKgorICog SWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIHN0 cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIo SnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkgIGJvb2wg bWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1 ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRoaXMgaXMg YW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtl eS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVu KGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5l ciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwl7 CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBqc29uIG9iamVjdCIsIGtleW5hbWUpKSk7CisJ fQorCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcudmFsLCB2YWx1ZS0+dmFsLnN0 cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2YWx1ZS0+dmFsLnN0cmluZy5s ZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisKKyNkZWZpbmUgQURWQU5DRV9Q QVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIpID49IChl bmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNnKCJ1bnRlcm1pbmF0ZWQgZm9y bWF0IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogUmVjdXJzaXZlIGhl bHBlciBmb3IgcGdfZXZlbnRfdHJpZ2dlcl9leHBhbmRfY29tbWFuZAorICoKKyAqIEZpbmQgdGhl ICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5kIGV4cGFuZCBpdCBpbnRv IHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9m bXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIFN0cmluZ0luZm8gYnVmKQor eworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNvbnN0IGNoYXIgKmNw OworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWludAkJ CWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGNvbnRh aW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3RhcnRfcHRyICsgbGVuOwor CisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJY29udlNw ZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0gZmFsc2U7CisJCWNoYXIJICAg KnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxMOworCisJCWlmICgqY3Ag IT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIp OworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmdsZSAlICovCisJCWlmICgqY3Ag PT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUgbWFuZGF0b3J5IGVsZW1lbnQg bmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJICogKHdoaWNoIG1heSBiZSB0 aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIgY29sb24uCisJCSAqLworCQlp ZiAoKmNwID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOworCQkJU3RyaW5n SW5mb0RhdGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOworCisJCQlpbml0 U3RyaW5nSW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKworCQkJQURWQU5D RV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCWZvciAoOyBjcCA8IGVuZF9wdHI7KQor CQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm91bmQg YXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdworCQkJCQkgKiBj b21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJaW5p dFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7 CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBl bmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9PSAnfScpCisJ CQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQlicmVh azsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRUbywgKmNwKTsK KwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQorCQkJcGFyYW0g PSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9IGFycmF5c2Vw YnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJzaW9uIHNwZWNpZmllciIpKSk7 CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgorCQkJCXNwZWNpZmllciA9IFNw ZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6CisJCQkJc3BlY2lmaWVyID0g U3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlzcGVjaWZpZXIg PSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6CisJCQkJc3BlY2lmaWVyID0g U3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNlICdUJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjVHlwZW5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdPJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjT3BlcmF0b3JuYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJc3Bl Y2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNwZWNp ZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIFwiJWNcIiIsICpjcCkp KTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVudCB0byBiZSBleHBhbmRlZC4K KwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBw YXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBhcmFtKTsKKworCQl2YWx1ZSA9 IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIEpCX0ZPQkpFQ1QsICZrZXkp OworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9zc2libHkgYW4gYXJyYXkpIGludG8g dGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhwYW5k X2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBzdGFy dF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoYnVmLCBwYXJhbSwg dmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBq c29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0 eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2lkZW50aWZpZXIo U3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOwor CisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsKKworCXN0ciA9IHBuc3RyZHVw KGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUo c3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBkb3Qtc2VwYXJhdGVk LW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBvYmplY3QgYW5kIG1heSBjb250 YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAib2JqbmFtZSIKKyAqIChtYW5k YXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUgcXVvdGVzIGFyZSBhZGRlZCB0 byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0b3JzIHdoZXJl IG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxvZyIgZWxlbWVu dCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICogbmVlZHMgdGhhdC4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5mbyBidWYsIEpz b25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsK Kwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwu YmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3Ry KTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3Ry KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0 cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUg YXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF90eXBlbmFt ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzY2hl bWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlq c29uX3RyaXZhbHVlCWlzX2FycmF5OworCWNoYXIJICAgKmFycmF5X2RlY29yOworCisJLyoKKwkg KiBXZSBvbWl0IHNjaGVtYS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQgbmFtZSBpZiB0aGUgc2NoZW1h IGVsZW1lbnQgaXMKKwkgKiBlaXRoZXIgdGhlIGVtcHR5IHN0cmluZyBvciBOVUxMOyB0aGUgZGlm ZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcworCSAqIGlzIHRoYXQgaW4gdGhlIGxhdHRl ciB3ZSBxdW90ZSB0aGUgdHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVyIHdlIGRvbid0LgorCSAqIFRo aXMgYWxsb3dzIGZvciB0eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9kIG5lZWRzLCBzdWNoIGFzIGlu dGVydmFsIGFuZAorCSAqIHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90eXBlX2RldGFpbGVkKSwgd2hp bGUgYXQgdGhlIHNhbWUgdGltZSBhbGxvd2luZworCSAqIGZvciB0aGUgc2NoZW1hIG5hbWUgdG8g YmUgb21pdHRlZCBmcm9tIHR5cGUgbmFtZXMgdGhhdCByZXF1aXJlIHF1b3RlcworCSAqIGJ1dCBh cmUgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgorCSAqLworCisJc2NoZW1hID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5hbWUgPSBmaW5k X3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJ CQkJCQkJCSAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CQkgICJ0eXBtb2QiLCB0cnVlLCBOVUxMKTsKKwlpc19hcnJheSA9IGZpbmRfYm9vbF9pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInR5cGFy cmF5Iik7CisJc3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNhc2UgdHZfdHJ1ZToKKwkJCWFycmF5 X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfZmFsc2U6CisJCQlhcnJheV9k ZWNvciA9ICIiOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9hYnNlbnQ6CisJCWRlZmF1bHQ6CisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJheSBlbGVtZW50IikpKTsKKwl9 CisKKwlpZiAoc2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBx dW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBpZiAoc2NoZW1hWzBdID09ICdcMCcp CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBlbmFtZSk7IC8qIFNwZWNpYWwgdHlw bW9kIG5lZWRzICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiVzIiwgcXVv dGVfaWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUp KTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIsIHR5cG1vZHN0ciA/IHR5cG1vZHN0 ciA6ICIiLCBhcnJheV9kZWNvcik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFz IGFuIG9wZXJhdG9yIG5hbWUKKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX29wZXJh dG9yKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0 cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCS8qIFNj aGVtYSBtaWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0ciAhPSBOVUxMICYmIHN0clsw XSAhPSAnXDAnKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVu dGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2Jq bmFtZSIsIGZhbHNlLCBOVUxMKTsKKworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1Ziwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQg YSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJp bmcgb3Igb2YKKyAqIHR5cGUgb2JqZWN0LiAgSW4gdGhlIGxhdHRlciBjYXNlIGl0IG11c3QgY29u dGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICogYmUgcmVjdXJzaXZlbHkgZXhwYW5k ZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4gZWxlbWVudCAicHJlc2VudCIKKyAq IGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNpb24gaXMgdGhlIGVtcHR5IHN0cmlu Zy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUg ZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIuCisgKi8K K3N0YXRpYyBib29sCitleHBhbmRfanNvbnZhbF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIEpzb25i VmFsdWUgKmpzb252YWwpCit7CisJaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKQorCXsK KwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpzb252YWwtPnZhbC5zdHJpbmcudmFsLAor CQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwl9CisJZWxzZSBpZiAoanNvbnZh bC0+dHlwZSA9PSBqYnZCaW5hcnkpCisJeworCQlqc29uX3RyaXZhbHVlCXByZXNlbnQ7CisKKwkJ cHJlc2VudCA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJCSAgInByZXNlbnQiKTsKKwkJLyoKKwkJICogSWYgInByZXNlbnQi IGlzIHNldCB0byBmYWxzZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90 aGVyd2lzZSAoZWl0aGVyIHRydWUgb3IgYWJzZW50KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFuZCAi Zm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ID09IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZhbHNl OworCisJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwgYnVm KTsKKwl9CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAqLworc3RhdGlj IHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwljaGFyICAgKnN0cjsKKwlTdHJpbmdJbmZvRGF0YSBkcWRlbGltOworCXN0 YXRpYyBjb25zdCBjaGFyIGRxc3VmZml4ZXNbXSA9ICJfWFlaWllYXyI7CisJaW50ICAgICAgICAg ZHFuZXh0Y2hhciA9IDA7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZh bCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogRWFzeSBjYXNlOiBpZiB0aGVyZSBh cmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVvdGUgKi8KKwlpZiAoc3RyY2hy KHN0ciwgJ1wnJykgPT0gTlVMTCAmJgorCQlzdHJjaHIoc3RyLCAnXFwnKSA9PSBOVUxMKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICInJXMnIiwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwkJ cmV0dXJuOworCX0KKworCS8qIE90aGVyd2lzZSBuZWVkIHRvIGZpbmQgYSB1c2VmdWwgZG9sbGFy LXF1b3RlIGRlbGltaXRlciAqLworCWluaXRTdHJpbmdJbmZvKCZkcWRlbGltKTsKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZkcWRlbGltLCAiJCIpOworCXdoaWxlIChzdHJzdHIoc3RyLCBkcWRl bGltLmRhdGEpICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwg ZHFzdWZmaXhlc1tkcW5leHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hhciA9IGRxbmV4dGNoYXIgJSAo c2l6ZW9mKGRxc3VmZml4ZXMpIC0gMSk7CisJfQorCS8qIEFkZCB0cmFpbGluZyAkICovCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBwcm9k dWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLworCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0u ZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICog RXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBpbnRlZ2VyIHF1YW50aXR5LgorICovCitzdGF0aWMg dm9pZAorZXhwYW5kX2pzb252YWxfbnVtYmVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpq c29udmFsKQoreworCWNoYXIgKnN0cmRhdHVtOworCisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJp bmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVy aWNHZXREYXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1Ziwgc3RyZGF0dW0pOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBh IHJvbGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMgZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRydWUs IFBVQkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVzKTsgb3RoZXJ3aXNlLCBleHBhbmQgdGhlIGdp dmVuIHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMgYW4gaWRlbnRpZmllci4KKyAqLworc3RhdGlj IHZvaWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpz b252YWwpCit7CisJanNvbl90cml2YWx1ZQlpc19wdWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5k X2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIpOworCWVsc2UKKwl7CisJCWNoYXIgKnJvbGVu YW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxM KTsKKwkJaWYgKHJvbGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg cXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkpOworCQkJcGZyZWUocm9sZW5hbWUpOworCQl9CisJ fQorfQorCisvKgorICogRXhwYW5kIG9uZSBqc29uIGVsZW1lbnQgaW50byB0aGUgb3V0cHV0IFN0 cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQorICogY29udmVyc2lvbiBzcGVjaWZpZXIuICBUaGUg ZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwgYW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICogaWYg aXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4cGVjdCBmb3IgdGhlIGNvbnZlcnNpb24gc3BlY2lm aWVyLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFk ZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIgaW4g Zm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24pLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX29u ZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwgSnNvbmJWYWx1ZSAq anNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10 KQoreworCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJj b250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFu IGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNv bnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQu YXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29u dGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0K KworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBu b3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3aXRjaCAoc3BlY2lmaWVyKQorCXsKKwkJY2FzZSBT cGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVJIGVsZW1l bnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJ CWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUl RCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUp KSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJp bmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBvciBvYmplY3QgZm9yICUlcyBlbGVtZW50 IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQly ZXN1bHQgPSBleHBhbmRfanNvbnZhbF9zdHJpbmcoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZT dHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcg Zm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwt PnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9zdHJsaXQoYnVmLCBqc29udmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgU3BlY1R5cGVuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2 QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0 IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFs LT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoYnVmLCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJhdG9ybmFtZToKKwkJCWlmIChqc29udmFsLT50eXBl ICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09O IG9iamVjdCBmb3IgJSVPIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwg anNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX29wZXJhdG9yKGJ1ZiwganNvbnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6CisJCQlpZiAoanNvbnZhbC0+dHlw ZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX251bWJlcihidWYsIGpzb252 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjUm9sZToKKwkJCWlmIChqc29udmFsLT50eXBl ICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09O IG9iamVjdCBmb3IgJSVSIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwg anNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3JvbGUoYnVmLCBqc29udmFsKTsK KwkJCWJyZWFrOworCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxl cnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEl0ZXJh dGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNPTiBhcnJheSwgZXhwYW5kaW5nIGVhY2ggb25lIGlu dG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5mbyBwZXIgdGhlIGdpdmVuIGNvbnZlcnNpb24gc3Bl Y2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdpdmVuCisgKiBzZXBhcmF0b3IuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAor CQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLCBjb252U3BlY2lmaWVy IHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBjaGFyICpmbXQpCit7CisJRXJyb3JDb250ZXh0Q2Fs bGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29uYkNvbnRhaW5lciAqY29udGFpbmVyOworCUpzb25i SXRlcmF0b3IgICppdDsKKwlKc29uYlZhbHVlCXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlmaXJz dCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEgYXJyYXllbGVtOworCisJLyogSWYgd2Ugd2VyZSBn aXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNr ICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJy b3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxl cnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4 dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmIChqc29uYXJyLT50eXBlICE9IGpi dkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBK U09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5 LmRhdGE7CisJaWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250YWluZXIpKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkp KTsKKworCWluaXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJhdG9y SW5pdChjb250YWluZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwg JnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQorCQl7 CisJCQlyZXNldFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25lX2pz b25iX2VsZW1lbnQoJmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJ eworCQkJCWlmICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJh eXNlcCk7CisKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEs IGFycmF5ZWxlbS5sZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlp ZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsK K30KKworLyoKKyAqIFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQuCisg Ki8KK2NoYXIgKgorZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7 CisJRGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8gYnVmID0gKFN0cmlu Z0luZm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5m byhidWYpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJHZXRE YXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9pbnRlcihkKTsK KworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29uYi0+cm9vdCwgYnVmKTsKKworCXJldHVybiBi dWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBm cm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVt ZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0 IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0 IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dl ZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24g c3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisgKiAl CQlleHBhbmQgdG8gYSBsaXRlcmFsICUuCisgKiBJCQlleHBhbmQgYXMgYSBzaW5nbGUsIG5vbi1x dWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEgcG9zc2libHktcXVhbGlmaWVk IGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICogTwkJZXhwYW5kIGFz IGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChxdW90 ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFzIGEgc2ltcGxlIHN0cmluZyAo bm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBudW1iZXIgKG5vIHF1b3Rpbmcp CisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5IHF1b3RlZCBuYW1lLCBvciBQ VUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2ZSBhbiBvcHRpb25hbCBzZXBh cmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBjb2xvbi4gIEl0cyBwcmVzZW5j ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4gYXJy YXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkgZWxl bWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRfUCgw KTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gVGV4dERhdHVtR2V0Q1N0cmlu Zyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShkZGxfZGVw YXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNvbnRl eHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICogWFhY OiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJsZS4K KyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJ ZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNoYXIg KikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IDk5YzlmOTEuLjQyMDVkZGEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsxNzA4LDM5IEBAIHByb2Nlc3Nf b3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRlbnRp dHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICogUmV0 dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK0Zvcm1fcGdfc2VxdWVuY2Vf ZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIgICAg ICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFwVHVw bGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJRm9ybV9wZ19z ZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBzZXF1 ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisKKwlp ZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xfU0VM RUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJ CQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2VxX3R1 cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9mKEZv cm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6ZW9m KEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVm KTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2VxOwor fQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRoZSBm b3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMK aW5kZXggMDYwZmQ3ZS4uNmFmMjI1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMK QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1lcmljLmgiCiAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIg KnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIAogLyoKQEAgLTM2Nyw3 ICszNjYsNyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0 eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBu YW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAq dHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4IDZkNGMxYzIuLjZiMjM2ZTUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JlZ3Byb2MuYwpAQCAtNDQsNiArNDQsOCBAQAogc3RhdGljIHZvaWQgcGFyc2VOYW1lQW5k QXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJIExp c3QgKipuYW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcyk7CiAKK3N0YXRpYyB2b2lkIGZv cm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJCQkJ CQkJCQkJICAgU3RyaW5nSW5mbyBidWYsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpAQCAt MzMyLDYgKzMzNCwyOSBAQCBmb3JtYXRfcHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJl X29pZCkKIH0KIAogLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJv YyBPSUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lk IHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBi dWY7CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlw cm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2Vk dXJlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQp OworCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5p dFN0cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nm b3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsK KworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5k ZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCiAgKiBU aGlzIGV4cG9ydHMgdGhlIHVzZWZ1bCBmdW5jdGlvbmFsaXR5IG9mIHJlZ3Byb2NlZHVyZW91dCBm b3IgdXNlCkBAIC0yMDYwLDMgKzIwODUsMzAgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3Qg Y2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcGZyZWUocmF3 bmFtZSk7CiB9CisKKy8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhpc2VkIGFyZ3VtZW50cyBvZiB0 aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZmZXIuICBmb3JjZV9x dWFsaWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5cGUgbmFtZXMKKyAq IHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF9wcm9j ZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0cmluZ0luZm8gYnVm LAorCQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlpOworCWludAkJCW5h cmdzID0gcHJvY2Zvcm0tPnByb25hcmdzOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAn KCcpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCXsKKwkJT2lkCQkJdGhpc2FyZ3R5 cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCisJCWlmIChpID4gMCkKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsCisJCQkJCQkJICAgZm9yY2VfcXVhbGlmeSA/CisJCQkJCQkJICAgZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkKHRoaXNhcmd0eXBlKSA6CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmUodGhp c2FyZ3R5cGUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDk5NTlmNjkuLmVmMzdlMDkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1OCw3ICszNTgsNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1 bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJ CQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRp YyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBw cm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8g YnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxi b2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRf cnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNw YWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2Rl cGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBA IC00ODgsMjIgKzQ4NywxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlz dChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNs YXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1z dGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0 eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGly ZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9p ZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsK IHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFt ZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUo T2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5j aWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAot CQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJ CQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0 ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMg dm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAq c3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlv bnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVm LCBEYXR1bSByZWxvcHRpb25zKTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2Rl ICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkgICBib29sIHNo b3dpbXBsaWNpdCk7CkBAIC0xMDI1LDY1ICsxMDE3LDEyIEBAIHBnX2dldF90cmlnZ2VyZGVmX3dv cmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5vZGUJ ICAgKnF1YWw7Ci0JCWNoYXIJCXJlbGtpbmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0Owot CQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0JCVJh bmdlVGJsRW50cnkgKm5ld3J0ZTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICJX SEVOICgiKTsKKwkJY2hhciAgICAgICAqcXVhbHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9Ob2Rl KFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmlnZ2Vy X3doZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwgcHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFu ZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLwotCQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVu dHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJlbGlk ID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJb2xk cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9IG1h a2VBbGlhcygib2xkIiwgTklMKTsKLQkJb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKLQkJ b2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9sZHJ0 ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkp OwotCQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0 cmlncmVjLT50Z3JlbGlkOwotCQluZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdydGUt PnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFrZUFs aWFzKCJuZXciLCBOSUwpOwotCQluZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQluZXdy dGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRlLT5p bkZyb21DbCA9IHRydWU7Ci0KLQkJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0JCW1l bXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21ha2Uy KG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5zdWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVzID0g TklMOwotCQlkcG5zLmFwcGVuZHJlbHMgPSBOVUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZkcG5z LCBOSUwsIE5VTEwpOwotCQlzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJLyog U2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29udGV4 dC5idWYgPSAmYnVmOwotCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsK LQkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7Ci0JCWNvbnRleHQud2luZG93VExpc3QgPSBO SUw7Ci0JCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9 IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsKLQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9D T0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7 Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0 LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQs IGZhbHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIpICIpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJXSEVOICglcykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VURSBGVU5DVElPTiAlcygiLApAQCAtMTEyNCw2ICsxMDYz LDY0IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkK IAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAKK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVz ZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkp Cit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWNoYXIgICAgICAgIHJlbGtpbmQ7CisJZGVwYXJz ZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVu dHJ5ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOworCisgICBpbml0U3RyaW5nSW5m bygmYnVmKTsKKworICAgcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlk KTsKKworICAgLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICov CisgICBvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAgIG9sZHJ0ZS0+cnRla2lu ZCA9IFJURV9SRUxBVElPTjsKKyAgIG9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwor ICAgb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKKyAgIG9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxp YXMoIm9sZCIsIE5JTCk7CisgICBvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOworICAgb2xk cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBvbGRydGUtPmluaCA9IGZhbHNlOworICAgb2xkcnRl LT5pbkZyb21DbCA9IHRydWU7CisKKyAgIG5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkp OworICAgbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAgbmV3cnRlLT5yZWxpZCA9 IHRyaWdyZWMtPnRncmVsaWQ7CisgICBuZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworICAgbmV3 cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKKyAgIG5ld3J0ZS0+ZXJlZiA9IG5l d3J0ZS0+YWxpYXM7CisgICBuZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAgIG5ld3J0ZS0+aW5o ID0gZmFsc2U7CisgICBuZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworICAgLyogQnVpbGQgdHdv LWVsZW1lbnQgcnRhYmxlICovCisgICBtZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Cisg ICBkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworICAgZHBucy5jdGVz ID0gTklMOworICAgc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKKyAgIHNldF9z aW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKKworICAgLyogU2V0IHVwIGNvbnRleHQgd2l0aCBv bmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKyAgIGNvbnRleHQuYnVmID0gJmJ1ZjsKKyAgIGNv bnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworICAgY29udGV4dC53aW5kb3dD bGF1c2UgPSBOSUw7CisgICBjb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworICAgY29udGV4dC52 YXJwcmVmaXggPSB0cnVlOworICAgY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRU WUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworICAg Y29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKyAgIGNvbnRleHQuaW5k ZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworICAgY29udGV4dC5zcGVjaWFsX2V4cHJraW5k ID0gRVhQUl9LSU5EX05PTkU7CisKKyAgIGdldF9ydWxlX2V4cHIod2hlbkNsYXVzZSwgJmNvbnRl eHQsIGZhbHNlKTsKKworICAgcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0tLS0tLS0tCiAg KiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBpbmRleAogICoK QEAgLTE4OTAsNiArMTg4NywxMyBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxp ZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwg cHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0 IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3Bn X2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0 a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVy bmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24uCiAg Ki8KQEAgLTIxNDIsNiArMjE0NiwxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9leHQoUEdfRlVO Q1RJT05fQVJHUykKIH0KIAogLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRl ZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29u c3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBw Z19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2Up OworfQorCisvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVS IFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUxMSw3 ICszNTI0LDcgQEAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FSR1Mp CiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGljIHZv aWQKK3ZvaWQKIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBs ZSBwcm9jdHVwKQogewogCWludAkJCW51bWFyZ3M7CkBAIC0xMjA1MSw3ICsxMjA2NCw3IEBAIGdl dF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNl X2NvbnRleHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdh bnQgdGhpcyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0 YXR5cGUuKQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3Bj bGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0x MjQ0NSw3ICsxMjQ1OCw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCBy ZWxpZCkKICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBh bmQgc2NoZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0 ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9p ZCAqYXJndHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFk aWNfcCwKIAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTI4MzEs NyArMTI4NDQsNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0 aW9ucykKIC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9u J3MgcmVsb3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFy ICoKIGZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0g TlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGJlNDc1ODMuLjNlN2YzNjQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4OTQsNCArMTE4OTQsMTAgQEAKICAgcHJvcmV0dHlw ZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFy eScsCiAgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9LAogCit7 IG9pZCA9PiAnNDY0MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIGpz b24gZm9ybWF0IHN0cmluZycsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nLCBw cm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5kJywg cHJvc3JjID0+ICdkZGxfZGVwYXJzZV90b19qc29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBkZXNj ciA9PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKKyAg cHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0 ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4 cGFuZF9jb21tYW5kJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2Vx dWVuY2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggZDM4YzBlMi4u NGNhODRiMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVk ZWYgc3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCBy ZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19G VU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7 CitleHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNl cXVlbmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnN0bXQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3Mg QWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90 Y29wL2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRm ZGY0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApA QCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5o CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIg KmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpk ZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAq b2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRp ZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXgg OTRkZTEzZC4uYjUzMjk0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0 aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02Miw2 ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJ b2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJ ICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAy MjFjM2U2Li44MTNlYWZkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0LDEyIEBA IGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdT KTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxp ZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJ MHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4 dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVy biBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9y Y2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQp OwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwog ZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMy IHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUs IGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGlt dW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5o CmluZGV4IDdkNDg5NzEuLjNkNjlhNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1 bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2ICsx Myw3IEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2lu Y2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCkBA IC0yMywxMiArMjQsMTYgQEAgc3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdf Z2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0 X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBj aGFyICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAor CQkJCQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIg KnBnX2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNo YXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7Citl eHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4g Y2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAq YWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQo T2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHBy ZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXBy ZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9m b3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDUsMTYgQEAg ZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxl LAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVy YXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29w Y2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25f bmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lk ICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFk aWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4g Y2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4 dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5 cGUsCisJCQkJCQkJICBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxv cHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRl Zl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxi b2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkv KiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBhNGE0ZTM1Li4w YjU2YmZiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYyMiw2ICsxNjIyLDkgQEAg T1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpFbGVtCitPYmpU cmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1lc3BhY2VTZWFy Y2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE5MCw2ICszMTkzLDcgQEAgY29sb3JtYXBy YW5nZQogY29tcGFyZV9jb250ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nfb2Zf bGV2ZWxfY29udGV4dAorY29udlNwZWNpZmllcgogY29udmVydF90ZXN0ZXhwcl9jb250ZXh0CiBj b3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKLS0gCjEuOC4zLjEKCg== --00000000000093c3cd05e75b2f40--