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 1qH3VR-0000V6-Nx for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Jul 2023 14:29: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 1qH3VQ-0001s5-Fq for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Jul 2023 14:29:20 +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 1qH3VP-0001rw-SH for pgsql-hackers@lists.postgresql.org; Wed, 05 Jul 2023 14:29:20 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qH3VH-002MKV-6S for pgsql-hackers@lists.postgresql.org; Wed, 05 Jul 2023 14:29:19 +0000 Received: from [192.168.1.185] (unknown [182.232.176.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 4D39CE2043A; Wed, 5 Jul 2023 17:29:06 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1688567350; bh=jnd63tkcLhXmeJLAwmPrPszkqBEfSAASOiYXdwgrzqg=; h=Message-ID:Date:User-Agent:Subject:From:To:Cc:References: In-Reply-To:From; b=fUXRHWNIGTdLx0+SOpuWOVQtVMkhzr3wbmzVjrQU850iA3QUpG+I0rBws6fBqsoWS Te1uQ8ySsBRBOmfz8hOsY6gJ0gNgyFmOu9pf7QOZF4u5+M0WclmqnNipRSZDVP2Dh0 u9MyMW4ZMKrv/dEKy/mFP8HZZYgpVnu8AET4evVydWLCVJgouKJ6+L69DagogNU5BU oTQGuPOZFl3OQRUWTthzStJ3rgwz97KELhw3D36W25vTGUdq3nMld2+MvzVHZIFRyL /+ZAL2Ht8oZtcO6I2woMqBoB74lDb9hJSIBVRKLq8BllLLJpmsONsiH3nYB4TnAJoG Hm22ilqCZ+mPg== Content-Type: multipart/mixed; boundary="------------F35pOc4VlVuDigTZJkmbC5q0" Message-ID: Date: Wed, 5 Jul 2023 21:28:59 +0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: Removing unneeded self joins From: Andrey Lepikhov To: "Gregory Stark (as CFM)" , =?UTF-8?Q?Micha=c5=82_K=c5=82eczek?= Cc: PostgreSQL Hackers References: <64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru> <13021914.uLZWGnKmhe@aivenronan> <2375492.jE0xQCEvom@aivenronan> <0fd15c10-eaa5-51bd-b5c7-e635fe03a94d@postgrespro.ru> <20221206184643.zya44h5auv6f45zp@awork3.anarazel.de> <36579124-f9d9-a51e-38b3-af3511921c7e@postgrespro.ru> <88079CBD-B5BB-4C61-A68B-A8C67599E1C7@kleczek.org> Content-Language: en-US Organization: Postgres Professional In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------F35pOc4VlVuDigTZJkmbC5q0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, During the significant code revision in v.41 I lost some replacement operations. Here is the fix and extra tests to check this in the future. Also, Tom added the JoinDomain structure five months ago, and I added code to replace relids for that place too. One more thing, I found out that we didn't replace SJs, defined by baserestrictinfos if no one self-join clause have existed for the join. Now, it is fixed, and the test has been added. To understand changes readily, see the delta file in the attachment. -- regards, Andrey Lepikhov Postgres Professional --------------F35pOc4VlVuDigTZJkmbC5q0 Content-Type: text/plain; charset=UTF-8; name="v41-v42-delta.txt" Content-Disposition: attachment; filename="v41-v42-delta.txt" Content-Transfer-Encoding: base64 RnJvbSA4ZjVhNDMyZjZmYmJjYWQxZmQyOTM3ZjMzYWYwOWU5MzI4NjkwYjZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogVHVlLCA0IEp1bCAyMDIzIDE2OjA3OjUwICswNzAw ClN1YmplY3Q6IFtQQVRDSF0gQWRkIGxvc3QgYXJyYW5nZW1lbnRzIG9mIHJlbGlkcyBhbmQg dmFybm9zLiBBZGQgdGhlIHRlc3QgdG8KIGNoZWNrIGl0LiBBZGQgb25lIG1vcmUgY2xlYW5p bmcgcHJvY2VkdXJlIG9uIEpvaW5Eb21haW4gcmVsaWRzIHdoaWNoIHdhcwogaW50cm9kdWNl ZCByZWNlbnRseSB3aXRoIGNvbW1pdCAzYmVmNTZlLiBGaXggdGhlIGNvcm5lciBjYXNlIHdo ZW4gd2UgaGF2ZW4ndAogcmVtb3ZlZCBTSiBpZiB0aGUgc2VsZmpvaW5xdWFscyBsaXN0IHdh cyBlbXB0eS4KCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5z LmMgICAgIHwgMTUgKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQgICAgICAgICAgICB8IDI2ICsrKysrKysrKysrKysrKystLS0KIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dCB8IDE3ICsrKysrLS0tLS0tLQog c3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgICAgICAgICAgICAgICAgIHwgIDkgKysr KysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9p bnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCmluZGV4 IGE5M2U0Y2UwNWMuLjE1MjM0YjdhM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2FuYWx5emVqb2lucy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2FuYWx5emVqb2lucy5jCkBAIC00MjQsNiArNDI0LDggQEAgcmVtb3ZlX3JlbF9mcm9t X3F1ZXJ5X2NvbW1vbihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlz amluZi0+Y29tbXV0ZV9hYm92ZV9yID0gcmVwbGFjZV9yZWxpZChzamluZi0+Y29tbXV0ZV9h Ym92ZV9yLCBvanJlbGlkLCBzdWJzdCk7CiAJCXNqaW5mLT5jb21tdXRlX2JlbG93X2wgPSBy ZXBsYWNlX3JlbGlkKHNqaW5mLT5jb21tdXRlX2JlbG93X2wsIG9qcmVsaWQsIHN1YnN0KTsK IAkJc2ppbmYtPmNvbW11dGVfYmVsb3dfciA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPmNvbW11 dGVfYmVsb3dfciwgb2pyZWxpZCwgc3Vic3QpOworCisJCXJlcGxhY2VfdmFybm8oKE5vZGUg Kikgc2ppbmYtPnNlbWlfcmhzX2V4cHJzLCByZWxpZCwgc3Vic3QpOwogCX0KIAogCS8qCkBA IC00NjUsNiArNDY3LDggQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5X2NvbW1vbihQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogcGhfbmVlZGVkIG1pZ2h0IG9y IG1pZ2h0IG5vdCBiZWNvbWUgZW1wdHkgKi8KIAkJCXBodi0+cGhyZWxzID0gcmVwbGFjZV9y ZWxpZChwaHYtPnBocmVscywgcmVsaWQsIHN1YnN0KTsKIAkJCXBodi0+cGhyZWxzID0gcmVw bGFjZV9yZWxpZChwaHYtPnBocmVscywgb2pyZWxpZCwgc3Vic3QpOworCQkJcGhpbmZvLT5w aF9sYXRlcmFsID0gcmVwbGFjZV9yZWxpZChwaGluZm8tPnBoX2xhdGVyYWwsIHJlbGlkLCBz dWJzdCk7CisJCQlwaGluZm8tPnBoX3Zhci0+cGhyZWxzID0gcmVwbGFjZV9yZWxpZChwaGlu Zm8tPnBoX3Zhci0+cGhyZWxzLCByZWxpZCwgc3Vic3QpOwogCQkJQXNzZXJ0KCFibXNfaXNf ZW1wdHkocGh2LT5waHJlbHMpKTsKIAkJCUFzc2VydChwaHYtPnBobnVsbGluZ3JlbHMgPT0g TlVMTCk7IC8qIG5vIG5lZWQgdG8gYWRqdXN0ICovCiAJCX0KQEAgLTE1NDUsNiArMTU0OSw3 IEBAIHVwZGF0ZV9lY2xhc3MoRXF1aXZhbGVuY2VDbGFzcyAqZWMsIGludCBmcm9tLCBpbnQg dG8pCiAJCX0KIAogCQllbS0+ZW1fcmVsaWRzID0gcmVwbGFjZV9yZWxpZChlbS0+ZW1fcmVs aWRzLCBmcm9tLCB0byk7CisJCWVtLT5lbV9qZG9tYWluLT5qZF9yZWxpZHMgPSByZXBsYWNl X3JlbGlkKGVtLT5lbV9qZG9tYWluLT5qZF9yZWxpZHMsIGZyb20sIHRvKTsKIAogCQkvKiBX ZSBvbmx5IHByb2Nlc3MgaW5uZXIgam9pbnMgKi8KIAkJcmVwbGFjZV92YXJubygoTm9kZSAq KSBlbS0+ZW1fZXhwciwgZnJvbSwgdG8pOwpAQCAtMjEwMSw3ICsyMTA2LDcgQEAgcmVtb3Zl X3NlbGZfam9pbnNfb25lX2dyb3VwKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRz KQogCQkJICovCiAJCQlyZXN0cmljdGxpc3QgPSBnZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1 YWxpdGllcyhyb290LCBqb2lucmVsaWRzLAogCQkJCQkJCQkJCQkJCQkJaW5uZXItPnJlbGlk cywKLQkJCQkJCQkJCQkJCQkJCW91dGVyLCAwKTsKKwkJCQkJCQkJCQkJCQkJCW91dGVyLCBO VUxMKTsKIAogCQkJLyoKIAkJCSAqIFByb2Nlc3MgcmVzdHJpY3RsaXN0IHRvIHNlcGVyYXRl IHRoZSBzZWxmIGpvaW4gcXVhbHMgb3V0IG9mCkBAIC0yMTExLDYgKzIxMTYsMTQgQEAgcmVt b3ZlX3NlbGZfam9pbnNfb25lX2dyb3VwKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVs aWRzKQogCQkJc3BsaXRfc2VsZmpvaW5fcXVhbHMocm9vdCwgcmVzdHJpY3RsaXN0LCAmc2Vs ZmpvaW5xdWFscywKIAkJCQkJCQkJICZvdGhlcmpvaW5xdWFscywgaW5uZXItPnJlbGlkLCBv dXRlci0+cmVsaWQpOwogCisJCQkvKgorCQkJICogVG8gZW5hYmxlIFNKRSBmb3IgdGhlIG9u bHkgZGVnZW5lcmF0ZSBjYXNlIHdpdGhvdXQgYW55IHNlbGYgam9pbgorCQkJICogY2xhdXNl cyBhdCBhbGwsIGFkZCBiYXNlcmVzdHJpY3RpbmZvIHRvIHRoaXMgbGlzdC4KKwkJCSAqIERl Z2VuZXJhdGUgY2FzZSB3b3JrcyBvbmx5IGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgc2FtZSBj bGF1c2UuIFNvCisJCQkgKiBkb2Vzbid0IG1hdHRlciB3aGljaCBzaWRlIHRvIGFkZC4KKwkJ CSAqLworCQkJc2VsZmpvaW5xdWFscyA9IGxpc3RfY29uY2F0KHNlbGZqb2lucXVhbHMsIG91 dGVyLT5iYXNlcmVzdHJpY3RpbmZvKTsKKwogCQkJLyoKIAkJCSAqIERldGVybWluZSBpZiB0 aGUgaW5uZXIgdGFibGUgY2FuIGR1cGxpY2F0ZSBvdXRlciByb3dzLiAgV2UgbXVzdAogCQkJ ICogYnlwYXNzIHRoZSB1bmlxdWUgcmVsIGNhY2hlIGhlcmUgc2luY2Ugd2UncmUgcG9zc2li bHkgdXNpbmcgYQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2lu Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggYjFmNDNm NmZmOC4uMDI3YzM1NmJjYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBA IC01ODA3LDExICs1ODA3LDEzIEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCBwLiog ZnJvbQogICAocGFyZW50IHAgbGVmdCBqb2luIGNoaWxkIGMgb24gKHAuayA9IGMuaykpIGpv aW4gcGFyZW50IHggb24gcC5rID0geC5rCiAgIHdoZXJlIHAuayA9IDEgYW5kIHAuayA9IDI7 Ci0gICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgUmVz dWx0CiAgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCi0oMiByb3dzKQorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgcGFyZW50X3BrZXkgb24gcGFyZW50IHgKKyAgICAgICAgIEluZGV4IENv bmQ6IChrID0gMSkKKyg0IHJvd3MpCiAKIC0tIGJ1ZyA1MjU1OiB0aGlzIGlzIG5vdCBvcHRp bWl6YWJsZSBieSBqb2luIHJlbW92YWwKIGJlZ2luOwpAQCAtNjMyNyw2ICs2MzI5LDI0IEBA IG9uIHRydWU7CiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgeQog KDcgcm93cykKIAorLS0gQ2hlY2sgdXBkYXRpbmcgb2YgTGF0ZXJhbCBsaW5rcyBmcm9tIHRv cC1sZXZlbCBxdWVyeSB0byB0aGUgcmVtb3ZpbmcgcmVsYXRpb24KK2V4cGxhaW4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gcGdfYW0gYW0gV0hFUkUgYW0uYW1uYW1lIElOICgKKyAg U0VMRUNUIGMxLnJlbG5hbWUgQVMgcmVsbmFtZQorICBGUk9NIHBnX2NsYXNzIGMxCisgICAg Sk9JTiBwZ19jbGFzcyBjMgorICAgIE9OIGMxLm9pZD1jMi5vaWQgQU5EIGMxLm9pZCA8IDEw CispOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBT ZW1pIEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoYW0uYW1uYW1lID0gYzIucmVsbmFtZSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBwZ19hbSBhbQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBwZ19jbGFzc19vaWRfaW5kZXggb24gcGdfY2xhc3Mg YzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgob2lkIDwgJzEwJzo6b2lkKSBBTkQg KG9pZCBJUyBOT1QgTlVMTCkpCisoNiByb3dzKQorCiAtLQogLS0gU0pSIGNvcm5lciBjYXNl OiB1bmlxdWVuZXNzIG9mIGFuIGlubmVyIGlzIFtwYXJ0aWFsbHldIGRlcml2ZWQgZnJvbQog LS0gYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC91cGRhdGFibGVfdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC91cGRhdGFibGVfdmlld3Mub3V0CmluZGV4IDE5NTBlNmYyODEuLmE3M2MxZjkw YzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3Zp ZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3 cy5vdXQKQEAgLTI0OTksMTYgKzI0OTksMTMgQEAgU0VMRUNUICogRlJPTSByd192aWV3MTsK ICgxIHJvdykKIAogRVhQTEFJTiAoY29zdHMgb2ZmKSBERUxFVEUgRlJPTSByd192aWV3MSBX SEVSRSBpZCA9IDEgQU5EIHNub29wKGRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIFVwZGF0ZSBvbiBiYXNlX3RibCBiYXNlX3RibF8xCi0gICAtPiAgTmVzdGVkIExv b3AKLSAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJhc2VfdGJsX3BrZXkgb24gYmFz ZV90YmwgYmFzZV90YmxfMQotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gMSkK LSAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJhc2VfdGJsX3BrZXkgb24gYmFzZV90 YmwKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IDEpCi0gICAgICAgICAgICAg ICBGaWx0ZXI6ICgoTk9UIGRlbGV0ZWQpIEFORCBzbm9vcChkYXRhKSkKLSg3IHJvd3MpCisg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRh dGUgb24gYmFzZV90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJhc2VfdGJsX3BrZXkg b24gYmFzZV90YmwKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IDEpCisgICAgICAgICBG aWx0ZXI6ICgoTk9UIGRlbGV0ZWQpIEFORCBzbm9vcChkYXRhKSkKKyg0IHJvd3MpCiAKIERF TEVURSBGUk9NIHJ3X3ZpZXcxIFdIRVJFIGlkID0gMSBBTkQgc25vb3AoZGF0YSk7CiBOT1RJ Q0U6ICBzbm9vcGVkIHZhbHVlOiBSb3cgMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvam9pbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAppbmRleCBh MTcwYTliYmQwLi4xYTY0MzYzODM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qb2luLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbApAQCAtMjM5 NCw2ICsyMzk0LDE1IEBAIGxlZnQgam9pbiAoc2VsZWN0IGNvYWxlc2NlKHkucTEsIDEpIGZy b20gaW50OF90YmwgeQogCW9uIHRydWUpIHoKIG9uIHRydWU7CiAKKy0tIENoZWNrIHVwZGF0 aW5nIG9mIExhdGVyYWwgbGlua3MgZnJvbSB0b3AtbGV2ZWwgcXVlcnkgdG8gdGhlIHJlbW92 aW5nIHJlbGF0aW9uCitleHBsYWluIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHBnX2Ft IGFtIFdIRVJFIGFtLmFtbmFtZSBJTiAoCisgIFNFTEVDVCBjMS5yZWxuYW1lIEFTIHJlbG5h bWUKKyAgRlJPTSBwZ19jbGFzcyBjMQorICAgIEpPSU4gcGdfY2xhc3MgYzIKKyAgICBPTiBj MS5vaWQ9YzIub2lkIEFORCBjMS5vaWQgPCAxMAorKTsKKwogLS0KIC0tIFNKUiBjb3JuZXIg Y2FzZTogdW5pcXVlbmVzcyBvZiBhbiBpbm5lciBpcyBbcGFydGlhbGx5XSBkZXJpdmVkIGZy b20KIC0tIGJhc2VyZXN0cmljdGluZm8gY2xhdXNlcy4KLS0gCjIuNDEuMAoK --------------F35pOc4VlVuDigTZJkmbC5q0 Content-Type: text/plain; charset=UTF-8; name="v42-0001-Remove-self-joins.patch" Content-Disposition: attachment; filename="v42-0001-Remove-self-joins.patch" Content-Transfer-Encoding: base64 RnJvbSBmMjVjYjJmMWQxOTZhOGExZmY2MTQ2M2MwYWE1ZGM2NzNmNzI1MWViIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgTGVwaWtob3YgPGEubGVwaWtob3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IE1vbiwgMTUgTWF5IDIwMjMgMDk6MDQ6NTEgKzA1MDAKU3Vi amVjdDogW1BBVENIXSBSZW1vdmUgc2VsZi1qb2lucy4KClNlbGYgSm9pbiBFbGltaW5hdGlv biAoU0pFKSBmZWF0dXJlIHJlbW92ZXMgYW4gaW5uZXIgam9pbiBvZiBhIHBsYWluIHRhYmxl IHRvCml0c2VsZiBpbiB0aGUgcXVlcnkgdHJlZSBpZiBpcyBwcm92ZWQgdGhhdCB0aGUgam9p biBjYW4gYmUgcmVwbGFjZWQgd2l0aAphIHNjYW4gd2l0aG91dCBpbXBhY3QgdG8gdGhlIHF1 ZXJ5IHJlc3VsdC4KU2VsZiBqb2luIGFuZCBpbm5lciByZWxhdGlvbiBhcmUgcmVwbGFjZWQg d2l0aCB0aGUgb3V0ZXIgaW4gcXVlcnksIGVxdWl2YWxlbmNlCmNsYXNzZXMgYW5kIHBsYW5u ZXIgaW5mbyBzdHJ1Y3R1cmVzLiBBbHNvLCBpbm5lciByZXN0cmljdGxpc3QgbW92ZXMgdG8g dGhlCm91dGVyIG9uZSB3aXRoIHJlbW92aW5nIGR1cGxpY2F0ZWQgY2xhdXNlcy4gVGh1cywg dGhpcyBvcHRpbWl6YXRpb24gcmVkdWNlcwpsZW5ndGggb2YgcmFuZ2UgdGFibGUgbGlzdCAo ZXNwZWNpYWxseSBpdCBtYWtlIHNlbnNlIGZvciBwYXJ0aXRpb25lZCByZWxhdGlvbnMpLApy ZWR1Y2VzIG51bWJlciBvZiByZXN0cmljdGlvbiBjbGF1c2VzID09PSBzZWxlY3Rpdml0eSBl c3RpbWF0aW9ucyBhbmQKcG90ZW50aWFsbHkgY2FuIGltcHJvdmUgdG90YWwgcGxhbm5lciBw cmVkaWN0aW9uIGZvciB0aGUgcXVlcnkuCgpUaGUgU0pFIHByb29mIGJhc2VkIG9uIGlubmVy cmVsX2lzX3VuaXF1ZSBtYWNoaW5lcnkuCgpXZSBjYW4gcmVtb3ZlIGEgc2VsZi1qb2luIHdo ZW4gZm9yIGVhY2ggb3V0ZXIgcm93IGlmOgoxLiBBdCBtb3N0IG9uZSBpbm5lciByb3cgbWF0 Y2hlcyB0aGUgam9pbiBjbGF1c2UuCjIuIEVhY2ggbWF0Y2hlZCBpbm5lciByb3cgbXVzdCBi ZSAocGh5c2ljYWxseSkgdGhlIHNhbWUgcm93IGFzIHRoZSBvdXRlciBvbmUuCgpJbiB0aGlz IHBhdGNoIHdlIHVzZSB0aGUgbmV4dCBhcHByb2FjaCB0byBpZGVudGlmeSBhIHNlbGYtam9p bjoKMS4gQ29sbGVjdCBhbGwgbWVyZ2Vqb2luYWJsZSBqb2luIHF1YWxzIHdoaWNoIGxvb2sg bGlrZSBhLnggPSBiLngKMi4gQWRkIHRvIHRoZSBsaXN0IGFib3ZlIGJhc2VyZXRyaWN0aW5m byBvZiBpbm5lciB0YWJsZS4KMy4gQ2hlY2sgaW5uZXJyZWxfaXNfdW5pcXVlKCkgZm9yIHRo ZSBxdWFsIGxpc3QuIElmIGl0IHJldHVybnMgZmFsc2UsIHNraXAgdGhpcwpwYWlyIG9mIGpv aW5pbmcgdGFibGVzLgo0LiBDaGVjayB1bmlxdWVuZXNzLCBwcm92ZWQgYnkgYmFzZXJlc3Ry aWN0aW5mbyBjbGF1c2VzLiBUbyBwcm92ZSBwb3NzaWJpbGl0eQpvZiB0aGUgc2VsZi1qb2lu IGVsaW1pbmF0aW9uIGlubmVyIGFuZCBvdXRlciBjbGF1c2VzIG11c3QgaGF2ZSBleGFjdCBt YXRjaC4KClJlbGF0aW9uIHJlcGxhY2VtZW50IHByb2NlZHVyZSBpcyBub3QgdHJpdmlhbCBh bmQgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIG9uZSwKdXNlZCB0byByZW1vdmUgdXNlbGVzcyBs ZWZ0IGpvaW5zLgoKVGVzdHMsIGNvdmVyaW5nIHRoaXMgZmVhdHVyZSwgYWRkZWQgdG8gdGhl IGpvaW4uc3FsLgpTb21lIHJlZ3Jlc3Npb24gdGVzdHMgY2hhbmdlZCBkdWUgdG8gc2VsZi1q b2luIHJlbW92YWwgbG9naWMuCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg ICAgICAgICAgICAgICAgIHwgICAxNiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jICAgICAgICAgfCAgIDM4ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2FuYWx5emVqb2lucy5jICAgICB8IDEwOTIgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgICAgICAgICB8ICAgIDUgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgICAyMiArCiBzcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICAgICAgfCAgICAzICsKIHNy Yy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oICAgICAgICAgICAgICB8ICAgIDcgKwog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dCAgICAgIHwgICAzMiAr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICAgICAgfCAgODI0 ICsrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0 ICAgICAgICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxl X3ZpZXdzLm91dCB8ICAgMTcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Mu c3FsICAgICAgICAgICB8ICAgMTYgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwg ICAgICAgICAgICAgICAgIHwgIDM2MCArKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgIDIgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjM3 MyBpbnNlcnRpb25zKCspLCA2NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggNjI2 MmNiN2JiMi4uNjgyMTVlMTA5MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTQxOSw2ICs1NDE5LDIy IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxh Y2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxl X3NlbGZfam9pbl9yZW1vdmFsIiB4cmVmbGFiZWw9ImVuYWJsZV9zZWxmX2pvaW5fcmVtb3Zh bCI+CisgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfc2VsZl9qb2luX3JlbW92YWw8L3Zh cm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsPC92YXJuYW1l PiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJt PgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAg ICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHF1ZXJ5IHBsYW5uZXIncyBvcHRpbWl6YXRp b24gd2hpY2ggYW5hbHlzZXMKKyAgICAgICAgcXVlcnkgdHJlZSBhbmQgcmVwbGFjZXMgc2Vs ZiBqb2lucyB3aXRoIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHNpbmdsZQorICAgICAgICBz Y2Fucy4gVGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gb25seSBwbGFpbiB0YWJsZXMuCisgICAg ICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLXNlcXNjYW4iIHhyZWZsYWJlbD0iZW5hYmxl X3NlcXNjYW4iPgogICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX3NlcXNjYW48L3Zhcm5h bWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA2YTkzZDc2N2E1Li41MDgyODVk MWVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTM0OTQs NiArMzQ5NCwyMSBAQCBib29sCiByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcihQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCSAgTGlzdCAqcmVzdHJp Y3RsaXN0LAogCQkJCQkJCSAgTGlzdCAqZXhwcmxpc3QsIExpc3QgKm9wcmxpc3QpCit7CisJ cmV0dXJuIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0KHJvb3QsIHJlbCwgcmVzdHJp Y3RsaXN0LAorCQkJCQkJCQkJCSBleHBybGlzdCwgb3BybGlzdCwgTlVMTCk7Cit9CisKKy8q CisgKiByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2V4dAorICogaWYgZXh0cmFfY2xhdXNl cyBpc24ndCBOVUxMLCByZXR1cm4gYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzIHdoaWNoIHdl cmUKKyAqIHVzZWQgdG8gZGVyaXZlIHVuaXF1ZW5lc3MuCisgKi8KK2Jvb2wKK3JlbGF0aW9u X2hhc191bmlxdWVfaW5kZXhfZXh0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCisJCQkJCQkJICBMaXN0ICpyZXN0cmljdGxpc3QsCisJCQkJCQkJICBMaXN0ICpleHBy bGlzdCwgTGlzdCAqb3BybGlzdCwKKwkJCQkJCQkgIExpc3QgKipleHRyYV9jbGF1c2VzKQog ewogCUxpc3RDZWxsICAgKmljOwogCkBAIC0zNTQ5LDYgKzM1NjQsNyBAQCByZWxhdGlvbl9o YXNfdW5pcXVlX2luZGV4X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCXsKIAkJSW5kZXhPcHRJbmZvICppbmQgPSAoSW5kZXhPcHRJbmZvICopIGxmaXJzdChp Yyk7CiAJCWludAkJCWM7CisJCUxpc3QJICAgKmV4cHJzID0gTklMOwogCiAJCS8qCiAJCSAq IElmIHRoZSBpbmRleCBpcyBub3QgdW5pcXVlLCBvciBub3QgaW1tZWRpYXRlbHkgZW5mb3Jj ZWQsIG9yIGlmIGl0J3MKQEAgLTM2MDAsNiArMzYxNiwyNCBAQCByZWxhdGlvbl9oYXNfdW5p cXVlX2luZGV4X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CWlmIChtYXRjaF9pbmRleF90b19vcGVyYW5kKHJleHByLCBjLCBpbmQpKQogCQkJCXsKIAkJ CQkJbWF0Y2hlZCA9IHRydWU7IC8qIGNvbHVtbiBpcyB1bmlxdWUgKi8KKworCQkJCQlpZiAo Ym1zX21lbWJlcnNoaXAocmluZm8tPmNsYXVzZV9yZWxpZHMpID09IEJNU19TSU5HTEVUT04p CisJCQkJCXsKKwkJCQkJCU1lbW9yeUNvbnRleHQgb2xkTWVtQ3R4ID0KKwkJCQkJCQkJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhyb290LT5wbGFubmVyX2N4dCk7CisKKwkJCQkJCS8qCisJ CQkJCQkgKiBBZGQgZmlsdGVyIGNsYXVzZSBpbnRvIGEgbGlzdCBhbGxvd2luZyBjYWxsZXIg dG8KKwkJCQkJCSAqIGtub3cgaWYgdW5pcXVpbmVzcyBoYXZlIG1hZGUgbm90IG9ubHkgYnkg am9pbgorCQkJCQkJICogY2xhdXNlcy4KKwkJCQkJCSAqLworCQkJCQkJQXNzZXJ0KGJtc19p c19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMpIHx8CisJCQkJCQkJICAgYm1zX2lzX2VtcHR5 KHJpbmZvLT5yaWdodF9yZWxpZHMpKTsKKwkJCQkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJ CQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgcmluZm8pOworCQkJCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZE1lbUN0eCk7CisJCQkJCX0KKwogCQkJCQlicmVhazsKIAkJCQl9CiAJ CQl9CkBAIC0zNjQyLDcgKzM2NzYsMTEgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9m b3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAogCQkvKiBNYXRjaGVk IGFsbCBrZXkgY29sdW1ucyBvZiB0aGlzIGluZGV4PyAqLwogCQlpZiAoYyA9PSBpbmQtPm5r ZXljb2x1bW5zKQorCQl7CisJCQlpZiAoZXh0cmFfY2xhdXNlcykKKwkJCQkqZXh0cmFfY2xh dXNlcyA9IGV4cHJzOwogCQkJcmV0dXJuIHRydWU7CisJCX0KIAl9CiAKIAlyZXR1cm4gZmFs c2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9p bnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCmluZGV4 IDVmM2NjZTg3M2EuLjE1MjM0YjdhM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2FuYWx5emVqb2lucy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2FuYWx5emVqb2lucy5jCkBAIC0yMiw2ICsyMiw4IEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUg Im5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2pvaW5p bmZvLmgiCkBAIC0zMywxMCArMzUsMjcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3Qu aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAorLyoKKyAqIFVuaXF1ZVJlbElu Zm8gY2FjaGVzIGEgZmFjdCB0aGF0IGEgcmVsYXRpb24gaXMgdW5pcXVlIHdoZW4gYmVpbmcg am9pbmVkCisgKiB0byBvdGhlciByZWxhdGlvbihzKSBzcGVjaWZpZWQgYnkgb3V0ZXJyZWxp ZHMuCisgKiBleHRyYV9jbGF1c2VzIGNvbnRhaW5zIGFkZGl0aW9uYWwgY2xhdXNlcyBmcm9t IGEgYmFzZXJlc3RyaWN0aW5mbyBsaXN0IHRoYXQKKyAqIHdlcmUgdXNlZCB0byBwcm92ZSB1 bmlxdWVuZXNzLiBXZSBjYWNoZSBpdCBmb3IgU0ogY2hlY2tpbmcgcHJvY2VkdXJlOiBTSiBj YW4KKyAqIGJlIHJlbW92ZWQgaWYgb3V0ZXIgcmVsYXRpb24gY29udGFpbnMgc3RyaWN0bHkg dGhlIHNhbWUgc2V0IG9mIGNsYXVzZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFVuaXF1ZVJl bEluZm8KK3sKKwlSZWxpZHMJCW91dGVycmVsaWRzOworCUxpc3QJICAgKmV4dHJhX2NsYXVz ZXM7Cit9IFVuaXF1ZVJlbEluZm87CisKK2Jvb2wJCWVuYWJsZV9zZWxmX2pvaW5fcmVtb3Zh bDsKK2ludAkJCXNlbGZfam9pbl9zZWFyY2hfbGltaXQ7CisKIC8qIGxvY2FsIGZ1bmN0aW9u cyAqLwogc3RhdGljIGJvb2wgam9pbl9pc19yZW1vdmFibGUoUGxhbm5lckluZm8gKnJvb3Qs IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKLXN0YXRpYyB2b2lkIHJlbW92ZV9yZWxfZnJv bV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAotCQkJCQkJCQkgIFNwZWNp YWxKb2luSW5mbyAqc2ppbmZvKTsKKworc3RhdGljIHZvaWQgcmVtb3ZlX2xlZnRqb2lucmVs X2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJCQkJCQkJCQkg IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9yZWxfZnJv bV9yZXN0cmljdGluZm8oUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJCQkJCQkJCQkgaW50IHJl bGlkLCBpbnQgb2pyZWxpZCk7CiBzdGF0aWMgdm9pZCByZW1vdmVfcmVsX2Zyb21fZWNsYXNz KEVxdWl2YWxlbmNlQ2xhc3MgKmVjLApAQCAtNDQsMTQgKzYzLDE3IEBAIHN0YXRpYyB2b2lk IHJlbW92ZV9yZWxfZnJvbV9lY2xhc3MoRXF1aXZhbGVuY2VDbGFzcyAqZWMsCiBzdGF0aWMg TGlzdCAqcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0KExpc3QgKmpvaW5saXN0LCBpbnQgcmVs aWQsIGludCAqbnJlbW92ZWQpOwogc3RhdGljIGJvb2wgcmVsX3N1cHBvcnRzX2Rpc3RpbmN0 bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBib29s IHJlbF9pc19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKLQkJCQkJCQkJTGlzdCAqY2xhdXNlX2xpc3QpOworCQkJCQkJCQlMaXN0ICpjbGF1c2Vf bGlzdCwgTGlzdCAqKmV4dHJhX2NsYXVzZXMpOwogc3RhdGljIE9pZAlkaXN0aW5jdF9jb2xf c2VhcmNoKGludCBjb2xubywgTGlzdCAqY29sbm9zLCBMaXN0ICpvcGlkcyk7CiBzdGF0aWMg Ym9vbCBpc19pbm5lcnJlbF91bmlxdWVfZm9yKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkgICBSZWxpZHMgam9pbnJlbGlkcywKIAkJCQkJCQkJICAgUmVsaWRzIG91dGVycmVsaWRz LAogCQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKIAkJCQkJCQkJICAgSm9pblR5 cGUgam9pbnR5cGUsCi0JCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CisJCQkJCQkJ CSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJICAgTGlzdCAqKmV4dHJhX2NsYXVz ZXMpOworc3RhdGljIEJpdG1hcHNldCAqcmVwbGFjZV9yZWxpZChSZWxpZHMgcmVsaWRzLCBp bnQgb2xkSWQsIGludCBuZXdJZCk7CitzdGF0aWMgdm9pZCByZXBsYWNlX3Zhcm5vKE5vZGUg Km5vZGUsIGludCBmcm9tLCBpbnQgdG8pOwogCiAKIC8qCkBAIC04OSw3ICsxMTEsNyBAQCBy ZXN0YXJ0OgogCQkgKi8KIAkJaW5uZXJyZWxpZCA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHNq aW5mby0+bWluX3JpZ2h0aGFuZCk7CiAKLQkJcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KHJvb3Qs IGlubmVycmVsaWQsIHNqaW5mbyk7CisJCXJlbW92ZV9sZWZ0am9pbnJlbF9mcm9tX3F1ZXJ5 KHJvb3QsIGlubmVycmVsaWQsIHNqaW5mbyk7CiAKIAkJLyogV2UgdmVyaWZ5IHRoYXQgZXhh Y3RseSBvbmUgcmVmZXJlbmNlIGdldHMgcmVtb3ZlZCBmcm9tIGpvaW5saXN0ICovCiAJCW5y ZW1vdmVkID0gMDsKQEAgLTMwOCw3ICszMzAsNyBAQCBqb2luX2lzX3JlbW92YWJsZShQbGFu bmVySW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJICogTm93IHRoYXQg d2UgaGF2ZSB0aGUgcmVsZXZhbnQgZXF1YWxpdHkgam9pbiBjbGF1c2VzLCB0cnkgdG8gcHJv dmUgdGhlCiAJICogaW5uZXJyZWwgZGlzdGluY3QuCiAJICovCi0JaWYgKHJlbF9pc19kaXN0 aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0KSkKKwlpZiAocmVsX2lzX2Rp c3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3QsIE5VTEwpKQogCQlyZXR1 cm4gdHJ1ZTsKIAogCS8qCkBAIC0zMjgsMjEgKzM1MCwxNSBAQCBqb2luX2lzX3JlbW92YWJs ZShQbGFubmVySW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAgKiB0aGUg cGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgY29uc3Vs dGVkIGxhdGVyLgogICovCiBzdGF0aWMgdm9pZAotcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBs YW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQor cmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5X2NvbW1vbihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAorCQkJCQkJCSBpbnQgc3Vic3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LAorCQkJCQkJCSBSZWxpZHMgam9pbnJlbGlkcykKIHsKLQlSZWxPcHRJbmZvICpyZWwgPSBm aW5kX2Jhc2VfcmVsKHJvb3QsIHJlbGlkKTsKLQlpbnQJCQlvanJlbGlkID0gc2ppbmZvLT5v anJlbGlkOwotCVJlbGlkcwkJam9pbnJlbGlkczsKLQlSZWxpZHMJCWpvaW5fcGx1c19jb21t dXRlOwotCUxpc3QJICAgKmpvaW5pbmZvczsKKwlpbnQJCQlyZWxpZCA9IHJlbC0+cmVsaWQ7 CisJaW50CQkJb2pyZWxpZCA9IChzamluZm8gIT0gTlVMTCkgPyBzamluZm8tPm9qcmVsaWQg OiAtMTsKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmw7CiAKLQkvKiBDb21wdXRlIHRo ZSByZWxpZCBzZXQgZm9yIHRoZSBqb2luIHdlIGFyZSBjb25zaWRlcmluZyAqLwotCWpvaW5y ZWxpZHMgPSBibXNfdW5pb24oc2ppbmZvLT5taW5fbGVmdGhhbmQsIHNqaW5mby0+bWluX3Jp Z2h0aGFuZCk7Ci0JQXNzZXJ0KG9qcmVsaWQgIT0gMCk7Ci0Jam9pbnJlbGlkcyA9IGJtc19h ZGRfbWVtYmVyKGpvaW5yZWxpZHMsIG9qcmVsaWQpOwotCiAJLyoKIAkgKiBSZW1vdmUgcmVm ZXJlbmNlcyB0byB0aGUgcmVsIGZyb20gb3RoZXIgYmFzZXJlbHMnIGF0dHJfbmVlZGVkIGFy cmF5cy4KIAkgKi8KQEAgLTM2NiwxOSArMzgyLDIyIEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVy eShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bykKIAkJCSBhdHRyb2ZmLS0pCiAJCXsKIAkJCW90aGVycmVsLT5hdHRyX25lZWRlZFthdHRy b2ZmXSA9Ci0JCQkJYm1zX2RlbF9tZW1iZXIob3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJv ZmZdLCByZWxpZCk7CisJCQkJcmVwbGFjZV9yZWxpZChvdGhlcnJlbC0+YXR0cl9uZWVkZWRb YXR0cm9mZl0sIHJlbGlkLCBzdWJzdCk7CiAJCQlvdGhlcnJlbC0+YXR0cl9uZWVkZWRbYXR0 cm9mZl0gPQotCQkJCWJtc19kZWxfbWVtYmVyKG90aGVycmVsLT5hdHRyX25lZWRlZFthdHRy b2ZmXSwgb2pyZWxpZCk7CisJCQkJcmVwbGFjZV9yZWxpZChvdGhlcnJlbC0+YXR0cl9uZWVk ZWRbYXR0cm9mZl0sIG9qcmVsaWQsIHN1YnN0KTsKIAkJfQorCisJCS8qIFVwZGF0ZSBsYXRl cmFsIHJlZmVyZW5jZXMuICovCisJCXJlcGxhY2VfdmFybm8oKE5vZGUgKikgb3RoZXJyZWwt PmxhdGVyYWxfdmFycywgcmVsaWQsIHN1YnN0KTsKIAl9CiAKIAkvKgogCSAqIFVwZGF0ZSBh bGxfYmFzZXJlbHMgYW5kIHJlbGF0ZWQgcmVsaWQgc2V0cy4KIAkgKi8KLQlyb290LT5hbGxf YmFzZXJlbHMgPSBibXNfZGVsX21lbWJlcihyb290LT5hbGxfYmFzZXJlbHMsIHJlbGlkKTsK LQlyb290LT5vdXRlcl9qb2luX3JlbHMgPSBibXNfZGVsX21lbWJlcihyb290LT5vdXRlcl9q b2luX3JlbHMsIG9qcmVsaWQpOwotCXJvb3QtPmFsbF9xdWVyeV9yZWxzID0gYm1zX2RlbF9t ZW1iZXIocm9vdC0+YWxsX3F1ZXJ5X3JlbHMsIHJlbGlkKTsKLQlyb290LT5hbGxfcXVlcnlf cmVscyA9IGJtc19kZWxfbWVtYmVyKHJvb3QtPmFsbF9xdWVyeV9yZWxzLCBvanJlbGlkKTsK Kwlyb290LT5hbGxfYmFzZXJlbHMgPSByZXBsYWNlX3JlbGlkKHJvb3QtPmFsbF9iYXNlcmVs cywgcmVsaWQsIHN1YnN0KTsKKwlyb290LT5vdXRlcl9qb2luX3JlbHMgPSByZXBsYWNlX3Jl bGlkKHJvb3QtPm91dGVyX2pvaW5fcmVscywgb2pyZWxpZCwgc3Vic3QpOworCXJvb3QtPmFs bF9xdWVyeV9yZWxzID0gcmVwbGFjZV9yZWxpZChyb290LT5hbGxfcXVlcnlfcmVscywgcmVs aWQsIHN1YnN0KTsKKwlyb290LT5hbGxfcXVlcnlfcmVscyA9IHJlcGxhY2VfcmVsaWQocm9v dC0+YWxsX3F1ZXJ5X3JlbHMsIG9qcmVsaWQsIHN1YnN0KTsKIAogCS8qCiAJICogTGlrZXdp c2UgcmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBTcGVjaWFsSm9pbkluZm8gZGF0YSBzdHJ1Y3R1 cmVzLgpAQCAtMzkyLDE5ICs0MTEsMjEgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5u ZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCXsK IAkJU3BlY2lhbEpvaW5JbmZvICpzamluZiA9IChTcGVjaWFsSm9pbkluZm8gKikgbGZpcnN0 KGwpOwogCi0JCXNqaW5mLT5taW5fbGVmdGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+ bWluX2xlZnRoYW5kLCByZWxpZCk7Ci0JCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gYm1zX2Rl bF9tZW1iZXIoc2ppbmYtPm1pbl9yaWdodGhhbmQsIHJlbGlkKTsKLQkJc2ppbmYtPnN5bl9s ZWZ0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5zeW5fbGVmdGhhbmQsIHJlbGlkKTsK LQkJc2ppbmYtPnN5bl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX3Jp Z2h0aGFuZCwgcmVsaWQpOwotCQlzamluZi0+bWluX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1i ZXIoc2ppbmYtPm1pbl9sZWZ0aGFuZCwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5taW5fcmlnaHRo YW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPm1pbl9yaWdodGhhbmQsIG9qcmVsaWQpOwot CQlzamluZi0+c3luX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPnN5bl9sZWZ0 aGFuZCwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gYm1zX2RlbF9tZW1i ZXIoc2ppbmYtPnN5bl9yaWdodGhhbmQsIG9qcmVsaWQpOworCQlzamluZi0+bWluX2xlZnRo YW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+bWluX2xlZnRoYW5kLCByZWxpZCwgc3Vic3Qp OworCQlzamluZi0+bWluX3JpZ2h0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPm1pbl9y aWdodGhhbmQsIHJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5zeW5fbGVmdGhhbmQgPSByZXBs YWNlX3JlbGlkKHNqaW5mLT5zeW5fbGVmdGhhbmQsIHJlbGlkLCBzdWJzdCk7CisJCXNqaW5m LT5zeW5fcmlnaHRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+c3luX3JpZ2h0aGFuZCwg cmVsaWQsIHN1YnN0KTsKKwkJc2ppbmYtPm1pbl9sZWZ0aGFuZCA9IHJlcGxhY2VfcmVsaWQo c2ppbmYtPm1pbl9sZWZ0aGFuZCwgb2pyZWxpZCwgc3Vic3QpOworCQlzamluZi0+bWluX3Jp Z2h0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPm1pbl9yaWdodGhhbmQsIG9qcmVsaWQs IHN1YnN0KTsKKwkJc2ppbmYtPnN5bl9sZWZ0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYt PnN5bl9sZWZ0aGFuZCwgb2pyZWxpZCwgc3Vic3QpOworCQlzamluZi0+c3luX3JpZ2h0aGFu ZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPnN5bl9yaWdodGhhbmQsIG9qcmVsaWQsIHN1YnN0 KTsKIAkJLyogcmVsaWQgY2Fubm90IGFwcGVhciBpbiB0aGVzZSBmaWVsZHMsIGJ1dCBvanJl bGlkIGNhbjogKi8KLQkJc2ppbmYtPmNvbW11dGVfYWJvdmVfbCA9IGJtc19kZWxfbWVtYmVy KHNqaW5mLT5jb21tdXRlX2Fib3ZlX2wsIG9qcmVsaWQpOwotCQlzamluZi0+Y29tbXV0ZV9h Ym92ZV9yID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPmNvbW11dGVfYWJvdmVfciwgb2pyZWxp ZCk7Ci0JCXNqaW5mLT5jb21tdXRlX2JlbG93X2wgPSBibXNfZGVsX21lbWJlcihzamluZi0+ Y29tbXV0ZV9iZWxvd19sLCBvanJlbGlkKTsKLQkJc2ppbmYtPmNvbW11dGVfYmVsb3dfciA9 IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5jb21tdXRlX2JlbG93X3IsIG9qcmVsaWQpOworCQlz amluZi0+Y29tbXV0ZV9hYm92ZV9sID0gcmVwbGFjZV9yZWxpZChzamluZi0+Y29tbXV0ZV9h Ym92ZV9sLCBvanJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5jb21tdXRlX2Fib3ZlX3IgPSBy ZXBsYWNlX3JlbGlkKHNqaW5mLT5jb21tdXRlX2Fib3ZlX3IsIG9qcmVsaWQsIHN1YnN0KTsK KwkJc2ppbmYtPmNvbW11dGVfYmVsb3dfbCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPmNvbW11 dGVfYmVsb3dfbCwgb2pyZWxpZCwgc3Vic3QpOworCQlzamluZi0+Y29tbXV0ZV9iZWxvd19y ID0gcmVwbGFjZV9yZWxpZChzamluZi0+Y29tbXV0ZV9iZWxvd19yLCBvanJlbGlkLCBzdWJz dCk7CisKKwkJcmVwbGFjZV92YXJubygoTm9kZSAqKSBzamluZi0+c2VtaV9yaHNfZXhwcnMs IHJlbGlkLCBzdWJzdCk7CiAJfQogCiAJLyoKQEAgLTQzOCwxOCArNDU5LDM5IEBAIHJlbW92 ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbykKIAkJewogCQkJUGxhY2VIb2xkZXJWYXIgKnBodiA9IHBoaW5m by0+cGhfdmFyOwogCi0JCQlwaGluZm8tPnBoX2V2YWxfYXQgPSBibXNfZGVsX21lbWJlcihw aGluZm8tPnBoX2V2YWxfYXQsIHJlbGlkKTsKLQkJCXBoaW5mby0+cGhfZXZhbF9hdCA9IGJt c19kZWxfbWVtYmVyKHBoaW5mby0+cGhfZXZhbF9hdCwgb2pyZWxpZCk7CisJCQlwaGluZm8t PnBoX2V2YWxfYXQgPSByZXBsYWNlX3JlbGlkKHBoaW5mby0+cGhfZXZhbF9hdCwgcmVsaWQs IHN1YnN0KTsKKwkJCXBoaW5mby0+cGhfZXZhbF9hdCA9IHJlcGxhY2VfcmVsaWQocGhpbmZv LT5waF9ldmFsX2F0LCBvanJlbGlkLCBzdWJzdCk7CiAJCQlBc3NlcnQoIWJtc19pc19lbXB0 eShwaGluZm8tPnBoX2V2YWxfYXQpKTsJLyogY2hlY2tlZCBwcmV2aW91c2x5ICovCi0JCQlw aGluZm8tPnBoX25lZWRlZCA9IGJtc19kZWxfbWVtYmVyKHBoaW5mby0+cGhfbmVlZGVkLCBy ZWxpZCk7Ci0JCQlwaGluZm8tPnBoX25lZWRlZCA9IGJtc19kZWxfbWVtYmVyKHBoaW5mby0+ cGhfbmVlZGVkLCBvanJlbGlkKTsKKwkJCXBoaW5mby0+cGhfbmVlZGVkID0gcmVwbGFjZV9y ZWxpZChwaGluZm8tPnBoX25lZWRlZCwgcmVsaWQsIHN1YnN0KTsKKwkJCXBoaW5mby0+cGhf bmVlZGVkID0gcmVwbGFjZV9yZWxpZChwaGluZm8tPnBoX25lZWRlZCwgb2pyZWxpZCwgc3Vi c3QpOwogCQkJLyogcGhfbmVlZGVkIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZWNvbWUgZW1wdHkg Ki8KLQkJCXBodi0+cGhyZWxzID0gYm1zX2RlbF9tZW1iZXIocGh2LT5waHJlbHMsIHJlbGlk KTsKLQkJCXBodi0+cGhyZWxzID0gYm1zX2RlbF9tZW1iZXIocGh2LT5waHJlbHMsIG9qcmVs aWQpOworCQkJcGh2LT5waHJlbHMgPSByZXBsYWNlX3JlbGlkKHBodi0+cGhyZWxzLCByZWxp ZCwgc3Vic3QpOworCQkJcGh2LT5waHJlbHMgPSByZXBsYWNlX3JlbGlkKHBodi0+cGhyZWxz LCBvanJlbGlkLCBzdWJzdCk7CisJCQlwaGluZm8tPnBoX2xhdGVyYWwgPSByZXBsYWNlX3Jl bGlkKHBoaW5mby0+cGhfbGF0ZXJhbCwgcmVsaWQsIHN1YnN0KTsKKwkJCXBoaW5mby0+cGhf dmFyLT5waHJlbHMgPSByZXBsYWNlX3JlbGlkKHBoaW5mby0+cGhfdmFyLT5waHJlbHMsIHJl bGlkLCBzdWJzdCk7CiAJCQlBc3NlcnQoIWJtc19pc19lbXB0eShwaHYtPnBocmVscykpOwog CQkJQXNzZXJ0KHBodi0+cGhudWxsaW5ncmVscyA9PSBOVUxMKTsgLyogbm8gbmVlZCB0byBh ZGp1c3QgKi8KIAkJfQogCX0KK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9sZWZ0am9pbnJl bF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJCQkJICBT cGVjaWFsSm9pbkluZm8gKnNqaW5mbykKK3sKKwlMaXN0CSAgICpqb2luaW5mb3M7CisJaW50 CQkJb2pyZWxpZCA9IHNqaW5mby0+b2pyZWxpZDsKKwlSZWxPcHRJbmZvICpyZWwgPSBmaW5k X2Jhc2VfcmVsKHJvb3QsIHJlbGlkKTsKKwlSZWxpZHMJCWpvaW5fcGx1c19jb21tdXRlOwor CVJlbGlkcwkJam9pbnJlbGlkczsKKwlMaXN0Q2VsbCAgICpsOworCisJLyogQ29tcHV0ZSB0 aGUgcmVsaWQgc2V0IGZvciB0aGUgam9pbiB3ZSBhcmUgY29uc2lkZXJpbmcgKi8KKwlqb2lu cmVsaWRzID0gYm1zX3VuaW9uKHNqaW5mby0+bWluX2xlZnRoYW5kLCBzamluZm8tPm1pbl9y aWdodGhhbmQpOworCUFzc2VydChvanJlbGlkICE9IDApOworCWpvaW5yZWxpZHMgPSBibXNf YWRkX21lbWJlcihqb2lucmVsaWRzLCBvanJlbGlkKTsKKworCXJlbW92ZV9yZWxfZnJvbV9x dWVyeV9jb21tb24ocm9vdCwgcmVsLCAtMSwgc2ppbmZvLCBqb2lucmVsaWRzKTsKIAogCS8q CiAJICogUmVtb3ZlIGFueSBqb2lucXVhbHMgcmVmZXJlbmNpbmcgdGhlIHJlbCBmcm9tIHRo ZSBqb2luaW5mbyBsaXN0cy4KQEAgLTg0NCw5ICs4ODYsMTQgQEAgcmVsX3N1cHBvcnRzX2Rp c3RpbmN0bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogICogTm90 ZSB0aGF0IHRoZSBwYXNzZWQtaW4gY2xhdXNlX2xpc3QgbWF5IGJlIGRlc3RydWN0aXZlbHkg bW9kaWZpZWQhICBUaGlzCiAgKiBpcyBPSyBmb3IgY3VycmVudCB1c2VzLCBiZWNhdXNlIHRo ZSBjbGF1c2VfbGlzdCBpcyBidWlsdCBieSB0aGUgY2FsbGVyIGZvcgogICogdGhlIHNvbGUg cHVycG9zZSBvZiBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICogb3V0ZXJfZXhw cnMgY29udGFpbnMgcmlnaHQgc2lkZXMgb2YgYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzIGxv b2tzIGxpa2UKKyAqIHggPSBjb25zdCBpZiBkaXN0aW5jdG5lc3MgaXMgZGVyaXZlZCBmcm9t IHN1Y2ggY2xhdXNlcywgbm90IGpvaW5pbmZvIGNsYXVzZS4KKyAqIFBhc3MgTlVMTCBmb3Ig dGhlIHBhcmFtIHZhbHVlLCBpZiBpdCBpcyBub3QgaW50ZXJlc3RlZC4KICAqLwogc3RhdGlj IGJvb2wKLXJlbF9pc19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwgTGlzdCAqY2xhdXNlX2xpc3QpCityZWxfaXNfZGlzdGluY3RfZm9yKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZV9saXN0LAorCQkJ CQlMaXN0ICoqZXh0cmFfY2xhdXNlcykKIHsKIAkvKgogCSAqIFdlIGNvdWxkIHNraXAgYSBj b3VwbGUgb2YgdGVzdHMgaGVyZSBpZiB3ZSBhc3N1bWUgYWxsIGNhbGxlcnMgY2hlY2tlZApA QCAtODU5LDEwICs5MDYsMTEgQEAgcmVsX2lzX2Rpc3RpbmN0X2ZvcihQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VfbGlzdCkKIAl7CiAJCS8qCiAJ CSAqIEV4YW1pbmUgdGhlIGluZGV4ZXMgdG8gc2VlIGlmIHdlIGhhdmUgYSBtYXRjaGluZyB1 bmlxdWUgaW5kZXguCi0JCSAqIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9yIGF1dG9t YXRpY2FsbHkgYWRkcyBhbnkgdXNhYmxlCisJCSAqIHJlbGF0aW9uX2hhc191bmlxdWVfaW5k ZXhfZXh0IGF1dG9tYXRpY2FsbHkgYWRkcyBhbnkgdXNhYmxlCiAJCSAqIHJlc3RyaWN0aW9u IGNsYXVzZXMgZm9yIHRoZSByZWwsIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdCBoZXJlLgogCQkg Ki8KLQkJaWYgKHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9yKHJvb3QsIHJlbCwgY2xh dXNlX2xpc3QsIE5JTCwgTklMKSkKKwkJaWYgKHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhf ZXh0KHJvb3QsIHJlbCwgY2xhdXNlX2xpc3QsIE5JTCwgTklMLAorCQkJCQkJCQkJCSAgZXh0 cmFfY2xhdXNlcykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJZWxzZSBpZiAocmVsLT5ydGVr aW5kID09IFJURV9TVUJRVUVSWSkKQEAgLTExNzYsOSArMTIyNCwyMSBAQCBpbm5lcnJlbF9p c191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgSm9pblR5cGUgam9pbnR5cGUs CiAJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0LAogCQkJCSAgIGJvb2wgZm9yY2VfY2FjaGUp Cit7CisJcmV0dXJuIGlubmVycmVsX2lzX3VuaXF1ZV9leHQocm9vdCwgam9pbnJlbGlkcywg b3V0ZXJyZWxpZHMsIGlubmVycmVsLAorCQkJCQkJCQkgIGpvaW50eXBlLCByZXN0cmljdGxp c3QsIGZvcmNlX2NhY2hlLCBOVUxMKTsKK30KKworYm9vbAoraW5uZXJyZWxfaXNfdW5pcXVl X2V4dChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIGpvaW5yZWxpZHMsIFJlbGlkcyBvdXRl cnJlbGlkcywKKwkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsIEpvaW5UeXBlIGpvaW50 eXBlLAorCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QsIGJvb2wgZm9yY2VfY2FjaGUsCisJ CQkJCSAgIExpc3QgKipleHRyYV9jbGF1c2VzKQogewogCU1lbW9yeUNvbnRleHQgb2xkX2Nv bnRleHQ7CiAJTGlzdENlbGwgICAqbGM7CisJVW5pcXVlUmVsSW5mbyAqdW5pcXVlUmVsSW5m bzsKKwlMaXN0CSAgICpvdXRlcl9leHBycyA9IE5JTDsKIAogCS8qIENlcnRhaW5seSBjYW4n dCBwcm92ZSB1bmlxdWVuZXNzIHdoZW4gdGhlcmUgYXJlIG5vIGpvaW5jbGF1c2VzICovCiAJ aWYgKHJlc3RyaWN0bGlzdCA9PSBOSUwpCkBAIC0xMjAwLDEwICsxMjYwLDE0IEBAIGlubmVy cmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlmb3JlYWNoKGxjLCBp bm5lcnJlbC0+dW5pcXVlX2Zvcl9yZWxzKQogCXsKLQkJUmVsaWRzCQl1bmlxdWVfZm9yX3Jl bHMgPSAoUmVsaWRzKSBsZmlyc3QobGMpOworCQl1bmlxdWVSZWxJbmZvID0gKFVuaXF1ZVJl bEluZm8gKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoYm1zX2lzX3N1YnNldCh1bmlxdWVfZm9y X3JlbHMsIG91dGVycmVsaWRzKSkKKwkJaWYgKGJtc19pc19zdWJzZXQodW5pcXVlUmVsSW5m by0+b3V0ZXJyZWxpZHMsIG91dGVycmVsaWRzKSkKKwkJeworCQkJaWYgKGV4dHJhX2NsYXVz ZXMpCisJCQkJKmV4dHJhX2NsYXVzZXMgPSB1bmlxdWVSZWxJbmZvLT5leHRyYV9jbGF1c2Vz OwogCQkJcmV0dXJuIHRydWU7CQkvKiBTdWNjZXNzISAqLworCQl9CiAJfQogCiAJLyoKQEAg LTEyMjAsNyArMTI4NCw3IEBAIGlubmVycmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9v dCwKIAogCS8qIE5vIGNhY2hlZCBpbmZvcm1hdGlvbiwgc28gdHJ5IHRvIG1ha2UgdGhlIHBy b29mLiAqLwogCWlmIChpc19pbm5lcnJlbF91bmlxdWVfZm9yKHJvb3QsIGpvaW5yZWxpZHMs IG91dGVycmVsaWRzLCBpbm5lcnJlbCwKLQkJCQkJCQkgICBqb2ludHlwZSwgcmVzdHJpY3Rs aXN0KSkKKwkJCQkJCQkgICBqb2ludHlwZSwgcmVzdHJpY3RsaXN0LCAmb3V0ZXJfZXhwcnMp KQogCXsKIAkJLyoKIAkJICogQ2FjaGUgdGhlIHBvc2l0aXZlIHJlc3VsdCBmb3IgZnV0dXJl IHByb2JlcywgYmVpbmcgc3VyZSB0byBrZWVwIGl0CkBAIC0xMjMzLDEwICsxMjk3LDE1IEBA IGlubmVycmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJICogc3VwZXJzZXRz IG9mIHRoZW0gYW55d2F5LgogCQkgKi8KIAkJb2xkX2NvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocm9vdC0+cGxhbm5lcl9jeHQpOworCQl1bmlxdWVSZWxJbmZvID0gcGFsbG9j KHNpemVvZihVbmlxdWVSZWxJbmZvKSk7CisJCXVuaXF1ZVJlbEluZm8tPmV4dHJhX2NsYXVz ZXMgPSBvdXRlcl9leHByczsKKwkJdW5pcXVlUmVsSW5mby0+b3V0ZXJyZWxpZHMgPSBibXNf Y29weShvdXRlcnJlbGlkcyk7CiAJCWlubmVycmVsLT51bmlxdWVfZm9yX3JlbHMgPSBsYXBw ZW5kKGlubmVycmVsLT51bmlxdWVfZm9yX3JlbHMsCi0JCQkJCQkJCQkJCWJtc19jb3B5KG91 dGVycmVsaWRzKSk7CisJCQkJCQkJCQkJCXVuaXF1ZVJlbEluZm8pOwogCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkX2NvbnRleHQpOwogCisJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJ KmV4dHJhX2NsYXVzZXMgPSBvdXRlcl9leHByczsKIAkJcmV0dXJuIHRydWU7CQkJLyogU3Vj Y2VzcyEgKi8KIAl9CiAJZWxzZQpAQCAtMTI4Miw3ICsxMzUxLDggQEAgaXNfaW5uZXJyZWxf dW5pcXVlX2ZvcihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJICAgUmVsaWRzIG91dGVycmVs aWRzLAogCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKIAkJCQkJICAgSm9pblR5cGUg am9pbnR5cGUsCi0JCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCkKKwkJCQkJICAgTGlzdCAq cmVzdHJpY3RsaXN0LAorCQkJCQkgICBMaXN0ICoqZXh0cmFfY2xhdXNlcykKIHsKIAlMaXN0 CSAgICpjbGF1c2VfbGlzdCA9IE5JTDsKIAlMaXN0Q2VsbCAgICpsYzsKQEAgLTEzMjQsNSAr MTM5NCw5MjcgQEAgaXNfaW5uZXJyZWxfdW5pcXVlX2ZvcihQbGFubmVySW5mbyAqcm9vdCwK IAl9CiAKIAkvKiBMZXQgcmVsX2lzX2Rpc3RpbmN0X2ZvcigpIGRvIHRoZSBoYXJkIHdvcmsg Ki8KLQlyZXR1cm4gcmVsX2lzX2Rpc3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNl X2xpc3QpOworCXJldHVybiByZWxfaXNfZGlzdGluY3RfZm9yKHJvb3QsIGlubmVycmVsLCBj bGF1c2VfbGlzdCwgZXh0cmFfY2xhdXNlcyk7Cit9CisKK3R5cGVkZWYgc3RydWN0IFJlcGxh Y2VWYXJub0NvbnRleHQKK3sKKwlpbnQJZnJvbTsKKwlpbnQJdG87Cit9IFJlcGxhY2VWYXJu b0NvbnRleHQ7CisKK3N0YXRpYyBib29sCityZXBsYWNlX3Zhcm5vX3dhbGtlcihOb2RlICpu b2RlLCBSZXBsYWNlVmFybm9Db250ZXh0ICpjdHgpCit7CisJaWYgKG5vZGUgPT0gTlVMTCkK KwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQShub2RlLCBWYXIpKQorCXsKKwkJVmFyICAg KnZhciA9IChWYXIgKikgbm9kZTsKKworCQlpZiAodmFyLT52YXJubyA9PSBjdHgtPmZyb20p CisJCXsKKwkJCXZhci0+dmFybm8gPSBjdHgtPnRvOworCQkJdmFyLT52YXJub3N5biA9IGN0 eC0+dG87CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoSXNBKG5vZGUsIFJlc3Ry aWN0SW5mbykpCisJeworCQlSZXN0cmljdEluZm8gICAqcmluZm8gPSAoUmVzdHJpY3RJbmZv ICopIG5vZGU7CisJCWludAkJCQlyZWxpZCA9IC0xOworCQlib29sCQkJaXNfcmVxX2VxdWFs ID0KKwkJCQkJCQkocmluZm8tPnJlcXVpcmVkX3JlbGlkcyA9PSByaW5mby0+Y2xhdXNlX3Jl bGlkcyk7CisKKwkJaWYgKGJtc19pc19tZW1iZXIoY3R4LT5mcm9tLCByaW5mby0+Y2xhdXNl X3JlbGlkcykpCisJCXsKKwkJCXJlcGxhY2VfdmFybm8oKE5vZGUgKikgcmluZm8tPmNsYXVz ZSwgY3R4LT5mcm9tLCBjdHgtPnRvKTsKKwkJCXJlcGxhY2VfdmFybm8oKE5vZGUgKikgcmlu Zm8tPm9yY2xhdXNlLCBjdHgtPmZyb20sIGN0eC0+dG8pOworCQkJcmluZm8tPmNsYXVzZV9y ZWxpZHMgPSByZXBsYWNlX3JlbGlkKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBjdHgtPmZyb20s IGN0eC0+dG8pOworCQkJcmluZm8tPmxlZnRfcmVsaWRzID0gcmVwbGFjZV9yZWxpZChyaW5m by0+bGVmdF9yZWxpZHMsIGN0eC0+ZnJvbSwgY3R4LT50byk7CisJCQlyaW5mby0+cmlnaHRf cmVsaWRzID0gcmVwbGFjZV9yZWxpZChyaW5mby0+cmlnaHRfcmVsaWRzLCBjdHgtPmZyb20s IGN0eC0+dG8pOworCQl9CisKKwkJaWYgKGlzX3JlcV9lcXVhbCkKKwkJCXJpbmZvLT5yZXF1 aXJlZF9yZWxpZHMgPSByaW5mby0+Y2xhdXNlX3JlbGlkczsKKwkJZWxzZQorCQkJcmluZm8t PnJlcXVpcmVkX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQocmluZm8tPnJlcXVpcmVkX3JlbGlk cywgY3R4LT5mcm9tLCBjdHgtPnRvKTsKKworCQlyaW5mby0+b3V0ZXJfcmVsaWRzID0gcmVw bGFjZV9yZWxpZChyaW5mby0+b3V0ZXJfcmVsaWRzLCBjdHgtPmZyb20sIGN0eC0+dG8pOwor CQlyaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQocmluZm8tPmlu Y29tcGF0aWJsZV9yZWxpZHMsIGN0eC0+ZnJvbSwgY3R4LT50byk7CisKKwkJaWYgKHJpbmZv LT5tZXJnZW9wZmFtaWxpZXMgJiYKKwkJCWJtc19nZXRfc2luZ2xldG9uX21lbWJlcihyaW5m by0+Y2xhdXNlX3JlbGlkcywgJnJlbGlkKSAmJgorCQkJcmVsaWQgPT0gY3R4LT50byAmJiBJ c0EocmluZm8tPmNsYXVzZSwgT3BFeHByKSkKKwkJeworCQkJRXhwcgkgICAqbGVmdE9wOwor CQkJRXhwcgkgICAqcmlnaHRPcDsKKworCQkJbGVmdE9wID0gKEV4cHIgKikgZ2V0X2xlZnRv cChyaW5mby0+Y2xhdXNlKTsKKwkJCXJpZ2h0T3AgPSAoRXhwciAqKSBnZXRfcmlnaHRvcChy aW5mby0+Y2xhdXNlKTsKKworCQkJaWYgKGxlZnRPcCAhPSBOVUxMICYmIGVxdWFsKGxlZnRP cCwgcmlnaHRPcCkpCisJCQl7CisJCQkJTnVsbFRlc3QgICAqbnRlc3QgPSBtYWtlTm9kZShO dWxsVGVzdCk7CisKKwkJCQludGVzdC0+YXJnID0gbGVmdE9wOworCQkJCW50ZXN0LT5udWxs dGVzdHR5cGUgPSBJU19OT1RfTlVMTDsKKwkJCQludGVzdC0+YXJnaXNyb3cgPSBmYWxzZTsK KwkJCQludGVzdC0+bG9jYXRpb24gPSAtMTsKKwkJCQlyaW5mby0+Y2xhdXNlID0gKEV4cHIg KikgbnRlc3Q7CisJCQkJcmluZm8tPm1lcmdlb3BmYW1pbGllcyA9IE5JTDsKKwkJCX0KKwkJ CUFzc2VydChyaW5mby0+b3JjbGF1c2UgPT0gTlVMTCk7CisJCX0KKworCQlyZXR1cm4gZmFs c2U7CisJfQorCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsIHJlcGxhY2Vf dmFybm9fd2Fsa2VyLCAodm9pZCAqKSBjdHgpOworfQorCisvKgorICogUmVwbGFjZSBlYWNo IG9jY3VyZW5jZSBvZiByZW1vdmluZyByZWxpZCB3aXRoIHRoZSBrZWVwaW5nIG9uZQorICov CitzdGF0aWMgdm9pZAorcmVwbGFjZV92YXJubyhOb2RlICpub2RlLCBpbnQgZnJvbSAsIGlu dCB0bykKK3sKKwlSZXBsYWNlVmFybm9Db250ZXh0IGN0eDsKKworCWlmICh0byA8PSAwKQor CQlyZXR1cm47CisKKwljdHguZnJvbSA9IGZyb207CisJY3R4LnRvID0gdG87CisJcmVwbGFj ZV92YXJub193YWxrZXIobm9kZSwgJmN0eCk7Cit9CisKKy8qCisgKiBTdWJzdGl0dXRlIG5l d0lkIGJ5IG9sZElkIGluIHJlbGlkcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCityZXBs YWNlX3JlbGlkKFJlbGlkcyByZWxpZHMsIGludCBvbGRJZCwgaW50IG5ld0lkKQoreworCWlm IChvbGRJZCA8IDApCisJCXJldHVybiByZWxpZHM7CisKKwlpZiAobmV3SWQgPCAwKQorCQkv KiBEZWxldGUgcmVsaWQgd2l0aG91dCBzdWJzdGl0dXRpb24uICovCisJCXJldHVybiBibXNf ZGVsX21lbWJlcihyZWxpZHMsIG9sZElkKTsKKworCWlmIChibXNfaXNfbWVtYmVyKG9sZElk LCByZWxpZHMpKQorCQlyZXR1cm4gYm1zX2FkZF9tZW1iZXIoYm1zX2RlbF9tZW1iZXIoYm1z X2NvcHkocmVsaWRzKSwgb2xkSWQpLCBuZXdJZCk7CisKKwlyZXR1cm4gcmVsaWRzOworfQor CisvKgorICogVXBkYXRlIEVDIG1lbWJlcnMgdG8gcG9pbnQgdG8gdGhlIHJlbWFpbmluZyBy ZWxhdGlvbiBpbnN0ZWFkIG9mIHRoZSByZW1vdmVkCisgKiBvbmUsIHJlbW92aW5nIGR1cGxp Y2F0ZXMuCisgKgorICogUmVzdHJpY3Rpb24gY2xhdXNlcyBmb3IgYmFzZSByZWxhdGlvbnMg YXJlIGFscmVhZHkgZGlzdHJpYnV0ZWQgdG8KKyAqIHRoZSByZXNwZWN0aXZlIGJhc2VyZXN0 cmljdGluZm8gbGlzdHMgKHNlZQorICogZ2VuZXJhdGVfaW1wbGllZF9lcXVhbGl0aWVzKS4g VGhlIGFib3ZlIGNvZGUgaGFzIGFscmVhZHkgcHJvY2Vzc2VkCisgKiB0aGlzIGxpc3QsIGFu ZCB1cGRhdGVkIHRoZXNlIGNsYXVzZXMgdG8gcmVmZXJlbmNlIHRoZSByZW1haW5pbmcKKyAq IHJlbGF0aW9uLCBzbyB3ZSBjYW4gc2tpcCB0aGVtIGhlcmUgYmFzZWQgb24gdGhlaXIgcmVs aWRzLgorICoKKyAqIExpa2V3aXNlLCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBq b2luIGNsYXVzZXMgdGhhdCBqb2luIHRoZQorICogcmVtb3ZlZCByZWxhdGlvbiB0byB0aGUg cmVtYWluaW5nIG9uZS4KKyAqCisgKiBGaW5hbGx5LCB0aGVyZSBhcmUgam9pbiBjbGF1c2Vz IHRoYXQgam9pbiB0aGUgcmVtb3ZlZCByZWxhdGlvbiB0bworICogc29tZSB0aGlyZCByZWxh dGlvbi4gV2UgY2FuJ3QganVzdCBkZWxldGUgdGhlIHNvdXJjZSBjbGF1c2VzIGFuZAorICog cmVnZW5lcmF0ZSB0aGVtIGZyb20gdGhlIEVDLCBiZWNhdXNlIHRoZSBjb3JyZXNwb25kaW5n IGVxdWFsaXR5CisgKiBvcGVyYXRvcnMgbWlnaHQgYmUgbWlzc2luZyAoc2VlIHRoZSBoYW5k bGluZyBvZiBlY19icm9rZW4pLgorICogVGhlcmVmb3JlLCB3ZSB3aWxsIHVwZGF0ZSB0aGUg cmVmZXJlbmNlcyBpbiB0aGUgc291cmNlIGNsYXVzZXMuCisgKgorICogRGVyaXZlZCBjbGF1 c2VzIGNhbiBiZSBnZW5lcmF0ZWQgYWdhaW4sIHNvIGl0IGlzIHNpbXBsZXIgdG8ganVzdAor ICogZGVsZXRlIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkCit1cGRhdGVfZWNsYXNzKEVxdWl2 YWxlbmNlQ2xhc3MgKmVjLCBpbnQgZnJvbSwgaW50IHRvKQoreworCUxpc3QJICAgKm5ld19t ZW1iZXJzID0gTklMOworCUxpc3QJICAgKm5ld19zb3VyY2VzID0gTklMOworCUxpc3RDZWxs ICAgKmxjOworCisJZm9yZWFjaChsYywgZWMtPmVjX21lbWJlcnMpCisJeworCQlFcXVpdmFs ZW5jZU1lbWJlciAgKmVtID0gbGZpcnN0X25vZGUoRXF1aXZhbGVuY2VNZW1iZXIsIGxjKTsK KwkJYm9vbAkJCQlpc19yZWR1bmRhbnQgPSBmYWxzZTsKKworCQlpZiAoIWJtc19pc19tZW1i ZXIoZnJvbSwgZW0tPmVtX3JlbGlkcykpCisJCXsKKwkJCW5ld19tZW1iZXJzID0gbGFwcGVu ZChuZXdfbWVtYmVycywgZW0pOworCQkJY29udGludWU7CisJCX0KKworCQllbS0+ZW1fcmVs aWRzID0gcmVwbGFjZV9yZWxpZChlbS0+ZW1fcmVsaWRzLCBmcm9tLCB0byk7CisJCWVtLT5l bV9qZG9tYWluLT5qZF9yZWxpZHMgPSByZXBsYWNlX3JlbGlkKGVtLT5lbV9qZG9tYWluLT5q ZF9yZWxpZHMsIGZyb20sIHRvKTsKKworCQkvKiBXZSBvbmx5IHByb2Nlc3MgaW5uZXIgam9p bnMgKi8KKwkJcmVwbGFjZV92YXJubygoTm9kZSAqKSBlbS0+ZW1fZXhwciwgZnJvbSwgdG8p OworCisJCWZvcmVhY2gobGMsIG5ld19tZW1iZXJzKQorCQl7CisJCQlFcXVpdmFsZW5jZU1l bWJlciAgKm90aGVyID0gbGZpcnN0X25vZGUoRXF1aXZhbGVuY2VNZW1iZXIsIGxjKTsKKwor CQkJaWYgKCFlcXVhbChlbS0+ZW1fcmVsaWRzLCBvdGhlci0+ZW1fcmVsaWRzKSkKKwkJCQlj b250aW51ZTsKKworCQkJaWYgKGVxdWFsKGVtLT5lbV9leHByLCBvdGhlci0+ZW1fZXhwcikp CisJCQl7CisJCQkJaXNfcmVkdW5kYW50ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCisJCWlmICghaXNfcmVkdW5kYW50KQorCQkJbmV3X21lbWJlcnMgPSBsYXBwZW5kKG5l d19tZW1iZXJzLCBlbSk7CisJfQorCWxpc3RfZnJlZShlYy0+ZWNfbWVtYmVycyk7CisJZWMt PmVjX21lbWJlcnMgPSBuZXdfbWVtYmVyczsKKworCWxpc3RfZnJlZShlYy0+ZWNfZGVyaXZl cyk7CisJZWMtPmVjX2Rlcml2ZXMgPSBOVUxMOworCisJLyogVXBkYXRlIEVDIHNvdXJjZSBl eHByZXNzaW9ucyAqLworCWZvcmVhY2gobGMsIGVjLT5lY19zb3VyY2VzKQorCXsKKwkJUmVz dHJpY3RJbmZvICAgKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7CisJ CWJvb2wJCQlpc19yZWR1bmRhbnQgPSBmYWxzZTsKKworCQlpZiAoIWJtc19pc19tZW1iZXIo ZnJvbSwgcmluZm8tPnJlcXVpcmVkX3JlbGlkcykpCisJCXsKKwkJCW5ld19zb3VyY2VzID0g bGFwcGVuZChuZXdfc291cmNlcywgcmluZm8pOworCQkJY29udGludWU7CisJCX0KKworCQly ZXBsYWNlX3Zhcm5vKChOb2RlICopIHJpbmZvLCBmcm9tLCB0byk7CisKKwkJLyoKKwkJICog QWZ0ZXIgc3dpdGNoaW5nIHRoZSBjbGF1c2UgdG8gdGhlIHJlbWFpbmluZyByZWxhdGlvbiwg Y2hlY2sgaXQgZm9yCisJCSAqIHJlZHVuZGFuY3kgd2l0aCBleGlzdGluZyBvbmVzLiBXZSBk b24ndCBoYXZlIHRvIGNoZWNrIGZvcgorCQkgKiByZWR1bmRhbmN5IHdpdGggZGVyaXZlZCBj bGF1c2VzLCBiZWNhdXNlIHdlJ3ZlIGp1c3QgZGVsZXRlZCB0aGVtLgorCQkgKi8KKwkJZm9y ZWFjaChsYywgbmV3X3NvdXJjZXMpCisJCXsKKwkJCVJlc3RyaWN0SW5mbyAgICpvdGhlciA9 IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMpOworCisJCQlpZiAoIWVxdWFsKHJpbmZv LT5jbGF1c2VfcmVsaWRzLCBvdGhlci0+Y2xhdXNlX3JlbGlkcykpCisJCQkJY29udGludWU7 CisKKwkJCWlmIChlcXVhbChyaW5mby0+Y2xhdXNlLCBvdGhlci0+Y2xhdXNlKSkKKwkJCXsK KwkJCQlpc19yZWR1bmRhbnQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJ aWYgKCFpc19yZWR1bmRhbnQpCisJCQluZXdfc291cmNlcyA9IGxhcHBlbmQobmV3X3NvdXJj ZXMsIHJpbmZvKTsKKwl9CisKKwlsaXN0X2ZyZWUoZWMtPmVjX3NvdXJjZXMpOworCWVjLT5l Y19zb3VyY2VzID0gbmV3X3NvdXJjZXM7CisJZWMtPmVjX3JlbGlkcyA9IHJlcGxhY2VfcmVs aWQoZWMtPmVjX3JlbGlkcywgZnJvbSwgdG8pOworfQorCitzdGF0aWMgYm9vbAorc2plX3dh bGtlcihOb2RlICpub2RlLCBSZXBsYWNlVmFybm9Db250ZXh0ICpjdHgpCit7CisJaWYgKG5v ZGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQShub2RlLCBWYXIpKQor CXsKKwkJVmFyICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJaWYgKHZhci0+dmFybm8gPT0g Y3R4LT5mcm9tKQorCQl7CisJCQl2YXItPnZhcm5vID0gY3R4LT50bzsKKwkJCXZhci0+dmFy bm9zeW4gPSBjdHgtPnRvOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIGV4 cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwgc2plX3dhbGtlciwgKHZvaWQgKikgY3R4KTsK K30KKworLyoKKyAqIFJlbW92ZSBhIHJlbGF0aW9uIGFmdGVyIHdlIGhhdmUgcHJvdmVuIHRo YXQgaXQgcGFydGljaXBhdGVzIG9ubHkgaW4gYW4KKyAqIHVubmVlZGVkIHVuaXF1ZSBzZWxm IGpvaW4uCisgKgorICogUmVwbGFjZSBhbnkgbGlua3MgaW4gcGxhbm5lciBpbmZvIHN0cnVj dHVyZXMuCisgKgorICogVHJhbnNmZXIgam9pbiBhbmQgcmVzdHJpY3Rpb24gY2xhdXNlcyBm cm9tIHRoZSByZW1vdmVkIHJlbGF0aW9uIHRvIHRoZQorICogcmVtYWluaW5nIG9uZS4gV2Ug Y2hhbmdlIHRoZSBWYXJzIG9mIHRoZSBjbGF1c2UgdG8gcG9pbnQgdG8gdGhlCisgKiByZW1h aW5pbmcgcmVsYXRpb24gaW5zdGVhZCBvZiB0aGUgcmVtb3ZlZCBvbmUuIFRoZSBjbGF1c2Vz IHRoYXQgcmVxdWlyZQorICogYSBzdWJzZXQgb2Ygam9pbnJlbGlkcyBiZWNvbWUgcmVzdHJp Y3Rpb24gY2xhdXNlcyBvZiB0aGUgcmVtYWluaW5nCisgKiByZWxhdGlvbiwgYW5kIG90aGVy cyByZW1haW4gam9pbiBjbGF1c2VzLiBXZSBhcHBlbmQgdGhlbSB0bworICogYmFzZXJlc3Ry aWN0aW5mbyBhbmQgam9pbmluZm8gcmVzcGVjdGl2ZWx5LCB0cnlpbmcgbm90IHRvIGludHJv ZHVjZQorICogZHVwbGljYXRlcy4KKyAqCisgKiBXZSBhbHNvIGhhdmUgdG8gcHJvY2VzcyB0 aGUgJ2pvaW5jbGF1c2VzJyBsaXN0IGhlcmUsIGJlY2F1c2UgaXQKKyAqIGNvbnRhaW5zIEVD LWRlcml2ZWQgam9pbiBjbGF1c2VzIHdoaWNoIG11c3QgYmVjb21lIGZpbHRlciBjbGF1c2Vz LiBJdAorICogaXMgbm90IGVub3VnaCB0byBqdXN0IGNvcnJlY3QgdGhlIEVDcywgYmVjYXVz ZSB0aGUgRUMtZGVyaXZlZAorICogcmVzdHJpY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYmVmb3Jl IGpvaW4gcmVtb3ZhbCAoc2VlCisgKiBnZW5lcmF0ZV9iYXNlX2ltcGxpZWRfZXF1YWxpdGll cykuCisgKi8KK3N0YXRpYyB2b2lkCityZW1vdmVfc2VsZl9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwgUGxhblJvd01hcmsgKmttYXJrLCBQbGFuUm93TWFyayAqcm1hcmssCisJCQkJ CSBSZWxPcHRJbmZvICp0b0tlZXAsIFJlbE9wdEluZm8gKnRvUmVtb3ZlLAorCQkJCQkgTGlz dCAqcmVzdHJpY3RsaXN0KQoreworCUxpc3QJCQkgICAqam9pbmluZm9zOworCUxpc3RDZWxs CQkgICAqbGM7CisJaW50CQkJCQlpOworCUxpc3QJCQkgICAqamluZm9fY2FuZGlkYXRlcyA9 IE5JTDsKKwlMaXN0CQkJICAgKmJpbmZvX2NhbmRpZGF0ZXMgPSBOSUw7CisJUmVwbGFjZVZh cm5vQ29udGV4dAljdHggPSB7LmZyb20gPSB0b1JlbW92ZS0+cmVsaWQsIC50byA9IHRvS2Vl cC0+cmVsaWR9OworCisJLyoKKwkgKiBSZXBsYWNlIGluZGV4IG9mIHJlbW92aW5nIHRhYmxl IHdpdGggdGhlIGtlZXBpbmcgb25lLiBUaGUgdGVjaG5pcXVlIG9mCisJICogcmVtb3Zpbmcv ZGlzdHJpYnV0aW5nIHJlc3RyaWN0aW5mbyBpcyB1c2VkIGhlcmUgdG8gYXR0YWNoIGp1c3Qg YXBwZWFyZWQKKwkgKiAoZm9yIGtlZXBpbmcgcmVsYXRpb24pIGpvaW4gY2xhdXNlcyBhbmQg YXZvaWQgb2YgYWRkaW5nIGR1cGxpY2F0ZXMgb2YKKwkgKiB0aG9zZSB0aGF0IGFscmVhZHkg ZXhpc3QgaW4gdGhlIGpvaW5pbmZvIGxpc3QuCisJICovCisJam9pbmluZm9zID0gbGlzdF9j b3B5KHRvUmVtb3ZlLT5qb2luaW5mbyk7CisJZm9yZWFjaChsYywgam9pbmluZm9zKQorCXsK KwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMp OworCisJCXJlbW92ZV9qb2luX2NsYXVzZV9mcm9tX3JlbHMocm9vdCwgcmluZm8sIHJpbmZv LT5yZXF1aXJlZF9yZWxpZHMpOworCQlyZXBsYWNlX3Zhcm5vKChOb2RlICopIHJpbmZvLCB0 b1JlbW92ZS0+cmVsaWQsIHRvS2VlcC0+cmVsaWQpOworCisJCWlmIChibXNfbWVtYmVyc2hp cChyaW5mby0+cmVxdWlyZWRfcmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpCisJCQlqaW5mb19j YW5kaWRhdGVzID0gbGFwcGVuZChqaW5mb19jYW5kaWRhdGVzLCByaW5mbyk7CisJCWVsc2UK KwkJCWJpbmZvX2NhbmRpZGF0ZXMgPSBsYXBwZW5kKGJpbmZvX2NhbmRpZGF0ZXMsIHJpbmZv KTsKKwl9CisKKwkvKgorCSAqIENvbmNhdGVuYXRlIHJlc3RyaWN0bGlzdCB0byB0aGUgbGlz dCBvZiBiYXNlIHJlc3RyaWN0aW9ucyBvZiB0aGUgcmVtb3ZpbmcKKwkgKiB0YWJsZSBqdXN0 IHRvIHNpbXBsaWZ5IHJlcGxhY2VtZW50IHByb2NlZHVyZTogYWxsIG9mIHRoZW0gd2VyZW4n dAorCSAqIGNvbm5lY3RlZCB0byBhbnkga2VlcGluZyByZWxhdGlvbnMgYW5kIG5lZWQgdG8g YmUgYWRkZWQgdG8gc29tZSByZWxzLgorCSAqLworCXRvUmVtb3ZlLT5iYXNlcmVzdHJpY3Rp bmZvID0gbGlzdF9jb25jYXQodG9SZW1vdmUtPmJhc2VyZXN0cmljdGluZm8sCisJCQkJCQkJ CQkJCSByZXN0cmljdGxpc3QpOworCWZvcmVhY2gobGMsIHRvUmVtb3ZlLT5iYXNlcmVzdHJp Y3RpbmZvKQorCXsKKwkJUmVzdHJpY3RJbmZvICAgKnJpbmZvID0gbGZpcnN0X25vZGUoUmVz dHJpY3RJbmZvLCBsYyk7CisKKwkJcmVwbGFjZV92YXJubygoTm9kZSAqKSByaW5mbywgdG9S ZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKworCQlpZiAoYm1zX21lbWJlcnNoaXAo cmluZm8tPnJlcXVpcmVkX3JlbGlkcykgPT0gQk1TX01VTFRJUExFKQorCQkJamluZm9fY2Fu ZGlkYXRlcyA9IGxhcHBlbmQoamluZm9fY2FuZGlkYXRlcywgcmluZm8pOworCQllbHNlCisJ CQliaW5mb19jYW5kaWRhdGVzID0gbGFwcGVuZChiaW5mb19jYW5kaWRhdGVzLCByaW5mbyk7 CisJfQorCisJLyoKKwkgKiBOb3csIGFkZCBhbGwgbm9uLXJlZHVuZGFudCBjbGF1c2VzIHRv IHRoZSBrZWVwaW5nIHJlbGF0aW9uLgorCSAqIENvbnRyYWRpY3Rvcnkgb3BlcmF0aW9uLiBP biB0aGUgb25lIHNpZGUgd2UgcmVkdWNlIGxlbmd0aCBvZiByZXN0cmljdAorCSAqIGxpc3Rz IHRoYXQgY2FuIGltcGFjdCBwbGFubmluZyBvciBleGVjdXRpbmcgdGltZS4gQWRkaXRpb25h bGx5LCB3ZQorCSAqIGltcHJvdmUgYWNjdXJhY3kgb2YgY2FyZGluYWxpdHkgZXN0aW1hdGlv bi4gT24gdGhlIG90aGVyIHNpZGUsIGl0IGlzIG9uZQorCSAqIG1vcmUgcGxhY2Ugd2hpY2gg Y2FuIG1ha2UgcGxhbm5pbmcgdGltZSBtdWNoIGxvbmdlciBpbiBzcGVjaWZpYyBjYXNlcy4K KwkgKiBJdCB3b3VsZCBoYXZlIGJlZW4gYmV0dGVyIHRvIGF2b2lkIGNhbGxpbmcgdGhlIGVx dWFsKCkgZnVuY3Rpb24gaGVyZSwKKwkgKiBidXQgaXQncyBvbmx5IHdheSB0byBkZXRlY3Qg ZHVwbGljYXRlZCBpbmVxdWFsaXR5IGV4cHJlc3Npb25zLgorCSAqLworCisJZm9yZWFjaChs YywgYmluZm9fY2FuZGlkYXRlcykKKwl7CisJCVJlc3RyaWN0SW5mbyAgICpyaW5mbyA9IGxm aXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMpOworCQlMaXN0Q2VsbAkgICAqb2xjID0gTlVM TDsKKwkJYm9vbAkJCWlzX3JlZHVuZGFudCA9IGZhbHNlOworCisJCUFzc2VydCghYm1zX2lz X21lbWJlcih0b1JlbW92ZS0+cmVsaWQsIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpKTsKKwor CQlmb3JlYWNoKG9sYywgdG9LZWVwLT5iYXNlcmVzdHJpY3RpbmZvKQorCQl7CisJCQlSZXN0 cmljdEluZm8gKnNyYyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgb2xjKTsKKworCQkJ aWYgKCFibXNfZXF1YWwoc3JjLT5jbGF1c2VfcmVsaWRzLCByaW5mby0+Y2xhdXNlX3JlbGlk cykpCisJCQkJLyogQ29uc3QgYW5kIG5vbi1jb25zdCBleHByZXNzaW9ucyBjYW4ndCBiZSBl cXVhbCAqLworCQkJCWNvbnRpbnVlOworCisJCQlpZiAoc3JjID09IHJpbmZvIHx8CisJCQkJ KHJpbmZvLT5wYXJlbnRfZWMgIT0gTlVMTAorCQkJCSAmJiBzcmMtPnBhcmVudF9lYyA9PSBy aW5mby0+cGFyZW50X2VjKQorCQkJCXx8IGVxdWFsKHJpbmZvLT5jbGF1c2UsIHNyYy0+Y2xh dXNlKSkKKwkJCXsKKwkJCQlpc19yZWR1bmRhbnQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisJCWlmICghaXNfcmVkdW5kYW50KQorCQkJZGlzdHJpYnV0ZV9yZXN0cmljdGlu Zm9fdG9fcmVscyhyb290LCByaW5mbyk7CisJfQorCWZvcmVhY2gobGMsIGppbmZvX2NhbmRp ZGF0ZXMpCisJeworCQlSZXN0cmljdEluZm8gICAqcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0 cmljdEluZm8sIGxjKTsKKwkJTGlzdENlbGwJICAgKm9sYyA9IE5VTEw7CisJCWJvb2wJCQlp c19yZWR1bmRhbnQgPSBmYWxzZTsKKworCQlBc3NlcnQoIWJtc19pc19tZW1iZXIodG9SZW1v dmUtPnJlbGlkLCByaW5mby0+cmVxdWlyZWRfcmVsaWRzKSk7CisKKwkJZm9yZWFjaChvbGMs IHRvS2VlcC0+am9pbmluZm8pCisJCXsKKwkJCVJlc3RyaWN0SW5mbyAqc3JjID0gbGZpcnN0 X25vZGUoUmVzdHJpY3RJbmZvLCBvbGMpOworCisJCQlpZiAoIWJtc19lcXVhbChzcmMtPmNs YXVzZV9yZWxpZHMsIHJpbmZvLT5jbGF1c2VfcmVsaWRzKSkKKwkJCQkvKiBDYW4ndCBjb21w YXJlIHRyaXZpYWxseSBkaWZmZXJlbnQgY2xhdXNlcyAqLworCQkJCWNvbnRpbnVlOworCisJ CQlpZiAoc3JjID09IHJpbmZvIHx8CisJCQkJKHJpbmZvLT5wYXJlbnRfZWMgIT0gTlVMTAor CQkJCSAmJiBzcmMtPnBhcmVudF9lYyA9PSByaW5mby0+cGFyZW50X2VjKQorCQkJCXx8IGVx dWFsKHJpbmZvLT5jbGF1c2UsIHNyYy0+Y2xhdXNlKSkKKwkJCXsKKwkJCQlpc19yZWR1bmRh bnQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghaXNfcmVkdW5kYW50 KQorCQkJZGlzdHJpYnV0ZV9yZXN0cmljdGluZm9fdG9fcmVscyhyb290LCByaW5mbyk7CisJ fQorCWxpc3RfZnJlZShiaW5mb19jYW5kaWRhdGVzKTsKKwlsaXN0X2ZyZWUoamluZm9fY2Fu ZGlkYXRlcyk7CisKKwkvKgorCSAqIEFycmFuZ2UgZXF1aXZhbGVuY2UgY2xhc3NlcywgbWVu dGlvbmVkIHJlbW92aW5nIHRhYmxlLCB3aXRoIHRoZSBrZWVwaW5nCisJICogb25lOiB2YXJu byBvZiByZW1vdmluIHRhYmxlIHNob3VsZCBiZSByZXBsYWNlZCBpbiBtZW1iZXJzIGFuZCBz b3VyY2VzCisJICogbGlzdHMuIEFsc28sIHJlbW92ZSBkdXBsaWNhdGVkIGVsZW1lbnRzIGlm IHRoaXMgcmVwbGFjZW1lbnQgcHJvY2VkdXJlCisJICogY3JlYXRlZCB0aGVtLgorCSAqLwor CWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodG9SZW1vdmUtPmVjbGFz c19pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCUVxdWl2YWxlbmNlQ2xhc3MgKmVjID0gKEVx dWl2YWxlbmNlQ2xhc3MgKikgbGlzdF9udGgocm9vdC0+ZXFfY2xhc3NlcywgaSk7CisKKwkJ dXBkYXRlX2VjbGFzcyhlYywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJ dG9LZWVwLT5lY2xhc3NfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHRvS2VlcC0+ZWNsYXNz X2luZGV4ZXMsIGkpOworCX0KKworCS8qCisJICogVHJhbnNmZXIgdGhlIHRhcmdldGxpc3Qg YW5kIGF0dHJfbmVlZGVkIGZsYWdzLgorCSAqLworCisJZm9yZWFjaChsYywgdG9SZW1vdmUt PnJlbHRhcmdldC0+ZXhwcnMpCisJeworCQlOb2RlICAgKm5vZGUgPSBsZmlyc3QobGMpOwor CisJCXJlcGxhY2VfdmFybm8obm9kZSwgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlk KTsKKwkJaWYgKCFsaXN0X21lbWJlcih0b0tlZXAtPnJlbHRhcmdldC0+ZXhwcnMsIG5vZGUp KQorCQkJdG9LZWVwLT5yZWx0YXJnZXQtPmV4cHJzID0gbGFwcGVuZCh0b0tlZXAtPnJlbHRh cmdldC0+ZXhwcnMsIG5vZGUpOworCX0KKworCWZvciAoaSA9IHRvS2VlcC0+bWluX2F0dHI7 IGkgPD0gdG9LZWVwLT5tYXhfYXR0cjsgaSsrKQorCXsKKwkJaW50CQkJYXR0bm8gPSBpIC0g dG9LZWVwLT5taW5fYXR0cjsKKworCQl0b1JlbW92ZS0+YXR0cl9uZWVkZWRbYXR0bm9dID0g cmVwbGFjZV9yZWxpZCgKKwkJCQkJCQkJCQkJdG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5v XSwKKwkJCQkJCQkJCQkJdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJdG9L ZWVwLT5hdHRyX25lZWRlZFthdHRub10gPSBibXNfYWRkX21lbWJlcnModG9LZWVwLT5hdHRy X25lZWRlZFthdHRub10sCisJCQkJCQkJCQkJCQkJIHRvUmVtb3ZlLT5hdHRyX25lZWRlZFth dHRub10pOworCX0KKworCS8qCisJICogSWYgdGhlIHJlbW92ZWQgcmVsYXRpb24gaGFzIGEg cm93IG1hcmssIHRyYW5zZmVyIGl0IHRvIHRoZSByZW1haW5pbmcKKwkgKiBvbmUuCisJICoK KwkgKiBJZiBib3RoIHJlbHMgaGF2ZSByb3cgbWFya3MsIGp1c3Qga2VlcCB0aGUgb25lIGNv cnJlc3BvbmRpbmcgdG8gdGhlCisJICogcmVtYWluaW5nIHJlbGF0aW9uLCBiZWNhdXNlIHdl IHZlcmlmaWVkIGVhcmxpZXIgdGhhdCB0aGV5IGhhdmUgdGhlIHNhbWUKKwkgKiBzdHJlbmd0 aC4KKwkgKi8KKwlpZiAocm1hcmspCisJeworCQlpZiAoa21hcmspCisJCXsKKwkJCUFzc2Vy dChrbWFyay0+bWFya1R5cGUgPT0gcm1hcmstPm1hcmtUeXBlKTsKKworCQkJcm9vdC0+cm93 TWFya3MgPSBsaXN0X2RlbGV0ZV9wdHIocm9vdC0+cm93TWFya3MsIHJtYXJrKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCS8qIFNob3VsZG4ndCBoYXZlIGluaGVyaXRhbmNlIGNoaWxkcmVu IGhlcmUuICovCisJCQlBc3NlcnQocm1hcmstPnJ0aSA9PSBybWFyay0+cHJ0aSk7CisKKwkJ CXJtYXJrLT5ydGkgPSBybWFyay0+cHJ0aSA9IHRvS2VlcC0+cmVsaWQ7CisJCX0KKwl9CisK KwkvKiBSZXBsYWNlIHZhcm5vIGluIGFsbCB0aGUgcXVlcnkgc3RydWN0dXJlcyAqLworCXF1 ZXJ5X3RyZWVfd2Fsa2VyKHJvb3QtPnBhcnNlLCBzamVfd2Fsa2VyLCAmY3R4LCBRVFdfRVhB TUlORV9TT1JUR1JPVVApOworCisJLyogQXQgbGFzdCwgcmVwbGFjZSBsaW5rcyBpbiB0aGUg cGxhbm5lciBpbmZvICovCisJcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5X2NvbW1vbihyb290LCB0 b1JlbW92ZSwgdG9LZWVwLT5yZWxpZCwgTlVMTCwgTlVMTCk7CisJLyogcmVwbGFjZSB2YXJu byBpbiByb290IHRhcmdldGxpc3QgYW5kIEhBVklORyBjbGF1c2UgKi8KKwlyZXBsYWNlX3Zh cm5vKChOb2RlICopIHJvb3QtPnByb2Nlc3NlZF90bGlzdCwKKwkJCQkgICB0b1JlbW92ZS0+ cmVsaWQsIHRvS2VlcC0+cmVsaWQpOworCXJlcGxhY2VfdmFybm8oKE5vZGUgKikgcm9vdC0+ cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlLAorCQkJCSAgIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVw LT5yZWxpZCk7CisJLyogLi4uIGFuZCByZW1vdmUgdGhlIHJlbCBmcm9tIHRoZSBiYXNlcmVs IGFycmF5ICovCisJcm9vdC0+c2ltcGxlX3JlbF9hcnJheVt0b1JlbW92ZS0+cmVsaWRdID0g TlVMTDsKKwlwZnJlZSh0b1JlbW92ZSk7Cit9CisKKy8qCisgKiBzcGxpdF9zZWxmam9pbl9x dWFscworICoJCVByb2Nlc3NlcyAnam9pbnF1YWxzJyBidWlsZGluZyB0d28gbGlzdHMsIG9u ZSB3aXRoIGEgbGlzdCBvZiBxdWFscworICoJCXdoZXJlIHRoZSBjb2x1bW5zL2V4cHJzIG9u IGVpdGhlciBzaWRlIG9mIHRoZSBqb2luIG1hdGNoIGFuZCBhbm90aGVyCisgKgkJbGlzdCBj b250YWluaW5nIHRoZSByZW1haW5pbmcgcXVhbHMuCisgKgorICogJ2pvaW5xdWFscycgbXVz dCBvbmx5IGNvbnRhaW4gcXVhbHMgZm9yIGEgUlRFX1JFTEFUSU9OIGJlaW5nIGpvaW5lZCB0 bworICogaXRzZWxmLgorICovCitzdGF0aWMgdm9pZAorc3BsaXRfc2VsZmpvaW5fcXVhbHMo UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5xdWFscywgTGlzdCAqKnNlbGZqb2lucXVh bHMsCisJCQkJCSBMaXN0ICoqb3RoZXJqb2lucXVhbHMsIGludCBmcm9tLCBpbnQgdG8pCit7 CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqc2pvaW5xdWFscyA9IE5JTDsKKwlMaXN0 CSAgICpvam9pbnF1YWxzID0gTklMOworCisJZm9yZWFjaChsYywgam9pbnF1YWxzKQorCXsK KwkJUmVzdHJpY3RJbmZvICAgKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBs Yyk7CisJCU9wRXhwcgkJICAgKmV4cHI7CisJCU5vZGUJCSAgICpsZWZ0ZXhwcjsKKwkJTm9k ZQkJICAgKnJpZ2h0ZXhwcjsKKworCQkvKiBJbiBnZW5lcmFsLCBjbGF1c2UgbG9va3MgbGlr ZSBGKGFyZzEpID0gRyhhcmcyKSAqLworCQlpZiAoIXJpbmZvLT5tZXJnZW9wZmFtaWxpZXMg fHwKKwkJCWJtc19udW1fbWVtYmVycyhyaW5mby0+Y2xhdXNlX3JlbGlkcykgIT0gMiB8fAor CQkJYm1zX21lbWJlcnNoaXAocmluZm8tPmxlZnRfcmVsaWRzKSAhPSBCTVNfU0lOR0xFVE9O IHx8CisJCQlibXNfbWVtYmVyc2hpcChyaW5mby0+cmlnaHRfcmVsaWRzKSAhPSBCTVNfU0lO R0xFVE9OKQorCQl7CisJCQlvam9pbnF1YWxzID0gbGFwcGVuZChvam9pbnF1YWxzLCByaW5m byk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWV4cHIgPSAoT3BFeHByICopIHJpbmZvLT5j bGF1c2U7CisKKwkJaWYgKCFJc0EoZXhwciwgT3BFeHByKSB8fCBsaXN0X2xlbmd0aChleHBy LT5hcmdzKSAhPSAyKQorCQl7CisJCQlvam9pbnF1YWxzID0gbGFwcGVuZChvam9pbnF1YWxz LCByaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxlZnRleHByID0gZ2V0X2xlZnRv cChyaW5mby0+Y2xhdXNlKTsKKwkJcmlnaHRleHByID0gY29weU9iamVjdChnZXRfcmlnaHRv cChyaW5mby0+Y2xhdXNlKSk7CisKKwkJaWYgKGxlZnRleHByICYmIElzQShsZWZ0ZXhwciwg UmVsYWJlbFR5cGUpKQorCQkJbGVmdGV4cHIgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICop IGxlZnRleHByKS0+YXJnOworCQlpZiAocmlnaHRleHByICYmIElzQShyaWdodGV4cHIsIFJl bGFiZWxUeXBlKSkKKwkJCXJpZ2h0ZXhwciA9IChOb2RlICopICgoUmVsYWJlbFR5cGUgKikg cmlnaHRleHByKS0+YXJnOworCisJCS8qCisJCSAqIFF1aXRlIGV4cGVuc2l2ZSBvcGVyYXRp b24sIG5hcnJvd2luZyB0aGUgdXNlIGNhc2UuIEZvciBleGFtcGxlLCB3aGVuCisJCSAqIHdl IGhhdmUgY2FzdCBvZiB0aGUgc2FtZSB2YXIgdG8gZGlmZmVyZW50IChidXQgY29tcGF0aWJs ZSkgdHlwZXMuCisJCSAqLworCQlyZXBsYWNlX3Zhcm5vKHJpZ2h0ZXhwciwgYm1zX3Npbmds ZXRvbl9tZW1iZXIocmluZm8tPnJpZ2h0X3JlbGlkcyksCisJCQkJCSAgYm1zX3NpbmdsZXRv bl9tZW1iZXIocmluZm8tPmxlZnRfcmVsaWRzKSk7CisKKwkJaWYgKGVxdWFsKGxlZnRleHBy LCByaWdodGV4cHIpKQorCQkJc2pvaW5xdWFscyA9IGxhcHBlbmQoc2pvaW5xdWFscywgcmlu Zm8pOworCQllbHNlCisJCQlvam9pbnF1YWxzID0gbGFwcGVuZChvam9pbnF1YWxzLCByaW5m byk7CisJfQorCisJKnNlbGZqb2lucXVhbHMgPSBzam9pbnF1YWxzOworCSpvdGhlcmpvaW5x dWFscyA9IG9qb2lucXVhbHM7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYSBjYXNlIHdoZW4g dW5pcXVlbmVzcyBbcGFydGx5XSBkZXJpdmVkIGZyb20gYSBiYXNlcmVzdHJpY3RpbmZvCisg KiBjbGF1c2UuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIGEgY2hhbmNlIHRvIHJldHVybiBvbmx5 IG9uZSByb3cgKGlmIHN1Y2gKKyAqIGNsYXVzZXMgb24gYm90aCBzaWRlcyBvZiBTSiBpcyBl cXVhbCkgb3Igbm90aGluZyAtIGlmIHRoZXkgYXJlIGRpZmZlcmVudC4KKyAqLworc3RhdGlj IGJvb2wKK21hdGNoX3VuaXF1ZV9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpvdXRlciwgTGlzdCAqdWNsYXVzZXMsCisJCQkJCSBJbmRleCByZWxpZCkKK3sKKwlM aXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHVjbGF1c2VzKQorCXsKKwkJUmVzdHJp Y3RJbmZvICAgKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7CisJCUV4 cHIJCSAgICpjbGF1c2U7CisJCU5vZGUJCSAgICppY2xhdXNlOworCQlOb2RlCQkgICAqYzE7 CisJCWJvb2wJCQltYXRjaGVkID0gZmFsc2U7CisJCUxpc3RDZWxsCSAgICpvbGM7CisKKwkJ QXNzZXJ0KG91dGVyLT5yZWxpZCA+IDAgJiYgcmVsaWQgPiAwKTsKKworCQkvKiBPbmx5IGZp bHRlcnMgbGlrZSBmKFIueDEsLi4uLFIueE4pID09IGV4cHIgd2Ugc2hvdWxkIGNvbnNpZGVy LiAqLworCQlBc3NlcnQoYm1zX2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlkcykgXgorCQkJ ICAgYm1zX2lzX2VtcHR5KHJpbmZvLT5yaWdodF9yZWxpZHMpKTsKKworCQljbGF1c2UgPSAo RXhwciAqKSBjb3B5T2JqZWN0KHJpbmZvLT5jbGF1c2UpOworCQlyZXBsYWNlX3Zhcm5vKChO b2RlICopIGNsYXVzZSwgcmVsaWQsIG91dGVyLT5yZWxpZCk7CisKKwkJaWNsYXVzZSA9IGJt c19pc19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMpID8gZ2V0X3JpZ2h0b3AoY2xhdXNlKSA6 CisJCQkJCQkJCQkJCQkJIGdldF9sZWZ0b3AoY2xhdXNlKTsKKwkJYzEgPSBibXNfaXNfZW1w dHkocmluZm8tPmxlZnRfcmVsaWRzKSA/IGdldF9sZWZ0b3AoY2xhdXNlKSA6CisJCQkJCQkJ CQkJCQlnZXRfcmlnaHRvcChjbGF1c2UpOworCisJCS8qCisJCSAqIENvbXBhcmUgdGhlc2Ug bGVmdCBhbmQgcmlnaHQgc2lkZXMgd2l0aCBjb3JyZXNwb25kaW5nIHNpZGVzIG9mIHRoZQor CQkgKiBvdXRlcidzIGZpbHRlcnMuIElmIG5vIG9uZSBkZXRlY3RlZCAtIHJldHVybiBpbW1l ZGlhdGVseS4KKwkJICovCisJCWZvcmVhY2gob2xjLCBvdXRlci0+YmFzZXJlc3RyaWN0aW5m bykKKwkJeworCQkJUmVzdHJpY3RJbmZvICpvcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0cmlj dEluZm8sIG9sYyk7CisJCQlOb2RlCQkgKm9jbGF1c2U7CisJCQlOb2RlCQkgKmMyOworCisJ CQlpZiAob3JpbmZvLT5tZXJnZW9wZmFtaWxpZXMgPT0gTklMKQorCQkJCS8qIERvbid0IGNv bnNpZGVyIGNsYXVzZXMgd2hpY2ggYXJlbid0IHNpbWlsYXIgdG8gJ0YoWCk9RyhZKScgKi8K KwkJCQljb250aW51ZTsKKworCQkJb2NsYXVzZSA9IGJtc19pc19lbXB0eShvcmluZm8tPmxl ZnRfcmVsaWRzKSA/CisJCQkJCWdldF9yaWdodG9wKG9yaW5mby0+Y2xhdXNlKSA6IGdldF9s ZWZ0b3Aob3JpbmZvLT5jbGF1c2UpOworCQkJYzIgPSAoYm1zX2lzX2VtcHR5KG9yaW5mby0+ bGVmdF9yZWxpZHMpID8KKwkJCQkgICBnZXRfbGVmdG9wKG9yaW5mby0+Y2xhdXNlKSA6IGdl dF9yaWdodG9wKG9yaW5mby0+Y2xhdXNlKSk7CisKKwkJCWlmIChlcXVhbChpY2xhdXNlLCBv Y2xhdXNlKSAmJiBlcXVhbChjMSwgYzIpKQorCQkJeworCQkJCW1hdGNoZWQgPSB0cnVlOwor CQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFtYXRjaGVkKQorCQkJcmV0dXJuIGZh bHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRmluZCBhbmQgcmVtb3Zl IHVuaXF1ZSBzZWxmIGpvaW5zIGluIGEgZ3JvdXAgb2YgYmFzZSByZWxhdGlvbnMgdGhhdCBo YXZlCisgKiB0aGUgc2FtZSBPaWQuCisgKgorICogUmV0dXJucyBhIHNldCBvZiByZWxpZHMg dGhhdCB3ZXJlIHJlbW92ZWQuCisgKi8KK3N0YXRpYyBSZWxpZHMKK3JlbW92ZV9zZWxmX2pv aW5zX29uZV9ncm91cChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3sKKwlS ZWxpZHMJCXJlc3VsdCA9IE5VTEw7CisJaW50CQkJazsJCQkJLyogSW5kZXggb2Yga2VwdCBy ZWxhdGlvbiAqLworCWludAkJCXIgPSAtMTsJCQkvKiBJbmRleCBvZiByZW1vdmVkIHJlbGF0 aW9uICovCisKKwl3aGlsZSAoKHIgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCByKSkgPiAw KQorCXsKKwkJUmVsT3B0SW5mbyAqaW5uZXIgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3Jd OworCisJCWsgPSByOworCisJCXdoaWxlICgoayA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMs IGspKSA+IDApCisJCXsKKwkJCVJlbGlkcwkJCWpvaW5yZWxpZHMgPSBOVUxMOworCQkJUmVs T3B0SW5mbwkgICAqb3V0ZXIgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W2tdOworCQkJTGlz dAkJICAgKnJlc3RyaWN0bGlzdDsKKwkJCUxpc3QJCSAgICpzZWxmam9pbnF1YWxzOworCQkJ TGlzdAkJICAgKm90aGVyam9pbnF1YWxzOworCQkJTGlzdENlbGwJICAgKmxjOworCQkJYm9v bAkJCWppbmZvX2NoZWNrID0gdHJ1ZTsKKwkJCVBsYW5Sb3dNYXJrCSAgICpvbWFyayA9IE5V TEw7CisJCQlQbGFuUm93TWFyawkgICAqaW1hcmsgPSBOVUxMOworCQkJTGlzdAkJICAgKnVj bGF1c2VzID0gTklMOworCisJCQkvKiBBIHNhbml0eSBjaGVjazogdGhlIHJlbGF0aW9ucyBo YXZlIHRoZSBzYW1lIE9pZC4gKi8KKwkJCUFzc2VydChyb290LT5zaW1wbGVfcnRlX2FycmF5 W2tdLT5yZWxpZCA9PQorCQkJCSAgIHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbcl0tPnJlbGlk KTsKKworCQkJLyoKKwkJCSAqIEl0IGlzIGltcG9zc2libGUgdG8gZWxpbWluYXRlIGpvaW4g b2YgdHdvIHJlbGF0aW9ucyBpZiB0aGV5CisJCQkgKiBiZWxvbmcgdG8gZGlmZmVyZW50IHJ1 bGVzIG9mIG9yZGVyLiBPdGhlcndpc2UgcGxhbm5lciBjYW4ndAorCQkJICogYmUgYWJsZSB0 byBmaW5kIGFueSB2YXJpYW50cyBvZiBjb3JyZWN0IHF1ZXJ5IHBsYW4uCisJCQkgKi8KKwkJ CWZvcmVhY2gobGMsIHJvb3QtPmpvaW5faW5mb19saXN0KQorCQkJeworCQkJCVNwZWNpYWxK b2luSW5mbyAqaW5mbyA9IChTcGVjaWFsSm9pbkluZm8gKikgbGZpcnN0KGxjKTsKKworCQkJ CWlmICgoYm1zX2lzX21lbWJlcihrLCBpbmZvLT5zeW5fbGVmdGhhbmQpIF4KKwkJCQkJIGJt c19pc19tZW1iZXIociwgaW5mby0+c3luX2xlZnRoYW5kKSkgfHwKKwkJCQkJKGJtc19pc19t ZW1iZXIoaywgaW5mby0+c3luX3JpZ2h0aGFuZCkgXgorCQkJCQkgYm1zX2lzX21lbWJlcihy LCBpbmZvLT5zeW5fcmlnaHRoYW5kKSkpCisJCQkJeworCQkJCQlqaW5mb19jaGVjayA9IGZh bHNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWppbmZvX2NoZWNrKQor CQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogQ2hlY2sgUm93IE1hcmtzIGVxdWl2YWxl bmNlLgorCQkJICogV2UgY2FuJ3QgcmVtb3ZlIHRoZSBqb2luIGlmIHRoZSByZWxhdGlvbnMg aGF2ZSByb3cgbWFya3Mgb2YKKwkJCSAqIGRpZmZlcmVudCBzdHJlbmd0aCAoZS5nLiBvbmUg aXMgbG9ja2VkIEZPUiBVUERBVEUgYW5kIGFub3RoZXIKKwkJCSAqIGp1c3QgaGFzIFJPV19N QVJLX1JFRkVSRU5DRSBmb3IgRXZhbFBsYW5RdWFsIHJlY2hlY2tpbmcpLgorCQkJICovCisJ CQlmb3JlYWNoKGxjLCByb290LT5yb3dNYXJrcykKKwkJCXsKKwkJCQlQbGFuUm93TWFyayAq cm93TWFyayA9IChQbGFuUm93TWFyayAqKSBsZmlyc3QobGMpOworCisJCQkJaWYgKHJvd01h cmstPnJ0aSA9PSBrKQorCQkJCXsKKwkJCQkJQXNzZXJ0KGltYXJrID09IE5VTEwpOworCQkJ CQlpbWFyayA9IHJvd01hcms7CisJCQkJfQorCQkJCWVsc2UgaWYgKHJvd01hcmstPnJ0aSA9 PSByKQorCQkJCXsKKwkJCQkJQXNzZXJ0KG9tYXJrID09IE5VTEwpOworCQkJCQlvbWFyayA9 IHJvd01hcms7CisJCQkJfQorCisJCQkJaWYgKG9tYXJrICYmIGltYXJrKQorCQkJCQlicmVh azsKKwkJCX0KKwkJCWlmIChvbWFyayAmJiBpbWFyayAmJiBvbWFyay0+bWFya1R5cGUgIT0g aW1hcmstPm1hcmtUeXBlKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogV2Ugb25s eSBkZWFsIHdpdGggYmFzZSByZWxzIGhlcmUsIHNvIHRoZWlyIHJlbGlkcyBiaXRzZXQKKwkJ CSAqIGNvbnRhaW5zIG9ubHkgb25lIG1lbWJlciAtLSB0aGVpciByZWxpZC4KKwkJCSAqLwor CQkJam9pbnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxpZHMsIHIpOworCQkJam9p bnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxpZHMsIGspOworCisJCQkvKgorCQkJ ICogQmUgc2FmZSB0byBkbyBub3QgcmVtb3ZlIHRhYmxlIHBhcnRpY2lwYXRlZCBpbiBjb21w bGljYXRlZCBQSAorCQkJICovCisJCQlmb3JlYWNoKGxjLCByb290LT5wbGFjZWhvbGRlcl9s aXN0KQorCQkJeworCQkJCVBsYWNlSG9sZGVySW5mbyAqcGhpbmZvID0gKFBsYWNlSG9sZGVy SW5mbyAqKSBsZmlyc3QobGMpOworCisJCQkJLyogdGhlcmUgaXNuJ3QgYW55IG90aGVyIHBs YWNlIHRvIGV2YWwgUEhWICovCisJCQkJaWYgKGJtc19pc19zdWJzZXQocGhpbmZvLT5waF9l dmFsX2F0LCBqb2lucmVsaWRzKSB8fAorCQkJCQlibXNfaXNfc3Vic2V0KHBoaW5mby0+cGhf bmVlZGVkLCBqb2lucmVsaWRzKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobGMpCisJ CQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBBdCB0aGlzIHN0YWdlIGpvaW5pbmZvIGxp c3RzIG9mIGlubmVyIGFuZCBvdXRlciBjYW4gY29udGFpbgorCQkJICogb25seSBjbGF1c2Vz LCByZXF1aXJlZCBmb3IgYSBzdXBlcmlvciBvdXRlciBqb2luIHRoYXQgY2FuJ3QKKwkJCSAq IGluZmx1ZW5jZSBvbiB0aGlzIG9wdGltaXphdGlvbi4gU28sIHdlIGNhbiBhdm9pZCB0byBj YWxsIHRoZQorCQkJICogYnVpbGRfam9pbnJlbF9yZXN0cmljdGxpc3QoKSByb3V0aW5lLgor CQkJICovCisJCQlyZXN0cmljdGxpc3QgPSBnZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1YWxp dGllcyhyb290LCBqb2lucmVsaWRzLAorCQkJCQkJCQkJCQkJCQkJaW5uZXItPnJlbGlkcywK KwkJCQkJCQkJCQkJCQkJCW91dGVyLCBOVUxMKTsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mg cmVzdHJpY3RsaXN0IHRvIHNlcGVyYXRlIHRoZSBzZWxmIGpvaW4gcXVhbHMgb3V0IG9mCisJ CQkgKiB0aGUgb3RoZXIgcXVhbHMuIGUuZyB4ID0geCBnb2VzIHRvIHNlbGZqb2lucXVhbHMg YW5kIGEgPSBiIHRvCisJCQkgKiBvdGhlcmpvaW5xdWFscy4KKwkJCSAqLworCQkJc3BsaXRf c2VsZmpvaW5fcXVhbHMocm9vdCwgcmVzdHJpY3RsaXN0LCAmc2VsZmpvaW5xdWFscywKKwkJ CQkJCQkJICZvdGhlcmpvaW5xdWFscywgaW5uZXItPnJlbGlkLCBvdXRlci0+cmVsaWQpOwor CisJCQkvKgorCQkJICogVG8gZW5hYmxlIFNKRSBmb3IgdGhlIG9ubHkgZGVnZW5lcmF0ZSBj YXNlIHdpdGhvdXQgYW55IHNlbGYgam9pbgorCQkJICogY2xhdXNlcyBhdCBhbGwsIGFkZCBi YXNlcmVzdHJpY3RpbmZvIHRvIHRoaXMgbGlzdC4KKwkJCSAqIERlZ2VuZXJhdGUgY2FzZSB3 b3JrcyBvbmx5IGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgc2FtZSBjbGF1c2UuIFNvCisJCQkg KiBkb2Vzbid0IG1hdHRlciB3aGljaCBzaWRlIHRvIGFkZC4KKwkJCSAqLworCQkJc2VsZmpv aW5xdWFscyA9IGxpc3RfY29uY2F0KHNlbGZqb2lucXVhbHMsIG91dGVyLT5iYXNlcmVzdHJp Y3RpbmZvKTsKKworCQkJLyoKKwkJCSAqIERldGVybWluZSBpZiB0aGUgaW5uZXIgdGFibGUg Y2FuIGR1cGxpY2F0ZSBvdXRlciByb3dzLiAgV2UgbXVzdAorCQkJICogYnlwYXNzIHRoZSB1 bmlxdWUgcmVsIGNhY2hlIGhlcmUgc2luY2Ugd2UncmUgcG9zc2libHkgdXNpbmcgYQorCQkJ ICogc3Vic2V0IG9mIGpvaW4gcXVhbHMuIFdlIGNhbiB1c2UgJ2ZvcmNlX2NhY2hlJyA9IHRy dWUgd2hlbiBhbGwKKwkJCSAqIGpvaW4gcXVhbHMgYXJlIHNlbGZqb2luIHF1YWxzLiAgT3Ro ZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cAorCQkJICogcHV0dGluZyBmYWxzZSBuZWdhdGl2ZXMg aW4gdGhlIGNhY2hlLgorCQkJICovCisJCQlpZiAoIWlubmVycmVsX2lzX3VuaXF1ZV9leHQo cm9vdCwgam9pbnJlbGlkcywgaW5uZXItPnJlbGlkcywKKwkJCQkJCQkJCQlvdXRlciwgSk9J Tl9JTk5FUiwgc2VsZmpvaW5xdWFscywKKwkJCQkJCQkJCQlsaXN0X2xlbmd0aChvdGhlcmpv aW5xdWFscykgPT0gMCwKKwkJCQkJCQkJCQkmdWNsYXVzZXMpKQorCQkJCWNvbnRpbnVlOwor CisJCQkvKgorCQkJICogV2UgaGF2ZSBwcm92ZW4gdGhhdCBmb3IgYm90aCByZWxhdGlvbnMs IHRoZSBzYW1lIHVuaXF1ZSBpbmRleAorCQkJICogZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGlz IGF0IG1vc3Qgb25lIHJvdyB3aGVyZSBjb2x1bW5zIGVxdWFsCisJCQkgKiBnaXZlbiB2YWx1 ZXMuIFRoZXNlIHZhbHVlcyBtdXN0IGJlIHRoZSBzYW1lIGZvciBib3RoIHJlbGF0aW9ucywK KwkJCSAqIG9yIGVsc2Ugd2Ugd29uJ3QgbWF0Y2ggdGhlIHNhbWUgcm93IG9uIGVhY2ggc2lk ZSBvZiB0aGUgam9pbi4KKwkJCSAqLworCQkJaWYgKCFtYXRjaF91bmlxdWVfY2xhdXNlcyhy b290LCBpbm5lciwgdWNsYXVzZXMsIG91dGVyLT5yZWxpZCkpCisJCQkJY29udGludWU7CisK KwkJCS8qCisJCQkgKiBXZSBjYW4gcmVtb3ZlIGVpdGhlciByZWxhdGlvbiwgc28gcmVtb3Zl IHRoZSBpbm5lciwgdG8KKwkJCSAqIHNpbXBsaWZ5IHRoaXMgbG9vcC4KKwkJCSAqLworCQkJ cmVtb3ZlX3NlbGZfam9pbl9yZWwocm9vdCwgb21hcmssIGltYXJrLCBvdXRlciwgaW5uZXIs IHJlc3RyaWN0bGlzdCk7CisKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwg cik7CisKKwkJCS8qIFdlIHJlbW92ZWQgdGhlIG91dGVyIHJlbGF0aW9uLCB0cnkgdGhlIG5l eHQgb25lLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogR2F0aGVyIGluZGV4ZXMgb2YgYmFzZSByZWxhdGlvbnMgZnJvbSB0aGUgam9p bmxpc3QgYW5kIHRyeSB0byBlbGltaW5hdGUgc2VsZgorICogam9pbnMuIFRvIGF2b2lkIGNv bXBsZXhpdHksIGxpbWl0IHRoZSBtYXggcG93ZXIgb2YgdGhpcyBzZXQgYnkgYSBHVUMuCisg Ki8KK3N0YXRpYyBSZWxpZHMKK3JlbW92ZV9zZWxmX2pvaW5zX3JlY3Vyc2UoUGxhbm5lcklu Zm8gKnJvb3QsIExpc3QgKmpvaW5saXN0LCBSZWxpZHMgVG9SZW1vdmUpCit7CisJTGlzdENl bGwgICAqamw7CisJUmVsaWRzCQlyZWxpZHMgPSBOVUxMOworCisJLyogQ29sbGVjdCBpbmRl eGVzIG9mIGJhc2UgcmVsYXRpb25zIG9mIHRoZSBqb2luIHRyZWUgKi8KKwlmb3JlYWNoKGps LCBqb2lubGlzdCkKKwl7CisJCU5vZGUgICAqamxub2RlID0gKE5vZGUgKikgbGZpcnN0KGps KTsKKworCQlpZiAoSXNBKGpsbm9kZSwgUmFuZ2VUYmxSZWYpKQorCQl7CisJCQlSYW5nZVRi bFJlZgkgICAqcmVmID0gKFJhbmdlVGJsUmVmICopIGpsbm9kZTsKKwkJCVJhbmdlVGJsRW50 cnkgICpydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3JlZi0+cnRpbmRleF07CisKKwkJ CS8qCisJCQkgKiBXZSBvbmx5IGNhcmUgYWJvdXQgYmFzZSByZWxhdGlvbnMgZnJvbSB3aGlj aCB3ZSBzZWxlY3QKKwkJCSAqIHNvbWV0aGluZy4KKwkJCSAqLworCQkJaWYgKHJ0ZS0+cnRl a2luZCA9PSBSVEVfUkVMQVRJT04gJiYKKwkJCQlydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9S RUxBVElPTiAmJgorCQkJCXJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVmLT5ydGluZGV4XSAh PSBOVUxMKQorCQkJeworCQkJCUFzc2VydCghYm1zX2lzX21lbWJlcihyZWYtPnJ0aW5kZXgs IHJlbGlkcykpOworCQkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcmVmLT5y dGluZGV4KTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChJc0Eoamxub2RlLCBMaXN0KSkKKwkJ CS8qIFJlY3Vyc2l2ZWx5IGdvIGluc2lkZSB0aGUgc3ViLWpvaW5saXN0ICovCisJCQlUb1Jl bW92ZSA9IHJlbW92ZV9zZWxmX2pvaW5zX3JlY3Vyc2Uocm9vdCwgKExpc3QgKikgamxub2Rl LAorCQkJCQkJCQkJCQkJIFRvUmVtb3ZlKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBqb2lubGlzdCBub2RlIHR5cGU6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRh ZyhqbG5vZGUpKTsKKworCQkvKgorCQkgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIGpvaW5zIHdl IHByb2Nlc3MgdG8gY29udHJvbCB0aGUKKwkJICogcXVhZHJhdGljIGJlaGF2aW9yLgorCQkg Ki8KKwkJaWYgKGJtc19udW1fbWVtYmVycyhyZWxpZHMpID49IHNlbGZfam9pbl9zZWFyY2hf bGltaXQpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEl0ZXJhdGl2ZWx5IGZvcm0gYSBn cm91cCBvZiByZWxhdGlvbiBpbmRleGVzIHdpdGggdGhlIHNhbWUgb2lkIGFuZCBsYXVuY2gK KwkgKiB0aGUgcm91dGluZSB0aGF0IGRldGVjdHMgc2VsZi1qb2lucyBpbiB0aGlzIGdyb3Vw IGFuZCByZW1vdmVzIGV4Y2Vzc2l2ZQorCSAqIHJhbmdlIHRhYmxlIGVudHJpZXMuCisJICoK KwkgKiBBdCB0aGUgZW5kIG9mIGl0ZXJhdGlvbiwgZXhjbHVkZSB0aGUgZ3JvdXAgZnJvbSB0 aGUgb3ZlcmFsbCByZWxpZHMgbGlzdC4KKwkgKiBTbyBlYWNoIG5leHQgaXRlcmF0aW9uIG9m IHRoZSBjeWNsZSB3aWxsIGludm9sdmUgbGVzcyBhbmQgbGVzcyB2YWx1ZSBvZgorCSAqIHJl bGlkcy4KKwkgKi8KKwlpZiAoYm1zX251bV9tZW1iZXJzKHJlbGlkcykgPj0gMikKKwl7CisJ CWludAkJaSA9IC0xOworCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMs IGkpKSA+PSAwKQorCQl7CisJCQlSZWxpZHMJZ3JvdXAgPSBOVUxMOworCQkJT2lkCQlncm91 cE9pZDsKKwkJCWludAkJaiA9IGk7CisKKwkJCWdyb3VwT2lkID0gcm9vdC0+c2ltcGxlX3J0 ZV9hcnJheVtpXS0+cmVsaWQ7CisJCQlBc3NlcnQoT2lkSXNWYWxpZChncm91cE9pZCkpOwor CQkJZ3JvdXAgPSBibXNfYWRkX21lbWJlcihncm91cCwgaSk7CisKKwkJCS8qIENyZWF0ZSBn cm91cCBvZiByZWxhdGlvbiBpbmRleGVzIHdpdGggdGhlIHNhbWUgb2lkLiAqLworCQkJd2hp bGUgKChqID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgaikpID49IDApCisJCQl7CisJCQkJ UmFuZ2VUYmxFbnRyeSAqcnRlID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtqXTsKKworCQkJ CUFzc2VydChPaWRJc1ZhbGlkKHJ0ZS0+cmVsaWQpKTsKKworCQkJCWlmIChydGUtPnJlbGlk ID09IGdyb3VwT2lkKQorCQkJCQlncm91cCA9IGJtc19hZGRfbWVtYmVyKGdyb3VwLCBqKTsK KwkJCX0KKworCQkJcmVsaWRzID0gYm1zX2RlbF9tZW1iZXJzKHJlbGlkcywgZ3JvdXApOwor CQkJVG9SZW1vdmUgPSBibXNfYWRkX21lbWJlcnMoVG9SZW1vdmUsCisJCQkJCQkJCQkgICBy ZW1vdmVfc2VsZl9qb2luc19vbmVfZ3JvdXAocm9vdCwgZ3JvdXApKTsKKworCQkJYm1zX2Zy ZWUoZ3JvdXApOworCQl9CisKKwkJQXNzZXJ0KGJtc19pc19lbXB0eShyZWxpZHMpKTsKKwl9 CisKKwlyZXR1cm4gVG9SZW1vdmU7Cit9CisKKy8qCisgKiBGaW5kIGFuZCByZW1vdmUgdXNl bGVzcyBzZWxmIGpvaW5zLgorICoKKyAqIFNlYXJjaCBmb3Igam9pbnMgd2hlcmUgYSByZWxh dGlvbiBpcyBqb2luZWQgdG8gaXRzZWxmLiBJZiB0aGUgam9pbiBjbGF1c2UgZm9yCisgKiBl YWNoIHR1cGxlIGZyb20gb25lIHNpZGUgb2YgdGhlIGpvaW4gaXMgcHJvdmVuIHRvIG1hdGNo IHRoZSBzYW1lIHBoeXNpY2FsIHJvdworICogKG9yIG5vdGhpbmcpIG9uIHRoZSBvdGhlciBz aWRlLCB0aGF0IHNlbGYtam9pbiBjYW4gYmUgZWxpbWluYXRlZCBmcm9tIHRoZQorICogcXVl cnkuCisgKiBTdWl0YWJsZSBqb2luIGNsYXVzZXMgYXNzdW1lIHRoZSBmb3JtIG9mIFggPSBY IGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aAorICogTk9UIE5VTEwgY2xhdXNlcy4KKyAqCisg KiBGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXBwbHkgdGhpcyBvcHRp bWl6YXRpb24gdG8gc3BlY2lhbAorICogam9pbnMuIEhlcmUgaXMgYSBsaXN0IG9mIHdoYXQg d2UgY291bGQgZG8gaW4gc29tZSBwYXJ0aWN1bGFyIGNhc2VzOgorICogJ2EgYTEgc2VtaSBq b2luIGEgYTInOiBpcyByZWR1Y2VkIHRvIGlubmVyIGJ5IHJlZHVjZV91bmlxdWVfc2VtaWpv aW5zLAorICogYW5kIHRoZW4gcmVtb3ZlZCBub3JtYWxseS4KKyAqICdhIGExIGFudGkgam9p biBhIGEyJzogY291bGQgc2ltcGxpZnkgdG8gYSBzY2FuIHdpdGggJ291dGVyIHF1YWxzIEFO RAorICogKElTIE5VTEwgb24gam9pbiBjb2x1bW5zIE9SIE5PVCBpbm5lciBxdWFscyknLgor ICogJ2EgYTEgbGVmdCBqb2luIGEgYTInOiBjb3VsZCBzaW1wbGlmeSB0byBhIHNjYW4gbGlr ZSBpbm5lciwgYnV0IHdpdGhvdXQKKyAqIE5PVCBOVUxMIGNvbmRpdGlvbnMgb24gam9pbiBj b2x1bW5zLgorICogJ2EgYTEgbGVmdCBqb2luIChhIGEyIGpvaW4gYiknOiBjYW4ndCBzaW1w bGlmeSB0aGlzLCBiZWNhdXNlIGpvaW4gdG8gYgorICogY2FuIGJvdGggcmVtb3ZlIHJvd3Mg YW5kIGludHJvZHVjZSBkdXBsaWNhdGVzLgorICoKKyAqIFRvIHNlYXJjaCBmb3IgcmVtb3Zh YmxlIGpvaW5zLCB3ZSBvcmRlciBhbGwgdGhlIHJlbGF0aW9ucyBvbiB0aGVpciBPaWQsCisg KiBnbyBvdmVyIGVhY2ggc2V0IHdpdGggdGhlIHNhbWUgT2lkLCBhbmQgY29uc2lkZXIgZWFj aCBwYWlyIG9mIHJlbGF0aW9ucworICogaW4gdGhpcyBzZXQuCisgKgorICogVG8gcmVtb3Zl IHRoZSBqb2luLCB3ZSBtYXJrIG9uZSBvZiB0aGUgcGFydGljaXBhdGluZyByZWxhdGlvbnMg YXMKKyAqIGRlYWQsIGFuZCByZXdyaXRlIGFsbCByZWZlcmVuY2VzIHRvIGl0IHRvIHBvaW50 IHRvIHRoZSByZW1haW5pbmcKKyAqIHJlbGF0aW9uLiBUaGlzIGluY2x1ZGVzIG1vZGlmeWlu ZyBSZXN0cmljdEluZm9zLCBFcXVpdmFsZW5jZUNsYXNzZXMgYW5kCisgKiBFcXVpdmFsZW5j ZU1lbWJlcnMuIFdlIGFsc28gaGF2ZSB0byBtb2RpZnkgdGhlIHJvdyBtYXJrcy4gVGhlIGpv aW4gY2xhdXNlcworICogb2YgdGhlIHJlbW92ZWQgcmVsYXRpb24gYmVjb21lIGVpdGhlciBy ZXN0cmljdGlvbiBvciBqb2luIGNsYXVzZXMsIGJhc2VkIG9uCisgKiB3aGV0aGVyIHRoZXkg cmVmZXJlbmNlIGFueSByZWxhdGlvbnMgbm90IHBhcnRpY2lwYXRpbmcgaW4gdGhlIHJlbW92 ZWQgam9pbi4KKyAqCisgKiAndGFyZ2V0bGlzdCcgaXMgdGhlIHRvcC1sZXZlbCB0YXJnZXRs aXN0IG9mIHF1ZXJ5LiBJZiBpdCBoYXMgYW55IHJlZmVyZW5jZXMKKyAqIHRvIHRoZSByZW1v dmVkIHJlbGF0aW9ucywgd2UgdXBkYXRlIHRoZW0gdG8gcG9pbnQgdG8gdGhlIHJlbWFpbmlu ZyBvbmVzLgorICovCitMaXN0ICoKK3JlbW92ZV91c2VsZXNzX3NlbGZfam9pbnMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmpvaW5saXN0KQoreworCVJlbGlkcwlUb1JlbW92ZSA9IE5V TEw7CisJaW50CQlyZWxpZCA9IC0xOworCisJaWYgKCFlbmFibGVfc2VsZl9qb2luX3JlbW92 YWwpCisJCXJldHVybiBqb2lubGlzdDsKKworCS8qCisJICogTWVyZ2UgcGFpcnMgb2YgcmVs YXRpb25zIHBhcnRpY2lwYXRlZCBpbiBzZWxmLWpvaW4uIFJlbW92ZSB1bm5lY2Vzc2FyeQor CSAqIHJhbmdlIHRhYmxlIGVudHJpZXMuCisJICovCisJVG9SZW1vdmUgPSByZW1vdmVfc2Vs Zl9qb2luc19yZWN1cnNlKHJvb3QsIGpvaW5saXN0LCBUb1JlbW92ZSk7CisKKwlpZiAodW5s aWtlbHkoVG9SZW1vdmUgIT0gTlVMTCkpCisJeworCQlpbnQJbnJlbW92ZWQgPSAwOworCisJ CS8qIEF0IHRoZSBlbmQsIHJlbW92ZSBvcnBoYW5lZCByZWxhdGlvbiBsaW5rcyAqLworCQl3 aGlsZSAoKHJlbGlkID0gYm1zX25leHRfbWVtYmVyKFRvUmVtb3ZlLCByZWxpZCkpID49IDAp CisJCQlqb2lubGlzdCA9IHJlbW92ZV9yZWxfZnJvbV9qb2lubGlzdChqb2lubGlzdCwgcmVs aWQsICZucmVtb3ZlZCk7CisJfQorCisJcmV0dXJuIGpvaW5saXN0OwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggN2FmZDQzNGM2MC4uNzQ4ZTJhM2Vj OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC0yMjgsNiAr MjI4LDExIEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJcmVk dWNlX3VuaXF1ZV9zZW1pam9pbnMocm9vdCk7CiAKKwkvKgorCSAqIFJlbW92ZSBzZWxmIGpv aW5zIG9uIGEgdW5pcXVlIGNvbHVtbi4KKwkgKi8KKwlqb2lubGlzdCA9IHJlbW92ZV91c2Vs ZXNzX3NlbGZfam9pbnMocm9vdCwgam9pbmxpc3QpOworCiAJLyoKIAkgKiBOb3cgZGlzdHJp YnV0ZSAicGxhY2Vob2xkZXJzIiB0byBiYXNlIHJlbHMgYXMgbmVlZGVkLiAgVGhpcyBoYXMg dG8gYmUKIAkgKiBkb25lIGFmdGVyIGpvaW4gcmVtb3ZhbCBiZWNhdXNlIHJlbW92YWwgY291 bGQgY2hhbmdlIHdoZXRoZXIgYQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpp bmRleCBmOGVmODdkMjZkLi5kNWJjNDE4MjRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y190YWJsZXMuYwpAQCAtMTAxNyw2ICsxMDE3LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBD b25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAorCXsKKwkJeyJlbmFibGVfc2VsZl9qb2luX3JlbW92YWwiLCBQR0NfVVNFUlNFVCwgUVVF UllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlIHJlbW92YWwgb2Yg dW5pcXVlIHNlbGYtam9pbnMuIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4gfCBHVUNf Tk9UX0lOX1NBTVBMRQorCQl9LAorCQkmZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsLAorCQl0 cnVlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsiZ2VxbyIsIFBHQ19VU0VS U0VULCBRVUVSWV9UVU5JTkdfR0VRTywKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyBnZW5l dGljIHF1ZXJ5IG9wdGltaXphdGlvbi4iKSwKQEAgLTIwNjQsNiArMjA3NCwxOCBAQCBzdHJ1 Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJOCwgMSwgSU5UX01BWCwK IAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCisJeworCQl7InNlbGZfam9pbl9zZWFyY2hfbGlt aXQiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX09USEVSLAorCQkJZ2V0dGV4dF9ub29w KCJNYXggc2l6ZSBvZiBhIGdyb3VwIG9mIHBsYWluIHRhYmxlcyB3aGVyZSBwbGFubmVyICIK KwkJCQkJCSAid2lsbCBsb29rdXAgZm9yIHNlbGYgam9pbnMuIiksCisJCQlnZXR0ZXh0X25v b3AoIklmIGEgbnVtYmVyIG9mIHRhYmxlcyBpbiBGUk9NLWxpc3QgaXMgZXhjZWVkZWQgdGhp cyAiCisJCQkJCQkgImxpbWl0LCB0aGUgcGxhbm5lciB3aWxsIGlnbm9yZSB0YWJsZXMgYmV5 b25kIGl0LiIpLAorCQkJR1VDX0VYUExBSU4gfCBHVUNfTk9UX0lOX1NBTVBMRQorCQl9LAor CQkmc2VsZl9qb2luX3NlYXJjaF9saW1pdCwKKwkJMzIsIDEsIElOVF9NQVgsCisJCU5VTEws IE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJnZXFvX3RocmVzaG9sZCIsIFBHQ19VU0VSU0VU LCBRVUVSWV9UVU5JTkdfR0VRTywKIAkJCWdldHRleHRfbm9vcCgiU2V0cyB0aGUgdGhyZXNo b2xkIG9mIEZST00gaXRlbXMgYmV5b25kIHdoaWNoIEdFUU8gaXMgdXNlZC4iKSwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmgKaW5kZXggNTBiYzNiNTAzYS4uMzdmNTc3ZTliMCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmgKQEAgLTc1LDYgKzc1LDkgQEAgZXh0ZXJuIHZvaWQgY3JlYXRlX2lu ZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogZXh0ZXJu IGJvb2wgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJ CQkJCQkJCQkgIExpc3QgKmV4cHJsaXN0LCBMaXN0ICpvcHJsaXN0KTsKK2V4dGVybiBib29s IHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0KFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCisJCQkJCQkJCQkJICBMaXN0ICpyZXN0cmljdGxpc3QsIExpc3QgKmV4 cHJsaXN0LAorCQkJCQkJCQkJCSAgTGlzdCAqb3BybGlzdCwgTGlzdCAqKmV4dHJhX2NsYXVz ZXMpOwogZXh0ZXJuIGJvb2wgaW5kZXhjb2xfaXNfYm9vbF9jb25zdGFudF9mb3JfcXVlcnko UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQlJbmRleE9wdEluZm8gKmluZGV4LAog CQkJCQkJCQkJCQkJaW50IGluZGV4Y29sKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29w dGltaXplci9wbGFubWFpbi5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgK aW5kZXggNWZjOTAwNzM3ZC4uZDI2YzBkM2VhNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BsYW5tYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5t YWluLmgKQEAgLTIwLDYgKzIwLDggQEAKIC8qIEdVQyBwYXJhbWV0ZXJzICovCiAjZGVmaW5l IERFRkFVTFRfQ1VSU09SX1RVUExFX0ZSQUNUSU9OIDAuMQogZXh0ZXJuIFBHRExMSU1QT1JU IGRvdWJsZSBjdXJzb3JfdHVwbGVfZnJhY3Rpb247CitleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfc2VsZl9qb2luX3JlbW92YWw7CitleHRlcm4gUEdETExJTVBPUlQgaW50IHNl bGZfam9pbl9zZWFyY2hfbGltaXQ7CiAKIC8qIHF1ZXJ5X3BsYW5uZXIgY2FsbGJhY2sgdG8g Y29tcHV0ZSBxdWVyeV9wYXRoa2V5cyAqLwogdHlwZWRlZiB2b2lkICgqcXVlcnlfcGF0aGtl eXNfY2FsbGJhY2spIChQbGFubmVySW5mbyAqcm9vdCwgdm9pZCAqZXh0cmEpOwpAQCAtMTA0 LDYgKzEwNiwxMSBAQCBleHRlcm4gYm9vbCBxdWVyeV9pc19kaXN0aW5jdF9mb3IoUXVlcnkg KnF1ZXJ5LCBMaXN0ICpjb2xub3MsIExpc3QgKm9waWRzKTsKIGV4dGVybiBib29sIGlubmVy cmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgICBSZWxpZHMgam9p bnJlbGlkcywgUmVsaWRzIG91dGVycmVsaWRzLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKIAkJ CQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwgTGlzdCAqcmVzdHJpY3RsaXN0LCBib29sIGZv cmNlX2NhY2hlKTsKK2V4dGVybiBib29sIGlubmVycmVsX2lzX3VuaXF1ZV9leHQoUGxhbm5l ckluZm8gKnJvb3QsIFJlbGlkcyBqb2lucmVsaWRzLAorCQkJCQkJCQkgICBSZWxpZHMgb3V0 ZXJyZWxpZHMsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkgICBKb2luVHlwZSBq b2ludHlwZSwgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCQkgICBib29sIGZvcmNlX2Nh Y2hlLCBMaXN0ICoqdWNsYXVzZXMpOworZXh0ZXJuIExpc3QgKnJlbW92ZV91c2VsZXNzX3Nl bGZfam9pbnMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW50cmVlKTsKIAogLyoKICAq IHByb3RvdHlwZXMgZm9yIHBsYW4vc2V0cmVmcy5jCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9lcXVpdmNsYXNzLm91dAppbmRleCAxMjZmNzA0N2ZlLi5kZTcxNDQxMDUyIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5vdXQKQEAgLTQzMCw2ICs0 MzAsMzggQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogICAgRmlsdGVyOiAoKHVuaXF1ZTEgSVMg Tk9UIE5VTEwpIEFORCAodW5pcXVlMiBJUyBOT1QgTlVMTCkpCiAoMiByb3dzKQogCistLSBU ZXN0IHRoYXQgYnJva2VuIEVDcyBhcmUgcHJvY2Vzc2VkIGNvcnJlY3RseSBkdXJpbmcgc2Vs ZiBqb2luIHJlbW92YWwuCistLSBEaXNhYmxlIG1lcmdlIGpvaW5zIHNvIHRoYXQgd2UgZG9u J3QgZ2V0IGFuIGVycm9yIGFib3V0IG1pc3NpbmcgY29tbXV0YXRvci4KKy0tIFRlc3QgYm90 aCBvcmllbnRhdGlvbnMgb2YgdGhlIGpvaW4gY2xhdXNlLCBiZWNhdXNlIG9ubHkgb25lIG9m IHRoZW0gYnJlYWtzCistLSB0aGUgRUMuCitzZXQgZW5hYmxlX21lcmdlam9pbiB0byBvZmY7 CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCAqIGZyb20gZWMwIG0gam9pbiBlYzAg biBvbiBtLmZmID0gbi5mZgorICBqb2luIGVjMSBwIG9uIG0uZmYgKyBuLmZmID0gcC5mMTsK KyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6ICgobi5mZiArIG4uZmYpID0gcC5mMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBlYzEg cAorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZWMwIG4K KyAgICAgICAgICAgICAgIEZpbHRlcjogKGZmIElTIE5PVCBOVUxMKQorKDYgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4g b24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBwLmYxOjppbnQ4ID0gKG0uZmYgKyBu LmZmKTo6aW50OGFsaWFzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIEpvaW4gRmlsdGVyOiAoKHAuZjEpOjpiaWdpbnQgPSAoKG4uZmYgKyBuLmZmKSk6Omlu dDhhbGlhczEpCisgICAtPiAgU2VxIFNjYW4gb24gZWMxIHAKKyAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVjMCBuCisgICAgICAgICAgICAgICBGaWx0 ZXI6IChmZiBJUyBOT1QgTlVMTCkKKyg2IHJvd3MpCisKK3Jlc2V0IGVuYWJsZV9tZXJnZWpv aW47CiAtLSB0aGlzIGNvdWxkIGJlIGNvbnZlcnRlZCwgYnV0IGlzbid0IGF0IHByZXNlbnQK IGV4cGxhaW4gKGNvc3RzIG9mZikKICAgc2VsZWN0ICogZnJvbSB0ZW5rMSB3aGVyZSB1bmlx dWUxID0gdW5pcXVlMSBvciB1bmlxdWUyID0gdW5pcXVlMjsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2pvaW4ub3V0CmluZGV4IDliODYzOGYyODYuLjAyN2MzNTZiY2MgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtNTgwNywxMSArNTgwNywxMyBAQCBleHBsYWlu IChjb3N0cyBvZmYpCiBzZWxlY3QgcC4qIGZyb20KICAgKHBhcmVudCBwIGxlZnQgam9pbiBj aGlsZCBjIG9uIChwLmsgPSBjLmspKSBqb2luIHBhcmVudCB4IG9uIHAuayA9IHguawogICB3 aGVyZSBwLmsgPSAxIGFuZCBwLmsgPSAyOwotICAgICAgICBRVUVSWSBQTEFOICAgICAgICAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIFJlc3VsdAogICAgT25lLVRpbWUgRmlsdGVyOiBmYWxz ZQotKDIgcm93cykKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHBhcmVudF9wa2V5IG9uIHBh cmVudCB4CisgICAgICAgICBJbmRleCBDb25kOiAoayA9IDEpCisoNCByb3dzKQogCiAtLSBi dWcgNTI1NTogdGhpcyBpcyBub3Qgb3B0aW1pemFibGUgYnkgam9pbiByZW1vdmFsCiBiZWdp bjsKQEAgLTYxMzQsNiArNjEzNiw4MjIgQEAgc2VsZWN0ICogZnJvbQogLS0tLSstLS0tKy0t LS0rLS0tLQogKDAgcm93cykKIAorLS0KKy0tIHRlc3QgdGhhdCBzZW1pLSBvciBpbm5lciBz ZWxmLWpvaW5zIG9uIGEgdW5pcXVlIGNvbHVtbiBhcmUgcmVtb3ZlZAorLS0KKy0tIGVuYWJs ZSBvbmx5IG5lc3Rsb29wIHRvIGdldCBtb3JlIHByZWRpY3RhYmxlIHBsYW5zCitzZXQgZW5h YmxlX2hhc2hqb2luIHRvIG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luIHRvIG9mZjsKK2Ny ZWF0ZSB0YWJsZSBzaiAoYSBpbnQgdW5pcXVlLCBiIGludCwgYyBpbnQgdW5pcXVlKTsKK2lu c2VydCBpbnRvIHNqIHZhbHVlcyAoMSwgbnVsbCwgMiksIChudWxsLCAyLCBudWxsKSwgKDIs IDEsIDEpOworYW5hbHl6ZSBzajsKKy0tIFRyaXZpYWwgc2VsZi1qb2luIGNhc2UuCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC4qIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBxLmEg PSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBxCisgICBGaWx0ZXI6ICgoYSBJUyBO T1QgTlVMTCkgQU5EIChiID0gKGEgLSAxKSkpCisoMiByb3dzKQorCitzZWxlY3QgcC4qIGZy b20gc2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CisgYSB8 IGIgfCBjIAorLS0tKy0tLSstLS0KKyAyIHwgMSB8IDEKKygxIHJvdykKKworLS0gU2VsZi1q b2luIHJlbW92YWwgcGVyZm9ybXMgYWZ0ZXIgYSBzdWJxdWVyeSBwdWxsLXVwIHByb2Nlc3Mg YW5kIGNvdWxkIHJlbW92ZQorLS0gc3VjaCBraW5kIG9mIHNlbGYtam9pbiB0b28uIENoZWNr IHRoaXMgb3B0aW9uLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiBw Cit3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gc2ogcQorCQkJCXdoZXJlIHEuYSA9IHAu YSBhbmQgcS5iIDwgMTApOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXEgU2NhbiBvbiBzaiBxCisgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChiIDwg MTApKQorKDIgcm93cykKKworc2VsZWN0ICogZnJvbSBzaiBwIHdoZXJlIGV4aXN0cyAoc2Vs ZWN0ICogZnJvbSBzaiBxIHdoZXJlIHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworIGEgfCBi IHwgYyAKKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxCisoMSByb3cpCisKKy0tIERvbid0IHJl bW92ZSBzZWxmLWpvaW4gZm9yIHRoZSBjYXNlIG9mIGVxdWFsaXR5IG9mIHR3byBkaWZmZXJl bnQgdW5pcXVlIGNvbHVtbnMuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHNqIHQxLCBzaiB0MiB3aGVyZSB0MS5hID0gdDIuYyBhbmQgdDEuYiBpcyBub3QgbnVsbDsK KyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAodDEuYSA9IHQyLmMpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogdDIKKyAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6IChiIElTIE5PVCBOVUxMKQorKDYgcm93cykKKworLS0gRGVnZW5lcmF0 ZWQgY2FzZS4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20KKwkoc2VsZWN0 IGEgYXMgeCBmcm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBxMSwKKwkoc2VsZWN0IGEgYXMgeSBm cm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBxMgord2hlcmUgcTEueCA9IHEyLnk7CisgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorICAgT25lLVRpbWUgRmlsdGVyOiBmYWxzZQorICAgLT4gIFNl cSBTY2FuIG9uIHNqCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDQgcm93 cykKKworLS0gV2UgY2FuJ3QgdXNlIGEgY3Jvc3MtRUMgZ2VuZXJhdGVkIHNlbGYgam9pbiBx dWFsIGJlY2F1c2Ugb2YgY3VycmVudCBsb2dpYyBvZgorLS0gdGhlIGdlbmVyYXRlX2pvaW5f aW1wbGllZF9lcXVhbGl0aWVzIHJvdXRpbmUuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHNqIHQxLCBzaiB0MiB3aGVyZSB0MS5hID0gdDEuYiBhbmQgdDEuYiA9IHQy LmIgYW5kIHQyLmIgPSB0Mi5hOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6ICh0MS5hID0gdDIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MQorICAgICAg ICAgRmlsdGVyOiAoYSA9IGIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogdDIKKyAgICAgICAg IEZpbHRlcjogKGIgPSBhKQorKDYgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2Vs ZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIsIHNqIHQzCit3aGVyZSB0MS5hID0gdDEuYiBhbmQg dDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hCisJYW5kIHQxLmIgPSB0My5iIGFuZCB0My5i ID0gdDMuYTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4g RmlsdGVyOiAodDEuYSA9IHQzLmIpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpv aW4gRmlsdGVyOiAodDEuYSA9IHQyLmIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2og dDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPSBiKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHNqIHQyCisgICAgICAgICAgICAgICBGaWx0ZXI6IChiID0gYSkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBzaiB0MworICAgICAgICAgRmlsdGVyOiAoYiA9IGEpCisoMTAgcm93cykK KworLS0gRG91YmxlIHNlbGYtam9pbiByZW1vdmFsLgorLS0gVXNlIGEgY29uZGl0aW9uIG9u ICJiICsgMSIsIG5vdCBvbiAiYiIsIGZvciB0aGUgc2Vjb25kIGpvaW4sIHNvIHRoYXQKKy0t IHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZmlyc3Qgb25l LCBhbmQgd2UgY2FuCistLSB0ZXN0IHRoZSBub24tZWMgY29kZSBwYXRoLgorZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSBqb2luIHNqIHQyIG9uIHQxLmEgPSB0 Mi5hIGFuZCB0MS5iID0gdDIuYgorCWpvaW4gc2ogdDMgb24gdDIuYSA9IHQzLmEgYW5kIHQy LmIgKyAxID0gdDMuYiArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHQzCisgICBGaWx0ZXI6ICgoYSBJUyBOT1Qg TlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQgKChiICsgMSkgSVMgTk9UIE5VTEwpKQor KDIgcm93cykKKworLS0gc3Vic2VsZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVtb3ZlZCBy ZWxhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHQxLmEsIChzZWxlY3QgYSBm cm9tIHNqIHdoZXJlIGEgPSB0Mi5hIGFuZCBhID0gdDEuYSkKK2Zyb20gc2ogdDEsIHNqIHQy Cit3aGVyZSB0MS5hID0gdDIuYTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2ogdDIKKyAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisgICBT dWJQbGFuIDEKKyAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6 ICh0Mi5hID0gdDIuYSkKKyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqCisgICAgICAg ICAgICAgICAgIEZpbHRlcjogKGEgPSB0Mi5hKQorKDcgcm93cykKKworLS0gc2VsZi1qb2lu IHVuZGVyIG91dGVyIGpvaW4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0IGpvaW4gaW50OF90YmwgeiBvbiB4 LmEgPSB6LnExOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpv aW4KKyAgIEpvaW4gRmlsdGVyOiAoeS5hID0gei5xMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBz aiB5CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgegorKDYgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4 LmEgPSB5LmEKK2xlZnQgam9pbiBpbnQ4X3RibCB6IG9uIHkuYSA9IHoucTE7CisgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9pbiBGaWx0ZXI6 ICh5LmEgPSB6LnExKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHkKKyAgICAgICAgIEZpbHRl cjogKGEgSVMgTk9UIE5VTEwpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBpbnQ4X3RibCB6CisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp CitTRUxFQ1QgKiBGUk9NICgKKyAgU0VMRUNUIHQxLiosIHQyLmEgQVMgYXggRlJPTSBzaiB0 MSBKT0lOIHNqIHQyCisgIE9OICh0MS5hID0gdDIuYSBBTkQgdDEuYyp0MS5jID0gdDIuYysy IEFORCB0Mi5iIElTIE5VTEwpCispIEFTIHExCitMRUZUIEpPSU4KKyAgKFNFTEVDVCB0My4q IEZST00gc2ogdDMsIHNqIHQ0IFdIRVJFIHQzLmMgPSB0NC5jKSBBUyBxMgorT04gcTEuYXgg PSBxMi5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAodDIuYSA9IHQ0LmEp CisgICAtPiAgU2VxIFNjYW4gb24gc2ogdDIKKyAgICAgICAgIEZpbHRlcjogKChiIElTIE5V TEwpIEFORCAoYSBJUyBOT1QgTlVMTCkgQU5EICgoYyAqIGMpID0gKGMgKyAyKSkpCisgICAt PiAgU2VxIFNjYW4gb24gc2ogdDQKKyAgICAgICAgIEZpbHRlcjogKGMgSVMgTk9UIE5VTEwp CisoNiByb3dzKQorCistLSBUZXN0IHRoYXQgcGxhY2Vob2xkZXJzIGFyZSB1cGRhdGVkIGNv cnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVj dCAqIGZyb20gKHZhbHVlcyAoMSkpIHgKK2xlZnQgam9pbiAoc2VsZWN0IGNvYWxlc2NlKHku cTEsIDEpIGZyb20gaW50OF90YmwgeQorCXJpZ2h0IGpvaW4gc2ogajEgaW5uZXIgam9pbiBz aiBqMiBvbiBqMS5hID0gajIuYQorCW9uIHRydWUpIHoKK29uIHRydWU7CisgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4g IFJlc3VsdAorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNqIGoyCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxM KQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gaW50OF90YmwgeQorKDcgcm93cykKKworLS0gQ2hlY2sgdXBkYXRpbmcgb2YgTGF0 ZXJhbCBsaW5rcyBmcm9tIHRvcC1sZXZlbCBxdWVyeSB0byB0aGUgcmVtb3ZpbmcgcmVsYXRp b24KK2V4cGxhaW4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcGdfYW0gYW0gV0hFUkUg YW0uYW1uYW1lIElOICgKKyAgU0VMRUNUIGMxLnJlbG5hbWUgQVMgcmVsbmFtZQorICBGUk9N IHBnX2NsYXNzIGMxCisgICAgSk9JTiBwZ19jbGFzcyBjMgorICAgIE9OIGMxLm9pZD1jMi5v aWQgQU5EIGMxLm9pZCA8IDEwCispOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoYW0uYW1uYW1l ID0gYzIucmVsbmFtZSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBwZ19hbSBhbQorICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwZ19jbGFzc19vaWRf aW5kZXggb24gcGdfY2xhc3MgYzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgob2lk IDwgJzEwJzo6b2lkKSBBTkQgKG9pZCBJUyBOT1QgTlVMTCkpCisoNiByb3dzKQorCistLQor LS0gU0pSIGNvcm5lciBjYXNlOiB1bmlxdWVuZXNzIG9mIGFuIGlubmVyIGlzIFtwYXJ0aWFs bHldIGRlcml2ZWQgZnJvbQorLS0gYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzLgorLS0gWFhY OiBXZSByZWFsbHkgc2hvdWxkIGFsbG93IFNKUiBmb3IgdGhlc2UgY29ybmVyIGNhc2VzPwor LS0KK0lOU0VSVCBJTlRPIHNqIFZBTFVFUyAoMywgMSwgMyk7CitleHBsYWluIChjb3N0cyBv ZmYpIC0tIERvbid0IHJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdI RVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDM7CisgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGoxLmIgPSBqMi5iKQorICAgLT4gIFNl cSBTY2FuIG9uIHNqIGoxCisgICAgICAgICBGaWx0ZXI6IChhID0gMikKKyAgIC0+ICBTZXEg U2NhbiBvbiBzaiBqMgorICAgICAgICAgRmlsdGVyOiAoYSA9IDMpCisoNiByb3dzKQorCitT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEg PSAyIEFORCBqMi5hID0gMzsgLS0gUmV0dXJuIG9uZSByb3cKKyBhIHwgYiB8IGMgfCBhIHwg YiB8IGMgCistLS0rLS0tKy0tLSstLS0rLS0tKy0tLQorIDIgfCAxIHwgMSB8IDMgfCAxIHwg MworKDEgcm93KQorCitleHBsYWluIChjb3N0cyBvZmYpIC0tIFJlbW92ZSBTSiwgZGVmaW5l IHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoy IFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDI7CisgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBqMgorICAgRmlsdGVy OiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoYSA9IDIpKQorKDIgcm93cykKKworU0VMRUNUICog RlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQg ajIuYSA9IDI7IC0tIFJldHVybiBvbmUgcm93CisgYSB8IGIgfCBjIHwgYSB8IGIgfCBjIAor LS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKyAyIHwgMSB8IDEgfCAyIHwgMSB8IDEKKygxIHJv dykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIK K1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3Vy cmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZS T00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmEKKzsgLS0gUmVt b3ZlIFNKLCBkZWZpbmUgdW5pcXVlbmVzcyBieSBhIGNvbnN0YW50IGV4cHJlc3Npb24KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBqMgor ICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoYSA9ICgoKEVYVFJBQ1QoZG93IEZS T00gQ1VSUkVOVF9USU1FU1RBTVAoMCkpIC8gJzE1Jzo6bnVtZXJpYykgKyAnMyc6Om51bWVy aWMpKTo6aW50ZWdlcikpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBq MgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIGoxLmEgPSAoRVhUUkFDVChET1cgRlJPTSBj dXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50CisgIEFORCAoRVhUUkFDVChET1cg RlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50ID0gajIuYQorOyAtLSBS ZXR1cm4gb25lIHJvdworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0t LSstLS0rLS0tCisgMyB8IDEgfCAzIHwgMyB8IDEgfCAzCisoMSByb3cpCisKK2V4cGxhaW4g KGNvc3RzIG9mZikgLS0gUmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIg V0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKyAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6 ICgoYiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMSkpCisoMiByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBq Mi5hID0gMTsgLS0gUmV0dXJuIG5vIHJvd3MKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCist LS0rLS0tKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2Zm KSAtLSBTaHVmZmxlIGEgY2xhdXNlLiBSZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGox LCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAxOwor ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAg IEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAxKSkKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYiBBTkQgMSA9IGox LmEgQU5EIGoyLmEgPSAxOyAtLSBSZXR1cm4gbm8gcm93cworIGEgfCBiIHwgYyB8IGEgfCBi IHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCistLSBTSkUgQ29y bmVyIGNhc2U6IGEgJ2EueD1hLngnIGNsYXVzZSwgaGF2ZSByZXBsYWNlZCB3aXRoICdhLngg SVMgTk9UIE5VTEwnCistLSBhZnRlciBTSiBlbGltaW5hdGlvbiBpdCBzaG91bGRuJ3QgYmUg YSBtZXJnZWpvaW5hYmxlIGNsYXVzZS4KK1NFTEVDVCB0NC4qCitGUk9NIChTRUxFQ1QgdDEu KiwgdDIuYSBBUyBhMSBGUk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIuYikgQVMg dDMKK0pPSU4gc2ogdDQgT04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQyOworIGEg fCBiIHwgYyAKKy0tLSstLS0rLS0tCisoMCByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgdDQuKgorRlJPTSAoU0VMRUNUIHQxLiosIHQyLmEgQVMgYTEgRlJPTSBzaiB0 MSwgc2ogdDIgV0hFUkUgdDEuYiA9IHQyLmIpIEFTIHQzCitKT0lOIHNqIHQ0IE9OICh0NC5h ID0gdDMuYSkgV0hFUkUgdDMuYTEgPSA0MgorOyAtLSBTSnMgbXVzdCBiZSByZW1vdmVkLgor ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICh0MS5iID0g dDIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAgICAgICAgRmlsdGVyOiAoYSA9 IDQyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICBGaWx0ZXI6IChhIElT IE5PVCBOVUxMKQorKDYgcm93cykKKworLS0gRnVuY3Rpb25hbCBpbmRleAorQ1JFQVRFIFVO SVFVRSBJTkRFWCBzal9mbl9pZHggT04gc2ooKGEgKiBhKSk7CitleHBsYWluIChjb3N0cyBv ZmYpIC0tIFJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUg ajEuYiA9IGoyLmIgQU5EIGoxLmEqajEuYSA9IDEgQU5EIGoyLmEqajIuYSA9IDE7CisgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBz aiBqMgorICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoKGEgKiBhKSA9IDEpKQor KDIgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBEb24ndCByZW1vdmUgU0oKKwlT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5h KmoxLmEgPSAxIEFORCBqMi5hKmoyLmEgPSAyOworICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBKb2luIEZpbHRlcjogKGoxLmIgPSBqMi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNq IGoxCisgICAgICAgICBGaWx0ZXI6ICgoYSAqIGEpID0gMSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzaiBqMgorICAgICAgICAgRmlsdGVyOiAoKGEgKiBhKSA9IDIpCisoNiByb3dzKQorCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUg ajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3Vy cmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZS T00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpCis7 IC0tIFJlc3RyaWN0aW9uIGNvbnRhaW5zIGV4cHJlc3Npb25zIGluIGJvdGggc2lkZXMsIFJl bW92ZSBTSi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBzaiBqMgorICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFO RCAoKGEgKiBhKSA9ICgoKEVYVFJBQ1QoZG93IEZST00gQ1VSUkVOVF9USU1FU1RBTVAoMCkp IC8gJzE1Jzo6bnVtZXJpYykgKyAnMyc6Om51bWVyaWMpKTo6aW50ZWdlcikpCisoMiByb3dz KQorCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAg QU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAo MCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1l c3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpCis7IC0tIEVtcHR5IHNldCBv ZiByb3dzIHNob3VsZCBiZSByZXR1cm5lZAorIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0t LSstLS0rLS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5E IChqMS5hKmoxLmEpID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkv MyArIDMpOjppbnQgPSAoajIuYSpqMi5hKQorOyAtLSBSZXN0cmljdGlvbiBjb250YWlucyB2 b2xhdGlsZSBmdW5jdGlvbiAtIGRpc2FibGUgU0pSIGZlYXR1cmUuCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgICAg ICAgRmlsdGVyOiAoKGEgKiBhKSA9ICgoKHJhbmRvbSgpIC8gJzMnOjpkb3VibGUgcHJlY2lz aW9uKSArICczJzo6ZG91YmxlIHByZWNpc2lvbikpOjppbnRlZ2VyKQorICAgLT4gIFNlcSBT Y2FuIG9uIHNqIGoyCisgICAgICAgICBGaWx0ZXI6ICgoKChyYW5kb20oKSAvICczJzo6ZG91 YmxlIHByZWNpc2lvbikgKyAnMyc6OmRvdWJsZSBwcmVjaXNpb24pKTo6aW50ZWdlciA9IChh ICogYSkpCisoNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUg ajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmMvMykgPSAocmFuZG9tKCkvMyArIDMpOjpp bnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6OmludCA9IChqMi5hKmoyLmMvMykKKzsgLS0g UmV0dXJuIG9uZSByb3cKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSst LS0rLS0tKy0tLQorIDMgfCAxIHwgMyB8IDMgfCAxIHwgMworKDEgcm93KQorCistLSBNdWx0 aXBsZSBmaWx0ZXJzCitDUkVBVEUgVU5JUVVFIElOREVYIHNqX3RlbXBfaWR4MSBPTiBzaihh LGIsYyk7CitleHBsYWluIChjb3N0cyBvZmYpIC0tIFJlbW92ZSBTSgorCVNFTEVDVCAqIEZS T00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBq MS5jID0gMyBBTkQgajIuYSA9IDIgQU5EIDMgPSBqMi5jOworICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2og ajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAyKSBBTkQgKGMgPSAz KSkKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNK CisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBqMS5iID0gajIuYiBBTkQg MiA9IGoxLmEgQU5EIGoxLmMgPSAzIEFORCBqMi5hID0gMSBBTkQgMyA9IGoyLmM7CisgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjog KGoxLmIgPSBqMi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoxCisgICAgICAgICBGaWx0 ZXI6ICgoMiA9IGEpIEFORCAoYyA9IDMpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisg ICAgICAgICBGaWx0ZXI6ICgoYyA9IDMpIEFORCAoYSA9IDEpKQorKDYgcm93cykKKworQ1JF QVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeCBPTiBzaihhLGIpOworZXhwbGFpbiAoY29z dHMgb2ZmKSAtLSBEb24ndCByZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBq MiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDI7CisgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBKb2luIEZpbHRlcjogKGoxLmIgPSBqMi5iKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqIGoxCisgICAgICAgICBGaWx0ZXI6IChhID0gMikKKyAgIC0+ICBTZXEgU2NhbiBvbiBz aiBqMgorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBEb24ndCByZW1vdmUg U0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQg MiA9IGoyLmE7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGox LmIgPSBqMi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisgICAgICAgICBGaWx0ZXI6 ICgyID0gYSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorKDUgcm93cykKKworZXhwbGFp biAoY29zdHMgb2ZmKSAtLSBEb24ndCByZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9NIHNqIGox LCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgKGoxLmEgPSAxIE9SIGoyLmEgPSAxKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo KGoxLmIgPSBqMi5iKSBBTkQgKChqMS5hID0gMSkgT1IgKGoyLmEgPSAxKSkpCisgICAtPiAg U2VxIFNjYW4gb24gc2ogajEKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNqIGoyCisoNSByb3dzKQorCitEUk9QIElOREVYIHNqX2ZuX2lkeCwgc2pf dGVtcF9pZHgxLCBzal90ZW1wX2lkeDsKKy0tIFRlc3QgdGhhdCBPUiBwcmVkaWNhdGVkIGFy ZSB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwKK0NSRUFURSBUQUJMRSB0 YWJfd2l0aF9mbGFnICggaWQgSU5UIFBSSU1BUlkgS0VZLCBpc19mbGFnIFNNQUxMSU5UKTsK K0NSRUFURSBJTkRFWCBpZHhfdGVzdF9pc19mbGFnIE9OIHRhYl93aXRoX2ZsYWcgKGlzX2Zs YWcpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorU0VMRUNUIENPVU5UKCopIEZST00gdGFiX3dp dGhfZmxhZworV0hFUkUKKwkoaXNfZmxhZyBJUyBOVUxMIE9SIGlzX2ZsYWcgPSAwKQorCUFO RCBpZCBJTiAoU0VMRUNUIGlkIEZST00gdGFiX3dpdGhfZmxhZyBXSEVSRSBpZCBJTiAoMiwg MykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGFi X3dpdGhfZmxhZworICAgICAgICAgUmVjaGVjayBDb25kOiAoKGlkID0gQU5ZICgnezIsM30n OjppbnRlZ2VyW10pKSBBTkQgKGlkIElTIE5PVCBOVUxMKSkKKyAgICAgICAgIEZpbHRlcjog KChpc19mbGFnIElTIE5VTEwpIE9SIChpc19mbGFnID0gMCkpCisgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gdGFiX3dpdGhfZmxhZ19wa2V5CisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoKGlkID0gQU5ZICgnezIsM30nOjppbnRlZ2VyW10pKSBBTkQgKGlkIElT IE5PVCBOVUxMKSkKKyg2IHJvd3MpCisKK0RST1AgVEFCTEUgdGFiX3dpdGhfZmxhZzsKKy0t IEhBVklORyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBwLmIgZnJvbSBz aiBwIGpvaW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkgcC5iIGhhdmluZyBzdW0ocC5h KSA9IDE7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTog cS5iCisgICBGaWx0ZXI6IChzdW0ocS5hKSA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gc2og cQorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyg1IHJvd3MpCisKKy0tIHVw ZGF0ZSBsYXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRhYmxlIGVudHJ5IHJlZmVyZW5j ZQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSAoc2VsZWN0 IHguKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAorICBsYXRlcmFsIGdl bmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0 cHV0OiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnNqIHkKKyAgICAgICAgIE91dHB1 dDogeS5hLCB5LmIsIHkuYworICAgICAgICAgRmlsdGVyOiAoeS5hIElTIE5PVCBOVUxMKQor ICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgZ3MK KyAgICAgICAgIE91dHB1dDogZ3MuaQorICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJh dGVfc2VyaWVzKDEsIHkuYSkKKyg4IHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3Rz IG9mZikKK3NlbGVjdCAxIGZyb20gKHNlbGVjdCB5LiogZnJvbSBzaiB4LCBzaiB5IHdoZXJl IHguYSA9IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSwgcS5hKSBncyhp KTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogMQorICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5zaiB5CisgICAgICAgICBPdXRwdXQ6IHkuYSwgeS5iLCB5LmMKKyAgICAgICAg IEZpbHRlcjogKHkuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBn X2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGdzCisgICAgICAgICBPdXRwdXQ6IGdzLmkKKyAg ICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCB5LmEpCisoOCByb3dz KQorCistLSBUZXN0IHRoYXQgYSBub24tRUMtZGVyaXZlZCBqb2luIGNsYXVzZSBpcyBwcm9j ZXNzZWQgY29ycmVjdGx5LiBVc2UgYW4KKy0tIG91dGVyIGpvaW4gc28gdGhhdCB3ZSBjYW4n dCBmb3JtIGFuIEVDLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHNqIHAg am9pbiBzaiBxIG9uIHAuYSA9IHEuYQorICBsZWZ0IGpvaW4gc2ogciBvbiBwLmEgKyBxLmEg PSByLmE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgor ICAgSm9pbiBGaWx0ZXI6ICgocS5hICsgcS5hKSA9IHIuYSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzaiBxCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogcgorKDYgcm93cykKKworLS0g RklYTUUgdGhpcyBjb25zdGFudCBmYWxzZSBmaWx0ZXIgZG9lc24ndCBsb29rIGdvb2QuIFNo b3VsZCB3ZSBtZXJnZQorLS0gZXF1aXZhbGVuY2UgY2xhc3Nlcz8KK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCAqIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBwLmEgPSBxLmEgYW5kIHAu YiA9IDEgYW5kIHEuYiA9IDI7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBxCisgICBGaWx0ZXI6ICgo YSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMikgQU5EIChiID0gMSkpCisoMiByb3dzKQorCist LSBDaGVjayB0aGF0IGF0dHJfbmVlZGVkIGlzIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIHNl bGYtam9pbiByZW1vdmFsLiBJbiB0aGlzCistLSB0ZXN0LCB0aGUgam9pbiBvZiBqMSB3aXRo IGoyIGlzIHJlbW92ZWQuIGsxLmIgaXMgcmVxdWlyZWQgYXQgZWl0aGVyIGoxIG9yIGoyLgor LS0gSWYgdGhpcyBpbmZvIGlzIGxvc3QsIGpvaW4gdGFyZ2V0bGlzdCBmb3IgKGsxLCBrMikg d2lsbCBub3QgY29udGFpbiBrMS5iLgorLS0gVXNlIGluZGV4IHNjYW4gZm9yIGsxIHNvIHRo YXQgd2UgZG9uJ3QgZ2V0ICdiJyBmcm9tIHBoeXNpY2FsIHRsaXN0IHVzZWQgZm9yCistLSBz ZXFzY2FuLiBBbHNvIGRpc2FibGUgcmVvcmRlcmluZyBvZiBqb2lucyBiZWNhdXNlIHRoaXMg dGVzdCBkZXBlbmRzIG9uIGEKKy0tIHBhcnRpY3VsYXIgam9pbiB0cmVlLgorY3JlYXRlIHRh YmxlIHNrIChhIGludCwgYiBpbnQpOworY3JlYXRlIGluZGV4IG9uIHNrKGEpOworc2V0IGpv aW5fY29sbGFwc2VfbGltaXQgdG8gMTsKK3NldCBlbmFibGVfc2Vxc2NhbiB0byBvZmY7Citl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBv biBrMS5hID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5h KSBvbiBqMS5iID0gazEuYjsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGsx LmIgPSBqMi5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBza19hX2lkeCBvbiBzayBrMQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2Nh biB1c2luZyBza19hX2lkeCBvbiBzayBrMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGEgPSBrMS5hKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBzal9hX2tleSBvbiBzaiBqMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGEgSVMgTk9UIE5VTEwpCisoOSByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBvbiBrMS5hID0gazIuYSkKKwlqb2luIChz aiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBqMi5iID0gazEuYjsKKyAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGsxLmIgPSBqMi5iKQorICAgLT4gIE5lc3Rl ZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBr MQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBr MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBrMS5hKQorICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzal9hX2tleSBvbiBzaiBq MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgSVMgTk9UIE5VTEwpCisoOSByb3dz KQorCityZXNldCBqb2luX2NvbGxhcHNlX2xpbWl0OworcmVzZXQgZW5hYmxlX3NlcXNjYW47 CitzZXQgc2VsZl9qb2luX3NlYXJjaF9saW1pdCB0byAxOworZXhwbGFpbiAoY29zdHMgb2Zm KSAtLSBObyBvbmUgc2VsZiBqb2luIHNob3VsZCBiZSBjb2xsYXBzZWQKKyAgc2VsZWN0IGox LiogZnJvbSBzaiBqMSwgc2ogajIsIHNqIGozIHdoZXJlIChqMS5hID0gajIuYSkgYW5kIChq Mi5hID0gajMuYSk7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYSA9IGozLmEpCisgICAtPiAgU2VxIFNj YW4gb24gc2ogajMKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIE5lc3RlZCBM b29wCisgICAgICAgICAgICAgICBKb2luIEZpbHRlcjogKGoxLmEgPSBqMi5hKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoxCisgICAgICAgICAgICAgICAtPiAgTWF0 ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgor KDkgcm93cykKKworc2V0IHNlbGZfam9pbl9zZWFyY2hfbGltaXQgdG8gMjsKK2V4cGxhaW4g KGNvc3RzIG9mZikgLS0gQ29sbGFwc2Ugb25lIHNlbGYgam9pbgorICBzZWxlY3QgajEuKiBm cm9tIHNqIGoxLCBzaiBqMiwgc2ogajMgd2hlcmUgKGoxLmEgPSBqMi5hKSBhbmQgKGoyLmEg PSBqMy5hKTsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IEpvaW4gRmlsdGVyOiAoajIuYSA9IGozLmEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajMK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisg ICAgICAgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDYgcm93cykKKworc2V0 IHNlbGZfam9pbl9zZWFyY2hfbGltaXQgdG8gMzsKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0g Q29sbGFwc2UgYm90aCBzZWxmIGpvaW5zCisgIHNlbGVjdCBqMS4qIGZyb20gc2ogajEsIHNq IGoyLCBzaiBqMyB3aGVyZSAoajEuYSA9IGoyLmEpIGFuZCAoajIuYSA9IGozLmEpOworICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzaiBqMworICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKygyIHJv d3MpCisKK3Jlc2V0IHNlbGZfam9pbl9zZWFyY2hfbGltaXQ7CistLSBDaGVjayB0aGF0IGNs YXVzZXMgZnJvbSB0aGUgam9pbiBmaWx0ZXIgbGlzdCBpcyBub3QgbG9zdCBvbiB0aGUgc2Vs Zi1qb2luIHJlbW92YWwKK0NSRUFURSBUQUJMRSBlbXAxICggaWQgU0VSSUFMIFBSSU1BUlkg S0VZIE5PVCBOVUxMLCBjb2RlIGludCk7CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYp CitTRUxFQ1QgKiBGUk9NIGVtcDEgZTEsIGVtcDEgZTIgV0hFUkUgZTEuaWQgPSBlMi5pZCBB TkQgZTIuY29kZSA8PiBlMS5jb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lbXAxIGUyCisgICBPdXRwdXQ6IGUyLmlkLCBlMi5jb2RlLCBlMi5pZCwgZTIuY29kZQor ICAgRmlsdGVyOiAoKGUyLmlkIElTIE5PVCBOVUxMKSBBTkQgKGUyLmNvZGUgPD4gZTIuY29k ZSkpCisoMyByb3dzKQorCistLSBXZSBjYW4gcmVtb3ZlIHRoZSBqb2luIGV2ZW4gaWYgd2Ug ZmluZCB0aGUgam9pbiBjYW4ndCBkdXBsaWNhdGUgcm93cyBhbmQKKy0tIHRoZSBiYXNlIHF1 YWxzIG9mIGVhY2ggc2lkZSBhcmUgZGlmZmVyZW50LiAgSW4gdGhlIGZvbGxvd2luZyBjYXNl IHdlIGVuZCB1cAorLS0gbW92aW5nIHF1YWxzIG92ZXIgdG8gczEgdG8gbWFrZSBpdCBzbyBp dCBjYW4ndCBtYXRjaCBhbnkgcm93cy4KK2NyZWF0ZSB0YWJsZSBzbChhIGludCwgYiBpbnQs IGMgaW50KTsKK2NyZWF0ZSB1bmlxdWUgaW5kZXggb24gc2woYSwgYik7Cit2YWN1dW0gYW5h bHl6ZSBzbDsKKy0tIEJvdGggc2lkZXMgYXJlIHVuaXF1ZSwgYnV0IGJhc2UgcXVhbHMgYXJl IGRpZmZlcmVudAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwg c2wgdDIgd2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMjsKKyAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQyLmEpCisg ICAtPiAgU2VxIFNjYW4gb24gc2wgdDEKKyAgICAgICAgIEZpbHRlcjogKGIgPSAxKQorICAg LT4gIFNlcSBTY2FuIG9uIHNsIHQyCisgICAgICAgICBGaWx0ZXI6IChiID0gMikKKyg2IHJv d3MpCisKKy0tIENoZWNrIE51bGxUZXN0IGluIGJhc2VyZXN0cmljdGluZm8gbGlzdAorZXhw bGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIKK3doZXJlIHQx LmEgPSB0Mi5hIGFuZCB0MS5iID0gMSBhbmQgdDIuYiA9IDIKKyAgYW5kIHQxLmMgSVMgTk9U IE5VTEwgYW5kIHQyLmMgSVMgTk9UIE5VTEwKKyAgYW5kIHQyLmIgSVMgTk9UIE5VTEwgYW5k IHQxLmIgSVMgTk9UIE5VTEwKKyAgYW5kIHQxLmEgSVMgTk9UIE5VTEwgYW5kIHQyLmEgSVMg Tk9UIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRl cjogKHQxLmEgPSB0Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNsIHQxCisgICAgICAgICBG aWx0ZXI6ICgoYyBJUyBOT1QgTlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQgKGEgSVMg Tk9UIE5VTEwpIEFORCAoYiA9IDEpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNsIHQyCisgICAg ICAgICBGaWx0ZXI6ICgoYyBJUyBOT1QgTlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQg KGEgSVMgTk9UIE5VTEwpIEFORCAoYiA9IDIpKQorKDYgcm93cykKKworZXhwbGFpbiAodmVy Ym9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIKK3doZXJlIHQx LmIgPSB0Mi5iIGFuZCB0Mi5hID0gMyBhbmQgdDEuYSA9IDMKKyAgYW5kIHQxLmMgSVMgTk9U IE5VTEwgYW5kIHQyLmMgSVMgTk9UIE5VTEwKKyAgYW5kIHQyLmIgSVMgTk9UIE5VTEwgYW5k IHQxLmIgSVMgTk9UIE5VTEwKKyAgYW5kIHQxLmEgSVMgTk9UIE5VTEwgYW5kIHQyLmEgSVMg Tk9UIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB1 YmxpYy5zbCB0MgorICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jLCB0Mi5hLCB0Mi5iLCB0 Mi5jCisgICBGaWx0ZXI6ICgodDIuYyBJUyBOT1QgTlVMTCkgQU5EICh0Mi5iIElTIE5PVCBO VUxMKSBBTkQgKHQyLmEgSVMgTk9UIE5VTEwpIEFORCAodDIuYSA9IDMpKQorKDMgcm93cykK KworLS0gSm9pbiBxdWFsIGlzbid0IG1lcmdlam9pbmFibGUsIGJ1dCBpbm5lciBpcyB1bmlx dWUuCitleHBsYWluIChDT1NUUyBPRkYpCitTRUxFQ1QgbjIuYSBGUk9NIHNqIG4xLCBzaiBu MiBXSEVSRSBuMS5hIDw+IG4yLmEgQU5EIG4yLmEgPSAxOworICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wCisgICBKb2luIEZpbHRlcjogKG4xLmEgPD4gbjIuYSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBzaiBuMgorICAgICAgICAgRmlsdGVyOiAoYSA9IDEpCisgICAtPiAgU2VxIFNjYW4g b24gc2ogbjEKKyg1IHJvd3MpCisKK2V4cGxhaW4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00KKwkoU0VMRUNUIG4yLmEgRlJPTSBzaiBuMSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBuMi5h KSBxMCwgc2wKK1dIRVJFIHEwLmEgPSAxOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICBKb2luIEZpbHRlcjogKG4xLmEgPD4gbjIuYSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHNsCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2og bjIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqIG4xCisoNyByb3dzKQorCistLQorLS0tLSBPbmx5IG9uZSBzaWRlIGlzIHVucWl1ZQor LS1zZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0MiB3aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEu YiA9IDE7CistLXNlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyIHdoZXJlIHQxLmEgPSB0Mi5h IGFuZCB0Mi5iID0gMTsKKy0tCistLS0tIFNldmVyYWwgdW5pcXVlcyBpbmRleGVzIG1hdGNo LCBhbmQgd2Ugc2VsZWN0IGEgZGlmZmVyZW50IG9uZQorLS0tLSBmb3IgZWFjaCBzaWRlLCBz byB0aGUgam9pbiBpcyBub3QgcmVtb3ZlZAorLS1jcmVhdGUgdGFibGUgc20oYSBpbnQgdW5p cXVlLCBiIGludCB1bmlxdWUsIGMgaW50IHVuaXF1ZSk7CistLWV4cGxhaW4gKGNvc3RzIG9m ZikKKy0tc2VsZWN0ICogZnJvbSBzbSBtLCBzbSBuIHdoZXJlIG0uYSA9IG4uYiBhbmQgbS5j ID0gbi5jOworLS1leHBsYWluIChjb3N0cyBvZmYpCistLXNlbGVjdCAqIGZyb20gc20gbSwg c20gbiB3aGVyZSBtLmEgPSBuLmMgYW5kIG0uYiA9IG4uYjsKKy0tZXhwbGFpbiAoY29zdHMg b2ZmKQorLS1zZWxlY3QgKiBmcm9tIHNtIG0sIHNtIG4gd2hlcmUgbS5jID0gbi5iIGFuZCBt LmEgPSBuLmE7CistLSBDaGVjayBvcHRpbWl6YXRpb24gZGlzYWJsaW5nIGlmIGl0IHdpbGwg dmlvbGF0ZSBzcGVjaWFsIGpvaW4gY29uZGl0aW9ucy4KKy0tIFR3byBpZGVudGljYWwgam9p bmVkIHJlbGF0aW9ucyBzYXRpc2ZpZXMgc2VsZiBqb2luIHJlbW92YWwgY29uZGl0aW9ucyBi dXQKKy0tIHN0YXkgaW4gZGlmZmVyZW50IHNwZWNpYWwgam9pbiBpbmZvcy4KK0NSRUFURSBU QUJMRSBzal90MSAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDIgKGlk IHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNqX3QzIChpZCBzZXJpYWwsIGEgaW50 KTsKK0NSRUFURSBUQUJMRSBzal90NCAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVU5J UVVFIElOREVYIE9OIHNqX3QzIFVTSU5HIGJ0cmVlIChhLGlkKTsKK0NSRUFURSBVTklRVUUg SU5ERVggT04gc2pfdDIgVVNJTkcgYnRyZWUgKGlkKTsKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gc2pfdDEKK0pPSU4gKAorCVNFTEVDVCBzal90Mi5pZCBBUyBpZCBG Uk9NIHNqX3QyCisJV0hFUkUgRVhJU1RTCisJCSgKKwkJU0VMRUNUIFRSVUUgRlJPTSBzal90 Myxzal90NCBXSEVSRSBzal90My5hID0gMSBBTkQgc2pfdDMuaWQgPSBzal90Mi5pZAorCQkp CisJKSB0MnQzdDQKK09OIHNqX3QxLmlkID0gdDJ0M3Q0LmlkCitKT0lOICgKKwlTRUxFQ1Qg c2pfdDIuaWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVD VCBUUlVFIEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlk ID0gc2pfdDIuaWQKKwkJKQorCSkgX3QydDN0NAorT04gc2pfdDEuaWQgPSBfdDJ0M3Q0Lmlk OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHNqX3QzLmlk ID0gc2pfdDEuaWQpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVy OiAoc2pfdDIuaWQgPSBzal90My5pZCkKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBTZW1p IEpvaW4KKyAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogc2pfdDMuaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHNqX3Q0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSGVhcCBTY2FuIG9uIHNqX3QzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6IChhID0gMSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBz al90M19hX2lkX2lkeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSAxKQorICAgICAgICAgICAgICAgICAgICAg LT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzal90Ml9pZF9pZHggb24gc2pfdDIgc2pfdDJf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gc2pfdDMu aWQpCisgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2pfdDNfYV9pZF9pZHggb24gc2pfdDMg c2pfdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKChhID0g MSkgQU5EIChpZCA9IHNqX3QzLmlkKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBzal90NCBzal90NF8xCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIHNqX3QyX2lkX2lkeCBvbiBzal90MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gc2pfdDJfMS5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal90MQorKDI0IHJvd3Mp CisKKy0tCistLSBUZXN0IFJvd01hcmtzLXJlbGF0ZWQgY29kZQorLS0KKy0tIFRPRE86IFdo eSB0aGlzIHNlbGVjdCByZXR1cm5zIHR3byBjb3BpZXMgb2YgY3RpZCBmaWVsZD8gU2hvdWxk IHdlIGZpeCBpdD8KK0VYUExBSU4gKENPU1RTIE9GRikgLS0gQm90aCBzaWRlcyBoYXZlIGV4 cGxpY2l0IExvY2tSb3dzIG1hcmtzCitTRUxFQ1QgYTEuYSBGUk9NIHNqIGExLHNqIGEyIFdI RVJFIChhMS5hPWEyLmEpIEZPUiBVUERBVEU7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExvY2tSb3dz CisgICAtPiAgU2VxIFNjYW4gb24gc2ogYTIKKyAgICAgICAgIEZpbHRlcjogKGEgSVMgTk9U IE5VTEwpCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpIC0tIEEgUm93TWFyayBl eGlzdHMgZm9yIHRoZSB0YWJsZSBiZWluZyBrZXB0CitVUERBVEUgc2ogc3EgU0VUIGIgPSAx IEZST00gc2ogYXMgc3ogV0hFUkUgc3EuYSA9IHN6LmE7CisgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVw ZGF0ZSBvbiBzaiBzcQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHN6CisgICAgICAgICBGaWx0 ZXI6IChhIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworQ1JFQVRFIFJVTEUgc2pfZGVsX3J1 bGUgQVMgT04gREVMRVRFIFRPIHNqCisgIERPIElOU1RFQUQKKyAgICBVUERBVEUgc2ogU0VU IGEgPSAxIFdIRVJFIGEgPSBvbGQuYTsKK0VYUExBSU4gKENPU1RTIE9GRikgREVMRVRFIEZS T00gc2o7IC0tIEEgUm93TWFyayBleGlzdHMgZm9yIHRoZSB0YWJsZSBiZWluZyBkcm9wcGVk CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBzagorICAgLT4gIFNlcSBTY2FuIG9uIHNq CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworRFJPUCBS VUxFIHNqX2RlbF9ydWxlIE9OIHNqIENBU0NBREU7CityZXNldCBlbmFibGVfaGFzaGpvaW47 CityZXNldCBlbmFibGVfbWVyZ2Vqb2luOwogLS0KIC0tIFRlc3QgaGludHMgZ2l2ZW4gb24g aW5jb3JyZWN0IGNvbHVtbiByZWZlcmVuY2VzIGFyZSB1c2VmdWwKIC0tCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDAwMWM2ZTdlYjkuLjMwNjI2ODY2 MTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xMjks MTAgKzEyOSwxMSBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdo ZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3BhcnRpdGlvbndpc2VfYWdncmVn YXRlIHwgb2ZmCiAgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiAgICAgIHwgb2ZmCiAgZW5h YmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUgICAgIHwgb24KKyBlbmFibGVfc2VsZl9qb2luX3Jl bW92YWwgICAgICAgfCBvbgogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2Nh biAgICAgICAgICAgICAgICAgfCBvbgotKDIxIHJvd3MpCisoMjIgcm93cykKIAogLS0gVGVz dCB0aGF0IHRoZSBwZ190aW1lem9uZV9uYW1lcyBhbmQgcGdfdGltZXpvbmVfYWJicmV2cyB2 aWV3cyBhcmUKIC0tIG1vcmUtb3ItbGVzcyB3b3JraW5nLiAgV2UgY2FuJ3QgdGVzdCB0aGVp ciBjb250ZW50cyBpbiBhbnkgZ3JlYXQgZGV0YWlsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQKaW5kZXggMTk1MGU2ZjI4MS4uYTczYzFm OTBjNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91cGRhdGFibGVf dmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3Zp ZXdzLm91dApAQCAtMjQ5OSwxNiArMjQ5OSwxMyBAQCBTRUxFQ1QgKiBGUk9NIHJ3X3ZpZXcx OwogKDEgcm93KQogCiBFWFBMQUlOIChjb3N0cyBvZmYpIERFTEVURSBGUk9NIHJ3X3ZpZXcx IFdIRVJFIGlkID0gMSBBTkQgc25vb3AoZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gVXBkYXRlIG9uIGJhc2VfdGJsIGJhc2VfdGJsXzEKLSAgIC0+ICBOZXN0ZWQg TG9vcAotICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYmFzZV90YmxfcGtleSBvbiBi YXNlX3RibCBiYXNlX3RibF8xCi0gICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAx KQotICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYmFzZV90YmxfcGtleSBvbiBiYXNl X3RibAotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gMSkKLSAgICAgICAgICAg ICAgIEZpbHRlcjogKChOT1QgZGVsZXRlZCkgQU5EIHNub29wKGRhdGEpKQotKDcgcm93cykK KyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVw ZGF0ZSBvbiBiYXNlX3RibAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYmFzZV90YmxfcGtl eSBvbiBiYXNlX3RibAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gMSkKKyAgICAgICAg IEZpbHRlcjogKChOT1QgZGVsZXRlZCkgQU5EIHNub29wKGRhdGEpKQorKDQgcm93cykKIAog REVMRVRFIEZST00gcndfdmlldzEgV0hFUkUgaWQgPSAxIEFORCBzbm9vcChkYXRhKTsKIE5P VElDRTogIHNub29wZWQgdmFsdWU6IFJvdyAxCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9lcXVpdmNsYXNzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xh c3Muc3FsCmluZGV4IDI0N2IwYTMxMDUuLjc3ZGQ5NjRlYmYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2VxdWl2Y2xhc3Muc3FsCkBAIC0yNTksNiArMjU5LDIyIEBAIGRyb3AgdXNlciByZWdy ZXNzX3VzZXJfZWN0ZXN0OwogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3QgKiBmcm9t IHRlbmsxIHdoZXJlIHVuaXF1ZTEgPSB1bmlxdWUxIGFuZCB1bmlxdWUyID0gdW5pcXVlMjsK IAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3MgYXJlIHByb2Nlc3NlZCBjb3JyZWN0bHkgZHVy aW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0gRGlzYWJsZSBtZXJnZSBqb2lucyBzbyB0aGF0 IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91dCBtaXNzaW5nIGNvbW11dGF0b3IuCistLSBU ZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRoZSBqb2luIGNsYXVzZSwgYmVjYXVzZSBvbmx5 IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhlIEVDLgorc2V0IGVuYWJsZV9tZXJnZWpvaW4g dG8gb2ZmOworCitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCAqIGZyb20gZWMwIG0g am9pbiBlYzAgbiBvbiBtLmZmID0gbi5mZgorICBqb2luIGVjMSBwIG9uIG0uZmYgKyBuLmZm ID0gcC5mMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBt IGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBwLmYxOjppbnQ4 ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFsaWFzMTsKKworcmVzZXQgZW5hYmxlX21lcmdlam9p bjsKKwogLS0gdGhpcyBjb3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBwcmVzZW50 CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEgd2hlcmUgdW5p cXVlMSA9IHVuaXF1ZTEgb3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4u c3FsCmluZGV4IDNlNTAzMmIwNGQuLjFhNjQzNjM4MzcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4u c3FsCkBAIC0yMzA5LDYgKzIzMDksMzY2IEBAIHNlbGVjdCAqIGZyb20KIHNlbGVjdCAqIGZy b20KICAgaW50OF90YmwgeCBqb2luIChpbnQ0X3RibCB4IGNyb3NzIGpvaW4gaW50NF90Ymwg eShmZikpIGogb24gcTEgPSBmMTsgLS0gb2sKIAorLS0KKy0tIHRlc3QgdGhhdCBzZW1pLSBv ciBpbm5lciBzZWxmLWpvaW5zIG9uIGEgdW5pcXVlIGNvbHVtbiBhcmUgcmVtb3ZlZAorLS0K KworLS0gZW5hYmxlIG9ubHkgbmVzdGxvb3AgdG8gZ2V0IG1vcmUgcHJlZGljdGFibGUgcGxh bnMKK3NldCBlbmFibGVfaGFzaGpvaW4gdG8gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4g dG8gb2ZmOworCitjcmVhdGUgdGFibGUgc2ogKGEgaW50IHVuaXF1ZSwgYiBpbnQsIGMgaW50 IHVuaXF1ZSk7CitpbnNlcnQgaW50byBzaiB2YWx1ZXMgKDEsIG51bGwsIDIpLCAobnVsbCwg MiwgbnVsbCksICgyLCAxLCAxKTsKK2FuYWx5emUgc2o7CisKKy0tIFRyaXZpYWwgc2VsZi1q b2luIGNhc2UuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC4qIGZyb20gc2ogcCwg c2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CitzZWxlY3QgcC4qIGZy b20gc2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CisKKy0t IFNlbGYtam9pbiByZW1vdmFsIHBlcmZvcm1zIGFmdGVyIGEgc3VicXVlcnkgcHVsbC11cCBw cm9jZXNzIGFuZCBjb3VsZCByZW1vdmUKKy0tIHN1Y2gga2luZCBvZiBzZWxmLWpvaW4gdG9v LiBDaGVjayB0aGlzIG9wdGlvbi4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZy b20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIHNqIHEKKwkJCQl3aGVyZSBx LmEgPSBwLmEgYW5kIHEuYiA8IDEwKTsKK3NlbGVjdCAqIGZyb20gc2ogcCB3aGVyZSBleGlz dHMgKHNlbGVjdCAqIGZyb20gc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA8IDEwKTsK KworLS0gRG9uJ3QgcmVtb3ZlIHNlbGYtam9pbiBmb3IgdGhlIGNhc2Ugb2YgZXF1YWxpdHkg b2YgdHdvIGRpZmZlcmVudCB1bmlxdWUgY29sdW1ucy4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyIHdoZXJlIHQxLmEgPSB0Mi5jIGFuZCB0MS5i IGlzIG5vdCBudWxsOworCistLSBEZWdlbmVyYXRlZCBjYXNlLgorZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0ICogZnJvbQorCShzZWxlY3QgYSBhcyB4IGZyb20gc2ogd2hlcmUgZmFs c2UpIGFzIHExLAorCShzZWxlY3QgYSBhcyB5IGZyb20gc2ogd2hlcmUgZmFsc2UpIGFzIHEy Cit3aGVyZSBxMS54ID0gcTIueTsKKworLS0gV2UgY2FuJ3QgdXNlIGEgY3Jvc3MtRUMgZ2Vu ZXJhdGVkIHNlbGYgam9pbiBxdWFsIGJlY2F1c2Ugb2YgY3VycmVudCBsb2dpYyBvZgorLS0g dGhlIGdlbmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzIHJvdXRpbmUuCitleHBsYWlu IChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxLCBzaiB0MiB3aGVyZSB0MS5hID0g dDEuYiBhbmQgdDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hOworZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIsIHNqIHQzCit3aGVyZSB0MS5hID0g dDEuYiBhbmQgdDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hCisJYW5kIHQxLmIgPSB0My5i IGFuZCB0My5iID0gdDMuYTsKKworLS0gRG91YmxlIHNlbGYtam9pbiByZW1vdmFsLgorLS0g VXNlIGEgY29uZGl0aW9uIG9uICJiICsgMSIsIG5vdCBvbiAiYiIsIGZvciB0aGUgc2Vjb25k IGpvaW4sIHNvIHRoYXQKKy0tIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBpcyBkaWZmZXJlbnQg ZnJvbSB0aGUgZmlyc3Qgb25lLCBhbmQgd2UgY2FuCistLSB0ZXN0IHRoZSBub24tZWMgY29k ZSBwYXRoLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSBqb2lu IHNqIHQyIG9uIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gdDIuYgorCWpvaW4gc2ogdDMgb24g dDIuYSA9IHQzLmEgYW5kIHQyLmIgKyAxID0gdDMuYiArIDE7CisKKy0tIHN1YnNlbGVjdCB0 aGF0IHJlZmVyZW5jZXMgdGhlIHJlbW92ZWQgcmVsYXRpb24KK2V4cGxhaW4gKGNvc3RzIG9m ZikKK3NlbGVjdCB0MS5hLCAoc2VsZWN0IGEgZnJvbSBzaiB3aGVyZSBhID0gdDIuYSBhbmQg YSA9IHQxLmEpCitmcm9tIHNqIHQxLCBzaiB0Mgord2hlcmUgdDEuYSA9IHQyLmE7CisKKy0t IHNlbGYtam9pbiB1bmRlciBvdXRlciBqb2luCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHNqIHggam9pbiBzaiB5IG9uIHguYSA9IHkuYQorbGVmdCBqb2luIGludDhf dGJsIHogb24geC5hID0gei5xMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4LmEgPSB5LmEKK2xlZnQgam9pbiBpbnQ4X3RibCB6 IG9uIHkuYSA9IHoucTE7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK1NFTEVDVCAqIEZST00g KAorICBTRUxFQ1QgdDEuKiwgdDIuYSBBUyBheCBGUk9NIHNqIHQxIEpPSU4gc2ogdDIKKyAg T04gKHQxLmEgPSB0Mi5hIEFORCB0MS5jKnQxLmMgPSB0Mi5jKzIgQU5EIHQyLmIgSVMgTlVM TCkKKykgQVMgcTEKK0xFRlQgSk9JTgorICAoU0VMRUNUIHQzLiogRlJPTSBzaiB0Mywgc2og dDQgV0hFUkUgdDMuYyA9IHQ0LmMpIEFTIHEyCitPTiBxMS5heCA9IHEyLmE7CisKKy0tIFRl c3QgdGhhdCBwbGFjZWhvbGRlcnMgYXJlIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIGpvaW4g cmVtb3ZhbAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSAodmFsdWVzICgx KSkgeAorbGVmdCBqb2luIChzZWxlY3QgY29hbGVzY2UoeS5xMSwgMSkgZnJvbSBpbnQ4X3Ri bCB5CisJcmlnaHQgam9pbiBzaiBqMSBpbm5lciBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5h CisJb24gdHJ1ZSkgegorb24gdHJ1ZTsKKworLS0gQ2hlY2sgdXBkYXRpbmcgb2YgTGF0ZXJh bCBsaW5rcyBmcm9tIHRvcC1sZXZlbCBxdWVyeSB0byB0aGUgcmVtb3ZpbmcgcmVsYXRpb24K K2V4cGxhaW4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcGdfYW0gYW0gV0hFUkUgYW0u YW1uYW1lIElOICgKKyAgU0VMRUNUIGMxLnJlbG5hbWUgQVMgcmVsbmFtZQorICBGUk9NIHBn X2NsYXNzIGMxCisgICAgSk9JTiBwZ19jbGFzcyBjMgorICAgIE9OIGMxLm9pZD1jMi5vaWQg QU5EIGMxLm9pZCA8IDEwCispOworCistLQorLS0gU0pSIGNvcm5lciBjYXNlOiB1bmlxdWVu ZXNzIG9mIGFuIGlubmVyIGlzIFtwYXJ0aWFsbHldIGRlcml2ZWQgZnJvbQorLS0gYmFzZXJl c3RyaWN0aW5mbyBjbGF1c2VzLgorLS0gWFhYOiBXZSByZWFsbHkgc2hvdWxkIGFsbG93IFNK UiBmb3IgdGhlc2UgY29ybmVyIGNhc2VzPworLS0KKworSU5TRVJUIElOVE8gc2ogVkFMVUVT ICgzLCAxLCAzKTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBEb24ndCByZW1vdmUgU0oK KwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEu YSA9IDIgQU5EIGoyLmEgPSAzOworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJF IGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDM7IC0tIFJldHVybiBvbmUg cm93CisKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gUmVtb3ZlIFNKLCBkZWZpbmUgdW5pcXVl bmVzcyBieSBhIGNvbnN0YW50CisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUg ajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKK1NFTEVDVCAqIEZST00g c2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoyLmEg PSAyOyAtLSBSZXR1cm4gb25lIHJvdworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIGoxLmEgPSAo RVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50Cisg IEFORCAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6 aW50ID0gajIuYQorOyAtLSBSZW1vdmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEgY29u c3RhbnQgZXhwcmVzc2lvbgorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGox LmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1l c3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVu dF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmEKKzsgLS0gUmV0dXJuIG9uZSBy b3cKKworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBSZW1vdmUgU0oKKwlTRUxFQ1QgKiBGUk9N IHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEg PSAxOworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iIEFO RCBqMS5hID0gMSBBTkQgajIuYSA9IDE7IC0tIFJldHVybiBubyByb3dzCisKK2V4cGxhaW4g KGNvc3RzIG9mZikgLS0gU2h1ZmZsZSBhIGNsYXVzZS4gUmVtb3ZlIFNKCisJU0VMRUNUICog RlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIDEgPSBqMS5hIEFORCBq Mi5hID0gMTsKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIu YiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAxOyAtLSBSZXR1cm4gbm8gcm93cworCistLSBT SkUgQ29ybmVyIGNhc2U6IGEgJ2EueD1hLngnIGNsYXVzZSwgaGF2ZSByZXBsYWNlZCB3aXRo ICdhLnggSVMgTk9UIE5VTEwnCistLSBhZnRlciBTSiBlbGltaW5hdGlvbiBpdCBzaG91bGRu J3QgYmUgYSBtZXJnZWpvaW5hYmxlIGNsYXVzZS4KK1NFTEVDVCB0NC4qCitGUk9NIChTRUxF Q1QgdDEuKiwgdDIuYSBBUyBhMSBGUk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIu YikgQVMgdDMKK0pPSU4gc2ogdDQgT04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQy OworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHQ0LioKK0ZST00gKFNFTEVDVCB0MS4q LCB0Mi5hIEFTIGExIEZST00gc2ogdDEsIHNqIHQyIFdIRVJFIHQxLmIgPSB0Mi5iKSBBUyB0 MworSk9JTiBzaiB0NCBPTiAodDQuYSA9IHQzLmEpIFdIRVJFIHQzLmExID0gNDIKKzsgLS0g U0pzIG11c3QgYmUgcmVtb3ZlZC4KKworLS0gRnVuY3Rpb25hbCBpbmRleAorQ1JFQVRFIFVO SVFVRSBJTkRFWCBzal9mbl9pZHggT04gc2ooKGEgKiBhKSk7CitleHBsYWluIChjb3N0cyBv ZmYpIC0tIFJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUg ajEuYiA9IGoyLmIgQU5EIGoxLmEqajEuYSA9IDEgQU5EIGoyLmEqajIuYSA9IDE7CitleHBs YWluIChjb3N0cyBvZmYpIC0tIERvbid0IHJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00gc2og ajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEqajEuYSA9IDEgQU5EIGoy LmEqajIuYSA9IDI7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGox LCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJB Q1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQg KEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9 IChqMi5hKmoyLmEpCis7IC0tIFJlc3RyaWN0aW9uIGNvbnRhaW5zIGV4cHJlc3Npb25zIGlu IGJvdGggc2lkZXMsIFJlbW92ZSBTSi4KK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitX SEVSRSBqMS5iID0gajIuYgorICBBTkQgKGoxLmEqajEuYSkgPSAoRVhUUkFDVChET1cgRlJP TSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50CisgIEFORCAoRVhUUkFDVChE T1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50ID0gKGoyLmEqajIu YSkKKzsgLS0gRW1wdHkgc2V0IG9mIHJvd3Mgc2hvdWxkIGJlIHJldHVybmVkCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9 IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFO RCAocmFuZG9tKCkvMyArIDMpOjppbnQgPSAoajIuYSpqMi5hKQorOyAtLSBSZXN0cmljdGlv biBjb250YWlucyB2b2xhdGlsZSBmdW5jdGlvbiAtIGRpc2FibGUgU0pSIGZlYXR1cmUuCitT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChq MS5hKmoxLmMvMykgPSAocmFuZG9tKCkvMyArIDMpOjppbnQKKyAgQU5EIChyYW5kb20oKS8z ICsgMyk6OmludCA9IChqMi5hKmoyLmMvMykKKzsgLS0gUmV0dXJuIG9uZSByb3cKKworLS0g TXVsdGlwbGUgZmlsdGVycworQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeDEgT04g c2ooYSxiLGMpOworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBSZW1vdmUgU0oKKwlTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBB TkQgajEuYyA9IDMgQU5EIGoyLmEgPSAyIEFORCAzID0gajIuYzsKK2V4cGxhaW4gKGNvc3Rz IG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIK KwlXSEVSRSBqMS5iID0gajIuYiBBTkQgMiA9IGoxLmEgQU5EIGoxLmMgPSAzIEFORCBqMi5h ID0gMSBBTkQgMyA9IGoyLmM7CisKK0NSRUFURSBVTklRVUUgSU5ERVggc2pfdGVtcF9pZHgg T04gc2ooYSxiKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikgLS0gRG9uJ3QgcmVtb3ZlIFNKCisJ U0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEg PSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKSAtLSBEb24ndCByZW1vdmUgU0oKKwlTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgMiA9IGoyLmE7Citl eHBsYWluIChjb3N0cyBvZmYpIC0tIERvbid0IHJlbW92ZSBTSgorCVNFTEVDVCAqIEZST00g c2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAoajEuYSA9IDEgT1IgajIuYSA9 IDEpOworRFJPUCBJTkRFWCBzal9mbl9pZHgsIHNqX3RlbXBfaWR4MSwgc2pfdGVtcF9pZHg7 CisKKy0tIFRlc3QgdGhhdCBPUiBwcmVkaWNhdGVkIGFyZSB1cGRhdGVkIGNvcnJlY3RseSBh ZnRlciBqb2luIHJlbW92YWwKK0NSRUFURSBUQUJMRSB0YWJfd2l0aF9mbGFnICggaWQgSU5U IFBSSU1BUlkgS0VZLCBpc19mbGFnIFNNQUxMSU5UKTsKK0NSRUFURSBJTkRFWCBpZHhfdGVz dF9pc19mbGFnIE9OIHRhYl93aXRoX2ZsYWcgKGlzX2ZsYWcpOworZXhwbGFpbiAoY29zdHMg b2ZmKQorU0VMRUNUIENPVU5UKCopIEZST00gdGFiX3dpdGhfZmxhZworV0hFUkUKKwkoaXNf ZmxhZyBJUyBOVUxMIE9SIGlzX2ZsYWcgPSAwKQorCUFORCBpZCBJTiAoU0VMRUNUIGlkIEZS T00gdGFiX3dpdGhfZmxhZyBXSEVSRSBpZCBJTiAoMiwgMykpOworRFJPUCBUQUJMRSB0YWJf d2l0aF9mbGFnOworCistLSBIQVZJTkcgY2xhdXNlCitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgcC5iIGZyb20gc2ogcCBqb2luIHNqIHEgb24gcC5hID0gcS5hIGdyb3VwIGJ5IHAu YiBoYXZpbmcgc3VtKHAuYSkgPSAxOworCistLSB1cGRhdGUgbGF0ZXJhbCByZWZlcmVuY2Vz IGFuZCByYW5nZSB0YWJsZSBlbnRyeSByZWZlcmVuY2UKK2V4cGxhaW4gKHZlcmJvc2UsIGNv c3RzIG9mZikKK3NlbGVjdCAxIGZyb20gKHNlbGVjdCB4LiogZnJvbSBzaiB4LCBzaiB5IHdo ZXJlIHguYSA9IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSwgcS5hKSBn cyhpKTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSAo c2VsZWN0IHkuKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAorICBsYXRl cmFsIGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworCistLSBUZXN0IHRoYXQgYSBu b24tRUMtZGVyaXZlZCBqb2luIGNsYXVzZSBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LiBVc2Ug YW4KKy0tIG91dGVyIGpvaW4gc28gdGhhdCB3ZSBjYW4ndCBmb3JtIGFuIEVDLgorZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHNqIHAgam9pbiBzaiBxIG9uIHAuYSA9IHEu YQorICBsZWZ0IGpvaW4gc2ogciBvbiBwLmEgKyBxLmEgPSByLmE7CisKKy0tIEZJWE1FIHRo aXMgY29uc3RhbnQgZmFsc2UgZmlsdGVyIGRvZXNuJ3QgbG9vayBnb29kLiBTaG91bGQgd2Ug bWVyZ2UKKy0tIGVxdWl2YWxlbmNlIGNsYXNzZXM/CitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcC5hID0gcS5hIGFuZCBwLmIgPSAxIGFu ZCBxLmIgPSAyOworCistLSBDaGVjayB0aGF0IGF0dHJfbmVlZGVkIGlzIHVwZGF0ZWQgY29y cmVjdGx5IGFmdGVyIHNlbGYtam9pbiByZW1vdmFsLiBJbiB0aGlzCistLSB0ZXN0LCB0aGUg am9pbiBvZiBqMSB3aXRoIGoyIGlzIHJlbW92ZWQuIGsxLmIgaXMgcmVxdWlyZWQgYXQgZWl0 aGVyIGoxIG9yIGoyLgorLS0gSWYgdGhpcyBpbmZvIGlzIGxvc3QsIGpvaW4gdGFyZ2V0bGlz dCBmb3IgKGsxLCBrMikgd2lsbCBub3QgY29udGFpbiBrMS5iLgorLS0gVXNlIGluZGV4IHNj YW4gZm9yIGsxIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0ICdiJyBmcm9tIHBoeXNpY2FsIHRsaXN0 IHVzZWQgZm9yCistLSBzZXFzY2FuLiBBbHNvIGRpc2FibGUgcmVvcmRlcmluZyBvZiBqb2lu cyBiZWNhdXNlIHRoaXMgdGVzdCBkZXBlbmRzIG9uIGEKKy0tIHBhcnRpY3VsYXIgam9pbiB0 cmVlLgorY3JlYXRlIHRhYmxlIHNrIChhIGludCwgYiBpbnQpOworY3JlYXRlIGluZGV4IG9u IHNrKGEpOworc2V0IGpvaW5fY29sbGFwc2VfbGltaXQgdG8gMTsKK3NldCBlbmFibGVfc2Vx c2NhbiB0byBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwkoc2sg azEgam9pbiBzayBrMiBvbiBrMS5hID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNqIGoy IG9uIGoxLmEgPSBqMi5hKSBvbiBqMS5iID0gazEuYjsKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0IDEgZnJvbQorCShzayBrMSBqb2luIHNrIGsyIG9uIGsxLmEgPSBrMi5hKQorCWpv aW4gKHNqIGoxIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEpIG9uIGoyLmIgPSBrMS5iOwor cmVzZXQgam9pbl9jb2xsYXBzZV9saW1pdDsKK3Jlc2V0IGVuYWJsZV9zZXFzY2FuOworCitz ZXQgc2VsZl9qb2luX3NlYXJjaF9saW1pdCB0byAxOworZXhwbGFpbiAoY29zdHMgb2ZmKSAt LSBObyBvbmUgc2VsZiBqb2luIHNob3VsZCBiZSBjb2xsYXBzZWQKKyAgc2VsZWN0IGoxLiog ZnJvbSBzaiBqMSwgc2ogajIsIHNqIGozIHdoZXJlIChqMS5hID0gajIuYSkgYW5kIChqMi5h ID0gajMuYSk7CitzZXQgc2VsZl9qb2luX3NlYXJjaF9saW1pdCB0byAyOworZXhwbGFpbiAo Y29zdHMgb2ZmKSAtLSBDb2xsYXBzZSBvbmUgc2VsZiBqb2luCisgIHNlbGVjdCBqMS4qIGZy b20gc2ogajEsIHNqIGoyLCBzaiBqMyB3aGVyZSAoajEuYSA9IGoyLmEpIGFuZCAoajIuYSA9 IGozLmEpOworc2V0IHNlbGZfam9pbl9zZWFyY2hfbGltaXQgdG8gMzsKK2V4cGxhaW4gKGNv c3RzIG9mZikgLS0gQ29sbGFwc2UgYm90aCBzZWxmIGpvaW5zCisgIHNlbGVjdCBqMS4qIGZy b20gc2ogajEsIHNqIGoyLCBzaiBqMyB3aGVyZSAoajEuYSA9IGoyLmEpIGFuZCAoajIuYSA9 IGozLmEpOworcmVzZXQgc2VsZl9qb2luX3NlYXJjaF9saW1pdDsKKworLS0gQ2hlY2sgdGhh dCBjbGF1c2VzIGZyb20gdGhlIGpvaW4gZmlsdGVyIGxpc3QgaXMgbm90IGxvc3Qgb24gdGhl IHNlbGYtam9pbiByZW1vdmFsCitDUkVBVEUgVEFCTEUgZW1wMSAoIGlkIFNFUklBTCBQUklN QVJZIEtFWSBOT1QgTlVMTCwgY29kZSBpbnQpOworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMg b2ZmKQorU0VMRUNUICogRlJPTSBlbXAxIGUxLCBlbXAxIGUyIFdIRVJFIGUxLmlkID0gZTIu aWQgQU5EIGUyLmNvZGUgPD4gZTEuY29kZTsKKworLS0gV2UgY2FuIHJlbW92ZSB0aGUgam9p biBldmVuIGlmIHdlIGZpbmQgdGhlIGpvaW4gY2FuJ3QgZHVwbGljYXRlIHJvd3MgYW5kCist LSB0aGUgYmFzZSBxdWFscyBvZiBlYWNoIHNpZGUgYXJlIGRpZmZlcmVudC4gIEluIHRoZSBm b2xsb3dpbmcgY2FzZSB3ZSBlbmQgdXAKKy0tIG1vdmluZyBxdWFscyBvdmVyIHRvIHMxIHRv IG1ha2UgaXQgc28gaXQgY2FuJ3QgbWF0Y2ggYW55IHJvd3MuCitjcmVhdGUgdGFibGUgc2wo YSBpbnQsIGIgaW50LCBjIGludCk7CitjcmVhdGUgdW5pcXVlIGluZGV4IG9uIHNsKGEsIGIp OwordmFjdXVtIGFuYWx5emUgc2w7CisKKy0tIEJvdGggc2lkZXMgYXJlIHVuaXF1ZSwgYnV0 IGJhc2UgcXVhbHMgYXJlIGRpZmZlcmVudAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0 ICogZnJvbSBzbCB0MSwgc2wgdDIgd2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFu ZCB0Mi5iID0gMjsKKworLS0gQ2hlY2sgTnVsbFRlc3QgaW4gYmFzZXJlc3RyaWN0aW5mbyBs aXN0CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0Mgor d2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMgorICBhbmQgdDEu YyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBhbmQgdDIuYiBJUyBOT1Qg TlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJUyBOT1QgTlVMTCBhbmQg dDIuYSBJUyBOT1QgTlVMTDsKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVj dCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVyZSB0MS5iID0gdDIuYiBhbmQgdDIuYSA9IDMg YW5kIHQxLmEgPSAzCisgIGFuZCB0MS5jIElTIE5PVCBOVUxMIGFuZCB0Mi5jIElTIE5PVCBO VUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxMIGFuZCB0MS5iIElTIE5PVCBOVUxMCisgIGFu ZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5hIElTIE5PVCBOVUxMOworCistLSBKb2luIHF1 YWwgaXNuJ3QgbWVyZ2Vqb2luYWJsZSwgYnV0IGlubmVyIGlzIHVuaXF1ZS4KK2V4cGxhaW4g KENPU1RTIE9GRikKK1NFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNqIG4yIFdIRVJFIG4xLmEg PD4gbjIuYSBBTkQgbjIuYSA9IDE7CitleHBsYWluIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NCisJKFNFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIu YSkgcTAsIHNsCitXSEVSRSBxMC5hID0gMTsKKworLS0KKy0tLS0gT25seSBvbmUgc2lkZSBp cyB1bnFpdWUKKy0tc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIgd2hlcmUgdDEuYSA9IHQy LmEgYW5kIHQxLmIgPSAxOworLS1zZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0MiB3aGVyZSB0 MS5hID0gdDIuYSBhbmQgdDIuYiA9IDE7CistLQorLS0tLSBTZXZlcmFsIHVuaXF1ZXMgaW5k ZXhlcyBtYXRjaCwgYW5kIHdlIHNlbGVjdCBhIGRpZmZlcmVudCBvbmUKKy0tLS0gZm9yIGVh Y2ggc2lkZSwgc28gdGhlIGpvaW4gaXMgbm90IHJlbW92ZWQKKy0tY3JlYXRlIHRhYmxlIHNt KGEgaW50IHVuaXF1ZSwgYiBpbnQgdW5pcXVlLCBjIGludCB1bmlxdWUpOworLS1leHBsYWlu IChjb3N0cyBvZmYpCistLXNlbGVjdCAqIGZyb20gc20gbSwgc20gbiB3aGVyZSBtLmEgPSBu LmIgYW5kIG0uYyA9IG4uYzsKKy0tZXhwbGFpbiAoY29zdHMgb2ZmKQorLS1zZWxlY3QgKiBm cm9tIHNtIG0sIHNtIG4gd2hlcmUgbS5hID0gbi5jIGFuZCBtLmIgPSBuLmI7CistLWV4cGxh aW4gKGNvc3RzIG9mZikKKy0tc2VsZWN0ICogZnJvbSBzbSBtLCBzbSBuIHdoZXJlIG0uYyA9 IG4uYiBhbmQgbS5hID0gbi5hOworCistLSBDaGVjayBvcHRpbWl6YXRpb24gZGlzYWJsaW5n IGlmIGl0IHdpbGwgdmlvbGF0ZSBzcGVjaWFsIGpvaW4gY29uZGl0aW9ucy4KKy0tIFR3byBp ZGVudGljYWwgam9pbmVkIHJlbGF0aW9ucyBzYXRpc2ZpZXMgc2VsZiBqb2luIHJlbW92YWwg Y29uZGl0aW9ucyBidXQKKy0tIHN0YXkgaW4gZGlmZmVyZW50IHNwZWNpYWwgam9pbiBpbmZv cy4KK0NSRUFURSBUQUJMRSBzal90MSAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVEFC TEUgc2pfdDIgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNqX3QzIChpZCBz ZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90NCAoaWQgc2VyaWFsLCBhIGludCk7 CisKK0NSRUFURSBVTklRVUUgSU5ERVggT04gc2pfdDMgVVNJTkcgYnRyZWUgKGEsaWQpOwor Q1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MiBVU0lORyBidHJlZSAoaWQpOworCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqX3QxCitKT0lOICgKKwlTRUxFQ1Qg c2pfdDIuaWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVD VCBUUlVFIEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlk ID0gc2pfdDIuaWQKKwkJKQorCSkgdDJ0M3Q0CitPTiBzal90MS5pZCA9IHQydDN0NC5pZAor Sk9JTiAoCisJU0VMRUNUIHNqX3QyLmlkIEFTIGlkIEZST00gc2pfdDIKKwlXSEVSRSBFWElT VFMKKwkJKAorCQlTRUxFQ1QgVFJVRSBGUk9NIHNqX3QzLHNqX3Q0IFdIRVJFIHNqX3QzLmEg PSAxIEFORCBzal90My5pZCA9IHNqX3QyLmlkCisJCSkKKwkpIF90MnQzdDQKK09OIHNqX3Qx LmlkID0gX3QydDN0NC5pZDsKKworLS0KKy0tIFRlc3QgUm93TWFya3MtcmVsYXRlZCBjb2Rl CistLQorCistLSBUT0RPOiBXaHkgdGhpcyBzZWxlY3QgcmV0dXJucyB0d28gY29waWVzIG9m IGN0aWQgZmllbGQ/IFNob3VsZCB3ZSBmaXggaXQ/CitFWFBMQUlOIChDT1NUUyBPRkYpIC0t IEJvdGggc2lkZXMgaGF2ZSBleHBsaWNpdCBMb2NrUm93cyBtYXJrcworU0VMRUNUIGExLmEg RlJPTSBzaiBhMSxzaiBhMiBXSEVSRSAoYTEuYT1hMi5hKSBGT1IgVVBEQVRFOworCitFWFBM QUlOIChDT1NUUyBPRkYpIC0tIEEgUm93TWFyayBleGlzdHMgZm9yIHRoZSB0YWJsZSBiZWlu ZyBrZXB0CitVUERBVEUgc2ogc3EgU0VUIGIgPSAxIEZST00gc2ogYXMgc3ogV0hFUkUgc3Eu YSA9IHN6LmE7CisKK0NSRUFURSBSVUxFIHNqX2RlbF9ydWxlIEFTIE9OIERFTEVURSBUTyBz agorICBETyBJTlNURUFECisgICAgVVBEQVRFIHNqIFNFVCBhID0gMSBXSEVSRSBhID0gb2xk LmE7CitFWFBMQUlOIChDT1NUUyBPRkYpIERFTEVURSBGUk9NIHNqOyAtLSBBIFJvd01hcmsg ZXhpc3RzIGZvciB0aGUgdGFibGUgYmVpbmcgZHJvcHBlZAorRFJPUCBSVUxFIHNqX2RlbF9y dWxlIE9OIHNqIENBU0NBREU7CisKK3Jlc2V0IGVuYWJsZV9oYXNoam9pbjsKK3Jlc2V0IGVu YWJsZV9tZXJnZWpvaW47CisKIC0tCiAtLSBUZXN0IGhpbnRzIGdpdmVuIG9uIGluY29ycmVj dCBjb2x1bW4gcmVmZXJlbmNlcyBhcmUgdXNlZnVsCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCBlOTQxZmI2YzgyLi5kY2FlMmY1OThjIDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtMzY2LDYgKzM2Niw3IEBAIENhdGFsb2dJZAogQ2F0YWxvZ0lk TWFwRW50cnkKIENhdGFsb2dJbmRleFN0YXRlCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0CitS ZXBsYWNlVmFybm9Db250ZXh0CiBDaGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2tw b2ludFN0YXRzRGF0YQpAQCAtMzgyNCw2ICszODI1LDcgQEAgdW5pY29kZVN0eWxlQ29sdW1u Rm9ybWF0CiB1bmljb2RlU3R5bGVGb3JtYXQKIHVuaWNvZGVTdHlsZVJvd0Zvcm1hdAogdW5p Y29kZV9saW5lc3R5bGUKK1VuaXF1ZVJlbEluZm8KIHVuaXRfY29udmVyc2lvbgogdW5sb2dn ZWRfcmVsYXRpb25fZW50cnkKIHV0Zl9sb2NhbF9jb252ZXJzaW9uX2Z1bmMKLS0gCjIuNDEu MAoK --------------F35pOc4VlVuDigTZJkmbC5q0--